From a65a7e704a90d2ca4e682c82d8a708900dda04ca Mon Sep 17 00:00:00 2001 From: agrigora Date: Fri, 17 Jan 2014 11:30:15 +0100 Subject: [PATCH] end-of-line normalization --- .gitattributes | 4 + ACORDE/AliACORDEQADataMakerRec.cxx | 912 +- ACORDE/AliACORDERawReader.cxx | 2 +- ACORDE/AliACORDERawStream.cxx | 408 +- ACORDE/AliACORDERawStream.h | 114 +- ACORDE/AliACORDEReconstructor.cxx | 320 +- ACORDE/MakeACORDEFullMisAlignment.C | 186 +- ACORDE/MakeACORDEResMisAlignment.C | 188 +- ACORDE/MakeACORDEZeroMisAlignment.C | 170 +- ACORDE/Survey_1014872_ACORDE.txt | 328 +- .../Local/AliAnalysisTaskAcorde.h | 168 +- ANALYSIS/AliAnalysisTaskPIDCombined.cxx | 684 +- ANALYSIS/AliAnalysisTaskPIDCombined.h | 150 +- ANALYSIS/AliAnalysisTaskPIDqa.h | 220 +- ANALYSIS/AliAnalysisTaskPhiCorr.h | 80 +- ANALYSIS/AliESDpidCuts.cxx | 834 +- ANALYSIS/AliESDpidCuts.h | 242 +- ANALYSIS/AliESDv0KineCuts.cxx | 2194 ++-- ANALYSIS/AliESDv0KineCuts.h | 382 +- ANALYSIS/BadChunkFilter/ProcessBadChunks02.C | 352 +- ANALYSIS/EventMixing/AliAnalysisTaskMixInfo.h | 120 +- .../TenderSupplies/AliHMPIDTenderSupply.cxx | 206 +- .../TenderSupplies/AliHMPIDTenderSupply.h | 80 +- ANALYSIS/TenderSupplies/AliT0TenderSupply.cxx | 376 +- ANALYSIS/TenderSupplies/AliT0TenderSupply.h | 88 +- ANALYSIS/TenderSupplies/AliTRDTenderSupply.h | 2 +- .../macros/PhysSelQA/AliPSQAVisualization.cxx | 1196 +- .../macros/PhysSelQA/AliPSQAVisualization.h | 350 +- ANALYSIS/macros/PhysSelQA/PSQA.C | 114 +- ANALYSIS/macros/PhysSelQA/PSQAV.C | 114 +- .../macros/PhysSelQA/RunFillEvent_list.list | 2710 ++-- ANALYSIS/macros/recPass0.C | 86 +- EVE/hlt-macros/od.C | 802 +- EVE/hlt-macros/off.C | 852 +- EVGEN/AliGenITSULib.cxx | 262 +- EVGEN/AliGenITSULib.h | 128 +- ...huttle_GRP_run_number_testShuttle_data.txt | 168 +- HLT/CALO/AliHLTCaloClusterizer.cxx | 760 +- HLT/CALO/AliHLTCaloClusterizer.h | 512 +- HLT/CALO/AliHLTCaloDigitMaker.h | 402 +- HLT/EVE/AliHLTEveMuon.cxx | 750 +- HLT/EVE/AliHLTEveMuon.h | 148 +- HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx | 832 +- HLT/QA/tasks/AliAnalysisTaskHLTCalo.h | 200 +- HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx | 174 +- HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h | 106 +- HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx | 590 +- HLT/QA/tasks/AliAnalysisTaskHLTPHOS.h | 134 +- HLT/QA/tasks/AliAnalysisTaskHLTTPC.cxx | 1024 +- HLT/QA/tasks/AliAnalysisTaskHLTTPC.h | 238 +- .../tracking-ca/cagpu/gpu_tracker_install.txt | 46 +- HLT/trigger/tasks/AliAnalysisTasktrigger.h | 304 +- ITS/AliITSAlignMille2Module.cxx | 2446 ++-- ITS/AliITSAlignMille2Module.h | 362 +- ITS/AliITSAlignMilleFull.conf | 4438 +++---- ITS/AliITSCorrMap2DSDD.cxx | 158 +- ITS/AliITSQASDDDataMakerSim.cxx | 784 +- ITS/AliITSQASDDDataMakerSim.h | 124 +- ITS/AliITSQASSDDataMakerRec.cxx | 3436 +++--- ITS/AliITSV0Finder.cxx | 2294 ++-- ITS/GetGainModuleLevel.C | 638 +- ITS/UPGRADE/KMCDetector.cxx | 5866 ++++----- ITS/UPGRADE/KMCDetector.h | 1100 +- ITS/doc/doc_itsgeo.html | 368 +- ITS/patchSSDBadChannelsMap.C | 772 +- LHAPDF/PDFsets/MRST2004qed.LHgrid | 3552 +++--- LHAPDF/PDFsets/MRST2007lomod.LHgrid | 7152 +++++------ LHAPDF/PDFsets/MRSTMCal.LHgrid | 7148 +++++------ LHAPDF/PDFsets/PDFsets.index | 8032 ++++++------ LHAPDF/lhapdf5.5.1/src/eps09.f | 728 +- MFT/runReconstruction.C | 112 +- MFT/runSimulation.C | 56 +- OADB/AliOADBCentrality.cxx | 182 +- PHOS/PHOSPEDda.cxx | 940 +- PHOS/data/Survey_1053236_PHOS.txt | 2750 ++--- PHOS/data/Survey_922320_PHOS.txt | 956 +- .../AlignmentDB/MakePHOSAlignmentModule2.C | 308 +- PMD/AliPMDOfflineCalibTask.h | 110 +- PWG/muondep/AccEffTemplates/CheckESD.C | 98 +- PWG/muondep/AccEffTemplates/simrun.C | 230 +- .../DPhi/AliAnalysisTaskContMC.cxx | 386 +- .../Correlations/DPhi/AliAnalysisTaskContMC.h | 94 +- PWGCF/Correlations/JCORRAN/AliJBaseTrack.cxx | 182 +- .../3particlecorrelations/AddTask_DiHadron.C | 448 +- .../dphicorrelations/AddTaskPhiCorrelations.C | 208 +- .../AddTaskPhiCorrelationsQA.C | 64 +- .../underlyingevent/AddTaskLeadingTrackUE.C | 124 +- .../AliAnalysisTaskEventMixingBF.h | 486 +- .../AliAnalysisTaskToyModel.cxx | 2340 ++-- .../AliAnalysisTaskToyModel.h | 534 +- .../AliAnalysisTaskTriggeredBF.cxx | 2228 ++-- .../AliAnalysisTaskTriggeredBF.h | 516 +- .../AliAnalysisTaskChargeFluctuations.h | 108 +- .../AliEbyEFluctuationAnalysisTask.h | 156 +- .../AliEbyEFluctuationAnalysisTaskTrain.cxx | 530 +- .../AliEbyEFluctuationAnalysisTaskTrain.h | 184 +- PWGCF/EBYE/LRC/AliLRCBase.h | 212 +- PWGCF/EBYE/LRC/Test/TestNN.C | 80 +- PWGCF/EBYE/LRC/Test/TestPtN.C | 84 +- PWGCF/EBYE/LRC/Test/TestPtPt.C | 92 +- .../AliAnalysisTaskPtFluc.h | 172 +- .../AliAnalysisTaskPtFlucPbPb.h | 268 +- .../AddAliEbyEParticleRatioFluctuationTask.C | 268 +- .../task/AliAnalysisTaskPIDFluctuation.h | 276 +- .../AliEbyEParticleRatioFluctuationTask.h | 176 +- .../macros/AddTaskBalanceCentralityTrain.C | 406 +- PWGCF/EBYE/macros/AddTaskBalanceEventMixing.C | 372 +- .../EBYE/macros/AddTaskBalanceFunctionInpp.C | 170 +- ...TaskBalanceFunctionInppMultiplicityTrain.C | 194 +- .../macros/AddTaskBalanceMCCentralityTrain.C | 282 +- PWGCF/EBYE/macros/AddTaskBalanceTriggered.C | 342 +- .../macros/configBalanceFunctionAnalysis.C | 136 +- ...configBalanceFunctionAnalysisEventMixing.C | 134 +- PWGCF/EBYE/macros/runBalanceFunction.C | 908 +- PWGCF/EBYE/macros/runBalanceFunctionInpp.C | 448 +- PWGCF/EBYE/macros/runBalanceFunctionMC.C | 524 +- .../EBYE/macros/runBalanceFunctionToyModel.C | 398 +- .../AddTask_Asako_LMEEPbPb2011AOD.C | 360 +- .../AliAnalysisTaskEMCALCaloTrackCorr.h | 1034 +- PWGGA/GammaConv/AliAnaConvCorrPhoton.h | 94 +- PWGGA/GammaConv/AliAnaConvIsolation.h | 256 +- .../AliAnalysisTaskGCPartToPWG4Part.h | 166 +- .../CaloCellQA/AliAnalysisTaskCaloCellsQA.h | 126 +- .../PHOSCalib/AliAnalysisTaskPi0Calib.h | 142 +- .../PHOS_PbPb_MC/AliPHOSHijingEfficiency.h | 196 +- .../AliAnalysisTaskPi0DiffEfficiency.h | 166 +- .../PHOS_embedding/AliPHOSEmbedding.h | 186 +- PWGGA/PHOSTasks/PHOS_embedding/simrun.C | 32 +- PWGHF/hfe/macros/CorrectForEfficiencypptrd.C | 1136 +- .../hfe/macros/configs/PbPb/ConfigHFECalSys.C | 138 +- .../configs/PbPb/ConfigHFEElecHadronCorl.C | 136 +- .../PbPb/ConfigHFEElecHadronCorrelPbPb.C | 220 +- .../hfe/macros/configs/PbPb/ConfigHFEElecV2.C | 120 +- .../configs/PbPb/ConfigHFE_FLOW_TPCEMCal_EP.C | 120 +- .../AliAnalysisTaskMEVertexingHFTest.C | 130 +- .../AliAnalysisTaskSEImproveITS.cxx | 1328 +- .../AliAnalysisTaskSESelectHF4Prong.h | 6 +- .../AliAnalysisTaskSEVertexingHFTest.C | 252 +- PWGHF/vertexingHF/AliCFVertexingHF3Prong.h | 142 +- PWGHF/vertexingHF/AliRDHFCutsD0toKpipipi.h | 78 +- PWGHF/vertexingHF/macros/AddTaskCompareHF.C | 84 +- PWGHF/vertexingHF/macros/AddTaskSelectHF.C | 72 +- .../ConfigVertexingHF_ITSUpgrade_wPID.C | 438 +- PWGJE/AliAnalysisTaskPartonDisc.h | 612 +- PWGJE/AliPWG4CosmicCandidates.h | 138 +- ...AnalysisTaskCheckSingleTrackJetRejection.h | 224 +- .../AliAnalysisTaskJetHadronCorrelation.cxx | 2250 ++-- .../AliAnalysisTaskJetHadronCorrelation.h | 354 +- .../AddTaskCheckSingleTrackJetRejection.C | 112 +- PWGJE/macros/AddTaskDiJets.C | 88 +- PWGJE/macros/AddTaskJetHadronCorrelation.C | 120 +- PWGJE/macros/AddTaskJetServices.C | 204 +- PWGJE/macros/AddTaskJetSpectrum2.C | 468 +- PWGJE/macros/AddTaskKMeans.C | 96 +- PWGJE/macros/AnalysisTrainCAF.C | 796 +- PWGLF/FORWARD/photons/AliAnalysisTaskPMD.h | 128 +- PWGLF/FORWARD/photons/AliAnalysisTaskPMDSim.h | 162 +- .../AliProtonAbsorptionCorrection.h | 164 +- .../AliProtonCorrectionAnalysisTask.cxx | 506 +- .../AliProtonCorrectionAnalysisTask.h | 118 +- .../AliProtonFeedDownAnalysis.h | 172 +- .../AliProtonFeedDownAnalysisTask.cxx | 342 +- .../AliProtonFeedDownAnalysisTask.h | 92 +- .../AliProtonSpectraCorrection.h | 168 +- .../configProtonAnalysisBaseObject.C | 276 +- .../dNdPt/AliPtResolAnalysis.cxx | 664 +- .../dNdPt/AliPtResolAnalysisPbPb.cxx | 698 +- .../SPECTRA/ChargedHadrons/dNdPt/AlidNdPt.cxx | 276 +- .../dNdPt/AlidNdPtAcceptanceCuts.h | 194 +- .../ChargedHadrons/dNdPt/AlidNdPtAnalysis.cxx | 5804 ++++----- .../dNdPt/AlidNdPtAnalysispPb.cxx | 6342 +++++----- .../dNdPt/AlidNdPtBackgroundCuts.h | 158 +- .../dNdPt/AlidNdPtCorrection.cxx | 5298 ++++---- .../dNdPt/AlidNdPtCutAnalysis.cxx | 1792 +-- .../dNdPt/AlidNdPtCutAnalysisPbPb.cxx | 2826 ++--- .../dNdPt/AlidNdPtEfficiency.cxx | 1132 +- .../ChargedHadrons/dNdPt/AlidNdPtEventCuts.h | 232 +- .../ChargedHadrons/dNdPt/AlidNdPtTask.cxx | 434 +- .../dNdPt/AlidNdPtTrackDumpTask.cxx | 4150 +++---- .../IdentifiedHighPt/grid/ListDirectories.h | 102 +- PWGLF/SPECTRA/Kinks/macros/AddTaskKink.C | 98 +- PWGLF/SPECTRA/Kinks/macros/AddTaskKinkMC.C | 98 +- .../PiKaPr/HMPID/AliHMPIDAnalysisTask.cxx | 944 +- .../PiKaPr/HMPID/AliHMPIDAnalysisTask.h | 164 +- .../SPECTRA/PiKaPr/HMPID/AnalysisTrainHMPID.C | 2188 ++-- .../TPCTOF/AddTaskCombinedHadronSpectra.C | 174 +- .../TestAOD/AliAnalysisTaskSpectraAOD.h | 138 +- .../TestAOD/AliAnalysisTaskSpectraBoth.h | 158 +- PWGLF/SPECTRA/PiKaPr/TestAOD/runGridBoth.C | 4 +- .../macros/runProofLambdaOverK0sJets.C | 150 +- .../LambdaK0PbPb/MainStreamAnalysis/Makefile | 164 +- PWGPP/AliAnalysisTaskVtXY.h | 84 +- PWGPP/AliFilteredTreeAcceptanceCuts.h | 194 +- PWGPP/AliFilteredTreeEventCuts.h | 260 +- PWGPP/HMPID/AddTaskHmpidQA.C | 78 +- PWGPP/PilotTrain/AddTaskVZEROQA.C | 82 +- PWGPP/PilotTrain/AddTaskVZEROQATrig.C | 82 +- PWGPP/TPC/AliComparisonObject.h | 118 +- PWGPP/TPC/AliMCInfoCuts.h | 194 +- PWGPP/TPC/AliPerformanceObject.h | 292 +- PWGPP/TPC/AliPerformanceTask.cxx | 782 +- PWGPP/TRD/AliTRDinfoGen.cxx | 2088 ++-- PWGPP/TRD/AliTRDinfoGen.h | 298 +- PWGPP/TRD/AliTRDrecoTask.cxx | 1840 +-- PWGPP/TRD/AliTRDrecoTask.h | 314 +- PWGPP/cosmic/AliAnalysisTaskCosmic.h | 162 +- PWGPP/macros/AddTrainPerformanceTRD.C | 408 +- PWGPP/macros/PhysSel/QALHC11c_QA69.h | 240 +- PWGPP/macros/PlotImpParResVsPt.C | 556 +- PWGPP/macros/rawmerge.C | 186 +- PYTHIA6/QPYTHIA/qgrid | 10170 ++++++++-------- PYTHIA8/pythia8170/examples/softsusy.spc | 302 +- PYTHIA8/pythia8170/htmldoc/pythia.css | 154 +- PYTHIA8/pythia8170/phpdoc/pythia.css | 154 +- PYTHIA8/pythia8175/examples/softsusy.spc | 302 +- PYTHIA8/pythia8175/htmldoc/pythia.css | 154 +- PYTHIA8/pythia8175/include/History.h | 1550 +-- PYTHIA8/pythia8175/phpdoc/pythia.css | 154 +- RAW/AliCaloFastAltroFitv0.h | 224 +- STEER/AOD/AliAODPWG4Particle.cxx | 382 +- STEER/CDB/AliCDBHandler.cxx | 394 +- STEER/ESD/AliESDACORDE.cxx | 152 +- STEER/ESD/AliESDACORDE.h | 76 +- STEER/ESD/AliTriggerScalersESD.cxx | 256 +- STEER/ESD/AliTriggerScalersESD.h | 130 +- STEER/ESD/AliTriggerScalersRecordESD.cxx | 222 +- STEER/ESD/AliTriggerScalersRecordESD.h | 102 +- STEER/STEER/AliGRPObject.h | 462 +- STEER/STEER/AliLHCData.cxx | 2372 ++-- STEER/STEER/AliLHCData.h | 750 +- T0/AliT0CalibAnalysisTask.h | 212 +- T0/AliT0CalibOffsetChannelsTask.cxx | 434 +- T0/AliT0CalibOffsetChannelsTask.h | 116 +- T0/AliT0HIanalysisTask.h | 178 +- TEvtGen/EvtGen/DecayTable/BTOD.DEC | 794 +- TOF/AliTOFCableLengthMap.h | 72 +- TOF/AliTOFChannelOnlineStatus.h | 84 +- TOF/AliTOFDaConfigHandler.old.cxx | 360 +- TOF/AliTOFNoiseConfigHandler.cxx | 348 +- TPC/Calib/AliTPCCalibKr.cxx | 1328 +- TPC/Calib/AliTPCCalibKr.h | 224 +- TPC/FindKrClusters.C | 270 +- TPC/FindKrClustersRaw.C | 328 +- TPC/Rec/AliTPCclustererKr.cxx | 1972 +-- TPC/Rec/AliTPCclustererKr.h | 338 +- TPC/doc/Definitions/naming_convention.tex | 314 +- TPC/doc/calib/clusterParam/clusterParam.tex | 1500 +-- TPC/scripts/calibPassX/recPass0GSI.C | 86 +- TRD/AliTRDSaxHandler.cxx | 1136 +- TRD/AliTRDarrayDictionary.h | 116 +- TRD/AliTRDtrackingSector.cxx | 352 +- TRD/AliTRDtrackletBase.h | 130 +- TRD/Cal/AliTRDCalDCSFEE.cxx | 270 +- TRD/Cal/AliTRDCalDCSFEE.h | 278 +- TRD/Cal/AliTRDCalDCSFEEv2.cxx | 294 +- TRD/Cal/AliTRDCalDCSFEEv2.h | 282 +- TRD/Cal/AliTRDmakeRecoParamFirstPhysics.C | 176 +- TRD/Cal/AliTRDmakeTrkDB.C | 56 +- TRD/Cal/AliTRDplotNoiseBaseline.C | 318 +- TRD/Macros/AliTRDcheckConfig.C | 1352 +- TRD/doc/alicedefs.tex | 336 +- TRD/doc/plots/trgsim_ov.eps | 378 +- TUHKMgen/UHKM/EquationSolver.icc | 246 +- VZERO/AliVZERODataFEE.cxx | 388 +- VZERO/AliVZERODataFEE.h | 128 +- VZERO/AliVZEROLogicalSignal.cxx | 250 +- VZERO/AliVZEROLogicalSignal.h | 108 +- VZERO/AliVZEROTrending.cxx | 300 +- VZERO/AliVZEROTrending.h | 110 +- VZERO/AliVZEROTriggerData.cxx | 1112 +- VZERO/AliVZEROTriggerData.h | 448 +- VZERO/AliVZEROTriggerSimulator.cxx | 770 +- VZERO/AliVZEROTriggerSimulator.h | 214 +- ZDC/AliZDCQADataMakerSim.cxx | 662 +- ZDC/AliZDCQADataMakerSim.h | 78 +- ZDC/ZDCMAPPINGda.cxx | 798 +- 276 files changed, 93690 insertions(+), 93686 deletions(-) diff --git a/.gitattributes b/.gitattributes index 8c74276a47e..2cfabeae58c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,9 @@ # Set default behaviour, in case users don't have core.autocrlf set. * text=auto +#unset the crlf for data files +*.dat -text +*.data -text +*.root -text *.cxx filter=rcs-keywords *.h filter=rcs-keywords \ No newline at end of file diff --git a/ACORDE/AliACORDEQADataMakerRec.cxx b/ACORDE/AliACORDEQADataMakerRec.cxx index 3fdd2123cdf..ecf9f0769d9 100755 --- a/ACORDE/AliACORDEQADataMakerRec.cxx +++ b/ACORDE/AliACORDEQADataMakerRec.cxx @@ -1,456 +1,456 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//--- -// Produces the data needed to calculate the quality assurance. -// All data must be mergeable objects. - - -// Authors: -// -// Luciano Diaz Gonzalez (ICN-UNAM) -// Mario Rodriguez Cahuantzi (FCFM-BUAP) -// Arturo Fernandez Tellez ACOMultiSL0_DQM_Shifter filling histogram fixed -// --> Expert histogram updated: 2 histograms (Checks the hits for SL0 and AMU mode) -// --> To be include in the next update: threshold settings from AliACORDEQAThreshold class (not yet) -// Last update: May 5th. 2011 (by Mario RC: mrodrigu@mail.cern.ch) -->Creates QA expert histograms -// and QA-shifter histograms also with threshold lines and visual alarm -// Last Update: Aug. 27th 2008 --> Implementation to declare QA expert histogram -// Last update: Nov. 14t 2009 --> MRC (FCFM-BUAP) -// |--> Change in Multiplicity histogram for AMORE (to detect empty triggers events of ACORDE) - - - -// --- ROOT system --- -#include -#include -#include -#include -#include -// --- Standard library --- - -// --- AliRoot header files --- -#include "AliESDEvent.h" -#include "AliLog.h" -#include "AliACORDEdigit.h" -#include "AliACORDEhit.h" -#include "AliACORDEQADataMakerRec.h" -#include "AliQAChecker.h" -#include "AliACORDERawReader.h" -#include "AliACORDERawStream.h" -ClassImp(AliACORDEQADataMakerRec) - -//____________________________________________________________________________ - AliACORDEQADataMakerRec::AliACORDEQADataMakerRec():AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kACORDE), "ACORDE Quality Assurance Data Maker") -{ - -} -//____________________________________________________________________________ -AliACORDEQADataMakerRec::AliACORDEQADataMakerRec(const AliACORDEQADataMakerRec& qadm): - AliQADataMakerRec() -{ - SetName((const char*)qadm.GetName()) ; - SetTitle((const char*)qadm.GetTitle()); -} - -//__________________________________________________________________ -AliACORDEQADataMakerRec::~AliACORDEQADataMakerRec() -{ -} - -//__________________________________________________________________ -AliACORDEQADataMakerRec& AliACORDEQADataMakerRec::operator = (const AliACORDEQADataMakerRec& qadm ) -{ - // Equal operator. - this->~AliACORDEQADataMakerRec(); - new(this) AliACORDEQADataMakerRec(qadm); - return *this; -} -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list) -{ - //Detector specific actions at end of cycle - // do the QA checking - ResetEventTrigClasses(); // reset triggers list to select all histos - // Update for DQM GUI - // - - for (Int_t specie = 0; specie < AliRecoParam::kNSpecies ; specie++) { - if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ; - // - // RS Set event specie - SetEventSpecie(AliRecoParam::ConvertIndex(specie)); - // - for (int itc=-1;itcIntegral()==0) || (integralSL0=h0->Integral()==0) ) ) continue; - - Float_t maxSL0 = 1*h0->GetMaximum(); - Float_t scaleSL0 = 0.; - if (maxSL0!=0) scaleSL0 = 1/maxSL0; - else scaleSL0 = 1.; - h0->Scale(scaleSL0); - - - Float_t maxAMU = 1*h2->GetMaximum(); - Float_t scaleAMU = 0.; - if (maxAMU!=0) scaleAMU = 1/maxAMU; - else scaleAMU = 1.; - h2->Scale(scaleAMU); - - Int_t indexActiveModuleSL0 = 0; - Int_t indexActiveModuleAMU = 0; - - for(Int_t iModule = 0; iModule < 60; iModule++){ - if (h0->GetBinContent(iModule) > 0) indexActiveModuleSL0++; - if (h2->GetBinContent(iModule) > 0) indexActiveModuleAMU++; - } - - Float_t meanHitsSL0 = 0.; - Float_t meanHitsAMU = 0.; - //if ((indexActiveModuleSL0==0) || (indexActiveModuleAMU == 0)) continue; - if (indexActiveModuleAMU == 0) continue; - - meanHitsSL0 = h0->Integral()/indexActiveModuleSL0; - meanHitsAMU = h2->Integral()/indexActiveModuleAMU; - - TH1* h6 = (TH1*)harr[6]; - //TH1* h7 = (TH1*)harr[7]; - - //Int_t goodModulesSL0 = 0; - //Int_t badModulesSL0 = 0; - Int_t goodModulesAMU = 0; - Int_t badModulesAMU = 0; - - for (Int_t imod = 0; imod < 60; imod++) - { - //if (TMath::Abs(h0->GetBinContent(imod)/meanHitsSL0-1) < 0.65) goodModulesSL0++; - //else badModulesSL0++; - if (meanHitsAMU!=0) - { - if (TMath::Abs(h2->GetBinContent(imod)/meanHitsAMU-1) <= 0.90) goodModulesAMU++; - else badModulesAMU++; - } - - } - h6->Fill(1,goodModulesAMU); - h6->Fill(2,badModulesAMU); - - Float_t maxMod = 1*h6->GetMaximum(); - Float_t scaleMaxMod = 0; - if (maxMod!=0) scaleMaxMod = 1./maxMod; - else scaleMaxMod = 0; - h6->Scale(scaleMaxMod); - - TH1* h4 = (TH1*)harr[4]; - TH1* h5 = (TH1*)harr[5]; - - if (h4 && h5 && meanHitsAMU!=0 && meanHitsSL0!=0){ - for (Int_t iModule = 0; iModule < 60; iModule++){ - h4->Fill(h0->GetBinContent(iModule)/meanHitsSL0-1); - h5->Fill(h2->GetBinContent(iModule)/meanHitsAMU-1); - } - } - - } // end of trigger classes loop - } // end specie loop - // QA Checker standar (to be updated) - // - AliQAChecker::Instance()->Run(AliQAv1::kACORDE, task, list) ; -} - -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::StartOfDetectorCycle() -{ - //Detector specific actions at start of cycle - -} - -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::InitRaws() -{ - // create Raw histograms in Raw subdir - - const Bool_t expert = kTRUE ; - const Bool_t saveCorr = kTRUE ; - const Bool_t image = kTRUE ; - TH1F * fhACORDEBitPatternDQM = new TH1F("ACOHitsSL0_DQM_Shifter","Distribution of ACORDE fired modules for DQM shifter; No. of module; Counts",60,-0.5,59.5);// Hits histogram for QA-shifter ACO-SL0 trigger mode - TH1F * fhACORDEMultiplicitySL0DQM = new TH1F("ACOMultiSL0_DQM_Shifter","Multiplicity of ACORDE fired modules for DQM shifter; No. of fired modules; No. of events",62,-1,60); // Multiplicity histo. for QA-shifter ACO-SL0 trigger mode - TH1F * fhACORDEBitPatternAMUDQM = new TH1F("ACOHitsAMU_DQM_Shifter","Distribution of ACORDE fired modules for DQM shifter; No. of module; Counts",60,-0.5,59.5);// Hits histogram for QA-shifter ACO-SL0 trigger mode - TH1F * fhACORDEMultiplicityAMUDQM = new TH1F("ACOMultiAMU_DQM_Shifter","Multiplicity of ACORDE fired modules for DQM shifter; No. of fired modules; No. of events",62,-1,60); // Multiplicity histo. for QA-shifter ACO-SL0 trigger mode - TH1F * fhACORDEBitPatternCheckDQMSL0 = new TH1F("ACOHitsTriggerCheck_DQMExpertSL0","Check the activity of ACORDE's modules; Hits per module/mean of Hits; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU) - TH1F * fhACORDEBitPatternCheckDQMAMU = new TH1F("ACOHitsTriggerCheck_DQMExpertAMU","Check the activity of ACORDE's modules; Hits per module/mean of Hits; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU) - - //const char *acoStatus[4]={"O.K.","High","Low","Not O.K."}; - const char *acoStatus[2]={"STABLE RATE","FLUCTUATING RATE"}; - - - - TH1F * fhACORDEStatusAMU_DQM = new TH1F("fhACORDEStatusAMU_DQM","Status of rate for ACORDE's modules (AMU mode)",2,1,3); - for (Int_t i=0;i<2;i++) - { - fhACORDEStatusAMU_DQM->GetXaxis()->SetBinLabel(i+1,acoStatus[i]); - } - fhACORDEStatusAMU_DQM->SetYTitle("No. of modules (Norm.)"); - - Add2RawsList(fhACORDEStatusAMU_DQM,6,!expert,image,!saveCorr); - - fhACORDEStatusAMU_DQM->SetFillColor(kAzure-7); - - - // Expert histograms - // Check the hits multiplicity from trigger configuration - Add2RawsList(fhACORDEBitPatternCheckDQMSL0,4,expert,image,!saveCorr); - fhACORDEBitPatternCheckDQMSL0->SetFillColor(kOrange); - Add2RawsList(fhACORDEBitPatternCheckDQMAMU,5,expert,image,!saveCorr); - fhACORDEBitPatternCheckDQMAMU->SetFillColor(kRed+2); - - - // AMORE diplay settings for shifter on GUI - - // For SL0 ACO trigger mode - - Add2RawsList(fhACORDEBitPatternDQM,0,expert,image,!saveCorr); - ForbidCloning(fhACORDEBitPatternDQM); - Add2RawsList(fhACORDEMultiplicitySL0DQM,1,expert,image,!saveCorr); - ForbidCloning(fhACORDEMultiplicitySL0DQM); - - // For Hits distribution on ACORDE - - fhACORDEBitPatternDQM->SetFillColor(kMagenta+2); - - // For ACORDE Multiplicity distribution of fired modules - - fhACORDEMultiplicitySL0DQM->SetFillColor(kMagenta); - - // For AMU ACO trigger mode - - Add2RawsList(fhACORDEBitPatternAMUDQM,2,expert,image,!saveCorr); - Add2RawsList(fhACORDEMultiplicityAMUDQM,3,expert,image,!saveCorr); - - // For Hits distribution on ACORDE - - fhACORDEBitPatternAMUDQM->SetFillColor(kViolet+7); - - // For ACORDE Multiplicity distribution of fired modules - - fhACORDEMultiplicityAMUDQM->SetFillColor(kViolet+6); - - // - ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line -} - -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::InitDigits() -{ - // create Digits histograms in Digits subdir - - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - TH1F * fhDigitsModule; - const char *acoModule[60]={"0_0","0_1","0_2","0_3","0_4","0_5","0_6","0_7","0_8","0_9", - "1_0","1_1","1_2","1_3","1_4","1_5","1_6","1_7","1_8","1_9", - "2_0","2_1","2_2","2_3","2_4","2_5","2_6","2_7","2_8","2_9", - "3_0","3_1","3_2","3_3","3_4","3_5","3_6","3_7","3_8","3_9", - "4_0","4_1","4_2","4_3","4_4","4_5","4_6","4_7","4_8","4_9", - "5_0","5_1","5_2","5_3","5_4","5_5","5_6","5_7","5_8","5_9"}; - - - fhDigitsModule = new TH1F("ACORDEBitPatternfromDigits","Distribution of ACORDE from DIGITS;Modules;Counts",60,1,60); - Add2DigitsList(fhDigitsModule,0,!expert,image); - for (Int_t i=0;i<60;i++) fhDigitsModule->GetXaxis()->SetBinLabel(i+1,acoModule[i]); - // - ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line -} - -//____________________________________________________________________________ - -void AliACORDEQADataMakerRec::InitRecPoints() -{ - // create cluster histograms in RecPoint subdir - // Not needed for ACORDE by now !!! - // - ClonePerTrigClass(AliQAv1::kRECPOINTS); // this should be the last line -} - -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::InitESDs() -{ - //create ESDs histograms in ESDs subdir - - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - - TH1F * fhESDsSingle; - TH1F * fhESDsMulti; - TH1F * fhESDsMultiplicity; - const char *acoModule[60]={"0_0","0_1","0_2","0_3","0_4","0_5","0_6","0_7","0_8","0_9", - "1_0","1_1","1_2","1_3","1_4","1_5","1_6","1_7","1_8","1_9", - "2_0","2_1","2_2","2_3","2_4","2_5","2_6","2_7","2_8","2_9", - "3_0","3_1","3_2","3_3","3_4","3_5","3_6","3_7","3_8","3_9", - "4_0","4_1","4_2","4_3","4_4","4_5","4_6","4_7","4_8","4_9", - "5_0","5_1","5_2","5_3","5_4","5_5","5_6","5_7","5_8","5_9"}; - - - fhESDsSingle = new TH1F("ACORDEBitPatternfromESDsSingle","Distribution of ACORDE fired modules from ESDs-Single;Modules;Counts",60,1,60); - Add2ESDsList(fhESDsSingle,0,!expert,image); - - fhESDsMulti = new TH1F("ACORDEBitPatternfromESDsMulti","Distribution of ACORDE fired modules from ESDs-Multi;Modules;Counts",60,1,60); - Add2ESDsList(fhESDsMulti,1,!expert,image); - - fhESDsMultiplicity = new TH1F("ACORDEMultiplicityfromESD","Number of fired ACORDE modules; No. of fired ACORDE modules;No. of events in ACORDE",60,-0.5,60); - Add2ESDsList(fhESDsMultiplicity,2,!expert,image); - for (Int_t i=0;i<60;i++) - { - fhESDsSingle->GetXaxis()->SetBinLabel(i+1,acoModule[i]); - fhESDsMulti->GetXaxis()->SetBinLabel(i+1,acoModule[i]); - } - // - ClonePerTrigClass(AliQAv1::kESDS); // this should be the last line -} -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::MakeRaws(AliRawReader* rawReader) -{ - //fills QA histos for RAW - IncEvCountCycleRaws(); - IncEvCountTotalRaws(); - rawReader->Reset(); - AliACORDERawStream rawStream(rawReader); - size_t contSingle=0; - size_t contMulti=0; - UInt_t dy[4]; - - bool kroSingle[60],kroMulti[60]; - UInt_t tmpDy; - - for(Int_t m=0;m<60;m++) {kroSingle[m]=0;kroMulti[m]=0;} - -if(rawStream.Next()) -{ - dy[0]=rawStream.GetWord(0); - dy[1]=rawStream.GetWord(1); - dy[2]=rawStream.GetWord(2); - dy[3]=rawStream.GetWord(3); - tmpDy=dy[0]; - for(Int_t r=0;r<30;r++) - { - kroSingle[r] = tmpDy & 1; - tmpDy>>=1; - } - tmpDy=dy[1]; - for(Int_t r=30;r<60;r++) - { - kroSingle[r] = tmpDy & 1; - tmpDy>>=1; - } - tmpDy=dy[2]; - for(Int_t r=0;r<30;r++) - { - kroMulti[r] = tmpDy & 1; - tmpDy>>=1; - } - tmpDy=dy[3]; - for(Int_t r=30;r<60;r++) - { - kroMulti[r] = tmpDy & 1; - tmpDy>>=1; - } - contSingle=0; - contMulti=0; - for(Int_t r=0;r<60;r++) - { - if(kroSingle[r]==1) - { - FillRawsData(0,r); - //FillRawsData(4,r); - contSingle++; - } - if(kroMulti[r]==1) - { - FillRawsData(2,r); - //FillRawsData(6,r); - contMulti++; - } - - } - FillRawsData(1,contSingle); - FillRawsData(3,contMulti); - // FillRawsData(7,contMulti); -} -} -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::MakeDigits( TTree *digitsTree) -{ - //fills QA histos for Digits - IncEvCountCycleDigits(); - IncEvCountTotalDigits(); - - if (fDigitsArray) - fDigitsArray->Clear() ; - else - fDigitsArray = new TClonesArray("AliACORDEdigit",1000); - TBranch * branch = digitsTree->GetBranch("ACORDEdigit"); - if (!branch) { - AliWarning("ACORDE branch in Digits Tree not found"); - } else { - branch->SetAddress(&fDigitsArray); - for(Int_t track = 0 ; track < branch->GetEntries() ; track++) { - branch->GetEntry(track); - for(Int_t idigit = 0 ; idigit < fDigitsArray->GetEntriesFast() ; idigit++) { - AliACORDEdigit *AcoDigit = (AliACORDEdigit*) fDigitsArray->UncheckedAt(idigit); - if (!AcoDigit) { - AliError("The unchecked digit doesn't exist"); - continue ; - } - FillDigitsData(0,AcoDigit->GetModule()-1); - } - } - } -} - -//____________________________________________________________________________ -void AliACORDEQADataMakerRec::MakeESDs(AliESDEvent * esd) -{ - //fills QA histos for ESD - IncEvCountCycleESDs(); - IncEvCountTotalESDs(); - // - AliESDACORDE * fESDACORDE= esd->GetACORDEData(); - Int_t acoMulti=0; - for(int i=0;i<60;i++) - { - if(fESDACORDE->GetHitChannel(i)) - { - FillESDsData(0,i+1); - FillESDsData(1,i+1); - acoMulti++; - } - } FillESDsData(2,acoMulti); - -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//--- +// Produces the data needed to calculate the quality assurance. +// All data must be mergeable objects. + + +// Authors: +// +// Luciano Diaz Gonzalez (ICN-UNAM) +// Mario Rodriguez Cahuantzi (FCFM-BUAP) +// Arturo Fernandez Tellez ACOMultiSL0_DQM_Shifter filling histogram fixed +// --> Expert histogram updated: 2 histograms (Checks the hits for SL0 and AMU mode) +// --> To be include in the next update: threshold settings from AliACORDEQAThreshold class (not yet) +// Last update: May 5th. 2011 (by Mario RC: mrodrigu@mail.cern.ch) -->Creates QA expert histograms +// and QA-shifter histograms also with threshold lines and visual alarm +// Last Update: Aug. 27th 2008 --> Implementation to declare QA expert histogram +// Last update: Nov. 14t 2009 --> MRC (FCFM-BUAP) +// |--> Change in Multiplicity histogram for AMORE (to detect empty triggers events of ACORDE) + + + +// --- ROOT system --- +#include +#include +#include +#include +#include +// --- Standard library --- + +// --- AliRoot header files --- +#include "AliESDEvent.h" +#include "AliLog.h" +#include "AliACORDEdigit.h" +#include "AliACORDEhit.h" +#include "AliACORDEQADataMakerRec.h" +#include "AliQAChecker.h" +#include "AliACORDERawReader.h" +#include "AliACORDERawStream.h" +ClassImp(AliACORDEQADataMakerRec) + +//____________________________________________________________________________ + AliACORDEQADataMakerRec::AliACORDEQADataMakerRec():AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kACORDE), "ACORDE Quality Assurance Data Maker") +{ + +} +//____________________________________________________________________________ +AliACORDEQADataMakerRec::AliACORDEQADataMakerRec(const AliACORDEQADataMakerRec& qadm): + AliQADataMakerRec() +{ + SetName((const char*)qadm.GetName()) ; + SetTitle((const char*)qadm.GetTitle()); +} + +//__________________________________________________________________ +AliACORDEQADataMakerRec::~AliACORDEQADataMakerRec() +{ +} + +//__________________________________________________________________ +AliACORDEQADataMakerRec& AliACORDEQADataMakerRec::operator = (const AliACORDEQADataMakerRec& qadm ) +{ + // Equal operator. + this->~AliACORDEQADataMakerRec(); + new(this) AliACORDEQADataMakerRec(qadm); + return *this; +} +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list) +{ + //Detector specific actions at end of cycle + // do the QA checking + ResetEventTrigClasses(); // reset triggers list to select all histos + // Update for DQM GUI + // + + for (Int_t specie = 0; specie < AliRecoParam::kNSpecies ; specie++) { + if ( !AliQAv1::Instance()->IsEventSpecieSet(specie) ) continue ; + // + // RS Set event specie + SetEventSpecie(AliRecoParam::ConvertIndex(specie)); + // + for (int itc=-1;itcIntegral()==0) || (integralSL0=h0->Integral()==0) ) ) continue; + + Float_t maxSL0 = 1*h0->GetMaximum(); + Float_t scaleSL0 = 0.; + if (maxSL0!=0) scaleSL0 = 1/maxSL0; + else scaleSL0 = 1.; + h0->Scale(scaleSL0); + + + Float_t maxAMU = 1*h2->GetMaximum(); + Float_t scaleAMU = 0.; + if (maxAMU!=0) scaleAMU = 1/maxAMU; + else scaleAMU = 1.; + h2->Scale(scaleAMU); + + Int_t indexActiveModuleSL0 = 0; + Int_t indexActiveModuleAMU = 0; + + for(Int_t iModule = 0; iModule < 60; iModule++){ + if (h0->GetBinContent(iModule) > 0) indexActiveModuleSL0++; + if (h2->GetBinContent(iModule) > 0) indexActiveModuleAMU++; + } + + Float_t meanHitsSL0 = 0.; + Float_t meanHitsAMU = 0.; + //if ((indexActiveModuleSL0==0) || (indexActiveModuleAMU == 0)) continue; + if (indexActiveModuleAMU == 0) continue; + + meanHitsSL0 = h0->Integral()/indexActiveModuleSL0; + meanHitsAMU = h2->Integral()/indexActiveModuleAMU; + + TH1* h6 = (TH1*)harr[6]; + //TH1* h7 = (TH1*)harr[7]; + + //Int_t goodModulesSL0 = 0; + //Int_t badModulesSL0 = 0; + Int_t goodModulesAMU = 0; + Int_t badModulesAMU = 0; + + for (Int_t imod = 0; imod < 60; imod++) + { + //if (TMath::Abs(h0->GetBinContent(imod)/meanHitsSL0-1) < 0.65) goodModulesSL0++; + //else badModulesSL0++; + if (meanHitsAMU!=0) + { + if (TMath::Abs(h2->GetBinContent(imod)/meanHitsAMU-1) <= 0.90) goodModulesAMU++; + else badModulesAMU++; + } + + } + h6->Fill(1,goodModulesAMU); + h6->Fill(2,badModulesAMU); + + Float_t maxMod = 1*h6->GetMaximum(); + Float_t scaleMaxMod = 0; + if (maxMod!=0) scaleMaxMod = 1./maxMod; + else scaleMaxMod = 0; + h6->Scale(scaleMaxMod); + + TH1* h4 = (TH1*)harr[4]; + TH1* h5 = (TH1*)harr[5]; + + if (h4 && h5 && meanHitsAMU!=0 && meanHitsSL0!=0){ + for (Int_t iModule = 0; iModule < 60; iModule++){ + h4->Fill(h0->GetBinContent(iModule)/meanHitsSL0-1); + h5->Fill(h2->GetBinContent(iModule)/meanHitsAMU-1); + } + } + + } // end of trigger classes loop + } // end specie loop + // QA Checker standar (to be updated) + // + AliQAChecker::Instance()->Run(AliQAv1::kACORDE, task, list) ; +} + +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::StartOfDetectorCycle() +{ + //Detector specific actions at start of cycle + +} + +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::InitRaws() +{ + // create Raw histograms in Raw subdir + + const Bool_t expert = kTRUE ; + const Bool_t saveCorr = kTRUE ; + const Bool_t image = kTRUE ; + TH1F * fhACORDEBitPatternDQM = new TH1F("ACOHitsSL0_DQM_Shifter","Distribution of ACORDE fired modules for DQM shifter; No. of module; Counts",60,-0.5,59.5);// Hits histogram for QA-shifter ACO-SL0 trigger mode + TH1F * fhACORDEMultiplicitySL0DQM = new TH1F("ACOMultiSL0_DQM_Shifter","Multiplicity of ACORDE fired modules for DQM shifter; No. of fired modules; No. of events",62,-1,60); // Multiplicity histo. for QA-shifter ACO-SL0 trigger mode + TH1F * fhACORDEBitPatternAMUDQM = new TH1F("ACOHitsAMU_DQM_Shifter","Distribution of ACORDE fired modules for DQM shifter; No. of module; Counts",60,-0.5,59.5);// Hits histogram for QA-shifter ACO-SL0 trigger mode + TH1F * fhACORDEMultiplicityAMUDQM = new TH1F("ACOMultiAMU_DQM_Shifter","Multiplicity of ACORDE fired modules for DQM shifter; No. of fired modules; No. of events",62,-1,60); // Multiplicity histo. for QA-shifter ACO-SL0 trigger mode + TH1F * fhACORDEBitPatternCheckDQMSL0 = new TH1F("ACOHitsTriggerCheck_DQMExpertSL0","Check the activity of ACORDE's modules; Hits per module/mean of Hits; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU) + TH1F * fhACORDEBitPatternCheckDQMAMU = new TH1F("ACOHitsTriggerCheck_DQMExpertAMU","Check the activity of ACORDE's modules; Hits per module/mean of Hits; Counts",100,-3,5); // Check the trigger status of ACORDE (SL0 vs AMU) + + //const char *acoStatus[4]={"O.K.","High","Low","Not O.K."}; + const char *acoStatus[2]={"STABLE RATE","FLUCTUATING RATE"}; + + + + TH1F * fhACORDEStatusAMU_DQM = new TH1F("fhACORDEStatusAMU_DQM","Status of rate for ACORDE's modules (AMU mode)",2,1,3); + for (Int_t i=0;i<2;i++) + { + fhACORDEStatusAMU_DQM->GetXaxis()->SetBinLabel(i+1,acoStatus[i]); + } + fhACORDEStatusAMU_DQM->SetYTitle("No. of modules (Norm.)"); + + Add2RawsList(fhACORDEStatusAMU_DQM,6,!expert,image,!saveCorr); + + fhACORDEStatusAMU_DQM->SetFillColor(kAzure-7); + + + // Expert histograms + // Check the hits multiplicity from trigger configuration + Add2RawsList(fhACORDEBitPatternCheckDQMSL0,4,expert,image,!saveCorr); + fhACORDEBitPatternCheckDQMSL0->SetFillColor(kOrange); + Add2RawsList(fhACORDEBitPatternCheckDQMAMU,5,expert,image,!saveCorr); + fhACORDEBitPatternCheckDQMAMU->SetFillColor(kRed+2); + + + // AMORE diplay settings for shifter on GUI + + // For SL0 ACO trigger mode + + Add2RawsList(fhACORDEBitPatternDQM,0,expert,image,!saveCorr); + ForbidCloning(fhACORDEBitPatternDQM); + Add2RawsList(fhACORDEMultiplicitySL0DQM,1,expert,image,!saveCorr); + ForbidCloning(fhACORDEMultiplicitySL0DQM); + + // For Hits distribution on ACORDE + + fhACORDEBitPatternDQM->SetFillColor(kMagenta+2); + + // For ACORDE Multiplicity distribution of fired modules + + fhACORDEMultiplicitySL0DQM->SetFillColor(kMagenta); + + // For AMU ACO trigger mode + + Add2RawsList(fhACORDEBitPatternAMUDQM,2,expert,image,!saveCorr); + Add2RawsList(fhACORDEMultiplicityAMUDQM,3,expert,image,!saveCorr); + + // For Hits distribution on ACORDE + + fhACORDEBitPatternAMUDQM->SetFillColor(kViolet+7); + + // For ACORDE Multiplicity distribution of fired modules + + fhACORDEMultiplicityAMUDQM->SetFillColor(kViolet+6); + + // + ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line +} + +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::InitDigits() +{ + // create Digits histograms in Digits subdir + + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + TH1F * fhDigitsModule; + const char *acoModule[60]={"0_0","0_1","0_2","0_3","0_4","0_5","0_6","0_7","0_8","0_9", + "1_0","1_1","1_2","1_3","1_4","1_5","1_6","1_7","1_8","1_9", + "2_0","2_1","2_2","2_3","2_4","2_5","2_6","2_7","2_8","2_9", + "3_0","3_1","3_2","3_3","3_4","3_5","3_6","3_7","3_8","3_9", + "4_0","4_1","4_2","4_3","4_4","4_5","4_6","4_7","4_8","4_9", + "5_0","5_1","5_2","5_3","5_4","5_5","5_6","5_7","5_8","5_9"}; + + + fhDigitsModule = new TH1F("ACORDEBitPatternfromDigits","Distribution of ACORDE from DIGITS;Modules;Counts",60,1,60); + Add2DigitsList(fhDigitsModule,0,!expert,image); + for (Int_t i=0;i<60;i++) fhDigitsModule->GetXaxis()->SetBinLabel(i+1,acoModule[i]); + // + ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line +} + +//____________________________________________________________________________ + +void AliACORDEQADataMakerRec::InitRecPoints() +{ + // create cluster histograms in RecPoint subdir + // Not needed for ACORDE by now !!! + // + ClonePerTrigClass(AliQAv1::kRECPOINTS); // this should be the last line +} + +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::InitESDs() +{ + //create ESDs histograms in ESDs subdir + + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + + TH1F * fhESDsSingle; + TH1F * fhESDsMulti; + TH1F * fhESDsMultiplicity; + const char *acoModule[60]={"0_0","0_1","0_2","0_3","0_4","0_5","0_6","0_7","0_8","0_9", + "1_0","1_1","1_2","1_3","1_4","1_5","1_6","1_7","1_8","1_9", + "2_0","2_1","2_2","2_3","2_4","2_5","2_6","2_7","2_8","2_9", + "3_0","3_1","3_2","3_3","3_4","3_5","3_6","3_7","3_8","3_9", + "4_0","4_1","4_2","4_3","4_4","4_5","4_6","4_7","4_8","4_9", + "5_0","5_1","5_2","5_3","5_4","5_5","5_6","5_7","5_8","5_9"}; + + + fhESDsSingle = new TH1F("ACORDEBitPatternfromESDsSingle","Distribution of ACORDE fired modules from ESDs-Single;Modules;Counts",60,1,60); + Add2ESDsList(fhESDsSingle,0,!expert,image); + + fhESDsMulti = new TH1F("ACORDEBitPatternfromESDsMulti","Distribution of ACORDE fired modules from ESDs-Multi;Modules;Counts",60,1,60); + Add2ESDsList(fhESDsMulti,1,!expert,image); + + fhESDsMultiplicity = new TH1F("ACORDEMultiplicityfromESD","Number of fired ACORDE modules; No. of fired ACORDE modules;No. of events in ACORDE",60,-0.5,60); + Add2ESDsList(fhESDsMultiplicity,2,!expert,image); + for (Int_t i=0;i<60;i++) + { + fhESDsSingle->GetXaxis()->SetBinLabel(i+1,acoModule[i]); + fhESDsMulti->GetXaxis()->SetBinLabel(i+1,acoModule[i]); + } + // + ClonePerTrigClass(AliQAv1::kESDS); // this should be the last line +} +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::MakeRaws(AliRawReader* rawReader) +{ + //fills QA histos for RAW + IncEvCountCycleRaws(); + IncEvCountTotalRaws(); + rawReader->Reset(); + AliACORDERawStream rawStream(rawReader); + size_t contSingle=0; + size_t contMulti=0; + UInt_t dy[4]; + + bool kroSingle[60],kroMulti[60]; + UInt_t tmpDy; + + for(Int_t m=0;m<60;m++) {kroSingle[m]=0;kroMulti[m]=0;} + +if(rawStream.Next()) +{ + dy[0]=rawStream.GetWord(0); + dy[1]=rawStream.GetWord(1); + dy[2]=rawStream.GetWord(2); + dy[3]=rawStream.GetWord(3); + tmpDy=dy[0]; + for(Int_t r=0;r<30;r++) + { + kroSingle[r] = tmpDy & 1; + tmpDy>>=1; + } + tmpDy=dy[1]; + for(Int_t r=30;r<60;r++) + { + kroSingle[r] = tmpDy & 1; + tmpDy>>=1; + } + tmpDy=dy[2]; + for(Int_t r=0;r<30;r++) + { + kroMulti[r] = tmpDy & 1; + tmpDy>>=1; + } + tmpDy=dy[3]; + for(Int_t r=30;r<60;r++) + { + kroMulti[r] = tmpDy & 1; + tmpDy>>=1; + } + contSingle=0; + contMulti=0; + for(Int_t r=0;r<60;r++) + { + if(kroSingle[r]==1) + { + FillRawsData(0,r); + //FillRawsData(4,r); + contSingle++; + } + if(kroMulti[r]==1) + { + FillRawsData(2,r); + //FillRawsData(6,r); + contMulti++; + } + + } + FillRawsData(1,contSingle); + FillRawsData(3,contMulti); + // FillRawsData(7,contMulti); +} +} +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::MakeDigits( TTree *digitsTree) +{ + //fills QA histos for Digits + IncEvCountCycleDigits(); + IncEvCountTotalDigits(); + + if (fDigitsArray) + fDigitsArray->Clear() ; + else + fDigitsArray = new TClonesArray("AliACORDEdigit",1000); + TBranch * branch = digitsTree->GetBranch("ACORDEdigit"); + if (!branch) { + AliWarning("ACORDE branch in Digits Tree not found"); + } else { + branch->SetAddress(&fDigitsArray); + for(Int_t track = 0 ; track < branch->GetEntries() ; track++) { + branch->GetEntry(track); + for(Int_t idigit = 0 ; idigit < fDigitsArray->GetEntriesFast() ; idigit++) { + AliACORDEdigit *AcoDigit = (AliACORDEdigit*) fDigitsArray->UncheckedAt(idigit); + if (!AcoDigit) { + AliError("The unchecked digit doesn't exist"); + continue ; + } + FillDigitsData(0,AcoDigit->GetModule()-1); + } + } + } +} + +//____________________________________________________________________________ +void AliACORDEQADataMakerRec::MakeESDs(AliESDEvent * esd) +{ + //fills QA histos for ESD + IncEvCountCycleESDs(); + IncEvCountTotalESDs(); + // + AliESDACORDE * fESDACORDE= esd->GetACORDEData(); + Int_t acoMulti=0; + for(int i=0;i<60;i++) + { + if(fESDACORDE->GetHitChannel(i)) + { + FillESDsData(0,i+1); + FillESDsData(1,i+1); + acoMulti++; + } + } FillESDsData(2,acoMulti); + +} diff --git a/ACORDE/AliACORDERawReader.cxx b/ACORDE/AliACORDERawReader.cxx index c6900f329b4..d62b19c28c6 100755 --- a/ACORDE/AliACORDERawReader.cxx +++ b/ACORDE/AliACORDERawReader.cxx @@ -90,7 +90,7 @@ Int_t AliACORDERawReader::GetPosition() UInt_t AliACORDERawReader::GetNextWord() { - // Returns the next 32 bit word inside the raw data payload. + // Returns the next 32 bit word inside the raw data payload. // The method is supposed to be endian (platform) independent. diff --git a/ACORDE/AliACORDERawStream.cxx b/ACORDE/AliACORDERawStream.cxx index 92ffc36210a..80de666393b 100644 --- a/ACORDE/AliACORDERawStream.cxx +++ b/ACORDE/AliACORDERawStream.cxx @@ -1,204 +1,204 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/////////////////////////////////////////////////////////////////////////////// -// // -// Reads ACORDE DDL raw data from raw data stream // -// // -/////////////////////////////////////////////////////////////////////////////// - -#include "AliACORDERawStream.h" -#include "AliRawReader.h" -#include "AliLog.h" -#include "AliDAQ.h" -#include "AliRawReaderRoot.h" - -ClassImp(AliACORDERawStream) - -//_____________________________________________________________________________ -AliACORDERawStream::AliACORDERawStream(AliRawReader* rawReader) : - fRawReader(rawReader), - fPosition(-1), - fData(NULL), - fDataSize(0) -{ - // - // Create an object to read ACORDE raw data - // - // Created: 04 Feb 2008 Mario Sitta - // - - fWord[0] = fWord[1] = fWord[2] = fWord[3] = 0; - - // Select the raw data corresponding to the ACORDE detector id -// fRawReader->Reset(); - AliDebug(1,Form("Selecting raw data for detector %d",AliDAQ::DetectorID("ACORDE"))); - fRawReader->Select("ACORDE"); - -} - -//_____________________________________________________________________________ -AliACORDERawStream::AliACORDERawStream(const AliACORDERawStream &r) : - TObject(), - fRawReader(r.fRawReader), - fPosition(-1), - fData(NULL), - fDataSize(0) -{ - // Simple copy constructor - ((AliACORDERawStream &) r).Copy(*this); -} - -//_____________________________________________________________________________ -AliACORDERawStream::~AliACORDERawStream() -{ - // Default destructor -} - -//_____________________________________________________________________________ -AliACORDERawStream &AliACORDERawStream::operator=(const AliACORDERawStream &r) -{ - // Simple operator= - if (this != &r) ((AliACORDERawStream &) r).Copy(*this); - return *this; -} - -//_____________________________________________________________________________ -void AliACORDERawStream::Reset() -{ - // - // Reset the raw stream parameters - // - // Input: - // - // Output: - // - // Created: 04 Feb 2008 Mario Sitta - // - - fPosition = -1; - fData = NULL; - - if (fRawReader) fRawReader->Reset(); -} - -//_____________________________________________________________________________ -Bool_t AliACORDERawStream::Next() -{ - // - // Read next digit from the ACORDE raw data stream; - // return kFALSE in case of error or no digits left - // - // Input: - // - // Output: - // - // Created: 04 Feb 2008 Mario Sitta - // - - if (fPosition >= 0) return kFALSE; - - if (!fRawReader->ReadNextData(fData)) return kFALSE; - if (fRawReader->GetDataSize() == 0) return kFALSE; - - fDataSize = fRawReader->GetDataSize(); - if (fDataSize != 16) { - fRawReader->AddFatalErrorLog(kRawDataSizeErr,Form("size %d != 16",fDataSize)); - AliWarning(Form("Wrong ACORDE raw data size: %d, expected 16 bytes!",fDataSize)); - return kFALSE; - } - - fPosition = 0; - - for (Int_t i=0; i<4; i++) - fWord[i] = GetNextWord(); - - return kTRUE; -} - -//_____________________________________________________________________________ -UInt_t AliACORDERawStream::GetWord(Int_t index) const -{ - // - // Returns the ``index'' word from ACORDE raw data. - // - // Input: - // index : the index of the requested word - // Output: - // word : the 32 bit ``index'' word - // - // Created: 12 Feb 2008 Mario Sitta - // - - if (index < 0 || index > 3) { - AliWarning(Form("Wrong word index %d, returning 0",index)); - return 0; - } else { - return fWord[index]; - } - -} - -//_____________________________________________________________________________ -UInt_t AliACORDERawStream::GetNextWord() -{ - // - // Returns the next 32 bit word inside the raw data payload. - // The method is supposed to be endian (platform) independent. - // - // Input: - // - // Output: - // word : a 32 bit word containing the data - // - // Created: 04 Feb 2008 Mario Sitta - // - - if (!fData || fPosition < 0) - AliFatal("Raw data payload buffer is not yet initialized !"); - - UInt_t word = 0; - word |= fData[fPosition++]; - word |= fData[fPosition++] << 8; - word |= fData[fPosition++] << 16; - word |= fData[fPosition++] << 24; - - return word; -} - -//_____________________________________________________________________________ - -Int_t AliACORDERawStream::GetNEvents(char* fileName) -{ - // Returns the Total Number of Events recorded by ACORDE - // Note: it may be a better way to do it !! - // Input: fileName to Analyze - // Output: Number of Total Events (fNEvents) in fileName - // Created: 25 March 2008 - // Author: Mario Rodriguez Cahuantzi - - AliRawReader* rCount = new AliRawReaderRoot(fileName); - Int_t DyM=0; - Int_t fNEvents=0; - while(DyM==0) - { - if (!rCount->NextEvent()) DyM=1; - else fNEvents++; - } - delete rCount; - return fNEvents; -} - -//____________________________________________________________________________ +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/////////////////////////////////////////////////////////////////////////////// +// // +// Reads ACORDE DDL raw data from raw data stream // +// // +/////////////////////////////////////////////////////////////////////////////// + +#include "AliACORDERawStream.h" +#include "AliRawReader.h" +#include "AliLog.h" +#include "AliDAQ.h" +#include "AliRawReaderRoot.h" + +ClassImp(AliACORDERawStream) + +//_____________________________________________________________________________ +AliACORDERawStream::AliACORDERawStream(AliRawReader* rawReader) : + fRawReader(rawReader), + fPosition(-1), + fData(NULL), + fDataSize(0) +{ + // + // Create an object to read ACORDE raw data + // + // Created: 04 Feb 2008 Mario Sitta + // + + fWord[0] = fWord[1] = fWord[2] = fWord[3] = 0; + + // Select the raw data corresponding to the ACORDE detector id +// fRawReader->Reset(); + AliDebug(1,Form("Selecting raw data for detector %d",AliDAQ::DetectorID("ACORDE"))); + fRawReader->Select("ACORDE"); + +} + +//_____________________________________________________________________________ +AliACORDERawStream::AliACORDERawStream(const AliACORDERawStream &r) : + TObject(), + fRawReader(r.fRawReader), + fPosition(-1), + fData(NULL), + fDataSize(0) +{ + // Simple copy constructor + ((AliACORDERawStream &) r).Copy(*this); +} + +//_____________________________________________________________________________ +AliACORDERawStream::~AliACORDERawStream() +{ + // Default destructor +} + +//_____________________________________________________________________________ +AliACORDERawStream &AliACORDERawStream::operator=(const AliACORDERawStream &r) +{ + // Simple operator= + if (this != &r) ((AliACORDERawStream &) r).Copy(*this); + return *this; +} + +//_____________________________________________________________________________ +void AliACORDERawStream::Reset() +{ + // + // Reset the raw stream parameters + // + // Input: + // + // Output: + // + // Created: 04 Feb 2008 Mario Sitta + // + + fPosition = -1; + fData = NULL; + + if (fRawReader) fRawReader->Reset(); +} + +//_____________________________________________________________________________ +Bool_t AliACORDERawStream::Next() +{ + // + // Read next digit from the ACORDE raw data stream; + // return kFALSE in case of error or no digits left + // + // Input: + // + // Output: + // + // Created: 04 Feb 2008 Mario Sitta + // + + if (fPosition >= 0) return kFALSE; + + if (!fRawReader->ReadNextData(fData)) return kFALSE; + if (fRawReader->GetDataSize() == 0) return kFALSE; + + fDataSize = fRawReader->GetDataSize(); + if (fDataSize != 16) { + fRawReader->AddFatalErrorLog(kRawDataSizeErr,Form("size %d != 16",fDataSize)); + AliWarning(Form("Wrong ACORDE raw data size: %d, expected 16 bytes!",fDataSize)); + return kFALSE; + } + + fPosition = 0; + + for (Int_t i=0; i<4; i++) + fWord[i] = GetNextWord(); + + return kTRUE; +} + +//_____________________________________________________________________________ +UInt_t AliACORDERawStream::GetWord(Int_t index) const +{ + // + // Returns the ``index'' word from ACORDE raw data. + // + // Input: + // index : the index of the requested word + // Output: + // word : the 32 bit ``index'' word + // + // Created: 12 Feb 2008 Mario Sitta + // + + if (index < 0 || index > 3) { + AliWarning(Form("Wrong word index %d, returning 0",index)); + return 0; + } else { + return fWord[index]; + } + +} + +//_____________________________________________________________________________ +UInt_t AliACORDERawStream::GetNextWord() +{ + // + // Returns the next 32 bit word inside the raw data payload. + // The method is supposed to be endian (platform) independent. + // + // Input: + // + // Output: + // word : a 32 bit word containing the data + // + // Created: 04 Feb 2008 Mario Sitta + // + + if (!fData || fPosition < 0) + AliFatal("Raw data payload buffer is not yet initialized !"); + + UInt_t word = 0; + word |= fData[fPosition++]; + word |= fData[fPosition++] << 8; + word |= fData[fPosition++] << 16; + word |= fData[fPosition++] << 24; + + return word; +} + +//_____________________________________________________________________________ + +Int_t AliACORDERawStream::GetNEvents(char* fileName) +{ + // Returns the Total Number of Events recorded by ACORDE + // Note: it may be a better way to do it !! + // Input: fileName to Analyze + // Output: Number of Total Events (fNEvents) in fileName + // Created: 25 March 2008 + // Author: Mario Rodriguez Cahuantzi + + AliRawReader* rCount = new AliRawReaderRoot(fileName); + Int_t DyM=0; + Int_t fNEvents=0; + while(DyM==0) + { + if (!rCount->NextEvent()) DyM=1; + else fNEvents++; + } + delete rCount; + return fNEvents; +} + +//____________________________________________________________________________ diff --git a/ACORDE/AliACORDERawStream.h b/ACORDE/AliACORDERawStream.h index e417b2bb592..2c6afb98121 100644 --- a/ACORDE/AliACORDERawStream.h +++ b/ACORDE/AliACORDERawStream.h @@ -1,57 +1,57 @@ -#ifndef ALIACORDERAWSTREAM_H -#define ALIACORDERAWSTREAM_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: AliACORDERawStream.h 20210 2007-08-18 08:41:30Z hristov $ */ - -/////////////////////////////////////////////////////////////////////////////// -// // -// Reads ACORDE DDL raw data from raw data stream // -// // -/////////////////////////////////////////////////////////////////////////////// - -#include "TObject.h" - -class AliRawReader; - -class AliACORDERawStream : public TObject { - - public: - - AliACORDERawStream(AliRawReader*); - AliACORDERawStream(const AliACORDERawStream &r); - virtual ~AliACORDERawStream(); - AliACORDERawStream &operator=(const AliACORDERawStream &r); - //MRC's part - Int_t GetNEvents(char* fileName); - // - virtual void Reset(); - virtual Bool_t Next(); - - Int_t DataSize() const { return fDataSize; } - UInt_t GetWord(Int_t index) const; - - enum EACORDERawStreamError { - kRawDataSizeErr = 1 - }; - - private: - - UInt_t GetNextWord(); - - AliRawReader* fRawReader; // object for reading the raw data - Int_t fPosition; // current position in the raw-data payload - UChar_t* fData; // pointer to raw data payload - - Int_t fDataSize; // data size - - UInt_t fWord[4]; // data vector - - ClassDef(AliACORDERawStream,0) // class for reading ACORDE DDL raw data - -}; - -typedef AliACORDERawStream AliCRTRawStream; // for backward compatibility - -#endif +#ifndef ALIACORDERAWSTREAM_H +#define ALIACORDERAWSTREAM_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: AliACORDERawStream.h 20210 2007-08-18 08:41:30Z hristov $ */ + +/////////////////////////////////////////////////////////////////////////////// +// // +// Reads ACORDE DDL raw data from raw data stream // +// // +/////////////////////////////////////////////////////////////////////////////// + +#include "TObject.h" + +class AliRawReader; + +class AliACORDERawStream : public TObject { + + public: + + AliACORDERawStream(AliRawReader*); + AliACORDERawStream(const AliACORDERawStream &r); + virtual ~AliACORDERawStream(); + AliACORDERawStream &operator=(const AliACORDERawStream &r); + //MRC's part + Int_t GetNEvents(char* fileName); + // + virtual void Reset(); + virtual Bool_t Next(); + + Int_t DataSize() const { return fDataSize; } + UInt_t GetWord(Int_t index) const; + + enum EACORDERawStreamError { + kRawDataSizeErr = 1 + }; + + private: + + UInt_t GetNextWord(); + + AliRawReader* fRawReader; // object for reading the raw data + Int_t fPosition; // current position in the raw-data payload + UChar_t* fData; // pointer to raw data payload + + Int_t fDataSize; // data size + + UInt_t fWord[4]; // data vector + + ClassDef(AliACORDERawStream,0) // class for reading ACORDE DDL raw data + +}; + +typedef AliACORDERawStream AliCRTRawStream; // for backward compatibility + +#endif diff --git a/ACORDE/AliACORDEReconstructor.cxx b/ACORDE/AliACORDEReconstructor.cxx index 5afe80f9160..c7a33649fdd 100644 --- a/ACORDE/AliACORDEReconstructor.cxx +++ b/ACORDE/AliACORDEReconstructor.cxx @@ -1,160 +1,160 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id: AliACORDEReconstructor.cxx 20956 2007-09-26 14:22:18Z mrodrigu $ */ -////////////////////////////////////////////////////////////////////////////// -// // -// Class for ACORDE reconstruction // -////////////////////////////////////////////////////////////////////////////// - -#include "AliRawReader.h" - -#include "AliACORDEReconstructor.h" -#include "AliACORDERawStream.h" -#include "AliESDEvent.h" -#include "AliACORDEdigit.h" -#include "AliACORDERecoParam.h" - -ClassImp(AliACORDEReconstructor) - -AliACORDEReconstructor:: AliACORDEReconstructor(): - AliReconstructor(), - fESDACORDE(0x0), - fAcordeRecoParam(0x0), - fCalibData(0x0), - fDigitsArray(0) -{ - // Default constructor - // Get calibration data - - fCalibData = GetCalibData(); - fAcordeRecoParam = GetRecoParam(); -} - -//_______________________________________________________________________ -AliACORDECalibData *AliACORDEReconstructor::GetCalibData() const -{ - return 0x0; -} -//____________________________________________________________________________ -AliACORDERecoParam *AliACORDEReconstructor::GetRecoParam() const -{ - return 0x0; -} -//_____________________________________________________________________________ -AliACORDEReconstructor& AliACORDEReconstructor::operator = - (const AliACORDEReconstructor& /*reconstructor*/) -{ -// assignment operator - - Fatal("operator =", "assignment operator not implemented"); - return *this; -} - -//_____________________________________________________________________________ -AliACORDEReconstructor::~AliACORDEReconstructor() -{ -// destructor - delete fESDACORDE; - delete fDigitsArray; -} - -//_____________________________________________________________________________ -void AliACORDEReconstructor::Init() -{ -// initializer - fESDACORDE = new AliESDACORDE; -} - -void AliACORDEReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const -{ - - if (!digitsTree) { - AliError("No digits tree!"); - return; - } - - if (!fDigitsArray) - fDigitsArray = new TClonesArray("AliACORDEdigit", 60); - - digitsTree->Branch("ACORDEdigit", &fDigitsArray); - - rawReader->Reset(); - AliACORDERawStream rawStream(rawReader); - if (rawStream.Next()) { - for(Int_t iChannel = 0; iChannel < 60; iChannel++) { - Int_t index = iChannel / 30; - Int_t bit = iChannel % 30; - if (rawStream.GetWord(index) & (1 << bit)) - new ((*fDigitsArray)[fDigitsArray->GetEntriesFast()]) AliACORDEdigit(iChannel,0); - } - } - - digitsTree->Fill(); - - fDigitsArray->Clear(); -} - -void AliACORDEReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/,AliESDEvent* esd) const -{ - - // fills ESD with ACORDE Digits - - if (!digitsTree) - { - AliError("No digits tree!"); - return; - } - - TBranch* digitBranch = digitsTree->GetBranch("ACORDEdigit"); - if (!digitBranch) { - AliError("No ACORDE digits branch found!"); - return; - } - digitBranch->SetAddress(&fDigitsArray); - - digitsTree->GetEvent(0); - - Bool_t AcoHitSingle[60],AcoHitMulti[60]; - for(Int_t i = 0; i < 60; i++) { AcoHitSingle[i] = AcoHitMulti[i] = kFALSE; } - - Int_t nDigits = fDigitsArray->GetEntriesFast(); - - for (Int_t d=0; dAt(d); - Int_t module = digit->GetModule(); - - AcoHitSingle[module] = kTRUE; - AcoHitMulti[module] = kTRUE; - } - if (!esd) { - AliError("NO ACORDE ESD branch found!"); - return; -} - TString ActiveTriggerDetector = esd->GetFiredTriggerClasses(); - if (ActiveTriggerDetector.Contains("ASL")) fESDACORDE->SetACORDEBitPattern(AcoHitSingle); - else if (ActiveTriggerDetector.Contains("AMU")) fESDACORDE->SetACORDEBitPattern(AcoHitMulti); - else fESDACORDE->SetACORDEBitPattern(AcoHitSingle); - - if (esd) - { - AliDebug(1, Form("Writing ACORDE data to ESD Tree")); - esd->SetACORDEData(fESDACORDE); - } - - fDigitsArray->Clear(); -} - - +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id: AliACORDEReconstructor.cxx 20956 2007-09-26 14:22:18Z mrodrigu $ */ +////////////////////////////////////////////////////////////////////////////// +// // +// Class for ACORDE reconstruction // +////////////////////////////////////////////////////////////////////////////// + +#include "AliRawReader.h" + +#include "AliACORDEReconstructor.h" +#include "AliACORDERawStream.h" +#include "AliESDEvent.h" +#include "AliACORDEdigit.h" +#include "AliACORDERecoParam.h" + +ClassImp(AliACORDEReconstructor) + +AliACORDEReconstructor:: AliACORDEReconstructor(): + AliReconstructor(), + fESDACORDE(0x0), + fAcordeRecoParam(0x0), + fCalibData(0x0), + fDigitsArray(0) +{ + // Default constructor + // Get calibration data + + fCalibData = GetCalibData(); + fAcordeRecoParam = GetRecoParam(); +} + +//_______________________________________________________________________ +AliACORDECalibData *AliACORDEReconstructor::GetCalibData() const +{ + return 0x0; +} +//____________________________________________________________________________ +AliACORDERecoParam *AliACORDEReconstructor::GetRecoParam() const +{ + return 0x0; +} +//_____________________________________________________________________________ +AliACORDEReconstructor& AliACORDEReconstructor::operator = + (const AliACORDEReconstructor& /*reconstructor*/) +{ +// assignment operator + + Fatal("operator =", "assignment operator not implemented"); + return *this; +} + +//_____________________________________________________________________________ +AliACORDEReconstructor::~AliACORDEReconstructor() +{ +// destructor + delete fESDACORDE; + delete fDigitsArray; +} + +//_____________________________________________________________________________ +void AliACORDEReconstructor::Init() +{ +// initializer + fESDACORDE = new AliESDACORDE; +} + +void AliACORDEReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const +{ + + if (!digitsTree) { + AliError("No digits tree!"); + return; + } + + if (!fDigitsArray) + fDigitsArray = new TClonesArray("AliACORDEdigit", 60); + + digitsTree->Branch("ACORDEdigit", &fDigitsArray); + + rawReader->Reset(); + AliACORDERawStream rawStream(rawReader); + if (rawStream.Next()) { + for(Int_t iChannel = 0; iChannel < 60; iChannel++) { + Int_t index = iChannel / 30; + Int_t bit = iChannel % 30; + if (rawStream.GetWord(index) & (1 << bit)) + new ((*fDigitsArray)[fDigitsArray->GetEntriesFast()]) AliACORDEdigit(iChannel,0); + } + } + + digitsTree->Fill(); + + fDigitsArray->Clear(); +} + +void AliACORDEReconstructor::FillESD(TTree* digitsTree, TTree* /*clustersTree*/,AliESDEvent* esd) const +{ + + // fills ESD with ACORDE Digits + + if (!digitsTree) + { + AliError("No digits tree!"); + return; + } + + TBranch* digitBranch = digitsTree->GetBranch("ACORDEdigit"); + if (!digitBranch) { + AliError("No ACORDE digits branch found!"); + return; + } + digitBranch->SetAddress(&fDigitsArray); + + digitsTree->GetEvent(0); + + Bool_t AcoHitSingle[60],AcoHitMulti[60]; + for(Int_t i = 0; i < 60; i++) { AcoHitSingle[i] = AcoHitMulti[i] = kFALSE; } + + Int_t nDigits = fDigitsArray->GetEntriesFast(); + + for (Int_t d=0; dAt(d); + Int_t module = digit->GetModule(); + + AcoHitSingle[module] = kTRUE; + AcoHitMulti[module] = kTRUE; + } + if (!esd) { + AliError("NO ACORDE ESD branch found!"); + return; +} + TString ActiveTriggerDetector = esd->GetFiredTriggerClasses(); + if (ActiveTriggerDetector.Contains("ASL")) fESDACORDE->SetACORDEBitPattern(AcoHitSingle); + else if (ActiveTriggerDetector.Contains("AMU")) fESDACORDE->SetACORDEBitPattern(AcoHitMulti); + else fESDACORDE->SetACORDEBitPattern(AcoHitSingle); + + if (esd) + { + AliDebug(1, Form("Writing ACORDE data to ESD Tree")); + esd->SetACORDEData(fESDACORDE); + } + + fDigitsArray->Clear(); +} + + diff --git a/ACORDE/MakeACORDEFullMisAlignment.C b/ACORDE/MakeACORDEFullMisAlignment.C index b8af83b96b9..2d02d01680a 100644 --- a/ACORDE/MakeACORDEFullMisAlignment.C +++ b/ACORDE/MakeACORDEFullMisAlignment.C @@ -1,93 +1,93 @@ -void MakeACORDEFullMisAlignment(){ - // Create TClonesArray of full misalignment objects for ACORDE - // - const char* macroname = "MakeACORDEFullMisAlignment.C"; - // Activate CDB storage and load geometry from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - cdb->SetRun(0); - - AliCDBStorage* storage; - - //load geom from local file till ACORDE is not switched on by default in standard config-files - if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){ - TString Storage = gSystem->Getenv("STORAGE"); - if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) { - Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()); - return; - } - storage = cdb->GetStorage(Storage.Data()); - if(!storage){ - Error(macroname,"Unable to open storage %s\n",Storage.Data()); - return; - } - - AliCDBPath path("GRP","Geometry","Data"); - AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun()); - if(!entry) Fatal(macroname,"Could not get the specified CDB entry!"); - entry->SetOwner(0); - TGeoManager* geom = (TGeoManager*) entry->GetObject(); - AliGeomManager::SetGeometry(geom); - }else{ - AliGeomManager::LoadGeometry(); //load geom from default CDB storage - - } - // AliGeomManager::LoadGeometry("geometry.root"); - - TClonesArray *array = new TClonesArray("AliAlignObjParams",60); - TClonesArray &alobj = *array; - - TRandom *rnd = new TRandom(4321); - Int_t j = 0; - Double_t dx, dy, dz, dpsi, dtheta, dphi; - - // RS = local - // sigma translation = 1 mm - // sigma rotation = 0.5 degrees - Double_t sigmatr = 2; - Double_t sigmarot = 1; - - TString symname; - TString basename = "ACORDE/Array"; - Int_t iIndex=0; - AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; - UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex); - - for (Int_t imod=0; imod<60; imod++){ - dx = rnd->Gaus(0.,sigmatr); - dy = rnd->Gaus(0.,sigmatr); - dz = rnd->Gaus(0.,sigmatr); - dpsi = rnd->Gaus(0.,sigmarot); - dtheta = rnd->Gaus(0.,sigmarot); - dphi = rnd->Gaus(0.,sigmarot); - symname = basename; - symname += imod; - new(alobj[j++]) AliAlignObjParams(symname, volid, dx, dy, dz,dpsi, dtheta, dphi, kFALSE); - } - - if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){ - // save on file - const char* filename = "ACORDEfullMisalignment.root"; - TFile f(filename,"RECREATE"); - if(!f){ - Error(macroname,"cannot open file for output\n"); - return; - } - Info(macroname,"Saving alignment objects to the file %s", filename); - f.cd(); - f.WriteObject(array,"ACORDEAlignObjs","kSingleKey"); - f.Close(); - }else{ - // save in CDB storage - AliCDBMetaData* md = new AliCDBMetaData(); - md->SetResponsible("E. Cuautle & M. Rodriguez"); - md->SetComment("Full misalignment for ACORDE"); - md->SetAliRootVersion(gSystem->Getenv("$ARVERSION")); - AliCDBId id("ACORDE/Align/Data",0,AliCDBRunRange::Infinity()); - storage->Put(array,id,md); - } - - array->Delete(); - -} - +void MakeACORDEFullMisAlignment(){ + // Create TClonesArray of full misalignment objects for ACORDE + // + const char* macroname = "MakeACORDEFullMisAlignment.C"; + // Activate CDB storage and load geometry from CDB + AliCDBManager* cdb = AliCDBManager::Instance(); + if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + cdb->SetRun(0); + + AliCDBStorage* storage; + + //load geom from local file till ACORDE is not switched on by default in standard config-files + if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){ + TString Storage = gSystem->Getenv("STORAGE"); + if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) { + Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()); + return; + } + storage = cdb->GetStorage(Storage.Data()); + if(!storage){ + Error(macroname,"Unable to open storage %s\n",Storage.Data()); + return; + } + + AliCDBPath path("GRP","Geometry","Data"); + AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun()); + if(!entry) Fatal(macroname,"Could not get the specified CDB entry!"); + entry->SetOwner(0); + TGeoManager* geom = (TGeoManager*) entry->GetObject(); + AliGeomManager::SetGeometry(geom); + }else{ + AliGeomManager::LoadGeometry(); //load geom from default CDB storage + + } + // AliGeomManager::LoadGeometry("geometry.root"); + + TClonesArray *array = new TClonesArray("AliAlignObjParams",60); + TClonesArray &alobj = *array; + + TRandom *rnd = new TRandom(4321); + Int_t j = 0; + Double_t dx, dy, dz, dpsi, dtheta, dphi; + + // RS = local + // sigma translation = 1 mm + // sigma rotation = 0.5 degrees + Double_t sigmatr = 2; + Double_t sigmarot = 1; + + TString symname; + TString basename = "ACORDE/Array"; + Int_t iIndex=0; + AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; + UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex); + + for (Int_t imod=0; imod<60; imod++){ + dx = rnd->Gaus(0.,sigmatr); + dy = rnd->Gaus(0.,sigmatr); + dz = rnd->Gaus(0.,sigmatr); + dpsi = rnd->Gaus(0.,sigmarot); + dtheta = rnd->Gaus(0.,sigmarot); + dphi = rnd->Gaus(0.,sigmarot); + symname = basename; + symname += imod; + new(alobj[j++]) AliAlignObjParams(symname, volid, dx, dy, dz,dpsi, dtheta, dphi, kFALSE); + } + + if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){ + // save on file + const char* filename = "ACORDEfullMisalignment.root"; + TFile f(filename,"RECREATE"); + if(!f){ + Error(macroname,"cannot open file for output\n"); + return; + } + Info(macroname,"Saving alignment objects to the file %s", filename); + f.cd(); + f.WriteObject(array,"ACORDEAlignObjs","kSingleKey"); + f.Close(); + }else{ + // save in CDB storage + AliCDBMetaData* md = new AliCDBMetaData(); + md->SetResponsible("E. Cuautle & M. Rodriguez"); + md->SetComment("Full misalignment for ACORDE"); + md->SetAliRootVersion(gSystem->Getenv("$ARVERSION")); + AliCDBId id("ACORDE/Align/Data",0,AliCDBRunRange::Infinity()); + storage->Put(array,id,md); + } + + array->Delete(); + +} + diff --git a/ACORDE/MakeACORDEResMisAlignment.C b/ACORDE/MakeACORDEResMisAlignment.C index c8413c938d4..26bbc455c01 100644 --- a/ACORDE/MakeACORDEResMisAlignment.C +++ b/ACORDE/MakeACORDEResMisAlignment.C @@ -1,94 +1,94 @@ -void MakeACORDEResMisAlignment(){ - // Create TClonesArray of Residual misalignment objects for ACORDE - // - const char* macroname = "MakeACORDEResMisAlignment.C"; - // Activate CDB storage and load geometry from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - cdb->SetRun(0); - - AliCDBStorage* storage; - - //load geom from local file till ACORDE is not switched on by default in standard config-files - if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){ - TString Storage = gSystem->Getenv("STORAGE"); - if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) { - Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()); - return; - } - storage = cdb->GetStorage(Storage.Data()); - if(!storage){ - Error(macroname,"Unable to open storage %s\n",Storage.Data()); - return; - } - - AliCDBPath path("GRP","Geometry","Data"); - AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun()); - if(!entry) Fatal(macroname,"Could not get the specified CDB entry!"); - entry->SetOwner(0); - TGeoManager* geom = (TGeoManager*) entry->GetObject(); - AliGeomManager::SetGeometry(geom); - }else{ - AliGeomManager::LoadGeometry(); //load geom from default CDB storage - - - } - // AliGeomManager::LoadGeometry("geometry.root"); - - TClonesArray *array = new TClonesArray("AliAlignObjParams",64); - TClonesArray &alobj = *array; - - TRandom *rnd = new TRandom(4321); - Int_t j = 0; - Double_t dx, dy, dz, dpsi, dtheta, dphi; - - // RS = local - // sigma translation - // sigma rotation - Double_t sigmatr = 2; // max shift in cm - Double_t sigmarot = 1; // max rot in degrees - - TString symname; - TString basename = "ACORDE/Array"; - Int_t iIndex=0; - AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; - UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex); - - for (Int_t imod=0; imod<60; imod++){ - dx = rnd->Gaus(0.,sigmatr); - dy = rnd->Gaus(0.,sigmatr); - dz = rnd->Gaus(0.,sigmatr); - dpsi = rnd->Gaus(0.,sigmarot); - dtheta = rnd->Gaus(0.,sigmarot); - dphi = rnd->Gaus(0.,sigmarot); - symname = basename; - symname += imod; - new(alobj[j++]) AliAlignObjParams(symname, volid, dx, dy, dz,dpsi, dtheta, dphi, kFALSE); - } - - if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){ - // save on file - const char* filename = "ACORDEResMisalignment.root"; - TFile f(filename,"RECREATE"); - if(!f){ - Error(macroname,"cannot open file for output\n"); - return; - } - Info(macroname,"Saving residual misalignment objects to the file %s", filename); - f.cd(); - f.WriteObject(array,"ACORDEAlignObjs","kSingleKey"); - f.Close(); - }else{ - // save in CDB storage - AliCDBMetaData* md = new AliCDBMetaData(); - md->SetResponsible("E. Cuautle & M. Rodriguez "); - md->SetComment("Residual misalignment for ACORDE"); - md->SetAliRootVersion(gSystem->Getenv("$ARVERSION")); - AliCDBId id("ACORDE/Align/Data",0,AliCDBRunRange::Infinity()); - storage->Put(array,id,md); - } - - array->Delete(); - -} - +void MakeACORDEResMisAlignment(){ + // Create TClonesArray of Residual misalignment objects for ACORDE + // + const char* macroname = "MakeACORDEResMisAlignment.C"; + // Activate CDB storage and load geometry from CDB + AliCDBManager* cdb = AliCDBManager::Instance(); + if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + cdb->SetRun(0); + + AliCDBStorage* storage; + + //load geom from local file till ACORDE is not switched on by default in standard config-files + if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){ + TString Storage = gSystem->Getenv("STORAGE"); + if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) { + Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()); + return; + } + storage = cdb->GetStorage(Storage.Data()); + if(!storage){ + Error(macroname,"Unable to open storage %s\n",Storage.Data()); + return; + } + + AliCDBPath path("GRP","Geometry","Data"); + AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun()); + if(!entry) Fatal(macroname,"Could not get the specified CDB entry!"); + entry->SetOwner(0); + TGeoManager* geom = (TGeoManager*) entry->GetObject(); + AliGeomManager::SetGeometry(geom); + }else{ + AliGeomManager::LoadGeometry(); //load geom from default CDB storage + + + } + // AliGeomManager::LoadGeometry("geometry.root"); + + TClonesArray *array = new TClonesArray("AliAlignObjParams",64); + TClonesArray &alobj = *array; + + TRandom *rnd = new TRandom(4321); + Int_t j = 0; + Double_t dx, dy, dz, dpsi, dtheta, dphi; + + // RS = local + // sigma translation + // sigma rotation + Double_t sigmatr = 2; // max shift in cm + Double_t sigmarot = 1; // max rot in degrees + + TString symname; + TString basename = "ACORDE/Array"; + Int_t iIndex=0; + AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; + UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex); + + for (Int_t imod=0; imod<60; imod++){ + dx = rnd->Gaus(0.,sigmatr); + dy = rnd->Gaus(0.,sigmatr); + dz = rnd->Gaus(0.,sigmatr); + dpsi = rnd->Gaus(0.,sigmarot); + dtheta = rnd->Gaus(0.,sigmarot); + dphi = rnd->Gaus(0.,sigmarot); + symname = basename; + symname += imod; + new(alobj[j++]) AliAlignObjParams(symname, volid, dx, dy, dz,dpsi, dtheta, dphi, kFALSE); + } + + if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){ + // save on file + const char* filename = "ACORDEResMisalignment.root"; + TFile f(filename,"RECREATE"); + if(!f){ + Error(macroname,"cannot open file for output\n"); + return; + } + Info(macroname,"Saving residual misalignment objects to the file %s", filename); + f.cd(); + f.WriteObject(array,"ACORDEAlignObjs","kSingleKey"); + f.Close(); + }else{ + // save in CDB storage + AliCDBMetaData* md = new AliCDBMetaData(); + md->SetResponsible("E. Cuautle & M. Rodriguez "); + md->SetComment("Residual misalignment for ACORDE"); + md->SetAliRootVersion(gSystem->Getenv("$ARVERSION")); + AliCDBId id("ACORDE/Align/Data",0,AliCDBRunRange::Infinity()); + storage->Put(array,id,md); + } + + array->Delete(); + +} + diff --git a/ACORDE/MakeACORDEZeroMisAlignment.C b/ACORDE/MakeACORDEZeroMisAlignment.C index 04b7feb10d0..7154a82140b 100644 --- a/ACORDE/MakeACORDEZeroMisAlignment.C +++ b/ACORDE/MakeACORDEZeroMisAlignment.C @@ -1,85 +1,85 @@ -void MakeACORDEZeroMisAlignment(){ - // Create TClonesArray of zero misalignment objects for ACORDE - // - const char* macroname = "MakeACORDEZeroMisAlignment.C"; - // Activate CDB storage and load geometry from CDB - AliCDBManager* cdb = AliCDBManager::Instance(); - if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - cdb->SetRun(0); - - AliCDBStorage* storage; - - //load geom from local file till ACORDE is not switched on by default in standard config-files - if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){ - TString Storage = gSystem->Getenv("STORAGE"); - if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) { - Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()); - return; - } - storage = cdb->GetStorage(Storage.Data()); - if(!storage){ - Error(macroname,"Unable to open storage %s\n",Storage.Data()); - return; - } - - AliCDBPath path("GRP","Geometry","Data"); - AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun()); - if(!entry) Fatal(macroname,"Could not get the specified CDB entry!"); - entry->SetOwner(0); - TGeoManager* geom = (TGeoManager*) entry->GetObject(); - AliGeomManager::SetGeometry(geom); - }else{ - AliGeomManager::LoadGeometry(); //load geom from default CDB storage - - } - // AliGeomManager::LoadGeometry("geometry.root"); - - TClonesArray *array = new TClonesArray("AliAlignObjParams",64); - TClonesArray &alobj = *array; - - TRandom *rnd = new TRandom(4321); - Int_t j = 0; - Double_t dx=0, dy=0, dz=0, dpsi=0, dtheta=0, dphi=0; - - // RS = local - // sigma translation - // sigma rotation - - TString symname; - TString basename = "ACORDE/Array"; - Int_t iIndex=0; - AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; - UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex); - - for (Int_t imod=0; imod<60; imod++){ - symname = basename; - symname += imod; - new(alobj[j++]) AliAlignObjParams(symname, volid, dx, dy, dz,dpsi, dtheta, dphi, kFALSE); - } - - if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){ - // save on file - const char* filename = "ACORDEZeroMisalignment.root"; - TFile f(filename,"RECREATE"); - if(!f){ - Error(macroname,"cannot open file for output\n"); - return; - } - Info(macroname,"Saving alignment objects to the file %s", filename); - f.cd(); - f.WriteObject(array,"ACORDEAlignObjs","kSingleKey"); - f.Close(); - }else{ - // save in CDB storage - AliCDBMetaData* md = new AliCDBMetaData(); - md->SetResponsible("E. Cuautle & M. Rodriguez"); - md->SetComment("Zero misalignment for ACORDE"); - md->SetAliRootVersion(gSystem->Getenv("$ARVERSION")); - AliCDBId id("ACORDE/Align/Data",0,AliCDBRunRange::Infinity()); - storage->Put(array,id,md); - } - - array->Delete(); - -} - +void MakeACORDEZeroMisAlignment(){ + // Create TClonesArray of zero misalignment objects for ACORDE + // + const char* macroname = "MakeACORDEZeroMisAlignment.C"; + // Activate CDB storage and load geometry from CDB + AliCDBManager* cdb = AliCDBManager::Instance(); + if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + cdb->SetRun(0); + + AliCDBStorage* storage; + + //load geom from local file till ACORDE is not switched on by default in standard config-files + if( TString(gSystem->Getenv("TOCDB")) == TString("kTRUE") ){ + TString Storage = gSystem->Getenv("STORAGE"); + if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) { + Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()); + return; + } + storage = cdb->GetStorage(Storage.Data()); + if(!storage){ + Error(macroname,"Unable to open storage %s\n",Storage.Data()); + return; + } + + AliCDBPath path("GRP","Geometry","Data"); + AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun()); + if(!entry) Fatal(macroname,"Could not get the specified CDB entry!"); + entry->SetOwner(0); + TGeoManager* geom = (TGeoManager*) entry->GetObject(); + AliGeomManager::SetGeometry(geom); + }else{ + AliGeomManager::LoadGeometry(); //load geom from default CDB storage + + } + // AliGeomManager::LoadGeometry("geometry.root"); + + TClonesArray *array = new TClonesArray("AliAlignObjParams",64); + TClonesArray &alobj = *array; + + TRandom *rnd = new TRandom(4321); + Int_t j = 0; + Double_t dx=0, dy=0, dz=0, dpsi=0, dtheta=0, dphi=0; + + // RS = local + // sigma translation + // sigma rotation + + TString symname; + TString basename = "ACORDE/Array"; + Int_t iIndex=0; + AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; + UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex); + + for (Int_t imod=0; imod<60; imod++){ + symname = basename; + symname += imod; + new(alobj[j++]) AliAlignObjParams(symname, volid, dx, dy, dz,dpsi, dtheta, dphi, kFALSE); + } + + if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){ + // save on file + const char* filename = "ACORDEZeroMisalignment.root"; + TFile f(filename,"RECREATE"); + if(!f){ + Error(macroname,"cannot open file for output\n"); + return; + } + Info(macroname,"Saving alignment objects to the file %s", filename); + f.cd(); + f.WriteObject(array,"ACORDEAlignObjs","kSingleKey"); + f.Close(); + }else{ + // save in CDB storage + AliCDBMetaData* md = new AliCDBMetaData(); + md->SetResponsible("E. Cuautle & M. Rodriguez"); + md->SetComment("Zero misalignment for ACORDE"); + md->SetAliRootVersion(gSystem->Getenv("$ARVERSION")); + AliCDBId id("ACORDE/Align/Data",0,AliCDBRunRange::Infinity()); + storage->Put(array,id,md); + } + + array->Delete(); + +} + diff --git a/ACORDE/Survey_1014872_ACORDE.txt b/ACORDE/Survey_1014872_ACORDE.txt index c686f942e45..ccedd0204e8 100644 --- a/ACORDE/Survey_1014872_ACORDE.txt +++ b/ACORDE/Survey_1014872_ACORDE.txt @@ -1,165 +1,165 @@ -> Title: -Measurement of the module array -> Date: -24/06/2009 -> Subdetector: -ACORDE -> Report URL: -https://edms.cern.ch/document/1014872 -> Version: -1 -> General Observations: -Point Types: M(easured),T(ransformed), R(eference) -Mean planes for modules on both sides and on top of the L3 magnet are given in the report -> Coordinate System: -ALICEPH -> Units: -m -> Nr Columns: -7 -> Column Names: -Point Name,XPH,YPH,ZPH,Point Type,Target Used,Precision(mm) -> Data: -M0_0_I 1.4983 8.6429 0.8837 M Y 1 -M0_0_O -1.4987 8.6461 0.8554 M Y 1 -M0_0_P -0.0173 8.6372 0.8719 M Y 1 -M0_1_I 7.4369 4.9077 3.4868 M Y 1 -M0_1_O 5.3151 7.0277 3.4768 M Y 1 -M0_2_I 7.4437 4.9076 2.4652 M Y 1 -M0_2_O 5.3185 7.0209 2.4818 M Y 1 -M0_3_I 7.4440 4.9126 1.4704 M Y 1 -M0_3_O 5.3138 7.0251 1.4708 M Y 1 -M0_4_I 7.4454 4.9102 0.4875 M Y 1 -M0_4_O 5.3109 7.0234 0.4807 M Y 1 -M0_5_I 7.4599 4.8964 -0.5164 M Y 1 -M0_5_O 5.3317 7.0100 -0.4827 M Y 1 -M0_6_I 7.4541 4.9039 -1.2034 M Y 1 -M0_6_O 5.3185 7.0164 -1.2166 M Y 1 -M0_7_O 5.3159 7.0185 -2.8183 M Y 1 -M0_7_P 6.3933 5.9405 -2.8109 M Y 1 -M0_8_O 5.3188 7.0197 -3.4706 M Y 1 -M0_8_P 6.3928 5.9408 -3.4901 M Y 1 -M0_9_I 1.5120 8.6387 0.1553 M Y 1 -M0_9_O -1.4890 8.6449 0.1681 M Y 1 -M0_9_P -0.0087 8.6352 0.1616 M Y 1 -M1_0_I 5.2945 7.0420 4.4703 M Y 1 -M1_0_O 3.1771 9.1684 4.4805 M Y 1 -M1_1_I 5.2976 7.0411 3.4819 M Y 1 -M1_1_O 3.1763 9.1652 3.4916 M Y 1 -M1_2_I 5.2991 7.0435 2.4910 M Y 1 -M1_2_O 3.1768 9.1628 2.5235 M Y 1 -M1_3_I 5.2991 7.0475 1.4758 M Y 1 -M1_3_O 3.1699 9.1623 1.4632 M Y 1 -M1_4_I 5.3017 7.0548 0.4741 M Y 1 -M1_4_O 3.1638 9.1586 0.4719 M Y 1 -M1_5_I 5.2971 7.0566 -0.5056 M Y 1 -M1_5_O 3.1627 9.1643 -0.5051 M Y 1 -M1_6_I 5.2969 7.0593 -1.5033 M Y 1 -M1_6_O 3.1611 9.1675 -1.5102 M Y 1 -M1_7_I 5.2960 7.0551 -2.5199 M Y 1 -M1_7_O 3.1674 9.1686 -2.4726 M Y 1 -M1_8_I 5.2886 7.0564 -3.4811 M Y 1 -M1_8_O 3.1659 9.1759 -3.4836 M Y 1 -M1_9_I 5.2813 7.0610 -4.4995 M Y 1 -M1_9_O 3.1619 9.1818 -4.4973 M Y 1 -M2_0_I 3.0495 8.6394 4.4873 M Y 1 -M2_0_O 0.0509 8.6442 4.4924 M Y 1 -M2_0_P 1.5312 8.6349 4.4902 M Y 1 -M2_1_I 3.0447 8.6371 3.4856 M Y 1 -M2_1_O 0.0427 8.6407 3.4944 M Y 1 -M2_1_P 1.5236 8.6304 3.4916 M Y 1 -M2_2_I 3.0409 8.6374 2.4854 M Y 1 -M2_2_O 0.0423 8.6428 2.4961 M Y 1 -M2_2_P 1.5207 8.6329 2.4941 M Y 1 -M2_3_I 3.0373 8.6379 1.4855 M Y 1 -M2_3_O 0.0388 8.6452 1.4988 M Y 1 -M2_3_P 1.5198 8.6342 1.4905 M Y 1 -M2_4_I 3.0317 8.6393 0.4872 M Y 1 -M2_4_O 0.0338 8.6429 0.4941 M Y 1 -M2_4_P 1.5152 8.6340 0.4920 M Y 1 -M2_5_I 3.0330 8.6428 -0.5163 M Y 1 -M2_5_O 0.0343 8.6428 -0.4985 M Y 1 -M2_5_P 1.5532 8.6360 -0.5094 M Y 1 -M2_6_I 3.0320 8.6416 -1.5125 M Y 1 -M2_6_O 0.0340 8.6447 -1.4993 M Y 1 -M2_6_P 1.5143 8.6362 -1.5074 M Y 1 -M2_7_I 3.0342 8.6413 -2.5163 M Y 1 -M2_7_O 0.0353 8.6436 -2.5046 M Y 1 -M2_7_P 1.5164 8.6368 -2.5066 M Y 1 -M2_8_I 3.0393 8.6414 -3.5122 M Y 1 -M2_8_O 0.0424 8.6432 -3.5031 M Y 1 -M2_8_P 1.5247 8.6348 -3.5099 M Y 1 -M2_9_I 3.0409 8.6373 -4.5143 M Y 1 -M2_9_O 0.0420 8.6432 -4.5019 M Y 1 -M2_9_P 1.5191 8.6342 -4.5083 M Y 1 -M3_0_I -0.0397 8.6420 4.5320 M Y 1 -M3_0_O -3.0389 8.6461 4.5187 M Y 1 -M3_0_P -1.5617 8.6367 4.5243 M Y 1 -M3_1_I -0.0381 8.6404 3.4990 M Y 1 -M3_1_O -3.0387 8.6425 3.4866 M Y 1 -M3_1_P -1.5208 8.6349 3.4919 M Y 1 -M3_2_I -0.0298 8.6442 2.4996 M Y 1 -M3_2_O -3.0316 8.6399 2.4845 M Y 1 -M3_2_P -1.5510 8.6353 2.4940 M Y 1 -M3_3_I -0.0286 8.6445 1.5016 M Y 1 -M3_3_O -3.0297 8.6440 1.4869 M Y 1 -M3_3_P -1.5514 8.6377 1.4929 M Y 1 -M3_4_I -0.0304 8.6466 0.5060 M Y 1 -M3_4_O -3.0299 8.6406 0.4884 M Y 1 -M3_4_P -1.5492 8.6349 0.4949 M Y 1 -M3_5_I -0.0312 8.6445 -0.4956 M Y 1 -M3_5_O -3.0326 8.6406 -0.5262 M Y 1 -M3_5_P -1.5512 8.6350 -0.5139 M Y 1 -M3_6_I -0.0340 8.6460 -1.4978 M Y 1 -M3_6_O -3.0336 8.6379 -1.5219 M Y 1 -M3_6_P -1.5563 8.6349 -1.5096 M Y 1 -M3_7_I -0.0277 8.6428 -2.5007 M Y 1 -M3_7_O -3.0287 8.6407 -2.5188 M Y 1 -M3_7_P -1.5471 8.6351 -2.5148 M Y 1 -M3_8_I -0.0307 8.6462 -3.4975 M Y 1 -M3_8_O -3.0325 8.6446 -3.5254 M Y 1 -M3_8_P -1.5522 8.6382 -3.5102 M Y 1 -M3_9_I -0.0290 8.6467 -4.5031 M Y 1 -M3_9_O -3.0284 8.6434 -4.4444 M Y 1 -M3_9_P -1.5484 8.6375 -4.5149 M Y 1 -M4_0_I -3.1938 9.2020 4.4987 M Y 1 -M4_0_O -5.2669 7.0334 4.4407 M Y 1 -M4_1_I -3.1893 9.2001 3.5146 M Y 1 -M4_1_O -5.2662 7.0334 3.4897 M Y 1 -M4_2_O -5.2657 7.0283 2.4781 M Y 1 -M4_3_I -3.1813 9.1973 1.4442 M Y 1 -M4_3_O -5.2633 7.0342 1.4857 M Y 1 -M4_4_I -3.1740 9.1977 0.4817 M Y 1 -M4_4_O -5.2611 7.0413 0.4015 M Y 1 -M4_5_I -3.1737 9.1893 -0.5238 M Y 1 -M4_5_O -5.2674 7.0365 -0.4926 M Y 1 -M4_6_I -3.1697 9.1871 -1.5335 M Y 1 -M4_6_O -5.2734 7.0493 -1.4163 M Y 1 -M4_7_I -3.1722 9.1879 -2.5239 M Y 1 -M4_7_O -5.2685 7.0410 -2.5759 M Y 1 -M4_8_I -3.1756 9.1902 -3.5317 M Y 1 -M4_8_O -5.2671 7.0371 -3.5188 M Y 1 -M4_9_I -3.1791 9.1908 -4.5427 M Y 1 -M4_9_O -5.2671 7.0358 -4.4294 M Y 1 -M5_0_I 1.4989 8.6429 -0.1383 M Y 1 -M5_0_O -1.5025 8.6426 -0.1414 M Y 1 -M5_0_P 0.0164 8.6353 -0.1415 M Y 1 -M5_1_I -5.3746 6.9638 3.5044 M Y 1 -M5_1_O -7.4858 4.8354 3.4907 M Y 1 -M5_2_I -5.3775 6.9639 2.4814 M Y 1 -M5_2_O -7.4861 4.8294 2.4999 M Y 1 -M5_3_I -5.3733 6.9707 1.0776 M Y 1 -M5_3_O -7.4793 4.8319 1.0324 M Y 1 -M5_4_I -5.3688 6.9686 0.4609 M Y 1 -M5_4_O -7.4826 4.8358 0.4306 M Y 1 -M5_5_I -5.0283 7.2995 -0.8510 M Y 1 -M5_5_P -6.1036 6.2211 -0.8168 M Y 1 -M5_6_I -5.0698 7.2608 -1.8491 M Y 1 -M5_6_P -6.1418 6.1802 -1.8126 M Y 1 -M5_7_I -5.3140 7.0229 -2.5830 M Y 1 -M5_7_O -7.4311 4.8954 -2.5870 M Y 1 -M5_8_I -5.3059 7.0288 -3.4932 M Y 1 -M5_8_O -7.4257 4.9029 -3.4954 M Y 1 -M5_9_I 1.4954 8.6442 -1.1394 M Y 1 -M5_9_O -1.5026 8.6442 -1.1416 M Y 1 +> Title: +Measurement of the module array +> Date: +24/06/2009 +> Subdetector: +ACORDE +> Report URL: +https://edms.cern.ch/document/1014872 +> Version: +1 +> General Observations: +Point Types: M(easured),T(ransformed), R(eference) +Mean planes for modules on both sides and on top of the L3 magnet are given in the report +> Coordinate System: +ALICEPH +> Units: +m +> Nr Columns: +7 +> Column Names: +Point Name,XPH,YPH,ZPH,Point Type,Target Used,Precision(mm) +> Data: +M0_0_I 1.4983 8.6429 0.8837 M Y 1 +M0_0_O -1.4987 8.6461 0.8554 M Y 1 +M0_0_P -0.0173 8.6372 0.8719 M Y 1 +M0_1_I 7.4369 4.9077 3.4868 M Y 1 +M0_1_O 5.3151 7.0277 3.4768 M Y 1 +M0_2_I 7.4437 4.9076 2.4652 M Y 1 +M0_2_O 5.3185 7.0209 2.4818 M Y 1 +M0_3_I 7.4440 4.9126 1.4704 M Y 1 +M0_3_O 5.3138 7.0251 1.4708 M Y 1 +M0_4_I 7.4454 4.9102 0.4875 M Y 1 +M0_4_O 5.3109 7.0234 0.4807 M Y 1 +M0_5_I 7.4599 4.8964 -0.5164 M Y 1 +M0_5_O 5.3317 7.0100 -0.4827 M Y 1 +M0_6_I 7.4541 4.9039 -1.2034 M Y 1 +M0_6_O 5.3185 7.0164 -1.2166 M Y 1 +M0_7_O 5.3159 7.0185 -2.8183 M Y 1 +M0_7_P 6.3933 5.9405 -2.8109 M Y 1 +M0_8_O 5.3188 7.0197 -3.4706 M Y 1 +M0_8_P 6.3928 5.9408 -3.4901 M Y 1 +M0_9_I 1.5120 8.6387 0.1553 M Y 1 +M0_9_O -1.4890 8.6449 0.1681 M Y 1 +M0_9_P -0.0087 8.6352 0.1616 M Y 1 +M1_0_I 5.2945 7.0420 4.4703 M Y 1 +M1_0_O 3.1771 9.1684 4.4805 M Y 1 +M1_1_I 5.2976 7.0411 3.4819 M Y 1 +M1_1_O 3.1763 9.1652 3.4916 M Y 1 +M1_2_I 5.2991 7.0435 2.4910 M Y 1 +M1_2_O 3.1768 9.1628 2.5235 M Y 1 +M1_3_I 5.2991 7.0475 1.4758 M Y 1 +M1_3_O 3.1699 9.1623 1.4632 M Y 1 +M1_4_I 5.3017 7.0548 0.4741 M Y 1 +M1_4_O 3.1638 9.1586 0.4719 M Y 1 +M1_5_I 5.2971 7.0566 -0.5056 M Y 1 +M1_5_O 3.1627 9.1643 -0.5051 M Y 1 +M1_6_I 5.2969 7.0593 -1.5033 M Y 1 +M1_6_O 3.1611 9.1675 -1.5102 M Y 1 +M1_7_I 5.2960 7.0551 -2.5199 M Y 1 +M1_7_O 3.1674 9.1686 -2.4726 M Y 1 +M1_8_I 5.2886 7.0564 -3.4811 M Y 1 +M1_8_O 3.1659 9.1759 -3.4836 M Y 1 +M1_9_I 5.2813 7.0610 -4.4995 M Y 1 +M1_9_O 3.1619 9.1818 -4.4973 M Y 1 +M2_0_I 3.0495 8.6394 4.4873 M Y 1 +M2_0_O 0.0509 8.6442 4.4924 M Y 1 +M2_0_P 1.5312 8.6349 4.4902 M Y 1 +M2_1_I 3.0447 8.6371 3.4856 M Y 1 +M2_1_O 0.0427 8.6407 3.4944 M Y 1 +M2_1_P 1.5236 8.6304 3.4916 M Y 1 +M2_2_I 3.0409 8.6374 2.4854 M Y 1 +M2_2_O 0.0423 8.6428 2.4961 M Y 1 +M2_2_P 1.5207 8.6329 2.4941 M Y 1 +M2_3_I 3.0373 8.6379 1.4855 M Y 1 +M2_3_O 0.0388 8.6452 1.4988 M Y 1 +M2_3_P 1.5198 8.6342 1.4905 M Y 1 +M2_4_I 3.0317 8.6393 0.4872 M Y 1 +M2_4_O 0.0338 8.6429 0.4941 M Y 1 +M2_4_P 1.5152 8.6340 0.4920 M Y 1 +M2_5_I 3.0330 8.6428 -0.5163 M Y 1 +M2_5_O 0.0343 8.6428 -0.4985 M Y 1 +M2_5_P 1.5532 8.6360 -0.5094 M Y 1 +M2_6_I 3.0320 8.6416 -1.5125 M Y 1 +M2_6_O 0.0340 8.6447 -1.4993 M Y 1 +M2_6_P 1.5143 8.6362 -1.5074 M Y 1 +M2_7_I 3.0342 8.6413 -2.5163 M Y 1 +M2_7_O 0.0353 8.6436 -2.5046 M Y 1 +M2_7_P 1.5164 8.6368 -2.5066 M Y 1 +M2_8_I 3.0393 8.6414 -3.5122 M Y 1 +M2_8_O 0.0424 8.6432 -3.5031 M Y 1 +M2_8_P 1.5247 8.6348 -3.5099 M Y 1 +M2_9_I 3.0409 8.6373 -4.5143 M Y 1 +M2_9_O 0.0420 8.6432 -4.5019 M Y 1 +M2_9_P 1.5191 8.6342 -4.5083 M Y 1 +M3_0_I -0.0397 8.6420 4.5320 M Y 1 +M3_0_O -3.0389 8.6461 4.5187 M Y 1 +M3_0_P -1.5617 8.6367 4.5243 M Y 1 +M3_1_I -0.0381 8.6404 3.4990 M Y 1 +M3_1_O -3.0387 8.6425 3.4866 M Y 1 +M3_1_P -1.5208 8.6349 3.4919 M Y 1 +M3_2_I -0.0298 8.6442 2.4996 M Y 1 +M3_2_O -3.0316 8.6399 2.4845 M Y 1 +M3_2_P -1.5510 8.6353 2.4940 M Y 1 +M3_3_I -0.0286 8.6445 1.5016 M Y 1 +M3_3_O -3.0297 8.6440 1.4869 M Y 1 +M3_3_P -1.5514 8.6377 1.4929 M Y 1 +M3_4_I -0.0304 8.6466 0.5060 M Y 1 +M3_4_O -3.0299 8.6406 0.4884 M Y 1 +M3_4_P -1.5492 8.6349 0.4949 M Y 1 +M3_5_I -0.0312 8.6445 -0.4956 M Y 1 +M3_5_O -3.0326 8.6406 -0.5262 M Y 1 +M3_5_P -1.5512 8.6350 -0.5139 M Y 1 +M3_6_I -0.0340 8.6460 -1.4978 M Y 1 +M3_6_O -3.0336 8.6379 -1.5219 M Y 1 +M3_6_P -1.5563 8.6349 -1.5096 M Y 1 +M3_7_I -0.0277 8.6428 -2.5007 M Y 1 +M3_7_O -3.0287 8.6407 -2.5188 M Y 1 +M3_7_P -1.5471 8.6351 -2.5148 M Y 1 +M3_8_I -0.0307 8.6462 -3.4975 M Y 1 +M3_8_O -3.0325 8.6446 -3.5254 M Y 1 +M3_8_P -1.5522 8.6382 -3.5102 M Y 1 +M3_9_I -0.0290 8.6467 -4.5031 M Y 1 +M3_9_O -3.0284 8.6434 -4.4444 M Y 1 +M3_9_P -1.5484 8.6375 -4.5149 M Y 1 +M4_0_I -3.1938 9.2020 4.4987 M Y 1 +M4_0_O -5.2669 7.0334 4.4407 M Y 1 +M4_1_I -3.1893 9.2001 3.5146 M Y 1 +M4_1_O -5.2662 7.0334 3.4897 M Y 1 +M4_2_O -5.2657 7.0283 2.4781 M Y 1 +M4_3_I -3.1813 9.1973 1.4442 M Y 1 +M4_3_O -5.2633 7.0342 1.4857 M Y 1 +M4_4_I -3.1740 9.1977 0.4817 M Y 1 +M4_4_O -5.2611 7.0413 0.4015 M Y 1 +M4_5_I -3.1737 9.1893 -0.5238 M Y 1 +M4_5_O -5.2674 7.0365 -0.4926 M Y 1 +M4_6_I -3.1697 9.1871 -1.5335 M Y 1 +M4_6_O -5.2734 7.0493 -1.4163 M Y 1 +M4_7_I -3.1722 9.1879 -2.5239 M Y 1 +M4_7_O -5.2685 7.0410 -2.5759 M Y 1 +M4_8_I -3.1756 9.1902 -3.5317 M Y 1 +M4_8_O -5.2671 7.0371 -3.5188 M Y 1 +M4_9_I -3.1791 9.1908 -4.5427 M Y 1 +M4_9_O -5.2671 7.0358 -4.4294 M Y 1 +M5_0_I 1.4989 8.6429 -0.1383 M Y 1 +M5_0_O -1.5025 8.6426 -0.1414 M Y 1 +M5_0_P 0.0164 8.6353 -0.1415 M Y 1 +M5_1_I -5.3746 6.9638 3.5044 M Y 1 +M5_1_O -7.4858 4.8354 3.4907 M Y 1 +M5_2_I -5.3775 6.9639 2.4814 M Y 1 +M5_2_O -7.4861 4.8294 2.4999 M Y 1 +M5_3_I -5.3733 6.9707 1.0776 M Y 1 +M5_3_O -7.4793 4.8319 1.0324 M Y 1 +M5_4_I -5.3688 6.9686 0.4609 M Y 1 +M5_4_O -7.4826 4.8358 0.4306 M Y 1 +M5_5_I -5.0283 7.2995 -0.8510 M Y 1 +M5_5_P -6.1036 6.2211 -0.8168 M Y 1 +M5_6_I -5.0698 7.2608 -1.8491 M Y 1 +M5_6_P -6.1418 6.1802 -1.8126 M Y 1 +M5_7_I -5.3140 7.0229 -2.5830 M Y 1 +M5_7_O -7.4311 4.8954 -2.5870 M Y 1 +M5_8_I -5.3059 7.0288 -3.4932 M Y 1 +M5_8_O -7.4257 4.9029 -3.4954 M Y 1 +M5_9_I 1.4954 8.6442 -1.1394 M Y 1 +M5_9_O -1.5026 8.6442 -1.1416 M Y 1 M5_9_P -0.0216 8.6374 -1.1395 M Y 1 \ No newline at end of file diff --git a/ACORDE/macros/AnalysisMacros/Local/AliAnalysisTaskAcorde.h b/ACORDE/macros/AnalysisMacros/Local/AliAnalysisTaskAcorde.h index fe12137faf4..c0340c71496 100644 --- a/ACORDE/macros/AnalysisMacros/Local/AliAnalysisTaskAcorde.h +++ b/ACORDE/macros/AnalysisMacros/Local/AliAnalysisTaskAcorde.h @@ -1,84 +1,84 @@ -///////////////////////////////////////////////////////////////////////////// -// -// AliAnalysisTaskAcorde class -// -// Description: -// -// Reads the information of ACORDE-ESD -// Also it is implemented a simple matching between tracks -// to look for the extrapolation of them to ACORDE modules -// -// Create some fHistograms and one tree with the information -// of the matching tracks -// -// Author: Mario Rodríguez Cahuantzi -// -// -// -// Created: June 30th. 2010 @ FCFM - BUAP, Puebla, MX -// Last update: created -// -///////////////////////////////////////////////////////////////////////////// - -#ifndef ALIANALYSISTASKACORDE_H -#define ALIANALYSISTASKACORDE_H - -class TH2F; -class TH1F; -class AliESDEvent; -class TArrayI; -class TList; -#include "AliAnalysisTask.h" - -class AliAnalysisTaskAcorde : public AliAnalysisTask { - public: - AliAnalysisTaskAcorde(const char *name = "AliAnalysisTaskAcorde"); - virtual ~AliAnalysisTaskAcorde(); //! Destructor fo task - - virtual void ConnectInputData(Option_t *); //! Connects input data to class analysis - virtual void CreateOutputObjects(); //! Creates output object (fCosmicTree) - virtual void Exec(Option_t *option); //! Execution class - virtual void Terminate(Option_t *); //! Terminate class - - private: - - - AliESDEvent *fESD; //! ESD object - TArrayI *fPair; //! Pair track connected (up & down) - TTree *fCosmicTree; //! TTree with some information of matched tracks - Int_t fnTracks; //! # of recontructed tracks - Int_t fNMatchTracks; //! # of matched tracks - - - // Cut definitions - - const Int_t fkMinTPCclusters; //! cut in clusters - const Float_t fkMinTrackDist; //! cut in distance - const Float_t fkMinCutDir; //! minimum cut - - Float_t fXAco; //! x-coordinate of extrapolated track to ACORDE - Float_t fYAco; //! y-coordinate of extrapolated track to ACORDE - Float_t fZAco; //! z-coordinate of extrapolated track to ACORDE - Int_t fTrigger; //! fTrigger label - TString fActiveTriggerDetector; //! detector string - - Int_t fNSingleTracks; //! no. of single track - Int_t fNMatchedTracks; //! no. of matched track - - - TList *fHisto; //! list of fHistograms - TH1F *fAcordeHitsAll; //! hits of acorde - TH1F *fAcordeMultiAll; //! multi. of acorde modules - TH1F *fAcordeHitsTPC; //! hits of acorde (if track) - TH1F *fAcordeMultiTPC; //! multi. of acorde modules (if track) - TH1F *fNTracksMatched; //! matched tracks - TH1F *fNTracks; //! no. of tracks - TH2F *fTracksToAcorde; //! tracks extrapolated to acorde. - - AliAnalysisTaskAcorde(const AliAnalysisTaskAcorde&); // not implemented - AliAnalysisTaskAcorde& operator=(const AliAnalysisTaskAcorde&); // not implemented - - ClassDef(AliAnalysisTaskAcorde, 1); // example of analysis -}; - -#endif +///////////////////////////////////////////////////////////////////////////// +// +// AliAnalysisTaskAcorde class +// +// Description: +// +// Reads the information of ACORDE-ESD +// Also it is implemented a simple matching between tracks +// to look for the extrapolation of them to ACORDE modules +// +// Create some fHistograms and one tree with the information +// of the matching tracks +// +// Author: Mario Rodríguez Cahuantzi +// +// +// +// Created: June 30th. 2010 @ FCFM - BUAP, Puebla, MX +// Last update: created +// +///////////////////////////////////////////////////////////////////////////// + +#ifndef ALIANALYSISTASKACORDE_H +#define ALIANALYSISTASKACORDE_H + +class TH2F; +class TH1F; +class AliESDEvent; +class TArrayI; +class TList; +#include "AliAnalysisTask.h" + +class AliAnalysisTaskAcorde : public AliAnalysisTask { + public: + AliAnalysisTaskAcorde(const char *name = "AliAnalysisTaskAcorde"); + virtual ~AliAnalysisTaskAcorde(); //! Destructor fo task + + virtual void ConnectInputData(Option_t *); //! Connects input data to class analysis + virtual void CreateOutputObjects(); //! Creates output object (fCosmicTree) + virtual void Exec(Option_t *option); //! Execution class + virtual void Terminate(Option_t *); //! Terminate class + + private: + + + AliESDEvent *fESD; //! ESD object + TArrayI *fPair; //! Pair track connected (up & down) + TTree *fCosmicTree; //! TTree with some information of matched tracks + Int_t fnTracks; //! # of recontructed tracks + Int_t fNMatchTracks; //! # of matched tracks + + + // Cut definitions + + const Int_t fkMinTPCclusters; //! cut in clusters + const Float_t fkMinTrackDist; //! cut in distance + const Float_t fkMinCutDir; //! minimum cut + + Float_t fXAco; //! x-coordinate of extrapolated track to ACORDE + Float_t fYAco; //! y-coordinate of extrapolated track to ACORDE + Float_t fZAco; //! z-coordinate of extrapolated track to ACORDE + Int_t fTrigger; //! fTrigger label + TString fActiveTriggerDetector; //! detector string + + Int_t fNSingleTracks; //! no. of single track + Int_t fNMatchedTracks; //! no. of matched track + + + TList *fHisto; //! list of fHistograms + TH1F *fAcordeHitsAll; //! hits of acorde + TH1F *fAcordeMultiAll; //! multi. of acorde modules + TH1F *fAcordeHitsTPC; //! hits of acorde (if track) + TH1F *fAcordeMultiTPC; //! multi. of acorde modules (if track) + TH1F *fNTracksMatched; //! matched tracks + TH1F *fNTracks; //! no. of tracks + TH2F *fTracksToAcorde; //! tracks extrapolated to acorde. + + AliAnalysisTaskAcorde(const AliAnalysisTaskAcorde&); // not implemented + AliAnalysisTaskAcorde& operator=(const AliAnalysisTaskAcorde&); // not implemented + + ClassDef(AliAnalysisTaskAcorde, 1); // example of analysis +}; + +#endif diff --git a/ANALYSIS/AliAnalysisTaskPIDCombined.cxx b/ANALYSIS/AliAnalysisTaskPIDCombined.cxx index 465b1cec426..6c98be60e43 100644 --- a/ANALYSIS/AliAnalysisTaskPIDCombined.cxx +++ b/ANALYSIS/AliAnalysisTaskPIDCombined.cxx @@ -1,355 +1,355 @@ -/************************************************************************* -* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -/////////////////////////////////////////////////////////////////////////// -// // -// Basic Analysis Task // -// for PID Analysis // -// // -/////////////////////////////////////////////////////////////////////////// - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include "AliAnalysisTaskPIDCombined.h" - -const char *AliAnalysisTaskPIDCombined::fgkBinMomDesc[AliAnalysisTaskPIDCombined::kPtBins] = { - " 0 <= p < 0.5 GeV/c", - " 0.5 <= p < 0.7 GeV/c", - " 0.7 <= p < 1.0 GeV/c", - " 1.0 <= p < 1.5 GeV/c", - " 1.5 <= p < 2.0 GeV/c", - " p >= 2.0 GeV/c" -}; - -ClassImp(AliAnalysisTaskPIDCombined) - -//_________________________________________________________________________________ -AliAnalysisTaskPIDCombined::AliAnalysisTaskPIDCombined() : - AliAnalysisTaskSE(), - fHistList(), - fProbTPCnSigma(), - fProbTOFnSigma(), - fProbTPCTOFnSigmaTPC(), - fProbTPC(), - fProbTOF(), - fProbTPCTOF(), - fPriors(), - fProbTPCTOFnSigTPCMom(), - fProbTPCnSigTPCMom(), - fProbTOFnSigTOFMom(), - fPriorsUsed(), - fPIDResponse(0x0), - fPIDCombined(0x0), - fTrackCuts(0x0), - fTrackFilter(0x0), +/************************************************************************* +* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +/////////////////////////////////////////////////////////////////////////// +// // +// Basic Analysis Task // +// for PID Analysis // +// // +/////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include "AliAnalysisTaskPIDCombined.h" + +const char *AliAnalysisTaskPIDCombined::fgkBinMomDesc[AliAnalysisTaskPIDCombined::kPtBins] = { + " 0 <= p < 0.5 GeV/c", + " 0.5 <= p < 0.7 GeV/c", + " 0.7 <= p < 1.0 GeV/c", + " 1.0 <= p < 1.5 GeV/c", + " 1.5 <= p < 2.0 GeV/c", + " p >= 2.0 GeV/c" +}; + +ClassImp(AliAnalysisTaskPIDCombined) + +//_________________________________________________________________________________ +AliAnalysisTaskPIDCombined::AliAnalysisTaskPIDCombined() : + AliAnalysisTaskSE(), + fHistList(), + fProbTPCnSigma(), + fProbTOFnSigma(), + fProbTPCTOFnSigmaTPC(), + fProbTPC(), + fProbTOF(), + fProbTPCTOF(), + fPriors(), + fProbTPCTOFnSigTPCMom(), + fProbTPCnSigTPCMom(), + fProbTOFnSigTOFMom(), + fPriorsUsed(), + fPIDResponse(0x0), + fPIDCombined(0x0), + fTrackCuts(0x0), + fTrackFilter(0x0), fDeDx(NULL), fDeDxTuned(NULL) -{ - // - // Constructor - // -} - -//_________________________________________________________________________________ -AliAnalysisTaskPIDCombined::AliAnalysisTaskPIDCombined(const char *name) : - AliAnalysisTaskSE(name), - fHistList(), - fProbTPCnSigma(), - fProbTOFnSigma(), - fProbTPCTOFnSigmaTPC(), - fProbTPC(), - fProbTOF(), - fProbTPCTOF(), - fPriors(), - fProbTPCTOFnSigTPCMom(), - fProbTPCnSigTPCMom(), - fProbTOFnSigTOFMom(), - fPriorsUsed(), - fPIDResponse(0x0), - fPIDCombined(0x0), - fTrackCuts(0x0), - fTrackFilter(0x0), +{ + // + // Constructor + // +} + +//_________________________________________________________________________________ +AliAnalysisTaskPIDCombined::AliAnalysisTaskPIDCombined(const char *name) : + AliAnalysisTaskSE(name), + fHistList(), + fProbTPCnSigma(), + fProbTOFnSigma(), + fProbTPCTOFnSigmaTPC(), + fProbTPC(), + fProbTOF(), + fProbTPCTOF(), + fPriors(), + fProbTPCTOFnSigTPCMom(), + fProbTPCnSigTPCMom(), + fProbTOFnSigTOFMom(), + fPriorsUsed(), + fPIDResponse(0x0), + fPIDCombined(0x0), + fTrackCuts(0x0), + fTrackFilter(0x0), fDeDx(NULL), fDeDxTuned(NULL) -{ - // - // Constructor - // - DefineInput(0,TChain::Class()); - DefineOutput(1, TList::Class()); -} - -//_________________________________________________________________________________ -void AliAnalysisTaskPIDCombined::UserCreateOutputObjects() -{ - // - // Initialise the framework objects - // - - - // ------- track cuts - fTrackCuts = new AliESDtrackCuts("fTrackCuts", "Standard"); - fTrackCuts->SetAcceptKinkDaughters(kFALSE); - fTrackCuts->SetMinNClustersTPC(80); - fTrackCuts->SetMaxChi2PerClusterTPC(4); - fTrackCuts->SetMaxDCAToVertexXY(3); - fTrackCuts->SetMaxDCAToVertexZ(3); - fTrackCuts->SetRequireTPCRefit(kTRUE); - fTrackCuts->SetRequireITSRefit(kTRUE); - fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); - fTrackFilter = new AliAnalysisFilter("trackFilter"); - fTrackFilter->AddCuts(fTrackCuts); - - - - // ------- setup PIDCombined - fPIDCombined=new AliPIDCombined; - fPIDCombined->SetDefaultTPCPriors(); - fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF); - - // no light nuclei - no need to call it, this is default - // fPIDCombined->SetSelectedSpecies(AliPID::kSPECIES); - - - fHistList.Add(new TH1D("nEvents","Number of Evnets;Selection",2,0,2)); - - for (Int_t ispec=0; ispec<5; ++ispec){ - - - fProbTPC[ispec]=new TH2D(Form("prob%s_mom_TPC",AliPID::ParticleName(ispec)), - Form("%s probability vs. momentum;momentum;probability",AliPID::ParticleName(ispec)), - 100,0.,20.,50,0.,1.); - fHistList.Add(fProbTPC[ispec]); - fProbTPCnSigma[ispec]=new TH2D(Form("prob%s_nSigma_TPC",AliPID::ParticleName(ispec)), - Form("%s probability vs. n#sigma;n#sigma;probability",AliPID::ParticleName(ispec)), - 20,-5.,5.,50,0.,1.); - fHistList.Add(fProbTPCnSigma[ispec]); - - for (Int_t ibin=0;ibinSetBinContent(ich,0.02); - break; - case AliPID::kMuon: - for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.02); - break; - case AliPID::kPion: - for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.56); - break; - case AliPID::kKaon: - for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.20); - break; - case AliPID::kProton: - for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.20); - break; - default: - break; - } - fPIDCombined->SetPriorDistribution((AliPID::EParticleType)ispec,fPriors[ispec]); - - // priors used - fPriorsUsed[ispec] = new TH2D(Form("%s_priorsUsed",AliPID::ParticleName(ispec)), - Form("%s priors vs transverse momentum;p_{t} (GeV/c);priors",AliPID::ParticleName(ispec)), - 100,0.,20.,101,0,1.01); - fHistList.Add(fPriorsUsed[ispec]); - } - - +{ + // + // Constructor + // + DefineInput(0,TChain::Class()); + DefineOutput(1, TList::Class()); +} + +//_________________________________________________________________________________ +void AliAnalysisTaskPIDCombined::UserCreateOutputObjects() +{ + // + // Initialise the framework objects + // + + + // ------- track cuts + fTrackCuts = new AliESDtrackCuts("fTrackCuts", "Standard"); + fTrackCuts->SetAcceptKinkDaughters(kFALSE); + fTrackCuts->SetMinNClustersTPC(80); + fTrackCuts->SetMaxChi2PerClusterTPC(4); + fTrackCuts->SetMaxDCAToVertexXY(3); + fTrackCuts->SetMaxDCAToVertexZ(3); + fTrackCuts->SetRequireTPCRefit(kTRUE); + fTrackCuts->SetRequireITSRefit(kTRUE); + fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); + fTrackFilter = new AliAnalysisFilter("trackFilter"); + fTrackFilter->AddCuts(fTrackCuts); + + + + // ------- setup PIDCombined + fPIDCombined=new AliPIDCombined; + fPIDCombined->SetDefaultTPCPriors(); + fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF); + + // no light nuclei - no need to call it, this is default + // fPIDCombined->SetSelectedSpecies(AliPID::kSPECIES); + + + fHistList.Add(new TH1D("nEvents","Number of Evnets;Selection",2,0,2)); + + for (Int_t ispec=0; ispec<5; ++ispec){ + + + fProbTPC[ispec]=new TH2D(Form("prob%s_mom_TPC",AliPID::ParticleName(ispec)), + Form("%s probability vs. momentum;momentum;probability",AliPID::ParticleName(ispec)), + 100,0.,20.,50,0.,1.); + fHistList.Add(fProbTPC[ispec]); + fProbTPCnSigma[ispec]=new TH2D(Form("prob%s_nSigma_TPC",AliPID::ParticleName(ispec)), + Form("%s probability vs. n#sigma;n#sigma;probability",AliPID::ParticleName(ispec)), + 20,-5.,5.,50,0.,1.); + fHistList.Add(fProbTPCnSigma[ispec]); + + for (Int_t ibin=0;ibinSetBinContent(ich,0.02); + break; + case AliPID::kMuon: + for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.02); + break; + case AliPID::kPion: + for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.56); + break; + case AliPID::kKaon: + for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.20); + break; + case AliPID::kProton: + for (Int_t ich=1;ich<=100;ich++) fPriors[ispec]->SetBinContent(ich,0.20); + break; + default: + break; + } + fPIDCombined->SetPriorDistribution((AliPID::EParticleType)ispec,fPriors[ispec]); + + // priors used + fPriorsUsed[ispec] = new TH2D(Form("%s_priorsUsed",AliPID::ParticleName(ispec)), + Form("%s priors vs transverse momentum;p_{t} (GeV/c);priors",AliPID::ParticleName(ispec)), + 100,0.,20.,101,0,1.01); + fHistList.Add(fPriorsUsed[ispec]); + } + + fDeDx = new TH2D("hDeDx",";p_{TPC};dE/dx (a.u.)",500,0,5,500,0,500); fHistList.Add(fDeDx); fDeDxTuned = new TH2D("hDeDxTuned",";p_{TPC};dE/dx (a.u.)",500,0,5,500,0,500); fHistList.Add(fDeDxTuned); - fHistList.SetOwner(); - PostData(1,&fHistList); - - -} - -//_________________________________________________________________________________ -void AliAnalysisTaskPIDCombined::UserExec(Option_t *) -{ - // - // Main loop. Called for every event - // - AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); - AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); - fPIDResponse=inputHandler->GetPIDResponse(); - if (!fPIDResponse) AliFatal("This Task needs the PID response attached to the inputHandler"); - - // Printf(" ---------------------- UserExec PID task ---------------------"); - - FillHistogram("nEvents",0.); - - AliVEvent *event=InputEvent(); - AliVTrack *track=0x0; - Int_t ntracks=event->GetNumberOfTracks(); - - Double_t probTPC[AliPID::kSPECIES]={0.}; - Double_t probTOF[AliPID::kSPECIES]={0.}; - Double_t probTPCTOF[AliPID::kSPECIES]={0.}; - - //loop over all tracks - for (Int_t itrack=0; itrackGetTrack(itrack); - - if ( fTrackFilter->IsSelected(track) ) { - - Double_t mom=track->GetTPCmomentum(); - Int_t ibin=GetMomBin(mom); - - fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC); - UInt_t detUsed = fPIDCombined->ComputeProbabilities(track, fPIDResponse, probTPC); - - if (detUsed != 0) { // TPC is available - for (Int_t ispec=0; ispecNumberOfSigmasTPC(track,(AliPID::EParticleType)ispec); - fProbTPC[ispec]->Fill(mom,probTPC[ispec]); - fProbTPCnSigma[ispec]->Fill(nSigmaTPC,probTPC[ispec]); - fProbTPCnSigTPCMom[ibin][ispec]->Fill(nSigmaTPC,probTPC[ispec]); - } - - // compute priors for TPC+TOF, even if we ask just TOF for PID - fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF); - detUsed = fPIDCombined->ComputeProbabilities(track, fPIDResponse, probTOF); - Double_t priors[5]; // check priors used for TOF - fPIDCombined->GetPriors(track,priors,fPIDResponse,detUsed); - for(Int_t ispec=0;ispec<5;ispec++) fPriorsUsed[ispec]->Fill(TMath::Abs(track->Pt()),priors[ispec]); - - if (detUsed != 0) { // TOF is available - for (Int_t ispec=0; ispecNumberOfSigmasTOF(track,(AliPID::EParticleType)ispec); - fProbTOF[ispec]->Fill(mom,probTOF[ispec]); - fProbTOFnSigma[ispec]->Fill(nSigmaTOF,probTOF[ispec]); - fProbTOFnSigTOFMom[ibin][ispec]->Fill(nSigmaTOF,probTOF[ispec]); - } - } - - fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC); - detUsed = fPIDCombined->ComputeProbabilities(track, fPIDResponse, probTPCTOF); - if (detUsed == (UInt_t)fPIDCombined->GetDetectorMask() ) { - for (Int_t ispec=0; ispecNumberOfSigmasTPC(track,(AliPID::EParticleType)ispec); - fProbTPCTOF[ispec]->Fill(mom,probTPCTOF[ispec]); - fProbTPCTOFnSigmaTPC[ispec]->Fill(nSigmaTPC,probTPCTOF[ispec]); - fProbTPCTOFnSigTPCMom[ibin][ispec]->Fill(nSigmaTPC,probTPCTOF[ispec]); - } - } - - } - + fHistList.SetOwner(); + PostData(1,&fHistList); + + +} + +//_________________________________________________________________________________ +void AliAnalysisTaskPIDCombined::UserExec(Option_t *) +{ + // + // Main loop. Called for every event + // + AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); + AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); + fPIDResponse=inputHandler->GetPIDResponse(); + if (!fPIDResponse) AliFatal("This Task needs the PID response attached to the inputHandler"); + + // Printf(" ---------------------- UserExec PID task ---------------------"); + + FillHistogram("nEvents",0.); + + AliVEvent *event=InputEvent(); + AliVTrack *track=0x0; + Int_t ntracks=event->GetNumberOfTracks(); + + Double_t probTPC[AliPID::kSPECIES]={0.}; + Double_t probTOF[AliPID::kSPECIES]={0.}; + Double_t probTPCTOF[AliPID::kSPECIES]={0.}; + + //loop over all tracks + for (Int_t itrack=0; itrackGetTrack(itrack); + + if ( fTrackFilter->IsSelected(track) ) { + + Double_t mom=track->GetTPCmomentum(); + Int_t ibin=GetMomBin(mom); + + fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC); + UInt_t detUsed = fPIDCombined->ComputeProbabilities(track, fPIDResponse, probTPC); + + if (detUsed != 0) { // TPC is available + for (Int_t ispec=0; ispecNumberOfSigmasTPC(track,(AliPID::EParticleType)ispec); + fProbTPC[ispec]->Fill(mom,probTPC[ispec]); + fProbTPCnSigma[ispec]->Fill(nSigmaTPC,probTPC[ispec]); + fProbTPCnSigTPCMom[ibin][ispec]->Fill(nSigmaTPC,probTPC[ispec]); + } + + // compute priors for TPC+TOF, even if we ask just TOF for PID + fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF); + detUsed = fPIDCombined->ComputeProbabilities(track, fPIDResponse, probTOF); + Double_t priors[5]; // check priors used for TOF + fPIDCombined->GetPriors(track,priors,fPIDResponse,detUsed); + for(Int_t ispec=0;ispec<5;ispec++) fPriorsUsed[ispec]->Fill(TMath::Abs(track->Pt()),priors[ispec]); + + if (detUsed != 0) { // TOF is available + for (Int_t ispec=0; ispecNumberOfSigmasTOF(track,(AliPID::EParticleType)ispec); + fProbTOF[ispec]->Fill(mom,probTOF[ispec]); + fProbTOFnSigma[ispec]->Fill(nSigmaTOF,probTOF[ispec]); + fProbTOFnSigTOFMom[ibin][ispec]->Fill(nSigmaTOF,probTOF[ispec]); + } + } + + fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC); + detUsed = fPIDCombined->ComputeProbabilities(track, fPIDResponse, probTPCTOF); + if (detUsed == (UInt_t)fPIDCombined->GetDetectorMask() ) { + for (Int_t ispec=0; ispecNumberOfSigmasTPC(track,(AliPID::EParticleType)ispec); + fProbTPCTOF[ispec]->Fill(mom,probTPCTOF[ispec]); + fProbTPCTOFnSigmaTPC[ispec]->Fill(nSigmaTPC,probTPCTOF[ispec]); + fProbTPCTOFnSigTPCMom[ibin][ispec]->Fill(nSigmaTPC,probTPCTOF[ispec]); + } + } + + } + fPIDResponse->GetTPCsignalTunedOnData(track); fDeDx->Fill(mom,track->GetTPCsignal()); fDeDxTuned->Fill(mom,track->GetTPCsignalTunedOnData()); - - } - } - - PostData(1, &fHistList); -} - -//_________________________________________________________________________________ -void AliAnalysisTaskPIDCombined::FillHistogram(const char* name, Double_t x, Double_t weight) -{ - // - // Fill 1D histogram by name - // - ((TH1*)fHistList.FindObject(name))->Fill(x,weight); -} - -//_________________________________________________________________________________ -void AliAnalysisTaskPIDCombined::FillHistogram(const char* name, Double_t x, Double_t y, Double_t weight) -{ - // - // Fill 2D histogram by name - // - ((TH2*)fHistList.FindObject(name))->Fill(x,y,weight); -} - - -//_________________________________________________________________________________ -Int_t AliAnalysisTaskPIDCombined::GetMomBin(Float_t mom) -{ - // - // Given momentum return histogram to be filled - // - if (mom>0. && mom < 0.5) return 0; - if (mom>=0.5 && mom < 0.7) return 1; - if (mom>=0.7 && mom < 1.0) return 2; - if (mom>=1.0 && mom < 1.5) return 3; - if (mom>=1.5 && mom < 2.0) return 4; - return kPtBins-1; -} - + + } + } + + PostData(1, &fHistList); +} + +//_________________________________________________________________________________ +void AliAnalysisTaskPIDCombined::FillHistogram(const char* name, Double_t x, Double_t weight) +{ + // + // Fill 1D histogram by name + // + ((TH1*)fHistList.FindObject(name))->Fill(x,weight); +} + +//_________________________________________________________________________________ +void AliAnalysisTaskPIDCombined::FillHistogram(const char* name, Double_t x, Double_t y, Double_t weight) +{ + // + // Fill 2D histogram by name + // + ((TH2*)fHistList.FindObject(name))->Fill(x,y,weight); +} + + +//_________________________________________________________________________________ +Int_t AliAnalysisTaskPIDCombined::GetMomBin(Float_t mom) +{ + // + // Given momentum return histogram to be filled + // + if (mom>0. && mom < 0.5) return 0; + if (mom>=0.5 && mom < 0.7) return 1; + if (mom>=0.7 && mom < 1.0) return 2; + if (mom>=1.0 && mom < 1.5) return 3; + if (mom>=1.5 && mom < 2.0) return 4; + return kPtBins-1; +} + diff --git a/ANALYSIS/AliAnalysisTaskPIDCombined.h b/ANALYSIS/AliAnalysisTaskPIDCombined.h index 8b930359090..5bffb074119 100644 --- a/ANALYSIS/AliAnalysisTaskPIDCombined.h +++ b/ANALYSIS/AliAnalysisTaskPIDCombined.h @@ -1,79 +1,79 @@ -#ifndef ALIPIDCOMBINEDTASK_H -#define ALIPIDCOMBINEDTASK_H -/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -//######################################################### -//# # -//# Task for testing the combined PID # -//# # -//# Pietro Antonioli, INFN / Pietro.Antonioli@bo.infn.it # -//# Jens Wiechula, Uni Tübingen / Jens.Wiechula@cern.ch # -//# # -//######################################################### - -#include -#include -#include - -#include -#include - -#include "AliAnalysisTaskSE.h" - -class TH1F; -class TH2D; -class fPIDResponse; -class fPIDCombined; - -class AliAnalysisTaskPIDCombined : public AliAnalysisTaskSE { - -public: - static const Int_t kPtBins = 6; - - - AliAnalysisTaskPIDCombined(); - AliAnalysisTaskPIDCombined(const char *name); - virtual ~AliAnalysisTaskPIDCombined(){;} - - virtual void UserExec(Option_t *option); - virtual void UserCreateOutputObjects(); - - -private: - - TList fHistList; //! list of histograms - TH2D *fProbTPCnSigma[AliPID::kSPECIES]; //! probabilities vs nSigma in the TPC - TH2D *fProbTOFnSigma[AliPID::kSPECIES]; //! probabilities vs nSigma the TOF - TH2D *fProbTPCTOFnSigmaTPC[AliPID::kSPECIES]; //! comb. probabilities vs nSigma TPC - TH2D *fProbTPC[AliPID::kSPECIES]; //! probabilities vs mom in the TPC - TH2D *fProbTOF[AliPID::kSPECIES]; //! probabilities vs mom in the TOF - TH2D *fProbTPCTOF[AliPID::kSPECIES]; //! combined probabilities vs mom TPC-TOF - TH1F *fPriors[AliPID::kSPECIES]; //! priors - - TH2D *fProbTPCTOFnSigTPCMom[kPtBins][AliPID::kSPECIES]; // prob. x mom. bins - TH2D *fProbTPCnSigTPCMom[kPtBins][AliPID::kSPECIES]; // prob. x mom. bins - TH2D *fProbTOFnSigTOFMom[kPtBins][AliPID::kSPECIES]; // prob. x mom. bins - - TH2D *fPriorsUsed[AliPID::kSPECIES]; //! priors used - - const AliPIDResponse *fPIDResponse; //! PID response object - AliPIDCombined *fPIDCombined; //! combined PID object - AliESDtrackCuts *fTrackCuts; //! track selection - AliAnalysisFilter *fTrackFilter; //! track filter +#ifndef ALIPIDCOMBINEDTASK_H +#define ALIPIDCOMBINEDTASK_H +/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//######################################################### +//# # +//# Task for testing the combined PID # +//# # +//# Pietro Antonioli, INFN / Pietro.Antonioli@bo.infn.it # +//# Jens Wiechula, Uni Tübingen / Jens.Wiechula@cern.ch # +//# # +//######################################################### + +#include +#include +#include + +#include +#include + +#include "AliAnalysisTaskSE.h" + +class TH1F; +class TH2D; +class fPIDResponse; +class fPIDCombined; + +class AliAnalysisTaskPIDCombined : public AliAnalysisTaskSE { + +public: + static const Int_t kPtBins = 6; + + + AliAnalysisTaskPIDCombined(); + AliAnalysisTaskPIDCombined(const char *name); + virtual ~AliAnalysisTaskPIDCombined(){;} + + virtual void UserExec(Option_t *option); + virtual void UserCreateOutputObjects(); + + +private: + + TList fHistList; //! list of histograms + TH2D *fProbTPCnSigma[AliPID::kSPECIES]; //! probabilities vs nSigma in the TPC + TH2D *fProbTOFnSigma[AliPID::kSPECIES]; //! probabilities vs nSigma the TOF + TH2D *fProbTPCTOFnSigmaTPC[AliPID::kSPECIES]; //! comb. probabilities vs nSigma TPC + TH2D *fProbTPC[AliPID::kSPECIES]; //! probabilities vs mom in the TPC + TH2D *fProbTOF[AliPID::kSPECIES]; //! probabilities vs mom in the TOF + TH2D *fProbTPCTOF[AliPID::kSPECIES]; //! combined probabilities vs mom TPC-TOF + TH1F *fPriors[AliPID::kSPECIES]; //! priors + + TH2D *fProbTPCTOFnSigTPCMom[kPtBins][AliPID::kSPECIES]; // prob. x mom. bins + TH2D *fProbTPCnSigTPCMom[kPtBins][AliPID::kSPECIES]; // prob. x mom. bins + TH2D *fProbTOFnSigTOFMom[kPtBins][AliPID::kSPECIES]; // prob. x mom. bins + + TH2D *fPriorsUsed[AliPID::kSPECIES]; //! priors used + + const AliPIDResponse *fPIDResponse; //! PID response object + AliPIDCombined *fPIDCombined; //! combined PID object + AliESDtrackCuts *fTrackCuts; //! track selection + AliAnalysisFilter *fTrackFilter; //! track filter TH2D *fDeDx; //! histo with the dedx TH2D *fDeDxTuned; //! histo to check the dedx tuning in MC - - AliAnalysisTaskPIDCombined(const AliAnalysisTaskPIDCombined &c); - AliAnalysisTaskPIDCombined& operator= (const AliAnalysisTaskPIDCombined &c); - - void FillHistogram(const char* name, Double_t x, Double_t weight=1.); - void FillHistogram(const char* name, Double_t x, Double_t y, Double_t weight=1.); - Int_t GetMomBin(Float_t mom); - static const char* fgkBinMomDesc[kPtBins]; - - ClassDef(AliAnalysisTaskPIDCombined, 2); -}; -#endif + + AliAnalysisTaskPIDCombined(const AliAnalysisTaskPIDCombined &c); + AliAnalysisTaskPIDCombined& operator= (const AliAnalysisTaskPIDCombined &c); + + void FillHistogram(const char* name, Double_t x, Double_t weight=1.); + void FillHistogram(const char* name, Double_t x, Double_t y, Double_t weight=1.); + Int_t GetMomBin(Float_t mom); + static const char* fgkBinMomDesc[kPtBins]; + + ClassDef(AliAnalysisTaskPIDCombined, 2); +}; +#endif diff --git a/ANALYSIS/AliAnalysisTaskPIDqa.h b/ANALYSIS/AliAnalysisTaskPIDqa.h index aba1d015ccf..53ca7caf8f0 100644 --- a/ANALYSIS/AliAnalysisTaskPIDqa.h +++ b/ANALYSIS/AliAnalysisTaskPIDqa.h @@ -1,110 +1,110 @@ -#ifndef ALIANALYSISTASKPIDQA_H -#define ALIANALYSISTASKPIDQA_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: AliAnalysisTaskPIDqa.h 43642 2010-09-17 15:50:04Z wiechula $ */ -// Author: Jens Wiechula, 24/02/2011 - -//============================================================================== -// -// -// -// -//============================================================================== - -#include - -#ifndef ALIANALYSISTASKSE_H -#include "AliAnalysisTaskSE.h" -#endif - -class AliPIDResponse; -class TList; -class AliVEvent; -class AliESDv0KineCuts; - -class AliAnalysisTaskPIDqa : public AliAnalysisTaskSE { - - -public: - AliAnalysisTaskPIDqa(); - AliAnalysisTaskPIDqa(const char *name); - virtual ~AliAnalysisTaskPIDqa(); - - virtual void UserCreateOutputObjects(); - - virtual void UserExec(Option_t */*option*/); - - -private: - AliPIDResponse *fPIDResponse; //! PID response Handler - AliESDv0KineCuts *fV0cuts; //! ESD V0 cuts - - TObjArray *fV0electrons; //! array with pointer to identified particles from V0 decays (electrons) - TObjArray *fV0pions; //! array with pointer to identified particles from V0 decays (pions) - TObjArray *fV0kaons; //! array with pointer to identified particles from V0 decays (kaons) - TObjArray *fV0protons; //! array with pointer to identified particles from V0 decays (ptotons) - - TList *fListQA; //! list with all QA histograms - TList *fListQAits; //! List with ITS QA histograms - TList *fListQAitsSA; //! List with ITS SA QA histograms - TList *fListQAitsPureSA; //! List with ITS pure SA QA histograms - TList *fListQAtpc; //! List with TPC QA histograms - TList *fListQAtrd; //! List with TRD QA histograms - TList *fListQAtof; //! List with TOF QA histograms - TList *fListQAt0; //! List with T0 QA histograms - TList *fListQAemcal; //! List with EMCAL QA histograms - TList *fListQAhmpid; //! List with EMCAL QA histograms - TList *fListQAtofhmpid; //! List with EMCAL QA histograms - TList *fListQAtpctof; //! List with combined PID from TPC + TOF - TList *fListQAV0; //! List with V0 kine cuts QA histograms - TList *fListQAinfo; //! List with information about loaded splines etc. - - - void ExecNewRun(); - - //qa object initialisation - void SetupITSqa(); - void SetupTPCqa(); - void SetupTRDqa(); - void SetupTOFqa(); - void SetupT0qa(); - void SetupEMCALqa(); - void SetupHMPIDqa(); - void SetupTOFHMPIDqa(); - void SetupTPCTOFqa(); - void SetupV0qa(); - void SetupQAinfo(); - - // - void FillV0PIDlist(); - void ClearV0PIDlist(); - // - void FillITSqa(); - void FillTPCqa(); - void FillTRDqa(); - void FillTOFqa(); - void FillT0qa(); - void FillEMCALqa(); - void FillHMPIDqa(); - void FillTOFHMPIDqa(); - void FillTPCTOFqa(); - void FillQAinfo(); - - // - void SetRecoInfo(); - - //helper functions - TVectorD* MakeLogBinning(Int_t nbinsX, Double_t xmin, Double_t xmax); - TVectorD* MakeLinBinning(Int_t nbinsX, Double_t xmin, Double_t xmax); - TVectorD* MakeArbitraryBinning(const char* bins); - - - AliAnalysisTaskPIDqa(const AliAnalysisTaskPIDqa &other); - AliAnalysisTaskPIDqa& operator=(const AliAnalysisTaskPIDqa &other); - - ClassDef(AliAnalysisTaskPIDqa,2) // Task to properly set the PID response functions of all detectors -}; -#endif +#ifndef ALIANALYSISTASKPIDQA_H +#define ALIANALYSISTASKPIDQA_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: AliAnalysisTaskPIDqa.h 43642 2010-09-17 15:50:04Z wiechula $ */ +// Author: Jens Wiechula, 24/02/2011 + +//============================================================================== +// +// +// +// +//============================================================================== + +#include + +#ifndef ALIANALYSISTASKSE_H +#include "AliAnalysisTaskSE.h" +#endif + +class AliPIDResponse; +class TList; +class AliVEvent; +class AliESDv0KineCuts; + +class AliAnalysisTaskPIDqa : public AliAnalysisTaskSE { + + +public: + AliAnalysisTaskPIDqa(); + AliAnalysisTaskPIDqa(const char *name); + virtual ~AliAnalysisTaskPIDqa(); + + virtual void UserCreateOutputObjects(); + + virtual void UserExec(Option_t */*option*/); + + +private: + AliPIDResponse *fPIDResponse; //! PID response Handler + AliESDv0KineCuts *fV0cuts; //! ESD V0 cuts + + TObjArray *fV0electrons; //! array with pointer to identified particles from V0 decays (electrons) + TObjArray *fV0pions; //! array with pointer to identified particles from V0 decays (pions) + TObjArray *fV0kaons; //! array with pointer to identified particles from V0 decays (kaons) + TObjArray *fV0protons; //! array with pointer to identified particles from V0 decays (ptotons) + + TList *fListQA; //! list with all QA histograms + TList *fListQAits; //! List with ITS QA histograms + TList *fListQAitsSA; //! List with ITS SA QA histograms + TList *fListQAitsPureSA; //! List with ITS pure SA QA histograms + TList *fListQAtpc; //! List with TPC QA histograms + TList *fListQAtrd; //! List with TRD QA histograms + TList *fListQAtof; //! List with TOF QA histograms + TList *fListQAt0; //! List with T0 QA histograms + TList *fListQAemcal; //! List with EMCAL QA histograms + TList *fListQAhmpid; //! List with EMCAL QA histograms + TList *fListQAtofhmpid; //! List with EMCAL QA histograms + TList *fListQAtpctof; //! List with combined PID from TPC + TOF + TList *fListQAV0; //! List with V0 kine cuts QA histograms + TList *fListQAinfo; //! List with information about loaded splines etc. + + + void ExecNewRun(); + + //qa object initialisation + void SetupITSqa(); + void SetupTPCqa(); + void SetupTRDqa(); + void SetupTOFqa(); + void SetupT0qa(); + void SetupEMCALqa(); + void SetupHMPIDqa(); + void SetupTOFHMPIDqa(); + void SetupTPCTOFqa(); + void SetupV0qa(); + void SetupQAinfo(); + + // + void FillV0PIDlist(); + void ClearV0PIDlist(); + // + void FillITSqa(); + void FillTPCqa(); + void FillTRDqa(); + void FillTOFqa(); + void FillT0qa(); + void FillEMCALqa(); + void FillHMPIDqa(); + void FillTOFHMPIDqa(); + void FillTPCTOFqa(); + void FillQAinfo(); + + // + void SetRecoInfo(); + + //helper functions + TVectorD* MakeLogBinning(Int_t nbinsX, Double_t xmin, Double_t xmax); + TVectorD* MakeLinBinning(Int_t nbinsX, Double_t xmin, Double_t xmax); + TVectorD* MakeArbitraryBinning(const char* bins); + + + AliAnalysisTaskPIDqa(const AliAnalysisTaskPIDqa &other); + AliAnalysisTaskPIDqa& operator=(const AliAnalysisTaskPIDqa &other); + + ClassDef(AliAnalysisTaskPIDqa,2) // Task to properly set the PID response functions of all detectors +}; +#endif diff --git a/ANALYSIS/AliAnalysisTaskPhiCorr.h b/ANALYSIS/AliAnalysisTaskPhiCorr.h index 6e200d4de4c..033caf8545f 100644 --- a/ANALYSIS/AliAnalysisTaskPhiCorr.h +++ b/ANALYSIS/AliAnalysisTaskPhiCorr.h @@ -1,40 +1,40 @@ -#ifndef ALIANALYSISTASKPHICORR_cxx -#define ALIANALYSISTASKPHICORR_cxx -/* - Simple use case for mixed event analysis - based on ESD or AOD - Delta_phi correlation analysis is performed on charged tracks - for same and mixed events - Author: andreas.morsch@cern.ch -*/ - - -class TH1F; -class TList; -class AliESDEvent; - -#include "AliAnalysisTaskME.h" -#include "AliMixedEvent.h" - -class AliAnalysisTaskPhiCorr : public AliAnalysisTaskME { - public: - AliAnalysisTaskPhiCorr(const char *name = "AliAnalysisTaskPt"); - virtual ~AliAnalysisTaskPhiCorr() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - private: - TList *fHists; // List with histos - TH1F *fHistDphiCO; // Pt spectrum - TH1F *fHistDphiUC; // Pt spectrum - AliMixedEvent fMixedEvent; // Mixed event - - AliAnalysisTaskPhiCorr(const AliAnalysisTaskPhiCorr&); // not implemented - AliAnalysisTaskPhiCorr& operator=(const AliAnalysisTaskPhiCorr&); // not implemented - - ClassDef(AliAnalysisTaskPhiCorr, 1); // example of analysis -}; - -#endif +#ifndef ALIANALYSISTASKPHICORR_cxx +#define ALIANALYSISTASKPHICORR_cxx +/* + Simple use case for mixed event analysis + based on ESD or AOD + Delta_phi correlation analysis is performed on charged tracks + for same and mixed events + Author: andreas.morsch@cern.ch +*/ + + +class TH1F; +class TList; +class AliESDEvent; + +#include "AliAnalysisTaskME.h" +#include "AliMixedEvent.h" + +class AliAnalysisTaskPhiCorr : public AliAnalysisTaskME { + public: + AliAnalysisTaskPhiCorr(const char *name = "AliAnalysisTaskPt"); + virtual ~AliAnalysisTaskPhiCorr() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + private: + TList *fHists; // List with histos + TH1F *fHistDphiCO; // Pt spectrum + TH1F *fHistDphiUC; // Pt spectrum + AliMixedEvent fMixedEvent; // Mixed event + + AliAnalysisTaskPhiCorr(const AliAnalysisTaskPhiCorr&); // not implemented + AliAnalysisTaskPhiCorr& operator=(const AliAnalysisTaskPhiCorr&); // not implemented + + ClassDef(AliAnalysisTaskPhiCorr, 1); // example of analysis +}; + +#endif diff --git a/ANALYSIS/AliESDpidCuts.cxx b/ANALYSIS/AliESDpidCuts.cxx index 7290b9b5cb5..9f7bef18eed 100644 --- a/ANALYSIS/AliESDpidCuts.cxx +++ b/ANALYSIS/AliESDpidCuts.cxx @@ -1,417 +1,417 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AliAnalysisManager.h" -#include "AliInputEventHandler.h" -#include "AliESDtrack.h" -#include "AliESDEvent.h" -#include "AliLog.h" -#include "AliPIDResponse.h" - -#include "AliESDpidCuts.h" - -ClassImp(AliESDpidCuts) - -const Int_t AliESDpidCuts::kNcuts = 3; - -//_____________________________________________________________________ -AliESDpidCuts::AliESDpidCuts(const Char_t *name, const Char_t *title): - AliAnalysisCuts(name, title) - , fPIDresponse(NULL) - , fTPCsigmaCutRequired(0) - , fTOFsigmaCutRequired(0) - , fCutTPCclusterRatio(0.) - , fMinMomentumTOF(0.5) - , fHcutStatistics(NULL) - , fHcutCorrelation(NULL) -{ - // - // Default constructor - // - - memset(fCutTPCnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2); - memset(fCutTOFnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2); - - memset(fHclusterRatio, 0, sizeof(TH1F *) * 2); - memset(fHnSigmaTPC, 0, sizeof(TH1F *) * AliPID::kSPECIES * 2); - memset(fHnSigmaTOF, 0, sizeof(TH1F *) * AliPID::kSPECIES * 2); -} - -//_____________________________________________________________________ -AliESDpidCuts::AliESDpidCuts(const AliESDpidCuts &ref): - AliAnalysisCuts(ref) - , fPIDresponse(NULL) - , fTPCsigmaCutRequired(ref.fTPCsigmaCutRequired) - , fTOFsigmaCutRequired(ref.fTOFsigmaCutRequired) - , fCutTPCclusterRatio(ref.fCutTPCclusterRatio) - , fMinMomentumTOF(ref.fMinMomentumTOF) - , fHcutStatistics(NULL) - , fHcutCorrelation(NULL) -{ - // - // Copy constructor - // - fPIDresponse = ref.fPIDresponse; - memcpy(fCutTPCnSigma, ref.fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); - memcpy(fCutTOFnSigma, ref.fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); - - if(ref.fHcutStatistics) fHcutStatistics = dynamic_cast(ref.fHcutStatistics->Clone()); - if(ref.fHcutCorrelation) fHcutCorrelation = dynamic_cast(ref.fHcutCorrelation->Clone()); - for(Int_t imode = 0; imode < 2; imode++){ - if(ref.fHclusterRatio[imode]) fHclusterRatio[imode] = dynamic_cast(ref.fHclusterRatio[imode]->Clone()); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - if(fHnSigmaTPC[ispec][imode]) fHnSigmaTPC[ispec][imode] = dynamic_cast(fHnSigmaTPC[ispec][imode]->Clone()); - if(fHnSigmaTOF[ispec][imode]) fHnSigmaTOF[ispec][imode] = dynamic_cast(fHnSigmaTPC[ispec][imode]->Clone()); - } - } -} - -//_____________________________________________________________________ -AliESDpidCuts &AliESDpidCuts::operator=(const AliESDpidCuts &ref){ - // - // Assignment operator - // - if(this != &ref) - ref.Copy(*this); - return *this; -} - -//_____________________________________________________________________ -AliESDpidCuts::~AliESDpidCuts(){ - // - // Destructor - // - - delete fHcutCorrelation; - for(Int_t imode = 0; imode < 2; imode++){ - delete fHclusterRatio[imode]; - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - delete fHnSigmaTPC[ispec][imode]; - delete fHnSigmaTOF[ispec][imode]; - } - } -} - -//_____________________________________________________________________ -void AliESDpidCuts::Init(){ - // - // Init function, get PID response from the Analysis Manager - // - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if(mgr){ - AliInputEventHandler *handler = dynamic_cast(mgr->GetInputEventHandler()); - if(handler){ - fPIDresponse = handler->GetPIDResponse(); - } - } -} - -//_____________________________________________________________________ -Bool_t AliESDpidCuts::IsSelected(TObject *obj){ - // - // Select Track - // - AliESDtrack * trk = dynamic_cast(obj); - if(!trk){ - AliError("Provided object is not AliESDtrack!"); - return kFALSE; - } - const AliESDEvent* evt = trk->GetESDEvent(); - if(!evt){ - AliError("No AliESDEvent!"); - return kFALSE; - } - return AcceptTrack(trk, evt); -} - -//_____________________________________________________________________ -void AliESDpidCuts::Copy(TObject &c) const { - // - // Copy function - // - AliESDpidCuts &target = dynamic_cast(c); - - target.fPIDresponse = fPIDresponse; - - target.fCutTPCclusterRatio = fCutTPCclusterRatio; - target.fMinMomentumTOF = fMinMomentumTOF; - - target.fTPCsigmaCutRequired = fTPCsigmaCutRequired; - target.fTOFsigmaCutRequired = fTOFsigmaCutRequired; - - if(fHcutStatistics) target.fHcutStatistics = dynamic_cast(fHcutStatistics->Clone()); - if(fHcutCorrelation) target.fHcutCorrelation = dynamic_cast(fHcutCorrelation->Clone()); - for(Int_t imode = 0; imode < 2; imode++){ - if(fHclusterRatio[imode]) target.fHclusterRatio[imode] = dynamic_cast(fHclusterRatio[imode]->Clone()); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - if(fHnSigmaTPC[ispec][imode]) target.fHnSigmaTPC[ispec][imode] = dynamic_cast(fHnSigmaTPC[ispec][imode]->Clone()); - if(fHnSigmaTOF[ispec][imode]) target.fHnSigmaTOF[ispec][imode] = dynamic_cast(fHnSigmaTOF[ispec][imode]->Clone()); - } - } - - memcpy(target.fCutTPCnSigma, fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); - memcpy(target.fCutTOFnSigma, fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); - - AliESDpidCuts::Copy(c); -} - -//_____________________________________________________________________ -Long64_t AliESDpidCuts::Merge(TCollection *coll){ - // - // Merge Cut objects - // - if(!coll) return 0; - if(coll->IsEmpty()) return 1; - if(!HasHistograms()) return 0; - - TIterator *iter = coll->MakeIterator(); - TObject *o = NULL; - AliESDpidCuts *ref = NULL; - Int_t counter = 0; - while((o = iter->Next())){ - ref = dynamic_cast(o); - if(!ref) continue; - if(!ref->HasHistograms()) continue; - - fHcutStatistics->Add(ref->fHcutStatistics); - fHcutCorrelation->Add(ref->fHcutCorrelation); - for(Int_t imode = 0; imode < 2; imode++){ - fHclusterRatio[imode]->Add(ref->fHclusterRatio[imode]); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - fHnSigmaTPC[ispec][imode]->Add(ref->fHnSigmaTPC[ispec][imode]); - fHnSigmaTOF[ispec][imode]->Add(ref->fHnSigmaTOF[ispec][imode]); - } - } - ++counter; - } - return ++counter; -} - -//_____________________________________________________________________ -void AliESDpidCuts::DefineHistograms(Color_t color){ - // - // Swich on QA and create the histograms - // - SetBit(kHasHistograms, kTRUE); - fHcutStatistics = new TH1I("fHcutStatistics", "Cut Statistics", kNcuts, 0, kNcuts); - fHcutStatistics->SetLineColor(color); - fHcutCorrelation = new TH2I("fHcutCorrelation", "Cut Correlation", kNcuts, 0, kNcuts, kNcuts, 0, kNcuts); - TString cutname[kNcuts] = {"TPCclusterRatio", "TPC sigma", "TOF sigma"}; - for(Int_t icut = 0; icut < kNcuts; icut++){ - fHcutStatistics->GetXaxis()->SetBinLabel(fHcutStatistics->GetXaxis()->GetFirst() + icut, cutname[icut].Data()); - fHcutCorrelation->GetXaxis()->SetBinLabel(fHcutCorrelation->GetXaxis()->GetFirst() + icut, cutname[icut].Data()); - fHcutCorrelation->GetYaxis()->SetBinLabel(fHcutCorrelation->GetYaxis()->GetFirst() + icut, cutname[icut].Data()); - } - Char_t hname[256], htitle[256]; - for(Int_t imode = 0; imode < 2; imode++){ - snprintf(hname, 256, "fHclusterRatio%s", imode ? "After" : "Before"); - snprintf(htitle, 256, "TPC cluster Ratio %s cuts;Ratio;Entries", imode ? "after" : "before"); - fHclusterRatio[imode] = new TH1F(hname, htitle, 20, 0., 1.); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - snprintf(hname, 256, "fHnSigma%sTPC%s", AliPID::ParticleName(ispec), imode ? "after" : "before"); - snprintf(htitle, 256, "TPC sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before"); - fHnSigmaTPC[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.); - snprintf(hname, 256, "fHnSigma%sTOF%s", AliPID::ParticleName(ispec), imode ? "after" : "before"); - snprintf(htitle, 256, "TOF sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before"); - fHnSigmaTOF[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.); - } - } -} - -//_____________________________________________________________________ -Bool_t AliESDpidCuts::AcceptTrack(const AliESDtrack *track, const AliESDEvent *event){ - // - // Check whether the tracks survived the cuts - // - if(!fPIDresponse){ - Init(); - if (!fPIDresponse) - AliError("PID Response not available"); - return 0; - } - enum{ - kCutClusterRatioTPC, - kCutNsigmaTPC, - kCutNsigmaTOF - }; - Long64_t cutRequired=0, cutFullfiled = 0; - if(fTOFsigmaCutRequired && event == 0) { - AliError("No event pointer. Need event pointer for T0 for TOF cut"); - return (0); - } - Double_t clusterRatio = track->GetTPCNclsF() ? static_cast(track->GetTPCNcls())/static_cast(track->GetTPCNclsF()) : 1.; - if(fCutTPCclusterRatio > 0.){ - SETBIT(cutRequired, kCutClusterRatioTPC); - if(clusterRatio >= fCutTPCclusterRatio) - SETBIT(cutFullfiled, kCutClusterRatioTPC); - } - // check TPC nSigma cut - Float_t nsigmaTPC[AliPID::kSPECIES], nsigma; // need all sigmas for QA plotting - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - nsigmaTPC[ispec] = nsigma = fPIDresponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)ispec); - if(!(fTPCsigmaCutRequired & 1 << ispec)) continue; - SETBIT(cutRequired, kCutNsigmaTPC); // We found at least one species where the n-Sigma Cut is required - if(nsigma >= fCutTPCnSigma[2*ispec] && nsigma <= fCutTPCnSigma[2*ispec+1]) SETBIT(cutFullfiled, kCutNsigmaTPC); // Fullfiled for at least one species - } - // check TOF nSigma cut - Float_t nsigmaTOF[AliPID::kSPECIES]; // see above - Bool_t hasTOFpid = track->GetStatus() & AliESDtrack::kTOFpid; // only apply TOF n-sigma cut when PID Status Bit is set - Double_t times[AliPID::kSPECIES]; - track->GetIntegratedTimes(times); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - - if(hasTOFpid && event) nsigmaTOF[ispec] = nsigma = fPIDresponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)ispec); - if(!(fTOFsigmaCutRequired && 1 << ispec)) continue; - SETBIT(cutRequired, kCutNsigmaTOF); - if(track->GetOuterParam()->P() >= fMinMomentumTOF){ - if(hasTOFpid && nsigma <= fCutTOFnSigma[2*ispec] && nsigma >= fCutTOFnSigma[2*ispec+1]) SETBIT(cutFullfiled, kCutNsigmaTOF); - } - } - - // Fill Histograms before cuts - if(HasHistograms()){ - fHclusterRatio[0]->Fill(clusterRatio); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - fHnSigmaTPC[ispec][0]->Fill(nsigmaTPC[ispec]); - if(hasTOFpid) fHnSigmaTOF[ispec][0]->Fill(nsigmaTOF[ispec]); - } - } - if(cutRequired != cutFullfiled){ - // Fill cut statistics - if(HasHistograms()){ - for(Int_t icut = 0; icut < kNcuts; icut++){ - if(TESTBIT(cutRequired, icut) && !TESTBIT(cutFullfiled, icut)){ - // cut not fullfiled - fHcutStatistics->Fill(icut); - for(Int_t jcut = 0; jcut <= icut; jcut++) - if(TESTBIT(cutRequired, jcut) && !TESTBIT(cutFullfiled, jcut)) fHcutCorrelation->Fill(jcut, icut); - } - } - } - return kFALSE; // At least one cut is not fullfiled - } - - // Fill Histograms after cuts - if(HasHistograms()){ - fHclusterRatio[1]->Fill(clusterRatio); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - fHnSigmaTPC[ispec][1]->Fill(nsigmaTPC[ispec]); - if(hasTOFpid) fHnSigmaTOF[ispec][1]->Fill(nsigmaTOF[ispec]); - } - } - - return kTRUE; -} - -//_____________________________________________________________________ -void AliESDpidCuts::SaveHistograms(const Char_t * location){ - // - // Save the histograms to a file - // - if(!HasHistograms()){ - AliError("Histograms not on - Exiting"); - return; - } - if(!location) location = GetName(); - gDirectory->mkdir(location); - gDirectory->cd(location); - fHcutStatistics->Write(); - fHcutCorrelation->Write(); - - gDirectory->mkdir("before_cuts"); - gDirectory->mkdir("after_cuts"); - - gDirectory->cd("before_cuts"); - fHclusterRatio[0]->Write(); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - fHnSigmaTPC[ispec][0]->Write(); - fHnSigmaTOF[ispec][0]->Write(); - } - - gDirectory->cd("../after_cuts"); - fHclusterRatio[1]->Write(); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - fHnSigmaTPC[ispec][1]->Write(); - fHnSigmaTOF[ispec][1]->Write(); - } - - gDirectory->cd(".."); -} - -//_____________________________________________________________________ -void AliESDpidCuts::DrawHistograms(){ - // - // Draw the Histograms - // - TCanvas *stat = new TCanvas("cutStat", "Cut Statistics", 640, 480); - stat->cd(); - fHcutStatistics->SetStats(kFALSE); - fHcutStatistics->Draw(); - stat->SaveAs(Form("%s_%s.gif", GetName(), stat->GetName())); - - TCanvas *correl = new TCanvas("cutCorrelation", "Cut Correlation", 640, 480); - correl->cd(); - fHcutCorrelation->SetStats(kFALSE); - fHcutCorrelation->Draw("colz"); - correl->SaveAs(Form("%s_%s.gif", GetName(), correl->GetName())); - - TCanvas *cRatio = new TCanvas("ClusterRatioTPC", "TPC cluster Ratio", 640, 480); - cRatio->cd(); - fHclusterRatio[0]->SetLineColor(kRed); - fHclusterRatio[0]->SetStats(kFALSE); - fHclusterRatio[0]->Draw(); - fHclusterRatio[1]->SetLineColor(kBlue); - fHclusterRatio[1]->SetStats(kFALSE); - fHclusterRatio[1]->Draw("same"); - cRatio->SaveAs(Form("%s_%s.gif", GetName(), cRatio->GetName())); - - TCanvas *cNsigTPC = new TCanvas("NsigmaTPC", "TPC n-sigma", 640, 480); - cNsigTPC->Divide(3,2); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - cNsigTPC->cd(ispec + 1); - fHnSigmaTPC[ispec][0]->SetLineColor(kRed); - fHnSigmaTPC[ispec][0]->SetStats(kFALSE); - fHnSigmaTPC[ispec][0]->Draw(); - fHnSigmaTPC[ispec][1]->SetLineColor(kBlue); - fHnSigmaTPC[ispec][1]->SetStats(kFALSE); - fHnSigmaTPC[ispec][1]->Draw("same"); - } - cNsigTPC->SaveAs(Form("%s_%s.gif", GetName(), cNsigTPC->GetName())); - - TCanvas *cNsigTOF = new TCanvas("NsigmaTOF", "TOF n-sigma", 640, 480); - cNsigTOF->Divide(3,2); - for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ - cNsigTOF->cd(ispec + 1); - fHnSigmaTOF[ispec][0]->SetLineColor(kRed); - fHnSigmaTOF[ispec][0]->SetStats(kFALSE); - fHnSigmaTOF[ispec][0]->Draw(); - fHnSigmaTOF[ispec][1]->SetLineColor(kBlue); - fHnSigmaTOF[ispec][1]->SetStats(kFALSE); - fHnSigmaTOF[ispec][1]->Draw("same"); - } - cNsigTOF->SaveAs(Form("%s_%s.gif", GetName(), cNsigTOF->GetName())); -} - +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AliAnalysisManager.h" +#include "AliInputEventHandler.h" +#include "AliESDtrack.h" +#include "AliESDEvent.h" +#include "AliLog.h" +#include "AliPIDResponse.h" + +#include "AliESDpidCuts.h" + +ClassImp(AliESDpidCuts) + +const Int_t AliESDpidCuts::kNcuts = 3; + +//_____________________________________________________________________ +AliESDpidCuts::AliESDpidCuts(const Char_t *name, const Char_t *title): + AliAnalysisCuts(name, title) + , fPIDresponse(NULL) + , fTPCsigmaCutRequired(0) + , fTOFsigmaCutRequired(0) + , fCutTPCclusterRatio(0.) + , fMinMomentumTOF(0.5) + , fHcutStatistics(NULL) + , fHcutCorrelation(NULL) +{ + // + // Default constructor + // + + memset(fCutTPCnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2); + memset(fCutTOFnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2); + + memset(fHclusterRatio, 0, sizeof(TH1F *) * 2); + memset(fHnSigmaTPC, 0, sizeof(TH1F *) * AliPID::kSPECIES * 2); + memset(fHnSigmaTOF, 0, sizeof(TH1F *) * AliPID::kSPECIES * 2); +} + +//_____________________________________________________________________ +AliESDpidCuts::AliESDpidCuts(const AliESDpidCuts &ref): + AliAnalysisCuts(ref) + , fPIDresponse(NULL) + , fTPCsigmaCutRequired(ref.fTPCsigmaCutRequired) + , fTOFsigmaCutRequired(ref.fTOFsigmaCutRequired) + , fCutTPCclusterRatio(ref.fCutTPCclusterRatio) + , fMinMomentumTOF(ref.fMinMomentumTOF) + , fHcutStatistics(NULL) + , fHcutCorrelation(NULL) +{ + // + // Copy constructor + // + fPIDresponse = ref.fPIDresponse; + memcpy(fCutTPCnSigma, ref.fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); + memcpy(fCutTOFnSigma, ref.fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); + + if(ref.fHcutStatistics) fHcutStatistics = dynamic_cast(ref.fHcutStatistics->Clone()); + if(ref.fHcutCorrelation) fHcutCorrelation = dynamic_cast(ref.fHcutCorrelation->Clone()); + for(Int_t imode = 0; imode < 2; imode++){ + if(ref.fHclusterRatio[imode]) fHclusterRatio[imode] = dynamic_cast(ref.fHclusterRatio[imode]->Clone()); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + if(fHnSigmaTPC[ispec][imode]) fHnSigmaTPC[ispec][imode] = dynamic_cast(fHnSigmaTPC[ispec][imode]->Clone()); + if(fHnSigmaTOF[ispec][imode]) fHnSigmaTOF[ispec][imode] = dynamic_cast(fHnSigmaTPC[ispec][imode]->Clone()); + } + } +} + +//_____________________________________________________________________ +AliESDpidCuts &AliESDpidCuts::operator=(const AliESDpidCuts &ref){ + // + // Assignment operator + // + if(this != &ref) + ref.Copy(*this); + return *this; +} + +//_____________________________________________________________________ +AliESDpidCuts::~AliESDpidCuts(){ + // + // Destructor + // + + delete fHcutCorrelation; + for(Int_t imode = 0; imode < 2; imode++){ + delete fHclusterRatio[imode]; + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + delete fHnSigmaTPC[ispec][imode]; + delete fHnSigmaTOF[ispec][imode]; + } + } +} + +//_____________________________________________________________________ +void AliESDpidCuts::Init(){ + // + // Init function, get PID response from the Analysis Manager + // + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if(mgr){ + AliInputEventHandler *handler = dynamic_cast(mgr->GetInputEventHandler()); + if(handler){ + fPIDresponse = handler->GetPIDResponse(); + } + } +} + +//_____________________________________________________________________ +Bool_t AliESDpidCuts::IsSelected(TObject *obj){ + // + // Select Track + // + AliESDtrack * trk = dynamic_cast(obj); + if(!trk){ + AliError("Provided object is not AliESDtrack!"); + return kFALSE; + } + const AliESDEvent* evt = trk->GetESDEvent(); + if(!evt){ + AliError("No AliESDEvent!"); + return kFALSE; + } + return AcceptTrack(trk, evt); +} + +//_____________________________________________________________________ +void AliESDpidCuts::Copy(TObject &c) const { + // + // Copy function + // + AliESDpidCuts &target = dynamic_cast(c); + + target.fPIDresponse = fPIDresponse; + + target.fCutTPCclusterRatio = fCutTPCclusterRatio; + target.fMinMomentumTOF = fMinMomentumTOF; + + target.fTPCsigmaCutRequired = fTPCsigmaCutRequired; + target.fTOFsigmaCutRequired = fTOFsigmaCutRequired; + + if(fHcutStatistics) target.fHcutStatistics = dynamic_cast(fHcutStatistics->Clone()); + if(fHcutCorrelation) target.fHcutCorrelation = dynamic_cast(fHcutCorrelation->Clone()); + for(Int_t imode = 0; imode < 2; imode++){ + if(fHclusterRatio[imode]) target.fHclusterRatio[imode] = dynamic_cast(fHclusterRatio[imode]->Clone()); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + if(fHnSigmaTPC[ispec][imode]) target.fHnSigmaTPC[ispec][imode] = dynamic_cast(fHnSigmaTPC[ispec][imode]->Clone()); + if(fHnSigmaTOF[ispec][imode]) target.fHnSigmaTOF[ispec][imode] = dynamic_cast(fHnSigmaTOF[ispec][imode]->Clone()); + } + } + + memcpy(target.fCutTPCnSigma, fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); + memcpy(target.fCutTOFnSigma, fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2); + + AliESDpidCuts::Copy(c); +} + +//_____________________________________________________________________ +Long64_t AliESDpidCuts::Merge(TCollection *coll){ + // + // Merge Cut objects + // + if(!coll) return 0; + if(coll->IsEmpty()) return 1; + if(!HasHistograms()) return 0; + + TIterator *iter = coll->MakeIterator(); + TObject *o = NULL; + AliESDpidCuts *ref = NULL; + Int_t counter = 0; + while((o = iter->Next())){ + ref = dynamic_cast(o); + if(!ref) continue; + if(!ref->HasHistograms()) continue; + + fHcutStatistics->Add(ref->fHcutStatistics); + fHcutCorrelation->Add(ref->fHcutCorrelation); + for(Int_t imode = 0; imode < 2; imode++){ + fHclusterRatio[imode]->Add(ref->fHclusterRatio[imode]); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + fHnSigmaTPC[ispec][imode]->Add(ref->fHnSigmaTPC[ispec][imode]); + fHnSigmaTOF[ispec][imode]->Add(ref->fHnSigmaTOF[ispec][imode]); + } + } + ++counter; + } + return ++counter; +} + +//_____________________________________________________________________ +void AliESDpidCuts::DefineHistograms(Color_t color){ + // + // Swich on QA and create the histograms + // + SetBit(kHasHistograms, kTRUE); + fHcutStatistics = new TH1I("fHcutStatistics", "Cut Statistics", kNcuts, 0, kNcuts); + fHcutStatistics->SetLineColor(color); + fHcutCorrelation = new TH2I("fHcutCorrelation", "Cut Correlation", kNcuts, 0, kNcuts, kNcuts, 0, kNcuts); + TString cutname[kNcuts] = {"TPCclusterRatio", "TPC sigma", "TOF sigma"}; + for(Int_t icut = 0; icut < kNcuts; icut++){ + fHcutStatistics->GetXaxis()->SetBinLabel(fHcutStatistics->GetXaxis()->GetFirst() + icut, cutname[icut].Data()); + fHcutCorrelation->GetXaxis()->SetBinLabel(fHcutCorrelation->GetXaxis()->GetFirst() + icut, cutname[icut].Data()); + fHcutCorrelation->GetYaxis()->SetBinLabel(fHcutCorrelation->GetYaxis()->GetFirst() + icut, cutname[icut].Data()); + } + Char_t hname[256], htitle[256]; + for(Int_t imode = 0; imode < 2; imode++){ + snprintf(hname, 256, "fHclusterRatio%s", imode ? "After" : "Before"); + snprintf(htitle, 256, "TPC cluster Ratio %s cuts;Ratio;Entries", imode ? "after" : "before"); + fHclusterRatio[imode] = new TH1F(hname, htitle, 20, 0., 1.); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + snprintf(hname, 256, "fHnSigma%sTPC%s", AliPID::ParticleName(ispec), imode ? "after" : "before"); + snprintf(htitle, 256, "TPC sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before"); + fHnSigmaTPC[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.); + snprintf(hname, 256, "fHnSigma%sTOF%s", AliPID::ParticleName(ispec), imode ? "after" : "before"); + snprintf(htitle, 256, "TOF sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before"); + fHnSigmaTOF[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.); + } + } +} + +//_____________________________________________________________________ +Bool_t AliESDpidCuts::AcceptTrack(const AliESDtrack *track, const AliESDEvent *event){ + // + // Check whether the tracks survived the cuts + // + if(!fPIDresponse){ + Init(); + if (!fPIDresponse) + AliError("PID Response not available"); + return 0; + } + enum{ + kCutClusterRatioTPC, + kCutNsigmaTPC, + kCutNsigmaTOF + }; + Long64_t cutRequired=0, cutFullfiled = 0; + if(fTOFsigmaCutRequired && event == 0) { + AliError("No event pointer. Need event pointer for T0 for TOF cut"); + return (0); + } + Double_t clusterRatio = track->GetTPCNclsF() ? static_cast(track->GetTPCNcls())/static_cast(track->GetTPCNclsF()) : 1.; + if(fCutTPCclusterRatio > 0.){ + SETBIT(cutRequired, kCutClusterRatioTPC); + if(clusterRatio >= fCutTPCclusterRatio) + SETBIT(cutFullfiled, kCutClusterRatioTPC); + } + // check TPC nSigma cut + Float_t nsigmaTPC[AliPID::kSPECIES], nsigma; // need all sigmas for QA plotting + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + nsigmaTPC[ispec] = nsigma = fPIDresponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)ispec); + if(!(fTPCsigmaCutRequired & 1 << ispec)) continue; + SETBIT(cutRequired, kCutNsigmaTPC); // We found at least one species where the n-Sigma Cut is required + if(nsigma >= fCutTPCnSigma[2*ispec] && nsigma <= fCutTPCnSigma[2*ispec+1]) SETBIT(cutFullfiled, kCutNsigmaTPC); // Fullfiled for at least one species + } + // check TOF nSigma cut + Float_t nsigmaTOF[AliPID::kSPECIES]; // see above + Bool_t hasTOFpid = track->GetStatus() & AliESDtrack::kTOFpid; // only apply TOF n-sigma cut when PID Status Bit is set + Double_t times[AliPID::kSPECIES]; + track->GetIntegratedTimes(times); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + + if(hasTOFpid && event) nsigmaTOF[ispec] = nsigma = fPIDresponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)ispec); + if(!(fTOFsigmaCutRequired && 1 << ispec)) continue; + SETBIT(cutRequired, kCutNsigmaTOF); + if(track->GetOuterParam()->P() >= fMinMomentumTOF){ + if(hasTOFpid && nsigma <= fCutTOFnSigma[2*ispec] && nsigma >= fCutTOFnSigma[2*ispec+1]) SETBIT(cutFullfiled, kCutNsigmaTOF); + } + } + + // Fill Histograms before cuts + if(HasHistograms()){ + fHclusterRatio[0]->Fill(clusterRatio); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + fHnSigmaTPC[ispec][0]->Fill(nsigmaTPC[ispec]); + if(hasTOFpid) fHnSigmaTOF[ispec][0]->Fill(nsigmaTOF[ispec]); + } + } + if(cutRequired != cutFullfiled){ + // Fill cut statistics + if(HasHistograms()){ + for(Int_t icut = 0; icut < kNcuts; icut++){ + if(TESTBIT(cutRequired, icut) && !TESTBIT(cutFullfiled, icut)){ + // cut not fullfiled + fHcutStatistics->Fill(icut); + for(Int_t jcut = 0; jcut <= icut; jcut++) + if(TESTBIT(cutRequired, jcut) && !TESTBIT(cutFullfiled, jcut)) fHcutCorrelation->Fill(jcut, icut); + } + } + } + return kFALSE; // At least one cut is not fullfiled + } + + // Fill Histograms after cuts + if(HasHistograms()){ + fHclusterRatio[1]->Fill(clusterRatio); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + fHnSigmaTPC[ispec][1]->Fill(nsigmaTPC[ispec]); + if(hasTOFpid) fHnSigmaTOF[ispec][1]->Fill(nsigmaTOF[ispec]); + } + } + + return kTRUE; +} + +//_____________________________________________________________________ +void AliESDpidCuts::SaveHistograms(const Char_t * location){ + // + // Save the histograms to a file + // + if(!HasHistograms()){ + AliError("Histograms not on - Exiting"); + return; + } + if(!location) location = GetName(); + gDirectory->mkdir(location); + gDirectory->cd(location); + fHcutStatistics->Write(); + fHcutCorrelation->Write(); + + gDirectory->mkdir("before_cuts"); + gDirectory->mkdir("after_cuts"); + + gDirectory->cd("before_cuts"); + fHclusterRatio[0]->Write(); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + fHnSigmaTPC[ispec][0]->Write(); + fHnSigmaTOF[ispec][0]->Write(); + } + + gDirectory->cd("../after_cuts"); + fHclusterRatio[1]->Write(); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + fHnSigmaTPC[ispec][1]->Write(); + fHnSigmaTOF[ispec][1]->Write(); + } + + gDirectory->cd(".."); +} + +//_____________________________________________________________________ +void AliESDpidCuts::DrawHistograms(){ + // + // Draw the Histograms + // + TCanvas *stat = new TCanvas("cutStat", "Cut Statistics", 640, 480); + stat->cd(); + fHcutStatistics->SetStats(kFALSE); + fHcutStatistics->Draw(); + stat->SaveAs(Form("%s_%s.gif", GetName(), stat->GetName())); + + TCanvas *correl = new TCanvas("cutCorrelation", "Cut Correlation", 640, 480); + correl->cd(); + fHcutCorrelation->SetStats(kFALSE); + fHcutCorrelation->Draw("colz"); + correl->SaveAs(Form("%s_%s.gif", GetName(), correl->GetName())); + + TCanvas *cRatio = new TCanvas("ClusterRatioTPC", "TPC cluster Ratio", 640, 480); + cRatio->cd(); + fHclusterRatio[0]->SetLineColor(kRed); + fHclusterRatio[0]->SetStats(kFALSE); + fHclusterRatio[0]->Draw(); + fHclusterRatio[1]->SetLineColor(kBlue); + fHclusterRatio[1]->SetStats(kFALSE); + fHclusterRatio[1]->Draw("same"); + cRatio->SaveAs(Form("%s_%s.gif", GetName(), cRatio->GetName())); + + TCanvas *cNsigTPC = new TCanvas("NsigmaTPC", "TPC n-sigma", 640, 480); + cNsigTPC->Divide(3,2); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + cNsigTPC->cd(ispec + 1); + fHnSigmaTPC[ispec][0]->SetLineColor(kRed); + fHnSigmaTPC[ispec][0]->SetStats(kFALSE); + fHnSigmaTPC[ispec][0]->Draw(); + fHnSigmaTPC[ispec][1]->SetLineColor(kBlue); + fHnSigmaTPC[ispec][1]->SetStats(kFALSE); + fHnSigmaTPC[ispec][1]->Draw("same"); + } + cNsigTPC->SaveAs(Form("%s_%s.gif", GetName(), cNsigTPC->GetName())); + + TCanvas *cNsigTOF = new TCanvas("NsigmaTOF", "TOF n-sigma", 640, 480); + cNsigTOF->Divide(3,2); + for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){ + cNsigTOF->cd(ispec + 1); + fHnSigmaTOF[ispec][0]->SetLineColor(kRed); + fHnSigmaTOF[ispec][0]->SetStats(kFALSE); + fHnSigmaTOF[ispec][0]->Draw(); + fHnSigmaTOF[ispec][1]->SetLineColor(kBlue); + fHnSigmaTOF[ispec][1]->SetStats(kFALSE); + fHnSigmaTOF[ispec][1]->Draw("same"); + } + cNsigTOF->SaveAs(Form("%s_%s.gif", GetName(), cNsigTOF->GetName())); +} + diff --git a/ANALYSIS/AliESDpidCuts.h b/ANALYSIS/AliESDpidCuts.h index 667ca1992bf..683896391eb 100644 --- a/ANALYSIS/AliESDpidCuts.h +++ b/ANALYSIS/AliESDpidCuts.h @@ -1,121 +1,121 @@ -#ifndef ALIESDPIDCUTS_H -#define ALIESDPIDCUTS_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ -// -// Class for PID cuts -// Cuts the track based on numbers of sigmas in the detectors TPC and TOF -// The sigma cuts can be applied symmetrically or assymetrically -// - -#ifndef ALIANALYSISCUTS_H -#include "AliAnalysisCuts.h" -#endif - -#ifndef ALIPID_H -#include "AliPID.h" -#endif - -class TCollection; -class TH1F; -class TH1I; -class TH2I; -class TList; -class AliESDtrack; -class AliESDEvent; -class AliESDpid; - -class AliESDpidCuts : public AliAnalysisCuts{ - enum{ - kHasHistograms = BIT(17) - }; - public: - AliESDpidCuts(const Char_t *name = "AliESDpidCuts", const Char_t *title = ""); - AliESDpidCuts(const AliESDpidCuts &ref); // Copy constructor - AliESDpidCuts &operator=(const AliESDpidCuts &ref); - virtual ~AliESDpidCuts(); - - virtual void Init(); - virtual void Copy(TObject &c) const; - virtual Long64_t Merge(TCollection *coll); - - Bool_t HasHistograms() const { return TestBit(kHasHistograms); } - void DefineHistograms(Color_t color = kRed); - void DrawHistograms(); - void SaveHistograms(const Char_t *location = NULL); - virtual Bool_t IsSelected(TObject *); - virtual Bool_t IsSelected(TList * /*lst*/) {return kTRUE; } - virtual Bool_t AcceptTrack(const AliESDtrack *track, const AliESDEvent *event); - - void SetPIDResponse(AliPIDResponse * pidresponse) { fPIDresponse = pidresponse; } - AliPIDResponse *GetPIDresponse() { return fPIDresponse; }; - - void SetTPCclusterRatioCut(Float_t clr) { fCutTPCclusterRatio = clr; } - inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma); - inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma); - inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma); - inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma); - void SetMinMomentumTOF(Float_t mom) { fMinMomentumTOF = mom; } - - protected: - static const Int_t kNcuts; // Number of Cuts - AliPIDResponse *fPIDresponse; //! PID helper (n-sigma-cut) - Char_t fTPCsigmaCutRequired; // Sigma cut Requirement for TPC and Particle Species - Char_t fTOFsigmaCutRequired; // Sigma cut Requirement for TOF and Particle Species - Float_t fCutTPCnSigma[AliPID::kSPECIES * 2]; // Species dependent cut on the distance to the TPC dE/dx line - Float_t fCutTOFnSigma[AliPID::kSPECIES * 2]; // Species dependent cut on the distance to the TOF calculated time of flight line - Float_t fCutTPCclusterRatio; // Cut on Ratio of found clusters with repect to findable clusters in the TPC - Float_t fMinMomentumTOF; // Apply TOF PID only above a certain momentum - - //------------------------------------------ - // QA histograms - TH1I *fHcutStatistics; // Cut Statistics - TH2I *fHcutCorrelation; // Cut Correlation - TH1F *fHclusterRatio[2]; // TPC cluster Ratio - TH1F *fHnSigmaTPC[AliPID::kSPECIES][2]; // TPC n-sigma cut - TH1F *fHnSigmaTOF[AliPID::kSPECIES][2]; // TOF n-sigma cut - //------------------------------------------ - - ClassDef(AliESDpidCuts, 3) -}; - -//_____________________________________________________________________ -void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){ - // - // symmetric sigma cut for TPC PID - // - fCutTPCnSigma[itype * 2] = -nSigma; - fCutTPCnSigma[itype * 2 + 1] = nSigma; - fTPCsigmaCutRequired |= 1 << static_cast(itype); -} - -//_____________________________________________________________________ -void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){ - // - // assymetric sigma cut for TPC PID - // - fCutTPCnSigma[itype * 2] = negSigma; - fCutTPCnSigma[itype * 2 + 1] = posSigma; - fTPCsigmaCutRequired |= 1 << static_cast(itype); -} - -//_____________________________________________________________________ -void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){ - // - // symmetric sigma cut for TOF PID - // - fCutTOFnSigma[itype * 2] = -nSigma; - fCutTOFnSigma[itype * 2 + 1] = nSigma; - fTOFsigmaCutRequired |= 1 << static_cast(itype); -} - -//_____________________________________________________________________ -void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){ - // - // assymetric sigma cut for TOF PID - // - fCutTOFnSigma[itype * 2] = negSigma; - fCutTOFnSigma[itype * 2 + 1] = posSigma; - fTOFsigmaCutRequired |= 1 << static_cast(itype); -} -#endif +#ifndef ALIESDPIDCUTS_H +#define ALIESDPIDCUTS_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ +// +// Class for PID cuts +// Cuts the track based on numbers of sigmas in the detectors TPC and TOF +// The sigma cuts can be applied symmetrically or assymetrically +// + +#ifndef ALIANALYSISCUTS_H +#include "AliAnalysisCuts.h" +#endif + +#ifndef ALIPID_H +#include "AliPID.h" +#endif + +class TCollection; +class TH1F; +class TH1I; +class TH2I; +class TList; +class AliESDtrack; +class AliESDEvent; +class AliESDpid; + +class AliESDpidCuts : public AliAnalysisCuts{ + enum{ + kHasHistograms = BIT(17) + }; + public: + AliESDpidCuts(const Char_t *name = "AliESDpidCuts", const Char_t *title = ""); + AliESDpidCuts(const AliESDpidCuts &ref); // Copy constructor + AliESDpidCuts &operator=(const AliESDpidCuts &ref); + virtual ~AliESDpidCuts(); + + virtual void Init(); + virtual void Copy(TObject &c) const; + virtual Long64_t Merge(TCollection *coll); + + Bool_t HasHistograms() const { return TestBit(kHasHistograms); } + void DefineHistograms(Color_t color = kRed); + void DrawHistograms(); + void SaveHistograms(const Char_t *location = NULL); + virtual Bool_t IsSelected(TObject *); + virtual Bool_t IsSelected(TList * /*lst*/) {return kTRUE; } + virtual Bool_t AcceptTrack(const AliESDtrack *track, const AliESDEvent *event); + + void SetPIDResponse(AliPIDResponse * pidresponse) { fPIDresponse = pidresponse; } + AliPIDResponse *GetPIDresponse() { return fPIDresponse; }; + + void SetTPCclusterRatioCut(Float_t clr) { fCutTPCclusterRatio = clr; } + inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma); + inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma); + inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma); + inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma); + void SetMinMomentumTOF(Float_t mom) { fMinMomentumTOF = mom; } + + protected: + static const Int_t kNcuts; // Number of Cuts + AliPIDResponse *fPIDresponse; //! PID helper (n-sigma-cut) + Char_t fTPCsigmaCutRequired; // Sigma cut Requirement for TPC and Particle Species + Char_t fTOFsigmaCutRequired; // Sigma cut Requirement for TOF and Particle Species + Float_t fCutTPCnSigma[AliPID::kSPECIES * 2]; // Species dependent cut on the distance to the TPC dE/dx line + Float_t fCutTOFnSigma[AliPID::kSPECIES * 2]; // Species dependent cut on the distance to the TOF calculated time of flight line + Float_t fCutTPCclusterRatio; // Cut on Ratio of found clusters with repect to findable clusters in the TPC + Float_t fMinMomentumTOF; // Apply TOF PID only above a certain momentum + + //------------------------------------------ + // QA histograms + TH1I *fHcutStatistics; // Cut Statistics + TH2I *fHcutCorrelation; // Cut Correlation + TH1F *fHclusterRatio[2]; // TPC cluster Ratio + TH1F *fHnSigmaTPC[AliPID::kSPECIES][2]; // TPC n-sigma cut + TH1F *fHnSigmaTOF[AliPID::kSPECIES][2]; // TOF n-sigma cut + //------------------------------------------ + + ClassDef(AliESDpidCuts, 3) +}; + +//_____________________________________________________________________ +void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){ + // + // symmetric sigma cut for TPC PID + // + fCutTPCnSigma[itype * 2] = -nSigma; + fCutTPCnSigma[itype * 2 + 1] = nSigma; + fTPCsigmaCutRequired |= 1 << static_cast(itype); +} + +//_____________________________________________________________________ +void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){ + // + // assymetric sigma cut for TPC PID + // + fCutTPCnSigma[itype * 2] = negSigma; + fCutTPCnSigma[itype * 2 + 1] = posSigma; + fTPCsigmaCutRequired |= 1 << static_cast(itype); +} + +//_____________________________________________________________________ +void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){ + // + // symmetric sigma cut for TOF PID + // + fCutTOFnSigma[itype * 2] = -nSigma; + fCutTOFnSigma[itype * 2 + 1] = nSigma; + fTOFsigmaCutRequired |= 1 << static_cast(itype); +} + +//_____________________________________________________________________ +void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){ + // + // assymetric sigma cut for TOF PID + // + fCutTOFnSigma[itype * 2] = negSigma; + fCutTOFnSigma[itype * 2 + 1] = posSigma; + fTOFsigmaCutRequired |= 1 << static_cast(itype); +} +#endif diff --git a/ANALYSIS/AliESDv0KineCuts.cxx b/ANALYSIS/AliESDv0KineCuts.cxx index a59e640ed41..2a348520dbc 100644 --- a/ANALYSIS/AliESDv0KineCuts.cxx +++ b/ANALYSIS/AliESDv0KineCuts.cxx @@ -1,1097 +1,1097 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* - * author: M.Kalisky@gsi.de - * 08/Dec/2010 - * - * Description: This class allows with purely kinematical cuts - * to select clean samples of electrons, pions and protons from the - * V0 online finder ESD V0 candidates for PID and dectector resonse - * studies. - */ - -#include -#include - -#include "AliESDv0.h" -#include "AliESDtrack.h" -#include "AliESDEvent.h" -#include "AliVEvent.h" -#include "AliLog.h" -#include "AliKFParticle.h" -#include "AliVTrack.h" -#include "AliKFVertex.h" - -#include "AliESDv0KineCuts.h" - -ClassImp(AliESDv0KineCuts) - -//____________________________________________________________________ -AliESDv0KineCuts::AliESDv0KineCuts() : - fEvent(0x0) - , fPrimaryVertex(0x0) - , fType(0) - , fMode(0) - , fTPCNcls(1) - , fTPCrefit(kTRUE) - , fTPCchi2perCls(4.0) - , fTPCclsRatio(0.6) - , fNoKinks(kTRUE) - , fGcutChi2NDF(10) - , fGcutInvMass(0.05) - , fK0cutChi2NDF(10) - , fLcutChi2NDF(10) - , fUseExternalVertex(kFALSE) - , fDeleteVertex(kFALSE) -{ - // - // Default constructor - // - - // default single track cuts - fTPCNcls = 1; // minimal number of the TPC clusters - fTPCrefit = kTRUE; // TPC refit - fTPCchi2perCls = 4.0; // chi2 per TPC cluster - fTPCclsRatio = 0.6; // minimal foun/findable TPC cluster ratio - fNoKinks = kTRUE; // kinks - no [kTRUE] or do not care [kFalse] - - - // default gamma cuts values - fGcutChi2NDF = 10; // Chi2NF cut value for the AliKFparticle gamma - fGcutCosPoint[0] = 0; // cos of the pointing angle [min, max] - fGcutCosPoint[1] = 0.02; // cos of the pointing angle [min, max] - fGcutDCA[0] = 0.; // DCA between the daughter tracks [min, max] - fGcutDCA[1] = 0.25; // DCA between the daughter tracks [min, max] - fGcutVertexR[0] = 3.; // radius of the conversion point [min, max] - fGcutVertexR[1] = 90.; // radius of the conversion point [min, max] - fGcutPsiPair[0] = 0.; // value of the psi pair cut [min, max] - fGcutPsiPair[1] = 0.05; // value of the psi pair cut [min, max] - fGcutInvMass = 0.05; // upper value on the gamma invariant mass - // default K0 cuts - fK0cutChi2NDF = 10; // Chi2NF cut value for the AliKFparticle K0 - fK0cutCosPoint[0] = 0.; // cos of the pointing angle [min, max] - fK0cutCosPoint[1] = 0.02; // cos of the pointing angle [min, max] - fK0cutDCA[0] = 0.; // DCA between the daughter tracks [min, max] - fK0cutDCA[1] = 0.2; // DCA between the daughter tracks [min, max] - fK0cutVertexR[0] = 2.0; // radius of the decay point [min, max] - fK0cutVertexR[1] = 30.0; // radius of the decay point [min, max] - fK0cutInvMass[0] = 0.486; // invariant mass window - fK0cutInvMass[1] = 0.508; // invariant mass window - // Lambda & anti-Lambda cut values - fLcutChi2NDF = 10; // Chi2NF cut value for the AliKFparticle K0 - fLcutCosPoint[0] = 0.; // cos of the pointing angle [min, max] - fLcutCosPoint[1] = 0.02; // cos of the pointing angle [min, max] - fLcutDCA[0] = 0.; // DCA between the daughter tracks [min, max] - fLcutDCA[1] = 0.2; // DCA between the daughter tracks [min, max] - fLcutVertexR[0] = 2.0; // radius of the decay point [min, max] - fLcutVertexR[1] = 40.0; // radius of the decay point [min, max] - fLcutInvMass[0] = 1.11; // invariant mass window - fLcutInvMass[1] = 1.12; // invariant mass window - -} -//____________________________________________________________________ -AliESDv0KineCuts::~AliESDv0KineCuts(){ - // - // Destructor - // - - -} -//____________________________________________________________________ -AliESDv0KineCuts::AliESDv0KineCuts(const AliESDv0KineCuts &ref): - TObject(ref) - , fEvent(0x0) - , fPrimaryVertex(0x0) - , fType(0) - , fMode(0) - , fTPCNcls(1) - , fTPCrefit(kTRUE) - , fTPCchi2perCls(4.0) - , fTPCclsRatio(0.6) - , fNoKinks(kTRUE) - , fGcutChi2NDF(10) - , fGcutInvMass(0.05) - , fK0cutChi2NDF(10) - , fLcutChi2NDF(10) - , fUseExternalVertex(kFALSE) - , fDeleteVertex(kFALSE) -{ - // - // Copy operator - // - - ref.Copy(*this); -} -//____________________________________________________________________ -AliESDv0KineCuts &AliESDv0KineCuts::operator=(const AliESDv0KineCuts &ref){ - // - // assignment operator - // - if(this != &ref) - ref.Copy(*this); - return *this; -} -//____________________________________________________________________ -void AliESDv0KineCuts::Copy(TObject &ref) const { - // - // Performs the copying of the object - // - - TObject::Copy(ref); - - AliESDv0KineCuts &target = dynamic_cast(ref); - - // default single track cuts - target.fTPCNcls = fTPCNcls; - target.fTPCrefit = fTPCrefit; - target.fTPCchi2perCls = fTPCchi2perCls; - target.fTPCclsRatio = fTPCclsRatio; - target.fNoKinks = fNoKinks; - target.fUseExternalVertex = fUseExternalVertex; //added december 2nd 2011 - target.fDeleteVertex = fDeleteVertex; //added december 2nd 2011 - - // default gamma cuts values - target.fGcutChi2NDF = fGcutChi2NDF; - memcpy(target.fGcutCosPoint, fGcutCosPoint, sizeof(Float_t) * 2); - memcpy(target.fGcutDCA, fGcutDCA, sizeof(Float_t) * 2); - memcpy(target.fGcutVertexR, fGcutVertexR, sizeof(Float_t) * 2); - memcpy(target.fGcutPsiPair, fGcutPsiPair, sizeof(Float_t) * 2); - target.fGcutInvMass = fGcutInvMass; - // default K0 cuts - target.fK0cutChi2NDF = fK0cutChi2NDF; - memcpy(target.fK0cutCosPoint, fK0cutCosPoint, sizeof(Float_t) * 2); - memcpy(target.fK0cutDCA, fK0cutDCA, sizeof(Float_t) * 2); - memcpy(target.fK0cutVertexR, fK0cutVertexR, sizeof(Float_t) * 2); - memcpy(target.fK0cutInvMass, fK0cutInvMass, sizeof(Float_t) * 2); - // Lambda & anti-Lambda cut values - target.fLcutChi2NDF = fLcutChi2NDF; - memcpy(target.fLcutCosPoint, fLcutCosPoint, sizeof(Float_t) * 2); - memcpy(target.fLcutDCA, fLcutDCA, sizeof(Float_t) * 2); - memcpy(target.fLcutVertexR, fLcutVertexR, sizeof(Float_t) * 2); - memcpy(target.fLcutInvMass, fLcutInvMass, sizeof(Float_t) * 2); - -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const -{ - // - // main user function - // - - if(!v0) return kFALSE; - if(!fEvent){ - AliErrorClass("No valid Event pointer available, provide it first"); - return kFALSE; - } - - if(!V0CutsCommon(v0)) return kFALSE; - - const Int_t id = PreselectV0(v0); - - if(!SingleTrackCuts(v0)) return kFALSE; - - switch(id){ - case kUndef: - return kFALSE; - case kGamma: - return CaseGamma(v0, pdgV0, pdgP, pdgN); - case kK0: - return CaseK0(v0, pdgV0, pdgP, pdgN); - case kLambda: - return CaseLambda(v0, pdgV0, pdgP, pdgN, 0); - case kALambda: - return CaseLambda(v0, pdgV0, pdgP, pdgN, 1); - default: - return kFALSE; - } - - return kFALSE; -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN) const -{ - // - // main user function, simplified if the V0 identity is not necessary - // - - if(!v0) return kFALSE; - if(!fEvent){ - AliErrorClass("No valid Event pointer available, provide it first"); - return kFALSE; - } - - Int_t idV0 = -1; - return ProcessV0(v0, idV0, pdgP, pdgN); - -} -//____________________________________________________________________ -Int_t AliESDv0KineCuts::PreselectV0(AliESDv0* const v0) const -{ - // - // Make a preselection (exclusive) of the V0 cadidates based on - // Armenteros plot - // the armenteros cut values are currently fixed and user is not able to set them via - // set funcions. The reason is that these cuts are optimized and furneter changes should - // not be necessary. To prove otherwise please study in detail before changing the values - // - - Float_t ap[2] = {-1., -1.}; - Armenteros(v0, ap); - // for clarity - const Float_t alpha = ap[0]; - const Float_t qt = ap[1]; - - // selection cuts - // - the reagions for different candidates must not overlap - - // Gamma cuts - const Double_t cutAlphaG = 0.35; - const Double_t cutQTG = 0.05; - const Double_t cutAlphaG2[2] = {0.6, 0.8}; - const Double_t cutQTG2 = 0.04; - - // K0 cuts - const Float_t cutQTK0[2] = {0.1075, 0.215}; - const Float_t cutAPK0[2] = {0.199, 0.8}; // parameters for curved QT cut - - // Lambda & A-Lambda cuts - const Float_t cutQTL = 0.03; - const Float_t cutAlphaL[2] = {0.35, 0.7}; - const Float_t cutAlphaAL[2] = {-0.7, -0.35}; - const Float_t cutAPL[3] = {0.107, -0.69, 0.5}; // parameters fir curved QT cut - - - if(kPurity == fMode){ - // Check for Gamma candidates - if(qt < cutQTG){ - if( (TMath::Abs(alpha) < cutAlphaG) ) return kGamma; - } - // additional region - should help high pT gammas - if(qt < cutQTG2){ - if( (TMath::Abs(alpha) > cutAlphaG2[0]) && (TMath::Abs(alpha) < cutAlphaG2[1]) ) return kGamma; - } - } - if(kEffGamma == fMode){ - if(qt < cutQTG) return kGamma; - } - - - // Check for K0 candidates - Float_t q = cutAPK0[0] * TMath::Sqrt(TMath::Abs(1 - alpha*alpha/(cutAPK0[1]*cutAPK0[1]))); - if( (qt > cutQTK0[0]) && (qt < cutQTK0[1]) && (qt > q) ){ - return kK0; - } - - // Check for Lambda candidates - q = cutAPL[0] * TMath::Sqrt(TMath::Abs(1 - ( (alpha + cutAPL[1]) * (alpha + cutAPL[1]) ) / (cutAPL[2]*cutAPL[2]) )); - if( (alpha > cutAlphaL[0]) && (alpha < cutAlphaL[1]) && (qt > cutQTL) && (qt < q) ){ - return kLambda; - } - - // Check for A-Lambda candidates - q = cutAPL[0] * TMath::Sqrt(TMath::Abs(1 - ( (alpha - cutAPL[1]) * (alpha - cutAPL[1]) ) / (cutAPL[2]*cutAPL[2]) )); - if( (alpha > cutAlphaAL[0]) && (alpha < cutAlphaAL[1]) && (qt > cutQTL) && (qt < q) ){ - return kALambda; - } - - return kUndef; -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::SingleTrackCuts(AliESDv0 * const v0) const -{ - // - // apply single track cuts - // correct sign not relevat here - // - - if(!v0) return kFALSE; - - Int_t pIndex = 0, nIndex = 0; - pIndex = v0->GetPindex(); - nIndex = v0->GetNindex(); - AliESDtrack* d[2]; - d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - - for(Int_t i=0; i<2; ++i){ - if(!d[i]) return kFALSE; - - // status word - ULong_t status = d[i]->GetStatus(); - - // No. of TPC clusters leave to the users - if(d[i]->GetTPCNcls() < 1) return kFALSE; - - // TPC refit - if(!(status & AliESDtrack::kTPCrefit)) return kFALSE; - - // Chi2 per TPC cluster - Int_t nTPCclusters = d[i]->GetTPCNcls(); - Float_t chi2perTPCcluster = d[i]->GetTPCchi2()/Float_t(nTPCclusters); - if(chi2perTPCcluster > 4) return kFALSE; - - // TPC cluster ratio - Float_t cRatioTPC = d[i]->GetTPCNclsF() > 0. ? static_cast(d[i]->GetTPCNcls())/static_cast (d[i]->GetTPCNclsF()) : 1.; - if(cRatioTPC < 0.6) return kFALSE; - - // kinks - if(d[i]->GetKinkIndex(0) != 0) return kFALSE; - - } - - return kTRUE; -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const -{ - // - // process the gamma conversion candidate - // - - if(!v0) return kFALSE; - - AliVTrack* daughter[2]; - Int_t pIndex = 0, nIndex = 0; - - Bool_t sign = CheckSigns(v0); - if(sign){ - pIndex = v0->GetPindex(); - nIndex = v0->GetNindex(); - } - else{ - pIndex = v0->GetNindex(); - nIndex = v0->GetPindex(); - } - daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - if(!daughter[0] || !daughter[1]) return kFALSE; - - AliKFParticle *kfMother = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kElectron), TMath::Abs(kElectron)); - if(!kfMother) return kFALSE; - - AliESDtrack* d[2]; - d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - - Float_t iMass = v0->GetEffMass(0, 0); - - // cos pointing angle - Double_t cosPoint = v0->GetV0CosineOfPointingAngle(); - cosPoint = TMath::ACos(cosPoint); - - // DCA between daughters - Double_t dca = v0->GetDcaV0Daughters(); - - // Production vertex - Double_t x, y, z; - v0->GetXYZ(x,y,z); - Double_t r = TMath::Sqrt(x*x + y*y); - - Double_t xy[2]; - Double_t r2 = -1.; - if ( GetConvPosXY(d[0], d[1], xy) ){ - r2 = TMath::Sqrt(xy[0]*xy[0] + xy[1]*xy[1]); - } - - // psi pair - Double_t psiPair = PsiPair(v0); - - // V0 chi2/ndf - Double_t chi2ndf = kfMother->GetChi2()/kfMother->GetNDF(); - - if(kfMother) delete kfMother; - - // apply the cuts - - if(iMass > fGcutInvMass) return kFALSE; - - if(chi2ndf > fGcutChi2NDF) return kFALSE; - - if(cosPoint < fGcutCosPoint[0] || cosPoint > fGcutCosPoint[1]) return kFALSE; - - if(dca < fGcutDCA[0] || dca > fGcutDCA[1]) return kFALSE; - - if(r < fGcutVertexR[0] || r > fGcutVertexR[1]) return kFALSE; - - if(psiPair < fGcutPsiPair[0] || psiPair > fGcutPsiPair[1]) return kFALSE; - - // all cuts passed - - pdgV0 = 22; - if(sign){ - pdgP = -11; - pdgN = 11; - } - else{ - pdgP = 11; - pdgN = -11; - } - - return kTRUE; -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const { - // - // process the K0 candidate - // - - if(!v0) return kFALSE; - - AliVTrack* daughter[2]; - Int_t pIndex = 0, nIndex = 0; - Bool_t sign = CheckSigns(v0); - if(sign){ - pIndex = v0->GetPindex(); - nIndex = v0->GetNindex(); - } - else{ - pIndex = v0->GetNindex(); - nIndex = v0->GetPindex(); - } - - daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - if(!daughter[0] || !daughter[1]) return kFALSE; - - AliKFParticle *kfMother = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kPiPlus), TMath::Abs(kPiPlus)); - if(!kfMother) return kFALSE; - - AliESDtrack* d[2]; - d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - - Float_t iMass = v0->GetEffMass(2, 2); - - // cos pointing angle - Double_t cosPoint = v0->GetV0CosineOfPointingAngle(); - cosPoint = TMath::ACos(cosPoint); - - // DCA between daughters - Double_t dca = v0->GetDcaV0Daughters(); - - // Production vertex - Double_t x, y, z; - v0->GetXYZ(x,y,z); - - Double_t r = TMath::Sqrt(x*x + y*y); - - // V0 chi2/ndf - Double_t chi2ndf = kfMother->GetChi2()/kfMother->GetNDF(); - - if(kfMother) delete kfMother; - - // - // apply the cuts - // - if(iMass < fK0cutInvMass[0] || iMass > fK0cutInvMass[1]) return kFALSE; - - if(chi2ndf > fK0cutChi2NDF) return kFALSE; - - if(cosPoint < fK0cutCosPoint[0] || cosPoint > fK0cutCosPoint[1]) return kFALSE; - - if(dca < fK0cutDCA[0] || dca > fK0cutDCA[1]) return kFALSE; - - if(r < fK0cutVertexR[0] || r > fK0cutVertexR[1]) return kFALSE; - - // all cuts passed - pdgV0 = 310; - if(sign){ - pdgP = 211; - pdgN = -211; - } - else{ - pdgP = -211; - pdgN = 211; - } - - return kTRUE; -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const { - // - // process teh Lambda and Anti-Lambda candidate - // - - if(!v0) return kFALSE; - - const Double_t cL0mass=TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(); // PDG lambda mass - - AliVTrack* daughter[2]; - Int_t pIndex = 0, nIndex = 0; - Float_t mMass[2] = {-1., -1.}; - Bool_t sign = CheckSigns(v0); - if(sign){ - pIndex = v0->GetPindex(); - nIndex = v0->GetNindex(); - mMass[0] = v0->GetEffMass(4, 2); - mMass[1] = v0->GetEffMass(2, 4); - } - else{ - pIndex = v0->GetNindex(); - nIndex = v0->GetPindex(); - mMass[0] = v0->GetEffMass(2, 4); - mMass[1] = v0->GetEffMass(4, 2); - } - - daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - if(!daughter[0] || !daughter[1]) return kFALSE; - - AliKFParticle *kfMother[2] = {0x0, 0x0}; - // Lambda - kfMother[0] = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kProton), TMath::Abs(kPiPlus)); - if(!kfMother[0]) return kFALSE; - - // Anti-Lambda - kfMother[1] = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kPiPlus), TMath::Abs(kProton)); - if(!kfMother[1]) return kFALSE; - - Float_t dMass[2] = {TMath::Abs(mMass[0] - cL0mass), TMath::Abs(mMass[1] - cL0mass)}; - - AliESDtrack* d[2]; - d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - if(!d[0] || !d[1]) return kFALSE; - - Float_t p[2] = {d[0]->GetP(), d[1]->GetP()}; - - // check the 3 lambda - antilambda variables - Int_t check[2] = {-1, -1}; // 0 : lambda, 1 : antilambda - // 1) momentum of the daughter particles - proton is expected to have higher momentum than pion - check[0] = (p[0] > p[1]) ? 0 : 1; - // 2) mass of the mother particle - check[1] = (dMass[0] < dMass[1]) ? 0 : 1; - - // require positive correlation of (1) and (2) - if(check[0] != check[1]){ - if(kfMother[0]) delete kfMother[0]; - if(kfMother[1]) delete kfMother[1]; - return kFALSE; - } - - // now that the check[0] == check[1] - const Int_t type = check[0]; - - // require that the input armenteros preselection agree: - if(type != id) return kFALSE; - - Float_t iMass =0.; - if(sign){ - iMass = (type == 0) ? v0->GetEffMass(4, 2) : v0->GetEffMass(2, 4); - } - else{ - iMass = (type == 0) ? v0->GetEffMass(2, 4) : v0->GetEffMass(4, 2); - } - - // cos pointing angle - Double_t cosPoint = v0->GetV0CosineOfPointingAngle(); - cosPoint = TMath::ACos(cosPoint); - - // DCA between daughters - Double_t dca = v0->GetDcaV0Daughters(); - - // Production vertex - Double_t x, y, z; - v0->GetXYZ(x,y,z); - Double_t r = TMath::Sqrt(x*x + y*y); - - // proton - pion indices - Int_t ix[2] = {0, 1}; - if(1 == type){ - ix[0] = 1; - ix[1] = 0; - } - - // V0 chi2/ndf - Double_t chi2ndf = kfMother[type]->GetChi2()/kfMother[type]->GetNDF(); - - if(kfMother[0]) delete kfMother[0]; - if(kfMother[1]) delete kfMother[1]; - - // - // apply the cuts - // - - if(iMass < fLcutInvMass[0] || iMass > fLcutInvMass[1]) return kFALSE; - - if(chi2ndf > fLcutChi2NDF) return kFALSE; - - if(cosPoint < fLcutCosPoint[0] || cosPoint > fLcutCosPoint[1]) return kFALSE; - - if(dca < fLcutDCA[0] || dca > fLcutDCA[1]) return kFALSE; - - if(r < fLcutVertexR[0] || r > fLcutVertexR[1]) return kFALSE; - - // all cuts passed - - if(0 == type){ - pdgV0 = 3122; - if(sign){ - pdgP = 2212; - pdgN = -211; - } - else{ - pdgP = -211; - pdgN = 2212; - } - } - else{ - pdgV0 = -3122; - if(sign){ - pdgP = 211; - pdgN = -2212; - } - else{ - pdgP = -2212; - pdgN = 211; - } - } - - return kTRUE; -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::V0CutsCommon(const AliESDv0 * const v0) const -{ - // - // V0 cuts common to all V0s - // - - AliESDtrack* dN, *dP; - - dP = dynamic_cast(fEvent->GetTrack(v0->GetPindex())); - dN = dynamic_cast(fEvent->GetTrack(v0->GetNindex())); - - if(!dN || !dP) return kFALSE; - - Int_t qP = dP->Charge(); - Int_t qN = dN->Charge(); - - if((qP*qN) != -1) return kFALSE; - - return kTRUE; -} -//____________________________________________________________________ -void AliESDv0KineCuts::Armenteros(AliESDv0* const v0, Float_t val[2]) const -{ - // - // computes the Armenteros variables for given V0 - // fills the histogram - // returns the values via "val" - // - - Double_t mn[3] = {0,0,0}; - Double_t mp[3] = {0,0,0}; - Double_t mm[3] = {0,0,0}; - - if(CheckSigns(v0)){ - v0->GetNPxPyPz(mn[0],mn[1],mn[2]); //reconstructed cartesian momentum components of negative daughter - v0->GetPPxPyPz(mp[0],mp[1],mp[2]); //reconstructed cartesian momentum components of positive daughter - } - else{ - v0->GetPPxPyPz(mn[0],mn[1],mn[2]); //reconstructed cartesian momentum components of negative daughter - v0->GetNPxPyPz(mp[0],mp[1],mp[2]); //reconstructed cartesian momentum components of positive daughter - } - v0->GetPxPyPz(mm[0],mm[1],mm[2]); //reconstructed cartesian momentum components of mother - - TVector3 vecN(mn[0],mn[1],mn[2]); - TVector3 vecP(mp[0],mp[1],mp[2]); - TVector3 vecM(mm[0],mm[1],mm[2]); - - Double_t thetaP = acos((vecP * vecM)/(vecP.Mag() * vecM.Mag())); - Double_t thetaN = acos((vecN * vecM)/(vecN.Mag() * vecM.Mag())); - - Double_t alfa = ((vecP.Mag())*cos(thetaP)-(vecN.Mag())*cos(thetaN))/ - ((vecP.Mag())*cos(thetaP)+(vecN.Mag())*cos(thetaN)) ; - Double_t qt = vecP.Mag()*sin(thetaP); - - val[0] = alfa; - val[1] = qt; -} -//____________________________________________________________________ -Bool_t AliESDv0KineCuts::CheckSigns(AliESDv0* const v0) const -{ - // - // check wheter the sign was correctly applied to - // V0 daughter tracks - // - - Bool_t correct = kFALSE; - - Int_t pIndex = 0, nIndex = 0; - pIndex = v0->GetPindex(); - nIndex = v0->GetNindex(); - - AliESDtrack* d[2]; - d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - - Int_t sign[2]; - sign[0] = (int)d[0]->GetSign(); - sign[1] = (int)d[1]->GetSign(); - - if(-1 == sign[0] && 1 == sign[1]){ - correct = kFALSE; - } - else{ - correct = kTRUE; - } - - return correct; -} -//________________________________________________________________ -Double_t AliESDv0KineCuts::PsiPair(AliESDv0* const v0) const -{ - // - // Angle between daughter momentum plane and plane - // - - if(!fEvent) return -1.; - - Float_t magField = fEvent->GetMagneticField(); - - Int_t pIndex = -1; - Int_t nIndex = -1; - if(CheckSigns(v0)){ - pIndex = v0->GetPindex(); - nIndex = v0->GetNindex(); - } - else{ - pIndex = v0->GetNindex(); - nIndex = v0->GetPindex(); - } - - - AliESDtrack* daughter[2]; - - daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); - daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); - - Double_t x, y, z; - v0->GetXYZ(x,y,z);//Reconstructed coordinates of V0; to be replaced by Markus Rammler's method in case of conversions! - - Double_t mn[3] = {0,0,0}; - Double_t mp[3] = {0,0,0}; - - - v0->GetNPxPyPz(mn[0],mn[1],mn[2]);//reconstructed cartesian momentum components of negative daughter; - v0->GetPPxPyPz(mp[0],mp[1],mp[2]);//reconstructed cartesian momentum components of positive daughter; - - - Double_t deltat = 1.; - deltat = TMath::ATan(mp[2]/(TMath::Sqrt(mp[0]*mp[0] + mp[1]*mp[1])+1.e-13)) - TMath::ATan(mn[2]/(TMath::Sqrt(mn[0]*mn[0] + mn[1]*mn[1])+1.e-13));//difference of angles of the two daughter tracks with z-axis - - Double_t radiussum = TMath::Sqrt(x*x + y*y) + 50;//radius to which tracks shall be propagated - - Double_t momPosProp[3]; - Double_t momNegProp[3]; - - AliExternalTrackParam pt(*daughter[0]), nt(*daughter[1]); - - Double_t psiPair = 4.; - - if(nt.PropagateTo(radiussum,magField) == 0)//propagate tracks to the outside - psiPair = -5.; - if(pt.PropagateTo(radiussum,magField) == 0) - psiPair = -5.; - pt.GetPxPyPz(momPosProp);//Get momentum vectors of tracks after propagation - nt.GetPxPyPz(momNegProp); - - Double_t pEle = - TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);//absolute momentum value of negative daughter - Double_t pPos = - TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);//absolute momentum value of positive daughter - - Double_t scalarproduct = - momPosProp[0]*momNegProp[0]+momPosProp[1]*momNegProp[1]+momPosProp[2]*momNegProp[2];//scalar product of propagated positive and negative daughters' momenta - - Double_t chipair = TMath::ACos(scalarproduct/(pEle*pPos));//Angle between propagated daughter tracks - - psiPair = TMath::Abs(TMath::ASin(deltat/chipair)); - - return psiPair; -} -//___________________________________________________________________ -Bool_t AliESDv0KineCuts::GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]) const -{ - // - // recalculate the gamma conversion XY postition - // - - const Double_t b = fEvent->GetMagneticField(); - - Double_t helixcenterpos[2]; - GetHelixCenter(ptrack,b,ptrack->Charge(),helixcenterpos); - - Double_t helixcenterneg[2]; - GetHelixCenter(ntrack,b,ntrack->Charge(),helixcenterneg); - - Double_t poshelix[6]; - ptrack->GetHelixParameters(poshelix,b); - Double_t posradius = TMath::Abs(1./poshelix[4]); - - Double_t neghelix[6]; - ntrack->GetHelixParameters(neghelix,b); - Double_t negradius = TMath::Abs(1./neghelix[4]); - - Double_t xpos = helixcenterpos[0]; - Double_t ypos = helixcenterpos[1]; - Double_t xneg = helixcenterneg[0]; - Double_t yneg = helixcenterneg[1]; - - convpos[0] = (xpos*negradius + xneg*posradius)/(negradius+posradius); - convpos[1] = (ypos*negradius+ yneg*posradius)/(negradius+posradius); - - return 1; -} -//___________________________________________________________________ -Bool_t AliESDv0KineCuts::GetHelixCenter(AliESDtrack * const track, Double_t b,Int_t charge, Double_t center[2]) const -{ - // - // computes the center of the track helix - // - - Double_t pi = TMath::Pi(); - - Double_t helix[6]; - track->GetHelixParameters(helix,b); - - Double_t xpos = helix[5]; - Double_t ypos = helix[0]; - Double_t radius = TMath::Abs(1./helix[4]); - Double_t phi = helix[2]; - - if(phi < 0){ - phi = phi + 2*pi; - } - - phi -= pi/2.; - Double_t xpoint = radius * TMath::Cos(phi); - Double_t ypoint = radius * TMath::Sin(phi); - - if(b<0){ - if(charge > 0){ - xpoint = - xpoint; - ypoint = - ypoint; - } - /* avoid self assignment - if(charge < 0){ - xpoint = xpoint; - ypoint = ypoint; - } - */ - } - if(b>0){ - /* avoid self assignment - if(charge > 0){ - xpoint = xpoint; - ypoint = ypoint; - } - */ - if(charge < 0){ - xpoint = - xpoint; - ypoint = - ypoint; - } - } - center[0] = xpos + xpoint; - center[1] = ypos + ypoint; - - return 1; -} -//___________________________________________________________________ -AliKFParticle *AliESDv0KineCuts::CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec) const -{ - // - // Creates a mother particle - // - AliKFParticle pkfdaughter(*pdaughter, pspec); - AliKFParticle nkfdaughter(*ndaughter, nspec); - - - // Create the mother particle - AliKFParticle *m = new AliKFParticle(pkfdaughter, nkfdaughter); - m->SetField(fEvent->GetMagneticField()); - if(TMath::Abs(kElectron) == pspec && TMath::Abs(kElectron) == nspec) m->SetMassConstraint(0, 0.001); - else if(TMath::Abs(kPiPlus) == pspec && TMath::Abs(kPiPlus) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass(), 0.); - else if(TMath::Abs(kProton) == pspec && TMath::Abs(kPiPlus) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(), 0.); - else if(TMath::Abs(kPiPlus) == pspec && TMath::Abs(kProton) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(), 0.); - else{ - AliErrorClass("Wrong daughter ID - mass constraint can not be set"); - } - - AliKFVertex improvedVertex = *fPrimaryVertex; - improvedVertex += *m; - m->SetProductionVertex(improvedVertex); - - // update 15/06/2010 - // mother particle will not be added to primary vertex but only to its copy - // as this confilcts with calling - // m->SetPrimaryVertex() function and - // subsequently removing the mother particle afterwards - // Source: Sergey Gorbunov - - return m; -} -//____________________________________________________________________ -void AliESDv0KineCuts::SetEvent(AliESDEvent* const event){ - // - // direct setter of ESD event - // - fEvent = event; - if(!fEvent){ - AliErrorClass("Invalid input event pointer"); - return; - } -if (fUseExternalVertex) return; -else{ - if(fPrimaryVertex && fDeleteVertex){ - delete fPrimaryVertex; - fPrimaryVertex=0x0; - } - fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex())); - fDeleteVertex=kTRUE; - } - - - -} -//____________________________________________________________________ -void AliESDv0KineCuts::SetEvent(AliVEvent* const event){ - // - // direct setter of ESD event - // - - fEvent = dynamic_cast(event); - if(!fEvent){ - AliErrorClass("Invalid input event pointer"); - return; - } - - if (fUseExternalVertex) return; - else{ - if(fPrimaryVertex && fDeleteVertex){ - delete fPrimaryVertex; - fPrimaryVertex=0x0; - } - fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex())); - fDeleteVertex=kTRUE; - } -} - - -//________________________________________________________________ -void AliESDv0KineCuts::UseExternalVertex(Bool_t use_external){ - // - // Reenable primary Vertex from ESD event - // - if (use_external) fUseExternalVertex =kTRUE; - else fUseExternalVertex =kFALSE; -} - - - - -//________________________________________________________________ -void AliESDv0KineCuts::SetPrimaryVertex(AliKFVertex* const v){ - // - // set the primary vertex of the event - // - if(fPrimaryVertex && fDeleteVertex){ - delete fPrimaryVertex; - fPrimaryVertex =0x0; - fDeleteVertex = kFALSE; - } - fUseExternalVertex=kTRUE; - fPrimaryVertex = v; // set primary Vertex - if(!fPrimaryVertex){ - AliErrorClass("Failed to initialize the primary vertex"); - return; - } -} -//___________________________________________________________________ -void AliESDv0KineCuts::SetMode(Int_t mode, Int_t type){ - // - // this function allows the user to select (prior running the 'ProcessV0' function) - // to select different approaches to V0 selection - the 'mode' - // - and - - // different systems (pp, PbPb) - 'type' - // - // To see the cut values for different modes please refer to the - // function SetCuts() - // - // Important notice: based on the parameters particular sets of cuts will - // be activated for teh V0 selection. If some additional changes to single - // cuts are needed please us the SetXXXcut function (see the header file) - // - - switch(mode){ - case kPurity: - fMode = kPurity; // used to obtain highest purity possible - the efficiency may be low - break; - case kEffGamma: - fMode = kEffGamma; // used to obtain highes efficiency possible - the purity may be worse - break; - default: - AliError("V0 selection mode not recognozed, setting 'kPurity'"); - fMode = kPurity; - } - - switch(type){ - case kPP: - fType = kPP; // cuts optimized for low multiplicity - break; - case kPbPb: - fType = kPbPb; // cuts optimized for high multiplicity - break; - } - - // setup the cut values for selected mode & type - SetCuts(); - -} -//___________________________________________________________________ -void AliESDv0KineCuts::SetMode(Int_t mode, const char* type){ - // - // overloaded function - please see above - // - - Int_t t = -1; - - if(!strcmp("pp", type)) t = kPP; - else if(!(strcmp("PbPb", type))) t = kPbPb; - else{ - AliError("data type not recognized, setting 'pp'"); - t = kPP; - } - - SetMode(mode, t); - -} -//___________________________________________________________________ -void AliESDv0KineCuts::SetCuts(){ - // - // this funciton sets the default cut values based on the selected - // fMode and fType. - // please note that only the cuts that have different values than the default - // cuts are updated here - // - - // last update: 14/02/2011 - // as a very preliminary - the only change to default cuts is to apply - // less restricting gamma conversion selection in PreselectV0() function - - - -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* + * author: M.Kalisky@gsi.de + * 08/Dec/2010 + * + * Description: This class allows with purely kinematical cuts + * to select clean samples of electrons, pions and protons from the + * V0 online finder ESD V0 candidates for PID and dectector resonse + * studies. + */ + +#include +#include + +#include "AliESDv0.h" +#include "AliESDtrack.h" +#include "AliESDEvent.h" +#include "AliVEvent.h" +#include "AliLog.h" +#include "AliKFParticle.h" +#include "AliVTrack.h" +#include "AliKFVertex.h" + +#include "AliESDv0KineCuts.h" + +ClassImp(AliESDv0KineCuts) + +//____________________________________________________________________ +AliESDv0KineCuts::AliESDv0KineCuts() : + fEvent(0x0) + , fPrimaryVertex(0x0) + , fType(0) + , fMode(0) + , fTPCNcls(1) + , fTPCrefit(kTRUE) + , fTPCchi2perCls(4.0) + , fTPCclsRatio(0.6) + , fNoKinks(kTRUE) + , fGcutChi2NDF(10) + , fGcutInvMass(0.05) + , fK0cutChi2NDF(10) + , fLcutChi2NDF(10) + , fUseExternalVertex(kFALSE) + , fDeleteVertex(kFALSE) +{ + // + // Default constructor + // + + // default single track cuts + fTPCNcls = 1; // minimal number of the TPC clusters + fTPCrefit = kTRUE; // TPC refit + fTPCchi2perCls = 4.0; // chi2 per TPC cluster + fTPCclsRatio = 0.6; // minimal foun/findable TPC cluster ratio + fNoKinks = kTRUE; // kinks - no [kTRUE] or do not care [kFalse] + + + // default gamma cuts values + fGcutChi2NDF = 10; // Chi2NF cut value for the AliKFparticle gamma + fGcutCosPoint[0] = 0; // cos of the pointing angle [min, max] + fGcutCosPoint[1] = 0.02; // cos of the pointing angle [min, max] + fGcutDCA[0] = 0.; // DCA between the daughter tracks [min, max] + fGcutDCA[1] = 0.25; // DCA between the daughter tracks [min, max] + fGcutVertexR[0] = 3.; // radius of the conversion point [min, max] + fGcutVertexR[1] = 90.; // radius of the conversion point [min, max] + fGcutPsiPair[0] = 0.; // value of the psi pair cut [min, max] + fGcutPsiPair[1] = 0.05; // value of the psi pair cut [min, max] + fGcutInvMass = 0.05; // upper value on the gamma invariant mass + // default K0 cuts + fK0cutChi2NDF = 10; // Chi2NF cut value for the AliKFparticle K0 + fK0cutCosPoint[0] = 0.; // cos of the pointing angle [min, max] + fK0cutCosPoint[1] = 0.02; // cos of the pointing angle [min, max] + fK0cutDCA[0] = 0.; // DCA between the daughter tracks [min, max] + fK0cutDCA[1] = 0.2; // DCA between the daughter tracks [min, max] + fK0cutVertexR[0] = 2.0; // radius of the decay point [min, max] + fK0cutVertexR[1] = 30.0; // radius of the decay point [min, max] + fK0cutInvMass[0] = 0.486; // invariant mass window + fK0cutInvMass[1] = 0.508; // invariant mass window + // Lambda & anti-Lambda cut values + fLcutChi2NDF = 10; // Chi2NF cut value for the AliKFparticle K0 + fLcutCosPoint[0] = 0.; // cos of the pointing angle [min, max] + fLcutCosPoint[1] = 0.02; // cos of the pointing angle [min, max] + fLcutDCA[0] = 0.; // DCA between the daughter tracks [min, max] + fLcutDCA[1] = 0.2; // DCA between the daughter tracks [min, max] + fLcutVertexR[0] = 2.0; // radius of the decay point [min, max] + fLcutVertexR[1] = 40.0; // radius of the decay point [min, max] + fLcutInvMass[0] = 1.11; // invariant mass window + fLcutInvMass[1] = 1.12; // invariant mass window + +} +//____________________________________________________________________ +AliESDv0KineCuts::~AliESDv0KineCuts(){ + // + // Destructor + // + + +} +//____________________________________________________________________ +AliESDv0KineCuts::AliESDv0KineCuts(const AliESDv0KineCuts &ref): + TObject(ref) + , fEvent(0x0) + , fPrimaryVertex(0x0) + , fType(0) + , fMode(0) + , fTPCNcls(1) + , fTPCrefit(kTRUE) + , fTPCchi2perCls(4.0) + , fTPCclsRatio(0.6) + , fNoKinks(kTRUE) + , fGcutChi2NDF(10) + , fGcutInvMass(0.05) + , fK0cutChi2NDF(10) + , fLcutChi2NDF(10) + , fUseExternalVertex(kFALSE) + , fDeleteVertex(kFALSE) +{ + // + // Copy operator + // + + ref.Copy(*this); +} +//____________________________________________________________________ +AliESDv0KineCuts &AliESDv0KineCuts::operator=(const AliESDv0KineCuts &ref){ + // + // assignment operator + // + if(this != &ref) + ref.Copy(*this); + return *this; +} +//____________________________________________________________________ +void AliESDv0KineCuts::Copy(TObject &ref) const { + // + // Performs the copying of the object + // + + TObject::Copy(ref); + + AliESDv0KineCuts &target = dynamic_cast(ref); + + // default single track cuts + target.fTPCNcls = fTPCNcls; + target.fTPCrefit = fTPCrefit; + target.fTPCchi2perCls = fTPCchi2perCls; + target.fTPCclsRatio = fTPCclsRatio; + target.fNoKinks = fNoKinks; + target.fUseExternalVertex = fUseExternalVertex; //added december 2nd 2011 + target.fDeleteVertex = fDeleteVertex; //added december 2nd 2011 + + // default gamma cuts values + target.fGcutChi2NDF = fGcutChi2NDF; + memcpy(target.fGcutCosPoint, fGcutCosPoint, sizeof(Float_t) * 2); + memcpy(target.fGcutDCA, fGcutDCA, sizeof(Float_t) * 2); + memcpy(target.fGcutVertexR, fGcutVertexR, sizeof(Float_t) * 2); + memcpy(target.fGcutPsiPair, fGcutPsiPair, sizeof(Float_t) * 2); + target.fGcutInvMass = fGcutInvMass; + // default K0 cuts + target.fK0cutChi2NDF = fK0cutChi2NDF; + memcpy(target.fK0cutCosPoint, fK0cutCosPoint, sizeof(Float_t) * 2); + memcpy(target.fK0cutDCA, fK0cutDCA, sizeof(Float_t) * 2); + memcpy(target.fK0cutVertexR, fK0cutVertexR, sizeof(Float_t) * 2); + memcpy(target.fK0cutInvMass, fK0cutInvMass, sizeof(Float_t) * 2); + // Lambda & anti-Lambda cut values + target.fLcutChi2NDF = fLcutChi2NDF; + memcpy(target.fLcutCosPoint, fLcutCosPoint, sizeof(Float_t) * 2); + memcpy(target.fLcutDCA, fLcutDCA, sizeof(Float_t) * 2); + memcpy(target.fLcutVertexR, fLcutVertexR, sizeof(Float_t) * 2); + memcpy(target.fLcutInvMass, fLcutInvMass, sizeof(Float_t) * 2); + +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const +{ + // + // main user function + // + + if(!v0) return kFALSE; + if(!fEvent){ + AliErrorClass("No valid Event pointer available, provide it first"); + return kFALSE; + } + + if(!V0CutsCommon(v0)) return kFALSE; + + const Int_t id = PreselectV0(v0); + + if(!SingleTrackCuts(v0)) return kFALSE; + + switch(id){ + case kUndef: + return kFALSE; + case kGamma: + return CaseGamma(v0, pdgV0, pdgP, pdgN); + case kK0: + return CaseK0(v0, pdgV0, pdgP, pdgN); + case kLambda: + return CaseLambda(v0, pdgV0, pdgP, pdgN, 0); + case kALambda: + return CaseLambda(v0, pdgV0, pdgP, pdgN, 1); + default: + return kFALSE; + } + + return kFALSE; +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN) const +{ + // + // main user function, simplified if the V0 identity is not necessary + // + + if(!v0) return kFALSE; + if(!fEvent){ + AliErrorClass("No valid Event pointer available, provide it first"); + return kFALSE; + } + + Int_t idV0 = -1; + return ProcessV0(v0, idV0, pdgP, pdgN); + +} +//____________________________________________________________________ +Int_t AliESDv0KineCuts::PreselectV0(AliESDv0* const v0) const +{ + // + // Make a preselection (exclusive) of the V0 cadidates based on + // Armenteros plot + // the armenteros cut values are currently fixed and user is not able to set them via + // set funcions. The reason is that these cuts are optimized and furneter changes should + // not be necessary. To prove otherwise please study in detail before changing the values + // + + Float_t ap[2] = {-1., -1.}; + Armenteros(v0, ap); + // for clarity + const Float_t alpha = ap[0]; + const Float_t qt = ap[1]; + + // selection cuts + // - the reagions for different candidates must not overlap + + // Gamma cuts + const Double_t cutAlphaG = 0.35; + const Double_t cutQTG = 0.05; + const Double_t cutAlphaG2[2] = {0.6, 0.8}; + const Double_t cutQTG2 = 0.04; + + // K0 cuts + const Float_t cutQTK0[2] = {0.1075, 0.215}; + const Float_t cutAPK0[2] = {0.199, 0.8}; // parameters for curved QT cut + + // Lambda & A-Lambda cuts + const Float_t cutQTL = 0.03; + const Float_t cutAlphaL[2] = {0.35, 0.7}; + const Float_t cutAlphaAL[2] = {-0.7, -0.35}; + const Float_t cutAPL[3] = {0.107, -0.69, 0.5}; // parameters fir curved QT cut + + + if(kPurity == fMode){ + // Check for Gamma candidates + if(qt < cutQTG){ + if( (TMath::Abs(alpha) < cutAlphaG) ) return kGamma; + } + // additional region - should help high pT gammas + if(qt < cutQTG2){ + if( (TMath::Abs(alpha) > cutAlphaG2[0]) && (TMath::Abs(alpha) < cutAlphaG2[1]) ) return kGamma; + } + } + if(kEffGamma == fMode){ + if(qt < cutQTG) return kGamma; + } + + + // Check for K0 candidates + Float_t q = cutAPK0[0] * TMath::Sqrt(TMath::Abs(1 - alpha*alpha/(cutAPK0[1]*cutAPK0[1]))); + if( (qt > cutQTK0[0]) && (qt < cutQTK0[1]) && (qt > q) ){ + return kK0; + } + + // Check for Lambda candidates + q = cutAPL[0] * TMath::Sqrt(TMath::Abs(1 - ( (alpha + cutAPL[1]) * (alpha + cutAPL[1]) ) / (cutAPL[2]*cutAPL[2]) )); + if( (alpha > cutAlphaL[0]) && (alpha < cutAlphaL[1]) && (qt > cutQTL) && (qt < q) ){ + return kLambda; + } + + // Check for A-Lambda candidates + q = cutAPL[0] * TMath::Sqrt(TMath::Abs(1 - ( (alpha - cutAPL[1]) * (alpha - cutAPL[1]) ) / (cutAPL[2]*cutAPL[2]) )); + if( (alpha > cutAlphaAL[0]) && (alpha < cutAlphaAL[1]) && (qt > cutQTL) && (qt < q) ){ + return kALambda; + } + + return kUndef; +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::SingleTrackCuts(AliESDv0 * const v0) const +{ + // + // apply single track cuts + // correct sign not relevat here + // + + if(!v0) return kFALSE; + + Int_t pIndex = 0, nIndex = 0; + pIndex = v0->GetPindex(); + nIndex = v0->GetNindex(); + AliESDtrack* d[2]; + d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + + for(Int_t i=0; i<2; ++i){ + if(!d[i]) return kFALSE; + + // status word + ULong_t status = d[i]->GetStatus(); + + // No. of TPC clusters leave to the users + if(d[i]->GetTPCNcls() < 1) return kFALSE; + + // TPC refit + if(!(status & AliESDtrack::kTPCrefit)) return kFALSE; + + // Chi2 per TPC cluster + Int_t nTPCclusters = d[i]->GetTPCNcls(); + Float_t chi2perTPCcluster = d[i]->GetTPCchi2()/Float_t(nTPCclusters); + if(chi2perTPCcluster > 4) return kFALSE; + + // TPC cluster ratio + Float_t cRatioTPC = d[i]->GetTPCNclsF() > 0. ? static_cast(d[i]->GetTPCNcls())/static_cast (d[i]->GetTPCNclsF()) : 1.; + if(cRatioTPC < 0.6) return kFALSE; + + // kinks + if(d[i]->GetKinkIndex(0) != 0) return kFALSE; + + } + + return kTRUE; +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const +{ + // + // process the gamma conversion candidate + // + + if(!v0) return kFALSE; + + AliVTrack* daughter[2]; + Int_t pIndex = 0, nIndex = 0; + + Bool_t sign = CheckSigns(v0); + if(sign){ + pIndex = v0->GetPindex(); + nIndex = v0->GetNindex(); + } + else{ + pIndex = v0->GetNindex(); + nIndex = v0->GetPindex(); + } + daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + if(!daughter[0] || !daughter[1]) return kFALSE; + + AliKFParticle *kfMother = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kElectron), TMath::Abs(kElectron)); + if(!kfMother) return kFALSE; + + AliESDtrack* d[2]; + d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + + Float_t iMass = v0->GetEffMass(0, 0); + + // cos pointing angle + Double_t cosPoint = v0->GetV0CosineOfPointingAngle(); + cosPoint = TMath::ACos(cosPoint); + + // DCA between daughters + Double_t dca = v0->GetDcaV0Daughters(); + + // Production vertex + Double_t x, y, z; + v0->GetXYZ(x,y,z); + Double_t r = TMath::Sqrt(x*x + y*y); + + Double_t xy[2]; + Double_t r2 = -1.; + if ( GetConvPosXY(d[0], d[1], xy) ){ + r2 = TMath::Sqrt(xy[0]*xy[0] + xy[1]*xy[1]); + } + + // psi pair + Double_t psiPair = PsiPair(v0); + + // V0 chi2/ndf + Double_t chi2ndf = kfMother->GetChi2()/kfMother->GetNDF(); + + if(kfMother) delete kfMother; + + // apply the cuts + + if(iMass > fGcutInvMass) return kFALSE; + + if(chi2ndf > fGcutChi2NDF) return kFALSE; + + if(cosPoint < fGcutCosPoint[0] || cosPoint > fGcutCosPoint[1]) return kFALSE; + + if(dca < fGcutDCA[0] || dca > fGcutDCA[1]) return kFALSE; + + if(r < fGcutVertexR[0] || r > fGcutVertexR[1]) return kFALSE; + + if(psiPair < fGcutPsiPair[0] || psiPair > fGcutPsiPair[1]) return kFALSE; + + // all cuts passed + + pdgV0 = 22; + if(sign){ + pdgP = -11; + pdgN = 11; + } + else{ + pdgP = 11; + pdgN = -11; + } + + return kTRUE; +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const { + // + // process the K0 candidate + // + + if(!v0) return kFALSE; + + AliVTrack* daughter[2]; + Int_t pIndex = 0, nIndex = 0; + Bool_t sign = CheckSigns(v0); + if(sign){ + pIndex = v0->GetPindex(); + nIndex = v0->GetNindex(); + } + else{ + pIndex = v0->GetNindex(); + nIndex = v0->GetPindex(); + } + + daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + if(!daughter[0] || !daughter[1]) return kFALSE; + + AliKFParticle *kfMother = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kPiPlus), TMath::Abs(kPiPlus)); + if(!kfMother) return kFALSE; + + AliESDtrack* d[2]; + d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + + Float_t iMass = v0->GetEffMass(2, 2); + + // cos pointing angle + Double_t cosPoint = v0->GetV0CosineOfPointingAngle(); + cosPoint = TMath::ACos(cosPoint); + + // DCA between daughters + Double_t dca = v0->GetDcaV0Daughters(); + + // Production vertex + Double_t x, y, z; + v0->GetXYZ(x,y,z); + + Double_t r = TMath::Sqrt(x*x + y*y); + + // V0 chi2/ndf + Double_t chi2ndf = kfMother->GetChi2()/kfMother->GetNDF(); + + if(kfMother) delete kfMother; + + // + // apply the cuts + // + if(iMass < fK0cutInvMass[0] || iMass > fK0cutInvMass[1]) return kFALSE; + + if(chi2ndf > fK0cutChi2NDF) return kFALSE; + + if(cosPoint < fK0cutCosPoint[0] || cosPoint > fK0cutCosPoint[1]) return kFALSE; + + if(dca < fK0cutDCA[0] || dca > fK0cutDCA[1]) return kFALSE; + + if(r < fK0cutVertexR[0] || r > fK0cutVertexR[1]) return kFALSE; + + // all cuts passed + pdgV0 = 310; + if(sign){ + pdgP = 211; + pdgN = -211; + } + else{ + pdgP = -211; + pdgN = 211; + } + + return kTRUE; +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const { + // + // process teh Lambda and Anti-Lambda candidate + // + + if(!v0) return kFALSE; + + const Double_t cL0mass=TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(); // PDG lambda mass + + AliVTrack* daughter[2]; + Int_t pIndex = 0, nIndex = 0; + Float_t mMass[2] = {-1., -1.}; + Bool_t sign = CheckSigns(v0); + if(sign){ + pIndex = v0->GetPindex(); + nIndex = v0->GetNindex(); + mMass[0] = v0->GetEffMass(4, 2); + mMass[1] = v0->GetEffMass(2, 4); + } + else{ + pIndex = v0->GetNindex(); + nIndex = v0->GetPindex(); + mMass[0] = v0->GetEffMass(2, 4); + mMass[1] = v0->GetEffMass(4, 2); + } + + daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + if(!daughter[0] || !daughter[1]) return kFALSE; + + AliKFParticle *kfMother[2] = {0x0, 0x0}; + // Lambda + kfMother[0] = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kProton), TMath::Abs(kPiPlus)); + if(!kfMother[0]) return kFALSE; + + // Anti-Lambda + kfMother[1] = CreateMotherParticle(daughter[0], daughter[1], TMath::Abs(kPiPlus), TMath::Abs(kProton)); + if(!kfMother[1]) return kFALSE; + + Float_t dMass[2] = {TMath::Abs(mMass[0] - cL0mass), TMath::Abs(mMass[1] - cL0mass)}; + + AliESDtrack* d[2]; + d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + if(!d[0] || !d[1]) return kFALSE; + + Float_t p[2] = {d[0]->GetP(), d[1]->GetP()}; + + // check the 3 lambda - antilambda variables + Int_t check[2] = {-1, -1}; // 0 : lambda, 1 : antilambda + // 1) momentum of the daughter particles - proton is expected to have higher momentum than pion + check[0] = (p[0] > p[1]) ? 0 : 1; + // 2) mass of the mother particle + check[1] = (dMass[0] < dMass[1]) ? 0 : 1; + + // require positive correlation of (1) and (2) + if(check[0] != check[1]){ + if(kfMother[0]) delete kfMother[0]; + if(kfMother[1]) delete kfMother[1]; + return kFALSE; + } + + // now that the check[0] == check[1] + const Int_t type = check[0]; + + // require that the input armenteros preselection agree: + if(type != id) return kFALSE; + + Float_t iMass =0.; + if(sign){ + iMass = (type == 0) ? v0->GetEffMass(4, 2) : v0->GetEffMass(2, 4); + } + else{ + iMass = (type == 0) ? v0->GetEffMass(2, 4) : v0->GetEffMass(4, 2); + } + + // cos pointing angle + Double_t cosPoint = v0->GetV0CosineOfPointingAngle(); + cosPoint = TMath::ACos(cosPoint); + + // DCA between daughters + Double_t dca = v0->GetDcaV0Daughters(); + + // Production vertex + Double_t x, y, z; + v0->GetXYZ(x,y,z); + Double_t r = TMath::Sqrt(x*x + y*y); + + // proton - pion indices + Int_t ix[2] = {0, 1}; + if(1 == type){ + ix[0] = 1; + ix[1] = 0; + } + + // V0 chi2/ndf + Double_t chi2ndf = kfMother[type]->GetChi2()/kfMother[type]->GetNDF(); + + if(kfMother[0]) delete kfMother[0]; + if(kfMother[1]) delete kfMother[1]; + + // + // apply the cuts + // + + if(iMass < fLcutInvMass[0] || iMass > fLcutInvMass[1]) return kFALSE; + + if(chi2ndf > fLcutChi2NDF) return kFALSE; + + if(cosPoint < fLcutCosPoint[0] || cosPoint > fLcutCosPoint[1]) return kFALSE; + + if(dca < fLcutDCA[0] || dca > fLcutDCA[1]) return kFALSE; + + if(r < fLcutVertexR[0] || r > fLcutVertexR[1]) return kFALSE; + + // all cuts passed + + if(0 == type){ + pdgV0 = 3122; + if(sign){ + pdgP = 2212; + pdgN = -211; + } + else{ + pdgP = -211; + pdgN = 2212; + } + } + else{ + pdgV0 = -3122; + if(sign){ + pdgP = 211; + pdgN = -2212; + } + else{ + pdgP = -2212; + pdgN = 211; + } + } + + return kTRUE; +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::V0CutsCommon(const AliESDv0 * const v0) const +{ + // + // V0 cuts common to all V0s + // + + AliESDtrack* dN, *dP; + + dP = dynamic_cast(fEvent->GetTrack(v0->GetPindex())); + dN = dynamic_cast(fEvent->GetTrack(v0->GetNindex())); + + if(!dN || !dP) return kFALSE; + + Int_t qP = dP->Charge(); + Int_t qN = dN->Charge(); + + if((qP*qN) != -1) return kFALSE; + + return kTRUE; +} +//____________________________________________________________________ +void AliESDv0KineCuts::Armenteros(AliESDv0* const v0, Float_t val[2]) const +{ + // + // computes the Armenteros variables for given V0 + // fills the histogram + // returns the values via "val" + // + + Double_t mn[3] = {0,0,0}; + Double_t mp[3] = {0,0,0}; + Double_t mm[3] = {0,0,0}; + + if(CheckSigns(v0)){ + v0->GetNPxPyPz(mn[0],mn[1],mn[2]); //reconstructed cartesian momentum components of negative daughter + v0->GetPPxPyPz(mp[0],mp[1],mp[2]); //reconstructed cartesian momentum components of positive daughter + } + else{ + v0->GetPPxPyPz(mn[0],mn[1],mn[2]); //reconstructed cartesian momentum components of negative daughter + v0->GetNPxPyPz(mp[0],mp[1],mp[2]); //reconstructed cartesian momentum components of positive daughter + } + v0->GetPxPyPz(mm[0],mm[1],mm[2]); //reconstructed cartesian momentum components of mother + + TVector3 vecN(mn[0],mn[1],mn[2]); + TVector3 vecP(mp[0],mp[1],mp[2]); + TVector3 vecM(mm[0],mm[1],mm[2]); + + Double_t thetaP = acos((vecP * vecM)/(vecP.Mag() * vecM.Mag())); + Double_t thetaN = acos((vecN * vecM)/(vecN.Mag() * vecM.Mag())); + + Double_t alfa = ((vecP.Mag())*cos(thetaP)-(vecN.Mag())*cos(thetaN))/ + ((vecP.Mag())*cos(thetaP)+(vecN.Mag())*cos(thetaN)) ; + Double_t qt = vecP.Mag()*sin(thetaP); + + val[0] = alfa; + val[1] = qt; +} +//____________________________________________________________________ +Bool_t AliESDv0KineCuts::CheckSigns(AliESDv0* const v0) const +{ + // + // check wheter the sign was correctly applied to + // V0 daughter tracks + // + + Bool_t correct = kFALSE; + + Int_t pIndex = 0, nIndex = 0; + pIndex = v0->GetPindex(); + nIndex = v0->GetNindex(); + + AliESDtrack* d[2]; + d[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + d[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + + Int_t sign[2]; + sign[0] = (int)d[0]->GetSign(); + sign[1] = (int)d[1]->GetSign(); + + if(-1 == sign[0] && 1 == sign[1]){ + correct = kFALSE; + } + else{ + correct = kTRUE; + } + + return correct; +} +//________________________________________________________________ +Double_t AliESDv0KineCuts::PsiPair(AliESDv0* const v0) const +{ + // + // Angle between daughter momentum plane and plane + // + + if(!fEvent) return -1.; + + Float_t magField = fEvent->GetMagneticField(); + + Int_t pIndex = -1; + Int_t nIndex = -1; + if(CheckSigns(v0)){ + pIndex = v0->GetPindex(); + nIndex = v0->GetNindex(); + } + else{ + pIndex = v0->GetNindex(); + nIndex = v0->GetPindex(); + } + + + AliESDtrack* daughter[2]; + + daughter[0] = dynamic_cast(fEvent->GetTrack(pIndex)); + daughter[1] = dynamic_cast(fEvent->GetTrack(nIndex)); + + Double_t x, y, z; + v0->GetXYZ(x,y,z);//Reconstructed coordinates of V0; to be replaced by Markus Rammler's method in case of conversions! + + Double_t mn[3] = {0,0,0}; + Double_t mp[3] = {0,0,0}; + + + v0->GetNPxPyPz(mn[0],mn[1],mn[2]);//reconstructed cartesian momentum components of negative daughter; + v0->GetPPxPyPz(mp[0],mp[1],mp[2]);//reconstructed cartesian momentum components of positive daughter; + + + Double_t deltat = 1.; + deltat = TMath::ATan(mp[2]/(TMath::Sqrt(mp[0]*mp[0] + mp[1]*mp[1])+1.e-13)) - TMath::ATan(mn[2]/(TMath::Sqrt(mn[0]*mn[0] + mn[1]*mn[1])+1.e-13));//difference of angles of the two daughter tracks with z-axis + + Double_t radiussum = TMath::Sqrt(x*x + y*y) + 50;//radius to which tracks shall be propagated + + Double_t momPosProp[3]; + Double_t momNegProp[3]; + + AliExternalTrackParam pt(*daughter[0]), nt(*daughter[1]); + + Double_t psiPair = 4.; + + if(nt.PropagateTo(radiussum,magField) == 0)//propagate tracks to the outside + psiPair = -5.; + if(pt.PropagateTo(radiussum,magField) == 0) + psiPair = -5.; + pt.GetPxPyPz(momPosProp);//Get momentum vectors of tracks after propagation + nt.GetPxPyPz(momNegProp); + + Double_t pEle = + TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);//absolute momentum value of negative daughter + Double_t pPos = + TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);//absolute momentum value of positive daughter + + Double_t scalarproduct = + momPosProp[0]*momNegProp[0]+momPosProp[1]*momNegProp[1]+momPosProp[2]*momNegProp[2];//scalar product of propagated positive and negative daughters' momenta + + Double_t chipair = TMath::ACos(scalarproduct/(pEle*pPos));//Angle between propagated daughter tracks + + psiPair = TMath::Abs(TMath::ASin(deltat/chipair)); + + return psiPair; +} +//___________________________________________________________________ +Bool_t AliESDv0KineCuts::GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]) const +{ + // + // recalculate the gamma conversion XY postition + // + + const Double_t b = fEvent->GetMagneticField(); + + Double_t helixcenterpos[2]; + GetHelixCenter(ptrack,b,ptrack->Charge(),helixcenterpos); + + Double_t helixcenterneg[2]; + GetHelixCenter(ntrack,b,ntrack->Charge(),helixcenterneg); + + Double_t poshelix[6]; + ptrack->GetHelixParameters(poshelix,b); + Double_t posradius = TMath::Abs(1./poshelix[4]); + + Double_t neghelix[6]; + ntrack->GetHelixParameters(neghelix,b); + Double_t negradius = TMath::Abs(1./neghelix[4]); + + Double_t xpos = helixcenterpos[0]; + Double_t ypos = helixcenterpos[1]; + Double_t xneg = helixcenterneg[0]; + Double_t yneg = helixcenterneg[1]; + + convpos[0] = (xpos*negradius + xneg*posradius)/(negradius+posradius); + convpos[1] = (ypos*negradius+ yneg*posradius)/(negradius+posradius); + + return 1; +} +//___________________________________________________________________ +Bool_t AliESDv0KineCuts::GetHelixCenter(AliESDtrack * const track, Double_t b,Int_t charge, Double_t center[2]) const +{ + // + // computes the center of the track helix + // + + Double_t pi = TMath::Pi(); + + Double_t helix[6]; + track->GetHelixParameters(helix,b); + + Double_t xpos = helix[5]; + Double_t ypos = helix[0]; + Double_t radius = TMath::Abs(1./helix[4]); + Double_t phi = helix[2]; + + if(phi < 0){ + phi = phi + 2*pi; + } + + phi -= pi/2.; + Double_t xpoint = radius * TMath::Cos(phi); + Double_t ypoint = radius * TMath::Sin(phi); + + if(b<0){ + if(charge > 0){ + xpoint = - xpoint; + ypoint = - ypoint; + } + /* avoid self assignment + if(charge < 0){ + xpoint = xpoint; + ypoint = ypoint; + } + */ + } + if(b>0){ + /* avoid self assignment + if(charge > 0){ + xpoint = xpoint; + ypoint = ypoint; + } + */ + if(charge < 0){ + xpoint = - xpoint; + ypoint = - ypoint; + } + } + center[0] = xpos + xpoint; + center[1] = ypos + ypoint; + + return 1; +} +//___________________________________________________________________ +AliKFParticle *AliESDv0KineCuts::CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec) const +{ + // + // Creates a mother particle + // + AliKFParticle pkfdaughter(*pdaughter, pspec); + AliKFParticle nkfdaughter(*ndaughter, nspec); + + + // Create the mother particle + AliKFParticle *m = new AliKFParticle(pkfdaughter, nkfdaughter); + m->SetField(fEvent->GetMagneticField()); + if(TMath::Abs(kElectron) == pspec && TMath::Abs(kElectron) == nspec) m->SetMassConstraint(0, 0.001); + else if(TMath::Abs(kPiPlus) == pspec && TMath::Abs(kPiPlus) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass(), 0.); + else if(TMath::Abs(kProton) == pspec && TMath::Abs(kPiPlus) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(), 0.); + else if(TMath::Abs(kPiPlus) == pspec && TMath::Abs(kProton) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(), 0.); + else{ + AliErrorClass("Wrong daughter ID - mass constraint can not be set"); + } + + AliKFVertex improvedVertex = *fPrimaryVertex; + improvedVertex += *m; + m->SetProductionVertex(improvedVertex); + + // update 15/06/2010 + // mother particle will not be added to primary vertex but only to its copy + // as this confilcts with calling + // m->SetPrimaryVertex() function and + // subsequently removing the mother particle afterwards + // Source: Sergey Gorbunov + + return m; +} +//____________________________________________________________________ +void AliESDv0KineCuts::SetEvent(AliESDEvent* const event){ + // + // direct setter of ESD event + // + fEvent = event; + if(!fEvent){ + AliErrorClass("Invalid input event pointer"); + return; + } +if (fUseExternalVertex) return; +else{ + if(fPrimaryVertex && fDeleteVertex){ + delete fPrimaryVertex; + fPrimaryVertex=0x0; + } + fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex())); + fDeleteVertex=kTRUE; + } + + + +} +//____________________________________________________________________ +void AliESDv0KineCuts::SetEvent(AliVEvent* const event){ + // + // direct setter of ESD event + // + + fEvent = dynamic_cast(event); + if(!fEvent){ + AliErrorClass("Invalid input event pointer"); + return; + } + + if (fUseExternalVertex) return; + else{ + if(fPrimaryVertex && fDeleteVertex){ + delete fPrimaryVertex; + fPrimaryVertex=0x0; + } + fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex())); + fDeleteVertex=kTRUE; + } +} + + +//________________________________________________________________ +void AliESDv0KineCuts::UseExternalVertex(Bool_t use_external){ + // + // Reenable primary Vertex from ESD event + // + if (use_external) fUseExternalVertex =kTRUE; + else fUseExternalVertex =kFALSE; +} + + + + +//________________________________________________________________ +void AliESDv0KineCuts::SetPrimaryVertex(AliKFVertex* const v){ + // + // set the primary vertex of the event + // + if(fPrimaryVertex && fDeleteVertex){ + delete fPrimaryVertex; + fPrimaryVertex =0x0; + fDeleteVertex = kFALSE; + } + fUseExternalVertex=kTRUE; + fPrimaryVertex = v; // set primary Vertex + if(!fPrimaryVertex){ + AliErrorClass("Failed to initialize the primary vertex"); + return; + } +} +//___________________________________________________________________ +void AliESDv0KineCuts::SetMode(Int_t mode, Int_t type){ + // + // this function allows the user to select (prior running the 'ProcessV0' function) + // to select different approaches to V0 selection - the 'mode' + // - and - + // different systems (pp, PbPb) - 'type' + // + // To see the cut values for different modes please refer to the + // function SetCuts() + // + // Important notice: based on the parameters particular sets of cuts will + // be activated for teh V0 selection. If some additional changes to single + // cuts are needed please us the SetXXXcut function (see the header file) + // + + switch(mode){ + case kPurity: + fMode = kPurity; // used to obtain highest purity possible - the efficiency may be low + break; + case kEffGamma: + fMode = kEffGamma; // used to obtain highes efficiency possible - the purity may be worse + break; + default: + AliError("V0 selection mode not recognozed, setting 'kPurity'"); + fMode = kPurity; + } + + switch(type){ + case kPP: + fType = kPP; // cuts optimized for low multiplicity + break; + case kPbPb: + fType = kPbPb; // cuts optimized for high multiplicity + break; + } + + // setup the cut values for selected mode & type + SetCuts(); + +} +//___________________________________________________________________ +void AliESDv0KineCuts::SetMode(Int_t mode, const char* type){ + // + // overloaded function - please see above + // + + Int_t t = -1; + + if(!strcmp("pp", type)) t = kPP; + else if(!(strcmp("PbPb", type))) t = kPbPb; + else{ + AliError("data type not recognized, setting 'pp'"); + t = kPP; + } + + SetMode(mode, t); + +} +//___________________________________________________________________ +void AliESDv0KineCuts::SetCuts(){ + // + // this funciton sets the default cut values based on the selected + // fMode and fType. + // please note that only the cuts that have different values than the default + // cuts are updated here + // + + // last update: 14/02/2011 + // as a very preliminary - the only change to default cuts is to apply + // less restricting gamma conversion selection in PreselectV0() function + + + +} diff --git a/ANALYSIS/AliESDv0KineCuts.h b/ANALYSIS/AliESDv0KineCuts.h index b71d3e0d156..bfd4ddbf938 100644 --- a/ANALYSIS/AliESDv0KineCuts.h +++ b/ANALYSIS/AliESDv0KineCuts.h @@ -1,191 +1,191 @@ -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ -/* - * plesae see source file for more details - */ -#ifndef ALIESDV0KINECUTS_H -#define ALIESDV0KINECUTS_H - -#include - -class AliESDv0; -class AliESDEvent; -class AliVEvent; -class AliESDtrack; -class AliVTrack; -class AliKFParticle; -class AliKFVertex; - -class AliESDv0KineCuts : public TObject{ - public: - enum{ // Reconstructed V0 - kUndef = -1, - kGamma = 0, - kK0 = 1, - kLambda = 2, - kALambda = 3 - }; - enum{ // data types - kPP = 0, - kPbPb = 1, // not yet implemented - }; - enum{ // operation modes - kPurity = 0, // purely kinematical selection - kEffGamma = 1 // !!! involves TPC dEdx or nSimga cuts !!! - }; - - AliESDv0KineCuts(); - virtual ~AliESDv0KineCuts(); - - AliESDv0KineCuts(const AliESDv0KineCuts &ref); - AliESDv0KineCuts &operator=(const AliESDv0KineCuts &ref); - - // main selection function - called once per V0 candidate - Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const; - Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN) const; - - // must be called by the user - void SetEvent(AliESDEvent* const event); - void SetEvent(AliVEvent* const event); - void SetPrimaryVertex(AliKFVertex* const v); - - // user can select an operation modes [see .cxx for details] - void SetMode(Int_t mode, Int_t type); - void SetMode(Int_t mode, const char* type); - void UseExternalVertex(Bool_t use_external=kTRUE); - AliKFParticle *CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec) const; - void SetCuts(); // setup cuts for selected fMode and fType, see source file for details - // - // setter functions for V0 cut values - // for default values see the constructor - // see the default contructor for comments - // - - // single track cuts - void SetNTPCclusters(Int_t n) { fTPCNcls = n; }; - void SetTPCrefit(Bool_t r = kTRUE) { fTPCrefit = r; }; - void SetTPCchi2perCls(Float_t chi2) { fTPCchi2perCls = chi2; }; - void SetTPCclusterratio(Float_t r) { fTPCclsRatio = r; }; - void SetNoKinks(Bool_t k = kTRUE) { fNoKinks = k; }; - - // gamma cuts - void SetGammaCutChi2NDF(Float_t val) { fGcutChi2NDF = val; }; - void SetGammaCutCosPoint(Float_t * const val) { - fGcutCosPoint[0] = val[0]; - fGcutCosPoint[1] = val[1]; - }; - void SetGammaCutDCA(Float_t * const val){ - fGcutDCA[0] = val[0]; - fGcutDCA[1] = val[1]; - }; - void SetGammaCutVertexR(Float_t * const val){ - fGcutVertexR[0] = val[0]; - fGcutVertexR[1] = val[1]; - }; - void SetGammaCutPsiPair(Float_t * const val){ - fGcutPsiPair[0] = val[0]; - fGcutPsiPair[1] = val[1]; - }; - void SetGammaCutInvMass(Float_t val){ - fGcutInvMass = val; - }; - // K0 cuts - void SetK0CutChi2NDF(Float_t val) { fK0cutChi2NDF = val; }; - void SetK0CutCosPoint(Float_t * const val) { - fK0cutCosPoint[0] = val[0]; - fK0cutCosPoint[1] = val[1]; - }; - void SetK0CutDCA(Float_t * const val){ - fK0cutDCA[0] = val[0]; - fK0cutDCA[1] = val[1]; - }; - void SetK0CutVertexR(Float_t * const val){ - fK0cutVertexR[0] = val[0]; - fK0cutVertexR[1] = val[1]; - }; - void SetK0CutInvMass(Float_t * const val){ - fK0cutInvMass[0] = val[0]; - fK0cutInvMass[1] = val[1]; - }; - // lambda & anti-lambda cuts - void SetLambdaCutChi2NDF(Float_t val) { fLcutChi2NDF = val; }; - void SetLambdaCutCosPoint(Float_t * const val) { - fLcutCosPoint[0] = val[0]; - fLcutCosPoint[1] = val[1]; - }; - void SetLambdaCutDCA(Float_t * const val){ - fLcutDCA[0] = val[0]; - fLcutDCA[1] = val[1]; - }; - void SetLambdaCutVertexR(Float_t * const val){ - fLcutVertexR[0] = val[0]; - fLcutVertexR[1] = val[1]; - }; - void SetLambdaCutInvMass(Float_t * const val){ - fLcutInvMass[0] = val[0]; - fLcutInvMass[1] = val[1]; - }; - - - Int_t PreselectV0(AliESDv0* const v0) const; - - Bool_t CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const; - Bool_t CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const; - Bool_t CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const; - - Bool_t V0CutsCommon(const AliESDv0 * const v0) const; - Bool_t SingleTrackCuts(AliESDv0 * const v0) const; - void Armenteros(AliESDv0* const v0, Float_t val[2]) const; - Bool_t CheckSigns(AliESDv0* const v0) const; - - Double_t PsiPair(AliESDv0* const v0) const; - Bool_t GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]) const; - Bool_t GetHelixCenter(AliESDtrack * const track, Double_t b, Int_t charge, Double_t center[2]) const; - - protected: - void Copy(TObject &ref) const; - - private: - Bool_t GammaEffCuts(AliESDv0 * const v0); // set of cuts optimized for high gamma efficiency - - private: - AliESDEvent *fEvent; // current event - AliKFVertex *fPrimaryVertex; // primary vertex - - Int_t fType; // data type: p-p or Pb-Pb - Int_t fMode; // current operation mode - - // single track cuts - Int_t fTPCNcls; // number of TPC clusters - Bool_t fTPCrefit; // TPC refit - yes [kTRUE] or do not care [kFALSE] - Float_t fTPCchi2perCls; // max. chi2 per TPC cluster - Float_t fTPCclsRatio; // min. TPC cluster ratio - Bool_t fNoKinks; // kinks - no [kTRUE] or do not care [kFalse] - - // gamma cut values - Float_t fGcutChi2NDF; // Chi2NF cut value for the AliKFparticle gamma - Float_t fGcutCosPoint[2]; // cos of the pointing angle [min, max] - Float_t fGcutDCA[2]; // DCA between the daughter tracks [min, max] - Float_t fGcutVertexR[2]; // radius of the conversion point [min, max] - Float_t fGcutPsiPair[2]; // value of the psi pair cut [min, max] - Float_t fGcutInvMass; // upper value on the gamma invariant mass - // K0 cut values - Float_t fK0cutChi2NDF; // Chi2NF cut value for the AliKFparticle K0 - Float_t fK0cutCosPoint[2]; // cos of the pointing angle [min, max] - Float_t fK0cutDCA[2]; // DCA between the daughter tracks [min, max] - Float_t fK0cutVertexR[2]; // radius of the decay point [min, max] - Float_t fK0cutInvMass[2]; // invariant mass window - // Lambda & anti-Lambda cut values - Float_t fLcutChi2NDF; // Chi2NF cut value for the AliKFparticle K0 - Float_t fLcutCosPoint[2]; // cos of the pointing angle [min, max] - Float_t fLcutDCA[2]; // DCA between the daughter tracks [min, max] - Float_t fLcutVertexR[2]; // radius of the decay point [min, max] - Float_t fLcutInvMass[2]; // invariant mass window - Bool_t fUseExternalVertex; // Is kTRUE if Vertex is set via SetPrimaryVertex() - Bool_t fDeleteVertex; // Is kTRUE if Vertex has been created in SetEvent() function - - ClassDef(AliESDv0KineCuts, 0); - -}; - -#endif +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ +/* + * plesae see source file for more details + */ +#ifndef ALIESDV0KINECUTS_H +#define ALIESDV0KINECUTS_H + +#include + +class AliESDv0; +class AliESDEvent; +class AliVEvent; +class AliESDtrack; +class AliVTrack; +class AliKFParticle; +class AliKFVertex; + +class AliESDv0KineCuts : public TObject{ + public: + enum{ // Reconstructed V0 + kUndef = -1, + kGamma = 0, + kK0 = 1, + kLambda = 2, + kALambda = 3 + }; + enum{ // data types + kPP = 0, + kPbPb = 1, // not yet implemented + }; + enum{ // operation modes + kPurity = 0, // purely kinematical selection + kEffGamma = 1 // !!! involves TPC dEdx or nSimga cuts !!! + }; + + AliESDv0KineCuts(); + virtual ~AliESDv0KineCuts(); + + AliESDv0KineCuts(const AliESDv0KineCuts &ref); + AliESDv0KineCuts &operator=(const AliESDv0KineCuts &ref); + + // main selection function - called once per V0 candidate + Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const; + Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN) const; + + // must be called by the user + void SetEvent(AliESDEvent* const event); + void SetEvent(AliVEvent* const event); + void SetPrimaryVertex(AliKFVertex* const v); + + // user can select an operation modes [see .cxx for details] + void SetMode(Int_t mode, Int_t type); + void SetMode(Int_t mode, const char* type); + void UseExternalVertex(Bool_t use_external=kTRUE); + AliKFParticle *CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec) const; + void SetCuts(); // setup cuts for selected fMode and fType, see source file for details + // + // setter functions for V0 cut values + // for default values see the constructor + // see the default contructor for comments + // + + // single track cuts + void SetNTPCclusters(Int_t n) { fTPCNcls = n; }; + void SetTPCrefit(Bool_t r = kTRUE) { fTPCrefit = r; }; + void SetTPCchi2perCls(Float_t chi2) { fTPCchi2perCls = chi2; }; + void SetTPCclusterratio(Float_t r) { fTPCclsRatio = r; }; + void SetNoKinks(Bool_t k = kTRUE) { fNoKinks = k; }; + + // gamma cuts + void SetGammaCutChi2NDF(Float_t val) { fGcutChi2NDF = val; }; + void SetGammaCutCosPoint(Float_t * const val) { + fGcutCosPoint[0] = val[0]; + fGcutCosPoint[1] = val[1]; + }; + void SetGammaCutDCA(Float_t * const val){ + fGcutDCA[0] = val[0]; + fGcutDCA[1] = val[1]; + }; + void SetGammaCutVertexR(Float_t * const val){ + fGcutVertexR[0] = val[0]; + fGcutVertexR[1] = val[1]; + }; + void SetGammaCutPsiPair(Float_t * const val){ + fGcutPsiPair[0] = val[0]; + fGcutPsiPair[1] = val[1]; + }; + void SetGammaCutInvMass(Float_t val){ + fGcutInvMass = val; + }; + // K0 cuts + void SetK0CutChi2NDF(Float_t val) { fK0cutChi2NDF = val; }; + void SetK0CutCosPoint(Float_t * const val) { + fK0cutCosPoint[0] = val[0]; + fK0cutCosPoint[1] = val[1]; + }; + void SetK0CutDCA(Float_t * const val){ + fK0cutDCA[0] = val[0]; + fK0cutDCA[1] = val[1]; + }; + void SetK0CutVertexR(Float_t * const val){ + fK0cutVertexR[0] = val[0]; + fK0cutVertexR[1] = val[1]; + }; + void SetK0CutInvMass(Float_t * const val){ + fK0cutInvMass[0] = val[0]; + fK0cutInvMass[1] = val[1]; + }; + // lambda & anti-lambda cuts + void SetLambdaCutChi2NDF(Float_t val) { fLcutChi2NDF = val; }; + void SetLambdaCutCosPoint(Float_t * const val) { + fLcutCosPoint[0] = val[0]; + fLcutCosPoint[1] = val[1]; + }; + void SetLambdaCutDCA(Float_t * const val){ + fLcutDCA[0] = val[0]; + fLcutDCA[1] = val[1]; + }; + void SetLambdaCutVertexR(Float_t * const val){ + fLcutVertexR[0] = val[0]; + fLcutVertexR[1] = val[1]; + }; + void SetLambdaCutInvMass(Float_t * const val){ + fLcutInvMass[0] = val[0]; + fLcutInvMass[1] = val[1]; + }; + + + Int_t PreselectV0(AliESDv0* const v0) const; + + Bool_t CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const; + Bool_t CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const; + Bool_t CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const; + + Bool_t V0CutsCommon(const AliESDv0 * const v0) const; + Bool_t SingleTrackCuts(AliESDv0 * const v0) const; + void Armenteros(AliESDv0* const v0, Float_t val[2]) const; + Bool_t CheckSigns(AliESDv0* const v0) const; + + Double_t PsiPair(AliESDv0* const v0) const; + Bool_t GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]) const; + Bool_t GetHelixCenter(AliESDtrack * const track, Double_t b, Int_t charge, Double_t center[2]) const; + + protected: + void Copy(TObject &ref) const; + + private: + Bool_t GammaEffCuts(AliESDv0 * const v0); // set of cuts optimized for high gamma efficiency + + private: + AliESDEvent *fEvent; // current event + AliKFVertex *fPrimaryVertex; // primary vertex + + Int_t fType; // data type: p-p or Pb-Pb + Int_t fMode; // current operation mode + + // single track cuts + Int_t fTPCNcls; // number of TPC clusters + Bool_t fTPCrefit; // TPC refit - yes [kTRUE] or do not care [kFALSE] + Float_t fTPCchi2perCls; // max. chi2 per TPC cluster + Float_t fTPCclsRatio; // min. TPC cluster ratio + Bool_t fNoKinks; // kinks - no [kTRUE] or do not care [kFalse] + + // gamma cut values + Float_t fGcutChi2NDF; // Chi2NF cut value for the AliKFparticle gamma + Float_t fGcutCosPoint[2]; // cos of the pointing angle [min, max] + Float_t fGcutDCA[2]; // DCA between the daughter tracks [min, max] + Float_t fGcutVertexR[2]; // radius of the conversion point [min, max] + Float_t fGcutPsiPair[2]; // value of the psi pair cut [min, max] + Float_t fGcutInvMass; // upper value on the gamma invariant mass + // K0 cut values + Float_t fK0cutChi2NDF; // Chi2NF cut value for the AliKFparticle K0 + Float_t fK0cutCosPoint[2]; // cos of the pointing angle [min, max] + Float_t fK0cutDCA[2]; // DCA between the daughter tracks [min, max] + Float_t fK0cutVertexR[2]; // radius of the decay point [min, max] + Float_t fK0cutInvMass[2]; // invariant mass window + // Lambda & anti-Lambda cut values + Float_t fLcutChi2NDF; // Chi2NF cut value for the AliKFparticle K0 + Float_t fLcutCosPoint[2]; // cos of the pointing angle [min, max] + Float_t fLcutDCA[2]; // DCA between the daughter tracks [min, max] + Float_t fLcutVertexR[2]; // radius of the decay point [min, max] + Float_t fLcutInvMass[2]; // invariant mass window + Bool_t fUseExternalVertex; // Is kTRUE if Vertex is set via SetPrimaryVertex() + Bool_t fDeleteVertex; // Is kTRUE if Vertex has been created in SetEvent() function + + ClassDef(AliESDv0KineCuts, 0); + +}; + +#endif diff --git a/ANALYSIS/BadChunkFilter/ProcessBadChunks02.C b/ANALYSIS/BadChunkFilter/ProcessBadChunks02.C index 8ec628e30ab..67ece640441 100644 --- a/ANALYSIS/BadChunkFilter/ProcessBadChunks02.C +++ b/ANALYSIS/BadChunkFilter/ProcessBadChunks02.C @@ -1,176 +1,176 @@ -/******************************************************************** - - Bad Chunks Checking code, 15th April 2013 - - --- This version is a bit more "automatized" in that you give it a - dataset string as a parameter and it spits out appropriately named - text files. Some small customization for each usage case (output - directory, in the first lines of the function below) may still - be needed when being used in general. - - --- Also note: the code expects to find an "output" directory to - store text files with summaries. If it does not exist, please create - it or also chang the path! - -********************************************************************/ - - -#include -#include - -#include "TFile.h" -#include "TTree.h" -#include "TString.h" - -using namespace std; - -int ProcessBadChunks02(TString lDataset ){ - - //Path to output files: change as needed - TString lFileName = "/Volumes/MyPassport/work/download/badchunk/"; - lFileName.Append(lDataset.Data()); - lFileName.Append(".root"); - - //Print out "I'm alive" - cout<<"----------------------------------------------------"<IsOpen()) { - cout<<"File not found!"<FindObjectAny("fTree"); - if (!ftree) { - cout<<"File doesn't contain fTree!"<GetEntries()<SetBranchAddress("fRunNumber" ,&llRunNumber ); - ftree->SetBranchAddress("fFileName" , &llFileName ); - ftree->SetBranchAddress("fNTracks" ,&llNTracks ); - ftree->SetBranchAddress("fNGlobalTracks" ,&llNGlobalTracks ); - - //Output ostreams: text files with chunk location, good and bad - - //Save by default to "output" directory - TString lGoodName = "output/GoodChunks-"; - lGoodName.Append(lDataset.Data()); - lGoodName.Append(".txt"); - TString lBadName = "output/BadChunks-"; - lBadName.Append(lDataset.Data()); - lBadName.Append(".txt"); - - TString lReport = "output/Datasetreport-"; - lReport.Append(lDataset.Data()); - lReport.Append(".txt"); - - filebuf fbgood; - fbgood.open (lGoodName,ios::out); - ostream osgood(&fbgood); - - filebuf fbbad; - fbbad.open (lBadName,ios::out); - ostream osbad(&fbbad); - - filebuf fbreport; - fbreport.open (lReport,ios::out); - ostream osreport(&fbreport); - - //Main Tree Loop - Long_t lProcessedChunks = 0; - Long_t lProcessedChunksGood = 0; - Long_t lProcessedChunksBad = 0; - Long_t lTracks = 0; - Long_t lGlobalTracks = 0; - TString *lChunkName = new TString(); - - //First Chunk entry - ftree->GetEntry(0); - *lChunkName = *llFileName; - - cout<<"TEST "<Data() <<", track = "<Data() << endl; - - for(Long_t iEvent = 1; iEventGetEntries(); iEvent++){ - ftree->GetEntry(iEvent); - if( !llFileName->EqualTo(*lChunkName) ){ - lProcessedChunks++; - //Change Chunk - if( lTracks > 0 && lGlobalTracks ==0){ - //Candidate bad chunk found! - cout<<"BAD CHUNK at "<Data() <<", track = "<Data()< Processed "< 0 && lGlobalTracks ==0){ - //Candidate bad chunk found! - cout<<"BAD CHUNK at "<Data()<Data() <Data()< Good chunks saved to \"goodguys.txt\""< Bad chunks saved to \"badguys.txt\""< +#include + +#include "TFile.h" +#include "TTree.h" +#include "TString.h" + +using namespace std; + +int ProcessBadChunks02(TString lDataset ){ + + //Path to output files: change as needed + TString lFileName = "/Volumes/MyPassport/work/download/badchunk/"; + lFileName.Append(lDataset.Data()); + lFileName.Append(".root"); + + //Print out "I'm alive" + cout<<"----------------------------------------------------"<IsOpen()) { + cout<<"File not found!"<FindObjectAny("fTree"); + if (!ftree) { + cout<<"File doesn't contain fTree!"<GetEntries()<SetBranchAddress("fRunNumber" ,&llRunNumber ); + ftree->SetBranchAddress("fFileName" , &llFileName ); + ftree->SetBranchAddress("fNTracks" ,&llNTracks ); + ftree->SetBranchAddress("fNGlobalTracks" ,&llNGlobalTracks ); + + //Output ostreams: text files with chunk location, good and bad + + //Save by default to "output" directory + TString lGoodName = "output/GoodChunks-"; + lGoodName.Append(lDataset.Data()); + lGoodName.Append(".txt"); + TString lBadName = "output/BadChunks-"; + lBadName.Append(lDataset.Data()); + lBadName.Append(".txt"); + + TString lReport = "output/Datasetreport-"; + lReport.Append(lDataset.Data()); + lReport.Append(".txt"); + + filebuf fbgood; + fbgood.open (lGoodName,ios::out); + ostream osgood(&fbgood); + + filebuf fbbad; + fbbad.open (lBadName,ios::out); + ostream osbad(&fbbad); + + filebuf fbreport; + fbreport.open (lReport,ios::out); + ostream osreport(&fbreport); + + //Main Tree Loop + Long_t lProcessedChunks = 0; + Long_t lProcessedChunksGood = 0; + Long_t lProcessedChunksBad = 0; + Long_t lTracks = 0; + Long_t lGlobalTracks = 0; + TString *lChunkName = new TString(); + + //First Chunk entry + ftree->GetEntry(0); + *lChunkName = *llFileName; + + cout<<"TEST "<Data() <<", track = "<Data() << endl; + + for(Long_t iEvent = 1; iEventGetEntries(); iEvent++){ + ftree->GetEntry(iEvent); + if( !llFileName->EqualTo(*lChunkName) ){ + lProcessedChunks++; + //Change Chunk + if( lTracks > 0 && lGlobalTracks ==0){ + //Candidate bad chunk found! + cout<<"BAD CHUNK at "<Data() <<", track = "<Data()< Processed "< 0 && lGlobalTracks ==0){ + //Candidate bad chunk found! + cout<<"BAD CHUNK at "<Data()<Data() <Data()< Good chunks saved to \"goodguys.txt\""< Bad chunks saved to \"badguys.txt\""< -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AliHMPIDTenderSupply.h" - -ClassImp(AliHMPIDTenderSupply) - -AliHMPIDTenderSupply::AliHMPIDTenderSupply() : -AliTenderSupply() -{ - // - // default ctor - // -} - -//_____________________________________________________ -AliHMPIDTenderSupply::AliHMPIDTenderSupply(const char *name, const AliTender *tender) : -AliTenderSupply(name,tender) -{ - // - // named ctor - // -} - -//_____________________________________________________ -void AliHMPIDTenderSupply::Init() -{ - // Initialise HMPID tender - -} - -//_____________________________________________________ -void AliHMPIDTenderSupply::ProcessEvent() -{ - // - // recalculate HMPIDpid bit - // - - - AliESDEvent *event=fTender->GetEvent(); - if (!event) return; - - // re-evaluate the HMPIDpid bit for all tracks - Int_t ntracks=event->GetNumberOfTracks(); - for(Int_t itrack = 0; itrack < ntracks; itrack++){ - AliESDtrack *track=event->GetTrack(itrack); - if (!itrack) continue; - //reset pid bit first - track->ResetStatus(AliESDtrack::kHMPIDpid); - - Float_t xPc=0., yPc=0., xMip=0., yMip=0., thetaTrk=0., phiTrk=0.; - Int_t nPhot=0, qMip=0; - - track->GetHMPIDtrk(xPc,yPc,thetaTrk,phiTrk); - track->GetHMPIDmip(xMip,yMip,qMip,nPhot); - // - //make cuts, just an example, THIS NEEDS TO BE CHANGED - // - //if ((track->GetStatus()&AliESDtrack::kHMPIDout)!=AliESDtrack::kHMPIDout) continue; - - Float_t dist = TMath::Sqrt((xPc-xMip)*(xPc-xMip) + (yPc-yMip)*(yPc-yMip)); - - if(dist > 0.7 || nPhot> 30 || qMip < 100 ) continue; - - //set pid bit, track was accepted - track->SetStatus(AliESDtrack::kHMPIDpid); - - } - - -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + + +/////////////////////////////////////////////////////////////////////////////// +// // +// HMPID tender: - recalculate pid bit using tighter cuts +// - this is needed for all 2010 and 11a-c data +// +// +// Contacts: Giacomo.Volpe@ba.infn.it // +// Jens.Wiechula@cern.ch // +/////////////////////////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AliHMPIDTenderSupply.h" + +ClassImp(AliHMPIDTenderSupply) + +AliHMPIDTenderSupply::AliHMPIDTenderSupply() : +AliTenderSupply() +{ + // + // default ctor + // +} + +//_____________________________________________________ +AliHMPIDTenderSupply::AliHMPIDTenderSupply(const char *name, const AliTender *tender) : +AliTenderSupply(name,tender) +{ + // + // named ctor + // +} + +//_____________________________________________________ +void AliHMPIDTenderSupply::Init() +{ + // Initialise HMPID tender + +} + +//_____________________________________________________ +void AliHMPIDTenderSupply::ProcessEvent() +{ + // + // recalculate HMPIDpid bit + // + + + AliESDEvent *event=fTender->GetEvent(); + if (!event) return; + + // re-evaluate the HMPIDpid bit for all tracks + Int_t ntracks=event->GetNumberOfTracks(); + for(Int_t itrack = 0; itrack < ntracks; itrack++){ + AliESDtrack *track=event->GetTrack(itrack); + if (!itrack) continue; + //reset pid bit first + track->ResetStatus(AliESDtrack::kHMPIDpid); + + Float_t xPc=0., yPc=0., xMip=0., yMip=0., thetaTrk=0., phiTrk=0.; + Int_t nPhot=0, qMip=0; + + track->GetHMPIDtrk(xPc,yPc,thetaTrk,phiTrk); + track->GetHMPIDmip(xMip,yMip,qMip,nPhot); + // + //make cuts, just an example, THIS NEEDS TO BE CHANGED + // + //if ((track->GetStatus()&AliESDtrack::kHMPIDout)!=AliESDtrack::kHMPIDout) continue; + + Float_t dist = TMath::Sqrt((xPc-xMip)*(xPc-xMip) + (yPc-yMip)*(yPc-yMip)); + + if(dist > 0.7 || nPhot> 30 || qMip < 100 ) continue; + + //set pid bit, track was accepted + track->SetStatus(AliESDtrack::kHMPIDpid); + + } + + +} diff --git a/ANALYSIS/TenderSupplies/AliHMPIDTenderSupply.h b/ANALYSIS/TenderSupplies/AliHMPIDTenderSupply.h index 2952813dc38..9f481d0b893 100644 --- a/ANALYSIS/TenderSupplies/AliHMPIDTenderSupply.h +++ b/ANALYSIS/TenderSupplies/AliHMPIDTenderSupply.h @@ -1,40 +1,40 @@ -#ifndef ALIHMPIDTENDERSUPPLY_H -#define ALIHMPIDTENDERSUPPLY_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -//////////////////////////////////////////////////////////////////////// -// // -// HMPID tender, reapply pid on the fly // -// // -//////////////////////////////////////////////////////////////////////// - -#include -#include -#include - -class AliESDpid; - -class AliHMPIDTenderSupply: public AliTenderSupply { - -public: - AliHMPIDTenderSupply(); - AliHMPIDTenderSupply(const char *name, const AliTender *tender=NULL); - - virtual ~AliHMPIDTenderSupply(){;} - - virtual void Init(); - virtual void ProcessEvent(); - - -private: - - AliHMPIDTenderSupply(const AliHMPIDTenderSupply&c); - AliHMPIDTenderSupply& operator= (const AliHMPIDTenderSupply&c); - - ClassDef(AliHMPIDTenderSupply, 1); -}; - - -#endif +#ifndef ALIHMPIDTENDERSUPPLY_H +#define ALIHMPIDTENDERSUPPLY_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//////////////////////////////////////////////////////////////////////// +// // +// HMPID tender, reapply pid on the fly // +// // +//////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +class AliESDpid; + +class AliHMPIDTenderSupply: public AliTenderSupply { + +public: + AliHMPIDTenderSupply(); + AliHMPIDTenderSupply(const char *name, const AliTender *tender=NULL); + + virtual ~AliHMPIDTenderSupply(){;} + + virtual void Init(); + virtual void ProcessEvent(); + + +private: + + AliHMPIDTenderSupply(const AliHMPIDTenderSupply&c); + AliHMPIDTenderSupply& operator= (const AliHMPIDTenderSupply&c); + + ClassDef(AliHMPIDTenderSupply, 1); +}; + + +#endif diff --git a/ANALYSIS/TenderSupplies/AliT0TenderSupply.cxx b/ANALYSIS/TenderSupplies/AliT0TenderSupply.cxx index 1cce68edfb4..5b8a13a8c96 100644 --- a/ANALYSIS/TenderSupplies/AliT0TenderSupply.cxx +++ b/ANALYSIS/TenderSupplies/AliT0TenderSupply.cxx @@ -1,188 +1,188 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/////////////////////////////////////////////////////////////////////////// -// // -// T0 Tender supply // -// // -// // -/////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include -#include -#include -#include - -ClassImp(AliT0TenderSupply) - -//________________________________________________________________________ -AliT0TenderSupply::AliT0TenderSupply(): - AliTenderSupply(), - fCorrectMeanTime(kFALSE), - fCorrectStartTimeOnAmplSatur(kFALSE), - fAmplitudeThreshold(100), - fPass4LHC11aCorrection(kFALSE) -{ - // - // default constructor - // - for(int i=0; i<4; i++) fTimeOffset[i]=0; -} - -//________________________________________________________________________ -AliT0TenderSupply::AliT0TenderSupply(const char *name, const AliTender *tender): - AliTenderSupply(name,tender), - fCorrectMeanTime(kFALSE), - fCorrectStartTimeOnAmplSatur(kFALSE), - fAmplitudeThreshold(100), - fPass4LHC11aCorrection(kFALSE) -{ - // - // constructor - // - for(int i=0; i<4; i++) fTimeOffset[i]=0; - -} - -//________________________________________________________________________ -AliT0TenderSupply::~AliT0TenderSupply(){ - // - // destructor - // - -} - -//________________________________________________________________________ -void AliT0TenderSupply::Init(){ - // Init - // - Int_t run = fTender->GetRun(); - if (run == 0) return; // to skip first init, when we don't have yet a run number - Printf("----------- TZERO Tender ----------------"); - - fCorrectMeanTime = kFALSE; //reset - for(int i=0; i<4; i++) fTimeOffset[i]=0; - - // align T0s for LHC10def periods - if (fTender->GetRun()>=122195 && fTender->GetRun()<=130850){ - Printf("Loading TZERO OCBD entries"); - fCorrectMeanTime=kTRUE; - Printf("fCorrectMeanTime %i \n", fCorrectMeanTime); - - AliCDBManager* ocdbMan = AliCDBManager::Instance(); - ocdbMan->SetRun(fTender->GetRun()); - AliCDBEntry *entry = ocdbMan->Get("T0/Calib/TimeAdjust/"); - if(entry) { - AliT0CalibSeasonTimeShift *clb = (AliT0CalibSeasonTimeShift*) entry->GetObject(); - Float_t *t0means = clb->GetT0Means(); - for (Int_t i=0;i<4;i++) fTimeOffset[i] = t0means[i]; - } else { - for (Int_t i=0;i<4;i++) fTimeOffset[i] = 0; - AliWarning("T0Tender no T0 entry found T0shift set to 0"); - } - } - - // LHC11h - fCorrectStartTimeOnAmplSatur = kFALSE; - fAmplitudeThreshold = 100; //in mips - if(167693<= run && run<=170593){ - fCorrectStartTimeOnAmplSatur = kTRUE; - fAmplitudeThreshold = 50; //in mips - } - - - -} - -//________________________________________________________________________ -void AliT0TenderSupply::ProcessEvent(){ - - // - // loop over all online T0 candidates and flag - // selected daughter tracks using the status bis of the TObject - // - - AliESDEvent *event=fTender->GetEvent(); - if (!event) return; - //........................................... - //Do something when the run number changed, like loading OCDB entries etc. - if(fTender->RunChanged()) Init(); - - if(fTender->RunChanged()){ - Init(); - if (fTender->GetRun()>=139699&& fTender->GetRun()<=146860){ - AliESDInputHandler *esdIH = dynamic_cast (fTender->GetESDhandler()); - if (esdIH) { - TTree *tree= (TTree*)esdIH->GetTree(); - TFile *file= (TFile*)tree->GetCurrentFile(); - if (file){ - TString fileName(file->GetName()); - if (fileName.Contains("pass4") ) fPass4LHC11aCorrection=kTRUE; - } - } - } - } - - if(fPass4LHC11aCorrection) { - const Double32_t* mean = event->GetT0TOF(); - event->SetT0TOF(0, (mean[1]+mean[2])/2.); - - } - //........................................... - if(fCorrectStartTimeOnAmplSatur){ - //correct A side ORA on amplitude saturation - const Double32_t* time = event->GetT0time(); - const Double32_t* amplitude = event->GetT0amplitude(); - - Int_t idxOfFirstPmtA = -1; - Double32_t timeOrA = 99999; - for(int ipmt=12; ipmt<24; ipmt++){ //loop over A side - if( amplitude[ipmt] < fAmplitudeThreshold){ - if( time[ipmt] > -200 && time[ipmt]!=0 && time[ipmt] < timeOrA ){ - timeOrA = time[ipmt]; - idxOfFirstPmtA = ipmt; - } - } - } - - if(idxOfFirstPmtA>-1){ //a hit in aside with less than 40 mips - const Double32_t* mean = event->GetT0TOF(); - Double32_t timeOrC = mean[2]; - Double32_t timeOrAplusOrC = (timeOrA+timeOrC)/2; - - event->SetT0TOF(0, timeOrAplusOrC); - event->SetT0TOF(1, timeOrA); - } - } - - //........................................... - if(fCorrectMeanTime) { - // correct mean time offsets - const Double32_t* mean = event->GetT0TOF(); - for(int it0=0; it0<3; it0++){ - if( mean[it0] < 10000 || (mean[it0]>6499000 && mean[it0]<6555000 ) ) - event->SetT0TOF(it0, mean[it0] - fTimeOffset[it0]); - } - } - //........................................... - - -} - - +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/////////////////////////////////////////////////////////////////////////// +// // +// T0 Tender supply // +// // +// // +/////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include + +ClassImp(AliT0TenderSupply) + +//________________________________________________________________________ +AliT0TenderSupply::AliT0TenderSupply(): + AliTenderSupply(), + fCorrectMeanTime(kFALSE), + fCorrectStartTimeOnAmplSatur(kFALSE), + fAmplitudeThreshold(100), + fPass4LHC11aCorrection(kFALSE) +{ + // + // default constructor + // + for(int i=0; i<4; i++) fTimeOffset[i]=0; +} + +//________________________________________________________________________ +AliT0TenderSupply::AliT0TenderSupply(const char *name, const AliTender *tender): + AliTenderSupply(name,tender), + fCorrectMeanTime(kFALSE), + fCorrectStartTimeOnAmplSatur(kFALSE), + fAmplitudeThreshold(100), + fPass4LHC11aCorrection(kFALSE) +{ + // + // constructor + // + for(int i=0; i<4; i++) fTimeOffset[i]=0; + +} + +//________________________________________________________________________ +AliT0TenderSupply::~AliT0TenderSupply(){ + // + // destructor + // + +} + +//________________________________________________________________________ +void AliT0TenderSupply::Init(){ + // Init + // + Int_t run = fTender->GetRun(); + if (run == 0) return; // to skip first init, when we don't have yet a run number + Printf("----------- TZERO Tender ----------------"); + + fCorrectMeanTime = kFALSE; //reset + for(int i=0; i<4; i++) fTimeOffset[i]=0; + + // align T0s for LHC10def periods + if (fTender->GetRun()>=122195 && fTender->GetRun()<=130850){ + Printf("Loading TZERO OCBD entries"); + fCorrectMeanTime=kTRUE; + Printf("fCorrectMeanTime %i \n", fCorrectMeanTime); + + AliCDBManager* ocdbMan = AliCDBManager::Instance(); + ocdbMan->SetRun(fTender->GetRun()); + AliCDBEntry *entry = ocdbMan->Get("T0/Calib/TimeAdjust/"); + if(entry) { + AliT0CalibSeasonTimeShift *clb = (AliT0CalibSeasonTimeShift*) entry->GetObject(); + Float_t *t0means = clb->GetT0Means(); + for (Int_t i=0;i<4;i++) fTimeOffset[i] = t0means[i]; + } else { + for (Int_t i=0;i<4;i++) fTimeOffset[i] = 0; + AliWarning("T0Tender no T0 entry found T0shift set to 0"); + } + } + + // LHC11h + fCorrectStartTimeOnAmplSatur = kFALSE; + fAmplitudeThreshold = 100; //in mips + if(167693<= run && run<=170593){ + fCorrectStartTimeOnAmplSatur = kTRUE; + fAmplitudeThreshold = 50; //in mips + } + + + +} + +//________________________________________________________________________ +void AliT0TenderSupply::ProcessEvent(){ + + // + // loop over all online T0 candidates and flag + // selected daughter tracks using the status bis of the TObject + // + + AliESDEvent *event=fTender->GetEvent(); + if (!event) return; + //........................................... + //Do something when the run number changed, like loading OCDB entries etc. + if(fTender->RunChanged()) Init(); + + if(fTender->RunChanged()){ + Init(); + if (fTender->GetRun()>=139699&& fTender->GetRun()<=146860){ + AliESDInputHandler *esdIH = dynamic_cast (fTender->GetESDhandler()); + if (esdIH) { + TTree *tree= (TTree*)esdIH->GetTree(); + TFile *file= (TFile*)tree->GetCurrentFile(); + if (file){ + TString fileName(file->GetName()); + if (fileName.Contains("pass4") ) fPass4LHC11aCorrection=kTRUE; + } + } + } + } + + if(fPass4LHC11aCorrection) { + const Double32_t* mean = event->GetT0TOF(); + event->SetT0TOF(0, (mean[1]+mean[2])/2.); + + } + //........................................... + if(fCorrectStartTimeOnAmplSatur){ + //correct A side ORA on amplitude saturation + const Double32_t* time = event->GetT0time(); + const Double32_t* amplitude = event->GetT0amplitude(); + + Int_t idxOfFirstPmtA = -1; + Double32_t timeOrA = 99999; + for(int ipmt=12; ipmt<24; ipmt++){ //loop over A side + if( amplitude[ipmt] < fAmplitudeThreshold){ + if( time[ipmt] > -200 && time[ipmt]!=0 && time[ipmt] < timeOrA ){ + timeOrA = time[ipmt]; + idxOfFirstPmtA = ipmt; + } + } + } + + if(idxOfFirstPmtA>-1){ //a hit in aside with less than 40 mips + const Double32_t* mean = event->GetT0TOF(); + Double32_t timeOrC = mean[2]; + Double32_t timeOrAplusOrC = (timeOrA+timeOrC)/2; + + event->SetT0TOF(0, timeOrAplusOrC); + event->SetT0TOF(1, timeOrA); + } + } + + //........................................... + if(fCorrectMeanTime) { + // correct mean time offsets + const Double32_t* mean = event->GetT0TOF(); + for(int it0=0; it0<3; it0++){ + if( mean[it0] < 10000 || (mean[it0]>6499000 && mean[it0]<6555000 ) ) + event->SetT0TOF(it0, mean[it0] - fTimeOffset[it0]); + } + } + //........................................... + + +} + + diff --git a/ANALYSIS/TenderSupplies/AliT0TenderSupply.h b/ANALYSIS/TenderSupplies/AliT0TenderSupply.h index 89fa74722f1..f998c632f5a 100644 --- a/ANALYSIS/TenderSupplies/AliT0TenderSupply.h +++ b/ANALYSIS/TenderSupplies/AliT0TenderSupply.h @@ -1,44 +1,44 @@ -#ifndef ALIT0TENDERSUPPLY_H -#define ALIT0TENDERSUPPLY_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/////////////////////////////////////////////////////////////////////////// -// // -// // -// // -// // -/////////////////////////////////////////////////////////////////////////// - -#include - -class AliT0TenderSupply: public AliTenderSupply { - - public: - AliT0TenderSupply(); - AliT0TenderSupply(const char *name, const AliTender *tender=NULL); - virtual ~AliT0TenderSupply(); - - virtual void Init(); - virtual void ProcessEvent(); - void SetCorrectMeanTime (Bool_t flag=kFALSE){fCorrectMeanTime=flag;}; - void SetAmplutudeCorrection (Bool_t flag=kFALSE){fCorrectStartTimeOnAmplSatur=flag;}; - void SetPass4LHC11aCorrection (Bool_t flag=kFALSE){fPass4LHC11aCorrection=flag;}; - - private: - - AliT0TenderSupply(const AliT0TenderSupply&c); - AliT0TenderSupply& operator= (const AliT0TenderSupply&c); - - - Bool_t fCorrectMeanTime; //! mean time shift will be corrected - Float_t fTimeOffset[4]; //! time offset to be used for fCorrectMeanTime - Bool_t fCorrectStartTimeOnAmplSatur; //! fix start times suffering from saturated amplitude in pmts - Float_t fAmplitudeThreshold; //! above this value pmt suffer from saturation - Bool_t fPass4LHC11aCorrection; //! above this value pmt suffer from saturation - - ClassDef(AliT0TenderSupply, 2); // T0 tender supply -}; - -#endif +#ifndef ALIT0TENDERSUPPLY_H +#define ALIT0TENDERSUPPLY_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/////////////////////////////////////////////////////////////////////////// +// // +// // +// // +// // +/////////////////////////////////////////////////////////////////////////// + +#include + +class AliT0TenderSupply: public AliTenderSupply { + + public: + AliT0TenderSupply(); + AliT0TenderSupply(const char *name, const AliTender *tender=NULL); + virtual ~AliT0TenderSupply(); + + virtual void Init(); + virtual void ProcessEvent(); + void SetCorrectMeanTime (Bool_t flag=kFALSE){fCorrectMeanTime=flag;}; + void SetAmplutudeCorrection (Bool_t flag=kFALSE){fCorrectStartTimeOnAmplSatur=flag;}; + void SetPass4LHC11aCorrection (Bool_t flag=kFALSE){fPass4LHC11aCorrection=flag;}; + + private: + + AliT0TenderSupply(const AliT0TenderSupply&c); + AliT0TenderSupply& operator= (const AliT0TenderSupply&c); + + + Bool_t fCorrectMeanTime; //! mean time shift will be corrected + Float_t fTimeOffset[4]; //! time offset to be used for fCorrectMeanTime + Bool_t fCorrectStartTimeOnAmplSatur; //! fix start times suffering from saturated amplitude in pmts + Float_t fAmplitudeThreshold; //! above this value pmt suffer from saturation + Bool_t fPass4LHC11aCorrection; //! above this value pmt suffer from saturation + + ClassDef(AliT0TenderSupply, 2); // T0 tender supply +}; + +#endif diff --git a/ANALYSIS/TenderSupplies/AliTRDTenderSupply.h b/ANALYSIS/TenderSupplies/AliTRDTenderSupply.h index b38f4bb75fe..98198f20d3a 100644 --- a/ANALYSIS/TenderSupplies/AliTRDTenderSupply.h +++ b/ANALYSIS/TenderSupplies/AliTRDTenderSupply.h @@ -95,7 +95,7 @@ private: Bool_t fDebugMode; // Run in debug mode Bool_t fRedoTrdMatching; // Redo Track Matching TString fNameRunByRunCorrection; // filename with the run-by-run gain correction - TObjArray *fNormalizationFactorArray; // Array with normalisation Factors + TObjArray *fNormalizationFactorArray; // Array with normalisation Factors AliTRDTenderSupply(const AliTRDTenderSupply&c); AliTRDTenderSupply& operator= (const AliTRDTenderSupply&c); diff --git a/ANALYSIS/macros/PhysSelQA/AliPSQAVisualization.cxx b/ANALYSIS/macros/PhysSelQA/AliPSQAVisualization.cxx index d4cd1a8546f..b8cc8853d55 100644 --- a/ANALYSIS/macros/PhysSelQA/AliPSQAVisualization.cxx +++ b/ANALYSIS/macros/PhysSelQA/AliPSQAVisualization.cxx @@ -1,598 +1,598 @@ -///////////////////////////////////// -// Created by: Kevin McDermott // -// email: kmcderm3@nd.edu // -// CERN Summer Student 2012 // -// University of Notre Dame du Lac // -// // -// Revision: 1.0 // -// Created on: August 6, 2012 // -///////////////////////////////////// - -#include "AliPSQAVisualization.h" - -ClassImp(AliPSQAVisualization) - -AliPSQAVisualization::AliPSQAVisualization(): // Default constructor -TObject(), -fRunNumbers(0), -fFillNumbers(0), -fRawRunNumbers(0), -fRawFillNumbers(0), -fNRuns(0), -fNRawRuns(0), -fFillSeparationLine(0x0) -{ - // Initialize some private data members from AliPSQAV - fInDirectory = ""; - fROOTInput = ""; - fRunFillFile = ""; - fSavePDFs = kFALSE; - fOutDirectory = ""; - fOutPDFName = ""; - fOutEPSName = ""; - fDrawOverPlot = kFALSE; - fOverPlotTitle = ""; - fMaximum = -1000; - fMinimum = 1000; - fScaleAuto = kFALSE; - fUseColorArray = kFALSE; - fMultMax = 0; - fDivMin = 0; - InitializeColorArray(""); - InitializeSelectedPlots(""); -} - -//________________________________________________________________________________________________ -AliPSQAVisualization::~AliPSQAVisualization(){ - delete[] fCanvas; - delete[] fDrawPlot; - delete[] fFillSeparationLine; - delete[] fSelectedPlots; - delete[] fColors; - delete fOverLegend; -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::InitializeColorArray(const Char_t * listOfColors){ // Function to custom set color array used for plots, not essential - Color_t colors; //color enums from list - ifstream input_data_col; //text file object - input_data_col.open(listOfColors, ios::in ); //open the text file - Int_t Ncol = 0; //number of color names to be used - - while ( input_data_col >> colors ) { // count number of color names - Ncol++; - } - - fNColors = Ncol; // Set private data member to total color names to be used - input_data_col.close(); // reset the file - - fColors = new Color_t [fNColors]; // initialize private data member with number of trig names - input_data_col.open(listOfColors, ios::in ); - for (Int_t icol = 0; icol < fNColors; icol++){ - input_data_col >> fColors[icol]; - } - - input_data_col.close(); -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::InitializeSelectedPlots(const Char_t * listOfPlots){ - TString plotnames; //plot names from list - ifstream input_data_pn; //text file object - if(!listOfPlots) cout << "No list of plots" << endl; - input_data_pn.open(listOfPlots, ios::in ); //open the text file - Int_t Npn = 0; //number of plot names to be used - - while ( input_data_pn >> plotnames ) { // count number of plot names - Npn++; - } - - cout << "Number of initalized plots = " << Npn << endl; - - fNSelectedPlots = Npn; // Set private data member to total plot names to be used - input_data_pn.close(); // reset the file - //cout << "Number of selected plots = " << fNSelectedPlots << endl; - fSelectedPlots = new TString [fNSelectedPlots]; // initialize private data member with number of trig names - input_data_pn.open(listOfPlots, ios::in ); - for (Int_t iplot = 0; iplot < fNSelectedPlots; iplot++){ - input_data_pn >> fSelectedPlots[iplot]; - //cout << "Plots to process :" << fSelectedPlots[iplot] << endl; - } - - input_data_pn.close(); -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::PostProcessQA(){ - - if(!fROOTInput) cout << "No .root file found" << endl; - - //cout << "Sto morendo qua? 1" << endl; - gStyle->SetOptStat(0); - gStyle->SetPalette(1); - gStyle->SetFillColor(10); - gStyle->SetOptStat(0); - gStyle->SetOptTitle(1); - // do not use scientific notation for run number - TGaxis::SetMaxDigits(6); - //cout << "Sto morendo qua? 2" << endl; - ConvertTGraphErrorsToTH1Ds(); // Convert all plots to TH1D's from specified plot list - //cout << "Sto morendo qua? 3" << endl; - fCanvas = new TCanvas[fNSelectedPlots]; // Allocate memory for the canvases to draw PostProcessing - - if ((fDrawOverPlot) || (fSaveOverPlotPDF) || (fSaveOverPlotEPS)){ - fOverLegend = new TLegend(0.55,0.625,.75,.85); - if (fScaleAuto){ - ScaleMinAndMax(); - } - } - - if ((fSavePDFs) || (fSaveOverPlotPDF) || (fSaveOverPlotEPS)){ - FileStat_t dummy_filestat; - if (gSystem->GetPathInfo(fOutDirectory.Data(), dummy_filestat) == 1) { // cache directory does not exist - MakeDir(fOutDirectory); - } - } - - // *************************************** LOOP ON PLOTS *************************************** - - for (Int_t iplot = 0; iplot < fNSelectedPlots; iplot++){ // Loop over the number of plots to be made pretty and drawn - DrawSelected(iplot); // Draw the Selected plots, decide later whether to have them open/save them - - DrawSameTriggerOnSameCA(iplot); - cout << "Draw selected - OK " << endl; - - if (fSavePDFs){ // Write the canvas to the PDF file if kTRUE - SavePDFs(iplot); - SaveToPDFSeparately(iplot); - } - - if (!fDrawSelected){ // Close the canvas if you do not want to see the plot - fCanvas[iplot].Close(); - } - - if ( (fDrawOverPlot) || (fSaveOverPlotPDF) || (fSaveOverPlotEPS) ) { // Set points and draw overplot if any are true - if (fUseColorArray){ - DrawOverPlotCA(iplot); - } - else{ - DrawOverPlotNoCA(iplot); - } - } - else if( (!fDrawOverPlot) && ( (fSaveOverPlotPDF) || (fSaveOverPlotEPS) ) ) { // Set the points to save to and/or pdf/eps but then close it outside the loop - if (fUseColorArray){ - DrawOverPlotCA(iplot); - } - else{ - DrawOverPlotNoCA(iplot); - } - } - - } // end loop on plots - - if (fSaveOverPlotPDF){ // Save the overplot to pdf - SaveOverPlotPDF(); - } - if (fSaveOverPlotEPS){ // Save the overplot to eps - SaveOverPlotEPS(); - } - if (!fDrawOverPlot){ // Close if you do not want to see it - fOverCanvas.Close(); - } -} - -//________________________________________________________________________________________________ -Int_t AliPSQAVisualization::MatchGoodRunToFillNumber(Int_t runnumber){ - - Int_t fill = -1; - - for(Int_t irun = 0; irun < fNRawRuns; irun++){ - if(runnumber == fRawRunNumbers[irun]){ - fill = fRawFillNumbers[irun]; - // cout << runnumber << " matched to fill " << fill << endl; - } - } - // cout << "Matching completed" << endl; - return fill; -} - -//________________________________________________________________________________________________ -Int_t AliPSQAVisualization::MatchGoodRunToStats(Int_t runnumber){ - - Int_t Stats = -1; - - for(Int_t irun = 0; irun < fNRawRuns; irun++){ - if(runnumber == fRawRunNumbers[irun]){ - Stats = fRawRunStats[irun]; - // cout << runnumber << " matched to fill " << fill << endl; - } - } - - // cout << "Matching completed" << endl; - return Stats; -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::ConvertTGraphErrorsToTH1Ds(){ - - cout << "********************** C O N V E R T I N G TGRAPHS T O T H 1 D" << endl; - - fRootFile = TFile::Open(Form("%s",fROOTInput.Data())); - cout << "Opening file " << fROOTInput.Data() << endl; - - fDrawPlot = new TH1D[fNSelectedPlots]; // Array of TH1D's to be converted - fNDiffFills = new Int_t[fNSelectedPlots]; - fFillSeparationLine = new TLine*[fNSelectedPlots]; - - for (Int_t iplot = 0; iplot < fNSelectedPlots; iplot++){ - // Variables from the old TGraphErrors needed to draw TH1Fs - // Uncomment if seg fault returns TGraph::GetX (this=0x0), as last printout will say which graph is not correct - // cout << fInDirectory.Data() << "/" << fROOTInput.Data() << ": " << fSelectedPlots[iplot].Data() << endl; - fNDiffFills[iplot] = 0; - - // cout << "Problem is here? " << fSelectedPlots[iplot].Data() << endl; - TGraphErrors * TGEplot = (TGraphErrors*) fRootFile->Get(fSelectedPlots[iplot].Data()); - if(!TGEplot) { - // cout << "Missing plot @ step " << iplot << "plot is -> " << fSelectedPlots[iplot].Data() << endl; - continue; - } - - Double_t * TGEx = TGEplot->GetX(); // needed to properly index the x-axis (run numbers) - Double_t * TGEy = TGEplot->GetY(); // array of double_t's, qaval - Int_t TGEnpoints = TGEplot->GetN(); // number of points used in the TGE - Double_t * TGEey = TGEplot->GetEY(); // array of double_t's corresponding to the errors in the TGE - TString TGEname = TGEplot->GetName(); - TString TGEtitle = TGEplot->GetTitle(); - - // TGEx = new Double_t[TGEnpoints]; - - fNRuns = TGEnpoints; - fRunNumbers = new Int_t[fNRuns]; - fFillNumbers = new Int_t[fNRuns]; - fBinArray = new Int_t[fNRuns]; - - for (Int_t irun=0; irunSetTitle("Run Number"); - TString TH1Dytitle = SetDrawSelectedYTitle(TGEtitle); - fDrawPlot[iplot].SetYTitle(TH1Dytitle.Data()); - - cout << "==================== TEST ============= " << endl; - cout << "-------------------- iplot = " << iplot << endl; - - for (Int_t ibin = 1; ibin < TH1Dxnbin+1; ibin++){ // everything shifted off by one because tgraph starts at zero, th1f starts bins at 1 - fDrawPlot[iplot].SetBinContent(fDrawPlot[iplot].FindBin(ibin),TGEy[ibin-1]); // y[i-1] is the bin in plot - fDrawPlot[iplot].SetBinError(fDrawPlot[iplot].FindBin(ibin),TGEey[ibin-1]); - - if(ibin< TH1Dxnbin){ - if(fFillNumbers[ibin]!=fFillNumbers[ibin-1]){ - cout << "New fill @ " << ibin << endl; - cout << "Run @ "<< ibin-1 << " = " << fRunNumbers[ibin-1] <<" corresponding to fill " << fFillNumbers[ibin-1] << "; Crosscheck on bin array = " << fBinArray[ibin-1] << endl; - cout << "Run @ "<< ibin << " = " << fRunNumbers[ibin] <<" corresponding to fill " << fFillNumbers[ibin] << endl; - fNDiffFills[iplot]++; - cout << "****************************************" << endl; - } - } - - Int_t TH1Dx = Int_t(TGEx[ibin-1]); // x[i-1] = actual bin label in plot - TString TH1DxBinLabel = Form("%i",TH1Dx); - - cout << "TH1DxBinLabel = " << TH1DxBinLabel << endl; - - fDrawPlot[iplot].GetXaxis()->SetBinLabel(fDrawPlot[iplot].FindBin(ibin), TH1DxBinLabel.Data()); - fDrawPlot[iplot].GetXaxis()->SetTitleSize(.05); // default = 4%, made it 5% - - } // end of loop on bins - - fFillSeparationLine[iplot] = new TLine[fNDiffFills[iplot]]; - - TLine * newline = new TLine[fNDiffFills[iplot]]; - - cout << "Number of different fills = " << fNDiffFills[iplot] << " for iplot index = " << iplot << endl; - cout << "==================== END TEST ============= " << endl; - - //looping again on the bins of the TGE -> filling the TLines - - Int_t fillindex = 0; - for (Int_t ibin = 1; ibin < TH1Dxnbin+1; ibin++){ - - if(ibin fMaximum){ - fMaximum = tmp_max; - } - // Set minimum - tmp_min = fDrawPlot[iplot].GetMinimum(); - if (tmp_max < fMinimum){ - fMinimum = tmp_min; - } - } - - // Set the min to be lower and max to be higher so that all points can be seen - fMaximum *= fMultMax; - fMinimum /= fDivMin; -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::MakeDir(TString dir){ // have to pass a private data member, kinda ugly, but otherwise use sentinel values or copy this function three times... taken from AliPSQA - TString mkDir = "mkdir -p "; - mkDir += dir.Data(); - gSystem->Exec(mkDir); // mkdir for the cache/output -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::ImportRunAndFillInfo(const Char_t * listOfRunsAndFills){ - - Int_t run_num; //run number from list - ifstream input_runsandfill; //text file object - input_runsandfill.open(listOfRunsAndFills,ios::in ); //open the text file - - Int_t NRuns = 0; //number of runs to be processed - while(input_runsandfill >> run_num) { // count number of runs - NRuns++; - } - input_runsandfill.close(); - cout << "In total there are " << NRuns << " runs in file " << endl; - - fNRawRuns = NRuns/3; - fRawFillNumbers = new Int_t[fNRawRuns]; - fRawRunNumbers = new Int_t[fNRawRuns]; - fRawRunStats = new Int_t[fNRawRuns]; - - input_runsandfill.open(listOfRunsAndFills,ios::in ); - - for(Int_t irun = 0; irun < fNRawRuns; irun++){ - input_runsandfill >> fRawRunNumbers[irun] >> fRawFillNumbers[irun] >> fRawRunStats[irun]; - cout << irun << " - " << fRawRunNumbers[irun] << " - " << fRawFillNumbers[irun] << " - stats = " << fRawRunStats[irun] << endl; - } - cout << "DONE " << endl; - input_runsandfill.close(); - cout << "DONE DONE" << endl; -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::DrawSelected(Int_t iplot){ - fCanvas[iplot].cd(); // write to this canvas first - fCanvas[iplot].SetBottomMargin(0.15); // default 0.15 - fCanvas[iplot].SetRightMargin(0.02); - /* - cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " << endl; - cout << "iplot = " << iplot << endl; - cout << "Number of different fills for this plot " << fNDiffFills[iplot] << endl; - cout << "Plot name " << fSelectedPlots[iplot] << endl; - cout << " " << endl; - // here run check - */ - fDrawPlot[iplot].GetXaxis()->SetTitleOffset(1.6); - - fDrawPlot[iplot].Draw("E P X0"); // draw the new plot to canvas - - cout << "Drawing " << fSelectedPlots[iplot] << endl; - - TLine * line = new TLine[fNDiffFills[iplot]]; - for (Int_t lineIndex = 0; lineIndex < fNDiffFills[iplot]; lineIndex++){ - // cout << "Index pf plots that are processed = (" << iplot << "," << lineIndex << ")" << endl; - // cout << "Copying line " << lineIndex << endl; - line[lineIndex] = fFillSeparationLine[iplot][lineIndex]; - // cout << "Copied - drawing line " << lineIndex << endl; - line[lineIndex].Draw("same"); - // cout << "Drawn line " << lineIndex << endl; - // cout << "*****************" << endl; - }// endl loop on bins - // cout << "COMPLETED " << endl; - -} -//________________________________________________________________________________________________ -void AliPSQAVisualization::DrawSameTriggerOnSameCA(Int_t iplot){ - - Bool_t containsstring = kFALSE; - - containsstring = fSelectedPlots[iplot].Contains("kINT7",TString::kExact); - - if(containsstring) cout << iplot << " - Sting " << fSelectedPlots[iplot] << " - contains string: yes " << endl; - else cout << iplot << " - Sting " << fSelectedPlots[iplot] << " - contains string: no " << endl; -} - - -//________________________________________________________________________________________________ -void AliPSQAVisualization::DrawOverPlotCA(Int_t iplot){ - if (iplot == 0){ - fOverCanvas.cd(); - fDrawPlot[iplot].SetMarkerColor(fColors[iplot]); // iplot == 0 for Color_t == white... - fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small - fDrawPlot[iplot].SetLineColor(fColors[iplot]); - fDrawPlot[iplot].SetTitle(fOverPlotTitle); - fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); - fDrawPlot[iplot].GetYaxis()->SetTitle(""); - fDrawPlot[iplot].GetYaxis()->SetRangeUser(fMinimum, fMaximum); - // adding fill lines - - // end adding fill lines - fDrawPlot[iplot].Draw("E P X0"); - } - else if (iplot == (fNSelectedPlots - 1) ){ - fOverCanvas.cd(); - fDrawPlot[iplot].SetMarkerColor(fColors[iplot]); - fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small - fDrawPlot[iplot].SetLineColor(fColors[iplot]); - fDrawPlot[iplot].SetTitle(fOverPlotTitle); - fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); - fDrawPlot[iplot].GetYaxis()->SetTitle(""); - fDrawPlot[iplot].Draw("E P X0 SAME"); - // fOverLegend->Draw(); - } - else{ - fOverCanvas.cd(); - fDrawPlot[iplot].SetMarkerColor(fColors[iplot]); - fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small - fDrawPlot[iplot].SetLineColor(fColors[iplot]); - fDrawPlot[iplot].SetTitle(fOverPlotTitle); - fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); - fDrawPlot[iplot].GetYaxis()->SetTitle(""); - fDrawPlot[iplot].Draw("E P X0 SAME"); - } -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::DrawOverPlotNoCA(Int_t iplot){ - if (iplot == 0){ - fOverCanvas.cd(); - fDrawPlot[iplot].SetMarkerColor(Color_t(iplot+1)); // iplot == 0 for Color_t == white... - fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small - fDrawPlot[iplot].SetLineColor(Color_t(iplot+1)); - fDrawPlot[iplot].SetTitle(fOverPlotTitle); - fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); - fDrawPlot[iplot].GetYaxis()->SetTitle(""); - fDrawPlot[iplot].GetYaxis()->SetRangeUser(fMinimum, fMaximum); - fDrawPlot[iplot].Draw("E P X0"); - } - else if (iplot == (fNSelectedPlots - 1) ){ - fOverCanvas.cd(); - fDrawPlot[iplot].SetMarkerColor(Color_t(iplot+1)); - fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small - fDrawPlot[iplot].SetLineColor(Color_t(iplot+1)); - fDrawPlot[iplot].SetTitle(fOverPlotTitle); - fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); - fDrawPlot[iplot].GetYaxis()->SetTitle(""); - fDrawPlot[iplot].Draw("E P X0 SAME"); - fOverLegend->Draw(); - } - else{ - fOverCanvas.cd(); - fDrawPlot[iplot].SetMarkerColor(Color_t(iplot+1)); - fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small - fDrawPlot[iplot].SetLineColor(Color_t(iplot+1)); - fDrawPlot[iplot].SetTitle(fOverPlotTitle); - fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); - fDrawPlot[iplot].GetYaxis()->SetTitle(""); - fDrawPlot[iplot].Draw("P SAME"); - } -} - -//________________________________________________________________________________________________ -void AliPSQAVisualization::SaveToPDFSeparately(Int_t iplot){ - cout << "Saving: " << fOutDirectory << "/" << fSelectedPlots[iplot] <<".pdf"<> colors ) { // count number of color names + Ncol++; + } + + fNColors = Ncol; // Set private data member to total color names to be used + input_data_col.close(); // reset the file + + fColors = new Color_t [fNColors]; // initialize private data member with number of trig names + input_data_col.open(listOfColors, ios::in ); + for (Int_t icol = 0; icol < fNColors; icol++){ + input_data_col >> fColors[icol]; + } + + input_data_col.close(); +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::InitializeSelectedPlots(const Char_t * listOfPlots){ + TString plotnames; //plot names from list + ifstream input_data_pn; //text file object + if(!listOfPlots) cout << "No list of plots" << endl; + input_data_pn.open(listOfPlots, ios::in ); //open the text file + Int_t Npn = 0; //number of plot names to be used + + while ( input_data_pn >> plotnames ) { // count number of plot names + Npn++; + } + + cout << "Number of initalized plots = " << Npn << endl; + + fNSelectedPlots = Npn; // Set private data member to total plot names to be used + input_data_pn.close(); // reset the file + //cout << "Number of selected plots = " << fNSelectedPlots << endl; + fSelectedPlots = new TString [fNSelectedPlots]; // initialize private data member with number of trig names + input_data_pn.open(listOfPlots, ios::in ); + for (Int_t iplot = 0; iplot < fNSelectedPlots; iplot++){ + input_data_pn >> fSelectedPlots[iplot]; + //cout << "Plots to process :" << fSelectedPlots[iplot] << endl; + } + + input_data_pn.close(); +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::PostProcessQA(){ + + if(!fROOTInput) cout << "No .root file found" << endl; + + //cout << "Sto morendo qua? 1" << endl; + gStyle->SetOptStat(0); + gStyle->SetPalette(1); + gStyle->SetFillColor(10); + gStyle->SetOptStat(0); + gStyle->SetOptTitle(1); + // do not use scientific notation for run number + TGaxis::SetMaxDigits(6); + //cout << "Sto morendo qua? 2" << endl; + ConvertTGraphErrorsToTH1Ds(); // Convert all plots to TH1D's from specified plot list + //cout << "Sto morendo qua? 3" << endl; + fCanvas = new TCanvas[fNSelectedPlots]; // Allocate memory for the canvases to draw PostProcessing + + if ((fDrawOverPlot) || (fSaveOverPlotPDF) || (fSaveOverPlotEPS)){ + fOverLegend = new TLegend(0.55,0.625,.75,.85); + if (fScaleAuto){ + ScaleMinAndMax(); + } + } + + if ((fSavePDFs) || (fSaveOverPlotPDF) || (fSaveOverPlotEPS)){ + FileStat_t dummy_filestat; + if (gSystem->GetPathInfo(fOutDirectory.Data(), dummy_filestat) == 1) { // cache directory does not exist + MakeDir(fOutDirectory); + } + } + + // *************************************** LOOP ON PLOTS *************************************** + + for (Int_t iplot = 0; iplot < fNSelectedPlots; iplot++){ // Loop over the number of plots to be made pretty and drawn + DrawSelected(iplot); // Draw the Selected plots, decide later whether to have them open/save them + + DrawSameTriggerOnSameCA(iplot); + cout << "Draw selected - OK " << endl; + + if (fSavePDFs){ // Write the canvas to the PDF file if kTRUE + SavePDFs(iplot); + SaveToPDFSeparately(iplot); + } + + if (!fDrawSelected){ // Close the canvas if you do not want to see the plot + fCanvas[iplot].Close(); + } + + if ( (fDrawOverPlot) || (fSaveOverPlotPDF) || (fSaveOverPlotEPS) ) { // Set points and draw overplot if any are true + if (fUseColorArray){ + DrawOverPlotCA(iplot); + } + else{ + DrawOverPlotNoCA(iplot); + } + } + else if( (!fDrawOverPlot) && ( (fSaveOverPlotPDF) || (fSaveOverPlotEPS) ) ) { // Set the points to save to and/or pdf/eps but then close it outside the loop + if (fUseColorArray){ + DrawOverPlotCA(iplot); + } + else{ + DrawOverPlotNoCA(iplot); + } + } + + } // end loop on plots + + if (fSaveOverPlotPDF){ // Save the overplot to pdf + SaveOverPlotPDF(); + } + if (fSaveOverPlotEPS){ // Save the overplot to eps + SaveOverPlotEPS(); + } + if (!fDrawOverPlot){ // Close if you do not want to see it + fOverCanvas.Close(); + } +} + +//________________________________________________________________________________________________ +Int_t AliPSQAVisualization::MatchGoodRunToFillNumber(Int_t runnumber){ + + Int_t fill = -1; + + for(Int_t irun = 0; irun < fNRawRuns; irun++){ + if(runnumber == fRawRunNumbers[irun]){ + fill = fRawFillNumbers[irun]; + // cout << runnumber << " matched to fill " << fill << endl; + } + } + // cout << "Matching completed" << endl; + return fill; +} + +//________________________________________________________________________________________________ +Int_t AliPSQAVisualization::MatchGoodRunToStats(Int_t runnumber){ + + Int_t Stats = -1; + + for(Int_t irun = 0; irun < fNRawRuns; irun++){ + if(runnumber == fRawRunNumbers[irun]){ + Stats = fRawRunStats[irun]; + // cout << runnumber << " matched to fill " << fill << endl; + } + } + + // cout << "Matching completed" << endl; + return Stats; +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::ConvertTGraphErrorsToTH1Ds(){ + + cout << "********************** C O N V E R T I N G TGRAPHS T O T H 1 D" << endl; + + fRootFile = TFile::Open(Form("%s",fROOTInput.Data())); + cout << "Opening file " << fROOTInput.Data() << endl; + + fDrawPlot = new TH1D[fNSelectedPlots]; // Array of TH1D's to be converted + fNDiffFills = new Int_t[fNSelectedPlots]; + fFillSeparationLine = new TLine*[fNSelectedPlots]; + + for (Int_t iplot = 0; iplot < fNSelectedPlots; iplot++){ + // Variables from the old TGraphErrors needed to draw TH1Fs + // Uncomment if seg fault returns TGraph::GetX (this=0x0), as last printout will say which graph is not correct + // cout << fInDirectory.Data() << "/" << fROOTInput.Data() << ": " << fSelectedPlots[iplot].Data() << endl; + fNDiffFills[iplot] = 0; + + // cout << "Problem is here? " << fSelectedPlots[iplot].Data() << endl; + TGraphErrors * TGEplot = (TGraphErrors*) fRootFile->Get(fSelectedPlots[iplot].Data()); + if(!TGEplot) { + // cout << "Missing plot @ step " << iplot << "plot is -> " << fSelectedPlots[iplot].Data() << endl; + continue; + } + + Double_t * TGEx = TGEplot->GetX(); // needed to properly index the x-axis (run numbers) + Double_t * TGEy = TGEplot->GetY(); // array of double_t's, qaval + Int_t TGEnpoints = TGEplot->GetN(); // number of points used in the TGE + Double_t * TGEey = TGEplot->GetEY(); // array of double_t's corresponding to the errors in the TGE + TString TGEname = TGEplot->GetName(); + TString TGEtitle = TGEplot->GetTitle(); + + // TGEx = new Double_t[TGEnpoints]; + + fNRuns = TGEnpoints; + fRunNumbers = new Int_t[fNRuns]; + fFillNumbers = new Int_t[fNRuns]; + fBinArray = new Int_t[fNRuns]; + + for (Int_t irun=0; irunSetTitle("Run Number"); + TString TH1Dytitle = SetDrawSelectedYTitle(TGEtitle); + fDrawPlot[iplot].SetYTitle(TH1Dytitle.Data()); + + cout << "==================== TEST ============= " << endl; + cout << "-------------------- iplot = " << iplot << endl; + + for (Int_t ibin = 1; ibin < TH1Dxnbin+1; ibin++){ // everything shifted off by one because tgraph starts at zero, th1f starts bins at 1 + fDrawPlot[iplot].SetBinContent(fDrawPlot[iplot].FindBin(ibin),TGEy[ibin-1]); // y[i-1] is the bin in plot + fDrawPlot[iplot].SetBinError(fDrawPlot[iplot].FindBin(ibin),TGEey[ibin-1]); + + if(ibin< TH1Dxnbin){ + if(fFillNumbers[ibin]!=fFillNumbers[ibin-1]){ + cout << "New fill @ " << ibin << endl; + cout << "Run @ "<< ibin-1 << " = " << fRunNumbers[ibin-1] <<" corresponding to fill " << fFillNumbers[ibin-1] << "; Crosscheck on bin array = " << fBinArray[ibin-1] << endl; + cout << "Run @ "<< ibin << " = " << fRunNumbers[ibin] <<" corresponding to fill " << fFillNumbers[ibin] << endl; + fNDiffFills[iplot]++; + cout << "****************************************" << endl; + } + } + + Int_t TH1Dx = Int_t(TGEx[ibin-1]); // x[i-1] = actual bin label in plot + TString TH1DxBinLabel = Form("%i",TH1Dx); + + cout << "TH1DxBinLabel = " << TH1DxBinLabel << endl; + + fDrawPlot[iplot].GetXaxis()->SetBinLabel(fDrawPlot[iplot].FindBin(ibin), TH1DxBinLabel.Data()); + fDrawPlot[iplot].GetXaxis()->SetTitleSize(.05); // default = 4%, made it 5% + + } // end of loop on bins + + fFillSeparationLine[iplot] = new TLine[fNDiffFills[iplot]]; + + TLine * newline = new TLine[fNDiffFills[iplot]]; + + cout << "Number of different fills = " << fNDiffFills[iplot] << " for iplot index = " << iplot << endl; + cout << "==================== END TEST ============= " << endl; + + //looping again on the bins of the TGE -> filling the TLines + + Int_t fillindex = 0; + for (Int_t ibin = 1; ibin < TH1Dxnbin+1; ibin++){ + + if(ibin fMaximum){ + fMaximum = tmp_max; + } + // Set minimum + tmp_min = fDrawPlot[iplot].GetMinimum(); + if (tmp_max < fMinimum){ + fMinimum = tmp_min; + } + } + + // Set the min to be lower and max to be higher so that all points can be seen + fMaximum *= fMultMax; + fMinimum /= fDivMin; +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::MakeDir(TString dir){ // have to pass a private data member, kinda ugly, but otherwise use sentinel values or copy this function three times... taken from AliPSQA + TString mkDir = "mkdir -p "; + mkDir += dir.Data(); + gSystem->Exec(mkDir); // mkdir for the cache/output +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::ImportRunAndFillInfo(const Char_t * listOfRunsAndFills){ + + Int_t run_num; //run number from list + ifstream input_runsandfill; //text file object + input_runsandfill.open(listOfRunsAndFills,ios::in ); //open the text file + + Int_t NRuns = 0; //number of runs to be processed + while(input_runsandfill >> run_num) { // count number of runs + NRuns++; + } + input_runsandfill.close(); + cout << "In total there are " << NRuns << " runs in file " << endl; + + fNRawRuns = NRuns/3; + fRawFillNumbers = new Int_t[fNRawRuns]; + fRawRunNumbers = new Int_t[fNRawRuns]; + fRawRunStats = new Int_t[fNRawRuns]; + + input_runsandfill.open(listOfRunsAndFills,ios::in ); + + for(Int_t irun = 0; irun < fNRawRuns; irun++){ + input_runsandfill >> fRawRunNumbers[irun] >> fRawFillNumbers[irun] >> fRawRunStats[irun]; + cout << irun << " - " << fRawRunNumbers[irun] << " - " << fRawFillNumbers[irun] << " - stats = " << fRawRunStats[irun] << endl; + } + cout << "DONE " << endl; + input_runsandfill.close(); + cout << "DONE DONE" << endl; +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::DrawSelected(Int_t iplot){ + fCanvas[iplot].cd(); // write to this canvas first + fCanvas[iplot].SetBottomMargin(0.15); // default 0.15 + fCanvas[iplot].SetRightMargin(0.02); + /* + cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " << endl; + cout << "iplot = " << iplot << endl; + cout << "Number of different fills for this plot " << fNDiffFills[iplot] << endl; + cout << "Plot name " << fSelectedPlots[iplot] << endl; + cout << " " << endl; + // here run check + */ + fDrawPlot[iplot].GetXaxis()->SetTitleOffset(1.6); + + fDrawPlot[iplot].Draw("E P X0"); // draw the new plot to canvas + + cout << "Drawing " << fSelectedPlots[iplot] << endl; + + TLine * line = new TLine[fNDiffFills[iplot]]; + for (Int_t lineIndex = 0; lineIndex < fNDiffFills[iplot]; lineIndex++){ + // cout << "Index pf plots that are processed = (" << iplot << "," << lineIndex << ")" << endl; + // cout << "Copying line " << lineIndex << endl; + line[lineIndex] = fFillSeparationLine[iplot][lineIndex]; + // cout << "Copied - drawing line " << lineIndex << endl; + line[lineIndex].Draw("same"); + // cout << "Drawn line " << lineIndex << endl; + // cout << "*****************" << endl; + }// endl loop on bins + // cout << "COMPLETED " << endl; + +} +//________________________________________________________________________________________________ +void AliPSQAVisualization::DrawSameTriggerOnSameCA(Int_t iplot){ + + Bool_t containsstring = kFALSE; + + containsstring = fSelectedPlots[iplot].Contains("kINT7",TString::kExact); + + if(containsstring) cout << iplot << " - Sting " << fSelectedPlots[iplot] << " - contains string: yes " << endl; + else cout << iplot << " - Sting " << fSelectedPlots[iplot] << " - contains string: no " << endl; +} + + +//________________________________________________________________________________________________ +void AliPSQAVisualization::DrawOverPlotCA(Int_t iplot){ + if (iplot == 0){ + fOverCanvas.cd(); + fDrawPlot[iplot].SetMarkerColor(fColors[iplot]); // iplot == 0 for Color_t == white... + fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small + fDrawPlot[iplot].SetLineColor(fColors[iplot]); + fDrawPlot[iplot].SetTitle(fOverPlotTitle); + fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); + fDrawPlot[iplot].GetYaxis()->SetTitle(""); + fDrawPlot[iplot].GetYaxis()->SetRangeUser(fMinimum, fMaximum); + // adding fill lines + + // end adding fill lines + fDrawPlot[iplot].Draw("E P X0"); + } + else if (iplot == (fNSelectedPlots - 1) ){ + fOverCanvas.cd(); + fDrawPlot[iplot].SetMarkerColor(fColors[iplot]); + fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small + fDrawPlot[iplot].SetLineColor(fColors[iplot]); + fDrawPlot[iplot].SetTitle(fOverPlotTitle); + fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); + fDrawPlot[iplot].GetYaxis()->SetTitle(""); + fDrawPlot[iplot].Draw("E P X0 SAME"); + // fOverLegend->Draw(); + } + else{ + fOverCanvas.cd(); + fDrawPlot[iplot].SetMarkerColor(fColors[iplot]); + fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small + fDrawPlot[iplot].SetLineColor(fColors[iplot]); + fDrawPlot[iplot].SetTitle(fOverPlotTitle); + fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); + fDrawPlot[iplot].GetYaxis()->SetTitle(""); + fDrawPlot[iplot].Draw("E P X0 SAME"); + } +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::DrawOverPlotNoCA(Int_t iplot){ + if (iplot == 0){ + fOverCanvas.cd(); + fDrawPlot[iplot].SetMarkerColor(Color_t(iplot+1)); // iplot == 0 for Color_t == white... + fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small + fDrawPlot[iplot].SetLineColor(Color_t(iplot+1)); + fDrawPlot[iplot].SetTitle(fOverPlotTitle); + fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); + fDrawPlot[iplot].GetYaxis()->SetTitle(""); + fDrawPlot[iplot].GetYaxis()->SetRangeUser(fMinimum, fMaximum); + fDrawPlot[iplot].Draw("E P X0"); + } + else if (iplot == (fNSelectedPlots - 1) ){ + fOverCanvas.cd(); + fDrawPlot[iplot].SetMarkerColor(Color_t(iplot+1)); + fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small + fDrawPlot[iplot].SetLineColor(Color_t(iplot+1)); + fDrawPlot[iplot].SetTitle(fOverPlotTitle); + fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); + fDrawPlot[iplot].GetYaxis()->SetTitle(""); + fDrawPlot[iplot].Draw("E P X0 SAME"); + fOverLegend->Draw(); + } + else{ + fOverCanvas.cd(); + fDrawPlot[iplot].SetMarkerColor(Color_t(iplot+1)); + fDrawPlot[iplot].SetMarkerStyle(Style_t(iplot+20)); // 20 = big circle, afterwards, useful styles, otherwise too small + fDrawPlot[iplot].SetLineColor(Color_t(iplot+1)); + fDrawPlot[iplot].SetTitle(fOverPlotTitle); + fOverLegend->AddEntry(&fDrawPlot[iplot],fDrawPlot[iplot].GetYaxis()->GetTitle(),"lep"); + fDrawPlot[iplot].GetYaxis()->SetTitle(""); + fDrawPlot[iplot].Draw("P SAME"); + } +} + +//________________________________________________________________________________________________ +void AliPSQAVisualization::SaveToPDFSeparately(Int_t iplot){ + cout << "Saving: " << fOutDirectory << "/" << fSelectedPlots[iplot] <<".pdf"< -#include "TGaxis.h" -#include "TStyle.h" -#include "TLegend.h" -#include "TSystem.h" -#endif - -class AliPSQAVisualization : public TObject -{ - public: - AliPSQAVisualization(); - virtual ~AliPSQAVisualization(); - - void InitializeSelectedPlots(const Char_t * listOfPlots); - void InitializeColorArray(const Char_t * listOfColors); // called only if fUseColorArray == kTRUE - - void PostProcessQA(); // First call of macro - void ScaleMinAndMax(); // called only if fScaleAuto == kTRUE - void MakeDir(TString dir); // called if anything is to be saved, first check to make sure directory exists. - void ImportRunAndFillInfo(const Char_t * listOfRunsAndFills); // import info on run and fill number - void DrawSelected(Int_t iplot); - Int_t MatchGoodRunToFillNumber(Int_t runnumber); // match run number to fill number - Int_t MatchGoodRunToStats(Int_t runnumber); // match run number to it's stats - void ConvertTGraphErrorsToTH1Ds(); - TString SetDrawSelectedYTitle(TString TGEtitle); - void SavePDFs(Int_t iplot); - void DrawSameTriggerOnSameCA(Int_t iplot); - void DrawOverPlotCA(Int_t iplot); - void DrawOverPlotNoCA(Int_t iplot); - void SaveToPDFSeparately(Int_t iplot); - void SaveOverPlotPDF(); - void SaveOverPlotEPS(); - - // Getters and setters from the macro - - void SetInDirectory(TString indir){fInDirectory = indir;}; - TString GetInDirectory(){return fInDirectory;}; - - void SetROOTInput(TString RI){fROOTInput = RI;}; - TString GetROOTInput(){return fROOTInput;}; - - void SetSavePDFs(Bool_t pdf){fSavePDFs = pdf;}; - Bool_t GetSavePDFs(){return fSavePDFs;}; - - void SetSaveOverPlotPDF(Bool_t pdf){fSaveOverPlotPDF = pdf;}; - Bool_t GetSaveOverPlotPDF(){return fSaveOverPlotPDF;}; - - void SetOutPDFName(TString name){fOutPDFName = name;}; - TString GetOutPDFName(){return fOutPDFName;}; - - void SetSaveOverPlotEPS(Bool_t eps){fSaveOverPlotEPS = eps;}; - Bool_t GetSaveOverPlotEPS(){return fSaveOverPlotEPS;}; - - void SetOutEPSName(TString name){fOutEPSName = name;}; - TString GetOutEPSName(){return fOutEPSName;}; - - void SetOutDirectory(TString out){fOutDirectory = out;}; - TString GetOutDirectory(){return fOutDirectory;}; - - void SetDrawSelected(Bool_t select){fDrawSelected = select;}; - Bool_t GetDrawSelected(){return fDrawSelected;}; - - void SetUseColorArray(Bool_t ca){fUseColorArray = ca;}; - Bool_t GetUseColorArray(){return fUseColorArray;}; - - void SetDrawOverPlot(Bool_t op){fDrawOverPlot = op;}; - Bool_t GetDrawOverPlot(){return fDrawOverPlot;}; - - void SetOverPlotTitle(TString opt){fOverPlotTitle = opt;}; - TString GetOverPlotTitle(){return fOverPlotTitle;}; - - void SetPlotOnSameCanvas(Bool_t plot){fSetPlotOnSameCanvas=plot;} - - // Scaling Options - - void SetScaleAuto(Bool_t sa){fScaleAuto = sa;}; - Bool_t GetScaleAuto(){return fScaleAuto;}; - - void SetScaleAutoDivMin(Double_t div_min){fDivMin = div_min;}; - Double_t GetScaleAutoDivMin(){return fDivMin;}; - - void SetScaleAutoMultMax(Double_t mult_max){fMultMax = mult_max;}; - Double_t GetScaleAutoMultMax(){return fMultMax;}; - - void SetScaleManMin(Double_t min){fMinimum = min;}; - Double_t GetScaleManMin(){return fMinimum;}; - - void SetScaleManMax(Double_t max){fMaximum = max;}; - Double_t GetScaleManMax(){return fMaximum;}; - - private: - - // Input variables - TString * fSelectedPlots; // List of plots to be turned from tragphs to th1ds - Int_t fNSelectedPlots; // number of plots to be turned from tgraphs to th1ds - TString fInDirectory; // input directory of root file, most likely the one just analyzed from AliPSQA - TString fROOTInput; // name of root file specified by user - TString fRunFillFile;// name of file containing info on various fills - TFile * fRootFile; // Root file to be used to produce plots - - // Save DrawSelected - Bool_t fDrawSelected; - Bool_t fSetPlotOnSameCanvas; // plot histos on same canvas - - // Save PDF variables - - Bool_t fSavePDFs; // if kTRUE, save pdfs of th1ds - TString fOutDirectory; // save pdfs to this directory - TString fOutPDFName; // common pdf name, group pdf files together - - // Overplot variables - - Bool_t fDrawOverPlot; // if kTrue, save overplot of all the th1ds - TString fOverPlotTitle; // title specified by user for overplot, most likely the name of the trigger mask, channel, and logic - Bool_t fSaveOverPlotPDF; //if ktrue, save overplot to pdf file - TCanvas fOverCanvas; // Overplot canvas - TLegend * fOverLegend; // Overplot legend - Bool_t fSaveOverPlotEPS; // if ktrue, save overplot eps file - TString fOutEPSName; // eps file name for overplot together - - // Overplot color array variables - - Bool_t fUseColorArray; // if ktrue, use colorarray specified in a list file - Color_t * fColors; // set in a list file, using enums of colors (just use AliRoot and type in the color, e.g. root [0] kBlue returns (const enum EColor)600) - Int_t fNColors; // number of colors used - - // Overplot Scaling Variables - - Bool_t fScaleAuto; // If kTRUE, set scaling automatically with GetMinAndMax() - Double_t fMultMax; // Auto scaling factor, multiply the max - Double_t fDivMin; // Auto scaling factor, divide the min - - Double_t fMinimum; // Maximum val in selected tgraphs, used for setting range for overplot - Double_t fMaximum; // Minimum val in selected tgraphs, used for setting range for overplot - - // Plotting variables needed - - TCanvas * fCanvas; // new array in InitializeDrawSelected with the amount of fNDrawSelected - TH1D * fDrawPlot; // new array in InitializeDrawSelected with the amount of fNDrawSelected - TLine ** fFillSeparationLine; // double array of Tlines - for each plot and for each change of fill number - - Int_t *fRunNumbers; // Runs to be used in macro - Int_t *fFillNumbers; // Fill numbers to be associated to macro - Int_t *fRawRunNumbers; // raw run numbers - taken from logbook - Int_t *fRawFillNumbers;// raw fill numbers corresponding to runs - taken from logbook - Int_t *fRawRunStats; // raw stats for each run number - taken from logbook - - Int_t *fNDiffFills; // array of integers containing info - Int_t *fBinArray; // array of histo bins corresponding to different RUNS - - Int_t fNRuns; // Number of Runs used in macro - Int_t fNRawRuns; // Number of raw Runs in macro - - ClassDef(AliPSQAVisualization, 2) -}; - -#endif +///////////////////////////////////// +// Created by: Kevin McDermott // +// email: kmcderm3@nd.edu // +// CERN Summer Student 2012 // +// University of Notre Dame du Lac // +// // +// Revision: 1.0 // +// Created on: August 6, 2012 // +///////////////////////////////////// + +#ifndef ALIPSQAVISUALIZATION_H +#define ALIPSQAVISUALIZATION_H + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include "TCanvas.h" +#include "TH1D.h" +#include "TGraphErrors.h" +#include "TFile.h" +#include +#include "TGaxis.h" +#include "TStyle.h" +#include "TLegend.h" +#include "TSystem.h" +#endif + +class AliPSQAVisualization : public TObject +{ + public: + AliPSQAVisualization(); + virtual ~AliPSQAVisualization(); + + void InitializeSelectedPlots(const Char_t * listOfPlots); + void InitializeColorArray(const Char_t * listOfColors); // called only if fUseColorArray == kTRUE + + void PostProcessQA(); // First call of macro + void ScaleMinAndMax(); // called only if fScaleAuto == kTRUE + void MakeDir(TString dir); // called if anything is to be saved, first check to make sure directory exists. + void ImportRunAndFillInfo(const Char_t * listOfRunsAndFills); // import info on run and fill number + void DrawSelected(Int_t iplot); + Int_t MatchGoodRunToFillNumber(Int_t runnumber); // match run number to fill number + Int_t MatchGoodRunToStats(Int_t runnumber); // match run number to it's stats + void ConvertTGraphErrorsToTH1Ds(); + TString SetDrawSelectedYTitle(TString TGEtitle); + void SavePDFs(Int_t iplot); + void DrawSameTriggerOnSameCA(Int_t iplot); + void DrawOverPlotCA(Int_t iplot); + void DrawOverPlotNoCA(Int_t iplot); + void SaveToPDFSeparately(Int_t iplot); + void SaveOverPlotPDF(); + void SaveOverPlotEPS(); + + // Getters and setters from the macro + + void SetInDirectory(TString indir){fInDirectory = indir;}; + TString GetInDirectory(){return fInDirectory;}; + + void SetROOTInput(TString RI){fROOTInput = RI;}; + TString GetROOTInput(){return fROOTInput;}; + + void SetSavePDFs(Bool_t pdf){fSavePDFs = pdf;}; + Bool_t GetSavePDFs(){return fSavePDFs;}; + + void SetSaveOverPlotPDF(Bool_t pdf){fSaveOverPlotPDF = pdf;}; + Bool_t GetSaveOverPlotPDF(){return fSaveOverPlotPDF;}; + + void SetOutPDFName(TString name){fOutPDFName = name;}; + TString GetOutPDFName(){return fOutPDFName;}; + + void SetSaveOverPlotEPS(Bool_t eps){fSaveOverPlotEPS = eps;}; + Bool_t GetSaveOverPlotEPS(){return fSaveOverPlotEPS;}; + + void SetOutEPSName(TString name){fOutEPSName = name;}; + TString GetOutEPSName(){return fOutEPSName;}; + + void SetOutDirectory(TString out){fOutDirectory = out;}; + TString GetOutDirectory(){return fOutDirectory;}; + + void SetDrawSelected(Bool_t select){fDrawSelected = select;}; + Bool_t GetDrawSelected(){return fDrawSelected;}; + + void SetUseColorArray(Bool_t ca){fUseColorArray = ca;}; + Bool_t GetUseColorArray(){return fUseColorArray;}; + + void SetDrawOverPlot(Bool_t op){fDrawOverPlot = op;}; + Bool_t GetDrawOverPlot(){return fDrawOverPlot;}; + + void SetOverPlotTitle(TString opt){fOverPlotTitle = opt;}; + TString GetOverPlotTitle(){return fOverPlotTitle;}; + + void SetPlotOnSameCanvas(Bool_t plot){fSetPlotOnSameCanvas=plot;} + + // Scaling Options + + void SetScaleAuto(Bool_t sa){fScaleAuto = sa;}; + Bool_t GetScaleAuto(){return fScaleAuto;}; + + void SetScaleAutoDivMin(Double_t div_min){fDivMin = div_min;}; + Double_t GetScaleAutoDivMin(){return fDivMin;}; + + void SetScaleAutoMultMax(Double_t mult_max){fMultMax = mult_max;}; + Double_t GetScaleAutoMultMax(){return fMultMax;}; + + void SetScaleManMin(Double_t min){fMinimum = min;}; + Double_t GetScaleManMin(){return fMinimum;}; + + void SetScaleManMax(Double_t max){fMaximum = max;}; + Double_t GetScaleManMax(){return fMaximum;}; + + private: + + // Input variables + TString * fSelectedPlots; // List of plots to be turned from tragphs to th1ds + Int_t fNSelectedPlots; // number of plots to be turned from tgraphs to th1ds + TString fInDirectory; // input directory of root file, most likely the one just analyzed from AliPSQA + TString fROOTInput; // name of root file specified by user + TString fRunFillFile;// name of file containing info on various fills + TFile * fRootFile; // Root file to be used to produce plots + + // Save DrawSelected + Bool_t fDrawSelected; + Bool_t fSetPlotOnSameCanvas; // plot histos on same canvas + + // Save PDF variables + + Bool_t fSavePDFs; // if kTRUE, save pdfs of th1ds + TString fOutDirectory; // save pdfs to this directory + TString fOutPDFName; // common pdf name, group pdf files together + + // Overplot variables + + Bool_t fDrawOverPlot; // if kTrue, save overplot of all the th1ds + TString fOverPlotTitle; // title specified by user for overplot, most likely the name of the trigger mask, channel, and logic + Bool_t fSaveOverPlotPDF; //if ktrue, save overplot to pdf file + TCanvas fOverCanvas; // Overplot canvas + TLegend * fOverLegend; // Overplot legend + Bool_t fSaveOverPlotEPS; // if ktrue, save overplot eps file + TString fOutEPSName; // eps file name for overplot together + + // Overplot color array variables + + Bool_t fUseColorArray; // if ktrue, use colorarray specified in a list file + Color_t * fColors; // set in a list file, using enums of colors (just use AliRoot and type in the color, e.g. root [0] kBlue returns (const enum EColor)600) + Int_t fNColors; // number of colors used + + // Overplot Scaling Variables + + Bool_t fScaleAuto; // If kTRUE, set scaling automatically with GetMinAndMax() + Double_t fMultMax; // Auto scaling factor, multiply the max + Double_t fDivMin; // Auto scaling factor, divide the min + + Double_t fMinimum; // Maximum val in selected tgraphs, used for setting range for overplot + Double_t fMaximum; // Minimum val in selected tgraphs, used for setting range for overplot + + // Plotting variables needed + + TCanvas * fCanvas; // new array in InitializeDrawSelected with the amount of fNDrawSelected + TH1D * fDrawPlot; // new array in InitializeDrawSelected with the amount of fNDrawSelected + TLine ** fFillSeparationLine; // double array of Tlines - for each plot and for each change of fill number + + Int_t *fRunNumbers; // Runs to be used in macro + Int_t *fFillNumbers; // Fill numbers to be associated to macro + Int_t *fRawRunNumbers; // raw run numbers - taken from logbook + Int_t *fRawFillNumbers;// raw fill numbers corresponding to runs - taken from logbook + Int_t *fRawRunStats; // raw stats for each run number - taken from logbook + + Int_t *fNDiffFills; // array of integers containing info + Int_t *fBinArray; // array of histo bins corresponding to different RUNS + + Int_t fNRuns; // Number of Runs used in macro + Int_t fNRawRuns; // Number of raw Runs in macro + + ClassDef(AliPSQAVisualization, 2) +}; + +#endif diff --git a/ANALYSIS/macros/PhysSelQA/PSQA.C b/ANALYSIS/macros/PhysSelQA/PSQA.C index 81988eb2747..4f21b36bd3e 100644 --- a/ANALYSIS/macros/PhysSelQA/PSQA.C +++ b/ANALYSIS/macros/PhysSelQA/PSQA.C @@ -1,57 +1,57 @@ -#include "AliPSQA.h" - -void PSQA() { - // - // Produce QA output of physics selection. - // Opens selected files for QA, then processes the historgrams necessary, - // prints results to a root file and/or text files specified by user. - // - // Please read the README in case the documentation provided in this macro, .h, and .cxx files is not enough! - // - //gROOT->LoadMacro("AliPSQA.cxx++g"); - AliPSQA * QAobject = new AliPSQA; // Initialize relevant object - // - // configure relevant parameters - // - Bool_t runFromLocalInputFiles = kTRUE; // if kTRUE, run over either cache or test, otherwise use alien files - Bool_t saveTxtFiles = kTRUE; - Bool_t saveRootFile = kTRUE; - Bool_t drawGraphs = kTRUE; - // - // settings - // - QAobject->InitializeRuns("../QAoutputPerPeriod/12d_Pass1/GoodRunList.list"); - QAobject->SetLocalPath("../InputFilesFromGridPerPeriod/12d_Pass1/"); // Location of files to be processed locally (whether test or cache) - QAobject->SetTxtOutDirectory("../QAoutputPerPeriod/12d_Pass1/"); // Path for macro output text files - QAobject->SetRootOutDirectory("../QAoutputPerPeriod/12d_Pass1/"); // Path for macro output root files - QAobject->SetOutRootName("LHC12d_PSQA.root"); - // - QAobject->SetPSInput(""); // Subdirectory for files to be processed, which pass to use - QAobject->SetROOTInput("event_stat.root"); //root file to be processed - QAobject->InitializeTriggers("triggerNames.list","triggerMaskChannels.list"); // trig names to be used, plus trig channels (fast vs regular) - QAobject->InitializePlots("plots.list"); //Initialize macro with QA plots to be used - QAobject->SetTxtFileName("PSQA_"); // This is appended with the run name and .txt - // - // enable settings - // - QAobject->SetLocalMode(runFromLocalInputFiles); - QAobject->SetSaveQAValToTxtFile(saveTxtFiles); - QAobject->SetSaveQAToROOTFile(saveRootFile); - // - // run and extract - // - Bool_t goodQACheck = QAobject->ComputeQAPerRun(); - // - // Print a list of the runs that failed, with some hint as to why they failed. Implementation file has comments. - // - QAobject->GetBadFiles()->Print(); - // - if (goodQACheck == kFALSE){return;} // No plots saved at all, skip altogether the option to plot all canvases. - // - QAobject->SetDrawAllTGraphs(drawGraphs); // If kTRUE, will draw all TGraphErrors saved in the ROOT file. - if (QAobject->GetDrawAllTGraphs()){ - QAobject->DrawAllTGraphs(); - } - -}; - +#include "AliPSQA.h" + +void PSQA() { + // + // Produce QA output of physics selection. + // Opens selected files for QA, then processes the historgrams necessary, + // prints results to a root file and/or text files specified by user. + // + // Please read the README in case the documentation provided in this macro, .h, and .cxx files is not enough! + // + //gROOT->LoadMacro("AliPSQA.cxx++g"); + AliPSQA * QAobject = new AliPSQA; // Initialize relevant object + // + // configure relevant parameters + // + Bool_t runFromLocalInputFiles = kTRUE; // if kTRUE, run over either cache or test, otherwise use alien files + Bool_t saveTxtFiles = kTRUE; + Bool_t saveRootFile = kTRUE; + Bool_t drawGraphs = kTRUE; + // + // settings + // + QAobject->InitializeRuns("../QAoutputPerPeriod/12d_Pass1/GoodRunList.list"); + QAobject->SetLocalPath("../InputFilesFromGridPerPeriod/12d_Pass1/"); // Location of files to be processed locally (whether test or cache) + QAobject->SetTxtOutDirectory("../QAoutputPerPeriod/12d_Pass1/"); // Path for macro output text files + QAobject->SetRootOutDirectory("../QAoutputPerPeriod/12d_Pass1/"); // Path for macro output root files + QAobject->SetOutRootName("LHC12d_PSQA.root"); + // + QAobject->SetPSInput(""); // Subdirectory for files to be processed, which pass to use + QAobject->SetROOTInput("event_stat.root"); //root file to be processed + QAobject->InitializeTriggers("triggerNames.list","triggerMaskChannels.list"); // trig names to be used, plus trig channels (fast vs regular) + QAobject->InitializePlots("plots.list"); //Initialize macro with QA plots to be used + QAobject->SetTxtFileName("PSQA_"); // This is appended with the run name and .txt + // + // enable settings + // + QAobject->SetLocalMode(runFromLocalInputFiles); + QAobject->SetSaveQAValToTxtFile(saveTxtFiles); + QAobject->SetSaveQAToROOTFile(saveRootFile); + // + // run and extract + // + Bool_t goodQACheck = QAobject->ComputeQAPerRun(); + // + // Print a list of the runs that failed, with some hint as to why they failed. Implementation file has comments. + // + QAobject->GetBadFiles()->Print(); + // + if (goodQACheck == kFALSE){return;} // No plots saved at all, skip altogether the option to plot all canvases. + // + QAobject->SetDrawAllTGraphs(drawGraphs); // If kTRUE, will draw all TGraphErrors saved in the ROOT file. + if (QAobject->GetDrawAllTGraphs()){ + QAobject->DrawAllTGraphs(); + } + +}; + diff --git a/ANALYSIS/macros/PhysSelQA/PSQAV.C b/ANALYSIS/macros/PhysSelQA/PSQAV.C index a1b2bbe2142..87f8e3d6144 100644 --- a/ANALYSIS/macros/PhysSelQA/PSQAV.C +++ b/ANALYSIS/macros/PhysSelQA/PSQAV.C @@ -1,57 +1,57 @@ -#include "AliPSQAVisualization.h" - -void PSQAV(){ - // - // make nice plots for presentations of the Phys.Sel. QA - // - AliPSQAVisualization * QAVobject1 = new AliPSQAVisualization; - // - Bool_t useAutoScale = kTRUE; - Bool_t savePDFs = kTRUE; - Bool_t drawSelected = kTRUE; // draw all plots on the screen - Bool_t drawOverPlot = kTRUE; // if true, draw to canvas to see - Bool_t saveOverPlotPdf = kTRUE; // if true, write to pdf file - Bool_t saveOverPlotEps = kTRUE; // if true, write to eps file - Bool_t saveOnSameCanvas= kTRUE; // if true, save v0 bkg on top of accepted histos - // - // configuration -- choose the input directory and file - // - // QAVobject1->ImportRunAndFillInfo("LHC12d_list.list"); - QAVobject1->ImportRunAndFillInfo("RunFillEvent_list.list"); - - QAVobject1->SetROOTInput("~/Analysis/PWGPP_PSQA/QAoutputPerPeriod/pA/13b_ESDs_21Jan/LHC13b_21Jan_PSQA.root"); - //QAVobject1->InitializeSelectedPlots("~/Analysis/PWGPP_PSQA/QAoutputPerPeriod/pA/13b_ESDs_21Jan/selectedPlots.list"); - QAVobject1->InitializeSelectedPlots("selectedPlots.list"); - //QAVobject1->InitializeSelectedPlots("plots.list"); - QAVobject1->SetOutDirectory("~/Analysis/PWGPP_PSQA/QAoutputPerPeriod/pA/13b_ESDs_21Jan/plots"); - QAVobject1->SetOutPDFName("Plots13b_ESDs.pdf"); - QAVobject1->SetOutEPSName("Plots13b_ESDs.eps"); - QAVobject1->SetOverPlotTitle(""); - // - // settings - // - QAVobject1->SetSavePDFs(savePDFs); - QAVobject1->SetDrawSelected(drawSelected); - QAVobject1->SetDrawOverPlot(drawOverPlot); - QAVobject1->SetSaveOverPlotPDF(saveOverPlotPdf); - QAVobject1->SetSaveOverPlotEPS(saveOverPlotEps); // if true, write to eps file - QAVobject1->SetPlotOnSameCanvas(saveOnSameCanvas); - QAVobject1->SetUseColorArray(kTRUE); - // - QAVobject1->InitializeColorArray("colorArray.list"); // Set the color enums for the overplot - /// Use Auto Scale? See README. - QAVobject1->SetScaleAuto(useAutoScale); - if (QAVobject1->GetScaleAuto()) { - QAVobject1->SetScaleAutoDivMin(1.1); - QAVobject1->SetScaleAutoMultMax(1.1); - } else { - QAVobject1->SetScaleManMin(0.0); - QAVobject1->SetScaleManMax(1.1); - } - // - cout << "Here we are?" << endl; - - QAVobject1->PostProcessQA(); - - cout << "Done?" << endl; -}; +#include "AliPSQAVisualization.h" + +void PSQAV(){ + // + // make nice plots for presentations of the Phys.Sel. QA + // + AliPSQAVisualization * QAVobject1 = new AliPSQAVisualization; + // + Bool_t useAutoScale = kTRUE; + Bool_t savePDFs = kTRUE; + Bool_t drawSelected = kTRUE; // draw all plots on the screen + Bool_t drawOverPlot = kTRUE; // if true, draw to canvas to see + Bool_t saveOverPlotPdf = kTRUE; // if true, write to pdf file + Bool_t saveOverPlotEps = kTRUE; // if true, write to eps file + Bool_t saveOnSameCanvas= kTRUE; // if true, save v0 bkg on top of accepted histos + // + // configuration -- choose the input directory and file + // + // QAVobject1->ImportRunAndFillInfo("LHC12d_list.list"); + QAVobject1->ImportRunAndFillInfo("RunFillEvent_list.list"); + + QAVobject1->SetROOTInput("~/Analysis/PWGPP_PSQA/QAoutputPerPeriod/pA/13b_ESDs_21Jan/LHC13b_21Jan_PSQA.root"); + //QAVobject1->InitializeSelectedPlots("~/Analysis/PWGPP_PSQA/QAoutputPerPeriod/pA/13b_ESDs_21Jan/selectedPlots.list"); + QAVobject1->InitializeSelectedPlots("selectedPlots.list"); + //QAVobject1->InitializeSelectedPlots("plots.list"); + QAVobject1->SetOutDirectory("~/Analysis/PWGPP_PSQA/QAoutputPerPeriod/pA/13b_ESDs_21Jan/plots"); + QAVobject1->SetOutPDFName("Plots13b_ESDs.pdf"); + QAVobject1->SetOutEPSName("Plots13b_ESDs.eps"); + QAVobject1->SetOverPlotTitle(""); + // + // settings + // + QAVobject1->SetSavePDFs(savePDFs); + QAVobject1->SetDrawSelected(drawSelected); + QAVobject1->SetDrawOverPlot(drawOverPlot); + QAVobject1->SetSaveOverPlotPDF(saveOverPlotPdf); + QAVobject1->SetSaveOverPlotEPS(saveOverPlotEps); // if true, write to eps file + QAVobject1->SetPlotOnSameCanvas(saveOnSameCanvas); + QAVobject1->SetUseColorArray(kTRUE); + // + QAVobject1->InitializeColorArray("colorArray.list"); // Set the color enums for the overplot + /// Use Auto Scale? See README. + QAVobject1->SetScaleAuto(useAutoScale); + if (QAVobject1->GetScaleAuto()) { + QAVobject1->SetScaleAutoDivMin(1.1); + QAVobject1->SetScaleAutoMultMax(1.1); + } else { + QAVobject1->SetScaleManMin(0.0); + QAVobject1->SetScaleManMax(1.1); + } + // + cout << "Here we are?" << endl; + + QAVobject1->PostProcessQA(); + + cout << "Done?" << endl; +}; diff --git a/ANALYSIS/macros/PhysSelQA/RunFillEvent_list.list b/ANALYSIS/macros/PhysSelQA/RunFillEvent_list.list index 51ece7c4a1c..dedb16ca4e0 100644 --- a/ANALYSIS/macros/PhysSelQA/RunFillEvent_list.list +++ b/ANALYSIS/macros/PhysSelQA/RunFillEvent_list.list @@ -1,1355 +1,1355 @@ -195467 3481 72072 -195466 3481 1830459 -195450 3480 132664 -195448 3480 10049 -195445 3480 467 -195443 3480 90285 -195442 3480 1081303 -195441 3480 452463 -195415 3479 453 -195412 3479 430 -195410 3479 10034 -195407 3479 90298 -195391 3478 1918283 -195390 3478 1077788 -195389 3478 1641438 -195384 3478 10037 -195382 3478 466 -195379 3478 90293 -195377 3477 10026 -195375 3477 451 -195372 3477 90386 -195371 3475 1655687 -195370 3475 2597506 -195369 3475 1029 -195363 3474 979 -195362 3474 446 -195361 3474 456 -195360 3474 437 -195359 3474 459 -195358 3474 459 -195357 3474 457 -195356 3474 454 -195355 3474 692 -195354 3474 464 -195351 3474 2200516 -195350 3474 237839 -195346 3474 699942 -195344 3474 211834 -195341 3474 455 -195339 3474 10030 -195336 3474 461 -195334 3474 90342 -195332 3474 2397597 -195327 3473 1195700 -195326 3473 86565 -195324 3472 1390273 -195323 3472 108296 -195322 3471 621065 -195321 3471 637933 -195320 3471 1001933 -195318 3470 823427 -195317 3470 2008017 -195316 3470 58013 -195315 3470 279318 -195311 3469 315620 -195310 3469 1566108 -195309 3469 563928 -195307 3469 10031 -195306 3469 10025 -195305 3469 474916 -195304 3469 19388 -195303 3469 603686 -195302 3469 1160 -195301 3469 1699 -195300 3469 133097 -195299 3469 2168105 -195298 3469 1923400 -195297 3469 778305 -195296 3469 1885576 -195295 3469 1916588 -195289 3469 652 -195288 3469 543785 -195287 3469 652 -195286 3469 652 -195285 3469 650 -195284 3469 573550 -195283 3469 989 -195282 3469 8750 -195281 3469 96539 -195280 3469 276502 -195279 3469 788 -195278 3469 574468 -195275 3468 1953652 -195274 3468 2074022 -195273 3468 2292757 -195272 3468 2778297 -195269 3468 1110 -195268 3468 2904216 -195267 3468 207 -195265 3468 1728042 -195264 3468 446 -195263 3468 712919 -195261 3468 116977 -195233 3467 1163390 -195232 3467 2360704 -195231 3467 343223 -195230 3467 1877120 -195229 3467 473702 -195228 3467 473741 -195227 3467 10041 -195226 3467 6317415 -195225 3467 87241 -195224 3467 10041 -195223 3467 138 -195222 3466 2807071 -195221 3466 2855050 -195218 3466 27895 -195217 3466 26994 -195216 3466 164 -195215 3466 1527096 -195213 3466 1273798 -195211 3466 1093983 -195210 3466 460 -195209 3466 1191813 -195208 3466 104719 -195207 3466 286712 -195205 3466 1008045 -195204 3466 456076 -195203 3466 1136 -195202 3466 597 -195201 3466 1620 -195200 3466 607657 -195199 3466 610006 -195198 3466 459559 -195197 3466 611936 -195196 3466 489410 -195195 3466 652 -195194 3466 831 -195193 3466 31353 -195192 3466 2603 -195191 3466 4085318 -195190 3466 783480 -195189 3466 2293524 -195188 3466 1446 -195186 3466 712 -195185 3466 676 -195184 3466 585 -195183 3465 317391 -195182 3465 450 -195081 3465 6750104 -195080 3465 272149 -194902 3463 660 -194901 3463 1380 -194900 3463 3520 -194899 3463 1053 -194898 3463 3141971 -194896 3463 5891112 -194895 3463 2857920 -194894 3463 612 -194892 3463 1560744 -194891 3463 407349 -194890 3463 8587593 -194889 3463 4714705 -194887 3463 494957 -194886 3463 227814 -194884 3463 465 -194883 3463 2095991 -194882 3463 180 -194881 3463 467713 -194880 3463 692 -194879 3463 2208116 -194878 3463 2063201 -194877 3463 2302200 -194876 3463 1530191 -194875 3463 1310 -194874 3463 5085648 -194873 3463 462 -194872 3463 1154894 -194871 3463 460 -194866 3462 5015415 -194865 3462 1798341 -194864 3462 14505139 -194863 3461 12524012 -194862 3461 1148255 -194754 3461 273654 -194752 3461 5326 -194750 3461 622061 -194749 3461 468 -194747 3461 937926 -194746 3461 168016 -194740 3461 15488 -194739 3461 7693346 -194738 3461 10287140 -194736 3461 306289 -194735 3461 8509011 -194734 3461 159796 -194733 3461 590 -194732 3461 227177 -194731 3461 459 -194729 3461 168492 -194728 3461 465 -194727 3461 162672 -194726 3461 2581946 -194724 3461 1523263 -194723 3461 1164265 -194721 3460 9369498 -194720 3460 7276610 -194719 3460 3910875 -194718 3460 108071 -194717 3460 12483 -194716 3460 222161 -194715 3460 2080604 -194714 3460 449 -194713 3460 1588437 -194712 3460 23457 -194701 3459 7102 -194700 3459 1306 -194699 3459 1128630 -194698 3459 874 -194697 3459 1861351 -194696 3459 458 -194695 3459 633 -194694 3459 893567 -194693 3459 1756858 -194692 3459 468 -194691 3459 42813 -194688 3459 1000738 -194687 3459 452 -194681 3459 10919675 -194680 3459 417280 -194679 3459 699 -193766 3453 701381 -193765 3453 8348 -193763 3453 265019 -193762 3453 774 -193760 3453 883625 -193759 3453 443568 -193758 3453 335587 -193757 3453 2142 -193756 3453 100055 -193755 3453 7879356 -193754 3453 814 -193753 3453 410286 -193752 3453 297607 -193751 3453 51061 -193750 3453 374120 -193749 3453 274503 -193748 3453 987 -193747 3453 46384 -193746 3453 43696 -193744 3453 784 -193743 3453 3365074 -193742 3453 783 -193741 3453 807 -193740 3453 48431 -193739 3453 12575 -193738 3453 1036905 -193736 3453 27553 -193735 3453 818582 -193734 3453 26973 -193733 3453 20129 -193730 3453 464 -193725 3453 4163647 -193724 3453 362374 -193723 3453 404822 -193721 3447 1114749 -193720 3443 447 -193719 3443 472 -193716 3443 924 -193715 3443 92310 -193714 3443 2823 -193703 3442 42516 -193702 3442 66961 -193701 3442 71962 -193700 3442 35398 -193699 3442 54760 -193698 3442 91386 -193696 3442 106026 -193695 3442 5931 -193693 3442 117670 -193691 3442 477 -193679 3441 1923125 -193678 3441 609 -193677 3441 882389 -193675 3441 3228937 -193674 3441 39713 -193673 3441 793 -193672 3441 90262 -193671 3441 469 -193670 3441 1748939 -193669 3441 841 -193666 3441 458 -193665 3441 271162 -193664 3441 763 -193663 3441 361742 -193662 3441 22355 -193661 3441 787 -193660 3441 356093 -193659 3441 849 -193644 3440 32097 -193643 3440 52557 -193642 3440 199 -193641 3440 1683741 -193640 3440 496 -193639 3440 1061 -193638 3439 1637921 -193637 3438 2875206 -193636 3438 454 -193630 3436 1013286 -193629 3435 6459543 -193628 3433 5494704 -193627 3432 3687954 -193624 3430 9339696 -193623 3430 824 -193622 3430 6041301 -193621 3430 7887 -193620 3430 273 -193619 3430 1382483 -193618 3429 37389310 -193617 3428 126138 -193616 3428 1141 -193615 3428 117588 -193614 3428 1122 -193613 3428 8472800 -193612 3428 124979638 -193611 3428 610 -193610 3428 21836 -193609 3428 7681331 -193608 3428 2670503 -193607 3428 796 -193606 3428 791276 -193605 3428 625379 -193604 3428 1134 -193603 3428 891 -193602 3427 4305558 -193601 3427 24342635 -193600 3427 860 -193594 3426 6266275 -193593 3425 4725083 -193592 3425 38728 -193591 3425 61995 -193589 3423 4643 -193588 3420 112347476 -193587 3420 840 -193586 3420 1558876 -193585 3420 1142 -193584 3419 12979093 -193583 3419 6281001 -193582 3419 741 -193581 3419 850042 -193580 3419 18304 -193579 3419 739 -193578 3419 777 -193577 3419 795 -193576 3419 781 -193575 3419 7562224 -193574 3419 804 -193573 3419 6614768 -193572 3419 98841 -193570 3419 467 -193569 3419 462 -193568 3419 14146 -193567 3419 5612143 -193566 3419 823 -193565 3419 2555479 -193564 3419 911442 -193563 3419 531191 -193562 3419 3186918 -193561 3419 1067 -193560 3419 1774535 -193559 3418 530760 -193558 3418 10773 -193557 3418 454 -193553 3413 11682800 -193552 3413 99206726 -193551 3413 849 -193550 3413 772 -193549 3413 1521 -193548 3413 1602 -193547 3413 1490 -193546 3413 1558 -193545 3413 1559 -193544 3413 1290860 -193543 3413 1025 -193541 3413 1522 -193538 3413 1418 -193537 3413 465346 -193536 3413 1634 -193506 3413 2022740 -193505 3413 446 -193504 3412 1216034 -193502 3410 2098796 -193499 3409 236800 -193498 3409 52134 -193497 3409 64174 -193481 3408 4083215 -193480 3408 159471 -193479 3408 98234 -193477 3406 18078569 -193476 3406 5180 -193475 3406 785 -193474 3406 605764 -193473 3405 18551734 -193472 3405 2083897 -193471 3405 3885984 -193470 3405 820 -193469 3404 330602014 -193468 3404 743 -193467 3404 10859627 -193466 3402 5512979 -193465 3402 1372227 -193464 3401 1901443 -193463 3401 1748549 -193462 3401 70502 -193461 3398 37762945 -193460 3398 596 -193459 3398 561014 -193456 3398 15321 -193454 3398 1179567 -193452 3398 1115659 -193449 3398 741134 -193446 3396 34660841 -193445 3396 308913 -193444 3396 10442 -193443 3396 2333 -193442 3396 20011 -193441 3396 13518 -193440 3396 1816 -193439 3396 35746 -193438 3396 1984 -193437 3396 17651 -193436 3396 15677 -193435 3396 1800 -193434 3396 4467 -193433 3396 554 -193432 3394 38558534 -193431 3394 393825 -193428 3393 20904820 -193427 3393 562 -193425 3392 8042513 -193424 3392 789 -193423 3391 11776674 -193422 3391 3082 -193421 3391 1372 -193420 3391 3393001 -193419 3390 21346157 -193418 3389 15817744 -193417 3389 2995409 -193416 3389 8764 -193415 3388 4954703 -193414 3388 446295 -193413 3385 5210660 -193412 3385 600 -193411 3384 672277 -193410 3383 64118 -193409 3383 1728 -193408 3382 1401348 -193407 3382 16162 -193406 3382 20431 -193404 3380 2219323 -193403 3380 3407364 -193401 3380 1123663 -193398 3380 4006 -193396 3379 1054419 -193394 3379 481 -193392 3379 439 -193391 3379 452 -193390 3379 431 -193389 3379 456 -193388 3379 445 -193387 3379 447 -193386 3379 401870 -193385 3379 437 -193384 3379 442 -193383 3379 430 -193382 3379 437 -193381 3379 444 -193380 3379 443 -193379 3379 450 -193378 3379 451 -193377 3379 452 -193376 3379 460 -193375 3379 463 -193374 3379 452 -193373 3379 477 -193372 3379 451 -193370 3379 36555 -193368 3379 297860 -193363 3379 24963 -193362 3379 10139 -193357 3379 217582 -193356 3379 254015 -193355 3379 586 -193341 3378 1099067 -193339 3378 263536 -193337 3378 184 -193335 3378 446 -193332 3378 90346 -193323 3377 90340 -193301 3375 8500332 -193300 3375 10031 -193299 3375 332889 -193298 3375 125761 -193297 3375 1970525 -193295 3375 188344 -193290 3375 455 -193287 3375 90303 -193279 3374 103734 -193278 3374 10032 -193277 3374 23274 -193276 3374 271633 -193275 3374 26370 -193274 3374 1550419 -193270 3374 344183 -193268 3374 146 -193267 3374 460 -193264 3374 90293 -193263 3374 116 -193262 3373 1314 -193258 3372 1391 -193257 3371 421 -193256 3371 205 -193246 3370 358548 -193245 3370 22566 -193244 3370 28794 -193243 3370 1398843 -193240 3370 331895 -193236 3370 404289 -193234 3370 461 -193231 3370 90272 -193230 3368 602 -193228 3367 2192566 -193227 3367 1330105 -193226 3366 280169 -193225 3366 681028 -193224 3366 115610 -193223 3366 1106 -193221 3366 148339 -193220 3366 1236 -193219 3366 145101 -193194 3363 441774 -193193 3363 1091361 -193192 3363 305249 -193189 3363 1681237 -193188 3363 434450 -193187 3363 966938 -193186 3363 672 -193185 3363 1135 -193184 3363 304917 -193183 3363 10038 -193182 3363 5762532 -193179 3363 1160450 -193177 3363 451 -193174 3363 90302 -193171 3362 90339 -193170 3361 449 -193167 3361 90329 -193166 3361 195 -193163 3361 448 -193156 3360 2286421 -193155 3360 2698821 -193154 3360 756 -193153 3360 411219 -193152 3360 181050 -193151 3360 431077 -193150 3360 348009 -193149 3360 456 -193148 3360 521407 -193147 3360 812 -193146 3360 448 -193145 3360 10033 -193144 3360 5672685 -193141 3360 919419 -193139 3360 451 -193136 3360 90276 -193135 3359 466 -193132 3359 90268 -193131 3358 2082518 -193130 3354 143094 -193129 3354 66454 -193128 3353 29341 -193127 3353 156332 -193126 3353 55805 -193124 3352 839 -193123 3352 315 -193122 3352 1888 -193120 3352 41560 -193119 3352 281653 -193118 3352 1163636 -193117 3352 73880 -193116 3352 222356 -193115 3352 100774 -193114 3352 91546 -193113 3352 118109 -193112 3352 351751 -193111 3352 490615 -193110 3352 125311 -193109 3352 47202 -193108 3352 776 -193107 3352 300952 -193097 3351 873639 -193096 3351 614 -193095 3351 614 -193094 3351 1019666 -193093 3351 347851 -193092 3351 855739 -193091 3351 532 -193090 3351 622 -193089 3351 10034 -193084 3351 1807765 -193079 3351 454027 -193078 3351 449 -193075 3351 90366 -193052 3350 14947 -193051 3350 1809534 -193050 3350 614 -193049 3350 487812 -193048 3350 1798 -193047 3350 260499 -193046 3350 724107 -193044 3350 1573794 -193039 3350 382 -193034 3350 460 -193031 3350 90331 -193030 3350 383 -193029 3350 53253 -193026 3350 79749 -193023 3349 347970 -193022 3348 144701 -193021 3348 24568 -193014 3347 418374 -193011 3347 365493 -193010 3347 174640 -193008 3347 225371 -193007 3347 976300 -193006 3347 10030 -193005 3347 615581 -193004 3347 1251977 -193000 3347 1264945 -192999 3347 21763 -192997 3347 20945 -192996 3347 9174 -192992 3347 460 -192991 3347 456 -192988 3347 90356 -192987 3347 1032156 -192986 3347 6010 -192983 3345 4589491 -192982 3345 242 -192981 3345 452 -192979 3345 1598218 -192978 3344 1191687 -192977 3343 519965 -192976 3343 1345514 -192975 3343 618396 -192945 3342 2218821 -192943 3341 982877 -192941 3339 9152289 -192940 3339 5786768 -192931 3338 213712 -192930 3338 20999 -192929 3338 3752060 -192928 3338 4369 -192927 3338 895655 -192926 3338 1092 -192925 3338 402276 -192924 3338 419 -192923 3338 315 -192922 3338 289180 -192920 3338 195623 -192919 3338 645201 -192916 3337 1937052 -192915 3337 1448955 -192914 3337 3136765 -192913 3337 842229 -192912 3337 1541213 -192911 3337 5717735 -192910 3337 3321412 -192909 3337 461 -192908 3335 15983893 -192907 3333 11449305 -192906 3329 6629393 -192904 3328 1916 -192901 3328 588290 -192899 3328 271818 -192898 3328 665 -192897 3328 1201148 -192896 3328 1819643 -192895 3328 445562 -192894 3328 451 -192893 3327 1803662 -192892 3327 920011 -192891 3327 856 -192890 3327 94580 -192889 3327 351898 -192888 3326 3035434 -192887 3326 714886 -192875 3326 1364100 -192872 3325 5907578 -192871 3325 4345484 -192870 3325 20175058 -192869 3325 2830606 -192868 3325 711543 -192867 3325 644 -192866 3325 644 -192864 3325 540 -192863 3325 610 -192862 3325 277185 -192861 3325 450340 -192860 3325 218 -192853 3325 186 -192850 3325 186 -192849 3325 225 -192848 3325 224 -192847 3325 184 -192846 3325 180 -192844 3324 943721 -192843 3324 31778 -192842 3324 702961 -192839 3324 458 -192838 3324 3579683 -192824 3323 574049 -192822 3323 1371974 -192820 3323 617723 -192817 3323 584563 -192816 3323 198315 -192815 3323 214 -192813 3323 155821 -192812 3323 451 -192811 3323 93121 -192809 3323 24838167 -192808 3323 1644979 -192807 3323 455 -192806 3323 108726 -192805 3323 40621 -192804 3323 60381 -192800 3323 11805195 -192799 3323 158392 -192798 3323 1367318 -192797 3323 136 -192796 3323 204194 -192791 3323 460 -192788 3323 90331 -192787 3323 6952157 -192779 3322 1185837 -192778 3322 709346 -192777 3322 20384866 -192776 3322 661 -192775 3322 807033 -192772 3322 1397987 -192765 3322 2607935 -192764 3322 193 -192762 3322 363770 -192760 3322 463 -192757 3322 90424 -192750 3319 542315 -192749 3319 41117 -192747 3319 289566 -192746 3319 151 -192745 3319 287655 -192742 3319 463 -192740 3319 90499 -192732 3318 1443735 -192731 3318 830249 -192730 3318 614 -192729 3318 2208969 -192727 3318 3063062 -192726 3318 152 -192724 3318 356739 -192722 3318 461 -192719 3318 90284 -192712 3316 73577 -192711 3316 1881957 -192710 3316 5921838 -192709 3316 1669053 -192708 3316 5369420 -192707 3316 6399232 -192706 3316 449 -192705 3316 122 -192700 3316 90420 -192699 3315 675187 -192696 3314 97258 -192695 3314 245259 -192690 3314 90352 -192688 3311 16605100 -192687 3311 463 -192680 3311 90377 -192678 3309 90382 -192577 3307 115756 -192576 3307 602 -192575 3307 797 -192572 3305 1415015 -192554 3300 170203 -192553 3300 278 -192552 3300 278 -192551 3300 156204 -192550 3300 226 -192549 3300 232694 -192548 3300 1119490 -192547 3300 422973 -192546 3300 14726 -192545 3300 179 -192544 3300 134590 -192543 3300 235 -192542 3300 384490 -192540 3300 266 -192537 3300 142403 -192536 3300 228 -192535 3300 1305108 -192534 3300 150677 -192533 3300 1798804 -192531 3300 487435 -192528 3300 449 -192525 3300 90281 -192511 3299 284724 -192510 3299 529259 -192509 3299 10852091 -192508 3299 2319266 -192507 3299 265518 -192506 3299 743 -192505 3299 1099928 -192504 3299 46845 -192503 3299 6576436 -192502 3299 28529 -192501 3299 38806 -192500 3299 1599463 -192499 3299 761277 -192497 3299 458974 -192496 3299 9324776 -192495 3299 862 -192494 3299 91694 -192493 3299 881 -192492 3299 602584 -192491 3299 233421 -192490 3299 1760 -192489 3299 108887 -192488 3299 1777 -192487 3299 49224 -192486 3299 1418 -192485 3299 57664 -192484 3299 1073 -192483 3299 49260 -192482 3299 1372 -192481 3299 71051 -192480 3299 1650 -192479 3299 169028 -192478 3299 983 -192477 3299 18930 -192476 3299 1039522 -192475 3299 746 -192471 3299 1175517 -192468 3299 445469 -192467 3299 289149 -192466 3299 597 -192465 3299 443 -192464 3299 466 -192463 3299 442 -192462 3299 447 -192461 3299 379953 -192460 3299 75550 -192459 3299 478 -192458 3299 453 -192457 3299 29849 -192456 3299 450 -192455 3299 474 -192454 3299 909 -192453 3299 810454 -192452 3299 12281 -192451 3299 142124 -192450 3299 467 -192449 3299 469 -192448 3299 444 -192447 3299 642609 -192445 3299 261063 -192442 3299 466 -192439 3299 90208 -192436 3299 861 -192435 3299 1438450 -192417 3298 107756 -192416 3298 53412 -192415 3298 238294 -192414 3298 15980 -192410 3298 115919 -192409 3298 1132 -192408 3298 109725 -192407 3298 1103 -192406 3298 110959 -192405 3298 1128 -192404 3298 121187 -192403 3298 1216 -192401 3298 90363 -192400 3298 324604 -192399 3298 558 -192398 3298 139979 -192390 3297 449 -192387 3297 90246 -192379 3296 1940734 -192378 3296 781511 -192377 3296 710 -192376 3296 731934 -192375 3296 32354 -192374 3296 155479 -192373 3296 826 -192372 3296 130243 -192371 3296 789 -192370 3296 28721 -192369 3296 583 -192368 3296 40335 -192367 3296 594 -192366 3296 3441 -192365 3296 5468 -192364 3296 578 -192363 3296 9168 -192362 3296 573 -192361 3296 23956 -192360 3296 567 -192359 3296 247586 -192358 3296 871 -192357 3296 957 -192349 3296 5172873 -192348 3296 1357654 -192347 3296 718948 -192346 3296 566 -192345 3296 1139 -192344 3296 76810 -192342 3296 86802 -192339 3296 453 -192336 3296 90344 -192283 3295 453 -192280 3295 90307 -192271 3294 90330 -192264 3293 327846 -192259 3293 330885 -192258 3293 80988 -192257 3293 453 -192255 3293 90392 -192254 3293 840135 -192253 3293 148 -192246 3292 585180 -192245 3292 472 -192244 3292 1510839 -192242 3292 389250 -192239 3292 435 -192236 3292 90229 -192229 3291 466 -192226 3291 90251 -192216 3290 90313 -192213 3289 90223 -192205 3288 2309032 -192202 3288 432648 -192201 3288 920704 -192200 3288 196153 -192199 3288 1174522 -192198 3288 461 -192197 3288 1161279 -192196 3288 44570 -192195 3288 460 -192194 3288 950847 -192193 3288 1879 -192192 3288 1705945 -192190 3288 290515 -192187 3288 449 -192184 3288 90290 -192177 3287 2712483 -192176 3287 15237 -192175 3287 113 -192174 3287 396418 -192173 3287 590 -192172 3287 823885 -192171 3287 1402347 -192166 3287 352247 -192164 3287 464 -192161 3287 90414 -192155 3287 8388542 -192141 3286 251027 -192140 3286 978769 -192139 3286 366 -192136 3286 398232 -192133 3286 15466 -192132 3286 586 -192131 3286 237 -192130 3286 586 -192129 3286 329 -192128 3286 691258 -192127 3286 32777 -192125 3286 682783 -192121 3286 281494 -192120 3286 225758 -192119 3286 1158224 -192117 3286 748359 -192115 3286 103297 -192112 3286 468 -192109 3286 90258 -192102 3285 11384 -192095 3285 1702799 -192087 3285 111542 -192086 3285 1113 -192083 3285 112231 -192082 3285 1160 -192079 3285 814 -192078 3285 839 -192077 3285 839 -192075 3285 616731 -192074 3285 614 -192073 3285 2521458 -192072 3285 222356 -192067 3285 458102 -192066 3285 22821 -192065 3285 457 -192062 3285 90312 -192050 3284 5497380 -192048 3284 209622 -192019 3283 90330 -192018 3282 813808 -192017 3280 382004 -192004 3279 1724906 -192003 3279 1954823 -192000 3279 49887 -191996 3279 450140 -191995 3279 447 -191992 3279 90328 -191991 3277 462 -191988 3277 90249 -191987 3276 21597 -191973 3276 777856 -191971 3276 643995 -191970 3275 40853 -191969 3274 3130901 -191967 3274 680 -191965 3274 1337707 -191964 3274 207773 -191963 3274 1656987 -191962 3274 460 -191961 3274 92137 -191960 3274 2830095 -191853 3273 45792 -191851 3273 1276915 -191850 3273 448 -191849 3273 1058716 -191848 3273 936649 -191846 3273 324652 -191841 3273 90290 -191840 3273 458 -191825 3273 85130 -191821 3273 1012 -191752 3272 111313 -191751 3272 1591020 -191750 3272 174 -191745 3272 377263 -191744 3272 457 -191742 3272 206992 -191741 3271 2855 -191740 3271 706572 -191735 3271 3331354 -191734 3271 574 -191733 3271 4397373 -191732 3271 269652 -191731 3270 1753617 -191719 3269 1603424 -191718 3269 215676 -191717 3269 2590580 -191716 3269 453 -191715 3269 3110260 -191714 3269 343016 -191709 3269 227939 -191705 3269 467 -191702 3269 90278 -191701 3269 31328 -191700 3269 1140272 -191699 3268 4719144 -191698 3267 2095660 -191697 3267 3052000 -191600 3266 111687 -191599 3266 1510731 -191598 3266 1097 -191594 3266 7289 -191593 3266 563900 -191592 3266 687370 -191591 3266 87945 -191590 3266 116310 -191587 3266 342935 -191585 3266 1332311 -191578 3266 128661 -191576 3266 2197225 -191573 3266 484 -191571 3266 90318 -191556 3265 2310 -191555 3265 3066 -191554 3265 339802 -191551 3265 2439840 -191549 3265 595212 -191548 3265 439894 -191547 3265 44302 -191543 3265 166 -191539 3265 798285 -191535 3265 260 -191532 3265 231 -191527 3265 959936 -191524 3265 357 -191523 3265 357 -191521 3265 210896 -191519 3265 458 -191514 3265 90544 -191513 3265 5668194 -191512 3265 20519684 -191511 3265 56763 -191509 3265 279 -191508 3265 243 -191506 3265 214 -191505 3265 591 -191487 3264 448 -191485 3264 332892 -191484 3264 184 -191483 3264 184 -191480 3264 447 -191477 3264 90289 -191475 3263 5166938 -191466 3262 449 -191463 3262 90337 -191462 3262 1338 -191451 3261 887639 -191450 3261 451593 -191449 3261 45768 -191448 3261 1547319 -191447 3261 587528 -191446 3261 214 -191445 3261 65667 -191443 3261 329723 -191440 3261 467 -191439 3261 464 -191435 3261 188045 -191433 3261 90345 -191388 3259 1178673 -191383 3259 260652 -191382 3259 466 -191381 3259 104806 -191380 3259 4589382 -191376 3259 427603 -191375 3259 467 -191372 3259 90244 -191360 3254 3710605 -191359 3254 1288746 -191344 3253 332934 -191343 3253 239622 -191340 3253 267152 -191337 3253 312079 -191336 3253 462 -191329 3253 388285 -191328 3253 90333 -191327 3253 11906 -191324 3253 449 -191309 3252 2195246 -191307 3252 270967 -191306 3252 184 -191303 3252 449 -191300 3252 90297 -191275 3250 2779061 -191274 3250 123964 -191272 3250 473 -191266 3250 16713 -191265 3250 5512 -191263 3250 100527 -191262 3250 49597 -191259 3250 90456 -191258 3250 181493 -191248 3249 697798 -191247 3249 262129 -191245 3249 190486 -191244 3249 1498588 -191242 3249 349878 -191241 3249 24437 -191240 3249 812 -191239 3249 812 -191238 3249 576 -191237 3249 544 -191236 3249 470 -191235 3249 510 -191234 3249 477738 -191232 3249 905801 -191231 3249 164744 -191230 3249 208480 -191229 3249 586031 -191227 3249 411924 -191226 3249 31261 -191225 3249 16741 -191224 3249 1670355 -191222 3249 386591 -191218 3249 51215 -191217 3249 510058 -191216 3249 63897 -191215 3249 461 -191212 3249 90257 -191211 3246 524 -191210 3246 636571 -191208 3246 273264 -191207 3246 203077 -191206 3246 848421 -191205 3246 2507779 -191204 3246 585477 -191203 3246 1968 -191199 3245 386551 -191198 3245 627349 -191163 3244 1333415 -191159 3244 411509 -191158 3244 460 -191153 3244 90291 -191152 3244 851315 -191150 3244 190413 -191149 3243 1853531 -191129 3242 189204 -191128 3242 23277 -191126 3242 314 -191121 3242 321610 -191120 3242 214 -191119 3242 77436 -191118 3242 73905 -191114 3242 548920 -191110 3242 897905 -191105 3242 579265 -191104 3242 455 -191101 3242 90307 -191100 3241 333547 -191099 3241 62353 -191083 3240 239728 -191082 3240 170 -191081 3240 34651 -191079 3240 191429 -191076 3240 450 -191075 3240 34478 -191074 3240 454 -191073 3240 39494 -191072 3240 69366 -191071 3240 42648 -191068 3240 90290 -191066 3240 1529664 -191065 3240 31605 -191064 3240 5358 -191063 3240 192797 -191062 3240 595933 -191059 3240 46693 -191041 3239 90359 -191032 3238 3267690 -191031 3238 101377 -191022 3238 290961 -191021 3238 462 -191018 3238 90438 -190984 3236 440620 -190983 3236 1222859 -190981 3236 3357920 -190980 3236 477 -190979 3236 177980 -190975 3236 125811 -190974 3236 1797584 -190973 3236 54672 -190972 3236 49266 -190970 3236 180784 -190969 3236 569777 -190968 3236 284183 -190967 3236 2184 -190966 3236 14704 -190965 3236 4299 -190963 3236 182 -190962 3236 1576758 -190961 3236 2474728 -190960 3236 3032912 -190955 3236 735985 -190953 3236 461 -190950 3236 90309 -190949 3236 668497 -190947 3236 31589 -190946 3235 354165 -190945 3235 269531 -190944 3235 440365 -190920 3233 90267 -190919 3233 664675 -190918 3233 294 -190917 3233 495 -190916 3233 349 -190905 3232 36696 -190904 3232 978609 -190903 3232 174720 -190902 3232 30466 -190898 3232 2148663 -190897 3232 117736 -190895 3232 324538 -190894 3232 88655 -190893 3232 3428 -190892 3232 275 -190879 3232 1251241 -190870 3232 328737 -190867 3232 19198 -190866 3232 84583 -190864 3232 161706 -190861 3232 456 -190858 3232 90306 -190857 3232 794 -190856 3232 954 -190848 3231 643901 -190844 3231 347080 -190843 3231 475 -190842 3231 455 -190839 3231 90302 -190838 3230 801152 -190837 3230 127083 -190836 3230 1102 -190835 3230 118143 -190834 3230 1133 -190822 3229 192614 -190821 3229 114160 -190819 3229 93040 -190818 3229 98233 -190815 3229 414619 -190813 3229 475 -190810 3229 90337 -190714 3226 700008 -190712 3226 224881 -190709 3226 471 -190706 3226 90353 -190705 3226 240120 -190696 3225 446 -190693 3225 90296 -190685 3223 519289 -190683 3223 296351 -190680 3223 449 -190676 3223 90398 -190675 3222 6021537 -190674 3222 1423325 -190673 3221 1657927 -190672 3221 165558 -190671 3221 106316 -190670 3221 2834347 -190669 3221 125473 -190668 3221 1042 -190667 3221 49131 -190666 3221 103694 -190665 3221 1036 -190656 3220 451 -190655 3220 60732 -190654 3220 49850 -190653 3220 452 -190652 3220 70785 -190649 3220 90348 -190648 3220 341418 -190646 3219 602 -190645 3219 661786 -190644 3219 376661 -190643 3218 48106 -190642 3218 24800 -190641 3218 1544754 -190640 3218 96894 -190639 3218 31360 -190630 3217 26392 -190629 3217 484171 -190628 3217 172280 -190627 3217 2448197 -190626 3217 1102909 -190622 3216 18773072 -190621 3216 22242242 -190620 3216 737082 -190602 3215 10562971 -190601 3215 169434 -190598 3215 65775 -190595 3215 569777 -190594 3215 173183 -190585 3214 1570273 +195467 3481 72072 +195466 3481 1830459 +195450 3480 132664 +195448 3480 10049 +195445 3480 467 +195443 3480 90285 +195442 3480 1081303 +195441 3480 452463 +195415 3479 453 +195412 3479 430 +195410 3479 10034 +195407 3479 90298 +195391 3478 1918283 +195390 3478 1077788 +195389 3478 1641438 +195384 3478 10037 +195382 3478 466 +195379 3478 90293 +195377 3477 10026 +195375 3477 451 +195372 3477 90386 +195371 3475 1655687 +195370 3475 2597506 +195369 3475 1029 +195363 3474 979 +195362 3474 446 +195361 3474 456 +195360 3474 437 +195359 3474 459 +195358 3474 459 +195357 3474 457 +195356 3474 454 +195355 3474 692 +195354 3474 464 +195351 3474 2200516 +195350 3474 237839 +195346 3474 699942 +195344 3474 211834 +195341 3474 455 +195339 3474 10030 +195336 3474 461 +195334 3474 90342 +195332 3474 2397597 +195327 3473 1195700 +195326 3473 86565 +195324 3472 1390273 +195323 3472 108296 +195322 3471 621065 +195321 3471 637933 +195320 3471 1001933 +195318 3470 823427 +195317 3470 2008017 +195316 3470 58013 +195315 3470 279318 +195311 3469 315620 +195310 3469 1566108 +195309 3469 563928 +195307 3469 10031 +195306 3469 10025 +195305 3469 474916 +195304 3469 19388 +195303 3469 603686 +195302 3469 1160 +195301 3469 1699 +195300 3469 133097 +195299 3469 2168105 +195298 3469 1923400 +195297 3469 778305 +195296 3469 1885576 +195295 3469 1916588 +195289 3469 652 +195288 3469 543785 +195287 3469 652 +195286 3469 652 +195285 3469 650 +195284 3469 573550 +195283 3469 989 +195282 3469 8750 +195281 3469 96539 +195280 3469 276502 +195279 3469 788 +195278 3469 574468 +195275 3468 1953652 +195274 3468 2074022 +195273 3468 2292757 +195272 3468 2778297 +195269 3468 1110 +195268 3468 2904216 +195267 3468 207 +195265 3468 1728042 +195264 3468 446 +195263 3468 712919 +195261 3468 116977 +195233 3467 1163390 +195232 3467 2360704 +195231 3467 343223 +195230 3467 1877120 +195229 3467 473702 +195228 3467 473741 +195227 3467 10041 +195226 3467 6317415 +195225 3467 87241 +195224 3467 10041 +195223 3467 138 +195222 3466 2807071 +195221 3466 2855050 +195218 3466 27895 +195217 3466 26994 +195216 3466 164 +195215 3466 1527096 +195213 3466 1273798 +195211 3466 1093983 +195210 3466 460 +195209 3466 1191813 +195208 3466 104719 +195207 3466 286712 +195205 3466 1008045 +195204 3466 456076 +195203 3466 1136 +195202 3466 597 +195201 3466 1620 +195200 3466 607657 +195199 3466 610006 +195198 3466 459559 +195197 3466 611936 +195196 3466 489410 +195195 3466 652 +195194 3466 831 +195193 3466 31353 +195192 3466 2603 +195191 3466 4085318 +195190 3466 783480 +195189 3466 2293524 +195188 3466 1446 +195186 3466 712 +195185 3466 676 +195184 3466 585 +195183 3465 317391 +195182 3465 450 +195081 3465 6750104 +195080 3465 272149 +194902 3463 660 +194901 3463 1380 +194900 3463 3520 +194899 3463 1053 +194898 3463 3141971 +194896 3463 5891112 +194895 3463 2857920 +194894 3463 612 +194892 3463 1560744 +194891 3463 407349 +194890 3463 8587593 +194889 3463 4714705 +194887 3463 494957 +194886 3463 227814 +194884 3463 465 +194883 3463 2095991 +194882 3463 180 +194881 3463 467713 +194880 3463 692 +194879 3463 2208116 +194878 3463 2063201 +194877 3463 2302200 +194876 3463 1530191 +194875 3463 1310 +194874 3463 5085648 +194873 3463 462 +194872 3463 1154894 +194871 3463 460 +194866 3462 5015415 +194865 3462 1798341 +194864 3462 14505139 +194863 3461 12524012 +194862 3461 1148255 +194754 3461 273654 +194752 3461 5326 +194750 3461 622061 +194749 3461 468 +194747 3461 937926 +194746 3461 168016 +194740 3461 15488 +194739 3461 7693346 +194738 3461 10287140 +194736 3461 306289 +194735 3461 8509011 +194734 3461 159796 +194733 3461 590 +194732 3461 227177 +194731 3461 459 +194729 3461 168492 +194728 3461 465 +194727 3461 162672 +194726 3461 2581946 +194724 3461 1523263 +194723 3461 1164265 +194721 3460 9369498 +194720 3460 7276610 +194719 3460 3910875 +194718 3460 108071 +194717 3460 12483 +194716 3460 222161 +194715 3460 2080604 +194714 3460 449 +194713 3460 1588437 +194712 3460 23457 +194701 3459 7102 +194700 3459 1306 +194699 3459 1128630 +194698 3459 874 +194697 3459 1861351 +194696 3459 458 +194695 3459 633 +194694 3459 893567 +194693 3459 1756858 +194692 3459 468 +194691 3459 42813 +194688 3459 1000738 +194687 3459 452 +194681 3459 10919675 +194680 3459 417280 +194679 3459 699 +193766 3453 701381 +193765 3453 8348 +193763 3453 265019 +193762 3453 774 +193760 3453 883625 +193759 3453 443568 +193758 3453 335587 +193757 3453 2142 +193756 3453 100055 +193755 3453 7879356 +193754 3453 814 +193753 3453 410286 +193752 3453 297607 +193751 3453 51061 +193750 3453 374120 +193749 3453 274503 +193748 3453 987 +193747 3453 46384 +193746 3453 43696 +193744 3453 784 +193743 3453 3365074 +193742 3453 783 +193741 3453 807 +193740 3453 48431 +193739 3453 12575 +193738 3453 1036905 +193736 3453 27553 +193735 3453 818582 +193734 3453 26973 +193733 3453 20129 +193730 3453 464 +193725 3453 4163647 +193724 3453 362374 +193723 3453 404822 +193721 3447 1114749 +193720 3443 447 +193719 3443 472 +193716 3443 924 +193715 3443 92310 +193714 3443 2823 +193703 3442 42516 +193702 3442 66961 +193701 3442 71962 +193700 3442 35398 +193699 3442 54760 +193698 3442 91386 +193696 3442 106026 +193695 3442 5931 +193693 3442 117670 +193691 3442 477 +193679 3441 1923125 +193678 3441 609 +193677 3441 882389 +193675 3441 3228937 +193674 3441 39713 +193673 3441 793 +193672 3441 90262 +193671 3441 469 +193670 3441 1748939 +193669 3441 841 +193666 3441 458 +193665 3441 271162 +193664 3441 763 +193663 3441 361742 +193662 3441 22355 +193661 3441 787 +193660 3441 356093 +193659 3441 849 +193644 3440 32097 +193643 3440 52557 +193642 3440 199 +193641 3440 1683741 +193640 3440 496 +193639 3440 1061 +193638 3439 1637921 +193637 3438 2875206 +193636 3438 454 +193630 3436 1013286 +193629 3435 6459543 +193628 3433 5494704 +193627 3432 3687954 +193624 3430 9339696 +193623 3430 824 +193622 3430 6041301 +193621 3430 7887 +193620 3430 273 +193619 3430 1382483 +193618 3429 37389310 +193617 3428 126138 +193616 3428 1141 +193615 3428 117588 +193614 3428 1122 +193613 3428 8472800 +193612 3428 124979638 +193611 3428 610 +193610 3428 21836 +193609 3428 7681331 +193608 3428 2670503 +193607 3428 796 +193606 3428 791276 +193605 3428 625379 +193604 3428 1134 +193603 3428 891 +193602 3427 4305558 +193601 3427 24342635 +193600 3427 860 +193594 3426 6266275 +193593 3425 4725083 +193592 3425 38728 +193591 3425 61995 +193589 3423 4643 +193588 3420 112347476 +193587 3420 840 +193586 3420 1558876 +193585 3420 1142 +193584 3419 12979093 +193583 3419 6281001 +193582 3419 741 +193581 3419 850042 +193580 3419 18304 +193579 3419 739 +193578 3419 777 +193577 3419 795 +193576 3419 781 +193575 3419 7562224 +193574 3419 804 +193573 3419 6614768 +193572 3419 98841 +193570 3419 467 +193569 3419 462 +193568 3419 14146 +193567 3419 5612143 +193566 3419 823 +193565 3419 2555479 +193564 3419 911442 +193563 3419 531191 +193562 3419 3186918 +193561 3419 1067 +193560 3419 1774535 +193559 3418 530760 +193558 3418 10773 +193557 3418 454 +193553 3413 11682800 +193552 3413 99206726 +193551 3413 849 +193550 3413 772 +193549 3413 1521 +193548 3413 1602 +193547 3413 1490 +193546 3413 1558 +193545 3413 1559 +193544 3413 1290860 +193543 3413 1025 +193541 3413 1522 +193538 3413 1418 +193537 3413 465346 +193536 3413 1634 +193506 3413 2022740 +193505 3413 446 +193504 3412 1216034 +193502 3410 2098796 +193499 3409 236800 +193498 3409 52134 +193497 3409 64174 +193481 3408 4083215 +193480 3408 159471 +193479 3408 98234 +193477 3406 18078569 +193476 3406 5180 +193475 3406 785 +193474 3406 605764 +193473 3405 18551734 +193472 3405 2083897 +193471 3405 3885984 +193470 3405 820 +193469 3404 330602014 +193468 3404 743 +193467 3404 10859627 +193466 3402 5512979 +193465 3402 1372227 +193464 3401 1901443 +193463 3401 1748549 +193462 3401 70502 +193461 3398 37762945 +193460 3398 596 +193459 3398 561014 +193456 3398 15321 +193454 3398 1179567 +193452 3398 1115659 +193449 3398 741134 +193446 3396 34660841 +193445 3396 308913 +193444 3396 10442 +193443 3396 2333 +193442 3396 20011 +193441 3396 13518 +193440 3396 1816 +193439 3396 35746 +193438 3396 1984 +193437 3396 17651 +193436 3396 15677 +193435 3396 1800 +193434 3396 4467 +193433 3396 554 +193432 3394 38558534 +193431 3394 393825 +193428 3393 20904820 +193427 3393 562 +193425 3392 8042513 +193424 3392 789 +193423 3391 11776674 +193422 3391 3082 +193421 3391 1372 +193420 3391 3393001 +193419 3390 21346157 +193418 3389 15817744 +193417 3389 2995409 +193416 3389 8764 +193415 3388 4954703 +193414 3388 446295 +193413 3385 5210660 +193412 3385 600 +193411 3384 672277 +193410 3383 64118 +193409 3383 1728 +193408 3382 1401348 +193407 3382 16162 +193406 3382 20431 +193404 3380 2219323 +193403 3380 3407364 +193401 3380 1123663 +193398 3380 4006 +193396 3379 1054419 +193394 3379 481 +193392 3379 439 +193391 3379 452 +193390 3379 431 +193389 3379 456 +193388 3379 445 +193387 3379 447 +193386 3379 401870 +193385 3379 437 +193384 3379 442 +193383 3379 430 +193382 3379 437 +193381 3379 444 +193380 3379 443 +193379 3379 450 +193378 3379 451 +193377 3379 452 +193376 3379 460 +193375 3379 463 +193374 3379 452 +193373 3379 477 +193372 3379 451 +193370 3379 36555 +193368 3379 297860 +193363 3379 24963 +193362 3379 10139 +193357 3379 217582 +193356 3379 254015 +193355 3379 586 +193341 3378 1099067 +193339 3378 263536 +193337 3378 184 +193335 3378 446 +193332 3378 90346 +193323 3377 90340 +193301 3375 8500332 +193300 3375 10031 +193299 3375 332889 +193298 3375 125761 +193297 3375 1970525 +193295 3375 188344 +193290 3375 455 +193287 3375 90303 +193279 3374 103734 +193278 3374 10032 +193277 3374 23274 +193276 3374 271633 +193275 3374 26370 +193274 3374 1550419 +193270 3374 344183 +193268 3374 146 +193267 3374 460 +193264 3374 90293 +193263 3374 116 +193262 3373 1314 +193258 3372 1391 +193257 3371 421 +193256 3371 205 +193246 3370 358548 +193245 3370 22566 +193244 3370 28794 +193243 3370 1398843 +193240 3370 331895 +193236 3370 404289 +193234 3370 461 +193231 3370 90272 +193230 3368 602 +193228 3367 2192566 +193227 3367 1330105 +193226 3366 280169 +193225 3366 681028 +193224 3366 115610 +193223 3366 1106 +193221 3366 148339 +193220 3366 1236 +193219 3366 145101 +193194 3363 441774 +193193 3363 1091361 +193192 3363 305249 +193189 3363 1681237 +193188 3363 434450 +193187 3363 966938 +193186 3363 672 +193185 3363 1135 +193184 3363 304917 +193183 3363 10038 +193182 3363 5762532 +193179 3363 1160450 +193177 3363 451 +193174 3363 90302 +193171 3362 90339 +193170 3361 449 +193167 3361 90329 +193166 3361 195 +193163 3361 448 +193156 3360 2286421 +193155 3360 2698821 +193154 3360 756 +193153 3360 411219 +193152 3360 181050 +193151 3360 431077 +193150 3360 348009 +193149 3360 456 +193148 3360 521407 +193147 3360 812 +193146 3360 448 +193145 3360 10033 +193144 3360 5672685 +193141 3360 919419 +193139 3360 451 +193136 3360 90276 +193135 3359 466 +193132 3359 90268 +193131 3358 2082518 +193130 3354 143094 +193129 3354 66454 +193128 3353 29341 +193127 3353 156332 +193126 3353 55805 +193124 3352 839 +193123 3352 315 +193122 3352 1888 +193120 3352 41560 +193119 3352 281653 +193118 3352 1163636 +193117 3352 73880 +193116 3352 222356 +193115 3352 100774 +193114 3352 91546 +193113 3352 118109 +193112 3352 351751 +193111 3352 490615 +193110 3352 125311 +193109 3352 47202 +193108 3352 776 +193107 3352 300952 +193097 3351 873639 +193096 3351 614 +193095 3351 614 +193094 3351 1019666 +193093 3351 347851 +193092 3351 855739 +193091 3351 532 +193090 3351 622 +193089 3351 10034 +193084 3351 1807765 +193079 3351 454027 +193078 3351 449 +193075 3351 90366 +193052 3350 14947 +193051 3350 1809534 +193050 3350 614 +193049 3350 487812 +193048 3350 1798 +193047 3350 260499 +193046 3350 724107 +193044 3350 1573794 +193039 3350 382 +193034 3350 460 +193031 3350 90331 +193030 3350 383 +193029 3350 53253 +193026 3350 79749 +193023 3349 347970 +193022 3348 144701 +193021 3348 24568 +193014 3347 418374 +193011 3347 365493 +193010 3347 174640 +193008 3347 225371 +193007 3347 976300 +193006 3347 10030 +193005 3347 615581 +193004 3347 1251977 +193000 3347 1264945 +192999 3347 21763 +192997 3347 20945 +192996 3347 9174 +192992 3347 460 +192991 3347 456 +192988 3347 90356 +192987 3347 1032156 +192986 3347 6010 +192983 3345 4589491 +192982 3345 242 +192981 3345 452 +192979 3345 1598218 +192978 3344 1191687 +192977 3343 519965 +192976 3343 1345514 +192975 3343 618396 +192945 3342 2218821 +192943 3341 982877 +192941 3339 9152289 +192940 3339 5786768 +192931 3338 213712 +192930 3338 20999 +192929 3338 3752060 +192928 3338 4369 +192927 3338 895655 +192926 3338 1092 +192925 3338 402276 +192924 3338 419 +192923 3338 315 +192922 3338 289180 +192920 3338 195623 +192919 3338 645201 +192916 3337 1937052 +192915 3337 1448955 +192914 3337 3136765 +192913 3337 842229 +192912 3337 1541213 +192911 3337 5717735 +192910 3337 3321412 +192909 3337 461 +192908 3335 15983893 +192907 3333 11449305 +192906 3329 6629393 +192904 3328 1916 +192901 3328 588290 +192899 3328 271818 +192898 3328 665 +192897 3328 1201148 +192896 3328 1819643 +192895 3328 445562 +192894 3328 451 +192893 3327 1803662 +192892 3327 920011 +192891 3327 856 +192890 3327 94580 +192889 3327 351898 +192888 3326 3035434 +192887 3326 714886 +192875 3326 1364100 +192872 3325 5907578 +192871 3325 4345484 +192870 3325 20175058 +192869 3325 2830606 +192868 3325 711543 +192867 3325 644 +192866 3325 644 +192864 3325 540 +192863 3325 610 +192862 3325 277185 +192861 3325 450340 +192860 3325 218 +192853 3325 186 +192850 3325 186 +192849 3325 225 +192848 3325 224 +192847 3325 184 +192846 3325 180 +192844 3324 943721 +192843 3324 31778 +192842 3324 702961 +192839 3324 458 +192838 3324 3579683 +192824 3323 574049 +192822 3323 1371974 +192820 3323 617723 +192817 3323 584563 +192816 3323 198315 +192815 3323 214 +192813 3323 155821 +192812 3323 451 +192811 3323 93121 +192809 3323 24838167 +192808 3323 1644979 +192807 3323 455 +192806 3323 108726 +192805 3323 40621 +192804 3323 60381 +192800 3323 11805195 +192799 3323 158392 +192798 3323 1367318 +192797 3323 136 +192796 3323 204194 +192791 3323 460 +192788 3323 90331 +192787 3323 6952157 +192779 3322 1185837 +192778 3322 709346 +192777 3322 20384866 +192776 3322 661 +192775 3322 807033 +192772 3322 1397987 +192765 3322 2607935 +192764 3322 193 +192762 3322 363770 +192760 3322 463 +192757 3322 90424 +192750 3319 542315 +192749 3319 41117 +192747 3319 289566 +192746 3319 151 +192745 3319 287655 +192742 3319 463 +192740 3319 90499 +192732 3318 1443735 +192731 3318 830249 +192730 3318 614 +192729 3318 2208969 +192727 3318 3063062 +192726 3318 152 +192724 3318 356739 +192722 3318 461 +192719 3318 90284 +192712 3316 73577 +192711 3316 1881957 +192710 3316 5921838 +192709 3316 1669053 +192708 3316 5369420 +192707 3316 6399232 +192706 3316 449 +192705 3316 122 +192700 3316 90420 +192699 3315 675187 +192696 3314 97258 +192695 3314 245259 +192690 3314 90352 +192688 3311 16605100 +192687 3311 463 +192680 3311 90377 +192678 3309 90382 +192577 3307 115756 +192576 3307 602 +192575 3307 797 +192572 3305 1415015 +192554 3300 170203 +192553 3300 278 +192552 3300 278 +192551 3300 156204 +192550 3300 226 +192549 3300 232694 +192548 3300 1119490 +192547 3300 422973 +192546 3300 14726 +192545 3300 179 +192544 3300 134590 +192543 3300 235 +192542 3300 384490 +192540 3300 266 +192537 3300 142403 +192536 3300 228 +192535 3300 1305108 +192534 3300 150677 +192533 3300 1798804 +192531 3300 487435 +192528 3300 449 +192525 3300 90281 +192511 3299 284724 +192510 3299 529259 +192509 3299 10852091 +192508 3299 2319266 +192507 3299 265518 +192506 3299 743 +192505 3299 1099928 +192504 3299 46845 +192503 3299 6576436 +192502 3299 28529 +192501 3299 38806 +192500 3299 1599463 +192499 3299 761277 +192497 3299 458974 +192496 3299 9324776 +192495 3299 862 +192494 3299 91694 +192493 3299 881 +192492 3299 602584 +192491 3299 233421 +192490 3299 1760 +192489 3299 108887 +192488 3299 1777 +192487 3299 49224 +192486 3299 1418 +192485 3299 57664 +192484 3299 1073 +192483 3299 49260 +192482 3299 1372 +192481 3299 71051 +192480 3299 1650 +192479 3299 169028 +192478 3299 983 +192477 3299 18930 +192476 3299 1039522 +192475 3299 746 +192471 3299 1175517 +192468 3299 445469 +192467 3299 289149 +192466 3299 597 +192465 3299 443 +192464 3299 466 +192463 3299 442 +192462 3299 447 +192461 3299 379953 +192460 3299 75550 +192459 3299 478 +192458 3299 453 +192457 3299 29849 +192456 3299 450 +192455 3299 474 +192454 3299 909 +192453 3299 810454 +192452 3299 12281 +192451 3299 142124 +192450 3299 467 +192449 3299 469 +192448 3299 444 +192447 3299 642609 +192445 3299 261063 +192442 3299 466 +192439 3299 90208 +192436 3299 861 +192435 3299 1438450 +192417 3298 107756 +192416 3298 53412 +192415 3298 238294 +192414 3298 15980 +192410 3298 115919 +192409 3298 1132 +192408 3298 109725 +192407 3298 1103 +192406 3298 110959 +192405 3298 1128 +192404 3298 121187 +192403 3298 1216 +192401 3298 90363 +192400 3298 324604 +192399 3298 558 +192398 3298 139979 +192390 3297 449 +192387 3297 90246 +192379 3296 1940734 +192378 3296 781511 +192377 3296 710 +192376 3296 731934 +192375 3296 32354 +192374 3296 155479 +192373 3296 826 +192372 3296 130243 +192371 3296 789 +192370 3296 28721 +192369 3296 583 +192368 3296 40335 +192367 3296 594 +192366 3296 3441 +192365 3296 5468 +192364 3296 578 +192363 3296 9168 +192362 3296 573 +192361 3296 23956 +192360 3296 567 +192359 3296 247586 +192358 3296 871 +192357 3296 957 +192349 3296 5172873 +192348 3296 1357654 +192347 3296 718948 +192346 3296 566 +192345 3296 1139 +192344 3296 76810 +192342 3296 86802 +192339 3296 453 +192336 3296 90344 +192283 3295 453 +192280 3295 90307 +192271 3294 90330 +192264 3293 327846 +192259 3293 330885 +192258 3293 80988 +192257 3293 453 +192255 3293 90392 +192254 3293 840135 +192253 3293 148 +192246 3292 585180 +192245 3292 472 +192244 3292 1510839 +192242 3292 389250 +192239 3292 435 +192236 3292 90229 +192229 3291 466 +192226 3291 90251 +192216 3290 90313 +192213 3289 90223 +192205 3288 2309032 +192202 3288 432648 +192201 3288 920704 +192200 3288 196153 +192199 3288 1174522 +192198 3288 461 +192197 3288 1161279 +192196 3288 44570 +192195 3288 460 +192194 3288 950847 +192193 3288 1879 +192192 3288 1705945 +192190 3288 290515 +192187 3288 449 +192184 3288 90290 +192177 3287 2712483 +192176 3287 15237 +192175 3287 113 +192174 3287 396418 +192173 3287 590 +192172 3287 823885 +192171 3287 1402347 +192166 3287 352247 +192164 3287 464 +192161 3287 90414 +192155 3287 8388542 +192141 3286 251027 +192140 3286 978769 +192139 3286 366 +192136 3286 398232 +192133 3286 15466 +192132 3286 586 +192131 3286 237 +192130 3286 586 +192129 3286 329 +192128 3286 691258 +192127 3286 32777 +192125 3286 682783 +192121 3286 281494 +192120 3286 225758 +192119 3286 1158224 +192117 3286 748359 +192115 3286 103297 +192112 3286 468 +192109 3286 90258 +192102 3285 11384 +192095 3285 1702799 +192087 3285 111542 +192086 3285 1113 +192083 3285 112231 +192082 3285 1160 +192079 3285 814 +192078 3285 839 +192077 3285 839 +192075 3285 616731 +192074 3285 614 +192073 3285 2521458 +192072 3285 222356 +192067 3285 458102 +192066 3285 22821 +192065 3285 457 +192062 3285 90312 +192050 3284 5497380 +192048 3284 209622 +192019 3283 90330 +192018 3282 813808 +192017 3280 382004 +192004 3279 1724906 +192003 3279 1954823 +192000 3279 49887 +191996 3279 450140 +191995 3279 447 +191992 3279 90328 +191991 3277 462 +191988 3277 90249 +191987 3276 21597 +191973 3276 777856 +191971 3276 643995 +191970 3275 40853 +191969 3274 3130901 +191967 3274 680 +191965 3274 1337707 +191964 3274 207773 +191963 3274 1656987 +191962 3274 460 +191961 3274 92137 +191960 3274 2830095 +191853 3273 45792 +191851 3273 1276915 +191850 3273 448 +191849 3273 1058716 +191848 3273 936649 +191846 3273 324652 +191841 3273 90290 +191840 3273 458 +191825 3273 85130 +191821 3273 1012 +191752 3272 111313 +191751 3272 1591020 +191750 3272 174 +191745 3272 377263 +191744 3272 457 +191742 3272 206992 +191741 3271 2855 +191740 3271 706572 +191735 3271 3331354 +191734 3271 574 +191733 3271 4397373 +191732 3271 269652 +191731 3270 1753617 +191719 3269 1603424 +191718 3269 215676 +191717 3269 2590580 +191716 3269 453 +191715 3269 3110260 +191714 3269 343016 +191709 3269 227939 +191705 3269 467 +191702 3269 90278 +191701 3269 31328 +191700 3269 1140272 +191699 3268 4719144 +191698 3267 2095660 +191697 3267 3052000 +191600 3266 111687 +191599 3266 1510731 +191598 3266 1097 +191594 3266 7289 +191593 3266 563900 +191592 3266 687370 +191591 3266 87945 +191590 3266 116310 +191587 3266 342935 +191585 3266 1332311 +191578 3266 128661 +191576 3266 2197225 +191573 3266 484 +191571 3266 90318 +191556 3265 2310 +191555 3265 3066 +191554 3265 339802 +191551 3265 2439840 +191549 3265 595212 +191548 3265 439894 +191547 3265 44302 +191543 3265 166 +191539 3265 798285 +191535 3265 260 +191532 3265 231 +191527 3265 959936 +191524 3265 357 +191523 3265 357 +191521 3265 210896 +191519 3265 458 +191514 3265 90544 +191513 3265 5668194 +191512 3265 20519684 +191511 3265 56763 +191509 3265 279 +191508 3265 243 +191506 3265 214 +191505 3265 591 +191487 3264 448 +191485 3264 332892 +191484 3264 184 +191483 3264 184 +191480 3264 447 +191477 3264 90289 +191475 3263 5166938 +191466 3262 449 +191463 3262 90337 +191462 3262 1338 +191451 3261 887639 +191450 3261 451593 +191449 3261 45768 +191448 3261 1547319 +191447 3261 587528 +191446 3261 214 +191445 3261 65667 +191443 3261 329723 +191440 3261 467 +191439 3261 464 +191435 3261 188045 +191433 3261 90345 +191388 3259 1178673 +191383 3259 260652 +191382 3259 466 +191381 3259 104806 +191380 3259 4589382 +191376 3259 427603 +191375 3259 467 +191372 3259 90244 +191360 3254 3710605 +191359 3254 1288746 +191344 3253 332934 +191343 3253 239622 +191340 3253 267152 +191337 3253 312079 +191336 3253 462 +191329 3253 388285 +191328 3253 90333 +191327 3253 11906 +191324 3253 449 +191309 3252 2195246 +191307 3252 270967 +191306 3252 184 +191303 3252 449 +191300 3252 90297 +191275 3250 2779061 +191274 3250 123964 +191272 3250 473 +191266 3250 16713 +191265 3250 5512 +191263 3250 100527 +191262 3250 49597 +191259 3250 90456 +191258 3250 181493 +191248 3249 697798 +191247 3249 262129 +191245 3249 190486 +191244 3249 1498588 +191242 3249 349878 +191241 3249 24437 +191240 3249 812 +191239 3249 812 +191238 3249 576 +191237 3249 544 +191236 3249 470 +191235 3249 510 +191234 3249 477738 +191232 3249 905801 +191231 3249 164744 +191230 3249 208480 +191229 3249 586031 +191227 3249 411924 +191226 3249 31261 +191225 3249 16741 +191224 3249 1670355 +191222 3249 386591 +191218 3249 51215 +191217 3249 510058 +191216 3249 63897 +191215 3249 461 +191212 3249 90257 +191211 3246 524 +191210 3246 636571 +191208 3246 273264 +191207 3246 203077 +191206 3246 848421 +191205 3246 2507779 +191204 3246 585477 +191203 3246 1968 +191199 3245 386551 +191198 3245 627349 +191163 3244 1333415 +191159 3244 411509 +191158 3244 460 +191153 3244 90291 +191152 3244 851315 +191150 3244 190413 +191149 3243 1853531 +191129 3242 189204 +191128 3242 23277 +191126 3242 314 +191121 3242 321610 +191120 3242 214 +191119 3242 77436 +191118 3242 73905 +191114 3242 548920 +191110 3242 897905 +191105 3242 579265 +191104 3242 455 +191101 3242 90307 +191100 3241 333547 +191099 3241 62353 +191083 3240 239728 +191082 3240 170 +191081 3240 34651 +191079 3240 191429 +191076 3240 450 +191075 3240 34478 +191074 3240 454 +191073 3240 39494 +191072 3240 69366 +191071 3240 42648 +191068 3240 90290 +191066 3240 1529664 +191065 3240 31605 +191064 3240 5358 +191063 3240 192797 +191062 3240 595933 +191059 3240 46693 +191041 3239 90359 +191032 3238 3267690 +191031 3238 101377 +191022 3238 290961 +191021 3238 462 +191018 3238 90438 +190984 3236 440620 +190983 3236 1222859 +190981 3236 3357920 +190980 3236 477 +190979 3236 177980 +190975 3236 125811 +190974 3236 1797584 +190973 3236 54672 +190972 3236 49266 +190970 3236 180784 +190969 3236 569777 +190968 3236 284183 +190967 3236 2184 +190966 3236 14704 +190965 3236 4299 +190963 3236 182 +190962 3236 1576758 +190961 3236 2474728 +190960 3236 3032912 +190955 3236 735985 +190953 3236 461 +190950 3236 90309 +190949 3236 668497 +190947 3236 31589 +190946 3235 354165 +190945 3235 269531 +190944 3235 440365 +190920 3233 90267 +190919 3233 664675 +190918 3233 294 +190917 3233 495 +190916 3233 349 +190905 3232 36696 +190904 3232 978609 +190903 3232 174720 +190902 3232 30466 +190898 3232 2148663 +190897 3232 117736 +190895 3232 324538 +190894 3232 88655 +190893 3232 3428 +190892 3232 275 +190879 3232 1251241 +190870 3232 328737 +190867 3232 19198 +190866 3232 84583 +190864 3232 161706 +190861 3232 456 +190858 3232 90306 +190857 3232 794 +190856 3232 954 +190848 3231 643901 +190844 3231 347080 +190843 3231 475 +190842 3231 455 +190839 3231 90302 +190838 3230 801152 +190837 3230 127083 +190836 3230 1102 +190835 3230 118143 +190834 3230 1133 +190822 3229 192614 +190821 3229 114160 +190819 3229 93040 +190818 3229 98233 +190815 3229 414619 +190813 3229 475 +190810 3229 90337 +190714 3226 700008 +190712 3226 224881 +190709 3226 471 +190706 3226 90353 +190705 3226 240120 +190696 3225 446 +190693 3225 90296 +190685 3223 519289 +190683 3223 296351 +190680 3223 449 +190676 3223 90398 +190675 3222 6021537 +190674 3222 1423325 +190673 3221 1657927 +190672 3221 165558 +190671 3221 106316 +190670 3221 2834347 +190669 3221 125473 +190668 3221 1042 +190667 3221 49131 +190666 3221 103694 +190665 3221 1036 +190656 3220 451 +190655 3220 60732 +190654 3220 49850 +190653 3220 452 +190652 3220 70785 +190649 3220 90348 +190648 3220 341418 +190646 3219 602 +190645 3219 661786 +190644 3219 376661 +190643 3218 48106 +190642 3218 24800 +190641 3218 1544754 +190640 3218 96894 +190639 3218 31360 +190630 3217 26392 +190629 3217 484171 +190628 3217 172280 +190627 3217 2448197 +190626 3217 1102909 +190622 3216 18773072 +190621 3216 22242242 +190620 3216 737082 +190602 3215 10562971 +190601 3215 169434 +190598 3215 65775 +190595 3215 569777 +190594 3215 173183 +190585 3214 1570273 diff --git a/ANALYSIS/macros/recPass0.C b/ANALYSIS/macros/recPass0.C index a6d0105cc89..a220b1a6150 100644 --- a/ANALYSIS/macros/recPass0.C +++ b/ANALYSIS/macros/recPass0.C @@ -1,43 +1,43 @@ -// -// rec.C to be used for pass0 -// - -void rec(const char *filename="raw.root",Int_t nevents=-1) -{ - // Load some system libs for Grid and monitoring - // Set the CDB storage location - AliCDBManager * man = AliCDBManager::Instance(); - man->SetDefaultStorage("raw://"); - - // Reconstruction settings - AliReconstruction rec; - - // Set protection against too many events in a chunk (should not happen) - if (nevents>0) rec.SetEventRange(0,nevents); - - // Switch off HLT until the problem with schema evolution resolved - //rec.SetRunReconstruction("ALL-HLT"); - // - // QA options - // - AliQAManager *qam = AliQAManager::QAManager(AliQAv1::kRECMODE) ; - rec.SetRunQA(":"); - rec.SetRunGlobalQA(kFALSE); - - // AliReconstruction settings - rec.SetWriteESDfriend(kTRUE); - rec.SetWriteAlignmentData(); - rec.SetInput(filename); - rec.SetUseTrackingErrorsForAlignment("ITS"); - rec.SetRunReconstruction("ITS TPC TRD TOF"); - rec.SetFillESD("ITS TPC TRD TOF"); - - // switch off cleanESD - rec.SetCleanESD(kFALSE); - - AliLog::Flush(); - rec.Run(); - -} - - +// +// rec.C to be used for pass0 +// + +void rec(const char *filename="raw.root",Int_t nevents=-1) +{ + // Load some system libs for Grid and monitoring + // Set the CDB storage location + AliCDBManager * man = AliCDBManager::Instance(); + man->SetDefaultStorage("raw://"); + + // Reconstruction settings + AliReconstruction rec; + + // Set protection against too many events in a chunk (should not happen) + if (nevents>0) rec.SetEventRange(0,nevents); + + // Switch off HLT until the problem with schema evolution resolved + //rec.SetRunReconstruction("ALL-HLT"); + // + // QA options + // + AliQAManager *qam = AliQAManager::QAManager(AliQAv1::kRECMODE) ; + rec.SetRunQA(":"); + rec.SetRunGlobalQA(kFALSE); + + // AliReconstruction settings + rec.SetWriteESDfriend(kTRUE); + rec.SetWriteAlignmentData(); + rec.SetInput(filename); + rec.SetUseTrackingErrorsForAlignment("ITS"); + rec.SetRunReconstruction("ITS TPC TRD TOF"); + rec.SetFillESD("ITS TPC TRD TOF"); + + // switch off cleanESD + rec.SetCleanESD(kFALSE); + + AliLog::Flush(); + rec.Run(); + +} + + diff --git a/EVE/hlt-macros/od.C b/EVE/hlt-macros/od.C index fc619777a10..362f07f8060 100644 --- a/EVE/hlt-macros/od.C +++ b/EVE/hlt-macros/od.C @@ -1,401 +1,401 @@ -//-*- Mode: C++ -*- - -// ** USED macros : -// *************************************************** -// - hlt_alieve_init.C -// - VizDB_scan.C -// - geom_gentle_hlt.C -// - geom_gentle_muon.C -// *************************************************** - -#if !defined(__CINT__) || defined(__MAKECINT__) - -//****************** ROOT ****************************************** -#include "TRandom.h" -#include "TVirtualPad.h" -#include "TGLViewer.h" -#include "TThread.h" -#include "TGFileBrowser.h" -#include "TStyle.h" -#include "TList.h" -#include "TDirectory.h" -#include "TFile.h" -#include "TH2.h" -#include "TCanvas.h" -#include "TColor.h" -#include "TVector3.h" - -//****************** ROOT/EVE ************************************** -#include "TEveManager.h" - -#include "AliEveHOMERManager.h" -#include "AliEveHLTEventManager.h" -#include "geom_gentle_hlt.C" - -//*************************************************************** -#include "HLT/rec/AliHLTReconstructor.h" - - - -#endif - - - -// ----------------------------------------------------------------- -// -- Geometry / Scenes -- -// ----------------------------------------------------------------- - -TEveGeoShape *gGeomGentle = 0; -TEveGeoShape *gGeomGentleRPhi = 0; -TEveGeoShape *gGeomGentleRhoZ = 0; -TEveGeoShape *gGeomGentleTRD = 0; -TEveGeoShape *gGeomGentleMUON = 0; - -TEveScene *gRPhiGeomScene = 0; -TEveScene *gRhoZGeomScene = 0; -TEveScene *gRPhiEventScene = 0; -TEveScene *gRhoZEventScene = 0; - -TEveProjectionManager *gRPhiMgr = 0; -TEveProjectionManager *gRhoZMgr = 0; - -TEveViewer *g3DView = 0; -TEveViewer *gRPhiView = 0; -TEveViewer *gRhoZView = 0; - -// ----------------------------------------------------------------- -// -- Geometry / Scenes Parameters -- -// ----------------------------------------------------------------- - -// -- Parameters to show different geometries -Bool_t gShowMUON = kTRUE; -Bool_t gShowMUONRPhi = kFALSE; -Bool_t gShowMUONRhoZ = kTRUE; -Bool_t gShowTRD = kFALSE; - - -// -- HOMERManager -AliEveHOMERManager* gHomerManager = 0; -AliEveHLTEventManager* geventManager = 0; - -// -- Geometry Manager -TGeoManager* gGeoManager = 0; - - -//Container for gGeoManager till it is broken -TGeoManager *fGeoManager = 0; -// ----------------------------------------------------------------- -// -- Methods -- -// ----------------------------------------------------------------- - -Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ); - -void writeToFile(); - - -// ################################################################# -// ################################################################# -// ################################################################# - -// ----------------------------------------------------------------- -void od ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) { - - // -- Loading Geometry - // --------------------- - Int_t run = 0; - AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - AliCDBManager::Instance()->SetRun(run); - AliGeomManager::LoadGeometry(); - // The default in the simulation is the following line - // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG)); - // However for the current setting of +ve L3 and +ve Dipole magnetic field - // the following setting creates the field close to real field with currect polarity - if(showMuon) - TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG)); - - // Get the pointer to gGeoManager before it's broken (bug in alieve) - fGeoManager = gGeoManager; - - // -- Initialize pointsets and add macros - // ---------------------------------------- - //TEveUtil::LoadMacro("hlt_alieve_init.C"); - //hlt_alieve_init(".", -1); - - // -- Initialize Eve - // ------------------- - cout << "Initializing the EVE viewer"<ProcessEvents(); - gEve->Redraw3D(kTRUE); - - // -- Create new hM object - // ------------------------- - - cout << "Creating the Event Manager"<SetShowMuon(showMuon); - gEventManager->SetEveManager(gEve); - gEventManager->SetGeoManager(gGeoManager); - gEventManager->SetRPhiManager(gRPhiMgr); - gEventManager->SetRPhiEventScene(gRPhiEventScene); - gEventManager->SetRPhiViewer(gRPhiView); - gEventManager->SetRhoZManager(gRhoZMgr); - gEventManager->SetRhoZEventScene(gRhoZEventScene); - gEventManager->SetRhoZViewer(gRhoZView); - - //gEventManager->SetBarrelFlag(showBarrel); - //gEventManager->SetMuonFlag(showMuon); - - // Int_t iResult = gHomerManager->Initialize(); - // if (iResult) { - // printf("Error Initializing AliHLTHOMERManager, quitting"); - // return; - // } - - // gEventManager->SetHomerManager(gHomerManager); - - // -- Add hM to EveTree - // ---------------------- - //gEve->AddToListTree(gHomerManager, kTRUE); - gEve->AddToListTree(gEventManager, kTRUE); - - // -- Create SourceList - // ---------------------- - // iResult = gHomerManager->CreateEveSourcesListLoop(); - // if (iResult) { - // printf ("Couldn't find active services. Giving up. \n"); - // return; - // } - - - // if ( showBarrel ) { - // gHomerManager->ConnectEVEtoHOMER("TPC" ); - // } else if ( MUONMode ) { - // gHomerManager->ConnectEVEtoHOMER("MUON"); - // } else if( TRDMode ) { - // gHomerManager->ConnectEVEtoHOMER("TRD"); - // } else { - // cout<<" No detectors selected, nothing will be displayed"<GetBrowser(); - browser->ShowCloseTab(kFALSE); - - // -- Disable extra geometry - // --------------------------- - if (!showMuon) - gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE; - - // -- Load Geometry - // ------------------ - TEveUtil::LoadMacro("geom_gentle_hlt.C"); - gGeomGentle = geom_gentle_hlt(); - gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy(); - gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy(); - gGeomGentleTRD = geom_gentle_trd(); - - gGeoManager = fGeoManager; - - gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1"); - - TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode); - emcal_re->SetVisLevel(1); - // emcal_re->FirstChild()->Dump(); - - // for(Int_t i = 4; i < 11; i++) { - // emcal_re->FindChild(Form("SMOD_%d", i))->SetRnrState(kFALSE); - // } - // emcal_re->FindChild("SM10_1")->SetRnrState(kFALSE); - // emcal_re->FindChild("SM10_2")->SetRnrState(kFALSE); - - - - gEve->AddGlobalElement(emcal_re); - gEve->Redraw3D(); - - if (gShowMUON) - gGeomGentleMUON = geom_gentle_muon(kFALSE); - - // -- Scenes - // ----------- - gRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry", - "Scene holding projected geometry for the RPhi view."); - gRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry", - "Scene holding projected geometry for the RhoZ view."); - gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data", - "Scene holding projected geometry for the RPhi view."); - gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data", - "Scene holding projected geometry for the RhoZ view."); - - // -- Projection managers - // ------------------------ - - gRPhiMgr = new TEveProjectionManager(); - gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi); - gEve->AddToListTree(gRPhiMgr, kFALSE); - { - TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr); - a->SetMainColor(kWhite); - a->SetTitle("R-Phi"); - a->SetTitleSize(0.05); - a->SetTitleFont(102); - a->SetLabelSize(0.025); - a->SetLabelFont(102); - gRPhiGeomScene->AddElement(a); - } - gRPhiMgr->SetCurrentDepth(-10); - gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene); - gRPhiMgr->SetCurrentDepth(0); - gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene); - if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene); - - gRhoZMgr = new TEveProjectionManager(); - gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ); - gEve->AddToListTree(gRhoZMgr, kFALSE); - { - TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr); - a->SetMainColor(kWhite); - a->SetTitle("Rho-Z"); - a->SetTitleSize(0.05); - a->SetTitleFont(102); - a->SetLabelSize(0.025); - a->SetLabelFont(102); - gRhoZGeomScene->AddElement(a); - } - gRhoZMgr->SetCurrentDepth(-10); - gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene); - gRhoZMgr->SetCurrentDepth(0); - gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene); - - if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene); - - // -- Viewers - // ------------ - - TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight()); - TEveWindowPack *pack = slot->MakePack(); - pack->SetElementName("Multi View"); - pack->SetHorizontal(); - pack->SetShowTitleBar(kFALSE); - pack->NewSlot()->MakeCurrent(); - g3DView = gEve->SpawnNewViewer("3D View", ""); - g3DView->AddScene(gEve->GetGlobalScene()); - g3DView->AddScene(gEve->GetEventScene()); - - - pack = pack->NewSlot()->MakePack(); - pack->SetShowTitleBar(kFALSE); - pack->NewSlot()->MakeCurrent(); - gRPhiView = gEve->SpawnNewViewer("RPhi View", ""); - gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); - gRPhiView->AddScene(gRPhiGeomScene); - gRPhiView->AddScene(gRPhiEventScene); - - pack->NewSlot()->MakeCurrent(); - gRhoZView = gEve->SpawnNewViewer("RhoZ View", ""); - gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); - gRhoZView->AddScene(gRhoZGeomScene); - gRhoZView->AddScene(gRhoZEventScene); - - - - //Add HLT Text to windows - - TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(), "HLT", 0, 20, 110, 60); - ob1->SetAlphaValues(0.8, 0.8); - // cout << "color" << ob1->GetBackColor() << endl; - //ob1->SetBackColor(8421631); - //ob1->SetBackColor(10492431); - TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(), "ALICE", 0, 0, 110, 20); - ob2->SetAlphaValues(0.8, 0.8); - //ob2->SetBackColor(0.2); - TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "HLT", 0, 20, 110, 60); - ob3->SetAlphaValues(0.8, 0.8); - TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "ALICE", 0, 0, 110, 20); - ob4->SetAlphaValues(0.8, 0.8); - - - TGLOverlayButton *ne = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "Next Event", 110, 0, 210, 20); - ne->SetAlphaValues(0.0, 0.8); - - // -- List of Viewers - // -------------------- - - TEveViewerList *viewerlist = new TEveViewerList(); - viewerlist->AddElement(gEve->GetDefaultViewer()); - - viewerlist->AddElement(g3DView); - viewerlist->AddElement(gRhoZView); - viewerlist->AddElement(gRPhiView); - viewerlist->SwitchColorSet(); - - //============================================================================== - // -- Macros / QA histograms - //============================================================================== - - // -- Registration of per-event macros - // ------------------------------------- - - AliEveMacroExecutor *exec = new AliEveMacroExecutor(); - - - - gStyle->SetPalette(1, 0); - gStyle->SetOptFit(1); - - - - return 0; -} - -//**************************************************************************** -void writeToFile(){ - - TList * bList = gHomerManager->GetBlockList(); - if(bList){ - TFile * file = TFile::Open(Form("Event_0x%016X_ITS.root", gHomerManager->GetEventID()), "RECREATE"); - bList->Write("blockList", TObject::kSingleKey); - file->Close(); - } - - bList = gHomerManager->GetAsyncBlockList(); - if(bList){ - TFile * afile = TFile::Open(Form("Event_0x%016X_Async.root", gHomerManager->GetEventID()), "RECREATE"); - bList->Write("blockList", TObject::kSingleKey); - afile->Close(); - } -} - - - - +//-*- Mode: C++ -*- + +// ** USED macros : +// *************************************************** +// - hlt_alieve_init.C +// - VizDB_scan.C +// - geom_gentle_hlt.C +// - geom_gentle_muon.C +// *************************************************** + +#if !defined(__CINT__) || defined(__MAKECINT__) + +//****************** ROOT ****************************************** +#include "TRandom.h" +#include "TVirtualPad.h" +#include "TGLViewer.h" +#include "TThread.h" +#include "TGFileBrowser.h" +#include "TStyle.h" +#include "TList.h" +#include "TDirectory.h" +#include "TFile.h" +#include "TH2.h" +#include "TCanvas.h" +#include "TColor.h" +#include "TVector3.h" + +//****************** ROOT/EVE ************************************** +#include "TEveManager.h" + +#include "AliEveHOMERManager.h" +#include "AliEveHLTEventManager.h" +#include "geom_gentle_hlt.C" + +//*************************************************************** +#include "HLT/rec/AliHLTReconstructor.h" + + + +#endif + + + +// ----------------------------------------------------------------- +// -- Geometry / Scenes -- +// ----------------------------------------------------------------- + +TEveGeoShape *gGeomGentle = 0; +TEveGeoShape *gGeomGentleRPhi = 0; +TEveGeoShape *gGeomGentleRhoZ = 0; +TEveGeoShape *gGeomGentleTRD = 0; +TEveGeoShape *gGeomGentleMUON = 0; + +TEveScene *gRPhiGeomScene = 0; +TEveScene *gRhoZGeomScene = 0; +TEveScene *gRPhiEventScene = 0; +TEveScene *gRhoZEventScene = 0; + +TEveProjectionManager *gRPhiMgr = 0; +TEveProjectionManager *gRhoZMgr = 0; + +TEveViewer *g3DView = 0; +TEveViewer *gRPhiView = 0; +TEveViewer *gRhoZView = 0; + +// ----------------------------------------------------------------- +// -- Geometry / Scenes Parameters -- +// ----------------------------------------------------------------- + +// -- Parameters to show different geometries +Bool_t gShowMUON = kTRUE; +Bool_t gShowMUONRPhi = kFALSE; +Bool_t gShowMUONRhoZ = kTRUE; +Bool_t gShowTRD = kFALSE; + + +// -- HOMERManager +AliEveHOMERManager* gHomerManager = 0; +AliEveHLTEventManager* geventManager = 0; + +// -- Geometry Manager +TGeoManager* gGeoManager = 0; + + +//Container for gGeoManager till it is broken +TGeoManager *fGeoManager = 0; +// ----------------------------------------------------------------- +// -- Methods -- +// ----------------------------------------------------------------- + +Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ); + +void writeToFile(); + + +// ################################################################# +// ################################################################# +// ################################################################# + +// ----------------------------------------------------------------- +void od ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) { + + // -- Loading Geometry + // --------------------- + Int_t run = 0; + AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + AliCDBManager::Instance()->SetRun(run); + AliGeomManager::LoadGeometry(); + // The default in the simulation is the following line + // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG)); + // However for the current setting of +ve L3 and +ve Dipole magnetic field + // the following setting creates the field close to real field with currect polarity + if(showMuon) + TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG)); + + // Get the pointer to gGeoManager before it's broken (bug in alieve) + fGeoManager = gGeoManager; + + // -- Initialize pointsets and add macros + // ---------------------------------------- + //TEveUtil::LoadMacro("hlt_alieve_init.C"); + //hlt_alieve_init(".", -1); + + // -- Initialize Eve + // ------------------- + cout << "Initializing the EVE viewer"<ProcessEvents(); + gEve->Redraw3D(kTRUE); + + // -- Create new hM object + // ------------------------- + + cout << "Creating the Event Manager"<SetShowMuon(showMuon); + gEventManager->SetEveManager(gEve); + gEventManager->SetGeoManager(gGeoManager); + gEventManager->SetRPhiManager(gRPhiMgr); + gEventManager->SetRPhiEventScene(gRPhiEventScene); + gEventManager->SetRPhiViewer(gRPhiView); + gEventManager->SetRhoZManager(gRhoZMgr); + gEventManager->SetRhoZEventScene(gRhoZEventScene); + gEventManager->SetRhoZViewer(gRhoZView); + + //gEventManager->SetBarrelFlag(showBarrel); + //gEventManager->SetMuonFlag(showMuon); + + // Int_t iResult = gHomerManager->Initialize(); + // if (iResult) { + // printf("Error Initializing AliHLTHOMERManager, quitting"); + // return; + // } + + // gEventManager->SetHomerManager(gHomerManager); + + // -- Add hM to EveTree + // ---------------------- + //gEve->AddToListTree(gHomerManager, kTRUE); + gEve->AddToListTree(gEventManager, kTRUE); + + // -- Create SourceList + // ---------------------- + // iResult = gHomerManager->CreateEveSourcesListLoop(); + // if (iResult) { + // printf ("Couldn't find active services. Giving up. \n"); + // return; + // } + + + // if ( showBarrel ) { + // gHomerManager->ConnectEVEtoHOMER("TPC" ); + // } else if ( MUONMode ) { + // gHomerManager->ConnectEVEtoHOMER("MUON"); + // } else if( TRDMode ) { + // gHomerManager->ConnectEVEtoHOMER("TRD"); + // } else { + // cout<<" No detectors selected, nothing will be displayed"<GetBrowser(); + browser->ShowCloseTab(kFALSE); + + // -- Disable extra geometry + // --------------------------- + if (!showMuon) + gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE; + + // -- Load Geometry + // ------------------ + TEveUtil::LoadMacro("geom_gentle_hlt.C"); + gGeomGentle = geom_gentle_hlt(); + gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy(); + gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy(); + gGeomGentleTRD = geom_gentle_trd(); + + gGeoManager = fGeoManager; + + gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1"); + + TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode); + emcal_re->SetVisLevel(1); + // emcal_re->FirstChild()->Dump(); + + // for(Int_t i = 4; i < 11; i++) { + // emcal_re->FindChild(Form("SMOD_%d", i))->SetRnrState(kFALSE); + // } + // emcal_re->FindChild("SM10_1")->SetRnrState(kFALSE); + // emcal_re->FindChild("SM10_2")->SetRnrState(kFALSE); + + + + gEve->AddGlobalElement(emcal_re); + gEve->Redraw3D(); + + if (gShowMUON) + gGeomGentleMUON = geom_gentle_muon(kFALSE); + + // -- Scenes + // ----------- + gRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry", + "Scene holding projected geometry for the RPhi view."); + gRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry", + "Scene holding projected geometry for the RhoZ view."); + gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data", + "Scene holding projected geometry for the RPhi view."); + gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data", + "Scene holding projected geometry for the RhoZ view."); + + // -- Projection managers + // ------------------------ + + gRPhiMgr = new TEveProjectionManager(); + gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi); + gEve->AddToListTree(gRPhiMgr, kFALSE); + { + TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr); + a->SetMainColor(kWhite); + a->SetTitle("R-Phi"); + a->SetTitleSize(0.05); + a->SetTitleFont(102); + a->SetLabelSize(0.025); + a->SetLabelFont(102); + gRPhiGeomScene->AddElement(a); + } + gRPhiMgr->SetCurrentDepth(-10); + gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene); + gRPhiMgr->SetCurrentDepth(0); + gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene); + if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene); + + gRhoZMgr = new TEveProjectionManager(); + gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ); + gEve->AddToListTree(gRhoZMgr, kFALSE); + { + TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr); + a->SetMainColor(kWhite); + a->SetTitle("Rho-Z"); + a->SetTitleSize(0.05); + a->SetTitleFont(102); + a->SetLabelSize(0.025); + a->SetLabelFont(102); + gRhoZGeomScene->AddElement(a); + } + gRhoZMgr->SetCurrentDepth(-10); + gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene); + gRhoZMgr->SetCurrentDepth(0); + gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene); + + if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene); + + // -- Viewers + // ------------ + + TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight()); + TEveWindowPack *pack = slot->MakePack(); + pack->SetElementName("Multi View"); + pack->SetHorizontal(); + pack->SetShowTitleBar(kFALSE); + pack->NewSlot()->MakeCurrent(); + g3DView = gEve->SpawnNewViewer("3D View", ""); + g3DView->AddScene(gEve->GetGlobalScene()); + g3DView->AddScene(gEve->GetEventScene()); + + + pack = pack->NewSlot()->MakePack(); + pack->SetShowTitleBar(kFALSE); + pack->NewSlot()->MakeCurrent(); + gRPhiView = gEve->SpawnNewViewer("RPhi View", ""); + gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + gRPhiView->AddScene(gRPhiGeomScene); + gRPhiView->AddScene(gRPhiEventScene); + + pack->NewSlot()->MakeCurrent(); + gRhoZView = gEve->SpawnNewViewer("RhoZ View", ""); + gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + gRhoZView->AddScene(gRhoZGeomScene); + gRhoZView->AddScene(gRhoZEventScene); + + + + //Add HLT Text to windows + + TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(), "HLT", 0, 20, 110, 60); + ob1->SetAlphaValues(0.8, 0.8); + // cout << "color" << ob1->GetBackColor() << endl; + //ob1->SetBackColor(8421631); + //ob1->SetBackColor(10492431); + TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(), "ALICE", 0, 0, 110, 20); + ob2->SetAlphaValues(0.8, 0.8); + //ob2->SetBackColor(0.2); + TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "HLT", 0, 20, 110, 60); + ob3->SetAlphaValues(0.8, 0.8); + TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "ALICE", 0, 0, 110, 20); + ob4->SetAlphaValues(0.8, 0.8); + + + TGLOverlayButton *ne = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "Next Event", 110, 0, 210, 20); + ne->SetAlphaValues(0.0, 0.8); + + // -- List of Viewers + // -------------------- + + TEveViewerList *viewerlist = new TEveViewerList(); + viewerlist->AddElement(gEve->GetDefaultViewer()); + + viewerlist->AddElement(g3DView); + viewerlist->AddElement(gRhoZView); + viewerlist->AddElement(gRPhiView); + viewerlist->SwitchColorSet(); + + //============================================================================== + // -- Macros / QA histograms + //============================================================================== + + // -- Registration of per-event macros + // ------------------------------------- + + AliEveMacroExecutor *exec = new AliEveMacroExecutor(); + + + + gStyle->SetPalette(1, 0); + gStyle->SetOptFit(1); + + + + return 0; +} + +//**************************************************************************** +void writeToFile(){ + + TList * bList = gHomerManager->GetBlockList(); + if(bList){ + TFile * file = TFile::Open(Form("Event_0x%016X_ITS.root", gHomerManager->GetEventID()), "RECREATE"); + bList->Write("blockList", TObject::kSingleKey); + file->Close(); + } + + bList = gHomerManager->GetAsyncBlockList(); + if(bList){ + TFile * afile = TFile::Open(Form("Event_0x%016X_Async.root", gHomerManager->GetEventID()), "RECREATE"); + bList->Write("blockList", TObject::kSingleKey); + afile->Close(); + } +} + + + + diff --git a/EVE/hlt-macros/off.C b/EVE/hlt-macros/off.C index e3c738e1c85..f49b4e4f855 100644 --- a/EVE/hlt-macros/off.C +++ b/EVE/hlt-macros/off.C @@ -1,426 +1,426 @@ -//-*- Mode: C++ -*- - -// ** USED macros : -// *************************************************** -// - hlt_alieve_init.C -// - VizDB_scan.C -// - geom_gentle_hlt.C -// - geom_gentle_muon.C -// *************************************************** - -#if !defined(__CINT__) || defined(__MAKECINT__) - -//****************** ROOT ****************************************** -#include "TRandom.h" -#include "TVirtualPad.h" -#include "TGLViewer.h" -#include "TThread.h" -#include "TGFileBrowser.h" -#include "TStyle.h" -#include "TList.h" -#include "TDirectory.h" -#include "TFile.h" -#include "TH2.h" -#include "TCanvas.h" -#include "TColor.h" -#include "TVector3.h" - -//****************** ROOT/EVE ************************************** -#include "TEveManager.h" - -#include "AliEveHOMERManager.h" -#include "AliEveHLTEventManagerOffline.h" -#include "geom_gentle_hlt.C" - -//*************************************************************** -#include "HLT/rec/AliHLTReconstructor.h" - - - -#endif - - - -// ----------------------------------------------------------------- -// -- Geometry / Scenes -- -// ----------------------------------------------------------------- - -TEveGeoShape *gGeomGentle = 0; -TEveGeoShape *gGeomGentleRPhi = 0; -TEveGeoShape *gGeomGentleRhoZ = 0; -TEveGeoShape *gGeomGentleTRD = 0; -TEveGeoShape *gGeomGentleMUON = 0; - -TEveScene *gRPhiGeomScene = 0; -TEveScene *gRhoZGeomScene = 0; -TEveScene *gRPhiEventScene = 0; -TEveScene *gRhoZEventScene = 0; - -TEveProjectionManager *gRPhiMgr = 0; -TEveProjectionManager *gRhoZMgr = 0; - -TEveViewer *g3DView = 0; -TEveViewer *gRPhiView = 0; -TEveViewer *gRhoZView = 0; - -// ----------------------------------------------------------------- -// -- Geometry / Scenes Parameters -- -// ----------------------------------------------------------------- - -// -- Parameters to show different geometries -Bool_t gShowMUON = kTRUE; -Bool_t gShowMUONRPhi = kFALSE; -Bool_t gShowMUONRhoZ = kTRUE; -Bool_t gShowTRD = kFALSE; - - -// ----------------------------------------------------------------- -// -- Members -- -// ----------------------------------------------------------------- - -// -- Timer for automatic event loop -TTimer eventTimer; -TTimer eventTimerFast; - -// -- HOMERManager -AliEveHLTEventManagerOffline* geventManager = 0; - -// -- Geometry Manager -TGeoManager* gGeoManager = 0; -AliPHOSGeometry* gPHOSGeom = 0; - -// -- Cluster members -TEvePointSet* gSPDClusters = 0; -TEvePointSet* gSSDClusters = 0; -TEvePointSet* gSDDClusters = 0; -TEvePointSet* gTRDClusters = 0; -TEvePointSetArray* gTRDColClusters = 0; -TEvePointSet* gTPCClusters = 0; -TEvePointSet* gTPCTestClusters = 0; -TEvePointSetArray* gTPCColClusters = 0; -TEveBoxSet* gPHOSBoxSet[5] = {0, 0, 0, 0, 0}; -TEveBoxSet* gEMCALBoxSet[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -TEvePointSet* gMUONClusters = 0; -TEveStraightLineSet* gMUONTracks = 0; - -// -- Text output members -TEveText* gHLTText = 0; - -// -- Tracks members -TEveTrackList* gTPCTrack = 0; - -// -- Canvas for histograms -TCanvas* gTRDCanvas = 0; -TCanvas* gTPCCanvas = 0; -TCanvas* gTPCClustCanvas = 0; -TCanvas* gTRDCalibCanvas = 0; -TCanvas* gTRDEORCanvas = 0; -TCanvas* gPrimVertexCanvas = 0; -TCanvas* gSPDVertexCanvas = 0; -TCanvas* gITSCanvas = 0; -TCanvas* gSSDCanvas0 = 0; -TCanvas* gSSDCanvas1 = 0; -TCanvas* gV0Canvas = 0; -TCanvas* gPHOSCanvas = NULL; -TCanvas* gEMCALCanvas = 0; - -// -- vertex -- -Int_t gSPDVertexHistoCount = 0; - - - -// -- TRD -- -Int_t gTRDHistoCount = 0; -Int_t gTRDEvents = 0; -Int_t gTRDBins = 12; - -// -- TPC -- -Int_t gTPCBins = 15; -TH1F* gTPCCharge = 0; -TH1F* gTPCQMax = 0; -TH1F* gTPCQMaxOverCharge = 0; - -TH1F* gTPCPt = 0; // KK -TH1F* gTPCEta = 0; -TH1F* gTPCPsi = 0; -TH1F* gTPCnClusters = 0; -TH1F* gTPCMult = 0; - -// -- PHOS -- -TEveElementList* gPHOSElementList = 0; -Int_t gPHOSHistoCount =0; -// -- EMCAL -TEveElementList* gEMCALElementList = 0; -TGeoNode* gEMCALNode = 0; -Int_t gEMCALHistoCount =0; - -// --- Flag if eventloop is running -Bool_t gEventLoopStarted = kFALSE; - - - -//Container for gGeoManager till it is broken -TGeoManager *fGeoManager = 0; -// ----------------------------------------------------------------- -// -- Methods -- -// ----------------------------------------------------------------- - -Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ); - -void writeToFile(); - - -// ################################################################# -// ################################################################# -// ################################################################# - -// ----------------------------------------------------------------- -void off ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) { - - // -- Loading Geometry - // --------------------- - Int_t run = 67179; - AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - AliCDBManager::Instance()->SetRun(run); - AliGeomManager::LoadGeometry(); - // The default in the simulation is the following line - // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG)); - // However for the current setting of +ve L3 and +ve Dipole magnetic field - // the following setting creates the field close to real field with currect polarity - if(showMuon) - TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1, AliMagF::k5kG)); - - // Get the pointer to gGeoManager before it's broken (bug in alieve) - fGeoManager = gGeoManager; - - // -- Initialize pointsets and add macros - // ---------------------------------------- - //TEveUtil::LoadMacro("hlt_alieve_init.C"); - //hlt_alieve_init(".", -1); - - // -- Initialize Eve - // ------------------- - initializeEveViewer( showBarrel, showMuon ); - - // -- Reset gGeoManager to the original pointer - // ---------------------------------------------- - - // -- Finalize Eve - // ----------------- - gSystem->ProcessEvents(); - gEve->Redraw3D(kTRUE); - - // -- Create new hM object - // ------------------------- - - gEventManager = new AliEveHLTEventManagerOffline("/home/slindal/alice/data/PbPb/AliESDs.root"); - - gEventManager->SetEveManager(gEve); - gEventManager->SetGeoManager(gGeoManager); - gEventManager->SetRPhiManager(gRPhiMgr); - gEventManager->SetRPhiEventScene(gRPhiEventScene); - gEventManager->SetRPhiViewer(gRPhiView); - gEventManager->SetRhoZManager(gRhoZMgr); - gEventManager->SetRhoZEventScene(gRhoZEventScene); - gEventManager->SetRhoZViewer(gRhoZView); - //gEventManager->SetBarrelFlag(showBarrel); - //gEventManager->SetMuonFlag(showMuon); - - - // -- Add hM to EveTree - // ---------------------- - gEve->AddToListTree(gEventManager, kTRUE); - - // -- Create SourceList - // ---------------------- - - - - gGeoManager = fGeoManager; - - -} - -// ------------------------------------------------------------------------- -Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ) { - - //============================================================================= - // Visualization database - //============================================================================ - - TEveUtil::AssertMacro("VizDB_scan.C"); - - // alieve_vizdb(); - - - - //============================================================================== - // -- Geometry, scenes, projections and viewers - //============================================================================== - - TEveBrowser *browser = gEve->GetBrowser(); - browser->ShowCloseTab(kFALSE); - - // -- Disable extra geometry - // --------------------------- - if (!showMuon) - gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE; - - // -- Load Geometry - // ------------------ - TEveUtil::LoadMacro("geom_gentle_hlt.C"); - gGeomGentle = geom_gentle_hlt(); - gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy(); - gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy(); - gGeomGentleTRD = geom_gentle_trd(); - - gGeoManager = fGeoManager; - - gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1"); - - TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode); - gEve->AddGlobalElement(emcal_re); - gEve->Redraw3D(); - - if (gShowMUON) - gGeomGentleMUON = geom_gentle_muon(kFALSE); - - // -- Scenes - // ----------- - gRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry", - "Scene holding projected geometry for the RPhi view."); - gRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry", - "Scene holding projected geometry for the RhoZ view."); - gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data", - "Scene holding projected geometry for the RPhi view."); - gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data", - "Scene holding projected geometry for the RhoZ view."); - - // -- Projection managers - // ------------------------ - - gRPhiMgr = new TEveProjectionManager(); - gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi); - gEve->AddToListTree(gRPhiMgr, kFALSE); - { - TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr); - a->SetMainColor(kWhite); - a->SetTitle("R-Phi"); - a->SetTitleSize(0.05); - a->SetTitleFont(102); - a->SetLabelSize(0.025); - a->SetLabelFont(102); - gRPhiGeomScene->AddElement(a); - } - gRPhiMgr->SetCurrentDepth(-10); - gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene); - gRPhiMgr->SetCurrentDepth(0); - gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene); - if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene); - - gRhoZMgr = new TEveProjectionManager(); - gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ); - gEve->AddToListTree(gRhoZMgr, kFALSE); - { - TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr); - a->SetMainColor(kWhite); - a->SetTitle("Rho-Z"); - a->SetTitleSize(0.05); - a->SetTitleFont(102); - a->SetLabelSize(0.025); - a->SetLabelFont(102); - gRhoZGeomScene->AddElement(a); - } - gRhoZMgr->SetCurrentDepth(-10); - gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene); - gRhoZMgr->SetCurrentDepth(0); - gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene); - - if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene); - - // -- Viewers - // ------------ - - TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight()); - TEveWindowPack *pack = slot->MakePack(); - pack->SetElementName("Multi View"); - pack->SetHorizontal(); - pack->SetShowTitleBar(kFALSE); - pack->NewSlot()->MakeCurrent(); - g3DView = gEve->SpawnNewViewer("3D View", ""); - g3DView->AddScene(gEve->GetGlobalScene()); - g3DView->AddScene(gEve->GetEventScene()); - - - pack = pack->NewSlot()->MakePack(); - pack->SetShowTitleBar(kFALSE); - pack->NewSlot()->MakeCurrent(); - gRPhiView = gEve->SpawnNewViewer("RPhi View", ""); - gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); - gRPhiView->AddScene(gRPhiGeomScene); - gRPhiView->AddScene(gRPhiEventScene); - - pack->NewSlot()->MakeCurrent(); - gRhoZView = gEve->SpawnNewViewer("RhoZ View", ""); - gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); - gRhoZView->AddScene(gRhoZGeomScene); - gRhoZView->AddScene(gRhoZEventScene); - - - - //Add HLT Text to windows - - TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(), "HLT", 0, 20, 110, 60); - ob1->SetAlphaValues(0.8, 0.8); - // cout << "color" << ob1->GetBackColor() << endl; - //ob1->SetBackColor(8421631); - //ob1->SetBackColor(10492431); - TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(), "ALICE", 0, 0, 110, 20); - ob2->SetAlphaValues(0.8, 0.8); - //ob2->SetBackColor(0.2); - TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "HLT", 0, 20, 110, 60); - ob3->SetAlphaValues(0.8, 0.8); - TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "ALICE", 0, 0, 110, 20); - ob4->SetAlphaValues(0.8, 0.8); - - - TGLOverlayButton *ne = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "Next Event", 110, 0, 210, 20); - ne->SetAlphaValues(0.0, 0.8); - - // -- List of Viewers - // -------------------- - - TEveViewerList *viewerlist = new TEveViewerList(); - viewerlist->AddElement(gEve->GetDefaultViewer()); - - viewerlist->AddElement(g3DView); - viewerlist->AddElement(gRhoZView); - viewerlist->AddElement(gRPhiView); - viewerlist->SwitchColorSet(); - - //============================================================================== - // -- Macros / QA histograms - //============================================================================== - - // -- Registration of per-event macros - // ------------------------------------- - - AliEveMacroExecutor *exec = new AliEveMacroExecutor(); - - - - gStyle->SetPalette(1, 0); - - gStyle->SetOptFit(1); - - - - return 0; -} - - - - - - - +//-*- Mode: C++ -*- + +// ** USED macros : +// *************************************************** +// - hlt_alieve_init.C +// - VizDB_scan.C +// - geom_gentle_hlt.C +// - geom_gentle_muon.C +// *************************************************** + +#if !defined(__CINT__) || defined(__MAKECINT__) + +//****************** ROOT ****************************************** +#include "TRandom.h" +#include "TVirtualPad.h" +#include "TGLViewer.h" +#include "TThread.h" +#include "TGFileBrowser.h" +#include "TStyle.h" +#include "TList.h" +#include "TDirectory.h" +#include "TFile.h" +#include "TH2.h" +#include "TCanvas.h" +#include "TColor.h" +#include "TVector3.h" + +//****************** ROOT/EVE ************************************** +#include "TEveManager.h" + +#include "AliEveHOMERManager.h" +#include "AliEveHLTEventManagerOffline.h" +#include "geom_gentle_hlt.C" + +//*************************************************************** +#include "HLT/rec/AliHLTReconstructor.h" + + + +#endif + + + +// ----------------------------------------------------------------- +// -- Geometry / Scenes -- +// ----------------------------------------------------------------- + +TEveGeoShape *gGeomGentle = 0; +TEveGeoShape *gGeomGentleRPhi = 0; +TEveGeoShape *gGeomGentleRhoZ = 0; +TEveGeoShape *gGeomGentleTRD = 0; +TEveGeoShape *gGeomGentleMUON = 0; + +TEveScene *gRPhiGeomScene = 0; +TEveScene *gRhoZGeomScene = 0; +TEveScene *gRPhiEventScene = 0; +TEveScene *gRhoZEventScene = 0; + +TEveProjectionManager *gRPhiMgr = 0; +TEveProjectionManager *gRhoZMgr = 0; + +TEveViewer *g3DView = 0; +TEveViewer *gRPhiView = 0; +TEveViewer *gRhoZView = 0; + +// ----------------------------------------------------------------- +// -- Geometry / Scenes Parameters -- +// ----------------------------------------------------------------- + +// -- Parameters to show different geometries +Bool_t gShowMUON = kTRUE; +Bool_t gShowMUONRPhi = kFALSE; +Bool_t gShowMUONRhoZ = kTRUE; +Bool_t gShowTRD = kFALSE; + + +// ----------------------------------------------------------------- +// -- Members -- +// ----------------------------------------------------------------- + +// -- Timer for automatic event loop +TTimer eventTimer; +TTimer eventTimerFast; + +// -- HOMERManager +AliEveHLTEventManagerOffline* geventManager = 0; + +// -- Geometry Manager +TGeoManager* gGeoManager = 0; +AliPHOSGeometry* gPHOSGeom = 0; + +// -- Cluster members +TEvePointSet* gSPDClusters = 0; +TEvePointSet* gSSDClusters = 0; +TEvePointSet* gSDDClusters = 0; +TEvePointSet* gTRDClusters = 0; +TEvePointSetArray* gTRDColClusters = 0; +TEvePointSet* gTPCClusters = 0; +TEvePointSet* gTPCTestClusters = 0; +TEvePointSetArray* gTPCColClusters = 0; +TEveBoxSet* gPHOSBoxSet[5] = {0, 0, 0, 0, 0}; +TEveBoxSet* gEMCALBoxSet[13] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +TEvePointSet* gMUONClusters = 0; +TEveStraightLineSet* gMUONTracks = 0; + +// -- Text output members +TEveText* gHLTText = 0; + +// -- Tracks members +TEveTrackList* gTPCTrack = 0; + +// -- Canvas for histograms +TCanvas* gTRDCanvas = 0; +TCanvas* gTPCCanvas = 0; +TCanvas* gTPCClustCanvas = 0; +TCanvas* gTRDCalibCanvas = 0; +TCanvas* gTRDEORCanvas = 0; +TCanvas* gPrimVertexCanvas = 0; +TCanvas* gSPDVertexCanvas = 0; +TCanvas* gITSCanvas = 0; +TCanvas* gSSDCanvas0 = 0; +TCanvas* gSSDCanvas1 = 0; +TCanvas* gV0Canvas = 0; +TCanvas* gPHOSCanvas = NULL; +TCanvas* gEMCALCanvas = 0; + +// -- vertex -- +Int_t gSPDVertexHistoCount = 0; + + + +// -- TRD -- +Int_t gTRDHistoCount = 0; +Int_t gTRDEvents = 0; +Int_t gTRDBins = 12; + +// -- TPC -- +Int_t gTPCBins = 15; +TH1F* gTPCCharge = 0; +TH1F* gTPCQMax = 0; +TH1F* gTPCQMaxOverCharge = 0; + +TH1F* gTPCPt = 0; // KK +TH1F* gTPCEta = 0; +TH1F* gTPCPsi = 0; +TH1F* gTPCnClusters = 0; +TH1F* gTPCMult = 0; + +// -- PHOS -- +TEveElementList* gPHOSElementList = 0; +Int_t gPHOSHistoCount =0; +// -- EMCAL +TEveElementList* gEMCALElementList = 0; +TGeoNode* gEMCALNode = 0; +Int_t gEMCALHistoCount =0; + +// --- Flag if eventloop is running +Bool_t gEventLoopStarted = kFALSE; + + + +//Container for gGeoManager till it is broken +TGeoManager *fGeoManager = 0; +// ----------------------------------------------------------------- +// -- Methods -- +// ----------------------------------------------------------------- + +Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ); + +void writeToFile(); + + +// ################################################################# +// ################################################################# +// ################################################################# + +// ----------------------------------------------------------------- +void off ( Bool_t showBarrel = kTRUE, Bool_t showMuon = kFALSE ) { + + // -- Loading Geometry + // --------------------- + Int_t run = 67179; + AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + AliCDBManager::Instance()->SetRun(run); + AliGeomManager::LoadGeometry(); + // The default in the simulation is the following line + // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1, AliMagF::k5kG)); + // However for the current setting of +ve L3 and +ve Dipole magnetic field + // the following setting creates the field close to real field with currect polarity + if(showMuon) + TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1, AliMagF::k5kG)); + + // Get the pointer to gGeoManager before it's broken (bug in alieve) + fGeoManager = gGeoManager; + + // -- Initialize pointsets and add macros + // ---------------------------------------- + //TEveUtil::LoadMacro("hlt_alieve_init.C"); + //hlt_alieve_init(".", -1); + + // -- Initialize Eve + // ------------------- + initializeEveViewer( showBarrel, showMuon ); + + // -- Reset gGeoManager to the original pointer + // ---------------------------------------------- + + // -- Finalize Eve + // ----------------- + gSystem->ProcessEvents(); + gEve->Redraw3D(kTRUE); + + // -- Create new hM object + // ------------------------- + + gEventManager = new AliEveHLTEventManagerOffline("/home/slindal/alice/data/PbPb/AliESDs.root"); + + gEventManager->SetEveManager(gEve); + gEventManager->SetGeoManager(gGeoManager); + gEventManager->SetRPhiManager(gRPhiMgr); + gEventManager->SetRPhiEventScene(gRPhiEventScene); + gEventManager->SetRPhiViewer(gRPhiView); + gEventManager->SetRhoZManager(gRhoZMgr); + gEventManager->SetRhoZEventScene(gRhoZEventScene); + gEventManager->SetRhoZViewer(gRhoZView); + //gEventManager->SetBarrelFlag(showBarrel); + //gEventManager->SetMuonFlag(showMuon); + + + // -- Add hM to EveTree + // ---------------------- + gEve->AddToListTree(gEventManager, kTRUE); + + // -- Create SourceList + // ---------------------- + + + + gGeoManager = fGeoManager; + + +} + +// ------------------------------------------------------------------------- +Int_t initializeEveViewer( Bool_t showBarrel, Bool_t showMuon ) { + + //============================================================================= + // Visualization database + //============================================================================ + + TEveUtil::AssertMacro("VizDB_scan.C"); + + // alieve_vizdb(); + + + + //============================================================================== + // -- Geometry, scenes, projections and viewers + //============================================================================== + + TEveBrowser *browser = gEve->GetBrowser(); + browser->ShowCloseTab(kFALSE); + + // -- Disable extra geometry + // --------------------------- + if (!showMuon) + gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE; + + // -- Load Geometry + // ------------------ + TEveUtil::LoadMacro("geom_gentle_hlt.C"); + gGeomGentle = geom_gentle_hlt(); + gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy(); + gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy(); + gGeomGentleTRD = geom_gentle_trd(); + + gGeoManager = fGeoManager; + + gEMCALNode = gGeoManager->GetTopVolume()->FindNode("XEN1_1"); + + TEveGeoTopNode* emcal_re = new TEveGeoTopNode(gGeoManager, gEMCALNode); + gEve->AddGlobalElement(emcal_re); + gEve->Redraw3D(); + + if (gShowMUON) + gGeomGentleMUON = geom_gentle_muon(kFALSE); + + // -- Scenes + // ----------- + gRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry", + "Scene holding projected geometry for the RPhi view."); + gRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry", + "Scene holding projected geometry for the RhoZ view."); + gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data", + "Scene holding projected geometry for the RPhi view."); + gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data", + "Scene holding projected geometry for the RhoZ view."); + + // -- Projection managers + // ------------------------ + + gRPhiMgr = new TEveProjectionManager(); + gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi); + gEve->AddToListTree(gRPhiMgr, kFALSE); + { + TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr); + a->SetMainColor(kWhite); + a->SetTitle("R-Phi"); + a->SetTitleSize(0.05); + a->SetTitleFont(102); + a->SetLabelSize(0.025); + a->SetLabelFont(102); + gRPhiGeomScene->AddElement(a); + } + gRPhiMgr->SetCurrentDepth(-10); + gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene); + gRPhiMgr->SetCurrentDepth(0); + gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene); + if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene); + + gRhoZMgr = new TEveProjectionManager(); + gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ); + gEve->AddToListTree(gRhoZMgr, kFALSE); + { + TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr); + a->SetMainColor(kWhite); + a->SetTitle("Rho-Z"); + a->SetTitleSize(0.05); + a->SetTitleFont(102); + a->SetLabelSize(0.025); + a->SetLabelFont(102); + gRhoZGeomScene->AddElement(a); + } + gRhoZMgr->SetCurrentDepth(-10); + gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene); + gRhoZMgr->SetCurrentDepth(0); + gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene); + + if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene); + + // -- Viewers + // ------------ + + TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(browser->GetTabRight()); + TEveWindowPack *pack = slot->MakePack(); + pack->SetElementName("Multi View"); + pack->SetHorizontal(); + pack->SetShowTitleBar(kFALSE); + pack->NewSlot()->MakeCurrent(); + g3DView = gEve->SpawnNewViewer("3D View", ""); + g3DView->AddScene(gEve->GetGlobalScene()); + g3DView->AddScene(gEve->GetEventScene()); + + + pack = pack->NewSlot()->MakePack(); + pack->SetShowTitleBar(kFALSE); + pack->NewSlot()->MakeCurrent(); + gRPhiView = gEve->SpawnNewViewer("RPhi View", ""); + gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + gRPhiView->AddScene(gRPhiGeomScene); + gRPhiView->AddScene(gRPhiEventScene); + + pack->NewSlot()->MakeCurrent(); + gRhoZView = gEve->SpawnNewViewer("RhoZ View", ""); + gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); + gRhoZView->AddScene(gRhoZGeomScene); + gRhoZView->AddScene(gRhoZEventScene); + + + + //Add HLT Text to windows + + TGLOverlayButton *ob1 = new TGLOverlayButton(g3DView->GetGLViewer(), "HLT", 0, 20, 110, 60); + ob1->SetAlphaValues(0.8, 0.8); + // cout << "color" << ob1->GetBackColor() << endl; + //ob1->SetBackColor(8421631); + //ob1->SetBackColor(10492431); + TGLOverlayButton *ob2 = new TGLOverlayButton(g3DView->GetGLViewer(), "ALICE", 0, 0, 110, 20); + ob2->SetAlphaValues(0.8, 0.8); + //ob2->SetBackColor(0.2); + TGLOverlayButton *ob3 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "HLT", 0, 20, 110, 60); + ob3->SetAlphaValues(0.8, 0.8); + TGLOverlayButton *ob4 = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "ALICE", 0, 0, 110, 20); + ob4->SetAlphaValues(0.8, 0.8); + + + TGLOverlayButton *ne = new TGLOverlayButton(gEve->GetDefaultGLViewer(), "Next Event", 110, 0, 210, 20); + ne->SetAlphaValues(0.0, 0.8); + + // -- List of Viewers + // -------------------- + + TEveViewerList *viewerlist = new TEveViewerList(); + viewerlist->AddElement(gEve->GetDefaultViewer()); + + viewerlist->AddElement(g3DView); + viewerlist->AddElement(gRhoZView); + viewerlist->AddElement(gRPhiView); + viewerlist->SwitchColorSet(); + + //============================================================================== + // -- Macros / QA histograms + //============================================================================== + + // -- Registration of per-event macros + // ------------------------------------- + + AliEveMacroExecutor *exec = new AliEveMacroExecutor(); + + + + gStyle->SetPalette(1, 0); + + gStyle->SetOptFit(1); + + + + return 0; +} + + + + + + + diff --git a/EVGEN/AliGenITSULib.cxx b/EVGEN/AliGenITSULib.cxx index 118a3a86116..4d618dc300c 100644 --- a/EVGEN/AliGenITSULib.cxx +++ b/EVGEN/AliGenITSULib.cxx @@ -1,131 +1,131 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - - -// Library class for particle pt and y distributions used for -// ITS Upgrade related signal simulations. -// -// Author: Annalisa Mastroserio -// - -#include -#include -#include -#include - -#include "AliGenITSULib.h" -#include "AliLog.h" - -ClassImp(AliGenITSULib) - - typedef Double_t (*GenFunc) (const Double_t*, const Double_t*); - typedef Int_t (*GenFuncIp) (TRandom *); - - -Double_t AliGenITSULib::PtLcDist( const Double_t *x, const Double_t *) -{ - // pt-distribution - // same shape as the Lb pt distribution for high pt were overestimated. The Lb fitting funcion has been - // used from 3.5 GeV/c on. At smaller Pt, the shape is likely as sqrt(x)*exp(-x) - Double_t par[6]={2.781336,1.353902,4.634330,(145479448.743187/202262270.892062),1.789479,-1.329143}; - Double_t y=0; - if(x[0]<3.5) y= par[3]*(TMath::Power(x[0],par[4]))*TMath::Exp(x[0]*par[5]); - else y= x[0]/TMath::Power((1+TMath::Power(x[0]/par[0],par[1])),par[2]); - return y; -} - - -Double_t AliGenITSULib::PtLbDist( const Double_t *x, const Double_t *) -{ - // pt-distribution (fitted in 0-30 GeV/c) - Double_t par[4]={3.42500e-03,6.18902,1.76908,3.24823}; - return par[0]*x[0]/TMath::Power((1+TMath::Power(x[0]/par[1],par[2])),par[3]); -} - -GenFunc AliGenITSULib::GetPt(Int_t iPID, const char * sForm) const -{ - // Return pointer to Pt parameterisation - AliDebug(1,Form("PID: %i, form: %s \n",iPID,sForm)); - TString type(sForm); - GenFunc func; - - if(type=="FLAT") { - func=PtFlat; - } else if(type=="DIST") { - - switch(TMath::Abs(iPID)) { - - case kLb : func=PtLbDist; break; - case kLc : func=PtLcDist; break; - case kXi_c : func=PtLcDist; break; - case kBplus : func=PtLbDist; break; - case kBzero : func=PtLbDist; break; - case kDs : func=PtLcDist; break; - case kDplus : func=PtLcDist; break; - default : AliError(Form("Unknown particle type: %i, Pt dist is 0",iPID)); func=0; - } - }else { - AliError(Form("Unknown Pt distribution %s. Pt distribution is set to 0 ",sForm)); - func=0; - } - - return func; -} - -GenFunc AliGenITSULib::GetY(Int_t iPID, const char *sForm) const -{ - GenFunc func; - - if(TMath::Abs(iPID) != kLc && TMath::Abs(iPID) != kLb && TMath::Abs(iPID) != kXi_c && TMath::Abs(iPID) != kBplus && TMath::Abs(iPID) != kBzero && TMath::Abs(iPID)!=kDplus && TMath::Abs(iPID)!=kDs) { - AliError(Form("Unknown PID: %i, form: %s, returning 0",iPID,sForm)); ////////// - func=0; - } else { - func = YFlat; - } - return func; -} - -GenFuncIp AliGenITSULib::GetIp(Int_t iPID, const char *sForm) const -{ - AliDebug(1,Form(" %i - %s",iPID,sForm)); - // Return pointer to particle type parameterisation - GenFuncIp id; - - if(TMath::Abs(iPID) != kLc && TMath::Abs(iPID) != kLb && TMath::Abs(iPID) != kXi_c && TMath::Abs(iPID) != kBplus && TMath::Abs(iPID) != kBzero && TMath::Abs(iPID)!=kDplus && TMath::Abs(iPID)!=kDs) { - AliError(Form("Unknown PID: %i, form: %s, return 0",iPID,sForm)); ////////// - id = 0; - } else { - switch (iPID){ - case kLc : return id=IpLcPlus; - case -kLc : return id=IpLcMinus; - case kLb : return id=IpLb; - case -kLb : return id=IpLbBar; - case kXi_c : return id=IpXic; - case -kXi_c : return id=IpXicBar; - case kBplus : return id=IpBPlus; - case kBzero : return id=IpB0; - case -kBzero: return id=IpB0Bar; - case -kBplus: return id=IpBMinus; - case kDs : return id=IpDsPlus; - case -kDs : return id=IpDsMinus; - case kDplus : return id=IpDPlus; - case -kDplus: return id=IpDMinus; - default : AliFatal(Form("Unknown particle type: %i",iPID)); id=0; - } - - } - - return id; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + + +// Library class for particle pt and y distributions used for +// ITS Upgrade related signal simulations. +// +// Author: Annalisa Mastroserio +// + +#include +#include +#include +#include + +#include "AliGenITSULib.h" +#include "AliLog.h" + +ClassImp(AliGenITSULib) + + typedef Double_t (*GenFunc) (const Double_t*, const Double_t*); + typedef Int_t (*GenFuncIp) (TRandom *); + + +Double_t AliGenITSULib::PtLcDist( const Double_t *x, const Double_t *) +{ + // pt-distribution + // same shape as the Lb pt distribution for high pt were overestimated. The Lb fitting funcion has been + // used from 3.5 GeV/c on. At smaller Pt, the shape is likely as sqrt(x)*exp(-x) + Double_t par[6]={2.781336,1.353902,4.634330,(145479448.743187/202262270.892062),1.789479,-1.329143}; + Double_t y=0; + if(x[0]<3.5) y= par[3]*(TMath::Power(x[0],par[4]))*TMath::Exp(x[0]*par[5]); + else y= x[0]/TMath::Power((1+TMath::Power(x[0]/par[0],par[1])),par[2]); + return y; +} + + +Double_t AliGenITSULib::PtLbDist( const Double_t *x, const Double_t *) +{ + // pt-distribution (fitted in 0-30 GeV/c) + Double_t par[4]={3.42500e-03,6.18902,1.76908,3.24823}; + return par[0]*x[0]/TMath::Power((1+TMath::Power(x[0]/par[1],par[2])),par[3]); +} + +GenFunc AliGenITSULib::GetPt(Int_t iPID, const char * sForm) const +{ + // Return pointer to Pt parameterisation + AliDebug(1,Form("PID: %i, form: %s \n",iPID,sForm)); + TString type(sForm); + GenFunc func; + + if(type=="FLAT") { + func=PtFlat; + } else if(type=="DIST") { + + switch(TMath::Abs(iPID)) { + + case kLb : func=PtLbDist; break; + case kLc : func=PtLcDist; break; + case kXi_c : func=PtLcDist; break; + case kBplus : func=PtLbDist; break; + case kBzero : func=PtLbDist; break; + case kDs : func=PtLcDist; break; + case kDplus : func=PtLcDist; break; + default : AliError(Form("Unknown particle type: %i, Pt dist is 0",iPID)); func=0; + } + }else { + AliError(Form("Unknown Pt distribution %s. Pt distribution is set to 0 ",sForm)); + func=0; + } + + return func; +} + +GenFunc AliGenITSULib::GetY(Int_t iPID, const char *sForm) const +{ + GenFunc func; + + if(TMath::Abs(iPID) != kLc && TMath::Abs(iPID) != kLb && TMath::Abs(iPID) != kXi_c && TMath::Abs(iPID) != kBplus && TMath::Abs(iPID) != kBzero && TMath::Abs(iPID)!=kDplus && TMath::Abs(iPID)!=kDs) { + AliError(Form("Unknown PID: %i, form: %s, returning 0",iPID,sForm)); ////////// + func=0; + } else { + func = YFlat; + } + return func; +} + +GenFuncIp AliGenITSULib::GetIp(Int_t iPID, const char *sForm) const +{ + AliDebug(1,Form(" %i - %s",iPID,sForm)); + // Return pointer to particle type parameterisation + GenFuncIp id; + + if(TMath::Abs(iPID) != kLc && TMath::Abs(iPID) != kLb && TMath::Abs(iPID) != kXi_c && TMath::Abs(iPID) != kBplus && TMath::Abs(iPID) != kBzero && TMath::Abs(iPID)!=kDplus && TMath::Abs(iPID)!=kDs) { + AliError(Form("Unknown PID: %i, form: %s, return 0",iPID,sForm)); ////////// + id = 0; + } else { + switch (iPID){ + case kLc : return id=IpLcPlus; + case -kLc : return id=IpLcMinus; + case kLb : return id=IpLb; + case -kLb : return id=IpLbBar; + case kXi_c : return id=IpXic; + case -kXi_c : return id=IpXicBar; + case kBplus : return id=IpBPlus; + case kBzero : return id=IpB0; + case -kBzero: return id=IpB0Bar; + case -kBplus: return id=IpBMinus; + case kDs : return id=IpDsPlus; + case -kDs : return id=IpDsMinus; + case kDplus : return id=IpDPlus; + case -kDplus: return id=IpDMinus; + default : AliFatal(Form("Unknown particle type: %i",iPID)); id=0; + } + + } + + return id; +} diff --git a/EVGEN/AliGenITSULib.h b/EVGEN/AliGenITSULib.h index d8ad3a8d388..ed2a322bde8 100644 --- a/EVGEN/AliGenITSULib.h +++ b/EVGEN/AliGenITSULib.h @@ -1,64 +1,64 @@ -#ifndef ALIGENITSULIB_H -#define ALIGENITSULIB_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -// Library class for particle pt and y distributions used for -// LambdaB simulations. -// To be used with AliGenParam. -// -// Author: Annalisa Mastroserio - -#include "AliGenLib.h" - -class TRandom; - -class AliGenITSULib :public AliGenLib { - - public: - - enum EPartId {kLb=5122,kLc=4122,kXi_c = 4232,kBplus = 521,kBzero = 511,kDs=431,kDplus=411}; - - //Getters - - GenFunc GetPt(Int_t iPID, const char * sForm=0) const; - GenFunc GetY (Int_t iPID, const char * sForm=0) const; - GenFuncIp GetIp(Int_t iPID, const char * sForm=0) const; - - private: - - static Int_t IpLcPlus(TRandom * /*ran*/) {return (int)kLc;} - static Int_t IpLcMinus(TRandom * /*ran*/) {return -(int)kLc;} - static Int_t IpLb(TRandom * /*ran*/) {return (int)kLb;} - static Int_t IpLbBar(TRandom * /*ran*/) {return -(int)kLb;} - static Int_t IpXic(TRandom * /*ran*/) {return (int)kXi_c;} - static Int_t IpXicBar(TRandom * /*ran*/) {return -(int)kXi_c;} - static Int_t IpBPlus(TRandom * /*ran*/) {return (int)kBplus;} - static Int_t IpBMinus(TRandom * /*ran*/) {return -(int)kBplus;} - static Int_t IpB0(TRandom * /*ran*/) {return (int)kBzero;} - static Int_t IpB0Bar(TRandom * /*ran*/) {return -(int)kBzero;} - static Int_t IpDsPlus(TRandom * /*ran*/) {return (int)kDs;} - static Int_t IpDsMinus(TRandom * /*ran*/) {return -(int)kDs;} - static Int_t IpDPlus(TRandom * /*ran*/) {return (int)kDplus;} - static Int_t IpDMinus(TRandom * /*ran*/) {return -(int)kDplus;} - - static Double_t PtFlat(const Double_t * /*px*/, const Double_t * /*dummy*/) {return 1;} - static Double_t YFlat (const Double_t * /*py*/, const Double_t * /*dummy*/) {return 1;} - - static Double_t PtLbDist (const Double_t *px, const Double_t *dummy); - static Double_t PtLcDist (const Double_t *px, const Double_t *dummy); - static Double_t PtBDist (const Double_t *px, const Double_t *dummy); - - - - ClassDef(AliGenITSULib,1) - }; - -#endif - - - - - - - +#ifndef ALIGENITSULIB_H +#define ALIGENITSULIB_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +// Library class for particle pt and y distributions used for +// LambdaB simulations. +// To be used with AliGenParam. +// +// Author: Annalisa Mastroserio + +#include "AliGenLib.h" + +class TRandom; + +class AliGenITSULib :public AliGenLib { + + public: + + enum EPartId {kLb=5122,kLc=4122,kXi_c = 4232,kBplus = 521,kBzero = 511,kDs=431,kDplus=411}; + + //Getters + + GenFunc GetPt(Int_t iPID, const char * sForm=0) const; + GenFunc GetY (Int_t iPID, const char * sForm=0) const; + GenFuncIp GetIp(Int_t iPID, const char * sForm=0) const; + + private: + + static Int_t IpLcPlus(TRandom * /*ran*/) {return (int)kLc;} + static Int_t IpLcMinus(TRandom * /*ran*/) {return -(int)kLc;} + static Int_t IpLb(TRandom * /*ran*/) {return (int)kLb;} + static Int_t IpLbBar(TRandom * /*ran*/) {return -(int)kLb;} + static Int_t IpXic(TRandom * /*ran*/) {return (int)kXi_c;} + static Int_t IpXicBar(TRandom * /*ran*/) {return -(int)kXi_c;} + static Int_t IpBPlus(TRandom * /*ran*/) {return (int)kBplus;} + static Int_t IpBMinus(TRandom * /*ran*/) {return -(int)kBplus;} + static Int_t IpB0(TRandom * /*ran*/) {return (int)kBzero;} + static Int_t IpB0Bar(TRandom * /*ran*/) {return -(int)kBzero;} + static Int_t IpDsPlus(TRandom * /*ran*/) {return (int)kDs;} + static Int_t IpDsMinus(TRandom * /*ran*/) {return -(int)kDs;} + static Int_t IpDPlus(TRandom * /*ran*/) {return (int)kDplus;} + static Int_t IpDMinus(TRandom * /*ran*/) {return -(int)kDplus;} + + static Double_t PtFlat(const Double_t * /*px*/, const Double_t * /*dummy*/) {return 1;} + static Double_t YFlat (const Double_t * /*py*/, const Double_t * /*dummy*/) {return 1;} + + static Double_t PtLbDist (const Double_t *px, const Double_t *dummy); + static Double_t PtLcDist (const Double_t *px, const Double_t *dummy); + static Double_t PtBDist (const Double_t *px, const Double_t *dummy); + + + + ClassDef(AliGenITSULib,1) + }; + +#endif + + + + + + + diff --git a/GRP/ShuttleInput/testShuttle_GRP_run_number_testShuttle_data.txt b/GRP/ShuttleInput/testShuttle_GRP_run_number_testShuttle_data.txt index e79a64f9599..83c380217ee 100644 --- a/GRP/ShuttleInput/testShuttle_GRP_run_number_testShuttle_data.txt +++ b/GRP/ShuttleInput/testShuttle_GRP_run_number_testShuttle_data.txt @@ -1,84 +1,84 @@ -LHC_ENTRIES 81 -0 LHC_Beam_Energy i:1 1 29169 1357567830.0 -1 LHC_IntensityBeam1_totalIntensity f:1 1 21164785367.803 1357567830.0 -2 LHC_IntensityBeam2_totalIntensity f:1 1 18863422159.299 1357567830.0 -3 LHC_LumAverageBRANB_4L2_meanLuminosity f:1 1 12.807913272863 1357567830.0 -4 LHC_LumAverageBRANB_4R2_meanLuminosity f:1 1 13.760402768977 1357567830.0 -5 LHC_MachineMode s:1 1 PROTON PHYSICS 1357567830.0 -6 LHC_BeamMode s:1 1 STABLE BEAMS 1357567830.0 -7 LHC_Beams_Particle_Type s:1 1 PROTON 1357567830.0 -8 LHC_FillNumber s:1 1 1026 1357567830.0 -9 LHC_BunchLengthBeam1_nBunches i:1 1 2 1357567830.0 -10 LHC_BunchLengthBeam1_bunchesLenghts f:3564 1 8.2848604896093e-010 8.2358661805479e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 -11 LHC_BunchLengthBeam1_filledBuckets i:3564 8 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0 -12 LHC_BunchLengthBeam2_nBunches i:1 1 2 1357567830.0 -13 LHC_BunchLengthBeam2_bunchesLenghts f:3564 1 8.1572761282861e-010 8.1869790982703e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 -14 LHC_BunchLengthBeam2_filledBuckets i:3564 8 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0 -15 LHC_RunControl_SafeBeam1 i:1 1 15 1357567830.22 -16 LHC_RunControl_SafeBeam2 i:1 1 15 1357567830.0 -17 LHC_RunControl_BetaStar s:1 1 10 1357567830.0 -18 LHC_RunControl_ActiveInjectionScheme s:1 1 Single_2b_1_1_1 1357567830.0 -19 LHC_RunControl_IP2_Xing_Murad s:1 1 no_value 1357567830.0 -20 LHC_RunControl_IP2_ALICE_Murad s:1 1 no_value 1357567830.0 -21 LHC_LumAverageBRANB_4L2_acqMode i:1 3 7439 1357567830.0 7951 1328280490.0 7439 1297160586.0 -22 LHC_LumAverageBRANB_4L2_meanLuminosityError f:1 1 0 1357567830.0 -23 LHC_LumAverageBRANB_4L2_meanCrossingAngle f:1 1 0 1357567830.0 -24 LHC_LumAverageBRANB_4L2_meanCrossingAngleError f:1 1 0 1357567830.0 -25 LHC_LumAverageBRANB_4R2_acqMode i:1 1 7687 1357567830.0 -26 LHC_LumAverageBRANB_4R2_meanLuminosityError f:1 1 0 1357567830.0 -27 LHC_LumAverageBRANB_4R2_meanCrossingAngle f:1 1 0 1357567830.0 -28 LHC_LumAverageBRANB_4R2_meanCrossingAngleError f:1 1 0 1357567830.0 -29 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_downstream f:1 1 50.046328769759 1357567830.0 -30 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_upstream f:1 1 49.866079841922 1357567830.0 -31 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_downstream f:1 1 24.997357144153 1357567830.0 -32 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_upstream f:1 1 24.91255908613 1357567830.0 -33 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_downstream f:1 1 -25.02661307636 1357567830.0 -34 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_upstream f:1 1 -24.996569350351 1357567830.0 -35 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_downstream f:1 1 11.095173006215 1357567830.0 -36 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_upstream f:1 1 11.117604999786 1357567830.0 -37 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_downstream f:1 1 6.2657452563246 1357567830.0 -38 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_upstream f:1 1 6.2582903572663 1357567830.0 -39 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_downstream f:1 1 -4.8219301074717 1357567830.0 -40 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_upstream f:1 1 -4.822643299829 1357567830.0 -41 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_downstream f:1 1 11.199854263647 1357567830.0 -42 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_upstream f:1 1 10.883404308687 1357567830.0 -43 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_downstream f:1 1 5.1526992903188 1357567830.0 -44 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_upstream f:1 1 5.1308726395455 1357567830.0 -45 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_downstream f:1 1 -5.9879638081037 1357567830.0 -46 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_upstream f:1 1 -5.9028395851616 1357567830.0 -47 LHC_BeamSizeBeam1_acqMode i:1 1 0 1357567830.0 -48 LHC_BeamSizeBeam1_sigmaH f:1 1 0.78663575993523 1357567830.0 -49 LHC_BeamSizeBeam1_sigmaV f:1 1 0.66309333285671 1357567830.0 -50 LHC_BeamSizeBeam1_emittanceH f:1 1 -1 1357567830.0 -51 LHC_BeamSizeBeam1_emittanceV f:1 1 -1 1357567830.0 -52 LHC_BeamSizeBeam1_errorSigmaH f:1 1 -1 1357567830.0 -53 LHC_BeamSizeBeam1_errorSigmaV f:1 1 -1 1357567830.0 -54 LHC_BeamSizeBeam2_acqMode i:1 1 0 1357567830.0 -55 LHC_BeamSizeBeam2_sigmaH f:1 1 0.65687035181571 1357567830.0 -56 LHC_BeamSizeBeam2_sigmaV f:1 1 0.82232160177854 1357567830.0 -57 LHC_BeamSizeBeam2_emittanceH f:1 1 -1 1357567830.0 -58 LHC_BeamSizeBeam2_emittanceV f:1 1 -1 1357567830.0 -59 LHC_BeamSizeBeam2_errorSigmaH f:1 1 -1 1357567830.0 -60 LHC_BeamSizeBeam2_errorSigmaV f:1 1 -1 1357567830.0 -61 LHC_CirculatingBunchConfig_Beam1 i:2808 1 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 -62 LHC_CirculatingBunchConfig_Beam2 i:2808 1 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 -63 LHC_BeamIntensityPerBunchBeam1_averageBeamIntensity f:1 2 21897063148.426 1357567830.0 21888637698.717 1328280471.0 -64 LHC_BeamIntensityPerBunchBeam2_averageBeamIntensity f:1 1 21621985721.014 1357567830.0 -65 LHC_BeamLuminosityPerBunchBRANB_4L2_BunchLuminosityError f:1 1 0 0.0 -66 LHC_BeamLuminosityPerBunchBRANB_4R2_BunchLuminosityError f:1 1 0 0.0 -67 LHC_BeamIntensityPerBunchBeam1_Average_BunchIntensities f:3564 1 160502880 5017949 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155904384 4949961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 -68 LHC_BeamIntensityPerBunchBeam2_Average_BunchIntensities f:3564 1 139031360 2003243 349362.875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139608112 2134134 492293.03125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59583.453125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 -69 LHC_BeamLuminosityPerBunchBRANB_4L2_Average_BunchLuminosity f:3564 1 3.2214286327362 0.73952382802963 0.25333333015442 0.039523810148239 0.0099999997764826 0.0099999997764826 0.0066666668280959 0.003333333414048 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 -70 LHC_BeamLuminosityPerBunchBRANB_4R2_Average_BunchLuminosity f:3564 1 1.1682540178299 0.25 0.032539684325457 0.0055555556900799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054761905223131 1357567830.0 -71 BPTX_deltaT_B1_B2 f:1 45 -1.0152015384615 1357567830.822 -1.00656 1328280471.799 -0.98337538461537 1328280472.377 -0.9989723076923 1328280473.236 -1.0006584615384 1328280473.908 -0.94606923076923 1328280474.752 -0.9469123076923 1328280475.112 -0.99644307692307 1328280476.143 -0.99749692307691 1328280476.581 -0.98485076923076 1328280476.597 -1.0164661538462 1328280476.972 -1.0124615384615 1328280477.910 -0.99412461538461 1328280478.129 -0.99644307692307 1328280478.74 -0.99264923076922 1328280479.308 -0.97473384615384 1328280480.543 -0.97937076923075 1328280480.668 -0.98885538461538 1328280481.168 -0.9956 1328280482.106 -0.98948769230768 1328280482.387 -0.98632615384614 1328280483.294 -0.99749692307691 1328280483.669 -0.97620923076923 1328280483.950 -0.99834 1328280483.982 -1.0124615384615 1328280484.115 -1.0116184615385 1328280484.880 -0.99581076923076 1328280485.506 -0.9682 1328280486.303 -0.99180615384614 1328280486.53 -0.98969846153845 1328280486.740 -0.97915999999999 1328280487.366 -0.98674769230769 1328280488.163 -0.97810615384614 1328280488.819 -0.95428923076922 1328280489.741 -0.95681846153845 1328280490.179 -0.95492153846152 1328280490.7 -0.94880923076923 1328280491.468 -0.95492153846153 1328280492.156 -0.95344615384614 1328280492.875 -0.95829384615384 1328280492.578 -0.97641999999999 1328280493.297 -0.98295384615383 1328280493.63 -0.98695846153845 1328280493.828 -0.9907523076923 1328280494.516 -0.99285999999999 1328280504.235 -72 BPTX_deltaTRMS_B1_B2 f:1 1 0.028 1357567830.660 -73 BPTX_Phase_B1 f:1 71 20.828627692308 1357567830.806 20.805443076923 1328280471.361 20.807129230769 1328280472.908 20.807972307692 1328280473.96 20.809026153846 1328280474.565 20.840641538462 1328280475.972 20.822304615385 1328280476.129 20.818510769231 1328280477.308 20.823147692308 1328280478.668 20.829892307692 1328280479.90 20.826730769231 1328280480.278 20.805443076923 1328280481.935 20.819564615385 1328280482.99 20.803756923077 1328280483.490 20.827363076923 1328280484.37 20.816824615385 1328280485.366 20.808183076923 1328280486.803 20.810712307692 1328280487.179 20.8046 1328280488.452 20.803124615385 1328280489.859 20.821250769231 1328280490.281 20.825255384615 1328280491.813 20.827363076923 1328280492.219 20.827152307692 1328280493.657 20.820829230769 1328280494.478 20.803124615385 1328280495.931 20.823358461538 1328280496.322 20.813452307692 1328280497.666 20.825044615385 1328280498.260 20.828206153846 1328280499.604 20.822093846154 1328280500.690 20.833264615385 1328280501.238 20.794272307692 1328280502.535 20.825255384615 1328280503.566 20.786684615385 1328280504.442 20.82378 1328280505.864 20.829470769231 1328280506.888 20.815349230769 1328280507.216 20.816403076923 1328280508.810 20.820829230769 1328280509.107 20.79364 1328280510.498 20.822726153846 1328280511.639 20.830103076923 1328280512.647 20.818721538462 1328280513.804 20.828838461538 1328280514.413 20.810501538462 1328280515.554 20.814927692308 1328280515.977 20.789424615385 1328280527.618 20.826309230769 1328280528.422 20.82378 1328280529.751 20.830524615385 1328280530.251 20.822093846154 1328280531.736 20.831156923077 1328280532.158 20.834529230769 1328280533.447 20.834318461538 1328280534.823 20.82926 1328280535.198 20.825255384615 1328280536.745 20.814084615385 1328280537.74 20.835793846154 1328280538.543 20.835372307692 1328280539.488 20.809026153846 1328280540.864 20.826730769231 1328280541.317 20.837269230769 1328280542.677 20.806075384615 1328280543.99 20.825044615385 1328280544.521 20.829049230769 1328280545.592 20.82926 1328280546.30 20.818089230769 1328280547.452 20.804389230769 1328280548.827 20.795326153846 1328280549.249 20.811133846154 1328280549.640 -74 BPTX_PhaseRMS_B1 f:1 71 0.0058577164199717 1357567830.806 0.015511813524426 1328280471.361 0.015802914149653 1328280472.908 0.019239432854636 1328280473.96 0.01765297689162 1328280475.565 0.0065606472656569 1328280476.972 0.0055540791768716 1328280477.129 0.0076992820075604 1328280478.308 0.0069124596192787 1328280479.668 0.0072585446892548 1328280480.90 0.005283964017633 1328280481.278 0.017016792931008 1328280482.935 0.0051407820877149 1328280483.99 0.0139146008709 1328280484.490 0.0067235054255271 1328280485.37 0.005486481374234 1328280486.366 0.015128621325001 1328280487.803 0.016171508739485 1328280488.179 0.015499780643609 1328280489.452 0.017963796128907 1328280490.859 0.0063752030899306 1328280491.281 0.0055508789005023 1328280492.813 0.0068218938181613 1328280493.219 0.0067383552678652 1328280494.657 0.012865730904849 1328280495.478 0.015341480985112 1328280496.931 0.0047919301246493 1328280497.322 0.016934622383338 1328280498.666 0.0068039624549779 1328280499.260 0.0059599635438304 1328280500.604 0.0051113168094559 1328280500.690 0.0056649499754943 1328280501.238 0.01969863708979 1328280502.535 0.0049859286968842 1328280503.566 0.022312190448352 1328280504.442 0.0074186577678792 1328280505.864 0.0058242521728351 1328280506.888 0.0052772339222195 1328280507.216 0.0067129255520564 1328280508.810 0.017311456062559 1328280509.107 0.032943170087054 1328280510.498 0.0069470766232619 1328280511.639 0.0052094547864048 1328280512.647 0.0069716523047255 1328280513.804 0.0060152371612846 1328280514.413 0.018799386644911 1328280515.554 0.017470849574421 1328280516.977 0.017691562954225 1328280517.618 0.005128669827663 1328280518.422 0.0050448309945238 1328280519.751 0.0054397247798458 1328280520.251 0.01624168053945 1328280521.736 0.005457254571267 1328280522.158 0.0055748361930979 1328280523.447 0.0063682310809661 1328280524.823 0.0071973911940361 1328280525.198 0.004265669311439 1328280526.745 0.0098465555807465 1328280527.74 0.0058089774227672 1328280528.543 0.0048265693649127 1328280529.488 0.013647856983303 1328280530.864 0.0043832906230803 1328280531.317 0.0046584291483475 1328280532.677 0.020739199650184 1328280533.99 0.018265437138107 1328280534.521 0.0074886874210325 1328280535.592 0.0081306126031047 1328280536.30 0.0057505633580465 1328280537.452 0.019671556500387 1328280538.827 0.019149170488932 1328280539.249 0.018977308536511 1328280540.640 -75 BPTX_Phase_Shift_B1 f:1 71 1.3713723076923 1357567830.806 1.3945569230769 1328280471.361 1.3928707692307 1328280472.908 1.3920276923077 1328280473.96 1.3909738461538 1328280475.565 1.3593584615384 1328280476.972 1.3776953846154 1328280477.129 1.3814892307692 1328280478.308 1.3768523076923 1328280479.668 1.3701076923077 1328280480.90 1.3732692307692 1328280481.278 1.3945569230769 1328280482.935 1.3804353846154 1328280483.99 1.3962430769231 1328280484.490 1.3726369230769 1328280485.37 1.3831753846154 1328280486.366 1.3918169230769 1328280487.803 1.3892876923077 1328280488.179 1.3954 1328280489.452 1.3968753846154 1328280490.859 1.3787492307692 1328280491.281 1.3747446153846 1328280492.813 1.3726369230769 1328280493.219 1.3728476923077 1328280494.657 1.3791707692307 1328280495.478 1.3968753846154 1328280496.931 1.3766415384615 1328280497.322 1.3865476923077 1328280498.666 1.3749553846154 1328280499.260 1.3717938461538 1328280500.604 1.3779061538461 1328280500.690 1.3667353846154 1328280501.238 1.4057276923077 1328280502.535 1.3747446153846 1328280503.566 1.4133153846154 1328280504.442 1.37622 1328280505.864 1.3705292307692 1328280506.888 1.3846507692307 1328280507.216 1.3835969230769 1328280508.810 1.3791707692307 1328280509.107 1.40636 1328280510.498 1.3772738461538 1328280511.639 1.3698969230769 1328280512.647 1.3812784615384 1328280513.804 1.3711615384615 1328280514.413 1.3894984615384 1328280515.554 1.3850723076923 1328280516.977 1.4105753846154 1328280517.618 1.3736907692308 1328280518.422 1.37622 1328280519.751 1.3694753846154 1328280520.251 1.3779061538461 1328280521.736 1.3688430769231 1328280522.158 1.3654707692307 1328280523.447 1.3656815384615 1328280524.823 1.37074 1328280525.198 1.3747446153846 1328280526.745 1.3859153846154 1328280527.74 1.3642061538461 1328280528.543 1.3646276923077 1328280529.488 1.3909738461538 1328280530.864 1.3732692307692 1328280531.317 1.3627307692307 1328280532.677 1.3939246153846 1328280533.99 1.3749553846154 1328280534.521 1.3709507692307 1328280535.592 1.37074 1328280536.30 1.3819107692307 1328280537.452 1.3956107692307 1328280538.827 1.4046738461538 1328280539.249 1.3888661538461 1328280540.640 -76 BPTX_Phase_B2 f:1 70 21.883426153846 1357567830.962 21.892067692308 1328280471.799 21.876470769231 1328280472.221 21.93106 1328280473.737 21.881529230769 1328280474.143 21.894175384615 1328280475.581 21.89818 1328280476.894 21.895861538462 1328280477.58 21.913776923077 1328280478.543 21.904292307692 1328280479.153 21.910404615385 1328280480.356 21.899233846154 1328280481.653 21.877103076923 1328280482.966 21.877946153846 1328280483.865 21.905556923077 1328280484.287 21.907664615385 1328280485.725 21.900076923077 1328280486.147 21.923893846154 1328280487.726 21.925790769231 1328280488.991 21.919678461538 1328280489.140 21.914830769231 1328280490.562 21.908296923077 1328280491.47 21.904503076923 1328280492.500 21.896915384615 1328280493.938 21.930638461538 1328280494.236 21.891646153846 1328280495.40 21.915041538462 1328280496.494 21.904924615385 1328280497.932 21.916938461538 1328280498.229 21.898601538462 1328280499.510 21.905556923077 1328280500.440 21.905978461538 1328280501.894 21.899233846154 1328280502.425 21.900498461538 1328280503.707 21.897758461538 1328280504.176 21.893543076923 1328280505.676 21.915884615385 1328280506.247 21.897969230769 1328280507.685 21.879632307692 1328280508.169 21.91188 1328280509.654 21.908718461538 1328280510.76 21.915673846154 1328280511.405 21.88174 1328280512.100 21.898390769231 1328280513.538 21.889327692308 1328280514.976 21.8927 1328280515.461 21.903449230769 1328280516.930 21.893964615385 1328280517.118 21.911247692308 1328280518.844 21.922207692308 1328280519.345 21.915252307692 1328280520.642 21.927898461538 1328280521.126 21.907875384615 1328280522.517 21.920521538462 1328280523.908 21.911458461538 1328280524.854 21.919889230769 1328280525.120 21.919467692308 1328280526.683 21.924104615385 1328280527.136 21.910404615385 1328280528.496 21.918624615385 1328280529.902 21.919256923077 1328280530.145 21.906189230769 1328280531.473 21.905767692308 1328280532.974 21.912723076923 1328280533.380 21.934432307692 1328280534.818 21.928530769231 1328280535.920 21.88722 1328280536.233 21.891435384615 1328280537.624 21.912933846154 1328280538.140 21.924526153846 1328280549.953 -77 BPTX_PhaseRMS_B2 f:1 71 0.0132582055512 1357567830.962 0.011851154828506 1328280471.799 0.011666034083724 1328280472.221 0.015545713227875 1328280473.737 0.012332431712872 1328280474.143 0.0099611598858862 1328280475.581 0.015827211538637 1328280476.894 0.0095429827994217 1328280477.58 0.013351028814822 1328280478.543 0.016137271936797 1328280479.153 0.013745159888304 1328280480.356 0.015634474545681 1328280481.653 0.011277434147303 1328280482.966 0.016429863739095 1328280483.865 0.015941177938999 1328280484.287 0.020249647676094 1328280485.725 0.013469456660233 1328280486.147 0.01311198078095 1328280487.726 0.011828642641722 1328280488.991 0.014720838902324 1328280489.140 0.016782313880142 1328280490.562 0.012131412606713 1328280491.47 0.014955558472714 1328280492.500 0.014868570441783 1328280493.938 0.012491522569114 1328280494.236 0.0085666738347923 1328280495.40 0.017582373778654 1328280496.494 0.010274000148591 1328280497.932 0.012844824067516 1328280498.229 0.016499475257928 1328280499.510 0.012268869500348 1328280500.440 0.012691038295496 1328280501.894 0.013374133968534 1328280502.425 0.012289129501528 1328280503.707 0.014913915197187 1328280504.176 0.0087282386166461 1328280505.676 0.012247306526733 1328280506.247 0.0087208555033358 1328280507.685 0.013074659433039 1328280508.169 0.010714874205084 1328280509.654 0.010536142821836 1328280510.76 0.018738795222493 1328280511.405 0.011040968667306 1328280512.100 0.012655985921491 1328280513.538 0.014664601512308 1328280514.976 0.0079605504403661 1328280515.461 0.013669810524046 1328280516.930 0.017783353302304 1328280517.118 0.014802093638897 1328280518.844 0.013197082742008 1328280519.345 0.01971295218345 1328280520.642 0.017285133085945 1328280521.126 0.014735919878805 1328280522.517 0.0089969087261802 1328280523.908 0.017406527212107 1328280524.854 0.018700825890695 1328280525.120 0.018525644238133 1328280526.683 0.013044555199585 1328280527.136 0.016435811103418 1328280528.496 0.01551066793796 1328280529.902 0.02002074723281 1328280530.145 0.013745159888304 1328280531.473 0.014012746260155 1328280532.974 0.011974957301254 1328280533.380 0.01518431040922 1328280534.818 0.018449833629243 1328280535.920 0.015832824124689 1328280536.233 0.013562963152182 1328280537.624 0.010378966908264 1328280538.140 0.016160516871751 1328280539.577 0.01228334433962 1328280540.953 -78 BPTX_Phase_Shift_B2 f:1 70 0.31657384615382 1357567830.962 0.30793230769228 1328280471.799 0.32352923076921 1328280472.221 0.26893999999998 1328280473.737 0.31847076923075 1328280474.143 0.30582461538459 1328280475.581 0.30181999999998 1328280476.894 0.30413846153844 1328280477.58 0.28622307692305 1328280478.543 0.29570769230767 1328280479.153 0.28959538461536 1328280480.356 0.30076615384613 1328280481.653 0.3228969230769 1328280482.966 0.32205384615382 1328280483.865 0.29444307692305 1328280484.287 0.29233538461536 1328280485.725 0.29992307692305 1328280486.147 0.27610615384613 1328280487.726 0.27420923076921 1328280488.991 0.28032153846151 1328280489.140 0.28516923076921 1328280490.562 0.29170307692305 1328280491.47 0.2954969230769 1328280492.500 0.30308461538459 1328280493.938 0.26936153846151 1328280494.236 0.30835384615382 1328280495.40 0.28495846153844 1328280496.494 0.29507538461536 1328280497.932 0.28306153846152 1328280498.229 0.30139846153844 1328280499.510 0.29444307692305 1328280500.440 0.29402153846151 1328280501.894 0.30076615384613 1328280502.425 0.29950153846152 1328280503.707 0.30224153846152 1328280504.176 0.3064569230769 1328280505.676 0.28411538461536 1328280506.247 0.30203076923074 1328280507.685 0.32036769230767 1328280508.169 0.28811999999997 1328280509.654 0.29128153846152 1328280510.76 0.28432615384613 1328280511.405 0.31825999999998 1328280512.100 0.30160923076921 1328280513.538 0.31067230769228 1328280514.976 0.30729999999997 1328280515.461 0.29655076923075 1328280516.930 0.30603538461536 1328280517.118 0.28875230769228 1328280518.844 0.27779230769229 1328280519.345 0.28474769230766 1328280520.642 0.27210153846152 1328280521.126 0.29212461538459 1328280522.517 0.27947846153844 1328280523.908 0.28854153846152 1328280524.854 0.28011076923075 1328280525.120 0.28053230769229 1328280526.683 0.27589538461536 1328280527.136 0.28959538461536 1328280528.496 0.28137538461536 1328280529.902 0.28074307692305 1328280530.145 0.29381076923075 1328280531.473 0.29423230769229 1328280532.974 0.2872769230769 1328280533.380 0.26556769230767 1328280534.818 0.27146923076921 1328280535.920 0.31277999999998 1328280536.233 0.30856461538459 1328280537.624 0.28706615384613 1328280538.140 0.27547384615383 1328280539.953 -79 LHC_Particle_Type_B1 s:1 1 PROTON 1297160580.0 -80 LHC_Particle_Type_B2 s:1 1 PROTON 1297160580.0 -81 LHC_Data_Quality_Flag b:1 5 1 1297160580.0 0 1297160581.0 0 1297160582.0 1 1357567830.2 0 1328280472.0 -==== END_OF_BLOCK ==== +LHC_ENTRIES 81 +0 LHC_Beam_Energy i:1 1 29169 1357567830.0 +1 LHC_IntensityBeam1_totalIntensity f:1 1 21164785367.803 1357567830.0 +2 LHC_IntensityBeam2_totalIntensity f:1 1 18863422159.299 1357567830.0 +3 LHC_LumAverageBRANB_4L2_meanLuminosity f:1 1 12.807913272863 1357567830.0 +4 LHC_LumAverageBRANB_4R2_meanLuminosity f:1 1 13.760402768977 1357567830.0 +5 LHC_MachineMode s:1 1 PROTON PHYSICS 1357567830.0 +6 LHC_BeamMode s:1 1 STABLE BEAMS 1357567830.0 +7 LHC_Beams_Particle_Type s:1 1 PROTON 1357567830.0 +8 LHC_FillNumber s:1 1 1026 1357567830.0 +9 LHC_BunchLengthBeam1_nBunches i:1 1 2 1357567830.0 +10 LHC_BunchLengthBeam1_bunchesLenghts f:3564 1 8.2848604896093e-010 8.2358661805479e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 +11 LHC_BunchLengthBeam1_filledBuckets i:3564 8 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0 +12 LHC_BunchLengthBeam2_nBunches i:1 1 2 1357567830.0 +13 LHC_BunchLengthBeam2_bunchesLenghts f:3564 1 8.1572761282861e-010 8.1869790982703e-010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 +14 LHC_BunchLengthBeam2_filledBuckets i:3564 8 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280471.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280472.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280473.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280474.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280475.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280476.0 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328280477.0 +15 LHC_RunControl_SafeBeam1 i:1 1 15 1357567830.22 +16 LHC_RunControl_SafeBeam2 i:1 1 15 1357567830.0 +17 LHC_RunControl_BetaStar s:1 1 10 1357567830.0 +18 LHC_RunControl_ActiveInjectionScheme s:1 1 Single_2b_1_1_1 1357567830.0 +19 LHC_RunControl_IP2_Xing_Murad s:1 1 no_value 1357567830.0 +20 LHC_RunControl_IP2_ALICE_Murad s:1 1 no_value 1357567830.0 +21 LHC_LumAverageBRANB_4L2_acqMode i:1 3 7439 1357567830.0 7951 1328280490.0 7439 1297160586.0 +22 LHC_LumAverageBRANB_4L2_meanLuminosityError f:1 1 0 1357567830.0 +23 LHC_LumAverageBRANB_4L2_meanCrossingAngle f:1 1 0 1357567830.0 +24 LHC_LumAverageBRANB_4L2_meanCrossingAngleError f:1 1 0 1357567830.0 +25 LHC_LumAverageBRANB_4R2_acqMode i:1 1 7687 1357567830.0 +26 LHC_LumAverageBRANB_4R2_meanLuminosityError f:1 1 0 1357567830.0 +27 LHC_LumAverageBRANB_4R2_meanCrossingAngle f:1 1 0 1357567830.0 +28 LHC_LumAverageBRANB_4R2_meanCrossingAngleError f:1 1 0 1357567830.0 +29 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_downstream f:1 1 50.046328769759 1357567830.0 +30 LHC_CollimatorPos_TCLIA_4R2_lvdt_gap_upstream f:1 1 49.866079841922 1357567830.0 +31 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_downstream f:1 1 24.997357144153 1357567830.0 +32 LHC_CollimatorPos_TCLIA_4R2_lvdt_left_upstream f:1 1 24.91255908613 1357567830.0 +33 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_downstream f:1 1 -25.02661307636 1357567830.0 +34 LHC_CollimatorPos_TCLIA_4R2_lvdt_right_upstream f:1 1 -24.996569350351 1357567830.0 +35 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_downstream f:1 1 11.095173006215 1357567830.0 +36 LHC_CollimatorPos_TCTVB_4L2_lvdt_gap_upstream f:1 1 11.117604999786 1357567830.0 +37 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_downstream f:1 1 6.2657452563246 1357567830.0 +38 LHC_CollimatorPos_TCTVB_4L2_lvdt_left_upstream f:1 1 6.2582903572663 1357567830.0 +39 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_downstream f:1 1 -4.8219301074717 1357567830.0 +40 LHC_CollimatorPos_TCTVB_4L2_lvdt_right_upstream f:1 1 -4.822643299829 1357567830.0 +41 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_downstream f:1 1 11.199854263647 1357567830.0 +42 LHC_CollimatorPos_TCTVB_4R2_lvdt_gap_upstream f:1 1 10.883404308687 1357567830.0 +43 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_downstream f:1 1 5.1526992903188 1357567830.0 +44 LHC_CollimatorPos_TCTVB_4R2_lvdt_left_upstream f:1 1 5.1308726395455 1357567830.0 +45 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_downstream f:1 1 -5.9879638081037 1357567830.0 +46 LHC_CollimatorPos_TCTVB_4R2_lvdt_right_upstream f:1 1 -5.9028395851616 1357567830.0 +47 LHC_BeamSizeBeam1_acqMode i:1 1 0 1357567830.0 +48 LHC_BeamSizeBeam1_sigmaH f:1 1 0.78663575993523 1357567830.0 +49 LHC_BeamSizeBeam1_sigmaV f:1 1 0.66309333285671 1357567830.0 +50 LHC_BeamSizeBeam1_emittanceH f:1 1 -1 1357567830.0 +51 LHC_BeamSizeBeam1_emittanceV f:1 1 -1 1357567830.0 +52 LHC_BeamSizeBeam1_errorSigmaH f:1 1 -1 1357567830.0 +53 LHC_BeamSizeBeam1_errorSigmaV f:1 1 -1 1357567830.0 +54 LHC_BeamSizeBeam2_acqMode i:1 1 0 1357567830.0 +55 LHC_BeamSizeBeam2_sigmaH f:1 1 0.65687035181571 1357567830.0 +56 LHC_BeamSizeBeam2_sigmaV f:1 1 0.82232160177854 1357567830.0 +57 LHC_BeamSizeBeam2_emittanceH f:1 1 -1 1357567830.0 +58 LHC_BeamSizeBeam2_emittanceV f:1 1 -1 1357567830.0 +59 LHC_BeamSizeBeam2_errorSigmaH f:1 1 -1 1357567830.0 +60 LHC_BeamSizeBeam2_errorSigmaV f:1 1 -1 1357567830.0 +61 LHC_CirculatingBunchConfig_Beam1 i:2808 1 1 17851 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 +62 LHC_CirculatingBunchConfig_Beam2 i:2808 1 1 8911 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 +63 LHC_BeamIntensityPerBunchBeam1_averageBeamIntensity f:1 2 21897063148.426 1357567830.0 21888637698.717 1328280471.0 +64 LHC_BeamIntensityPerBunchBeam2_averageBeamIntensity f:1 1 21621985721.014 1357567830.0 +65 LHC_BeamLuminosityPerBunchBRANB_4L2_BunchLuminosityError f:1 1 0 0.0 +66 LHC_BeamLuminosityPerBunchBRANB_4R2_BunchLuminosityError f:1 1 0 0.0 +67 LHC_BeamIntensityPerBunchBeam1_Average_BunchIntensities f:3564 1 160502880 5017949 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155904384 4949961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 +68 LHC_BeamIntensityPerBunchBeam2_Average_BunchIntensities f:3564 1 139031360 2003243 349362.875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139608112 2134134 492293.03125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59583.453125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 +69 LHC_BeamLuminosityPerBunchBRANB_4L2_Average_BunchLuminosity f:3564 1 3.2214286327362 0.73952382802963 0.25333333015442 0.039523810148239 0.0099999997764826 0.0099999997764826 0.0066666668280959 0.003333333414048 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.003333333414048 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357567830.0 +70 LHC_BeamLuminosityPerBunchBRANB_4R2_Average_BunchLuminosity f:3564 1 1.1682540178299 0.25 0.032539684325457 0.0055555556900799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054761905223131 1357567830.0 +71 BPTX_deltaT_B1_B2 f:1 45 -1.0152015384615 1357567830.822 -1.00656 1328280471.799 -0.98337538461537 1328280472.377 -0.9989723076923 1328280473.236 -1.0006584615384 1328280473.908 -0.94606923076923 1328280474.752 -0.9469123076923 1328280475.112 -0.99644307692307 1328280476.143 -0.99749692307691 1328280476.581 -0.98485076923076 1328280476.597 -1.0164661538462 1328280476.972 -1.0124615384615 1328280477.910 -0.99412461538461 1328280478.129 -0.99644307692307 1328280478.74 -0.99264923076922 1328280479.308 -0.97473384615384 1328280480.543 -0.97937076923075 1328280480.668 -0.98885538461538 1328280481.168 -0.9956 1328280482.106 -0.98948769230768 1328280482.387 -0.98632615384614 1328280483.294 -0.99749692307691 1328280483.669 -0.97620923076923 1328280483.950 -0.99834 1328280483.982 -1.0124615384615 1328280484.115 -1.0116184615385 1328280484.880 -0.99581076923076 1328280485.506 -0.9682 1328280486.303 -0.99180615384614 1328280486.53 -0.98969846153845 1328280486.740 -0.97915999999999 1328280487.366 -0.98674769230769 1328280488.163 -0.97810615384614 1328280488.819 -0.95428923076922 1328280489.741 -0.95681846153845 1328280490.179 -0.95492153846152 1328280490.7 -0.94880923076923 1328280491.468 -0.95492153846153 1328280492.156 -0.95344615384614 1328280492.875 -0.95829384615384 1328280492.578 -0.97641999999999 1328280493.297 -0.98295384615383 1328280493.63 -0.98695846153845 1328280493.828 -0.9907523076923 1328280494.516 -0.99285999999999 1328280504.235 +72 BPTX_deltaTRMS_B1_B2 f:1 1 0.028 1357567830.660 +73 BPTX_Phase_B1 f:1 71 20.828627692308 1357567830.806 20.805443076923 1328280471.361 20.807129230769 1328280472.908 20.807972307692 1328280473.96 20.809026153846 1328280474.565 20.840641538462 1328280475.972 20.822304615385 1328280476.129 20.818510769231 1328280477.308 20.823147692308 1328280478.668 20.829892307692 1328280479.90 20.826730769231 1328280480.278 20.805443076923 1328280481.935 20.819564615385 1328280482.99 20.803756923077 1328280483.490 20.827363076923 1328280484.37 20.816824615385 1328280485.366 20.808183076923 1328280486.803 20.810712307692 1328280487.179 20.8046 1328280488.452 20.803124615385 1328280489.859 20.821250769231 1328280490.281 20.825255384615 1328280491.813 20.827363076923 1328280492.219 20.827152307692 1328280493.657 20.820829230769 1328280494.478 20.803124615385 1328280495.931 20.823358461538 1328280496.322 20.813452307692 1328280497.666 20.825044615385 1328280498.260 20.828206153846 1328280499.604 20.822093846154 1328280500.690 20.833264615385 1328280501.238 20.794272307692 1328280502.535 20.825255384615 1328280503.566 20.786684615385 1328280504.442 20.82378 1328280505.864 20.829470769231 1328280506.888 20.815349230769 1328280507.216 20.816403076923 1328280508.810 20.820829230769 1328280509.107 20.79364 1328280510.498 20.822726153846 1328280511.639 20.830103076923 1328280512.647 20.818721538462 1328280513.804 20.828838461538 1328280514.413 20.810501538462 1328280515.554 20.814927692308 1328280515.977 20.789424615385 1328280527.618 20.826309230769 1328280528.422 20.82378 1328280529.751 20.830524615385 1328280530.251 20.822093846154 1328280531.736 20.831156923077 1328280532.158 20.834529230769 1328280533.447 20.834318461538 1328280534.823 20.82926 1328280535.198 20.825255384615 1328280536.745 20.814084615385 1328280537.74 20.835793846154 1328280538.543 20.835372307692 1328280539.488 20.809026153846 1328280540.864 20.826730769231 1328280541.317 20.837269230769 1328280542.677 20.806075384615 1328280543.99 20.825044615385 1328280544.521 20.829049230769 1328280545.592 20.82926 1328280546.30 20.818089230769 1328280547.452 20.804389230769 1328280548.827 20.795326153846 1328280549.249 20.811133846154 1328280549.640 +74 BPTX_PhaseRMS_B1 f:1 71 0.0058577164199717 1357567830.806 0.015511813524426 1328280471.361 0.015802914149653 1328280472.908 0.019239432854636 1328280473.96 0.01765297689162 1328280475.565 0.0065606472656569 1328280476.972 0.0055540791768716 1328280477.129 0.0076992820075604 1328280478.308 0.0069124596192787 1328280479.668 0.0072585446892548 1328280480.90 0.005283964017633 1328280481.278 0.017016792931008 1328280482.935 0.0051407820877149 1328280483.99 0.0139146008709 1328280484.490 0.0067235054255271 1328280485.37 0.005486481374234 1328280486.366 0.015128621325001 1328280487.803 0.016171508739485 1328280488.179 0.015499780643609 1328280489.452 0.017963796128907 1328280490.859 0.0063752030899306 1328280491.281 0.0055508789005023 1328280492.813 0.0068218938181613 1328280493.219 0.0067383552678652 1328280494.657 0.012865730904849 1328280495.478 0.015341480985112 1328280496.931 0.0047919301246493 1328280497.322 0.016934622383338 1328280498.666 0.0068039624549779 1328280499.260 0.0059599635438304 1328280500.604 0.0051113168094559 1328280500.690 0.0056649499754943 1328280501.238 0.01969863708979 1328280502.535 0.0049859286968842 1328280503.566 0.022312190448352 1328280504.442 0.0074186577678792 1328280505.864 0.0058242521728351 1328280506.888 0.0052772339222195 1328280507.216 0.0067129255520564 1328280508.810 0.017311456062559 1328280509.107 0.032943170087054 1328280510.498 0.0069470766232619 1328280511.639 0.0052094547864048 1328280512.647 0.0069716523047255 1328280513.804 0.0060152371612846 1328280514.413 0.018799386644911 1328280515.554 0.017470849574421 1328280516.977 0.017691562954225 1328280517.618 0.005128669827663 1328280518.422 0.0050448309945238 1328280519.751 0.0054397247798458 1328280520.251 0.01624168053945 1328280521.736 0.005457254571267 1328280522.158 0.0055748361930979 1328280523.447 0.0063682310809661 1328280524.823 0.0071973911940361 1328280525.198 0.004265669311439 1328280526.745 0.0098465555807465 1328280527.74 0.0058089774227672 1328280528.543 0.0048265693649127 1328280529.488 0.013647856983303 1328280530.864 0.0043832906230803 1328280531.317 0.0046584291483475 1328280532.677 0.020739199650184 1328280533.99 0.018265437138107 1328280534.521 0.0074886874210325 1328280535.592 0.0081306126031047 1328280536.30 0.0057505633580465 1328280537.452 0.019671556500387 1328280538.827 0.019149170488932 1328280539.249 0.018977308536511 1328280540.640 +75 BPTX_Phase_Shift_B1 f:1 71 1.3713723076923 1357567830.806 1.3945569230769 1328280471.361 1.3928707692307 1328280472.908 1.3920276923077 1328280473.96 1.3909738461538 1328280475.565 1.3593584615384 1328280476.972 1.3776953846154 1328280477.129 1.3814892307692 1328280478.308 1.3768523076923 1328280479.668 1.3701076923077 1328280480.90 1.3732692307692 1328280481.278 1.3945569230769 1328280482.935 1.3804353846154 1328280483.99 1.3962430769231 1328280484.490 1.3726369230769 1328280485.37 1.3831753846154 1328280486.366 1.3918169230769 1328280487.803 1.3892876923077 1328280488.179 1.3954 1328280489.452 1.3968753846154 1328280490.859 1.3787492307692 1328280491.281 1.3747446153846 1328280492.813 1.3726369230769 1328280493.219 1.3728476923077 1328280494.657 1.3791707692307 1328280495.478 1.3968753846154 1328280496.931 1.3766415384615 1328280497.322 1.3865476923077 1328280498.666 1.3749553846154 1328280499.260 1.3717938461538 1328280500.604 1.3779061538461 1328280500.690 1.3667353846154 1328280501.238 1.4057276923077 1328280502.535 1.3747446153846 1328280503.566 1.4133153846154 1328280504.442 1.37622 1328280505.864 1.3705292307692 1328280506.888 1.3846507692307 1328280507.216 1.3835969230769 1328280508.810 1.3791707692307 1328280509.107 1.40636 1328280510.498 1.3772738461538 1328280511.639 1.3698969230769 1328280512.647 1.3812784615384 1328280513.804 1.3711615384615 1328280514.413 1.3894984615384 1328280515.554 1.3850723076923 1328280516.977 1.4105753846154 1328280517.618 1.3736907692308 1328280518.422 1.37622 1328280519.751 1.3694753846154 1328280520.251 1.3779061538461 1328280521.736 1.3688430769231 1328280522.158 1.3654707692307 1328280523.447 1.3656815384615 1328280524.823 1.37074 1328280525.198 1.3747446153846 1328280526.745 1.3859153846154 1328280527.74 1.3642061538461 1328280528.543 1.3646276923077 1328280529.488 1.3909738461538 1328280530.864 1.3732692307692 1328280531.317 1.3627307692307 1328280532.677 1.3939246153846 1328280533.99 1.3749553846154 1328280534.521 1.3709507692307 1328280535.592 1.37074 1328280536.30 1.3819107692307 1328280537.452 1.3956107692307 1328280538.827 1.4046738461538 1328280539.249 1.3888661538461 1328280540.640 +76 BPTX_Phase_B2 f:1 70 21.883426153846 1357567830.962 21.892067692308 1328280471.799 21.876470769231 1328280472.221 21.93106 1328280473.737 21.881529230769 1328280474.143 21.894175384615 1328280475.581 21.89818 1328280476.894 21.895861538462 1328280477.58 21.913776923077 1328280478.543 21.904292307692 1328280479.153 21.910404615385 1328280480.356 21.899233846154 1328280481.653 21.877103076923 1328280482.966 21.877946153846 1328280483.865 21.905556923077 1328280484.287 21.907664615385 1328280485.725 21.900076923077 1328280486.147 21.923893846154 1328280487.726 21.925790769231 1328280488.991 21.919678461538 1328280489.140 21.914830769231 1328280490.562 21.908296923077 1328280491.47 21.904503076923 1328280492.500 21.896915384615 1328280493.938 21.930638461538 1328280494.236 21.891646153846 1328280495.40 21.915041538462 1328280496.494 21.904924615385 1328280497.932 21.916938461538 1328280498.229 21.898601538462 1328280499.510 21.905556923077 1328280500.440 21.905978461538 1328280501.894 21.899233846154 1328280502.425 21.900498461538 1328280503.707 21.897758461538 1328280504.176 21.893543076923 1328280505.676 21.915884615385 1328280506.247 21.897969230769 1328280507.685 21.879632307692 1328280508.169 21.91188 1328280509.654 21.908718461538 1328280510.76 21.915673846154 1328280511.405 21.88174 1328280512.100 21.898390769231 1328280513.538 21.889327692308 1328280514.976 21.8927 1328280515.461 21.903449230769 1328280516.930 21.893964615385 1328280517.118 21.911247692308 1328280518.844 21.922207692308 1328280519.345 21.915252307692 1328280520.642 21.927898461538 1328280521.126 21.907875384615 1328280522.517 21.920521538462 1328280523.908 21.911458461538 1328280524.854 21.919889230769 1328280525.120 21.919467692308 1328280526.683 21.924104615385 1328280527.136 21.910404615385 1328280528.496 21.918624615385 1328280529.902 21.919256923077 1328280530.145 21.906189230769 1328280531.473 21.905767692308 1328280532.974 21.912723076923 1328280533.380 21.934432307692 1328280534.818 21.928530769231 1328280535.920 21.88722 1328280536.233 21.891435384615 1328280537.624 21.912933846154 1328280538.140 21.924526153846 1328280549.953 +77 BPTX_PhaseRMS_B2 f:1 71 0.0132582055512 1357567830.962 0.011851154828506 1328280471.799 0.011666034083724 1328280472.221 0.015545713227875 1328280473.737 0.012332431712872 1328280474.143 0.0099611598858862 1328280475.581 0.015827211538637 1328280476.894 0.0095429827994217 1328280477.58 0.013351028814822 1328280478.543 0.016137271936797 1328280479.153 0.013745159888304 1328280480.356 0.015634474545681 1328280481.653 0.011277434147303 1328280482.966 0.016429863739095 1328280483.865 0.015941177938999 1328280484.287 0.020249647676094 1328280485.725 0.013469456660233 1328280486.147 0.01311198078095 1328280487.726 0.011828642641722 1328280488.991 0.014720838902324 1328280489.140 0.016782313880142 1328280490.562 0.012131412606713 1328280491.47 0.014955558472714 1328280492.500 0.014868570441783 1328280493.938 0.012491522569114 1328280494.236 0.0085666738347923 1328280495.40 0.017582373778654 1328280496.494 0.010274000148591 1328280497.932 0.012844824067516 1328280498.229 0.016499475257928 1328280499.510 0.012268869500348 1328280500.440 0.012691038295496 1328280501.894 0.013374133968534 1328280502.425 0.012289129501528 1328280503.707 0.014913915197187 1328280504.176 0.0087282386166461 1328280505.676 0.012247306526733 1328280506.247 0.0087208555033358 1328280507.685 0.013074659433039 1328280508.169 0.010714874205084 1328280509.654 0.010536142821836 1328280510.76 0.018738795222493 1328280511.405 0.011040968667306 1328280512.100 0.012655985921491 1328280513.538 0.014664601512308 1328280514.976 0.0079605504403661 1328280515.461 0.013669810524046 1328280516.930 0.017783353302304 1328280517.118 0.014802093638897 1328280518.844 0.013197082742008 1328280519.345 0.01971295218345 1328280520.642 0.017285133085945 1328280521.126 0.014735919878805 1328280522.517 0.0089969087261802 1328280523.908 0.017406527212107 1328280524.854 0.018700825890695 1328280525.120 0.018525644238133 1328280526.683 0.013044555199585 1328280527.136 0.016435811103418 1328280528.496 0.01551066793796 1328280529.902 0.02002074723281 1328280530.145 0.013745159888304 1328280531.473 0.014012746260155 1328280532.974 0.011974957301254 1328280533.380 0.01518431040922 1328280534.818 0.018449833629243 1328280535.920 0.015832824124689 1328280536.233 0.013562963152182 1328280537.624 0.010378966908264 1328280538.140 0.016160516871751 1328280539.577 0.01228334433962 1328280540.953 +78 BPTX_Phase_Shift_B2 f:1 70 0.31657384615382 1357567830.962 0.30793230769228 1328280471.799 0.32352923076921 1328280472.221 0.26893999999998 1328280473.737 0.31847076923075 1328280474.143 0.30582461538459 1328280475.581 0.30181999999998 1328280476.894 0.30413846153844 1328280477.58 0.28622307692305 1328280478.543 0.29570769230767 1328280479.153 0.28959538461536 1328280480.356 0.30076615384613 1328280481.653 0.3228969230769 1328280482.966 0.32205384615382 1328280483.865 0.29444307692305 1328280484.287 0.29233538461536 1328280485.725 0.29992307692305 1328280486.147 0.27610615384613 1328280487.726 0.27420923076921 1328280488.991 0.28032153846151 1328280489.140 0.28516923076921 1328280490.562 0.29170307692305 1328280491.47 0.2954969230769 1328280492.500 0.30308461538459 1328280493.938 0.26936153846151 1328280494.236 0.30835384615382 1328280495.40 0.28495846153844 1328280496.494 0.29507538461536 1328280497.932 0.28306153846152 1328280498.229 0.30139846153844 1328280499.510 0.29444307692305 1328280500.440 0.29402153846151 1328280501.894 0.30076615384613 1328280502.425 0.29950153846152 1328280503.707 0.30224153846152 1328280504.176 0.3064569230769 1328280505.676 0.28411538461536 1328280506.247 0.30203076923074 1328280507.685 0.32036769230767 1328280508.169 0.28811999999997 1328280509.654 0.29128153846152 1328280510.76 0.28432615384613 1328280511.405 0.31825999999998 1328280512.100 0.30160923076921 1328280513.538 0.31067230769228 1328280514.976 0.30729999999997 1328280515.461 0.29655076923075 1328280516.930 0.30603538461536 1328280517.118 0.28875230769228 1328280518.844 0.27779230769229 1328280519.345 0.28474769230766 1328280520.642 0.27210153846152 1328280521.126 0.29212461538459 1328280522.517 0.27947846153844 1328280523.908 0.28854153846152 1328280524.854 0.28011076923075 1328280525.120 0.28053230769229 1328280526.683 0.27589538461536 1328280527.136 0.28959538461536 1328280528.496 0.28137538461536 1328280529.902 0.28074307692305 1328280530.145 0.29381076923075 1328280531.473 0.29423230769229 1328280532.974 0.2872769230769 1328280533.380 0.26556769230767 1328280534.818 0.27146923076921 1328280535.920 0.31277999999998 1328280536.233 0.30856461538459 1328280537.624 0.28706615384613 1328280538.140 0.27547384615383 1328280539.953 +79 LHC_Particle_Type_B1 s:1 1 PROTON 1297160580.0 +80 LHC_Particle_Type_B2 s:1 1 PROTON 1297160580.0 +81 LHC_Data_Quality_Flag b:1 5 1 1297160580.0 0 1297160581.0 0 1297160582.0 1 1357567830.2 0 1328280472.0 +==== END_OF_BLOCK ==== diff --git a/HLT/CALO/AliHLTCaloClusterizer.cxx b/HLT/CALO/AliHLTCaloClusterizer.cxx index 1b67653fa3e..d9048238785 100644 --- a/HLT/CALO/AliHLTCaloClusterizer.cxx +++ b/HLT/CALO/AliHLTCaloClusterizer.cxx @@ -1,380 +1,380 @@ -// $Id$ - -/************************************************************************** - * This file is property of and copyright by the ALICE HLT Project * - * All rights reserved. * - * * - * Primary Authors: Oystein Djuvsland * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/** - * @file AliHLTCaloClusterizer.cxx - * @author Oystein Djuvsland - * @date - * @brief Clusterizer for PHOS HLT - */ - -// see header file for class documentation -// or -// refer to README to build package -// or -// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt - -#include "AliHLTCaloClusterizer.h" -#include "AliHLTLogging.h" -#include "TMath.h" -#include "AliHLTCaloRecPointDataStruct.h" -#include "AliHLTCaloDigitDataStruct.h" -#include "AliHLTCaloDigitContainerDataStruct.h" -#include "AliHLTCaloConstantsHandler.h" - -ClassImp(AliHLTCaloClusterizer); - -AliHLTCaloClusterizer::AliHLTCaloClusterizer(TString det): - AliHLTCaloConstantsHandler(det), - fCompareFunction(CompareDigitsByPosition), - fRecPointArray(0), - fRecPointDataPtr(0), - fFirstRecPointPtr(0), - fArraySize(0), - fAvailableSize(0), - fUsedSize(0), - fNRecPoints(0), - fDigitIndexPtr(0), - fEmcClusteringThreshold(0), - fEmcMinEnergyThreshold(0), - fEmcTimeGate(0), - fDigitsInCluster(0), - fDigitsPointerArray(0), - fDigitContainerPtr(0), - fMaxDigitIndexDiff(0), - fNDigits(0), - fSortedByPosition(false), - fSortedByEnergy(false), - fSortDigits(false), - fIsEMCAL(false), - fBuffer(0) - -{ - //See header file for documentation - //fEmcClusteringThreshold = 0.2; - //fEmcMinEnergyThreshold = 0.03; - - fEmcClusteringThreshold = 0.1; - fEmcMinEnergyThreshold = 0.01; - fEmcTimeGate = 1.e-6 ; - - fMaxDigitIndexDiff = 2*fCaloConstants->GetNZROWSMOD(); - - - fArraySize = 10; - fRecPointArray = new AliHLTCaloRecPointDataStruct*[fArraySize]; - - fAvailableSize = sizeof(AliHLTCaloRecPointDataStruct) * 20; - fBuffer = new UChar_t[fAvailableSize]; //FR - - fFirstRecPointPtr = reinterpret_cast(fBuffer); - fRecPointDataPtr = fFirstRecPointPtr; - -}//end - -AliHLTCaloClusterizer::~AliHLTCaloClusterizer() -{ - //See header file for documentation - delete [] fBuffer; //FR - fBuffer = NULL; //FR - fAvailableSize = 0; //FR - - delete [] fRecPointArray; -} - -void -AliHLTCaloClusterizer::SetRecPointDataPtr(AliHLTCaloRecPointDataStruct* recPointDataPtr) -{ - // See header file for documentation - fRecPointDataPtr = recPointDataPtr; -} - -Int_t -AliHLTCaloClusterizer::ClusterizeEvent(Int_t nDigits) -{ - //see header file for documentation - Int_t nRecPoints = 0; - fNRecPoints = 0; - fUsedSize = 0; - fNDigits = nDigits; - fRecPointDataPtr = fFirstRecPointPtr; - - // Sort our digits - SortDigits(); - - //Clusterization starts - for (Int_t i = 0; i < nDigits; i++) - { - fDigitsInCluster = 0; - - HLTDebug("Digit with energy: %f", fDigitsPointerArray[i]->fEnergy); - - if (fDigitsPointerArray[i]->fEnergy < fEmcClusteringThreshold && fSortedByEnergy) - { - // Since we have sorted by energy the next digit will have even lower energy, so we return - return fNRecPoints; - } - - if(fDigitsPointerArray[i]->fAssociatedCluster != -1) - { - // The digit is added to a previous cluster, continue - continue; - } - - CheckArray(); - CheckBuffer(); - - // First digit is placed at the fDigits member variable in the recpoint - fDigitIndexPtr = &(fRecPointDataPtr->fDigits); - - fRecPointDataPtr->fAmp = 0; - fRecPointDataPtr->fModule = fDigitsPointerArray[i]->fModule; - - // Assigning the digit to this rec point - fRecPointDataPtr->fDigits = i; - fUsedSize += sizeof(AliHLTCaloRecPointDataStruct); - - // Incrementing the pointer to be ready for new entry - fDigitIndexPtr++; - - fRecPointDataPtr->fAmp += fDigitsPointerArray[i]->fEnergy; - - - //fDigitsPointerArray[i]->fEnergy = 0; - fDigitsPointerArray[i]->fAssociatedCluster = fNRecPoints; - - - fDigitsInCluster++; - nRecPoints++; - - // Scanning for the neighbours - if (ScanForNeighbourDigits(i, fRecPointDataPtr) != 0) - { - return -1; - } - - //fUsedSize += sizeof(AliHLTCaloRecPointDataStruct) + (fDigitsInCluster-1)*sizeof(AliHLTCaloDigitDataStruct); - - fRecPointDataPtr->fMultiplicity = fDigitsInCluster; - fRecPointArray[fNRecPoints] = fRecPointDataPtr; - - fRecPointDataPtr = reinterpret_cast(fDigitIndexPtr); - - fNRecPoints++; - - }//end of clusterization - - return nRecPoints; -} - -Int_t -AliHLTCaloClusterizer::ScanForNeighbourDigits(Int_t index, AliHLTCaloRecPointDataStruct* recPoint) -{ - //see header file for documentation - - // The following cuts can be used if we sort by posisiton. Not tested, but it should be fine... - Int_t max = TMath::Min(fNDigits, (Int_t)fMaxDigitIndexDiff+index); - Int_t min = TMath::Max(0, (Int_t)(index - (Int_t)fMaxDigitIndexDiff)); - - // All digits for now - max = fNDigits; - min = 0; - - for (Int_t j = min; j < max; j++) - { - if (fDigitsPointerArray[j]->fAssociatedCluster == -1 && fDigitsPointerArray[j]->fEnergy > fEmcMinEnergyThreshold) - { - if (j != index) - { - if (AreNeighbours(fDigitsPointerArray[index], - fDigitsPointerArray[j])) - { - // Check that the buffer is large enough for adding a digit (can be heavily improved wrt performance) - CheckBuffer(); - - // Assigning index to digit - *fDigitIndexPtr = j; - fUsedSize += sizeof(Int_t); - - // Incrementing digit pointer to be ready for new entry - fDigitIndexPtr++; - - // Adding the digit energy to the rec point - fRecPointDataPtr->fAmp += fDigitsPointerArray[j]->fEnergy; - - // Setting energy to 0 - //fDigitsPointerArray[j]->fEnergy = 0; - - // Setting the associated cluster - fDigitsPointerArray[j]->fAssociatedCluster = fNRecPoints; - - HLTDebug("Added digit with index: %d, energy: %f, to associated cluster: %d", fDigitsPointerArray[j]->fID, fDigitsPointerArray[j]->fEnergy, fDigitsPointerArray[j]->fAssociatedCluster); - - fDigitsInCluster++; - - // Scan for neighbours of this digit - ScanForNeighbourDigits(j, recPoint); - } - } - } - } - return 0; -} - -Int_t -AliHLTCaloClusterizer::AreNeighbours(AliHLTCaloDigitDataStruct* digit1, - AliHLTCaloDigitDataStruct* digit2) -{ - //see header file for documentation - if ( (digit1->fModule == digit2->fModule) || AreEdgeCells(digit1, digit2)) - { - Int_t rowdiff = TMath::Abs( digit1->fZ - digit2->fZ ); - Int_t coldiff = TMath::Abs( digit1->fX - digit2->fX ); - - // Common edge defines neighbour - //if (( coldiff <= 1 && rowdiff == 0 ) || ( coldiff == 0 && rowdiff <= 1 )) - // Common edge and corner defines neighbour - if (( coldiff <= 1 && rowdiff <= 1 )) - { - // Check also for time - if (TMath::Abs(digit1->fTime - digit2->fTime ) < fEmcTimeGate) - { - return 1; - } - } - } - return 0; -} - - - -Int_t AliHLTCaloClusterizer::CheckArray() -{ - // See header file for class documentation - if (fArraySize == fNRecPoints) - { - fArraySize *= 2; - AliHLTCaloRecPointDataStruct **tmp = new AliHLTCaloRecPointDataStruct*[fArraySize]; - memcpy(tmp, fRecPointArray, fArraySize/2 * sizeof(AliHLTCaloRecPointDataStruct*)); - delete [] fRecPointArray; - fRecPointArray = tmp; - } - return 0; -} - -Int_t AliHLTCaloClusterizer::CheckBuffer() -{ - // See header file for class documentation - if ((fAvailableSize - fUsedSize) < (Int_t)sizeof(AliHLTCaloRecPointDataStruct)) - { - Int_t recPointOffset = reinterpret_cast(fRecPointDataPtr) - reinterpret_cast(fFirstRecPointPtr); - Int_t digitIndexOffset = reinterpret_cast(fDigitIndexPtr) - reinterpret_cast(fRecPointDataPtr); - UChar_t *tmp = new UChar_t[fAvailableSize*2]; - - if (tmp == NULL) - { - HLTError("Pointer error"); - return(-1); - } - - memcpy(tmp, fFirstRecPointPtr, fUsedSize); - fAvailableSize *= 2; - for (Int_t n = 0; n < fNRecPoints; n++) - { - fRecPointArray[n] = reinterpret_cast(reinterpret_cast(fRecPointArray[n]) - reinterpret_cast(fFirstRecPointPtr) + reinterpret_cast(tmp)); - } - delete [] fBuffer; //FR - fBuffer = tmp; //FR - - fFirstRecPointPtr = reinterpret_cast(tmp); - fRecPointDataPtr = reinterpret_cast(tmp + recPointOffset); - fDigitIndexPtr = reinterpret_cast(reinterpret_cast(fRecPointDataPtr) + digitIndexOffset); - //fUsedSize = 0; - } - return 0; -} - -void AliHLTCaloClusterizer::SetSortDigitsByPosition() -{ - // Sort the digit pointers by position - fCompareFunction = &CompareDigitsByPosition; - fSortDigits = true; - fSortedByPosition = true; -} - -void AliHLTCaloClusterizer::SetSortDigitsByEnergy() -{ - // See header file for class documentation - fCompareFunction = &CompareDigitsByEnergy; - fSortDigits = true; - fSortedByEnergy = true; -} - -void AliHLTCaloClusterizer::SortDigits() -{ - // See header file for class documentation - if (fSortDigits) qsort(fDigitsPointerArray, fNDigits, sizeof(AliHLTCaloDigitDataStruct*), fCompareFunction); -} - -Int_t -AliHLTCaloClusterizer::CompareDigitsByPosition(const void *dig0, const void *dig1) -{ - // See header file for documentation - return (*((AliHLTCaloDigitDataStruct**)(dig0)))->fID - (*((AliHLTCaloDigitDataStruct**)(dig1)))->fID; -} - -Int_t -AliHLTCaloClusterizer::CompareDigitsByEnergy(const void *dig0, const void *dig1) -{ - // See header file for documentation - if ( ((*((AliHLTCaloDigitDataStruct**)(dig1)))->fEnergy - (*((AliHLTCaloDigitDataStruct**)(dig0)))->fEnergy) < 0) return -1; - return 1; -} - -void AliHLTCaloClusterizer::SetDetector(TString det) -{ - if(det.CompareTo("EMCAL")) - { - fIsEMCAL = true; - } - else - { - fIsEMCAL = false; - } -} - -Bool_t AliHLTCaloClusterizer::AreEdgeCells(AliHLTCaloDigitDataStruct *digit0, AliHLTCaloDigitDataStruct *digit1) -{ - if(fIsEMCAL) - { - Int_t modDiff = digit0->fModule - digit1->fModule; - if(TMath::Abs(modDiff) > 1) return kFALSE; - if(digit0->fModule > digit1->fModule && digit1->fModule%2 == 0) - { - if(digit0->fZ == 0 && digit1->fZ == (fCaloConstants->GetNZROWSMOD()-1)) - return kTRUE; - } - if(digit1->fModule > digit0->fModule && digit0->fModule%2 == 0) - { - if(digit1->fZ == 0 && digit0->fZ == (fCaloConstants->GetNZROWSMOD()-1)) - return kTRUE; - } - } - - return false; - -} +// $Id$ + +/************************************************************************** + * This file is property of and copyright by the ALICE HLT Project * + * All rights reserved. * + * * + * Primary Authors: Oystein Djuvsland * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/** + * @file AliHLTCaloClusterizer.cxx + * @author Oystein Djuvsland + * @date + * @brief Clusterizer for PHOS HLT + */ + +// see header file for class documentation +// or +// refer to README to build package +// or +// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt + +#include "AliHLTCaloClusterizer.h" +#include "AliHLTLogging.h" +#include "TMath.h" +#include "AliHLTCaloRecPointDataStruct.h" +#include "AliHLTCaloDigitDataStruct.h" +#include "AliHLTCaloDigitContainerDataStruct.h" +#include "AliHLTCaloConstantsHandler.h" + +ClassImp(AliHLTCaloClusterizer); + +AliHLTCaloClusterizer::AliHLTCaloClusterizer(TString det): + AliHLTCaloConstantsHandler(det), + fCompareFunction(CompareDigitsByPosition), + fRecPointArray(0), + fRecPointDataPtr(0), + fFirstRecPointPtr(0), + fArraySize(0), + fAvailableSize(0), + fUsedSize(0), + fNRecPoints(0), + fDigitIndexPtr(0), + fEmcClusteringThreshold(0), + fEmcMinEnergyThreshold(0), + fEmcTimeGate(0), + fDigitsInCluster(0), + fDigitsPointerArray(0), + fDigitContainerPtr(0), + fMaxDigitIndexDiff(0), + fNDigits(0), + fSortedByPosition(false), + fSortedByEnergy(false), + fSortDigits(false), + fIsEMCAL(false), + fBuffer(0) + +{ + //See header file for documentation + //fEmcClusteringThreshold = 0.2; + //fEmcMinEnergyThreshold = 0.03; + + fEmcClusteringThreshold = 0.1; + fEmcMinEnergyThreshold = 0.01; + fEmcTimeGate = 1.e-6 ; + + fMaxDigitIndexDiff = 2*fCaloConstants->GetNZROWSMOD(); + + + fArraySize = 10; + fRecPointArray = new AliHLTCaloRecPointDataStruct*[fArraySize]; + + fAvailableSize = sizeof(AliHLTCaloRecPointDataStruct) * 20; + fBuffer = new UChar_t[fAvailableSize]; //FR + + fFirstRecPointPtr = reinterpret_cast(fBuffer); + fRecPointDataPtr = fFirstRecPointPtr; + +}//end + +AliHLTCaloClusterizer::~AliHLTCaloClusterizer() +{ + //See header file for documentation + delete [] fBuffer; //FR + fBuffer = NULL; //FR + fAvailableSize = 0; //FR + + delete [] fRecPointArray; +} + +void +AliHLTCaloClusterizer::SetRecPointDataPtr(AliHLTCaloRecPointDataStruct* recPointDataPtr) +{ + // See header file for documentation + fRecPointDataPtr = recPointDataPtr; +} + +Int_t +AliHLTCaloClusterizer::ClusterizeEvent(Int_t nDigits) +{ + //see header file for documentation + Int_t nRecPoints = 0; + fNRecPoints = 0; + fUsedSize = 0; + fNDigits = nDigits; + fRecPointDataPtr = fFirstRecPointPtr; + + // Sort our digits + SortDigits(); + + //Clusterization starts + for (Int_t i = 0; i < nDigits; i++) + { + fDigitsInCluster = 0; + + HLTDebug("Digit with energy: %f", fDigitsPointerArray[i]->fEnergy); + + if (fDigitsPointerArray[i]->fEnergy < fEmcClusteringThreshold && fSortedByEnergy) + { + // Since we have sorted by energy the next digit will have even lower energy, so we return + return fNRecPoints; + } + + if(fDigitsPointerArray[i]->fAssociatedCluster != -1) + { + // The digit is added to a previous cluster, continue + continue; + } + + CheckArray(); + CheckBuffer(); + + // First digit is placed at the fDigits member variable in the recpoint + fDigitIndexPtr = &(fRecPointDataPtr->fDigits); + + fRecPointDataPtr->fAmp = 0; + fRecPointDataPtr->fModule = fDigitsPointerArray[i]->fModule; + + // Assigning the digit to this rec point + fRecPointDataPtr->fDigits = i; + fUsedSize += sizeof(AliHLTCaloRecPointDataStruct); + + // Incrementing the pointer to be ready for new entry + fDigitIndexPtr++; + + fRecPointDataPtr->fAmp += fDigitsPointerArray[i]->fEnergy; + + + //fDigitsPointerArray[i]->fEnergy = 0; + fDigitsPointerArray[i]->fAssociatedCluster = fNRecPoints; + + + fDigitsInCluster++; + nRecPoints++; + + // Scanning for the neighbours + if (ScanForNeighbourDigits(i, fRecPointDataPtr) != 0) + { + return -1; + } + + //fUsedSize += sizeof(AliHLTCaloRecPointDataStruct) + (fDigitsInCluster-1)*sizeof(AliHLTCaloDigitDataStruct); + + fRecPointDataPtr->fMultiplicity = fDigitsInCluster; + fRecPointArray[fNRecPoints] = fRecPointDataPtr; + + fRecPointDataPtr = reinterpret_cast(fDigitIndexPtr); + + fNRecPoints++; + + }//end of clusterization + + return nRecPoints; +} + +Int_t +AliHLTCaloClusterizer::ScanForNeighbourDigits(Int_t index, AliHLTCaloRecPointDataStruct* recPoint) +{ + //see header file for documentation + + // The following cuts can be used if we sort by posisiton. Not tested, but it should be fine... + Int_t max = TMath::Min(fNDigits, (Int_t)fMaxDigitIndexDiff+index); + Int_t min = TMath::Max(0, (Int_t)(index - (Int_t)fMaxDigitIndexDiff)); + + // All digits for now + max = fNDigits; + min = 0; + + for (Int_t j = min; j < max; j++) + { + if (fDigitsPointerArray[j]->fAssociatedCluster == -1 && fDigitsPointerArray[j]->fEnergy > fEmcMinEnergyThreshold) + { + if (j != index) + { + if (AreNeighbours(fDigitsPointerArray[index], + fDigitsPointerArray[j])) + { + // Check that the buffer is large enough for adding a digit (can be heavily improved wrt performance) + CheckBuffer(); + + // Assigning index to digit + *fDigitIndexPtr = j; + fUsedSize += sizeof(Int_t); + + // Incrementing digit pointer to be ready for new entry + fDigitIndexPtr++; + + // Adding the digit energy to the rec point + fRecPointDataPtr->fAmp += fDigitsPointerArray[j]->fEnergy; + + // Setting energy to 0 + //fDigitsPointerArray[j]->fEnergy = 0; + + // Setting the associated cluster + fDigitsPointerArray[j]->fAssociatedCluster = fNRecPoints; + + HLTDebug("Added digit with index: %d, energy: %f, to associated cluster: %d", fDigitsPointerArray[j]->fID, fDigitsPointerArray[j]->fEnergy, fDigitsPointerArray[j]->fAssociatedCluster); + + fDigitsInCluster++; + + // Scan for neighbours of this digit + ScanForNeighbourDigits(j, recPoint); + } + } + } + } + return 0; +} + +Int_t +AliHLTCaloClusterizer::AreNeighbours(AliHLTCaloDigitDataStruct* digit1, + AliHLTCaloDigitDataStruct* digit2) +{ + //see header file for documentation + if ( (digit1->fModule == digit2->fModule) || AreEdgeCells(digit1, digit2)) + { + Int_t rowdiff = TMath::Abs( digit1->fZ - digit2->fZ ); + Int_t coldiff = TMath::Abs( digit1->fX - digit2->fX ); + + // Common edge defines neighbour + //if (( coldiff <= 1 && rowdiff == 0 ) || ( coldiff == 0 && rowdiff <= 1 )) + // Common edge and corner defines neighbour + if (( coldiff <= 1 && rowdiff <= 1 )) + { + // Check also for time + if (TMath::Abs(digit1->fTime - digit2->fTime ) < fEmcTimeGate) + { + return 1; + } + } + } + return 0; +} + + + +Int_t AliHLTCaloClusterizer::CheckArray() +{ + // See header file for class documentation + if (fArraySize == fNRecPoints) + { + fArraySize *= 2; + AliHLTCaloRecPointDataStruct **tmp = new AliHLTCaloRecPointDataStruct*[fArraySize]; + memcpy(tmp, fRecPointArray, fArraySize/2 * sizeof(AliHLTCaloRecPointDataStruct*)); + delete [] fRecPointArray; + fRecPointArray = tmp; + } + return 0; +} + +Int_t AliHLTCaloClusterizer::CheckBuffer() +{ + // See header file for class documentation + if ((fAvailableSize - fUsedSize) < (Int_t)sizeof(AliHLTCaloRecPointDataStruct)) + { + Int_t recPointOffset = reinterpret_cast(fRecPointDataPtr) - reinterpret_cast(fFirstRecPointPtr); + Int_t digitIndexOffset = reinterpret_cast(fDigitIndexPtr) - reinterpret_cast(fRecPointDataPtr); + UChar_t *tmp = new UChar_t[fAvailableSize*2]; + + if (tmp == NULL) + { + HLTError("Pointer error"); + return(-1); + } + + memcpy(tmp, fFirstRecPointPtr, fUsedSize); + fAvailableSize *= 2; + for (Int_t n = 0; n < fNRecPoints; n++) + { + fRecPointArray[n] = reinterpret_cast(reinterpret_cast(fRecPointArray[n]) - reinterpret_cast(fFirstRecPointPtr) + reinterpret_cast(tmp)); + } + delete [] fBuffer; //FR + fBuffer = tmp; //FR + + fFirstRecPointPtr = reinterpret_cast(tmp); + fRecPointDataPtr = reinterpret_cast(tmp + recPointOffset); + fDigitIndexPtr = reinterpret_cast(reinterpret_cast(fRecPointDataPtr) + digitIndexOffset); + //fUsedSize = 0; + } + return 0; +} + +void AliHLTCaloClusterizer::SetSortDigitsByPosition() +{ + // Sort the digit pointers by position + fCompareFunction = &CompareDigitsByPosition; + fSortDigits = true; + fSortedByPosition = true; +} + +void AliHLTCaloClusterizer::SetSortDigitsByEnergy() +{ + // See header file for class documentation + fCompareFunction = &CompareDigitsByEnergy; + fSortDigits = true; + fSortedByEnergy = true; +} + +void AliHLTCaloClusterizer::SortDigits() +{ + // See header file for class documentation + if (fSortDigits) qsort(fDigitsPointerArray, fNDigits, sizeof(AliHLTCaloDigitDataStruct*), fCompareFunction); +} + +Int_t +AliHLTCaloClusterizer::CompareDigitsByPosition(const void *dig0, const void *dig1) +{ + // See header file for documentation + return (*((AliHLTCaloDigitDataStruct**)(dig0)))->fID - (*((AliHLTCaloDigitDataStruct**)(dig1)))->fID; +} + +Int_t +AliHLTCaloClusterizer::CompareDigitsByEnergy(const void *dig0, const void *dig1) +{ + // See header file for documentation + if ( ((*((AliHLTCaloDigitDataStruct**)(dig1)))->fEnergy - (*((AliHLTCaloDigitDataStruct**)(dig0)))->fEnergy) < 0) return -1; + return 1; +} + +void AliHLTCaloClusterizer::SetDetector(TString det) +{ + if(det.CompareTo("EMCAL")) + { + fIsEMCAL = true; + } + else + { + fIsEMCAL = false; + } +} + +Bool_t AliHLTCaloClusterizer::AreEdgeCells(AliHLTCaloDigitDataStruct *digit0, AliHLTCaloDigitDataStruct *digit1) +{ + if(fIsEMCAL) + { + Int_t modDiff = digit0->fModule - digit1->fModule; + if(TMath::Abs(modDiff) > 1) return kFALSE; + if(digit0->fModule > digit1->fModule && digit1->fModule%2 == 0) + { + if(digit0->fZ == 0 && digit1->fZ == (fCaloConstants->GetNZROWSMOD()-1)) + return kTRUE; + } + if(digit1->fModule > digit0->fModule && digit0->fModule%2 == 0) + { + if(digit1->fZ == 0 && digit0->fZ == (fCaloConstants->GetNZROWSMOD()-1)) + return kTRUE; + } + } + + return false; + +} diff --git a/HLT/CALO/AliHLTCaloClusterizer.h b/HLT/CALO/AliHLTCaloClusterizer.h index 513964e07cc..91e64bab3f8 100644 --- a/HLT/CALO/AliHLTCaloClusterizer.h +++ b/HLT/CALO/AliHLTCaloClusterizer.h @@ -1,256 +1,256 @@ -//-*- Mode: C++ -*- -// $Id$ - -/************************************************************************** - * This file is property of and copyright by the ALICE HLT Project * - * All rights reserved. * - * * - * Primary Authors: Oystein Djuvsland * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -#ifndef ALIHLTCALOCLUSTERIZER_H -#define ALIHLTCALOCLUSTERIZER_H - - -/** - * Class does clusterization in for Calorimeters on an event basis. It is intended - * for use in HLT, but can also be used offline - * - * @file AliHLTCaloClusterizer.h - * @author Oystein Djuvsland - * @date - * @brief Clusterizer for CALO HLT - */ - -// see header file for class documentation -// or -// refer to README to build package -// or -// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt - -//#include "AliHLTCaloBase.h" - -#include "AliHLTCaloRecPointContainerStruct.h" -#include "AliHLTCaloRecPointDataStruct.h" -#include "AliHLTCaloDigitContainerDataStruct.h" -#include "AliHLTCaloDigitDataStruct.h" -#include "TString.h" -#include "AliHLTCaloConstantsHandler.h" - -//#include "AliPHOSGeometry.h" -#include "AliHLTLogging.h" - -class TClonesArray; -class TString; -//class AliPHOSDigit; -//class AliPHOSRecoParamEmc; -//class AliPHOSRecoParam; - -/** - * @class AliHLTCaloClusterizer - * Clusterizer for CALO HLT. The clusterizer takes digits as input, either - * in the form of a container of AliHLTCaloDigitDataStruct or a - * TClonesArray of AliPHOSDigit through an instance of a AliPHOSLoader - * - * @ingroup alihlt_calo - */ - - -class AliHLTCaloClusterizer : public AliHLTCaloConstantsHandler, public AliHLTLogging -{ - -public: - - /** Constructor */ - AliHLTCaloClusterizer(TString det); - - /** Destructor */ - virtual ~AliHLTCaloClusterizer(); - - /** Set digit container */ - void SetDigitContainer(AliHLTCaloDigitContainerDataStruct* digitContainerPtr) - { fDigitContainerPtr = digitContainerPtr; } - - /** Set array with digits */ - void SetDigitArray(AliHLTCaloDigitDataStruct **digitPointerArr) - { fDigitsPointerArray = digitPointerArr; } - - /** Set rec point data buffer */ - void SetRecPointDataPtr(AliHLTCaloRecPointDataStruct* recPointDataPtr); - - /** Set reco parameters */ - // void SetRecoParameters(AliPHOSRecoParam* recoPars); - - /** Set emc clustering threshold */ - void SetEmcClusteringThreshold(Float_t threshold) { fEmcClusteringThreshold = threshold; } - - /** Set emc min energy threshold */ - void SetEmcMinEnergyThreshold(Float_t threshold) { fEmcMinEnergyThreshold = threshold; } - - /** Set emc time gate */ - void SetEmcTimeGate(Float_t gate) { fEmcTimeGate = gate; } - - /** Starts clusterization of the event */ - virtual Int_t ClusterizeEvent(Int_t nDigits); - - /** - * For a given digit this digit scans for neighbouring digits which - * passes the threshold for inclusion in a rec point. If one is found - * it is added to the current rec point - * @param digIndex index of the digit in the digit container - * @param recPoint pointer to the current rec point - */ - virtual Int_t ScanForNeighbourDigits(Int_t digIndex, AliHLTCaloRecPointDataStruct* recPoint); - - /** - * Checks if two digits are neighbours - * @param d1 first digit - * @param d2 second digit - */ - virtual Int_t AreNeighbours(AliHLTCaloDigitDataStruct* d1, AliHLTCaloDigitDataStruct* d2); - - /** - * Get pointer to the rec points array - */ - AliHLTCaloRecPointDataStruct** GetRecPoints() const { return fRecPointArray; } - - /** - * Sort the digits by energy - */ - void SetSortDigitsByEnergy(); - - /** - * Sort the digits by position - */ - void SetSortDigitsByPosition(); - - /** - * Set the sorting function (as required by stdlib's qsort) if you don't want to use the provided ones - */ - void SetSortingFunction(Int_t (*compare)(const void*, const void*)) { fCompareFunction = compare; } - - /** Set the detector (PHOS or EMCAL) */ - void SetDetector(TString det); - -protected: - - /** - * Check the rec point buffer size and resize the buffer if necessary - */ - virtual Int_t CheckBuffer(); //COMMENT - - /** - * Check the rec point array size and resize the array if necessary - */ - virtual Int_t CheckArray(); //COMMENT - - /** - * Sort the digits - */ - void SortDigits(); - - /** - * Compare digits by position - */ - static Int_t CompareDigitsByPosition(const void *dig0, const void *dig); - - /** - * Compare digits by energy - */ - static Int_t CompareDigitsByEnergy(const void *dig0, const void *dig); - - /** - * Pointer to the compare function for the sorting of digits - */ - //Int_t (AliHLTCaloClusterizer::*fCompareFunction)(const void*, const void*); - Int_t (*fCompareFunction)(const void*, const void*); - - /** Check if two modules are connected */ - Bool_t AreEdgeCells(AliHLTCaloDigitDataStruct *digit0, AliHLTCaloDigitDataStruct *digit1); - - /** Array of pointers to the rec point output */ - AliHLTCaloRecPointDataStruct **fRecPointArray; //COMMENT - - /** Pointer to the rec point output */ - AliHLTCaloRecPointDataStruct *fRecPointDataPtr; //COMMENT - - /** The first rec point in the list */ - AliHLTCaloRecPointDataStruct *fFirstRecPointPtr; //COMMENT - - /** Size of the rec point array */ - Int_t fArraySize; - - /** Available size for the rec point output */ - Int_t fAvailableSize; - - /** The used size for the rec point output */ - Int_t fUsedSize; - - /** Number of rec points created so far */ - Int_t fNRecPoints; - - /** Pointer to the digit index array in the rec point */ - Int_t* fDigitIndexPtr; //! transient - - /** Energy threshold for starting a cluster for the calorimeter */ - Float_t fEmcClusteringThreshold; //COMMENT - - /** Energy threshold for including a crystal in a cluster */ - Float_t fEmcMinEnergyThreshold; //COMMENT - - /** Maximum time difference for inclusion in a rec point */ - Float_t fEmcTimeGate; //COMMENT - - /** Counts the digits in a rec point */ - Int_t fDigitsInCluster; //COMMENT - - /** Array of our digits */ - AliHLTCaloDigitDataStruct **fDigitsPointerArray; //! transient - - /** Contains the digits from one event */ - AliHLTCaloDigitContainerDataStruct *fDigitContainerPtr; //! transient - - /** Maximum difference in index to be a neighbour */ - Int_t fMaxDigitIndexDiff; //COMMENT - - /** Number of digits in event */ - Int_t fNDigits; //COMMENT - - /** Are we sorting digits by position? */ - Bool_t fSortedByPosition; //COMMENT - - /** Are we sorting digits by energy? */ - Bool_t fSortedByEnergy; //COMMENT - - /** Are we sorting at all? */ - Bool_t fSortDigits; //COMMENT - - /** Is this running for EMCAL */ - Bool_t fIsEMCAL; //COMMENT - -private: - - /** Default constructor, prohibited */ - AliHLTCaloClusterizer(); // COMMENT - - /** Copy constructor, prohibited */ - AliHLTCaloClusterizer (const AliHLTCaloClusterizer &); //COMMENT - - /** Assignment operator, prohibited */ - AliHLTCaloClusterizer & operator = (const AliHLTCaloClusterizer &); //COMMENT - - UChar_t* fBuffer; // Buffer for storing of Cluster Data - - ClassDef(AliHLTCaloClusterizer, 0); - -}; - -#endif +//-*- Mode: C++ -*- +// $Id$ + +/************************************************************************** + * This file is property of and copyright by the ALICE HLT Project * + * All rights reserved. * + * * + * Primary Authors: Oystein Djuvsland * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +#ifndef ALIHLTCALOCLUSTERIZER_H +#define ALIHLTCALOCLUSTERIZER_H + + +/** + * Class does clusterization in for Calorimeters on an event basis. It is intended + * for use in HLT, but can also be used offline + * + * @file AliHLTCaloClusterizer.h + * @author Oystein Djuvsland + * @date + * @brief Clusterizer for CALO HLT + */ + +// see header file for class documentation +// or +// refer to README to build package +// or +// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt + +//#include "AliHLTCaloBase.h" + +#include "AliHLTCaloRecPointContainerStruct.h" +#include "AliHLTCaloRecPointDataStruct.h" +#include "AliHLTCaloDigitContainerDataStruct.h" +#include "AliHLTCaloDigitDataStruct.h" +#include "TString.h" +#include "AliHLTCaloConstantsHandler.h" + +//#include "AliPHOSGeometry.h" +#include "AliHLTLogging.h" + +class TClonesArray; +class TString; +//class AliPHOSDigit; +//class AliPHOSRecoParamEmc; +//class AliPHOSRecoParam; + +/** + * @class AliHLTCaloClusterizer + * Clusterizer for CALO HLT. The clusterizer takes digits as input, either + * in the form of a container of AliHLTCaloDigitDataStruct or a + * TClonesArray of AliPHOSDigit through an instance of a AliPHOSLoader + * + * @ingroup alihlt_calo + */ + + +class AliHLTCaloClusterizer : public AliHLTCaloConstantsHandler, public AliHLTLogging +{ + +public: + + /** Constructor */ + AliHLTCaloClusterizer(TString det); + + /** Destructor */ + virtual ~AliHLTCaloClusterizer(); + + /** Set digit container */ + void SetDigitContainer(AliHLTCaloDigitContainerDataStruct* digitContainerPtr) + { fDigitContainerPtr = digitContainerPtr; } + + /** Set array with digits */ + void SetDigitArray(AliHLTCaloDigitDataStruct **digitPointerArr) + { fDigitsPointerArray = digitPointerArr; } + + /** Set rec point data buffer */ + void SetRecPointDataPtr(AliHLTCaloRecPointDataStruct* recPointDataPtr); + + /** Set reco parameters */ + // void SetRecoParameters(AliPHOSRecoParam* recoPars); + + /** Set emc clustering threshold */ + void SetEmcClusteringThreshold(Float_t threshold) { fEmcClusteringThreshold = threshold; } + + /** Set emc min energy threshold */ + void SetEmcMinEnergyThreshold(Float_t threshold) { fEmcMinEnergyThreshold = threshold; } + + /** Set emc time gate */ + void SetEmcTimeGate(Float_t gate) { fEmcTimeGate = gate; } + + /** Starts clusterization of the event */ + virtual Int_t ClusterizeEvent(Int_t nDigits); + + /** + * For a given digit this digit scans for neighbouring digits which + * passes the threshold for inclusion in a rec point. If one is found + * it is added to the current rec point + * @param digIndex index of the digit in the digit container + * @param recPoint pointer to the current rec point + */ + virtual Int_t ScanForNeighbourDigits(Int_t digIndex, AliHLTCaloRecPointDataStruct* recPoint); + + /** + * Checks if two digits are neighbours + * @param d1 first digit + * @param d2 second digit + */ + virtual Int_t AreNeighbours(AliHLTCaloDigitDataStruct* d1, AliHLTCaloDigitDataStruct* d2); + + /** + * Get pointer to the rec points array + */ + AliHLTCaloRecPointDataStruct** GetRecPoints() const { return fRecPointArray; } + + /** + * Sort the digits by energy + */ + void SetSortDigitsByEnergy(); + + /** + * Sort the digits by position + */ + void SetSortDigitsByPosition(); + + /** + * Set the sorting function (as required by stdlib's qsort) if you don't want to use the provided ones + */ + void SetSortingFunction(Int_t (*compare)(const void*, const void*)) { fCompareFunction = compare; } + + /** Set the detector (PHOS or EMCAL) */ + void SetDetector(TString det); + +protected: + + /** + * Check the rec point buffer size and resize the buffer if necessary + */ + virtual Int_t CheckBuffer(); //COMMENT + + /** + * Check the rec point array size and resize the array if necessary + */ + virtual Int_t CheckArray(); //COMMENT + + /** + * Sort the digits + */ + void SortDigits(); + + /** + * Compare digits by position + */ + static Int_t CompareDigitsByPosition(const void *dig0, const void *dig); + + /** + * Compare digits by energy + */ + static Int_t CompareDigitsByEnergy(const void *dig0, const void *dig); + + /** + * Pointer to the compare function for the sorting of digits + */ + //Int_t (AliHLTCaloClusterizer::*fCompareFunction)(const void*, const void*); + Int_t (*fCompareFunction)(const void*, const void*); + + /** Check if two modules are connected */ + Bool_t AreEdgeCells(AliHLTCaloDigitDataStruct *digit0, AliHLTCaloDigitDataStruct *digit1); + + /** Array of pointers to the rec point output */ + AliHLTCaloRecPointDataStruct **fRecPointArray; //COMMENT + + /** Pointer to the rec point output */ + AliHLTCaloRecPointDataStruct *fRecPointDataPtr; //COMMENT + + /** The first rec point in the list */ + AliHLTCaloRecPointDataStruct *fFirstRecPointPtr; //COMMENT + + /** Size of the rec point array */ + Int_t fArraySize; + + /** Available size for the rec point output */ + Int_t fAvailableSize; + + /** The used size for the rec point output */ + Int_t fUsedSize; + + /** Number of rec points created so far */ + Int_t fNRecPoints; + + /** Pointer to the digit index array in the rec point */ + Int_t* fDigitIndexPtr; //! transient + + /** Energy threshold for starting a cluster for the calorimeter */ + Float_t fEmcClusteringThreshold; //COMMENT + + /** Energy threshold for including a crystal in a cluster */ + Float_t fEmcMinEnergyThreshold; //COMMENT + + /** Maximum time difference for inclusion in a rec point */ + Float_t fEmcTimeGate; //COMMENT + + /** Counts the digits in a rec point */ + Int_t fDigitsInCluster; //COMMENT + + /** Array of our digits */ + AliHLTCaloDigitDataStruct **fDigitsPointerArray; //! transient + + /** Contains the digits from one event */ + AliHLTCaloDigitContainerDataStruct *fDigitContainerPtr; //! transient + + /** Maximum difference in index to be a neighbour */ + Int_t fMaxDigitIndexDiff; //COMMENT + + /** Number of digits in event */ + Int_t fNDigits; //COMMENT + + /** Are we sorting digits by position? */ + Bool_t fSortedByPosition; //COMMENT + + /** Are we sorting digits by energy? */ + Bool_t fSortedByEnergy; //COMMENT + + /** Are we sorting at all? */ + Bool_t fSortDigits; //COMMENT + + /** Is this running for EMCAL */ + Bool_t fIsEMCAL; //COMMENT + +private: + + /** Default constructor, prohibited */ + AliHLTCaloClusterizer(); // COMMENT + + /** Copy constructor, prohibited */ + AliHLTCaloClusterizer (const AliHLTCaloClusterizer &); //COMMENT + + /** Assignment operator, prohibited */ + AliHLTCaloClusterizer & operator = (const AliHLTCaloClusterizer &); //COMMENT + + UChar_t* fBuffer; // Buffer for storing of Cluster Data + + ClassDef(AliHLTCaloClusterizer, 0); + +}; + +#endif diff --git a/HLT/CALO/AliHLTCaloDigitMaker.h b/HLT/CALO/AliHLTCaloDigitMaker.h index 7fdc61fba71..53e47881176 100644 --- a/HLT/CALO/AliHLTCaloDigitMaker.h +++ b/HLT/CALO/AliHLTCaloDigitMaker.h @@ -1,201 +1,201 @@ -//-*- Mode: C++ -*- -// $Id$ - - -/************************************************************************** - * This file is property of and copyright by the ALICE HLT Project * - * All rights reserved. * - * * - * Primary Authors: Oystein Djuvsland * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -#ifndef ALIHLTCALODIGITMAKER_H -#define ALIHLTCALODIGITMAKER_H - -/** - * Class makes digits from information from raw data - * - * @file AliHLTCaloDigitMaker.h - * @author Oystein Djuvsland - * @date - * @brief Digit maker for Calo HLT - */ - -// see below for class documentation -// or -// refer to README to build package -// or -// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt - -//#include "AliHLTCaloBase.h" -#include "AliHLTCaloConstantsHandler.h" -#include "AliHLTCaloDigitDataStruct.h" -#include "AliHLTCaloChannelDataStruct.h" -#include "AliHLTDataTypes.h" -#include "AliHLTLogging.h" -#include "TString.h" - -/** - * @class AliHLTCaloDigitMaker - * Digit maker for CALO HLT. Takes input from AliHLTCaloRawAnalyzer, and - * outputs a block of AliHLTCaloDigitDataStruct container - * @ingroup alihlt_calo - */ - -class TH2F; -class AliHLTCaloSharedMemoryInterfacev2; // added by PTH -struct AliHLTCaloChannelDataHeaderStruct; -class AliHLTCaloMapper; -class AliHLTCaloCoordinate; -class TString; - -//using namespace CaloHLTConst; -//class AliHLTCaloDigitMaker : public AliHLTCaloBase - - - -class AliHLTCaloDigitMaker : AliHLTCaloConstantsHandler, public AliHLTLogging -{ - -public: - - /** Constructor */ - AliHLTCaloDigitMaker(TString det); - - /** Destructor */ - virtual ~AliHLTCaloDigitMaker(); - - /** - * Sets the pointer to the output - * @param digitDataPtr the output pointer - */ - void SetDigitDataPtr(AliHLTCaloDigitDataStruct *digitDataPtr) - { fDigitStructPtr = digitDataPtr; } - - /** - * Set the global high gain conversion factory - * @param factor is the conversion factor - */ - void SetGlobalHighGainFactor(Float_t factor); - - /** - * Set the global low gain conversion factory - * @param factor is the conversion factor - */ - void SetGlobalLowGainFactor(Float_t factor); - - /** - * Make the digits for one event. - * @param channelDataHeader is the data header from the AliHLTCaloRawAnalyzer - * @return the number of digits found - */ - Int_t MakeDigits(AliHLTCaloChannelDataHeaderStruct* channelDataHeader, AliHLTUInt32_t availableSize); - - /** - * Set the mask for dead channels - * @param badChannelHGHist is a pointer to a high gain bad channel histogram - * @param badChannelLGHist is a pointer to a low gain bad channel histogram - * @param qCut is the cut - */ - void SetBadChannelMask(TH2F* badChannelHGHist, TH2F* badChannelLGHist, Float_t qCut); - - /** - * Set the status of channel - * @param x is x - * @param z is z - * @param bad if it's bad - */ - void SetBadChannel(Int_t x, Int_t z, Bool_t bad = true); - - /** - * Set the ADC to energy (GeV) gain - * @param x is x - * @param z is z - * @param ratio - High/Low ratio - * @param gain is the gain - */ - void SetGain(Int_t x, Int_t z, Float_t ratio, Float_t gain); - - /** - * Set the time window for which we accept energy signals - * @param min is the minumum time - * @param max is the maximum time - */ - void SetTimeWindow(Float_t min, Float_t max) { fMinTime = min; fMaxTime = max; } - - /** Reset the channel book */ - void Reset(); - - /** Set the mapper */ - void SetMapper(AliHLTCaloMapper *mapper) { fMapperPtr = mapper; } - -private: - - AliHLTCaloDigitMaker(); - - /** - * Add a new digit - * @param channelData is the channel data - * @param coordinates is the coordinates of the channel, including gain and module - */ - void AddDigit(AliHLTCaloChannelDataStruct* channelData, AliHLTCaloCoordinate &coord); - - /** - * Check if we already have this crystal. If so, keep the high gain as long as it - * is not in overflow. - * @param channelCoordinates is a array of coordinates for the channel. - * @param channel is a pointer to a struct containing channel information - * @return true if we should use the digit. - */ - bool UseDigit(AliHLTCaloCoordinate &coord, AliHLTCaloChannelDataStruct *channel); - - /** Pointer to shared memory interface */ - AliHLTCaloSharedMemoryInterfacev2* fShmPtr; //! transient - - /** Pointer to the AliHLTCaloDigitDataStruct */ - AliHLTCaloDigitDataStruct *fDigitStructPtr; //! transient - - /** Digit count */ - Int_t fDigitCount; //COMMENT - - /** Mapper */ - AliHLTCaloMapper* fMapperPtr; //COMMENT - - /** High gain energy conversion factors */ - Float_t **fHighGainFactors; //! transient - - /** Low gain energy conversion factors */ - Float_t **fLowGainFactors; //!transient - - /** Bad channel mask */ - Bool_t ***fBadChannelMask; //! transient - - /** Channel book keeping variable */ - AliHLTCaloDigitDataStruct ***fChannelBook; //! transient - - /** Maximum energy we allow in a channel */ - Float_t fMaxEnergy; //COMMENT - - /** Minimum accepted time */ - Float_t fMinTime; //COMMENT - - /** Maximum accepted time */ - Float_t fMaxTime; //COMMENT - - /** Assignment operator and copy constructor not implemented */ - AliHLTCaloDigitMaker(const AliHLTCaloDigitMaker &); - AliHLTCaloDigitMaker & operator = (const AliHLTCaloDigitMaker &); - - ClassDef(AliHLTCaloDigitMaker, 0); - -}; - -#endif - +//-*- Mode: C++ -*- +// $Id$ + + +/************************************************************************** + * This file is property of and copyright by the ALICE HLT Project * + * All rights reserved. * + * * + * Primary Authors: Oystein Djuvsland * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +#ifndef ALIHLTCALODIGITMAKER_H +#define ALIHLTCALODIGITMAKER_H + +/** + * Class makes digits from information from raw data + * + * @file AliHLTCaloDigitMaker.h + * @author Oystein Djuvsland + * @date + * @brief Digit maker for Calo HLT + */ + +// see below for class documentation +// or +// refer to README to build package +// or +// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt + +//#include "AliHLTCaloBase.h" +#include "AliHLTCaloConstantsHandler.h" +#include "AliHLTCaloDigitDataStruct.h" +#include "AliHLTCaloChannelDataStruct.h" +#include "AliHLTDataTypes.h" +#include "AliHLTLogging.h" +#include "TString.h" + +/** + * @class AliHLTCaloDigitMaker + * Digit maker for CALO HLT. Takes input from AliHLTCaloRawAnalyzer, and + * outputs a block of AliHLTCaloDigitDataStruct container + * @ingroup alihlt_calo + */ + +class TH2F; +class AliHLTCaloSharedMemoryInterfacev2; // added by PTH +struct AliHLTCaloChannelDataHeaderStruct; +class AliHLTCaloMapper; +class AliHLTCaloCoordinate; +class TString; + +//using namespace CaloHLTConst; +//class AliHLTCaloDigitMaker : public AliHLTCaloBase + + + +class AliHLTCaloDigitMaker : AliHLTCaloConstantsHandler, public AliHLTLogging +{ + +public: + + /** Constructor */ + AliHLTCaloDigitMaker(TString det); + + /** Destructor */ + virtual ~AliHLTCaloDigitMaker(); + + /** + * Sets the pointer to the output + * @param digitDataPtr the output pointer + */ + void SetDigitDataPtr(AliHLTCaloDigitDataStruct *digitDataPtr) + { fDigitStructPtr = digitDataPtr; } + + /** + * Set the global high gain conversion factory + * @param factor is the conversion factor + */ + void SetGlobalHighGainFactor(Float_t factor); + + /** + * Set the global low gain conversion factory + * @param factor is the conversion factor + */ + void SetGlobalLowGainFactor(Float_t factor); + + /** + * Make the digits for one event. + * @param channelDataHeader is the data header from the AliHLTCaloRawAnalyzer + * @return the number of digits found + */ + Int_t MakeDigits(AliHLTCaloChannelDataHeaderStruct* channelDataHeader, AliHLTUInt32_t availableSize); + + /** + * Set the mask for dead channels + * @param badChannelHGHist is a pointer to a high gain bad channel histogram + * @param badChannelLGHist is a pointer to a low gain bad channel histogram + * @param qCut is the cut + */ + void SetBadChannelMask(TH2F* badChannelHGHist, TH2F* badChannelLGHist, Float_t qCut); + + /** + * Set the status of channel + * @param x is x + * @param z is z + * @param bad if it's bad + */ + void SetBadChannel(Int_t x, Int_t z, Bool_t bad = true); + + /** + * Set the ADC to energy (GeV) gain + * @param x is x + * @param z is z + * @param ratio - High/Low ratio + * @param gain is the gain + */ + void SetGain(Int_t x, Int_t z, Float_t ratio, Float_t gain); + + /** + * Set the time window for which we accept energy signals + * @param min is the minumum time + * @param max is the maximum time + */ + void SetTimeWindow(Float_t min, Float_t max) { fMinTime = min; fMaxTime = max; } + + /** Reset the channel book */ + void Reset(); + + /** Set the mapper */ + void SetMapper(AliHLTCaloMapper *mapper) { fMapperPtr = mapper; } + +private: + + AliHLTCaloDigitMaker(); + + /** + * Add a new digit + * @param channelData is the channel data + * @param coordinates is the coordinates of the channel, including gain and module + */ + void AddDigit(AliHLTCaloChannelDataStruct* channelData, AliHLTCaloCoordinate &coord); + + /** + * Check if we already have this crystal. If so, keep the high gain as long as it + * is not in overflow. + * @param channelCoordinates is a array of coordinates for the channel. + * @param channel is a pointer to a struct containing channel information + * @return true if we should use the digit. + */ + bool UseDigit(AliHLTCaloCoordinate &coord, AliHLTCaloChannelDataStruct *channel); + + /** Pointer to shared memory interface */ + AliHLTCaloSharedMemoryInterfacev2* fShmPtr; //! transient + + /** Pointer to the AliHLTCaloDigitDataStruct */ + AliHLTCaloDigitDataStruct *fDigitStructPtr; //! transient + + /** Digit count */ + Int_t fDigitCount; //COMMENT + + /** Mapper */ + AliHLTCaloMapper* fMapperPtr; //COMMENT + + /** High gain energy conversion factors */ + Float_t **fHighGainFactors; //! transient + + /** Low gain energy conversion factors */ + Float_t **fLowGainFactors; //!transient + + /** Bad channel mask */ + Bool_t ***fBadChannelMask; //! transient + + /** Channel book keeping variable */ + AliHLTCaloDigitDataStruct ***fChannelBook; //! transient + + /** Maximum energy we allow in a channel */ + Float_t fMaxEnergy; //COMMENT + + /** Minimum accepted time */ + Float_t fMinTime; //COMMENT + + /** Maximum accepted time */ + Float_t fMaxTime; //COMMENT + + /** Assignment operator and copy constructor not implemented */ + AliHLTCaloDigitMaker(const AliHLTCaloDigitMaker &); + AliHLTCaloDigitMaker & operator = (const AliHLTCaloDigitMaker &); + + ClassDef(AliHLTCaloDigitMaker, 0); + +}; + +#endif + diff --git a/HLT/EVE/AliHLTEveMuon.cxx b/HLT/EVE/AliHLTEveMuon.cxx index 84a9f6d9a99..6e8bb6cbdd2 100644 --- a/HLT/EVE/AliHLTEveMuon.cxx +++ b/HLT/EVE/AliHLTEveMuon.cxx @@ -1,375 +1,375 @@ -/************************************************************************** - * This file is property of and copyright by the ALICE HLT Project * - * ALICE Experiment at CERN, All rights reserved. * - * * - * Primary Authors: Svein Lindal * - * for The ALICE HLT Project. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/// @file AliHLTEvePhos.cxx -/// @author Svein Lindal -/// @brief Muon processor for the HLT EVE display - -#include "AliHLTEveMuon.h" -#include "AliHLTMUONDataBlockReader.h" -#include "AliHLTHOMERBlockDesc.h" -#include "TCanvas.h" -#include "TEveStraightLineSet.h" -#include "TEvePointSet.h" -#include "AliEveHLTEventManager.h" -#include "TEveManager.h" - - -#include "TEveVSDStructs.h" -#include "TGeoGlobalMagField.h" -#include "AliMUONTrack.h" -#include "AliMUONTrackParam.h" -#include "AliMUONESDInterface.h" -#include "AliMUONVTrackReconstructor.h" -#include "AliEveMUONTrack.h" -#include "AliHLTMUONConstants.h" -#include "AliHLTMUONUtils.h" -#include "AliMUONVCluster.h" -#include "AliMUONVClusterStore.h" -#include "AliMUONConstants.h" -#include "TEveTrackPropagator.h" - -using namespace std; - -class AliHLTMUONUtils; -class AliEveMuonTrack; - -ClassImp(AliHLTEveMuon); - -AliHLTEveMuon::AliHLTEveMuon() : - AliHLTEveBase("Muon"), - fFullTrackList(NULL), - fTracks(NULL), - fClusters(NULL) -{ - // Constructor. - SetMaxHistograms(6); -} - -AliHLTEveMuon::~AliHLTEveMuon() -{ - //Destructor - if (fFullTrackList) - delete fFullTrackList; - fFullTrackList = NULL; - - if (fTracks) - delete fTracks; - fTracks = NULL; - - if(fClusters) - delete fClusters; - fClusters = NULL; -} - - -void AliHLTEveMuon::ProcessBlock(AliHLTHOMERBlockDesc * block) { - //See header file for documentation - if ( (block->GetDataType().CompareTo("RECHITS") == 0) || (block->GetDataType().CompareTo("TRIGRECS") == 0) ) { - if(!fClusters) { - fClusters = CreateClusters(); - AddElement(fClusters); - } - ProcessClusters( block, fClusters ); - - }else if(block->GetDataType().CompareTo("MANTRACK") == 0){ - - if ( !fTracks ) { - fTracks = CreateTrackSet(); - AddElement(fTracks); - } - - ProcessTracks( block, fTracks ); - - }else if(block->GetDataType().CompareTo("TRACKS") == 0){ - - if ( !fFullTrackList ) { - fFullTrackList = CreateFullTrackList(); - AddElement(fFullTrackList); - } - - ProcessFullTracks( block, fFullTrackList ); - - } else if(block->GetDataType().CompareTo("ROOTHIST") == 0) { - ProcessHistogram(block); - } - -} - -TEvePointSet * AliHLTEveMuon::CreateClusters() { - //See header file for documentation - TEvePointSet * ps = new TEvePointSet("MUON RecHits"); - ps->SetMainColor(kBlue); - ps->SetMarkerStyle(20); - return ps; -} - -TEveStraightLineSet * AliHLTEveMuon::CreateTrackSet() { - // See header file - TEveStraightLineSet * lineset = new TEveStraightLineSet("MUON Tracks"); - lineset->SetMainColor(kRed); - lineset->SetLineWidth(3); - return lineset; -} - -TEveTrackList * AliHLTEveMuon::CreateFullTrackList(){ - // See header file - TEveTrackList * lineset = new TEveTrackList("MUON Full Tracks"); - lineset->SetMainColor(kBlue); - return lineset; -} - -void AliHLTEveMuon::ProcessHistogram(AliHLTHOMERBlockDesc * block ) { - //See header file for documentation - if(!fCanvas) { - fCanvas = CreateCanvas("MUON QA", "MUON QA"); - fCanvas->Divide(3, 2); - } - AddHistogramsToCanvas(block, fCanvas, fHistoCount); -} - -void AliHLTEveMuon::UpdateElements() { - //See header file for documentation - if(fCanvas) fCanvas->Update(); - if(fClusters) fClusters->ResetBBox(); - if(fTracks) fTracks->ElementChanged(); -} - -void AliHLTEveMuon::ResetElements(){ - //See header file for documentation - fHistoCount = 0; - - if ( fClusters ) fClusters->Reset(); - if ( fTracks ){ - fTracks->Destroy(); - fTracks = NULL; - } - if ( fFullTrackList ){ - fFullTrackList->Destroy(); - fFullTrackList = NULL; - } - - -} - -void AliHLTEveMuon::ProcessClusters(AliHLTHOMERBlockDesc * block, TEvePointSet * clusters) { - //See header file for documentation - unsigned long size = block->GetSize(); - Int_t * buffer ; - - buffer = (Int_t *)block->GetData(); - //cout<<"block size : "<GetDataType()<GetDataType().CompareTo("RECHITS") == 0){ - - AliHLTMUONRecHitsBlockReader trackblock((char*)buffer, size); - const AliHLTMUONRecHitStruct* hit = trackblock.GetArray(); - - for(AliHLTUInt32_t ientry = 0; ientry < trackblock.Nentries(); ientry++){ - if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0) - clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ); - hit++; - - }// track hit loop - } - - else{// if rechits - // if(!strcmp((BlockType(ULong64_t(reader->GetBlockDataType(i)))).Data(),"TRIGRECS")){ - - AliHLTMUONTriggerRecordsBlockReader trigblock(buffer, size); - const AliHLTMUONTriggerRecordStruct* trigrec = trigblock.GetArray(); - for(AliHLTUInt32_t ientry = 0; ientry < trigblock.Nentries(); ientry++){ - - const AliHLTMUONRecHitStruct* hit = &trigrec->fHit[0]; - for(AliHLTUInt32_t ch = 0; ch < 4; ch++) - { - if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0) - clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ); - hit++; - }// trig chamber loop - trigrec++; - }//trig hit loop - }//else trigger - -} - -void AliHLTEveMuon::ProcessTracks(AliHLTHOMERBlockDesc * block, TEveStraightLineSet * tracks) { - //See header file for documentation - unsigned long size = block->GetSize(); - Int_t * buffer = (Int_t *)block->GetData(); - AliHLTMUONRecHitStruct hit1,hit2; - hit1.fX = hit1.fY = hit1.fZ = hit2.fX = hit2.fY = hit2.fZ = 0; - Int_t ch1=0, ch2=0; - Float_t x0=0.0,y0=0.0,z0=0.0; - Float_t x3=0.0,y3=0.0,z3=0.0; - if(block->GetDataType().CompareTo("MANTRACK") == 0){ - AliHLTMUONMansoTracksBlockReader mantrackblock(buffer, size); - const AliHLTMUONMansoTrackStruct* mtrack = mantrackblock.GetArray(); - for(AliHLTUInt32_t ientry = 0; ientry < mantrackblock.Nentries(); ientry++){ - const AliHLTMUONRecHitStruct* hit = &mtrack->fHit[0]; - for(AliHLTUInt32_t ch = 0; ch < 4; ch++){ - // cout << setw(10) << left << ch + 7 << setw(0); - // cout << setw(13) << left << hit->fX << setw(0); - // cout << setw(13) << left << hit->fY << setw(0); - // cout << hit->fZ << setw(0) << endl; - if(hit->fZ != 0.0){ - if(ch==0 || ch==1){ - hit1 = *hit; ch1 = ch+6; - }else{ - hit2 = *hit; ch2 = ch+6; - } - } - hit++; - }// trig chamber loop - // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch1,hit1.fX,hit1.fY,hit1.fZ); - // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch2,hit2.fX,hit2.fY,hit2.fZ); - // meminfo(); - z3 = AliMUONConstants::DefaultChamberZ(ch2+4); - y3 = hit1.fY - (hit1.fZ-z3)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ; - x3 = hit1.fX - (hit1.fZ-z3)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ; - - z0 = AliMUONConstants::DefaultChamberZ(ch1); - y0 = hit1.fY - (hit1.fZ-z0)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ; - x0 = hit1.fX - (hit1.fZ-z0)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ; - - - tracks->AddLine(x0,y0,z0,x3,y3,z3); - mtrack++; - } - // cout<<"NofManso Tracks : "<fFlags, sign, hitset - ); - - // add track parameters at vertex - TVector3 mom(muonHLTTrack->fPx, muonHLTTrack->fPy, muonHLTTrack->fPz); - AliMUONTrackParam paramAtVtx; - if (mom.Mag() != 0) - paramAtVtx.SetInverseBendingMomentum(muonHLTTrack->fInverseBendingMomentum); - else - paramAtVtx.SetInverseBendingMomentum(0.); - paramAtVtx.SetNonBendingSlope(TMath::Tan(muonHLTTrack->fThetaX)); - paramAtVtx.SetBendingSlope(TMath::Tan(muonHLTTrack->fThetaY)); - paramAtVtx.SetZ(muonHLTTrack->fZ); - paramAtVtx.SetBendingCoor(muonHLTTrack->fY); - paramAtVtx.SetNonBendingCoor(muonHLTTrack->fX); - muonTrack->SetTrackParamAtVertex(¶mAtVtx); - - //printf("(X,Y,Z) : (%8.3f,%8.3f,%8.3f)\n",muonHLTTrack->fX,muonHLTTrack->fY,muonHLTTrack->fZ); - - // add clusters - Int_t nHits = 0; - AliMUONVClusterStore* cStore = AliMUONESDInterface::NewClusterStore(); - if (!cStore) return -1; - AliMUONVCluster* cluster = cStore->CreateCluster(0,0,0); - AliMUONTrackParam trackParam; - for (int i = 0; i < 16; i++) - { - if (not hitset[i]) continue; - - AliHLTUInt8_t chamber; - AliHLTUInt16_t detElemId; - AliHLTMUONUtils::UnpackRecHitFlags((muonHLTTrack->fHit[i]).fFlags, chamber, detElemId); - - cluster->SetUniqueID(AliMUONVCluster::BuildUniqueID(chamber, detElemId, clusterIndex++)); - cluster->SetXYZ((muonHLTTrack->fHit[i]).fX, (muonHLTTrack->fHit[i]).fY, (muonHLTTrack->fHit[i]).fZ); - cluster->SetErrXY( // Use nominal values. - AliHLTMUONConstants::DefaultNonBendingReso(), - AliHLTMUONConstants::DefaultBendingReso() - ); - cluster->SetCharge(-1.); // Indicate no total charge calculated. - cluster->SetChi2(-1.); // Indicate no fit made. - trackParam.SetZ(cluster->GetZ()); - muonTrack->AddTrackParamAtCluster(trackParam, *cluster, kTRUE); - nHits++; - } - - // compute track parameters at each cluster - if (nHits > 0) { - AliMUONTrackParam *firstTrackParam = (AliMUONTrackParam*) muonTrack->GetTrackParamAtCluster()->First(); - trackParam = (*firstTrackParam); - if (!AliMUONESDInterface::GetTracker()) AliMUONESDInterface::ResetTracker(); - if (!AliMUONESDInterface::GetTracker()->RefitTrack(*muonTrack, kFALSE) && - muonTrack->GetGlobalChi2() < AliMUONTrack::MaxChi2()) { - *firstTrackParam = trackParam; - muonTrack->UpdateCovTrackParamAtCluster(); - } - } - - muonTrack->SetGlobalChi2(muonHLTTrack->fChi2); - - return 0; -} - -Int_t AliHLTEveMuon::ProcessFullTracks(AliHLTHOMERBlockDesc * block, TEveTrackList * fullTracks) { - - // See header for documentation - - Int_t iResult = 0; - - Double_t b[3], x[3]; - x[0] = 0.0 ; x[1] = 0.0 ; x[2] = -950.0; - TGeoGlobalMagField::Instance()->Field(x,b); - //" Field at (0.0, 0.0, -950.0) [at the middle of dipole magnet] - //should be (6.79, 0.03, -0.17) or similar value with change of sign" - if(TMath::AreEqualAbs(b[0],0.0,1.0e-5) and TMath::AreEqualAbs(b[1],0.0,1.0e-5) and TMath::AreEqualAbs(b[2],0.0,1.0e-5)){ - printf("At (X,Y,Z) : (%6.2lf,%6.2lf,%6.2lf) Field (Bx,By,Bz) is (%6.2lf,%6.2lf,%6.2lf)\n", - x[0],x[1],x[2],b[0],b[1],b[2]); - cerr<<"Magnetic field is not properly set, MUON tracking will not possble"<GetSize(); - Int_t * buffer = (Int_t *)block->GetData(); - - AliHLTMUONTracksBlockReader muontrackblock(buffer, size); - const AliHLTMUONTrackStruct* mtrack = muontrackblock.GetArray(); - //cout<<"NofTracks : "<GetNClusters()==0){ - delete muonTrack; - continue; - } - - rt.fLabel = ientry; - AliEveMUONTrack* track = new AliEveMUONTrack(&rt, fullTracks->GetPropagator()); - track->MakeMUONTrack(muonTrack); - //track->SetTitle(Form("HLT Track : %d, pt : %lf",ientry,TMath::Sqrt(((mtrack->fPx * mtrack->fPx) + (mtrack->fPy * mtrack->fPy))))); - track->SetName(Form("HLT Track : %d, pt : %lf",ientry,TMath::Sqrt(((mtrack->fPx * mtrack->fPx) + (mtrack->fPy * mtrack->fPy))))); - fullTracks->AddElement(track); - - mtrack++; - }//track loop - - return iResult; - -} +/************************************************************************** + * This file is property of and copyright by the ALICE HLT Project * + * ALICE Experiment at CERN, All rights reserved. * + * * + * Primary Authors: Svein Lindal * + * for The ALICE HLT Project. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/// @file AliHLTEvePhos.cxx +/// @author Svein Lindal +/// @brief Muon processor for the HLT EVE display + +#include "AliHLTEveMuon.h" +#include "AliHLTMUONDataBlockReader.h" +#include "AliHLTHOMERBlockDesc.h" +#include "TCanvas.h" +#include "TEveStraightLineSet.h" +#include "TEvePointSet.h" +#include "AliEveHLTEventManager.h" +#include "TEveManager.h" + + +#include "TEveVSDStructs.h" +#include "TGeoGlobalMagField.h" +#include "AliMUONTrack.h" +#include "AliMUONTrackParam.h" +#include "AliMUONESDInterface.h" +#include "AliMUONVTrackReconstructor.h" +#include "AliEveMUONTrack.h" +#include "AliHLTMUONConstants.h" +#include "AliHLTMUONUtils.h" +#include "AliMUONVCluster.h" +#include "AliMUONVClusterStore.h" +#include "AliMUONConstants.h" +#include "TEveTrackPropagator.h" + +using namespace std; + +class AliHLTMUONUtils; +class AliEveMuonTrack; + +ClassImp(AliHLTEveMuon); + +AliHLTEveMuon::AliHLTEveMuon() : + AliHLTEveBase("Muon"), + fFullTrackList(NULL), + fTracks(NULL), + fClusters(NULL) +{ + // Constructor. + SetMaxHistograms(6); +} + +AliHLTEveMuon::~AliHLTEveMuon() +{ + //Destructor + if (fFullTrackList) + delete fFullTrackList; + fFullTrackList = NULL; + + if (fTracks) + delete fTracks; + fTracks = NULL; + + if(fClusters) + delete fClusters; + fClusters = NULL; +} + + +void AliHLTEveMuon::ProcessBlock(AliHLTHOMERBlockDesc * block) { + //See header file for documentation + if ( (block->GetDataType().CompareTo("RECHITS") == 0) || (block->GetDataType().CompareTo("TRIGRECS") == 0) ) { + if(!fClusters) { + fClusters = CreateClusters(); + AddElement(fClusters); + } + ProcessClusters( block, fClusters ); + + }else if(block->GetDataType().CompareTo("MANTRACK") == 0){ + + if ( !fTracks ) { + fTracks = CreateTrackSet(); + AddElement(fTracks); + } + + ProcessTracks( block, fTracks ); + + }else if(block->GetDataType().CompareTo("TRACKS") == 0){ + + if ( !fFullTrackList ) { + fFullTrackList = CreateFullTrackList(); + AddElement(fFullTrackList); + } + + ProcessFullTracks( block, fFullTrackList ); + + } else if(block->GetDataType().CompareTo("ROOTHIST") == 0) { + ProcessHistogram(block); + } + +} + +TEvePointSet * AliHLTEveMuon::CreateClusters() { + //See header file for documentation + TEvePointSet * ps = new TEvePointSet("MUON RecHits"); + ps->SetMainColor(kBlue); + ps->SetMarkerStyle(20); + return ps; +} + +TEveStraightLineSet * AliHLTEveMuon::CreateTrackSet() { + // See header file + TEveStraightLineSet * lineset = new TEveStraightLineSet("MUON Tracks"); + lineset->SetMainColor(kRed); + lineset->SetLineWidth(3); + return lineset; +} + +TEveTrackList * AliHLTEveMuon::CreateFullTrackList(){ + // See header file + TEveTrackList * lineset = new TEveTrackList("MUON Full Tracks"); + lineset->SetMainColor(kBlue); + return lineset; +} + +void AliHLTEveMuon::ProcessHistogram(AliHLTHOMERBlockDesc * block ) { + //See header file for documentation + if(!fCanvas) { + fCanvas = CreateCanvas("MUON QA", "MUON QA"); + fCanvas->Divide(3, 2); + } + AddHistogramsToCanvas(block, fCanvas, fHistoCount); +} + +void AliHLTEveMuon::UpdateElements() { + //See header file for documentation + if(fCanvas) fCanvas->Update(); + if(fClusters) fClusters->ResetBBox(); + if(fTracks) fTracks->ElementChanged(); +} + +void AliHLTEveMuon::ResetElements(){ + //See header file for documentation + fHistoCount = 0; + + if ( fClusters ) fClusters->Reset(); + if ( fTracks ){ + fTracks->Destroy(); + fTracks = NULL; + } + if ( fFullTrackList ){ + fFullTrackList->Destroy(); + fFullTrackList = NULL; + } + + +} + +void AliHLTEveMuon::ProcessClusters(AliHLTHOMERBlockDesc * block, TEvePointSet * clusters) { + //See header file for documentation + unsigned long size = block->GetSize(); + Int_t * buffer ; + + buffer = (Int_t *)block->GetData(); + //cout<<"block size : "<GetDataType()<GetDataType().CompareTo("RECHITS") == 0){ + + AliHLTMUONRecHitsBlockReader trackblock((char*)buffer, size); + const AliHLTMUONRecHitStruct* hit = trackblock.GetArray(); + + for(AliHLTUInt32_t ientry = 0; ientry < trackblock.Nentries(); ientry++){ + if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0) + clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ); + hit++; + + }// track hit loop + } + + else{// if rechits + // if(!strcmp((BlockType(ULong64_t(reader->GetBlockDataType(i)))).Data(),"TRIGRECS")){ + + AliHLTMUONTriggerRecordsBlockReader trigblock(buffer, size); + const AliHLTMUONTriggerRecordStruct* trigrec = trigblock.GetArray(); + for(AliHLTUInt32_t ientry = 0; ientry < trigblock.Nentries(); ientry++){ + + const AliHLTMUONRecHitStruct* hit = &trigrec->fHit[0]; + for(AliHLTUInt32_t ch = 0; ch < 4; ch++) + { + if(hit->fX!=0.0 && hit->fY!=0.0 && hit->fZ!=0.0) + clusters->SetNextPoint(hit->fX,hit->fY,hit->fZ); + hit++; + }// trig chamber loop + trigrec++; + }//trig hit loop + }//else trigger + +} + +void AliHLTEveMuon::ProcessTracks(AliHLTHOMERBlockDesc * block, TEveStraightLineSet * tracks) { + //See header file for documentation + unsigned long size = block->GetSize(); + Int_t * buffer = (Int_t *)block->GetData(); + AliHLTMUONRecHitStruct hit1,hit2; + hit1.fX = hit1.fY = hit1.fZ = hit2.fX = hit2.fY = hit2.fZ = 0; + Int_t ch1=0, ch2=0; + Float_t x0=0.0,y0=0.0,z0=0.0; + Float_t x3=0.0,y3=0.0,z3=0.0; + if(block->GetDataType().CompareTo("MANTRACK") == 0){ + AliHLTMUONMansoTracksBlockReader mantrackblock(buffer, size); + const AliHLTMUONMansoTrackStruct* mtrack = mantrackblock.GetArray(); + for(AliHLTUInt32_t ientry = 0; ientry < mantrackblock.Nentries(); ientry++){ + const AliHLTMUONRecHitStruct* hit = &mtrack->fHit[0]; + for(AliHLTUInt32_t ch = 0; ch < 4; ch++){ + // cout << setw(10) << left << ch + 7 << setw(0); + // cout << setw(13) << left << hit->fX << setw(0); + // cout << setw(13) << left << hit->fY << setw(0); + // cout << hit->fZ << setw(0) << endl; + if(hit->fZ != 0.0){ + if(ch==0 || ch==1){ + hit1 = *hit; ch1 = ch+6; + }else{ + hit2 = *hit; ch2 = ch+6; + } + } + hit++; + }// trig chamber loop + // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch1,hit1.fX,hit1.fY,hit1.fZ); + // printf("ch : %d, (X,Y,Z) : (%f,%f,%f)\n",ch2,hit2.fX,hit2.fY,hit2.fZ); + // meminfo(); + z3 = AliMUONConstants::DefaultChamberZ(ch2+4); + y3 = hit1.fY - (hit1.fZ-z3)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ; + x3 = hit1.fX - (hit1.fZ-z3)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ; + + z0 = AliMUONConstants::DefaultChamberZ(ch1); + y0 = hit1.fY - (hit1.fZ-z0)*(hit1.fY - hit2.fY)/(hit1.fZ - hit2.fZ) ; + x0 = hit1.fX - (hit1.fZ-z0)*(hit1.fX - hit2.fX)/(hit1.fZ - hit2.fZ) ; + + + tracks->AddLine(x0,y0,z0,x3,y3,z3); + mtrack++; + } + // cout<<"NofManso Tracks : "<fFlags, sign, hitset + ); + + // add track parameters at vertex + TVector3 mom(muonHLTTrack->fPx, muonHLTTrack->fPy, muonHLTTrack->fPz); + AliMUONTrackParam paramAtVtx; + if (mom.Mag() != 0) + paramAtVtx.SetInverseBendingMomentum(muonHLTTrack->fInverseBendingMomentum); + else + paramAtVtx.SetInverseBendingMomentum(0.); + paramAtVtx.SetNonBendingSlope(TMath::Tan(muonHLTTrack->fThetaX)); + paramAtVtx.SetBendingSlope(TMath::Tan(muonHLTTrack->fThetaY)); + paramAtVtx.SetZ(muonHLTTrack->fZ); + paramAtVtx.SetBendingCoor(muonHLTTrack->fY); + paramAtVtx.SetNonBendingCoor(muonHLTTrack->fX); + muonTrack->SetTrackParamAtVertex(¶mAtVtx); + + //printf("(X,Y,Z) : (%8.3f,%8.3f,%8.3f)\n",muonHLTTrack->fX,muonHLTTrack->fY,muonHLTTrack->fZ); + + // add clusters + Int_t nHits = 0; + AliMUONVClusterStore* cStore = AliMUONESDInterface::NewClusterStore(); + if (!cStore) return -1; + AliMUONVCluster* cluster = cStore->CreateCluster(0,0,0); + AliMUONTrackParam trackParam; + for (int i = 0; i < 16; i++) + { + if (not hitset[i]) continue; + + AliHLTUInt8_t chamber; + AliHLTUInt16_t detElemId; + AliHLTMUONUtils::UnpackRecHitFlags((muonHLTTrack->fHit[i]).fFlags, chamber, detElemId); + + cluster->SetUniqueID(AliMUONVCluster::BuildUniqueID(chamber, detElemId, clusterIndex++)); + cluster->SetXYZ((muonHLTTrack->fHit[i]).fX, (muonHLTTrack->fHit[i]).fY, (muonHLTTrack->fHit[i]).fZ); + cluster->SetErrXY( // Use nominal values. + AliHLTMUONConstants::DefaultNonBendingReso(), + AliHLTMUONConstants::DefaultBendingReso() + ); + cluster->SetCharge(-1.); // Indicate no total charge calculated. + cluster->SetChi2(-1.); // Indicate no fit made. + trackParam.SetZ(cluster->GetZ()); + muonTrack->AddTrackParamAtCluster(trackParam, *cluster, kTRUE); + nHits++; + } + + // compute track parameters at each cluster + if (nHits > 0) { + AliMUONTrackParam *firstTrackParam = (AliMUONTrackParam*) muonTrack->GetTrackParamAtCluster()->First(); + trackParam = (*firstTrackParam); + if (!AliMUONESDInterface::GetTracker()) AliMUONESDInterface::ResetTracker(); + if (!AliMUONESDInterface::GetTracker()->RefitTrack(*muonTrack, kFALSE) && + muonTrack->GetGlobalChi2() < AliMUONTrack::MaxChi2()) { + *firstTrackParam = trackParam; + muonTrack->UpdateCovTrackParamAtCluster(); + } + } + + muonTrack->SetGlobalChi2(muonHLTTrack->fChi2); + + return 0; +} + +Int_t AliHLTEveMuon::ProcessFullTracks(AliHLTHOMERBlockDesc * block, TEveTrackList * fullTracks) { + + // See header for documentation + + Int_t iResult = 0; + + Double_t b[3], x[3]; + x[0] = 0.0 ; x[1] = 0.0 ; x[2] = -950.0; + TGeoGlobalMagField::Instance()->Field(x,b); + //" Field at (0.0, 0.0, -950.0) [at the middle of dipole magnet] + //should be (6.79, 0.03, -0.17) or similar value with change of sign" + if(TMath::AreEqualAbs(b[0],0.0,1.0e-5) and TMath::AreEqualAbs(b[1],0.0,1.0e-5) and TMath::AreEqualAbs(b[2],0.0,1.0e-5)){ + printf("At (X,Y,Z) : (%6.2lf,%6.2lf,%6.2lf) Field (Bx,By,Bz) is (%6.2lf,%6.2lf,%6.2lf)\n", + x[0],x[1],x[2],b[0],b[1],b[2]); + cerr<<"Magnetic field is not properly set, MUON tracking will not possble"<GetSize(); + Int_t * buffer = (Int_t *)block->GetData(); + + AliHLTMUONTracksBlockReader muontrackblock(buffer, size); + const AliHLTMUONTrackStruct* mtrack = muontrackblock.GetArray(); + //cout<<"NofTracks : "<GetNClusters()==0){ + delete muonTrack; + continue; + } + + rt.fLabel = ientry; + AliEveMUONTrack* track = new AliEveMUONTrack(&rt, fullTracks->GetPropagator()); + track->MakeMUONTrack(muonTrack); + //track->SetTitle(Form("HLT Track : %d, pt : %lf",ientry,TMath::Sqrt(((mtrack->fPx * mtrack->fPx) + (mtrack->fPy * mtrack->fPy))))); + track->SetName(Form("HLT Track : %d, pt : %lf",ientry,TMath::Sqrt(((mtrack->fPx * mtrack->fPx) + (mtrack->fPy * mtrack->fPy))))); + fullTracks->AddElement(track); + + mtrack++; + }//track loop + + return iResult; + +} diff --git a/HLT/EVE/AliHLTEveMuon.h b/HLT/EVE/AliHLTEveMuon.h index 3368c0f8087..8b0c2fbff3e 100644 --- a/HLT/EVE/AliHLTEveMuon.h +++ b/HLT/EVE/AliHLTEveMuon.h @@ -1,74 +1,74 @@ -/* This file is property of and copyright by the ALICE HLT Project * - * ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/// @file AliHLTEveCalo.h -/// @author Svein Lindal -/// @brief Muon Instance of Eve display processor - - -#ifndef ALIHLTEVEMUON_H -#define ALIHLTEVEMUON_H - -#include "AliHLTEveBase.h" -class AliHLTHOMERBlockDesc; -class TEveStraightLineSet; -class TEvePointSet; -class TEveTrackList; -class AliMUONTrack; -class AliHLTMUONTrackStruct; - -class AliHLTEveMuon : public AliHLTEveBase { - -public: - - /** Constructor **/ - AliHLTEveMuon(); - - /** Destructor **/ - ~AliHLTEveMuon(); - - /** Inherited form AliHLTEveBase */ - void ProcessBlock(AliHLTHOMERBlockDesc * block); - - /** inherited from AliHLTEveBase */ - void UpdateElements(); - - /** inherited from AliHLTEveBase */ - void ResetElements(); - -private: - - /** copy constructor prohibited */ - AliHLTEveMuon(const AliHLTEveMuon&); - /** assignment operator prohibited */ - AliHLTEveMuon& operator = (const AliHLTEveMuon &); - - /** Inherited from AliHLTEveBase */ - void ProcessHistogram(AliHLTHOMERBlockDesc * block ); - - /** Process block containing clusters */ - void ProcessClusters(AliHLTHOMERBlockDesc * block, TEvePointSet * clusters); - /** Process block containing Manso tracks */ - void ProcessTracks(AliHLTHOMERBlockDesc * block, TEveStraightLineSet * tracks); - /** Process block containing Full Tracks **/ - Int_t ProcessFullTracks(AliHLTHOMERBlockDesc * block, TEveTrackList * tracks); - - /** Convert muon Full Tracks block to Muon tracks **/ - int MakeMUONTrack(AliMUONTrack *muonTrack, const AliHLTMUONTrackStruct *muonHLTTrack); - - /** create the cluster pointset**/ - TEvePointSet * CreateClusters(); - /** create the Manso tracks lineset **/ - TEveStraightLineSet * CreateTrackSet(); - /** create the tracks for Full Tracker **/ - TEveTrackList * CreateFullTrackList(); - - TEveTrackList * fFullTrackList; //The track elements for Full Tracker - TEveStraightLineSet * fTracks; //The track elements for Manso Tracker - TEvePointSet * fClusters; //The cluster elements - - ClassDef(AliHLTEveMuon, 0); -}; - -#endif +/* This file is property of and copyright by the ALICE HLT Project * + * ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/// @file AliHLTEveCalo.h +/// @author Svein Lindal +/// @brief Muon Instance of Eve display processor + + +#ifndef ALIHLTEVEMUON_H +#define ALIHLTEVEMUON_H + +#include "AliHLTEveBase.h" +class AliHLTHOMERBlockDesc; +class TEveStraightLineSet; +class TEvePointSet; +class TEveTrackList; +class AliMUONTrack; +class AliHLTMUONTrackStruct; + +class AliHLTEveMuon : public AliHLTEveBase { + +public: + + /** Constructor **/ + AliHLTEveMuon(); + + /** Destructor **/ + ~AliHLTEveMuon(); + + /** Inherited form AliHLTEveBase */ + void ProcessBlock(AliHLTHOMERBlockDesc * block); + + /** inherited from AliHLTEveBase */ + void UpdateElements(); + + /** inherited from AliHLTEveBase */ + void ResetElements(); + +private: + + /** copy constructor prohibited */ + AliHLTEveMuon(const AliHLTEveMuon&); + /** assignment operator prohibited */ + AliHLTEveMuon& operator = (const AliHLTEveMuon &); + + /** Inherited from AliHLTEveBase */ + void ProcessHistogram(AliHLTHOMERBlockDesc * block ); + + /** Process block containing clusters */ + void ProcessClusters(AliHLTHOMERBlockDesc * block, TEvePointSet * clusters); + /** Process block containing Manso tracks */ + void ProcessTracks(AliHLTHOMERBlockDesc * block, TEveStraightLineSet * tracks); + /** Process block containing Full Tracks **/ + Int_t ProcessFullTracks(AliHLTHOMERBlockDesc * block, TEveTrackList * tracks); + + /** Convert muon Full Tracks block to Muon tracks **/ + int MakeMUONTrack(AliMUONTrack *muonTrack, const AliHLTMUONTrackStruct *muonHLTTrack); + + /** create the cluster pointset**/ + TEvePointSet * CreateClusters(); + /** create the Manso tracks lineset **/ + TEveStraightLineSet * CreateTrackSet(); + /** create the tracks for Full Tracker **/ + TEveTrackList * CreateFullTrackList(); + + TEveTrackList * fFullTrackList; //The track elements for Full Tracker + TEveStraightLineSet * fTracks; //The track elements for Manso Tracker + TEvePointSet * fClusters; //The cluster elements + + ClassDef(AliHLTEveMuon, 0); +}; + +#endif diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx index 4a88bbd3c1c..2b4a509c487 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx +++ b/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx @@ -1,416 +1,416 @@ -// $Id: AliAnalysisTaskHLTCalo.cxx 40285 2010-04-09 14:04:51Z kkanaki $ - -//************************************************************************** -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* * -//* Primary Authors: Zhongbao Yin , * -//* Kalliopi Kanaki * -//* for The ALICE HLT Project. * -//* * -//* Permission to use, copy, modify and distribute this software and its * -//* documentation strictly for non-commercial purposes is hereby granted * -//* without fee, provided that the above copyright notice appears in all * -//* copies and that both the copyright notice and this permission notice * -//* appear in the supporting documentation. The authors make no claims * -//* about the suitability of this software for any purpose. It is * -//* provided "as is" without express or implied warranty. * -//************************************************************************** - -/** @file AliAnalysisTaskHLTCalo.cxx - @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal - @date - @brief -*/ - -#include - -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TCanvas.h" -#include "TVector3.h" -#include "TString.h" -#include "TObjArray.h" -#include "TFile.h" -#include "TList.h" -#include "TRefArray.h" - -#include "AliESDEvent.h" -#include "AliESDRun.h" -#include "AliESDInputHandler.h" -#include "AliESDCaloCluster.h" -#include "AliESDtrack.h" -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliAnalysisTaskHLTCalo.h" - -#include "AliHLTCaloHistoInvMass.h" -#include "AliHLTCaloHistoClusterEnergy.h" -#include "AliHLTCaloHistoMatchedTracks.h" -#include "AliHLTCaloHistoProducer.h" - -#include "AliHLTGlobalTriggerDecision.h" - -ClassImp(AliAnalysisTaskHLTCalo) - -//=========================================================================================== - -AliAnalysisTaskHLTCalo::AliAnalysisTaskHLTCalo() : AliAnalysisTaskSE() - ,fUseHLTTrigger(kFALSE) - ,fESDRun(0) - ,fOutputList(0) - ,fHistOfflResiduals(NULL) - ,fHistOnlResiduals(NULL) - ,fHistOfflDz(NULL) - ,fHistOnlDz(NULL) - ,fHistOfflDxy(NULL) - ,fHistOnlDxy(NULL) - ,fNevt(0) - ,fTrgClsArray(0) - ,fGlobalHistoProdArrOff(NULL) - ,fGlobalHistoProdArrOn(NULL) - ,fClustersArray(NULL) - ,fCaloName("") -{ - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - // DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TH1 container - - //DefineOutput(1, TList::Class()); -} - -AliAnalysisTaskHLTCalo::AliAnalysisTaskHLTCalo(const char *name) -: -AliAnalysisTaskSE(name) - ,fUseHLTTrigger(kFALSE) - ,fESDRun(0) - ,fOutputList(0) - ,fHistOfflResiduals(NULL) - ,fHistOnlResiduals(NULL) - ,fHistOfflDz(NULL) - ,fHistOnlDz(NULL) - ,fHistOfflDxy(NULL) - ,fHistOnlDxy(NULL) - ,fHistOfflResidualsPos(NULL) - ,fHistOnlResidualsPos(NULL) - ,fHistOfflDzPos(NULL) - ,fHistOnlDzPos(NULL) - ,fHistOfflDxyPos(NULL) - ,fHistOnlDxyPos(NULL) - ,fHistOfflResidualsNeg(NULL) - ,fHistOnlResidualsNeg(NULL) - ,fHistOfflDzNeg(NULL) - ,fHistOnlDzNeg(NULL) - ,fHistOfflDxyNeg(NULL) - ,fHistOnlDxyNeg(NULL) - ,fHistNclvsNcl(NULL) - ,fHistTotEVsTotE(NULL) - ,fNevt(0) - ,fTrgClsArray(0) - ,fGlobalHistoProdArrOff(NULL) - ,fGlobalHistoProdArrOn(NULL) - ,fClustersArray(NULL) - ,fCaloName(name) -{ - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - // DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TH1 container - - DefineOutput(1, TList::Class()); -} - - -//---------------------------------------------------------------------------------------------------- - -void AliAnalysisTaskHLTCalo::UserCreateOutputObjects(){ -// Create histograms - - OpenFile(1); - - fOutputList = new TList(); - fOutputList->SetOwner(); - fOutputList->SetName(GetName()); - - CreateSpecificStuff(fOutputList); - -// --------------- define histograms ---------------------// - - fHistOfflResiduals = new TH1F("fHistOfflResiduals", "Residuals between cluster and nearest track in cm (offline)", 50, 0, 50); - fHistOnlResiduals = new TH1F("fHistOnlResiduals", "Residuals between cluster and nearest track in cm (online)", 50, 0, 50); - fHistOfflDxy = new TH1F("fHistOfflDxy", "Dxy between cluster and nearest track in cm (offline)", 80, -40, 40); - fHistOnlDxy = new TH1F("fHistOnlDxy", "Dxy between cluster and nearest track in cm (online)", 80, -40, 40); - fHistOfflDz = new TH1F("fHistOfflDz", "Dz between cluster and nearest track in cm (offline)", 80, -40, 40); - fHistOnlDz = new TH1F("fHistOnlDz", "Dz between cluster and nearest track in cm (online)", 80, -40, 40); - - fHistOfflResidualsPos = new TH1F("fHistOfflResidualsPos", "Residuals between cluster and nearest track in cm (offline)Pos", 50, 0, 50); - fHistOnlResidualsPos = new TH1F("fHistOnlResidualsPos", "Residuals between cluster and nearest track in cm (online)Pos", 50, 0, 50); - fHistOfflDxyPos = new TH1F("fHistOfflDxyPos", "Dxy between cluster and nearest track in cm (offline)Pos", 80, -40, 40); - fHistOnlDxyPos = new TH1F("fHistOnlDxyPos", "Dxy between cluster and nearest track in cm (online)Pos", 80, -40, 40); - fHistOfflDzPos = new TH1F("fHistOfflDzPos", "Dz between cluster and nearest track in cm (offline)Pos", 80, -40, 40); - fHistOnlDzPos = new TH1F("fHistOnlDzPos", "Dz between cluster and nearest track in cm (online)Pos", 80, -40, 40); - - fHistOfflResidualsNeg = new TH1F("fHistOfflResidualsNeg", "Residuals between cluster and nearest track in cm (offline)Neg", 50, 0, 50); - fHistOnlResidualsNeg = new TH1F("fHistOnlResidualsNeg", "Residuals between cluster and nearest track in cm (online)Neg", 50, 0, 50); - fHistOfflDxyNeg = new TH1F("fHistOfflDxyNeg", "Dxy between cluster and nearest track in cm (offline)Neg", 80, -40, 40); - fHistOnlDxyNeg = new TH1F("fHistOnlDxyNeg", "Dxy between cluster and nearest track in cm (online)Neg", 80, -40, 40); - fHistOfflDzNeg = new TH1F("fHistOfflDzNeg", "Dz between cluster and nearest track in cm (offline)Neg", 80, -40, 40); - fHistOnlDzNeg = new TH1F("fHistOnlDzNeg", "Dz between cluster and nearest track in cm (online)Neg", 80, -40, 40); - - fHistNclvsNcl = new TH2F("fHistNclvsNcl", "Number of offline cl vs online cl", 100, 0, 10, 100, 0, 10); - fHistTotEVsTotE = new TH2F("fHistTotEVsTotE", "Total energy in online cl vs total energy in offline cl", 300, 0, 150, 300, 0, 150); - fHistTotEVsTotE->SetXTitle("Offline energy sum"); - fHistTotEVsTotE->SetYTitle("Online energy sum"); - // HLT histogram producers - fGlobalHistoProdArrOff = new TObjArray(); - fGlobalHistoProdArrOn = new TObjArray(); - - - fGlobalHistoProdArrOff->AddLast(dynamic_cast(new AliHLTCaloHistoClusterEnergy(Form("%s_OFF", fCaloName.Data())))); - fGlobalHistoProdArrOff->AddLast(dynamic_cast(new AliHLTCaloHistoInvMass(Form("%s_OFF", fCaloName.Data() )))); - fGlobalHistoProdArrOff->AddLast(dynamic_cast(new AliHLTCaloHistoMatchedTracks(Form("%s_OFF", fCaloName.Data() )))); - - fGlobalHistoProdArrOn->AddLast(dynamic_cast(new AliHLTCaloHistoClusterEnergy(Form("%s_ON", fCaloName.Data() )))); - fGlobalHistoProdArrOn->AddLast(dynamic_cast(new AliHLTCaloHistoInvMass(Form("%s_ON", fCaloName.Data() )))); - fGlobalHistoProdArrOn->AddLast(dynamic_cast(new AliHLTCaloHistoMatchedTracks(Form("%s_ON", fCaloName.Data() )))); - - fClustersArray = new TRefArray(); - - // -------------- add histograms to the output TList -----------------// - - fOutputList->Add(fHistOfflResiduals); - fOutputList->Add(fHistOnlResiduals); - fOutputList->Add(fHistOfflDz); - fOutputList->Add(fHistOnlDz); - fOutputList->Add(fHistOfflDxy); - fOutputList->Add(fHistOnlDxy); - - - fOutputList->Add(fHistOfflResidualsPos); - fOutputList->Add(fHistOnlResidualsPos); - fOutputList->Add(fHistOfflDzPos); - fOutputList->Add(fHistOnlDzPos); - fOutputList->Add(fHistOfflDxyPos); - fOutputList->Add(fHistOnlDxyPos); - - - fOutputList->Add(fHistOfflResidualsNeg); - fOutputList->Add(fHistOnlResidualsNeg); - fOutputList->Add(fHistOfflDzNeg); - fOutputList->Add(fHistOnlDzNeg); - fOutputList->Add(fHistOfflDxyNeg); - fOutputList->Add(fHistOnlDxyNeg); - - - fOutputList->Add(fHistTotEVsTotE); - fOutputList->Add(fHistNclvsNcl); - - for(int ip = 0; ip < fGlobalHistoProdArrOff->GetEntriesFast(); ip++) { - AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOff->At(ip)); - fOutputList->AddAll(prod->GetHistograms()); - } - - for(int ip = 0; ip < fGlobalHistoProdArrOn->GetEntriesFast(); ip++) { - AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOn->At(ip)); - fOutputList->AddAll(prod->GetHistograms()); - } - - PostData(1, fOutputList); -} - -void AliAnalysisTaskHLTCalo::NotifyRun(){ -// This will not work if the active trigger classes change from run to run. -// Then one has to know all trigger classes before processing the data. - - AliESDEvent* evESD = dynamic_cast(InputEvent()); - TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses(); - - fTrgClsArray = trgClasses.Tokenize(" "); - //cout<GetEntries()<GetEntries(); i++){ -// TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); -// (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); -// (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); -// } - - evESD = NULL; -} - -void AliAnalysisTaskHLTCalo::UserExec(Option_t *){ - //UserExec - - AliESDEvent* evESD = dynamic_cast(InputEvent()); - - if (!evESD) { - Printf("ERROR: fESD not available"); - return; - } - - AliESDEvent* evHLTESD = 0; - AliESDInputHandler* esdH = dynamic_cast(fInputHandler); - - if(esdH) evHLTESD = esdH->GetHLTEvent(); - - if(!evHLTESD){ - Printf("ERROR: HLTesd not available"); - return; - } - - // To check if anything was triggered in HLT. - if(fUseHLTTrigger){ - if (!((AliHLTGlobalTriggerDecision*)evHLTESD->GetHLTTriggerDecision())->Result()){ - return; - // Process all and any events that were triggered by HLT. - } - } - - DoSpecificStuff(evESD, evHLTESD); - - Double_t offE = 0.0; - Double_t onE = 0.0; - - - for(int icl = 0; icl < evESD->GetNumberOfCaloClusters(); icl++) { - AliESDCaloCluster * cluster = evESD->GetCaloCluster(icl); - if(IsThisDetector(cluster)) { - - offE += cluster->E(); - fHistOfflResiduals->Fill(cluster->GetEmcCpvDistance()); - fHistOfflDz->Fill(cluster->GetTrackDz()); - fHistOfflDxy->Fill(cluster->GetTrackDx()); - - - TArrayI* matchedTracks = cluster->GetTracksMatched(); - - if (matchedTracks) { - if (matchedTracks->At(0) > -1) { - - Int_t trackID = matchedTracks->At(0); - - AliESDtrack * track = evESD->GetTrack(trackID); - - if(track) { - if (track->Charge() > 0) { - - fHistOfflResidualsPos->Fill(cluster->GetEmcCpvDistance());; - fHistOfflDzPos->Fill(cluster->GetTrackDz()); - fHistOfflDxyPos->Fill(cluster->GetTrackDx()); - - } else if (track->Charge() < 0) { - - fHistOfflResidualsNeg->Fill(cluster->GetEmcCpvDistance());; - fHistOfflDzNeg->Fill(cluster->GetTrackDz()); - fHistOfflDxyNeg->Fill(cluster->GetTrackDx()); - - } else { - cout <<"BALLE wtf!!"<GetNumberOfCaloClusters(); icl++) { - AliESDCaloCluster * cluster = evHLTESD->GetCaloCluster(icl); - if(IsThisDetector(cluster)) { - onE += cluster->E(); - fHistOnlResiduals->Fill(evHLTESD->GetCaloCluster(icl)->GetEmcCpvDistance()); - fHistOnlDxy->Fill(evHLTESD->GetCaloCluster(icl)->GetTrackDx()); - fHistOnlDz->Fill(evHLTESD->GetCaloCluster(icl)->GetTrackDz()); - - TArrayI* matchedTracks = cluster->GetTracksMatched(); - - if (matchedTracks) { - if (matchedTracks->At(0) > -1) { - - Int_t trackID = matchedTracks->At(0); - - AliESDtrack * track = evHLTESD->GetTrack(trackID); - - if(track) { - if (track->Charge() > 0) { - - fHistOnlResidualsPos->Fill(cluster->GetEmcCpvDistance());; - fHistOnlDzPos->Fill(cluster->GetTrackDz()); - fHistOnlDxyPos->Fill(cluster->GetTrackDx()); - - } else if (track->Charge() < 0) { - - fHistOnlResidualsNeg->Fill(cluster->GetEmcCpvDistance());; - fHistOnlDzNeg->Fill(cluster->GetTrackDz()); - fHistOnlDxyNeg->Fill(cluster->GetTrackDx()); - - } else { - cout <<"BALLE wtf!!"<GetEntriesFast(); ip++) { - AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOff->At(ip)); - prod->FillHistograms(nc, fClustersArray); - } - - Int_t nOnc = GetClusters(evHLTESD, fClustersArray); - for(int ip = 0; ip < fGlobalHistoProdArrOn->GetEntriesFast(); ip++) { - AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOn->At(ip)); - prod->FillHistograms(nOnc, fClustersArray); - } - - fHistNclvsNcl->Fill(nc, nOnc); - fHistTotEVsTotE->Fill(offE, onE); - - - fNevt++; - - // Post output data. - PostData(1, fOutputList); - -} - -void AliAnalysisTaskHLTCalo::Terminate(Option_t *){ - - - - // Printf("Number of tracks thru CE: %d", fNtracksThruZ0); - // Printf("Number of tracks thru CE from triggered events: %d", - // fNtracksThruZ0Trig); - - - // Draw result to the screen - // Called once at the end of the query - - // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTCalo","Trigger",10,10,510,510); - //fHistTrigger->DrawCopy("E"); - -} +// $Id: AliAnalysisTaskHLTCalo.cxx 40285 2010-04-09 14:04:51Z kkanaki $ + +//************************************************************************** +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* * +//* Primary Authors: Zhongbao Yin , * +//* Kalliopi Kanaki * +//* for The ALICE HLT Project. * +//* * +//* Permission to use, copy, modify and distribute this software and its * +//* documentation strictly for non-commercial purposes is hereby granted * +//* without fee, provided that the above copyright notice appears in all * +//* copies and that both the copyright notice and this permission notice * +//* appear in the supporting documentation. The authors make no claims * +//* about the suitability of this software for any purpose. It is * +//* provided "as is" without express or implied warranty. * +//************************************************************************** + +/** @file AliAnalysisTaskHLTCalo.cxx + @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal + @date + @brief +*/ + +#include + +#include "TChain.h" +#include "TTree.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TCanvas.h" +#include "TVector3.h" +#include "TString.h" +#include "TObjArray.h" +#include "TFile.h" +#include "TList.h" +#include "TRefArray.h" + +#include "AliESDEvent.h" +#include "AliESDRun.h" +#include "AliESDInputHandler.h" +#include "AliESDCaloCluster.h" +#include "AliESDtrack.h" +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliAnalysisTaskHLTCalo.h" + +#include "AliHLTCaloHistoInvMass.h" +#include "AliHLTCaloHistoClusterEnergy.h" +#include "AliHLTCaloHistoMatchedTracks.h" +#include "AliHLTCaloHistoProducer.h" + +#include "AliHLTGlobalTriggerDecision.h" + +ClassImp(AliAnalysisTaskHLTCalo) + +//=========================================================================================== + +AliAnalysisTaskHLTCalo::AliAnalysisTaskHLTCalo() : AliAnalysisTaskSE() + ,fUseHLTTrigger(kFALSE) + ,fESDRun(0) + ,fOutputList(0) + ,fHistOfflResiduals(NULL) + ,fHistOnlResiduals(NULL) + ,fHistOfflDz(NULL) + ,fHistOnlDz(NULL) + ,fHistOfflDxy(NULL) + ,fHistOnlDxy(NULL) + ,fNevt(0) + ,fTrgClsArray(0) + ,fGlobalHistoProdArrOff(NULL) + ,fGlobalHistoProdArrOn(NULL) + ,fClustersArray(NULL) + ,fCaloName("") +{ + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + // DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TH1 container + + //DefineOutput(1, TList::Class()); +} + +AliAnalysisTaskHLTCalo::AliAnalysisTaskHLTCalo(const char *name) +: +AliAnalysisTaskSE(name) + ,fUseHLTTrigger(kFALSE) + ,fESDRun(0) + ,fOutputList(0) + ,fHistOfflResiduals(NULL) + ,fHistOnlResiduals(NULL) + ,fHistOfflDz(NULL) + ,fHistOnlDz(NULL) + ,fHistOfflDxy(NULL) + ,fHistOnlDxy(NULL) + ,fHistOfflResidualsPos(NULL) + ,fHistOnlResidualsPos(NULL) + ,fHistOfflDzPos(NULL) + ,fHistOnlDzPos(NULL) + ,fHistOfflDxyPos(NULL) + ,fHistOnlDxyPos(NULL) + ,fHistOfflResidualsNeg(NULL) + ,fHistOnlResidualsNeg(NULL) + ,fHistOfflDzNeg(NULL) + ,fHistOnlDzNeg(NULL) + ,fHistOfflDxyNeg(NULL) + ,fHistOnlDxyNeg(NULL) + ,fHistNclvsNcl(NULL) + ,fHistTotEVsTotE(NULL) + ,fNevt(0) + ,fTrgClsArray(0) + ,fGlobalHistoProdArrOff(NULL) + ,fGlobalHistoProdArrOn(NULL) + ,fClustersArray(NULL) + ,fCaloName(name) +{ + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + // DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TH1 container + + DefineOutput(1, TList::Class()); +} + + +//---------------------------------------------------------------------------------------------------- + +void AliAnalysisTaskHLTCalo::UserCreateOutputObjects(){ +// Create histograms + + OpenFile(1); + + fOutputList = new TList(); + fOutputList->SetOwner(); + fOutputList->SetName(GetName()); + + CreateSpecificStuff(fOutputList); + +// --------------- define histograms ---------------------// + + fHistOfflResiduals = new TH1F("fHistOfflResiduals", "Residuals between cluster and nearest track in cm (offline)", 50, 0, 50); + fHistOnlResiduals = new TH1F("fHistOnlResiduals", "Residuals between cluster and nearest track in cm (online)", 50, 0, 50); + fHistOfflDxy = new TH1F("fHistOfflDxy", "Dxy between cluster and nearest track in cm (offline)", 80, -40, 40); + fHistOnlDxy = new TH1F("fHistOnlDxy", "Dxy between cluster and nearest track in cm (online)", 80, -40, 40); + fHistOfflDz = new TH1F("fHistOfflDz", "Dz between cluster and nearest track in cm (offline)", 80, -40, 40); + fHistOnlDz = new TH1F("fHistOnlDz", "Dz between cluster and nearest track in cm (online)", 80, -40, 40); + + fHistOfflResidualsPos = new TH1F("fHistOfflResidualsPos", "Residuals between cluster and nearest track in cm (offline)Pos", 50, 0, 50); + fHistOnlResidualsPos = new TH1F("fHistOnlResidualsPos", "Residuals between cluster and nearest track in cm (online)Pos", 50, 0, 50); + fHistOfflDxyPos = new TH1F("fHistOfflDxyPos", "Dxy between cluster and nearest track in cm (offline)Pos", 80, -40, 40); + fHistOnlDxyPos = new TH1F("fHistOnlDxyPos", "Dxy between cluster and nearest track in cm (online)Pos", 80, -40, 40); + fHistOfflDzPos = new TH1F("fHistOfflDzPos", "Dz between cluster and nearest track in cm (offline)Pos", 80, -40, 40); + fHistOnlDzPos = new TH1F("fHistOnlDzPos", "Dz between cluster and nearest track in cm (online)Pos", 80, -40, 40); + + fHistOfflResidualsNeg = new TH1F("fHistOfflResidualsNeg", "Residuals between cluster and nearest track in cm (offline)Neg", 50, 0, 50); + fHistOnlResidualsNeg = new TH1F("fHistOnlResidualsNeg", "Residuals between cluster and nearest track in cm (online)Neg", 50, 0, 50); + fHistOfflDxyNeg = new TH1F("fHistOfflDxyNeg", "Dxy between cluster and nearest track in cm (offline)Neg", 80, -40, 40); + fHistOnlDxyNeg = new TH1F("fHistOnlDxyNeg", "Dxy between cluster and nearest track in cm (online)Neg", 80, -40, 40); + fHistOfflDzNeg = new TH1F("fHistOfflDzNeg", "Dz between cluster and nearest track in cm (offline)Neg", 80, -40, 40); + fHistOnlDzNeg = new TH1F("fHistOnlDzNeg", "Dz between cluster and nearest track in cm (online)Neg", 80, -40, 40); + + fHistNclvsNcl = new TH2F("fHistNclvsNcl", "Number of offline cl vs online cl", 100, 0, 10, 100, 0, 10); + fHistTotEVsTotE = new TH2F("fHistTotEVsTotE", "Total energy in online cl vs total energy in offline cl", 300, 0, 150, 300, 0, 150); + fHistTotEVsTotE->SetXTitle("Offline energy sum"); + fHistTotEVsTotE->SetYTitle("Online energy sum"); + // HLT histogram producers + fGlobalHistoProdArrOff = new TObjArray(); + fGlobalHistoProdArrOn = new TObjArray(); + + + fGlobalHistoProdArrOff->AddLast(dynamic_cast(new AliHLTCaloHistoClusterEnergy(Form("%s_OFF", fCaloName.Data())))); + fGlobalHistoProdArrOff->AddLast(dynamic_cast(new AliHLTCaloHistoInvMass(Form("%s_OFF", fCaloName.Data() )))); + fGlobalHistoProdArrOff->AddLast(dynamic_cast(new AliHLTCaloHistoMatchedTracks(Form("%s_OFF", fCaloName.Data() )))); + + fGlobalHistoProdArrOn->AddLast(dynamic_cast(new AliHLTCaloHistoClusterEnergy(Form("%s_ON", fCaloName.Data() )))); + fGlobalHistoProdArrOn->AddLast(dynamic_cast(new AliHLTCaloHistoInvMass(Form("%s_ON", fCaloName.Data() )))); + fGlobalHistoProdArrOn->AddLast(dynamic_cast(new AliHLTCaloHistoMatchedTracks(Form("%s_ON", fCaloName.Data() )))); + + fClustersArray = new TRefArray(); + + // -------------- add histograms to the output TList -----------------// + + fOutputList->Add(fHistOfflResiduals); + fOutputList->Add(fHistOnlResiduals); + fOutputList->Add(fHistOfflDz); + fOutputList->Add(fHistOnlDz); + fOutputList->Add(fHistOfflDxy); + fOutputList->Add(fHistOnlDxy); + + + fOutputList->Add(fHistOfflResidualsPos); + fOutputList->Add(fHistOnlResidualsPos); + fOutputList->Add(fHistOfflDzPos); + fOutputList->Add(fHistOnlDzPos); + fOutputList->Add(fHistOfflDxyPos); + fOutputList->Add(fHistOnlDxyPos); + + + fOutputList->Add(fHistOfflResidualsNeg); + fOutputList->Add(fHistOnlResidualsNeg); + fOutputList->Add(fHistOfflDzNeg); + fOutputList->Add(fHistOnlDzNeg); + fOutputList->Add(fHistOfflDxyNeg); + fOutputList->Add(fHistOnlDxyNeg); + + + fOutputList->Add(fHistTotEVsTotE); + fOutputList->Add(fHistNclvsNcl); + + for(int ip = 0; ip < fGlobalHistoProdArrOff->GetEntriesFast(); ip++) { + AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOff->At(ip)); + fOutputList->AddAll(prod->GetHistograms()); + } + + for(int ip = 0; ip < fGlobalHistoProdArrOn->GetEntriesFast(); ip++) { + AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOn->At(ip)); + fOutputList->AddAll(prod->GetHistograms()); + } + + PostData(1, fOutputList); +} + +void AliAnalysisTaskHLTCalo::NotifyRun(){ +// This will not work if the active trigger classes change from run to run. +// Then one has to know all trigger classes before processing the data. + + AliESDEvent* evESD = dynamic_cast(InputEvent()); + TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses(); + + fTrgClsArray = trgClasses.Tokenize(" "); + //cout<GetEntries()<GetEntries(); i++){ +// TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); +// (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); +// (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); +// } + + evESD = NULL; +} + +void AliAnalysisTaskHLTCalo::UserExec(Option_t *){ + //UserExec + + AliESDEvent* evESD = dynamic_cast(InputEvent()); + + if (!evESD) { + Printf("ERROR: fESD not available"); + return; + } + + AliESDEvent* evHLTESD = 0; + AliESDInputHandler* esdH = dynamic_cast(fInputHandler); + + if(esdH) evHLTESD = esdH->GetHLTEvent(); + + if(!evHLTESD){ + Printf("ERROR: HLTesd not available"); + return; + } + + // To check if anything was triggered in HLT. + if(fUseHLTTrigger){ + if (!((AliHLTGlobalTriggerDecision*)evHLTESD->GetHLTTriggerDecision())->Result()){ + return; + // Process all and any events that were triggered by HLT. + } + } + + DoSpecificStuff(evESD, evHLTESD); + + Double_t offE = 0.0; + Double_t onE = 0.0; + + + for(int icl = 0; icl < evESD->GetNumberOfCaloClusters(); icl++) { + AliESDCaloCluster * cluster = evESD->GetCaloCluster(icl); + if(IsThisDetector(cluster)) { + + offE += cluster->E(); + fHistOfflResiduals->Fill(cluster->GetEmcCpvDistance()); + fHistOfflDz->Fill(cluster->GetTrackDz()); + fHistOfflDxy->Fill(cluster->GetTrackDx()); + + + TArrayI* matchedTracks = cluster->GetTracksMatched(); + + if (matchedTracks) { + if (matchedTracks->At(0) > -1) { + + Int_t trackID = matchedTracks->At(0); + + AliESDtrack * track = evESD->GetTrack(trackID); + + if(track) { + if (track->Charge() > 0) { + + fHistOfflResidualsPos->Fill(cluster->GetEmcCpvDistance());; + fHistOfflDzPos->Fill(cluster->GetTrackDz()); + fHistOfflDxyPos->Fill(cluster->GetTrackDx()); + + } else if (track->Charge() < 0) { + + fHistOfflResidualsNeg->Fill(cluster->GetEmcCpvDistance());; + fHistOfflDzNeg->Fill(cluster->GetTrackDz()); + fHistOfflDxyNeg->Fill(cluster->GetTrackDx()); + + } else { + cout <<"BALLE wtf!!"<GetNumberOfCaloClusters(); icl++) { + AliESDCaloCluster * cluster = evHLTESD->GetCaloCluster(icl); + if(IsThisDetector(cluster)) { + onE += cluster->E(); + fHistOnlResiduals->Fill(evHLTESD->GetCaloCluster(icl)->GetEmcCpvDistance()); + fHistOnlDxy->Fill(evHLTESD->GetCaloCluster(icl)->GetTrackDx()); + fHistOnlDz->Fill(evHLTESD->GetCaloCluster(icl)->GetTrackDz()); + + TArrayI* matchedTracks = cluster->GetTracksMatched(); + + if (matchedTracks) { + if (matchedTracks->At(0) > -1) { + + Int_t trackID = matchedTracks->At(0); + + AliESDtrack * track = evHLTESD->GetTrack(trackID); + + if(track) { + if (track->Charge() > 0) { + + fHistOnlResidualsPos->Fill(cluster->GetEmcCpvDistance());; + fHistOnlDzPos->Fill(cluster->GetTrackDz()); + fHistOnlDxyPos->Fill(cluster->GetTrackDx()); + + } else if (track->Charge() < 0) { + + fHistOnlResidualsNeg->Fill(cluster->GetEmcCpvDistance());; + fHistOnlDzNeg->Fill(cluster->GetTrackDz()); + fHistOnlDxyNeg->Fill(cluster->GetTrackDx()); + + } else { + cout <<"BALLE wtf!!"<GetEntriesFast(); ip++) { + AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOff->At(ip)); + prod->FillHistograms(nc, fClustersArray); + } + + Int_t nOnc = GetClusters(evHLTESD, fClustersArray); + for(int ip = 0; ip < fGlobalHistoProdArrOn->GetEntriesFast(); ip++) { + AliHLTCaloHistoProducer *prod = dynamic_cast(fGlobalHistoProdArrOn->At(ip)); + prod->FillHistograms(nOnc, fClustersArray); + } + + fHistNclvsNcl->Fill(nc, nOnc); + fHistTotEVsTotE->Fill(offE, onE); + + + fNevt++; + + // Post output data. + PostData(1, fOutputList); + +} + +void AliAnalysisTaskHLTCalo::Terminate(Option_t *){ + + + + // Printf("Number of tracks thru CE: %d", fNtracksThruZ0); + // Printf("Number of tracks thru CE from triggered events: %d", + // fNtracksThruZ0Trig); + + + // Draw result to the screen + // Called once at the end of the query + + // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTCalo","Trigger",10,10,510,510); + //fHistTrigger->DrawCopy("E"); + +} diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTCalo.h b/HLT/QA/tasks/AliAnalysisTaskHLTCalo.h index ac0bcc5a5c1..45ad1bd0b63 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTCalo.h +++ b/HLT/QA/tasks/AliAnalysisTaskHLTCalo.h @@ -1,100 +1,100 @@ -// $Id: AliAnalysisTaskHLTCalo.h 40285 2010-04-09 14:04:51Z kkanaki $ - -#ifndef ALIANALYSISTASKHLTCALO_H -#define ALIANALYSISTASKHLTCALO_H - -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* See cxx source for full Copyright notice * - -/** @file AliAnalysisTaskHLTTPC.h - @author Zhongbao Yin, Kalliopi Kanaki - @date - @brief An analysis task to compare the offline and HLT esd trees -*/ - - -// forward declarations -class TH1F; -class TH2F; -class TList; -class AliESDEvent; -class AliESDtrack; -class AliESDRun; -class TObjArray; -class TRefArray; - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskHLTCalo : public AliAnalysisTaskSE { - -public: - - AliAnalysisTaskHLTCalo(); - AliAnalysisTaskHLTCalo(const char *name); - virtual ~AliAnalysisTaskHLTCalo() {} - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - //virtual Bool_t Notify(); - virtual void NotifyRun(); - - virtual void DoSpecificStuff(const AliESDEvent * /*evESD*/, const AliESDEvent * /*evHLTESD*/) {return;} - virtual void CreateSpecificStuff(const TList * /*fOutputList*/) {return;} - virtual Bool_t IsThisDetector(AliESDCaloCluster * cluster) { return cluster->IsPHOS(); } - virtual Int_t GetClusters(AliESDEvent * event, TRefArray * clusters) { return event->GetPHOSClusters(clusters); } - - //Use only triggered events - void SetUseHLTTriggerDecision(Bool_t useHLT = kFALSE) {fUseHLTTrigger = useHLT;} - -private: - Bool_t fUseHLTTrigger; // boolean to enable the HLT triggered events - AliESDRun *fESDRun; //!Transient, pointer to esds - TList *fOutputList; //List of histograms to be stored - - TH1F *fHistOfflResiduals; //histogram - TH1F *fHistOnlResiduals; //histogram - TH1F *fHistOfflDz; //histogram - TH1F *fHistOnlDz; //histogram - TH1F *fHistOfflDxy; //histogram - TH1F *fHistOnlDxy; //histogram - - - TH1F *fHistOfflResidualsPos; //histogram - TH1F *fHistOnlResidualsPos; //histogram - TH1F *fHistOfflDzPos; //histogram - TH1F *fHistOnlDzPos; //histogram - TH1F *fHistOfflDxyPos; //histogram - TH1F *fHistOnlDxyPos; //histogram - - - TH1F *fHistOfflResidualsNeg; //histogram - TH1F *fHistOnlResidualsNeg; //histogram - TH1F *fHistOfflDzNeg; //histogram - TH1F *fHistOnlDzNeg; //histogram - TH1F *fHistOfflDxyNeg; //histogram - TH1F *fHistOnlDxyNeg; //histogram - - TH2F * fHistNclvsNcl; //histogram - TH2F * fHistTotEVsTotE;//histogram - - - Int_t fNevt; //Number of events - TObjArray *fTrgClsArray; //Trigger cluster array - - TObjArray * fGlobalHistoProdArrOff; //!transient array of histogram producer classes - TObjArray * fGlobalHistoProdArrOn; //!transient array of histogram producer classes - - TRefArray * fClustersArray; //!transient Array to contain calo clusters - - TString fCaloName; //!transient PHOS or EMCAL - - /** copy constructor */ - AliAnalysisTaskHLTCalo(const AliAnalysisTaskHLTCalo&); - /** assignment operator */ - AliAnalysisTaskHLTCalo& operator=(const AliAnalysisTaskHLTCalo&); - - ClassDef(AliAnalysisTaskHLTCalo, 1); -}; - -#endif +// $Id: AliAnalysisTaskHLTCalo.h 40285 2010-04-09 14:04:51Z kkanaki $ + +#ifndef ALIANALYSISTASKHLTCALO_H +#define ALIANALYSISTASKHLTCALO_H + +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* See cxx source for full Copyright notice * + +/** @file AliAnalysisTaskHLTTPC.h + @author Zhongbao Yin, Kalliopi Kanaki + @date + @brief An analysis task to compare the offline and HLT esd trees +*/ + + +// forward declarations +class TH1F; +class TH2F; +class TList; +class AliESDEvent; +class AliESDtrack; +class AliESDRun; +class TObjArray; +class TRefArray; + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskHLTCalo : public AliAnalysisTaskSE { + +public: + + AliAnalysisTaskHLTCalo(); + AliAnalysisTaskHLTCalo(const char *name); + virtual ~AliAnalysisTaskHLTCalo() {} + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + //virtual Bool_t Notify(); + virtual void NotifyRun(); + + virtual void DoSpecificStuff(const AliESDEvent * /*evESD*/, const AliESDEvent * /*evHLTESD*/) {return;} + virtual void CreateSpecificStuff(const TList * /*fOutputList*/) {return;} + virtual Bool_t IsThisDetector(AliESDCaloCluster * cluster) { return cluster->IsPHOS(); } + virtual Int_t GetClusters(AliESDEvent * event, TRefArray * clusters) { return event->GetPHOSClusters(clusters); } + + //Use only triggered events + void SetUseHLTTriggerDecision(Bool_t useHLT = kFALSE) {fUseHLTTrigger = useHLT;} + +private: + Bool_t fUseHLTTrigger; // boolean to enable the HLT triggered events + AliESDRun *fESDRun; //!Transient, pointer to esds + TList *fOutputList; //List of histograms to be stored + + TH1F *fHistOfflResiduals; //histogram + TH1F *fHistOnlResiduals; //histogram + TH1F *fHistOfflDz; //histogram + TH1F *fHistOnlDz; //histogram + TH1F *fHistOfflDxy; //histogram + TH1F *fHistOnlDxy; //histogram + + + TH1F *fHistOfflResidualsPos; //histogram + TH1F *fHistOnlResidualsPos; //histogram + TH1F *fHistOfflDzPos; //histogram + TH1F *fHistOnlDzPos; //histogram + TH1F *fHistOfflDxyPos; //histogram + TH1F *fHistOnlDxyPos; //histogram + + + TH1F *fHistOfflResidualsNeg; //histogram + TH1F *fHistOnlResidualsNeg; //histogram + TH1F *fHistOfflDzNeg; //histogram + TH1F *fHistOnlDzNeg; //histogram + TH1F *fHistOfflDxyNeg; //histogram + TH1F *fHistOnlDxyNeg; //histogram + + TH2F * fHistNclvsNcl; //histogram + TH2F * fHistTotEVsTotE;//histogram + + + Int_t fNevt; //Number of events + TObjArray *fTrgClsArray; //Trigger cluster array + + TObjArray * fGlobalHistoProdArrOff; //!transient array of histogram producer classes + TObjArray * fGlobalHistoProdArrOn; //!transient array of histogram producer classes + + TRefArray * fClustersArray; //!transient Array to contain calo clusters + + TString fCaloName; //!transient PHOS or EMCAL + + /** copy constructor */ + AliAnalysisTaskHLTCalo(const AliAnalysisTaskHLTCalo&); + /** assignment operator */ + AliAnalysisTaskHLTCalo& operator=(const AliAnalysisTaskHLTCalo&); + + ClassDef(AliAnalysisTaskHLTCalo, 1); +}; + +#endif diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx index 55a4aa01733..15c79f04713 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx +++ b/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx @@ -1,87 +1,87 @@ -// $Id: AliAnalysisTaskHLTEMCAL.cxx 40285 2010-04-09 14:04:51Z kkanaki $ - -//************************************************************************** -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* * -//* Primary Authors: Zhongbao Yin , * -//* Kalliopi Kanaki * -//* Svein Lindal * -//* for The ALICE HLT Project. * -//* * -//* Permission to use, copy, modify and distribute this software and its * -//* documentation strictly for non-commercial purposes is hereby granted * -//* without fee, provided that the above copyright notice appears in all * -//* copies and that both the copyright notice and this permission notice * -//* appear in the supporting documentation. The authors make no claims * -//* about the suitability of this software for any purpose. It is * -//* provided "as is" without express or implied warranty. * -//************************************************************************** - -/** @file AliAnalysisTaskHLTEMCAL.cxx - @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal - @date - @brief -*/ - -#include - -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TCanvas.h" -#include "TVector3.h" -#include "TString.h" -#include "TObjArray.h" -#include "TFile.h" - -#include "AliESDEvent.h" -#include "AliESDRun.h" -#include "AliESDInputHandler.h" -#include "AliESDCaloCluster.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliAnalysisTaskHLTEMCAL.h" - - -ClassImp(AliAnalysisTaskHLTEMCAL) - - -//=========================================================================================== - -AliAnalysisTaskHLTEMCAL::AliAnalysisTaskHLTEMCAL() : AliAnalysisTaskHLTCalo() -{ - // Constructor -} -AliAnalysisTaskHLTEMCAL::AliAnalysisTaskHLTEMCAL(const char *name) : AliAnalysisTaskHLTCalo(name) -{ - // Constructor -} - -void AliAnalysisTaskHLTEMCAL::CreateSpecificStuff(const TList * fOutputList){ - //Create stuff specific to EMCAL class. - if(fOutputList) - return; - else - fOutputList = new TList(); - return; -} - - -void AliAnalysisTaskHLTEMCAL::DoSpecificStuff(const AliESDEvent * evESD, const AliESDEvent * evHLTESD) const { - //Do EMCAL specific tests - if(evESD || evHLTESD) - return; - else - return; -} - -Int_t AliAnalysisTaskHLTEMCAL::GetClusters(AliESDEvent * event, TRefArray * clusters) { - return event->GetEMCALClusters(clusters); -} - -Bool_t AliAnalysisTaskHLTEMCAL::IsThisDetector(AliESDCaloCluster * cluster) { - return cluster->IsEMCAL(); -} +// $Id: AliAnalysisTaskHLTEMCAL.cxx 40285 2010-04-09 14:04:51Z kkanaki $ + +//************************************************************************** +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* * +//* Primary Authors: Zhongbao Yin , * +//* Kalliopi Kanaki * +//* Svein Lindal * +//* for The ALICE HLT Project. * +//* * +//* Permission to use, copy, modify and distribute this software and its * +//* documentation strictly for non-commercial purposes is hereby granted * +//* without fee, provided that the above copyright notice appears in all * +//* copies and that both the copyright notice and this permission notice * +//* appear in the supporting documentation. The authors make no claims * +//* about the suitability of this software for any purpose. It is * +//* provided "as is" without express or implied warranty. * +//************************************************************************** + +/** @file AliAnalysisTaskHLTEMCAL.cxx + @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal + @date + @brief +*/ + +#include + +#include "TChain.h" +#include "TTree.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TCanvas.h" +#include "TVector3.h" +#include "TString.h" +#include "TObjArray.h" +#include "TFile.h" + +#include "AliESDEvent.h" +#include "AliESDRun.h" +#include "AliESDInputHandler.h" +#include "AliESDCaloCluster.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliAnalysisTaskHLTEMCAL.h" + + +ClassImp(AliAnalysisTaskHLTEMCAL) + + +//=========================================================================================== + +AliAnalysisTaskHLTEMCAL::AliAnalysisTaskHLTEMCAL() : AliAnalysisTaskHLTCalo() +{ + // Constructor +} +AliAnalysisTaskHLTEMCAL::AliAnalysisTaskHLTEMCAL(const char *name) : AliAnalysisTaskHLTCalo(name) +{ + // Constructor +} + +void AliAnalysisTaskHLTEMCAL::CreateSpecificStuff(const TList * fOutputList){ + //Create stuff specific to EMCAL class. + if(fOutputList) + return; + else + fOutputList = new TList(); + return; +} + + +void AliAnalysisTaskHLTEMCAL::DoSpecificStuff(const AliESDEvent * evESD, const AliESDEvent * evHLTESD) const { + //Do EMCAL specific tests + if(evESD || evHLTESD) + return; + else + return; +} + +Int_t AliAnalysisTaskHLTEMCAL::GetClusters(AliESDEvent * event, TRefArray * clusters) { + return event->GetEMCALClusters(clusters); +} + +Bool_t AliAnalysisTaskHLTEMCAL::IsThisDetector(AliESDCaloCluster * cluster) { + return cluster->IsEMCAL(); +} diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h b/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h index 8937904ed09..34472c4fc4d 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h +++ b/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h @@ -1,53 +1,53 @@ -// $Id: AliAnalysisTaskHLTEMCAL.h 40285 2010-04-09 14:04:51Z kkanaki $ - -#ifndef ALIANALYSISTASKHLTEMCAL_H -#define ALIANALYSISTASKHLTEMCAL_H - -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* See cxx source for full Copyright notice * - -/** @file AliAnalysisTaskHLTTPC.h - @author Zhongbao Yin, Kalliopi Kanaki - @date - @brief An analysis task to compare the offline and HLT esd trees -*/ - - -// forward declarations -class TH1F; -class TH2F; -class TList; -class AliESDEvent; -class AliESDtrack; -class AliESDRun; -class TObjArray; - -#include "AliAnalysisTaskHLTCalo.h" - -class AliAnalysisTaskHLTEMCAL : public AliAnalysisTaskHLTCalo { - -public: - AliAnalysisTaskHLTEMCAL(); - AliAnalysisTaskHLTEMCAL(const char *name); - virtual ~AliAnalysisTaskHLTEMCAL() {} - -private: - - - /** copy constructor */ - AliAnalysisTaskHLTEMCAL(const AliAnalysisTaskHLTEMCAL&); - /** assignment operator */ - AliAnalysisTaskHLTEMCAL& operator=(const AliAnalysisTaskHLTEMCAL&); - - void CreateSpecificStuff(TList * fOutputList); - void DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD) const; - - Int_t GetClusters(AliESDEvent * event, TRefArray * clusters); - Bool_t IsThisDetector(AliESDCaloCluster * cluster); - - - ClassDef(AliAnalysisTaskHLTEMCAL, 0); -}; - -#endif +// $Id: AliAnalysisTaskHLTEMCAL.h 40285 2010-04-09 14:04:51Z kkanaki $ + +#ifndef ALIANALYSISTASKHLTEMCAL_H +#define ALIANALYSISTASKHLTEMCAL_H + +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* See cxx source for full Copyright notice * + +/** @file AliAnalysisTaskHLTTPC.h + @author Zhongbao Yin, Kalliopi Kanaki + @date + @brief An analysis task to compare the offline and HLT esd trees +*/ + + +// forward declarations +class TH1F; +class TH2F; +class TList; +class AliESDEvent; +class AliESDtrack; +class AliESDRun; +class TObjArray; + +#include "AliAnalysisTaskHLTCalo.h" + +class AliAnalysisTaskHLTEMCAL : public AliAnalysisTaskHLTCalo { + +public: + AliAnalysisTaskHLTEMCAL(); + AliAnalysisTaskHLTEMCAL(const char *name); + virtual ~AliAnalysisTaskHLTEMCAL() {} + +private: + + + /** copy constructor */ + AliAnalysisTaskHLTEMCAL(const AliAnalysisTaskHLTEMCAL&); + /** assignment operator */ + AliAnalysisTaskHLTEMCAL& operator=(const AliAnalysisTaskHLTEMCAL&); + + void CreateSpecificStuff(TList * fOutputList); + void DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD) const; + + Int_t GetClusters(AliESDEvent * event, TRefArray * clusters); + Bool_t IsThisDetector(AliESDCaloCluster * cluster); + + + ClassDef(AliAnalysisTaskHLTEMCAL, 0); +}; + +#endif diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx index 7d272d3f30c..2249786e76d 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx +++ b/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx @@ -1,295 +1,295 @@ -// $Id$ - -//************************************************************************** -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* * -//* Primary Authors: Zhongbao Yin , * -//* Kalliopi Kanaki * -//* Svein Lindal * -//* for The ALICE HLT Project. * -//* * -//* Permission to use, copy, modify and distribute this software and its * -//* documentation strictly for non-commercial purposes is hereby granted * -//* without fee, provided that the above copyright notice appears in all * -//* copies and that both the copyright notice and this permission notice * -//* appear in the supporting documentation. The authors make no claims * -//* about the suitability of this software for any purpose. It is * -//* provided "as is" without express or implied warranty. * -//************************************************************************** - -/** @file AliAnalysisTaskHLTPHOS.cxx - @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal - @date - @brief -*/ - -#include - -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TCanvas.h" -#include "TVector3.h" -#include "TString.h" -#include "TObjArray.h" -#include "TFile.h" - -#include "AliESDEvent.h" -#include "AliESDRun.h" -#include "AliESDInputHandler.h" -#include "AliESDCaloCluster.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliAnalysisTaskHLTPHOS.h" - - -ClassImp(AliAnalysisTaskHLTPHOS) - - -//=========================================================================================== - -AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS() : AliAnalysisTaskHLTCalo() - ,fHistOnlTrk2PHOS(0) - ,fHistOfflTrk2PHOS(0) - ,fHistOfflTrk2PHOSTrig(0) - ,fHistOfflTrk2PHOSNoTrig(0) -{ - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - // DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TH1 container - - // DefineOutput(1, TList::Class()); -} - - -AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS(const char *name) : AliAnalysisTaskHLTCalo(name) - ,fHistOnlTrk2PHOS(0) - ,fHistOfflTrk2PHOS(0) - ,fHistOfflTrk2PHOSTrig(0) - ,fHistOfflTrk2PHOSNoTrig(0) -{ - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - // DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TH1 container - - // DefineOutput(1, TList::Class()); -} - -const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMin = -0.12; -const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMax = 0.12; -const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMin[5] = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599}; -const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMax[5] = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505}; -const Float_t AliAnalysisTaskHLTPHOS::fgkNormX[5] = {-0.642788, -0.34202, 0, 0.34202, 0.642788}; -const Float_t AliAnalysisTaskHLTPHOS::fgkNormY[5] = {-0.766044, -0.939693, -1, -0.939693, -0.766044}; -const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682}; -const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38}; - -//---------------------------------------------------------------------------------------------------- - -void AliAnalysisTaskHLTPHOS::CreateSpecificStuff(TList * fOutputList){ - - -// --------------- define histograms ---------------------// - - fHistOfflTrk2PHOS = new TH2F("fHistOfflTrk2PHOS","track intersection point in #eta and #phi (offline)",100, -0.5, 0.5, 100, 240, 340); - fHistOnlTrk2PHOS = new TH2F("fHistOnlTrk2PHOS", "track intersection point in #eta and #phi (HLT)", 100, -0.5, 0.5, 100, 240, 340); - - fHistOfflTrk2PHOSTrig = new TH2F("fHistOfflTrk2PHOSTrig", "track intersection point in #eta and #phi (offline triggered)", 100, -0.5, 0.5, 100, 240, 340); - fHistOfflTrk2PHOSNoTrig = new TH2F("fHistOfflTrk2PHOSNoTrig","track intersection point in #eta and #phi (offline not triggered)",100, -0.5, 0.5, 100, 240, 340); - - // -------------- add histograms to the output TList -----------------// - - fOutputList->Add(fHistOnlTrk2PHOS); - fOutputList->Add(fHistOfflTrk2PHOS); - fOutputList->Add(fHistOfflTrk2PHOSTrig); - fOutputList->Add(fHistOfflTrk2PHOSNoTrig); - -} - - -void AliAnalysisTaskHLTPHOS::DoSpecificStuff(const AliESDEvent * evESD, const AliESDEvent * evHLTESD) { - //Do PHOS specific tests - - Double_t b = evESD->GetMagneticField(); - - //Double_t pos[] = { 0., 0., 0.}; - //AliVertex *vtx = new AliVertex(pos, 0., 0); - -// for(Int_t i = 0; iGetEntries(); i++){ -// if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistTrigger->Fill(i); -// } -// -// if(evHLTESD->IsHLTTriggerFired()){ -// //fHistHLTTrigger->Fill(evESD->GetTriggerMask()); -// for(Int_t i = 0; iGetEntries(); i++){ -// if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistHLTTrigger->Fill(i); -// } -// } - - - - if(evHLTESD->IsHLTTriggerFired()){ - for(Int_t i = 0; i < evHLTESD->GetNumberOfTracks(); i++){ - AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); - - TVector3 v; - if(IsInPHOS(2, HLTesdTrk, b, v)){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - }else if(IsInPHOS(3, HLTesdTrk, b, v)){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - }else if( IsInPHOS(4, HLTesdTrk, b, v) ){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - } - -/* - if(IsInPHOS(2, HLTesdTrk, b) - || IsInPHOS(3, HLTesdTrk, b) - || IsInPHOS(4, HLTesdTrk, b) ) cout<<"Good Trigger"<GetNumberOfTracks(); i++){ - AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); - TVector3 v; - if(IsInPHOS(2, HLTesdTrk, b, v)){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - }else if(IsInPHOS(3, HLTesdTrk, b, v)){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - }else if( IsInPHOS(4, HLTesdTrk, b, v) ){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - } - } - } - - if(evHLTESD->IsHLTTriggerFired()){ - - for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ - AliESDtrack * esdTrk = evESD->GetTrack(i); - - TVector3 v; - if(IsInPHOS(2, esdTrk, b, v)){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); - fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - }else if(IsInPHOS(3, esdTrk, b, v)){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); - fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - }else if( IsInPHOS(4, esdTrk, b, v) ){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); - fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - } - } - } else { - - for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ - AliESDtrack * esdTrk = evESD->GetTrack(i); - - TVector3 v; - if(IsInPHOS(2, esdTrk, b, v)){ - Float_t phi = v.Phi(); - if(phi<0) phi += 2.*TMath::Pi(); - fHistOfflTrk2PHOSNoTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); - fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - //cout<<"Event in PHOS 2: "<Fill(v.Eta(), phi*TMath::RadToDeg()); - fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - //cout<<"Event in PHOS 3: "<Fill(v.Eta(), phi*TMath::RadToDeg()); - fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); - //cout<<"Event in PHOS 4: "<GetPHOSClusters(fClustersArray); - //Int_t nc = evHLTESD->GetEMCALClusters(fClustersArray); - - //for(int i = 0; i < - // cout << nc << " "; - - // for(int i = 0; i < evHLTESD->GetNumberOfCaloClusters(); i++) { - // AliESDCaloCluster * c = evHLTESD->GetCaloCluster(i); - // cout << c->IsPHOS() << "i "; - // } - - - - -} - -Int_t AliAnalysisTaskHLTPHOS::GetClusters(AliESDEvent * event, TRefArray * clusters) { - return event->GetPHOSClusters(clusters); -} - -Bool_t AliAnalysisTaskHLTPHOS::IsThisDetector(AliESDCaloCluster * cluster) { - return cluster->IsPHOS(); -} - - -Bool_t AliAnalysisTaskHLTPHOS::IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v){ - - - Double_t normVector[3] = {fgkNormX[iMod], fgkNormY[iMod], 0}; - - Double_t point[3] = {fgkInitPosX[iMod], fgkInitPosY[iMod], 0}; - - if(!trk->Intersect(point, normVector, b)) return kFALSE; - - TVector3 trackPos(point); - - v=trackPos; - - Double_t phi = 0; - if(trackPos.Phi() < 0) phi = trackPos.Phi() + 2*TMath::Pi(); - else phi = trackPos.Phi(); - - if(trackPos.Eta() >= fgkEtaMin && - trackPos.Eta() <= fgkEtaMax && - phi >= fgkPhiMin[iMod] && - phi <= fgkPhiMax[iMod]) - { - return kTRUE; - } - - return kFALSE; -} +// $Id$ + +//************************************************************************** +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* * +//* Primary Authors: Zhongbao Yin , * +//* Kalliopi Kanaki * +//* Svein Lindal * +//* for The ALICE HLT Project. * +//* * +//* Permission to use, copy, modify and distribute this software and its * +//* documentation strictly for non-commercial purposes is hereby granted * +//* without fee, provided that the above copyright notice appears in all * +//* copies and that both the copyright notice and this permission notice * +//* appear in the supporting documentation. The authors make no claims * +//* about the suitability of this software for any purpose. It is * +//* provided "as is" without express or implied warranty. * +//************************************************************************** + +/** @file AliAnalysisTaskHLTPHOS.cxx + @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal + @date + @brief +*/ + +#include + +#include "TChain.h" +#include "TTree.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TCanvas.h" +#include "TVector3.h" +#include "TString.h" +#include "TObjArray.h" +#include "TFile.h" + +#include "AliESDEvent.h" +#include "AliESDRun.h" +#include "AliESDInputHandler.h" +#include "AliESDCaloCluster.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliAnalysisTaskHLTPHOS.h" + + +ClassImp(AliAnalysisTaskHLTPHOS) + + +//=========================================================================================== + +AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS() : AliAnalysisTaskHLTCalo() + ,fHistOnlTrk2PHOS(0) + ,fHistOfflTrk2PHOS(0) + ,fHistOfflTrk2PHOSTrig(0) + ,fHistOfflTrk2PHOSNoTrig(0) +{ + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + // DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TH1 container + + // DefineOutput(1, TList::Class()); +} + + +AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS(const char *name) : AliAnalysisTaskHLTCalo(name) + ,fHistOnlTrk2PHOS(0) + ,fHistOfflTrk2PHOS(0) + ,fHistOfflTrk2PHOSTrig(0) + ,fHistOfflTrk2PHOSNoTrig(0) +{ + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + // DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TH1 container + + // DefineOutput(1, TList::Class()); +} + +const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMin = -0.12; +const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMax = 0.12; +const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMin[5] = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599}; +const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMax[5] = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505}; +const Float_t AliAnalysisTaskHLTPHOS::fgkNormX[5] = {-0.642788, -0.34202, 0, 0.34202, 0.642788}; +const Float_t AliAnalysisTaskHLTPHOS::fgkNormY[5] = {-0.766044, -0.939693, -1, -0.939693, -0.766044}; +const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682}; +const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38}; + +//---------------------------------------------------------------------------------------------------- + +void AliAnalysisTaskHLTPHOS::CreateSpecificStuff(TList * fOutputList){ + + +// --------------- define histograms ---------------------// + + fHistOfflTrk2PHOS = new TH2F("fHistOfflTrk2PHOS","track intersection point in #eta and #phi (offline)",100, -0.5, 0.5, 100, 240, 340); + fHistOnlTrk2PHOS = new TH2F("fHistOnlTrk2PHOS", "track intersection point in #eta and #phi (HLT)", 100, -0.5, 0.5, 100, 240, 340); + + fHistOfflTrk2PHOSTrig = new TH2F("fHistOfflTrk2PHOSTrig", "track intersection point in #eta and #phi (offline triggered)", 100, -0.5, 0.5, 100, 240, 340); + fHistOfflTrk2PHOSNoTrig = new TH2F("fHistOfflTrk2PHOSNoTrig","track intersection point in #eta and #phi (offline not triggered)",100, -0.5, 0.5, 100, 240, 340); + + // -------------- add histograms to the output TList -----------------// + + fOutputList->Add(fHistOnlTrk2PHOS); + fOutputList->Add(fHistOfflTrk2PHOS); + fOutputList->Add(fHistOfflTrk2PHOSTrig); + fOutputList->Add(fHistOfflTrk2PHOSNoTrig); + +} + + +void AliAnalysisTaskHLTPHOS::DoSpecificStuff(const AliESDEvent * evESD, const AliESDEvent * evHLTESD) { + //Do PHOS specific tests + + Double_t b = evESD->GetMagneticField(); + + //Double_t pos[] = { 0., 0., 0.}; + //AliVertex *vtx = new AliVertex(pos, 0., 0); + +// for(Int_t i = 0; iGetEntries(); i++){ +// if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistTrigger->Fill(i); +// } +// +// if(evHLTESD->IsHLTTriggerFired()){ +// //fHistHLTTrigger->Fill(evESD->GetTriggerMask()); +// for(Int_t i = 0; iGetEntries(); i++){ +// if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistHLTTrigger->Fill(i); +// } +// } + + + + if(evHLTESD->IsHLTTriggerFired()){ + for(Int_t i = 0; i < evHLTESD->GetNumberOfTracks(); i++){ + AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); + + TVector3 v; + if(IsInPHOS(2, HLTesdTrk, b, v)){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + }else if(IsInPHOS(3, HLTesdTrk, b, v)){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + }else if( IsInPHOS(4, HLTesdTrk, b, v) ){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + } + +/* + if(IsInPHOS(2, HLTesdTrk, b) + || IsInPHOS(3, HLTesdTrk, b) + || IsInPHOS(4, HLTesdTrk, b) ) cout<<"Good Trigger"<GetNumberOfTracks(); i++){ + AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); + TVector3 v; + if(IsInPHOS(2, HLTesdTrk, b, v)){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + }else if(IsInPHOS(3, HLTesdTrk, b, v)){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + }else if( IsInPHOS(4, HLTesdTrk, b, v) ){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + } + } + } + + if(evHLTESD->IsHLTTriggerFired()){ + + for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ + AliESDtrack * esdTrk = evESD->GetTrack(i); + + TVector3 v; + if(IsInPHOS(2, esdTrk, b, v)){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); + fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + }else if(IsInPHOS(3, esdTrk, b, v)){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); + fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + }else if( IsInPHOS(4, esdTrk, b, v) ){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); + fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + } + } + } else { + + for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ + AliESDtrack * esdTrk = evESD->GetTrack(i); + + TVector3 v; + if(IsInPHOS(2, esdTrk, b, v)){ + Float_t phi = v.Phi(); + if(phi<0) phi += 2.*TMath::Pi(); + fHistOfflTrk2PHOSNoTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); + fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + //cout<<"Event in PHOS 2: "<Fill(v.Eta(), phi*TMath::RadToDeg()); + fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + //cout<<"Event in PHOS 3: "<Fill(v.Eta(), phi*TMath::RadToDeg()); + fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); + //cout<<"Event in PHOS 4: "<GetPHOSClusters(fClustersArray); + //Int_t nc = evHLTESD->GetEMCALClusters(fClustersArray); + + //for(int i = 0; i < + // cout << nc << " "; + + // for(int i = 0; i < evHLTESD->GetNumberOfCaloClusters(); i++) { + // AliESDCaloCluster * c = evHLTESD->GetCaloCluster(i); + // cout << c->IsPHOS() << "i "; + // } + + + + +} + +Int_t AliAnalysisTaskHLTPHOS::GetClusters(AliESDEvent * event, TRefArray * clusters) { + return event->GetPHOSClusters(clusters); +} + +Bool_t AliAnalysisTaskHLTPHOS::IsThisDetector(AliESDCaloCluster * cluster) { + return cluster->IsPHOS(); +} + + +Bool_t AliAnalysisTaskHLTPHOS::IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v){ + + + Double_t normVector[3] = {fgkNormX[iMod], fgkNormY[iMod], 0}; + + Double_t point[3] = {fgkInitPosX[iMod], fgkInitPosY[iMod], 0}; + + if(!trk->Intersect(point, normVector, b)) return kFALSE; + + TVector3 trackPos(point); + + v=trackPos; + + Double_t phi = 0; + if(trackPos.Phi() < 0) phi = trackPos.Phi() + 2*TMath::Pi(); + else phi = trackPos.Phi(); + + if(trackPos.Eta() >= fgkEtaMin && + trackPos.Eta() <= fgkEtaMax && + phi >= fgkPhiMin[iMod] && + phi <= fgkPhiMax[iMod]) + { + return kTRUE; + } + + return kFALSE; +} diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.h b/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.h index be781c2a4d9..97a42b1ce02 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.h +++ b/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.h @@ -1,67 +1,67 @@ -// $Id$ - -#ifndef ALIANALYSISTASKHLTPHOS_H -#define ALIANALYSISTASKHLTPHOS_H - -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* See cxx source for full Copyright notice * - -/** @file AliAnalysisTaskHLTTPC.h - @author Zhongbao Yin, Kalliopi Kanaki - @date - @brief An analysis task to compare the offline and HLT esd trees -*/ - - -// forward declarations -class TH1F; -class TH2F; -class TList; -class AliESDEvent; -class AliESDtrack; -class AliESDRun; -class TObjArray; - -#include "AliAnalysisTaskHLTCalo.h" - -class AliAnalysisTaskHLTPHOS : public AliAnalysisTaskHLTCalo { - -public: - AliAnalysisTaskHLTPHOS(); - AliAnalysisTaskHLTPHOS(const char *name); - virtual ~AliAnalysisTaskHLTPHOS() {} - -private: - - - TH2F *fHistOnlTrk2PHOS; //! track to PHOS 2,3,4 modules in (eta, phi) - TH2F *fHistOfflTrk2PHOS; //! - TH2F *fHistOfflTrk2PHOSTrig; //! - TH2F *fHistOfflTrk2PHOSNoTrig; //! - - static const Float_t fgkPhiMin[5]; //Comment - static const Float_t fgkPhiMax[5]; //Comment - static const Float_t fgkEtaMin; //Comment - static const Float_t fgkEtaMax; //Comment - static const Float_t fgkNormX[5]; //Comment - static const Float_t fgkNormY[5]; //Comment - static const Float_t fgkInitPosX[5]; //Comment - static const Float_t fgkInitPosY[5]; //Comment - - /** copy constructor */ - AliAnalysisTaskHLTPHOS(const AliAnalysisTaskHLTPHOS&); - /** assignment operator */ - AliAnalysisTaskHLTPHOS& operator=(const AliAnalysisTaskHLTPHOS&); - - Bool_t IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v); - void CreateSpecificStuff(TList * fOutputList); - void DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD); - - Bool_t IsThisDetector(AliESDCaloCluster * cluster); - Int_t GetClusters(AliESDEvent * event, TRefArray * clusters); - - ClassDef(AliAnalysisTaskHLTPHOS, 0); -}; - -#endif +// $Id$ + +#ifndef ALIANALYSISTASKHLTPHOS_H +#define ALIANALYSISTASKHLTPHOS_H + +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* See cxx source for full Copyright notice * + +/** @file AliAnalysisTaskHLTTPC.h + @author Zhongbao Yin, Kalliopi Kanaki + @date + @brief An analysis task to compare the offline and HLT esd trees +*/ + + +// forward declarations +class TH1F; +class TH2F; +class TList; +class AliESDEvent; +class AliESDtrack; +class AliESDRun; +class TObjArray; + +#include "AliAnalysisTaskHLTCalo.h" + +class AliAnalysisTaskHLTPHOS : public AliAnalysisTaskHLTCalo { + +public: + AliAnalysisTaskHLTPHOS(); + AliAnalysisTaskHLTPHOS(const char *name); + virtual ~AliAnalysisTaskHLTPHOS() {} + +private: + + + TH2F *fHistOnlTrk2PHOS; //! track to PHOS 2,3,4 modules in (eta, phi) + TH2F *fHistOfflTrk2PHOS; //! + TH2F *fHistOfflTrk2PHOSTrig; //! + TH2F *fHistOfflTrk2PHOSNoTrig; //! + + static const Float_t fgkPhiMin[5]; //Comment + static const Float_t fgkPhiMax[5]; //Comment + static const Float_t fgkEtaMin; //Comment + static const Float_t fgkEtaMax; //Comment + static const Float_t fgkNormX[5]; //Comment + static const Float_t fgkNormY[5]; //Comment + static const Float_t fgkInitPosX[5]; //Comment + static const Float_t fgkInitPosY[5]; //Comment + + /** copy constructor */ + AliAnalysisTaskHLTPHOS(const AliAnalysisTaskHLTPHOS&); + /** assignment operator */ + AliAnalysisTaskHLTPHOS& operator=(const AliAnalysisTaskHLTPHOS&); + + Bool_t IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v); + void CreateSpecificStuff(TList * fOutputList); + void DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD); + + Bool_t IsThisDetector(AliESDCaloCluster * cluster); + Int_t GetClusters(AliESDEvent * event, TRefArray * clusters); + + ClassDef(AliAnalysisTaskHLTPHOS, 0); +}; + +#endif diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTTPC.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTTPC.cxx index 77fa72d2e4d..23c05453c9a 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTTPC.cxx +++ b/HLT/QA/tasks/AliAnalysisTaskHLTTPC.cxx @@ -1,512 +1,512 @@ -// $Id$ - -//************************************************************************** -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* * -//* Primary Authors: Zhongbao Yin , * -//* Kalliopi Kanaki * -//* for The ALICE HLT Project. * -//* * -//* Permission to use, copy, modify and distribute this software and its * -//* documentation strictly for non-commercial purposes is hereby granted * -//* without fee, provided that the above copyright notice appears in all * -//* copies and that both the copyright notice and this permission notice * -//* appear in the supporting documentation. The authors make no claims * -//* about the suitability of this software for any purpose. It is * -//* provided "as is" without express or implied warranty. * -//************************************************************************** - -/** @file AliAnalysisTaskHLTTPC.cxx - @author Zhongbao Yin, Kalliopi Kanaki - @date - @brief -*/ - - -#include - -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TCanvas.h" -#include "TVector3.h" -#include "TString.h" -#include "TObjArray.h" -#include "TFile.h" - -#include "AliESDEvent.h" -#include "AliESDRun.h" -#include "AliESDInputHandler.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliAnalysisTaskHLTTPC.h" - - -ClassImp(AliAnalysisTaskHLTTPC) - -//====================================================================================================== - - AliAnalysisTaskHLTTPC::AliAnalysisTaskHLTTPC(const char *name) - : - AliAnalysisTaskSE(name) - ,fESDRun(0) - ,fOutputList(0) - ,fHistTrigger(0) - ,fHistHLTTrigger(0) - ,fHistOfflTrkDCA(0) - ,fHistOfflTrkDCATrig(0) - ,fHistOfflTrkDCANoTrig(0) - ,fHistOnlTrkDCA(0) - ,fHistOnlTrkDCATrig(0) - ,fHistOfflTrkNcls(0) - ,fHistOfflTrkNclsTrig(0) - ,fHistOfflTrkNclsNoTrig(0) - ,fHistOnlTrkNcls(0) - ,fHistOnlTrkNclsTrig(0) - ,fHistOfflTrkDCANoTrigNclsCut1(0) - ,fHistOfflTrkDCANoTrigNclsCut2(0) - ,fHistOfflTrkP(0) - ,fHistOfflTrkPTrig(0) - ,fHistOfflTrkPNoTrig(0) - ,fHistOnlTrkP(0) - ,fHistOfflResPtInv(0) - ,fHistOnlResPtInv(0) - ,fHistOffldEdx(0) - ,fHistOnldEdx(0) - ,fHistOffldEdxVsP(0) - ,fHistOnldEdxVsP(0) - ,fHistOffldZ(0) - ,fHistOnldZ(0) - ,fHistOffldX(0) - ,fHistOnldX(0) - ,fHistOfflPhi(0) - ,fHistOnlPhi(0) - ,fHistOfflTheta(0) - ,fHistOnlTheta(0) - ,fHistOnlDZ(0) - ,fHistOfflDZ(0) - ,fHistOfflDZTrig(0) - ,fHistOfflDZNoTrig(0) - ,fNevt(0) - ,fTrgClsArray(0) - //,fNtracksThruZ0(0), - //,fNtracksThruZ0Trig(0) -{ - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - // DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TH1 container - - DefineOutput(1, TList::Class()); -} - -const Float_t AliAnalysisTaskHLTTPC::fgkEtaMin = -0.12; -const Float_t AliAnalysisTaskHLTTPC::fgkEtaMax = 0.12; -const Float_t AliAnalysisTaskHLTTPC::fgkPhiMin[5] = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599}; -const Float_t AliAnalysisTaskHLTTPC::fgkPhiMax[5] = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505}; -const Float_t AliAnalysisTaskHLTTPC::fgkNormX[5] = {-0.642788, -0.34202, 0, 0.34202, 0.642788}; -const Float_t AliAnalysisTaskHLTTPC::fgkNormY[5] = {-0.766044, -0.939693, -1, -0.939693, -0.766044}; -const Float_t AliAnalysisTaskHLTTPC::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682}; -const Float_t AliAnalysisTaskHLTTPC::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38}; - -//---------------------------------------------------------------------------------------------------- - -void AliAnalysisTaskHLTTPC::UserCreateOutputObjects(){ -// Create histograms - - OpenFile(1); - - fOutputList = new TList(); - fOutputList->SetName(GetName()); - - /* - //0 mistriggered, 1 Good triggered, 2, triggered, 3 fake trigger, - //4 events with offline track, 5 total events processed, - //6 offline track thru CE, 7 online track to CE - fHistTrigger = new TH1F("fHistTrigger", "Trigger Status", 8, -0.5, 7.5); - fHistTrigger->GetXaxis()->SetTitle(""); - fHistTrigger->GetYaxis()->SetTitle("Events"); - fHistTrigger->SetMarkerStyle(kFullCircle); - fHistTrigger->SetStats(0); - fHistTrigger->SetFillColor(2); - //fHistTrigger->SetDrawOption("B TEXT60"); - - //Set bin labels - (fHistTrigger->GetXaxis())->SetBinLabel(1,"missed"); - (fHistTrigger->GetXaxis())->SetBinLabel(2,"triggerWofflTrk"); - (fHistTrigger->GetXaxis())->SetBinLabel(3,"triggered"); - (fHistTrigger->GetXaxis())->SetBinLabel(4,"triggerWOofflTrk"); - (fHistTrigger->GetXaxis())->SetBinLabel(5,"NevWofflTrk"); - (fHistTrigger->GetXaxis())->SetBinLabel(6,"Nevt"); - (fHistTrigger->GetXaxis())->SetBinLabel(7,"offlTrkThruCE"); - (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); - */ - - fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 64, 0, 64); - fHistTrigger->GetXaxis()->SetTitle(""); - fHistTrigger->GetYaxis()->SetTitle("#Events"); - - fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 64, 0, 64); - fHistHLTTrigger->GetXaxis()->SetTitle(""); - fHistHLTTrigger->GetYaxis()->SetTitle("#Events"); - - fHistOfflTrkDCA = new TH1F("fHistOfflTrkDCA", "DCA to beam line (offline)", 250, 0, 250); - fHistOfflTrkDCATrig = new TH1F("fHistOfflTrkDCATrig", "DCA to beam line (triggered offline)", 250, 0, 250); - fHistOfflTrkDCANoTrig = new TH1F("fHistOfflTrkDCANoTrig","DCA to beam line (offline, not triggered)",250, 0, 250); - - fHistOnlTrkDCA = new TH1F("fHistOnlTrkDCA", "DCA to beam line (HLT)", 250, 0, 250); - fHistOnlTrkDCATrig = new TH1F("fHistOnlTrkDCATrig","DCA to beam line (HLT triggered)",250, 0, 250); - - fHistOfflTrkNcls = new TH1F("fHistOfflTrkNcls", "clusters per track (offline)", 200, 0, 200); - fHistOfflTrkNclsTrig = new TH1F("fHistOfflTrkNclsTrig", "clusters per track (triggered offline)", 200, 0, 200); - fHistOfflTrkNclsNoTrig = new TH1F("fHistOfflTrkNclsNoTrig","clusters per track (offline, not triggered)",200, 0, 200); - - fHistOnlTrkNcls = new TH1F("fHistOnlTrkNcls", "clusters per track (HLT)", 200, 0, 200); - fHistOnlTrkNclsTrig = new TH1F("fHistOnlTrkNclsTrig","clusters per track (HLT triggered)", 200, 0, 200); - - fHistOfflTrkDCANoTrigNclsCut1 = new TH1F("fHistOfflTrkDCANoTrigNclsCut1", "DCA to beam line (offline Ncls>=60, not triggered)",250, 0, 250); - fHistOfflTrkDCANoTrigNclsCut2 = new TH1F("fHistOfflTrkDCANoTrigNclsCut2", "DCA to beam line (offline Ncls<60, not triggered)", 250, 0, 250); - - fHistOfflTrkP = new TH1F("fHistOfflTrkP", "momentum (offline)", 100, 0., 100); - fHistOfflTrkPTrig = new TH1F("fHistOfflTrkPTrig", "momentum (offline triggered)", 100, 0., 100); - fHistOfflTrkPNoTrig = new TH1F("fHistOfflTrkPNoTrig","momentum (offline, not triggered)",100, 0., 100); - - fHistOnlTrkP = new TH1F("fHistOnlTrkP", "momentum (HLT)", 100, 0., 100); - - fHistOfflResPtInv = new TH1F("fHistOfflResPtInv","resolution on 1/pt for the case with 2 offline tracks",100, 0., 1); // cosmics - fHistOnlResPtInv = new TH1F("fHistOnlResPtInv", "resolution on 1/pt for the case with 2 HLT tracks", 100, 0., 1); // cosmics - - fHistOffldEdx = new TH1F("fHistOffldEdx", "energy loss (offline)",500, 0, 500); - fHistOnldEdx = new TH1F("fHistOnldEdx", "energy loss (HLT)", 500, 0, 500); - - fHistOffldEdxVsP = new TH2F("fHistOffldEdxVsP","dE/dx vs. momentum (offline)",100, 0., 100., 500, 0., 500.); - fHistOnldEdxVsP = new TH2F("fHistOnldEdxVsP", "dE/dx vs. momentum (HLT)", 100, 0., 100., 500, 0., 500.); - - fHistOffldZ = new TH1F("fHistOffldZ","z resolution (offline)",100, 0, 5.); - fHistOnldZ = new TH1F("fHistOnldZ", "z resolution (HLT)", 100, 0.,5.); - - fHistOffldX = new TH1F("fHistOffldX","r resolution (offline)",100, 0., 5.); - fHistOnldX = new TH1F("fHistOnldX", "r resolution (HLT)", 100, 0., 5.); - - fHistOfflPhi = new TH1F("fHistOfflPhi","#phi resolution (offline)",100, 0., 10); // in mrad - fHistOnlPhi = new TH1F("fHistOnlPhi", "#phi resolution (HLT)", 100, 0., 10); // in mrad - - fHistOfflTheta = new TH1F("fHistOfflTheta","#theta resolution (offline)",100, 0., 10); - fHistOnlTheta = new TH1F("fHistOnlTheta", "#theta resolution (HLT)", 100, 0., 10); - - fHistOfflDZ = new TH2F("fHistOfflDZ","track D vs. Z (offline)",1000, 0., 250, 1000, 0., 250); - fHistOnlDZ = new TH2F("fHistOnlDZ", "track D vs. Z (HLT)", 1000, 0., 250, 1000, 0., 250); - - fHistOfflDZTrig = new TH2F("fHistOfflDZTrig", "track D vs. Z (offline triggered)", 1000, 0., 250, 1000, 0., 250); - fHistOfflDZNoTrig = new TH2F("fHistOfflDZNoTrig","track D vs. Z (offline not triggered)",1000, 0., 250, 1000, 0., 250); - - - fOutputList->Add(fHistTrigger); - fOutputList->Add(fHistHLTTrigger); - - fOutputList->Add(fHistOfflTrkDCA); - fOutputList->Add(fHistOfflTrkDCATrig); - fOutputList->Add(fHistOfflTrkDCANoTrig); - fOutputList->Add(fHistOnlTrkDCA); - fOutputList->Add(fHistOnlTrkDCATrig); - fOutputList->Add(fHistOfflTrkNcls); - fOutputList->Add(fHistOfflTrkNclsTrig); - fOutputList->Add(fHistOfflTrkNclsNoTrig); - fOutputList->Add(fHistOnlTrkNcls); - fOutputList->Add(fHistOnlTrkNclsTrig); - fOutputList->Add(fHistOfflTrkDCANoTrigNclsCut1); - fOutputList->Add(fHistOfflTrkDCANoTrigNclsCut2); - fOutputList->Add(fHistOfflTrkP); - fOutputList->Add(fHistOfflTrkPTrig); - fOutputList->Add(fHistOfflTrkPNoTrig); - fOutputList->Add(fHistOnlTrkP); - - fOutputList->Add(fHistOfflResPtInv); // cosmics - fOutputList->Add(fHistOnlResPtInv); // cosmics - - fOutputList->Add(fHistOffldEdx); - fOutputList->Add(fHistOnldEdx); - fOutputList->Add(fHistOffldEdxVsP); - fOutputList->Add(fHistOnldEdxVsP); - fOutputList->Add(fHistOffldZ); - fOutputList->Add(fHistOnldZ); - fOutputList->Add(fHistOffldX); - fOutputList->Add(fHistOnldX); - fOutputList->Add(fHistOfflPhi); - fOutputList->Add(fHistOnlPhi); - fOutputList->Add(fHistOfflTheta); - fOutputList->Add(fHistOnlTheta); - fOutputList->Add(fHistOfflDZ); - fOutputList->Add(fHistOnlDZ); - fOutputList->Add(fHistOfflDZTrig); - fOutputList->Add(fHistOfflDZNoTrig); -} - -void AliAnalysisTaskHLTTPC::NotifyRun(){ -// This will not work if the active trigger classes change from run to run. -// Then one has to know all trigger classes before processing the data. - - AliESDEvent* evESD = dynamic_cast(InputEvent()); - TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses(); - - /* - TObjArray * trgClsArray = trgClasses.Tokenize(" "); - cout<GetEntries()<GetEntries(); i++){ - TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); - (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); - (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); - } - }else{ - for(Int_t i = 0; i < trgClsArray->GetEntries(); i++){ - - } - } - */ - - fTrgClsArray = trgClasses.Tokenize(" "); - //cout<GetEntries()<GetEntries(); i++){ - TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); - (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); - (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); - } - evESD = NULL; -} - -void AliAnalysisTaskHLTTPC::UserExec(Option_t *){ - - AliESDEvent* evESD = dynamic_cast(InputEvent()); - - if (!evESD) { - Printf("ERROR: fESD not available"); - return; - } - - AliESDEvent* evHLTESD = 0; - AliESDInputHandler* esdH = dynamic_cast(fInputHandler); - - if(esdH) evHLTESD = esdH->GetHLTEvent(); - - if(!evHLTESD){ - Printf("ERROR: HLTesd not available"); - return; - } - - Double_t b = evESD->GetMagneticField(); - - Double_t pos[] = { 0., 0., 0.}; - AliVertex *vtx = new AliVertex(pos, 0., 0); - - //Fill CTP Trigger stuff - //fHistTrigger->Fill(evESD->GetTriggerMask()); - - for(Int_t i = 0; iGetEntries(); i++){ - if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistTrigger->Fill(i); - } - - if(evHLTESD->IsHLTTriggerFired()){ - //fHistHLTTrigger->Fill(evESD->GetTriggerMask()); - for(Int_t i = 0; iGetEntries(); i++){ - if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistHLTTrigger->Fill(i); - } - } - - if(evHLTESD->IsHLTTriggerFired()){ - for(Int_t i=0; iGetNumberOfTracks(); i++){ - AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); - - if(HLTesdTrk->GetTPCNcls()>0){ - fHistOnlTrkNcls->Fill(HLTesdTrk->GetTPCNcls()); - fHistOnlTrkNclsTrig->Fill(HLTesdTrk->GetTPCNcls()); - } - - Double_t dz[2] = {-999., -999.}; - Double_t covar[3] = {0.}; - - HLTesdTrk->PropagateToDCA(vtx, b, 250., dz, covar); - fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - - if(HLTesdTrk){ - fHistOnlTrkDCA->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); - fHistOnlTrkP->Fill(TMath::Abs(HLTesdTrk->P())); - fHistOnldEdx->Fill(HLTesdTrk->GetTPCsignal()); - fHistOnldEdxVsP->Fill(TMath::Abs(HLTesdTrk->P()), HLTesdTrk->GetTPCsignal()); - fHistOnlTrkDCATrig->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); - } - } - } else { - for(Int_t i=0; iGetNumberOfTracks(); i++){ - - AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); - if(HLTesdTrk->GetTPCNcls()>0) fHistOnlTrkNcls->Fill(HLTesdTrk->GetTPCNcls()); - - Double_t dz[2] = {-999., -999.}; - Double_t covar[3] = {0.}; - - HLTesdTrk->PropagateToDCA(vtx, b, 250., dz, covar); - fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - - if(HLTesdTrk){ - fHistOnlTrkDCA->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); - fHistOnlTrkP->Fill(TMath::Abs(HLTesdTrk->P())); - fHistOnldEdx->Fill( HLTesdTrk->GetTPCsignal()); - fHistOnldEdxVsP->Fill(TMath::Abs(HLTesdTrk->P()), HLTesdTrk->GetTPCsignal()); - } - } - } - - if(evHLTESD->GetNumberOfTracks()==2){ // cosmics - - Double_t oneOverPt1 = (evHLTESD->GetTrack(0))->OneOverPt(); - Double_t oneOverPt2 = (evHLTESD->GetTrack(1))->OneOverPt(); - //cout<<"1/pt: "<Fill(2.*TMath::Abs(oneOverPt1-oneOverPt2)/(oneOverPt1+oneOverPt2)); - - Float_t dz1[2], dz2[2]; - (evHLTESD->GetTrack(0))->GetDZ(0., 0., 0., b, dz1); - (evHLTESD->GetTrack(1))->GetDZ(0., 0., 0., b, dz2); - fHistOnldX->Fill(TMath::Abs(TMath::Abs(dz1[0])-TMath::Abs(dz2[0]))); - fHistOnldZ->Fill(TMath::Abs(dz1[1]-dz2[1])); - - Float_t dPhi = TMath::Abs( (evHLTESD->GetTrack(0))->Phi() - (evHLTESD->GetTrack(1))->Phi() - TMath::Pi() ); - if(dPhi>2.*TMath::Pi()) dPhi -= 2.*TMath::Pi(); - - fHistOnlPhi->Fill(1000.*dPhi); - fHistOnlTheta->Fill(1000.*TMath::Abs( (evHLTESD->GetTrack(0))->Theta() + (evHLTESD->GetTrack(1))->Theta() - TMath::Pi() ) ); - } - - if(evESD->GetNumberOfTracks()==2){ // cosmics - - Double_t oneOverPt1 = (evESD->GetTrack(0))->OneOverPt(); - Double_t oneOverPt2 = (evESD->GetTrack(1))->OneOverPt(); - fHistOfflResPtInv->Fill(2.*TMath::Abs(oneOverPt1-oneOverPt2)/(oneOverPt1+oneOverPt2) ); - - Float_t dz1[2], dz2[2]; - (evESD->GetTrack(0))->GetDZ(0., 0., 0., b, dz1); - (evESD->GetTrack(1))->GetDZ(0., 0., 0., b, dz2); - fHistOffldX->Fill(TMath::Abs(TMath::Abs(dz1[0])-TMath::Abs(dz2[0]))); - fHistOffldZ->Fill(TMath::Abs(dz1[1]-dz2[1])); - - Float_t dPhi = TMath::Abs( (evESD->GetTrack(0))->Phi() - (evESD->GetTrack(1))->Phi() - TMath::Pi() ); - if(dPhi>2.*TMath::Pi()) dPhi -= 2.*TMath::Pi(); - - fHistOfflPhi->Fill(1000.*dPhi); - fHistOfflTheta->Fill(1000.*TMath::Abs( (evESD->GetTrack(0))->Theta() + (evESD->GetTrack(1))->Theta() - TMath::Pi() ) ); - } - - //fHistTrigger->Fill(5., 1); - - // Printf("There are %d tracks in this event", evESD->GetNumberOfTracks()); - - //if(evESD->GetNumberOfTracks()>0) fHistTrigger->Fill(4., 1); - - if(evHLTESD->IsHLTTriggerFired()){ - //fHistTrigger->Fill(2., 1); - - for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ - - AliESDtrack *esdTrk = evESD->GetTrack(i); - Double_t dz[2] = {-999., -999.}; - Double_t covar[3] = {0}; - esdTrk->PropagateToDCA(vtx, b, 250., dz, covar); - fHistOfflDZTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - - fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - - /* - Double_t pnt[3] = {0., 0., 0.}; - Double_t norm[3] = {0., 0., 1.}; - if(esdTrk->Intersect(pnt, norm, b)){ - if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) { - fNtracksThruZ0++; - fNtracksThruZ0Trig++; - fHistTrigger->Fill(6., 1); - fHistTrigger->Fill(7., 1); - } - } - */ - - fHistOfflTrkDCATrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); - fHistOfflTrkDCA->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); - - if(esdTrk->GetTPCNcls()>0){ - fHistOfflTrkNclsTrig->Fill(esdTrk->GetTPCNcls()); - fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls()); - } - - fHistOfflTrkPTrig->Fill(TMath::Abs(esdTrk->P())); - fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P())); - fHistOffldEdx->Fill( esdTrk->GetTPCsignal()); - fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal()); - } - } else { - - for(Int_t i=0; iGetNumberOfTracks(); i++){ - - AliESDtrack * esdTrk = evESD->GetTrack(i); - Double_t dz[2] = {0}; - Double_t covar[3] = {0}; - esdTrk->PropagateToDCA(vtx, b, 250., dz, covar); - fHistOfflDZNoTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - - fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); - - /* - Double_t pnt[3] = {0., 0., 0.}; - Double_t norm[3] = {0., 0., 1.}; - if(esdTrk->Intersect(pnt, norm, b)){ - if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) { - fNtracksThruZ0++; - fHistTrigger->Fill(6., 1); - } - } - */ - - fHistOfflTrkDCANoTrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); - - if(esdTrk->GetTPCNcls()>0) fHistOfflTrkNclsNoTrig->Fill(esdTrk->GetTPCNcls()); - - if(esdTrk->GetTPCNcls()>=60) fHistOfflTrkDCANoTrigNclsCut1->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); - else fHistOfflTrkDCANoTrigNclsCut2->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); - - fHistOfflTrkDCA->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); - fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls()); - - fHistOfflTrkPNoTrig->Fill(TMath::Abs(esdTrk->P())); - fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P())); - fHistOffldEdx->Fill( esdTrk->GetTPCsignal()); - fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal()); - } - } - - fNevt++; - delete vtx; - - // Post output data. - PostData(1, fOutputList); - } - -void AliAnalysisTaskHLTTPC::Terminate(Option_t *){ - /* - Printf("Number of tracks thru CE: %d", fNtracksThruZ0); - Printf("Number of tracks thru CE from triggered events: %d", - fNtracksThruZ0Trig); - */ - - // Draw result to the screen - // Called once at the end of the query - - // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTTPC","Trigger",10,10,510,510); - //fHistTrigger->DrawCopy("E"); - -} +// $Id$ + +//************************************************************************** +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* * +//* Primary Authors: Zhongbao Yin , * +//* Kalliopi Kanaki * +//* for The ALICE HLT Project. * +//* * +//* Permission to use, copy, modify and distribute this software and its * +//* documentation strictly for non-commercial purposes is hereby granted * +//* without fee, provided that the above copyright notice appears in all * +//* copies and that both the copyright notice and this permission notice * +//* appear in the supporting documentation. The authors make no claims * +//* about the suitability of this software for any purpose. It is * +//* provided "as is" without express or implied warranty. * +//************************************************************************** + +/** @file AliAnalysisTaskHLTTPC.cxx + @author Zhongbao Yin, Kalliopi Kanaki + @date + @brief +*/ + + +#include + +#include "TChain.h" +#include "TTree.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TCanvas.h" +#include "TVector3.h" +#include "TString.h" +#include "TObjArray.h" +#include "TFile.h" + +#include "AliESDEvent.h" +#include "AliESDRun.h" +#include "AliESDInputHandler.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliAnalysisTaskHLTTPC.h" + + +ClassImp(AliAnalysisTaskHLTTPC) + +//====================================================================================================== + + AliAnalysisTaskHLTTPC::AliAnalysisTaskHLTTPC(const char *name) + : + AliAnalysisTaskSE(name) + ,fESDRun(0) + ,fOutputList(0) + ,fHistTrigger(0) + ,fHistHLTTrigger(0) + ,fHistOfflTrkDCA(0) + ,fHistOfflTrkDCATrig(0) + ,fHistOfflTrkDCANoTrig(0) + ,fHistOnlTrkDCA(0) + ,fHistOnlTrkDCATrig(0) + ,fHistOfflTrkNcls(0) + ,fHistOfflTrkNclsTrig(0) + ,fHistOfflTrkNclsNoTrig(0) + ,fHistOnlTrkNcls(0) + ,fHistOnlTrkNclsTrig(0) + ,fHistOfflTrkDCANoTrigNclsCut1(0) + ,fHistOfflTrkDCANoTrigNclsCut2(0) + ,fHistOfflTrkP(0) + ,fHistOfflTrkPTrig(0) + ,fHistOfflTrkPNoTrig(0) + ,fHistOnlTrkP(0) + ,fHistOfflResPtInv(0) + ,fHistOnlResPtInv(0) + ,fHistOffldEdx(0) + ,fHistOnldEdx(0) + ,fHistOffldEdxVsP(0) + ,fHistOnldEdxVsP(0) + ,fHistOffldZ(0) + ,fHistOnldZ(0) + ,fHistOffldX(0) + ,fHistOnldX(0) + ,fHistOfflPhi(0) + ,fHistOnlPhi(0) + ,fHistOfflTheta(0) + ,fHistOnlTheta(0) + ,fHistOnlDZ(0) + ,fHistOfflDZ(0) + ,fHistOfflDZTrig(0) + ,fHistOfflDZNoTrig(0) + ,fNevt(0) + ,fTrgClsArray(0) + //,fNtracksThruZ0(0), + //,fNtracksThruZ0Trig(0) +{ + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + // DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TH1 container + + DefineOutput(1, TList::Class()); +} + +const Float_t AliAnalysisTaskHLTTPC::fgkEtaMin = -0.12; +const Float_t AliAnalysisTaskHLTTPC::fgkEtaMax = 0.12; +const Float_t AliAnalysisTaskHLTTPC::fgkPhiMin[5] = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599}; +const Float_t AliAnalysisTaskHLTTPC::fgkPhiMax[5] = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505}; +const Float_t AliAnalysisTaskHLTTPC::fgkNormX[5] = {-0.642788, -0.34202, 0, 0.34202, 0.642788}; +const Float_t AliAnalysisTaskHLTTPC::fgkNormY[5] = {-0.766044, -0.939693, -1, -0.939693, -0.766044}; +const Float_t AliAnalysisTaskHLTTPC::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682}; +const Float_t AliAnalysisTaskHLTTPC::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38}; + +//---------------------------------------------------------------------------------------------------- + +void AliAnalysisTaskHLTTPC::UserCreateOutputObjects(){ +// Create histograms + + OpenFile(1); + + fOutputList = new TList(); + fOutputList->SetName(GetName()); + + /* + //0 mistriggered, 1 Good triggered, 2, triggered, 3 fake trigger, + //4 events with offline track, 5 total events processed, + //6 offline track thru CE, 7 online track to CE + fHistTrigger = new TH1F("fHistTrigger", "Trigger Status", 8, -0.5, 7.5); + fHistTrigger->GetXaxis()->SetTitle(""); + fHistTrigger->GetYaxis()->SetTitle("Events"); + fHistTrigger->SetMarkerStyle(kFullCircle); + fHistTrigger->SetStats(0); + fHistTrigger->SetFillColor(2); + //fHistTrigger->SetDrawOption("B TEXT60"); + + //Set bin labels + (fHistTrigger->GetXaxis())->SetBinLabel(1,"missed"); + (fHistTrigger->GetXaxis())->SetBinLabel(2,"triggerWofflTrk"); + (fHistTrigger->GetXaxis())->SetBinLabel(3,"triggered"); + (fHistTrigger->GetXaxis())->SetBinLabel(4,"triggerWOofflTrk"); + (fHistTrigger->GetXaxis())->SetBinLabel(5,"NevWofflTrk"); + (fHistTrigger->GetXaxis())->SetBinLabel(6,"Nevt"); + (fHistTrigger->GetXaxis())->SetBinLabel(7,"offlTrkThruCE"); + (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); + */ + + fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 64, 0, 64); + fHistTrigger->GetXaxis()->SetTitle(""); + fHistTrigger->GetYaxis()->SetTitle("#Events"); + + fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 64, 0, 64); + fHistHLTTrigger->GetXaxis()->SetTitle(""); + fHistHLTTrigger->GetYaxis()->SetTitle("#Events"); + + fHistOfflTrkDCA = new TH1F("fHistOfflTrkDCA", "DCA to beam line (offline)", 250, 0, 250); + fHistOfflTrkDCATrig = new TH1F("fHistOfflTrkDCATrig", "DCA to beam line (triggered offline)", 250, 0, 250); + fHistOfflTrkDCANoTrig = new TH1F("fHistOfflTrkDCANoTrig","DCA to beam line (offline, not triggered)",250, 0, 250); + + fHistOnlTrkDCA = new TH1F("fHistOnlTrkDCA", "DCA to beam line (HLT)", 250, 0, 250); + fHistOnlTrkDCATrig = new TH1F("fHistOnlTrkDCATrig","DCA to beam line (HLT triggered)",250, 0, 250); + + fHistOfflTrkNcls = new TH1F("fHistOfflTrkNcls", "clusters per track (offline)", 200, 0, 200); + fHistOfflTrkNclsTrig = new TH1F("fHistOfflTrkNclsTrig", "clusters per track (triggered offline)", 200, 0, 200); + fHistOfflTrkNclsNoTrig = new TH1F("fHistOfflTrkNclsNoTrig","clusters per track (offline, not triggered)",200, 0, 200); + + fHistOnlTrkNcls = new TH1F("fHistOnlTrkNcls", "clusters per track (HLT)", 200, 0, 200); + fHistOnlTrkNclsTrig = new TH1F("fHistOnlTrkNclsTrig","clusters per track (HLT triggered)", 200, 0, 200); + + fHistOfflTrkDCANoTrigNclsCut1 = new TH1F("fHistOfflTrkDCANoTrigNclsCut1", "DCA to beam line (offline Ncls>=60, not triggered)",250, 0, 250); + fHistOfflTrkDCANoTrigNclsCut2 = new TH1F("fHistOfflTrkDCANoTrigNclsCut2", "DCA to beam line (offline Ncls<60, not triggered)", 250, 0, 250); + + fHistOfflTrkP = new TH1F("fHistOfflTrkP", "momentum (offline)", 100, 0., 100); + fHistOfflTrkPTrig = new TH1F("fHistOfflTrkPTrig", "momentum (offline triggered)", 100, 0., 100); + fHistOfflTrkPNoTrig = new TH1F("fHistOfflTrkPNoTrig","momentum (offline, not triggered)",100, 0., 100); + + fHistOnlTrkP = new TH1F("fHistOnlTrkP", "momentum (HLT)", 100, 0., 100); + + fHistOfflResPtInv = new TH1F("fHistOfflResPtInv","resolution on 1/pt for the case with 2 offline tracks",100, 0., 1); // cosmics + fHistOnlResPtInv = new TH1F("fHistOnlResPtInv", "resolution on 1/pt for the case with 2 HLT tracks", 100, 0., 1); // cosmics + + fHistOffldEdx = new TH1F("fHistOffldEdx", "energy loss (offline)",500, 0, 500); + fHistOnldEdx = new TH1F("fHistOnldEdx", "energy loss (HLT)", 500, 0, 500); + + fHistOffldEdxVsP = new TH2F("fHistOffldEdxVsP","dE/dx vs. momentum (offline)",100, 0., 100., 500, 0., 500.); + fHistOnldEdxVsP = new TH2F("fHistOnldEdxVsP", "dE/dx vs. momentum (HLT)", 100, 0., 100., 500, 0., 500.); + + fHistOffldZ = new TH1F("fHistOffldZ","z resolution (offline)",100, 0, 5.); + fHistOnldZ = new TH1F("fHistOnldZ", "z resolution (HLT)", 100, 0.,5.); + + fHistOffldX = new TH1F("fHistOffldX","r resolution (offline)",100, 0., 5.); + fHistOnldX = new TH1F("fHistOnldX", "r resolution (HLT)", 100, 0., 5.); + + fHistOfflPhi = new TH1F("fHistOfflPhi","#phi resolution (offline)",100, 0., 10); // in mrad + fHistOnlPhi = new TH1F("fHistOnlPhi", "#phi resolution (HLT)", 100, 0., 10); // in mrad + + fHistOfflTheta = new TH1F("fHistOfflTheta","#theta resolution (offline)",100, 0., 10); + fHistOnlTheta = new TH1F("fHistOnlTheta", "#theta resolution (HLT)", 100, 0., 10); + + fHistOfflDZ = new TH2F("fHistOfflDZ","track D vs. Z (offline)",1000, 0., 250, 1000, 0., 250); + fHistOnlDZ = new TH2F("fHistOnlDZ", "track D vs. Z (HLT)", 1000, 0., 250, 1000, 0., 250); + + fHistOfflDZTrig = new TH2F("fHistOfflDZTrig", "track D vs. Z (offline triggered)", 1000, 0., 250, 1000, 0., 250); + fHistOfflDZNoTrig = new TH2F("fHistOfflDZNoTrig","track D vs. Z (offline not triggered)",1000, 0., 250, 1000, 0., 250); + + + fOutputList->Add(fHistTrigger); + fOutputList->Add(fHistHLTTrigger); + + fOutputList->Add(fHistOfflTrkDCA); + fOutputList->Add(fHistOfflTrkDCATrig); + fOutputList->Add(fHistOfflTrkDCANoTrig); + fOutputList->Add(fHistOnlTrkDCA); + fOutputList->Add(fHistOnlTrkDCATrig); + fOutputList->Add(fHistOfflTrkNcls); + fOutputList->Add(fHistOfflTrkNclsTrig); + fOutputList->Add(fHistOfflTrkNclsNoTrig); + fOutputList->Add(fHistOnlTrkNcls); + fOutputList->Add(fHistOnlTrkNclsTrig); + fOutputList->Add(fHistOfflTrkDCANoTrigNclsCut1); + fOutputList->Add(fHistOfflTrkDCANoTrigNclsCut2); + fOutputList->Add(fHistOfflTrkP); + fOutputList->Add(fHistOfflTrkPTrig); + fOutputList->Add(fHistOfflTrkPNoTrig); + fOutputList->Add(fHistOnlTrkP); + + fOutputList->Add(fHistOfflResPtInv); // cosmics + fOutputList->Add(fHistOnlResPtInv); // cosmics + + fOutputList->Add(fHistOffldEdx); + fOutputList->Add(fHistOnldEdx); + fOutputList->Add(fHistOffldEdxVsP); + fOutputList->Add(fHistOnldEdxVsP); + fOutputList->Add(fHistOffldZ); + fOutputList->Add(fHistOnldZ); + fOutputList->Add(fHistOffldX); + fOutputList->Add(fHistOnldX); + fOutputList->Add(fHistOfflPhi); + fOutputList->Add(fHistOnlPhi); + fOutputList->Add(fHistOfflTheta); + fOutputList->Add(fHistOnlTheta); + fOutputList->Add(fHistOfflDZ); + fOutputList->Add(fHistOnlDZ); + fOutputList->Add(fHistOfflDZTrig); + fOutputList->Add(fHistOfflDZNoTrig); +} + +void AliAnalysisTaskHLTTPC::NotifyRun(){ +// This will not work if the active trigger classes change from run to run. +// Then one has to know all trigger classes before processing the data. + + AliESDEvent* evESD = dynamic_cast(InputEvent()); + TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses(); + + /* + TObjArray * trgClsArray = trgClasses.Tokenize(" "); + cout<GetEntries()<GetEntries(); i++){ + TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); + (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); + (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); + } + }else{ + for(Int_t i = 0; i < trgClsArray->GetEntries(); i++){ + + } + } + */ + + fTrgClsArray = trgClasses.Tokenize(" "); + //cout<GetEntries()<GetEntries(); i++){ + TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); + (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); + (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); + } + evESD = NULL; +} + +void AliAnalysisTaskHLTTPC::UserExec(Option_t *){ + + AliESDEvent* evESD = dynamic_cast(InputEvent()); + + if (!evESD) { + Printf("ERROR: fESD not available"); + return; + } + + AliESDEvent* evHLTESD = 0; + AliESDInputHandler* esdH = dynamic_cast(fInputHandler); + + if(esdH) evHLTESD = esdH->GetHLTEvent(); + + if(!evHLTESD){ + Printf("ERROR: HLTesd not available"); + return; + } + + Double_t b = evESD->GetMagneticField(); + + Double_t pos[] = { 0., 0., 0.}; + AliVertex *vtx = new AliVertex(pos, 0., 0); + + //Fill CTP Trigger stuff + //fHistTrigger->Fill(evESD->GetTriggerMask()); + + for(Int_t i = 0; iGetEntries(); i++){ + if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistTrigger->Fill(i); + } + + if(evHLTESD->IsHLTTriggerFired()){ + //fHistHLTTrigger->Fill(evESD->GetTriggerMask()); + for(Int_t i = 0; iGetEntries(); i++){ + if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistHLTTrigger->Fill(i); + } + } + + if(evHLTESD->IsHLTTriggerFired()){ + for(Int_t i=0; iGetNumberOfTracks(); i++){ + AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); + + if(HLTesdTrk->GetTPCNcls()>0){ + fHistOnlTrkNcls->Fill(HLTesdTrk->GetTPCNcls()); + fHistOnlTrkNclsTrig->Fill(HLTesdTrk->GetTPCNcls()); + } + + Double_t dz[2] = {-999., -999.}; + Double_t covar[3] = {0.}; + + HLTesdTrk->PropagateToDCA(vtx, b, 250., dz, covar); + fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); + + if(HLTesdTrk){ + fHistOnlTrkDCA->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); + fHistOnlTrkP->Fill(TMath::Abs(HLTesdTrk->P())); + fHistOnldEdx->Fill(HLTesdTrk->GetTPCsignal()); + fHistOnldEdxVsP->Fill(TMath::Abs(HLTesdTrk->P()), HLTesdTrk->GetTPCsignal()); + fHistOnlTrkDCATrig->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); + } + } + } else { + for(Int_t i=0; iGetNumberOfTracks(); i++){ + + AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); + if(HLTesdTrk->GetTPCNcls()>0) fHistOnlTrkNcls->Fill(HLTesdTrk->GetTPCNcls()); + + Double_t dz[2] = {-999., -999.}; + Double_t covar[3] = {0.}; + + HLTesdTrk->PropagateToDCA(vtx, b, 250., dz, covar); + fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); + + if(HLTesdTrk){ + fHistOnlTrkDCA->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); + fHistOnlTrkP->Fill(TMath::Abs(HLTesdTrk->P())); + fHistOnldEdx->Fill( HLTesdTrk->GetTPCsignal()); + fHistOnldEdxVsP->Fill(TMath::Abs(HLTesdTrk->P()), HLTesdTrk->GetTPCsignal()); + } + } + } + + if(evHLTESD->GetNumberOfTracks()==2){ // cosmics + + Double_t oneOverPt1 = (evHLTESD->GetTrack(0))->OneOverPt(); + Double_t oneOverPt2 = (evHLTESD->GetTrack(1))->OneOverPt(); + //cout<<"1/pt: "<Fill(2.*TMath::Abs(oneOverPt1-oneOverPt2)/(oneOverPt1+oneOverPt2)); + + Float_t dz1[2], dz2[2]; + (evHLTESD->GetTrack(0))->GetDZ(0., 0., 0., b, dz1); + (evHLTESD->GetTrack(1))->GetDZ(0., 0., 0., b, dz2); + fHistOnldX->Fill(TMath::Abs(TMath::Abs(dz1[0])-TMath::Abs(dz2[0]))); + fHistOnldZ->Fill(TMath::Abs(dz1[1]-dz2[1])); + + Float_t dPhi = TMath::Abs( (evHLTESD->GetTrack(0))->Phi() - (evHLTESD->GetTrack(1))->Phi() - TMath::Pi() ); + if(dPhi>2.*TMath::Pi()) dPhi -= 2.*TMath::Pi(); + + fHistOnlPhi->Fill(1000.*dPhi); + fHistOnlTheta->Fill(1000.*TMath::Abs( (evHLTESD->GetTrack(0))->Theta() + (evHLTESD->GetTrack(1))->Theta() - TMath::Pi() ) ); + } + + if(evESD->GetNumberOfTracks()==2){ // cosmics + + Double_t oneOverPt1 = (evESD->GetTrack(0))->OneOverPt(); + Double_t oneOverPt2 = (evESD->GetTrack(1))->OneOverPt(); + fHistOfflResPtInv->Fill(2.*TMath::Abs(oneOverPt1-oneOverPt2)/(oneOverPt1+oneOverPt2) ); + + Float_t dz1[2], dz2[2]; + (evESD->GetTrack(0))->GetDZ(0., 0., 0., b, dz1); + (evESD->GetTrack(1))->GetDZ(0., 0., 0., b, dz2); + fHistOffldX->Fill(TMath::Abs(TMath::Abs(dz1[0])-TMath::Abs(dz2[0]))); + fHistOffldZ->Fill(TMath::Abs(dz1[1]-dz2[1])); + + Float_t dPhi = TMath::Abs( (evESD->GetTrack(0))->Phi() - (evESD->GetTrack(1))->Phi() - TMath::Pi() ); + if(dPhi>2.*TMath::Pi()) dPhi -= 2.*TMath::Pi(); + + fHistOfflPhi->Fill(1000.*dPhi); + fHistOfflTheta->Fill(1000.*TMath::Abs( (evESD->GetTrack(0))->Theta() + (evESD->GetTrack(1))->Theta() - TMath::Pi() ) ); + } + + //fHistTrigger->Fill(5., 1); + + // Printf("There are %d tracks in this event", evESD->GetNumberOfTracks()); + + //if(evESD->GetNumberOfTracks()>0) fHistTrigger->Fill(4., 1); + + if(evHLTESD->IsHLTTriggerFired()){ + //fHistTrigger->Fill(2., 1); + + for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ + + AliESDtrack *esdTrk = evESD->GetTrack(i); + Double_t dz[2] = {-999., -999.}; + Double_t covar[3] = {0}; + esdTrk->PropagateToDCA(vtx, b, 250., dz, covar); + fHistOfflDZTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); + + fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); + + /* + Double_t pnt[3] = {0., 0., 0.}; + Double_t norm[3] = {0., 0., 1.}; + if(esdTrk->Intersect(pnt, norm, b)){ + if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) { + fNtracksThruZ0++; + fNtracksThruZ0Trig++; + fHistTrigger->Fill(6., 1); + fHistTrigger->Fill(7., 1); + } + } + */ + + fHistOfflTrkDCATrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); + fHistOfflTrkDCA->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); + + if(esdTrk->GetTPCNcls()>0){ + fHistOfflTrkNclsTrig->Fill(esdTrk->GetTPCNcls()); + fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls()); + } + + fHistOfflTrkPTrig->Fill(TMath::Abs(esdTrk->P())); + fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P())); + fHistOffldEdx->Fill( esdTrk->GetTPCsignal()); + fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal()); + } + } else { + + for(Int_t i=0; iGetNumberOfTracks(); i++){ + + AliESDtrack * esdTrk = evESD->GetTrack(i); + Double_t dz[2] = {0}; + Double_t covar[3] = {0}; + esdTrk->PropagateToDCA(vtx, b, 250., dz, covar); + fHistOfflDZNoTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); + + fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); + + /* + Double_t pnt[3] = {0., 0., 0.}; + Double_t norm[3] = {0., 0., 1.}; + if(esdTrk->Intersect(pnt, norm, b)){ + if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) { + fNtracksThruZ0++; + fHistTrigger->Fill(6., 1); + } + } + */ + + fHistOfflTrkDCANoTrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); + + if(esdTrk->GetTPCNcls()>0) fHistOfflTrkNclsNoTrig->Fill(esdTrk->GetTPCNcls()); + + if(esdTrk->GetTPCNcls()>=60) fHistOfflTrkDCANoTrigNclsCut1->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); + else fHistOfflTrkDCANoTrigNclsCut2->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); + + fHistOfflTrkDCA->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); + fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls()); + + fHistOfflTrkPNoTrig->Fill(TMath::Abs(esdTrk->P())); + fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P())); + fHistOffldEdx->Fill( esdTrk->GetTPCsignal()); + fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal()); + } + } + + fNevt++; + delete vtx; + + // Post output data. + PostData(1, fOutputList); + } + +void AliAnalysisTaskHLTTPC::Terminate(Option_t *){ + /* + Printf("Number of tracks thru CE: %d", fNtracksThruZ0); + Printf("Number of tracks thru CE from triggered events: %d", + fNtracksThruZ0Trig); + */ + + // Draw result to the screen + // Called once at the end of the query + + // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTTPC","Trigger",10,10,510,510); + //fHistTrigger->DrawCopy("E"); + +} diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTTPC.h b/HLT/QA/tasks/AliAnalysisTaskHLTTPC.h index 4f63a44fc2e..ef6c8a0b75e 100644 --- a/HLT/QA/tasks/AliAnalysisTaskHLTTPC.h +++ b/HLT/QA/tasks/AliAnalysisTaskHLTTPC.h @@ -1,119 +1,119 @@ -// $Id$ - -#ifndef ALIANALYSISTASKHLTTPC_H -#define ALIANALYSISTASKHLTTPC_H - -//* This file is property of and copyright by the ALICE HLT Project * -//* ALICE Experiment at CERN, All rights reserved. * -//* See cxx source for full Copyright notice * - -/** @file AliAnalysisTaskHLTTPC.h - @author Kalliopi Kanaki - @date - @brief An analysis task to compare the offline and HLT esd trees -*/ - -// forward declarations -class TH1F; -class TH2F; -class TList; -class AliESDEvent; -class AliESDtrack; -class AliESDRun; -class TObjArray; - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskHLTTPC : public AliAnalysisTaskSE { - - public: - AliAnalysisTaskHLTTPC(const char *name); - virtual ~AliAnalysisTaskHLTTPC() {} - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - //virtual Bool_t Notify(); - virtual void NotifyRun(); - - private: - - /** copy constructor */ - AliAnalysisTaskHLTTPC(const AliAnalysisTaskHLTTPC&); - /** assignment operator */ - AliAnalysisTaskHLTTPC& operator=(const AliAnalysisTaskHLTTPC&); - - AliESDRun *fESDRun; //! - TList *fOutputList; - - TH1F *fHistTrigger; //! trigger counters - TH1F *fHistHLTTrigger; //! HLT online trigger counters - - TH1F *fHistOfflTrkDCA; //! Offline track DCA to beam line - TH1F *fHistOfflTrkDCATrig; //! Offline track DCA for triggered events - TH1F *fHistOfflTrkDCANoTrig; //! Offline track DCA for not triggered evts - - TH1F *fHistOnlTrkDCA; //! Online track DCA - TH1F *fHistOnlTrkDCATrig; //! - - TH1F *fHistOfflTrkNcls; //! #clusters for offline tracks - TH1F *fHistOfflTrkNclsTrig; //! #clusters for offline tracks, triggered evts - TH1F *fHistOfflTrkNclsNoTrig; //! #clusters not triggered - - TH1F *fHistOnlTrkNcls; //! #clusters for online tracks - TH1F *fHistOnlTrkNclsTrig; //! - - TH1F *fHistOfflTrkDCANoTrigNclsCut1; //! with cut on #clusters>=60 - TH1F *fHistOfflTrkDCANoTrigNclsCut2; //! with cut on #clusters<60 - - TH1F *fHistOfflTrkP; //! momentum for offline tracks - TH1F *fHistOfflTrkPTrig; //! momentum for triggered events - TH1F *fHistOfflTrkPNoTrig; //! momentum for not triggered events - TH1F *fHistOnlTrkP; //! momentum for online tracks - - TH1F *fHistOfflResPtInv; //! resolution on 1/pt for offline tracks - TH1F *fHistOnlResPtInv; //! resoltion on 1/pt for online tracks - - TH1F *fHistOffldEdx; //! - TH1F *fHistOnldEdx; //! - - TH2F *fHistOffldEdxVsP; //! dE/dx versus momentum for offline TPC tracks - TH2F *fHistOnldEdxVsP; //! dE/dx versus momentum for online TPC tracks - - TH1F *fHistOffldZ; //! resolution on z - TH1F *fHistOnldZ; //! resolution on z - - TH1F *fHistOffldX; //! resolution on r - TH1F *fHistOnldX; //! resolution on r - - TH1F *fHistOfflPhi; //! resolution on azimuthal angle - TH1F *fHistOnlPhi; //! resolution on azimuthal angle - - TH1F *fHistOfflTheta; //! resolution on polar angle - TH1F *fHistOnlTheta; //! resolution on polar angle - - TH2F *fHistOnlDZ; //! online trigger tracks distance to beam and Z to IP - TH2F *fHistOfflDZ; //! offline tracks distance to beam and Z to IP - TH2F *fHistOfflDZTrig; //! - TH2F *fHistOfflDZNoTrig; //! - - Int_t fNevt; - TObjArray *fTrgClsArray; - - /* - Int_t fNtracksThruZ0; //#tracks thru central electrode - Int_t fNtracksThruZ0Trig; //#tracks thru central electrode being triggered - */ - - static const Float_t fgkPhiMin[5]; - static const Float_t fgkPhiMax[5]; - static const Float_t fgkEtaMin; - static const Float_t fgkEtaMax; - static const Float_t fgkNormX[5]; - static const Float_t fgkNormY[5]; - static const Float_t fgkInitPosX[5]; - static const Float_t fgkInitPosY[5]; - - ClassDef(AliAnalysisTaskHLTTPC, 0); // example of analysis -}; - -#endif +// $Id$ + +#ifndef ALIANALYSISTASKHLTTPC_H +#define ALIANALYSISTASKHLTTPC_H + +//* This file is property of and copyright by the ALICE HLT Project * +//* ALICE Experiment at CERN, All rights reserved. * +//* See cxx source for full Copyright notice * + +/** @file AliAnalysisTaskHLTTPC.h + @author Kalliopi Kanaki + @date + @brief An analysis task to compare the offline and HLT esd trees +*/ + +// forward declarations +class TH1F; +class TH2F; +class TList; +class AliESDEvent; +class AliESDtrack; +class AliESDRun; +class TObjArray; + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskHLTTPC : public AliAnalysisTaskSE { + + public: + AliAnalysisTaskHLTTPC(const char *name); + virtual ~AliAnalysisTaskHLTTPC() {} + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + //virtual Bool_t Notify(); + virtual void NotifyRun(); + + private: + + /** copy constructor */ + AliAnalysisTaskHLTTPC(const AliAnalysisTaskHLTTPC&); + /** assignment operator */ + AliAnalysisTaskHLTTPC& operator=(const AliAnalysisTaskHLTTPC&); + + AliESDRun *fESDRun; //! + TList *fOutputList; + + TH1F *fHistTrigger; //! trigger counters + TH1F *fHistHLTTrigger; //! HLT online trigger counters + + TH1F *fHistOfflTrkDCA; //! Offline track DCA to beam line + TH1F *fHistOfflTrkDCATrig; //! Offline track DCA for triggered events + TH1F *fHistOfflTrkDCANoTrig; //! Offline track DCA for not triggered evts + + TH1F *fHistOnlTrkDCA; //! Online track DCA + TH1F *fHistOnlTrkDCATrig; //! + + TH1F *fHistOfflTrkNcls; //! #clusters for offline tracks + TH1F *fHistOfflTrkNclsTrig; //! #clusters for offline tracks, triggered evts + TH1F *fHistOfflTrkNclsNoTrig; //! #clusters not triggered + + TH1F *fHistOnlTrkNcls; //! #clusters for online tracks + TH1F *fHistOnlTrkNclsTrig; //! + + TH1F *fHistOfflTrkDCANoTrigNclsCut1; //! with cut on #clusters>=60 + TH1F *fHistOfflTrkDCANoTrigNclsCut2; //! with cut on #clusters<60 + + TH1F *fHistOfflTrkP; //! momentum for offline tracks + TH1F *fHistOfflTrkPTrig; //! momentum for triggered events + TH1F *fHistOfflTrkPNoTrig; //! momentum for not triggered events + TH1F *fHistOnlTrkP; //! momentum for online tracks + + TH1F *fHistOfflResPtInv; //! resolution on 1/pt for offline tracks + TH1F *fHistOnlResPtInv; //! resoltion on 1/pt for online tracks + + TH1F *fHistOffldEdx; //! + TH1F *fHistOnldEdx; //! + + TH2F *fHistOffldEdxVsP; //! dE/dx versus momentum for offline TPC tracks + TH2F *fHistOnldEdxVsP; //! dE/dx versus momentum for online TPC tracks + + TH1F *fHistOffldZ; //! resolution on z + TH1F *fHistOnldZ; //! resolution on z + + TH1F *fHistOffldX; //! resolution on r + TH1F *fHistOnldX; //! resolution on r + + TH1F *fHistOfflPhi; //! resolution on azimuthal angle + TH1F *fHistOnlPhi; //! resolution on azimuthal angle + + TH1F *fHistOfflTheta; //! resolution on polar angle + TH1F *fHistOnlTheta; //! resolution on polar angle + + TH2F *fHistOnlDZ; //! online trigger tracks distance to beam and Z to IP + TH2F *fHistOfflDZ; //! offline tracks distance to beam and Z to IP + TH2F *fHistOfflDZTrig; //! + TH2F *fHistOfflDZNoTrig; //! + + Int_t fNevt; + TObjArray *fTrgClsArray; + + /* + Int_t fNtracksThruZ0; //#tracks thru central electrode + Int_t fNtracksThruZ0Trig; //#tracks thru central electrode being triggered + */ + + static const Float_t fgkPhiMin[5]; + static const Float_t fgkPhiMax[5]; + static const Float_t fgkEtaMin; + static const Float_t fgkEtaMax; + static const Float_t fgkNormX[5]; + static const Float_t fgkNormY[5]; + static const Float_t fgkInitPosX[5]; + static const Float_t fgkInitPosY[5]; + + ClassDef(AliAnalysisTaskHLTTPC, 0); // example of analysis +}; + +#endif diff --git a/HLT/TPCLib/tracking-ca/cagpu/gpu_tracker_install.txt b/HLT/TPCLib/tracking-ca/cagpu/gpu_tracker_install.txt index 83ea419bb3e..960f53de330 100755 --- a/HLT/TPCLib/tracking-ca/cagpu/gpu_tracker_install.txt +++ b/HLT/TPCLib/tracking-ca/cagpu/gpu_tracker_install.txt @@ -1,23 +1,23 @@ -The GPU Tracker is contained in an extra library AliHLTTPCCAGPU that must be build in addition to the HLT libraries -The HLT Tracker Framework will automatically try to load AliHLTTPCCAGPU from LD_LIBRARY_PATH -AliHLTTPCCAGPU will further try to load the CUDA runtime library which needs to be installed and pointed to by LD_LIBRARY_PATH -If the -allowGPU option for the AliHLTTPCCATrackerComponent is set, the tracker framework will automatically try run the GPU tracker. -If the GPU tracker is not available (because no GPU is present, or because all the GPU memory is used by other processes) the framework will automatically fall back to the CPU tracker - -Therefore to use the GPU tracker the following steps are needed: -- The NVIDIA Driver must be installed and the kernel modules loaded -- The CUDA Toolkit must be installed in /usr/local/cuda and the LD_LIBRARY_PATH must point to it -- The library AliHLTTPCCAGPU must be compiled and LD_LIBRARY_PATH point to it -- the -allowGPU option must be set for the TrackerComponent in the HLT configuration - -How to build the library AliHLTTPCCAGPU: -The library is not build automatically by the AliROOT or HLT standalone build -It can be found at via svn at https://qon.zapto.org/var/svn/catracker/catracker/standalone/cagpubuild -The Variables ROOTSYS AND ALIHLT_TOPDIR must be set for the makefile to work, the cuda compiler nvcc must be present in the PATH variable -The makefile builds the library and stores the shared object file in the current directory - -To build the library the following is needed -- Checkout the library from svn -- Make sure the environment variables ALIHLT_TOPDIR and ROOTSYS are set -- The CUDA compiler must be installed in /usr/local/cuda and available in the PATH variable (you can change the path in the makefile) -- run make +The GPU Tracker is contained in an extra library AliHLTTPCCAGPU that must be build in addition to the HLT libraries +The HLT Tracker Framework will automatically try to load AliHLTTPCCAGPU from LD_LIBRARY_PATH +AliHLTTPCCAGPU will further try to load the CUDA runtime library which needs to be installed and pointed to by LD_LIBRARY_PATH +If the -allowGPU option for the AliHLTTPCCATrackerComponent is set, the tracker framework will automatically try run the GPU tracker. +If the GPU tracker is not available (because no GPU is present, or because all the GPU memory is used by other processes) the framework will automatically fall back to the CPU tracker + +Therefore to use the GPU tracker the following steps are needed: +- The NVIDIA Driver must be installed and the kernel modules loaded +- The CUDA Toolkit must be installed in /usr/local/cuda and the LD_LIBRARY_PATH must point to it +- The library AliHLTTPCCAGPU must be compiled and LD_LIBRARY_PATH point to it +- the -allowGPU option must be set for the TrackerComponent in the HLT configuration + +How to build the library AliHLTTPCCAGPU: +The library is not build automatically by the AliROOT or HLT standalone build +It can be found at via svn at https://qon.zapto.org/var/svn/catracker/catracker/standalone/cagpubuild +The Variables ROOTSYS AND ALIHLT_TOPDIR must be set for the makefile to work, the cuda compiler nvcc must be present in the PATH variable +The makefile builds the library and stores the shared object file in the current directory + +To build the library the following is needed +- Checkout the library from svn +- Make sure the environment variables ALIHLT_TOPDIR and ROOTSYS are set +- The CUDA compiler must be installed in /usr/local/cuda and available in the PATH variable (you can change the path in the makefile) +- run make diff --git a/HLT/trigger/tasks/AliAnalysisTasktrigger.h b/HLT/trigger/tasks/AliAnalysisTasktrigger.h index 42bab691ff7..96136863280 100644 --- a/HLT/trigger/tasks/AliAnalysisTasktrigger.h +++ b/HLT/trigger/tasks/AliAnalysisTasktrigger.h @@ -1,152 +1,152 @@ -//-*- Mode: C++ -*- - -#ifndef ALIANALYSISTASKTRIGGER_H -#define ALIANALYSISTASKTRIGGER_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -// Study trigger efficiencies for high-pt trigger -// Author: Jochen Thaeder - -#include "AliAnalysisTaskSE.h" - -class TH1F; -class AliESDEvent; -class AliMCEvent; -class AliKineTrackCuts; - -#include "AliStack.h" -#include "TParticle.h" -#include "TRandom3.h" - -class AliAnalysisTasktrigger : public AliAnalysisTaskSE { - - public: - - /* - * --------------------------------------------------------------------------------- - * Constructor / Destructor - * --------------------------------------------------------------------------------- - */ - - AliAnalysisTasktrigger(const char *name = "AliAnalysisTasktrigger"); - virtual ~AliAnalysisTasktrigger(); - - /* - * --------------------------------------------------------------------------------- - * Methods - * --------------------------------------------------------------------------------- - */ - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - - /////////////////////////////////////////////////////////////////////////////////// - - private: - - AliAnalysisTasktrigger(const AliAnalysisTasktrigger&); // not implemented - AliAnalysisTasktrigger& operator=(const AliAnalysisTasktrigger&); // not implemented - - /* - * --------------------------------------------------------------------------------- - * Setup Methods - private - * --------------------------------------------------------------------------------- - */ - - Bool_t SetupEvent(); - - void SetupESDTrackCuts(); - - void SetupTrigHistograms(); - void SetupPtHistograms(); - void SetupMultHistograms(); - - /* - * --------------------------------------------------------------------------------- - * Helper Methods - private - * --------------------------------------------------------------------------------- - */ - - TParticle* GetChargedPhysicalPrimary( AliStack* stack, Int_t idx ); - Bool_t IsFindableMC(Int_t idx, Float_t length); - - void AddTriggerHist( TH1F* hist ); - void AddPtHist( TH1F* hist ); - void AddMultHist( TH1F* hist ); - - /* - * --------------------------------------------------------------------------------- - * Trigger Methods - private - * --------------------------------------------------------------------------------- - */ - - void EvaluateTrigger(); - - /* - * --------------------------------------------------------------------------------- - * Fill Methods - private - * --------------------------------------------------------------------------------- - */ - - void FillCutStudies( Int_t mode ); - void FillCounters( Int_t mode ); - void FillTriggerHistograms(); - - void FillTriggerStudies(); - void FillTriggerStudiesMC(); - - /* - * --------------------------------------------------------------------------------- - * Static Members - private - * --------------------------------------------------------------------------------- - */ - - static const Int_t fgkNSettings; // N Settings - static const Int_t fgkNTrigger; // N Trigger - - static const Double_t fgkTriggerPt[]; // Array of Pt Settings - static const Char_t *fgkTrigger[]; // Array of Trigger Names - - static const Int_t fgkNSelectionCuts; // N Selection and Cut Types - static const Char_t *fgkSelectionCuts[]; // Selection and Cut Types - - enum mode {kOFF, kHLT, kMC, kNModes}; - - /* - * --------------------------------------------------------------------------------- - * Members - private - * --------------------------------------------------------------------------------- - */ - TRandom3 *fRandom; //! Random Generator - - AliMCEvent *fMC; //! MC object - AliESDEvent *fESD; //! ESD object - AliESDEvent *fESDHLT; //! ESD - HLT object - - AliESDtrackCuts *fESDTrackCuts; //! ESD cuts - AliESDtrackCuts *fESDHLTTrackCuts; //! HLT adopted track cuts - AliKineTrackCuts*fMCTrackCuts; //! MC track cuts - - Bool_t fIsSelected; //! Event Selected by physics selection + Primary Vertex - Bool_t fIsSelectedHLT; //! HLT Event Selected by physics selection + Primary Vertex - Bool_t fIsSelectedMC; //! MC Event Selected by physics selection + Primary Vertex - - Bool_t fIsSelectedTask; //! Event Selected by physics selection - - TObjArray *fOutputContainer; //! output data container - - // -------------------------------------------------------------------- - - Int_t *fPtCount; //! Pt count per setting [kNModes*fgkTrigger] - Int_t *fMultiplicity; //! Multiplicty counters [fgkNSelectionCuts] - - // -------------------------------------------------------------------- - - Bool_t *fTrigger; // Trigger [kNModes*fgkNTrigger] - - ClassDef(AliAnalysisTasktrigger, 3); -}; - -#endif +//-*- Mode: C++ -*- + +#ifndef ALIANALYSISTASKTRIGGER_H +#define ALIANALYSISTASKTRIGGER_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +// Study trigger efficiencies for high-pt trigger +// Author: Jochen Thaeder + +#include "AliAnalysisTaskSE.h" + +class TH1F; +class AliESDEvent; +class AliMCEvent; +class AliKineTrackCuts; + +#include "AliStack.h" +#include "TParticle.h" +#include "TRandom3.h" + +class AliAnalysisTasktrigger : public AliAnalysisTaskSE { + + public: + + /* + * --------------------------------------------------------------------------------- + * Constructor / Destructor + * --------------------------------------------------------------------------------- + */ + + AliAnalysisTasktrigger(const char *name = "AliAnalysisTasktrigger"); + virtual ~AliAnalysisTasktrigger(); + + /* + * --------------------------------------------------------------------------------- + * Methods + * --------------------------------------------------------------------------------- + */ + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + + /////////////////////////////////////////////////////////////////////////////////// + + private: + + AliAnalysisTasktrigger(const AliAnalysisTasktrigger&); // not implemented + AliAnalysisTasktrigger& operator=(const AliAnalysisTasktrigger&); // not implemented + + /* + * --------------------------------------------------------------------------------- + * Setup Methods - private + * --------------------------------------------------------------------------------- + */ + + Bool_t SetupEvent(); + + void SetupESDTrackCuts(); + + void SetupTrigHistograms(); + void SetupPtHistograms(); + void SetupMultHistograms(); + + /* + * --------------------------------------------------------------------------------- + * Helper Methods - private + * --------------------------------------------------------------------------------- + */ + + TParticle* GetChargedPhysicalPrimary( AliStack* stack, Int_t idx ); + Bool_t IsFindableMC(Int_t idx, Float_t length); + + void AddTriggerHist( TH1F* hist ); + void AddPtHist( TH1F* hist ); + void AddMultHist( TH1F* hist ); + + /* + * --------------------------------------------------------------------------------- + * Trigger Methods - private + * --------------------------------------------------------------------------------- + */ + + void EvaluateTrigger(); + + /* + * --------------------------------------------------------------------------------- + * Fill Methods - private + * --------------------------------------------------------------------------------- + */ + + void FillCutStudies( Int_t mode ); + void FillCounters( Int_t mode ); + void FillTriggerHistograms(); + + void FillTriggerStudies(); + void FillTriggerStudiesMC(); + + /* + * --------------------------------------------------------------------------------- + * Static Members - private + * --------------------------------------------------------------------------------- + */ + + static const Int_t fgkNSettings; // N Settings + static const Int_t fgkNTrigger; // N Trigger + + static const Double_t fgkTriggerPt[]; // Array of Pt Settings + static const Char_t *fgkTrigger[]; // Array of Trigger Names + + static const Int_t fgkNSelectionCuts; // N Selection and Cut Types + static const Char_t *fgkSelectionCuts[]; // Selection and Cut Types + + enum mode {kOFF, kHLT, kMC, kNModes}; + + /* + * --------------------------------------------------------------------------------- + * Members - private + * --------------------------------------------------------------------------------- + */ + TRandom3 *fRandom; //! Random Generator + + AliMCEvent *fMC; //! MC object + AliESDEvent *fESD; //! ESD object + AliESDEvent *fESDHLT; //! ESD - HLT object + + AliESDtrackCuts *fESDTrackCuts; //! ESD cuts + AliESDtrackCuts *fESDHLTTrackCuts; //! HLT adopted track cuts + AliKineTrackCuts*fMCTrackCuts; //! MC track cuts + + Bool_t fIsSelected; //! Event Selected by physics selection + Primary Vertex + Bool_t fIsSelectedHLT; //! HLT Event Selected by physics selection + Primary Vertex + Bool_t fIsSelectedMC; //! MC Event Selected by physics selection + Primary Vertex + + Bool_t fIsSelectedTask; //! Event Selected by physics selection + + TObjArray *fOutputContainer; //! output data container + + // -------------------------------------------------------------------- + + Int_t *fPtCount; //! Pt count per setting [kNModes*fgkTrigger] + Int_t *fMultiplicity; //! Multiplicty counters [fgkNSelectionCuts] + + // -------------------------------------------------------------------- + + Bool_t *fTrigger; // Trigger [kNModes*fgkNTrigger] + + ClassDef(AliAnalysisTasktrigger, 3); +}; + +#endif diff --git a/ITS/AliITSAlignMille2Module.cxx b/ITS/AliITSAlignMille2Module.cxx index 1cdab045af5..74427b46186 100644 --- a/ITS/AliITSAlignMille2Module.cxx +++ b/ITS/AliITSAlignMille2Module.cxx @@ -1,1223 +1,1223 @@ -/************************************************************************** - * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id$ */ -//----------------------------------------------------------------------------- -/// \class AliITSAlignMille2Module -/// Alignment class for the ALICE ITS detector -/// -/// This class is used by AliITSAlignMille to build custom supermodules -/// made of ITS sensitive modules. These supermodules are then aligned -/// -/// Custom supermodules must have VolumeID > 14335 -/// -/// \author M. Lunardon -//----------------------------------------------------------------------------- - -#include -#include - -#include "AliITSAlignMille2Module.h" -#include "AliITSgeomTGeo.h" -#include "AliGeomManager.h" -#include "AliAlignObjParams.h" -#include "AliLog.h" -#include "AliITSAlignMille2.h" - -/// \cond CLASSIMP -ClassImp(AliITSAlignMille2Module) -/// \endcond - -#define CORHW_ - - -const Float_t AliITSAlignMille2Module::fgkDummyConstraint = 1e-2;//1.E3; - -//------------------------------------------------------------- -AliITSAlignMille2Module::AliITSAlignMille2Module() : - TNamed(), - fNSensVol(0), - fIndex(-1), - fDetType(-1), - fVolumeID(0), - fNParTot(0), - fNParFree(0), - fParOffs(0), - fNProcPoints(0), - fParVals(0), - fParErrs(0), - fParCstr(0), - fSensVolIndex(0), - fSensVolVolumeID(0), - fMatrix(NULL), - fSensVolMatrix(NULL), - fSensVolModifMatrix(NULL), - fParent(NULL), - fChildren(0) -{ - /// void constructor - fMatrix = new TGeoHMatrix; - fSensVolMatrix = new TGeoHMatrix; - fSensVolModifMatrix = new TGeoHMatrix; - fSensVolIndex.Set(1); - fSensVolVolumeID.Set(1); - fSigmaFactor[0]=fSigmaFactor[1]=fSigmaFactor[2]=1.0; -} - -//------------------------------------------------------------- -AliITSAlignMille2Module::AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname, - const TGeoHMatrix *m, Int_t nsv, const UShort_t *volidsv) : - TNamed(), - fNSensVol(0), - fIndex(-1), - fDetType(-1), - fVolumeID(0), - fNParTot(0), - fNParFree(0), - fParOffs(kMaxParGeom), - fNProcPoints(0), - fParVals(0), - fParErrs(0), - fParCstr(0), - fSensVolIndex(0), - fSensVolVolumeID(0), - fMatrix(NULL), - fSensVolMatrix(NULL), - fSensVolModifMatrix(NULL), - fParent(NULL), - fChildren(0) -{ - /// void constructor - fMatrix = new TGeoHMatrix; - fSensVolMatrix = new TGeoHMatrix; - fSensVolModifMatrix = new TGeoHMatrix; - fSigmaFactor[0]=fSigmaFactor[1]=fSigmaFactor[2]=1.0; - for (int i=kMaxParGeom;i--;) fParOffs[i] = -1; - if (Set(index,volid,symname,m,nsv,volidsv)) { - AliInfo("Error in AliITSAlignMille2Module::Set() - initializing void supermodule..."); - } - AssignDetType(); -} - -//------------------------------------------------------------- -AliITSAlignMille2Module::AliITSAlignMille2Module(UShort_t volid) : - TNamed(), - fNSensVol(0), - fIndex(-1), - fDetType(-1), - fVolumeID(0), - fNParTot(0), - fNParFree(0), - fParOffs(kMaxParGeom), - fNProcPoints(0), - fParVals(0), - fParErrs(0), - fParCstr(0), - fSensVolIndex(0), - fSensVolVolumeID(0), - fMatrix(NULL), - fSensVolMatrix(NULL), - fSensVolModifMatrix(NULL), - fParent(NULL), - fChildren(0) -{ - /// simple constructor building a supermodule from a single sensitive volume - fMatrix = new TGeoHMatrix; - fSensVolMatrix = new TGeoHMatrix; - fSensVolModifMatrix = new TGeoHMatrix; - // temporary align object, just use the rotation... - fSensVolIndex.Set(1); - fSensVolVolumeID.Set(1); - fSigmaFactor[0]=fSigmaFactor[1]=fSigmaFactor[2]=1.0; - for (int i=kMaxParGeom;i--;) fParOffs[i] = -1; - // - fIndex = GetIndexFromVolumeID(volid); - if (fIndex>=0 && gGeoManager) { // good sensitive module and geometry loaded - SetName(AliGeomManager::SymName(volid)); - fVolumeID = volid; - AddSensitiveVolume(volid); - SetSensorsProvided(kTRUE); - if (SensVolMatrix(volid, fMatrix)) - AliInfo("Matrix not defined"); - } - else { - AliInfo("Wrong VolumeID or Geometry not loaded - initializing void supermodule..."); - } - AssignDetType(); -} - - -//_____________________________________________________________________________ -AliITSAlignMille2Module::AliITSAlignMille2Module(const AliITSAlignMille2Module &m) : - TNamed(m), - fNSensVol(m.fNSensVol), - fIndex(m.fIndex), - fDetType(m.fDetType), - fVolumeID(m.fVolumeID), - fNParTot(m.fNParTot), - fNParFree(m.fNParFree), - fParOffs(m.fNParTot), - fNProcPoints(0), - fParVals(0), - fParErrs(0), - fParCstr(0), - fSensVolIndex(m.fSensVolIndex), - fSensVolVolumeID(m.fSensVolVolumeID), - fMatrix(new TGeoHMatrix(*m.GetMatrix())), - fSensVolMatrix(new TGeoHMatrix), - fSensVolModifMatrix(new TGeoHMatrix), - fParent(m.fParent), - fChildren(0) -{ - // Copy constructor - fSensVolIndex = m.fSensVolIndex; - fSensVolVolumeID = m.fSensVolVolumeID; - for (int i=m.fNParTot;i--;) fParOffs[i] = m.fParOffs[i]; - for (int i=3;i--;) fSigmaFactor[i] = m.fSigmaFactor[i]; - if (fNParTot) { - fParVals = new Float_t[fNParTot]; - fParErrs = new Float_t[fNParTot]; - fParCstr = new Float_t[fNParTot]; - for (int i=fNParTot;i--;) { - fParVals[i] = m.fParVals[i]; - fParErrs[i] = m.fParErrs[i]; - fParCstr[i] = m.fParCstr[i]; - } - } -} - -//_____________________________________________________________________________ -AliITSAlignMille2Module& AliITSAlignMille2Module::operator=(const AliITSAlignMille2Module &m) -{ - // operator = - // - if(this==&m) return *this; - this->TNamed::operator=(m); - // - fNSensVol=m.fNSensVol; - fIndex=m.fIndex; - fDetType = m.fDetType; - fVolumeID=m.fVolumeID; - fNParTot = m.fNParTot; - fNParFree = m.fNParFree; - fNProcPoints = m.fNProcPoints; - delete[] fParVals; fParVals = 0; - delete[] fParErrs; fParErrs = 0; - delete[] fParCstr; fParCstr = 0; - // - if (fNParTot) { - fParVals = new Float_t[fNParTot]; - fParErrs = new Float_t[fNParTot]; - fParCstr = new Float_t[fNParTot]; - for (int i=m.GetNParTot();i--;) { - fParVals[i] = m.fParVals[i]; - fParErrs[i] = m.fParErrs[i]; - fParCstr[i] = m.fParCstr[i]; - } - } - // - fParOffs.Set(fNParTot); - for (int i=0;i= 2198"); - return -1; - } - if (volid<14336) { - AliInfo("VolumeID must be >= 14336"); - return -2; - } - - if (!symname) return -3; - for (Int_t i=0; i<2198; i++) { - if (!strcmp(symname,AliITSgeomTGeo::GetSymName(i))) { - AliInfo("Symname already used by a Sensitive Volume"); - return -3; - } - } - - if (!m) return -4; - - // can initialize needed stuffs - fIndex = index; - fVolumeID = volid; - SetName(symname); - // - (*fMatrix) = (*m); - // - fSensVolIndex.Set(nsv); - fSensVolVolumeID.Set(nsv); - // add sensitive volumes - for (Int_t i=0; i0) fParCstr[dof] = fgkDummyConstraint+1.; // the parameter is free and unconstrained - else fParCstr[dof] = -cstr; // the parameter is free but constrained -} - -//------------------------------------------------------------- -Bool_t AliITSAlignMille2Module::IsSensor(UShort_t voluid) -{ - // Does this volid correspond to sensor ? - AliGeomManager::ELayerID layId = AliGeomManager::VolUIDToLayerSafe(voluid); - if (layId>0 && layId<7) { - Int_t mId = Int_t(voluid & 0x7ff); - if( mId>=0 && mId6) return -1; - Int_t idx=Int_t(voluid)-2048*lay; - if (idx>=AliGeomManager::LayerSize(lay)) return -1; - for (Int_t ilay=1; ilay=parent->GetNSensitiveVolumes()) return kFALSE; - return parent->IsIn( fSensVolVolumeID[0] ); -} - -//------------------------------------------------------------- -TGeoHMatrix *AliITSAlignMille2Module::GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t *delta,Bool_t local) -{ - // modify the original TGeoHMatrix of the sensitive module 'voluid' according - // with a delta transform. applied to the supermodule matrix - // return NULL if error - - if (!IsIn(voluid)) return NULL; - if (!gGeoManager) return NULL; - - // prepare the TGeoHMatrix - Double_t tr[3],ang[3]; - tr[0]=delta[0]; // in centimeter - tr[1]=delta[1]; - tr[2]=delta[2]; - ang[0]=delta[3]; // psi (X) in deg - ang[1]=delta[4]; // theta (Y) - ang[2]=delta[5]; // phi (Z) - // - static AliAlignObjParams tempAlignObj; - tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); - tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); - AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); - TGeoHMatrix hm; - tempAlignObj.GetMatrix(hm); - //printf("\n0: delta matrix\n");hm.Print(); - - // 1) start setting fSensVolModif = fSensVol - if (SensVolMatrix(voluid, fSensVolModifMatrix)) return NULL; - // - if (local) { - // 2) set fSensVolModif = SensVolRel - fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); - // 3) multiply left by delta - fSensVolModifMatrix->MultiplyLeft( &hm ); - // 4) multiply left by fMatrix - fSensVolModifMatrix->MultiplyLeft( fMatrix ); - } - else fSensVolModifMatrix->MultiplyLeft( &hm ); - // - return fSensVolModifMatrix; -} - -//------------------------------------------------------------- -AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t *deltalocal) -{ - // calculate misalignment of sens.vol. 'voluid' according with a displacement 'deltalocal' - // of the mother volume. The misalignment is returned as AliAlignObjParams object - - if (!IsIn(voluid)) return NULL; - if (!gGeoManager) return NULL; - - // prepare the TGeoHMatrix - Double_t tr[3],ang[3]; - tr[0]=deltalocal[0]; // in centimeter - tr[1]=deltalocal[1]; - tr[2]=deltalocal[2]; - ang[0]=deltalocal[3]; // psi (X) in deg - ang[1]=deltalocal[4]; // theta (Y) - ang[2]=deltalocal[5]; // phi (Z) - // - static AliAlignObjParams tempAlignObj; - tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); - tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); - AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); - // - return GetSensitiveVolumeMisalignment(voluid,&tempAlignObj); -} - -//------------------------------------------------------------- -AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a) -{ - // return the misalignment of the sens. vol. 'voluid' corresponding with - // a misalignment 'a' in the mother volume - // return NULL if error - - // Gsv = Gg * Gg-1 * Gsv -> Lsv,g = Gg-1 * Gsv - // G'sv = Gg * Dg * Lsv,g === Gsv * Dsv - // Gg * Dg * Gg-1 * Gsv = Gsv * Gsv-1 * Gg * Dg * Gg-1 * Gsv - // - // => Dsv = (Gsv-1 * Gg * Dg * Gg-1 * Gsv) - // - - if (!IsIn(voluid)) return NULL; - if (!gGeoManager) return NULL; - - //a->Print(""); - - // prepare the Delta matrix Dg - TGeoHMatrix dg; - a->GetMatrix(dg); - //dg.Print(); - - // 1) start setting fSensVolModif = Gsv - if (SensVolMatrix(voluid, fSensVolModifMatrix)) return NULL; - //printf("\n1: modif=orig del sensvol\n");fSensVolModifMatrix->Print(); - - // 2) set fSensVolModif = Gg-1 * Gsv - fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); - //printf("\n2: modif=relative del sensvol\n");fSensVolModifMatrix->Print(); - - // 3) set fSensVolModif = Dg * Gg-1 * Gsv - fSensVolModifMatrix->MultiplyLeft( &dg ); - //printf("\n3: modif= delta*relative\n");fSensVolModifMatrix->Print(); - - // 4) set fSensVolModif = Gg * Dg * Gg-1 * Gsv - fSensVolModifMatrix->MultiplyLeft( fMatrix ); - //printf("\n4: modif=quasi,manca il Gsv-1...\n");fSensVolModifMatrix->Print(); - - // 5) set fSensVolModif = Gsv-1 * Gg * Dg * Gg-1 * Gsv - if (SensVolMatrix(voluid, &dg)) return NULL; - fSensVolModifMatrix->MultiplyLeft( &dg.Inverse() ); - //printf("\n5: modif=finale\n");fSensVolModifMatrix->Print(); - // - // >> RS - // 6) mo' fSensVolModif dovrebbe essere la Dsv(loc) t.c. G'sv = Gsv*Dsv(loc) - // per trasformarla in Dsv(loc rispetto al Gsv0, non modificato) dovrebbe essere: - // Dsv(loc) -> Dpre * Dsv(loc) * Dpre-1 - //TGeoHMatrix dpre; // dpre = Gsv0-1*Gsv - //if (SensVolOrigGlobalMatrix(voluid, &dg)) return NULL; - //if (SensVolMatrix(voluid, &dpre)) return NULL; - //dpre.MultiplyLeft( &dg.Inverse() ); - //fSensVolModifMatrix->Multiply( &dpre.Inverse() ); - //fSensVolModifMatrix->MultiplyLeft( &dpre ); - // direi che NON FUNZIONA!!!! - - // << RS - - // reset align object (may not be needed...) - static AliAlignObjParams tempAlignObj; - tempAlignObj.SetVolUID(0); - tempAlignObj.SetSymName(""); - tempAlignObj.SetTranslation(0,0,0); - tempAlignObj.SetRotation(0,0,0); - // - // >> RS -#ifdef CORHW_ - // correction for SPD y-shift - if (voluid>=2048 && voluid<4256) { - TGeoHMatrix deltay; - double dy[3]={0.,0.0081,0.}; - deltay.SetTranslation(dy); - fSensVolModifMatrix->MultiplyLeft( &deltay ); - fSensVolModifMatrix->Multiply( &deltay.Inverse() ); - } -#endif - // << RS - if (!tempAlignObj.SetMatrix(*fSensVolModifMatrix)) return NULL; - tempAlignObj.SetVolUID(voluid); - tempAlignObj.SetSymName(AliGeomManager::SymName(voluid)); - // - return &tempAlignObj; -} - -// >> RS -//------------------------------------------------------------- -AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t *deltalocal) -{ - // calculate misalignment of sens.vol. 'voluid' according with a displacement 'deltalocal' - // of the mother volume. The misalignment is returned as AliAlignObjParams object including - // the (evenctual) prealignment => no merging needed - - if (!IsIn(voluid)) return NULL; - if (!gGeoManager) return NULL; - - // prepare the TGeoHMatrix - Double_t tr[3],ang[3]; - tr[0]=deltalocal[0]; // in centimeter - tr[1]=deltalocal[1]; - tr[2]=deltalocal[2]; - ang[0]=deltalocal[3]; // psi (X) in deg - ang[1]=deltalocal[4]; // theta (Y) - ang[2]=deltalocal[5]; // phi (Z) - - // reset align object (may not be needed...) - static AliAlignObjParams tempAlignObj; - tempAlignObj.SetVolUID(0); - tempAlignObj.SetSymName(""); - tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); - tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); - AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); - - // Gsv = Gg * Gg-1 * Gsv -> Lsv,g = Gg-1 * Gsv - // G'sv = Gg * Dg * Lsv,g === DGsv * Gsv - // - // => Dsv = (G0sv-1 * Gg * Dg * Gg-1 * GMsv) // - // - - // prepare the Delta matrix Dg - TGeoHMatrix dg; - tempAlignObj.GetMatrix(dg); - //dg.Print(); - - // 1) start setting fSensVolModif = Gsv - if (SensVolMatrix(voluid, fSensVolModifMatrix)) return NULL; - //printf("\n1: modif=orig del sensvol\n");fSensVolModifMatrix->Print(); - - // 2) set fSensVolModif = Gg-1 * Gsv - fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); - //printf("\n2: modif=relative del sensvol\n");fSensVolModifMatrix->Print(); - - // 3) set fSensVolModif = Dg * Gg-1 * Gsv - fSensVolModifMatrix->MultiplyLeft( &dg ); - //printf("\n3: modif= delta*relative\n");fSensVolModifMatrix->Print(); - - // 4) set fSensVolModif = Gg * Dg * Gg-1 * Gsv - fSensVolModifMatrix->MultiplyLeft( fMatrix ); - //printf("\n4: modif=quasi,manca il Gsv-1...\n");fSensVolModifMatrix->Print(); - - // 5) set fSensVolModif = G0sv-1 * Gg * Dg * Gg-1 * Gsv - // qui usa l'orig anziche' la prealigned... - if (SensVolOrigGlobalMatrix(voluid, &dg)) return NULL; - fSensVolModifMatrix->MultiplyLeft( &dg.Inverse() ); - //printf("\n5: modif=finale\n");fSensVolModifMatrix->Print(); - - // reset align object (may not be needed...) - tempAlignObj.SetVolUID(0); - tempAlignObj.SetSymName(""); - tempAlignObj.SetTranslation(0,0,0); - tempAlignObj.SetRotation(0,0,0); - -#ifdef CORHW_ - // correction for SPD y-shift - if (voluid>=2048 && voluid<4256) { - TGeoHMatrix deltay; - double dy[3]={0.,0.0081,0.}; - deltay.SetTranslation(dy); - fSensVolModifMatrix->MultiplyLeft( &deltay ); - fSensVolModifMatrix->Multiply( &deltay.Inverse() ); - } -#endif - if (!tempAlignObj.SetMatrix(*fSensVolModifMatrix)) return NULL; - tempAlignObj.SetVolUID(voluid); - tempAlignObj.SetSymName(AliGeomManager::SymName(voluid)); - - - //tempAlignObj.Print(""); - - return &tempAlignObj; -} -//------------------------------------------------------------- - -//------------------------------------------------------------- -AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t *deltalocal) -{ - // calculate misalignment of sens.vol. 'voluid' according with a displacement 'deltalocal' - // of the mother volume. The misalignment is returned as AliAlignObjParams object - - if (!IsIn(voluid)) return NULL; - if (!gGeoManager) return NULL; - - // prepare the TGeoHMatrix - Double_t tr[3],ang[3]; - tr[0]=deltalocal[0]; // in centimeter - tr[1]=deltalocal[1]; - tr[2]=deltalocal[2]; - ang[0]=deltalocal[3]; // psi (X) in deg - ang[1]=deltalocal[4]; // theta (Y) - ang[2]=deltalocal[5]; // phi (Z) - - // reset align object (may not be needed...) - static AliAlignObjParams tempAlignObj; - tempAlignObj.SetTranslation(0,0,0); - tempAlignObj.SetRotation(0,0,0); - - tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); - tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); - AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); - - // Gsv = Gg * Gg-1 * Gsv -> Lsv,g = Gg-1 * Gsv - // G'sv = Gg * Dg * Lsv,g === DGsv * Gsv - // - // => DGsv = (Gg * Dg * Gg-1) - // - - // prepare the Delta matrix Dg - TGeoHMatrix dg; - tempAlignObj.GetMatrix(dg); - //dg.Print(); - - dg.MultiplyLeft( fMatrix ); - dg.Multiply( &fMatrix->Inverse() ); - - // reset align object (may not be needed...) - tempAlignObj.SetTranslation(0,0,0); - tempAlignObj.SetRotation(0,0,0); - - tempAlignObj.SetVolUID(voluid); - tempAlignObj.SetSymName(AliGeomManager::SymName(voluid)); - - if (!tempAlignObj.SetMatrix(dg)) return NULL; - - //tempAlignObj.Print(""); - - return &tempAlignObj; -} -// << RS - -//------------------------------------------------------------- -TGeoHMatrix *AliITSAlignMille2Module::GetSensitiveVolumeMatrix(UShort_t voluid) -{ - // return TGeoHMatrix of the sens.vol. 'voluid' in the current geometry - if (SensVolMatrix(voluid,fSensVolMatrix)) return NULL; - return fSensVolMatrix; -} - -//------------------------------------------------------------- -TGeoHMatrix *AliITSAlignMille2Module::GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid) -{ - // return original ideal position (from AliGeomManager::GetOrigGlobalMatrix()) - if (SensVolOrigGlobalMatrix(voluid,fSensVolMatrix)) return NULL; - return fSensVolMatrix; -} -//------------------------------------------------------------- -Int_t AliITSAlignMille2Module::SensVolMatrix(UShort_t volid, TGeoHMatrix *m) -{ - // set matrix for sensitive modules (SPD corrected) - // return 0 if success - Double_t rot[9]; - Int_t idx=GetIndexFromVolumeID(volid); - if (idx<0) return -1; - if (!AliITSgeomTGeo::GetRotation(idx,rot)) return -2; - m->SetRotation(rot); - Double_t oLoc[3]={0,0,0}; - Double_t oGlo[3]={0,0,0}; - if (!AliITSgeomTGeo::LocalToGlobal(idx,oLoc,oGlo)) return -3; - m->SetTranslation(oGlo); - return 0; -} - -//------------------------------------------------------------- -Int_t AliITSAlignMille2Module::SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m) -{ - // set original global matrix for sensitive modules (SPD corrected) - // return 0 if success - Int_t idx=GetIndexFromVolumeID(volid); - if (idx<0) return -1; - TGeoHMatrix mo; - if (!AliGeomManager::GetOrigGlobalMatrix(AliGeomManager::SymName(volid),mo)) return -1; - (*m)=mo; - // -#ifdef CORHW_ - // SPD y-shift by 81 mu - if (volid<5000) { - Double_t oLoc[3]={0.0,0.0081,0.0}; - Double_t oGlo[3]={0,0,0}; - m->LocalToMaster(oLoc,oGlo); - m->SetTranslation(oGlo); - } -#endif - return 0; -} - -//------------------------------------------------------------- -UShort_t AliITSAlignMille2Module::GetVolumeIDFromSymname(const Char_t *symname) { - /// volume ID from symname - if (!symname) return 0; - - for (UShort_t voluid=2000; voluid<13300; voluid++) { - Int_t modId; - AliGeomManager::ELayerID layerId = AliGeomManager::VolUIDToLayer(voluid,modId); - if (layerId>0 && layerId<7 && modId>=0 && modId2197) return 0; - return GetVolumeIDFromSymname(AliITSgeomTGeo::GetSymName(index)); -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::Print(Option_t*) const -{ - // print data - // - const char* typeName[] = {"SPD","SDD","SSD"}; - printf("*** ITS SuperModule for AliITSAlignMille ***\n"); - printf("symname : %s (type: %s)\n",GetName(),fDetType<0 ? "N/A":typeName[fDetType]); - printf("parent : %s | %d children\n",fParent ? fParent->GetName() : "N/A",GetNChildren()); - printf("volumeID : %4d | index : %4d | Geom.Params are %s\n",fVolumeID,fIndex, - GeomParamsGlobal() ? "Global":"Local"); - printf("Factors : X=%.2f Y=%.2f Z=%.2f\n" - "DOF: %cTx:%5d| %cTy:%5d| %cTz:%5d| %cPsi:%5d| %cTheta:%5d| %cPhi:%5d|", - fSigmaFactor[0],fSigmaFactor[1],fSigmaFactor[2], - IsFreeDOF(kDOFTX) ? '+':'-',GetParOffset(kDOFTX),IsFreeDOF(kDOFTY) ? '+':'-',GetParOffset(kDOFTY), - IsFreeDOF(kDOFTZ) ? '+':'-',GetParOffset(kDOFTZ),IsFreeDOF(kDOFPS) ? '+':'-',GetParOffset(kDOFPS), - IsFreeDOF(kDOFTH) ? '+':'-',GetParOffset(kDOFTH),IsFreeDOF(kDOFPH) ? '+':'-',GetParOffset(kDOFPH)); - if (IsSDD()) { - printf("%cT0:%5d| %cDVl:%5d| %cDVr:%5d|",IsFreeDOF(kDOFT0)?'+':'-',GetParOffset(kDOFT0), - IsFreeDOF(kDOFDVL)?'+':'-',GetParOffset(kDOFDVL),IsFreeDOF(kDOFDVR)?'+':'-',GetParOffset(kDOFDVR)); - if (IsVDriftLRSame()) printf("(dVL=dVR)"); - } - printf("\n"); - fMatrix->Print(); - printf("%4d Sensitive volumes | %6d Processed Points\n",fNSensVol,fNProcPoints); - for (Int_t i=0; iGetAlignableEntry(GetName())!=0; -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetLocalMatrix(TGeoHMatrix &mat) const -{ - // return the local matrix for transformation to its parent - mat = *fMatrix; - if (fParent) mat.MultiplyLeft( &fParent->GetMatrix()->Inverse() ); -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::AssignDetType() -{ - // assign the detector type - TString tp = GetName(); - if (tp.Contains("SPD",TString::kIgnoreCase)) fDetType = kSPD; - else if (tp.Contains("SDD",TString::kIgnoreCase)) fDetType = kSDD; - else if (tp.Contains("SSD",TString::kIgnoreCase)) fDetType = kSSD; - else fDetType = -1; - fNParTot = IsSDD() ? kMaxParTot:kMaxParGeom; - fNParFree = 0; - fParVals = new Float_t[fNParTot]; - fParErrs = new Float_t[fNParTot]; - fParCstr = new Float_t[fNParTot]; - if (fParOffs.GetSize()MultiplyLeft( &fMatrix->Inverse() ); - AliAlignObjParams tempAlignObj; - tempAlignObj.SetMatrix(*fSensVolMatrix); - tempAlignObj.GetPars(t,r); -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetSensVolGlobalParams(UShort_t volid,const Double_t* loct, const Double_t* locr,Double_t *t, Double_t *r) -{ - // return global parameters of the sensor volid modified by the localDelta params - for (int i=3;i--;) t[i] = r[i] = 0.; - if (SensVolMatrix(volid,fSensVolMatrix)) return; - AliAlignObjParams tempAlignObj; - tempAlignObj.SetTranslation(loct[0],loct[1],loct[2]); - tempAlignObj.SetRotation(locr[0],locr[1],locr[2]); - // - tempAlignObj.GetMatrix(*fSensVolModifMatrix); // obtain local delta - fSensVolModifMatrix->MultiplyLeft( fSensVolMatrix ); // obtain global delta - tempAlignObj.SetMatrix(*fSensVolModifMatrix); - tempAlignObj.GetPars(t,r); // obtain global params -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetSensVolLocalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r) -{ - // return parameters of the sensor volid (modified by the localDelta params) in the current volume - for (int i=3;i--;) t[i] = r[i] = 0.; - if (SensVolMatrix(volid,fSensVolMatrix)) return; - AliAlignObjParams tempAlignObj; - tempAlignObj.SetTranslation(loct[0],loct[1],loct[2]); - tempAlignObj.SetRotation(locr[0],locr[1],locr[2]); - // - tempAlignObj.GetMatrix(*fSensVolModifMatrix); // obtain local delta - fSensVolModifMatrix->MultiplyLeft( fSensVolMatrix ); // obtain global delta - fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); // obtain delta in current volume - tempAlignObj.SetMatrix(*fSensVolModifMatrix); - tempAlignObj.GetPars(t,r); // obtain params -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::SetParVals(Double_t *vl,Int_t npar) -{ - // set parameters - for (int i=TMath::Min(npar,(Int_t)fNParTot);i--;) fParVals[i] = vl[i]; -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetGeomParamsGlo(Double_t *pars) -{ - // recompute parameters from local to global frame - // - // is there anything to do? - if (GeomParamsGlobal()) {for (int i=kMaxParGeom;i--;) pars[i] = fParVals[i]; return;} - // - // IMPORTANT: It is assumed that the parents params are defined in a same way (local or global) - // as for the current module. Since in the mp2 the modules are stored from parents to children, - // it is safe to call this method in loop staring from the lowest level child, i.e. from the end - // of the modules array. - // - // DeltaGlobal = (ModifParents)*DeltaLocal*(ModifParents)^-1 - // - *fSensVolMatrix = *fMatrix; // current global matrix - AliAlignObjParams tempAlignObj; - AliITSAlignMille2Module* parent = GetParent(); - while (parent) { - if (parent->GeomParamsGlobal()) { - AliError("Cannot convert params to Global when the parents are already Global\n"); - for (int i=kMaxParGeom;i--;) pars[i] = 0; - return; - } - fSensVolMatrix->MultiplyLeft( &parent->GetMatrix()->Inverse() ); // Local Matrix - Float_t *parpar = parent->GetParVals(); - tempAlignObj.SetTranslation(parpar[0],parpar[1],parpar[2]); - tempAlignObj.SetRotation(parpar[3],parpar[4],parpar[5]); - tempAlignObj.GetMatrix(*fSensVolModifMatrix); - fSensVolMatrix->MultiplyLeft(fSensVolModifMatrix); - fSensVolMatrix->MultiplyLeft(parent->GetMatrix()); // global matrix after parents modifications - parent = parent->GetParent(); - } - // - tempAlignObj.SetTranslation(fParVals[0],fParVals[1],fParVals[2]); - tempAlignObj.SetRotation(fParVals[3],fParVals[4],fParVals[5]); - tempAlignObj.GetMatrix(*fSensVolModifMatrix); // local delta matrix - fSensVolModifMatrix->Multiply( &fSensVolMatrix->Inverse() ); - fSensVolModifMatrix->MultiplyLeft( fSensVolMatrix ); - tempAlignObj.SetMatrix( *fSensVolModifMatrix ); // global delta matrix - tempAlignObj.GetPars(pars,pars+3); - // -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetGeomParamsLoc(Double_t *pars) -{ - // recompute parameters from global to local frame - // - // is there anything to do? - if (!GeomParamsGlobal()) {for (int i=kMaxParGeom;i--;) pars[i] = fParVals[i]; return;} - // - // IMPORTANT: It is assumed that the parents params are defined in a same way (local or global) - // as for the current module. Since in the mp2 the modules are stored from parents to children, - // it is safe to call this method in loop staring from the lowest level child, i.e. from the end - // of the modules array. - // - // DeltaLocal = (DeltaParents*GlobalMat)^-1*DeltaGlobal*(DeltaParents*GlobalMat) - // - AliITSAlignMille2Module* parent = GetParent(); - AliAlignObjParams tempAlignObj; - tempAlignObj.SetTranslation(0.,0.,0.); - tempAlignObj.SetRotation(0.,0.,0.); - tempAlignObj.GetMatrix(*fSensVolMatrix); // get no-shift matrix - // - while (parent) { // accumulate the product of parents global modifications - if (!parent->GeomParamsGlobal()) { - AliError("Cannot convert params to Local when the parents are already Local\n"); - for (int i=kMaxParGeom;i--;) pars[i] = 0; - return; - } - Float_t *parpar = parent->GetParVals(); - tempAlignObj.SetTranslation(parpar[0],parpar[1],parpar[2]); - tempAlignObj.SetRotation(parpar[3],parpar[4],parpar[5]); - tempAlignObj.GetMatrix(*fSensVolModifMatrix); - fSensVolMatrix->Multiply(fSensVolModifMatrix); - parent = parent->GetParent(); - } - // global matrix after parents modifications - fSensVolMatrix->Multiply(fMatrix); - // - tempAlignObj.SetTranslation(fParVals[0],fParVals[1],fParVals[2]); - tempAlignObj.SetRotation(fParVals[3],fParVals[4],fParVals[5]); - tempAlignObj.GetMatrix(*fSensVolModifMatrix); // global delta matrix - fSensVolModifMatrix->MultiplyLeft( &fSensVolMatrix->Inverse() ); - fSensVolModifMatrix->Multiply( fSensVolMatrix ); - tempAlignObj.SetMatrix( *fSensVolModifMatrix ); // local delta matrix - tempAlignObj.GetPars(pars,pars+3); - // -} - - -//------------------------------------------------------------- -void AliITSAlignMille2Module::CalcDerivDPosDPar(Int_t sensVol,const Double_t* pl, Double_t *deriv) -{ - // calculate jacobian of the global position vs Parameters (dPos/dParam) - // for the point in the sensor sensVol - const double kDel = 0.01; - double pos0[3],pos1[3],pos2[3],pos3[3]; - double delta[kMaxParGeom]; - // - for (int ip=kMaxParGeom;ip--;) delta[ip] = 0; - // - for (int ip=kMaxParGeom;ip--;) { - // - delta[ip] -= kDel; - GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos0); - delta[ip] += kDel/2; - GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos1); - delta[ip] += kDel; - GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos2); - delta[ip] += kDel/2; - GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos3); - // - delta[ip] = 0; - double *curd = deriv + ip*3; - for (int i=3;i--;) curd[i] = (8.*(pos2[i]-pos1[i]) - (pos3[i]-pos0[i]))/6./kDel; - } - // -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::CalcDerivGloLoc(Int_t idx,Double_t *deriv) -{ - // calculate derivative of global params vs local param idx: deriv[j] = dParGlo[j]/dParLoc[idx] - Double_t lpar[kMaxParGeom]; - for (int i=kMaxParGeom;i--;) lpar[i] = 0.; - // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... - Double_t par1[kMaxParGeom]; // f(x-h) - Double_t par2[kMaxParGeom]; // f(x-h/2) - Double_t par3[kMaxParGeom]; // f(x+h/2) - Double_t par4[kMaxParGeom]; // f(x+h) - // - const Double_t dpar = 1e-3; - // - // first values - lpar[idx] -= dpar; - GetGlobalParams(lpar,lpar+3, par1,par1+3); - // - // second values - lpar[idx] += dpar/2; - GetGlobalParams(lpar,lpar+3, par2,par2+3); - // - // third values - lpar[idx] += dpar; - GetGlobalParams(lpar,lpar+3, par3,par3+3); - // - // fourth values - lpar[idx] += dpar/2; - GetGlobalParams(lpar,lpar+3, par4,par4+3); - // - Double_t h2 = 1./(2.*dpar); - for (int i=kMaxParGeom;i--;) { - Double_t d0 = par4[i]-par1[i]; - Double_t d2 = 2.*(par3[i]-par2[i]); - deriv[i] = h2*(4*d2 - d0)/3.; - if (TMath::Abs(deriv[i]) < 1.0e-9) deriv[i] = 0.0; - } - // -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::CalcDerivLocGlo(Double_t *deriv) -{ - // calculate derivative of local params vs global params: deriv[i][j] = dParLoc[i]/dParGlo[j] - Double_t gpar[kMaxParGeom]; - for (int i=kMaxParGeom;i--;) gpar[i] = 0.; - // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... - Double_t par1[kMaxParGeom]; // f(x-h) - Double_t par2[kMaxParGeom]; // f(x-h/2) - Double_t par3[kMaxParGeom]; // f(x+h/2) - Double_t par4[kMaxParGeom]; // f(x+h) - // - const Double_t dpar = 1e-3; - // - for (int ig=kMaxParGeom;ig--;) { - // first values - gpar[ig] -= dpar; - GetLocalParams(gpar,gpar+3, par1,par1+3); - // - // second values - gpar[ig] += dpar/2; - GetLocalParams(gpar,gpar+3, par2,par2+3); - // - // third values - gpar[ig] += dpar; - GetLocalParams(gpar,gpar+3, par3,par3+3); - // - // fourth values - gpar[ig] += dpar/2; - GetLocalParams(gpar,gpar+3, par4,par4+3); - // - Double_t h2 = 1./(2.*dpar); - for (int i=kMaxParGeom;i--;) { - Double_t d0 = par4[i]-par1[i]; - Double_t d2 = 2.*(par3[i]-par2[i]); - int idig = i*kMaxParGeom + ig; - deriv[idig] = h2*(4*d2 - d0)/3.; - if (TMath::Abs(deriv[idig]) < 1.0e-9) deriv[idig] = 0.0; - } - } - // -} - -//________________________________________________________________________________________________________ -void AliITSAlignMille2Module::CalcDerivGloLoc(Int_t sensVol,Int_t paridx,Double_t* derivative) -{ - /// calculate numerically the derivatives of global params vs local param paridx for sensor sensVol: dPglob/dPloc_paridx - // - Double_t lpar[kMaxParGeom]; - for (int i=kMaxParGeom;i--;) lpar[i] = 0.; - // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... - Double_t par1[kMaxParGeom]; // f(x-h) - Double_t par2[kMaxParGeom]; // f(x-h/2) - Double_t par3[kMaxParGeom]; // f(x+h/2) - Double_t par4[kMaxParGeom]; // f(x+h) - // - const Double_t dpar = 1e-3; - // - // first values - lpar[paridx] -= dpar; - GetSensVolGlobalParams(sensVol,lpar,lpar+3, par1,par1+3); - // - // second values - lpar[paridx] += dpar/2; - GetSensVolGlobalParams(sensVol,lpar,lpar+3, par2,par2+3); - // - // third values - lpar[paridx] += dpar; - GetSensVolGlobalParams(sensVol,lpar,lpar+3, par3,par3+3); - // - // fourth values - lpar[paridx] += dpar/2; - GetSensVolGlobalParams(sensVol,lpar,lpar+3, par4,par4+3); - // - Double_t h2 = 1./(2.*dpar); - for (int i=kMaxParGeom;i--;) { - Double_t d0 = par4[i]-par1[i]; - Double_t d2 = 2.*(par3[i]-par2[i]); - derivative[i] = h2*(4*d2 - d0)/3.; - if (TMath::Abs(derivative[i]) < 1.0e-9) derivative[i] = 0.0; - } - // -} - -//________________________________________________________________________________________________________ -void AliITSAlignMille2Module::CalcDerivCurLoc(Int_t sensVol,Int_t paridx,Double_t* derivative) -{ - /// calculate numerically the derivatives of sensor params in the current volume vs sensor local param paridx - // - Double_t lpar[kMaxParGeom]; - for (int i=kMaxParGeom;i--;) lpar[i] = 0.; - // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... - Double_t par1[kMaxParGeom]; // f(x-h) - Double_t par2[kMaxParGeom]; // f(x-h/2) - Double_t par3[kMaxParGeom]; // f(x+h/2) - Double_t par4[kMaxParGeom]; // f(x+h) - // - const Double_t dpar = 1e-3; - // - // first values - lpar[paridx] -= dpar; - GetSensVolLocalParams(sensVol,lpar,lpar+3, par1,par1+3); - // - // second values - lpar[paridx] += dpar/2; - GetSensVolLocalParams(sensVol,lpar,lpar+3, par2,par2+3); - // - // third values - lpar[paridx] += dpar; - GetSensVolLocalParams(sensVol,lpar,lpar+3, par3,par3+3); - // - // fourth values - lpar[paridx] += dpar/2; - GetSensVolLocalParams(sensVol,lpar,lpar+3, par4,par4+3); - // - Double_t h2 = 1./(2.*dpar); - for (int i=kMaxParGeom;i--;) { - Double_t d0 = par4[i]-par1[i]; - Double_t d2 = 2.*(par3[i]-par2[i]); - derivative[i] = h2*(4*d2 - d0)/3.; - if (TMath::Abs(derivative[i]) < 1.0e-9) derivative[i] = 0.0; - } - // -} - - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetGlobalParams(Double_t *t, Double_t *r) const -{ - // global parameters of the module - AliAlignObjParams tempAlignObj; - tempAlignObj.SetMatrix( *fMatrix ); - tempAlignObj.GetPars(t,r); -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetGlobalParams(const Double_t* loct, const Double_t* locr, Double_t *t, Double_t *r) -{ - // global parameters of the module after the modification by local loct,locr - AliAlignObjParams tempAlignObj; - tempAlignObj.SetTranslation(loct[0],loct[1],loct[2]); - tempAlignObj.SetRotation(locr[0],locr[1],locr[2]); - tempAlignObj.GetMatrix(*fSensVolModifMatrix); - *fSensVolMatrix = *fMatrix; - fSensVolMatrix->Multiply(fSensVolModifMatrix); - tempAlignObj.SetMatrix(*fSensVolMatrix); - tempAlignObj.GetPars(t,r); -} - -//------------------------------------------------------------- -void AliITSAlignMille2Module::GetLocalParams(const Double_t* glot, const Double_t* glor, Double_t *t, Double_t *r) -{ - // obtain local delta parameters from global delta params - AliAlignObjParams tempAlignObj; - tempAlignObj.SetTranslation(glot[0],glot[1],glot[2]); - tempAlignObj.SetRotation(glor[0],glor[1],glor[2]); - tempAlignObj.GetMatrix(*fSensVolMatrix); - fSensVolMatrix->Multiply( fMatrix ); - fSensVolMatrix->MultiplyLeft( &fMatrix->Inverse() ); - tempAlignObj.SetMatrix(*fSensVolMatrix); - tempAlignObj.GetPars(t,r); -} +/************************************************************************** + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id$ */ +//----------------------------------------------------------------------------- +/// \class AliITSAlignMille2Module +/// Alignment class for the ALICE ITS detector +/// +/// This class is used by AliITSAlignMille to build custom supermodules +/// made of ITS sensitive modules. These supermodules are then aligned +/// +/// Custom supermodules must have VolumeID > 14335 +/// +/// \author M. Lunardon +//----------------------------------------------------------------------------- + +#include +#include + +#include "AliITSAlignMille2Module.h" +#include "AliITSgeomTGeo.h" +#include "AliGeomManager.h" +#include "AliAlignObjParams.h" +#include "AliLog.h" +#include "AliITSAlignMille2.h" + +/// \cond CLASSIMP +ClassImp(AliITSAlignMille2Module) +/// \endcond + +#define CORHW_ + + +const Float_t AliITSAlignMille2Module::fgkDummyConstraint = 1e-2;//1.E3; + +//------------------------------------------------------------- +AliITSAlignMille2Module::AliITSAlignMille2Module() : + TNamed(), + fNSensVol(0), + fIndex(-1), + fDetType(-1), + fVolumeID(0), + fNParTot(0), + fNParFree(0), + fParOffs(0), + fNProcPoints(0), + fParVals(0), + fParErrs(0), + fParCstr(0), + fSensVolIndex(0), + fSensVolVolumeID(0), + fMatrix(NULL), + fSensVolMatrix(NULL), + fSensVolModifMatrix(NULL), + fParent(NULL), + fChildren(0) +{ + /// void constructor + fMatrix = new TGeoHMatrix; + fSensVolMatrix = new TGeoHMatrix; + fSensVolModifMatrix = new TGeoHMatrix; + fSensVolIndex.Set(1); + fSensVolVolumeID.Set(1); + fSigmaFactor[0]=fSigmaFactor[1]=fSigmaFactor[2]=1.0; +} + +//------------------------------------------------------------- +AliITSAlignMille2Module::AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname, + const TGeoHMatrix *m, Int_t nsv, const UShort_t *volidsv) : + TNamed(), + fNSensVol(0), + fIndex(-1), + fDetType(-1), + fVolumeID(0), + fNParTot(0), + fNParFree(0), + fParOffs(kMaxParGeom), + fNProcPoints(0), + fParVals(0), + fParErrs(0), + fParCstr(0), + fSensVolIndex(0), + fSensVolVolumeID(0), + fMatrix(NULL), + fSensVolMatrix(NULL), + fSensVolModifMatrix(NULL), + fParent(NULL), + fChildren(0) +{ + /// void constructor + fMatrix = new TGeoHMatrix; + fSensVolMatrix = new TGeoHMatrix; + fSensVolModifMatrix = new TGeoHMatrix; + fSigmaFactor[0]=fSigmaFactor[1]=fSigmaFactor[2]=1.0; + for (int i=kMaxParGeom;i--;) fParOffs[i] = -1; + if (Set(index,volid,symname,m,nsv,volidsv)) { + AliInfo("Error in AliITSAlignMille2Module::Set() - initializing void supermodule..."); + } + AssignDetType(); +} + +//------------------------------------------------------------- +AliITSAlignMille2Module::AliITSAlignMille2Module(UShort_t volid) : + TNamed(), + fNSensVol(0), + fIndex(-1), + fDetType(-1), + fVolumeID(0), + fNParTot(0), + fNParFree(0), + fParOffs(kMaxParGeom), + fNProcPoints(0), + fParVals(0), + fParErrs(0), + fParCstr(0), + fSensVolIndex(0), + fSensVolVolumeID(0), + fMatrix(NULL), + fSensVolMatrix(NULL), + fSensVolModifMatrix(NULL), + fParent(NULL), + fChildren(0) +{ + /// simple constructor building a supermodule from a single sensitive volume + fMatrix = new TGeoHMatrix; + fSensVolMatrix = new TGeoHMatrix; + fSensVolModifMatrix = new TGeoHMatrix; + // temporary align object, just use the rotation... + fSensVolIndex.Set(1); + fSensVolVolumeID.Set(1); + fSigmaFactor[0]=fSigmaFactor[1]=fSigmaFactor[2]=1.0; + for (int i=kMaxParGeom;i--;) fParOffs[i] = -1; + // + fIndex = GetIndexFromVolumeID(volid); + if (fIndex>=0 && gGeoManager) { // good sensitive module and geometry loaded + SetName(AliGeomManager::SymName(volid)); + fVolumeID = volid; + AddSensitiveVolume(volid); + SetSensorsProvided(kTRUE); + if (SensVolMatrix(volid, fMatrix)) + AliInfo("Matrix not defined"); + } + else { + AliInfo("Wrong VolumeID or Geometry not loaded - initializing void supermodule..."); + } + AssignDetType(); +} + + +//_____________________________________________________________________________ +AliITSAlignMille2Module::AliITSAlignMille2Module(const AliITSAlignMille2Module &m) : + TNamed(m), + fNSensVol(m.fNSensVol), + fIndex(m.fIndex), + fDetType(m.fDetType), + fVolumeID(m.fVolumeID), + fNParTot(m.fNParTot), + fNParFree(m.fNParFree), + fParOffs(m.fNParTot), + fNProcPoints(0), + fParVals(0), + fParErrs(0), + fParCstr(0), + fSensVolIndex(m.fSensVolIndex), + fSensVolVolumeID(m.fSensVolVolumeID), + fMatrix(new TGeoHMatrix(*m.GetMatrix())), + fSensVolMatrix(new TGeoHMatrix), + fSensVolModifMatrix(new TGeoHMatrix), + fParent(m.fParent), + fChildren(0) +{ + // Copy constructor + fSensVolIndex = m.fSensVolIndex; + fSensVolVolumeID = m.fSensVolVolumeID; + for (int i=m.fNParTot;i--;) fParOffs[i] = m.fParOffs[i]; + for (int i=3;i--;) fSigmaFactor[i] = m.fSigmaFactor[i]; + if (fNParTot) { + fParVals = new Float_t[fNParTot]; + fParErrs = new Float_t[fNParTot]; + fParCstr = new Float_t[fNParTot]; + for (int i=fNParTot;i--;) { + fParVals[i] = m.fParVals[i]; + fParErrs[i] = m.fParErrs[i]; + fParCstr[i] = m.fParCstr[i]; + } + } +} + +//_____________________________________________________________________________ +AliITSAlignMille2Module& AliITSAlignMille2Module::operator=(const AliITSAlignMille2Module &m) +{ + // operator = + // + if(this==&m) return *this; + this->TNamed::operator=(m); + // + fNSensVol=m.fNSensVol; + fIndex=m.fIndex; + fDetType = m.fDetType; + fVolumeID=m.fVolumeID; + fNParTot = m.fNParTot; + fNParFree = m.fNParFree; + fNProcPoints = m.fNProcPoints; + delete[] fParVals; fParVals = 0; + delete[] fParErrs; fParErrs = 0; + delete[] fParCstr; fParCstr = 0; + // + if (fNParTot) { + fParVals = new Float_t[fNParTot]; + fParErrs = new Float_t[fNParTot]; + fParCstr = new Float_t[fNParTot]; + for (int i=m.GetNParTot();i--;) { + fParVals[i] = m.fParVals[i]; + fParErrs[i] = m.fParErrs[i]; + fParCstr[i] = m.fParCstr[i]; + } + } + // + fParOffs.Set(fNParTot); + for (int i=0;i= 2198"); + return -1; + } + if (volid<14336) { + AliInfo("VolumeID must be >= 14336"); + return -2; + } + + if (!symname) return -3; + for (Int_t i=0; i<2198; i++) { + if (!strcmp(symname,AliITSgeomTGeo::GetSymName(i))) { + AliInfo("Symname already used by a Sensitive Volume"); + return -3; + } + } + + if (!m) return -4; + + // can initialize needed stuffs + fIndex = index; + fVolumeID = volid; + SetName(symname); + // + (*fMatrix) = (*m); + // + fSensVolIndex.Set(nsv); + fSensVolVolumeID.Set(nsv); + // add sensitive volumes + for (Int_t i=0; i0) fParCstr[dof] = fgkDummyConstraint+1.; // the parameter is free and unconstrained + else fParCstr[dof] = -cstr; // the parameter is free but constrained +} + +//------------------------------------------------------------- +Bool_t AliITSAlignMille2Module::IsSensor(UShort_t voluid) +{ + // Does this volid correspond to sensor ? + AliGeomManager::ELayerID layId = AliGeomManager::VolUIDToLayerSafe(voluid); + if (layId>0 && layId<7) { + Int_t mId = Int_t(voluid & 0x7ff); + if( mId>=0 && mId6) return -1; + Int_t idx=Int_t(voluid)-2048*lay; + if (idx>=AliGeomManager::LayerSize(lay)) return -1; + for (Int_t ilay=1; ilay=parent->GetNSensitiveVolumes()) return kFALSE; + return parent->IsIn( fSensVolVolumeID[0] ); +} + +//------------------------------------------------------------- +TGeoHMatrix *AliITSAlignMille2Module::GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t *delta,Bool_t local) +{ + // modify the original TGeoHMatrix of the sensitive module 'voluid' according + // with a delta transform. applied to the supermodule matrix + // return NULL if error + + if (!IsIn(voluid)) return NULL; + if (!gGeoManager) return NULL; + + // prepare the TGeoHMatrix + Double_t tr[3],ang[3]; + tr[0]=delta[0]; // in centimeter + tr[1]=delta[1]; + tr[2]=delta[2]; + ang[0]=delta[3]; // psi (X) in deg + ang[1]=delta[4]; // theta (Y) + ang[2]=delta[5]; // phi (Z) + // + static AliAlignObjParams tempAlignObj; + tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); + tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); + AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); + TGeoHMatrix hm; + tempAlignObj.GetMatrix(hm); + //printf("\n0: delta matrix\n");hm.Print(); + + // 1) start setting fSensVolModif = fSensVol + if (SensVolMatrix(voluid, fSensVolModifMatrix)) return NULL; + // + if (local) { + // 2) set fSensVolModif = SensVolRel + fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); + // 3) multiply left by delta + fSensVolModifMatrix->MultiplyLeft( &hm ); + // 4) multiply left by fMatrix + fSensVolModifMatrix->MultiplyLeft( fMatrix ); + } + else fSensVolModifMatrix->MultiplyLeft( &hm ); + // + return fSensVolModifMatrix; +} + +//------------------------------------------------------------- +AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t *deltalocal) +{ + // calculate misalignment of sens.vol. 'voluid' according with a displacement 'deltalocal' + // of the mother volume. The misalignment is returned as AliAlignObjParams object + + if (!IsIn(voluid)) return NULL; + if (!gGeoManager) return NULL; + + // prepare the TGeoHMatrix + Double_t tr[3],ang[3]; + tr[0]=deltalocal[0]; // in centimeter + tr[1]=deltalocal[1]; + tr[2]=deltalocal[2]; + ang[0]=deltalocal[3]; // psi (X) in deg + ang[1]=deltalocal[4]; // theta (Y) + ang[2]=deltalocal[5]; // phi (Z) + // + static AliAlignObjParams tempAlignObj; + tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); + tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); + AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); + // + return GetSensitiveVolumeMisalignment(voluid,&tempAlignObj); +} + +//------------------------------------------------------------- +AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a) +{ + // return the misalignment of the sens. vol. 'voluid' corresponding with + // a misalignment 'a' in the mother volume + // return NULL if error + + // Gsv = Gg * Gg-1 * Gsv -> Lsv,g = Gg-1 * Gsv + // G'sv = Gg * Dg * Lsv,g === Gsv * Dsv + // Gg * Dg * Gg-1 * Gsv = Gsv * Gsv-1 * Gg * Dg * Gg-1 * Gsv + // + // => Dsv = (Gsv-1 * Gg * Dg * Gg-1 * Gsv) + // + + if (!IsIn(voluid)) return NULL; + if (!gGeoManager) return NULL; + + //a->Print(""); + + // prepare the Delta matrix Dg + TGeoHMatrix dg; + a->GetMatrix(dg); + //dg.Print(); + + // 1) start setting fSensVolModif = Gsv + if (SensVolMatrix(voluid, fSensVolModifMatrix)) return NULL; + //printf("\n1: modif=orig del sensvol\n");fSensVolModifMatrix->Print(); + + // 2) set fSensVolModif = Gg-1 * Gsv + fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); + //printf("\n2: modif=relative del sensvol\n");fSensVolModifMatrix->Print(); + + // 3) set fSensVolModif = Dg * Gg-1 * Gsv + fSensVolModifMatrix->MultiplyLeft( &dg ); + //printf("\n3: modif= delta*relative\n");fSensVolModifMatrix->Print(); + + // 4) set fSensVolModif = Gg * Dg * Gg-1 * Gsv + fSensVolModifMatrix->MultiplyLeft( fMatrix ); + //printf("\n4: modif=quasi,manca il Gsv-1...\n");fSensVolModifMatrix->Print(); + + // 5) set fSensVolModif = Gsv-1 * Gg * Dg * Gg-1 * Gsv + if (SensVolMatrix(voluid, &dg)) return NULL; + fSensVolModifMatrix->MultiplyLeft( &dg.Inverse() ); + //printf("\n5: modif=finale\n");fSensVolModifMatrix->Print(); + // + // >> RS + // 6) mo' fSensVolModif dovrebbe essere la Dsv(loc) t.c. G'sv = Gsv*Dsv(loc) + // per trasformarla in Dsv(loc rispetto al Gsv0, non modificato) dovrebbe essere: + // Dsv(loc) -> Dpre * Dsv(loc) * Dpre-1 + //TGeoHMatrix dpre; // dpre = Gsv0-1*Gsv + //if (SensVolOrigGlobalMatrix(voluid, &dg)) return NULL; + //if (SensVolMatrix(voluid, &dpre)) return NULL; + //dpre.MultiplyLeft( &dg.Inverse() ); + //fSensVolModifMatrix->Multiply( &dpre.Inverse() ); + //fSensVolModifMatrix->MultiplyLeft( &dpre ); + // direi che NON FUNZIONA!!!! + + // << RS + + // reset align object (may not be needed...) + static AliAlignObjParams tempAlignObj; + tempAlignObj.SetVolUID(0); + tempAlignObj.SetSymName(""); + tempAlignObj.SetTranslation(0,0,0); + tempAlignObj.SetRotation(0,0,0); + // + // >> RS +#ifdef CORHW_ + // correction for SPD y-shift + if (voluid>=2048 && voluid<4256) { + TGeoHMatrix deltay; + double dy[3]={0.,0.0081,0.}; + deltay.SetTranslation(dy); + fSensVolModifMatrix->MultiplyLeft( &deltay ); + fSensVolModifMatrix->Multiply( &deltay.Inverse() ); + } +#endif + // << RS + if (!tempAlignObj.SetMatrix(*fSensVolModifMatrix)) return NULL; + tempAlignObj.SetVolUID(voluid); + tempAlignObj.SetSymName(AliGeomManager::SymName(voluid)); + // + return &tempAlignObj; +} + +// >> RS +//------------------------------------------------------------- +AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t *deltalocal) +{ + // calculate misalignment of sens.vol. 'voluid' according with a displacement 'deltalocal' + // of the mother volume. The misalignment is returned as AliAlignObjParams object including + // the (evenctual) prealignment => no merging needed + + if (!IsIn(voluid)) return NULL; + if (!gGeoManager) return NULL; + + // prepare the TGeoHMatrix + Double_t tr[3],ang[3]; + tr[0]=deltalocal[0]; // in centimeter + tr[1]=deltalocal[1]; + tr[2]=deltalocal[2]; + ang[0]=deltalocal[3]; // psi (X) in deg + ang[1]=deltalocal[4]; // theta (Y) + ang[2]=deltalocal[5]; // phi (Z) + + // reset align object (may not be needed...) + static AliAlignObjParams tempAlignObj; + tempAlignObj.SetVolUID(0); + tempAlignObj.SetSymName(""); + tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); + tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); + AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); + + // Gsv = Gg * Gg-1 * Gsv -> Lsv,g = Gg-1 * Gsv + // G'sv = Gg * Dg * Lsv,g === DGsv * Gsv + // + // => Dsv = (G0sv-1 * Gg * Dg * Gg-1 * GMsv) // + // + + // prepare the Delta matrix Dg + TGeoHMatrix dg; + tempAlignObj.GetMatrix(dg); + //dg.Print(); + + // 1) start setting fSensVolModif = Gsv + if (SensVolMatrix(voluid, fSensVolModifMatrix)) return NULL; + //printf("\n1: modif=orig del sensvol\n");fSensVolModifMatrix->Print(); + + // 2) set fSensVolModif = Gg-1 * Gsv + fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); + //printf("\n2: modif=relative del sensvol\n");fSensVolModifMatrix->Print(); + + // 3) set fSensVolModif = Dg * Gg-1 * Gsv + fSensVolModifMatrix->MultiplyLeft( &dg ); + //printf("\n3: modif= delta*relative\n");fSensVolModifMatrix->Print(); + + // 4) set fSensVolModif = Gg * Dg * Gg-1 * Gsv + fSensVolModifMatrix->MultiplyLeft( fMatrix ); + //printf("\n4: modif=quasi,manca il Gsv-1...\n");fSensVolModifMatrix->Print(); + + // 5) set fSensVolModif = G0sv-1 * Gg * Dg * Gg-1 * Gsv + // qui usa l'orig anziche' la prealigned... + if (SensVolOrigGlobalMatrix(voluid, &dg)) return NULL; + fSensVolModifMatrix->MultiplyLeft( &dg.Inverse() ); + //printf("\n5: modif=finale\n");fSensVolModifMatrix->Print(); + + // reset align object (may not be needed...) + tempAlignObj.SetVolUID(0); + tempAlignObj.SetSymName(""); + tempAlignObj.SetTranslation(0,0,0); + tempAlignObj.SetRotation(0,0,0); + +#ifdef CORHW_ + // correction for SPD y-shift + if (voluid>=2048 && voluid<4256) { + TGeoHMatrix deltay; + double dy[3]={0.,0.0081,0.}; + deltay.SetTranslation(dy); + fSensVolModifMatrix->MultiplyLeft( &deltay ); + fSensVolModifMatrix->Multiply( &deltay.Inverse() ); + } +#endif + if (!tempAlignObj.SetMatrix(*fSensVolModifMatrix)) return NULL; + tempAlignObj.SetVolUID(voluid); + tempAlignObj.SetSymName(AliGeomManager::SymName(voluid)); + + + //tempAlignObj.Print(""); + + return &tempAlignObj; +} +//------------------------------------------------------------- + +//------------------------------------------------------------- +AliAlignObjParams *AliITSAlignMille2Module::GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t *deltalocal) +{ + // calculate misalignment of sens.vol. 'voluid' according with a displacement 'deltalocal' + // of the mother volume. The misalignment is returned as AliAlignObjParams object + + if (!IsIn(voluid)) return NULL; + if (!gGeoManager) return NULL; + + // prepare the TGeoHMatrix + Double_t tr[3],ang[3]; + tr[0]=deltalocal[0]; // in centimeter + tr[1]=deltalocal[1]; + tr[2]=deltalocal[2]; + ang[0]=deltalocal[3]; // psi (X) in deg + ang[1]=deltalocal[4]; // theta (Y) + ang[2]=deltalocal[5]; // phi (Z) + + // reset align object (may not be needed...) + static AliAlignObjParams tempAlignObj; + tempAlignObj.SetTranslation(0,0,0); + tempAlignObj.SetRotation(0,0,0); + + tempAlignObj.SetRotation(ang[0],ang[1],ang[2]); + tempAlignObj.SetTranslation(tr[0],tr[1],tr[2]); + AliDebug(3,Form("Delta angles: psi=%f theta=%f phi=%f",ang[0],ang[1],ang[2])); + + // Gsv = Gg * Gg-1 * Gsv -> Lsv,g = Gg-1 * Gsv + // G'sv = Gg * Dg * Lsv,g === DGsv * Gsv + // + // => DGsv = (Gg * Dg * Gg-1) + // + + // prepare the Delta matrix Dg + TGeoHMatrix dg; + tempAlignObj.GetMatrix(dg); + //dg.Print(); + + dg.MultiplyLeft( fMatrix ); + dg.Multiply( &fMatrix->Inverse() ); + + // reset align object (may not be needed...) + tempAlignObj.SetTranslation(0,0,0); + tempAlignObj.SetRotation(0,0,0); + + tempAlignObj.SetVolUID(voluid); + tempAlignObj.SetSymName(AliGeomManager::SymName(voluid)); + + if (!tempAlignObj.SetMatrix(dg)) return NULL; + + //tempAlignObj.Print(""); + + return &tempAlignObj; +} +// << RS + +//------------------------------------------------------------- +TGeoHMatrix *AliITSAlignMille2Module::GetSensitiveVolumeMatrix(UShort_t voluid) +{ + // return TGeoHMatrix of the sens.vol. 'voluid' in the current geometry + if (SensVolMatrix(voluid,fSensVolMatrix)) return NULL; + return fSensVolMatrix; +} + +//------------------------------------------------------------- +TGeoHMatrix *AliITSAlignMille2Module::GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid) +{ + // return original ideal position (from AliGeomManager::GetOrigGlobalMatrix()) + if (SensVolOrigGlobalMatrix(voluid,fSensVolMatrix)) return NULL; + return fSensVolMatrix; +} +//------------------------------------------------------------- +Int_t AliITSAlignMille2Module::SensVolMatrix(UShort_t volid, TGeoHMatrix *m) +{ + // set matrix for sensitive modules (SPD corrected) + // return 0 if success + Double_t rot[9]; + Int_t idx=GetIndexFromVolumeID(volid); + if (idx<0) return -1; + if (!AliITSgeomTGeo::GetRotation(idx,rot)) return -2; + m->SetRotation(rot); + Double_t oLoc[3]={0,0,0}; + Double_t oGlo[3]={0,0,0}; + if (!AliITSgeomTGeo::LocalToGlobal(idx,oLoc,oGlo)) return -3; + m->SetTranslation(oGlo); + return 0; +} + +//------------------------------------------------------------- +Int_t AliITSAlignMille2Module::SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m) +{ + // set original global matrix for sensitive modules (SPD corrected) + // return 0 if success + Int_t idx=GetIndexFromVolumeID(volid); + if (idx<0) return -1; + TGeoHMatrix mo; + if (!AliGeomManager::GetOrigGlobalMatrix(AliGeomManager::SymName(volid),mo)) return -1; + (*m)=mo; + // +#ifdef CORHW_ + // SPD y-shift by 81 mu + if (volid<5000) { + Double_t oLoc[3]={0.0,0.0081,0.0}; + Double_t oGlo[3]={0,0,0}; + m->LocalToMaster(oLoc,oGlo); + m->SetTranslation(oGlo); + } +#endif + return 0; +} + +//------------------------------------------------------------- +UShort_t AliITSAlignMille2Module::GetVolumeIDFromSymname(const Char_t *symname) { + /// volume ID from symname + if (!symname) return 0; + + for (UShort_t voluid=2000; voluid<13300; voluid++) { + Int_t modId; + AliGeomManager::ELayerID layerId = AliGeomManager::VolUIDToLayer(voluid,modId); + if (layerId>0 && layerId<7 && modId>=0 && modId2197) return 0; + return GetVolumeIDFromSymname(AliITSgeomTGeo::GetSymName(index)); +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::Print(Option_t*) const +{ + // print data + // + const char* typeName[] = {"SPD","SDD","SSD"}; + printf("*** ITS SuperModule for AliITSAlignMille ***\n"); + printf("symname : %s (type: %s)\n",GetName(),fDetType<0 ? "N/A":typeName[fDetType]); + printf("parent : %s | %d children\n",fParent ? fParent->GetName() : "N/A",GetNChildren()); + printf("volumeID : %4d | index : %4d | Geom.Params are %s\n",fVolumeID,fIndex, + GeomParamsGlobal() ? "Global":"Local"); + printf("Factors : X=%.2f Y=%.2f Z=%.2f\n" + "DOF: %cTx:%5d| %cTy:%5d| %cTz:%5d| %cPsi:%5d| %cTheta:%5d| %cPhi:%5d|", + fSigmaFactor[0],fSigmaFactor[1],fSigmaFactor[2], + IsFreeDOF(kDOFTX) ? '+':'-',GetParOffset(kDOFTX),IsFreeDOF(kDOFTY) ? '+':'-',GetParOffset(kDOFTY), + IsFreeDOF(kDOFTZ) ? '+':'-',GetParOffset(kDOFTZ),IsFreeDOF(kDOFPS) ? '+':'-',GetParOffset(kDOFPS), + IsFreeDOF(kDOFTH) ? '+':'-',GetParOffset(kDOFTH),IsFreeDOF(kDOFPH) ? '+':'-',GetParOffset(kDOFPH)); + if (IsSDD()) { + printf("%cT0:%5d| %cDVl:%5d| %cDVr:%5d|",IsFreeDOF(kDOFT0)?'+':'-',GetParOffset(kDOFT0), + IsFreeDOF(kDOFDVL)?'+':'-',GetParOffset(kDOFDVL),IsFreeDOF(kDOFDVR)?'+':'-',GetParOffset(kDOFDVR)); + if (IsVDriftLRSame()) printf("(dVL=dVR)"); + } + printf("\n"); + fMatrix->Print(); + printf("%4d Sensitive volumes | %6d Processed Points\n",fNSensVol,fNProcPoints); + for (Int_t i=0; iGetAlignableEntry(GetName())!=0; +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetLocalMatrix(TGeoHMatrix &mat) const +{ + // return the local matrix for transformation to its parent + mat = *fMatrix; + if (fParent) mat.MultiplyLeft( &fParent->GetMatrix()->Inverse() ); +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::AssignDetType() +{ + // assign the detector type + TString tp = GetName(); + if (tp.Contains("SPD",TString::kIgnoreCase)) fDetType = kSPD; + else if (tp.Contains("SDD",TString::kIgnoreCase)) fDetType = kSDD; + else if (tp.Contains("SSD",TString::kIgnoreCase)) fDetType = kSSD; + else fDetType = -1; + fNParTot = IsSDD() ? kMaxParTot:kMaxParGeom; + fNParFree = 0; + fParVals = new Float_t[fNParTot]; + fParErrs = new Float_t[fNParTot]; + fParCstr = new Float_t[fNParTot]; + if (fParOffs.GetSize()MultiplyLeft( &fMatrix->Inverse() ); + AliAlignObjParams tempAlignObj; + tempAlignObj.SetMatrix(*fSensVolMatrix); + tempAlignObj.GetPars(t,r); +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetSensVolGlobalParams(UShort_t volid,const Double_t* loct, const Double_t* locr,Double_t *t, Double_t *r) +{ + // return global parameters of the sensor volid modified by the localDelta params + for (int i=3;i--;) t[i] = r[i] = 0.; + if (SensVolMatrix(volid,fSensVolMatrix)) return; + AliAlignObjParams tempAlignObj; + tempAlignObj.SetTranslation(loct[0],loct[1],loct[2]); + tempAlignObj.SetRotation(locr[0],locr[1],locr[2]); + // + tempAlignObj.GetMatrix(*fSensVolModifMatrix); // obtain local delta + fSensVolModifMatrix->MultiplyLeft( fSensVolMatrix ); // obtain global delta + tempAlignObj.SetMatrix(*fSensVolModifMatrix); + tempAlignObj.GetPars(t,r); // obtain global params +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetSensVolLocalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r) +{ + // return parameters of the sensor volid (modified by the localDelta params) in the current volume + for (int i=3;i--;) t[i] = r[i] = 0.; + if (SensVolMatrix(volid,fSensVolMatrix)) return; + AliAlignObjParams tempAlignObj; + tempAlignObj.SetTranslation(loct[0],loct[1],loct[2]); + tempAlignObj.SetRotation(locr[0],locr[1],locr[2]); + // + tempAlignObj.GetMatrix(*fSensVolModifMatrix); // obtain local delta + fSensVolModifMatrix->MultiplyLeft( fSensVolMatrix ); // obtain global delta + fSensVolModifMatrix->MultiplyLeft( &fMatrix->Inverse() ); // obtain delta in current volume + tempAlignObj.SetMatrix(*fSensVolModifMatrix); + tempAlignObj.GetPars(t,r); // obtain params +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::SetParVals(Double_t *vl,Int_t npar) +{ + // set parameters + for (int i=TMath::Min(npar,(Int_t)fNParTot);i--;) fParVals[i] = vl[i]; +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetGeomParamsGlo(Double_t *pars) +{ + // recompute parameters from local to global frame + // + // is there anything to do? + if (GeomParamsGlobal()) {for (int i=kMaxParGeom;i--;) pars[i] = fParVals[i]; return;} + // + // IMPORTANT: It is assumed that the parents params are defined in a same way (local or global) + // as for the current module. Since in the mp2 the modules are stored from parents to children, + // it is safe to call this method in loop staring from the lowest level child, i.e. from the end + // of the modules array. + // + // DeltaGlobal = (ModifParents)*DeltaLocal*(ModifParents)^-1 + // + *fSensVolMatrix = *fMatrix; // current global matrix + AliAlignObjParams tempAlignObj; + AliITSAlignMille2Module* parent = GetParent(); + while (parent) { + if (parent->GeomParamsGlobal()) { + AliError("Cannot convert params to Global when the parents are already Global\n"); + for (int i=kMaxParGeom;i--;) pars[i] = 0; + return; + } + fSensVolMatrix->MultiplyLeft( &parent->GetMatrix()->Inverse() ); // Local Matrix + Float_t *parpar = parent->GetParVals(); + tempAlignObj.SetTranslation(parpar[0],parpar[1],parpar[2]); + tempAlignObj.SetRotation(parpar[3],parpar[4],parpar[5]); + tempAlignObj.GetMatrix(*fSensVolModifMatrix); + fSensVolMatrix->MultiplyLeft(fSensVolModifMatrix); + fSensVolMatrix->MultiplyLeft(parent->GetMatrix()); // global matrix after parents modifications + parent = parent->GetParent(); + } + // + tempAlignObj.SetTranslation(fParVals[0],fParVals[1],fParVals[2]); + tempAlignObj.SetRotation(fParVals[3],fParVals[4],fParVals[5]); + tempAlignObj.GetMatrix(*fSensVolModifMatrix); // local delta matrix + fSensVolModifMatrix->Multiply( &fSensVolMatrix->Inverse() ); + fSensVolModifMatrix->MultiplyLeft( fSensVolMatrix ); + tempAlignObj.SetMatrix( *fSensVolModifMatrix ); // global delta matrix + tempAlignObj.GetPars(pars,pars+3); + // +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetGeomParamsLoc(Double_t *pars) +{ + // recompute parameters from global to local frame + // + // is there anything to do? + if (!GeomParamsGlobal()) {for (int i=kMaxParGeom;i--;) pars[i] = fParVals[i]; return;} + // + // IMPORTANT: It is assumed that the parents params are defined in a same way (local or global) + // as for the current module. Since in the mp2 the modules are stored from parents to children, + // it is safe to call this method in loop staring from the lowest level child, i.e. from the end + // of the modules array. + // + // DeltaLocal = (DeltaParents*GlobalMat)^-1*DeltaGlobal*(DeltaParents*GlobalMat) + // + AliITSAlignMille2Module* parent = GetParent(); + AliAlignObjParams tempAlignObj; + tempAlignObj.SetTranslation(0.,0.,0.); + tempAlignObj.SetRotation(0.,0.,0.); + tempAlignObj.GetMatrix(*fSensVolMatrix); // get no-shift matrix + // + while (parent) { // accumulate the product of parents global modifications + if (!parent->GeomParamsGlobal()) { + AliError("Cannot convert params to Local when the parents are already Local\n"); + for (int i=kMaxParGeom;i--;) pars[i] = 0; + return; + } + Float_t *parpar = parent->GetParVals(); + tempAlignObj.SetTranslation(parpar[0],parpar[1],parpar[2]); + tempAlignObj.SetRotation(parpar[3],parpar[4],parpar[5]); + tempAlignObj.GetMatrix(*fSensVolModifMatrix); + fSensVolMatrix->Multiply(fSensVolModifMatrix); + parent = parent->GetParent(); + } + // global matrix after parents modifications + fSensVolMatrix->Multiply(fMatrix); + // + tempAlignObj.SetTranslation(fParVals[0],fParVals[1],fParVals[2]); + tempAlignObj.SetRotation(fParVals[3],fParVals[4],fParVals[5]); + tempAlignObj.GetMatrix(*fSensVolModifMatrix); // global delta matrix + fSensVolModifMatrix->MultiplyLeft( &fSensVolMatrix->Inverse() ); + fSensVolModifMatrix->Multiply( fSensVolMatrix ); + tempAlignObj.SetMatrix( *fSensVolModifMatrix ); // local delta matrix + tempAlignObj.GetPars(pars,pars+3); + // +} + + +//------------------------------------------------------------- +void AliITSAlignMille2Module::CalcDerivDPosDPar(Int_t sensVol,const Double_t* pl, Double_t *deriv) +{ + // calculate jacobian of the global position vs Parameters (dPos/dParam) + // for the point in the sensor sensVol + const double kDel = 0.01; + double pos0[3],pos1[3],pos2[3],pos3[3]; + double delta[kMaxParGeom]; + // + for (int ip=kMaxParGeom;ip--;) delta[ip] = 0; + // + for (int ip=kMaxParGeom;ip--;) { + // + delta[ip] -= kDel; + GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos0); + delta[ip] += kDel/2; + GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos1); + delta[ip] += kDel; + GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos2); + delta[ip] += kDel/2; + GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos3); + // + delta[ip] = 0; + double *curd = deriv + ip*3; + for (int i=3;i--;) curd[i] = (8.*(pos2[i]-pos1[i]) - (pos3[i]-pos0[i]))/6./kDel; + } + // +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::CalcDerivGloLoc(Int_t idx,Double_t *deriv) +{ + // calculate derivative of global params vs local param idx: deriv[j] = dParGlo[j]/dParLoc[idx] + Double_t lpar[kMaxParGeom]; + for (int i=kMaxParGeom;i--;) lpar[i] = 0.; + // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... + Double_t par1[kMaxParGeom]; // f(x-h) + Double_t par2[kMaxParGeom]; // f(x-h/2) + Double_t par3[kMaxParGeom]; // f(x+h/2) + Double_t par4[kMaxParGeom]; // f(x+h) + // + const Double_t dpar = 1e-3; + // + // first values + lpar[idx] -= dpar; + GetGlobalParams(lpar,lpar+3, par1,par1+3); + // + // second values + lpar[idx] += dpar/2; + GetGlobalParams(lpar,lpar+3, par2,par2+3); + // + // third values + lpar[idx] += dpar; + GetGlobalParams(lpar,lpar+3, par3,par3+3); + // + // fourth values + lpar[idx] += dpar/2; + GetGlobalParams(lpar,lpar+3, par4,par4+3); + // + Double_t h2 = 1./(2.*dpar); + for (int i=kMaxParGeom;i--;) { + Double_t d0 = par4[i]-par1[i]; + Double_t d2 = 2.*(par3[i]-par2[i]); + deriv[i] = h2*(4*d2 - d0)/3.; + if (TMath::Abs(deriv[i]) < 1.0e-9) deriv[i] = 0.0; + } + // +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::CalcDerivLocGlo(Double_t *deriv) +{ + // calculate derivative of local params vs global params: deriv[i][j] = dParLoc[i]/dParGlo[j] + Double_t gpar[kMaxParGeom]; + for (int i=kMaxParGeom;i--;) gpar[i] = 0.; + // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... + Double_t par1[kMaxParGeom]; // f(x-h) + Double_t par2[kMaxParGeom]; // f(x-h/2) + Double_t par3[kMaxParGeom]; // f(x+h/2) + Double_t par4[kMaxParGeom]; // f(x+h) + // + const Double_t dpar = 1e-3; + // + for (int ig=kMaxParGeom;ig--;) { + // first values + gpar[ig] -= dpar; + GetLocalParams(gpar,gpar+3, par1,par1+3); + // + // second values + gpar[ig] += dpar/2; + GetLocalParams(gpar,gpar+3, par2,par2+3); + // + // third values + gpar[ig] += dpar; + GetLocalParams(gpar,gpar+3, par3,par3+3); + // + // fourth values + gpar[ig] += dpar/2; + GetLocalParams(gpar,gpar+3, par4,par4+3); + // + Double_t h2 = 1./(2.*dpar); + for (int i=kMaxParGeom;i--;) { + Double_t d0 = par4[i]-par1[i]; + Double_t d2 = 2.*(par3[i]-par2[i]); + int idig = i*kMaxParGeom + ig; + deriv[idig] = h2*(4*d2 - d0)/3.; + if (TMath::Abs(deriv[idig]) < 1.0e-9) deriv[idig] = 0.0; + } + } + // +} + +//________________________________________________________________________________________________________ +void AliITSAlignMille2Module::CalcDerivGloLoc(Int_t sensVol,Int_t paridx,Double_t* derivative) +{ + /// calculate numerically the derivatives of global params vs local param paridx for sensor sensVol: dPglob/dPloc_paridx + // + Double_t lpar[kMaxParGeom]; + for (int i=kMaxParGeom;i--;) lpar[i] = 0.; + // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... + Double_t par1[kMaxParGeom]; // f(x-h) + Double_t par2[kMaxParGeom]; // f(x-h/2) + Double_t par3[kMaxParGeom]; // f(x+h/2) + Double_t par4[kMaxParGeom]; // f(x+h) + // + const Double_t dpar = 1e-3; + // + // first values + lpar[paridx] -= dpar; + GetSensVolGlobalParams(sensVol,lpar,lpar+3, par1,par1+3); + // + // second values + lpar[paridx] += dpar/2; + GetSensVolGlobalParams(sensVol,lpar,lpar+3, par2,par2+3); + // + // third values + lpar[paridx] += dpar; + GetSensVolGlobalParams(sensVol,lpar,lpar+3, par3,par3+3); + // + // fourth values + lpar[paridx] += dpar/2; + GetSensVolGlobalParams(sensVol,lpar,lpar+3, par4,par4+3); + // + Double_t h2 = 1./(2.*dpar); + for (int i=kMaxParGeom;i--;) { + Double_t d0 = par4[i]-par1[i]; + Double_t d2 = 2.*(par3[i]-par2[i]); + derivative[i] = h2*(4*d2 - d0)/3.; + if (TMath::Abs(derivative[i]) < 1.0e-9) derivative[i] = 0.0; + } + // +} + +//________________________________________________________________________________________________________ +void AliITSAlignMille2Module::CalcDerivCurLoc(Int_t sensVol,Int_t paridx,Double_t* derivative) +{ + /// calculate numerically the derivatives of sensor params in the current volume vs sensor local param paridx + // + Double_t lpar[kMaxParGeom]; + for (int i=kMaxParGeom;i--;) lpar[i] = 0.; + // using f(x+h),f(x-h),f(x+h/2),f(x-h2)... + Double_t par1[kMaxParGeom]; // f(x-h) + Double_t par2[kMaxParGeom]; // f(x-h/2) + Double_t par3[kMaxParGeom]; // f(x+h/2) + Double_t par4[kMaxParGeom]; // f(x+h) + // + const Double_t dpar = 1e-3; + // + // first values + lpar[paridx] -= dpar; + GetSensVolLocalParams(sensVol,lpar,lpar+3, par1,par1+3); + // + // second values + lpar[paridx] += dpar/2; + GetSensVolLocalParams(sensVol,lpar,lpar+3, par2,par2+3); + // + // third values + lpar[paridx] += dpar; + GetSensVolLocalParams(sensVol,lpar,lpar+3, par3,par3+3); + // + // fourth values + lpar[paridx] += dpar/2; + GetSensVolLocalParams(sensVol,lpar,lpar+3, par4,par4+3); + // + Double_t h2 = 1./(2.*dpar); + for (int i=kMaxParGeom;i--;) { + Double_t d0 = par4[i]-par1[i]; + Double_t d2 = 2.*(par3[i]-par2[i]); + derivative[i] = h2*(4*d2 - d0)/3.; + if (TMath::Abs(derivative[i]) < 1.0e-9) derivative[i] = 0.0; + } + // +} + + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetGlobalParams(Double_t *t, Double_t *r) const +{ + // global parameters of the module + AliAlignObjParams tempAlignObj; + tempAlignObj.SetMatrix( *fMatrix ); + tempAlignObj.GetPars(t,r); +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetGlobalParams(const Double_t* loct, const Double_t* locr, Double_t *t, Double_t *r) +{ + // global parameters of the module after the modification by local loct,locr + AliAlignObjParams tempAlignObj; + tempAlignObj.SetTranslation(loct[0],loct[1],loct[2]); + tempAlignObj.SetRotation(locr[0],locr[1],locr[2]); + tempAlignObj.GetMatrix(*fSensVolModifMatrix); + *fSensVolMatrix = *fMatrix; + fSensVolMatrix->Multiply(fSensVolModifMatrix); + tempAlignObj.SetMatrix(*fSensVolMatrix); + tempAlignObj.GetPars(t,r); +} + +//------------------------------------------------------------- +void AliITSAlignMille2Module::GetLocalParams(const Double_t* glot, const Double_t* glor, Double_t *t, Double_t *r) +{ + // obtain local delta parameters from global delta params + AliAlignObjParams tempAlignObj; + tempAlignObj.SetTranslation(glot[0],glot[1],glot[2]); + tempAlignObj.SetRotation(glor[0],glor[1],glor[2]); + tempAlignObj.GetMatrix(*fSensVolMatrix); + fSensVolMatrix->Multiply( fMatrix ); + fSensVolMatrix->MultiplyLeft( &fMatrix->Inverse() ); + tempAlignObj.SetMatrix(*fSensVolMatrix); + tempAlignObj.GetPars(t,r); +} diff --git a/ITS/AliITSAlignMille2Module.h b/ITS/AliITSAlignMille2Module.h index 2de4f068422..72250c5aa1c 100644 --- a/ITS/AliITSAlignMille2Module.h +++ b/ITS/AliITSAlignMille2Module.h @@ -1,181 +1,181 @@ -#ifndef ALIITSALIGNMILLE2MODULE_H -#define ALIITSALIGNMILLE2MODULE_H -/* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/// \ingroup rec -/// \class AliITSAlignMille2Module -/// \brief Class for alignment of ITS -// -// Authors: Marcello Lunardon -// -// RS Converted static arrays fSensVolVolumeID and fSensVolIndex -// to TArrays in user transparent way. -// -/* $Id$ */ -//#include -//#include -#include -#include -#include -#include -class AliITSAlignMille2; - -class AliAlignObjParams; -class TGeoHMatrix; - -class AliITSAlignMille2Module : public TNamed -{ -public: - enum {kSPD,kSDD,kSSD}; - enum {kMaxParGeom=6,kMaxParTot=9,kSensDefBit=BIT(14),kGlobalGeomBit=BIT(15),kNotInConfBit=BIT(16),kVdSDDSameLRBit=BIT(17)}; - enum {kDOFTX,kDOFTY,kDOFTZ,kDOFPS,kDOFTH,kDOFPH,kDOFT0,kDOFDVL,kDOFDVR}; - // - AliITSAlignMille2Module(); - AliITSAlignMille2Module(UShort_t volid); - AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname, const TGeoHMatrix *m, Int_t nsv=0, const UShort_t *volidsv=NULL); - AliITSAlignMille2Module(const AliITSAlignMille2Module& rhs); // copy constructor - AliITSAlignMille2Module& operator=(const AliITSAlignMille2Module& rhs); - // - virtual ~AliITSAlignMille2Module(); - // - // geometry methods - Int_t GetIndex() const {return fIndex;} - UShort_t GetVolumeID() const {return fVolumeID;} - Int_t GetNSensitiveVolumes() const {return fNSensVol;} - Int_t GetSensVolIndex(Int_t at) const {return fSensVolIndex[at];} - Short_t GetSensVolVolumeID(Int_t at) const {return fSensVolVolumeID[at];} - TGeoHMatrix *GetMatrix() const {return fMatrix;} - void GetLocalMatrix(TGeoHMatrix& mat) const; - UShort_t *GetSensitiveVolumeVolumeID() const {return (UShort_t*)fSensVolVolumeID.GetArray();} - Float_t GetSigmaFactor(Int_t i) const {return fSigmaFactor[i];} - Float_t GetSigmaXFactor() const {return fSigmaFactor[0];} - Float_t GetSigmaYFactor() const {return fSigmaFactor[1];} - Float_t GetSigmaZFactor() const {return fSigmaFactor[2];} - Int_t GetNProcessedPoints() const {return fNProcPoints;} - Bool_t IsFreeDOF(Int_t dof) const {return dof0;} - Bool_t AreSensorsProvided() const {return TestBit(kSensDefBit);} - Bool_t GeomParamsGlobal() const {return TestBit(kGlobalGeomBit);} - Bool_t IsNotInConf() const {return TestBit(kNotInConfBit);} - Bool_t IsVDriftLRSame() const {return TestBit(kVdSDDSameLRBit);} - // - Bool_t IsIn(UShort_t volid) const; - Bool_t IsAlignable() const; - Bool_t BelongsTo(AliITSAlignMille2Module* parent) const; - AliITSAlignMille2Module* GetParent() const {return fParent;} - AliITSAlignMille2Module* GetChild(Int_t i) const {return (AliITSAlignMille2Module*)fChildren[i];} - Int_t GetNChildren() const {return fChildren.GetLast()+1;} - // - void Print(Option_t* opt="") const; - // - void EvaluateDOF(); - UShort_t GetNParTot() const {return fNParTot;} - UShort_t GetNParFree() const {return fNParFree;} - Float_t *GetParVals() const {return fParVals;} - Double_t GetParVal(int par) const {return par0 && fParCstr[par]0. ? s:0.0;} - void SetSigmaFactor(Int_t i,Float_t v) {fSigmaFactor[i]=TMath::Max(0.001F,v);} - void SetSigmaXFactor(Float_t v) {SetSigmaFactor(0,v);} - void SetSigmaYFactor(Float_t v) {SetSigmaFactor(1,v);} - void SetSigmaZFactor(Float_t v) {SetSigmaFactor(2,v);} - void IncNProcessedPoints(Int_t step=1) {fNProcPoints += step;} - void SetNProcessedPoints(Int_t v) {fNProcPoints = v;} - void SetParent(AliITSAlignMille2Module* par) {fParent = par;} - void AddChild(AliITSAlignMille2Module* cld) {fChildren.Add(cld);} - void SetFreeDOF(Int_t dof,Double_t cstr); - void SetSensorsProvided(Bool_t v=kTRUE) {SetBit(kSensDefBit,v);} - void SetGeomParamsGlobal(Bool_t v=kTRUE) {SetBit(kGlobalGeomBit,v);} - void SetNotInConf(Bool_t v=kTRUE) {SetBit(kNotInConfBit,v);} - void SetVDriftLRSame(Bool_t v=kTRUE) {SetBit(kVdSDDSameLRBit,v);} - Int_t Set(Int_t index,UShort_t volid, const char* symname, const TGeoHMatrix *m,Int_t nsv=0, const UShort_t *volidsv=0); - // - void AddSensitiveVolume(UShort_t volid); - void DelSensitiveVolume(Int_t at); - void DelSensitiveVolumes() {fNSensVol = 0;} - // - void GetGeomParamsGlo(Double_t *pars); - void GetGeomParamsLoc(Double_t *pars); - // - TGeoHMatrix *GetSensitiveVolumeMatrix(UShort_t voluid); - TGeoHMatrix *GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid); - TGeoHMatrix *GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t *delta,Bool_t local=kTRUE); - AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a); - AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t *deltalocal); - // - void GetGlobalParams(Double_t *t, Double_t *r) const; - void GetGlobalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r); - void GetLocalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r); - // - void GetSensVolGlobalParams(UShort_t volid,Double_t *t, Double_t *r); - void GetSensVolLocalParams(UShort_t volid,Double_t *t, Double_t *r); - void GetSensVolGlobalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r); - void GetSensVolLocalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r); - // - void CalcDerivLocGlo(Double_t *deriv); - void CalcDerivGloLoc(Int_t idx,Double_t *deriv); - void CalcDerivGloLoc(Int_t sensVol,Int_t paridx,Double_t* derivative); - void CalcDerivCurLoc(Int_t sensVol,Int_t paridx,Double_t* derivative); - void CalcDerivDPosDPar(Int_t sensVol,const Double_t *pl,Double_t *deriv); - // - // forse non serve... - AliAlignObjParams *GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t *deltalocal); - // mo' proviamo questo - AliAlignObjParams *GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t *deltalocal); - // - static Int_t GetIndexFromVolumeID(UShort_t volid); - static UShort_t GetVolumeIDFromSymname(const Char_t *symname); - static UShort_t GetVolumeIDFromIndex(Int_t index); - static Bool_t IsSensor(UShort_t vid); - static Int_t SensVolMatrix(UShort_t volid, TGeoHMatrix *m); - static Int_t SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m); - - // -protected: - // - void AssignDetType(); - // -protected: - // - Int_t fNSensVol; // number of sensor it refers to - Int_t fIndex; // aliroot index - Int_t fDetType; // Detector type - UShort_t fVolumeID; // aliroot volune ID - UShort_t fNParTot; // total number of parameters - UShort_t fNParFree; // number of free parameters - TArrayS fParOffs; // offsets of free params in the fit results - Int_t fNProcPoints; // number of processed points - Float_t fSigmaFactor[3]; // multiplicative factor for referred sensor X,Y,Z error - Float_t *fParVals; // values of the fitted params - Float_t *fParErrs; // errors of the fitted params - Float_t *fParCstr; // Gaussian type constraint on parameter, 0 means fixed param - // - TArrayI fSensVolIndex; // aliroot indices for sensors - TArrayS fSensVolVolumeID; // aliroot indices for sensors volumes - TGeoHMatrix *fMatrix; // ideal TGeoHMatrix of the supermodule - TGeoHMatrix *fSensVolMatrix; // sensor's ideal matrices - TGeoHMatrix *fSensVolModifMatrix; // sensor's modified matrices - // - AliITSAlignMille2Module* fParent; // optional parent pointer - TObjArray fChildren; // array of optional children - // - static const Float_t fgkDummyConstraint; // dummy (lose) contraint on parameter - // - ClassDef(AliITSAlignMille2Module, 0) -}; - -#endif +#ifndef ALIITSALIGNMILLE2MODULE_H +#define ALIITSALIGNMILLE2MODULE_H +/* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/// \ingroup rec +/// \class AliITSAlignMille2Module +/// \brief Class for alignment of ITS +// +// Authors: Marcello Lunardon +// +// RS Converted static arrays fSensVolVolumeID and fSensVolIndex +// to TArrays in user transparent way. +// +/* $Id$ */ +//#include +//#include +#include +#include +#include +#include +class AliITSAlignMille2; + +class AliAlignObjParams; +class TGeoHMatrix; + +class AliITSAlignMille2Module : public TNamed +{ +public: + enum {kSPD,kSDD,kSSD}; + enum {kMaxParGeom=6,kMaxParTot=9,kSensDefBit=BIT(14),kGlobalGeomBit=BIT(15),kNotInConfBit=BIT(16),kVdSDDSameLRBit=BIT(17)}; + enum {kDOFTX,kDOFTY,kDOFTZ,kDOFPS,kDOFTH,kDOFPH,kDOFT0,kDOFDVL,kDOFDVR}; + // + AliITSAlignMille2Module(); + AliITSAlignMille2Module(UShort_t volid); + AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname, const TGeoHMatrix *m, Int_t nsv=0, const UShort_t *volidsv=NULL); + AliITSAlignMille2Module(const AliITSAlignMille2Module& rhs); // copy constructor + AliITSAlignMille2Module& operator=(const AliITSAlignMille2Module& rhs); + // + virtual ~AliITSAlignMille2Module(); + // + // geometry methods + Int_t GetIndex() const {return fIndex;} + UShort_t GetVolumeID() const {return fVolumeID;} + Int_t GetNSensitiveVolumes() const {return fNSensVol;} + Int_t GetSensVolIndex(Int_t at) const {return fSensVolIndex[at];} + Short_t GetSensVolVolumeID(Int_t at) const {return fSensVolVolumeID[at];} + TGeoHMatrix *GetMatrix() const {return fMatrix;} + void GetLocalMatrix(TGeoHMatrix& mat) const; + UShort_t *GetSensitiveVolumeVolumeID() const {return (UShort_t*)fSensVolVolumeID.GetArray();} + Float_t GetSigmaFactor(Int_t i) const {return fSigmaFactor[i];} + Float_t GetSigmaXFactor() const {return fSigmaFactor[0];} + Float_t GetSigmaYFactor() const {return fSigmaFactor[1];} + Float_t GetSigmaZFactor() const {return fSigmaFactor[2];} + Int_t GetNProcessedPoints() const {return fNProcPoints;} + Bool_t IsFreeDOF(Int_t dof) const {return dof0;} + Bool_t AreSensorsProvided() const {return TestBit(kSensDefBit);} + Bool_t GeomParamsGlobal() const {return TestBit(kGlobalGeomBit);} + Bool_t IsNotInConf() const {return TestBit(kNotInConfBit);} + Bool_t IsVDriftLRSame() const {return TestBit(kVdSDDSameLRBit);} + // + Bool_t IsIn(UShort_t volid) const; + Bool_t IsAlignable() const; + Bool_t BelongsTo(AliITSAlignMille2Module* parent) const; + AliITSAlignMille2Module* GetParent() const {return fParent;} + AliITSAlignMille2Module* GetChild(Int_t i) const {return (AliITSAlignMille2Module*)fChildren[i];} + Int_t GetNChildren() const {return fChildren.GetLast()+1;} + // + void Print(Option_t* opt="") const; + // + void EvaluateDOF(); + UShort_t GetNParTot() const {return fNParTot;} + UShort_t GetNParFree() const {return fNParFree;} + Float_t *GetParVals() const {return fParVals;} + Double_t GetParVal(int par) const {return par0 && fParCstr[par]0. ? s:0.0;} + void SetSigmaFactor(Int_t i,Float_t v) {fSigmaFactor[i]=TMath::Max(0.001F,v);} + void SetSigmaXFactor(Float_t v) {SetSigmaFactor(0,v);} + void SetSigmaYFactor(Float_t v) {SetSigmaFactor(1,v);} + void SetSigmaZFactor(Float_t v) {SetSigmaFactor(2,v);} + void IncNProcessedPoints(Int_t step=1) {fNProcPoints += step;} + void SetNProcessedPoints(Int_t v) {fNProcPoints = v;} + void SetParent(AliITSAlignMille2Module* par) {fParent = par;} + void AddChild(AliITSAlignMille2Module* cld) {fChildren.Add(cld);} + void SetFreeDOF(Int_t dof,Double_t cstr); + void SetSensorsProvided(Bool_t v=kTRUE) {SetBit(kSensDefBit,v);} + void SetGeomParamsGlobal(Bool_t v=kTRUE) {SetBit(kGlobalGeomBit,v);} + void SetNotInConf(Bool_t v=kTRUE) {SetBit(kNotInConfBit,v);} + void SetVDriftLRSame(Bool_t v=kTRUE) {SetBit(kVdSDDSameLRBit,v);} + Int_t Set(Int_t index,UShort_t volid, const char* symname, const TGeoHMatrix *m,Int_t nsv=0, const UShort_t *volidsv=0); + // + void AddSensitiveVolume(UShort_t volid); + void DelSensitiveVolume(Int_t at); + void DelSensitiveVolumes() {fNSensVol = 0;} + // + void GetGeomParamsGlo(Double_t *pars); + void GetGeomParamsLoc(Double_t *pars); + // + TGeoHMatrix *GetSensitiveVolumeMatrix(UShort_t voluid); + TGeoHMatrix *GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid); + TGeoHMatrix *GetSensitiveVolumeModifiedMatrix(UShort_t voluid, const Double_t *delta,Bool_t local=kTRUE); + AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const AliAlignObjParams *a); + AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, const Double_t *deltalocal); + // + void GetGlobalParams(Double_t *t, Double_t *r) const; + void GetGlobalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r); + void GetLocalParams(const Double_t *loct, const Double_t *locr,Double_t *t, Double_t *r); + // + void GetSensVolGlobalParams(UShort_t volid,Double_t *t, Double_t *r); + void GetSensVolLocalParams(UShort_t volid,Double_t *t, Double_t *r); + void GetSensVolGlobalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r); + void GetSensVolLocalParams(UShort_t volid,const Double_t* loct,const Double_t* locr,Double_t *t, Double_t *r); + // + void CalcDerivLocGlo(Double_t *deriv); + void CalcDerivGloLoc(Int_t idx,Double_t *deriv); + void CalcDerivGloLoc(Int_t sensVol,Int_t paridx,Double_t* derivative); + void CalcDerivCurLoc(Int_t sensVol,Int_t paridx,Double_t* derivative); + void CalcDerivDPosDPar(Int_t sensVol,const Double_t *pl,Double_t *deriv); + // + // forse non serve... + AliAlignObjParams *GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, const Double_t *deltalocal); + // mo' proviamo questo + AliAlignObjParams *GetSensitiveVolumeTotalMisalignment(UShort_t voluid, const Double_t *deltalocal); + // + static Int_t GetIndexFromVolumeID(UShort_t volid); + static UShort_t GetVolumeIDFromSymname(const Char_t *symname); + static UShort_t GetVolumeIDFromIndex(Int_t index); + static Bool_t IsSensor(UShort_t vid); + static Int_t SensVolMatrix(UShort_t volid, TGeoHMatrix *m); + static Int_t SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m); + + // +protected: + // + void AssignDetType(); + // +protected: + // + Int_t fNSensVol; // number of sensor it refers to + Int_t fIndex; // aliroot index + Int_t fDetType; // Detector type + UShort_t fVolumeID; // aliroot volune ID + UShort_t fNParTot; // total number of parameters + UShort_t fNParFree; // number of free parameters + TArrayS fParOffs; // offsets of free params in the fit results + Int_t fNProcPoints; // number of processed points + Float_t fSigmaFactor[3]; // multiplicative factor for referred sensor X,Y,Z error + Float_t *fParVals; // values of the fitted params + Float_t *fParErrs; // errors of the fitted params + Float_t *fParCstr; // Gaussian type constraint on parameter, 0 means fixed param + // + TArrayI fSensVolIndex; // aliroot indices for sensors + TArrayS fSensVolVolumeID; // aliroot indices for sensors volumes + TGeoHMatrix *fMatrix; // ideal TGeoHMatrix of the supermodule + TGeoHMatrix *fSensVolMatrix; // sensor's ideal matrices + TGeoHMatrix *fSensVolModifMatrix; // sensor's modified matrices + // + AliITSAlignMille2Module* fParent; // optional parent pointer + TObjArray fChildren; // array of optional children + // + static const Float_t fgkDummyConstraint; // dummy (lose) contraint on parameter + // + ClassDef(AliITSAlignMille2Module, 0) +}; + +#endif diff --git a/ITS/AliITSAlignMilleFull.conf b/ITS/AliITSAlignMilleFull.conf index c6b272c1083..ad62fa046fd 100644 --- a/ITS/AliITSAlignMilleFull.conf +++ b/ITS/AliITSAlignMilleFull.conf @@ -1,2219 +1,2219 @@ -# init geometry -GEOMETRY_FILE geometry.root -# Millepere options: -# init sigma for params (trans in cm. and rot. in deg) -SET_PARSIG_TRANS 0.0100 -SET_PARSIG_ROT 0.1 -# Number of standard deviations for chi2 cut -SET_NSTDDEV 3 -# Cut on residual for first and other iterations -SET_RESCUT_INIT 100. -SET_RESCUT_OTHER 100. -# initial value for chi2 cut -SET_STARTFAC 16. -# module index param: 0=fixed / 1=alignable -# number Tx Ty Tz psi theta phi -# layer 1 -MODULE_INDEX 0 1 1 1 1 1 1 -MODULE_INDEX 1 1 1 1 1 1 1 -MODULE_INDEX 2 1 1 1 1 1 1 -MODULE_INDEX 3 1 1 1 1 1 1 -MODULE_INDEX 4 1 1 1 1 1 1 -MODULE_INDEX 5 1 1 1 1 1 1 -MODULE_INDEX 6 1 1 1 1 1 1 -MODULE_INDEX 7 1 1 1 1 1 1 -MODULE_INDEX 8 1 1 1 1 1 1 -MODULE_INDEX 9 1 1 1 1 1 1 -MODULE_INDEX 10 1 1 1 1 1 1 -MODULE_INDEX 11 1 1 1 1 1 1 -MODULE_INDEX 12 1 1 1 1 1 1 -MODULE_INDEX 13 1 1 1 1 1 1 -MODULE_INDEX 14 1 1 1 1 1 1 -MODULE_INDEX 15 1 1 1 1 1 1 -MODULE_INDEX 16 1 1 1 1 1 1 -MODULE_INDEX 17 1 1 1 1 1 1 -MODULE_INDEX 18 1 1 1 1 1 1 -MODULE_INDEX 19 1 1 1 1 1 1 -MODULE_INDEX 20 1 1 1 1 1 1 -MODULE_INDEX 21 1 1 1 1 1 1 -MODULE_INDEX 22 1 1 1 1 1 1 -MODULE_INDEX 23 1 1 1 1 1 1 -MODULE_INDEX 24 1 1 1 1 1 1 -MODULE_INDEX 25 1 1 1 1 1 1 -MODULE_INDEX 26 1 1 1 1 1 1 -MODULE_INDEX 27 1 1 1 1 1 1 -MODULE_INDEX 28 1 1 1 1 1 1 -MODULE_INDEX 29 1 1 1 1 1 1 -MODULE_INDEX 30 1 1 1 1 1 1 -MODULE_INDEX 31 1 1 1 1 1 1 -MODULE_INDEX 32 1 1 1 1 1 1 -MODULE_INDEX 33 1 1 1 1 1 1 -MODULE_INDEX 34 1 1 1 1 1 1 -MODULE_INDEX 35 1 1 1 1 1 1 -MODULE_INDEX 36 1 1 1 1 1 1 -MODULE_INDEX 37 1 1 1 1 1 1 -MODULE_INDEX 38 1 1 1 1 1 1 -MODULE_INDEX 39 1 1 1 1 1 1 -MODULE_INDEX 40 1 1 1 1 1 1 -MODULE_INDEX 41 1 1 1 1 1 1 -MODULE_INDEX 42 1 1 1 1 1 1 -MODULE_INDEX 43 1 1 1 1 1 1 -MODULE_INDEX 44 1 1 1 1 1 1 -MODULE_INDEX 45 1 1 1 1 1 1 -MODULE_INDEX 46 1 1 1 1 1 1 -MODULE_INDEX 47 1 1 1 1 1 1 -MODULE_INDEX 48 1 1 1 1 1 1 -MODULE_INDEX 49 1 1 1 1 1 1 -MODULE_INDEX 50 1 1 1 1 1 1 -MODULE_INDEX 51 1 1 1 1 1 1 -MODULE_INDEX 52 1 1 1 1 1 1 -MODULE_INDEX 53 1 1 1 1 1 1 -MODULE_INDEX 54 1 1 1 1 1 1 -MODULE_INDEX 55 1 1 1 1 1 1 -MODULE_INDEX 56 1 1 1 1 1 1 -MODULE_INDEX 57 1 1 1 1 1 1 -MODULE_INDEX 58 1 1 1 1 1 1 -MODULE_INDEX 59 1 1 1 1 1 1 -MODULE_INDEX 60 1 1 1 1 1 1 -MODULE_INDEX 61 1 1 1 1 1 1 -MODULE_INDEX 62 1 1 1 1 1 1 -MODULE_INDEX 63 1 1 1 1 1 1 -MODULE_INDEX 64 1 1 1 1 1 1 -MODULE_INDEX 65 1 1 1 1 1 1 -MODULE_INDEX 66 1 1 1 1 1 1 -MODULE_INDEX 67 1 1 1 1 1 1 -MODULE_INDEX 68 1 1 1 1 1 1 -MODULE_INDEX 69 1 1 1 1 1 1 -MODULE_INDEX 70 1 1 1 1 1 1 -MODULE_INDEX 71 1 1 1 1 1 1 -MODULE_INDEX 72 1 1 1 1 1 1 -MODULE_INDEX 73 1 1 1 1 1 1 -MODULE_INDEX 74 1 1 1 1 1 1 -MODULE_INDEX 75 1 1 1 1 1 1 -MODULE_INDEX 76 1 1 1 1 1 1 -MODULE_INDEX 77 1 1 1 1 1 1 -MODULE_INDEX 78 1 1 1 1 1 1 -MODULE_INDEX 79 1 1 1 1 1 1 -# layer 2 -MODULE_INDEX 80 1 1 1 1 1 1 -MODULE_INDEX 81 1 1 1 1 1 1 -MODULE_INDEX 82 1 1 1 1 1 1 -MODULE_INDEX 83 1 1 1 1 1 1 -MODULE_INDEX 84 1 1 1 1 1 1 -MODULE_INDEX 85 1 1 1 1 1 1 -MODULE_INDEX 86 1 1 1 1 1 1 -MODULE_INDEX 87 1 1 1 1 1 1 -MODULE_INDEX 88 1 1 1 1 1 1 -MODULE_INDEX 89 1 1 1 1 1 1 -MODULE_INDEX 90 1 1 1 1 1 1 -MODULE_INDEX 91 1 1 1 1 1 1 -MODULE_INDEX 92 1 1 1 1 1 1 -MODULE_INDEX 93 1 1 1 1 1 1 -MODULE_INDEX 94 1 1 1 1 1 1 -MODULE_INDEX 95 1 1 1 1 1 1 -MODULE_INDEX 96 1 1 1 1 1 1 -MODULE_INDEX 97 1 1 1 1 1 1 -MODULE_INDEX 98 1 1 1 1 1 1 -MODULE_INDEX 99 1 1 1 1 1 1 -MODULE_INDEX 100 1 1 1 1 1 1 -MODULE_INDEX 101 1 1 1 1 1 1 -MODULE_INDEX 102 1 1 1 1 1 1 -MODULE_INDEX 103 1 1 1 1 1 1 -MODULE_INDEX 104 1 1 1 1 1 1 -MODULE_INDEX 105 1 1 1 1 1 1 -MODULE_INDEX 106 1 1 1 1 1 1 -MODULE_INDEX 107 1 1 1 1 1 1 -MODULE_INDEX 108 1 1 1 1 1 1 -MODULE_INDEX 109 1 1 1 1 1 1 -MODULE_INDEX 110 1 1 1 1 1 1 -MODULE_INDEX 111 1 1 1 1 1 1 -MODULE_INDEX 112 1 1 1 1 1 1 -MODULE_INDEX 113 1 1 1 1 1 1 -MODULE_INDEX 114 1 1 1 1 1 1 -MODULE_INDEX 115 1 1 1 1 1 1 -MODULE_INDEX 116 1 1 1 1 1 1 -MODULE_INDEX 117 1 1 1 1 1 1 -MODULE_INDEX 118 1 1 1 1 1 1 -MODULE_INDEX 119 1 1 1 1 1 1 -MODULE_INDEX 120 1 1 1 1 1 1 -MODULE_INDEX 121 1 1 1 1 1 1 -MODULE_INDEX 122 1 1 1 1 1 1 -MODULE_INDEX 123 1 1 1 1 1 1 -MODULE_INDEX 124 1 1 1 1 1 1 -MODULE_INDEX 125 1 1 1 1 1 1 -MODULE_INDEX 126 1 1 1 1 1 1 -MODULE_INDEX 127 1 1 1 1 1 1 -MODULE_INDEX 128 1 1 1 1 1 1 -MODULE_INDEX 129 1 1 1 1 1 1 -MODULE_INDEX 130 1 1 1 1 1 1 -MODULE_INDEX 131 1 1 1 1 1 1 -MODULE_INDEX 132 1 1 1 1 1 1 -MODULE_INDEX 133 1 1 1 1 1 1 -MODULE_INDEX 134 1 1 1 1 1 1 -MODULE_INDEX 135 1 1 1 1 1 1 -MODULE_INDEX 136 1 1 1 1 1 1 -MODULE_INDEX 137 1 1 1 1 1 1 -MODULE_INDEX 138 1 1 1 1 1 1 -MODULE_INDEX 139 1 1 1 1 1 1 -MODULE_INDEX 140 1 1 1 1 1 1 -MODULE_INDEX 141 1 1 1 1 1 1 -MODULE_INDEX 142 1 1 1 1 1 1 -MODULE_INDEX 143 1 1 1 1 1 1 -MODULE_INDEX 144 1 1 1 1 1 1 -MODULE_INDEX 145 1 1 1 1 1 1 -MODULE_INDEX 146 1 1 1 1 1 1 -MODULE_INDEX 147 1 1 1 1 1 1 -MODULE_INDEX 148 1 1 1 1 1 1 -MODULE_INDEX 149 1 1 1 1 1 1 -MODULE_INDEX 150 1 1 1 1 1 1 -MODULE_INDEX 151 1 1 1 1 1 1 -MODULE_INDEX 152 1 1 1 1 1 1 -MODULE_INDEX 153 1 1 1 1 1 1 -MODULE_INDEX 154 1 1 1 1 1 1 -MODULE_INDEX 155 1 1 1 1 1 1 -MODULE_INDEX 156 1 1 1 1 1 1 -MODULE_INDEX 157 1 1 1 1 1 1 -MODULE_INDEX 158 1 1 1 1 1 1 -MODULE_INDEX 159 1 1 1 1 1 1 -MODULE_INDEX 160 1 1 1 1 1 1 -MODULE_INDEX 161 1 1 1 1 1 1 -MODULE_INDEX 162 1 1 1 1 1 1 -MODULE_INDEX 163 1 1 1 1 1 1 -MODULE_INDEX 164 1 1 1 1 1 1 -MODULE_INDEX 165 1 1 1 1 1 1 -MODULE_INDEX 166 1 1 1 1 1 1 -MODULE_INDEX 167 1 1 1 1 1 1 -MODULE_INDEX 168 1 1 1 1 1 1 -MODULE_INDEX 169 1 1 1 1 1 1 -MODULE_INDEX 170 1 1 1 1 1 1 -MODULE_INDEX 171 1 1 1 1 1 1 -MODULE_INDEX 172 1 1 1 1 1 1 -MODULE_INDEX 173 1 1 1 1 1 1 -MODULE_INDEX 174 1 1 1 1 1 1 -MODULE_INDEX 175 1 1 1 1 1 1 -MODULE_INDEX 176 1 1 1 1 1 1 -MODULE_INDEX 177 1 1 1 1 1 1 -MODULE_INDEX 178 1 1 1 1 1 1 -MODULE_INDEX 179 1 1 1 1 1 1 -MODULE_INDEX 180 1 1 1 1 1 1 -MODULE_INDEX 181 1 1 1 1 1 1 -MODULE_INDEX 182 1 1 1 1 1 1 -MODULE_INDEX 183 1 1 1 1 1 1 -MODULE_INDEX 184 1 1 1 1 1 1 -MODULE_INDEX 185 1 1 1 1 1 1 -MODULE_INDEX 186 1 1 1 1 1 1 -MODULE_INDEX 187 1 1 1 1 1 1 -MODULE_INDEX 188 1 1 1 1 1 1 -MODULE_INDEX 189 1 1 1 1 1 1 -MODULE_INDEX 190 1 1 1 1 1 1 -MODULE_INDEX 191 1 1 1 1 1 1 -MODULE_INDEX 192 1 1 1 1 1 1 -MODULE_INDEX 193 1 1 1 1 1 1 -MODULE_INDEX 194 1 1 1 1 1 1 -MODULE_INDEX 195 1 1 1 1 1 1 -MODULE_INDEX 196 1 1 1 1 1 1 -MODULE_INDEX 197 1 1 1 1 1 1 -MODULE_INDEX 198 1 1 1 1 1 1 -MODULE_INDEX 199 1 1 1 1 1 1 -MODULE_INDEX 200 1 1 1 1 1 1 -MODULE_INDEX 201 1 1 1 1 1 1 -MODULE_INDEX 202 1 1 1 1 1 1 -MODULE_INDEX 203 1 1 1 1 1 1 -MODULE_INDEX 204 1 1 1 1 1 1 -MODULE_INDEX 205 1 1 1 1 1 1 -MODULE_INDEX 206 1 1 1 1 1 1 -MODULE_INDEX 207 1 1 1 1 1 1 -MODULE_INDEX 208 1 1 1 1 1 1 -MODULE_INDEX 209 1 1 1 1 1 1 -MODULE_INDEX 210 1 1 1 1 1 1 -MODULE_INDEX 211 1 1 1 1 1 1 -MODULE_INDEX 212 1 1 1 1 1 1 -MODULE_INDEX 213 1 1 1 1 1 1 -MODULE_INDEX 214 1 1 1 1 1 1 -MODULE_INDEX 215 1 1 1 1 1 1 -MODULE_INDEX 216 1 1 1 1 1 1 -MODULE_INDEX 217 1 1 1 1 1 1 -MODULE_INDEX 218 1 1 1 1 1 1 -MODULE_INDEX 219 1 1 1 1 1 1 -MODULE_INDEX 220 1 1 1 1 1 1 -MODULE_INDEX 221 1 1 1 1 1 1 -MODULE_INDEX 222 1 1 1 1 1 1 -MODULE_INDEX 223 1 1 1 1 1 1 -MODULE_INDEX 224 1 1 1 1 1 1 -MODULE_INDEX 225 1 1 1 1 1 1 -MODULE_INDEX 226 1 1 1 1 1 1 -MODULE_INDEX 227 1 1 1 1 1 1 -MODULE_INDEX 228 1 1 1 1 1 1 -MODULE_INDEX 229 1 1 1 1 1 1 -MODULE_INDEX 230 1 1 1 1 1 1 -MODULE_INDEX 231 1 1 1 1 1 1 -MODULE_INDEX 232 1 1 1 1 1 1 -MODULE_INDEX 233 1 1 1 1 1 1 -MODULE_INDEX 234 1 1 1 1 1 1 -MODULE_INDEX 235 1 1 1 1 1 1 -MODULE_INDEX 236 1 1 1 1 1 1 -MODULE_INDEX 237 1 1 1 1 1 1 -MODULE_INDEX 238 1 1 1 1 1 1 -MODULE_INDEX 239 1 1 1 1 1 1 -# layer 3 -MODULE_INDEX 240 1 1 1 1 1 1 -MODULE_INDEX 241 1 1 1 1 1 1 -MODULE_INDEX 242 1 1 1 1 1 1 -MODULE_INDEX 243 1 1 1 1 1 1 -MODULE_INDEX 244 1 1 1 1 1 1 -MODULE_INDEX 245 1 1 1 1 1 1 -MODULE_INDEX 246 1 1 1 1 1 1 -MODULE_INDEX 247 1 1 1 1 1 1 -MODULE_INDEX 248 1 1 1 1 1 1 -MODULE_INDEX 249 1 1 1 1 1 1 -MODULE_INDEX 250 1 1 1 1 1 1 -MODULE_INDEX 251 1 1 1 1 1 1 -MODULE_INDEX 252 1 1 1 1 1 1 -MODULE_INDEX 253 1 1 1 1 1 1 -MODULE_INDEX 254 1 1 1 1 1 1 -MODULE_INDEX 255 1 1 1 1 1 1 -MODULE_INDEX 256 1 1 1 1 1 1 -MODULE_INDEX 257 1 1 1 1 1 1 -MODULE_INDEX 258 1 1 1 1 1 1 -MODULE_INDEX 259 1 1 1 1 1 1 -MODULE_INDEX 260 1 1 1 1 1 1 -MODULE_INDEX 261 1 1 1 1 1 1 -MODULE_INDEX 262 1 1 1 1 1 1 -MODULE_INDEX 263 1 1 1 1 1 1 -MODULE_INDEX 264 1 1 1 1 1 1 -MODULE_INDEX 265 1 1 1 1 1 1 -MODULE_INDEX 266 1 1 1 1 1 1 -MODULE_INDEX 267 1 1 1 1 1 1 -MODULE_INDEX 268 1 1 1 1 1 1 -MODULE_INDEX 269 1 1 1 1 1 1 -MODULE_INDEX 270 1 1 1 1 1 1 -MODULE_INDEX 271 1 1 1 1 1 1 -MODULE_INDEX 272 1 1 1 1 1 1 -MODULE_INDEX 273 1 1 1 1 1 1 -MODULE_INDEX 274 1 1 1 1 1 1 -MODULE_INDEX 275 1 1 1 1 1 1 -MODULE_INDEX 276 1 1 1 1 1 1 -MODULE_INDEX 277 1 1 1 1 1 1 -MODULE_INDEX 278 1 1 1 1 1 1 -MODULE_INDEX 279 1 1 1 1 1 1 -MODULE_INDEX 280 1 1 1 1 1 1 -MODULE_INDEX 281 1 1 1 1 1 1 -MODULE_INDEX 282 1 1 1 1 1 1 -MODULE_INDEX 283 1 1 1 1 1 1 -MODULE_INDEX 284 1 1 1 1 1 1 -MODULE_INDEX 285 1 1 1 1 1 1 -MODULE_INDEX 286 1 1 1 1 1 1 -MODULE_INDEX 287 1 1 1 1 1 1 -MODULE_INDEX 288 1 1 1 1 1 1 -MODULE_INDEX 289 1 1 1 1 1 1 -MODULE_INDEX 290 1 1 1 1 1 1 -MODULE_INDEX 291 1 1 1 1 1 1 -MODULE_INDEX 292 1 1 1 1 1 1 -MODULE_INDEX 293 1 1 1 1 1 1 -MODULE_INDEX 294 1 1 1 1 1 1 -MODULE_INDEX 295 1 1 1 1 1 1 -MODULE_INDEX 296 1 1 1 1 1 1 -MODULE_INDEX 297 1 1 1 1 1 1 -MODULE_INDEX 298 1 1 1 1 1 1 -MODULE_INDEX 299 1 1 1 1 1 1 -MODULE_INDEX 300 1 1 1 1 1 1 -MODULE_INDEX 301 1 1 1 1 1 1 -MODULE_INDEX 302 1 1 1 1 1 1 -MODULE_INDEX 303 1 1 1 1 1 1 -MODULE_INDEX 304 1 1 1 1 1 1 -MODULE_INDEX 305 1 1 1 1 1 1 -MODULE_INDEX 306 1 1 1 1 1 1 -MODULE_INDEX 307 1 1 1 1 1 1 -MODULE_INDEX 308 1 1 1 1 1 1 -MODULE_INDEX 309 1 1 1 1 1 1 -MODULE_INDEX 310 1 1 1 1 1 1 -MODULE_INDEX 311 1 1 1 1 1 1 -MODULE_INDEX 312 1 1 1 1 1 1 -MODULE_INDEX 313 1 1 1 1 1 1 -MODULE_INDEX 314 1 1 1 1 1 1 -MODULE_INDEX 315 1 1 1 1 1 1 -MODULE_INDEX 316 1 1 1 1 1 1 -MODULE_INDEX 317 1 1 1 1 1 1 -MODULE_INDEX 318 1 1 1 1 1 1 -MODULE_INDEX 319 1 1 1 1 1 1 -MODULE_INDEX 320 1 1 1 1 1 1 -MODULE_INDEX 321 1 1 1 1 1 1 -MODULE_INDEX 322 1 1 1 1 1 1 -MODULE_INDEX 323 1 1 1 1 1 1 -# layer 4 -MODULE_INDEX 324 1 1 1 1 1 1 -MODULE_INDEX 325 1 1 1 1 1 1 -MODULE_INDEX 326 1 1 1 1 1 1 -MODULE_INDEX 327 1 1 1 1 1 1 -MODULE_INDEX 328 1 1 1 1 1 1 -MODULE_INDEX 329 1 1 1 1 1 1 -MODULE_INDEX 330 1 1 1 1 1 1 -MODULE_INDEX 331 1 1 1 1 1 1 -MODULE_INDEX 332 1 1 1 1 1 1 -MODULE_INDEX 333 1 1 1 1 1 1 -MODULE_INDEX 334 1 1 1 1 1 1 -MODULE_INDEX 335 1 1 1 1 1 1 -MODULE_INDEX 336 1 1 1 1 1 1 -MODULE_INDEX 337 1 1 1 1 1 1 -MODULE_INDEX 338 1 1 1 1 1 1 -MODULE_INDEX 339 1 1 1 1 1 1 -MODULE_INDEX 340 1 1 1 1 1 1 -MODULE_INDEX 341 1 1 1 1 1 1 -MODULE_INDEX 342 1 1 1 1 1 1 -MODULE_INDEX 343 1 1 1 1 1 1 -MODULE_INDEX 344 1 1 1 1 1 1 -MODULE_INDEX 345 1 1 1 1 1 1 -MODULE_INDEX 346 1 1 1 1 1 1 -MODULE_INDEX 347 1 1 1 1 1 1 -MODULE_INDEX 348 1 1 1 1 1 1 -MODULE_INDEX 349 1 1 1 1 1 1 -MODULE_INDEX 350 1 1 1 1 1 1 -MODULE_INDEX 351 1 1 1 1 1 1 -MODULE_INDEX 352 1 1 1 1 1 1 -MODULE_INDEX 353 1 1 1 1 1 1 -MODULE_INDEX 354 1 1 1 1 1 1 -MODULE_INDEX 355 1 1 1 1 1 1 -MODULE_INDEX 356 1 1 1 1 1 1 -MODULE_INDEX 357 1 1 1 1 1 1 -MODULE_INDEX 358 1 1 1 1 1 1 -MODULE_INDEX 359 1 1 1 1 1 1 -MODULE_INDEX 360 1 1 1 1 1 1 -MODULE_INDEX 361 1 1 1 1 1 1 -MODULE_INDEX 362 1 1 1 1 1 1 -MODULE_INDEX 363 1 1 1 1 1 1 -MODULE_INDEX 364 1 1 1 1 1 1 -MODULE_INDEX 365 1 1 1 1 1 1 -MODULE_INDEX 366 1 1 1 1 1 1 -MODULE_INDEX 367 1 1 1 1 1 1 -MODULE_INDEX 368 1 1 1 1 1 1 -MODULE_INDEX 369 1 1 1 1 1 1 -MODULE_INDEX 370 1 1 1 1 1 1 -MODULE_INDEX 371 1 1 1 1 1 1 -MODULE_INDEX 372 1 1 1 1 1 1 -MODULE_INDEX 373 1 1 1 1 1 1 -MODULE_INDEX 374 1 1 1 1 1 1 -MODULE_INDEX 375 1 1 1 1 1 1 -MODULE_INDEX 376 1 1 1 1 1 1 -MODULE_INDEX 377 1 1 1 1 1 1 -MODULE_INDEX 378 1 1 1 1 1 1 -MODULE_INDEX 379 1 1 1 1 1 1 -MODULE_INDEX 380 1 1 1 1 1 1 -MODULE_INDEX 381 1 1 1 1 1 1 -MODULE_INDEX 382 1 1 1 1 1 1 -MODULE_INDEX 383 1 1 1 1 1 1 -MODULE_INDEX 384 1 1 1 1 1 1 -MODULE_INDEX 385 1 1 1 1 1 1 -MODULE_INDEX 386 1 1 1 1 1 1 -MODULE_INDEX 387 1 1 1 1 1 1 -MODULE_INDEX 388 1 1 1 1 1 1 -MODULE_INDEX 389 1 1 1 1 1 1 -MODULE_INDEX 390 1 1 1 1 1 1 -MODULE_INDEX 391 1 1 1 1 1 1 -MODULE_INDEX 392 1 1 1 1 1 1 -MODULE_INDEX 393 1 1 1 1 1 1 -MODULE_INDEX 394 1 1 1 1 1 1 -MODULE_INDEX 395 1 1 1 1 1 1 -MODULE_INDEX 396 1 1 1 1 1 1 -MODULE_INDEX 397 1 1 1 1 1 1 -MODULE_INDEX 398 1 1 1 1 1 1 -MODULE_INDEX 399 1 1 1 1 1 1 -MODULE_INDEX 400 1 1 1 1 1 1 -MODULE_INDEX 401 1 1 1 1 1 1 -MODULE_INDEX 402 1 1 1 1 1 1 -MODULE_INDEX 403 1 1 1 1 1 1 -MODULE_INDEX 404 1 1 1 1 1 1 -MODULE_INDEX 405 1 1 1 1 1 1 -MODULE_INDEX 406 1 1 1 1 1 1 -MODULE_INDEX 407 1 1 1 1 1 1 -MODULE_INDEX 408 1 1 1 1 1 1 -MODULE_INDEX 409 1 1 1 1 1 1 -MODULE_INDEX 410 1 1 1 1 1 1 -MODULE_INDEX 411 1 1 1 1 1 1 -MODULE_INDEX 412 1 1 1 1 1 1 -MODULE_INDEX 413 1 1 1 1 1 1 -MODULE_INDEX 414 1 1 1 1 1 1 -MODULE_INDEX 415 1 1 1 1 1 1 -MODULE_INDEX 416 1 1 1 1 1 1 -MODULE_INDEX 417 1 1 1 1 1 1 -MODULE_INDEX 418 1 1 1 1 1 1 -MODULE_INDEX 419 1 1 1 1 1 1 -MODULE_INDEX 420 1 1 1 1 1 1 -MODULE_INDEX 421 1 1 1 1 1 1 -MODULE_INDEX 422 1 1 1 1 1 1 -MODULE_INDEX 423 1 1 1 1 1 1 -MODULE_INDEX 424 1 1 1 1 1 1 -MODULE_INDEX 425 1 1 1 1 1 1 -MODULE_INDEX 426 1 1 1 1 1 1 -MODULE_INDEX 427 1 1 1 1 1 1 -MODULE_INDEX 428 1 1 1 1 1 1 -MODULE_INDEX 429 1 1 1 1 1 1 -MODULE_INDEX 430 1 1 1 1 1 1 -MODULE_INDEX 431 1 1 1 1 1 1 -MODULE_INDEX 432 1 1 1 1 1 1 -MODULE_INDEX 433 1 1 1 1 1 1 -MODULE_INDEX 434 1 1 1 1 1 1 -MODULE_INDEX 435 1 1 1 1 1 1 -MODULE_INDEX 436 1 1 1 1 1 1 -MODULE_INDEX 437 1 1 1 1 1 1 -MODULE_INDEX 438 1 1 1 1 1 1 -MODULE_INDEX 439 1 1 1 1 1 1 -MODULE_INDEX 440 1 1 1 1 1 1 -MODULE_INDEX 441 1 1 1 1 1 1 -MODULE_INDEX 442 1 1 1 1 1 1 -MODULE_INDEX 443 1 1 1 1 1 1 -MODULE_INDEX 444 1 1 1 1 1 1 -MODULE_INDEX 445 1 1 1 1 1 1 -MODULE_INDEX 446 1 1 1 1 1 1 -MODULE_INDEX 447 1 1 1 1 1 1 -MODULE_INDEX 448 1 1 1 1 1 1 -MODULE_INDEX 449 1 1 1 1 1 1 -MODULE_INDEX 450 1 1 1 1 1 1 -MODULE_INDEX 451 1 1 1 1 1 1 -MODULE_INDEX 452 1 1 1 1 1 1 -MODULE_INDEX 453 1 1 1 1 1 1 -MODULE_INDEX 454 1 1 1 1 1 1 -MODULE_INDEX 455 1 1 1 1 1 1 -MODULE_INDEX 456 1 1 1 1 1 1 -MODULE_INDEX 457 1 1 1 1 1 1 -MODULE_INDEX 458 1 1 1 1 1 1 -MODULE_INDEX 459 1 1 1 1 1 1 -MODULE_INDEX 460 1 1 1 1 1 1 -MODULE_INDEX 461 1 1 1 1 1 1 -MODULE_INDEX 462 1 1 1 1 1 1 -MODULE_INDEX 463 1 1 1 1 1 1 -MODULE_INDEX 464 1 1 1 1 1 1 -MODULE_INDEX 465 1 1 1 1 1 1 -MODULE_INDEX 466 1 1 1 1 1 1 -MODULE_INDEX 467 1 1 1 1 1 1 -MODULE_INDEX 468 1 1 1 1 1 1 -MODULE_INDEX 469 1 1 1 1 1 1 -MODULE_INDEX 470 1 1 1 1 1 1 -MODULE_INDEX 471 1 1 1 1 1 1 -MODULE_INDEX 472 1 1 1 1 1 1 -MODULE_INDEX 473 1 1 1 1 1 1 -MODULE_INDEX 474 1 1 1 1 1 1 -MODULE_INDEX 475 1 1 1 1 1 1 -MODULE_INDEX 476 1 1 1 1 1 1 -MODULE_INDEX 477 1 1 1 1 1 1 -MODULE_INDEX 478 1 1 1 1 1 1 -MODULE_INDEX 479 1 1 1 1 1 1 -MODULE_INDEX 480 1 1 1 1 1 1 -MODULE_INDEX 481 1 1 1 1 1 1 -MODULE_INDEX 482 1 1 1 1 1 1 -MODULE_INDEX 483 1 1 1 1 1 1 -MODULE_INDEX 484 1 1 1 1 1 1 -MODULE_INDEX 485 1 1 1 1 1 1 -MODULE_INDEX 486 1 1 1 1 1 1 -MODULE_INDEX 487 1 1 1 1 1 1 -MODULE_INDEX 488 1 1 1 1 1 1 -MODULE_INDEX 489 1 1 1 1 1 1 -MODULE_INDEX 490 1 1 1 1 1 1 -MODULE_INDEX 491 1 1 1 1 1 1 -MODULE_INDEX 492 1 1 1 1 1 1 -MODULE_INDEX 493 1 1 1 1 1 1 -MODULE_INDEX 494 1 1 1 1 1 1 -MODULE_INDEX 495 1 1 1 1 1 1 -MODULE_INDEX 496 1 1 1 1 1 1 -MODULE_INDEX 497 1 1 1 1 1 1 -MODULE_INDEX 498 1 1 1 1 1 1 -MODULE_INDEX 499 1 1 1 1 1 1 -# layer 5 -MODULE_INDEX 500 1 1 1 1 1 1 -MODULE_INDEX 501 1 1 1 1 1 1 -MODULE_INDEX 502 1 1 1 1 1 1 -MODULE_INDEX 503 1 1 1 1 1 1 -MODULE_INDEX 504 1 1 1 1 1 1 -MODULE_INDEX 505 1 1 1 1 1 1 -MODULE_INDEX 506 1 1 1 1 1 1 -MODULE_INDEX 507 1 1 1 1 1 1 -MODULE_INDEX 508 1 1 1 1 1 1 -MODULE_INDEX 509 1 1 1 1 1 1 -MODULE_INDEX 510 1 1 1 1 1 1 -MODULE_INDEX 511 1 1 1 1 1 1 -MODULE_INDEX 512 1 1 1 1 1 1 -MODULE_INDEX 513 1 1 1 1 1 1 -MODULE_INDEX 514 1 1 1 1 1 1 -MODULE_INDEX 515 1 1 1 1 1 1 -MODULE_INDEX 516 1 1 1 1 1 1 -MODULE_INDEX 517 1 1 1 1 1 1 -MODULE_INDEX 518 1 1 1 1 1 1 -MODULE_INDEX 519 1 1 1 1 1 1 -MODULE_INDEX 520 1 1 1 1 1 1 -MODULE_INDEX 521 1 1 1 1 1 1 -MODULE_INDEX 522 1 1 1 1 1 1 -MODULE_INDEX 523 1 1 1 1 1 1 -MODULE_INDEX 524 1 1 1 1 1 1 -MODULE_INDEX 525 1 1 1 1 1 1 -MODULE_INDEX 526 1 1 1 1 1 1 -MODULE_INDEX 527 1 1 1 1 1 1 -MODULE_INDEX 528 1 1 1 1 1 1 -MODULE_INDEX 529 1 1 1 1 1 1 -MODULE_INDEX 530 1 1 1 1 1 1 -MODULE_INDEX 531 1 1 1 1 1 1 -MODULE_INDEX 532 1 1 1 1 1 1 -MODULE_INDEX 533 1 1 1 1 1 1 -MODULE_INDEX 534 1 1 1 1 1 1 -MODULE_INDEX 535 1 1 1 1 1 1 -MODULE_INDEX 536 1 1 1 1 1 1 -MODULE_INDEX 537 1 1 1 1 1 1 -MODULE_INDEX 538 1 1 1 1 1 1 -MODULE_INDEX 539 1 1 1 1 1 1 -MODULE_INDEX 540 1 1 1 1 1 1 -MODULE_INDEX 541 1 1 1 1 1 1 -MODULE_INDEX 542 1 1 1 1 1 1 -MODULE_INDEX 543 1 1 1 1 1 1 -MODULE_INDEX 544 1 1 1 1 1 1 -MODULE_INDEX 545 1 1 1 1 1 1 -MODULE_INDEX 546 1 1 1 1 1 1 -MODULE_INDEX 547 1 1 1 1 1 1 -MODULE_INDEX 548 1 1 1 1 1 1 -MODULE_INDEX 549 1 1 1 1 1 1 -MODULE_INDEX 550 1 1 1 1 1 1 -MODULE_INDEX 551 1 1 1 1 1 1 -MODULE_INDEX 552 1 1 1 1 1 1 -MODULE_INDEX 553 1 1 1 1 1 1 -MODULE_INDEX 554 1 1 1 1 1 1 -MODULE_INDEX 555 1 1 1 1 1 1 -MODULE_INDEX 556 1 1 1 1 1 1 -MODULE_INDEX 557 1 1 1 1 1 1 -MODULE_INDEX 558 1 1 1 1 1 1 -MODULE_INDEX 559 1 1 1 1 1 1 -MODULE_INDEX 560 1 1 1 1 1 1 -MODULE_INDEX 561 1 1 1 1 1 1 -MODULE_INDEX 562 1 1 1 1 1 1 -MODULE_INDEX 563 1 1 1 1 1 1 -MODULE_INDEX 564 1 1 1 1 1 1 -MODULE_INDEX 565 1 1 1 1 1 1 -MODULE_INDEX 566 1 1 1 1 1 1 -MODULE_INDEX 567 1 1 1 1 1 1 -MODULE_INDEX 568 1 1 1 1 1 1 -MODULE_INDEX 569 1 1 1 1 1 1 -MODULE_INDEX 570 1 1 1 1 1 1 -MODULE_INDEX 571 1 1 1 1 1 1 -MODULE_INDEX 572 1 1 1 1 1 1 -MODULE_INDEX 573 1 1 1 1 1 1 -MODULE_INDEX 574 1 1 1 1 1 1 -MODULE_INDEX 575 1 1 1 1 1 1 -MODULE_INDEX 576 1 1 1 1 1 1 -MODULE_INDEX 577 1 1 1 1 1 1 -MODULE_INDEX 578 1 1 1 1 1 1 -MODULE_INDEX 579 1 1 1 1 1 1 -MODULE_INDEX 580 1 1 1 1 1 1 -MODULE_INDEX 581 1 1 1 1 1 1 -MODULE_INDEX 582 1 1 1 1 1 1 -MODULE_INDEX 583 1 1 1 1 1 1 -MODULE_INDEX 584 1 1 1 1 1 1 -MODULE_INDEX 585 1 1 1 1 1 1 -MODULE_INDEX 586 1 1 1 1 1 1 -MODULE_INDEX 587 1 1 1 1 1 1 -MODULE_INDEX 588 1 1 1 1 1 1 -MODULE_INDEX 589 1 1 1 1 1 1 -MODULE_INDEX 590 1 1 1 1 1 1 -MODULE_INDEX 591 1 1 1 1 1 1 -MODULE_INDEX 592 1 1 1 1 1 1 -MODULE_INDEX 593 1 1 1 1 1 1 -MODULE_INDEX 594 1 1 1 1 1 1 -MODULE_INDEX 595 1 1 1 1 1 1 -MODULE_INDEX 596 1 1 1 1 1 1 -MODULE_INDEX 597 1 1 1 1 1 1 -MODULE_INDEX 598 1 1 1 1 1 1 -MODULE_INDEX 599 1 1 1 1 1 1 -MODULE_INDEX 600 1 1 1 1 1 1 -MODULE_INDEX 601 1 1 1 1 1 1 -MODULE_INDEX 602 1 1 1 1 1 1 -MODULE_INDEX 603 1 1 1 1 1 1 -MODULE_INDEX 604 1 1 1 1 1 1 -MODULE_INDEX 605 1 1 1 1 1 1 -MODULE_INDEX 606 1 1 1 1 1 1 -MODULE_INDEX 607 1 1 1 1 1 1 -MODULE_INDEX 608 1 1 1 1 1 1 -MODULE_INDEX 609 1 1 1 1 1 1 -MODULE_INDEX 610 1 1 1 1 1 1 -MODULE_INDEX 611 1 1 1 1 1 1 -MODULE_INDEX 612 1 1 1 1 1 1 -MODULE_INDEX 613 1 1 1 1 1 1 -MODULE_INDEX 614 1 1 1 1 1 1 -MODULE_INDEX 615 1 1 1 1 1 1 -MODULE_INDEX 616 1 1 1 1 1 1 -MODULE_INDEX 617 1 1 1 1 1 1 -MODULE_INDEX 618 1 1 1 1 1 1 -MODULE_INDEX 619 1 1 1 1 1 1 -MODULE_INDEX 620 1 1 1 1 1 1 -MODULE_INDEX 621 1 1 1 1 1 1 -MODULE_INDEX 622 1 1 1 1 1 1 -MODULE_INDEX 623 1 1 1 1 1 1 -MODULE_INDEX 624 1 1 1 1 1 1 -MODULE_INDEX 625 1 1 1 1 1 1 -MODULE_INDEX 626 1 1 1 1 1 1 -MODULE_INDEX 627 1 1 1 1 1 1 -MODULE_INDEX 628 1 1 1 1 1 1 -MODULE_INDEX 629 1 1 1 1 1 1 -MODULE_INDEX 630 1 1 1 1 1 1 -MODULE_INDEX 631 1 1 1 1 1 1 -MODULE_INDEX 632 1 1 1 1 1 1 -MODULE_INDEX 633 1 1 1 1 1 1 -MODULE_INDEX 634 1 1 1 1 1 1 -MODULE_INDEX 635 1 1 1 1 1 1 -MODULE_INDEX 636 1 1 1 1 1 1 -MODULE_INDEX 637 1 1 1 1 1 1 -MODULE_INDEX 638 1 1 1 1 1 1 -MODULE_INDEX 639 1 1 1 1 1 1 -MODULE_INDEX 640 1 1 1 1 1 1 -MODULE_INDEX 641 1 1 1 1 1 1 -MODULE_INDEX 642 1 1 1 1 1 1 -MODULE_INDEX 643 1 1 1 1 1 1 -MODULE_INDEX 644 1 1 1 1 1 1 -MODULE_INDEX 645 1 1 1 1 1 1 -MODULE_INDEX 646 1 1 1 1 1 1 -MODULE_INDEX 647 1 1 1 1 1 1 -MODULE_INDEX 648 1 1 1 1 1 1 -MODULE_INDEX 649 1 1 1 1 1 1 -MODULE_INDEX 650 1 1 1 1 1 1 -MODULE_INDEX 651 1 1 1 1 1 1 -MODULE_INDEX 652 1 1 1 1 1 1 -MODULE_INDEX 653 1 1 1 1 1 1 -MODULE_INDEX 654 1 1 1 1 1 1 -MODULE_INDEX 655 1 1 1 1 1 1 -MODULE_INDEX 656 1 1 1 1 1 1 -MODULE_INDEX 657 1 1 1 1 1 1 -MODULE_INDEX 658 1 1 1 1 1 1 -MODULE_INDEX 659 1 1 1 1 1 1 -MODULE_INDEX 660 1 1 1 1 1 1 -MODULE_INDEX 661 1 1 1 1 1 1 -MODULE_INDEX 662 1 1 1 1 1 1 -MODULE_INDEX 663 1 1 1 1 1 1 -MODULE_INDEX 664 1 1 1 1 1 1 -MODULE_INDEX 665 1 1 1 1 1 1 -MODULE_INDEX 666 1 1 1 1 1 1 -MODULE_INDEX 667 1 1 1 1 1 1 -MODULE_INDEX 668 1 1 1 1 1 1 -MODULE_INDEX 669 1 1 1 1 1 1 -MODULE_INDEX 670 1 1 1 1 1 1 -MODULE_INDEX 671 1 1 1 1 1 1 -MODULE_INDEX 672 1 1 1 1 1 1 -MODULE_INDEX 673 1 1 1 1 1 1 -MODULE_INDEX 674 1 1 1 1 1 1 -MODULE_INDEX 675 1 1 1 1 1 1 -MODULE_INDEX 676 1 1 1 1 1 1 -MODULE_INDEX 677 1 1 1 1 1 1 -MODULE_INDEX 678 1 1 1 1 1 1 -MODULE_INDEX 679 1 1 1 1 1 1 -MODULE_INDEX 680 1 1 1 1 1 1 -MODULE_INDEX 681 1 1 1 1 1 1 -MODULE_INDEX 682 1 1 1 1 1 1 -MODULE_INDEX 683 1 1 1 1 1 1 -MODULE_INDEX 684 1 1 1 1 1 1 -MODULE_INDEX 685 1 1 1 1 1 1 -MODULE_INDEX 686 1 1 1 1 1 1 -MODULE_INDEX 687 1 1 1 1 1 1 -MODULE_INDEX 688 1 1 1 1 1 1 -MODULE_INDEX 689 1 1 1 1 1 1 -MODULE_INDEX 690 1 1 1 1 1 1 -MODULE_INDEX 691 1 1 1 1 1 1 -MODULE_INDEX 692 1 1 1 1 1 1 -MODULE_INDEX 693 1 1 1 1 1 1 -MODULE_INDEX 694 1 1 1 1 1 1 -MODULE_INDEX 695 1 1 1 1 1 1 -MODULE_INDEX 696 1 1 1 1 1 1 -MODULE_INDEX 697 1 1 1 1 1 1 -MODULE_INDEX 698 1 1 1 1 1 1 -MODULE_INDEX 699 1 1 1 1 1 1 -MODULE_INDEX 700 1 1 1 1 1 1 -MODULE_INDEX 701 1 1 1 1 1 1 -MODULE_INDEX 702 1 1 1 1 1 1 -MODULE_INDEX 703 1 1 1 1 1 1 -MODULE_INDEX 704 1 1 1 1 1 1 -MODULE_INDEX 705 1 1 1 1 1 1 -MODULE_INDEX 706 1 1 1 1 1 1 -MODULE_INDEX 707 1 1 1 1 1 1 -MODULE_INDEX 708 1 1 1 1 1 1 -MODULE_INDEX 709 1 1 1 1 1 1 -MODULE_INDEX 710 1 1 1 1 1 1 -MODULE_INDEX 711 1 1 1 1 1 1 -MODULE_INDEX 712 1 1 1 1 1 1 -MODULE_INDEX 713 1 1 1 1 1 1 -MODULE_INDEX 714 1 1 1 1 1 1 -MODULE_INDEX 715 1 1 1 1 1 1 -MODULE_INDEX 716 1 1 1 1 1 1 -MODULE_INDEX 717 1 1 1 1 1 1 -MODULE_INDEX 718 1 1 1 1 1 1 -MODULE_INDEX 719 1 1 1 1 1 1 -MODULE_INDEX 720 1 1 1 1 1 1 -MODULE_INDEX 721 1 1 1 1 1 1 -MODULE_INDEX 722 1 1 1 1 1 1 -MODULE_INDEX 723 1 1 1 1 1 1 -MODULE_INDEX 724 1 1 1 1 1 1 -MODULE_INDEX 725 1 1 1 1 1 1 -MODULE_INDEX 726 1 1 1 1 1 1 -MODULE_INDEX 727 1 1 1 1 1 1 -MODULE_INDEX 728 1 1 1 1 1 1 -MODULE_INDEX 729 1 1 1 1 1 1 -MODULE_INDEX 730 1 1 1 1 1 1 -MODULE_INDEX 731 1 1 1 1 1 1 -MODULE_INDEX 732 1 1 1 1 1 1 -MODULE_INDEX 733 1 1 1 1 1 1 -MODULE_INDEX 734 1 1 1 1 1 1 -MODULE_INDEX 735 1 1 1 1 1 1 -MODULE_INDEX 736 1 1 1 1 1 1 -MODULE_INDEX 737 1 1 1 1 1 1 -MODULE_INDEX 738 1 1 1 1 1 1 -MODULE_INDEX 739 1 1 1 1 1 1 -MODULE_INDEX 740 1 1 1 1 1 1 -MODULE_INDEX 741 1 1 1 1 1 1 -MODULE_INDEX 742 1 1 1 1 1 1 -MODULE_INDEX 743 1 1 1 1 1 1 -MODULE_INDEX 744 1 1 1 1 1 1 -MODULE_INDEX 745 1 1 1 1 1 1 -MODULE_INDEX 746 1 1 1 1 1 1 -MODULE_INDEX 747 1 1 1 1 1 1 -MODULE_INDEX 748 1 1 1 1 1 1 -MODULE_INDEX 749 1 1 1 1 1 1 -MODULE_INDEX 750 1 1 1 1 1 1 -MODULE_INDEX 751 1 1 1 1 1 1 -MODULE_INDEX 752 1 1 1 1 1 1 -MODULE_INDEX 753 1 1 1 1 1 1 -MODULE_INDEX 754 1 1 1 1 1 1 -MODULE_INDEX 755 1 1 1 1 1 1 -MODULE_INDEX 756 1 1 1 1 1 1 -MODULE_INDEX 757 1 1 1 1 1 1 -MODULE_INDEX 758 1 1 1 1 1 1 -MODULE_INDEX 759 1 1 1 1 1 1 -MODULE_INDEX 760 1 1 1 1 1 1 -MODULE_INDEX 761 1 1 1 1 1 1 -MODULE_INDEX 762 1 1 1 1 1 1 -MODULE_INDEX 763 1 1 1 1 1 1 -MODULE_INDEX 764 1 1 1 1 1 1 -MODULE_INDEX 765 1 1 1 1 1 1 -MODULE_INDEX 766 1 1 1 1 1 1 -MODULE_INDEX 767 1 1 1 1 1 1 -MODULE_INDEX 768 1 1 1 1 1 1 -MODULE_INDEX 769 1 1 1 1 1 1 -MODULE_INDEX 770 1 1 1 1 1 1 -MODULE_INDEX 771 1 1 1 1 1 1 -MODULE_INDEX 772 1 1 1 1 1 1 -MODULE_INDEX 773 1 1 1 1 1 1 -MODULE_INDEX 774 1 1 1 1 1 1 -MODULE_INDEX 775 1 1 1 1 1 1 -MODULE_INDEX 776 1 1 1 1 1 1 -MODULE_INDEX 777 1 1 1 1 1 1 -MODULE_INDEX 778 1 1 1 1 1 1 -MODULE_INDEX 779 1 1 1 1 1 1 -MODULE_INDEX 780 1 1 1 1 1 1 -MODULE_INDEX 781 1 1 1 1 1 1 -MODULE_INDEX 782 1 1 1 1 1 1 -MODULE_INDEX 783 1 1 1 1 1 1 -MODULE_INDEX 784 1 1 1 1 1 1 -MODULE_INDEX 785 1 1 1 1 1 1 -MODULE_INDEX 786 1 1 1 1 1 1 -MODULE_INDEX 787 1 1 1 1 1 1 -MODULE_INDEX 788 1 1 1 1 1 1 -MODULE_INDEX 789 1 1 1 1 1 1 -MODULE_INDEX 790 1 1 1 1 1 1 -MODULE_INDEX 791 1 1 1 1 1 1 -MODULE_INDEX 792 1 1 1 1 1 1 -MODULE_INDEX 793 1 1 1 1 1 1 -MODULE_INDEX 794 1 1 1 1 1 1 -MODULE_INDEX 795 1 1 1 1 1 1 -MODULE_INDEX 796 1 1 1 1 1 1 -MODULE_INDEX 797 1 1 1 1 1 1 -MODULE_INDEX 798 1 1 1 1 1 1 -MODULE_INDEX 799 1 1 1 1 1 1 -MODULE_INDEX 800 1 1 1 1 1 1 -MODULE_INDEX 801 1 1 1 1 1 1 -MODULE_INDEX 802 1 1 1 1 1 1 -MODULE_INDEX 803 1 1 1 1 1 1 -MODULE_INDEX 804 1 1 1 1 1 1 -MODULE_INDEX 805 1 1 1 1 1 1 -MODULE_INDEX 806 1 1 1 1 1 1 -MODULE_INDEX 807 1 1 1 1 1 1 -MODULE_INDEX 808 1 1 1 1 1 1 -MODULE_INDEX 809 1 1 1 1 1 1 -MODULE_INDEX 810 1 1 1 1 1 1 -MODULE_INDEX 811 1 1 1 1 1 1 -MODULE_INDEX 812 1 1 1 1 1 1 -MODULE_INDEX 813 1 1 1 1 1 1 -MODULE_INDEX 814 1 1 1 1 1 1 -MODULE_INDEX 815 1 1 1 1 1 1 -MODULE_INDEX 816 1 1 1 1 1 1 -MODULE_INDEX 817 1 1 1 1 1 1 -MODULE_INDEX 818 1 1 1 1 1 1 -MODULE_INDEX 819 1 1 1 1 1 1 -MODULE_INDEX 820 1 1 1 1 1 1 -MODULE_INDEX 821 1 1 1 1 1 1 -MODULE_INDEX 822 1 1 1 1 1 1 -MODULE_INDEX 823 1 1 1 1 1 1 -MODULE_INDEX 824 1 1 1 1 1 1 -MODULE_INDEX 825 1 1 1 1 1 1 -MODULE_INDEX 826 1 1 1 1 1 1 -MODULE_INDEX 827 1 1 1 1 1 1 -MODULE_INDEX 828 1 1 1 1 1 1 -MODULE_INDEX 829 1 1 1 1 1 1 -MODULE_INDEX 830 1 1 1 1 1 1 -MODULE_INDEX 831 1 1 1 1 1 1 -MODULE_INDEX 832 1 1 1 1 1 1 -MODULE_INDEX 833 1 1 1 1 1 1 -MODULE_INDEX 834 1 1 1 1 1 1 -MODULE_INDEX 835 1 1 1 1 1 1 -MODULE_INDEX 836 1 1 1 1 1 1 -MODULE_INDEX 837 1 1 1 1 1 1 -MODULE_INDEX 838 1 1 1 1 1 1 -MODULE_INDEX 839 1 1 1 1 1 1 -MODULE_INDEX 840 1 1 1 1 1 1 -MODULE_INDEX 841 1 1 1 1 1 1 -MODULE_INDEX 842 1 1 1 1 1 1 -MODULE_INDEX 843 1 1 1 1 1 1 -MODULE_INDEX 844 1 1 1 1 1 1 -MODULE_INDEX 845 1 1 1 1 1 1 -MODULE_INDEX 846 1 1 1 1 1 1 -MODULE_INDEX 847 1 1 1 1 1 1 -MODULE_INDEX 848 1 1 1 1 1 1 -MODULE_INDEX 849 1 1 1 1 1 1 -MODULE_INDEX 850 1 1 1 1 1 1 -MODULE_INDEX 851 1 1 1 1 1 1 -MODULE_INDEX 852 1 1 1 1 1 1 -MODULE_INDEX 853 1 1 1 1 1 1 -MODULE_INDEX 854 1 1 1 1 1 1 -MODULE_INDEX 855 1 1 1 1 1 1 -MODULE_INDEX 856 1 1 1 1 1 1 -MODULE_INDEX 857 1 1 1 1 1 1 -MODULE_INDEX 858 1 1 1 1 1 1 -MODULE_INDEX 859 1 1 1 1 1 1 -MODULE_INDEX 860 1 1 1 1 1 1 -MODULE_INDEX 861 1 1 1 1 1 1 -MODULE_INDEX 862 1 1 1 1 1 1 -MODULE_INDEX 863 1 1 1 1 1 1 -MODULE_INDEX 864 1 1 1 1 1 1 -MODULE_INDEX 865 1 1 1 1 1 1 -MODULE_INDEX 866 1 1 1 1 1 1 -MODULE_INDEX 867 1 1 1 1 1 1 -MODULE_INDEX 868 1 1 1 1 1 1 -MODULE_INDEX 869 1 1 1 1 1 1 -MODULE_INDEX 870 1 1 1 1 1 1 -MODULE_INDEX 871 1 1 1 1 1 1 -MODULE_INDEX 872 1 1 1 1 1 1 -MODULE_INDEX 873 1 1 1 1 1 1 -MODULE_INDEX 874 1 1 1 1 1 1 -MODULE_INDEX 875 1 1 1 1 1 1 -MODULE_INDEX 876 1 1 1 1 1 1 -MODULE_INDEX 877 1 1 1 1 1 1 -MODULE_INDEX 878 1 1 1 1 1 1 -MODULE_INDEX 879 1 1 1 1 1 1 -MODULE_INDEX 880 1 1 1 1 1 1 -MODULE_INDEX 881 1 1 1 1 1 1 -MODULE_INDEX 882 1 1 1 1 1 1 -MODULE_INDEX 883 1 1 1 1 1 1 -MODULE_INDEX 884 1 1 1 1 1 1 -MODULE_INDEX 885 1 1 1 1 1 1 -MODULE_INDEX 886 1 1 1 1 1 1 -MODULE_INDEX 887 1 1 1 1 1 1 -MODULE_INDEX 888 1 1 1 1 1 1 -MODULE_INDEX 889 1 1 1 1 1 1 -MODULE_INDEX 890 1 1 1 1 1 1 -MODULE_INDEX 891 1 1 1 1 1 1 -MODULE_INDEX 892 1 1 1 1 1 1 -MODULE_INDEX 893 1 1 1 1 1 1 -MODULE_INDEX 894 1 1 1 1 1 1 -MODULE_INDEX 895 1 1 1 1 1 1 -MODULE_INDEX 896 1 1 1 1 1 1 -MODULE_INDEX 897 1 1 1 1 1 1 -MODULE_INDEX 898 1 1 1 1 1 1 -MODULE_INDEX 899 1 1 1 1 1 1 -MODULE_INDEX 900 1 1 1 1 1 1 -MODULE_INDEX 901 1 1 1 1 1 1 -MODULE_INDEX 902 1 1 1 1 1 1 -MODULE_INDEX 903 1 1 1 1 1 1 -MODULE_INDEX 904 1 1 1 1 1 1 -MODULE_INDEX 905 1 1 1 1 1 1 -MODULE_INDEX 906 1 1 1 1 1 1 -MODULE_INDEX 907 1 1 1 1 1 1 -MODULE_INDEX 908 1 1 1 1 1 1 -MODULE_INDEX 909 1 1 1 1 1 1 -MODULE_INDEX 910 1 1 1 1 1 1 -MODULE_INDEX 911 1 1 1 1 1 1 -MODULE_INDEX 912 1 1 1 1 1 1 -MODULE_INDEX 913 1 1 1 1 1 1 -MODULE_INDEX 914 1 1 1 1 1 1 -MODULE_INDEX 915 1 1 1 1 1 1 -MODULE_INDEX 916 1 1 1 1 1 1 -MODULE_INDEX 917 1 1 1 1 1 1 -MODULE_INDEX 918 1 1 1 1 1 1 -MODULE_INDEX 919 1 1 1 1 1 1 -MODULE_INDEX 920 1 1 1 1 1 1 -MODULE_INDEX 921 1 1 1 1 1 1 -MODULE_INDEX 922 1 1 1 1 1 1 -MODULE_INDEX 923 1 1 1 1 1 1 -MODULE_INDEX 924 1 1 1 1 1 1 -MODULE_INDEX 925 1 1 1 1 1 1 -MODULE_INDEX 926 1 1 1 1 1 1 -MODULE_INDEX 927 1 1 1 1 1 1 -MODULE_INDEX 928 1 1 1 1 1 1 -MODULE_INDEX 929 1 1 1 1 1 1 -MODULE_INDEX 930 1 1 1 1 1 1 -MODULE_INDEX 931 1 1 1 1 1 1 -MODULE_INDEX 932 1 1 1 1 1 1 -MODULE_INDEX 933 1 1 1 1 1 1 -MODULE_INDEX 934 1 1 1 1 1 1 -MODULE_INDEX 935 1 1 1 1 1 1 -MODULE_INDEX 936 1 1 1 1 1 1 -MODULE_INDEX 937 1 1 1 1 1 1 -MODULE_INDEX 938 1 1 1 1 1 1 -MODULE_INDEX 939 1 1 1 1 1 1 -MODULE_INDEX 940 1 1 1 1 1 1 -MODULE_INDEX 941 1 1 1 1 1 1 -MODULE_INDEX 942 1 1 1 1 1 1 -MODULE_INDEX 943 1 1 1 1 1 1 -MODULE_INDEX 944 1 1 1 1 1 1 -MODULE_INDEX 945 1 1 1 1 1 1 -MODULE_INDEX 946 1 1 1 1 1 1 -MODULE_INDEX 947 1 1 1 1 1 1 -MODULE_INDEX 948 1 1 1 1 1 1 -MODULE_INDEX 949 1 1 1 1 1 1 -MODULE_INDEX 950 1 1 1 1 1 1 -MODULE_INDEX 951 1 1 1 1 1 1 -MODULE_INDEX 952 1 1 1 1 1 1 -MODULE_INDEX 953 1 1 1 1 1 1 -MODULE_INDEX 954 1 1 1 1 1 1 -MODULE_INDEX 955 1 1 1 1 1 1 -MODULE_INDEX 956 1 1 1 1 1 1 -MODULE_INDEX 957 1 1 1 1 1 1 -MODULE_INDEX 958 1 1 1 1 1 1 -MODULE_INDEX 959 1 1 1 1 1 1 -MODULE_INDEX 960 1 1 1 1 1 1 -MODULE_INDEX 961 1 1 1 1 1 1 -MODULE_INDEX 962 1 1 1 1 1 1 -MODULE_INDEX 963 1 1 1 1 1 1 -MODULE_INDEX 964 1 1 1 1 1 1 -MODULE_INDEX 965 1 1 1 1 1 1 -MODULE_INDEX 966 1 1 1 1 1 1 -MODULE_INDEX 967 1 1 1 1 1 1 -MODULE_INDEX 968 1 1 1 1 1 1 -MODULE_INDEX 969 1 1 1 1 1 1 -MODULE_INDEX 970 1 1 1 1 1 1 -MODULE_INDEX 971 1 1 1 1 1 1 -MODULE_INDEX 972 1 1 1 1 1 1 -MODULE_INDEX 973 1 1 1 1 1 1 -MODULE_INDEX 974 1 1 1 1 1 1 -MODULE_INDEX 975 1 1 1 1 1 1 -MODULE_INDEX 976 1 1 1 1 1 1 -MODULE_INDEX 977 1 1 1 1 1 1 -MODULE_INDEX 978 1 1 1 1 1 1 -MODULE_INDEX 979 1 1 1 1 1 1 -MODULE_INDEX 980 1 1 1 1 1 1 -MODULE_INDEX 981 1 1 1 1 1 1 -MODULE_INDEX 982 1 1 1 1 1 1 -MODULE_INDEX 983 1 1 1 1 1 1 -MODULE_INDEX 984 1 1 1 1 1 1 -MODULE_INDEX 985 1 1 1 1 1 1 -MODULE_INDEX 986 1 1 1 1 1 1 -MODULE_INDEX 987 1 1 1 1 1 1 -MODULE_INDEX 988 1 1 1 1 1 1 -MODULE_INDEX 989 1 1 1 1 1 1 -MODULE_INDEX 990 1 1 1 1 1 1 -MODULE_INDEX 991 1 1 1 1 1 1 -MODULE_INDEX 992 1 1 1 1 1 1 -MODULE_INDEX 993 1 1 1 1 1 1 -MODULE_INDEX 994 1 1 1 1 1 1 -MODULE_INDEX 995 1 1 1 1 1 1 -MODULE_INDEX 996 1 1 1 1 1 1 -MODULE_INDEX 997 1 1 1 1 1 1 -MODULE_INDEX 998 1 1 1 1 1 1 -MODULE_INDEX 999 1 1 1 1 1 1 -MODULE_INDEX 1000 1 1 1 1 1 1 -MODULE_INDEX 1001 1 1 1 1 1 1 -MODULE_INDEX 1002 1 1 1 1 1 1 -MODULE_INDEX 1003 1 1 1 1 1 1 -MODULE_INDEX 1004 1 1 1 1 1 1 -MODULE_INDEX 1005 1 1 1 1 1 1 -MODULE_INDEX 1006 1 1 1 1 1 1 -MODULE_INDEX 1007 1 1 1 1 1 1 -MODULE_INDEX 1008 1 1 1 1 1 1 -MODULE_INDEX 1009 1 1 1 1 1 1 -MODULE_INDEX 1010 1 1 1 1 1 1 -MODULE_INDEX 1011 1 1 1 1 1 1 -MODULE_INDEX 1012 1 1 1 1 1 1 -MODULE_INDEX 1013 1 1 1 1 1 1 -MODULE_INDEX 1014 1 1 1 1 1 1 -MODULE_INDEX 1015 1 1 1 1 1 1 -MODULE_INDEX 1016 1 1 1 1 1 1 -MODULE_INDEX 1017 1 1 1 1 1 1 -MODULE_INDEX 1018 1 1 1 1 1 1 -MODULE_INDEX 1019 1 1 1 1 1 1 -MODULE_INDEX 1020 1 1 1 1 1 1 -MODULE_INDEX 1021 1 1 1 1 1 1 -MODULE_INDEX 1022 1 1 1 1 1 1 -MODULE_INDEX 1023 1 1 1 1 1 1 -MODULE_INDEX 1024 1 1 1 1 1 1 -MODULE_INDEX 1025 1 1 1 1 1 1 -MODULE_INDEX 1026 1 1 1 1 1 1 -MODULE_INDEX 1027 1 1 1 1 1 1 -MODULE_INDEX 1028 1 1 1 1 1 1 -MODULE_INDEX 1029 1 1 1 1 1 1 -MODULE_INDEX 1030 1 1 1 1 1 1 -MODULE_INDEX 1031 1 1 1 1 1 1 -MODULE_INDEX 1032 1 1 1 1 1 1 -MODULE_INDEX 1033 1 1 1 1 1 1 -MODULE_INDEX 1034 1 1 1 1 1 1 -MODULE_INDEX 1035 1 1 1 1 1 1 -MODULE_INDEX 1036 1 1 1 1 1 1 -MODULE_INDEX 1037 1 1 1 1 1 1 -MODULE_INDEX 1038 1 1 1 1 1 1 -MODULE_INDEX 1039 1 1 1 1 1 1 -MODULE_INDEX 1040 1 1 1 1 1 1 -MODULE_INDEX 1041 1 1 1 1 1 1 -MODULE_INDEX 1042 1 1 1 1 1 1 -MODULE_INDEX 1043 1 1 1 1 1 1 -MODULE_INDEX 1044 1 1 1 1 1 1 -MODULE_INDEX 1045 1 1 1 1 1 1 -MODULE_INDEX 1046 1 1 1 1 1 1 -MODULE_INDEX 1047 1 1 1 1 1 1 -MODULE_INDEX 1048 1 1 1 1 1 1 -MODULE_INDEX 1049 1 1 1 1 1 1 -MODULE_INDEX 1050 1 1 1 1 1 1 -MODULE_INDEX 1051 1 1 1 1 1 1 -MODULE_INDEX 1052 1 1 1 1 1 1 -MODULE_INDEX 1053 1 1 1 1 1 1 -MODULE_INDEX 1054 1 1 1 1 1 1 -MODULE_INDEX 1055 1 1 1 1 1 1 -MODULE_INDEX 1056 1 1 1 1 1 1 -MODULE_INDEX 1057 1 1 1 1 1 1 -MODULE_INDEX 1058 1 1 1 1 1 1 -MODULE_INDEX 1059 1 1 1 1 1 1 -MODULE_INDEX 1060 1 1 1 1 1 1 -MODULE_INDEX 1061 1 1 1 1 1 1 -MODULE_INDEX 1062 1 1 1 1 1 1 -MODULE_INDEX 1063 1 1 1 1 1 1 -MODULE_INDEX 1064 1 1 1 1 1 1 -MODULE_INDEX 1065 1 1 1 1 1 1 -MODULE_INDEX 1066 1 1 1 1 1 1 -MODULE_INDEX 1067 1 1 1 1 1 1 -MODULE_INDEX 1068 1 1 1 1 1 1 -MODULE_INDEX 1069 1 1 1 1 1 1 -MODULE_INDEX 1070 1 1 1 1 1 1 -MODULE_INDEX 1071 1 1 1 1 1 1 -MODULE_INDEX 1072 1 1 1 1 1 1 -MODULE_INDEX 1073 1 1 1 1 1 1 -MODULE_INDEX 1074 1 1 1 1 1 1 -MODULE_INDEX 1075 1 1 1 1 1 1 -MODULE_INDEX 1076 1 1 1 1 1 1 -MODULE_INDEX 1077 1 1 1 1 1 1 -MODULE_INDEX 1078 1 1 1 1 1 1 -MODULE_INDEX 1079 1 1 1 1 1 1 -MODULE_INDEX 1080 1 1 1 1 1 1 -MODULE_INDEX 1081 1 1 1 1 1 1 -MODULE_INDEX 1082 1 1 1 1 1 1 -MODULE_INDEX 1083 1 1 1 1 1 1 -MODULE_INDEX 1084 1 1 1 1 1 1 -MODULE_INDEX 1085 1 1 1 1 1 1 -MODULE_INDEX 1086 1 1 1 1 1 1 -MODULE_INDEX 1087 1 1 1 1 1 1 -MODULE_INDEX 1088 1 1 1 1 1 1 -MODULE_INDEX 1089 1 1 1 1 1 1 -MODULE_INDEX 1090 1 1 1 1 1 1 -MODULE_INDEX 1091 1 1 1 1 1 1 -MODULE_INDEX 1092 1 1 1 1 1 1 -MODULE_INDEX 1093 1 1 1 1 1 1 -MODULE_INDEX 1094 1 1 1 1 1 1 -MODULE_INDEX 1095 1 1 1 1 1 1 -MODULE_INDEX 1096 1 1 1 1 1 1 -MODULE_INDEX 1097 1 1 1 1 1 1 -MODULE_INDEX 1098 1 1 1 1 1 1 -MODULE_INDEX 1099 1 1 1 1 1 1 -MODULE_INDEX 1100 1 1 1 1 1 1 -MODULE_INDEX 1101 1 1 1 1 1 1 -MODULE_INDEX 1102 1 1 1 1 1 1 -MODULE_INDEX 1103 1 1 1 1 1 1 -MODULE_INDEX 1104 1 1 1 1 1 1 -MODULE_INDEX 1105 1 1 1 1 1 1 -MODULE_INDEX 1106 1 1 1 1 1 1 -MODULE_INDEX 1107 1 1 1 1 1 1 -MODULE_INDEX 1108 1 1 1 1 1 1 -MODULE_INDEX 1109 1 1 1 1 1 1 -MODULE_INDEX 1110 1 1 1 1 1 1 -MODULE_INDEX 1111 1 1 1 1 1 1 -MODULE_INDEX 1112 1 1 1 1 1 1 -MODULE_INDEX 1113 1 1 1 1 1 1 -MODULE_INDEX 1114 1 1 1 1 1 1 -MODULE_INDEX 1115 1 1 1 1 1 1 -MODULE_INDEX 1116 1 1 1 1 1 1 -MODULE_INDEX 1117 1 1 1 1 1 1 -MODULE_INDEX 1118 1 1 1 1 1 1 -MODULE_INDEX 1119 1 1 1 1 1 1 -MODULE_INDEX 1120 1 1 1 1 1 1 -MODULE_INDEX 1121 1 1 1 1 1 1 -MODULE_INDEX 1122 1 1 1 1 1 1 -MODULE_INDEX 1123 1 1 1 1 1 1 -MODULE_INDEX 1124 1 1 1 1 1 1 -MODULE_INDEX 1125 1 1 1 1 1 1 -MODULE_INDEX 1126 1 1 1 1 1 1 -MODULE_INDEX 1127 1 1 1 1 1 1 -MODULE_INDEX 1128 1 1 1 1 1 1 -MODULE_INDEX 1129 1 1 1 1 1 1 -MODULE_INDEX 1130 1 1 1 1 1 1 -MODULE_INDEX 1131 1 1 1 1 1 1 -MODULE_INDEX 1132 1 1 1 1 1 1 -MODULE_INDEX 1133 1 1 1 1 1 1 -MODULE_INDEX 1134 1 1 1 1 1 1 -MODULE_INDEX 1135 1 1 1 1 1 1 -MODULE_INDEX 1136 1 1 1 1 1 1 -MODULE_INDEX 1137 1 1 1 1 1 1 -MODULE_INDEX 1138 1 1 1 1 1 1 -MODULE_INDEX 1139 1 1 1 1 1 1 -MODULE_INDEX 1140 1 1 1 1 1 1 -MODULE_INDEX 1141 1 1 1 1 1 1 -MODULE_INDEX 1142 1 1 1 1 1 1 -MODULE_INDEX 1143 1 1 1 1 1 1 -MODULE_INDEX 1144 1 1 1 1 1 1 -MODULE_INDEX 1145 1 1 1 1 1 1 -MODULE_INDEX 1146 1 1 1 1 1 1 -MODULE_INDEX 1147 1 1 1 1 1 1 -MODULE_INDEX 1148 1 1 1 1 1 1 -MODULE_INDEX 1149 1 1 1 1 1 1 -MODULE_INDEX 1150 1 1 1 1 1 1 -MODULE_INDEX 1151 1 1 1 1 1 1 -MODULE_INDEX 1152 1 1 1 1 1 1 -MODULE_INDEX 1153 1 1 1 1 1 1 -MODULE_INDEX 1154 1 1 1 1 1 1 -MODULE_INDEX 1155 1 1 1 1 1 1 -MODULE_INDEX 1156 1 1 1 1 1 1 -MODULE_INDEX 1157 1 1 1 1 1 1 -MODULE_INDEX 1158 1 1 1 1 1 1 -MODULE_INDEX 1159 1 1 1 1 1 1 -MODULE_INDEX 1160 1 1 1 1 1 1 -MODULE_INDEX 1161 1 1 1 1 1 1 -MODULE_INDEX 1162 1 1 1 1 1 1 -MODULE_INDEX 1163 1 1 1 1 1 1 -MODULE_INDEX 1164 1 1 1 1 1 1 -MODULE_INDEX 1165 1 1 1 1 1 1 -MODULE_INDEX 1166 1 1 1 1 1 1 -MODULE_INDEX 1167 1 1 1 1 1 1 -MODULE_INDEX 1168 1 1 1 1 1 1 -MODULE_INDEX 1169 1 1 1 1 1 1 -MODULE_INDEX 1170 1 1 1 1 1 1 -MODULE_INDEX 1171 1 1 1 1 1 1 -MODULE_INDEX 1172 1 1 1 1 1 1 -MODULE_INDEX 1173 1 1 1 1 1 1 -MODULE_INDEX 1174 1 1 1 1 1 1 -MODULE_INDEX 1175 1 1 1 1 1 1 -MODULE_INDEX 1176 1 1 1 1 1 1 -MODULE_INDEX 1177 1 1 1 1 1 1 -MODULE_INDEX 1178 1 1 1 1 1 1 -MODULE_INDEX 1179 1 1 1 1 1 1 -MODULE_INDEX 1180 1 1 1 1 1 1 -MODULE_INDEX 1181 1 1 1 1 1 1 -MODULE_INDEX 1182 1 1 1 1 1 1 -MODULE_INDEX 1183 1 1 1 1 1 1 -MODULE_INDEX 1184 1 1 1 1 1 1 -MODULE_INDEX 1185 1 1 1 1 1 1 -MODULE_INDEX 1186 1 1 1 1 1 1 -MODULE_INDEX 1187 1 1 1 1 1 1 -MODULE_INDEX 1188 1 1 1 1 1 1 -MODULE_INDEX 1189 1 1 1 1 1 1 -MODULE_INDEX 1190 1 1 1 1 1 1 -MODULE_INDEX 1191 1 1 1 1 1 1 -MODULE_INDEX 1192 1 1 1 1 1 1 -MODULE_INDEX 1193 1 1 1 1 1 1 -MODULE_INDEX 1194 1 1 1 1 1 1 -MODULE_INDEX 1195 1 1 1 1 1 1 -MODULE_INDEX 1196 1 1 1 1 1 1 -MODULE_INDEX 1197 1 1 1 1 1 1 -MODULE_INDEX 1198 1 1 1 1 1 1 -MODULE_INDEX 1199 1 1 1 1 1 1 -MODULE_INDEX 1200 1 1 1 1 1 1 -MODULE_INDEX 1201 1 1 1 1 1 1 -MODULE_INDEX 1202 1 1 1 1 1 1 -MODULE_INDEX 1203 1 1 1 1 1 1 -MODULE_INDEX 1204 1 1 1 1 1 1 -MODULE_INDEX 1205 1 1 1 1 1 1 -MODULE_INDEX 1206 1 1 1 1 1 1 -MODULE_INDEX 1207 1 1 1 1 1 1 -MODULE_INDEX 1208 1 1 1 1 1 1 -MODULE_INDEX 1209 1 1 1 1 1 1 -MODULE_INDEX 1210 1 1 1 1 1 1 -MODULE_INDEX 1211 1 1 1 1 1 1 -MODULE_INDEX 1212 1 1 1 1 1 1 -MODULE_INDEX 1213 1 1 1 1 1 1 -MODULE_INDEX 1214 1 1 1 1 1 1 -MODULE_INDEX 1215 1 1 1 1 1 1 -MODULE_INDEX 1216 1 1 1 1 1 1 -MODULE_INDEX 1217 1 1 1 1 1 1 -MODULE_INDEX 1218 1 1 1 1 1 1 -MODULE_INDEX 1219 1 1 1 1 1 1 -MODULE_INDEX 1220 1 1 1 1 1 1 -MODULE_INDEX 1221 1 1 1 1 1 1 -MODULE_INDEX 1222 1 1 1 1 1 1 -MODULE_INDEX 1223 1 1 1 1 1 1 -MODULE_INDEX 1224 1 1 1 1 1 1 -MODULE_INDEX 1225 1 1 1 1 1 1 -MODULE_INDEX 1226 1 1 1 1 1 1 -MODULE_INDEX 1227 1 1 1 1 1 1 -MODULE_INDEX 1228 1 1 1 1 1 1 -MODULE_INDEX 1229 1 1 1 1 1 1 -MODULE_INDEX 1230 1 1 1 1 1 1 -MODULE_INDEX 1231 1 1 1 1 1 1 -MODULE_INDEX 1232 1 1 1 1 1 1 -MODULE_INDEX 1233 1 1 1 1 1 1 -MODULE_INDEX 1234 1 1 1 1 1 1 -MODULE_INDEX 1235 1 1 1 1 1 1 -MODULE_INDEX 1236 1 1 1 1 1 1 -MODULE_INDEX 1237 1 1 1 1 1 1 -MODULE_INDEX 1238 1 1 1 1 1 1 -MODULE_INDEX 1239 1 1 1 1 1 1 -MODULE_INDEX 1240 1 1 1 1 1 1 -MODULE_INDEX 1241 1 1 1 1 1 1 -MODULE_INDEX 1242 1 1 1 1 1 1 -MODULE_INDEX 1243 1 1 1 1 1 1 -MODULE_INDEX 1244 1 1 1 1 1 1 -MODULE_INDEX 1245 1 1 1 1 1 1 -MODULE_INDEX 1246 1 1 1 1 1 1 -MODULE_INDEX 1247 1 1 1 1 1 1 -# layer 6 -MODULE_INDEX 1248 1 1 1 1 1 1 -MODULE_INDEX 1249 1 1 1 1 1 1 -MODULE_INDEX 1250 1 1 1 1 1 1 -MODULE_INDEX 1251 1 1 1 1 1 1 -MODULE_INDEX 1252 1 1 1 1 1 1 -MODULE_INDEX 1253 1 1 1 1 1 1 -MODULE_INDEX 1254 1 1 1 1 1 1 -MODULE_INDEX 1255 1 1 1 1 1 1 -MODULE_INDEX 1256 1 1 1 1 1 1 -MODULE_INDEX 1257 1 1 1 1 1 1 -MODULE_INDEX 1258 1 1 1 1 1 1 -MODULE_INDEX 1259 1 1 1 1 1 1 -MODULE_INDEX 1260 1 1 1 1 1 1 -MODULE_INDEX 1261 1 1 1 1 1 1 -MODULE_INDEX 1262 1 1 1 1 1 1 -MODULE_INDEX 1263 1 1 1 1 1 1 -MODULE_INDEX 1264 1 1 1 1 1 1 -MODULE_INDEX 1265 1 1 1 1 1 1 -MODULE_INDEX 1266 1 1 1 1 1 1 -MODULE_INDEX 1267 1 1 1 1 1 1 -MODULE_INDEX 1268 1 1 1 1 1 1 -MODULE_INDEX 1269 1 1 1 1 1 1 -MODULE_INDEX 1270 1 1 1 1 1 1 -MODULE_INDEX 1271 1 1 1 1 1 1 -MODULE_INDEX 1272 1 1 1 1 1 1 -MODULE_INDEX 1273 1 1 1 1 1 1 -MODULE_INDEX 1274 1 1 1 1 1 1 -MODULE_INDEX 1275 1 1 1 1 1 1 -MODULE_INDEX 1276 1 1 1 1 1 1 -MODULE_INDEX 1277 1 1 1 1 1 1 -MODULE_INDEX 1278 1 1 1 1 1 1 -MODULE_INDEX 1279 1 1 1 1 1 1 -MODULE_INDEX 1280 1 1 1 1 1 1 -MODULE_INDEX 1281 1 1 1 1 1 1 -MODULE_INDEX 1282 1 1 1 1 1 1 -MODULE_INDEX 1283 1 1 1 1 1 1 -MODULE_INDEX 1284 1 1 1 1 1 1 -MODULE_INDEX 1285 1 1 1 1 1 1 -MODULE_INDEX 1286 1 1 1 1 1 1 -MODULE_INDEX 1287 1 1 1 1 1 1 -MODULE_INDEX 1288 1 1 1 1 1 1 -MODULE_INDEX 1289 1 1 1 1 1 1 -MODULE_INDEX 1290 1 1 1 1 1 1 -MODULE_INDEX 1291 1 1 1 1 1 1 -MODULE_INDEX 1292 1 1 1 1 1 1 -MODULE_INDEX 1293 1 1 1 1 1 1 -MODULE_INDEX 1294 1 1 1 1 1 1 -MODULE_INDEX 1295 1 1 1 1 1 1 -MODULE_INDEX 1296 1 1 1 1 1 1 -MODULE_INDEX 1297 1 1 1 1 1 1 -MODULE_INDEX 1298 1 1 1 1 1 1 -MODULE_INDEX 1299 1 1 1 1 1 1 -MODULE_INDEX 1300 1 1 1 1 1 1 -MODULE_INDEX 1301 1 1 1 1 1 1 -MODULE_INDEX 1302 1 1 1 1 1 1 -MODULE_INDEX 1303 1 1 1 1 1 1 -MODULE_INDEX 1304 1 1 1 1 1 1 -MODULE_INDEX 1305 1 1 1 1 1 1 -MODULE_INDEX 1306 1 1 1 1 1 1 -MODULE_INDEX 1307 1 1 1 1 1 1 -MODULE_INDEX 1308 1 1 1 1 1 1 -MODULE_INDEX 1309 1 1 1 1 1 1 -MODULE_INDEX 1310 1 1 1 1 1 1 -MODULE_INDEX 1311 1 1 1 1 1 1 -MODULE_INDEX 1312 1 1 1 1 1 1 -MODULE_INDEX 1313 1 1 1 1 1 1 -MODULE_INDEX 1314 1 1 1 1 1 1 -MODULE_INDEX 1315 1 1 1 1 1 1 -MODULE_INDEX 1316 1 1 1 1 1 1 -MODULE_INDEX 1317 1 1 1 1 1 1 -MODULE_INDEX 1318 1 1 1 1 1 1 -MODULE_INDEX 1319 1 1 1 1 1 1 -MODULE_INDEX 1320 1 1 1 1 1 1 -MODULE_INDEX 1321 1 1 1 1 1 1 -MODULE_INDEX 1322 1 1 1 1 1 1 -MODULE_INDEX 1323 1 1 1 1 1 1 -MODULE_INDEX 1324 1 1 1 1 1 1 -MODULE_INDEX 1325 1 1 1 1 1 1 -MODULE_INDEX 1326 1 1 1 1 1 1 -MODULE_INDEX 1327 1 1 1 1 1 1 -MODULE_INDEX 1328 1 1 1 1 1 1 -MODULE_INDEX 1329 1 1 1 1 1 1 -MODULE_INDEX 1330 1 1 1 1 1 1 -MODULE_INDEX 1331 1 1 1 1 1 1 -MODULE_INDEX 1332 1 1 1 1 1 1 -MODULE_INDEX 1333 1 1 1 1 1 1 -MODULE_INDEX 1334 1 1 1 1 1 1 -MODULE_INDEX 1335 1 1 1 1 1 1 -MODULE_INDEX 1336 1 1 1 1 1 1 -MODULE_INDEX 1337 1 1 1 1 1 1 -MODULE_INDEX 1338 1 1 1 1 1 1 -MODULE_INDEX 1339 1 1 1 1 1 1 -MODULE_INDEX 1340 1 1 1 1 1 1 -MODULE_INDEX 1341 1 1 1 1 1 1 -MODULE_INDEX 1342 1 1 1 1 1 1 -MODULE_INDEX 1343 1 1 1 1 1 1 -MODULE_INDEX 1344 1 1 1 1 1 1 -MODULE_INDEX 1345 1 1 1 1 1 1 -MODULE_INDEX 1346 1 1 1 1 1 1 -MODULE_INDEX 1347 1 1 1 1 1 1 -MODULE_INDEX 1348 1 1 1 1 1 1 -MODULE_INDEX 1349 1 1 1 1 1 1 -MODULE_INDEX 1350 1 1 1 1 1 1 -MODULE_INDEX 1351 1 1 1 1 1 1 -MODULE_INDEX 1352 1 1 1 1 1 1 -MODULE_INDEX 1353 1 1 1 1 1 1 -MODULE_INDEX 1354 1 1 1 1 1 1 -MODULE_INDEX 1355 1 1 1 1 1 1 -MODULE_INDEX 1356 1 1 1 1 1 1 -MODULE_INDEX 1357 1 1 1 1 1 1 -MODULE_INDEX 1358 1 1 1 1 1 1 -MODULE_INDEX 1359 1 1 1 1 1 1 -MODULE_INDEX 1360 1 1 1 1 1 1 -MODULE_INDEX 1361 1 1 1 1 1 1 -MODULE_INDEX 1362 1 1 1 1 1 1 -MODULE_INDEX 1363 1 1 1 1 1 1 -MODULE_INDEX 1364 1 1 1 1 1 1 -MODULE_INDEX 1365 1 1 1 1 1 1 -MODULE_INDEX 1366 1 1 1 1 1 1 -MODULE_INDEX 1367 1 1 1 1 1 1 -MODULE_INDEX 1368 1 1 1 1 1 1 -MODULE_INDEX 1369 1 1 1 1 1 1 -MODULE_INDEX 1370 1 1 1 1 1 1 -MODULE_INDEX 1371 1 1 1 1 1 1 -MODULE_INDEX 1372 1 1 1 1 1 1 -MODULE_INDEX 1373 1 1 1 1 1 1 -MODULE_INDEX 1374 1 1 1 1 1 1 -MODULE_INDEX 1375 1 1 1 1 1 1 -MODULE_INDEX 1376 1 1 1 1 1 1 -MODULE_INDEX 1377 1 1 1 1 1 1 -MODULE_INDEX 1378 1 1 1 1 1 1 -MODULE_INDEX 1379 1 1 1 1 1 1 -MODULE_INDEX 1380 1 1 1 1 1 1 -MODULE_INDEX 1381 1 1 1 1 1 1 -MODULE_INDEX 1382 1 1 1 1 1 1 -MODULE_INDEX 1383 1 1 1 1 1 1 -MODULE_INDEX 1384 1 1 1 1 1 1 -MODULE_INDEX 1385 1 1 1 1 1 1 -MODULE_INDEX 1386 1 1 1 1 1 1 -MODULE_INDEX 1387 1 1 1 1 1 1 -MODULE_INDEX 1388 1 1 1 1 1 1 -MODULE_INDEX 1389 1 1 1 1 1 1 -MODULE_INDEX 1390 1 1 1 1 1 1 -MODULE_INDEX 1391 1 1 1 1 1 1 -MODULE_INDEX 1392 1 1 1 1 1 1 -MODULE_INDEX 1393 1 1 1 1 1 1 -MODULE_INDEX 1394 1 1 1 1 1 1 -MODULE_INDEX 1395 1 1 1 1 1 1 -MODULE_INDEX 1396 1 1 1 1 1 1 -MODULE_INDEX 1397 1 1 1 1 1 1 -MODULE_INDEX 1398 1 1 1 1 1 1 -MODULE_INDEX 1399 1 1 1 1 1 1 -MODULE_INDEX 1400 1 1 1 1 1 1 -MODULE_INDEX 1401 1 1 1 1 1 1 -MODULE_INDEX 1402 1 1 1 1 1 1 -MODULE_INDEX 1403 1 1 1 1 1 1 -MODULE_INDEX 1404 1 1 1 1 1 1 -MODULE_INDEX 1405 1 1 1 1 1 1 -MODULE_INDEX 1406 1 1 1 1 1 1 -MODULE_INDEX 1407 1 1 1 1 1 1 -MODULE_INDEX 1408 1 1 1 1 1 1 -MODULE_INDEX 1409 1 1 1 1 1 1 -MODULE_INDEX 1410 1 1 1 1 1 1 -MODULE_INDEX 1411 1 1 1 1 1 1 -MODULE_INDEX 1412 1 1 1 1 1 1 -MODULE_INDEX 1413 1 1 1 1 1 1 -MODULE_INDEX 1414 1 1 1 1 1 1 -MODULE_INDEX 1415 1 1 1 1 1 1 -MODULE_INDEX 1416 1 1 1 1 1 1 -MODULE_INDEX 1417 1 1 1 1 1 1 -MODULE_INDEX 1418 1 1 1 1 1 1 -MODULE_INDEX 1419 1 1 1 1 1 1 -MODULE_INDEX 1420 1 1 1 1 1 1 -MODULE_INDEX 1421 1 1 1 1 1 1 -MODULE_INDEX 1422 1 1 1 1 1 1 -MODULE_INDEX 1423 1 1 1 1 1 1 -MODULE_INDEX 1424 1 1 1 1 1 1 -MODULE_INDEX 1425 1 1 1 1 1 1 -MODULE_INDEX 1426 1 1 1 1 1 1 -MODULE_INDEX 1427 1 1 1 1 1 1 -MODULE_INDEX 1428 1 1 1 1 1 1 -MODULE_INDEX 1429 1 1 1 1 1 1 -MODULE_INDEX 1430 1 1 1 1 1 1 -MODULE_INDEX 1431 1 1 1 1 1 1 -MODULE_INDEX 1432 1 1 1 1 1 1 -MODULE_INDEX 1433 1 1 1 1 1 1 -MODULE_INDEX 1434 1 1 1 1 1 1 -MODULE_INDEX 1435 1 1 1 1 1 1 -MODULE_INDEX 1436 1 1 1 1 1 1 -MODULE_INDEX 1437 1 1 1 1 1 1 -MODULE_INDEX 1438 1 1 1 1 1 1 -MODULE_INDEX 1439 1 1 1 1 1 1 -MODULE_INDEX 1440 1 1 1 1 1 1 -MODULE_INDEX 1441 1 1 1 1 1 1 -MODULE_INDEX 1442 1 1 1 1 1 1 -MODULE_INDEX 1443 1 1 1 1 1 1 -MODULE_INDEX 1444 1 1 1 1 1 1 -MODULE_INDEX 1445 1 1 1 1 1 1 -MODULE_INDEX 1446 1 1 1 1 1 1 -MODULE_INDEX 1447 1 1 1 1 1 1 -MODULE_INDEX 1448 1 1 1 1 1 1 -MODULE_INDEX 1449 1 1 1 1 1 1 -MODULE_INDEX 1450 1 1 1 1 1 1 -MODULE_INDEX 1451 1 1 1 1 1 1 -MODULE_INDEX 1452 1 1 1 1 1 1 -MODULE_INDEX 1453 1 1 1 1 1 1 -MODULE_INDEX 1454 1 1 1 1 1 1 -MODULE_INDEX 1455 1 1 1 1 1 1 -MODULE_INDEX 1456 1 1 1 1 1 1 -MODULE_INDEX 1457 1 1 1 1 1 1 -MODULE_INDEX 1458 1 1 1 1 1 1 -MODULE_INDEX 1459 1 1 1 1 1 1 -MODULE_INDEX 1460 1 1 1 1 1 1 -MODULE_INDEX 1461 1 1 1 1 1 1 -MODULE_INDEX 1462 1 1 1 1 1 1 -MODULE_INDEX 1463 1 1 1 1 1 1 -MODULE_INDEX 1464 1 1 1 1 1 1 -MODULE_INDEX 1465 1 1 1 1 1 1 -MODULE_INDEX 1466 1 1 1 1 1 1 -MODULE_INDEX 1467 1 1 1 1 1 1 -MODULE_INDEX 1468 1 1 1 1 1 1 -MODULE_INDEX 1469 1 1 1 1 1 1 -MODULE_INDEX 1470 1 1 1 1 1 1 -MODULE_INDEX 1471 1 1 1 1 1 1 -MODULE_INDEX 1472 1 1 1 1 1 1 -MODULE_INDEX 1473 1 1 1 1 1 1 -MODULE_INDEX 1474 1 1 1 1 1 1 -MODULE_INDEX 1475 1 1 1 1 1 1 -MODULE_INDEX 1476 1 1 1 1 1 1 -MODULE_INDEX 1477 1 1 1 1 1 1 -MODULE_INDEX 1478 1 1 1 1 1 1 -MODULE_INDEX 1479 1 1 1 1 1 1 -MODULE_INDEX 1480 1 1 1 1 1 1 -MODULE_INDEX 1481 1 1 1 1 1 1 -MODULE_INDEX 1482 1 1 1 1 1 1 -MODULE_INDEX 1483 1 1 1 1 1 1 -MODULE_INDEX 1484 1 1 1 1 1 1 -MODULE_INDEX 1485 1 1 1 1 1 1 -MODULE_INDEX 1486 1 1 1 1 1 1 -MODULE_INDEX 1487 1 1 1 1 1 1 -MODULE_INDEX 1488 1 1 1 1 1 1 -MODULE_INDEX 1489 1 1 1 1 1 1 -MODULE_INDEX 1490 1 1 1 1 1 1 -MODULE_INDEX 1491 1 1 1 1 1 1 -MODULE_INDEX 1492 1 1 1 1 1 1 -MODULE_INDEX 1493 1 1 1 1 1 1 -MODULE_INDEX 1494 1 1 1 1 1 1 -MODULE_INDEX 1495 1 1 1 1 1 1 -MODULE_INDEX 1496 1 1 1 1 1 1 -MODULE_INDEX 1497 1 1 1 1 1 1 -MODULE_INDEX 1498 1 1 1 1 1 1 -MODULE_INDEX 1499 1 1 1 1 1 1 -MODULE_INDEX 1500 1 1 1 1 1 1 -MODULE_INDEX 1501 1 1 1 1 1 1 -MODULE_INDEX 1502 1 1 1 1 1 1 -MODULE_INDEX 1503 1 1 1 1 1 1 -MODULE_INDEX 1504 1 1 1 1 1 1 -MODULE_INDEX 1505 1 1 1 1 1 1 -MODULE_INDEX 1506 1 1 1 1 1 1 -MODULE_INDEX 1507 1 1 1 1 1 1 -MODULE_INDEX 1508 1 1 1 1 1 1 -MODULE_INDEX 1509 1 1 1 1 1 1 -MODULE_INDEX 1510 1 1 1 1 1 1 -MODULE_INDEX 1511 1 1 1 1 1 1 -MODULE_INDEX 1512 1 1 1 1 1 1 -MODULE_INDEX 1513 1 1 1 1 1 1 -MODULE_INDEX 1514 1 1 1 1 1 1 -MODULE_INDEX 1515 1 1 1 1 1 1 -MODULE_INDEX 1516 1 1 1 1 1 1 -MODULE_INDEX 1517 1 1 1 1 1 1 -MODULE_INDEX 1518 1 1 1 1 1 1 -MODULE_INDEX 1519 1 1 1 1 1 1 -MODULE_INDEX 1520 1 1 1 1 1 1 -MODULE_INDEX 1521 1 1 1 1 1 1 -MODULE_INDEX 1522 1 1 1 1 1 1 -MODULE_INDEX 1523 1 1 1 1 1 1 -MODULE_INDEX 1524 1 1 1 1 1 1 -MODULE_INDEX 1525 1 1 1 1 1 1 -MODULE_INDEX 1526 1 1 1 1 1 1 -MODULE_INDEX 1527 1 1 1 1 1 1 -MODULE_INDEX 1528 1 1 1 1 1 1 -MODULE_INDEX 1529 1 1 1 1 1 1 -MODULE_INDEX 1530 1 1 1 1 1 1 -MODULE_INDEX 1531 1 1 1 1 1 1 -MODULE_INDEX 1532 1 1 1 1 1 1 -MODULE_INDEX 1533 1 1 1 1 1 1 -MODULE_INDEX 1534 1 1 1 1 1 1 -MODULE_INDEX 1535 1 1 1 1 1 1 -MODULE_INDEX 1536 1 1 1 1 1 1 -MODULE_INDEX 1537 1 1 1 1 1 1 -MODULE_INDEX 1538 1 1 1 1 1 1 -MODULE_INDEX 1539 1 1 1 1 1 1 -MODULE_INDEX 1540 1 1 1 1 1 1 -MODULE_INDEX 1541 1 1 1 1 1 1 -MODULE_INDEX 1542 1 1 1 1 1 1 -MODULE_INDEX 1543 1 1 1 1 1 1 -MODULE_INDEX 1544 1 1 1 1 1 1 -MODULE_INDEX 1545 1 1 1 1 1 1 -MODULE_INDEX 1546 1 1 1 1 1 1 -MODULE_INDEX 1547 1 1 1 1 1 1 -MODULE_INDEX 1548 1 1 1 1 1 1 -MODULE_INDEX 1549 1 1 1 1 1 1 -MODULE_INDEX 1550 1 1 1 1 1 1 -MODULE_INDEX 1551 1 1 1 1 1 1 -MODULE_INDEX 1552 1 1 1 1 1 1 -MODULE_INDEX 1553 1 1 1 1 1 1 -MODULE_INDEX 1554 1 1 1 1 1 1 -MODULE_INDEX 1555 1 1 1 1 1 1 -MODULE_INDEX 1556 1 1 1 1 1 1 -MODULE_INDEX 1557 1 1 1 1 1 1 -MODULE_INDEX 1558 1 1 1 1 1 1 -MODULE_INDEX 1559 1 1 1 1 1 1 -MODULE_INDEX 1560 1 1 1 1 1 1 -MODULE_INDEX 1561 1 1 1 1 1 1 -MODULE_INDEX 1562 1 1 1 1 1 1 -MODULE_INDEX 1563 1 1 1 1 1 1 -MODULE_INDEX 1564 1 1 1 1 1 1 -MODULE_INDEX 1565 1 1 1 1 1 1 -MODULE_INDEX 1566 1 1 1 1 1 1 -MODULE_INDEX 1567 1 1 1 1 1 1 -MODULE_INDEX 1568 1 1 1 1 1 1 -MODULE_INDEX 1569 1 1 1 1 1 1 -MODULE_INDEX 1570 1 1 1 1 1 1 -MODULE_INDEX 1571 1 1 1 1 1 1 -MODULE_INDEX 1572 1 1 1 1 1 1 -MODULE_INDEX 1573 1 1 1 1 1 1 -MODULE_INDEX 1574 1 1 1 1 1 1 -MODULE_INDEX 1575 1 1 1 1 1 1 -MODULE_INDEX 1576 1 1 1 1 1 1 -MODULE_INDEX 1577 1 1 1 1 1 1 -MODULE_INDEX 1578 1 1 1 1 1 1 -MODULE_INDEX 1579 1 1 1 1 1 1 -MODULE_INDEX 1580 1 1 1 1 1 1 -MODULE_INDEX 1581 1 1 1 1 1 1 -MODULE_INDEX 1582 1 1 1 1 1 1 -MODULE_INDEX 1583 1 1 1 1 1 1 -MODULE_INDEX 1584 1 1 1 1 1 1 -MODULE_INDEX 1585 1 1 1 1 1 1 -MODULE_INDEX 1586 1 1 1 1 1 1 -MODULE_INDEX 1587 1 1 1 1 1 1 -MODULE_INDEX 1588 1 1 1 1 1 1 -MODULE_INDEX 1589 1 1 1 1 1 1 -MODULE_INDEX 1590 1 1 1 1 1 1 -MODULE_INDEX 1591 1 1 1 1 1 1 -MODULE_INDEX 1592 1 1 1 1 1 1 -MODULE_INDEX 1593 1 1 1 1 1 1 -MODULE_INDEX 1594 1 1 1 1 1 1 -MODULE_INDEX 1595 1 1 1 1 1 1 -MODULE_INDEX 1596 1 1 1 1 1 1 -MODULE_INDEX 1597 1 1 1 1 1 1 -MODULE_INDEX 1598 1 1 1 1 1 1 -MODULE_INDEX 1599 1 1 1 1 1 1 -MODULE_INDEX 1600 1 1 1 1 1 1 -MODULE_INDEX 1601 1 1 1 1 1 1 -MODULE_INDEX 1602 1 1 1 1 1 1 -MODULE_INDEX 1603 1 1 1 1 1 1 -MODULE_INDEX 1604 1 1 1 1 1 1 -MODULE_INDEX 1605 1 1 1 1 1 1 -MODULE_INDEX 1606 1 1 1 1 1 1 -MODULE_INDEX 1607 1 1 1 1 1 1 -MODULE_INDEX 1608 1 1 1 1 1 1 -MODULE_INDEX 1609 1 1 1 1 1 1 -MODULE_INDEX 1610 1 1 1 1 1 1 -MODULE_INDEX 1611 1 1 1 1 1 1 -MODULE_INDEX 1612 1 1 1 1 1 1 -MODULE_INDEX 1613 1 1 1 1 1 1 -MODULE_INDEX 1614 1 1 1 1 1 1 -MODULE_INDEX 1615 1 1 1 1 1 1 -MODULE_INDEX 1616 1 1 1 1 1 1 -MODULE_INDEX 1617 1 1 1 1 1 1 -MODULE_INDEX 1618 1 1 1 1 1 1 -MODULE_INDEX 1619 1 1 1 1 1 1 -MODULE_INDEX 1620 1 1 1 1 1 1 -MODULE_INDEX 1621 1 1 1 1 1 1 -MODULE_INDEX 1622 1 1 1 1 1 1 -MODULE_INDEX 1623 1 1 1 1 1 1 -MODULE_INDEX 1624 1 1 1 1 1 1 -MODULE_INDEX 1625 1 1 1 1 1 1 -MODULE_INDEX 1626 1 1 1 1 1 1 -MODULE_INDEX 1627 1 1 1 1 1 1 -MODULE_INDEX 1628 1 1 1 1 1 1 -MODULE_INDEX 1629 1 1 1 1 1 1 -MODULE_INDEX 1630 1 1 1 1 1 1 -MODULE_INDEX 1631 1 1 1 1 1 1 -MODULE_INDEX 1632 1 1 1 1 1 1 -MODULE_INDEX 1633 1 1 1 1 1 1 -MODULE_INDEX 1634 1 1 1 1 1 1 -MODULE_INDEX 1635 1 1 1 1 1 1 -MODULE_INDEX 1636 1 1 1 1 1 1 -MODULE_INDEX 1637 1 1 1 1 1 1 -MODULE_INDEX 1638 1 1 1 1 1 1 -MODULE_INDEX 1639 1 1 1 1 1 1 -MODULE_INDEX 1640 1 1 1 1 1 1 -MODULE_INDEX 1641 1 1 1 1 1 1 -MODULE_INDEX 1642 1 1 1 1 1 1 -MODULE_INDEX 1643 1 1 1 1 1 1 -MODULE_INDEX 1644 1 1 1 1 1 1 -MODULE_INDEX 1645 1 1 1 1 1 1 -MODULE_INDEX 1646 1 1 1 1 1 1 -MODULE_INDEX 1647 1 1 1 1 1 1 -MODULE_INDEX 1648 1 1 1 1 1 1 -MODULE_INDEX 1649 1 1 1 1 1 1 -MODULE_INDEX 1650 1 1 1 1 1 1 -MODULE_INDEX 1651 1 1 1 1 1 1 -MODULE_INDEX 1652 1 1 1 1 1 1 -MODULE_INDEX 1653 1 1 1 1 1 1 -MODULE_INDEX 1654 1 1 1 1 1 1 -MODULE_INDEX 1655 1 1 1 1 1 1 -MODULE_INDEX 1656 1 1 1 1 1 1 -MODULE_INDEX 1657 1 1 1 1 1 1 -MODULE_INDEX 1658 1 1 1 1 1 1 -MODULE_INDEX 1659 1 1 1 1 1 1 -MODULE_INDEX 1660 1 1 1 1 1 1 -MODULE_INDEX 1661 1 1 1 1 1 1 -MODULE_INDEX 1662 1 1 1 1 1 1 -MODULE_INDEX 1663 1 1 1 1 1 1 -MODULE_INDEX 1664 1 1 1 1 1 1 -MODULE_INDEX 1665 1 1 1 1 1 1 -MODULE_INDEX 1666 1 1 1 1 1 1 -MODULE_INDEX 1667 1 1 1 1 1 1 -MODULE_INDEX 1668 1 1 1 1 1 1 -MODULE_INDEX 1669 1 1 1 1 1 1 -MODULE_INDEX 1670 1 1 1 1 1 1 -MODULE_INDEX 1671 1 1 1 1 1 1 -MODULE_INDEX 1672 1 1 1 1 1 1 -MODULE_INDEX 1673 1 1 1 1 1 1 -MODULE_INDEX 1674 1 1 1 1 1 1 -MODULE_INDEX 1675 1 1 1 1 1 1 -MODULE_INDEX 1676 1 1 1 1 1 1 -MODULE_INDEX 1677 1 1 1 1 1 1 -MODULE_INDEX 1678 1 1 1 1 1 1 -MODULE_INDEX 1679 1 1 1 1 1 1 -MODULE_INDEX 1680 1 1 1 1 1 1 -MODULE_INDEX 1681 1 1 1 1 1 1 -MODULE_INDEX 1682 1 1 1 1 1 1 -MODULE_INDEX 1683 1 1 1 1 1 1 -MODULE_INDEX 1684 1 1 1 1 1 1 -MODULE_INDEX 1685 1 1 1 1 1 1 -MODULE_INDEX 1686 1 1 1 1 1 1 -MODULE_INDEX 1687 1 1 1 1 1 1 -MODULE_INDEX 1688 1 1 1 1 1 1 -MODULE_INDEX 1689 1 1 1 1 1 1 -MODULE_INDEX 1690 1 1 1 1 1 1 -MODULE_INDEX 1691 1 1 1 1 1 1 -MODULE_INDEX 1692 1 1 1 1 1 1 -MODULE_INDEX 1693 1 1 1 1 1 1 -MODULE_INDEX 1694 1 1 1 1 1 1 -MODULE_INDEX 1695 1 1 1 1 1 1 -MODULE_INDEX 1696 1 1 1 1 1 1 -MODULE_INDEX 1697 1 1 1 1 1 1 -MODULE_INDEX 1698 1 1 1 1 1 1 -MODULE_INDEX 1699 1 1 1 1 1 1 -MODULE_INDEX 1700 1 1 1 1 1 1 -MODULE_INDEX 1701 1 1 1 1 1 1 -MODULE_INDEX 1702 1 1 1 1 1 1 -MODULE_INDEX 1703 1 1 1 1 1 1 -MODULE_INDEX 1704 1 1 1 1 1 1 -MODULE_INDEX 1705 1 1 1 1 1 1 -MODULE_INDEX 1706 1 1 1 1 1 1 -MODULE_INDEX 1707 1 1 1 1 1 1 -MODULE_INDEX 1708 1 1 1 1 1 1 -MODULE_INDEX 1709 1 1 1 1 1 1 -MODULE_INDEX 1710 1 1 1 1 1 1 -MODULE_INDEX 1711 1 1 1 1 1 1 -MODULE_INDEX 1712 1 1 1 1 1 1 -MODULE_INDEX 1713 1 1 1 1 1 1 -MODULE_INDEX 1714 1 1 1 1 1 1 -MODULE_INDEX 1715 1 1 1 1 1 1 -MODULE_INDEX 1716 1 1 1 1 1 1 -MODULE_INDEX 1717 1 1 1 1 1 1 -MODULE_INDEX 1718 1 1 1 1 1 1 -MODULE_INDEX 1719 1 1 1 1 1 1 -MODULE_INDEX 1720 1 1 1 1 1 1 -MODULE_INDEX 1721 1 1 1 1 1 1 -MODULE_INDEX 1722 1 1 1 1 1 1 -MODULE_INDEX 1723 1 1 1 1 1 1 -MODULE_INDEX 1724 1 1 1 1 1 1 -MODULE_INDEX 1725 1 1 1 1 1 1 -MODULE_INDEX 1726 1 1 1 1 1 1 -MODULE_INDEX 1727 1 1 1 1 1 1 -MODULE_INDEX 1728 1 1 1 1 1 1 -MODULE_INDEX 1729 1 1 1 1 1 1 -MODULE_INDEX 1730 1 1 1 1 1 1 -MODULE_INDEX 1731 1 1 1 1 1 1 -MODULE_INDEX 1732 1 1 1 1 1 1 -MODULE_INDEX 1733 1 1 1 1 1 1 -MODULE_INDEX 1734 1 1 1 1 1 1 -MODULE_INDEX 1735 1 1 1 1 1 1 -MODULE_INDEX 1736 1 1 1 1 1 1 -MODULE_INDEX 1737 1 1 1 1 1 1 -MODULE_INDEX 1738 1 1 1 1 1 1 -MODULE_INDEX 1739 1 1 1 1 1 1 -MODULE_INDEX 1740 1 1 1 1 1 1 -MODULE_INDEX 1741 1 1 1 1 1 1 -MODULE_INDEX 1742 1 1 1 1 1 1 -MODULE_INDEX 1743 1 1 1 1 1 1 -MODULE_INDEX 1744 1 1 1 1 1 1 -MODULE_INDEX 1745 1 1 1 1 1 1 -MODULE_INDEX 1746 1 1 1 1 1 1 -MODULE_INDEX 1747 1 1 1 1 1 1 -MODULE_INDEX 1748 1 1 1 1 1 1 -MODULE_INDEX 1749 1 1 1 1 1 1 -MODULE_INDEX 1750 1 1 1 1 1 1 -MODULE_INDEX 1751 1 1 1 1 1 1 -MODULE_INDEX 1752 1 1 1 1 1 1 -MODULE_INDEX 1753 1 1 1 1 1 1 -MODULE_INDEX 1754 1 1 1 1 1 1 -MODULE_INDEX 1755 1 1 1 1 1 1 -MODULE_INDEX 1756 1 1 1 1 1 1 -MODULE_INDEX 1757 1 1 1 1 1 1 -MODULE_INDEX 1758 1 1 1 1 1 1 -MODULE_INDEX 1759 1 1 1 1 1 1 -MODULE_INDEX 1760 1 1 1 1 1 1 -MODULE_INDEX 1761 1 1 1 1 1 1 -MODULE_INDEX 1762 1 1 1 1 1 1 -MODULE_INDEX 1763 1 1 1 1 1 1 -MODULE_INDEX 1764 1 1 1 1 1 1 -MODULE_INDEX 1765 1 1 1 1 1 1 -MODULE_INDEX 1766 1 1 1 1 1 1 -MODULE_INDEX 1767 1 1 1 1 1 1 -MODULE_INDEX 1768 1 1 1 1 1 1 -MODULE_INDEX 1769 1 1 1 1 1 1 -MODULE_INDEX 1770 1 1 1 1 1 1 -MODULE_INDEX 1771 1 1 1 1 1 1 -MODULE_INDEX 1772 1 1 1 1 1 1 -MODULE_INDEX 1773 1 1 1 1 1 1 -MODULE_INDEX 1774 1 1 1 1 1 1 -MODULE_INDEX 1775 1 1 1 1 1 1 -MODULE_INDEX 1776 1 1 1 1 1 1 -MODULE_INDEX 1777 1 1 1 1 1 1 -MODULE_INDEX 1778 1 1 1 1 1 1 -MODULE_INDEX 1779 1 1 1 1 1 1 -MODULE_INDEX 1780 1 1 1 1 1 1 -MODULE_INDEX 1781 1 1 1 1 1 1 -MODULE_INDEX 1782 1 1 1 1 1 1 -MODULE_INDEX 1783 1 1 1 1 1 1 -MODULE_INDEX 1784 1 1 1 1 1 1 -MODULE_INDEX 1785 1 1 1 1 1 1 -MODULE_INDEX 1786 1 1 1 1 1 1 -MODULE_INDEX 1787 1 1 1 1 1 1 -MODULE_INDEX 1788 1 1 1 1 1 1 -MODULE_INDEX 1789 1 1 1 1 1 1 -MODULE_INDEX 1790 1 1 1 1 1 1 -MODULE_INDEX 1791 1 1 1 1 1 1 -MODULE_INDEX 1792 1 1 1 1 1 1 -MODULE_INDEX 1793 1 1 1 1 1 1 -MODULE_INDEX 1794 1 1 1 1 1 1 -MODULE_INDEX 1795 1 1 1 1 1 1 -MODULE_INDEX 1796 1 1 1 1 1 1 -MODULE_INDEX 1797 1 1 1 1 1 1 -MODULE_INDEX 1798 1 1 1 1 1 1 -MODULE_INDEX 1799 1 1 1 1 1 1 -MODULE_INDEX 1800 1 1 1 1 1 1 -MODULE_INDEX 1801 1 1 1 1 1 1 -MODULE_INDEX 1802 1 1 1 1 1 1 -MODULE_INDEX 1803 1 1 1 1 1 1 -MODULE_INDEX 1804 1 1 1 1 1 1 -MODULE_INDEX 1805 1 1 1 1 1 1 -MODULE_INDEX 1806 1 1 1 1 1 1 -MODULE_INDEX 1807 1 1 1 1 1 1 -MODULE_INDEX 1808 1 1 1 1 1 1 -MODULE_INDEX 1809 1 1 1 1 1 1 -MODULE_INDEX 1810 1 1 1 1 1 1 -MODULE_INDEX 1811 1 1 1 1 1 1 -MODULE_INDEX 1812 1 1 1 1 1 1 -MODULE_INDEX 1813 1 1 1 1 1 1 -MODULE_INDEX 1814 1 1 1 1 1 1 -MODULE_INDEX 1815 1 1 1 1 1 1 -MODULE_INDEX 1816 1 1 1 1 1 1 -MODULE_INDEX 1817 1 1 1 1 1 1 -MODULE_INDEX 1818 1 1 1 1 1 1 -MODULE_INDEX 1819 1 1 1 1 1 1 -MODULE_INDEX 1820 1 1 1 1 1 1 -MODULE_INDEX 1821 1 1 1 1 1 1 -MODULE_INDEX 1822 1 1 1 1 1 1 -MODULE_INDEX 1823 1 1 1 1 1 1 -MODULE_INDEX 1824 1 1 1 1 1 1 -MODULE_INDEX 1825 1 1 1 1 1 1 -MODULE_INDEX 1826 1 1 1 1 1 1 -MODULE_INDEX 1827 1 1 1 1 1 1 -MODULE_INDEX 1828 1 1 1 1 1 1 -MODULE_INDEX 1829 1 1 1 1 1 1 -MODULE_INDEX 1830 1 1 1 1 1 1 -MODULE_INDEX 1831 1 1 1 1 1 1 -MODULE_INDEX 1832 1 1 1 1 1 1 -MODULE_INDEX 1833 1 1 1 1 1 1 -MODULE_INDEX 1834 1 1 1 1 1 1 -MODULE_INDEX 1835 1 1 1 1 1 1 -MODULE_INDEX 1836 1 1 1 1 1 1 -MODULE_INDEX 1837 1 1 1 1 1 1 -MODULE_INDEX 1838 1 1 1 1 1 1 -MODULE_INDEX 1839 1 1 1 1 1 1 -MODULE_INDEX 1840 1 1 1 1 1 1 -MODULE_INDEX 1841 1 1 1 1 1 1 -MODULE_INDEX 1842 1 1 1 1 1 1 -MODULE_INDEX 1843 1 1 1 1 1 1 -MODULE_INDEX 1844 1 1 1 1 1 1 -MODULE_INDEX 1845 1 1 1 1 1 1 -MODULE_INDEX 1846 1 1 1 1 1 1 -MODULE_INDEX 1847 1 1 1 1 1 1 -MODULE_INDEX 1848 1 1 1 1 1 1 -MODULE_INDEX 1849 1 1 1 1 1 1 -MODULE_INDEX 1850 1 1 1 1 1 1 -MODULE_INDEX 1851 1 1 1 1 1 1 -MODULE_INDEX 1852 1 1 1 1 1 1 -MODULE_INDEX 1853 1 1 1 1 1 1 -MODULE_INDEX 1854 1 1 1 1 1 1 -MODULE_INDEX 1855 1 1 1 1 1 1 -MODULE_INDEX 1856 1 1 1 1 1 1 -MODULE_INDEX 1857 1 1 1 1 1 1 -MODULE_INDEX 1858 1 1 1 1 1 1 -MODULE_INDEX 1859 1 1 1 1 1 1 -MODULE_INDEX 1860 1 1 1 1 1 1 -MODULE_INDEX 1861 1 1 1 1 1 1 -MODULE_INDEX 1862 1 1 1 1 1 1 -MODULE_INDEX 1863 1 1 1 1 1 1 -MODULE_INDEX 1864 1 1 1 1 1 1 -MODULE_INDEX 1865 1 1 1 1 1 1 -MODULE_INDEX 1866 1 1 1 1 1 1 -MODULE_INDEX 1867 1 1 1 1 1 1 -MODULE_INDEX 1868 1 1 1 1 1 1 -MODULE_INDEX 1869 1 1 1 1 1 1 -MODULE_INDEX 1870 1 1 1 1 1 1 -MODULE_INDEX 1871 1 1 1 1 1 1 -MODULE_INDEX 1872 1 1 1 1 1 1 -MODULE_INDEX 1873 1 1 1 1 1 1 -MODULE_INDEX 1874 1 1 1 1 1 1 -MODULE_INDEX 1875 1 1 1 1 1 1 -MODULE_INDEX 1876 1 1 1 1 1 1 -MODULE_INDEX 1877 1 1 1 1 1 1 -MODULE_INDEX 1878 1 1 1 1 1 1 -MODULE_INDEX 1879 1 1 1 1 1 1 -MODULE_INDEX 1880 1 1 1 1 1 1 -MODULE_INDEX 1881 1 1 1 1 1 1 -MODULE_INDEX 1882 1 1 1 1 1 1 -MODULE_INDEX 1883 1 1 1 1 1 1 -MODULE_INDEX 1884 1 1 1 1 1 1 -MODULE_INDEX 1885 1 1 1 1 1 1 -MODULE_INDEX 1886 1 1 1 1 1 1 -MODULE_INDEX 1887 1 1 1 1 1 1 -MODULE_INDEX 1888 1 1 1 1 1 1 -MODULE_INDEX 1889 1 1 1 1 1 1 -MODULE_INDEX 1890 1 1 1 1 1 1 -MODULE_INDEX 1891 1 1 1 1 1 1 -MODULE_INDEX 1892 1 1 1 1 1 1 -MODULE_INDEX 1893 1 1 1 1 1 1 -MODULE_INDEX 1894 1 1 1 1 1 1 -MODULE_INDEX 1895 1 1 1 1 1 1 -MODULE_INDEX 1896 1 1 1 1 1 1 -MODULE_INDEX 1897 1 1 1 1 1 1 -MODULE_INDEX 1898 1 1 1 1 1 1 -MODULE_INDEX 1899 1 1 1 1 1 1 -MODULE_INDEX 1900 1 1 1 1 1 1 -MODULE_INDEX 1901 1 1 1 1 1 1 -MODULE_INDEX 1902 1 1 1 1 1 1 -MODULE_INDEX 1903 1 1 1 1 1 1 -MODULE_INDEX 1904 1 1 1 1 1 1 -MODULE_INDEX 1905 1 1 1 1 1 1 -MODULE_INDEX 1906 1 1 1 1 1 1 -MODULE_INDEX 1907 1 1 1 1 1 1 -MODULE_INDEX 1908 1 1 1 1 1 1 -MODULE_INDEX 1909 1 1 1 1 1 1 -MODULE_INDEX 1910 1 1 1 1 1 1 -MODULE_INDEX 1911 1 1 1 1 1 1 -MODULE_INDEX 1912 1 1 1 1 1 1 -MODULE_INDEX 1913 1 1 1 1 1 1 -MODULE_INDEX 1914 1 1 1 1 1 1 -MODULE_INDEX 1915 1 1 1 1 1 1 -MODULE_INDEX 1916 1 1 1 1 1 1 -MODULE_INDEX 1917 1 1 1 1 1 1 -MODULE_INDEX 1918 1 1 1 1 1 1 -MODULE_INDEX 1919 1 1 1 1 1 1 -MODULE_INDEX 1920 1 1 1 1 1 1 -MODULE_INDEX 1921 1 1 1 1 1 1 -MODULE_INDEX 1922 1 1 1 1 1 1 -MODULE_INDEX 1923 1 1 1 1 1 1 -MODULE_INDEX 1924 1 1 1 1 1 1 -MODULE_INDEX 1925 1 1 1 1 1 1 -MODULE_INDEX 1926 1 1 1 1 1 1 -MODULE_INDEX 1927 1 1 1 1 1 1 -MODULE_INDEX 1928 1 1 1 1 1 1 -MODULE_INDEX 1929 1 1 1 1 1 1 -MODULE_INDEX 1930 1 1 1 1 1 1 -MODULE_INDEX 1931 1 1 1 1 1 1 -MODULE_INDEX 1932 1 1 1 1 1 1 -MODULE_INDEX 1933 1 1 1 1 1 1 -MODULE_INDEX 1934 1 1 1 1 1 1 -MODULE_INDEX 1935 1 1 1 1 1 1 -MODULE_INDEX 1936 1 1 1 1 1 1 -MODULE_INDEX 1937 1 1 1 1 1 1 -MODULE_INDEX 1938 1 1 1 1 1 1 -MODULE_INDEX 1939 1 1 1 1 1 1 -MODULE_INDEX 1940 1 1 1 1 1 1 -MODULE_INDEX 1941 1 1 1 1 1 1 -MODULE_INDEX 1942 1 1 1 1 1 1 -MODULE_INDEX 1943 1 1 1 1 1 1 -MODULE_INDEX 1944 1 1 1 1 1 1 -MODULE_INDEX 1945 1 1 1 1 1 1 -MODULE_INDEX 1946 1 1 1 1 1 1 -MODULE_INDEX 1947 1 1 1 1 1 1 -MODULE_INDEX 1948 1 1 1 1 1 1 -MODULE_INDEX 1949 1 1 1 1 1 1 -MODULE_INDEX 1950 1 1 1 1 1 1 -MODULE_INDEX 1951 1 1 1 1 1 1 -MODULE_INDEX 1952 1 1 1 1 1 1 -MODULE_INDEX 1953 1 1 1 1 1 1 -MODULE_INDEX 1954 1 1 1 1 1 1 -MODULE_INDEX 1955 1 1 1 1 1 1 -MODULE_INDEX 1956 1 1 1 1 1 1 -MODULE_INDEX 1957 1 1 1 1 1 1 -MODULE_INDEX 1958 1 1 1 1 1 1 -MODULE_INDEX 1959 1 1 1 1 1 1 -MODULE_INDEX 1960 1 1 1 1 1 1 -MODULE_INDEX 1961 1 1 1 1 1 1 -MODULE_INDEX 1962 1 1 1 1 1 1 -MODULE_INDEX 1963 1 1 1 1 1 1 -MODULE_INDEX 1964 1 1 1 1 1 1 -MODULE_INDEX 1965 1 1 1 1 1 1 -MODULE_INDEX 1966 1 1 1 1 1 1 -MODULE_INDEX 1967 1 1 1 1 1 1 -MODULE_INDEX 1968 1 1 1 1 1 1 -MODULE_INDEX 1969 1 1 1 1 1 1 -MODULE_INDEX 1970 1 1 1 1 1 1 -MODULE_INDEX 1971 1 1 1 1 1 1 -MODULE_INDEX 1972 1 1 1 1 1 1 -MODULE_INDEX 1973 1 1 1 1 1 1 -MODULE_INDEX 1974 1 1 1 1 1 1 -MODULE_INDEX 1975 1 1 1 1 1 1 -MODULE_INDEX 1976 1 1 1 1 1 1 -MODULE_INDEX 1977 1 1 1 1 1 1 -MODULE_INDEX 1978 1 1 1 1 1 1 -MODULE_INDEX 1979 1 1 1 1 1 1 -MODULE_INDEX 1980 1 1 1 1 1 1 -MODULE_INDEX 1981 1 1 1 1 1 1 -MODULE_INDEX 1982 1 1 1 1 1 1 -MODULE_INDEX 1983 1 1 1 1 1 1 -MODULE_INDEX 1984 1 1 1 1 1 1 -MODULE_INDEX 1985 1 1 1 1 1 1 -MODULE_INDEX 1986 1 1 1 1 1 1 -MODULE_INDEX 1987 1 1 1 1 1 1 -MODULE_INDEX 1988 1 1 1 1 1 1 -MODULE_INDEX 1989 1 1 1 1 1 1 -MODULE_INDEX 1990 1 1 1 1 1 1 -MODULE_INDEX 1991 1 1 1 1 1 1 -MODULE_INDEX 1992 1 1 1 1 1 1 -MODULE_INDEX 1993 1 1 1 1 1 1 -MODULE_INDEX 1994 1 1 1 1 1 1 -MODULE_INDEX 1995 1 1 1 1 1 1 -MODULE_INDEX 1996 1 1 1 1 1 1 -MODULE_INDEX 1997 1 1 1 1 1 1 -MODULE_INDEX 1998 1 1 1 1 1 1 -MODULE_INDEX 1999 1 1 1 1 1 1 -MODULE_INDEX 2000 1 1 1 1 1 1 -MODULE_INDEX 2001 1 1 1 1 1 1 -MODULE_INDEX 2002 1 1 1 1 1 1 -MODULE_INDEX 2003 1 1 1 1 1 1 -MODULE_INDEX 2004 1 1 1 1 1 1 -MODULE_INDEX 2005 1 1 1 1 1 1 -MODULE_INDEX 2006 1 1 1 1 1 1 -MODULE_INDEX 2007 1 1 1 1 1 1 -MODULE_INDEX 2008 1 1 1 1 1 1 -MODULE_INDEX 2009 1 1 1 1 1 1 -MODULE_INDEX 2010 1 1 1 1 1 1 -MODULE_INDEX 2011 1 1 1 1 1 1 -MODULE_INDEX 2012 1 1 1 1 1 1 -MODULE_INDEX 2013 1 1 1 1 1 1 -MODULE_INDEX 2014 1 1 1 1 1 1 -MODULE_INDEX 2015 1 1 1 1 1 1 -MODULE_INDEX 2016 1 1 1 1 1 1 -MODULE_INDEX 2017 1 1 1 1 1 1 -MODULE_INDEX 2018 1 1 1 1 1 1 -MODULE_INDEX 2019 1 1 1 1 1 1 -MODULE_INDEX 2020 1 1 1 1 1 1 -MODULE_INDEX 2021 1 1 1 1 1 1 -MODULE_INDEX 2022 1 1 1 1 1 1 -MODULE_INDEX 2023 1 1 1 1 1 1 -MODULE_INDEX 2024 1 1 1 1 1 1 -MODULE_INDEX 2025 1 1 1 1 1 1 -MODULE_INDEX 2026 1 1 1 1 1 1 -MODULE_INDEX 2027 1 1 1 1 1 1 -MODULE_INDEX 2028 1 1 1 1 1 1 -MODULE_INDEX 2029 1 1 1 1 1 1 -MODULE_INDEX 2030 1 1 1 1 1 1 -MODULE_INDEX 2031 1 1 1 1 1 1 -MODULE_INDEX 2032 1 1 1 1 1 1 -MODULE_INDEX 2033 1 1 1 1 1 1 -MODULE_INDEX 2034 1 1 1 1 1 1 -MODULE_INDEX 2035 1 1 1 1 1 1 -MODULE_INDEX 2036 1 1 1 1 1 1 -MODULE_INDEX 2037 1 1 1 1 1 1 -MODULE_INDEX 2038 1 1 1 1 1 1 -MODULE_INDEX 2039 1 1 1 1 1 1 -MODULE_INDEX 2040 1 1 1 1 1 1 -MODULE_INDEX 2041 1 1 1 1 1 1 -MODULE_INDEX 2042 1 1 1 1 1 1 -MODULE_INDEX 2043 1 1 1 1 1 1 -MODULE_INDEX 2044 1 1 1 1 1 1 -MODULE_INDEX 2045 1 1 1 1 1 1 -MODULE_INDEX 2046 1 1 1 1 1 1 -MODULE_INDEX 2047 1 1 1 1 1 1 -MODULE_INDEX 2048 1 1 1 1 1 1 -MODULE_INDEX 2049 1 1 1 1 1 1 -MODULE_INDEX 2050 1 1 1 1 1 1 -MODULE_INDEX 2051 1 1 1 1 1 1 -MODULE_INDEX 2052 1 1 1 1 1 1 -MODULE_INDEX 2053 1 1 1 1 1 1 -MODULE_INDEX 2054 1 1 1 1 1 1 -MODULE_INDEX 2055 1 1 1 1 1 1 -MODULE_INDEX 2056 1 1 1 1 1 1 -MODULE_INDEX 2057 1 1 1 1 1 1 -MODULE_INDEX 2058 1 1 1 1 1 1 -MODULE_INDEX 2059 1 1 1 1 1 1 -MODULE_INDEX 2060 1 1 1 1 1 1 -MODULE_INDEX 2061 1 1 1 1 1 1 -MODULE_INDEX 2062 1 1 1 1 1 1 -MODULE_INDEX 2063 1 1 1 1 1 1 -MODULE_INDEX 2064 1 1 1 1 1 1 -MODULE_INDEX 2065 1 1 1 1 1 1 -MODULE_INDEX 2066 1 1 1 1 1 1 -MODULE_INDEX 2067 1 1 1 1 1 1 -MODULE_INDEX 2068 1 1 1 1 1 1 -MODULE_INDEX 2069 1 1 1 1 1 1 -MODULE_INDEX 2070 1 1 1 1 1 1 -MODULE_INDEX 2071 1 1 1 1 1 1 -MODULE_INDEX 2072 1 1 1 1 1 1 -MODULE_INDEX 2073 1 1 1 1 1 1 -MODULE_INDEX 2074 1 1 1 1 1 1 -MODULE_INDEX 2075 1 1 1 1 1 1 -MODULE_INDEX 2076 1 1 1 1 1 1 -MODULE_INDEX 2077 1 1 1 1 1 1 -MODULE_INDEX 2078 1 1 1 1 1 1 -MODULE_INDEX 2079 1 1 1 1 1 1 -MODULE_INDEX 2080 1 1 1 1 1 1 -MODULE_INDEX 2081 1 1 1 1 1 1 -MODULE_INDEX 2082 1 1 1 1 1 1 -MODULE_INDEX 2083 1 1 1 1 1 1 -MODULE_INDEX 2084 1 1 1 1 1 1 -MODULE_INDEX 2085 1 1 1 1 1 1 -MODULE_INDEX 2086 1 1 1 1 1 1 -MODULE_INDEX 2087 1 1 1 1 1 1 -MODULE_INDEX 2088 1 1 1 1 1 1 -MODULE_INDEX 2089 1 1 1 1 1 1 -MODULE_INDEX 2090 1 1 1 1 1 1 -MODULE_INDEX 2091 1 1 1 1 1 1 -MODULE_INDEX 2092 1 1 1 1 1 1 -MODULE_INDEX 2093 1 1 1 1 1 1 -MODULE_INDEX 2094 1 1 1 1 1 1 -MODULE_INDEX 2095 1 1 1 1 1 1 -MODULE_INDEX 2096 1 1 1 1 1 1 -MODULE_INDEX 2097 1 1 1 1 1 1 -MODULE_INDEX 2098 1 1 1 1 1 1 -MODULE_INDEX 2099 1 1 1 1 1 1 -MODULE_INDEX 2100 1 1 1 1 1 1 -MODULE_INDEX 2101 1 1 1 1 1 1 -MODULE_INDEX 2102 1 1 1 1 1 1 -MODULE_INDEX 2103 1 1 1 1 1 1 -MODULE_INDEX 2104 1 1 1 1 1 1 -MODULE_INDEX 2105 1 1 1 1 1 1 -MODULE_INDEX 2106 1 1 1 1 1 1 -MODULE_INDEX 2107 1 1 1 1 1 1 -MODULE_INDEX 2108 1 1 1 1 1 1 -MODULE_INDEX 2109 1 1 1 1 1 1 -MODULE_INDEX 2110 1 1 1 1 1 1 -MODULE_INDEX 2111 1 1 1 1 1 1 -MODULE_INDEX 2112 1 1 1 1 1 1 -MODULE_INDEX 2113 1 1 1 1 1 1 -MODULE_INDEX 2114 1 1 1 1 1 1 -MODULE_INDEX 2115 1 1 1 1 1 1 -MODULE_INDEX 2116 1 1 1 1 1 1 -MODULE_INDEX 2117 1 1 1 1 1 1 -MODULE_INDEX 2118 1 1 1 1 1 1 -MODULE_INDEX 2119 1 1 1 1 1 1 -MODULE_INDEX 2120 1 1 1 1 1 1 -MODULE_INDEX 2121 1 1 1 1 1 1 -MODULE_INDEX 2122 1 1 1 1 1 1 -MODULE_INDEX 2123 1 1 1 1 1 1 -MODULE_INDEX 2124 1 1 1 1 1 1 -MODULE_INDEX 2125 1 1 1 1 1 1 -MODULE_INDEX 2126 1 1 1 1 1 1 -MODULE_INDEX 2127 1 1 1 1 1 1 -MODULE_INDEX 2128 1 1 1 1 1 1 -MODULE_INDEX 2129 1 1 1 1 1 1 -MODULE_INDEX 2130 1 1 1 1 1 1 -MODULE_INDEX 2131 1 1 1 1 1 1 -MODULE_INDEX 2132 1 1 1 1 1 1 -MODULE_INDEX 2133 1 1 1 1 1 1 -MODULE_INDEX 2134 1 1 1 1 1 1 -MODULE_INDEX 2135 1 1 1 1 1 1 -MODULE_INDEX 2136 1 1 1 1 1 1 -MODULE_INDEX 2137 1 1 1 1 1 1 -MODULE_INDEX 2138 1 1 1 1 1 1 -MODULE_INDEX 2139 1 1 1 1 1 1 -MODULE_INDEX 2140 1 1 1 1 1 1 -MODULE_INDEX 2141 1 1 1 1 1 1 -MODULE_INDEX 2142 1 1 1 1 1 1 -MODULE_INDEX 2143 1 1 1 1 1 1 -MODULE_INDEX 2144 1 1 1 1 1 1 -MODULE_INDEX 2145 1 1 1 1 1 1 -MODULE_INDEX 2146 1 1 1 1 1 1 -MODULE_INDEX 2147 1 1 1 1 1 1 -MODULE_INDEX 2148 1 1 1 1 1 1 -MODULE_INDEX 2149 1 1 1 1 1 1 -MODULE_INDEX 2150 1 1 1 1 1 1 -MODULE_INDEX 2151 1 1 1 1 1 1 -MODULE_INDEX 2152 1 1 1 1 1 1 -MODULE_INDEX 2153 1 1 1 1 1 1 -MODULE_INDEX 2154 1 1 1 1 1 1 -MODULE_INDEX 2155 1 1 1 1 1 1 -MODULE_INDEX 2156 1 1 1 1 1 1 -MODULE_INDEX 2157 1 1 1 1 1 1 -MODULE_INDEX 2158 1 1 1 1 1 1 -MODULE_INDEX 2159 1 1 1 1 1 1 -MODULE_INDEX 2160 1 1 1 1 1 1 -MODULE_INDEX 2161 1 1 1 1 1 1 -MODULE_INDEX 2162 1 1 1 1 1 1 -MODULE_INDEX 2163 1 1 1 1 1 1 -MODULE_INDEX 2164 1 1 1 1 1 1 -MODULE_INDEX 2165 1 1 1 1 1 1 -MODULE_INDEX 2166 1 1 1 1 1 1 -MODULE_INDEX 2167 1 1 1 1 1 1 -MODULE_INDEX 2168 1 1 1 1 1 1 -MODULE_INDEX 2169 1 1 1 1 1 1 -MODULE_INDEX 2170 1 1 1 1 1 1 -MODULE_INDEX 2171 1 1 1 1 1 1 -MODULE_INDEX 2172 1 1 1 1 1 1 -MODULE_INDEX 2173 1 1 1 1 1 1 -MODULE_INDEX 2174 1 1 1 1 1 1 -MODULE_INDEX 2175 1 1 1 1 1 1 -MODULE_INDEX 2176 1 1 1 1 1 1 -MODULE_INDEX 2177 1 1 1 1 1 1 -MODULE_INDEX 2178 1 1 1 1 1 1 -MODULE_INDEX 2179 1 1 1 1 1 1 -MODULE_INDEX 2180 1 1 1 1 1 1 -MODULE_INDEX 2181 1 1 1 1 1 1 -MODULE_INDEX 2182 1 1 1 1 1 1 -MODULE_INDEX 2183 1 1 1 1 1 1 -MODULE_INDEX 2184 1 1 1 1 1 1 -MODULE_INDEX 2185 1 1 1 1 1 1 -MODULE_INDEX 2186 1 1 1 1 1 1 -MODULE_INDEX 2187 1 1 1 1 1 1 -MODULE_INDEX 2188 1 1 1 1 1 1 -MODULE_INDEX 2189 1 1 1 1 1 1 -MODULE_INDEX 2190 1 1 1 1 1 1 -MODULE_INDEX 2191 1 1 1 1 1 1 -MODULE_INDEX 2192 1 1 1 1 1 1 -MODULE_INDEX 2193 1 1 1 1 1 1 -MODULE_INDEX 2194 1 1 1 1 1 1 -MODULE_INDEX 2195 1 1 1 1 1 1 -MODULE_INDEX 2196 1 1 1 1 1 1 -MODULE_INDEX 2197 1 1 1 1 1 1 +# init geometry +GEOMETRY_FILE geometry.root +# Millepere options: +# init sigma for params (trans in cm. and rot. in deg) +SET_PARSIG_TRANS 0.0100 +SET_PARSIG_ROT 0.1 +# Number of standard deviations for chi2 cut +SET_NSTDDEV 3 +# Cut on residual for first and other iterations +SET_RESCUT_INIT 100. +SET_RESCUT_OTHER 100. +# initial value for chi2 cut +SET_STARTFAC 16. +# module index param: 0=fixed / 1=alignable +# number Tx Ty Tz psi theta phi +# layer 1 +MODULE_INDEX 0 1 1 1 1 1 1 +MODULE_INDEX 1 1 1 1 1 1 1 +MODULE_INDEX 2 1 1 1 1 1 1 +MODULE_INDEX 3 1 1 1 1 1 1 +MODULE_INDEX 4 1 1 1 1 1 1 +MODULE_INDEX 5 1 1 1 1 1 1 +MODULE_INDEX 6 1 1 1 1 1 1 +MODULE_INDEX 7 1 1 1 1 1 1 +MODULE_INDEX 8 1 1 1 1 1 1 +MODULE_INDEX 9 1 1 1 1 1 1 +MODULE_INDEX 10 1 1 1 1 1 1 +MODULE_INDEX 11 1 1 1 1 1 1 +MODULE_INDEX 12 1 1 1 1 1 1 +MODULE_INDEX 13 1 1 1 1 1 1 +MODULE_INDEX 14 1 1 1 1 1 1 +MODULE_INDEX 15 1 1 1 1 1 1 +MODULE_INDEX 16 1 1 1 1 1 1 +MODULE_INDEX 17 1 1 1 1 1 1 +MODULE_INDEX 18 1 1 1 1 1 1 +MODULE_INDEX 19 1 1 1 1 1 1 +MODULE_INDEX 20 1 1 1 1 1 1 +MODULE_INDEX 21 1 1 1 1 1 1 +MODULE_INDEX 22 1 1 1 1 1 1 +MODULE_INDEX 23 1 1 1 1 1 1 +MODULE_INDEX 24 1 1 1 1 1 1 +MODULE_INDEX 25 1 1 1 1 1 1 +MODULE_INDEX 26 1 1 1 1 1 1 +MODULE_INDEX 27 1 1 1 1 1 1 +MODULE_INDEX 28 1 1 1 1 1 1 +MODULE_INDEX 29 1 1 1 1 1 1 +MODULE_INDEX 30 1 1 1 1 1 1 +MODULE_INDEX 31 1 1 1 1 1 1 +MODULE_INDEX 32 1 1 1 1 1 1 +MODULE_INDEX 33 1 1 1 1 1 1 +MODULE_INDEX 34 1 1 1 1 1 1 +MODULE_INDEX 35 1 1 1 1 1 1 +MODULE_INDEX 36 1 1 1 1 1 1 +MODULE_INDEX 37 1 1 1 1 1 1 +MODULE_INDEX 38 1 1 1 1 1 1 +MODULE_INDEX 39 1 1 1 1 1 1 +MODULE_INDEX 40 1 1 1 1 1 1 +MODULE_INDEX 41 1 1 1 1 1 1 +MODULE_INDEX 42 1 1 1 1 1 1 +MODULE_INDEX 43 1 1 1 1 1 1 +MODULE_INDEX 44 1 1 1 1 1 1 +MODULE_INDEX 45 1 1 1 1 1 1 +MODULE_INDEX 46 1 1 1 1 1 1 +MODULE_INDEX 47 1 1 1 1 1 1 +MODULE_INDEX 48 1 1 1 1 1 1 +MODULE_INDEX 49 1 1 1 1 1 1 +MODULE_INDEX 50 1 1 1 1 1 1 +MODULE_INDEX 51 1 1 1 1 1 1 +MODULE_INDEX 52 1 1 1 1 1 1 +MODULE_INDEX 53 1 1 1 1 1 1 +MODULE_INDEX 54 1 1 1 1 1 1 +MODULE_INDEX 55 1 1 1 1 1 1 +MODULE_INDEX 56 1 1 1 1 1 1 +MODULE_INDEX 57 1 1 1 1 1 1 +MODULE_INDEX 58 1 1 1 1 1 1 +MODULE_INDEX 59 1 1 1 1 1 1 +MODULE_INDEX 60 1 1 1 1 1 1 +MODULE_INDEX 61 1 1 1 1 1 1 +MODULE_INDEX 62 1 1 1 1 1 1 +MODULE_INDEX 63 1 1 1 1 1 1 +MODULE_INDEX 64 1 1 1 1 1 1 +MODULE_INDEX 65 1 1 1 1 1 1 +MODULE_INDEX 66 1 1 1 1 1 1 +MODULE_INDEX 67 1 1 1 1 1 1 +MODULE_INDEX 68 1 1 1 1 1 1 +MODULE_INDEX 69 1 1 1 1 1 1 +MODULE_INDEX 70 1 1 1 1 1 1 +MODULE_INDEX 71 1 1 1 1 1 1 +MODULE_INDEX 72 1 1 1 1 1 1 +MODULE_INDEX 73 1 1 1 1 1 1 +MODULE_INDEX 74 1 1 1 1 1 1 +MODULE_INDEX 75 1 1 1 1 1 1 +MODULE_INDEX 76 1 1 1 1 1 1 +MODULE_INDEX 77 1 1 1 1 1 1 +MODULE_INDEX 78 1 1 1 1 1 1 +MODULE_INDEX 79 1 1 1 1 1 1 +# layer 2 +MODULE_INDEX 80 1 1 1 1 1 1 +MODULE_INDEX 81 1 1 1 1 1 1 +MODULE_INDEX 82 1 1 1 1 1 1 +MODULE_INDEX 83 1 1 1 1 1 1 +MODULE_INDEX 84 1 1 1 1 1 1 +MODULE_INDEX 85 1 1 1 1 1 1 +MODULE_INDEX 86 1 1 1 1 1 1 +MODULE_INDEX 87 1 1 1 1 1 1 +MODULE_INDEX 88 1 1 1 1 1 1 +MODULE_INDEX 89 1 1 1 1 1 1 +MODULE_INDEX 90 1 1 1 1 1 1 +MODULE_INDEX 91 1 1 1 1 1 1 +MODULE_INDEX 92 1 1 1 1 1 1 +MODULE_INDEX 93 1 1 1 1 1 1 +MODULE_INDEX 94 1 1 1 1 1 1 +MODULE_INDEX 95 1 1 1 1 1 1 +MODULE_INDEX 96 1 1 1 1 1 1 +MODULE_INDEX 97 1 1 1 1 1 1 +MODULE_INDEX 98 1 1 1 1 1 1 +MODULE_INDEX 99 1 1 1 1 1 1 +MODULE_INDEX 100 1 1 1 1 1 1 +MODULE_INDEX 101 1 1 1 1 1 1 +MODULE_INDEX 102 1 1 1 1 1 1 +MODULE_INDEX 103 1 1 1 1 1 1 +MODULE_INDEX 104 1 1 1 1 1 1 +MODULE_INDEX 105 1 1 1 1 1 1 +MODULE_INDEX 106 1 1 1 1 1 1 +MODULE_INDEX 107 1 1 1 1 1 1 +MODULE_INDEX 108 1 1 1 1 1 1 +MODULE_INDEX 109 1 1 1 1 1 1 +MODULE_INDEX 110 1 1 1 1 1 1 +MODULE_INDEX 111 1 1 1 1 1 1 +MODULE_INDEX 112 1 1 1 1 1 1 +MODULE_INDEX 113 1 1 1 1 1 1 +MODULE_INDEX 114 1 1 1 1 1 1 +MODULE_INDEX 115 1 1 1 1 1 1 +MODULE_INDEX 116 1 1 1 1 1 1 +MODULE_INDEX 117 1 1 1 1 1 1 +MODULE_INDEX 118 1 1 1 1 1 1 +MODULE_INDEX 119 1 1 1 1 1 1 +MODULE_INDEX 120 1 1 1 1 1 1 +MODULE_INDEX 121 1 1 1 1 1 1 +MODULE_INDEX 122 1 1 1 1 1 1 +MODULE_INDEX 123 1 1 1 1 1 1 +MODULE_INDEX 124 1 1 1 1 1 1 +MODULE_INDEX 125 1 1 1 1 1 1 +MODULE_INDEX 126 1 1 1 1 1 1 +MODULE_INDEX 127 1 1 1 1 1 1 +MODULE_INDEX 128 1 1 1 1 1 1 +MODULE_INDEX 129 1 1 1 1 1 1 +MODULE_INDEX 130 1 1 1 1 1 1 +MODULE_INDEX 131 1 1 1 1 1 1 +MODULE_INDEX 132 1 1 1 1 1 1 +MODULE_INDEX 133 1 1 1 1 1 1 +MODULE_INDEX 134 1 1 1 1 1 1 +MODULE_INDEX 135 1 1 1 1 1 1 +MODULE_INDEX 136 1 1 1 1 1 1 +MODULE_INDEX 137 1 1 1 1 1 1 +MODULE_INDEX 138 1 1 1 1 1 1 +MODULE_INDEX 139 1 1 1 1 1 1 +MODULE_INDEX 140 1 1 1 1 1 1 +MODULE_INDEX 141 1 1 1 1 1 1 +MODULE_INDEX 142 1 1 1 1 1 1 +MODULE_INDEX 143 1 1 1 1 1 1 +MODULE_INDEX 144 1 1 1 1 1 1 +MODULE_INDEX 145 1 1 1 1 1 1 +MODULE_INDEX 146 1 1 1 1 1 1 +MODULE_INDEX 147 1 1 1 1 1 1 +MODULE_INDEX 148 1 1 1 1 1 1 +MODULE_INDEX 149 1 1 1 1 1 1 +MODULE_INDEX 150 1 1 1 1 1 1 +MODULE_INDEX 151 1 1 1 1 1 1 +MODULE_INDEX 152 1 1 1 1 1 1 +MODULE_INDEX 153 1 1 1 1 1 1 +MODULE_INDEX 154 1 1 1 1 1 1 +MODULE_INDEX 155 1 1 1 1 1 1 +MODULE_INDEX 156 1 1 1 1 1 1 +MODULE_INDEX 157 1 1 1 1 1 1 +MODULE_INDEX 158 1 1 1 1 1 1 +MODULE_INDEX 159 1 1 1 1 1 1 +MODULE_INDEX 160 1 1 1 1 1 1 +MODULE_INDEX 161 1 1 1 1 1 1 +MODULE_INDEX 162 1 1 1 1 1 1 +MODULE_INDEX 163 1 1 1 1 1 1 +MODULE_INDEX 164 1 1 1 1 1 1 +MODULE_INDEX 165 1 1 1 1 1 1 +MODULE_INDEX 166 1 1 1 1 1 1 +MODULE_INDEX 167 1 1 1 1 1 1 +MODULE_INDEX 168 1 1 1 1 1 1 +MODULE_INDEX 169 1 1 1 1 1 1 +MODULE_INDEX 170 1 1 1 1 1 1 +MODULE_INDEX 171 1 1 1 1 1 1 +MODULE_INDEX 172 1 1 1 1 1 1 +MODULE_INDEX 173 1 1 1 1 1 1 +MODULE_INDEX 174 1 1 1 1 1 1 +MODULE_INDEX 175 1 1 1 1 1 1 +MODULE_INDEX 176 1 1 1 1 1 1 +MODULE_INDEX 177 1 1 1 1 1 1 +MODULE_INDEX 178 1 1 1 1 1 1 +MODULE_INDEX 179 1 1 1 1 1 1 +MODULE_INDEX 180 1 1 1 1 1 1 +MODULE_INDEX 181 1 1 1 1 1 1 +MODULE_INDEX 182 1 1 1 1 1 1 +MODULE_INDEX 183 1 1 1 1 1 1 +MODULE_INDEX 184 1 1 1 1 1 1 +MODULE_INDEX 185 1 1 1 1 1 1 +MODULE_INDEX 186 1 1 1 1 1 1 +MODULE_INDEX 187 1 1 1 1 1 1 +MODULE_INDEX 188 1 1 1 1 1 1 +MODULE_INDEX 189 1 1 1 1 1 1 +MODULE_INDEX 190 1 1 1 1 1 1 +MODULE_INDEX 191 1 1 1 1 1 1 +MODULE_INDEX 192 1 1 1 1 1 1 +MODULE_INDEX 193 1 1 1 1 1 1 +MODULE_INDEX 194 1 1 1 1 1 1 +MODULE_INDEX 195 1 1 1 1 1 1 +MODULE_INDEX 196 1 1 1 1 1 1 +MODULE_INDEX 197 1 1 1 1 1 1 +MODULE_INDEX 198 1 1 1 1 1 1 +MODULE_INDEX 199 1 1 1 1 1 1 +MODULE_INDEX 200 1 1 1 1 1 1 +MODULE_INDEX 201 1 1 1 1 1 1 +MODULE_INDEX 202 1 1 1 1 1 1 +MODULE_INDEX 203 1 1 1 1 1 1 +MODULE_INDEX 204 1 1 1 1 1 1 +MODULE_INDEX 205 1 1 1 1 1 1 +MODULE_INDEX 206 1 1 1 1 1 1 +MODULE_INDEX 207 1 1 1 1 1 1 +MODULE_INDEX 208 1 1 1 1 1 1 +MODULE_INDEX 209 1 1 1 1 1 1 +MODULE_INDEX 210 1 1 1 1 1 1 +MODULE_INDEX 211 1 1 1 1 1 1 +MODULE_INDEX 212 1 1 1 1 1 1 +MODULE_INDEX 213 1 1 1 1 1 1 +MODULE_INDEX 214 1 1 1 1 1 1 +MODULE_INDEX 215 1 1 1 1 1 1 +MODULE_INDEX 216 1 1 1 1 1 1 +MODULE_INDEX 217 1 1 1 1 1 1 +MODULE_INDEX 218 1 1 1 1 1 1 +MODULE_INDEX 219 1 1 1 1 1 1 +MODULE_INDEX 220 1 1 1 1 1 1 +MODULE_INDEX 221 1 1 1 1 1 1 +MODULE_INDEX 222 1 1 1 1 1 1 +MODULE_INDEX 223 1 1 1 1 1 1 +MODULE_INDEX 224 1 1 1 1 1 1 +MODULE_INDEX 225 1 1 1 1 1 1 +MODULE_INDEX 226 1 1 1 1 1 1 +MODULE_INDEX 227 1 1 1 1 1 1 +MODULE_INDEX 228 1 1 1 1 1 1 +MODULE_INDEX 229 1 1 1 1 1 1 +MODULE_INDEX 230 1 1 1 1 1 1 +MODULE_INDEX 231 1 1 1 1 1 1 +MODULE_INDEX 232 1 1 1 1 1 1 +MODULE_INDEX 233 1 1 1 1 1 1 +MODULE_INDEX 234 1 1 1 1 1 1 +MODULE_INDEX 235 1 1 1 1 1 1 +MODULE_INDEX 236 1 1 1 1 1 1 +MODULE_INDEX 237 1 1 1 1 1 1 +MODULE_INDEX 238 1 1 1 1 1 1 +MODULE_INDEX 239 1 1 1 1 1 1 +# layer 3 +MODULE_INDEX 240 1 1 1 1 1 1 +MODULE_INDEX 241 1 1 1 1 1 1 +MODULE_INDEX 242 1 1 1 1 1 1 +MODULE_INDEX 243 1 1 1 1 1 1 +MODULE_INDEX 244 1 1 1 1 1 1 +MODULE_INDEX 245 1 1 1 1 1 1 +MODULE_INDEX 246 1 1 1 1 1 1 +MODULE_INDEX 247 1 1 1 1 1 1 +MODULE_INDEX 248 1 1 1 1 1 1 +MODULE_INDEX 249 1 1 1 1 1 1 +MODULE_INDEX 250 1 1 1 1 1 1 +MODULE_INDEX 251 1 1 1 1 1 1 +MODULE_INDEX 252 1 1 1 1 1 1 +MODULE_INDEX 253 1 1 1 1 1 1 +MODULE_INDEX 254 1 1 1 1 1 1 +MODULE_INDEX 255 1 1 1 1 1 1 +MODULE_INDEX 256 1 1 1 1 1 1 +MODULE_INDEX 257 1 1 1 1 1 1 +MODULE_INDEX 258 1 1 1 1 1 1 +MODULE_INDEX 259 1 1 1 1 1 1 +MODULE_INDEX 260 1 1 1 1 1 1 +MODULE_INDEX 261 1 1 1 1 1 1 +MODULE_INDEX 262 1 1 1 1 1 1 +MODULE_INDEX 263 1 1 1 1 1 1 +MODULE_INDEX 264 1 1 1 1 1 1 +MODULE_INDEX 265 1 1 1 1 1 1 +MODULE_INDEX 266 1 1 1 1 1 1 +MODULE_INDEX 267 1 1 1 1 1 1 +MODULE_INDEX 268 1 1 1 1 1 1 +MODULE_INDEX 269 1 1 1 1 1 1 +MODULE_INDEX 270 1 1 1 1 1 1 +MODULE_INDEX 271 1 1 1 1 1 1 +MODULE_INDEX 272 1 1 1 1 1 1 +MODULE_INDEX 273 1 1 1 1 1 1 +MODULE_INDEX 274 1 1 1 1 1 1 +MODULE_INDEX 275 1 1 1 1 1 1 +MODULE_INDEX 276 1 1 1 1 1 1 +MODULE_INDEX 277 1 1 1 1 1 1 +MODULE_INDEX 278 1 1 1 1 1 1 +MODULE_INDEX 279 1 1 1 1 1 1 +MODULE_INDEX 280 1 1 1 1 1 1 +MODULE_INDEX 281 1 1 1 1 1 1 +MODULE_INDEX 282 1 1 1 1 1 1 +MODULE_INDEX 283 1 1 1 1 1 1 +MODULE_INDEX 284 1 1 1 1 1 1 +MODULE_INDEX 285 1 1 1 1 1 1 +MODULE_INDEX 286 1 1 1 1 1 1 +MODULE_INDEX 287 1 1 1 1 1 1 +MODULE_INDEX 288 1 1 1 1 1 1 +MODULE_INDEX 289 1 1 1 1 1 1 +MODULE_INDEX 290 1 1 1 1 1 1 +MODULE_INDEX 291 1 1 1 1 1 1 +MODULE_INDEX 292 1 1 1 1 1 1 +MODULE_INDEX 293 1 1 1 1 1 1 +MODULE_INDEX 294 1 1 1 1 1 1 +MODULE_INDEX 295 1 1 1 1 1 1 +MODULE_INDEX 296 1 1 1 1 1 1 +MODULE_INDEX 297 1 1 1 1 1 1 +MODULE_INDEX 298 1 1 1 1 1 1 +MODULE_INDEX 299 1 1 1 1 1 1 +MODULE_INDEX 300 1 1 1 1 1 1 +MODULE_INDEX 301 1 1 1 1 1 1 +MODULE_INDEX 302 1 1 1 1 1 1 +MODULE_INDEX 303 1 1 1 1 1 1 +MODULE_INDEX 304 1 1 1 1 1 1 +MODULE_INDEX 305 1 1 1 1 1 1 +MODULE_INDEX 306 1 1 1 1 1 1 +MODULE_INDEX 307 1 1 1 1 1 1 +MODULE_INDEX 308 1 1 1 1 1 1 +MODULE_INDEX 309 1 1 1 1 1 1 +MODULE_INDEX 310 1 1 1 1 1 1 +MODULE_INDEX 311 1 1 1 1 1 1 +MODULE_INDEX 312 1 1 1 1 1 1 +MODULE_INDEX 313 1 1 1 1 1 1 +MODULE_INDEX 314 1 1 1 1 1 1 +MODULE_INDEX 315 1 1 1 1 1 1 +MODULE_INDEX 316 1 1 1 1 1 1 +MODULE_INDEX 317 1 1 1 1 1 1 +MODULE_INDEX 318 1 1 1 1 1 1 +MODULE_INDEX 319 1 1 1 1 1 1 +MODULE_INDEX 320 1 1 1 1 1 1 +MODULE_INDEX 321 1 1 1 1 1 1 +MODULE_INDEX 322 1 1 1 1 1 1 +MODULE_INDEX 323 1 1 1 1 1 1 +# layer 4 +MODULE_INDEX 324 1 1 1 1 1 1 +MODULE_INDEX 325 1 1 1 1 1 1 +MODULE_INDEX 326 1 1 1 1 1 1 +MODULE_INDEX 327 1 1 1 1 1 1 +MODULE_INDEX 328 1 1 1 1 1 1 +MODULE_INDEX 329 1 1 1 1 1 1 +MODULE_INDEX 330 1 1 1 1 1 1 +MODULE_INDEX 331 1 1 1 1 1 1 +MODULE_INDEX 332 1 1 1 1 1 1 +MODULE_INDEX 333 1 1 1 1 1 1 +MODULE_INDEX 334 1 1 1 1 1 1 +MODULE_INDEX 335 1 1 1 1 1 1 +MODULE_INDEX 336 1 1 1 1 1 1 +MODULE_INDEX 337 1 1 1 1 1 1 +MODULE_INDEX 338 1 1 1 1 1 1 +MODULE_INDEX 339 1 1 1 1 1 1 +MODULE_INDEX 340 1 1 1 1 1 1 +MODULE_INDEX 341 1 1 1 1 1 1 +MODULE_INDEX 342 1 1 1 1 1 1 +MODULE_INDEX 343 1 1 1 1 1 1 +MODULE_INDEX 344 1 1 1 1 1 1 +MODULE_INDEX 345 1 1 1 1 1 1 +MODULE_INDEX 346 1 1 1 1 1 1 +MODULE_INDEX 347 1 1 1 1 1 1 +MODULE_INDEX 348 1 1 1 1 1 1 +MODULE_INDEX 349 1 1 1 1 1 1 +MODULE_INDEX 350 1 1 1 1 1 1 +MODULE_INDEX 351 1 1 1 1 1 1 +MODULE_INDEX 352 1 1 1 1 1 1 +MODULE_INDEX 353 1 1 1 1 1 1 +MODULE_INDEX 354 1 1 1 1 1 1 +MODULE_INDEX 355 1 1 1 1 1 1 +MODULE_INDEX 356 1 1 1 1 1 1 +MODULE_INDEX 357 1 1 1 1 1 1 +MODULE_INDEX 358 1 1 1 1 1 1 +MODULE_INDEX 359 1 1 1 1 1 1 +MODULE_INDEX 360 1 1 1 1 1 1 +MODULE_INDEX 361 1 1 1 1 1 1 +MODULE_INDEX 362 1 1 1 1 1 1 +MODULE_INDEX 363 1 1 1 1 1 1 +MODULE_INDEX 364 1 1 1 1 1 1 +MODULE_INDEX 365 1 1 1 1 1 1 +MODULE_INDEX 366 1 1 1 1 1 1 +MODULE_INDEX 367 1 1 1 1 1 1 +MODULE_INDEX 368 1 1 1 1 1 1 +MODULE_INDEX 369 1 1 1 1 1 1 +MODULE_INDEX 370 1 1 1 1 1 1 +MODULE_INDEX 371 1 1 1 1 1 1 +MODULE_INDEX 372 1 1 1 1 1 1 +MODULE_INDEX 373 1 1 1 1 1 1 +MODULE_INDEX 374 1 1 1 1 1 1 +MODULE_INDEX 375 1 1 1 1 1 1 +MODULE_INDEX 376 1 1 1 1 1 1 +MODULE_INDEX 377 1 1 1 1 1 1 +MODULE_INDEX 378 1 1 1 1 1 1 +MODULE_INDEX 379 1 1 1 1 1 1 +MODULE_INDEX 380 1 1 1 1 1 1 +MODULE_INDEX 381 1 1 1 1 1 1 +MODULE_INDEX 382 1 1 1 1 1 1 +MODULE_INDEX 383 1 1 1 1 1 1 +MODULE_INDEX 384 1 1 1 1 1 1 +MODULE_INDEX 385 1 1 1 1 1 1 +MODULE_INDEX 386 1 1 1 1 1 1 +MODULE_INDEX 387 1 1 1 1 1 1 +MODULE_INDEX 388 1 1 1 1 1 1 +MODULE_INDEX 389 1 1 1 1 1 1 +MODULE_INDEX 390 1 1 1 1 1 1 +MODULE_INDEX 391 1 1 1 1 1 1 +MODULE_INDEX 392 1 1 1 1 1 1 +MODULE_INDEX 393 1 1 1 1 1 1 +MODULE_INDEX 394 1 1 1 1 1 1 +MODULE_INDEX 395 1 1 1 1 1 1 +MODULE_INDEX 396 1 1 1 1 1 1 +MODULE_INDEX 397 1 1 1 1 1 1 +MODULE_INDEX 398 1 1 1 1 1 1 +MODULE_INDEX 399 1 1 1 1 1 1 +MODULE_INDEX 400 1 1 1 1 1 1 +MODULE_INDEX 401 1 1 1 1 1 1 +MODULE_INDEX 402 1 1 1 1 1 1 +MODULE_INDEX 403 1 1 1 1 1 1 +MODULE_INDEX 404 1 1 1 1 1 1 +MODULE_INDEX 405 1 1 1 1 1 1 +MODULE_INDEX 406 1 1 1 1 1 1 +MODULE_INDEX 407 1 1 1 1 1 1 +MODULE_INDEX 408 1 1 1 1 1 1 +MODULE_INDEX 409 1 1 1 1 1 1 +MODULE_INDEX 410 1 1 1 1 1 1 +MODULE_INDEX 411 1 1 1 1 1 1 +MODULE_INDEX 412 1 1 1 1 1 1 +MODULE_INDEX 413 1 1 1 1 1 1 +MODULE_INDEX 414 1 1 1 1 1 1 +MODULE_INDEX 415 1 1 1 1 1 1 +MODULE_INDEX 416 1 1 1 1 1 1 +MODULE_INDEX 417 1 1 1 1 1 1 +MODULE_INDEX 418 1 1 1 1 1 1 +MODULE_INDEX 419 1 1 1 1 1 1 +MODULE_INDEX 420 1 1 1 1 1 1 +MODULE_INDEX 421 1 1 1 1 1 1 +MODULE_INDEX 422 1 1 1 1 1 1 +MODULE_INDEX 423 1 1 1 1 1 1 +MODULE_INDEX 424 1 1 1 1 1 1 +MODULE_INDEX 425 1 1 1 1 1 1 +MODULE_INDEX 426 1 1 1 1 1 1 +MODULE_INDEX 427 1 1 1 1 1 1 +MODULE_INDEX 428 1 1 1 1 1 1 +MODULE_INDEX 429 1 1 1 1 1 1 +MODULE_INDEX 430 1 1 1 1 1 1 +MODULE_INDEX 431 1 1 1 1 1 1 +MODULE_INDEX 432 1 1 1 1 1 1 +MODULE_INDEX 433 1 1 1 1 1 1 +MODULE_INDEX 434 1 1 1 1 1 1 +MODULE_INDEX 435 1 1 1 1 1 1 +MODULE_INDEX 436 1 1 1 1 1 1 +MODULE_INDEX 437 1 1 1 1 1 1 +MODULE_INDEX 438 1 1 1 1 1 1 +MODULE_INDEX 439 1 1 1 1 1 1 +MODULE_INDEX 440 1 1 1 1 1 1 +MODULE_INDEX 441 1 1 1 1 1 1 +MODULE_INDEX 442 1 1 1 1 1 1 +MODULE_INDEX 443 1 1 1 1 1 1 +MODULE_INDEX 444 1 1 1 1 1 1 +MODULE_INDEX 445 1 1 1 1 1 1 +MODULE_INDEX 446 1 1 1 1 1 1 +MODULE_INDEX 447 1 1 1 1 1 1 +MODULE_INDEX 448 1 1 1 1 1 1 +MODULE_INDEX 449 1 1 1 1 1 1 +MODULE_INDEX 450 1 1 1 1 1 1 +MODULE_INDEX 451 1 1 1 1 1 1 +MODULE_INDEX 452 1 1 1 1 1 1 +MODULE_INDEX 453 1 1 1 1 1 1 +MODULE_INDEX 454 1 1 1 1 1 1 +MODULE_INDEX 455 1 1 1 1 1 1 +MODULE_INDEX 456 1 1 1 1 1 1 +MODULE_INDEX 457 1 1 1 1 1 1 +MODULE_INDEX 458 1 1 1 1 1 1 +MODULE_INDEX 459 1 1 1 1 1 1 +MODULE_INDEX 460 1 1 1 1 1 1 +MODULE_INDEX 461 1 1 1 1 1 1 +MODULE_INDEX 462 1 1 1 1 1 1 +MODULE_INDEX 463 1 1 1 1 1 1 +MODULE_INDEX 464 1 1 1 1 1 1 +MODULE_INDEX 465 1 1 1 1 1 1 +MODULE_INDEX 466 1 1 1 1 1 1 +MODULE_INDEX 467 1 1 1 1 1 1 +MODULE_INDEX 468 1 1 1 1 1 1 +MODULE_INDEX 469 1 1 1 1 1 1 +MODULE_INDEX 470 1 1 1 1 1 1 +MODULE_INDEX 471 1 1 1 1 1 1 +MODULE_INDEX 472 1 1 1 1 1 1 +MODULE_INDEX 473 1 1 1 1 1 1 +MODULE_INDEX 474 1 1 1 1 1 1 +MODULE_INDEX 475 1 1 1 1 1 1 +MODULE_INDEX 476 1 1 1 1 1 1 +MODULE_INDEX 477 1 1 1 1 1 1 +MODULE_INDEX 478 1 1 1 1 1 1 +MODULE_INDEX 479 1 1 1 1 1 1 +MODULE_INDEX 480 1 1 1 1 1 1 +MODULE_INDEX 481 1 1 1 1 1 1 +MODULE_INDEX 482 1 1 1 1 1 1 +MODULE_INDEX 483 1 1 1 1 1 1 +MODULE_INDEX 484 1 1 1 1 1 1 +MODULE_INDEX 485 1 1 1 1 1 1 +MODULE_INDEX 486 1 1 1 1 1 1 +MODULE_INDEX 487 1 1 1 1 1 1 +MODULE_INDEX 488 1 1 1 1 1 1 +MODULE_INDEX 489 1 1 1 1 1 1 +MODULE_INDEX 490 1 1 1 1 1 1 +MODULE_INDEX 491 1 1 1 1 1 1 +MODULE_INDEX 492 1 1 1 1 1 1 +MODULE_INDEX 493 1 1 1 1 1 1 +MODULE_INDEX 494 1 1 1 1 1 1 +MODULE_INDEX 495 1 1 1 1 1 1 +MODULE_INDEX 496 1 1 1 1 1 1 +MODULE_INDEX 497 1 1 1 1 1 1 +MODULE_INDEX 498 1 1 1 1 1 1 +MODULE_INDEX 499 1 1 1 1 1 1 +# layer 5 +MODULE_INDEX 500 1 1 1 1 1 1 +MODULE_INDEX 501 1 1 1 1 1 1 +MODULE_INDEX 502 1 1 1 1 1 1 +MODULE_INDEX 503 1 1 1 1 1 1 +MODULE_INDEX 504 1 1 1 1 1 1 +MODULE_INDEX 505 1 1 1 1 1 1 +MODULE_INDEX 506 1 1 1 1 1 1 +MODULE_INDEX 507 1 1 1 1 1 1 +MODULE_INDEX 508 1 1 1 1 1 1 +MODULE_INDEX 509 1 1 1 1 1 1 +MODULE_INDEX 510 1 1 1 1 1 1 +MODULE_INDEX 511 1 1 1 1 1 1 +MODULE_INDEX 512 1 1 1 1 1 1 +MODULE_INDEX 513 1 1 1 1 1 1 +MODULE_INDEX 514 1 1 1 1 1 1 +MODULE_INDEX 515 1 1 1 1 1 1 +MODULE_INDEX 516 1 1 1 1 1 1 +MODULE_INDEX 517 1 1 1 1 1 1 +MODULE_INDEX 518 1 1 1 1 1 1 +MODULE_INDEX 519 1 1 1 1 1 1 +MODULE_INDEX 520 1 1 1 1 1 1 +MODULE_INDEX 521 1 1 1 1 1 1 +MODULE_INDEX 522 1 1 1 1 1 1 +MODULE_INDEX 523 1 1 1 1 1 1 +MODULE_INDEX 524 1 1 1 1 1 1 +MODULE_INDEX 525 1 1 1 1 1 1 +MODULE_INDEX 526 1 1 1 1 1 1 +MODULE_INDEX 527 1 1 1 1 1 1 +MODULE_INDEX 528 1 1 1 1 1 1 +MODULE_INDEX 529 1 1 1 1 1 1 +MODULE_INDEX 530 1 1 1 1 1 1 +MODULE_INDEX 531 1 1 1 1 1 1 +MODULE_INDEX 532 1 1 1 1 1 1 +MODULE_INDEX 533 1 1 1 1 1 1 +MODULE_INDEX 534 1 1 1 1 1 1 +MODULE_INDEX 535 1 1 1 1 1 1 +MODULE_INDEX 536 1 1 1 1 1 1 +MODULE_INDEX 537 1 1 1 1 1 1 +MODULE_INDEX 538 1 1 1 1 1 1 +MODULE_INDEX 539 1 1 1 1 1 1 +MODULE_INDEX 540 1 1 1 1 1 1 +MODULE_INDEX 541 1 1 1 1 1 1 +MODULE_INDEX 542 1 1 1 1 1 1 +MODULE_INDEX 543 1 1 1 1 1 1 +MODULE_INDEX 544 1 1 1 1 1 1 +MODULE_INDEX 545 1 1 1 1 1 1 +MODULE_INDEX 546 1 1 1 1 1 1 +MODULE_INDEX 547 1 1 1 1 1 1 +MODULE_INDEX 548 1 1 1 1 1 1 +MODULE_INDEX 549 1 1 1 1 1 1 +MODULE_INDEX 550 1 1 1 1 1 1 +MODULE_INDEX 551 1 1 1 1 1 1 +MODULE_INDEX 552 1 1 1 1 1 1 +MODULE_INDEX 553 1 1 1 1 1 1 +MODULE_INDEX 554 1 1 1 1 1 1 +MODULE_INDEX 555 1 1 1 1 1 1 +MODULE_INDEX 556 1 1 1 1 1 1 +MODULE_INDEX 557 1 1 1 1 1 1 +MODULE_INDEX 558 1 1 1 1 1 1 +MODULE_INDEX 559 1 1 1 1 1 1 +MODULE_INDEX 560 1 1 1 1 1 1 +MODULE_INDEX 561 1 1 1 1 1 1 +MODULE_INDEX 562 1 1 1 1 1 1 +MODULE_INDEX 563 1 1 1 1 1 1 +MODULE_INDEX 564 1 1 1 1 1 1 +MODULE_INDEX 565 1 1 1 1 1 1 +MODULE_INDEX 566 1 1 1 1 1 1 +MODULE_INDEX 567 1 1 1 1 1 1 +MODULE_INDEX 568 1 1 1 1 1 1 +MODULE_INDEX 569 1 1 1 1 1 1 +MODULE_INDEX 570 1 1 1 1 1 1 +MODULE_INDEX 571 1 1 1 1 1 1 +MODULE_INDEX 572 1 1 1 1 1 1 +MODULE_INDEX 573 1 1 1 1 1 1 +MODULE_INDEX 574 1 1 1 1 1 1 +MODULE_INDEX 575 1 1 1 1 1 1 +MODULE_INDEX 576 1 1 1 1 1 1 +MODULE_INDEX 577 1 1 1 1 1 1 +MODULE_INDEX 578 1 1 1 1 1 1 +MODULE_INDEX 579 1 1 1 1 1 1 +MODULE_INDEX 580 1 1 1 1 1 1 +MODULE_INDEX 581 1 1 1 1 1 1 +MODULE_INDEX 582 1 1 1 1 1 1 +MODULE_INDEX 583 1 1 1 1 1 1 +MODULE_INDEX 584 1 1 1 1 1 1 +MODULE_INDEX 585 1 1 1 1 1 1 +MODULE_INDEX 586 1 1 1 1 1 1 +MODULE_INDEX 587 1 1 1 1 1 1 +MODULE_INDEX 588 1 1 1 1 1 1 +MODULE_INDEX 589 1 1 1 1 1 1 +MODULE_INDEX 590 1 1 1 1 1 1 +MODULE_INDEX 591 1 1 1 1 1 1 +MODULE_INDEX 592 1 1 1 1 1 1 +MODULE_INDEX 593 1 1 1 1 1 1 +MODULE_INDEX 594 1 1 1 1 1 1 +MODULE_INDEX 595 1 1 1 1 1 1 +MODULE_INDEX 596 1 1 1 1 1 1 +MODULE_INDEX 597 1 1 1 1 1 1 +MODULE_INDEX 598 1 1 1 1 1 1 +MODULE_INDEX 599 1 1 1 1 1 1 +MODULE_INDEX 600 1 1 1 1 1 1 +MODULE_INDEX 601 1 1 1 1 1 1 +MODULE_INDEX 602 1 1 1 1 1 1 +MODULE_INDEX 603 1 1 1 1 1 1 +MODULE_INDEX 604 1 1 1 1 1 1 +MODULE_INDEX 605 1 1 1 1 1 1 +MODULE_INDEX 606 1 1 1 1 1 1 +MODULE_INDEX 607 1 1 1 1 1 1 +MODULE_INDEX 608 1 1 1 1 1 1 +MODULE_INDEX 609 1 1 1 1 1 1 +MODULE_INDEX 610 1 1 1 1 1 1 +MODULE_INDEX 611 1 1 1 1 1 1 +MODULE_INDEX 612 1 1 1 1 1 1 +MODULE_INDEX 613 1 1 1 1 1 1 +MODULE_INDEX 614 1 1 1 1 1 1 +MODULE_INDEX 615 1 1 1 1 1 1 +MODULE_INDEX 616 1 1 1 1 1 1 +MODULE_INDEX 617 1 1 1 1 1 1 +MODULE_INDEX 618 1 1 1 1 1 1 +MODULE_INDEX 619 1 1 1 1 1 1 +MODULE_INDEX 620 1 1 1 1 1 1 +MODULE_INDEX 621 1 1 1 1 1 1 +MODULE_INDEX 622 1 1 1 1 1 1 +MODULE_INDEX 623 1 1 1 1 1 1 +MODULE_INDEX 624 1 1 1 1 1 1 +MODULE_INDEX 625 1 1 1 1 1 1 +MODULE_INDEX 626 1 1 1 1 1 1 +MODULE_INDEX 627 1 1 1 1 1 1 +MODULE_INDEX 628 1 1 1 1 1 1 +MODULE_INDEX 629 1 1 1 1 1 1 +MODULE_INDEX 630 1 1 1 1 1 1 +MODULE_INDEX 631 1 1 1 1 1 1 +MODULE_INDEX 632 1 1 1 1 1 1 +MODULE_INDEX 633 1 1 1 1 1 1 +MODULE_INDEX 634 1 1 1 1 1 1 +MODULE_INDEX 635 1 1 1 1 1 1 +MODULE_INDEX 636 1 1 1 1 1 1 +MODULE_INDEX 637 1 1 1 1 1 1 +MODULE_INDEX 638 1 1 1 1 1 1 +MODULE_INDEX 639 1 1 1 1 1 1 +MODULE_INDEX 640 1 1 1 1 1 1 +MODULE_INDEX 641 1 1 1 1 1 1 +MODULE_INDEX 642 1 1 1 1 1 1 +MODULE_INDEX 643 1 1 1 1 1 1 +MODULE_INDEX 644 1 1 1 1 1 1 +MODULE_INDEX 645 1 1 1 1 1 1 +MODULE_INDEX 646 1 1 1 1 1 1 +MODULE_INDEX 647 1 1 1 1 1 1 +MODULE_INDEX 648 1 1 1 1 1 1 +MODULE_INDEX 649 1 1 1 1 1 1 +MODULE_INDEX 650 1 1 1 1 1 1 +MODULE_INDEX 651 1 1 1 1 1 1 +MODULE_INDEX 652 1 1 1 1 1 1 +MODULE_INDEX 653 1 1 1 1 1 1 +MODULE_INDEX 654 1 1 1 1 1 1 +MODULE_INDEX 655 1 1 1 1 1 1 +MODULE_INDEX 656 1 1 1 1 1 1 +MODULE_INDEX 657 1 1 1 1 1 1 +MODULE_INDEX 658 1 1 1 1 1 1 +MODULE_INDEX 659 1 1 1 1 1 1 +MODULE_INDEX 660 1 1 1 1 1 1 +MODULE_INDEX 661 1 1 1 1 1 1 +MODULE_INDEX 662 1 1 1 1 1 1 +MODULE_INDEX 663 1 1 1 1 1 1 +MODULE_INDEX 664 1 1 1 1 1 1 +MODULE_INDEX 665 1 1 1 1 1 1 +MODULE_INDEX 666 1 1 1 1 1 1 +MODULE_INDEX 667 1 1 1 1 1 1 +MODULE_INDEX 668 1 1 1 1 1 1 +MODULE_INDEX 669 1 1 1 1 1 1 +MODULE_INDEX 670 1 1 1 1 1 1 +MODULE_INDEX 671 1 1 1 1 1 1 +MODULE_INDEX 672 1 1 1 1 1 1 +MODULE_INDEX 673 1 1 1 1 1 1 +MODULE_INDEX 674 1 1 1 1 1 1 +MODULE_INDEX 675 1 1 1 1 1 1 +MODULE_INDEX 676 1 1 1 1 1 1 +MODULE_INDEX 677 1 1 1 1 1 1 +MODULE_INDEX 678 1 1 1 1 1 1 +MODULE_INDEX 679 1 1 1 1 1 1 +MODULE_INDEX 680 1 1 1 1 1 1 +MODULE_INDEX 681 1 1 1 1 1 1 +MODULE_INDEX 682 1 1 1 1 1 1 +MODULE_INDEX 683 1 1 1 1 1 1 +MODULE_INDEX 684 1 1 1 1 1 1 +MODULE_INDEX 685 1 1 1 1 1 1 +MODULE_INDEX 686 1 1 1 1 1 1 +MODULE_INDEX 687 1 1 1 1 1 1 +MODULE_INDEX 688 1 1 1 1 1 1 +MODULE_INDEX 689 1 1 1 1 1 1 +MODULE_INDEX 690 1 1 1 1 1 1 +MODULE_INDEX 691 1 1 1 1 1 1 +MODULE_INDEX 692 1 1 1 1 1 1 +MODULE_INDEX 693 1 1 1 1 1 1 +MODULE_INDEX 694 1 1 1 1 1 1 +MODULE_INDEX 695 1 1 1 1 1 1 +MODULE_INDEX 696 1 1 1 1 1 1 +MODULE_INDEX 697 1 1 1 1 1 1 +MODULE_INDEX 698 1 1 1 1 1 1 +MODULE_INDEX 699 1 1 1 1 1 1 +MODULE_INDEX 700 1 1 1 1 1 1 +MODULE_INDEX 701 1 1 1 1 1 1 +MODULE_INDEX 702 1 1 1 1 1 1 +MODULE_INDEX 703 1 1 1 1 1 1 +MODULE_INDEX 704 1 1 1 1 1 1 +MODULE_INDEX 705 1 1 1 1 1 1 +MODULE_INDEX 706 1 1 1 1 1 1 +MODULE_INDEX 707 1 1 1 1 1 1 +MODULE_INDEX 708 1 1 1 1 1 1 +MODULE_INDEX 709 1 1 1 1 1 1 +MODULE_INDEX 710 1 1 1 1 1 1 +MODULE_INDEX 711 1 1 1 1 1 1 +MODULE_INDEX 712 1 1 1 1 1 1 +MODULE_INDEX 713 1 1 1 1 1 1 +MODULE_INDEX 714 1 1 1 1 1 1 +MODULE_INDEX 715 1 1 1 1 1 1 +MODULE_INDEX 716 1 1 1 1 1 1 +MODULE_INDEX 717 1 1 1 1 1 1 +MODULE_INDEX 718 1 1 1 1 1 1 +MODULE_INDEX 719 1 1 1 1 1 1 +MODULE_INDEX 720 1 1 1 1 1 1 +MODULE_INDEX 721 1 1 1 1 1 1 +MODULE_INDEX 722 1 1 1 1 1 1 +MODULE_INDEX 723 1 1 1 1 1 1 +MODULE_INDEX 724 1 1 1 1 1 1 +MODULE_INDEX 725 1 1 1 1 1 1 +MODULE_INDEX 726 1 1 1 1 1 1 +MODULE_INDEX 727 1 1 1 1 1 1 +MODULE_INDEX 728 1 1 1 1 1 1 +MODULE_INDEX 729 1 1 1 1 1 1 +MODULE_INDEX 730 1 1 1 1 1 1 +MODULE_INDEX 731 1 1 1 1 1 1 +MODULE_INDEX 732 1 1 1 1 1 1 +MODULE_INDEX 733 1 1 1 1 1 1 +MODULE_INDEX 734 1 1 1 1 1 1 +MODULE_INDEX 735 1 1 1 1 1 1 +MODULE_INDEX 736 1 1 1 1 1 1 +MODULE_INDEX 737 1 1 1 1 1 1 +MODULE_INDEX 738 1 1 1 1 1 1 +MODULE_INDEX 739 1 1 1 1 1 1 +MODULE_INDEX 740 1 1 1 1 1 1 +MODULE_INDEX 741 1 1 1 1 1 1 +MODULE_INDEX 742 1 1 1 1 1 1 +MODULE_INDEX 743 1 1 1 1 1 1 +MODULE_INDEX 744 1 1 1 1 1 1 +MODULE_INDEX 745 1 1 1 1 1 1 +MODULE_INDEX 746 1 1 1 1 1 1 +MODULE_INDEX 747 1 1 1 1 1 1 +MODULE_INDEX 748 1 1 1 1 1 1 +MODULE_INDEX 749 1 1 1 1 1 1 +MODULE_INDEX 750 1 1 1 1 1 1 +MODULE_INDEX 751 1 1 1 1 1 1 +MODULE_INDEX 752 1 1 1 1 1 1 +MODULE_INDEX 753 1 1 1 1 1 1 +MODULE_INDEX 754 1 1 1 1 1 1 +MODULE_INDEX 755 1 1 1 1 1 1 +MODULE_INDEX 756 1 1 1 1 1 1 +MODULE_INDEX 757 1 1 1 1 1 1 +MODULE_INDEX 758 1 1 1 1 1 1 +MODULE_INDEX 759 1 1 1 1 1 1 +MODULE_INDEX 760 1 1 1 1 1 1 +MODULE_INDEX 761 1 1 1 1 1 1 +MODULE_INDEX 762 1 1 1 1 1 1 +MODULE_INDEX 763 1 1 1 1 1 1 +MODULE_INDEX 764 1 1 1 1 1 1 +MODULE_INDEX 765 1 1 1 1 1 1 +MODULE_INDEX 766 1 1 1 1 1 1 +MODULE_INDEX 767 1 1 1 1 1 1 +MODULE_INDEX 768 1 1 1 1 1 1 +MODULE_INDEX 769 1 1 1 1 1 1 +MODULE_INDEX 770 1 1 1 1 1 1 +MODULE_INDEX 771 1 1 1 1 1 1 +MODULE_INDEX 772 1 1 1 1 1 1 +MODULE_INDEX 773 1 1 1 1 1 1 +MODULE_INDEX 774 1 1 1 1 1 1 +MODULE_INDEX 775 1 1 1 1 1 1 +MODULE_INDEX 776 1 1 1 1 1 1 +MODULE_INDEX 777 1 1 1 1 1 1 +MODULE_INDEX 778 1 1 1 1 1 1 +MODULE_INDEX 779 1 1 1 1 1 1 +MODULE_INDEX 780 1 1 1 1 1 1 +MODULE_INDEX 781 1 1 1 1 1 1 +MODULE_INDEX 782 1 1 1 1 1 1 +MODULE_INDEX 783 1 1 1 1 1 1 +MODULE_INDEX 784 1 1 1 1 1 1 +MODULE_INDEX 785 1 1 1 1 1 1 +MODULE_INDEX 786 1 1 1 1 1 1 +MODULE_INDEX 787 1 1 1 1 1 1 +MODULE_INDEX 788 1 1 1 1 1 1 +MODULE_INDEX 789 1 1 1 1 1 1 +MODULE_INDEX 790 1 1 1 1 1 1 +MODULE_INDEX 791 1 1 1 1 1 1 +MODULE_INDEX 792 1 1 1 1 1 1 +MODULE_INDEX 793 1 1 1 1 1 1 +MODULE_INDEX 794 1 1 1 1 1 1 +MODULE_INDEX 795 1 1 1 1 1 1 +MODULE_INDEX 796 1 1 1 1 1 1 +MODULE_INDEX 797 1 1 1 1 1 1 +MODULE_INDEX 798 1 1 1 1 1 1 +MODULE_INDEX 799 1 1 1 1 1 1 +MODULE_INDEX 800 1 1 1 1 1 1 +MODULE_INDEX 801 1 1 1 1 1 1 +MODULE_INDEX 802 1 1 1 1 1 1 +MODULE_INDEX 803 1 1 1 1 1 1 +MODULE_INDEX 804 1 1 1 1 1 1 +MODULE_INDEX 805 1 1 1 1 1 1 +MODULE_INDEX 806 1 1 1 1 1 1 +MODULE_INDEX 807 1 1 1 1 1 1 +MODULE_INDEX 808 1 1 1 1 1 1 +MODULE_INDEX 809 1 1 1 1 1 1 +MODULE_INDEX 810 1 1 1 1 1 1 +MODULE_INDEX 811 1 1 1 1 1 1 +MODULE_INDEX 812 1 1 1 1 1 1 +MODULE_INDEX 813 1 1 1 1 1 1 +MODULE_INDEX 814 1 1 1 1 1 1 +MODULE_INDEX 815 1 1 1 1 1 1 +MODULE_INDEX 816 1 1 1 1 1 1 +MODULE_INDEX 817 1 1 1 1 1 1 +MODULE_INDEX 818 1 1 1 1 1 1 +MODULE_INDEX 819 1 1 1 1 1 1 +MODULE_INDEX 820 1 1 1 1 1 1 +MODULE_INDEX 821 1 1 1 1 1 1 +MODULE_INDEX 822 1 1 1 1 1 1 +MODULE_INDEX 823 1 1 1 1 1 1 +MODULE_INDEX 824 1 1 1 1 1 1 +MODULE_INDEX 825 1 1 1 1 1 1 +MODULE_INDEX 826 1 1 1 1 1 1 +MODULE_INDEX 827 1 1 1 1 1 1 +MODULE_INDEX 828 1 1 1 1 1 1 +MODULE_INDEX 829 1 1 1 1 1 1 +MODULE_INDEX 830 1 1 1 1 1 1 +MODULE_INDEX 831 1 1 1 1 1 1 +MODULE_INDEX 832 1 1 1 1 1 1 +MODULE_INDEX 833 1 1 1 1 1 1 +MODULE_INDEX 834 1 1 1 1 1 1 +MODULE_INDEX 835 1 1 1 1 1 1 +MODULE_INDEX 836 1 1 1 1 1 1 +MODULE_INDEX 837 1 1 1 1 1 1 +MODULE_INDEX 838 1 1 1 1 1 1 +MODULE_INDEX 839 1 1 1 1 1 1 +MODULE_INDEX 840 1 1 1 1 1 1 +MODULE_INDEX 841 1 1 1 1 1 1 +MODULE_INDEX 842 1 1 1 1 1 1 +MODULE_INDEX 843 1 1 1 1 1 1 +MODULE_INDEX 844 1 1 1 1 1 1 +MODULE_INDEX 845 1 1 1 1 1 1 +MODULE_INDEX 846 1 1 1 1 1 1 +MODULE_INDEX 847 1 1 1 1 1 1 +MODULE_INDEX 848 1 1 1 1 1 1 +MODULE_INDEX 849 1 1 1 1 1 1 +MODULE_INDEX 850 1 1 1 1 1 1 +MODULE_INDEX 851 1 1 1 1 1 1 +MODULE_INDEX 852 1 1 1 1 1 1 +MODULE_INDEX 853 1 1 1 1 1 1 +MODULE_INDEX 854 1 1 1 1 1 1 +MODULE_INDEX 855 1 1 1 1 1 1 +MODULE_INDEX 856 1 1 1 1 1 1 +MODULE_INDEX 857 1 1 1 1 1 1 +MODULE_INDEX 858 1 1 1 1 1 1 +MODULE_INDEX 859 1 1 1 1 1 1 +MODULE_INDEX 860 1 1 1 1 1 1 +MODULE_INDEX 861 1 1 1 1 1 1 +MODULE_INDEX 862 1 1 1 1 1 1 +MODULE_INDEX 863 1 1 1 1 1 1 +MODULE_INDEX 864 1 1 1 1 1 1 +MODULE_INDEX 865 1 1 1 1 1 1 +MODULE_INDEX 866 1 1 1 1 1 1 +MODULE_INDEX 867 1 1 1 1 1 1 +MODULE_INDEX 868 1 1 1 1 1 1 +MODULE_INDEX 869 1 1 1 1 1 1 +MODULE_INDEX 870 1 1 1 1 1 1 +MODULE_INDEX 871 1 1 1 1 1 1 +MODULE_INDEX 872 1 1 1 1 1 1 +MODULE_INDEX 873 1 1 1 1 1 1 +MODULE_INDEX 874 1 1 1 1 1 1 +MODULE_INDEX 875 1 1 1 1 1 1 +MODULE_INDEX 876 1 1 1 1 1 1 +MODULE_INDEX 877 1 1 1 1 1 1 +MODULE_INDEX 878 1 1 1 1 1 1 +MODULE_INDEX 879 1 1 1 1 1 1 +MODULE_INDEX 880 1 1 1 1 1 1 +MODULE_INDEX 881 1 1 1 1 1 1 +MODULE_INDEX 882 1 1 1 1 1 1 +MODULE_INDEX 883 1 1 1 1 1 1 +MODULE_INDEX 884 1 1 1 1 1 1 +MODULE_INDEX 885 1 1 1 1 1 1 +MODULE_INDEX 886 1 1 1 1 1 1 +MODULE_INDEX 887 1 1 1 1 1 1 +MODULE_INDEX 888 1 1 1 1 1 1 +MODULE_INDEX 889 1 1 1 1 1 1 +MODULE_INDEX 890 1 1 1 1 1 1 +MODULE_INDEX 891 1 1 1 1 1 1 +MODULE_INDEX 892 1 1 1 1 1 1 +MODULE_INDEX 893 1 1 1 1 1 1 +MODULE_INDEX 894 1 1 1 1 1 1 +MODULE_INDEX 895 1 1 1 1 1 1 +MODULE_INDEX 896 1 1 1 1 1 1 +MODULE_INDEX 897 1 1 1 1 1 1 +MODULE_INDEX 898 1 1 1 1 1 1 +MODULE_INDEX 899 1 1 1 1 1 1 +MODULE_INDEX 900 1 1 1 1 1 1 +MODULE_INDEX 901 1 1 1 1 1 1 +MODULE_INDEX 902 1 1 1 1 1 1 +MODULE_INDEX 903 1 1 1 1 1 1 +MODULE_INDEX 904 1 1 1 1 1 1 +MODULE_INDEX 905 1 1 1 1 1 1 +MODULE_INDEX 906 1 1 1 1 1 1 +MODULE_INDEX 907 1 1 1 1 1 1 +MODULE_INDEX 908 1 1 1 1 1 1 +MODULE_INDEX 909 1 1 1 1 1 1 +MODULE_INDEX 910 1 1 1 1 1 1 +MODULE_INDEX 911 1 1 1 1 1 1 +MODULE_INDEX 912 1 1 1 1 1 1 +MODULE_INDEX 913 1 1 1 1 1 1 +MODULE_INDEX 914 1 1 1 1 1 1 +MODULE_INDEX 915 1 1 1 1 1 1 +MODULE_INDEX 916 1 1 1 1 1 1 +MODULE_INDEX 917 1 1 1 1 1 1 +MODULE_INDEX 918 1 1 1 1 1 1 +MODULE_INDEX 919 1 1 1 1 1 1 +MODULE_INDEX 920 1 1 1 1 1 1 +MODULE_INDEX 921 1 1 1 1 1 1 +MODULE_INDEX 922 1 1 1 1 1 1 +MODULE_INDEX 923 1 1 1 1 1 1 +MODULE_INDEX 924 1 1 1 1 1 1 +MODULE_INDEX 925 1 1 1 1 1 1 +MODULE_INDEX 926 1 1 1 1 1 1 +MODULE_INDEX 927 1 1 1 1 1 1 +MODULE_INDEX 928 1 1 1 1 1 1 +MODULE_INDEX 929 1 1 1 1 1 1 +MODULE_INDEX 930 1 1 1 1 1 1 +MODULE_INDEX 931 1 1 1 1 1 1 +MODULE_INDEX 932 1 1 1 1 1 1 +MODULE_INDEX 933 1 1 1 1 1 1 +MODULE_INDEX 934 1 1 1 1 1 1 +MODULE_INDEX 935 1 1 1 1 1 1 +MODULE_INDEX 936 1 1 1 1 1 1 +MODULE_INDEX 937 1 1 1 1 1 1 +MODULE_INDEX 938 1 1 1 1 1 1 +MODULE_INDEX 939 1 1 1 1 1 1 +MODULE_INDEX 940 1 1 1 1 1 1 +MODULE_INDEX 941 1 1 1 1 1 1 +MODULE_INDEX 942 1 1 1 1 1 1 +MODULE_INDEX 943 1 1 1 1 1 1 +MODULE_INDEX 944 1 1 1 1 1 1 +MODULE_INDEX 945 1 1 1 1 1 1 +MODULE_INDEX 946 1 1 1 1 1 1 +MODULE_INDEX 947 1 1 1 1 1 1 +MODULE_INDEX 948 1 1 1 1 1 1 +MODULE_INDEX 949 1 1 1 1 1 1 +MODULE_INDEX 950 1 1 1 1 1 1 +MODULE_INDEX 951 1 1 1 1 1 1 +MODULE_INDEX 952 1 1 1 1 1 1 +MODULE_INDEX 953 1 1 1 1 1 1 +MODULE_INDEX 954 1 1 1 1 1 1 +MODULE_INDEX 955 1 1 1 1 1 1 +MODULE_INDEX 956 1 1 1 1 1 1 +MODULE_INDEX 957 1 1 1 1 1 1 +MODULE_INDEX 958 1 1 1 1 1 1 +MODULE_INDEX 959 1 1 1 1 1 1 +MODULE_INDEX 960 1 1 1 1 1 1 +MODULE_INDEX 961 1 1 1 1 1 1 +MODULE_INDEX 962 1 1 1 1 1 1 +MODULE_INDEX 963 1 1 1 1 1 1 +MODULE_INDEX 964 1 1 1 1 1 1 +MODULE_INDEX 965 1 1 1 1 1 1 +MODULE_INDEX 966 1 1 1 1 1 1 +MODULE_INDEX 967 1 1 1 1 1 1 +MODULE_INDEX 968 1 1 1 1 1 1 +MODULE_INDEX 969 1 1 1 1 1 1 +MODULE_INDEX 970 1 1 1 1 1 1 +MODULE_INDEX 971 1 1 1 1 1 1 +MODULE_INDEX 972 1 1 1 1 1 1 +MODULE_INDEX 973 1 1 1 1 1 1 +MODULE_INDEX 974 1 1 1 1 1 1 +MODULE_INDEX 975 1 1 1 1 1 1 +MODULE_INDEX 976 1 1 1 1 1 1 +MODULE_INDEX 977 1 1 1 1 1 1 +MODULE_INDEX 978 1 1 1 1 1 1 +MODULE_INDEX 979 1 1 1 1 1 1 +MODULE_INDEX 980 1 1 1 1 1 1 +MODULE_INDEX 981 1 1 1 1 1 1 +MODULE_INDEX 982 1 1 1 1 1 1 +MODULE_INDEX 983 1 1 1 1 1 1 +MODULE_INDEX 984 1 1 1 1 1 1 +MODULE_INDEX 985 1 1 1 1 1 1 +MODULE_INDEX 986 1 1 1 1 1 1 +MODULE_INDEX 987 1 1 1 1 1 1 +MODULE_INDEX 988 1 1 1 1 1 1 +MODULE_INDEX 989 1 1 1 1 1 1 +MODULE_INDEX 990 1 1 1 1 1 1 +MODULE_INDEX 991 1 1 1 1 1 1 +MODULE_INDEX 992 1 1 1 1 1 1 +MODULE_INDEX 993 1 1 1 1 1 1 +MODULE_INDEX 994 1 1 1 1 1 1 +MODULE_INDEX 995 1 1 1 1 1 1 +MODULE_INDEX 996 1 1 1 1 1 1 +MODULE_INDEX 997 1 1 1 1 1 1 +MODULE_INDEX 998 1 1 1 1 1 1 +MODULE_INDEX 999 1 1 1 1 1 1 +MODULE_INDEX 1000 1 1 1 1 1 1 +MODULE_INDEX 1001 1 1 1 1 1 1 +MODULE_INDEX 1002 1 1 1 1 1 1 +MODULE_INDEX 1003 1 1 1 1 1 1 +MODULE_INDEX 1004 1 1 1 1 1 1 +MODULE_INDEX 1005 1 1 1 1 1 1 +MODULE_INDEX 1006 1 1 1 1 1 1 +MODULE_INDEX 1007 1 1 1 1 1 1 +MODULE_INDEX 1008 1 1 1 1 1 1 +MODULE_INDEX 1009 1 1 1 1 1 1 +MODULE_INDEX 1010 1 1 1 1 1 1 +MODULE_INDEX 1011 1 1 1 1 1 1 +MODULE_INDEX 1012 1 1 1 1 1 1 +MODULE_INDEX 1013 1 1 1 1 1 1 +MODULE_INDEX 1014 1 1 1 1 1 1 +MODULE_INDEX 1015 1 1 1 1 1 1 +MODULE_INDEX 1016 1 1 1 1 1 1 +MODULE_INDEX 1017 1 1 1 1 1 1 +MODULE_INDEX 1018 1 1 1 1 1 1 +MODULE_INDEX 1019 1 1 1 1 1 1 +MODULE_INDEX 1020 1 1 1 1 1 1 +MODULE_INDEX 1021 1 1 1 1 1 1 +MODULE_INDEX 1022 1 1 1 1 1 1 +MODULE_INDEX 1023 1 1 1 1 1 1 +MODULE_INDEX 1024 1 1 1 1 1 1 +MODULE_INDEX 1025 1 1 1 1 1 1 +MODULE_INDEX 1026 1 1 1 1 1 1 +MODULE_INDEX 1027 1 1 1 1 1 1 +MODULE_INDEX 1028 1 1 1 1 1 1 +MODULE_INDEX 1029 1 1 1 1 1 1 +MODULE_INDEX 1030 1 1 1 1 1 1 +MODULE_INDEX 1031 1 1 1 1 1 1 +MODULE_INDEX 1032 1 1 1 1 1 1 +MODULE_INDEX 1033 1 1 1 1 1 1 +MODULE_INDEX 1034 1 1 1 1 1 1 +MODULE_INDEX 1035 1 1 1 1 1 1 +MODULE_INDEX 1036 1 1 1 1 1 1 +MODULE_INDEX 1037 1 1 1 1 1 1 +MODULE_INDEX 1038 1 1 1 1 1 1 +MODULE_INDEX 1039 1 1 1 1 1 1 +MODULE_INDEX 1040 1 1 1 1 1 1 +MODULE_INDEX 1041 1 1 1 1 1 1 +MODULE_INDEX 1042 1 1 1 1 1 1 +MODULE_INDEX 1043 1 1 1 1 1 1 +MODULE_INDEX 1044 1 1 1 1 1 1 +MODULE_INDEX 1045 1 1 1 1 1 1 +MODULE_INDEX 1046 1 1 1 1 1 1 +MODULE_INDEX 1047 1 1 1 1 1 1 +MODULE_INDEX 1048 1 1 1 1 1 1 +MODULE_INDEX 1049 1 1 1 1 1 1 +MODULE_INDEX 1050 1 1 1 1 1 1 +MODULE_INDEX 1051 1 1 1 1 1 1 +MODULE_INDEX 1052 1 1 1 1 1 1 +MODULE_INDEX 1053 1 1 1 1 1 1 +MODULE_INDEX 1054 1 1 1 1 1 1 +MODULE_INDEX 1055 1 1 1 1 1 1 +MODULE_INDEX 1056 1 1 1 1 1 1 +MODULE_INDEX 1057 1 1 1 1 1 1 +MODULE_INDEX 1058 1 1 1 1 1 1 +MODULE_INDEX 1059 1 1 1 1 1 1 +MODULE_INDEX 1060 1 1 1 1 1 1 +MODULE_INDEX 1061 1 1 1 1 1 1 +MODULE_INDEX 1062 1 1 1 1 1 1 +MODULE_INDEX 1063 1 1 1 1 1 1 +MODULE_INDEX 1064 1 1 1 1 1 1 +MODULE_INDEX 1065 1 1 1 1 1 1 +MODULE_INDEX 1066 1 1 1 1 1 1 +MODULE_INDEX 1067 1 1 1 1 1 1 +MODULE_INDEX 1068 1 1 1 1 1 1 +MODULE_INDEX 1069 1 1 1 1 1 1 +MODULE_INDEX 1070 1 1 1 1 1 1 +MODULE_INDEX 1071 1 1 1 1 1 1 +MODULE_INDEX 1072 1 1 1 1 1 1 +MODULE_INDEX 1073 1 1 1 1 1 1 +MODULE_INDEX 1074 1 1 1 1 1 1 +MODULE_INDEX 1075 1 1 1 1 1 1 +MODULE_INDEX 1076 1 1 1 1 1 1 +MODULE_INDEX 1077 1 1 1 1 1 1 +MODULE_INDEX 1078 1 1 1 1 1 1 +MODULE_INDEX 1079 1 1 1 1 1 1 +MODULE_INDEX 1080 1 1 1 1 1 1 +MODULE_INDEX 1081 1 1 1 1 1 1 +MODULE_INDEX 1082 1 1 1 1 1 1 +MODULE_INDEX 1083 1 1 1 1 1 1 +MODULE_INDEX 1084 1 1 1 1 1 1 +MODULE_INDEX 1085 1 1 1 1 1 1 +MODULE_INDEX 1086 1 1 1 1 1 1 +MODULE_INDEX 1087 1 1 1 1 1 1 +MODULE_INDEX 1088 1 1 1 1 1 1 +MODULE_INDEX 1089 1 1 1 1 1 1 +MODULE_INDEX 1090 1 1 1 1 1 1 +MODULE_INDEX 1091 1 1 1 1 1 1 +MODULE_INDEX 1092 1 1 1 1 1 1 +MODULE_INDEX 1093 1 1 1 1 1 1 +MODULE_INDEX 1094 1 1 1 1 1 1 +MODULE_INDEX 1095 1 1 1 1 1 1 +MODULE_INDEX 1096 1 1 1 1 1 1 +MODULE_INDEX 1097 1 1 1 1 1 1 +MODULE_INDEX 1098 1 1 1 1 1 1 +MODULE_INDEX 1099 1 1 1 1 1 1 +MODULE_INDEX 1100 1 1 1 1 1 1 +MODULE_INDEX 1101 1 1 1 1 1 1 +MODULE_INDEX 1102 1 1 1 1 1 1 +MODULE_INDEX 1103 1 1 1 1 1 1 +MODULE_INDEX 1104 1 1 1 1 1 1 +MODULE_INDEX 1105 1 1 1 1 1 1 +MODULE_INDEX 1106 1 1 1 1 1 1 +MODULE_INDEX 1107 1 1 1 1 1 1 +MODULE_INDEX 1108 1 1 1 1 1 1 +MODULE_INDEX 1109 1 1 1 1 1 1 +MODULE_INDEX 1110 1 1 1 1 1 1 +MODULE_INDEX 1111 1 1 1 1 1 1 +MODULE_INDEX 1112 1 1 1 1 1 1 +MODULE_INDEX 1113 1 1 1 1 1 1 +MODULE_INDEX 1114 1 1 1 1 1 1 +MODULE_INDEX 1115 1 1 1 1 1 1 +MODULE_INDEX 1116 1 1 1 1 1 1 +MODULE_INDEX 1117 1 1 1 1 1 1 +MODULE_INDEX 1118 1 1 1 1 1 1 +MODULE_INDEX 1119 1 1 1 1 1 1 +MODULE_INDEX 1120 1 1 1 1 1 1 +MODULE_INDEX 1121 1 1 1 1 1 1 +MODULE_INDEX 1122 1 1 1 1 1 1 +MODULE_INDEX 1123 1 1 1 1 1 1 +MODULE_INDEX 1124 1 1 1 1 1 1 +MODULE_INDEX 1125 1 1 1 1 1 1 +MODULE_INDEX 1126 1 1 1 1 1 1 +MODULE_INDEX 1127 1 1 1 1 1 1 +MODULE_INDEX 1128 1 1 1 1 1 1 +MODULE_INDEX 1129 1 1 1 1 1 1 +MODULE_INDEX 1130 1 1 1 1 1 1 +MODULE_INDEX 1131 1 1 1 1 1 1 +MODULE_INDEX 1132 1 1 1 1 1 1 +MODULE_INDEX 1133 1 1 1 1 1 1 +MODULE_INDEX 1134 1 1 1 1 1 1 +MODULE_INDEX 1135 1 1 1 1 1 1 +MODULE_INDEX 1136 1 1 1 1 1 1 +MODULE_INDEX 1137 1 1 1 1 1 1 +MODULE_INDEX 1138 1 1 1 1 1 1 +MODULE_INDEX 1139 1 1 1 1 1 1 +MODULE_INDEX 1140 1 1 1 1 1 1 +MODULE_INDEX 1141 1 1 1 1 1 1 +MODULE_INDEX 1142 1 1 1 1 1 1 +MODULE_INDEX 1143 1 1 1 1 1 1 +MODULE_INDEX 1144 1 1 1 1 1 1 +MODULE_INDEX 1145 1 1 1 1 1 1 +MODULE_INDEX 1146 1 1 1 1 1 1 +MODULE_INDEX 1147 1 1 1 1 1 1 +MODULE_INDEX 1148 1 1 1 1 1 1 +MODULE_INDEX 1149 1 1 1 1 1 1 +MODULE_INDEX 1150 1 1 1 1 1 1 +MODULE_INDEX 1151 1 1 1 1 1 1 +MODULE_INDEX 1152 1 1 1 1 1 1 +MODULE_INDEX 1153 1 1 1 1 1 1 +MODULE_INDEX 1154 1 1 1 1 1 1 +MODULE_INDEX 1155 1 1 1 1 1 1 +MODULE_INDEX 1156 1 1 1 1 1 1 +MODULE_INDEX 1157 1 1 1 1 1 1 +MODULE_INDEX 1158 1 1 1 1 1 1 +MODULE_INDEX 1159 1 1 1 1 1 1 +MODULE_INDEX 1160 1 1 1 1 1 1 +MODULE_INDEX 1161 1 1 1 1 1 1 +MODULE_INDEX 1162 1 1 1 1 1 1 +MODULE_INDEX 1163 1 1 1 1 1 1 +MODULE_INDEX 1164 1 1 1 1 1 1 +MODULE_INDEX 1165 1 1 1 1 1 1 +MODULE_INDEX 1166 1 1 1 1 1 1 +MODULE_INDEX 1167 1 1 1 1 1 1 +MODULE_INDEX 1168 1 1 1 1 1 1 +MODULE_INDEX 1169 1 1 1 1 1 1 +MODULE_INDEX 1170 1 1 1 1 1 1 +MODULE_INDEX 1171 1 1 1 1 1 1 +MODULE_INDEX 1172 1 1 1 1 1 1 +MODULE_INDEX 1173 1 1 1 1 1 1 +MODULE_INDEX 1174 1 1 1 1 1 1 +MODULE_INDEX 1175 1 1 1 1 1 1 +MODULE_INDEX 1176 1 1 1 1 1 1 +MODULE_INDEX 1177 1 1 1 1 1 1 +MODULE_INDEX 1178 1 1 1 1 1 1 +MODULE_INDEX 1179 1 1 1 1 1 1 +MODULE_INDEX 1180 1 1 1 1 1 1 +MODULE_INDEX 1181 1 1 1 1 1 1 +MODULE_INDEX 1182 1 1 1 1 1 1 +MODULE_INDEX 1183 1 1 1 1 1 1 +MODULE_INDEX 1184 1 1 1 1 1 1 +MODULE_INDEX 1185 1 1 1 1 1 1 +MODULE_INDEX 1186 1 1 1 1 1 1 +MODULE_INDEX 1187 1 1 1 1 1 1 +MODULE_INDEX 1188 1 1 1 1 1 1 +MODULE_INDEX 1189 1 1 1 1 1 1 +MODULE_INDEX 1190 1 1 1 1 1 1 +MODULE_INDEX 1191 1 1 1 1 1 1 +MODULE_INDEX 1192 1 1 1 1 1 1 +MODULE_INDEX 1193 1 1 1 1 1 1 +MODULE_INDEX 1194 1 1 1 1 1 1 +MODULE_INDEX 1195 1 1 1 1 1 1 +MODULE_INDEX 1196 1 1 1 1 1 1 +MODULE_INDEX 1197 1 1 1 1 1 1 +MODULE_INDEX 1198 1 1 1 1 1 1 +MODULE_INDEX 1199 1 1 1 1 1 1 +MODULE_INDEX 1200 1 1 1 1 1 1 +MODULE_INDEX 1201 1 1 1 1 1 1 +MODULE_INDEX 1202 1 1 1 1 1 1 +MODULE_INDEX 1203 1 1 1 1 1 1 +MODULE_INDEX 1204 1 1 1 1 1 1 +MODULE_INDEX 1205 1 1 1 1 1 1 +MODULE_INDEX 1206 1 1 1 1 1 1 +MODULE_INDEX 1207 1 1 1 1 1 1 +MODULE_INDEX 1208 1 1 1 1 1 1 +MODULE_INDEX 1209 1 1 1 1 1 1 +MODULE_INDEX 1210 1 1 1 1 1 1 +MODULE_INDEX 1211 1 1 1 1 1 1 +MODULE_INDEX 1212 1 1 1 1 1 1 +MODULE_INDEX 1213 1 1 1 1 1 1 +MODULE_INDEX 1214 1 1 1 1 1 1 +MODULE_INDEX 1215 1 1 1 1 1 1 +MODULE_INDEX 1216 1 1 1 1 1 1 +MODULE_INDEX 1217 1 1 1 1 1 1 +MODULE_INDEX 1218 1 1 1 1 1 1 +MODULE_INDEX 1219 1 1 1 1 1 1 +MODULE_INDEX 1220 1 1 1 1 1 1 +MODULE_INDEX 1221 1 1 1 1 1 1 +MODULE_INDEX 1222 1 1 1 1 1 1 +MODULE_INDEX 1223 1 1 1 1 1 1 +MODULE_INDEX 1224 1 1 1 1 1 1 +MODULE_INDEX 1225 1 1 1 1 1 1 +MODULE_INDEX 1226 1 1 1 1 1 1 +MODULE_INDEX 1227 1 1 1 1 1 1 +MODULE_INDEX 1228 1 1 1 1 1 1 +MODULE_INDEX 1229 1 1 1 1 1 1 +MODULE_INDEX 1230 1 1 1 1 1 1 +MODULE_INDEX 1231 1 1 1 1 1 1 +MODULE_INDEX 1232 1 1 1 1 1 1 +MODULE_INDEX 1233 1 1 1 1 1 1 +MODULE_INDEX 1234 1 1 1 1 1 1 +MODULE_INDEX 1235 1 1 1 1 1 1 +MODULE_INDEX 1236 1 1 1 1 1 1 +MODULE_INDEX 1237 1 1 1 1 1 1 +MODULE_INDEX 1238 1 1 1 1 1 1 +MODULE_INDEX 1239 1 1 1 1 1 1 +MODULE_INDEX 1240 1 1 1 1 1 1 +MODULE_INDEX 1241 1 1 1 1 1 1 +MODULE_INDEX 1242 1 1 1 1 1 1 +MODULE_INDEX 1243 1 1 1 1 1 1 +MODULE_INDEX 1244 1 1 1 1 1 1 +MODULE_INDEX 1245 1 1 1 1 1 1 +MODULE_INDEX 1246 1 1 1 1 1 1 +MODULE_INDEX 1247 1 1 1 1 1 1 +# layer 6 +MODULE_INDEX 1248 1 1 1 1 1 1 +MODULE_INDEX 1249 1 1 1 1 1 1 +MODULE_INDEX 1250 1 1 1 1 1 1 +MODULE_INDEX 1251 1 1 1 1 1 1 +MODULE_INDEX 1252 1 1 1 1 1 1 +MODULE_INDEX 1253 1 1 1 1 1 1 +MODULE_INDEX 1254 1 1 1 1 1 1 +MODULE_INDEX 1255 1 1 1 1 1 1 +MODULE_INDEX 1256 1 1 1 1 1 1 +MODULE_INDEX 1257 1 1 1 1 1 1 +MODULE_INDEX 1258 1 1 1 1 1 1 +MODULE_INDEX 1259 1 1 1 1 1 1 +MODULE_INDEX 1260 1 1 1 1 1 1 +MODULE_INDEX 1261 1 1 1 1 1 1 +MODULE_INDEX 1262 1 1 1 1 1 1 +MODULE_INDEX 1263 1 1 1 1 1 1 +MODULE_INDEX 1264 1 1 1 1 1 1 +MODULE_INDEX 1265 1 1 1 1 1 1 +MODULE_INDEX 1266 1 1 1 1 1 1 +MODULE_INDEX 1267 1 1 1 1 1 1 +MODULE_INDEX 1268 1 1 1 1 1 1 +MODULE_INDEX 1269 1 1 1 1 1 1 +MODULE_INDEX 1270 1 1 1 1 1 1 +MODULE_INDEX 1271 1 1 1 1 1 1 +MODULE_INDEX 1272 1 1 1 1 1 1 +MODULE_INDEX 1273 1 1 1 1 1 1 +MODULE_INDEX 1274 1 1 1 1 1 1 +MODULE_INDEX 1275 1 1 1 1 1 1 +MODULE_INDEX 1276 1 1 1 1 1 1 +MODULE_INDEX 1277 1 1 1 1 1 1 +MODULE_INDEX 1278 1 1 1 1 1 1 +MODULE_INDEX 1279 1 1 1 1 1 1 +MODULE_INDEX 1280 1 1 1 1 1 1 +MODULE_INDEX 1281 1 1 1 1 1 1 +MODULE_INDEX 1282 1 1 1 1 1 1 +MODULE_INDEX 1283 1 1 1 1 1 1 +MODULE_INDEX 1284 1 1 1 1 1 1 +MODULE_INDEX 1285 1 1 1 1 1 1 +MODULE_INDEX 1286 1 1 1 1 1 1 +MODULE_INDEX 1287 1 1 1 1 1 1 +MODULE_INDEX 1288 1 1 1 1 1 1 +MODULE_INDEX 1289 1 1 1 1 1 1 +MODULE_INDEX 1290 1 1 1 1 1 1 +MODULE_INDEX 1291 1 1 1 1 1 1 +MODULE_INDEX 1292 1 1 1 1 1 1 +MODULE_INDEX 1293 1 1 1 1 1 1 +MODULE_INDEX 1294 1 1 1 1 1 1 +MODULE_INDEX 1295 1 1 1 1 1 1 +MODULE_INDEX 1296 1 1 1 1 1 1 +MODULE_INDEX 1297 1 1 1 1 1 1 +MODULE_INDEX 1298 1 1 1 1 1 1 +MODULE_INDEX 1299 1 1 1 1 1 1 +MODULE_INDEX 1300 1 1 1 1 1 1 +MODULE_INDEX 1301 1 1 1 1 1 1 +MODULE_INDEX 1302 1 1 1 1 1 1 +MODULE_INDEX 1303 1 1 1 1 1 1 +MODULE_INDEX 1304 1 1 1 1 1 1 +MODULE_INDEX 1305 1 1 1 1 1 1 +MODULE_INDEX 1306 1 1 1 1 1 1 +MODULE_INDEX 1307 1 1 1 1 1 1 +MODULE_INDEX 1308 1 1 1 1 1 1 +MODULE_INDEX 1309 1 1 1 1 1 1 +MODULE_INDEX 1310 1 1 1 1 1 1 +MODULE_INDEX 1311 1 1 1 1 1 1 +MODULE_INDEX 1312 1 1 1 1 1 1 +MODULE_INDEX 1313 1 1 1 1 1 1 +MODULE_INDEX 1314 1 1 1 1 1 1 +MODULE_INDEX 1315 1 1 1 1 1 1 +MODULE_INDEX 1316 1 1 1 1 1 1 +MODULE_INDEX 1317 1 1 1 1 1 1 +MODULE_INDEX 1318 1 1 1 1 1 1 +MODULE_INDEX 1319 1 1 1 1 1 1 +MODULE_INDEX 1320 1 1 1 1 1 1 +MODULE_INDEX 1321 1 1 1 1 1 1 +MODULE_INDEX 1322 1 1 1 1 1 1 +MODULE_INDEX 1323 1 1 1 1 1 1 +MODULE_INDEX 1324 1 1 1 1 1 1 +MODULE_INDEX 1325 1 1 1 1 1 1 +MODULE_INDEX 1326 1 1 1 1 1 1 +MODULE_INDEX 1327 1 1 1 1 1 1 +MODULE_INDEX 1328 1 1 1 1 1 1 +MODULE_INDEX 1329 1 1 1 1 1 1 +MODULE_INDEX 1330 1 1 1 1 1 1 +MODULE_INDEX 1331 1 1 1 1 1 1 +MODULE_INDEX 1332 1 1 1 1 1 1 +MODULE_INDEX 1333 1 1 1 1 1 1 +MODULE_INDEX 1334 1 1 1 1 1 1 +MODULE_INDEX 1335 1 1 1 1 1 1 +MODULE_INDEX 1336 1 1 1 1 1 1 +MODULE_INDEX 1337 1 1 1 1 1 1 +MODULE_INDEX 1338 1 1 1 1 1 1 +MODULE_INDEX 1339 1 1 1 1 1 1 +MODULE_INDEX 1340 1 1 1 1 1 1 +MODULE_INDEX 1341 1 1 1 1 1 1 +MODULE_INDEX 1342 1 1 1 1 1 1 +MODULE_INDEX 1343 1 1 1 1 1 1 +MODULE_INDEX 1344 1 1 1 1 1 1 +MODULE_INDEX 1345 1 1 1 1 1 1 +MODULE_INDEX 1346 1 1 1 1 1 1 +MODULE_INDEX 1347 1 1 1 1 1 1 +MODULE_INDEX 1348 1 1 1 1 1 1 +MODULE_INDEX 1349 1 1 1 1 1 1 +MODULE_INDEX 1350 1 1 1 1 1 1 +MODULE_INDEX 1351 1 1 1 1 1 1 +MODULE_INDEX 1352 1 1 1 1 1 1 +MODULE_INDEX 1353 1 1 1 1 1 1 +MODULE_INDEX 1354 1 1 1 1 1 1 +MODULE_INDEX 1355 1 1 1 1 1 1 +MODULE_INDEX 1356 1 1 1 1 1 1 +MODULE_INDEX 1357 1 1 1 1 1 1 +MODULE_INDEX 1358 1 1 1 1 1 1 +MODULE_INDEX 1359 1 1 1 1 1 1 +MODULE_INDEX 1360 1 1 1 1 1 1 +MODULE_INDEX 1361 1 1 1 1 1 1 +MODULE_INDEX 1362 1 1 1 1 1 1 +MODULE_INDEX 1363 1 1 1 1 1 1 +MODULE_INDEX 1364 1 1 1 1 1 1 +MODULE_INDEX 1365 1 1 1 1 1 1 +MODULE_INDEX 1366 1 1 1 1 1 1 +MODULE_INDEX 1367 1 1 1 1 1 1 +MODULE_INDEX 1368 1 1 1 1 1 1 +MODULE_INDEX 1369 1 1 1 1 1 1 +MODULE_INDEX 1370 1 1 1 1 1 1 +MODULE_INDEX 1371 1 1 1 1 1 1 +MODULE_INDEX 1372 1 1 1 1 1 1 +MODULE_INDEX 1373 1 1 1 1 1 1 +MODULE_INDEX 1374 1 1 1 1 1 1 +MODULE_INDEX 1375 1 1 1 1 1 1 +MODULE_INDEX 1376 1 1 1 1 1 1 +MODULE_INDEX 1377 1 1 1 1 1 1 +MODULE_INDEX 1378 1 1 1 1 1 1 +MODULE_INDEX 1379 1 1 1 1 1 1 +MODULE_INDEX 1380 1 1 1 1 1 1 +MODULE_INDEX 1381 1 1 1 1 1 1 +MODULE_INDEX 1382 1 1 1 1 1 1 +MODULE_INDEX 1383 1 1 1 1 1 1 +MODULE_INDEX 1384 1 1 1 1 1 1 +MODULE_INDEX 1385 1 1 1 1 1 1 +MODULE_INDEX 1386 1 1 1 1 1 1 +MODULE_INDEX 1387 1 1 1 1 1 1 +MODULE_INDEX 1388 1 1 1 1 1 1 +MODULE_INDEX 1389 1 1 1 1 1 1 +MODULE_INDEX 1390 1 1 1 1 1 1 +MODULE_INDEX 1391 1 1 1 1 1 1 +MODULE_INDEX 1392 1 1 1 1 1 1 +MODULE_INDEX 1393 1 1 1 1 1 1 +MODULE_INDEX 1394 1 1 1 1 1 1 +MODULE_INDEX 1395 1 1 1 1 1 1 +MODULE_INDEX 1396 1 1 1 1 1 1 +MODULE_INDEX 1397 1 1 1 1 1 1 +MODULE_INDEX 1398 1 1 1 1 1 1 +MODULE_INDEX 1399 1 1 1 1 1 1 +MODULE_INDEX 1400 1 1 1 1 1 1 +MODULE_INDEX 1401 1 1 1 1 1 1 +MODULE_INDEX 1402 1 1 1 1 1 1 +MODULE_INDEX 1403 1 1 1 1 1 1 +MODULE_INDEX 1404 1 1 1 1 1 1 +MODULE_INDEX 1405 1 1 1 1 1 1 +MODULE_INDEX 1406 1 1 1 1 1 1 +MODULE_INDEX 1407 1 1 1 1 1 1 +MODULE_INDEX 1408 1 1 1 1 1 1 +MODULE_INDEX 1409 1 1 1 1 1 1 +MODULE_INDEX 1410 1 1 1 1 1 1 +MODULE_INDEX 1411 1 1 1 1 1 1 +MODULE_INDEX 1412 1 1 1 1 1 1 +MODULE_INDEX 1413 1 1 1 1 1 1 +MODULE_INDEX 1414 1 1 1 1 1 1 +MODULE_INDEX 1415 1 1 1 1 1 1 +MODULE_INDEX 1416 1 1 1 1 1 1 +MODULE_INDEX 1417 1 1 1 1 1 1 +MODULE_INDEX 1418 1 1 1 1 1 1 +MODULE_INDEX 1419 1 1 1 1 1 1 +MODULE_INDEX 1420 1 1 1 1 1 1 +MODULE_INDEX 1421 1 1 1 1 1 1 +MODULE_INDEX 1422 1 1 1 1 1 1 +MODULE_INDEX 1423 1 1 1 1 1 1 +MODULE_INDEX 1424 1 1 1 1 1 1 +MODULE_INDEX 1425 1 1 1 1 1 1 +MODULE_INDEX 1426 1 1 1 1 1 1 +MODULE_INDEX 1427 1 1 1 1 1 1 +MODULE_INDEX 1428 1 1 1 1 1 1 +MODULE_INDEX 1429 1 1 1 1 1 1 +MODULE_INDEX 1430 1 1 1 1 1 1 +MODULE_INDEX 1431 1 1 1 1 1 1 +MODULE_INDEX 1432 1 1 1 1 1 1 +MODULE_INDEX 1433 1 1 1 1 1 1 +MODULE_INDEX 1434 1 1 1 1 1 1 +MODULE_INDEX 1435 1 1 1 1 1 1 +MODULE_INDEX 1436 1 1 1 1 1 1 +MODULE_INDEX 1437 1 1 1 1 1 1 +MODULE_INDEX 1438 1 1 1 1 1 1 +MODULE_INDEX 1439 1 1 1 1 1 1 +MODULE_INDEX 1440 1 1 1 1 1 1 +MODULE_INDEX 1441 1 1 1 1 1 1 +MODULE_INDEX 1442 1 1 1 1 1 1 +MODULE_INDEX 1443 1 1 1 1 1 1 +MODULE_INDEX 1444 1 1 1 1 1 1 +MODULE_INDEX 1445 1 1 1 1 1 1 +MODULE_INDEX 1446 1 1 1 1 1 1 +MODULE_INDEX 1447 1 1 1 1 1 1 +MODULE_INDEX 1448 1 1 1 1 1 1 +MODULE_INDEX 1449 1 1 1 1 1 1 +MODULE_INDEX 1450 1 1 1 1 1 1 +MODULE_INDEX 1451 1 1 1 1 1 1 +MODULE_INDEX 1452 1 1 1 1 1 1 +MODULE_INDEX 1453 1 1 1 1 1 1 +MODULE_INDEX 1454 1 1 1 1 1 1 +MODULE_INDEX 1455 1 1 1 1 1 1 +MODULE_INDEX 1456 1 1 1 1 1 1 +MODULE_INDEX 1457 1 1 1 1 1 1 +MODULE_INDEX 1458 1 1 1 1 1 1 +MODULE_INDEX 1459 1 1 1 1 1 1 +MODULE_INDEX 1460 1 1 1 1 1 1 +MODULE_INDEX 1461 1 1 1 1 1 1 +MODULE_INDEX 1462 1 1 1 1 1 1 +MODULE_INDEX 1463 1 1 1 1 1 1 +MODULE_INDEX 1464 1 1 1 1 1 1 +MODULE_INDEX 1465 1 1 1 1 1 1 +MODULE_INDEX 1466 1 1 1 1 1 1 +MODULE_INDEX 1467 1 1 1 1 1 1 +MODULE_INDEX 1468 1 1 1 1 1 1 +MODULE_INDEX 1469 1 1 1 1 1 1 +MODULE_INDEX 1470 1 1 1 1 1 1 +MODULE_INDEX 1471 1 1 1 1 1 1 +MODULE_INDEX 1472 1 1 1 1 1 1 +MODULE_INDEX 1473 1 1 1 1 1 1 +MODULE_INDEX 1474 1 1 1 1 1 1 +MODULE_INDEX 1475 1 1 1 1 1 1 +MODULE_INDEX 1476 1 1 1 1 1 1 +MODULE_INDEX 1477 1 1 1 1 1 1 +MODULE_INDEX 1478 1 1 1 1 1 1 +MODULE_INDEX 1479 1 1 1 1 1 1 +MODULE_INDEX 1480 1 1 1 1 1 1 +MODULE_INDEX 1481 1 1 1 1 1 1 +MODULE_INDEX 1482 1 1 1 1 1 1 +MODULE_INDEX 1483 1 1 1 1 1 1 +MODULE_INDEX 1484 1 1 1 1 1 1 +MODULE_INDEX 1485 1 1 1 1 1 1 +MODULE_INDEX 1486 1 1 1 1 1 1 +MODULE_INDEX 1487 1 1 1 1 1 1 +MODULE_INDEX 1488 1 1 1 1 1 1 +MODULE_INDEX 1489 1 1 1 1 1 1 +MODULE_INDEX 1490 1 1 1 1 1 1 +MODULE_INDEX 1491 1 1 1 1 1 1 +MODULE_INDEX 1492 1 1 1 1 1 1 +MODULE_INDEX 1493 1 1 1 1 1 1 +MODULE_INDEX 1494 1 1 1 1 1 1 +MODULE_INDEX 1495 1 1 1 1 1 1 +MODULE_INDEX 1496 1 1 1 1 1 1 +MODULE_INDEX 1497 1 1 1 1 1 1 +MODULE_INDEX 1498 1 1 1 1 1 1 +MODULE_INDEX 1499 1 1 1 1 1 1 +MODULE_INDEX 1500 1 1 1 1 1 1 +MODULE_INDEX 1501 1 1 1 1 1 1 +MODULE_INDEX 1502 1 1 1 1 1 1 +MODULE_INDEX 1503 1 1 1 1 1 1 +MODULE_INDEX 1504 1 1 1 1 1 1 +MODULE_INDEX 1505 1 1 1 1 1 1 +MODULE_INDEX 1506 1 1 1 1 1 1 +MODULE_INDEX 1507 1 1 1 1 1 1 +MODULE_INDEX 1508 1 1 1 1 1 1 +MODULE_INDEX 1509 1 1 1 1 1 1 +MODULE_INDEX 1510 1 1 1 1 1 1 +MODULE_INDEX 1511 1 1 1 1 1 1 +MODULE_INDEX 1512 1 1 1 1 1 1 +MODULE_INDEX 1513 1 1 1 1 1 1 +MODULE_INDEX 1514 1 1 1 1 1 1 +MODULE_INDEX 1515 1 1 1 1 1 1 +MODULE_INDEX 1516 1 1 1 1 1 1 +MODULE_INDEX 1517 1 1 1 1 1 1 +MODULE_INDEX 1518 1 1 1 1 1 1 +MODULE_INDEX 1519 1 1 1 1 1 1 +MODULE_INDEX 1520 1 1 1 1 1 1 +MODULE_INDEX 1521 1 1 1 1 1 1 +MODULE_INDEX 1522 1 1 1 1 1 1 +MODULE_INDEX 1523 1 1 1 1 1 1 +MODULE_INDEX 1524 1 1 1 1 1 1 +MODULE_INDEX 1525 1 1 1 1 1 1 +MODULE_INDEX 1526 1 1 1 1 1 1 +MODULE_INDEX 1527 1 1 1 1 1 1 +MODULE_INDEX 1528 1 1 1 1 1 1 +MODULE_INDEX 1529 1 1 1 1 1 1 +MODULE_INDEX 1530 1 1 1 1 1 1 +MODULE_INDEX 1531 1 1 1 1 1 1 +MODULE_INDEX 1532 1 1 1 1 1 1 +MODULE_INDEX 1533 1 1 1 1 1 1 +MODULE_INDEX 1534 1 1 1 1 1 1 +MODULE_INDEX 1535 1 1 1 1 1 1 +MODULE_INDEX 1536 1 1 1 1 1 1 +MODULE_INDEX 1537 1 1 1 1 1 1 +MODULE_INDEX 1538 1 1 1 1 1 1 +MODULE_INDEX 1539 1 1 1 1 1 1 +MODULE_INDEX 1540 1 1 1 1 1 1 +MODULE_INDEX 1541 1 1 1 1 1 1 +MODULE_INDEX 1542 1 1 1 1 1 1 +MODULE_INDEX 1543 1 1 1 1 1 1 +MODULE_INDEX 1544 1 1 1 1 1 1 +MODULE_INDEX 1545 1 1 1 1 1 1 +MODULE_INDEX 1546 1 1 1 1 1 1 +MODULE_INDEX 1547 1 1 1 1 1 1 +MODULE_INDEX 1548 1 1 1 1 1 1 +MODULE_INDEX 1549 1 1 1 1 1 1 +MODULE_INDEX 1550 1 1 1 1 1 1 +MODULE_INDEX 1551 1 1 1 1 1 1 +MODULE_INDEX 1552 1 1 1 1 1 1 +MODULE_INDEX 1553 1 1 1 1 1 1 +MODULE_INDEX 1554 1 1 1 1 1 1 +MODULE_INDEX 1555 1 1 1 1 1 1 +MODULE_INDEX 1556 1 1 1 1 1 1 +MODULE_INDEX 1557 1 1 1 1 1 1 +MODULE_INDEX 1558 1 1 1 1 1 1 +MODULE_INDEX 1559 1 1 1 1 1 1 +MODULE_INDEX 1560 1 1 1 1 1 1 +MODULE_INDEX 1561 1 1 1 1 1 1 +MODULE_INDEX 1562 1 1 1 1 1 1 +MODULE_INDEX 1563 1 1 1 1 1 1 +MODULE_INDEX 1564 1 1 1 1 1 1 +MODULE_INDEX 1565 1 1 1 1 1 1 +MODULE_INDEX 1566 1 1 1 1 1 1 +MODULE_INDEX 1567 1 1 1 1 1 1 +MODULE_INDEX 1568 1 1 1 1 1 1 +MODULE_INDEX 1569 1 1 1 1 1 1 +MODULE_INDEX 1570 1 1 1 1 1 1 +MODULE_INDEX 1571 1 1 1 1 1 1 +MODULE_INDEX 1572 1 1 1 1 1 1 +MODULE_INDEX 1573 1 1 1 1 1 1 +MODULE_INDEX 1574 1 1 1 1 1 1 +MODULE_INDEX 1575 1 1 1 1 1 1 +MODULE_INDEX 1576 1 1 1 1 1 1 +MODULE_INDEX 1577 1 1 1 1 1 1 +MODULE_INDEX 1578 1 1 1 1 1 1 +MODULE_INDEX 1579 1 1 1 1 1 1 +MODULE_INDEX 1580 1 1 1 1 1 1 +MODULE_INDEX 1581 1 1 1 1 1 1 +MODULE_INDEX 1582 1 1 1 1 1 1 +MODULE_INDEX 1583 1 1 1 1 1 1 +MODULE_INDEX 1584 1 1 1 1 1 1 +MODULE_INDEX 1585 1 1 1 1 1 1 +MODULE_INDEX 1586 1 1 1 1 1 1 +MODULE_INDEX 1587 1 1 1 1 1 1 +MODULE_INDEX 1588 1 1 1 1 1 1 +MODULE_INDEX 1589 1 1 1 1 1 1 +MODULE_INDEX 1590 1 1 1 1 1 1 +MODULE_INDEX 1591 1 1 1 1 1 1 +MODULE_INDEX 1592 1 1 1 1 1 1 +MODULE_INDEX 1593 1 1 1 1 1 1 +MODULE_INDEX 1594 1 1 1 1 1 1 +MODULE_INDEX 1595 1 1 1 1 1 1 +MODULE_INDEX 1596 1 1 1 1 1 1 +MODULE_INDEX 1597 1 1 1 1 1 1 +MODULE_INDEX 1598 1 1 1 1 1 1 +MODULE_INDEX 1599 1 1 1 1 1 1 +MODULE_INDEX 1600 1 1 1 1 1 1 +MODULE_INDEX 1601 1 1 1 1 1 1 +MODULE_INDEX 1602 1 1 1 1 1 1 +MODULE_INDEX 1603 1 1 1 1 1 1 +MODULE_INDEX 1604 1 1 1 1 1 1 +MODULE_INDEX 1605 1 1 1 1 1 1 +MODULE_INDEX 1606 1 1 1 1 1 1 +MODULE_INDEX 1607 1 1 1 1 1 1 +MODULE_INDEX 1608 1 1 1 1 1 1 +MODULE_INDEX 1609 1 1 1 1 1 1 +MODULE_INDEX 1610 1 1 1 1 1 1 +MODULE_INDEX 1611 1 1 1 1 1 1 +MODULE_INDEX 1612 1 1 1 1 1 1 +MODULE_INDEX 1613 1 1 1 1 1 1 +MODULE_INDEX 1614 1 1 1 1 1 1 +MODULE_INDEX 1615 1 1 1 1 1 1 +MODULE_INDEX 1616 1 1 1 1 1 1 +MODULE_INDEX 1617 1 1 1 1 1 1 +MODULE_INDEX 1618 1 1 1 1 1 1 +MODULE_INDEX 1619 1 1 1 1 1 1 +MODULE_INDEX 1620 1 1 1 1 1 1 +MODULE_INDEX 1621 1 1 1 1 1 1 +MODULE_INDEX 1622 1 1 1 1 1 1 +MODULE_INDEX 1623 1 1 1 1 1 1 +MODULE_INDEX 1624 1 1 1 1 1 1 +MODULE_INDEX 1625 1 1 1 1 1 1 +MODULE_INDEX 1626 1 1 1 1 1 1 +MODULE_INDEX 1627 1 1 1 1 1 1 +MODULE_INDEX 1628 1 1 1 1 1 1 +MODULE_INDEX 1629 1 1 1 1 1 1 +MODULE_INDEX 1630 1 1 1 1 1 1 +MODULE_INDEX 1631 1 1 1 1 1 1 +MODULE_INDEX 1632 1 1 1 1 1 1 +MODULE_INDEX 1633 1 1 1 1 1 1 +MODULE_INDEX 1634 1 1 1 1 1 1 +MODULE_INDEX 1635 1 1 1 1 1 1 +MODULE_INDEX 1636 1 1 1 1 1 1 +MODULE_INDEX 1637 1 1 1 1 1 1 +MODULE_INDEX 1638 1 1 1 1 1 1 +MODULE_INDEX 1639 1 1 1 1 1 1 +MODULE_INDEX 1640 1 1 1 1 1 1 +MODULE_INDEX 1641 1 1 1 1 1 1 +MODULE_INDEX 1642 1 1 1 1 1 1 +MODULE_INDEX 1643 1 1 1 1 1 1 +MODULE_INDEX 1644 1 1 1 1 1 1 +MODULE_INDEX 1645 1 1 1 1 1 1 +MODULE_INDEX 1646 1 1 1 1 1 1 +MODULE_INDEX 1647 1 1 1 1 1 1 +MODULE_INDEX 1648 1 1 1 1 1 1 +MODULE_INDEX 1649 1 1 1 1 1 1 +MODULE_INDEX 1650 1 1 1 1 1 1 +MODULE_INDEX 1651 1 1 1 1 1 1 +MODULE_INDEX 1652 1 1 1 1 1 1 +MODULE_INDEX 1653 1 1 1 1 1 1 +MODULE_INDEX 1654 1 1 1 1 1 1 +MODULE_INDEX 1655 1 1 1 1 1 1 +MODULE_INDEX 1656 1 1 1 1 1 1 +MODULE_INDEX 1657 1 1 1 1 1 1 +MODULE_INDEX 1658 1 1 1 1 1 1 +MODULE_INDEX 1659 1 1 1 1 1 1 +MODULE_INDEX 1660 1 1 1 1 1 1 +MODULE_INDEX 1661 1 1 1 1 1 1 +MODULE_INDEX 1662 1 1 1 1 1 1 +MODULE_INDEX 1663 1 1 1 1 1 1 +MODULE_INDEX 1664 1 1 1 1 1 1 +MODULE_INDEX 1665 1 1 1 1 1 1 +MODULE_INDEX 1666 1 1 1 1 1 1 +MODULE_INDEX 1667 1 1 1 1 1 1 +MODULE_INDEX 1668 1 1 1 1 1 1 +MODULE_INDEX 1669 1 1 1 1 1 1 +MODULE_INDEX 1670 1 1 1 1 1 1 +MODULE_INDEX 1671 1 1 1 1 1 1 +MODULE_INDEX 1672 1 1 1 1 1 1 +MODULE_INDEX 1673 1 1 1 1 1 1 +MODULE_INDEX 1674 1 1 1 1 1 1 +MODULE_INDEX 1675 1 1 1 1 1 1 +MODULE_INDEX 1676 1 1 1 1 1 1 +MODULE_INDEX 1677 1 1 1 1 1 1 +MODULE_INDEX 1678 1 1 1 1 1 1 +MODULE_INDEX 1679 1 1 1 1 1 1 +MODULE_INDEX 1680 1 1 1 1 1 1 +MODULE_INDEX 1681 1 1 1 1 1 1 +MODULE_INDEX 1682 1 1 1 1 1 1 +MODULE_INDEX 1683 1 1 1 1 1 1 +MODULE_INDEX 1684 1 1 1 1 1 1 +MODULE_INDEX 1685 1 1 1 1 1 1 +MODULE_INDEX 1686 1 1 1 1 1 1 +MODULE_INDEX 1687 1 1 1 1 1 1 +MODULE_INDEX 1688 1 1 1 1 1 1 +MODULE_INDEX 1689 1 1 1 1 1 1 +MODULE_INDEX 1690 1 1 1 1 1 1 +MODULE_INDEX 1691 1 1 1 1 1 1 +MODULE_INDEX 1692 1 1 1 1 1 1 +MODULE_INDEX 1693 1 1 1 1 1 1 +MODULE_INDEX 1694 1 1 1 1 1 1 +MODULE_INDEX 1695 1 1 1 1 1 1 +MODULE_INDEX 1696 1 1 1 1 1 1 +MODULE_INDEX 1697 1 1 1 1 1 1 +MODULE_INDEX 1698 1 1 1 1 1 1 +MODULE_INDEX 1699 1 1 1 1 1 1 +MODULE_INDEX 1700 1 1 1 1 1 1 +MODULE_INDEX 1701 1 1 1 1 1 1 +MODULE_INDEX 1702 1 1 1 1 1 1 +MODULE_INDEX 1703 1 1 1 1 1 1 +MODULE_INDEX 1704 1 1 1 1 1 1 +MODULE_INDEX 1705 1 1 1 1 1 1 +MODULE_INDEX 1706 1 1 1 1 1 1 +MODULE_INDEX 1707 1 1 1 1 1 1 +MODULE_INDEX 1708 1 1 1 1 1 1 +MODULE_INDEX 1709 1 1 1 1 1 1 +MODULE_INDEX 1710 1 1 1 1 1 1 +MODULE_INDEX 1711 1 1 1 1 1 1 +MODULE_INDEX 1712 1 1 1 1 1 1 +MODULE_INDEX 1713 1 1 1 1 1 1 +MODULE_INDEX 1714 1 1 1 1 1 1 +MODULE_INDEX 1715 1 1 1 1 1 1 +MODULE_INDEX 1716 1 1 1 1 1 1 +MODULE_INDEX 1717 1 1 1 1 1 1 +MODULE_INDEX 1718 1 1 1 1 1 1 +MODULE_INDEX 1719 1 1 1 1 1 1 +MODULE_INDEX 1720 1 1 1 1 1 1 +MODULE_INDEX 1721 1 1 1 1 1 1 +MODULE_INDEX 1722 1 1 1 1 1 1 +MODULE_INDEX 1723 1 1 1 1 1 1 +MODULE_INDEX 1724 1 1 1 1 1 1 +MODULE_INDEX 1725 1 1 1 1 1 1 +MODULE_INDEX 1726 1 1 1 1 1 1 +MODULE_INDEX 1727 1 1 1 1 1 1 +MODULE_INDEX 1728 1 1 1 1 1 1 +MODULE_INDEX 1729 1 1 1 1 1 1 +MODULE_INDEX 1730 1 1 1 1 1 1 +MODULE_INDEX 1731 1 1 1 1 1 1 +MODULE_INDEX 1732 1 1 1 1 1 1 +MODULE_INDEX 1733 1 1 1 1 1 1 +MODULE_INDEX 1734 1 1 1 1 1 1 +MODULE_INDEX 1735 1 1 1 1 1 1 +MODULE_INDEX 1736 1 1 1 1 1 1 +MODULE_INDEX 1737 1 1 1 1 1 1 +MODULE_INDEX 1738 1 1 1 1 1 1 +MODULE_INDEX 1739 1 1 1 1 1 1 +MODULE_INDEX 1740 1 1 1 1 1 1 +MODULE_INDEX 1741 1 1 1 1 1 1 +MODULE_INDEX 1742 1 1 1 1 1 1 +MODULE_INDEX 1743 1 1 1 1 1 1 +MODULE_INDEX 1744 1 1 1 1 1 1 +MODULE_INDEX 1745 1 1 1 1 1 1 +MODULE_INDEX 1746 1 1 1 1 1 1 +MODULE_INDEX 1747 1 1 1 1 1 1 +MODULE_INDEX 1748 1 1 1 1 1 1 +MODULE_INDEX 1749 1 1 1 1 1 1 +MODULE_INDEX 1750 1 1 1 1 1 1 +MODULE_INDEX 1751 1 1 1 1 1 1 +MODULE_INDEX 1752 1 1 1 1 1 1 +MODULE_INDEX 1753 1 1 1 1 1 1 +MODULE_INDEX 1754 1 1 1 1 1 1 +MODULE_INDEX 1755 1 1 1 1 1 1 +MODULE_INDEX 1756 1 1 1 1 1 1 +MODULE_INDEX 1757 1 1 1 1 1 1 +MODULE_INDEX 1758 1 1 1 1 1 1 +MODULE_INDEX 1759 1 1 1 1 1 1 +MODULE_INDEX 1760 1 1 1 1 1 1 +MODULE_INDEX 1761 1 1 1 1 1 1 +MODULE_INDEX 1762 1 1 1 1 1 1 +MODULE_INDEX 1763 1 1 1 1 1 1 +MODULE_INDEX 1764 1 1 1 1 1 1 +MODULE_INDEX 1765 1 1 1 1 1 1 +MODULE_INDEX 1766 1 1 1 1 1 1 +MODULE_INDEX 1767 1 1 1 1 1 1 +MODULE_INDEX 1768 1 1 1 1 1 1 +MODULE_INDEX 1769 1 1 1 1 1 1 +MODULE_INDEX 1770 1 1 1 1 1 1 +MODULE_INDEX 1771 1 1 1 1 1 1 +MODULE_INDEX 1772 1 1 1 1 1 1 +MODULE_INDEX 1773 1 1 1 1 1 1 +MODULE_INDEX 1774 1 1 1 1 1 1 +MODULE_INDEX 1775 1 1 1 1 1 1 +MODULE_INDEX 1776 1 1 1 1 1 1 +MODULE_INDEX 1777 1 1 1 1 1 1 +MODULE_INDEX 1778 1 1 1 1 1 1 +MODULE_INDEX 1779 1 1 1 1 1 1 +MODULE_INDEX 1780 1 1 1 1 1 1 +MODULE_INDEX 1781 1 1 1 1 1 1 +MODULE_INDEX 1782 1 1 1 1 1 1 +MODULE_INDEX 1783 1 1 1 1 1 1 +MODULE_INDEX 1784 1 1 1 1 1 1 +MODULE_INDEX 1785 1 1 1 1 1 1 +MODULE_INDEX 1786 1 1 1 1 1 1 +MODULE_INDEX 1787 1 1 1 1 1 1 +MODULE_INDEX 1788 1 1 1 1 1 1 +MODULE_INDEX 1789 1 1 1 1 1 1 +MODULE_INDEX 1790 1 1 1 1 1 1 +MODULE_INDEX 1791 1 1 1 1 1 1 +MODULE_INDEX 1792 1 1 1 1 1 1 +MODULE_INDEX 1793 1 1 1 1 1 1 +MODULE_INDEX 1794 1 1 1 1 1 1 +MODULE_INDEX 1795 1 1 1 1 1 1 +MODULE_INDEX 1796 1 1 1 1 1 1 +MODULE_INDEX 1797 1 1 1 1 1 1 +MODULE_INDEX 1798 1 1 1 1 1 1 +MODULE_INDEX 1799 1 1 1 1 1 1 +MODULE_INDEX 1800 1 1 1 1 1 1 +MODULE_INDEX 1801 1 1 1 1 1 1 +MODULE_INDEX 1802 1 1 1 1 1 1 +MODULE_INDEX 1803 1 1 1 1 1 1 +MODULE_INDEX 1804 1 1 1 1 1 1 +MODULE_INDEX 1805 1 1 1 1 1 1 +MODULE_INDEX 1806 1 1 1 1 1 1 +MODULE_INDEX 1807 1 1 1 1 1 1 +MODULE_INDEX 1808 1 1 1 1 1 1 +MODULE_INDEX 1809 1 1 1 1 1 1 +MODULE_INDEX 1810 1 1 1 1 1 1 +MODULE_INDEX 1811 1 1 1 1 1 1 +MODULE_INDEX 1812 1 1 1 1 1 1 +MODULE_INDEX 1813 1 1 1 1 1 1 +MODULE_INDEX 1814 1 1 1 1 1 1 +MODULE_INDEX 1815 1 1 1 1 1 1 +MODULE_INDEX 1816 1 1 1 1 1 1 +MODULE_INDEX 1817 1 1 1 1 1 1 +MODULE_INDEX 1818 1 1 1 1 1 1 +MODULE_INDEX 1819 1 1 1 1 1 1 +MODULE_INDEX 1820 1 1 1 1 1 1 +MODULE_INDEX 1821 1 1 1 1 1 1 +MODULE_INDEX 1822 1 1 1 1 1 1 +MODULE_INDEX 1823 1 1 1 1 1 1 +MODULE_INDEX 1824 1 1 1 1 1 1 +MODULE_INDEX 1825 1 1 1 1 1 1 +MODULE_INDEX 1826 1 1 1 1 1 1 +MODULE_INDEX 1827 1 1 1 1 1 1 +MODULE_INDEX 1828 1 1 1 1 1 1 +MODULE_INDEX 1829 1 1 1 1 1 1 +MODULE_INDEX 1830 1 1 1 1 1 1 +MODULE_INDEX 1831 1 1 1 1 1 1 +MODULE_INDEX 1832 1 1 1 1 1 1 +MODULE_INDEX 1833 1 1 1 1 1 1 +MODULE_INDEX 1834 1 1 1 1 1 1 +MODULE_INDEX 1835 1 1 1 1 1 1 +MODULE_INDEX 1836 1 1 1 1 1 1 +MODULE_INDEX 1837 1 1 1 1 1 1 +MODULE_INDEX 1838 1 1 1 1 1 1 +MODULE_INDEX 1839 1 1 1 1 1 1 +MODULE_INDEX 1840 1 1 1 1 1 1 +MODULE_INDEX 1841 1 1 1 1 1 1 +MODULE_INDEX 1842 1 1 1 1 1 1 +MODULE_INDEX 1843 1 1 1 1 1 1 +MODULE_INDEX 1844 1 1 1 1 1 1 +MODULE_INDEX 1845 1 1 1 1 1 1 +MODULE_INDEX 1846 1 1 1 1 1 1 +MODULE_INDEX 1847 1 1 1 1 1 1 +MODULE_INDEX 1848 1 1 1 1 1 1 +MODULE_INDEX 1849 1 1 1 1 1 1 +MODULE_INDEX 1850 1 1 1 1 1 1 +MODULE_INDEX 1851 1 1 1 1 1 1 +MODULE_INDEX 1852 1 1 1 1 1 1 +MODULE_INDEX 1853 1 1 1 1 1 1 +MODULE_INDEX 1854 1 1 1 1 1 1 +MODULE_INDEX 1855 1 1 1 1 1 1 +MODULE_INDEX 1856 1 1 1 1 1 1 +MODULE_INDEX 1857 1 1 1 1 1 1 +MODULE_INDEX 1858 1 1 1 1 1 1 +MODULE_INDEX 1859 1 1 1 1 1 1 +MODULE_INDEX 1860 1 1 1 1 1 1 +MODULE_INDEX 1861 1 1 1 1 1 1 +MODULE_INDEX 1862 1 1 1 1 1 1 +MODULE_INDEX 1863 1 1 1 1 1 1 +MODULE_INDEX 1864 1 1 1 1 1 1 +MODULE_INDEX 1865 1 1 1 1 1 1 +MODULE_INDEX 1866 1 1 1 1 1 1 +MODULE_INDEX 1867 1 1 1 1 1 1 +MODULE_INDEX 1868 1 1 1 1 1 1 +MODULE_INDEX 1869 1 1 1 1 1 1 +MODULE_INDEX 1870 1 1 1 1 1 1 +MODULE_INDEX 1871 1 1 1 1 1 1 +MODULE_INDEX 1872 1 1 1 1 1 1 +MODULE_INDEX 1873 1 1 1 1 1 1 +MODULE_INDEX 1874 1 1 1 1 1 1 +MODULE_INDEX 1875 1 1 1 1 1 1 +MODULE_INDEX 1876 1 1 1 1 1 1 +MODULE_INDEX 1877 1 1 1 1 1 1 +MODULE_INDEX 1878 1 1 1 1 1 1 +MODULE_INDEX 1879 1 1 1 1 1 1 +MODULE_INDEX 1880 1 1 1 1 1 1 +MODULE_INDEX 1881 1 1 1 1 1 1 +MODULE_INDEX 1882 1 1 1 1 1 1 +MODULE_INDEX 1883 1 1 1 1 1 1 +MODULE_INDEX 1884 1 1 1 1 1 1 +MODULE_INDEX 1885 1 1 1 1 1 1 +MODULE_INDEX 1886 1 1 1 1 1 1 +MODULE_INDEX 1887 1 1 1 1 1 1 +MODULE_INDEX 1888 1 1 1 1 1 1 +MODULE_INDEX 1889 1 1 1 1 1 1 +MODULE_INDEX 1890 1 1 1 1 1 1 +MODULE_INDEX 1891 1 1 1 1 1 1 +MODULE_INDEX 1892 1 1 1 1 1 1 +MODULE_INDEX 1893 1 1 1 1 1 1 +MODULE_INDEX 1894 1 1 1 1 1 1 +MODULE_INDEX 1895 1 1 1 1 1 1 +MODULE_INDEX 1896 1 1 1 1 1 1 +MODULE_INDEX 1897 1 1 1 1 1 1 +MODULE_INDEX 1898 1 1 1 1 1 1 +MODULE_INDEX 1899 1 1 1 1 1 1 +MODULE_INDEX 1900 1 1 1 1 1 1 +MODULE_INDEX 1901 1 1 1 1 1 1 +MODULE_INDEX 1902 1 1 1 1 1 1 +MODULE_INDEX 1903 1 1 1 1 1 1 +MODULE_INDEX 1904 1 1 1 1 1 1 +MODULE_INDEX 1905 1 1 1 1 1 1 +MODULE_INDEX 1906 1 1 1 1 1 1 +MODULE_INDEX 1907 1 1 1 1 1 1 +MODULE_INDEX 1908 1 1 1 1 1 1 +MODULE_INDEX 1909 1 1 1 1 1 1 +MODULE_INDEX 1910 1 1 1 1 1 1 +MODULE_INDEX 1911 1 1 1 1 1 1 +MODULE_INDEX 1912 1 1 1 1 1 1 +MODULE_INDEX 1913 1 1 1 1 1 1 +MODULE_INDEX 1914 1 1 1 1 1 1 +MODULE_INDEX 1915 1 1 1 1 1 1 +MODULE_INDEX 1916 1 1 1 1 1 1 +MODULE_INDEX 1917 1 1 1 1 1 1 +MODULE_INDEX 1918 1 1 1 1 1 1 +MODULE_INDEX 1919 1 1 1 1 1 1 +MODULE_INDEX 1920 1 1 1 1 1 1 +MODULE_INDEX 1921 1 1 1 1 1 1 +MODULE_INDEX 1922 1 1 1 1 1 1 +MODULE_INDEX 1923 1 1 1 1 1 1 +MODULE_INDEX 1924 1 1 1 1 1 1 +MODULE_INDEX 1925 1 1 1 1 1 1 +MODULE_INDEX 1926 1 1 1 1 1 1 +MODULE_INDEX 1927 1 1 1 1 1 1 +MODULE_INDEX 1928 1 1 1 1 1 1 +MODULE_INDEX 1929 1 1 1 1 1 1 +MODULE_INDEX 1930 1 1 1 1 1 1 +MODULE_INDEX 1931 1 1 1 1 1 1 +MODULE_INDEX 1932 1 1 1 1 1 1 +MODULE_INDEX 1933 1 1 1 1 1 1 +MODULE_INDEX 1934 1 1 1 1 1 1 +MODULE_INDEX 1935 1 1 1 1 1 1 +MODULE_INDEX 1936 1 1 1 1 1 1 +MODULE_INDEX 1937 1 1 1 1 1 1 +MODULE_INDEX 1938 1 1 1 1 1 1 +MODULE_INDEX 1939 1 1 1 1 1 1 +MODULE_INDEX 1940 1 1 1 1 1 1 +MODULE_INDEX 1941 1 1 1 1 1 1 +MODULE_INDEX 1942 1 1 1 1 1 1 +MODULE_INDEX 1943 1 1 1 1 1 1 +MODULE_INDEX 1944 1 1 1 1 1 1 +MODULE_INDEX 1945 1 1 1 1 1 1 +MODULE_INDEX 1946 1 1 1 1 1 1 +MODULE_INDEX 1947 1 1 1 1 1 1 +MODULE_INDEX 1948 1 1 1 1 1 1 +MODULE_INDEX 1949 1 1 1 1 1 1 +MODULE_INDEX 1950 1 1 1 1 1 1 +MODULE_INDEX 1951 1 1 1 1 1 1 +MODULE_INDEX 1952 1 1 1 1 1 1 +MODULE_INDEX 1953 1 1 1 1 1 1 +MODULE_INDEX 1954 1 1 1 1 1 1 +MODULE_INDEX 1955 1 1 1 1 1 1 +MODULE_INDEX 1956 1 1 1 1 1 1 +MODULE_INDEX 1957 1 1 1 1 1 1 +MODULE_INDEX 1958 1 1 1 1 1 1 +MODULE_INDEX 1959 1 1 1 1 1 1 +MODULE_INDEX 1960 1 1 1 1 1 1 +MODULE_INDEX 1961 1 1 1 1 1 1 +MODULE_INDEX 1962 1 1 1 1 1 1 +MODULE_INDEX 1963 1 1 1 1 1 1 +MODULE_INDEX 1964 1 1 1 1 1 1 +MODULE_INDEX 1965 1 1 1 1 1 1 +MODULE_INDEX 1966 1 1 1 1 1 1 +MODULE_INDEX 1967 1 1 1 1 1 1 +MODULE_INDEX 1968 1 1 1 1 1 1 +MODULE_INDEX 1969 1 1 1 1 1 1 +MODULE_INDEX 1970 1 1 1 1 1 1 +MODULE_INDEX 1971 1 1 1 1 1 1 +MODULE_INDEX 1972 1 1 1 1 1 1 +MODULE_INDEX 1973 1 1 1 1 1 1 +MODULE_INDEX 1974 1 1 1 1 1 1 +MODULE_INDEX 1975 1 1 1 1 1 1 +MODULE_INDEX 1976 1 1 1 1 1 1 +MODULE_INDEX 1977 1 1 1 1 1 1 +MODULE_INDEX 1978 1 1 1 1 1 1 +MODULE_INDEX 1979 1 1 1 1 1 1 +MODULE_INDEX 1980 1 1 1 1 1 1 +MODULE_INDEX 1981 1 1 1 1 1 1 +MODULE_INDEX 1982 1 1 1 1 1 1 +MODULE_INDEX 1983 1 1 1 1 1 1 +MODULE_INDEX 1984 1 1 1 1 1 1 +MODULE_INDEX 1985 1 1 1 1 1 1 +MODULE_INDEX 1986 1 1 1 1 1 1 +MODULE_INDEX 1987 1 1 1 1 1 1 +MODULE_INDEX 1988 1 1 1 1 1 1 +MODULE_INDEX 1989 1 1 1 1 1 1 +MODULE_INDEX 1990 1 1 1 1 1 1 +MODULE_INDEX 1991 1 1 1 1 1 1 +MODULE_INDEX 1992 1 1 1 1 1 1 +MODULE_INDEX 1993 1 1 1 1 1 1 +MODULE_INDEX 1994 1 1 1 1 1 1 +MODULE_INDEX 1995 1 1 1 1 1 1 +MODULE_INDEX 1996 1 1 1 1 1 1 +MODULE_INDEX 1997 1 1 1 1 1 1 +MODULE_INDEX 1998 1 1 1 1 1 1 +MODULE_INDEX 1999 1 1 1 1 1 1 +MODULE_INDEX 2000 1 1 1 1 1 1 +MODULE_INDEX 2001 1 1 1 1 1 1 +MODULE_INDEX 2002 1 1 1 1 1 1 +MODULE_INDEX 2003 1 1 1 1 1 1 +MODULE_INDEX 2004 1 1 1 1 1 1 +MODULE_INDEX 2005 1 1 1 1 1 1 +MODULE_INDEX 2006 1 1 1 1 1 1 +MODULE_INDEX 2007 1 1 1 1 1 1 +MODULE_INDEX 2008 1 1 1 1 1 1 +MODULE_INDEX 2009 1 1 1 1 1 1 +MODULE_INDEX 2010 1 1 1 1 1 1 +MODULE_INDEX 2011 1 1 1 1 1 1 +MODULE_INDEX 2012 1 1 1 1 1 1 +MODULE_INDEX 2013 1 1 1 1 1 1 +MODULE_INDEX 2014 1 1 1 1 1 1 +MODULE_INDEX 2015 1 1 1 1 1 1 +MODULE_INDEX 2016 1 1 1 1 1 1 +MODULE_INDEX 2017 1 1 1 1 1 1 +MODULE_INDEX 2018 1 1 1 1 1 1 +MODULE_INDEX 2019 1 1 1 1 1 1 +MODULE_INDEX 2020 1 1 1 1 1 1 +MODULE_INDEX 2021 1 1 1 1 1 1 +MODULE_INDEX 2022 1 1 1 1 1 1 +MODULE_INDEX 2023 1 1 1 1 1 1 +MODULE_INDEX 2024 1 1 1 1 1 1 +MODULE_INDEX 2025 1 1 1 1 1 1 +MODULE_INDEX 2026 1 1 1 1 1 1 +MODULE_INDEX 2027 1 1 1 1 1 1 +MODULE_INDEX 2028 1 1 1 1 1 1 +MODULE_INDEX 2029 1 1 1 1 1 1 +MODULE_INDEX 2030 1 1 1 1 1 1 +MODULE_INDEX 2031 1 1 1 1 1 1 +MODULE_INDEX 2032 1 1 1 1 1 1 +MODULE_INDEX 2033 1 1 1 1 1 1 +MODULE_INDEX 2034 1 1 1 1 1 1 +MODULE_INDEX 2035 1 1 1 1 1 1 +MODULE_INDEX 2036 1 1 1 1 1 1 +MODULE_INDEX 2037 1 1 1 1 1 1 +MODULE_INDEX 2038 1 1 1 1 1 1 +MODULE_INDEX 2039 1 1 1 1 1 1 +MODULE_INDEX 2040 1 1 1 1 1 1 +MODULE_INDEX 2041 1 1 1 1 1 1 +MODULE_INDEX 2042 1 1 1 1 1 1 +MODULE_INDEX 2043 1 1 1 1 1 1 +MODULE_INDEX 2044 1 1 1 1 1 1 +MODULE_INDEX 2045 1 1 1 1 1 1 +MODULE_INDEX 2046 1 1 1 1 1 1 +MODULE_INDEX 2047 1 1 1 1 1 1 +MODULE_INDEX 2048 1 1 1 1 1 1 +MODULE_INDEX 2049 1 1 1 1 1 1 +MODULE_INDEX 2050 1 1 1 1 1 1 +MODULE_INDEX 2051 1 1 1 1 1 1 +MODULE_INDEX 2052 1 1 1 1 1 1 +MODULE_INDEX 2053 1 1 1 1 1 1 +MODULE_INDEX 2054 1 1 1 1 1 1 +MODULE_INDEX 2055 1 1 1 1 1 1 +MODULE_INDEX 2056 1 1 1 1 1 1 +MODULE_INDEX 2057 1 1 1 1 1 1 +MODULE_INDEX 2058 1 1 1 1 1 1 +MODULE_INDEX 2059 1 1 1 1 1 1 +MODULE_INDEX 2060 1 1 1 1 1 1 +MODULE_INDEX 2061 1 1 1 1 1 1 +MODULE_INDEX 2062 1 1 1 1 1 1 +MODULE_INDEX 2063 1 1 1 1 1 1 +MODULE_INDEX 2064 1 1 1 1 1 1 +MODULE_INDEX 2065 1 1 1 1 1 1 +MODULE_INDEX 2066 1 1 1 1 1 1 +MODULE_INDEX 2067 1 1 1 1 1 1 +MODULE_INDEX 2068 1 1 1 1 1 1 +MODULE_INDEX 2069 1 1 1 1 1 1 +MODULE_INDEX 2070 1 1 1 1 1 1 +MODULE_INDEX 2071 1 1 1 1 1 1 +MODULE_INDEX 2072 1 1 1 1 1 1 +MODULE_INDEX 2073 1 1 1 1 1 1 +MODULE_INDEX 2074 1 1 1 1 1 1 +MODULE_INDEX 2075 1 1 1 1 1 1 +MODULE_INDEX 2076 1 1 1 1 1 1 +MODULE_INDEX 2077 1 1 1 1 1 1 +MODULE_INDEX 2078 1 1 1 1 1 1 +MODULE_INDEX 2079 1 1 1 1 1 1 +MODULE_INDEX 2080 1 1 1 1 1 1 +MODULE_INDEX 2081 1 1 1 1 1 1 +MODULE_INDEX 2082 1 1 1 1 1 1 +MODULE_INDEX 2083 1 1 1 1 1 1 +MODULE_INDEX 2084 1 1 1 1 1 1 +MODULE_INDEX 2085 1 1 1 1 1 1 +MODULE_INDEX 2086 1 1 1 1 1 1 +MODULE_INDEX 2087 1 1 1 1 1 1 +MODULE_INDEX 2088 1 1 1 1 1 1 +MODULE_INDEX 2089 1 1 1 1 1 1 +MODULE_INDEX 2090 1 1 1 1 1 1 +MODULE_INDEX 2091 1 1 1 1 1 1 +MODULE_INDEX 2092 1 1 1 1 1 1 +MODULE_INDEX 2093 1 1 1 1 1 1 +MODULE_INDEX 2094 1 1 1 1 1 1 +MODULE_INDEX 2095 1 1 1 1 1 1 +MODULE_INDEX 2096 1 1 1 1 1 1 +MODULE_INDEX 2097 1 1 1 1 1 1 +MODULE_INDEX 2098 1 1 1 1 1 1 +MODULE_INDEX 2099 1 1 1 1 1 1 +MODULE_INDEX 2100 1 1 1 1 1 1 +MODULE_INDEX 2101 1 1 1 1 1 1 +MODULE_INDEX 2102 1 1 1 1 1 1 +MODULE_INDEX 2103 1 1 1 1 1 1 +MODULE_INDEX 2104 1 1 1 1 1 1 +MODULE_INDEX 2105 1 1 1 1 1 1 +MODULE_INDEX 2106 1 1 1 1 1 1 +MODULE_INDEX 2107 1 1 1 1 1 1 +MODULE_INDEX 2108 1 1 1 1 1 1 +MODULE_INDEX 2109 1 1 1 1 1 1 +MODULE_INDEX 2110 1 1 1 1 1 1 +MODULE_INDEX 2111 1 1 1 1 1 1 +MODULE_INDEX 2112 1 1 1 1 1 1 +MODULE_INDEX 2113 1 1 1 1 1 1 +MODULE_INDEX 2114 1 1 1 1 1 1 +MODULE_INDEX 2115 1 1 1 1 1 1 +MODULE_INDEX 2116 1 1 1 1 1 1 +MODULE_INDEX 2117 1 1 1 1 1 1 +MODULE_INDEX 2118 1 1 1 1 1 1 +MODULE_INDEX 2119 1 1 1 1 1 1 +MODULE_INDEX 2120 1 1 1 1 1 1 +MODULE_INDEX 2121 1 1 1 1 1 1 +MODULE_INDEX 2122 1 1 1 1 1 1 +MODULE_INDEX 2123 1 1 1 1 1 1 +MODULE_INDEX 2124 1 1 1 1 1 1 +MODULE_INDEX 2125 1 1 1 1 1 1 +MODULE_INDEX 2126 1 1 1 1 1 1 +MODULE_INDEX 2127 1 1 1 1 1 1 +MODULE_INDEX 2128 1 1 1 1 1 1 +MODULE_INDEX 2129 1 1 1 1 1 1 +MODULE_INDEX 2130 1 1 1 1 1 1 +MODULE_INDEX 2131 1 1 1 1 1 1 +MODULE_INDEX 2132 1 1 1 1 1 1 +MODULE_INDEX 2133 1 1 1 1 1 1 +MODULE_INDEX 2134 1 1 1 1 1 1 +MODULE_INDEX 2135 1 1 1 1 1 1 +MODULE_INDEX 2136 1 1 1 1 1 1 +MODULE_INDEX 2137 1 1 1 1 1 1 +MODULE_INDEX 2138 1 1 1 1 1 1 +MODULE_INDEX 2139 1 1 1 1 1 1 +MODULE_INDEX 2140 1 1 1 1 1 1 +MODULE_INDEX 2141 1 1 1 1 1 1 +MODULE_INDEX 2142 1 1 1 1 1 1 +MODULE_INDEX 2143 1 1 1 1 1 1 +MODULE_INDEX 2144 1 1 1 1 1 1 +MODULE_INDEX 2145 1 1 1 1 1 1 +MODULE_INDEX 2146 1 1 1 1 1 1 +MODULE_INDEX 2147 1 1 1 1 1 1 +MODULE_INDEX 2148 1 1 1 1 1 1 +MODULE_INDEX 2149 1 1 1 1 1 1 +MODULE_INDEX 2150 1 1 1 1 1 1 +MODULE_INDEX 2151 1 1 1 1 1 1 +MODULE_INDEX 2152 1 1 1 1 1 1 +MODULE_INDEX 2153 1 1 1 1 1 1 +MODULE_INDEX 2154 1 1 1 1 1 1 +MODULE_INDEX 2155 1 1 1 1 1 1 +MODULE_INDEX 2156 1 1 1 1 1 1 +MODULE_INDEX 2157 1 1 1 1 1 1 +MODULE_INDEX 2158 1 1 1 1 1 1 +MODULE_INDEX 2159 1 1 1 1 1 1 +MODULE_INDEX 2160 1 1 1 1 1 1 +MODULE_INDEX 2161 1 1 1 1 1 1 +MODULE_INDEX 2162 1 1 1 1 1 1 +MODULE_INDEX 2163 1 1 1 1 1 1 +MODULE_INDEX 2164 1 1 1 1 1 1 +MODULE_INDEX 2165 1 1 1 1 1 1 +MODULE_INDEX 2166 1 1 1 1 1 1 +MODULE_INDEX 2167 1 1 1 1 1 1 +MODULE_INDEX 2168 1 1 1 1 1 1 +MODULE_INDEX 2169 1 1 1 1 1 1 +MODULE_INDEX 2170 1 1 1 1 1 1 +MODULE_INDEX 2171 1 1 1 1 1 1 +MODULE_INDEX 2172 1 1 1 1 1 1 +MODULE_INDEX 2173 1 1 1 1 1 1 +MODULE_INDEX 2174 1 1 1 1 1 1 +MODULE_INDEX 2175 1 1 1 1 1 1 +MODULE_INDEX 2176 1 1 1 1 1 1 +MODULE_INDEX 2177 1 1 1 1 1 1 +MODULE_INDEX 2178 1 1 1 1 1 1 +MODULE_INDEX 2179 1 1 1 1 1 1 +MODULE_INDEX 2180 1 1 1 1 1 1 +MODULE_INDEX 2181 1 1 1 1 1 1 +MODULE_INDEX 2182 1 1 1 1 1 1 +MODULE_INDEX 2183 1 1 1 1 1 1 +MODULE_INDEX 2184 1 1 1 1 1 1 +MODULE_INDEX 2185 1 1 1 1 1 1 +MODULE_INDEX 2186 1 1 1 1 1 1 +MODULE_INDEX 2187 1 1 1 1 1 1 +MODULE_INDEX 2188 1 1 1 1 1 1 +MODULE_INDEX 2189 1 1 1 1 1 1 +MODULE_INDEX 2190 1 1 1 1 1 1 +MODULE_INDEX 2191 1 1 1 1 1 1 +MODULE_INDEX 2192 1 1 1 1 1 1 +MODULE_INDEX 2193 1 1 1 1 1 1 +MODULE_INDEX 2194 1 1 1 1 1 1 +MODULE_INDEX 2195 1 1 1 1 1 1 +MODULE_INDEX 2196 1 1 1 1 1 1 +MODULE_INDEX 2197 1 1 1 1 1 1 diff --git a/ITS/AliITSCorrMap2DSDD.cxx b/ITS/AliITSCorrMap2DSDD.cxx index 2cf02df2ce8..d4143518fee 100644 --- a/ITS/AliITSCorrMap2DSDD.cxx +++ b/ITS/AliITSCorrMap2DSDD.cxx @@ -1,79 +1,79 @@ -/************************************************************************** - * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id$ */ - -/////////////////////////////////////////////////////////////////// -// // -// Implementation of the base class for SDD map 2D corrections // -// Origin: F.Prino, Torino, prino@to.infn.it // -// // -/////////////////////////////////////////////////////////////////// - -#include "TH1F.h" -#include "TH2F.h" -#include "AliITSCorrMapSDD.h" -#include "AliITSCorrMap2DSDD.h" -#include "AliLog.h" -#include "AliITSsegmentationSDD.h" - -ClassImp(AliITSCorrMap2DSDD) -//______________________________________________________________________ -AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(): -AliITSCorrMapSDD() -{ - // default constructor - ResetMap(); -} -//______________________________________________________________________ -AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(Char_t *mapname): -AliITSCorrMapSDD(mapname) -{ - // standard constructor - ResetMap(); -} -//______________________________________________________________________ -AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(Char_t *mapname, Int_t nbinsan, Int_t nbinsdr): -AliITSCorrMapSDD(mapname) -{ - // standard constructor - ResetMap(); - SetNBinsAnode(nbinsan); - SetNBinsDrift(nbinsdr); -} -//______________________________________________________________________ -void AliITSCorrMap2DSDD::ResetMap(){ - // Sets contents to zero - for(Int_t iAn=0;iAnGetNbinsX()!=fNAnodePts || hmap->GetNbinsY()!=fNDriftPts){ - AliError(Form("N. of histo bins (%dX%d) not matching N. of map cells (%dX%d)\n",hmap->GetNbinsX(),hmap->GetNbinsY(),fNAnodePts,fNDriftPts)); - return; - } - for(Int_t iAn=0;iAnGetBinContent(iAn+1,iDr+1)); - } - } -} +/************************************************************************** + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id$ */ + +/////////////////////////////////////////////////////////////////// +// // +// Implementation of the base class for SDD map 2D corrections // +// Origin: F.Prino, Torino, prino@to.infn.it // +// // +/////////////////////////////////////////////////////////////////// + +#include "TH1F.h" +#include "TH2F.h" +#include "AliITSCorrMapSDD.h" +#include "AliITSCorrMap2DSDD.h" +#include "AliLog.h" +#include "AliITSsegmentationSDD.h" + +ClassImp(AliITSCorrMap2DSDD) +//______________________________________________________________________ +AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(): +AliITSCorrMapSDD() +{ + // default constructor + ResetMap(); +} +//______________________________________________________________________ +AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(Char_t *mapname): +AliITSCorrMapSDD(mapname) +{ + // standard constructor + ResetMap(); +} +//______________________________________________________________________ +AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(Char_t *mapname, Int_t nbinsan, Int_t nbinsdr): +AliITSCorrMapSDD(mapname) +{ + // standard constructor + ResetMap(); + SetNBinsAnode(nbinsan); + SetNBinsDrift(nbinsdr); +} +//______________________________________________________________________ +void AliITSCorrMap2DSDD::ResetMap(){ + // Sets contents to zero + for(Int_t iAn=0;iAnGetNbinsX()!=fNAnodePts || hmap->GetNbinsY()!=fNDriftPts){ + AliError(Form("N. of histo bins (%dX%d) not matching N. of map cells (%dX%d)\n",hmap->GetNbinsX(),hmap->GetNbinsY(),fNAnodePts,fNDriftPts)); + return; + } + for(Int_t iAn=0;iAnGetBinContent(iAn+1,iDr+1)); + } + } +} diff --git a/ITS/AliITSQASDDDataMakerSim.cxx b/ITS/AliITSQASDDDataMakerSim.cxx index b5017cd5df6..50d99069d8a 100644 --- a/ITS/AliITSQASDDDataMakerSim.cxx +++ b/ITS/AliITSQASDDDataMakerSim.cxx @@ -1,392 +1,392 @@ -/************************************************************************** - * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id$ */ - -// ************************************************************* -// Checks the quality assurance -// by comparing with reference data -// contained in a DB -// ------------------------------------------------------------- -// W. Ferrarese + P. Cerello Feb 2008 -// INFN Torino - -// --- ROOT system --- -#include -// --- Standard library --- - -// --- AliRoot header files --- -#include "AliITSQASDDDataMakerSim.h" -#include "AliLog.h" -#include "AliQAv1.h" -#include "AliQAChecker.h" -#include "AliQADataMakerSim.h" -#include "AliITSQADataMakerSim.h" -#include "AliRawReader.h" -#include "AliITSdigit.h" -#include "AliITS.h" -#include "AliITSmodule.h" -#include "AliITShit.h" -#include "AliITSLoader.h" -#include "AliRunLoader.h" -#include "AliRun.h" -#include "AliITSsegmentationSDD.h" -#include "AliITSpList.h" - -ClassImp(AliITSQASDDDataMakerSim) - -//____________________________________________________________________________ -AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : -TObject(), -fAliITSQADataMakerSim(aliITSQADataMakerSim), -fSDDhHTask(0), -fSDDhSTask(0), -fSDDhDTask(0), -fGenOffsetH(0), -fGenOffsetS(0), -fGenOffsetD(0) -{ - //ctor used to discriminate OnLine-Offline analysis - fGenOffsetH= new Int_t[AliRecoParam::kNSpecies]; - fGenOffsetS= new Int_t[AliRecoParam::kNSpecies]; - fGenOffsetD= new Int_t[AliRecoParam::kNSpecies]; - for(Int_t i=0; iSetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; - fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle()); - -} - -//__________________________________________________________________ -AliITSQASDDDataMakerSim& AliITSQASDDDataMakerSim::operator = (const AliITSQASDDDataMakerSim& qac ) -{ - // Equal operator. - this->~AliITSQASDDDataMakerSim(); - new(this) AliITSQASDDDataMakerSim(qac); - return *this; -} - -//____________________________________________________________________________ -void AliITSQASDDDataMakerSim::StartOfDetectorCycle() -{ - //Detector specific actions at start of cycle - AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SDD Cycle\n"); -} - -//____________________________________________________________________________ -void AliITSQASDDDataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t /*task*/, TObjArray** /*list*/) -{ - // launch the QA checking - // - AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n"); - //AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list); -} - -//____________________________________________________________________________ -Int_t AliITSQASDDDataMakerSim::InitDigits() -{ - // Initialization for DIGIT data - SDD - - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - Int_t rv = 0 ; - //fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList[AliRecoParam::kDefault])->GetEntries(); - //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List - TH1F* h0=new TH1F("SDD DIGITS Module Pattern","SDD DIGITS Module Pattern",260,239.5,499.5); //hmod - h0->GetXaxis()->SetTitle("SDD Module Number"); - h0->GetYaxis()->SetTitle("# DIGITS"); - rv = fAliITSQADataMakerSim->Add2DigitsList(h0,fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhDTask ++; - TH1F* h1=new TH1F("SDD Anode Distribution","SDD DIGITS Anode Distribution",512,-0.5,511.5); //hanocc - h1->GetXaxis()->SetTitle("Anode Number"); - h1->GetYaxis()->SetTitle("# DIGITS"); - rv = fAliITSQADataMakerSim->Add2DigitsList(h1,1+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhDTask ++; - TH1F* h2=new TH1F("SDD Tbin Distribution","SDD DIGITS Tbin Distribution",256,-0.5,255.5); //htbocc - h2->GetXaxis()->SetTitle("Tbin Number"); - h2->GetYaxis()->SetTitle("# DIGITS"); - rv = fAliITSQADataMakerSim->Add2DigitsList(h2,2+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhDTask ++; - TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDD DIGITS ADC Counts Distribution",200,0.,1024.); //hsig - h3->GetXaxis()->SetTitle("ADC Value"); - h3->GetYaxis()->SetTitle("# DIGITS"); - rv = fAliITSQADataMakerSim->Add2DigitsList(h3,3+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhDTask ++; - AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Digits histograms booked\n",fSDDhDTask)); - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASDDDataMakerSim::MakeDigits(TTree * digits) -{ - - // Fill QA for DIGIT - SDD - - Int_t rv = 0 ; - - AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); - fITS->SetTreeAddress(); - TClonesArray *iITSdigits = fITS->DigitsAddress(1); - for(Int_t i=0; i<260; i++){ - Int_t nmod=i+240; - digits->GetEvent(nmod); - Int_t ndigits = iITSdigits->GetEntries(); - fAliITSQADataMakerSim->FillDigitsData(fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],nmod,ndigits); - for (Int_t idig=0; idigUncheckedAt(idig); - Int_t iz=dig->GetCoord1(); // cell number z - Int_t ix=dig->GetCoord2(); // cell number x - Int_t sig=dig->GetSignal(); - fAliITSQADataMakerSim->FillDigitsData(1+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],iz); - fAliITSQADataMakerSim->FillDigitsData(2+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],ix); - fAliITSQADataMakerSim->FillDigitsData(3+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],sig); - } - } - // - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASDDDataMakerSim::InitSDigits() -{ - // Initialization for SDIGIT data - SDD - - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - Int_t rv = 0 ; - //fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList[AliRecoParam::kDefault])->GetEntries(); - //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List - TH1F* h0=new TH1F("SDD SDIGITS Module Pattern","SDIGITS SDD Module Pattern",260,239.5,499.5); //hmod - h0->GetXaxis()->SetTitle("SDD Module Number"); - h0->GetYaxis()->SetTitle("# SDIGITS"); - rv = fAliITSQADataMakerSim->Add2SDigitsList(h0,fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhSTask ++; - TH1F* h1=new TH1F("SDD Anode Distribution","SDIGITS SDD Anode Distribution",512,-0.5,511.5); //hanocc - h1->GetXaxis()->SetTitle("Anode Number"); - h1->GetYaxis()->SetTitle("# SDIGITS"); - rv = fAliITSQADataMakerSim->Add2SDigitsList(h1,1+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhSTask ++; - TH1F* h2=new TH1F("SDD Tbin Distribution","SDIGITS SDD Tbin Distribution",256,-0.5,255.5); //htbocc - h2->GetXaxis()->SetTitle("Tbin Number"); - h2->GetYaxis()->SetTitle("# SDIGITS"); - rv = fAliITSQADataMakerSim->Add2SDigitsList(h2,2+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()]); - fSDDhSTask ++; - TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDIGITS SDD ADC Counts Distribution",200,0.,1024.); //hsig - h3->GetXaxis()->SetTitle("ADC Value"); - h3->GetYaxis()->SetTitle("# SDIGITS"); - rv = fAliITSQADataMakerSim->Add2SDigitsList(h3,3+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhSTask ++; - - AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD SDigits histograms booked\n",fSDDhSTask)); - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASDDDataMakerSim::MakeSDigits(TTree * sdigits) -{ - // Fill QA for SDIGIT - SDD - - Int_t rv = 0 ; - - AliITSsegmentationSDD* seg = new AliITSsegmentationSDD(); - Int_t nan=seg->Npz(); - Int_t ntb=seg->Npx(); - Int_t scaleSize=4; - AliITSpList* list=new AliITSpList(nan,ntb*scaleSize); - - //AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); - //fITS->SetTreeAddress(); - //TClonesArray *ITSdigits = fITS->DigitsAddress(1); - //TFile *sper = new TFile("sper.root","CREATE"); //agginto a mano x prova - //digits->Write(); - //sper->Close(); - - - TBranch *brchSDigits = sdigits->GetBranch("ITS"); - static TClonesArray * sdig ; - if (! sdig ) - sdig = new TClonesArray( "AliITSpListItem",1000 ); - for(Int_t id=0; id<260; id++){ - Int_t nmod=id+240; - brchSDigits->SetAddress( &sdig ); - brchSDigits->GetEvent(nmod); - Int_t nsdig=sdig->GetEntries(); - fAliITSQADataMakerSim->FillSDigitsData(fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],nmod,nsdig); - for(Int_t i=0;iAt(i); - Float_t sig=cell->GetSignal(); - Int_t idx=cell->GetIndex(); - Int_t ia,it; - list->GetCell(idx,ia,it); - fAliITSQADataMakerSim->FillSDigitsData(1+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],ia); - fAliITSQADataMakerSim->FillSDigitsData(2+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],it); - fAliITSQADataMakerSim->FillSDigitsData(3+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],sig); - } - sdig->Clear(); - } - // - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASDDDataMakerSim::InitHits() -{ - - // Initialization for HITS data - SDD - - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - Int_t rv = 0 ; - - //fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList[AliRecoParam::kDefault])->GetEntries(); - //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List - //printf("AliITSQASDDDataMakerSim::InitHits called \n"); - TH1F *h0=new TH1F("SDD HITS Module Pattern","SDD HITS Module Pattern",260,239.5,499.5); - h0->GetXaxis()->SetTitle("SDD Module Number"); - h0->GetYaxis()->SetTitle("# HITS"); - rv = fAliITSQADataMakerSim->Add2HitsList(h0,fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhHTask ++; - TH1F *h1=new TH1F("SDD HIT lenght along local Y Coord","SDD HIT lenght along local Y Coord",200,0.,350.); - h1->GetXaxis()->SetTitle("HIT lenght (um)"); - h1->GetYaxis()->SetTitle("# HITS"); - rv = fAliITSQADataMakerSim->Add2HitsList(h1,1+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhHTask ++; - TH1F *h2=new TH1F("SDD HIT lenght along local Y Coord - Zoom","SDD HIT lenght along local Y Coord - Zoom",200,250.,350.); - h2->GetXaxis()->SetTitle("HIT lenght (um)"); - h2->GetYaxis()->SetTitle("# HITS"); - rv = fAliITSQADataMakerSim->Add2HitsList(h2,2+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhHTask ++; - TH1F *h3=new TH1F("SDD Deposited Energy Distribution (loc Y > 200um)","SDD HITS Deposited Energy Distribution (loc Y > 200um)",200,0.,350.); - h3->GetXaxis()->SetTitle("ADC counts "); - h3->GetYaxis()->SetTitle("# HITS"); - rv = fAliITSQADataMakerSim->Add2HitsList(h3,3+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); - fSDDhHTask ++; - AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Hits histograms booked\n",fSDDhHTask)); - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASDDDataMakerSim::MakeHits(TTree * hits) -{ - // Fill QA for HITS - SDD - - Int_t rv = 0 ; - - AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); - fITS->SetTreeAddress(); - Int_t nmodules; - if(!(fITS->InitModules(-1,nmodules))){ - AliError("ITS geometry not available - nothing done"); - return rv; - } - - fITS->FillModules(hits,0); - - for(Int_t i=0; i<260; i++){ - Int_t nmod=i+240; - AliITSmodule *modu = fITS->GetModule(nmod); - TObjArray *arrHits = modu->GetHits(); - Int_t nhits = arrHits->GetEntriesFast(); - ////printf("--w--AliITSQASDDDataMakerSim::MakeHits nhits = %d\n",nhits); - for (Int_t iHit=0;iHitAt(iHit); - fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],nmod); - Double_t xl,yl,zl,xl0,yl0,zl0; - Double_t tof,tof0; - hit->GetPositionL(xl,yl,zl,tof); - hit->GetPositionL0(xl0,yl0,zl0,tof0); - Float_t dyloc=TMath::Abs(yl-yl0)*10000.; - fAliITSQADataMakerSim->FillHitsData(1+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],dyloc); - Float_t edep=hit->GetIonization()*1000000; - if(dyloc>200.){ - fAliITSQADataMakerSim->FillHitsData(2+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],edep); - fAliITSQADataMakerSim->FillHitsData(3+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],dyloc); - } - } - } - // - return rv ; -} - -//_______________________________________________________________ - -Int_t AliITSQASDDDataMakerSim::GetOffset(AliQAv1::TASKINDEX_t task, Int_t specie){ - // Returns histogram offset according to the specified task - Int_t offset=0; - if( task == AliQAv1::kHITS){ - offset=fGenOffsetH[specie]; - } - else if( task == AliQAv1::kSDIGITS) { - offset=fGenOffsetS[specie]; - } - else if( task == AliQAv1::kDIGITS) { - offset=fGenOffsetD[specie]; - } - else { - AliInfo("No task has been selected. TaskHisto set to zero.\n"); - } - - return offset; -} - -//____________________________________________________________________________ -void AliITSQASDDDataMakerSim::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset,Int_t specie ){ - // Returns histogram offset according to the specified task - if( task == AliQAv1::kHITS){ - fGenOffsetH[specie] = offset; - } - else if( task == AliQAv1::kSDIGITS) { - fGenOffsetS[specie] = offset; - } - else if( task == AliQAv1::kDIGITS) { - fGenOffsetD[specie] = offset; - } - else { - AliInfo("No task has been selected. TaskHisto set to zero.\n"); - } -} - -//_______________________________________________________________ - -Int_t AliITSQASDDDataMakerSim::GetTaskHisto(AliQAv1::TASKINDEX_t task) { - // Returns the number of booked histograms for the selected task - Int_t histotot=0; - if( task == AliQAv1::kHITS) { - histotot=fSDDhHTask ; - } - else if( task == AliQAv1::kSDIGITS) { - histotot=fSDDhSTask; - } - else if( task == AliQAv1::kDIGITS) { - histotot=fSDDhDTask ; - } - else { - AliInfo("No task has been selected. TaskHisto set to zero.\n"); - } - return histotot; - -} +/************************************************************************** + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id$ */ + +// ************************************************************* +// Checks the quality assurance +// by comparing with reference data +// contained in a DB +// ------------------------------------------------------------- +// W. Ferrarese + P. Cerello Feb 2008 +// INFN Torino + +// --- ROOT system --- +#include +// --- Standard library --- + +// --- AliRoot header files --- +#include "AliITSQASDDDataMakerSim.h" +#include "AliLog.h" +#include "AliQAv1.h" +#include "AliQAChecker.h" +#include "AliQADataMakerSim.h" +#include "AliITSQADataMakerSim.h" +#include "AliRawReader.h" +#include "AliITSdigit.h" +#include "AliITS.h" +#include "AliITSmodule.h" +#include "AliITShit.h" +#include "AliITSLoader.h" +#include "AliRunLoader.h" +#include "AliRun.h" +#include "AliITSsegmentationSDD.h" +#include "AliITSpList.h" + +ClassImp(AliITSQASDDDataMakerSim) + +//____________________________________________________________________________ +AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) : +TObject(), +fAliITSQADataMakerSim(aliITSQADataMakerSim), +fSDDhHTask(0), +fSDDhSTask(0), +fSDDhDTask(0), +fGenOffsetH(0), +fGenOffsetS(0), +fGenOffsetD(0) +{ + //ctor used to discriminate OnLine-Offline analysis + fGenOffsetH= new Int_t[AliRecoParam::kNSpecies]; + fGenOffsetS= new Int_t[AliRecoParam::kNSpecies]; + fGenOffsetD= new Int_t[AliRecoParam::kNSpecies]; + for(Int_t i=0; iSetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; + fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle()); + +} + +//__________________________________________________________________ +AliITSQASDDDataMakerSim& AliITSQASDDDataMakerSim::operator = (const AliITSQASDDDataMakerSim& qac ) +{ + // Equal operator. + this->~AliITSQASDDDataMakerSim(); + new(this) AliITSQASDDDataMakerSim(qac); + return *this; +} + +//____________________________________________________________________________ +void AliITSQASDDDataMakerSim::StartOfDetectorCycle() +{ + //Detector specific actions at start of cycle + AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SDD Cycle\n"); +} + +//____________________________________________________________________________ +void AliITSQASDDDataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t /*task*/, TObjArray** /*list*/) +{ + // launch the QA checking + // + AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n"); + //AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list); +} + +//____________________________________________________________________________ +Int_t AliITSQASDDDataMakerSim::InitDigits() +{ + // Initialization for DIGIT data - SDD - + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + Int_t rv = 0 ; + //fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList[AliRecoParam::kDefault])->GetEntries(); + //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List + TH1F* h0=new TH1F("SDD DIGITS Module Pattern","SDD DIGITS Module Pattern",260,239.5,499.5); //hmod + h0->GetXaxis()->SetTitle("SDD Module Number"); + h0->GetYaxis()->SetTitle("# DIGITS"); + rv = fAliITSQADataMakerSim->Add2DigitsList(h0,fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhDTask ++; + TH1F* h1=new TH1F("SDD Anode Distribution","SDD DIGITS Anode Distribution",512,-0.5,511.5); //hanocc + h1->GetXaxis()->SetTitle("Anode Number"); + h1->GetYaxis()->SetTitle("# DIGITS"); + rv = fAliITSQADataMakerSim->Add2DigitsList(h1,1+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhDTask ++; + TH1F* h2=new TH1F("SDD Tbin Distribution","SDD DIGITS Tbin Distribution",256,-0.5,255.5); //htbocc + h2->GetXaxis()->SetTitle("Tbin Number"); + h2->GetYaxis()->SetTitle("# DIGITS"); + rv = fAliITSQADataMakerSim->Add2DigitsList(h2,2+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhDTask ++; + TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDD DIGITS ADC Counts Distribution",200,0.,1024.); //hsig + h3->GetXaxis()->SetTitle("ADC Value"); + h3->GetYaxis()->SetTitle("# DIGITS"); + rv = fAliITSQADataMakerSim->Add2DigitsList(h3,3+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhDTask ++; + AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Digits histograms booked\n",fSDDhDTask)); + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASDDDataMakerSim::MakeDigits(TTree * digits) +{ + + // Fill QA for DIGIT - SDD - + Int_t rv = 0 ; + + AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + fITS->SetTreeAddress(); + TClonesArray *iITSdigits = fITS->DigitsAddress(1); + for(Int_t i=0; i<260; i++){ + Int_t nmod=i+240; + digits->GetEvent(nmod); + Int_t ndigits = iITSdigits->GetEntries(); + fAliITSQADataMakerSim->FillDigitsData(fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],nmod,ndigits); + for (Int_t idig=0; idigUncheckedAt(idig); + Int_t iz=dig->GetCoord1(); // cell number z + Int_t ix=dig->GetCoord2(); // cell number x + Int_t sig=dig->GetSignal(); + fAliITSQADataMakerSim->FillDigitsData(1+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],iz); + fAliITSQADataMakerSim->FillDigitsData(2+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],ix); + fAliITSQADataMakerSim->FillDigitsData(3+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()],sig); + } + } + // + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASDDDataMakerSim::InitSDigits() +{ + // Initialization for SDIGIT data - SDD - + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + Int_t rv = 0 ; + //fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList[AliRecoParam::kDefault])->GetEntries(); + //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List + TH1F* h0=new TH1F("SDD SDIGITS Module Pattern","SDIGITS SDD Module Pattern",260,239.5,499.5); //hmod + h0->GetXaxis()->SetTitle("SDD Module Number"); + h0->GetYaxis()->SetTitle("# SDIGITS"); + rv = fAliITSQADataMakerSim->Add2SDigitsList(h0,fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhSTask ++; + TH1F* h1=new TH1F("SDD Anode Distribution","SDIGITS SDD Anode Distribution",512,-0.5,511.5); //hanocc + h1->GetXaxis()->SetTitle("Anode Number"); + h1->GetYaxis()->SetTitle("# SDIGITS"); + rv = fAliITSQADataMakerSim->Add2SDigitsList(h1,1+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhSTask ++; + TH1F* h2=new TH1F("SDD Tbin Distribution","SDIGITS SDD Tbin Distribution",256,-0.5,255.5); //htbocc + h2->GetXaxis()->SetTitle("Tbin Number"); + h2->GetYaxis()->SetTitle("# SDIGITS"); + rv = fAliITSQADataMakerSim->Add2SDigitsList(h2,2+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()]); + fSDDhSTask ++; + TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDIGITS SDD ADC Counts Distribution",200,0.,1024.); //hsig + h3->GetXaxis()->SetTitle("ADC Value"); + h3->GetYaxis()->SetTitle("# SDIGITS"); + rv = fAliITSQADataMakerSim->Add2SDigitsList(h3,3+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhSTask ++; + + AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD SDigits histograms booked\n",fSDDhSTask)); + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASDDDataMakerSim::MakeSDigits(TTree * sdigits) +{ + // Fill QA for SDIGIT - SDD - + Int_t rv = 0 ; + + AliITSsegmentationSDD* seg = new AliITSsegmentationSDD(); + Int_t nan=seg->Npz(); + Int_t ntb=seg->Npx(); + Int_t scaleSize=4; + AliITSpList* list=new AliITSpList(nan,ntb*scaleSize); + + //AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + //fITS->SetTreeAddress(); + //TClonesArray *ITSdigits = fITS->DigitsAddress(1); + //TFile *sper = new TFile("sper.root","CREATE"); //agginto a mano x prova + //digits->Write(); + //sper->Close(); + + + TBranch *brchSDigits = sdigits->GetBranch("ITS"); + static TClonesArray * sdig ; + if (! sdig ) + sdig = new TClonesArray( "AliITSpListItem",1000 ); + for(Int_t id=0; id<260; id++){ + Int_t nmod=id+240; + brchSDigits->SetAddress( &sdig ); + brchSDigits->GetEvent(nmod); + Int_t nsdig=sdig->GetEntries(); + fAliITSQADataMakerSim->FillSDigitsData(fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],nmod,nsdig); + for(Int_t i=0;iAt(i); + Float_t sig=cell->GetSignal(); + Int_t idx=cell->GetIndex(); + Int_t ia,it; + list->GetCell(idx,ia,it); + fAliITSQADataMakerSim->FillSDigitsData(1+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],ia); + fAliITSQADataMakerSim->FillSDigitsData(2+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],it); + fAliITSQADataMakerSim->FillSDigitsData(3+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()],sig); + } + sdig->Clear(); + } + // + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASDDDataMakerSim::InitHits() +{ + + // Initialization for HITS data - SDD - + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + Int_t rv = 0 ; + + //fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList[AliRecoParam::kDefault])->GetEntries(); + //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List + //printf("AliITSQASDDDataMakerSim::InitHits called \n"); + TH1F *h0=new TH1F("SDD HITS Module Pattern","SDD HITS Module Pattern",260,239.5,499.5); + h0->GetXaxis()->SetTitle("SDD Module Number"); + h0->GetYaxis()->SetTitle("# HITS"); + rv = fAliITSQADataMakerSim->Add2HitsList(h0,fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhHTask ++; + TH1F *h1=new TH1F("SDD HIT lenght along local Y Coord","SDD HIT lenght along local Y Coord",200,0.,350.); + h1->GetXaxis()->SetTitle("HIT lenght (um)"); + h1->GetYaxis()->SetTitle("# HITS"); + rv = fAliITSQADataMakerSim->Add2HitsList(h1,1+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhHTask ++; + TH1F *h2=new TH1F("SDD HIT lenght along local Y Coord - Zoom","SDD HIT lenght along local Y Coord - Zoom",200,250.,350.); + h2->GetXaxis()->SetTitle("HIT lenght (um)"); + h2->GetYaxis()->SetTitle("# HITS"); + rv = fAliITSQADataMakerSim->Add2HitsList(h2,2+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhHTask ++; + TH1F *h3=new TH1F("SDD Deposited Energy Distribution (loc Y > 200um)","SDD HITS Deposited Energy Distribution (loc Y > 200um)",200,0.,350.); + h3->GetXaxis()->SetTitle("ADC counts "); + h3->GetYaxis()->SetTitle("# HITS"); + rv = fAliITSQADataMakerSim->Add2HitsList(h3,3+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image); + fSDDhHTask ++; + AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Hits histograms booked\n",fSDDhHTask)); + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASDDDataMakerSim::MakeHits(TTree * hits) +{ + // Fill QA for HITS - SDD - + Int_t rv = 0 ; + + AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + fITS->SetTreeAddress(); + Int_t nmodules; + if(!(fITS->InitModules(-1,nmodules))){ + AliError("ITS geometry not available - nothing done"); + return rv; + } + + fITS->FillModules(hits,0); + + for(Int_t i=0; i<260; i++){ + Int_t nmod=i+240; + AliITSmodule *modu = fITS->GetModule(nmod); + TObjArray *arrHits = modu->GetHits(); + Int_t nhits = arrHits->GetEntriesFast(); + ////printf("--w--AliITSQASDDDataMakerSim::MakeHits nhits = %d\n",nhits); + for (Int_t iHit=0;iHitAt(iHit); + fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],nmod); + Double_t xl,yl,zl,xl0,yl0,zl0; + Double_t tof,tof0; + hit->GetPositionL(xl,yl,zl,tof); + hit->GetPositionL0(xl0,yl0,zl0,tof0); + Float_t dyloc=TMath::Abs(yl-yl0)*10000.; + fAliITSQADataMakerSim->FillHitsData(1+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],dyloc); + Float_t edep=hit->GetIonization()*1000000; + if(dyloc>200.){ + fAliITSQADataMakerSim->FillHitsData(2+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],edep); + fAliITSQADataMakerSim->FillHitsData(3+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()],dyloc); + } + } + } + // + return rv ; +} + +//_______________________________________________________________ + +Int_t AliITSQASDDDataMakerSim::GetOffset(AliQAv1::TASKINDEX_t task, Int_t specie){ + // Returns histogram offset according to the specified task + Int_t offset=0; + if( task == AliQAv1::kHITS){ + offset=fGenOffsetH[specie]; + } + else if( task == AliQAv1::kSDIGITS) { + offset=fGenOffsetS[specie]; + } + else if( task == AliQAv1::kDIGITS) { + offset=fGenOffsetD[specie]; + } + else { + AliInfo("No task has been selected. TaskHisto set to zero.\n"); + } + + return offset; +} + +//____________________________________________________________________________ +void AliITSQASDDDataMakerSim::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset,Int_t specie ){ + // Returns histogram offset according to the specified task + if( task == AliQAv1::kHITS){ + fGenOffsetH[specie] = offset; + } + else if( task == AliQAv1::kSDIGITS) { + fGenOffsetS[specie] = offset; + } + else if( task == AliQAv1::kDIGITS) { + fGenOffsetD[specie] = offset; + } + else { + AliInfo("No task has been selected. TaskHisto set to zero.\n"); + } +} + +//_______________________________________________________________ + +Int_t AliITSQASDDDataMakerSim::GetTaskHisto(AliQAv1::TASKINDEX_t task) { + // Returns the number of booked histograms for the selected task + Int_t histotot=0; + if( task == AliQAv1::kHITS) { + histotot=fSDDhHTask ; + } + else if( task == AliQAv1::kSDIGITS) { + histotot=fSDDhSTask; + } + else if( task == AliQAv1::kDIGITS) { + histotot=fSDDhDTask ; + } + else { + AliInfo("No task has been selected. TaskHisto set to zero.\n"); + } + return histotot; + +} diff --git a/ITS/AliITSQASDDDataMakerSim.h b/ITS/AliITSQASDDDataMakerSim.h index eed06ceeac9..8b08245eafb 100644 --- a/ITS/AliITSQASDDDataMakerSim.h +++ b/ITS/AliITSQASDDDataMakerSim.h @@ -1,62 +1,62 @@ -#ifndef ALIITSQASDDDATAMAKERSIM_H -#define ALIITSQASDDDATAMAKERSIM_H -/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - - -// -// Checks the quality assurance. -// By comparing with reference data -// contained in a DB -// -// -// W. Ferrarese + P. Cerello Feb 2008 - -/* $Id$ */ - -#include "AliQAv1.h" -class AliITSQADataMakerSim; -class AliRunLoader; -class AliRun; -class TObjArray; -class TClonesArray; - -class AliITSQASDDDataMakerSim : public TObject { - -public: - AliITSQASDDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim); //ctor - AliITSQASDDDataMakerSim(const AliITSQASDDDataMakerSim& qadm); - AliITSQASDDDataMakerSim& operator = (const AliITSQASDDDataMakerSim& qac); - - virtual void StartOfDetectorCycle(); - virtual void EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list); - virtual ~AliITSQASDDDataMakerSim() {;} // dtor - virtual Int_t InitDigits(); - virtual Int_t InitSDigits(); - virtual Int_t InitHits(); - virtual Int_t MakeDigits(){return 0;} - virtual Int_t MakeSDigits(){return 0;} - virtual Int_t MakeHits(){return 0;} - virtual Int_t MakeDigits(TTree * digits); - virtual Int_t MakeSDigits(TTree * sdigits); - virtual Int_t MakeHits(TTree * hits); - Int_t GetOffset(AliQAv1::TASKINDEX_t task, Int_t specie = 0); - void SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset,Int_t specie = 0); - Int_t GetTaskHisto(AliQAv1::TASKINDEX_t task); - -private: - - AliITSQADataMakerSim *fAliITSQADataMakerSim;//pointer to the main ctor - Int_t fSDDhHTask; //number of booked SDD histograms for each task; - Int_t fSDDhSTask; //number of booked SDD histograms for each task; - Int_t fSDDhDTask; //number of booked SDD histograms for each task; - Int_t *fGenOffsetH; // qachecking offset - Int_t *fGenOffsetS; // qachecking offset - Int_t *fGenOffsetD; // qachecking offset - ClassDef(AliITSQASDDDataMakerSim,4) // description - -}; - -#endif - - +#ifndef ALIITSQASDDDATAMAKERSIM_H +#define ALIITSQASDDDATAMAKERSIM_H +/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + + +// +// Checks the quality assurance. +// By comparing with reference data +// contained in a DB +// +// +// W. Ferrarese + P. Cerello Feb 2008 + +/* $Id$ */ + +#include "AliQAv1.h" +class AliITSQADataMakerSim; +class AliRunLoader; +class AliRun; +class TObjArray; +class TClonesArray; + +class AliITSQASDDDataMakerSim : public TObject { + +public: + AliITSQASDDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim); //ctor + AliITSQASDDDataMakerSim(const AliITSQASDDDataMakerSim& qadm); + AliITSQASDDDataMakerSim& operator = (const AliITSQASDDDataMakerSim& qac); + + virtual void StartOfDetectorCycle(); + virtual void EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list); + virtual ~AliITSQASDDDataMakerSim() {;} // dtor + virtual Int_t InitDigits(); + virtual Int_t InitSDigits(); + virtual Int_t InitHits(); + virtual Int_t MakeDigits(){return 0;} + virtual Int_t MakeSDigits(){return 0;} + virtual Int_t MakeHits(){return 0;} + virtual Int_t MakeDigits(TTree * digits); + virtual Int_t MakeSDigits(TTree * sdigits); + virtual Int_t MakeHits(TTree * hits); + Int_t GetOffset(AliQAv1::TASKINDEX_t task, Int_t specie = 0); + void SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset,Int_t specie = 0); + Int_t GetTaskHisto(AliQAv1::TASKINDEX_t task); + +private: + + AliITSQADataMakerSim *fAliITSQADataMakerSim;//pointer to the main ctor + Int_t fSDDhHTask; //number of booked SDD histograms for each task; + Int_t fSDDhSTask; //number of booked SDD histograms for each task; + Int_t fSDDhDTask; //number of booked SDD histograms for each task; + Int_t *fGenOffsetH; // qachecking offset + Int_t *fGenOffsetS; // qachecking offset + Int_t *fGenOffsetD; // qachecking offset + ClassDef(AliITSQASDDDataMakerSim,4) // description + +}; + +#endif + + diff --git a/ITS/AliITSQASSDDataMakerRec.cxx b/ITS/AliITSQASSDDataMakerRec.cxx index aed7ec9cd73..01b9320e168 100644 --- a/ITS/AliITSQASSDDataMakerRec.cxx +++ b/ITS/AliITSQASSDDataMakerRec.cxx @@ -1,1718 +1,1718 @@ -/************************************************************************** - * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -/* $Id$ */ -// ************************************************************* -// Checks the quality assurance -// by comparing with reference data -// contained in a DB -// ------------------------------------------------------------- -// W. Ferrarese + P. Cerello Feb 2008 -// INFN Torino - -// --- ROOT system --- -#include -#include -#include -#include -#include - -// --- Standard library --- - -// --- AliRoot header files --- -#include "AliITSQADataMakerRec.h" -#include "AliITSQASSDDataMakerRec.h" -#include "AliQADataMakerRec.h" -#include "AliLog.h" -#include "AliQAv1.h" -#include "AliQAChecker.h" -#include "AliRawReader.h" -#include "AliRawReaderRoot.h" -#include "AliITSRawStreamSSD.h" -#include "AliITSgeomTGeo.h" -#include "AliRawEventHeaderBase.h" -#include "AliITSRecPoint.h" -#include "AliITSRecPointContainer.h" -#include "AliITSdigitSSD.h" -#include "AliITSBadChannelsSSDv2.h" - -#include "AliCDBManager.h" -#include "AliCDBEntry.h" - -ClassImp(AliITSQASSDDataMakerRec) - -AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode, Int_t ldc) : -TObject(), - fAliITSQADataMakerRec(aliITSQADataMakerRec), - fkOnline(kMode), - fLDC(ldc), - fSSDRawsOffset(0), fSSDRawsDAOffset(0), - fSSDRawsCommonLevelOffset(0), - fSSDhRawsTask(0), - fSSDhDigitsTask(0), - fSSDhRecPointsTask(0), - fGenRawsOffset(0), - fGenDigitsOffset(0), - fGenRecPointsOffset(0), - fCDBManager(0) { - // Default constructor - //initilize the raw signal vs strip number histograms - fGenRawsOffset = new Int_t[AliRecoParam::kNSpecies]; - fGenRecPointsOffset = new Int_t[AliRecoParam::kNSpecies]; - fGenDigitsOffset = new Int_t[AliRecoParam::kNSpecies]; - for(Int_t i=0; iSetDefaultStorage("local://$ALICE_ROOT/OCDB"); - fCDBManager->SetDefaultStorage(gSystem->Getenv("AMORE_CDB_URI")); - - Int_t runNumber = 1; - if(!gSystem->Getenv("DATE_RUN_NUMBER")) { - AliWarning("DATE_RUN_NUMBER not defined!!!\n"); } - else { - runNumber = atoi(gSystem->Getenv("DATE_RUN_NUMBER"));} - fCDBManager->SetRun(runNumber); - AliCDBEntry *geomGRP = fCDBManager->Get("GRP/Geometry/Data"); - if(!geomGRP) AliWarning("GRP geometry not found!!!\n"); - - Int_t gLayer = 0,gLadder = 0, gModule = 0; - Int_t gHistCounterRawSignal = 0, gHistCounterCM = 0; - TString gTitle; - - for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) { - AliITSgeomTGeo::GetModuleId(iModule,gLayer,gLadder,gModule); - gTitle = "SSD_RawSignal_Layer"; gTitle += gLayer; - gTitle += "_Ladder"; gTitle += gLadder; - gTitle += "_Module"; gTitle += gModule; - fHistSSDRawSignalModule[gHistCounterRawSignal] = new TH1F(gTitle.Data(),gTitle.Data(), - 2*fgkNumberOfPSideStrips,0,2*fgkNumberOfPSideStrips); - gHistCounterRawSignal += 1; - - for(Int_t iStrip = 0; iStrip < 2*fgkNumberOfPSideStrips; iStrip++) - fOccupancyMatrix[iModule-500][iStrip] = 0; - - //CM histograms - gTitle = "SSD_CM_PSide_Layer"; gTitle += gLayer; - gTitle += "_Ladder"; gTitle += gLadder; - gTitle += "_Module"; gTitle += gModule; - fHistSSDCMModule[gHistCounterCM] = new TH1F(gTitle.Data(),gTitle.Data(), - 100,-50.,50.); - fHistSSDCMModule[gHistCounterCM]->GetXaxis()->SetTitle("CM"); - gHistCounterCM += 1; - }//module loop - - for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) { - AliITSgeomTGeo::GetModuleId(iModule,gLayer,gLadder,gModule); - gTitle = "SSD_CM_NSide_Layer"; gTitle += gLayer; - gTitle += "_Ladder"; gTitle += gLadder; - gTitle += "_Module"; gTitle += gModule; - fHistSSDCMModule[gHistCounterCM] = new TH1F(gTitle.Data(),gTitle.Data(), - 100,-50.,50.); - fHistSSDCMModule[gHistCounterCM]->GetXaxis()->SetTitle("CM"); - gHistCounterCM += 1; - - } - }//online flag - else { - fCDBManager = NULL; - for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { - fHistSSDCMModule[iModule] = NULL; - fHistSSDCMModule[fgkSSDMODULES+iModule] = NULL; - fHistSSDRawSignalModule[iModule] = NULL; - } - } -} -/* -//____________________________________________________________________________ -AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(const AliITSQASSDDataMakerRec& qadm) : -TObject(), -fAliITSQADataMakerRec(qadm.fAliITSQADataMakerRec), -fkOnline(qadm.fkOnline), -fLDC(qadm.fLDC), -fSSDRawsOffset(qadm.fSSDRawsOffset), fSSDRawsDAOffset(qadm.fSSDRawsDAOffset), -fSSDRawsCommonLevelOffset(qadm.fSSDRawsCommonLevelOffset), -fSSDhRawsTask(qadm.fSSDhRawsTask), -fSSDhDigitsTask(qadm.fSSDhDigitsTask), -fSSDhRecPointsTask(qadm.fSSDhRecPointsTask), -fGenRawsOffset(qadm.fGenRawsOffset), -fGenDigitsOffset(qadm.fGenDigitsOffset), -fGenRecPointsOffset(qadm.fGenRecPointsOffset), -fCDBManager(qadm.fCDBManager) { -//copy ctor -fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ; -fAliITSQADataMakerRec->SetTitle((const char*)qadm.fAliITSQADataMakerRec->GetTitle()); -} - -//__________________________________________________________________ -AliITSQASSDDataMakerRec& AliITSQASSDDataMakerRec::operator = (const AliITSQASSDDataMakerRec& qac ) -{ -// Equal operator. -this->~AliITSQASSDDataMakerRec(); -new(this) AliITSQASSDDataMakerRec(qac); -return *this; -} -*/ -//__________________________________________________________________ -AliITSQASSDDataMakerRec::~AliITSQASSDDataMakerRec() { - // destructor - if(fkOnline) { - for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { - if(fHistSSDRawSignalModule[iModule]) delete fHistSSDRawSignalModule[iModule]; - if(fHistSSDCMModule[iModule]) delete fHistSSDCMModule[iModule]; - if(fHistSSDCMModule[fgkSSDMODULES+iModule]) delete fHistSSDCMModule[fgkSSDMODULES+iModule]; - } - - if(fCDBManager) delete fCDBManager; - } -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerRec::StartOfDetectorCycle() -{ - // start of detector cycle - - if(fAliITSQADataMakerRec->ListExists(AliQAv1::kRAWS)==kFALSE)return; - - //if ( fAliITSQADataMakerRec->GetRawsData(0) == NULL ) // Raws not defined - //return ; - - //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; - //cout << "StartOfDetectorCycle: Event specie " << specie << " is set" << endl; - - //Detector specific actions at start of cycle - AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SSD Cycle\n"); - //Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); - - //}//event specie loop - -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerRec::ResetRawsMonitoredObjects() -{ - //Resetting the raw data monitored objects - //Data size per DDL - //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; - /*((TH1F *)(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+4))); - //Data size per LDC - ((TH1F *)(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+22)));*/ - Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); - //cout << "(AliITSQASSDDataMakerRec::ResetRawsMonitoredObjects): Event specie " << specie << " is set" << endl; - //online part - if(fkOnline) { - for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) { - for(Int_t iStrip = 0; iStrip < 2*fgkNumberOfPSideStrips; iStrip++) - fOccupancyMatrix[iModule-500][iStrip] = 0; - }//module loop - - //for(Int_t iSSDOffset = 0; iSSDOffset < fSSDRawsCommonLevelOffset; iSSDOffset++) - //(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+iSSDOffset)); - //for(Int_t iSSDOffset = fSSDRawsCommonLevelOffset; iSSDOffset < fSSDRawsOffset; iSSDOffset++) - //(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+iSSDOffset)); - - Int_t gHistPositionOccupancyPerLadder = 0; - Int_t gLayer = 0, gLadder = 0, gModule = 0; - for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { - AliITSgeomTGeo::GetModuleId(iModule+500,gLayer,gLadder,gModule); - - gHistPositionOccupancyPerLadder = (gLayer == 5) ? 2*(gLadder - 1) : 2*(gLadder - 1 + fgkSSDLADDERSLAYER5); - - //P-SIDE OCCUPANCY - int offs = fGenRawsOffset[specie]+fSSDRawsCommonLevelOffset+fgkSSDMODULES; - fAliITSQADataMakerRec->ResetRawsData(offs+gHistPositionOccupancyPerLadder); - //N-SIDE OCCUPANCY - fAliITSQADataMakerRec->ResetRawsData(offs+gHistPositionOccupancyPerLadder+1); - // - fAliITSQADataMakerRec->ResetRawsData(offs+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6); - fAliITSQADataMakerRec->ResetRawsData(offs+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1); - }//module loop - }//online flag - // -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** /*list*/) -{ - // finalize ssd cycle - // - Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); - //cout << "(AliITSQASSDDataMakerRec::EndOfDetectorCycle): Event specie " << specie << " is set" << endl; - - // launch the QA checking - AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n"); - AliDebug(AliQAv1::GetQADebugLevel(), Form("Offset: %d\n",fGenRawsOffset[specie])); - //Printf("Offset: %d\n",fGenRawsOffset[specie]); - - if(task == AliQAv1::kRAWS) { - // - for (int trCl=-1;trClGetNTrigClasses();trCl++) { // RS Loop over all trigger classes (+ global counter, -1) - // - TObjArray &harr = *fAliITSQADataMakerRec->GetRawsDataOfTrigClass(trCl); - int offs = fGenRawsOffset[specie]; - int nSSDEventPerCycle = fAliITSQADataMakerRec->GetEvCountCycleRaws(trCl); - // - //Data size per DDL - for(Int_t i = 0; i < fgkNumOfDDLs; i++) { - if (!(harr[offs+5+i] && harr[offs+4+i])) continue; - Double_t gSizePerDDL = ((TH1*)harr[offs+5+i])->GetMean(); - //cout<<"DDL: "<GetEntries()<SetBinContent(i+1,gSizePerDDL); - //cout<<"After filling DDL: "<GetBinContent(i+1)<GetMean(); - ((TH1*)harr[offs+22])->SetBinContent(i+1,gSizePerLDC); - //cout<<"LDC: "<GetMean()<GetEntries()<< " mean: " << ((TH1*)harr[offs+4])->GetMean()<GetEntries()<< " mean: " << ((TH1*)harr[offs+22])->GetMean()<GetXaxis()->GetNbins(); iBins++) htmp->SetBinContent(iBins,fOccupancyMatrix[iModule][iBins-1]); - if(nSSDEventPerCycle != 0) htmp->Scale(100./nSSDEventPerCycle); - }//module loop - } - // - //occupancy per ladder - Int_t gHistPositionOccupancyPerLadder = 0; - Int_t lLadderLocationY = 0; - Double_t occupancy = 0.0, occupancyThreshold = 0.0, occupancyAverage = 0.0; - for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { - AliITSgeomTGeo::GetModuleId(iModule+500,gLayer,gLadder,gModule); - // - gHistPositionOccupancyPerModule = (gLayer == 5) ? ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + gModule - 1) : ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + gModule + fgkSSDMODULESLAYER5 - 1); - gHistPositionOccupancyPerLadder = (gLayer == 5) ? 2*(gLadder - 1) : 2*(gLadder - 1 + fgkSSDLADDERSLAYER5); - // - TH1* htmpo = (TH1*)harr[offs+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule]; - TH1* h1t = 0; - TH2* h2t = 0; - if (htmpo) { - //P-SIDE OCCUPANCY - occupancy = GetOccupancyModule(htmpo,0,0,0); - occupancyThreshold = GetOccupancyModule(htmpo,0,1,3); - occupancyAverage = GetOccupancyModule(htmpo,0,2,0); - if ( (h1t=(TH1*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder]) ) h1t->SetBinContent(gModule,occupancy); - lLadderLocationY = 3*gLadder; // sideP=1 sideN=0 - if(gLayer == 5) { - //occupancy per module - no threshold - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancy); - //occupancy per module - threshold @ 3% - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+2]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyThreshold); - //average occupancy per module - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+4]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyAverage); - } - else if(gLayer == 6) { - //occupancy per module - no threshold - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancy); - //occupancy per module - threshold @ 3% - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyThreshold); - //average occupancy per module - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+5]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyAverage); - } - // - //N-SIDE OCCUPANCY - // - occupancy = GetOccupancyModule(htmpo,1,0,0); - occupancyThreshold = GetOccupancyModule(htmpo,1,1,3); - occupancyAverage = GetOccupancyModule(htmpo,1,2,0); - if ( (h1t=(TH1*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder+1]) ) h1t->SetBinContent(gModule,occupancy); - if(gLayer == 5) { - //occupancy per module - no threshold - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancy); - //occupancy per module - threshold @ 3% - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+2]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyThreshold); - //average occupancy per module - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+4]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyAverage); - } - else if(gLayer == 6) { - //occupancy per module - no threshold - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancy); - //occupancy per module - threshold @ 3% - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyThreshold); - //average occupancy per module - if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+5]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyAverage); - } - } // htmpo - }//module loop - }//online flag for SSD - // - //TH2* h2tmp = (TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6]; - //if (h2tmp) AliInfo(Form("Entries 2d occupancy no thres- lay 5: %d"),h2tmp->GetEntries()); - //h2tmp = (TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3]; - //cout<<"entries 2d occupancy thres- lay 6: "<GetEntries()<< " mean: " << h2tmp->GetMean() << endl; //Somehow the other occupancy maps do give nonzero values for GetMean() here - // - // TH1* h1tmp = (TH1*)harr[fGenRawsOffset[1]+4]; - // if (h1tmp) cout<<"Data size/ DDL entries: "<GetEntries()<< " mean: " << h1tmp->GetMean()<Run( AliQAv1::kITS , task, list); - // - ResetRawsMonitoredObjects(); - }//raw data end of cycle - // - - // -} - -//____________________________________________________________________________ -Int_t AliITSQASSDDataMakerRec::InitRaws() { - // Initialization for RAW data - SSD - - const Bool_t expert = kTRUE ; - const Bool_t saveCorr = kTRUE ; - const Bool_t image = kTRUE ; - Int_t rv = 0 ; - fSSDRawsOffset = 0; - - //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; - Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); - //cout << "(AliITSQASSDDataMakerRec::InitRaws): Event specie " << specie << " is set" << endl; - //cout << "(AliITSQASSDDataMakerRec::InitRaws): Offset " << offsRw << endl; - int offsRw = fGenRawsOffset[specie]; - - - if(fkOnline) { - AliDebug(AliQAv1::GetQADebugLevel(), "Book Online Histograms for SSD\n"); - } - else { - AliDebug(AliQAv1::GetQADebugLevel(), "Book Offline Histograms for SSD\n "); - } - AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD): %d\n",offsRw)); - - TString gTitle; - TString gName; - //book online-offline QA histos - TH1F *fHistSSDEventType = new TH1F("fHistSSDEventType", - "SSD Event Type;Event type;Events", - 31,-1,30); - fHistSSDEventType->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDEventType, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - //cout<<"(AliITSQASSDDataMakerRec::InitRaws): "<GetRawsData(offsRw))->GetName()<Add2RawsList(fHistSSDDataSize, - offsRw+fSSDRawsOffset, !expert, image, !saveCorr); - fSSDRawsOffset += 1; - TH1F *fHistSSDDataSizePercentage = new TH1F("fHistSSDDataSizePercentage", - "SSD Data Size Percentage;SSD data size [%];Events", - 1000,0,100); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePercentage, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - TH1F *fHistSSDDDLId = new TH1F("fHistSSDDDLId", - "SSD DDL Id;DDL id;Events",16,511.5,527.5); - fHistSSDDDLId->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDDLId, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - TH1F *fHistSSDDataSizePerDDL = new TH1F("fHistSSDDataSizePerDDL", - "SSD Data Size Per DDL;DDL id; [KB]", - 16,511.5,527.5); - fHistSSDDataSizePerDDL->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePerDDL, - offsRw+fSSDRawsOffset, !expert, image, !saveCorr); - - fSSDRawsOffset += 1; - TH1F *fHistSSDDataSizeDDL[fgkNumOfDDLs]; - for(Int_t i = 1; i < fgkNumOfDDLs+1; i++) { - gName = Form("fHistSSDDataSizeDDL%d", i+511) ; - gTitle = Form("SSD Data Size DDL %d", i+511) ; - fHistSSDDataSizeDDL[i-1] = new TH1F(gName.Data(), - Form("%s;(SSD data size) [KB];Events", gTitle.Data()), - 100,0,50); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizeDDL[i-1], - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - } - - TH1F *fHistSSDLDCId = new TH1F("fHistSSDLDCId","SSD LDC Id;LDC id;Events",8,169.5,177.5); - fHistSSDLDCId->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDLDCId, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - TH1F *fHistSSDDataSizePerLDC = new TH1F("fHistSSDDataSizePerLDC", - "SSD Data Size Per LDC;LDC id; [KB]", - 8,169.5,177.5); - fHistSSDDataSizePerLDC->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePerLDC, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); fSSDRawsOffset += 1; - TH1F *fHistSSDDataSizeLDC[fgkNumOfLDCs]; - for(Int_t i = 1; i < fgkNumOfLDCs+1; i++) { - gName = "fHistSSDDataSizeLDC"; - if(i == 1) gName += "170"; - if(i == 2) gName += "171"; - if(i == 3) gName += "172"; - if(i == 4) gName += "173"; - if(i == 5) gName += "174"; - if(i == 6) gName += "175"; - if(i == 7) gName += "176"; - if(i == 8) gName += "177"; - - gTitle = "SSD Data Size LDC "; gTitle += gName.Data(); - fHistSSDDataSizeLDC[i-1] = new TH1F(gName.Data(), - Form("%s;SSD data size [KB];Events", gTitle.Data()), - 1000,0,100); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizeLDC[i-1], - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - } - fSSDRawsCommonLevelOffset = fSSDRawsOffset; - - if(fkOnline) { - Int_t gLayer = 0, gLadder = 0, gModule = 0; - //occupancy per SSD module - TH1F *fHistSSDOccupancyModule[fgkSSDMODULES]; - for(Int_t i = 500; i < fgkSSDMODULES + 500; i++) { - AliITSgeomTGeo::GetModuleId(i,gLayer,gLadder,gModule); - gName = "fHistSSD_Occupancy_Layer"; - gTitle = "SSD Occupancy Layer"; - if(gLayer == 5) { - gName += gLayer; gName += "_Ladder"; - gName += 499+gLadder; - gTitle += gLayer; gTitle += "_Ladder"; - gTitle += 499+gLadder; - } - if(gLayer == 6) { - gName += gLayer; gName += "_Ladder"; - gName += 599+gLadder; - gTitle += gLayer; gTitle += "_Ladder"; - gTitle += 599+gLadder; - } - gName += "_Module"; gName += gModule; - gTitle += "_Module"; gTitle += gModule; - - fHistSSDOccupancyModule[i-500] = new TH1F(gName.Data(),Form("%s;N_{strip};Occupancy [%%]", gTitle.Data()), - 2*fgkNumberOfPSideStrips,0,2*fgkNumberOfPSideStrips); - fHistSSDOccupancyModule[i-500]->GetXaxis()->SetTitleColor(1); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyModule[i-500], - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - } - - //Occupancy per SSD ladder - Int_t occupancyCounter = 0; - TH1F *fHistSSDOccupancyLadder[2*(fgkSSDLADDERSLAYER5 + fgkSSDLADDERSLAYER6)]; - for(Int_t iLayer = 5; iLayer < 7; iLayer++) { - for(Int_t iLadder = 1; iLadder < AliITSgeomTGeo::GetNLadders(iLayer) + 1; iLadder++) { - //P-side occupancy plots - gName = "fHistSSD_Occupancy_Layer"; - gTitle = "SSD Occupancy Layer"; - if(iLayer == 5) { - gName += iLayer; gName += "_Ladder"; - gName += 499+iLadder; - gTitle += iLayer; gTitle += "_Ladder"; - gTitle += 499+iLadder; - } - if(iLayer == 6) { - gName += iLayer; gName += "_Ladder"; - gName += 599+iLadder; - gTitle += iLayer; gTitle += "_Ladder"; - gTitle += 599+iLadder; - } - gName += "_PSide"; - gTitle += "_PSide"; - fHistSSDOccupancyLadder[occupancyCounter] = new TH1F(gName.Data(), - Form("%s;Module number;Occupancy [%%]", gTitle.Data()), - AliITSgeomTGeo::GetNDetectors(iLayer), - 0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5); - fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitleColor(1); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLadder[occupancyCounter], - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - occupancyCounter += 1; fSSDRawsOffset += 1; - //N-side occupancy plots - gName = "fHistSSD_Occupancy_Layer"; - gTitle = "SSD Occupancy Layer"; - if(iLayer == 5) { - gName += iLayer; gName += "_Ladder"; - gName += 499+iLadder; - gTitle += iLayer; gTitle += "_Ladder"; - gTitle += 499+iLadder; - } - if(iLayer == 6) { - gName += iLayer; gName += "_Ladder"; - gName += 599+iLadder; - gTitle += iLayer; gTitle += "_Ladder"; - gTitle += 599+iLadder; - } - gName += "_NSide"; - gTitle += "_NSide"; - fHistSSDOccupancyLadder[occupancyCounter] = new TH1F(gName.Data(), - Form("%s;Module number;Occupancy [%%]", gTitle.Data()), - AliITSgeomTGeo::GetNDetectors(iLayer), - 0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5); - fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitleColor(1); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLadder[occupancyCounter], - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - occupancyCounter += 1; fSSDRawsOffset += 1; - }//ladder loop - }//layer loop - - //top level occupancy plots - //occupancy per module - no threshold - TH2F *fHistSSDOccupancyLayer5 = new TH2F("fHistSSDOccupancyLayer5", - "SSD Occupancy (Layer 5) - No threshold;N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER5, - 0,fgkSSDMODULESPERLADDERLAYER5, - 3*fgkSSDLADDERSLAYER5, - 500,500+fgkSSDLADDERSLAYER5); - fHistSSDOccupancyLayer5->GetZaxis()->SetRangeUser(0.0,100.0); - Char_t fLabel[3]; - for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){ - snprintf(fLabel,2,"%d",iBin); - fHistSSDOccupancyLayer5->GetXaxis()->SetBinLabel(iBin,fLabel); - } - fHistSSDOccupancyLayer5->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLayer5, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - TH2F *fHistSSDOccupancyLayer6 = new TH2F("fHistSSDOccupancyLayer6", - "Occupancy per module (Layer 6) - No threshold;N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER6, - 0,fgkSSDMODULESPERLADDERLAYER6, - 3*fgkSSDLADDERSLAYER6, - 600,600+fgkSSDLADDERSLAYER6); - fHistSSDOccupancyLayer6->GetZaxis()->SetRangeUser(0.0,100.0); - for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){ - snprintf(fLabel,2,"%d",iBin); - fHistSSDOccupancyLayer6->GetXaxis()->SetBinLabel(iBin,fLabel); - } - fHistSSDOccupancyLayer6->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLayer6, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - - //occupancy per module - threshold @ 3% - TH2F *fHistSSDOccupancyThresholdLayer5 = new TH2F("fHistSSDOccupancyThresholdLayer5", - "Occupancy per module (Layer 5) - Threshold 3%;N_{modules};N_{Ladders};Entries", - fgkSSDMODULESPERLADDERLAYER5, - 0,fgkSSDMODULESPERLADDERLAYER5, - 3*fgkSSDLADDERSLAYER5, - 500,500+fgkSSDLADDERSLAYER5); - fHistSSDOccupancyThresholdLayer5->GetZaxis()->SetRangeUser(3.0,10.0); - for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){ - snprintf(fLabel,2,"%d",iBin); - fHistSSDOccupancyThresholdLayer5->GetXaxis()->SetBinLabel(iBin,fLabel); - } - fHistSSDOccupancyThresholdLayer5->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyThresholdLayer5, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - TH2F *fHistSSDOccupancyThresholdLayer6 = new TH2F("fHistSSDOccupancyThresholdLayer6", - "Occupancy per module (Layer 6) - Threshold 3%;N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER6, - 0,fgkSSDMODULESPERLADDERLAYER6, - 3*fgkSSDLADDERSLAYER6, - 600,600+fgkSSDLADDERSLAYER6); - fHistSSDOccupancyThresholdLayer6->GetZaxis()->SetRangeUser(3.0,10.0); - for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){ - snprintf(fLabel,2,"%d",iBin); - fHistSSDOccupancyThresholdLayer6->GetXaxis()->SetBinLabel(iBin,fLabel); - } - fHistSSDOccupancyThresholdLayer6->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyThresholdLayer6, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; - - //Average occupancy per module - TH2F *fHistSSDAverageOccupancyLayer5 = new TH2F("fHistSSDAverageOccupancyLayer5", - "Average occupancy per module (Layer 5);N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER5, - 0,fgkSSDMODULESPERLADDERLAYER5, - 3*fgkSSDLADDERSLAYER5, - 500,500+fgkSSDLADDERSLAYER5); - fHistSSDAverageOccupancyLayer5->GetZaxis()->SetRangeUser(0.0,5.0); - for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){ - snprintf(fLabel,2,"%d",iBin); - fHistSSDAverageOccupancyLayer5->GetXaxis()->SetBinLabel(iBin,fLabel); - } - fHistSSDAverageOccupancyLayer5->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDAverageOccupancyLayer5, - offsRw+fSSDRawsOffset, !expert, image, !saveCorr); - fSSDRawsOffset += 1; - TH2F *fHistSSDAverageOccupancyLayer6 = new TH2F("fHistSSDAverageOccupancyLayer6", - "Average occupancy per module (Layer 6);N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER6, - 0,fgkSSDMODULESPERLADDERLAYER6, - 3*fgkSSDLADDERSLAYER6, - 600,600+fgkSSDLADDERSLAYER6); - fHistSSDAverageOccupancyLayer6->GetZaxis()->SetRangeUser(0.0,5.0); - for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){ - snprintf(fLabel,2,"%d",iBin); - fHistSSDAverageOccupancyLayer6->GetXaxis()->SetBinLabel(iBin,fLabel); - } - fHistSSDAverageOccupancyLayer6->SetStats(kFALSE); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDAverageOccupancyLayer6, - offsRw+fSSDRawsOffset, !expert, image, !saveCorr); - fSSDRawsOffset += 1; - - //Output of the DA - TH2F *fHistSSDPSideBadChannelMapLayer5 = new TH2F("fHistSSDPSideBadChannelMapLayer5", - "Layer 5;N_{module};N_{ladder}", - 22,1,23, - 34,500,534); - fHistSSDPSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); - fHistSSDPSideBadChannelMapLayer5->SetStats(kFALSE); - fHistSSDPSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); - fHistSSDPSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); - fHistSSDPSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); - fHistSSDPSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); - fHistSSDPSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); - fHistSSDPSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); - fHistSSDPSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideBadChannelMapLayer5, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - - TH2F *fHistSSDNSideBadChannelMapLayer5 = new TH2F("fHistSSDNSideBadChannelMapLayer5", - "Layer 5;N_{module};N_{ladder}", - 22,1,23, - 34,500,534); - fHistSSDNSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); - fHistSSDNSideBadChannelMapLayer5->SetStats(kFALSE); - fHistSSDNSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); - fHistSSDNSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); - fHistSSDNSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); - fHistSSDNSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); - fHistSSDNSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); - fHistSSDNSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); - fHistSSDNSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideBadChannelMapLayer5, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - - TH2F *fHistSSDPSideBadChannelMapLayer6 = new TH2F("fHistSSDPSideBadChannelMapLayer6", - "Layer 6;N_{module};N_{ladder}", - 25,1,26, - 38,600,638); - fHistSSDPSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); - fHistSSDPSideBadChannelMapLayer6->SetStats(kFALSE); - fHistSSDPSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); - fHistSSDPSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); - fHistSSDPSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); - fHistSSDPSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); - fHistSSDPSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); - fHistSSDPSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); - fHistSSDPSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideBadChannelMapLayer6, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - - TH2F *fHistSSDNSideBadChannelMapLayer6 = new TH2F("fHistSSDNSideBadChannelMapLayer6", - "Layer 6;N_{module};N_{ladder}", - 25,1,26, - 38,600,638); - fHistSSDNSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); - fHistSSDNSideBadChannelMapLayer6->SetStats(kFALSE); - fHistSSDNSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); - fHistSSDNSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); - fHistSSDNSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); - fHistSSDNSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); - fHistSSDNSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); - fHistSSDNSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); - fHistSSDNSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideBadChannelMapLayer6, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - - //Common mode values - TH2F *fHistSSDPSideCommonModeMapLayer5 = new TH2F("fHistSSDPSideCommonModeMapLayer5", - "Layer 5 - CM (P-side);N_{module};N_{ladder}", - 22,1,23, - 34,500,534); - fHistSSDPSideCommonModeMapLayer5->GetXaxis()->SetTitleColor(1); - fHistSSDPSideCommonModeMapLayer5->SetStats(kFALSE); - fHistSSDPSideCommonModeMapLayer5->GetYaxis()->SetTitleOffset(1.8); - fHistSSDPSideCommonModeMapLayer5->GetXaxis()->SetNdivisions(22); - fHistSSDPSideCommonModeMapLayer5->GetYaxis()->SetNdivisions(34); - fHistSSDPSideCommonModeMapLayer5->GetXaxis()->SetLabelSize(0.03); - fHistSSDPSideCommonModeMapLayer5->GetYaxis()->SetLabelSize(0.03); - fHistSSDPSideCommonModeMapLayer5->GetZaxis()->SetTitleOffset(1.6); - fHistSSDPSideCommonModeMapLayer5->GetZaxis()->SetTitle("RMS(CM) (P-side)"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideCommonModeMapLayer5, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - - TH2F *fHistSSDNSideCommonModeMapLayer5 = new TH2F("fHistSSDNSideCommonModeMapLayer5", - "Layer 5 - CM (N-side);N_{module};N_{ladder}", - 22,1,23, - 34,500,534); - fHistSSDNSideCommonModeMapLayer5->GetXaxis()->SetTitleColor(1); - fHistSSDNSideCommonModeMapLayer5->SetStats(kFALSE); - fHistSSDNSideCommonModeMapLayer5->GetYaxis()->SetTitleOffset(1.8); - fHistSSDNSideCommonModeMapLayer5->GetXaxis()->SetNdivisions(22); - fHistSSDNSideCommonModeMapLayer5->GetYaxis()->SetNdivisions(34); - fHistSSDNSideCommonModeMapLayer5->GetXaxis()->SetLabelSize(0.03); - fHistSSDNSideCommonModeMapLayer5->GetYaxis()->SetLabelSize(0.03); - fHistSSDNSideCommonModeMapLayer5->GetZaxis()->SetTitleOffset(1.6); - fHistSSDNSideCommonModeMapLayer5->GetZaxis()->SetTitle("RMS(CM) (N-side)"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideCommonModeMapLayer5, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - - TH2F *fHistSSDPSideCommonModeMapLayer6 = new TH2F("fHistSSDPSideCommonModeMapLayer6", - "Layer 6 - CM (P-side);N_{module};N_{ladder}", - 25,1,26, - 38,600,638); - fHistSSDPSideCommonModeMapLayer6->GetXaxis()->SetTitleColor(1); - fHistSSDPSideCommonModeMapLayer6->SetStats(kFALSE); - fHistSSDPSideCommonModeMapLayer6->GetYaxis()->SetTitleOffset(1.8); - fHistSSDPSideCommonModeMapLayer6->GetXaxis()->SetNdivisions(25); - fHistSSDPSideCommonModeMapLayer6->GetYaxis()->SetNdivisions(38); - fHistSSDPSideCommonModeMapLayer6->GetXaxis()->SetLabelSize(0.03); - fHistSSDPSideCommonModeMapLayer6->GetYaxis()->SetLabelSize(0.03); - fHistSSDPSideCommonModeMapLayer6->GetZaxis()->SetTitleOffset(1.6); - fHistSSDPSideCommonModeMapLayer6->GetZaxis()->SetTitle("RMS(CM) (P-side)"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideCommonModeMapLayer6, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - - TH2F *fHistSSDNSideCommonModeMapLayer6 = new TH2F("fHistSSDNSideCommonModeMapLayer6", - "Layer 6 - CM (N-side);N_{module};N_{ladder}", - 25,1,26, - 38,600,638); - fHistSSDNSideCommonModeMapLayer6->GetXaxis()->SetTitleColor(1); - fHistSSDNSideCommonModeMapLayer6->SetStats(kFALSE); - fHistSSDNSideCommonModeMapLayer6->GetYaxis()->SetTitleOffset(1.8); - fHistSSDNSideCommonModeMapLayer6->GetXaxis()->SetNdivisions(25); - fHistSSDNSideCommonModeMapLayer6->GetYaxis()->SetNdivisions(38); - fHistSSDNSideCommonModeMapLayer6->GetXaxis()->SetLabelSize(0.03); - fHistSSDNSideCommonModeMapLayer6->GetYaxis()->SetLabelSize(0.03); - fHistSSDNSideCommonModeMapLayer6->GetZaxis()->SetTitleOffset(1.6); - fHistSSDNSideCommonModeMapLayer6->GetZaxis()->SetTitle("RMS(CM) (N-side)"); - rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideCommonModeMapLayer6, - offsRw+fSSDRawsOffset, expert, !image, !saveCorr); - fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; - }//online flag - - fSSDhRawsTask = fSSDRawsOffset; - AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Raws histograms booked\n",fSSDhRawsTask)); - AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDhRawsTask)); - AliDebug(AliQAv1::GetQADebugLevel(),Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDRawsOffset)); - - /* - fSSDhTask = fSSDRawsOffset; - AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Raws histograms booked\n",fSSDhTask)); - AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDhTask)); - AliDebug(AliQAv1::GetQADebugLevel(),Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDRawsOffset)); - */ - - - //} //event species loop - - return rv ; - - -} - -//____________________________________________________________________________ -Int_t AliITSQASSDDataMakerRec::MakeRaws(AliRawReader* rawReader) -{ - // Fill QA for RAW - SSD - - Int_t rv = 0 ; - Int_t gStripNumber; - Int_t gHistPosition; - Int_t gLayer = 0,gLadder = 0, gModule = 0; - - Double_t gSizePerDDL[fgkNumOfDDLs] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; - Double_t gSizePerLDC[fgkNumOfLDCs] = {0.,0.,0.,0.,0.,0.,0.,0.}; - Double_t sumSSDDataSize = 0.0; - Double_t eventSize = -1.0; - - // RS: I've commented this loop over species: makes no sense in the event loop - // for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - // if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; - int specie = fAliITSQADataMakerRec->GetEventSpecie(); - //cout << "MakeRaws: Event specie " << specie << " is set" << endl; - // - int offsRw = fGenRawsOffset[specie]; - // - //AliInfo(Form("offsRw %d\n",offsRw)); - if(fkOnline) { - //reset the signal vs strip number histograms - for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) - fHistSSDRawSignalModule[iModule]->Reset(); - }//online flag - - rawReader->Select("ITSSSD",-1,-1); - rawReader->Reset(); //rawReader->NextEvent(); - //AliInfo(Form("offsRw %d\n",offsRw)); - fAliITSQADataMakerRec->FillRawsData(offsRw,rawReader->GetType()); - - AliITSRawStreamSSD gSSDStream(rawReader); - AliRawReaderRoot *rootReader = (AliRawReaderRoot *)rawReader; - if(rootReader) { - const AliRawEventHeaderBase *header = rootReader->GetEventHeader(); - if(header) - eventSize = header->GetEventSize(); - } - while (gSSDStream.Next()) { - if(gSSDStream.GetModuleID() < 0) continue; - /*cout<<"DDL: "<GetDDLID()<< - " - LDC: "<GetLDCId()<< - " - Size: "<GetDataSize()<< - " - Equipment size: "<GetEquipmentSize()<GetDDLID(); - if(ddlid<0){ - AliError("GetDDLID returns a negative value"); - continue; - } - gSizePerDDL[ddlid] = rawReader->GetDataSize(); - //gSizePerLDC[rawReader->GetLDCId()-8] = rawReader->GetDataSize(); - AliITSgeomTGeo::GetModuleId(gSSDStream.GetModuleID(),gLayer,gLadder,gModule); - gHistPosition = (gLayer == 5) ? ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + gModule - 1) : ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + gModule + fgkSSDMODULESLAYER5 - 1); - if(fkOnline) { - if(gSSDStream.GetStrip() < 0) { - //Printf("Layer: %d - Ladder: %d - Module: %d - Strip: %d - Signal: %lf",gLayer,gLadder,gModule,gSSDStream.GetStrip(),gSSDStream.GetSignal()); - if(TMath::Abs(gSSDStream.GetStrip()) < 7) - fHistSSDCMModule[gHistPosition]->Fill(gSSDStream.GetSignal()); - if(TMath::Abs(gSSDStream.GetStrip()) > 6) - fHistSSDCMModule[fgkSSDMODULES+gHistPosition]->Fill(gSSDStream.GetSignal()); - }//CM values - else { - gStripNumber = (gSSDStream.GetSideFlag() == 0) ? gSSDStream.GetStrip() : -gSSDStream.GetStrip() + 2*fgkNumberOfPSideStrips; - //AliDebug(AliQAv1::GetQADebugLevel(), Form("ModulePosition: %d - Layer: %d - Ladder: %d - Module: %d\n",gHistPosition,gLayer,gLadder,gModule)); - fHistSSDRawSignalModule[gHistPosition]->Fill(gStripNumber,gSSDStream.GetSignal()); - //fAliITSQADataMakerRec->FillRawsData(offsRw+gHistPosition+fSSDRawsCommonLevelOffset,gStripNumber,gSSDStream.GetSignal()); - }//normal strip signal - }//online flag - }//streamer loop - - //event size calculation and filling info - for(Int_t i = 0; i < fgkNumOfDDLs; i++) { - sumSSDDataSize += gSizePerDDL[i]; - if(gSizePerDDL[i] > 0) { - fAliITSQADataMakerRec->FillRawsData(offsRw+3,i+512); - fAliITSQADataMakerRec->FillRawsData(offsRw+5+i,gSizePerDDL[i]/1e+03); - //if(i == 5) - //cout<FillRawsData(offsRw+4),i+512,gSizePerDDL[i]/1e+06); - } - for(Int_t i = 0; i < fgkNumOfLDCs; i++) { - //LDC 170 - if(i == 0) - gSizePerLDC[i] = gSizePerDDL[8] + gSizePerDDL[9]; - //LDC 171 - if(i == 1) - gSizePerLDC[i] = gSizePerDDL[10] + gSizePerDDL[11]; - //LDC 172 - if(i == 2) - gSizePerLDC[i] = gSizePerDDL[12] + gSizePerDDL[13]; - //LDC 173 - if(i == 3) - gSizePerLDC[i] = gSizePerDDL[14] + gSizePerDDL[15]; - //LDC 174 - if(i == 4) - gSizePerLDC[i] = gSizePerDDL[0] + gSizePerDDL[1]; - //LDC 175 - if(i == 5) - gSizePerLDC[i] = gSizePerDDL[2] + gSizePerDDL[3]; - //LDC 176 - if(i == 6) - gSizePerLDC[i] = gSizePerDDL[4] + gSizePerDDL[5]; - //LDC 177 - if(i == 7) - gSizePerLDC[i] = gSizePerDDL[6] + gSizePerDDL[7]; - - if(gSizePerLDC[i] > 0) fAliITSQADataMakerRec->FillRawsData(offsRw+21,i+170); - fAliITSQADataMakerRec->FillRawsData(offsRw+23+i,gSizePerLDC[i]/1e+03); - //cout<<"Event: "<FillRawsData(offsRw+22),i+6,gSizePerLDC[i]/1e+06); - } - - // RS Invalid - // for(Int_t i = 0; i < fgkNumOfDDLs; i++) { - // Double_t gSizePerDDL = ((TH1F *)fAliITSQADataMakerRec->GetRawsData(offsRw+5+i))->GetMean(); - //if(i == 5) - //cout<<"DDL: "<GetRawsData(offsRw+5+i))->GetMean()<FillRawsData(offsRw+1,sumSSDDataSize/1e+03); - if(eventSize) fAliITSQADataMakerRec->FillRawsData(offsRw+2,100.*sumSSDDataSize/eventSize); - - //Occupancy calculation - if(fkOnline) { - for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { - GetOccupancyStrip(fHistSSDRawSignalModule[iModule],fOccupancyMatrix[iModule]); - //if(iModule == 156) { - //cout<<"========================================"<GetXaxis()->GetNbins(); iBin++) { - if((iBin >= 750)&&(iBin <= 780)) - cout<<"Event: "<GetBinContent(iBin)< to be removed - //}//module cut --> to be removed - }//module loop - }//online flag for SSD - - // RS Invalid - //cout<<"Event type entries: "<<((TH1*)fAliITSQADataMakerRec->GetRawsData(offsRw))->GetEntries()<GetRawsData(offsRw+3))->GetEntries()<< endl; - //cout<<"LDC id entries at MR: "<<((TH1F *)fAliITSQADataMakerRec->GetRawsData(offsRw+21))->GetEntries()<< endl; - - // } //event species loop // commented by RS - // - return rv ; -} - -//____________________________________________________________________________ // -void AliITSQASSDDataMakerRec::GetOccupancyStrip(TH1 *lHisto, Int_t *occupancyMatrix) { - //Increments the entries in the occupancy matrix based - //on whether the signal for each strip is larger than the cutoff - //Currently the cutoff is at 0 which means that if ZS - //works, whatever comes from the FEROM is considered as "signal" - //Double_t cutoff = 0.0; - TString histname = lHisto->GetName(); - //cout<GetXaxis()->GetNbins(); iBin++) { - Double_t y = lHisto->GetBinContent(iBin); - if(y) { - occupancyMatrix[iBin-1] += 1; - } - //if((iBin >= 750)&&(iBin <= 780)) - //cout<<"Strip: "<0 or # of sigmas wrt noise ? - //stripside == 0 --> P-side - //stripside == 1 --> N-side - Int_t lNumFiredBins = 0; - Double_t sumOccupancy = 0.0; - TString histname = lHisto->GetName(); - for(Int_t iBin = 1 + stripside*fgkNumberOfPSideStrips; iBin < fgkNumberOfPSideStrips*(1 + stripside); iBin++){ - /*if(histname.Contains("Layer5_Ladder507_Module3")) { - cout<GetName()<< - " - Strip: "<GetBinContent(iBin)<GetBinContent(iBin) > threshold) { - lNumFiredBins++; - sumOccupancy = lHisto->GetBinContent(iBin); - } - } - - Double_t lOccupancy = 0.0; - if((mode == 0)||(mode == 1)) - lOccupancy = (100.*lNumFiredBins)/fgkNumberOfPSideStrips; // percentage - else if(mode == 2) - lOccupancy = 100.*sumOccupancy/fgkNumberOfPSideStrips; - - /* if(histname.Contains("Layer5_Ladder507_Module3")) - cout<<"Fired strips: "<GetNbinsX(),lOccupancy)); - - return lOccupancy; -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerRec::MonitorCMValues(Int_t trCl) -{ - //Monitor in AMORE the CM values - //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; - //cout << "MonitorCMValues: Event specie " << specie << " is set" << endl; - Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); - int offsRw = fGenRawsOffset[specie]; - - //compute the rms of the CM values - Int_t gLayer = 0, gLadder = 0, gModule = 0; - Double_t rmsPsideCM = 0.0, rmsNsideCM = 0.0; - for(Int_t i = 0; i < fgkSSDMODULES; i++) { - rmsPsideCM = 0.0; rmsNsideCM = 0.0; - AliITSgeomTGeo::GetModuleId(i+500,gLayer,gLadder,gModule); - //Printf("%s - %s",((TH1*)list->At(i))->GetName(), - //((TH1*)list->At(1698+i))->GetName()); - rmsPsideCM = fHistSSDCMModule[i]->GetRMS(); - rmsNsideCM = fHistSSDCMModule[fgkSSDMODULES+i]->GetRMS(); - //Printf("rmsPside: %lf - rmsNside: %lf",rmsPsideCM,rmsNsideCM); - if(gLayer == 5) { - TH2* h4 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+4,trCl); - if (h4) h4->SetBinContent(gModule,gLadder,rmsPsideCM); - TH2* h5 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+5,trCl); - if (h5) h5->SetBinContent(gModule,gLadder,rmsNsideCM); - } - if(gLayer == 6) { - TH2* h6 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+6,trCl); - if (h6) h6->SetBinContent(gModule,gLadder,rmsPsideCM); - TH2* h7 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+7,trCl); - if (h7) h7->SetBinContent(gModule,gLadder,rmsNsideCM); - } - }//module loopcdcd - //}//event species loop -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerRec::MonitorOCDBObjects(Int_t trCl) -{ - //Monitor in AMORE the output of the DA - //Currently only the bad channel list is monitored - //Todo: Noise - Pedestal - - - //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { - //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; - //cout << "MonitorOCDBObjects: Event specie " << specie << " is set" << endl; - Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); - int offsRw = fGenRawsOffset[specie]; - fAliITSQADataMakerRec->SetEventSpecie(AliRecoParam::ConvertIndex(specie)); - - //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset)); - //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+1)); - //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+2)); - //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+3)); - - AliCDBEntry *entryBadChannelsSSD = fCDBManager->Get("ITS/Calib/BadChannelsSSD"); - if(!entryBadChannelsSSD)AliError("OCDB entry for the bad channel list is not valid!"); - AliITSBadChannelsSSDv2 *badchannelsSSD = NULL; - if(entryBadChannelsSSD)badchannelsSSD = (AliITSBadChannelsSSDv2 *)entryBadChannelsSSD->GetObject(); - if(!badchannelsSSD) - AliError("Bad channel list object is not a valid AliITSBadChannelsSSD object!"); - - //_____________________________________________________________________________// - Int_t nBadPSideChannels = 0, nBadNSideChannels = 0; - Int_t layer = 0, ladder = 0, module = 0; - Int_t nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; - Int_t nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; - //_____________________________________________________________________________// - - for(Int_t i = 0; i < fgkSSDMODULES; i++) { - AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module); - nBadPSideChannels = 0, nBadNSideChannels = 0; - nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; - nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; - - Int_t badChannel = 0; - if(badchannelsSSD){ - for(Int_t j = 0; j < fgkNumberOfPSideStrips; j++) { - badChannel = (Int_t)(badchannelsSSD->GetBadChannelP(i,j)); - if(badChannel != 0) { - if(layer == 5) - nPSideChannelsLayer5 += 1; - if(layer == 6) - nPSideChannelsLayer6 += 1; - nBadPSideChannels += 1; - }//badchannel flag != 0 - badChannel = (Int_t)(badchannelsSSD->GetBadChannelN(i,j)); - if(badChannel != 0) { - if(layer == 5) - nNSideChannelsLayer5 += 1; - if(layer == 6) - nNSideChannelsLayer6 += 1; - nBadNSideChannels += 1; - }//badchannel flag != 0 - }//loop over strips - } - - //cout << "Bad channels P side module " << module << ": " << nBadPSideChannels << endl; - //cout << "Bad channels N side module " << module << ": " << nBadNSideChannels << endl; - - if(layer == 5) { - /*if((module == 10)&&(ladder == 10)) { - cout<<"Npside bad: "<GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset,trCl); - if (h0) { - if(nPSideChannelsLayer5 > 0) h0->SetBinContent(module,ladder,100.*nPSideChannelsLayer5/fgkNumberOfPSideStrips); - else h0->SetBinContent(module,ladder,0.0001); - } - TH2* h1 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+1,trCl); - if (h1) { - if(nNSideChannelsLayer5 > 0) h1->SetBinContent(module,ladder,100.*nNSideChannelsLayer5/fgkNumberOfPSideStrips); - else h1->SetBinContent(module,ladder,0.0001); - } - }//layer 5 - if(layer == 6) { - TH2* h2 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+2,trCl); - if (h2) { - if(nPSideChannelsLayer6 > 0) h2->SetBinContent(module,ladder,100.*nPSideChannelsLayer6/fgkNumberOfPSideStrips); - else h2->SetBinContent(module,ladder,0.0001); - } - TH2* h3 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+3,trCl); - if (h3) { - if(nNSideChannelsLayer6 > 0) h3->SetBinContent(module,ladder,100.*nNSideChannelsLayer6/fgkNumberOfPSideStrips); - else h3->SetBinContent(module,ladder,0.0001); - } - }//layer 6 - }//module loop - - //cout << "entries bad channel layer 5 n side " << ((TH2F *)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+1))->GetEntries() << " - Bad channels P side layer 5 module 10 ladder 10: " << ((TH2F *)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset))->GetBinContent(10,10)<fDigitsQAList[AliRecoParam::kDefault])->GetEntries(); - - // custom code here - TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule", - ";SSD Module Number;N_{DIGITS}", - 1698,499.5,2197.5); - rv = fAliITSQADataMakerRec->Add2DigitsList(fHistSSDModule, - fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0, !expert, image); - fSSDhDigitsTask += 1; - TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip", - ";N_{Strip};N_{Module}", - 1540,0,1540,1698,499.5,2197.5); - rv = fAliITSQADataMakerRec->Add2DigitsList(fHistSSDModuleStrip, - fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1, !expert, image); - fSSDhDigitsTask += 1; - - AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Digits histograms booked\n",fSSDhDigitsTask)); - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASSDDataMakerRec::MakeDigits(TTree *digits) -{ - // Fill QA for DIGIT - SSD - - // AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); - // fITS->SetTreeAddress(); - // TClonesArray *iSSDdigits = fITS->DigitsAddress(2); - // - Int_t rv = 0 ; - TBranch *branchD = digits->GetBranch("ITSDigitsSSD"); - if (!branchD) { - AliError("can't get the branch with the SSD ITS digits !"); - return rv; - } - - static TClonesArray statDigits("AliITSdigitSSD"); - TClonesArray *iSSDdigits = &statDigits; - branchD->SetAddress(&iSSDdigits); - for(Int_t iModule = 500; iModule < 2198; iModule++) { - iSSDdigits->Clear(); - digits->GetEvent(iModule); - Int_t ndigits = iSSDdigits->GetEntries(); - //printf("Module = %i \t ndigits = %i\t offset = %i \n",iModule,ndigits,fAliITSQADataMakerRec->GetEventSpecie() ); - fAliITSQADataMakerRec->FillDigitsData(fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0,iModule,ndigits); - if(ndigits != 0) - AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Digits: %d",iModule,ndigits)); - - for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) { - AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit); - Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips; - fAliITSQADataMakerRec->FillDigitsData(fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1,fStripNumber,iModule,dig->GetSignal()); - }//digit loop - }//module loop - // - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASSDDataMakerRec::InitRecPoints() -{ - // Initialization for RECPOINTS - SSD - - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - Int_t rv = 0 ; - //AliInfo(Form("fAliITSQADataMakerRec->GetEventSpecie() %d\n",fAliITSQADataMakerRec->GetEventSpecie())); - //AliInfo(Form("fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] %d\n",fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])); - // fGenRecPointsOffset = (fAliITSQADataMakerRec->fRecPointsQAList[AliRecoParam::kDefault])->GetEntries(); - //AliDebug(AliQAv1::GetQADebugLevel(), Form("**-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints offset %d \t %d \n",fGenOffset,fGenRecPointsOffset)); - Int_t nModuleOffset = 500; - Int_t nITSTotalModules = AliITSgeomTGeo::GetNModules(); - - TH1F *fHistSSDModuleIdLayer5 = new TH1F("fHistSSDModuleIdLayer5", - "Module Id - Layer 5;Module Id;Entries", - fgkSSDMODULESLAYER5, - nModuleOffset - 0.5, - nITSTotalModules-fgkSSDMODULESLAYER6+0.5); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDModuleIdLayer6 = new TH1F("fHistSSDModuleIdLayer6", - "Module Id - Layer 6;Module Id;Entries", - fgkSSDMODULESLAYER6, - nModuleOffset+fgkSSDMODULESLAYER5 - 0.5, - nITSTotalModules + 0.5); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDClusterPerEventLayer5 = new TH1F("fHistSSDClusterPerEventLayer5", - "N_{clusters} - Layer 5;N_{clusters};Entries;", - 100,0.1,5000); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterPerEventLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 2, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDClusterPerEventLayer6 = new TH1F("fHistSSDClusterPerEventLayer6", - "N_{clusters} - Layer 6;N_{clusters};Entries;", - 100,0.1,5000); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterPerEventLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 3, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDLocalXLayer5 = new TH1F("fHistSSDLocalXLayer5", - "Local x coord.- Layer 5;x [cm];Entries;", - 100,-4.,4.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 4, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDLocalXLayer6 = new TH1F("fHistSSDLocalXLayer6", - "Local x coord.- Layer 6;x [cm];Entries;", - 100,-4.,4.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 5, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDLocalZLayer5 = new TH1F("fHistSSDLocalZLayer5", - "Local z coord.- Layer 5;z [cm];Entries;", - 100,-4.,4.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 6, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDLocalZLayer6 = new TH1F("fHistSSDLocalZLayer6", - "Local z coord.- Layer 6;z [cm];Entries;", - 100,-4.,4.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 7, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDGlobalXLayer5 = new TH1F("fHistSSDGlobalXLayer5", - "Global x - Layer 5;x [cm];Entries;", - 100,-40.,40.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 8, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDGlobalXLayer6 = new TH1F("fHistSSDGlobalXLayer6", - "Global x - Layer 6;x [cm];Entries;", - 100,-45.,45.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 9, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDGlobalYLayer5 = new TH1F("fHistSSDGlobalYLayer5", - "Global y - Layer 5;y [cm];Entries;", - 100,-40.,40); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 10, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDGlobalYLayer6 = new TH1F("fHistSSDGlobalYLayer6", - "Global y - Layer 6;y [cm];Entries;", - 100,-45.,45.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 11, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDGlobalZLayer5 = new TH1F("fHistSSDGlobalZLayer5", - "Global z - Layer 5;z [cm];Entries;", - 100,-45.,45); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 12, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDGlobalZLayer6 = new TH1F("fHistSSDGlobalZLayer6", - "Global z - Layer 6;z [cm];Entries;", - 100,-55.,55.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 13, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDPhiLayer5 = new TH1F("fHistSSDPhiLayer5", - "#phi - Layer 5;#phi [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 14, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDPhiLayer6 = new TH1F("fHistSSDPhiLayer6", - "#phi - Layer 6;#phi [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 15, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDThetaLayer5 = new TH1F("fHistSSDThetaLayer5", - "#theta - Layer 5;#theta [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 16, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDThetaLayer6 = new TH1F("fHistSSDThetaLayer6", - "#theta - Layer 6;#theta [rad];Entries;", - 100,-TMath::Pi(),TMath::Pi()); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 17, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDRadiusLayer5 = new TH1F("fHistSSDRadiusLayer5", - "r - Layer 5;r [cm];Entries;", - 100,35.,50.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 18, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDRadiusLayer6 = new TH1F("fHistSSDRadiusLayer6", - "r - Layer 6;r [cm];Entries;", - 100,35.,50.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 19, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDClusterTypeLayer5 = new TH1F("fHistSSDClusterTypeLayer5", - "CL type - Layer 5;Cluster type;Entries;", - 150,0,150); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 20, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDClusterTypeLayer6 = new TH1F("fHistSSDClusterTypeLayer6", - "CL type - Layer 6;Cluster type;Entries;", - 150,0,150); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 21, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargeRatioLayer5 = new TH1F("fHistSSDChargeRatioLayer5", - "Charge ratio - Layer 5;q_{ratio};Entries;", - 100,-2.0,2.0); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 22, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargeRatioLayer6 = new TH1F("fHistSSDChargeRatioLayer6", - "Charge ratio - Layer 6;q_{ratio};Entries;", - 100,-2.0,2.0); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 23, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargekeVLayer5 = new TH1F("fHistSSDChargekeVLayer5", - "Charge - Layer 5;q [keV];Entries;", - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 24, !expert, image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargekeVLayer6 = new TH1F("fHistSSDChargekeVLayer6", - "Charge - Layer 6;q [keV];Entries;", - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 25, !expert, image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargePSideLayer5 = new TH1F("fHistSSDChargePSideLayer5", - "Charge P- Layer 5;q_{P} [keV];Entries;", - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePSideLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 26, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargePSideLayer6 = new TH1F("fHistSSDChargePSideLayer6", - "Charge P- Layer 6;q_{P} [keV];Entries;", - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePSideLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 27, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargeNSideLayer5 = new TH1F("fHistSSDChargeNSideLayer5", - "Charge N- Layer 5;q_{N} [keV];Entries;", - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeNSideLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 28, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargeNSideLayer6 = new TH1F("fHistSSDChargeNSideLayer6", - "Charge N- Layer 6;q_{N} [keV];Entries;", - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeNSideLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 29, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargeRatio2Layer5 = new TH1F("fHistSSDChargeRatio2Layer5", - "Charge Ratio qN/qP - Layer 5;q_{N}/q_{P};Entries;", - 100,0,2); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatio2Layer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 30, expert, !image); - fSSDhRecPointsTask += 1; - TH1F *fHistSSDChargeRatio2Layer6 = new TH1F("fHistSSDChargeRatio2Layer6", - "Charge Ratio qN/qP - Layer 6;q_{N}/q_{P};Entries;", - 100,0,2); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatio2Layer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 31, expert, !image); - fSSDhRecPointsTask += 1; - TH2F *fHistSSDChargePNSideLayer5 = new TH2F("fHistSSDChargePNSideLayer5", - "Charge correlation - Layer 5;q_{P} [keV];q_{N} [keV]", - 100,0.,300., - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePNSideLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 32, expert, !image); - fSSDhRecPointsTask += 1; - TH2F *fHistSSDChargePNSideLayer6 = new TH2F("fHistSSDChargePNSideLayer6", - "Charge correlation - Layer 6;q_{P} [keV];q_{N} [keV]", - 100,0.,300., - 100,0.,300.); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePNSideLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 33, expert, !image); - fSSDhRecPointsTask += 1; - TH2F *fHistSSDChargeMapLayer5 = new TH2F("fHistSSDChargeMapLayer5", - "Charge map;N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER5, - -0.5,fgkSSDMODULESPERLADDERLAYER5+0.5, - 3*fgkSSDLADDERSLAYER5, - -0.5,fgkSSDLADDERSLAYER5+0.5); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 34, expert, !image); - fSSDhRecPointsTask += 1; - TH2F *fHistSSDChargeMapLayer6 = new TH2F("fHistSSDChargeMapLayer6", - "Charge map;N_{modules};N_{Ladders}", - fgkSSDMODULESPERLADDERLAYER6, - -0.5,fgkSSDMODULESPERLADDERLAYER6+0.5, - 3*fgkSSDLADDERSLAYER6, - -0.5,fgkSSDLADDERSLAYER6+0.5); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 35, expert, !image); - fSSDhRecPointsTask += 1; - TH2F *fHistSSDClusterMapLayer5 = new TH2F("fHistSSDClusterMapLayer5", - "Layer 5;N_{module};N_{ladder}", - 22,1,23, - 34,500,534); - fHistSSDClusterMapLayer5->GetXaxis()->SetTitleColor(1); - fHistSSDClusterMapLayer5->SetStats(kFALSE); - fHistSSDClusterMapLayer5->GetYaxis()->SetTitleOffset(1.8); - fHistSSDClusterMapLayer5->GetXaxis()->SetNdivisions(22); - fHistSSDClusterMapLayer5->GetYaxis()->SetNdivisions(34); - fHistSSDClusterMapLayer5->GetXaxis()->SetLabelSize(0.03); - fHistSSDClusterMapLayer5->GetYaxis()->SetLabelSize(0.03); - fHistSSDClusterMapLayer5->GetZaxis()->SetTitleOffset(1.4); - fHistSSDClusterMapLayer5->GetZaxis()->SetTitle("N_{clusters}"); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterMapLayer5, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 36, !expert, image); - fSSDhRecPointsTask += 1; - TH2F *fHistSSDClusterMapLayer6 = new TH2F("fHistSSDClusterMapLayer6", - "Layer 6;N_{module};N_{ladder}", - 25,1,26, - 38,600,638); - fHistSSDClusterMapLayer6->GetXaxis()->SetTitleColor(1); - fHistSSDClusterMapLayer6->SetStats(kFALSE); - fHistSSDClusterMapLayer6->GetYaxis()->SetTitleOffset(1.8); - fHistSSDClusterMapLayer6->GetXaxis()->SetNdivisions(25); - fHistSSDClusterMapLayer6->GetYaxis()->SetNdivisions(38); - fHistSSDClusterMapLayer6->GetXaxis()->SetLabelSize(0.03); - fHistSSDClusterMapLayer6->GetYaxis()->SetLabelSize(0.03); - fHistSSDClusterMapLayer6->GetZaxis()->SetTitleOffset(1.4); - fHistSSDClusterMapLayer6->GetZaxis()->SetTitle("N_{clusters}"); - rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterMapLayer6, - fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 37, !expert, image); - fSSDhRecPointsTask += 1; - //printf ("%d SSD Recs histograms booked\n",fSSDhRecPointsTask); - AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Recs histograms booked\n",fSSDhRecPointsTask)); - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASSDDataMakerRec::MakeRecPoints(TTree *clustersTree) -{ - // Fill QA for recpoints - SSD - - //printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints called \n"); - // - Int_t rv = 0 ; - Int_t gLayer = 0, gLadder = 0, gModule = 0; - Int_t lLadderLocationY = 0; - TClonesArray *recpoints = NULL; - AliITSRecPointContainer* rpcont=AliITSRecPointContainer::Instance(); - rpcont->FetchClusters(0,clustersTree); - if(!rpcont->GetStatusOK() || !rpcont->IsSSDActive()){ - AliError("can't get SSD clusters !"); - return rv; - } - - //AliInfo(Form("fAliITSQADataMakerRec->GetEventSpecie() %d\n",fAliITSQADataMakerRec->GetEventSpecie())); - //AliInfo(Form("fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] %d\n",fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])); - Int_t nClustersLayer5 = 0, nClustersLayer6 = 0; - Int_t npoints = 0; - Float_t cluglo[3]={0.,0.,0.}; - //printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints STEP1 \n"); - // AliITSgeomTGeo::GetModuleIndex() issues an error in case the arguments - // are illegal and returns -1 - Int_t firMod = TMath::Max(0,AliITSgeomTGeo::GetModuleIndex(5,1,1)); - Int_t lasMod = AliITSgeomTGeo::GetNModules(); - for(Int_t module = firMod; module < lasMod; module++){ - recpoints = rpcont->UncheckedGetClusters(module); - npoints += recpoints->GetEntries(); - AliITSgeomTGeo::GetModuleId(module,gLayer,gLadder,gModule); - //printf("SSDDataMAkerRec:::::::::::::::::::::::gLayer ========== %d \n\n",gLayer); - lLadderLocationY = 3*gLadder; - ////printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints inside loop \n"); - for(Int_t j = 0;j < recpoints->GetEntries(); j++){ - ////printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints inside loop 2\n"); - AliITSRecPoint *recp = (AliITSRecPoint*)recpoints->At(j); - Int_t layer = recp->GetLayer(); - //printf("SSDDataMAkerRec:::::::::::::::::::::::layer ========== %d \n\n",layer); - recp->GetGlobalXYZ(cluglo); - Float_t radius = TMath::Sqrt(cluglo[0]*cluglo[0]+cluglo[1]*cluglo[1]); - Float_t phi = TMath::ATan2(cluglo[1],cluglo[0]); - Float_t theta = TMath::ATan2(radius,cluglo[2]); - Double_t chargeRatio = recp->GetChargeRatio(); - Double_t clusterCharge = recp->GetQ(); - Double_t chargePSide = clusterCharge*(1. + chargeRatio); - Double_t chargeNSide = clusterCharge*(1. - chargeRatio); - if(layer == 4) { - //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling 4 called \n"); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 20,recp->GetType()); - - if(recp->GetType() != 1) continue; - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0,module); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 4,recp->GetDetLocalX()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 6,recp->GetDetLocalZ()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 8,cluglo[0]); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 10,cluglo[1]); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 12,cluglo[2]); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 14,phi); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 16,theta); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 18,radius); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 22,recp->GetChargeRatio()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 24,recp->GetQ()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 26,chargePSide); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 28,chargeNSide); - if(chargePSide != 0.) fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 30,chargeNSide/chargePSide); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 32,chargePSide,chargeNSide); - fAliITSQADataMakerRec->SetRecPointsDataBinContent(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 34,gModule,lLadderLocationY,recp->GetQ()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 36,gModule,499+gLadder,1); - nClustersLayer5 += 1; - }//layer 5 histograms - if(layer == 5) { - //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling 5 called \n"); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 21,recp->GetType()); - - if(recp->GetType() != 1) continue; - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1,module); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 5,recp->GetDetLocalX()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 7,recp->GetDetLocalZ()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 9,cluglo[0]); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 11,cluglo[1]); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 13,cluglo[2]); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 15,phi); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 17,theta); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 19,radius); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 23,recp->GetChargeRatio()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 25,recp->GetQ()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 27,chargePSide); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 29,chargeNSide); - if(chargePSide != 0.) fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 31,chargeNSide/chargePSide); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 33,chargePSide,chargeNSide); - fAliITSQADataMakerRec->SetRecPointsDataBinContent(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 35,gModule,lLadderLocationY,recp->GetQ()); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 37,gModule,599+gLadder,1); - nClustersLayer6 += 1; - }//layer 6 histograms - }//rec. points loop - }//module loop - - //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling called \n"); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 2,nClustersLayer5); - fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 3,nClustersLayer6); - // - return rv ; -} - -//____________________________________________________________________________ -Int_t AliITSQASSDDataMakerRec::GetOffset(AliQAv1::TASKINDEX_t task,Int_t specie) const { - // Returns offset number according to the specified task - Int_t offset=0; - if( task == AliQAv1::kRAWS ) { - offset=fGenRawsOffset[specie]; - } - else if( task == AliQAv1::kDIGITSR ) { - offset=fGenDigitsOffset[specie]; - } - else if( task == AliQAv1::kRECPOINTS ) { - offset=fGenRecPointsOffset[specie]; - } - - return offset; -} - -//_______________________________________________________________ - -void AliITSQASSDDataMakerRec::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset, Int_t specie) { - // Returns offset number according to the specified task - if( task == AliQAv1::kRAWS ) { - fGenRawsOffset[specie]=offset; - } - else if( task == AliQAv1::kDIGITSR ) { - fGenDigitsOffset[specie]=offset; - } - else if( task == AliQAv1::kRECPOINTS ) { - fGenRecPointsOffset[specie]=offset; - } -} - -//____________________________________________________________________________ -Int_t AliITSQASSDDataMakerRec::GetTaskHisto(AliQAv1::TASKINDEX_t task) { - // Returns the number of histograms associated to the specified task - Int_t histotot=0; - - if( task == AliQAv1::kRAWS ) { - histotot=fSSDhRawsTask; - } - else if( task == AliQAv1::kDIGITSR ) { - histotot=fSSDhDigitsTask; - } - else if( task == AliQAv1::kRECPOINTS ){ - histotot=fSSDhRecPointsTask; - } - else { - AliWarning("No task has been selected. TaskHisto set to zero.\n"); - } - - return histotot; -} - -//____________________________________________________________________________ -void AliITSQASSDDataMakerRec::ResetDetector(AliQAv1::TASKINDEX_t task) -{ - if(task==AliQAv1::kRAWS) { - ResetRawsMonitoredObjects(); - } - -} +/************************************************************************** + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +/* $Id$ */ +// ************************************************************* +// Checks the quality assurance +// by comparing with reference data +// contained in a DB +// ------------------------------------------------------------- +// W. Ferrarese + P. Cerello Feb 2008 +// INFN Torino + +// --- ROOT system --- +#include +#include +#include +#include +#include + +// --- Standard library --- + +// --- AliRoot header files --- +#include "AliITSQADataMakerRec.h" +#include "AliITSQASSDDataMakerRec.h" +#include "AliQADataMakerRec.h" +#include "AliLog.h" +#include "AliQAv1.h" +#include "AliQAChecker.h" +#include "AliRawReader.h" +#include "AliRawReaderRoot.h" +#include "AliITSRawStreamSSD.h" +#include "AliITSgeomTGeo.h" +#include "AliRawEventHeaderBase.h" +#include "AliITSRecPoint.h" +#include "AliITSRecPointContainer.h" +#include "AliITSdigitSSD.h" +#include "AliITSBadChannelsSSDv2.h" + +#include "AliCDBManager.h" +#include "AliCDBEntry.h" + +ClassImp(AliITSQASSDDataMakerRec) + +AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode, Int_t ldc) : +TObject(), + fAliITSQADataMakerRec(aliITSQADataMakerRec), + fkOnline(kMode), + fLDC(ldc), + fSSDRawsOffset(0), fSSDRawsDAOffset(0), + fSSDRawsCommonLevelOffset(0), + fSSDhRawsTask(0), + fSSDhDigitsTask(0), + fSSDhRecPointsTask(0), + fGenRawsOffset(0), + fGenDigitsOffset(0), + fGenRecPointsOffset(0), + fCDBManager(0) { + // Default constructor + //initilize the raw signal vs strip number histograms + fGenRawsOffset = new Int_t[AliRecoParam::kNSpecies]; + fGenRecPointsOffset = new Int_t[AliRecoParam::kNSpecies]; + fGenDigitsOffset = new Int_t[AliRecoParam::kNSpecies]; + for(Int_t i=0; iSetDefaultStorage("local://$ALICE_ROOT/OCDB"); + fCDBManager->SetDefaultStorage(gSystem->Getenv("AMORE_CDB_URI")); + + Int_t runNumber = 1; + if(!gSystem->Getenv("DATE_RUN_NUMBER")) { + AliWarning("DATE_RUN_NUMBER not defined!!!\n"); } + else { + runNumber = atoi(gSystem->Getenv("DATE_RUN_NUMBER"));} + fCDBManager->SetRun(runNumber); + AliCDBEntry *geomGRP = fCDBManager->Get("GRP/Geometry/Data"); + if(!geomGRP) AliWarning("GRP geometry not found!!!\n"); + + Int_t gLayer = 0,gLadder = 0, gModule = 0; + Int_t gHistCounterRawSignal = 0, gHistCounterCM = 0; + TString gTitle; + + for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) { + AliITSgeomTGeo::GetModuleId(iModule,gLayer,gLadder,gModule); + gTitle = "SSD_RawSignal_Layer"; gTitle += gLayer; + gTitle += "_Ladder"; gTitle += gLadder; + gTitle += "_Module"; gTitle += gModule; + fHistSSDRawSignalModule[gHistCounterRawSignal] = new TH1F(gTitle.Data(),gTitle.Data(), + 2*fgkNumberOfPSideStrips,0,2*fgkNumberOfPSideStrips); + gHistCounterRawSignal += 1; + + for(Int_t iStrip = 0; iStrip < 2*fgkNumberOfPSideStrips; iStrip++) + fOccupancyMatrix[iModule-500][iStrip] = 0; + + //CM histograms + gTitle = "SSD_CM_PSide_Layer"; gTitle += gLayer; + gTitle += "_Ladder"; gTitle += gLadder; + gTitle += "_Module"; gTitle += gModule; + fHistSSDCMModule[gHistCounterCM] = new TH1F(gTitle.Data(),gTitle.Data(), + 100,-50.,50.); + fHistSSDCMModule[gHistCounterCM]->GetXaxis()->SetTitle("CM"); + gHistCounterCM += 1; + }//module loop + + for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) { + AliITSgeomTGeo::GetModuleId(iModule,gLayer,gLadder,gModule); + gTitle = "SSD_CM_NSide_Layer"; gTitle += gLayer; + gTitle += "_Ladder"; gTitle += gLadder; + gTitle += "_Module"; gTitle += gModule; + fHistSSDCMModule[gHistCounterCM] = new TH1F(gTitle.Data(),gTitle.Data(), + 100,-50.,50.); + fHistSSDCMModule[gHistCounterCM]->GetXaxis()->SetTitle("CM"); + gHistCounterCM += 1; + + } + }//online flag + else { + fCDBManager = NULL; + for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { + fHistSSDCMModule[iModule] = NULL; + fHistSSDCMModule[fgkSSDMODULES+iModule] = NULL; + fHistSSDRawSignalModule[iModule] = NULL; + } + } +} +/* +//____________________________________________________________________________ +AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(const AliITSQASSDDataMakerRec& qadm) : +TObject(), +fAliITSQADataMakerRec(qadm.fAliITSQADataMakerRec), +fkOnline(qadm.fkOnline), +fLDC(qadm.fLDC), +fSSDRawsOffset(qadm.fSSDRawsOffset), fSSDRawsDAOffset(qadm.fSSDRawsDAOffset), +fSSDRawsCommonLevelOffset(qadm.fSSDRawsCommonLevelOffset), +fSSDhRawsTask(qadm.fSSDhRawsTask), +fSSDhDigitsTask(qadm.fSSDhDigitsTask), +fSSDhRecPointsTask(qadm.fSSDhRecPointsTask), +fGenRawsOffset(qadm.fGenRawsOffset), +fGenDigitsOffset(qadm.fGenDigitsOffset), +fGenRecPointsOffset(qadm.fGenRecPointsOffset), +fCDBManager(qadm.fCDBManager) { +//copy ctor +fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ; +fAliITSQADataMakerRec->SetTitle((const char*)qadm.fAliITSQADataMakerRec->GetTitle()); +} + +//__________________________________________________________________ +AliITSQASSDDataMakerRec& AliITSQASSDDataMakerRec::operator = (const AliITSQASSDDataMakerRec& qac ) +{ +// Equal operator. +this->~AliITSQASSDDataMakerRec(); +new(this) AliITSQASSDDataMakerRec(qac); +return *this; +} +*/ +//__________________________________________________________________ +AliITSQASSDDataMakerRec::~AliITSQASSDDataMakerRec() { + // destructor + if(fkOnline) { + for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { + if(fHistSSDRawSignalModule[iModule]) delete fHistSSDRawSignalModule[iModule]; + if(fHistSSDCMModule[iModule]) delete fHistSSDCMModule[iModule]; + if(fHistSSDCMModule[fgkSSDMODULES+iModule]) delete fHistSSDCMModule[fgkSSDMODULES+iModule]; + } + + if(fCDBManager) delete fCDBManager; + } +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerRec::StartOfDetectorCycle() +{ + // start of detector cycle + + if(fAliITSQADataMakerRec->ListExists(AliQAv1::kRAWS)==kFALSE)return; + + //if ( fAliITSQADataMakerRec->GetRawsData(0) == NULL ) // Raws not defined + //return ; + + //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; + //cout << "StartOfDetectorCycle: Event specie " << specie << " is set" << endl; + + //Detector specific actions at start of cycle + AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SSD Cycle\n"); + //Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); + + //}//event specie loop + +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerRec::ResetRawsMonitoredObjects() +{ + //Resetting the raw data monitored objects + //Data size per DDL + //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; + /*((TH1F *)(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+4))); + //Data size per LDC + ((TH1F *)(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+22)));*/ + Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); + //cout << "(AliITSQASSDDataMakerRec::ResetRawsMonitoredObjects): Event specie " << specie << " is set" << endl; + //online part + if(fkOnline) { + for(Int_t iModule = 500; iModule < fgkSSDMODULES + 500; iModule++) { + for(Int_t iStrip = 0; iStrip < 2*fgkNumberOfPSideStrips; iStrip++) + fOccupancyMatrix[iModule-500][iStrip] = 0; + }//module loop + + //for(Int_t iSSDOffset = 0; iSSDOffset < fSSDRawsCommonLevelOffset; iSSDOffset++) + //(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+iSSDOffset)); + //for(Int_t iSSDOffset = fSSDRawsCommonLevelOffset; iSSDOffset < fSSDRawsOffset; iSSDOffset++) + //(fAliITSQADataMakerRec->ResetRawsData(fGenRawsOffset[specie]+iSSDOffset)); + + Int_t gHistPositionOccupancyPerLadder = 0; + Int_t gLayer = 0, gLadder = 0, gModule = 0; + for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { + AliITSgeomTGeo::GetModuleId(iModule+500,gLayer,gLadder,gModule); + + gHistPositionOccupancyPerLadder = (gLayer == 5) ? 2*(gLadder - 1) : 2*(gLadder - 1 + fgkSSDLADDERSLAYER5); + + //P-SIDE OCCUPANCY + int offs = fGenRawsOffset[specie]+fSSDRawsCommonLevelOffset+fgkSSDMODULES; + fAliITSQADataMakerRec->ResetRawsData(offs+gHistPositionOccupancyPerLadder); + //N-SIDE OCCUPANCY + fAliITSQADataMakerRec->ResetRawsData(offs+gHistPositionOccupancyPerLadder+1); + // + fAliITSQADataMakerRec->ResetRawsData(offs+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6); + fAliITSQADataMakerRec->ResetRawsData(offs+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1); + }//module loop + }//online flag + // +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** /*list*/) +{ + // finalize ssd cycle + // + Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); + //cout << "(AliITSQASSDDataMakerRec::EndOfDetectorCycle): Event specie " << specie << " is set" << endl; + + // launch the QA checking + AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n"); + AliDebug(AliQAv1::GetQADebugLevel(), Form("Offset: %d\n",fGenRawsOffset[specie])); + //Printf("Offset: %d\n",fGenRawsOffset[specie]); + + if(task == AliQAv1::kRAWS) { + // + for (int trCl=-1;trClGetNTrigClasses();trCl++) { // RS Loop over all trigger classes (+ global counter, -1) + // + TObjArray &harr = *fAliITSQADataMakerRec->GetRawsDataOfTrigClass(trCl); + int offs = fGenRawsOffset[specie]; + int nSSDEventPerCycle = fAliITSQADataMakerRec->GetEvCountCycleRaws(trCl); + // + //Data size per DDL + for(Int_t i = 0; i < fgkNumOfDDLs; i++) { + if (!(harr[offs+5+i] && harr[offs+4+i])) continue; + Double_t gSizePerDDL = ((TH1*)harr[offs+5+i])->GetMean(); + //cout<<"DDL: "<GetEntries()<SetBinContent(i+1,gSizePerDDL); + //cout<<"After filling DDL: "<GetBinContent(i+1)<GetMean(); + ((TH1*)harr[offs+22])->SetBinContent(i+1,gSizePerLDC); + //cout<<"LDC: "<GetMean()<GetEntries()<< " mean: " << ((TH1*)harr[offs+4])->GetMean()<GetEntries()<< " mean: " << ((TH1*)harr[offs+22])->GetMean()<GetXaxis()->GetNbins(); iBins++) htmp->SetBinContent(iBins,fOccupancyMatrix[iModule][iBins-1]); + if(nSSDEventPerCycle != 0) htmp->Scale(100./nSSDEventPerCycle); + }//module loop + } + // + //occupancy per ladder + Int_t gHistPositionOccupancyPerLadder = 0; + Int_t lLadderLocationY = 0; + Double_t occupancy = 0.0, occupancyThreshold = 0.0, occupancyAverage = 0.0; + for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { + AliITSgeomTGeo::GetModuleId(iModule+500,gLayer,gLadder,gModule); + // + gHistPositionOccupancyPerModule = (gLayer == 5) ? ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + gModule - 1) : ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + gModule + fgkSSDMODULESLAYER5 - 1); + gHistPositionOccupancyPerLadder = (gLayer == 5) ? 2*(gLadder - 1) : 2*(gLadder - 1 + fgkSSDLADDERSLAYER5); + // + TH1* htmpo = (TH1*)harr[offs+fSSDRawsCommonLevelOffset+gHistPositionOccupancyPerModule]; + TH1* h1t = 0; + TH2* h2t = 0; + if (htmpo) { + //P-SIDE OCCUPANCY + occupancy = GetOccupancyModule(htmpo,0,0,0); + occupancyThreshold = GetOccupancyModule(htmpo,0,1,3); + occupancyAverage = GetOccupancyModule(htmpo,0,2,0); + if ( (h1t=(TH1*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder]) ) h1t->SetBinContent(gModule,occupancy); + lLadderLocationY = 3*gLadder; // sideP=1 sideN=0 + if(gLayer == 5) { + //occupancy per module - no threshold + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancy); + //occupancy per module - threshold @ 3% + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+2]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyThreshold); + //average occupancy per module + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+4]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyAverage); + } + else if(gLayer == 6) { + //occupancy per module - no threshold + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancy); + //occupancy per module - threshold @ 3% + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyThreshold); + //average occupancy per module + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+5]) ) h2t->SetBinContent(gModule,lLadderLocationY,occupancyAverage); + } + // + //N-SIDE OCCUPANCY + // + occupancy = GetOccupancyModule(htmpo,1,0,0); + occupancyThreshold = GetOccupancyModule(htmpo,1,1,3); + occupancyAverage = GetOccupancyModule(htmpo,1,2,0); + if ( (h1t=(TH1*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+gHistPositionOccupancyPerLadder+1]) ) h1t->SetBinContent(gModule,occupancy); + if(gLayer == 5) { + //occupancy per module - no threshold + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancy); + //occupancy per module - threshold @ 3% + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+2]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyThreshold); + //average occupancy per module + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+4]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyAverage); + } + else if(gLayer == 6) { + //occupancy per module - no threshold + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+1]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancy); + //occupancy per module - threshold @ 3% + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyThreshold); + //average occupancy per module + if ( (h2t=(TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+5]) ) h2t->SetBinContent(gModule,lLadderLocationY-1,occupancyAverage); + } + } // htmpo + }//module loop + }//online flag for SSD + // + //TH2* h2tmp = (TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6]; + //if (h2tmp) AliInfo(Form("Entries 2d occupancy no thres- lay 5: %d"),h2tmp->GetEntries()); + //h2tmp = (TH2*)harr[offs+fSSDRawsCommonLevelOffset+fgkSSDMODULES+2*fgkSSDLADDERSLAYER5+2*fgkSSDLADDERSLAYER6+3]; + //cout<<"entries 2d occupancy thres- lay 6: "<GetEntries()<< " mean: " << h2tmp->GetMean() << endl; //Somehow the other occupancy maps do give nonzero values for GetMean() here + // + // TH1* h1tmp = (TH1*)harr[fGenRawsOffset[1]+4]; + // if (h1tmp) cout<<"Data size/ DDL entries: "<GetEntries()<< " mean: " << h1tmp->GetMean()<Run( AliQAv1::kITS , task, list); + // + ResetRawsMonitoredObjects(); + }//raw data end of cycle + // + + // +} + +//____________________________________________________________________________ +Int_t AliITSQASSDDataMakerRec::InitRaws() { + // Initialization for RAW data - SSD - + const Bool_t expert = kTRUE ; + const Bool_t saveCorr = kTRUE ; + const Bool_t image = kTRUE ; + Int_t rv = 0 ; + fSSDRawsOffset = 0; + + //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; + Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); + //cout << "(AliITSQASSDDataMakerRec::InitRaws): Event specie " << specie << " is set" << endl; + //cout << "(AliITSQASSDDataMakerRec::InitRaws): Offset " << offsRw << endl; + int offsRw = fGenRawsOffset[specie]; + + + if(fkOnline) { + AliDebug(AliQAv1::GetQADebugLevel(), "Book Online Histograms for SSD\n"); + } + else { + AliDebug(AliQAv1::GetQADebugLevel(), "Book Offline Histograms for SSD\n "); + } + AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD): %d\n",offsRw)); + + TString gTitle; + TString gName; + //book online-offline QA histos + TH1F *fHistSSDEventType = new TH1F("fHistSSDEventType", + "SSD Event Type;Event type;Events", + 31,-1,30); + fHistSSDEventType->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDEventType, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + //cout<<"(AliITSQASSDDataMakerRec::InitRaws): "<GetRawsData(offsRw))->GetName()<Add2RawsList(fHistSSDDataSize, + offsRw+fSSDRawsOffset, !expert, image, !saveCorr); + fSSDRawsOffset += 1; + TH1F *fHistSSDDataSizePercentage = new TH1F("fHistSSDDataSizePercentage", + "SSD Data Size Percentage;SSD data size [%];Events", + 1000,0,100); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePercentage, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + TH1F *fHistSSDDDLId = new TH1F("fHistSSDDDLId", + "SSD DDL Id;DDL id;Events",16,511.5,527.5); + fHistSSDDDLId->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDDLId, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + TH1F *fHistSSDDataSizePerDDL = new TH1F("fHistSSDDataSizePerDDL", + "SSD Data Size Per DDL;DDL id; [KB]", + 16,511.5,527.5); + fHistSSDDataSizePerDDL->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePerDDL, + offsRw+fSSDRawsOffset, !expert, image, !saveCorr); + + fSSDRawsOffset += 1; + TH1F *fHistSSDDataSizeDDL[fgkNumOfDDLs]; + for(Int_t i = 1; i < fgkNumOfDDLs+1; i++) { + gName = Form("fHistSSDDataSizeDDL%d", i+511) ; + gTitle = Form("SSD Data Size DDL %d", i+511) ; + fHistSSDDataSizeDDL[i-1] = new TH1F(gName.Data(), + Form("%s;(SSD data size) [KB];Events", gTitle.Data()), + 100,0,50); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizeDDL[i-1], + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + } + + TH1F *fHistSSDLDCId = new TH1F("fHistSSDLDCId","SSD LDC Id;LDC id;Events",8,169.5,177.5); + fHistSSDLDCId->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDLDCId, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + TH1F *fHistSSDDataSizePerLDC = new TH1F("fHistSSDDataSizePerLDC", + "SSD Data Size Per LDC;LDC id; [KB]", + 8,169.5,177.5); + fHistSSDDataSizePerLDC->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizePerLDC, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); fSSDRawsOffset += 1; + TH1F *fHistSSDDataSizeLDC[fgkNumOfLDCs]; + for(Int_t i = 1; i < fgkNumOfLDCs+1; i++) { + gName = "fHistSSDDataSizeLDC"; + if(i == 1) gName += "170"; + if(i == 2) gName += "171"; + if(i == 3) gName += "172"; + if(i == 4) gName += "173"; + if(i == 5) gName += "174"; + if(i == 6) gName += "175"; + if(i == 7) gName += "176"; + if(i == 8) gName += "177"; + + gTitle = "SSD Data Size LDC "; gTitle += gName.Data(); + fHistSSDDataSizeLDC[i-1] = new TH1F(gName.Data(), + Form("%s;SSD data size [KB];Events", gTitle.Data()), + 1000,0,100); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDDataSizeLDC[i-1], + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + } + fSSDRawsCommonLevelOffset = fSSDRawsOffset; + + if(fkOnline) { + Int_t gLayer = 0, gLadder = 0, gModule = 0; + //occupancy per SSD module + TH1F *fHistSSDOccupancyModule[fgkSSDMODULES]; + for(Int_t i = 500; i < fgkSSDMODULES + 500; i++) { + AliITSgeomTGeo::GetModuleId(i,gLayer,gLadder,gModule); + gName = "fHistSSD_Occupancy_Layer"; + gTitle = "SSD Occupancy Layer"; + if(gLayer == 5) { + gName += gLayer; gName += "_Ladder"; + gName += 499+gLadder; + gTitle += gLayer; gTitle += "_Ladder"; + gTitle += 499+gLadder; + } + if(gLayer == 6) { + gName += gLayer; gName += "_Ladder"; + gName += 599+gLadder; + gTitle += gLayer; gTitle += "_Ladder"; + gTitle += 599+gLadder; + } + gName += "_Module"; gName += gModule; + gTitle += "_Module"; gTitle += gModule; + + fHistSSDOccupancyModule[i-500] = new TH1F(gName.Data(),Form("%s;N_{strip};Occupancy [%%]", gTitle.Data()), + 2*fgkNumberOfPSideStrips,0,2*fgkNumberOfPSideStrips); + fHistSSDOccupancyModule[i-500]->GetXaxis()->SetTitleColor(1); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyModule[i-500], + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + } + + //Occupancy per SSD ladder + Int_t occupancyCounter = 0; + TH1F *fHistSSDOccupancyLadder[2*(fgkSSDLADDERSLAYER5 + fgkSSDLADDERSLAYER6)]; + for(Int_t iLayer = 5; iLayer < 7; iLayer++) { + for(Int_t iLadder = 1; iLadder < AliITSgeomTGeo::GetNLadders(iLayer) + 1; iLadder++) { + //P-side occupancy plots + gName = "fHistSSD_Occupancy_Layer"; + gTitle = "SSD Occupancy Layer"; + if(iLayer == 5) { + gName += iLayer; gName += "_Ladder"; + gName += 499+iLadder; + gTitle += iLayer; gTitle += "_Ladder"; + gTitle += 499+iLadder; + } + if(iLayer == 6) { + gName += iLayer; gName += "_Ladder"; + gName += 599+iLadder; + gTitle += iLayer; gTitle += "_Ladder"; + gTitle += 599+iLadder; + } + gName += "_PSide"; + gTitle += "_PSide"; + fHistSSDOccupancyLadder[occupancyCounter] = new TH1F(gName.Data(), + Form("%s;Module number;Occupancy [%%]", gTitle.Data()), + AliITSgeomTGeo::GetNDetectors(iLayer), + 0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5); + fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitleColor(1); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLadder[occupancyCounter], + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + occupancyCounter += 1; fSSDRawsOffset += 1; + //N-side occupancy plots + gName = "fHistSSD_Occupancy_Layer"; + gTitle = "SSD Occupancy Layer"; + if(iLayer == 5) { + gName += iLayer; gName += "_Ladder"; + gName += 499+iLadder; + gTitle += iLayer; gTitle += "_Ladder"; + gTitle += 499+iLadder; + } + if(iLayer == 6) { + gName += iLayer; gName += "_Ladder"; + gName += 599+iLadder; + gTitle += iLayer; gTitle += "_Ladder"; + gTitle += 599+iLadder; + } + gName += "_NSide"; + gTitle += "_NSide"; + fHistSSDOccupancyLadder[occupancyCounter] = new TH1F(gName.Data(), + Form("%s;Module number;Occupancy [%%]", gTitle.Data()), + AliITSgeomTGeo::GetNDetectors(iLayer), + 0.5,AliITSgeomTGeo::GetNDetectors(iLayer)+0.5); + fHistSSDOccupancyLadder[occupancyCounter]->GetXaxis()->SetTitleColor(1); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLadder[occupancyCounter], + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + occupancyCounter += 1; fSSDRawsOffset += 1; + }//ladder loop + }//layer loop + + //top level occupancy plots + //occupancy per module - no threshold + TH2F *fHistSSDOccupancyLayer5 = new TH2F("fHistSSDOccupancyLayer5", + "SSD Occupancy (Layer 5) - No threshold;N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER5, + 0,fgkSSDMODULESPERLADDERLAYER5, + 3*fgkSSDLADDERSLAYER5, + 500,500+fgkSSDLADDERSLAYER5); + fHistSSDOccupancyLayer5->GetZaxis()->SetRangeUser(0.0,100.0); + Char_t fLabel[3]; + for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){ + snprintf(fLabel,2,"%d",iBin); + fHistSSDOccupancyLayer5->GetXaxis()->SetBinLabel(iBin,fLabel); + } + fHistSSDOccupancyLayer5->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLayer5, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + TH2F *fHistSSDOccupancyLayer6 = new TH2F("fHistSSDOccupancyLayer6", + "Occupancy per module (Layer 6) - No threshold;N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER6, + 0,fgkSSDMODULESPERLADDERLAYER6, + 3*fgkSSDLADDERSLAYER6, + 600,600+fgkSSDLADDERSLAYER6); + fHistSSDOccupancyLayer6->GetZaxis()->SetRangeUser(0.0,100.0); + for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){ + snprintf(fLabel,2,"%d",iBin); + fHistSSDOccupancyLayer6->GetXaxis()->SetBinLabel(iBin,fLabel); + } + fHistSSDOccupancyLayer6->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyLayer6, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + + //occupancy per module - threshold @ 3% + TH2F *fHistSSDOccupancyThresholdLayer5 = new TH2F("fHistSSDOccupancyThresholdLayer5", + "Occupancy per module (Layer 5) - Threshold 3%;N_{modules};N_{Ladders};Entries", + fgkSSDMODULESPERLADDERLAYER5, + 0,fgkSSDMODULESPERLADDERLAYER5, + 3*fgkSSDLADDERSLAYER5, + 500,500+fgkSSDLADDERSLAYER5); + fHistSSDOccupancyThresholdLayer5->GetZaxis()->SetRangeUser(3.0,10.0); + for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){ + snprintf(fLabel,2,"%d",iBin); + fHistSSDOccupancyThresholdLayer5->GetXaxis()->SetBinLabel(iBin,fLabel); + } + fHistSSDOccupancyThresholdLayer5->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyThresholdLayer5, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + TH2F *fHistSSDOccupancyThresholdLayer6 = new TH2F("fHistSSDOccupancyThresholdLayer6", + "Occupancy per module (Layer 6) - Threshold 3%;N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER6, + 0,fgkSSDMODULESPERLADDERLAYER6, + 3*fgkSSDLADDERSLAYER6, + 600,600+fgkSSDLADDERSLAYER6); + fHistSSDOccupancyThresholdLayer6->GetZaxis()->SetRangeUser(3.0,10.0); + for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){ + snprintf(fLabel,2,"%d",iBin); + fHistSSDOccupancyThresholdLayer6->GetXaxis()->SetBinLabel(iBin,fLabel); + } + fHistSSDOccupancyThresholdLayer6->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDOccupancyThresholdLayer6, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; + + //Average occupancy per module + TH2F *fHistSSDAverageOccupancyLayer5 = new TH2F("fHistSSDAverageOccupancyLayer5", + "Average occupancy per module (Layer 5);N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER5, + 0,fgkSSDMODULESPERLADDERLAYER5, + 3*fgkSSDLADDERSLAYER5, + 500,500+fgkSSDLADDERSLAYER5); + fHistSSDAverageOccupancyLayer5->GetZaxis()->SetRangeUser(0.0,5.0); + for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){ + snprintf(fLabel,2,"%d",iBin); + fHistSSDAverageOccupancyLayer5->GetXaxis()->SetBinLabel(iBin,fLabel); + } + fHistSSDAverageOccupancyLayer5->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDAverageOccupancyLayer5, + offsRw+fSSDRawsOffset, !expert, image, !saveCorr); + fSSDRawsOffset += 1; + TH2F *fHistSSDAverageOccupancyLayer6 = new TH2F("fHistSSDAverageOccupancyLayer6", + "Average occupancy per module (Layer 6);N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER6, + 0,fgkSSDMODULESPERLADDERLAYER6, + 3*fgkSSDLADDERSLAYER6, + 600,600+fgkSSDLADDERSLAYER6); + fHistSSDAverageOccupancyLayer6->GetZaxis()->SetRangeUser(0.0,5.0); + for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){ + snprintf(fLabel,2,"%d",iBin); + fHistSSDAverageOccupancyLayer6->GetXaxis()->SetBinLabel(iBin,fLabel); + } + fHistSSDAverageOccupancyLayer6->SetStats(kFALSE); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDAverageOccupancyLayer6, + offsRw+fSSDRawsOffset, !expert, image, !saveCorr); + fSSDRawsOffset += 1; + + //Output of the DA + TH2F *fHistSSDPSideBadChannelMapLayer5 = new TH2F("fHistSSDPSideBadChannelMapLayer5", + "Layer 5;N_{module};N_{ladder}", + 22,1,23, + 34,500,534); + fHistSSDPSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); + fHistSSDPSideBadChannelMapLayer5->SetStats(kFALSE); + fHistSSDPSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); + fHistSSDPSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); + fHistSSDPSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); + fHistSSDPSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); + fHistSSDPSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); + fHistSSDPSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); + fHistSSDPSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideBadChannelMapLayer5, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + + TH2F *fHistSSDNSideBadChannelMapLayer5 = new TH2F("fHistSSDNSideBadChannelMapLayer5", + "Layer 5;N_{module};N_{ladder}", + 22,1,23, + 34,500,534); + fHistSSDNSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); + fHistSSDNSideBadChannelMapLayer5->SetStats(kFALSE); + fHistSSDNSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); + fHistSSDNSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); + fHistSSDNSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); + fHistSSDNSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); + fHistSSDNSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); + fHistSSDNSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); + fHistSSDNSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideBadChannelMapLayer5, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + + TH2F *fHistSSDPSideBadChannelMapLayer6 = new TH2F("fHistSSDPSideBadChannelMapLayer6", + "Layer 6;N_{module};N_{ladder}", + 25,1,26, + 38,600,638); + fHistSSDPSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); + fHistSSDPSideBadChannelMapLayer6->SetStats(kFALSE); + fHistSSDPSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); + fHistSSDPSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); + fHistSSDPSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); + fHistSSDPSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); + fHistSSDPSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); + fHistSSDPSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); + fHistSSDPSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideBadChannelMapLayer6, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + + TH2F *fHistSSDNSideBadChannelMapLayer6 = new TH2F("fHistSSDNSideBadChannelMapLayer6", + "Layer 6;N_{module};N_{ladder}", + 25,1,26, + 38,600,638); + fHistSSDNSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); + fHistSSDNSideBadChannelMapLayer6->SetStats(kFALSE); + fHistSSDNSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); + fHistSSDNSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); + fHistSSDNSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); + fHistSSDNSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); + fHistSSDNSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); + fHistSSDNSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); + fHistSSDNSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideBadChannelMapLayer6, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + + //Common mode values + TH2F *fHistSSDPSideCommonModeMapLayer5 = new TH2F("fHistSSDPSideCommonModeMapLayer5", + "Layer 5 - CM (P-side);N_{module};N_{ladder}", + 22,1,23, + 34,500,534); + fHistSSDPSideCommonModeMapLayer5->GetXaxis()->SetTitleColor(1); + fHistSSDPSideCommonModeMapLayer5->SetStats(kFALSE); + fHistSSDPSideCommonModeMapLayer5->GetYaxis()->SetTitleOffset(1.8); + fHistSSDPSideCommonModeMapLayer5->GetXaxis()->SetNdivisions(22); + fHistSSDPSideCommonModeMapLayer5->GetYaxis()->SetNdivisions(34); + fHistSSDPSideCommonModeMapLayer5->GetXaxis()->SetLabelSize(0.03); + fHistSSDPSideCommonModeMapLayer5->GetYaxis()->SetLabelSize(0.03); + fHistSSDPSideCommonModeMapLayer5->GetZaxis()->SetTitleOffset(1.6); + fHistSSDPSideCommonModeMapLayer5->GetZaxis()->SetTitle("RMS(CM) (P-side)"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideCommonModeMapLayer5, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + + TH2F *fHistSSDNSideCommonModeMapLayer5 = new TH2F("fHistSSDNSideCommonModeMapLayer5", + "Layer 5 - CM (N-side);N_{module};N_{ladder}", + 22,1,23, + 34,500,534); + fHistSSDNSideCommonModeMapLayer5->GetXaxis()->SetTitleColor(1); + fHistSSDNSideCommonModeMapLayer5->SetStats(kFALSE); + fHistSSDNSideCommonModeMapLayer5->GetYaxis()->SetTitleOffset(1.8); + fHistSSDNSideCommonModeMapLayer5->GetXaxis()->SetNdivisions(22); + fHistSSDNSideCommonModeMapLayer5->GetYaxis()->SetNdivisions(34); + fHistSSDNSideCommonModeMapLayer5->GetXaxis()->SetLabelSize(0.03); + fHistSSDNSideCommonModeMapLayer5->GetYaxis()->SetLabelSize(0.03); + fHistSSDNSideCommonModeMapLayer5->GetZaxis()->SetTitleOffset(1.6); + fHistSSDNSideCommonModeMapLayer5->GetZaxis()->SetTitle("RMS(CM) (N-side)"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideCommonModeMapLayer5, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + + TH2F *fHistSSDPSideCommonModeMapLayer6 = new TH2F("fHistSSDPSideCommonModeMapLayer6", + "Layer 6 - CM (P-side);N_{module};N_{ladder}", + 25,1,26, + 38,600,638); + fHistSSDPSideCommonModeMapLayer6->GetXaxis()->SetTitleColor(1); + fHistSSDPSideCommonModeMapLayer6->SetStats(kFALSE); + fHistSSDPSideCommonModeMapLayer6->GetYaxis()->SetTitleOffset(1.8); + fHistSSDPSideCommonModeMapLayer6->GetXaxis()->SetNdivisions(25); + fHistSSDPSideCommonModeMapLayer6->GetYaxis()->SetNdivisions(38); + fHistSSDPSideCommonModeMapLayer6->GetXaxis()->SetLabelSize(0.03); + fHistSSDPSideCommonModeMapLayer6->GetYaxis()->SetLabelSize(0.03); + fHistSSDPSideCommonModeMapLayer6->GetZaxis()->SetTitleOffset(1.6); + fHistSSDPSideCommonModeMapLayer6->GetZaxis()->SetTitle("RMS(CM) (P-side)"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDPSideCommonModeMapLayer6, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + + TH2F *fHistSSDNSideCommonModeMapLayer6 = new TH2F("fHistSSDNSideCommonModeMapLayer6", + "Layer 6 - CM (N-side);N_{module};N_{ladder}", + 25,1,26, + 38,600,638); + fHistSSDNSideCommonModeMapLayer6->GetXaxis()->SetTitleColor(1); + fHistSSDNSideCommonModeMapLayer6->SetStats(kFALSE); + fHistSSDNSideCommonModeMapLayer6->GetYaxis()->SetTitleOffset(1.8); + fHistSSDNSideCommonModeMapLayer6->GetXaxis()->SetNdivisions(25); + fHistSSDNSideCommonModeMapLayer6->GetYaxis()->SetNdivisions(38); + fHistSSDNSideCommonModeMapLayer6->GetXaxis()->SetLabelSize(0.03); + fHistSSDNSideCommonModeMapLayer6->GetYaxis()->SetLabelSize(0.03); + fHistSSDNSideCommonModeMapLayer6->GetZaxis()->SetTitleOffset(1.6); + fHistSSDNSideCommonModeMapLayer6->GetZaxis()->SetTitle("RMS(CM) (N-side)"); + rv = fAliITSQADataMakerRec->Add2RawsList(fHistSSDNSideCommonModeMapLayer6, + offsRw+fSSDRawsOffset, expert, !image, !saveCorr); + fSSDRawsOffset += 1; fSSDRawsDAOffset += 1; + }//online flag + + fSSDhRawsTask = fSSDRawsOffset; + AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Raws histograms booked\n",fSSDhRawsTask)); + AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDhRawsTask)); + AliDebug(AliQAv1::GetQADebugLevel(),Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDRawsOffset)); + + /* + fSSDhTask = fSSDRawsOffset; + AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Raws histograms booked\n",fSSDhTask)); + AliDebug(AliQAv1::GetQADebugLevel(), Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDhTask)); + AliDebug(AliQAv1::GetQADebugLevel(),Form("Number of histograms (SPD+SDD+SSD): %d\n",offsRw+fSSDRawsOffset)); + */ + + + //} //event species loop + + return rv ; + + +} + +//____________________________________________________________________________ +Int_t AliITSQASSDDataMakerRec::MakeRaws(AliRawReader* rawReader) +{ + // Fill QA for RAW - SSD - + Int_t rv = 0 ; + Int_t gStripNumber; + Int_t gHistPosition; + Int_t gLayer = 0,gLadder = 0, gModule = 0; + + Double_t gSizePerDDL[fgkNumOfDDLs] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; + Double_t gSizePerLDC[fgkNumOfLDCs] = {0.,0.,0.,0.,0.,0.,0.,0.}; + Double_t sumSSDDataSize = 0.0; + Double_t eventSize = -1.0; + + // RS: I've commented this loop over species: makes no sense in the event loop + // for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + // if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; + int specie = fAliITSQADataMakerRec->GetEventSpecie(); + //cout << "MakeRaws: Event specie " << specie << " is set" << endl; + // + int offsRw = fGenRawsOffset[specie]; + // + //AliInfo(Form("offsRw %d\n",offsRw)); + if(fkOnline) { + //reset the signal vs strip number histograms + for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) + fHistSSDRawSignalModule[iModule]->Reset(); + }//online flag + + rawReader->Select("ITSSSD",-1,-1); + rawReader->Reset(); //rawReader->NextEvent(); + //AliInfo(Form("offsRw %d\n",offsRw)); + fAliITSQADataMakerRec->FillRawsData(offsRw,rawReader->GetType()); + + AliITSRawStreamSSD gSSDStream(rawReader); + AliRawReaderRoot *rootReader = (AliRawReaderRoot *)rawReader; + if(rootReader) { + const AliRawEventHeaderBase *header = rootReader->GetEventHeader(); + if(header) + eventSize = header->GetEventSize(); + } + while (gSSDStream.Next()) { + if(gSSDStream.GetModuleID() < 0) continue; + /*cout<<"DDL: "<GetDDLID()<< + " - LDC: "<GetLDCId()<< + " - Size: "<GetDataSize()<< + " - Equipment size: "<GetEquipmentSize()<GetDDLID(); + if(ddlid<0){ + AliError("GetDDLID returns a negative value"); + continue; + } + gSizePerDDL[ddlid] = rawReader->GetDataSize(); + //gSizePerLDC[rawReader->GetLDCId()-8] = rawReader->GetDataSize(); + AliITSgeomTGeo::GetModuleId(gSSDStream.GetModuleID(),gLayer,gLadder,gModule); + gHistPosition = (gLayer == 5) ? ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + gModule - 1) : ((gLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + gModule + fgkSSDMODULESLAYER5 - 1); + if(fkOnline) { + if(gSSDStream.GetStrip() < 0) { + //Printf("Layer: %d - Ladder: %d - Module: %d - Strip: %d - Signal: %lf",gLayer,gLadder,gModule,gSSDStream.GetStrip(),gSSDStream.GetSignal()); + if(TMath::Abs(gSSDStream.GetStrip()) < 7) + fHistSSDCMModule[gHistPosition]->Fill(gSSDStream.GetSignal()); + if(TMath::Abs(gSSDStream.GetStrip()) > 6) + fHistSSDCMModule[fgkSSDMODULES+gHistPosition]->Fill(gSSDStream.GetSignal()); + }//CM values + else { + gStripNumber = (gSSDStream.GetSideFlag() == 0) ? gSSDStream.GetStrip() : -gSSDStream.GetStrip() + 2*fgkNumberOfPSideStrips; + //AliDebug(AliQAv1::GetQADebugLevel(), Form("ModulePosition: %d - Layer: %d - Ladder: %d - Module: %d\n",gHistPosition,gLayer,gLadder,gModule)); + fHistSSDRawSignalModule[gHistPosition]->Fill(gStripNumber,gSSDStream.GetSignal()); + //fAliITSQADataMakerRec->FillRawsData(offsRw+gHistPosition+fSSDRawsCommonLevelOffset,gStripNumber,gSSDStream.GetSignal()); + }//normal strip signal + }//online flag + }//streamer loop + + //event size calculation and filling info + for(Int_t i = 0; i < fgkNumOfDDLs; i++) { + sumSSDDataSize += gSizePerDDL[i]; + if(gSizePerDDL[i] > 0) { + fAliITSQADataMakerRec->FillRawsData(offsRw+3,i+512); + fAliITSQADataMakerRec->FillRawsData(offsRw+5+i,gSizePerDDL[i]/1e+03); + //if(i == 5) + //cout<FillRawsData(offsRw+4),i+512,gSizePerDDL[i]/1e+06); + } + for(Int_t i = 0; i < fgkNumOfLDCs; i++) { + //LDC 170 + if(i == 0) + gSizePerLDC[i] = gSizePerDDL[8] + gSizePerDDL[9]; + //LDC 171 + if(i == 1) + gSizePerLDC[i] = gSizePerDDL[10] + gSizePerDDL[11]; + //LDC 172 + if(i == 2) + gSizePerLDC[i] = gSizePerDDL[12] + gSizePerDDL[13]; + //LDC 173 + if(i == 3) + gSizePerLDC[i] = gSizePerDDL[14] + gSizePerDDL[15]; + //LDC 174 + if(i == 4) + gSizePerLDC[i] = gSizePerDDL[0] + gSizePerDDL[1]; + //LDC 175 + if(i == 5) + gSizePerLDC[i] = gSizePerDDL[2] + gSizePerDDL[3]; + //LDC 176 + if(i == 6) + gSizePerLDC[i] = gSizePerDDL[4] + gSizePerDDL[5]; + //LDC 177 + if(i == 7) + gSizePerLDC[i] = gSizePerDDL[6] + gSizePerDDL[7]; + + if(gSizePerLDC[i] > 0) fAliITSQADataMakerRec->FillRawsData(offsRw+21,i+170); + fAliITSQADataMakerRec->FillRawsData(offsRw+23+i,gSizePerLDC[i]/1e+03); + //cout<<"Event: "<FillRawsData(offsRw+22),i+6,gSizePerLDC[i]/1e+06); + } + + // RS Invalid + // for(Int_t i = 0; i < fgkNumOfDDLs; i++) { + // Double_t gSizePerDDL = ((TH1F *)fAliITSQADataMakerRec->GetRawsData(offsRw+5+i))->GetMean(); + //if(i == 5) + //cout<<"DDL: "<GetRawsData(offsRw+5+i))->GetMean()<FillRawsData(offsRw+1,sumSSDDataSize/1e+03); + if(eventSize) fAliITSQADataMakerRec->FillRawsData(offsRw+2,100.*sumSSDDataSize/eventSize); + + //Occupancy calculation + if(fkOnline) { + for(Int_t iModule = 0; iModule < fgkSSDMODULES; iModule++) { + GetOccupancyStrip(fHistSSDRawSignalModule[iModule],fOccupancyMatrix[iModule]); + //if(iModule == 156) { + //cout<<"========================================"<GetXaxis()->GetNbins(); iBin++) { + if((iBin >= 750)&&(iBin <= 780)) + cout<<"Event: "<GetBinContent(iBin)< to be removed + //}//module cut --> to be removed + }//module loop + }//online flag for SSD + + // RS Invalid + //cout<<"Event type entries: "<<((TH1*)fAliITSQADataMakerRec->GetRawsData(offsRw))->GetEntries()<GetRawsData(offsRw+3))->GetEntries()<< endl; + //cout<<"LDC id entries at MR: "<<((TH1F *)fAliITSQADataMakerRec->GetRawsData(offsRw+21))->GetEntries()<< endl; + + // } //event species loop // commented by RS + // + return rv ; +} + +//____________________________________________________________________________ // +void AliITSQASSDDataMakerRec::GetOccupancyStrip(TH1 *lHisto, Int_t *occupancyMatrix) { + //Increments the entries in the occupancy matrix based + //on whether the signal for each strip is larger than the cutoff + //Currently the cutoff is at 0 which means that if ZS + //works, whatever comes from the FEROM is considered as "signal" + //Double_t cutoff = 0.0; + TString histname = lHisto->GetName(); + //cout<GetXaxis()->GetNbins(); iBin++) { + Double_t y = lHisto->GetBinContent(iBin); + if(y) { + occupancyMatrix[iBin-1] += 1; + } + //if((iBin >= 750)&&(iBin <= 780)) + //cout<<"Strip: "<0 or # of sigmas wrt noise ? + //stripside == 0 --> P-side + //stripside == 1 --> N-side + Int_t lNumFiredBins = 0; + Double_t sumOccupancy = 0.0; + TString histname = lHisto->GetName(); + for(Int_t iBin = 1 + stripside*fgkNumberOfPSideStrips; iBin < fgkNumberOfPSideStrips*(1 + stripside); iBin++){ + /*if(histname.Contains("Layer5_Ladder507_Module3")) { + cout<GetName()<< + " - Strip: "<GetBinContent(iBin)<GetBinContent(iBin) > threshold) { + lNumFiredBins++; + sumOccupancy = lHisto->GetBinContent(iBin); + } + } + + Double_t lOccupancy = 0.0; + if((mode == 0)||(mode == 1)) + lOccupancy = (100.*lNumFiredBins)/fgkNumberOfPSideStrips; // percentage + else if(mode == 2) + lOccupancy = 100.*sumOccupancy/fgkNumberOfPSideStrips; + + /* if(histname.Contains("Layer5_Ladder507_Module3")) + cout<<"Fired strips: "<GetNbinsX(),lOccupancy)); + + return lOccupancy; +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerRec::MonitorCMValues(Int_t trCl) +{ + //Monitor in AMORE the CM values + //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; + //cout << "MonitorCMValues: Event specie " << specie << " is set" << endl; + Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); + int offsRw = fGenRawsOffset[specie]; + + //compute the rms of the CM values + Int_t gLayer = 0, gLadder = 0, gModule = 0; + Double_t rmsPsideCM = 0.0, rmsNsideCM = 0.0; + for(Int_t i = 0; i < fgkSSDMODULES; i++) { + rmsPsideCM = 0.0; rmsNsideCM = 0.0; + AliITSgeomTGeo::GetModuleId(i+500,gLayer,gLadder,gModule); + //Printf("%s - %s",((TH1*)list->At(i))->GetName(), + //((TH1*)list->At(1698+i))->GetName()); + rmsPsideCM = fHistSSDCMModule[i]->GetRMS(); + rmsNsideCM = fHistSSDCMModule[fgkSSDMODULES+i]->GetRMS(); + //Printf("rmsPside: %lf - rmsNside: %lf",rmsPsideCM,rmsNsideCM); + if(gLayer == 5) { + TH2* h4 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+4,trCl); + if (h4) h4->SetBinContent(gModule,gLadder,rmsPsideCM); + TH2* h5 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+5,trCl); + if (h5) h5->SetBinContent(gModule,gLadder,rmsNsideCM); + } + if(gLayer == 6) { + TH2* h6 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+6,trCl); + if (h6) h6->SetBinContent(gModule,gLadder,rmsPsideCM); + TH2* h7 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+7,trCl); + if (h7) h7->SetBinContent(gModule,gLadder,rmsNsideCM); + } + }//module loopcdcd + //}//event species loop +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerRec::MonitorOCDBObjects(Int_t trCl) +{ + //Monitor in AMORE the output of the DA + //Currently only the bad channel list is monitored + //Todo: Noise - Pedestal + + + //for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) { + //if (!AliQAv1::Instance()->IsEventSpecieSet(specie)) continue; + //cout << "MonitorOCDBObjects: Event specie " << specie << " is set" << endl; + Int_t specie = fAliITSQADataMakerRec->GetEventSpecie(); + int offsRw = fGenRawsOffset[specie]; + fAliITSQADataMakerRec->SetEventSpecie(AliRecoParam::ConvertIndex(specie)); + + //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset)); + //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+1)); + //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+2)); + //((TH2F *)fAliITSQADataMakerRec->ResetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+3)); + + AliCDBEntry *entryBadChannelsSSD = fCDBManager->Get("ITS/Calib/BadChannelsSSD"); + if(!entryBadChannelsSSD)AliError("OCDB entry for the bad channel list is not valid!"); + AliITSBadChannelsSSDv2 *badchannelsSSD = NULL; + if(entryBadChannelsSSD)badchannelsSSD = (AliITSBadChannelsSSDv2 *)entryBadChannelsSSD->GetObject(); + if(!badchannelsSSD) + AliError("Bad channel list object is not a valid AliITSBadChannelsSSD object!"); + + //_____________________________________________________________________________// + Int_t nBadPSideChannels = 0, nBadNSideChannels = 0; + Int_t layer = 0, ladder = 0, module = 0; + Int_t nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; + Int_t nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; + //_____________________________________________________________________________// + + for(Int_t i = 0; i < fgkSSDMODULES; i++) { + AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module); + nBadPSideChannels = 0, nBadNSideChannels = 0; + nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; + nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; + + Int_t badChannel = 0; + if(badchannelsSSD){ + for(Int_t j = 0; j < fgkNumberOfPSideStrips; j++) { + badChannel = (Int_t)(badchannelsSSD->GetBadChannelP(i,j)); + if(badChannel != 0) { + if(layer == 5) + nPSideChannelsLayer5 += 1; + if(layer == 6) + nPSideChannelsLayer6 += 1; + nBadPSideChannels += 1; + }//badchannel flag != 0 + badChannel = (Int_t)(badchannelsSSD->GetBadChannelN(i,j)); + if(badChannel != 0) { + if(layer == 5) + nNSideChannelsLayer5 += 1; + if(layer == 6) + nNSideChannelsLayer6 += 1; + nBadNSideChannels += 1; + }//badchannel flag != 0 + }//loop over strips + } + + //cout << "Bad channels P side module " << module << ": " << nBadPSideChannels << endl; + //cout << "Bad channels N side module " << module << ": " << nBadNSideChannels << endl; + + if(layer == 5) { + /*if((module == 10)&&(ladder == 10)) { + cout<<"Npside bad: "<GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset,trCl); + if (h0) { + if(nPSideChannelsLayer5 > 0) h0->SetBinContent(module,ladder,100.*nPSideChannelsLayer5/fgkNumberOfPSideStrips); + else h0->SetBinContent(module,ladder,0.0001); + } + TH2* h1 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+1,trCl); + if (h1) { + if(nNSideChannelsLayer5 > 0) h1->SetBinContent(module,ladder,100.*nNSideChannelsLayer5/fgkNumberOfPSideStrips); + else h1->SetBinContent(module,ladder,0.0001); + } + }//layer 5 + if(layer == 6) { + TH2* h2 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+2,trCl); + if (h2) { + if(nPSideChannelsLayer6 > 0) h2->SetBinContent(module,ladder,100.*nPSideChannelsLayer6/fgkNumberOfPSideStrips); + else h2->SetBinContent(module,ladder,0.0001); + } + TH2* h3 = (TH2*)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+3,trCl); + if (h3) { + if(nNSideChannelsLayer6 > 0) h3->SetBinContent(module,ladder,100.*nNSideChannelsLayer6/fgkNumberOfPSideStrips); + else h3->SetBinContent(module,ladder,0.0001); + } + }//layer 6 + }//module loop + + //cout << "entries bad channel layer 5 n side " << ((TH2F *)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset+1))->GetEntries() << " - Bad channels P side layer 5 module 10 ladder 10: " << ((TH2F *)fAliITSQADataMakerRec->GetRawsData(offsRw+fSSDRawsOffset-fSSDRawsDAOffset))->GetBinContent(10,10)<fDigitsQAList[AliRecoParam::kDefault])->GetEntries(); + + // custom code here + TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule", + ";SSD Module Number;N_{DIGITS}", + 1698,499.5,2197.5); + rv = fAliITSQADataMakerRec->Add2DigitsList(fHistSSDModule, + fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0, !expert, image); + fSSDhDigitsTask += 1; + TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip", + ";N_{Strip};N_{Module}", + 1540,0,1540,1698,499.5,2197.5); + rv = fAliITSQADataMakerRec->Add2DigitsList(fHistSSDModuleStrip, + fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1, !expert, image); + fSSDhDigitsTask += 1; + + AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Digits histograms booked\n",fSSDhDigitsTask)); + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASSDDataMakerRec::MakeDigits(TTree *digits) +{ + // Fill QA for DIGIT - SSD - + // AliITS *fITS = (AliITS*)gAlice->GetModule("ITS"); + // fITS->SetTreeAddress(); + // TClonesArray *iSSDdigits = fITS->DigitsAddress(2); + // + Int_t rv = 0 ; + TBranch *branchD = digits->GetBranch("ITSDigitsSSD"); + if (!branchD) { + AliError("can't get the branch with the SSD ITS digits !"); + return rv; + } + + static TClonesArray statDigits("AliITSdigitSSD"); + TClonesArray *iSSDdigits = &statDigits; + branchD->SetAddress(&iSSDdigits); + for(Int_t iModule = 500; iModule < 2198; iModule++) { + iSSDdigits->Clear(); + digits->GetEvent(iModule); + Int_t ndigits = iSSDdigits->GetEntries(); + //printf("Module = %i \t ndigits = %i\t offset = %i \n",iModule,ndigits,fAliITSQADataMakerRec->GetEventSpecie() ); + fAliITSQADataMakerRec->FillDigitsData(fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0,iModule,ndigits); + if(ndigits != 0) + AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Digits: %d",iModule,ndigits)); + + for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) { + AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit); + Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips; + fAliITSQADataMakerRec->FillDigitsData(fGenDigitsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1,fStripNumber,iModule,dig->GetSignal()); + }//digit loop + }//module loop + // + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASSDDataMakerRec::InitRecPoints() +{ + // Initialization for RECPOINTS - SSD - + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + Int_t rv = 0 ; + //AliInfo(Form("fAliITSQADataMakerRec->GetEventSpecie() %d\n",fAliITSQADataMakerRec->GetEventSpecie())); + //AliInfo(Form("fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] %d\n",fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])); + // fGenRecPointsOffset = (fAliITSQADataMakerRec->fRecPointsQAList[AliRecoParam::kDefault])->GetEntries(); + //AliDebug(AliQAv1::GetQADebugLevel(), Form("**-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints offset %d \t %d \n",fGenOffset,fGenRecPointsOffset)); + Int_t nModuleOffset = 500; + Int_t nITSTotalModules = AliITSgeomTGeo::GetNModules(); + + TH1F *fHistSSDModuleIdLayer5 = new TH1F("fHistSSDModuleIdLayer5", + "Module Id - Layer 5;Module Id;Entries", + fgkSSDMODULESLAYER5, + nModuleOffset - 0.5, + nITSTotalModules-fgkSSDMODULESLAYER6+0.5); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDModuleIdLayer6 = new TH1F("fHistSSDModuleIdLayer6", + "Module Id - Layer 6;Module Id;Entries", + fgkSSDMODULESLAYER6, + nModuleOffset+fgkSSDMODULESLAYER5 - 0.5, + nITSTotalModules + 0.5); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDModuleIdLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDClusterPerEventLayer5 = new TH1F("fHistSSDClusterPerEventLayer5", + "N_{clusters} - Layer 5;N_{clusters};Entries;", + 100,0.1,5000); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterPerEventLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 2, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDClusterPerEventLayer6 = new TH1F("fHistSSDClusterPerEventLayer6", + "N_{clusters} - Layer 6;N_{clusters};Entries;", + 100,0.1,5000); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterPerEventLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 3, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDLocalXLayer5 = new TH1F("fHistSSDLocalXLayer5", + "Local x coord.- Layer 5;x [cm];Entries;", + 100,-4.,4.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 4, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDLocalXLayer6 = new TH1F("fHistSSDLocalXLayer6", + "Local x coord.- Layer 6;x [cm];Entries;", + 100,-4.,4.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalXLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 5, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDLocalZLayer5 = new TH1F("fHistSSDLocalZLayer5", + "Local z coord.- Layer 5;z [cm];Entries;", + 100,-4.,4.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 6, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDLocalZLayer6 = new TH1F("fHistSSDLocalZLayer6", + "Local z coord.- Layer 6;z [cm];Entries;", + 100,-4.,4.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDLocalZLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 7, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDGlobalXLayer5 = new TH1F("fHistSSDGlobalXLayer5", + "Global x - Layer 5;x [cm];Entries;", + 100,-40.,40.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 8, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDGlobalXLayer6 = new TH1F("fHistSSDGlobalXLayer6", + "Global x - Layer 6;x [cm];Entries;", + 100,-45.,45.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalXLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 9, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDGlobalYLayer5 = new TH1F("fHistSSDGlobalYLayer5", + "Global y - Layer 5;y [cm];Entries;", + 100,-40.,40); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 10, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDGlobalYLayer6 = new TH1F("fHistSSDGlobalYLayer6", + "Global y - Layer 6;y [cm];Entries;", + 100,-45.,45.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalYLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 11, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDGlobalZLayer5 = new TH1F("fHistSSDGlobalZLayer5", + "Global z - Layer 5;z [cm];Entries;", + 100,-45.,45); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 12, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDGlobalZLayer6 = new TH1F("fHistSSDGlobalZLayer6", + "Global z - Layer 6;z [cm];Entries;", + 100,-55.,55.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDGlobalZLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 13, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDPhiLayer5 = new TH1F("fHistSSDPhiLayer5", + "#phi - Layer 5;#phi [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 14, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDPhiLayer6 = new TH1F("fHistSSDPhiLayer6", + "#phi - Layer 6;#phi [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDPhiLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 15, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDThetaLayer5 = new TH1F("fHistSSDThetaLayer5", + "#theta - Layer 5;#theta [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 16, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDThetaLayer6 = new TH1F("fHistSSDThetaLayer6", + "#theta - Layer 6;#theta [rad];Entries;", + 100,-TMath::Pi(),TMath::Pi()); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDThetaLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 17, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDRadiusLayer5 = new TH1F("fHistSSDRadiusLayer5", + "r - Layer 5;r [cm];Entries;", + 100,35.,50.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 18, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDRadiusLayer6 = new TH1F("fHistSSDRadiusLayer6", + "r - Layer 6;r [cm];Entries;", + 100,35.,50.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDRadiusLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 19, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDClusterTypeLayer5 = new TH1F("fHistSSDClusterTypeLayer5", + "CL type - Layer 5;Cluster type;Entries;", + 150,0,150); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 20, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDClusterTypeLayer6 = new TH1F("fHistSSDClusterTypeLayer6", + "CL type - Layer 6;Cluster type;Entries;", + 150,0,150); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterTypeLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 21, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargeRatioLayer5 = new TH1F("fHistSSDChargeRatioLayer5", + "Charge ratio - Layer 5;q_{ratio};Entries;", + 100,-2.0,2.0); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 22, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargeRatioLayer6 = new TH1F("fHistSSDChargeRatioLayer6", + "Charge ratio - Layer 6;q_{ratio};Entries;", + 100,-2.0,2.0); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatioLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 23, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargekeVLayer5 = new TH1F("fHistSSDChargekeVLayer5", + "Charge - Layer 5;q [keV];Entries;", + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 24, !expert, image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargekeVLayer6 = new TH1F("fHistSSDChargekeVLayer6", + "Charge - Layer 6;q [keV];Entries;", + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargekeVLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 25, !expert, image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargePSideLayer5 = new TH1F("fHistSSDChargePSideLayer5", + "Charge P- Layer 5;q_{P} [keV];Entries;", + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePSideLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 26, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargePSideLayer6 = new TH1F("fHistSSDChargePSideLayer6", + "Charge P- Layer 6;q_{P} [keV];Entries;", + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePSideLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 27, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargeNSideLayer5 = new TH1F("fHistSSDChargeNSideLayer5", + "Charge N- Layer 5;q_{N} [keV];Entries;", + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeNSideLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 28, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargeNSideLayer6 = new TH1F("fHistSSDChargeNSideLayer6", + "Charge N- Layer 6;q_{N} [keV];Entries;", + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeNSideLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 29, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargeRatio2Layer5 = new TH1F("fHistSSDChargeRatio2Layer5", + "Charge Ratio qN/qP - Layer 5;q_{N}/q_{P};Entries;", + 100,0,2); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatio2Layer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 30, expert, !image); + fSSDhRecPointsTask += 1; + TH1F *fHistSSDChargeRatio2Layer6 = new TH1F("fHistSSDChargeRatio2Layer6", + "Charge Ratio qN/qP - Layer 6;q_{N}/q_{P};Entries;", + 100,0,2); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeRatio2Layer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 31, expert, !image); + fSSDhRecPointsTask += 1; + TH2F *fHistSSDChargePNSideLayer5 = new TH2F("fHistSSDChargePNSideLayer5", + "Charge correlation - Layer 5;q_{P} [keV];q_{N} [keV]", + 100,0.,300., + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePNSideLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 32, expert, !image); + fSSDhRecPointsTask += 1; + TH2F *fHistSSDChargePNSideLayer6 = new TH2F("fHistSSDChargePNSideLayer6", + "Charge correlation - Layer 6;q_{P} [keV];q_{N} [keV]", + 100,0.,300., + 100,0.,300.); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargePNSideLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 33, expert, !image); + fSSDhRecPointsTask += 1; + TH2F *fHistSSDChargeMapLayer5 = new TH2F("fHistSSDChargeMapLayer5", + "Charge map;N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER5, + -0.5,fgkSSDMODULESPERLADDERLAYER5+0.5, + 3*fgkSSDLADDERSLAYER5, + -0.5,fgkSSDLADDERSLAYER5+0.5); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 34, expert, !image); + fSSDhRecPointsTask += 1; + TH2F *fHistSSDChargeMapLayer6 = new TH2F("fHistSSDChargeMapLayer6", + "Charge map;N_{modules};N_{Ladders}", + fgkSSDMODULESPERLADDERLAYER6, + -0.5,fgkSSDMODULESPERLADDERLAYER6+0.5, + 3*fgkSSDLADDERSLAYER6, + -0.5,fgkSSDLADDERSLAYER6+0.5); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDChargeMapLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 35, expert, !image); + fSSDhRecPointsTask += 1; + TH2F *fHistSSDClusterMapLayer5 = new TH2F("fHistSSDClusterMapLayer5", + "Layer 5;N_{module};N_{ladder}", + 22,1,23, + 34,500,534); + fHistSSDClusterMapLayer5->GetXaxis()->SetTitleColor(1); + fHistSSDClusterMapLayer5->SetStats(kFALSE); + fHistSSDClusterMapLayer5->GetYaxis()->SetTitleOffset(1.8); + fHistSSDClusterMapLayer5->GetXaxis()->SetNdivisions(22); + fHistSSDClusterMapLayer5->GetYaxis()->SetNdivisions(34); + fHistSSDClusterMapLayer5->GetXaxis()->SetLabelSize(0.03); + fHistSSDClusterMapLayer5->GetYaxis()->SetLabelSize(0.03); + fHistSSDClusterMapLayer5->GetZaxis()->SetTitleOffset(1.4); + fHistSSDClusterMapLayer5->GetZaxis()->SetTitle("N_{clusters}"); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterMapLayer5, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 36, !expert, image); + fSSDhRecPointsTask += 1; + TH2F *fHistSSDClusterMapLayer6 = new TH2F("fHistSSDClusterMapLayer6", + "Layer 6;N_{module};N_{ladder}", + 25,1,26, + 38,600,638); + fHistSSDClusterMapLayer6->GetXaxis()->SetTitleColor(1); + fHistSSDClusterMapLayer6->SetStats(kFALSE); + fHistSSDClusterMapLayer6->GetYaxis()->SetTitleOffset(1.8); + fHistSSDClusterMapLayer6->GetXaxis()->SetNdivisions(25); + fHistSSDClusterMapLayer6->GetYaxis()->SetNdivisions(38); + fHistSSDClusterMapLayer6->GetXaxis()->SetLabelSize(0.03); + fHistSSDClusterMapLayer6->GetYaxis()->SetLabelSize(0.03); + fHistSSDClusterMapLayer6->GetZaxis()->SetTitleOffset(1.4); + fHistSSDClusterMapLayer6->GetZaxis()->SetTitle("N_{clusters}"); + rv = fAliITSQADataMakerRec->Add2RecPointsList(fHistSSDClusterMapLayer6, + fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 37, !expert, image); + fSSDhRecPointsTask += 1; + //printf ("%d SSD Recs histograms booked\n",fSSDhRecPointsTask); + AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Recs histograms booked\n",fSSDhRecPointsTask)); + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASSDDataMakerRec::MakeRecPoints(TTree *clustersTree) +{ + // Fill QA for recpoints - SSD - + //printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints called \n"); + // + Int_t rv = 0 ; + Int_t gLayer = 0, gLadder = 0, gModule = 0; + Int_t lLadderLocationY = 0; + TClonesArray *recpoints = NULL; + AliITSRecPointContainer* rpcont=AliITSRecPointContainer::Instance(); + rpcont->FetchClusters(0,clustersTree); + if(!rpcont->GetStatusOK() || !rpcont->IsSSDActive()){ + AliError("can't get SSD clusters !"); + return rv; + } + + //AliInfo(Form("fAliITSQADataMakerRec->GetEventSpecie() %d\n",fAliITSQADataMakerRec->GetEventSpecie())); + //AliInfo(Form("fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] %d\n",fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()])); + Int_t nClustersLayer5 = 0, nClustersLayer6 = 0; + Int_t npoints = 0; + Float_t cluglo[3]={0.,0.,0.}; + //printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints STEP1 \n"); + // AliITSgeomTGeo::GetModuleIndex() issues an error in case the arguments + // are illegal and returns -1 + Int_t firMod = TMath::Max(0,AliITSgeomTGeo::GetModuleIndex(5,1,1)); + Int_t lasMod = AliITSgeomTGeo::GetNModules(); + for(Int_t module = firMod; module < lasMod; module++){ + recpoints = rpcont->UncheckedGetClusters(module); + npoints += recpoints->GetEntries(); + AliITSgeomTGeo::GetModuleId(module,gLayer,gLadder,gModule); + //printf("SSDDataMAkerRec:::::::::::::::::::::::gLayer ========== %d \n\n",gLayer); + lLadderLocationY = 3*gLadder; + ////printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints inside loop \n"); + for(Int_t j = 0;j < recpoints->GetEntries(); j++){ + ////printf("*-*-*-*-*-*-*---*-*-*-------*-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints inside loop 2\n"); + AliITSRecPoint *recp = (AliITSRecPoint*)recpoints->At(j); + Int_t layer = recp->GetLayer(); + //printf("SSDDataMAkerRec:::::::::::::::::::::::layer ========== %d \n\n",layer); + recp->GetGlobalXYZ(cluglo); + Float_t radius = TMath::Sqrt(cluglo[0]*cluglo[0]+cluglo[1]*cluglo[1]); + Float_t phi = TMath::ATan2(cluglo[1],cluglo[0]); + Float_t theta = TMath::ATan2(radius,cluglo[2]); + Double_t chargeRatio = recp->GetChargeRatio(); + Double_t clusterCharge = recp->GetQ(); + Double_t chargePSide = clusterCharge*(1. + chargeRatio); + Double_t chargeNSide = clusterCharge*(1. - chargeRatio); + if(layer == 4) { + //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling 4 called \n"); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 20,recp->GetType()); + + if(recp->GetType() != 1) continue; + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 0,module); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 4,recp->GetDetLocalX()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 6,recp->GetDetLocalZ()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 8,cluglo[0]); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 10,cluglo[1]); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 12,cluglo[2]); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 14,phi); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 16,theta); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 18,radius); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 22,recp->GetChargeRatio()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 24,recp->GetQ()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 26,chargePSide); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 28,chargeNSide); + if(chargePSide != 0.) fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 30,chargeNSide/chargePSide); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 32,chargePSide,chargeNSide); + fAliITSQADataMakerRec->SetRecPointsDataBinContent(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 34,gModule,lLadderLocationY,recp->GetQ()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 36,gModule,499+gLadder,1); + nClustersLayer5 += 1; + }//layer 5 histograms + if(layer == 5) { + //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling 5 called \n"); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 21,recp->GetType()); + + if(recp->GetType() != 1) continue; + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 1,module); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 5,recp->GetDetLocalX()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 7,recp->GetDetLocalZ()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 9,cluglo[0]); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 11,cluglo[1]); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 13,cluglo[2]); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 15,phi); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 17,theta); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 19,radius); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 23,recp->GetChargeRatio()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 25,recp->GetQ()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 27,chargePSide); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 29,chargeNSide); + if(chargePSide != 0.) fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 31,chargeNSide/chargePSide); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 33,chargePSide,chargeNSide); + fAliITSQADataMakerRec->SetRecPointsDataBinContent(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 35,gModule,lLadderLocationY,recp->GetQ()); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 37,gModule,599+gLadder,1); + nClustersLayer6 += 1; + }//layer 6 histograms + }//rec. points loop + }//module loop + + //printf("-*-*-*-*-*-***************AliITSQASSDataMakerRec::MakeRecpoints Filling called \n"); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 2,nClustersLayer5); + fAliITSQADataMakerRec->FillRecPointsData(fGenRecPointsOffset[fAliITSQADataMakerRec->GetEventSpecie()] + 3,nClustersLayer6); + // + return rv ; +} + +//____________________________________________________________________________ +Int_t AliITSQASSDDataMakerRec::GetOffset(AliQAv1::TASKINDEX_t task,Int_t specie) const { + // Returns offset number according to the specified task + Int_t offset=0; + if( task == AliQAv1::kRAWS ) { + offset=fGenRawsOffset[specie]; + } + else if( task == AliQAv1::kDIGITSR ) { + offset=fGenDigitsOffset[specie]; + } + else if( task == AliQAv1::kRECPOINTS ) { + offset=fGenRecPointsOffset[specie]; + } + + return offset; +} + +//_______________________________________________________________ + +void AliITSQASSDDataMakerRec::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset, Int_t specie) { + // Returns offset number according to the specified task + if( task == AliQAv1::kRAWS ) { + fGenRawsOffset[specie]=offset; + } + else if( task == AliQAv1::kDIGITSR ) { + fGenDigitsOffset[specie]=offset; + } + else if( task == AliQAv1::kRECPOINTS ) { + fGenRecPointsOffset[specie]=offset; + } +} + +//____________________________________________________________________________ +Int_t AliITSQASSDDataMakerRec::GetTaskHisto(AliQAv1::TASKINDEX_t task) { + // Returns the number of histograms associated to the specified task + Int_t histotot=0; + + if( task == AliQAv1::kRAWS ) { + histotot=fSSDhRawsTask; + } + else if( task == AliQAv1::kDIGITSR ) { + histotot=fSSDhDigitsTask; + } + else if( task == AliQAv1::kRECPOINTS ){ + histotot=fSSDhRecPointsTask; + } + else { + AliWarning("No task has been selected. TaskHisto set to zero.\n"); + } + + return histotot; +} + +//____________________________________________________________________________ +void AliITSQASSDDataMakerRec::ResetDetector(AliQAv1::TASKINDEX_t task) +{ + if(task==AliQAv1::kRAWS) { + ResetRawsMonitoredObjects(); + } + +} diff --git a/ITS/AliITSV0Finder.cxx b/ITS/AliITSV0Finder.cxx index c414dc54252..fef4e3367bc 100644 --- a/ITS/AliITSV0Finder.cxx +++ b/ITS/AliITSV0Finder.cxx @@ -1,1147 +1,1147 @@ -/************************************************************************** - * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -/* $Id$ */ - -//------------------------------------------------------------------------- -// Implementation of the on-the-fly v0 finder for ITS tracker MI -// Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch -// Extraction from AliITStrackerMI: Andrea Dainese -// Current support and development: -//------------------------------------------------------------------------- - -#include -#include -#include -#include -#include - - -#include "AliLog.h" -#include "AliESDVertex.h" -#include "AliESDEvent.h" -#include "AliESDtrack.h" -#include "AliESDV0Params.h" -#include "AliV0.h" -#include "AliHelix.h" -#include "AliITSRecPoint.h" -#include "AliITSReconstructor.h" -#include "AliITStrackerMI.h" -#include "AliITSV0Finder.h" -#include "AliKFParticle.h" -#include "AliKFVertex.h" - -ClassImp(AliITSV0Finder) - - -AliITSV0Finder::AliITSV0Finder(): -fDebugStreamer(0) - { - //Default constructor - - if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) - fDebugStreamer = new TTreeSRedirector("ITSdebug.root"); -} - -//------------------------------------------------------------------------ -void AliITSV0Finder::UpdateTPCV0(const AliESDEvent *event, - AliITStrackerMI *tracker) -{ - // - //try to update, or reject TPC V0s - // - const Float_t kMinTgl2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl2(); - - TObjArray *trackHypothesys = tracker->GetTrackHypothesys(); - - Int_t nv0s = event->GetNumberOfV0s(); - Int_t nitstracks = trackHypothesys->GetEntriesFast(); - - for (Int_t i=0;iGetV0(i); - Int_t ip = vertex->GetIndex(0); - Int_t im = vertex->GetIndex(1); - // - TObjArray * arrayp = (ipAt(ip):0; - TObjArray * arraym = (imAt(im):0; - AliITStrackMI * trackp = (arrayp!=0) ? (AliITStrackMI*)arrayp->At(0):0; - AliITStrackMI * trackm = (arraym!=0) ? (AliITStrackMI*)arraym->At(0):0; - // - // - if (trackp){ - if (trackp->GetNumberOfClusters()+trackp->GetNDeadZone()>5.5){ - if (trackp->GetConstrain()&&trackp->GetChi2MIP(0)<3) vertex->SetStatus(-100); - if (!trackp->GetConstrain()&&trackp->GetChi2MIP(0)<2) vertex->SetStatus(-100); - } - } - - if (trackm){ - if (trackm->GetNumberOfClusters()+trackm->GetNDeadZone()>5.5){ - if (trackm->GetConstrain()&&trackm->GetChi2MIP(0)<3) vertex->SetStatus(-100); - if (!trackm->GetConstrain()&&trackm->GetChi2MIP(0)<2) vertex->SetStatus(-100); - } - } - if (vertex->GetStatus()==-100) continue; - // - Double_t xrp[3]; vertex->GetXYZ(xrp[0],xrp[1],xrp[2]); //I.B. - Int_t clayer = tracker->GetNearestLayer(xrp); //I.B. - vertex->SetNBefore(clayer); // - vertex->SetChi2Before(9*clayer); // - vertex->SetNAfter(6-clayer); // - vertex->SetChi2After(0); // - // - if (clayer >1 ){ // calculate chi2 before vertex - Float_t chi2p = 0, chi2m=0; - // - if (trackp){ - for (Int_t ilayer=0;ilayerGetClIndex(ilayer)>=0){ - chi2p+=trackp->GetDy(ilayer)*trackp->GetDy(ilayer)/(trackp->GetSigmaY(ilayer)*trackp->GetSigmaY(ilayer))+ - trackp->GetDz(ilayer)*trackp->GetDz(ilayer)/(trackp->GetSigmaZ(ilayer)*trackp->GetSigmaZ(ilayer)); - } - else{ - chi2p+=9; - } - } - }else{ - chi2p = 9*clayer; - } - // - if (trackm){ - for (Int_t ilayer=0;ilayerGetClIndex(ilayer)>=0){ - chi2m+=trackm->GetDy(ilayer)*trackm->GetDy(ilayer)/(trackm->GetSigmaY(ilayer)*trackm->GetSigmaY(ilayer))+ - trackm->GetDz(ilayer)*trackm->GetDz(ilayer)/(trackm->GetSigmaZ(ilayer)*trackm->GetSigmaZ(ilayer)); - } - else{ - chi2m+=9; - } - } - }else{ - chi2m = 9*clayer; - } - vertex->SetChi2Before(TMath::Min(chi2p,chi2m)); - if (TMath::Min(chi2p,chi2m)/Float_t(clayer)<4) vertex->SetStatus(-10); // track exist before vertex - } - - if (clayer < 5 ){ // calculate chi2 after vertex - Float_t chi2p = 0, chi2m=0; - // - if (trackp&&TMath::Abs(trackp->GetTgl())GetClIndex(ilayer)>=0){ - chi2p+=trackp->GetDy(ilayer)*trackp->GetDy(ilayer)/(trackp->GetSigmaY(ilayer)*trackp->GetSigmaY(ilayer))+ - trackp->GetDz(ilayer)*trackp->GetDz(ilayer)/(trackp->GetSigmaZ(ilayer)*trackp->GetSigmaZ(ilayer)); - } - else{ - chi2p+=9; - } - } - }else{ - chi2p = 0; - } - // - if (trackm&&TMath::Abs(trackm->GetTgl())GetClIndex(ilayer)>=0){ - chi2m+=trackm->GetDy(ilayer)*trackm->GetDy(ilayer)/(trackm->GetSigmaY(ilayer)*trackm->GetSigmaY(ilayer))+ - trackm->GetDz(ilayer)*trackm->GetDz(ilayer)/(trackm->GetSigmaZ(ilayer)*trackm->GetSigmaZ(ilayer)); - } - else{ - chi2m+=9; - } - } - }else{ - chi2m = 0; - } - vertex->SetChi2After(TMath::Max(chi2p,chi2m)); - if (TMath::Max(chi2m,chi2p)/Float_t(6-clayer)>9) vertex->SetStatus(-20); // track not found in ITS - } - } - // -} -//------------------------------------------------------------------------ -void AliITSV0Finder::FindV02(AliESDEvent *event, - AliITStrackerMI *tracker) -{ - // - // V0 finder - // - // Cuts on DCA - R dependent - // max distance DCA between 2 tracks cut - // maxDist = TMath::Min(kMaxDist,kMaxDist0+pvertex->GetRr()*kMaxDist); - // - const Bool_t kCheckPropagate = kFALSE; - const Float_t kMaxDist0 = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDist0(); - const Float_t kMaxDist1 = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDist1(); - const Float_t kMaxDist = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDist(); - const Float_t kMinPointAngle = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPointAngle(); - const Float_t kMinPointAngle2 = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPointAngle2(); - const Float_t kMinR = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinR(); - const Float_t kMaxR = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxR(); - const Float_t kMinPABestConst = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPABestConst(); - const Float_t kMaxRBestConst = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRBestConst(); - const Float_t kCausality0Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetCausality0Cut(); - const Float_t kLikelihood01Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetLikelihood01Cut(); - const Float_t kLikelihood1Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetLikelihood1Cut(); - const Float_t kCombinedCut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetCombinedCut(); - const Float_t kMinClFullTrk= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinClFullTrk(); - const Float_t kMinTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl0(); - const Float_t kMinRTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinRTgl0(); - - const Float_t kMinNormDistForbTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForbTgl0(); - const Float_t kMinClForb0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinClForb0(); - const Float_t kMinNormDistForb1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb1(); - const Float_t kMinNormDistForb2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb2(); - const Float_t kMinNormDistForb3= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb3(); - const Float_t kMinNormDistForb4= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb4(); - const Float_t kMinNormDistForb5= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb5(); - const Float_t kMinNormDistForbProt= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForbProt(); - const Float_t kMaxPidProbPionForb= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxPidProbPionForb(); - - const Float_t kMinRTPCdensity= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinRTPCdensity(); - const Float_t kMaxRTPCdensity0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity0(); - const Float_t kMaxRTPCdensity10= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity10(); - const Float_t kMaxRTPCdensity20= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity20(); - const Float_t kMaxRTPCdensity30= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity30(); - - - const Float_t kMinTPCdensity= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTPCdensity(); - const Float_t kMinTgl1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl1(); - - const Float_t kMinchi2before0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2before0(); - const Float_t kMinchi2before1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2before1(); - const Float_t kMinchi2after0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2after0(); - const Float_t kMinchi2after1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2after1(); - const Float_t kAddchi2SharedCl= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetAddchi2SharedCl(); - const Float_t kAddchi2NegCl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetAddchi2NegCl0(); - const Float_t kAddchi2NegCl1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetAddchi2NegCl1(); - - const Float_t kSigp0Par0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigp0Par0(); - const Float_t kSigp0Par1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigp0Par1(); - const Float_t kSigp0Par2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigp0Par2(); - - const Float_t kSigpPar0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar0(); - const Float_t kSigpPar1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar1(); - const Float_t kSigpPar2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar2(); - const Float_t kMaxDcaLh0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDcaLh0(); - - - TObjArray *trackHypothesys = tracker->GetTrackHypothesys(); - TObjArray *bestHypothesys = tracker->GetBestHypothesys(); - TObjArray *originalTracks = tracker->GetOriginal(); - // - // - TTreeSRedirector &cstream = *(tracker->GetDebugStreamer()); - Int_t ntracks = event->GetNumberOfTracks(); - Int_t nitstracks = originalTracks->GetEntriesFast(); - originalTracks->Expand(ntracks); - trackHypothesys->Expand(ntracks); - bestHypothesys->Expand(ntracks); - // - AliHelix * helixes = new AliHelix[ntracks+2]; - TObjArray trackarray(ntracks+2); //array with tracks - with vertex constrain - TObjArray trackarrayc(ntracks+2); //array of "best tracks" - without vertex constrain - TObjArray trackarrayl(ntracks+2); //array of "longest tracks" - without vertex constrain - //Change from Bool_t to Int_t for optimization - // Int_t forbN=0; - // Int_t * forbidden = new Int_t [ntracks+2]; - Bool_t * forbidden = new Bool_t [ntracks+2]; - Int_t *itsmap = new Int_t [ntracks+2]; - Float_t *dist = new Float_t[ntracks+2]; - Float_t *normdist0 = new Float_t[ntracks+2]; - Float_t *normdist1 = new Float_t[ntracks+2]; - Float_t *normdist = new Float_t[ntracks+2]; - Float_t *norm = new Float_t[ntracks+2]; - Float_t *maxr = new Float_t[ntracks+2]; - Float_t *minr = new Float_t[ntracks+2]; - Float_t *minPointAngle= new Float_t[ntracks+2]; - // - AliV0 *pvertex = new AliV0; - AliITStrackMI * dummy= new AliITStrackMI; - dummy->SetLabel(0); - AliITStrackMI trackat0; //temporary track for DCA calculation - // - Float_t primvertex[3]={tracker->GetX(),tracker->GetY(),tracker->GetZ()}; - // - // make ITS - ESD map - // - for (Int_t itrack=0;itrackAt(itrack)); - Int_t esdindex = original->GetESDtrack()->GetID(); - itsmap[esdindex] = itrack; - } - // - // create ITS tracks from ESD tracks if not done before - // - for (Int_t itrack=0;itrack=0) continue; - AliITStrackMI * tpctrack = new AliITStrackMI(*(event->GetTrack(itrack))); - //tpctrack->fD[0] = tpctrack->GetD(GetX(),GetY()); - //tpctrack->fD[1] = tpctrack->GetZat(GetX())-GetZ(); - tpctrack->GetDZ(tracker->GetX(),tracker->GetY(),tracker->GetZ(),tpctrack->GetDP()); //I.B. - if (tpctrack->GetD(0)<20 && tpctrack->GetD(1)<20){ - // tracks which can reach inner part of ITS - // propagate track to outer its volume - with correction for material - AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(tpctrack); - } - itsmap[itrack] = nitstracks; - originalTracks->AddAt(tpctrack,nitstracks); - nitstracks++; - } - // - // fill temporary arrays - // - for (Int_t itrack=0;itrackGetTrack(itrack); - Int_t itsindex = itsmap[itrack]; - AliITStrackMI *original = (AliITStrackMI*)originalTracks->At(itsmap[itrack]); - if (!original) continue; - AliITStrackMI *bestConst = 0; - AliITStrackMI *bestLong = 0; - AliITStrackMI *best = 0; - // - // - TObjArray * array = (TObjArray*) trackHypothesys->At(itsindex); - Int_t hentries = (array==0) ? 0 : array->GetEntriesFast(); - // Get best track with vertex constrain - for (Int_t ih=0;ihAt(ih); - if (!trackh->GetConstrain()) continue; - if (!bestConst) bestConst = trackh; - if (trackh->GetNumberOfClusters()>kMinClFullTrk ){ - bestConst = trackh; // full track - with minimal chi2 - break; - } - if (trackh->GetNumberOfClusters()+trackh->GetNDeadZone()<=bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()) continue; - bestConst = trackh; - break; - } - // Get best long track without vertex constrain and best track without vertex constrain - for (Int_t ih=0;ihAt(ih); - if (trackh->GetConstrain()) continue; - if (!best) best = trackh; - if (!bestLong) bestLong = trackh; - if (trackh->GetNumberOfClusters()>kMinClFullTrk){ - bestLong = trackh; // full track - with minimal chi2 - break; - } - if (trackh->GetNumberOfClusters()+trackh->GetNDeadZone()<=bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()) continue; - bestLong = trackh; - } - if (!best) { - best = original; - bestLong = original; - } - //I.B. trackat0 = *bestLong; - new (&trackat0) AliITStrackMI(*bestLong); - Double_t xx,yy,zz,alpha; - if (!bestLong->GetGlobalXYZat(bestLong->GetX(),xx,yy,zz)) continue; - - - alpha = TMath::ATan2(yy,xx); - // if (!trackat0.Propagate(alpha,0)) continue; - // trackat0.Propagate(alpha,0); //PH The check on the return value is temporarily disabled (bug 45751) - if(!trackat0.Propagate(alpha,0) && kCheckPropagate)continue; - // calculate normalized distances to the vertex - // - Float_t ptfac = (1.+100.*TMath::Abs(trackat0.GetC())); - if ( bestLong->GetNumberOfClusters()>3 ){ - dist[itsindex] = trackat0.GetY(); - norm[itsindex] = ptfac*TMath::Sqrt(trackat0.GetSigmaY2()); - normdist0[itsindex] = TMath::Abs(trackat0.GetY()/norm[itsindex]); - normdist1[itsindex] = TMath::Abs((trackat0.GetZ()-primvertex[2])/(ptfac*TMath::Sqrt(trackat0.GetSigmaZ2()))); - normdist[itsindex] = TMath::Sqrt(normdist0[itsindex]*normdist0[itsindex]+normdist1[itsindex]*normdist1[itsindex]); - if (!bestConst){ - if (bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()<6) normdist[itsindex]*=2.; - if (bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()<5) normdist[itsindex]*=2.; - if (bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()<4) normdist[itsindex]*=2.; - }else{ - if (bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()<6) normdist[itsindex]*=1.5; - if (bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()<5) normdist[itsindex]*=1.5; - } - } - else{ - if (bestConst&&bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()>4.5){ - dist[itsindex] = bestConst->GetD(0); - norm[itsindex] = bestConst->GetDnorm(0); - normdist0[itsindex] = TMath::Abs(bestConst->GetD(0)/norm[itsindex]); - normdist1[itsindex] = TMath::Abs(bestConst->GetD(0)/norm[itsindex]); - normdist[itsindex] = TMath::Sqrt(normdist0[itsindex]*normdist0[itsindex]+normdist1[itsindex]*normdist1[itsindex]); - }else{ - dist[itsindex] = trackat0.GetY(); - norm[itsindex] = ptfac*TMath::Sqrt(trackat0.GetSigmaY2()); - normdist0[itsindex] = TMath::Abs(trackat0.GetY()/norm[itsindex]); - normdist1[itsindex] = TMath::Abs((trackat0.GetZ()-primvertex[2])/(ptfac*TMath::Sqrt(trackat0.GetSigmaZ2()))); - normdist[itsindex] = TMath::Sqrt(normdist0[itsindex]*normdist0[itsindex]+normdist1[itsindex]*normdist1[itsindex]); - if (TMath::Abs(trackat0.GetTgl())>kMinTgl0){ - if (normdist[itsindex]kMinNormDistForbTgl0) { - minr[itsindex] = TMath::Max(kMinRTgl0,minr[itsindex]); - } - } - } - } - - - // - //----------------------------------------------------------- - //Forbid primary track candidates - - // - //treetr->SetAlias("forbidden0","Tr0.fN<4&&Tr1.fN+Tr1.fNDeadZone>4.5"); - //treetr->SetAlias("forbidden1","ND<3&&Tr1.fN+Tr1.fNDeadZone>5.5"); - //treetr->SetAlias("forbidden2","ND<2&&Tr1.fClIndex[0]>0&&Tr1.fClIndex[0]>0"); - //treetr->SetAlias("forbidden3","ND<1&&Tr1.fClIndex[0]>0"); - //treetr->SetAlias("forbidden4","ND<4&&Tr1.fNormChi2[0]<2"); - //treetr->SetAlias("forbidden5","ND<5&&Tr1.fNormChi2[0]<1"); - //----------------------------------------------------------- - if (bestConst){ - if (bestLong->GetNumberOfClusters()<4 && bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()>kMinClForb0){ - // forbN=2; - // forbidden[itsindex]+=1<GetNumberOfClusters()+bestConst->GetNDeadZone()>5.5){ - // forbN=3; - // forbidden[itsindex]+=1<GetClIndex(0)>=0 && bestConst->GetClIndex(1)>=0 ){ - // forbN=4; - // forbidden[itsindex]+=1<GetClIndex(0)>=0){ - // forbN=5; - // forbidden[itsindex]+=1<GetNormChi2(0)<2){ - // forbN=6; - // forbidden[itsindex]+=1<GetNormChi2(0)<1){ - // forbN=7; - // forbidden[itsindex]+=1<GetNormChi2(0)<2.5) { - minPointAngle[itsindex]= kMinPABestConst; - maxr[itsindex] = kMaxRBestConst; - } - } - // - //forbid daughter kink candidates - // - if (esdtrack->GetKinkIndex(0)>0) forbidden[itsindex] = kTRUE; - Bool_t isElectron = kTRUE; - Bool_t isProton = kTRUE; - Double_t pid[5]; - esdtrack->GetESDpid(pid); - for (Int_t i=1;i<5;i++){ - if (pid[0]kMinNormDistForbProt) forbidden[itsindex]=kFALSE; - normdist[itsindex]*=-1; - } - - // We allow all tracks that are not pions - if( (pid[1]+pid[2])< kMaxPidProbPionForb ){ - forbidden[itsindex]=kFALSE; - } - - // - // Causality cuts in TPC volume - // - if (esdtrack->GetTPCdensity(0,10) >kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity0),maxr[itsindex]); - if (esdtrack->GetTPCdensity(10,30)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity10),maxr[itsindex]); - if (esdtrack->GetTPCdensity(20,40)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity20),maxr[itsindex]); - if (esdtrack->GetTPCdensity(30,50)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity30),maxr[itsindex]); - // - if (esdtrack->GetTPCdensity(0,60)<0.4&&bestLong->GetNumberOfClusters()<3) minr[itsindex]=kMinRTPCdensity; - // - // - - if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0){ - cstream<<"Track"<< - "Tr0.="<GetSign()==btrack1->GetSign()) && !AliITSReconstructor::GetRecoParam()->GetStoreLikeSignV0s()) continue; - - Bool_t isGold = kFALSE; - if (TMath::Abs(TMath::Abs(btrack0->GetLabel())-TMath::Abs(btrack1->GetLabel()))==1){ - isGold = kTRUE; - } - // rejectBase=0; - AliITStrackMI *trackc1 = (AliITStrackMI*)trackarrayc.At(itrack1); - AliHelix &h1 = helixes[itrack0]; - AliHelix &h2 = helixes[itrack1]; - // - // find linear distance - Double_t rmin =0; - // - // - // - Double_t phase[2][2]={{0.,0.},{0.,0.}}; - Double_t radius[2]={0.,0.}; - Int_t points = h1.GetRPHIintersections(h2, phase, radius); - if (points==0) { - // cutN=1; - // rejectBase+=1<TMath::Min(maxr[itrack0],maxr[itrack1])){ - // cutN=3; - // rejectBase+=1<maxDist){ - // cutN=4; - // rejectBase+=1<maxDist) continue; - // if (pvertex->GetRr()GetRr()>kMaxR) continue; - AliITStrackMI * track0=btrack0; - AliITStrackMI * track1=btrack1; - // if (pvertex->GetRr()<3.5){ - if (radiusC<3.5){ - //use longest tracks inside the pipe - track0 = (AliITStrackMI*)trackarrayl.At(itrack0); - track1 = (AliITStrackMI*)trackarrayl.At(itrack1); - } - // - // - - - - pvertex->SetParamN(*track0); - pvertex->SetParamP(*track1); - pvertex->Update(primvertex); - pvertex->SetClusters(track0->ClIndex(),track1->ClIndex()); // register clusters - - // Define gamma, K0, lambda and lambda_bar from the decay particles and calculate the chi2 - AliKFVertex vertexKF; - - vertexKF.X() = tracker->GetX(); - vertexKF.Y() = tracker->GetY(); - vertexKF.Z() = tracker->GetZ(); - vertexKF.Covariance(0,0) = tracker->GetSigmaX()*tracker->GetSigmaX(); - vertexKF.Covariance(1,2) = tracker->GetSigmaY()*tracker->GetSigmaY(); - vertexKF.Covariance(2,2) = tracker->GetSigmaZ()*tracker->GetSigmaZ(); - - AliKFParticle elecKF( *(pvertex->GetParamN()) ,11); - AliKFParticle posiKF( *(pvertex->GetParamP()) ,-11); - AliKFParticle pipKF( *(pvertex->GetParamN()) , 211); - AliKFParticle pinKF( *(pvertex->GetParamP()) ,-211); - AliKFParticle protKF( *(pvertex->GetParamP()) ,2212); - AliKFParticle aproKF ( *(pvertex->GetParamN()) ,-2212); - - - // Gamma - AliKFParticle gamKF(elecKF,posiKF); - gamKF.SetProductionVertex(vertexKF); - - Float_t gamKFchi2 = 1000; - if ( gamKF.GetNDF()!=0 ){ - gamKFchi2 = gamKF.GetChi2()/gamKF.GetNDF(); - } - - Float_t massG=0.; - Float_t sigmaMG=0.001; - gamKF.SetMassConstraint(massG,sigmaMG); - - Float_t gamKFchi2C = 1000; - if ( gamKF.GetNDF()!=0 ){ - gamKFchi2C = gamKF.GetChi2()/gamKF.GetNDF(); - } - - //K0 short - AliKFParticle k0KF(pipKF,pinKF); - k0KF.SetProductionVertex(vertexKF); - - Float_t k0KFchi2 = 1000; - if ( k0KF.GetNDF()!=0 ){ - k0KFchi2 = k0KF.GetChi2()/k0KF.GetNDF(); - } - - //Lambda - AliKFParticle lambdaKF(protKF,pinKF); - lambdaKF.SetProductionVertex(vertexKF); - - Float_t lambdaKFchi2 = 1000; - if ( lambdaKF.GetNDF()!=0 ){ - lambdaKFchi2 = lambdaKF.GetChi2()/lambdaKF.GetNDF(); - } - - //Lambda_bar - AliKFParticle alambKF(aproKF,pipKF); - alambKF.SetProductionVertex(vertexKF); - - Float_t alambKFchi2 = 1000; - if ( alambKF.GetNDF()!=0 ){ - alambKFchi2 = alambKF.GetChi2()/alambKF.GetNDF(); - } - - - - - - if (pvertex->GetRr()GetRr()>kMaxR){ - // cutN=7; - // rejectBase+=1<GetV0CosineOfPointingAngle()GetDist2()>maxDist) continue; - - if (pvertex->GetDcaV0Daughters()>maxDist){ - // cutN=9; - // rejectBase+=1<SetLab(0,track0->GetLabel()); -//Bo: pvertex->SetLab(1,track1->GetLabel()); - pvertex->SetIndex(0,track0->GetESDtrack()->GetID()); - pvertex->SetIndex(1,track1->GetESDtrack()->GetID()); - // - AliITStrackMI * htrackc0 = trackc0 ? trackc0:dummy; - AliITStrackMI * htrackc1 = trackc1 ? trackc1:dummy; - - // - // - TObjArray * array0b = (TObjArray*)bestHypothesys->At(itrack0); - if (!array0b&&pvertex->GetRr()<40 && TMath::Abs(track0->GetTgl())SetCurrentEsdTrack(itrack0); - tracker->FollowProlongationTree((AliITStrackMI*)originalTracks->At(itrack0),itrack0, kFALSE); - } - TObjArray * array1b = (TObjArray*)bestHypothesys->At(itrack1); - if (!array1b&&pvertex->GetRr()<40 && TMath::Abs(track1->GetTgl())SetCurrentEsdTrack(itrack1); - tracker->FollowProlongationTree((AliITStrackMI*)originalTracks->At(itrack1),itrack1, kFALSE); - } - // - AliITStrackMI * track0b = (AliITStrackMI*)originalTracks->At(itrack0); - AliITStrackMI * track1b = (AliITStrackMI*)originalTracks->At(itrack1); - AliITStrackMI * track0l = (AliITStrackMI*)originalTracks->At(itrack0); - AliITStrackMI * track1l = (AliITStrackMI*)originalTracks->At(itrack1); - - Float_t minchi2before0=kMinchi2before0; - Float_t minchi2before1=kMinchi2before1; - Float_t minchi2after0 =kMinchi2after0; - Float_t minchi2after1 =kMinchi2after1; - Double_t xrp[3]; pvertex->GetXYZ(xrp[0],xrp[1],xrp[2]); //I.B. - Int_t maxLayer = tracker->GetNearestLayer(xrp); //I.B. - - if (array0b) for (Int_t i=0;i<5;i++){ - // best track after vertex - AliITStrackMI * btrack = (AliITStrackMI*)array0b->At(i); - if (!btrack) continue; - if (btrack->GetNumberOfClusters()>track0l->GetNumberOfClusters()) track0l = btrack; - // if (btrack->fXGetRr()-2.-0.5/(0.1+pvertex->GetAnglep()[2])) { - if (btrack->GetX()GetRr()-2.) { - if ( (maxLayer>i+2|| (i==0)) && btrack->GetNumberOfClusters()==(6-i)&&i<3){ - Float_t sumchi2= 0; - Float_t sumn = 0; - if (maxLayer<3){ // take prim vertex as additional measurement - if (normdist[itrack0]>0 && htrackc0){ - sumchi2 += TMath::Min((3.-maxLayer)*normdist[itrack0]*normdist[itrack0],16.); - }else{ - sumchi2 += TMath::Min((3.-maxLayer)*(3*normdist[itrack0]*normdist[itrack0]+3.),16.); - } - sumn += 3-maxLayer; - } - for (Int_t ilayer=i;ilayerGetClIndex(ilayer)<0){ - sumchi2+=kAddchi2NegCl0; - continue; - }else{ - Int_t c=( btrack->GetClIndex(ilayer) & 0x0fffffff); - for (Int_t itrack=0;itrack<4;itrack++){ - AliITStrackerMI::AliITSlayer &layer=tracker->GetLayer(ilayer); - if (layer.GetClusterTracks(itrack,c)>=0 && layer.GetClusterTracks(itrack,c)!=itrack0){ - sumchi2+=kAddchi2SharedCl; //shared cluster - break; - } - } - sumchi2+=btrack->GetDy(ilayer)*btrack->GetDy(ilayer)/(btrack->GetSigmaY(ilayer)*btrack->GetSigmaY(ilayer)); - sumchi2+=btrack->GetDz(ilayer)*btrack->GetDz(ilayer)/(btrack->GetSigmaZ(ilayer)*btrack->GetSigmaZ(ilayer)); - } - } - sumchi2/=sumn; - if (sumchi2GetNormChi2(i); - break; - } - if (array1b) for (Int_t i=0;i<5;i++){ - // best track after vertex - AliITStrackMI * btrack = (AliITStrackMI*)array1b->At(i); - if (!btrack) continue; - if (btrack->GetNumberOfClusters()>track1l->GetNumberOfClusters()) track1l = btrack; - // if (btrack->fXGetRr()-2-0.5/(0.1+pvertex->GetAnglep()[2])){ - if (btrack->GetX()GetRr()-2){ - if ((maxLayer>i+2 || (i==0))&&btrack->GetNumberOfClusters()==(6-i)&&(i<3)){ - Float_t sumchi2= 0; - Float_t sumn = 0; - if (maxLayer<3){ // take prim vertex as additional measurement - if (normdist[itrack1]>0 && htrackc1){ - sumchi2 += TMath::Min((3.-maxLayer)*normdist[itrack1]*normdist[itrack1],16.); - }else{ - sumchi2 += TMath::Min((3.-maxLayer)*(3*normdist[itrack1]*normdist[itrack1]+3.),16.); - } - sumn += 3-maxLayer; - } - for (Int_t ilayer=i;ilayerGetClIndex(ilayer)<0){ - sumchi2+=kAddchi2NegCl1; - continue; - }else{ - Int_t c=( btrack->GetClIndex(ilayer) & 0x0fffffff); - for (Int_t itrack=0;itrack<4;itrack++){ - AliITStrackerMI::AliITSlayer &layer=tracker->GetLayer(ilayer); - if (layer.GetClusterTracks(itrack,c)>=0 && layer.GetClusterTracks(itrack,c)!=itrack1){ - sumchi2+=kAddchi2SharedCl; //shared cluster - break; - } - } - sumchi2+=btrack->GetDy(ilayer)*btrack->GetDy(ilayer)/(btrack->GetSigmaY(ilayer)*btrack->GetSigmaY(ilayer)); - sumchi2+=btrack->GetDz(ilayer)*btrack->GetDz(ilayer)/(btrack->GetSigmaZ(ilayer)*btrack->GetSigmaZ(ilayer)); - } - } - sumchi2/=sumn; - if (sumchi2GetNormChi2(i); - break; - } - // - // position resolution - used for DCA cut - Float_t sigmad = track0b->GetSigmaY2()+track0b->GetSigmaZ2()+track1b->GetSigmaY2()+track1b->GetSigmaZ2()+ - (track0b->GetX()-pvertex->GetRr())*(track0b->GetX()-pvertex->GetRr())*(track0b->GetSigmaSnp2()+track0b->GetSigmaTgl2())+ - (track1b->GetX()-pvertex->GetRr())*(track1b->GetX()-pvertex->GetRr())*(track1b->GetSigmaSnp2()+track1b->GetSigmaTgl2()); - sigmad =TMath::Sqrt(sigmad)+0.04; - if (pvertex->GetRr()>50){ - Double_t cov0[15],cov1[15]; - track0b->GetESDtrack()->GetInnerExternalCovariance(cov0); - track1b->GetESDtrack()->GetInnerExternalCovariance(cov1); - sigmad = cov0[0]+cov0[2]+cov1[0]+cov1[2]+ - (80.-pvertex->GetRr())*(80.-pvertex->GetRr())*(cov0[5]+cov0[9])+ - (80.-pvertex->GetRr())*(80.-pvertex->GetRr())*(cov1[5]+cov1[9]); - sigmad =TMath::Sqrt(sigmad)+0.05; - } - // - AliV0 vertex2; - vertex2.SetParamN(*track0b); - vertex2.SetParamP(*track1b); - vertex2.Update(primvertex); - //Bo: if (vertex2.GetDist2()<=pvertex->GetDist2()&&(vertex2.GetV0CosineOfPointingAngle()>=pvertex->GetV0CosineOfPointingAngle())){ - if (vertex2.GetDcaV0Daughters()<=pvertex->GetDcaV0Daughters()&&(vertex2.GetV0CosineOfPointingAngle()>=pvertex->GetV0CosineOfPointingAngle())){ - pvertex->SetParamN(*track0b); - pvertex->SetParamP(*track1b); - pvertex->Update(primvertex); - pvertex->SetClusters(track0b->ClIndex(),track1b->ClIndex()); // register clusters - pvertex->SetIndex(0,track0->GetESDtrack()->GetID()); - pvertex->SetIndex(1,track1->GetESDtrack()->GetID()); - } - pvertex->SetDistSigma(sigmad); - //Bo: pvertex->SetDistNorm(pvertex->GetDist2()/sigmad); - pvertex->SetNormDCAPrim(normdist[itrack0],normdist[itrack1]); - // - // define likelihhod and causalities - // - Float_t pa0=1, pa1=1, pb0=0.26, pb1=0.26; - if (maxLayer<1){ - Float_t fnorm0 = normdist[itrack0]; - if (fnorm0<0) fnorm0*=-3; - Float_t fnorm1 = normdist[itrack1]; - if (fnorm1<0) fnorm1*=-3; - if ((pvertex->GetAnglep()[2]>0.1) || ( (pvertex->GetRr()<10.5)&& pvertex->GetAnglep()[2]>0.05 ) || (pvertex->GetRr()<3)){ - pb0 = TMath::Exp(-TMath::Min(fnorm0,Float_t(16.))/12.); - pb1 = TMath::Exp(-TMath::Min(fnorm1,Float_t(16.))/12.); - } - pvertex->SetChi2Before(normdist[itrack0]); - pvertex->SetChi2After(normdist[itrack1]); - pvertex->SetNAfter(0); - pvertex->SetNBefore(0); - }else{ - pvertex->SetChi2Before(minchi2before0); - pvertex->SetChi2After(minchi2before1); - if (pvertex->GetAnglep()[2]>0.1 || ( pvertex->GetRr()<10.5 && pvertex->GetAnglep()[2]>0.05) || pvertex->GetRr()<3){ - pb0 = TMath::Exp(-TMath::Min(minchi2before0,Float_t(16))/12.); - pb1 = TMath::Exp(-TMath::Min(minchi2before1,Float_t(16))/12.); - } - pvertex->SetNAfter(maxLayer); - pvertex->SetNBefore(maxLayer); - } - if (pvertex->GetRr()<90){ - pa0 *= TMath::Min(track0->GetESDtrack()->GetTPCdensity(0,60),Double_t(1.)); - pa1 *= TMath::Min(track1->GetESDtrack()->GetTPCdensity(0,60),Double_t(1.)); - } - if (pvertex->GetRr()<20){ - pa0 *= (0.2+TMath::Exp(-TMath::Min(minchi2after0,Float_t(16))/8.))/1.2; - pa1 *= (0.2+TMath::Exp(-TMath::Min(minchi2after1,Float_t(16))/8.))/1.2; - } - // - pvertex->SetCausality(pb0,pb1,pa0,pa1); - // - // Likelihood calculations - apply cuts - // - - // AM - Comment out for optimization and store the v0OK value - // Int_t v0OK = 0; - // Int_t cutOKN=0; - Bool_t v0OK = kTRUE; - - - Float_t p12 = pvertex->GetParamP()->GetParameter()[4]*pvertex->GetParamP()->GetParameter()[4]; - p12 += pvertex->GetParamN()->GetParameter()[4]*pvertex->GetParamN()->GetParameter()[4]; - p12 = TMath::Sqrt(p12); // "mean" momenta - - Float_t sigmap0 = kSigp0Par0+kSigp0Par1/(kSigp0Par2+pvertex->GetRr()); - Float_t sigmap = kSigpPar0*sigmap0*(kSigpPar1+kSigpPar2*p12); // "resolution: of point angle - as a function of radius and momenta - - - Float_t causalityA = (1.0-pvertex->GetCausalityP()[0])*(1.0-pvertex->GetCausalityP()[1]); - Float_t causalityB = TMath::Sqrt(TMath::Min(pvertex->GetCausalityP()[2],Double_t(0.7))* - TMath::Min(pvertex->GetCausalityP()[3],Double_t(0.7))); - // - //Bo: Float_t likelihood0 = (TMath::Exp(-pvertex->GetDistNorm())+0.1) *(pvertex->GetDist2()<0.5)*(pvertex->GetDistNorm()<5); - Float_t lDistNorm = pvertex->GetDcaV0Daughters()/pvertex->GetDistSigma(); - Float_t likelihood0 = (TMath::Exp(-lDistNorm)+0.1) *(pvertex->GetDcaV0Daughters()GetV0CosineOfPointingAngle())/sigmap)+ - 0.4*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/(4.*sigmap))+ - 0.4*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/(8.*sigmap))+ - 0.1*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/0.01); - // - if (causalityAGetESDV0Params()->StreamLevel()>0){ - Bool_t gold = TMath::Abs(TMath::Abs(track0->GetLabel())-TMath::Abs(track1->GetLabel()))==1; - cstream<<"It0"<< - "Tr0.="<0) continue; - //if (forbidden[itrack0]>0 ||forbidden[itrack1]>0) continue; - // - pvertex->SetStatus(0); - // if (rejectBase) { - // pvertex->SetStatus(-100); - //} - if (pvertex->GetV0CosineOfPointingAngle()>kMinPointAngle2) { - //Bo: pvertex->SetESDindexes(track0->GetESDtrack()->GetID(),track1->GetESDtrack()->GetID()); - pvertex->SetIndex(0,track0->GetESDtrack()->GetID());//Bo: consistency 0 for neg - pvertex->SetIndex(1,track1->GetESDtrack()->GetID());//Bo: consistency 1 for pos - // if (v0OK==0){ - if (v0OK){ - // AliV0vertex vertexjuri(*track0,*track1); - // vertexjuri.SetESDindexes(track0->fESDtrack->GetID(),track1->fESDtrack->GetID()); - // event->AddV0(&vertexjuri); - pvertex->SetStatus(100); - } - pvertex->SetOnFlyStatus(kTRUE); - pvertex->ChangeMassHypothesis(kK0Short); - event->AddV0(pvertex); - } - } - } - // - // - // delete temporary arrays - // - delete[] forbidden; - delete[] minPointAngle; - delete[] maxr; - delete[] minr; - delete[] norm; - delete[] normdist; - delete[] normdist1; - delete[] normdist0; - delete[] dist; - delete[] itsmap; - delete[] helixes; - delete pvertex; - delete dummy; -} -//------------------------------------------------------------------------ -void AliITSV0Finder::RefitV02(const AliESDEvent *event, - AliITStrackerMI *tracker) -{ - // - //try to refit V0s in the third path of the reconstruction - // - TTreeSRedirector &cstream = *(tracker->GetDebugStreamer()); - // - Int_t nv0s = event->GetNumberOfV0s(); - Float_t primvertex[3]={tracker->GetX(),tracker->GetY(),tracker->GetZ()}; - AliV0 v0temp; - for (Int_t iv0 = 0; iv0GetV0(iv0); - if (!v0mi) continue; - Int_t itrack0 = v0mi->GetIndex(0); - Int_t itrack1 = v0mi->GetIndex(1); - AliESDtrack *esd0 = event->GetTrack(itrack0); - AliESDtrack *esd1 = event->GetTrack(itrack1); - if (!esd0||!esd1) continue; - AliITStrackMI tpc0(*esd0); - AliITStrackMI tpc1(*esd1); - Double_t x,y,z; v0mi->GetXYZ(x,y,z); //I.B. - Double_t alpha =TMath::ATan2(y,x); //I.B. - if (v0mi->GetRr()>85){ - if (tpc0.Propagate(alpha,v0mi->GetRr())&&tpc1.Propagate(alpha,v0mi->GetRr())){ - v0temp.SetParamN(tpc0); - v0temp.SetParamP(tpc1); - v0temp.Update(primvertex); - if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) cstream<<"Refit"<< - "V0.="<GetDist2() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ - if (v0temp.GetDcaV0Daughters()GetDcaV0Daughters() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ - v0mi->SetParamN(tpc0); - v0mi->SetParamP(tpc1); - v0mi->Update(primvertex); - } - } - continue; - } - if (v0mi->GetRr()>35){ - AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc0); - AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc1); - if (tpc0.Propagate(alpha,v0mi->GetRr())&&tpc1.Propagate(alpha,v0mi->GetRr())){ - v0temp.SetParamN(tpc0); - v0temp.SetParamP(tpc1); - v0temp.Update(primvertex); - if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) cstream<<"Refit"<< - "V0.="<GetDist2() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ - if (v0temp.GetDcaV0Daughters()GetDcaV0Daughters() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ - v0mi->SetParamN(tpc0); - v0mi->SetParamP(tpc1); - v0mi->Update(primvertex); - } - } - continue; - } - AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc0); - AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc1); - // if (tpc0.Propagate(alpha,v0mi->GetRr())&&tpc1.Propagate(alpha,v0mi->GetRr())){ - if (tracker->RefitAt(v0mi->GetRr(),&tpc0, v0mi->GetClusters(0)) && - tracker->RefitAt(v0mi->GetRr(),&tpc1, v0mi->GetClusters(1))){ - v0temp.SetParamN(tpc0); - v0temp.SetParamP(tpc1); - v0temp.Update(primvertex); - if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) cstream<<"Refit"<< - "V0.="<GetDist2() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ - if (v0temp.GetDcaV0Daughters()GetDcaV0Daughters() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ - v0mi->SetParamN(tpc0); - v0mi->SetParamP(tpc1); - v0mi->Update(primvertex); - } - } - } -} -//------------------------------------------------------------------------ - - -AliITSV0Finder::~AliITSV0Finder() -{ - // - //destructor - // - if (fDebugStreamer) { - //fDebugStreamer->Close(); - delete fDebugStreamer; - } - -} +/************************************************************************** + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +/* $Id$ */ + +//------------------------------------------------------------------------- +// Implementation of the on-the-fly v0 finder for ITS tracker MI +// Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch +// Extraction from AliITStrackerMI: Andrea Dainese +// Current support and development: +//------------------------------------------------------------------------- + +#include +#include +#include +#include +#include + + +#include "AliLog.h" +#include "AliESDVertex.h" +#include "AliESDEvent.h" +#include "AliESDtrack.h" +#include "AliESDV0Params.h" +#include "AliV0.h" +#include "AliHelix.h" +#include "AliITSRecPoint.h" +#include "AliITSReconstructor.h" +#include "AliITStrackerMI.h" +#include "AliITSV0Finder.h" +#include "AliKFParticle.h" +#include "AliKFVertex.h" + +ClassImp(AliITSV0Finder) + + +AliITSV0Finder::AliITSV0Finder(): +fDebugStreamer(0) + { + //Default constructor + + if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) + fDebugStreamer = new TTreeSRedirector("ITSdebug.root"); +} + +//------------------------------------------------------------------------ +void AliITSV0Finder::UpdateTPCV0(const AliESDEvent *event, + AliITStrackerMI *tracker) +{ + // + //try to update, or reject TPC V0s + // + const Float_t kMinTgl2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl2(); + + TObjArray *trackHypothesys = tracker->GetTrackHypothesys(); + + Int_t nv0s = event->GetNumberOfV0s(); + Int_t nitstracks = trackHypothesys->GetEntriesFast(); + + for (Int_t i=0;iGetV0(i); + Int_t ip = vertex->GetIndex(0); + Int_t im = vertex->GetIndex(1); + // + TObjArray * arrayp = (ipAt(ip):0; + TObjArray * arraym = (imAt(im):0; + AliITStrackMI * trackp = (arrayp!=0) ? (AliITStrackMI*)arrayp->At(0):0; + AliITStrackMI * trackm = (arraym!=0) ? (AliITStrackMI*)arraym->At(0):0; + // + // + if (trackp){ + if (trackp->GetNumberOfClusters()+trackp->GetNDeadZone()>5.5){ + if (trackp->GetConstrain()&&trackp->GetChi2MIP(0)<3) vertex->SetStatus(-100); + if (!trackp->GetConstrain()&&trackp->GetChi2MIP(0)<2) vertex->SetStatus(-100); + } + } + + if (trackm){ + if (trackm->GetNumberOfClusters()+trackm->GetNDeadZone()>5.5){ + if (trackm->GetConstrain()&&trackm->GetChi2MIP(0)<3) vertex->SetStatus(-100); + if (!trackm->GetConstrain()&&trackm->GetChi2MIP(0)<2) vertex->SetStatus(-100); + } + } + if (vertex->GetStatus()==-100) continue; + // + Double_t xrp[3]; vertex->GetXYZ(xrp[0],xrp[1],xrp[2]); //I.B. + Int_t clayer = tracker->GetNearestLayer(xrp); //I.B. + vertex->SetNBefore(clayer); // + vertex->SetChi2Before(9*clayer); // + vertex->SetNAfter(6-clayer); // + vertex->SetChi2After(0); // + // + if (clayer >1 ){ // calculate chi2 before vertex + Float_t chi2p = 0, chi2m=0; + // + if (trackp){ + for (Int_t ilayer=0;ilayerGetClIndex(ilayer)>=0){ + chi2p+=trackp->GetDy(ilayer)*trackp->GetDy(ilayer)/(trackp->GetSigmaY(ilayer)*trackp->GetSigmaY(ilayer))+ + trackp->GetDz(ilayer)*trackp->GetDz(ilayer)/(trackp->GetSigmaZ(ilayer)*trackp->GetSigmaZ(ilayer)); + } + else{ + chi2p+=9; + } + } + }else{ + chi2p = 9*clayer; + } + // + if (trackm){ + for (Int_t ilayer=0;ilayerGetClIndex(ilayer)>=0){ + chi2m+=trackm->GetDy(ilayer)*trackm->GetDy(ilayer)/(trackm->GetSigmaY(ilayer)*trackm->GetSigmaY(ilayer))+ + trackm->GetDz(ilayer)*trackm->GetDz(ilayer)/(trackm->GetSigmaZ(ilayer)*trackm->GetSigmaZ(ilayer)); + } + else{ + chi2m+=9; + } + } + }else{ + chi2m = 9*clayer; + } + vertex->SetChi2Before(TMath::Min(chi2p,chi2m)); + if (TMath::Min(chi2p,chi2m)/Float_t(clayer)<4) vertex->SetStatus(-10); // track exist before vertex + } + + if (clayer < 5 ){ // calculate chi2 after vertex + Float_t chi2p = 0, chi2m=0; + // + if (trackp&&TMath::Abs(trackp->GetTgl())GetClIndex(ilayer)>=0){ + chi2p+=trackp->GetDy(ilayer)*trackp->GetDy(ilayer)/(trackp->GetSigmaY(ilayer)*trackp->GetSigmaY(ilayer))+ + trackp->GetDz(ilayer)*trackp->GetDz(ilayer)/(trackp->GetSigmaZ(ilayer)*trackp->GetSigmaZ(ilayer)); + } + else{ + chi2p+=9; + } + } + }else{ + chi2p = 0; + } + // + if (trackm&&TMath::Abs(trackm->GetTgl())GetClIndex(ilayer)>=0){ + chi2m+=trackm->GetDy(ilayer)*trackm->GetDy(ilayer)/(trackm->GetSigmaY(ilayer)*trackm->GetSigmaY(ilayer))+ + trackm->GetDz(ilayer)*trackm->GetDz(ilayer)/(trackm->GetSigmaZ(ilayer)*trackm->GetSigmaZ(ilayer)); + } + else{ + chi2m+=9; + } + } + }else{ + chi2m = 0; + } + vertex->SetChi2After(TMath::Max(chi2p,chi2m)); + if (TMath::Max(chi2m,chi2p)/Float_t(6-clayer)>9) vertex->SetStatus(-20); // track not found in ITS + } + } + // +} +//------------------------------------------------------------------------ +void AliITSV0Finder::FindV02(AliESDEvent *event, + AliITStrackerMI *tracker) +{ + // + // V0 finder + // + // Cuts on DCA - R dependent + // max distance DCA between 2 tracks cut + // maxDist = TMath::Min(kMaxDist,kMaxDist0+pvertex->GetRr()*kMaxDist); + // + const Bool_t kCheckPropagate = kFALSE; + const Float_t kMaxDist0 = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDist0(); + const Float_t kMaxDist1 = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDist1(); + const Float_t kMaxDist = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDist(); + const Float_t kMinPointAngle = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPointAngle(); + const Float_t kMinPointAngle2 = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPointAngle2(); + const Float_t kMinR = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinR(); + const Float_t kMaxR = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxR(); + const Float_t kMinPABestConst = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinPABestConst(); + const Float_t kMaxRBestConst = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRBestConst(); + const Float_t kCausality0Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetCausality0Cut(); + const Float_t kLikelihood01Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetLikelihood01Cut(); + const Float_t kLikelihood1Cut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetLikelihood1Cut(); + const Float_t kCombinedCut = AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetCombinedCut(); + const Float_t kMinClFullTrk= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinClFullTrk(); + const Float_t kMinTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl0(); + const Float_t kMinRTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinRTgl0(); + + const Float_t kMinNormDistForbTgl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForbTgl0(); + const Float_t kMinClForb0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinClForb0(); + const Float_t kMinNormDistForb1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb1(); + const Float_t kMinNormDistForb2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb2(); + const Float_t kMinNormDistForb3= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb3(); + const Float_t kMinNormDistForb4= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb4(); + const Float_t kMinNormDistForb5= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForb5(); + const Float_t kMinNormDistForbProt= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinNormDistForbProt(); + const Float_t kMaxPidProbPionForb= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxPidProbPionForb(); + + const Float_t kMinRTPCdensity= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinRTPCdensity(); + const Float_t kMaxRTPCdensity0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity0(); + const Float_t kMaxRTPCdensity10= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity10(); + const Float_t kMaxRTPCdensity20= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity20(); + const Float_t kMaxRTPCdensity30= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxRTPCdensity30(); + + + const Float_t kMinTPCdensity= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTPCdensity(); + const Float_t kMinTgl1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinTgl1(); + + const Float_t kMinchi2before0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2before0(); + const Float_t kMinchi2before1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2before1(); + const Float_t kMinchi2after0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2after0(); + const Float_t kMinchi2after1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMinchi2after1(); + const Float_t kAddchi2SharedCl= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetAddchi2SharedCl(); + const Float_t kAddchi2NegCl0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetAddchi2NegCl0(); + const Float_t kAddchi2NegCl1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetAddchi2NegCl1(); + + const Float_t kSigp0Par0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigp0Par0(); + const Float_t kSigp0Par1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigp0Par1(); + const Float_t kSigp0Par2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigp0Par2(); + + const Float_t kSigpPar0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar0(); + const Float_t kSigpPar1= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar1(); + const Float_t kSigpPar2= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetSigpPar2(); + const Float_t kMaxDcaLh0= AliITSReconstructor::GetRecoParam()->GetESDV0Params()->GetMaxDcaLh0(); + + + TObjArray *trackHypothesys = tracker->GetTrackHypothesys(); + TObjArray *bestHypothesys = tracker->GetBestHypothesys(); + TObjArray *originalTracks = tracker->GetOriginal(); + // + // + TTreeSRedirector &cstream = *(tracker->GetDebugStreamer()); + Int_t ntracks = event->GetNumberOfTracks(); + Int_t nitstracks = originalTracks->GetEntriesFast(); + originalTracks->Expand(ntracks); + trackHypothesys->Expand(ntracks); + bestHypothesys->Expand(ntracks); + // + AliHelix * helixes = new AliHelix[ntracks+2]; + TObjArray trackarray(ntracks+2); //array with tracks - with vertex constrain + TObjArray trackarrayc(ntracks+2); //array of "best tracks" - without vertex constrain + TObjArray trackarrayl(ntracks+2); //array of "longest tracks" - without vertex constrain + //Change from Bool_t to Int_t for optimization + // Int_t forbN=0; + // Int_t * forbidden = new Int_t [ntracks+2]; + Bool_t * forbidden = new Bool_t [ntracks+2]; + Int_t *itsmap = new Int_t [ntracks+2]; + Float_t *dist = new Float_t[ntracks+2]; + Float_t *normdist0 = new Float_t[ntracks+2]; + Float_t *normdist1 = new Float_t[ntracks+2]; + Float_t *normdist = new Float_t[ntracks+2]; + Float_t *norm = new Float_t[ntracks+2]; + Float_t *maxr = new Float_t[ntracks+2]; + Float_t *minr = new Float_t[ntracks+2]; + Float_t *minPointAngle= new Float_t[ntracks+2]; + // + AliV0 *pvertex = new AliV0; + AliITStrackMI * dummy= new AliITStrackMI; + dummy->SetLabel(0); + AliITStrackMI trackat0; //temporary track for DCA calculation + // + Float_t primvertex[3]={tracker->GetX(),tracker->GetY(),tracker->GetZ()}; + // + // make ITS - ESD map + // + for (Int_t itrack=0;itrackAt(itrack)); + Int_t esdindex = original->GetESDtrack()->GetID(); + itsmap[esdindex] = itrack; + } + // + // create ITS tracks from ESD tracks if not done before + // + for (Int_t itrack=0;itrack=0) continue; + AliITStrackMI * tpctrack = new AliITStrackMI(*(event->GetTrack(itrack))); + //tpctrack->fD[0] = tpctrack->GetD(GetX(),GetY()); + //tpctrack->fD[1] = tpctrack->GetZat(GetX())-GetZ(); + tpctrack->GetDZ(tracker->GetX(),tracker->GetY(),tracker->GetZ(),tpctrack->GetDP()); //I.B. + if (tpctrack->GetD(0)<20 && tpctrack->GetD(1)<20){ + // tracks which can reach inner part of ITS + // propagate track to outer its volume - with correction for material + AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(tpctrack); + } + itsmap[itrack] = nitstracks; + originalTracks->AddAt(tpctrack,nitstracks); + nitstracks++; + } + // + // fill temporary arrays + // + for (Int_t itrack=0;itrackGetTrack(itrack); + Int_t itsindex = itsmap[itrack]; + AliITStrackMI *original = (AliITStrackMI*)originalTracks->At(itsmap[itrack]); + if (!original) continue; + AliITStrackMI *bestConst = 0; + AliITStrackMI *bestLong = 0; + AliITStrackMI *best = 0; + // + // + TObjArray * array = (TObjArray*) trackHypothesys->At(itsindex); + Int_t hentries = (array==0) ? 0 : array->GetEntriesFast(); + // Get best track with vertex constrain + for (Int_t ih=0;ihAt(ih); + if (!trackh->GetConstrain()) continue; + if (!bestConst) bestConst = trackh; + if (trackh->GetNumberOfClusters()>kMinClFullTrk ){ + bestConst = trackh; // full track - with minimal chi2 + break; + } + if (trackh->GetNumberOfClusters()+trackh->GetNDeadZone()<=bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()) continue; + bestConst = trackh; + break; + } + // Get best long track without vertex constrain and best track without vertex constrain + for (Int_t ih=0;ihAt(ih); + if (trackh->GetConstrain()) continue; + if (!best) best = trackh; + if (!bestLong) bestLong = trackh; + if (trackh->GetNumberOfClusters()>kMinClFullTrk){ + bestLong = trackh; // full track - with minimal chi2 + break; + } + if (trackh->GetNumberOfClusters()+trackh->GetNDeadZone()<=bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()) continue; + bestLong = trackh; + } + if (!best) { + best = original; + bestLong = original; + } + //I.B. trackat0 = *bestLong; + new (&trackat0) AliITStrackMI(*bestLong); + Double_t xx,yy,zz,alpha; + if (!bestLong->GetGlobalXYZat(bestLong->GetX(),xx,yy,zz)) continue; + + + alpha = TMath::ATan2(yy,xx); + // if (!trackat0.Propagate(alpha,0)) continue; + // trackat0.Propagate(alpha,0); //PH The check on the return value is temporarily disabled (bug 45751) + if(!trackat0.Propagate(alpha,0) && kCheckPropagate)continue; + // calculate normalized distances to the vertex + // + Float_t ptfac = (1.+100.*TMath::Abs(trackat0.GetC())); + if ( bestLong->GetNumberOfClusters()>3 ){ + dist[itsindex] = trackat0.GetY(); + norm[itsindex] = ptfac*TMath::Sqrt(trackat0.GetSigmaY2()); + normdist0[itsindex] = TMath::Abs(trackat0.GetY()/norm[itsindex]); + normdist1[itsindex] = TMath::Abs((trackat0.GetZ()-primvertex[2])/(ptfac*TMath::Sqrt(trackat0.GetSigmaZ2()))); + normdist[itsindex] = TMath::Sqrt(normdist0[itsindex]*normdist0[itsindex]+normdist1[itsindex]*normdist1[itsindex]); + if (!bestConst){ + if (bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()<6) normdist[itsindex]*=2.; + if (bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()<5) normdist[itsindex]*=2.; + if (bestLong->GetNumberOfClusters()+bestLong->GetNDeadZone()<4) normdist[itsindex]*=2.; + }else{ + if (bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()<6) normdist[itsindex]*=1.5; + if (bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()<5) normdist[itsindex]*=1.5; + } + } + else{ + if (bestConst&&bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()>4.5){ + dist[itsindex] = bestConst->GetD(0); + norm[itsindex] = bestConst->GetDnorm(0); + normdist0[itsindex] = TMath::Abs(bestConst->GetD(0)/norm[itsindex]); + normdist1[itsindex] = TMath::Abs(bestConst->GetD(0)/norm[itsindex]); + normdist[itsindex] = TMath::Sqrt(normdist0[itsindex]*normdist0[itsindex]+normdist1[itsindex]*normdist1[itsindex]); + }else{ + dist[itsindex] = trackat0.GetY(); + norm[itsindex] = ptfac*TMath::Sqrt(trackat0.GetSigmaY2()); + normdist0[itsindex] = TMath::Abs(trackat0.GetY()/norm[itsindex]); + normdist1[itsindex] = TMath::Abs((trackat0.GetZ()-primvertex[2])/(ptfac*TMath::Sqrt(trackat0.GetSigmaZ2()))); + normdist[itsindex] = TMath::Sqrt(normdist0[itsindex]*normdist0[itsindex]+normdist1[itsindex]*normdist1[itsindex]); + if (TMath::Abs(trackat0.GetTgl())>kMinTgl0){ + if (normdist[itsindex]kMinNormDistForbTgl0) { + minr[itsindex] = TMath::Max(kMinRTgl0,minr[itsindex]); + } + } + } + } + + + // + //----------------------------------------------------------- + //Forbid primary track candidates - + // + //treetr->SetAlias("forbidden0","Tr0.fN<4&&Tr1.fN+Tr1.fNDeadZone>4.5"); + //treetr->SetAlias("forbidden1","ND<3&&Tr1.fN+Tr1.fNDeadZone>5.5"); + //treetr->SetAlias("forbidden2","ND<2&&Tr1.fClIndex[0]>0&&Tr1.fClIndex[0]>0"); + //treetr->SetAlias("forbidden3","ND<1&&Tr1.fClIndex[0]>0"); + //treetr->SetAlias("forbidden4","ND<4&&Tr1.fNormChi2[0]<2"); + //treetr->SetAlias("forbidden5","ND<5&&Tr1.fNormChi2[0]<1"); + //----------------------------------------------------------- + if (bestConst){ + if (bestLong->GetNumberOfClusters()<4 && bestConst->GetNumberOfClusters()+bestConst->GetNDeadZone()>kMinClForb0){ + // forbN=2; + // forbidden[itsindex]+=1<GetNumberOfClusters()+bestConst->GetNDeadZone()>5.5){ + // forbN=3; + // forbidden[itsindex]+=1<GetClIndex(0)>=0 && bestConst->GetClIndex(1)>=0 ){ + // forbN=4; + // forbidden[itsindex]+=1<GetClIndex(0)>=0){ + // forbN=5; + // forbidden[itsindex]+=1<GetNormChi2(0)<2){ + // forbN=6; + // forbidden[itsindex]+=1<GetNormChi2(0)<1){ + // forbN=7; + // forbidden[itsindex]+=1<GetNormChi2(0)<2.5) { + minPointAngle[itsindex]= kMinPABestConst; + maxr[itsindex] = kMaxRBestConst; + } + } + // + //forbid daughter kink candidates + // + if (esdtrack->GetKinkIndex(0)>0) forbidden[itsindex] = kTRUE; + Bool_t isElectron = kTRUE; + Bool_t isProton = kTRUE; + Double_t pid[5]; + esdtrack->GetESDpid(pid); + for (Int_t i=1;i<5;i++){ + if (pid[0]kMinNormDistForbProt) forbidden[itsindex]=kFALSE; + normdist[itsindex]*=-1; + } + + // We allow all tracks that are not pions + if( (pid[1]+pid[2])< kMaxPidProbPionForb ){ + forbidden[itsindex]=kFALSE; + } + + // + // Causality cuts in TPC volume + // + if (esdtrack->GetTPCdensity(0,10) >kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity0),maxr[itsindex]); + if (esdtrack->GetTPCdensity(10,30)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity10),maxr[itsindex]); + if (esdtrack->GetTPCdensity(20,40)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity20),maxr[itsindex]); + if (esdtrack->GetTPCdensity(30,50)>kMinTPCdensity) maxr[itsindex] = TMath::Min(Float_t(kMaxRTPCdensity30),maxr[itsindex]); + // + if (esdtrack->GetTPCdensity(0,60)<0.4&&bestLong->GetNumberOfClusters()<3) minr[itsindex]=kMinRTPCdensity; + // + // + + if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0){ + cstream<<"Track"<< + "Tr0.="<GetSign()==btrack1->GetSign()) && !AliITSReconstructor::GetRecoParam()->GetStoreLikeSignV0s()) continue; + + Bool_t isGold = kFALSE; + if (TMath::Abs(TMath::Abs(btrack0->GetLabel())-TMath::Abs(btrack1->GetLabel()))==1){ + isGold = kTRUE; + } + // rejectBase=0; + AliITStrackMI *trackc1 = (AliITStrackMI*)trackarrayc.At(itrack1); + AliHelix &h1 = helixes[itrack0]; + AliHelix &h2 = helixes[itrack1]; + // + // find linear distance + Double_t rmin =0; + // + // + // + Double_t phase[2][2]={{0.,0.},{0.,0.}}; + Double_t radius[2]={0.,0.}; + Int_t points = h1.GetRPHIintersections(h2, phase, radius); + if (points==0) { + // cutN=1; + // rejectBase+=1<TMath::Min(maxr[itrack0],maxr[itrack1])){ + // cutN=3; + // rejectBase+=1<maxDist){ + // cutN=4; + // rejectBase+=1<maxDist) continue; + // if (pvertex->GetRr()GetRr()>kMaxR) continue; + AliITStrackMI * track0=btrack0; + AliITStrackMI * track1=btrack1; + // if (pvertex->GetRr()<3.5){ + if (radiusC<3.5){ + //use longest tracks inside the pipe + track0 = (AliITStrackMI*)trackarrayl.At(itrack0); + track1 = (AliITStrackMI*)trackarrayl.At(itrack1); + } + // + // + + + + pvertex->SetParamN(*track0); + pvertex->SetParamP(*track1); + pvertex->Update(primvertex); + pvertex->SetClusters(track0->ClIndex(),track1->ClIndex()); // register clusters + + // Define gamma, K0, lambda and lambda_bar from the decay particles and calculate the chi2 + AliKFVertex vertexKF; + + vertexKF.X() = tracker->GetX(); + vertexKF.Y() = tracker->GetY(); + vertexKF.Z() = tracker->GetZ(); + vertexKF.Covariance(0,0) = tracker->GetSigmaX()*tracker->GetSigmaX(); + vertexKF.Covariance(1,2) = tracker->GetSigmaY()*tracker->GetSigmaY(); + vertexKF.Covariance(2,2) = tracker->GetSigmaZ()*tracker->GetSigmaZ(); + + AliKFParticle elecKF( *(pvertex->GetParamN()) ,11); + AliKFParticle posiKF( *(pvertex->GetParamP()) ,-11); + AliKFParticle pipKF( *(pvertex->GetParamN()) , 211); + AliKFParticle pinKF( *(pvertex->GetParamP()) ,-211); + AliKFParticle protKF( *(pvertex->GetParamP()) ,2212); + AliKFParticle aproKF ( *(pvertex->GetParamN()) ,-2212); + + + // Gamma + AliKFParticle gamKF(elecKF,posiKF); + gamKF.SetProductionVertex(vertexKF); + + Float_t gamKFchi2 = 1000; + if ( gamKF.GetNDF()!=0 ){ + gamKFchi2 = gamKF.GetChi2()/gamKF.GetNDF(); + } + + Float_t massG=0.; + Float_t sigmaMG=0.001; + gamKF.SetMassConstraint(massG,sigmaMG); + + Float_t gamKFchi2C = 1000; + if ( gamKF.GetNDF()!=0 ){ + gamKFchi2C = gamKF.GetChi2()/gamKF.GetNDF(); + } + + //K0 short + AliKFParticle k0KF(pipKF,pinKF); + k0KF.SetProductionVertex(vertexKF); + + Float_t k0KFchi2 = 1000; + if ( k0KF.GetNDF()!=0 ){ + k0KFchi2 = k0KF.GetChi2()/k0KF.GetNDF(); + } + + //Lambda + AliKFParticle lambdaKF(protKF,pinKF); + lambdaKF.SetProductionVertex(vertexKF); + + Float_t lambdaKFchi2 = 1000; + if ( lambdaKF.GetNDF()!=0 ){ + lambdaKFchi2 = lambdaKF.GetChi2()/lambdaKF.GetNDF(); + } + + //Lambda_bar + AliKFParticle alambKF(aproKF,pipKF); + alambKF.SetProductionVertex(vertexKF); + + Float_t alambKFchi2 = 1000; + if ( alambKF.GetNDF()!=0 ){ + alambKFchi2 = alambKF.GetChi2()/alambKF.GetNDF(); + } + + + + + + if (pvertex->GetRr()GetRr()>kMaxR){ + // cutN=7; + // rejectBase+=1<GetV0CosineOfPointingAngle()GetDist2()>maxDist) continue; + + if (pvertex->GetDcaV0Daughters()>maxDist){ + // cutN=9; + // rejectBase+=1<SetLab(0,track0->GetLabel()); +//Bo: pvertex->SetLab(1,track1->GetLabel()); + pvertex->SetIndex(0,track0->GetESDtrack()->GetID()); + pvertex->SetIndex(1,track1->GetESDtrack()->GetID()); + // + AliITStrackMI * htrackc0 = trackc0 ? trackc0:dummy; + AliITStrackMI * htrackc1 = trackc1 ? trackc1:dummy; + + // + // + TObjArray * array0b = (TObjArray*)bestHypothesys->At(itrack0); + if (!array0b&&pvertex->GetRr()<40 && TMath::Abs(track0->GetTgl())SetCurrentEsdTrack(itrack0); + tracker->FollowProlongationTree((AliITStrackMI*)originalTracks->At(itrack0),itrack0, kFALSE); + } + TObjArray * array1b = (TObjArray*)bestHypothesys->At(itrack1); + if (!array1b&&pvertex->GetRr()<40 && TMath::Abs(track1->GetTgl())SetCurrentEsdTrack(itrack1); + tracker->FollowProlongationTree((AliITStrackMI*)originalTracks->At(itrack1),itrack1, kFALSE); + } + // + AliITStrackMI * track0b = (AliITStrackMI*)originalTracks->At(itrack0); + AliITStrackMI * track1b = (AliITStrackMI*)originalTracks->At(itrack1); + AliITStrackMI * track0l = (AliITStrackMI*)originalTracks->At(itrack0); + AliITStrackMI * track1l = (AliITStrackMI*)originalTracks->At(itrack1); + + Float_t minchi2before0=kMinchi2before0; + Float_t minchi2before1=kMinchi2before1; + Float_t minchi2after0 =kMinchi2after0; + Float_t minchi2after1 =kMinchi2after1; + Double_t xrp[3]; pvertex->GetXYZ(xrp[0],xrp[1],xrp[2]); //I.B. + Int_t maxLayer = tracker->GetNearestLayer(xrp); //I.B. + + if (array0b) for (Int_t i=0;i<5;i++){ + // best track after vertex + AliITStrackMI * btrack = (AliITStrackMI*)array0b->At(i); + if (!btrack) continue; + if (btrack->GetNumberOfClusters()>track0l->GetNumberOfClusters()) track0l = btrack; + // if (btrack->fXGetRr()-2.-0.5/(0.1+pvertex->GetAnglep()[2])) { + if (btrack->GetX()GetRr()-2.) { + if ( (maxLayer>i+2|| (i==0)) && btrack->GetNumberOfClusters()==(6-i)&&i<3){ + Float_t sumchi2= 0; + Float_t sumn = 0; + if (maxLayer<3){ // take prim vertex as additional measurement + if (normdist[itrack0]>0 && htrackc0){ + sumchi2 += TMath::Min((3.-maxLayer)*normdist[itrack0]*normdist[itrack0],16.); + }else{ + sumchi2 += TMath::Min((3.-maxLayer)*(3*normdist[itrack0]*normdist[itrack0]+3.),16.); + } + sumn += 3-maxLayer; + } + for (Int_t ilayer=i;ilayerGetClIndex(ilayer)<0){ + sumchi2+=kAddchi2NegCl0; + continue; + }else{ + Int_t c=( btrack->GetClIndex(ilayer) & 0x0fffffff); + for (Int_t itrack=0;itrack<4;itrack++){ + AliITStrackerMI::AliITSlayer &layer=tracker->GetLayer(ilayer); + if (layer.GetClusterTracks(itrack,c)>=0 && layer.GetClusterTracks(itrack,c)!=itrack0){ + sumchi2+=kAddchi2SharedCl; //shared cluster + break; + } + } + sumchi2+=btrack->GetDy(ilayer)*btrack->GetDy(ilayer)/(btrack->GetSigmaY(ilayer)*btrack->GetSigmaY(ilayer)); + sumchi2+=btrack->GetDz(ilayer)*btrack->GetDz(ilayer)/(btrack->GetSigmaZ(ilayer)*btrack->GetSigmaZ(ilayer)); + } + } + sumchi2/=sumn; + if (sumchi2GetNormChi2(i); + break; + } + if (array1b) for (Int_t i=0;i<5;i++){ + // best track after vertex + AliITStrackMI * btrack = (AliITStrackMI*)array1b->At(i); + if (!btrack) continue; + if (btrack->GetNumberOfClusters()>track1l->GetNumberOfClusters()) track1l = btrack; + // if (btrack->fXGetRr()-2-0.5/(0.1+pvertex->GetAnglep()[2])){ + if (btrack->GetX()GetRr()-2){ + if ((maxLayer>i+2 || (i==0))&&btrack->GetNumberOfClusters()==(6-i)&&(i<3)){ + Float_t sumchi2= 0; + Float_t sumn = 0; + if (maxLayer<3){ // take prim vertex as additional measurement + if (normdist[itrack1]>0 && htrackc1){ + sumchi2 += TMath::Min((3.-maxLayer)*normdist[itrack1]*normdist[itrack1],16.); + }else{ + sumchi2 += TMath::Min((3.-maxLayer)*(3*normdist[itrack1]*normdist[itrack1]+3.),16.); + } + sumn += 3-maxLayer; + } + for (Int_t ilayer=i;ilayerGetClIndex(ilayer)<0){ + sumchi2+=kAddchi2NegCl1; + continue; + }else{ + Int_t c=( btrack->GetClIndex(ilayer) & 0x0fffffff); + for (Int_t itrack=0;itrack<4;itrack++){ + AliITStrackerMI::AliITSlayer &layer=tracker->GetLayer(ilayer); + if (layer.GetClusterTracks(itrack,c)>=0 && layer.GetClusterTracks(itrack,c)!=itrack1){ + sumchi2+=kAddchi2SharedCl; //shared cluster + break; + } + } + sumchi2+=btrack->GetDy(ilayer)*btrack->GetDy(ilayer)/(btrack->GetSigmaY(ilayer)*btrack->GetSigmaY(ilayer)); + sumchi2+=btrack->GetDz(ilayer)*btrack->GetDz(ilayer)/(btrack->GetSigmaZ(ilayer)*btrack->GetSigmaZ(ilayer)); + } + } + sumchi2/=sumn; + if (sumchi2GetNormChi2(i); + break; + } + // + // position resolution - used for DCA cut + Float_t sigmad = track0b->GetSigmaY2()+track0b->GetSigmaZ2()+track1b->GetSigmaY2()+track1b->GetSigmaZ2()+ + (track0b->GetX()-pvertex->GetRr())*(track0b->GetX()-pvertex->GetRr())*(track0b->GetSigmaSnp2()+track0b->GetSigmaTgl2())+ + (track1b->GetX()-pvertex->GetRr())*(track1b->GetX()-pvertex->GetRr())*(track1b->GetSigmaSnp2()+track1b->GetSigmaTgl2()); + sigmad =TMath::Sqrt(sigmad)+0.04; + if (pvertex->GetRr()>50){ + Double_t cov0[15],cov1[15]; + track0b->GetESDtrack()->GetInnerExternalCovariance(cov0); + track1b->GetESDtrack()->GetInnerExternalCovariance(cov1); + sigmad = cov0[0]+cov0[2]+cov1[0]+cov1[2]+ + (80.-pvertex->GetRr())*(80.-pvertex->GetRr())*(cov0[5]+cov0[9])+ + (80.-pvertex->GetRr())*(80.-pvertex->GetRr())*(cov1[5]+cov1[9]); + sigmad =TMath::Sqrt(sigmad)+0.05; + } + // + AliV0 vertex2; + vertex2.SetParamN(*track0b); + vertex2.SetParamP(*track1b); + vertex2.Update(primvertex); + //Bo: if (vertex2.GetDist2()<=pvertex->GetDist2()&&(vertex2.GetV0CosineOfPointingAngle()>=pvertex->GetV0CosineOfPointingAngle())){ + if (vertex2.GetDcaV0Daughters()<=pvertex->GetDcaV0Daughters()&&(vertex2.GetV0CosineOfPointingAngle()>=pvertex->GetV0CosineOfPointingAngle())){ + pvertex->SetParamN(*track0b); + pvertex->SetParamP(*track1b); + pvertex->Update(primvertex); + pvertex->SetClusters(track0b->ClIndex(),track1b->ClIndex()); // register clusters + pvertex->SetIndex(0,track0->GetESDtrack()->GetID()); + pvertex->SetIndex(1,track1->GetESDtrack()->GetID()); + } + pvertex->SetDistSigma(sigmad); + //Bo: pvertex->SetDistNorm(pvertex->GetDist2()/sigmad); + pvertex->SetNormDCAPrim(normdist[itrack0],normdist[itrack1]); + // + // define likelihhod and causalities + // + Float_t pa0=1, pa1=1, pb0=0.26, pb1=0.26; + if (maxLayer<1){ + Float_t fnorm0 = normdist[itrack0]; + if (fnorm0<0) fnorm0*=-3; + Float_t fnorm1 = normdist[itrack1]; + if (fnorm1<0) fnorm1*=-3; + if ((pvertex->GetAnglep()[2]>0.1) || ( (pvertex->GetRr()<10.5)&& pvertex->GetAnglep()[2]>0.05 ) || (pvertex->GetRr()<3)){ + pb0 = TMath::Exp(-TMath::Min(fnorm0,Float_t(16.))/12.); + pb1 = TMath::Exp(-TMath::Min(fnorm1,Float_t(16.))/12.); + } + pvertex->SetChi2Before(normdist[itrack0]); + pvertex->SetChi2After(normdist[itrack1]); + pvertex->SetNAfter(0); + pvertex->SetNBefore(0); + }else{ + pvertex->SetChi2Before(minchi2before0); + pvertex->SetChi2After(minchi2before1); + if (pvertex->GetAnglep()[2]>0.1 || ( pvertex->GetRr()<10.5 && pvertex->GetAnglep()[2]>0.05) || pvertex->GetRr()<3){ + pb0 = TMath::Exp(-TMath::Min(minchi2before0,Float_t(16))/12.); + pb1 = TMath::Exp(-TMath::Min(minchi2before1,Float_t(16))/12.); + } + pvertex->SetNAfter(maxLayer); + pvertex->SetNBefore(maxLayer); + } + if (pvertex->GetRr()<90){ + pa0 *= TMath::Min(track0->GetESDtrack()->GetTPCdensity(0,60),Double_t(1.)); + pa1 *= TMath::Min(track1->GetESDtrack()->GetTPCdensity(0,60),Double_t(1.)); + } + if (pvertex->GetRr()<20){ + pa0 *= (0.2+TMath::Exp(-TMath::Min(minchi2after0,Float_t(16))/8.))/1.2; + pa1 *= (0.2+TMath::Exp(-TMath::Min(minchi2after1,Float_t(16))/8.))/1.2; + } + // + pvertex->SetCausality(pb0,pb1,pa0,pa1); + // + // Likelihood calculations - apply cuts + // + + // AM - Comment out for optimization and store the v0OK value + // Int_t v0OK = 0; + // Int_t cutOKN=0; + Bool_t v0OK = kTRUE; + + + Float_t p12 = pvertex->GetParamP()->GetParameter()[4]*pvertex->GetParamP()->GetParameter()[4]; + p12 += pvertex->GetParamN()->GetParameter()[4]*pvertex->GetParamN()->GetParameter()[4]; + p12 = TMath::Sqrt(p12); // "mean" momenta + + Float_t sigmap0 = kSigp0Par0+kSigp0Par1/(kSigp0Par2+pvertex->GetRr()); + Float_t sigmap = kSigpPar0*sigmap0*(kSigpPar1+kSigpPar2*p12); // "resolution: of point angle - as a function of radius and momenta + + + Float_t causalityA = (1.0-pvertex->GetCausalityP()[0])*(1.0-pvertex->GetCausalityP()[1]); + Float_t causalityB = TMath::Sqrt(TMath::Min(pvertex->GetCausalityP()[2],Double_t(0.7))* + TMath::Min(pvertex->GetCausalityP()[3],Double_t(0.7))); + // + //Bo: Float_t likelihood0 = (TMath::Exp(-pvertex->GetDistNorm())+0.1) *(pvertex->GetDist2()<0.5)*(pvertex->GetDistNorm()<5); + Float_t lDistNorm = pvertex->GetDcaV0Daughters()/pvertex->GetDistSigma(); + Float_t likelihood0 = (TMath::Exp(-lDistNorm)+0.1) *(pvertex->GetDcaV0Daughters()GetV0CosineOfPointingAngle())/sigmap)+ + 0.4*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/(4.*sigmap))+ + 0.4*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/(8.*sigmap))+ + 0.1*TMath::Exp(-(1.0001-pvertex->GetV0CosineOfPointingAngle())/0.01); + // + if (causalityAGetESDV0Params()->StreamLevel()>0){ + Bool_t gold = TMath::Abs(TMath::Abs(track0->GetLabel())-TMath::Abs(track1->GetLabel()))==1; + cstream<<"It0"<< + "Tr0.="<0) continue; + //if (forbidden[itrack0]>0 ||forbidden[itrack1]>0) continue; + // + pvertex->SetStatus(0); + // if (rejectBase) { + // pvertex->SetStatus(-100); + //} + if (pvertex->GetV0CosineOfPointingAngle()>kMinPointAngle2) { + //Bo: pvertex->SetESDindexes(track0->GetESDtrack()->GetID(),track1->GetESDtrack()->GetID()); + pvertex->SetIndex(0,track0->GetESDtrack()->GetID());//Bo: consistency 0 for neg + pvertex->SetIndex(1,track1->GetESDtrack()->GetID());//Bo: consistency 1 for pos + // if (v0OK==0){ + if (v0OK){ + // AliV0vertex vertexjuri(*track0,*track1); + // vertexjuri.SetESDindexes(track0->fESDtrack->GetID(),track1->fESDtrack->GetID()); + // event->AddV0(&vertexjuri); + pvertex->SetStatus(100); + } + pvertex->SetOnFlyStatus(kTRUE); + pvertex->ChangeMassHypothesis(kK0Short); + event->AddV0(pvertex); + } + } + } + // + // + // delete temporary arrays + // + delete[] forbidden; + delete[] minPointAngle; + delete[] maxr; + delete[] minr; + delete[] norm; + delete[] normdist; + delete[] normdist1; + delete[] normdist0; + delete[] dist; + delete[] itsmap; + delete[] helixes; + delete pvertex; + delete dummy; +} +//------------------------------------------------------------------------ +void AliITSV0Finder::RefitV02(const AliESDEvent *event, + AliITStrackerMI *tracker) +{ + // + //try to refit V0s in the third path of the reconstruction + // + TTreeSRedirector &cstream = *(tracker->GetDebugStreamer()); + // + Int_t nv0s = event->GetNumberOfV0s(); + Float_t primvertex[3]={tracker->GetX(),tracker->GetY(),tracker->GetZ()}; + AliV0 v0temp; + for (Int_t iv0 = 0; iv0GetV0(iv0); + if (!v0mi) continue; + Int_t itrack0 = v0mi->GetIndex(0); + Int_t itrack1 = v0mi->GetIndex(1); + AliESDtrack *esd0 = event->GetTrack(itrack0); + AliESDtrack *esd1 = event->GetTrack(itrack1); + if (!esd0||!esd1) continue; + AliITStrackMI tpc0(*esd0); + AliITStrackMI tpc1(*esd1); + Double_t x,y,z; v0mi->GetXYZ(x,y,z); //I.B. + Double_t alpha =TMath::ATan2(y,x); //I.B. + if (v0mi->GetRr()>85){ + if (tpc0.Propagate(alpha,v0mi->GetRr())&&tpc1.Propagate(alpha,v0mi->GetRr())){ + v0temp.SetParamN(tpc0); + v0temp.SetParamP(tpc1); + v0temp.Update(primvertex); + if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) cstream<<"Refit"<< + "V0.="<GetDist2() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ + if (v0temp.GetDcaV0Daughters()GetDcaV0Daughters() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ + v0mi->SetParamN(tpc0); + v0mi->SetParamP(tpc1); + v0mi->Update(primvertex); + } + } + continue; + } + if (v0mi->GetRr()>35){ + AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc0); + AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc1); + if (tpc0.Propagate(alpha,v0mi->GetRr())&&tpc1.Propagate(alpha,v0mi->GetRr())){ + v0temp.SetParamN(tpc0); + v0temp.SetParamP(tpc1); + v0temp.Update(primvertex); + if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) cstream<<"Refit"<< + "V0.="<GetDist2() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ + if (v0temp.GetDcaV0Daughters()GetDcaV0Daughters() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ + v0mi->SetParamN(tpc0); + v0mi->SetParamP(tpc1); + v0mi->Update(primvertex); + } + } + continue; + } + AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc0); + AliITStrackerMI::CorrectForTPCtoITSDeadZoneMaterial(&tpc1); + // if (tpc0.Propagate(alpha,v0mi->GetRr())&&tpc1.Propagate(alpha,v0mi->GetRr())){ + if (tracker->RefitAt(v0mi->GetRr(),&tpc0, v0mi->GetClusters(0)) && + tracker->RefitAt(v0mi->GetRr(),&tpc1, v0mi->GetClusters(1))){ + v0temp.SetParamN(tpc0); + v0temp.SetParamP(tpc1); + v0temp.Update(primvertex); + if (AliITSReconstructor::GetRecoParam()->GetESDV0Params()->StreamLevel()>0) cstream<<"Refit"<< + "V0.="<GetDist2() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ + if (v0temp.GetDcaV0Daughters()GetDcaV0Daughters() || v0temp.GetV0CosineOfPointingAngle()>v0mi->GetV0CosineOfPointingAngle()){ + v0mi->SetParamN(tpc0); + v0mi->SetParamP(tpc1); + v0mi->Update(primvertex); + } + } + } +} +//------------------------------------------------------------------------ + + +AliITSV0Finder::~AliITSV0Finder() +{ + // + //destructor + // + if (fDebugStreamer) { + //fDebugStreamer->Close(); + delete fDebugStreamer; + } + +} diff --git a/ITS/GetGainModuleLevel.C b/ITS/GetGainModuleLevel.C index 1421fcd2b4a..d9e0fa7047f 100644 --- a/ITS/GetGainModuleLevel.C +++ b/ITS/GetGainModuleLevel.C @@ -1,319 +1,319 @@ -#include "TMath.h" -#include "TList.h" -#include "TH2F.h" -#include "TH1F.h" -#include "TF1.h" -#include "TH1D.h" -#include "TProfile.h" -#include "TFile.h" -#include "TCanvas.h" -#include -#include -#include -#include "TStyle.h" -#include "TGrid.h" - - -class TList; -class TH2F; -class TH1F; -class TH1D; -class TProfile; -class TFile; -class TCanvas; -class TStyle; -class TF1; -class TGrid; - - - - - -Double_t convolution(Double_t* x,Double_t *par) -{ - //Fit parameters: - //par[0]=Width (scale) parameter of Landau density - //par[1]=Most Probable (MP, location) parameter of Landau density - //par[2]=Total area (integral -inf to inf, normalization constant) - //par[3]=Width (sigma) of convoluted Gaussian function - // - //In the Landau distribution (represented by the CERNLIB approximation), - //the maximum is located at x=-0.22278298 with the location parameter=0. - //This shift is corrected within this function, so that the actual - //maximum is identical to the MP parameter. - - // Numeric constants - Double_t invsq2pi = 0.3989422804014; // (2 pi)^(-1/2) - Double_t mpshift = -0.22278298; // Landau maximum location - - // Control constants - Double_t np = 200.0; // number of convolution steps - Double_t sc = 5.0; // convolution extends to +-sc Gaussian sigmas - - // Variables - Double_t xx; - Double_t mpc; - Double_t fland; - Double_t sum = 0.0; - Double_t xlow,xupp; - Double_t step; - Double_t i; - - - // MP shift correction - mpc = par[1] - mpshift * par[0]; - - // Range of convolution integral - xlow = x[0] - sc * par[3]; - xupp = x[0] + sc * par[3]; - - step = (xupp-xlow) / np; - - // Convolution integral of Landau and Gaussian by sum - for(i=1.0; i<=np/2; i++) - { - xx = xlow + (i-.5) * step; - fland = TMath::Landau(xx,mpc,par[0]) / par[0]; - sum += fland * TMath::Gaus(x[0],xx,par[3]); - - xx = xupp - (i-.5) * step; - fland = TMath::Landau(xx,mpc,par[0]) / par[0]; - sum += fland * TMath::Gaus(x[0],xx,par[3]); - } - - return (par[2] * step * sum * invsq2pi / par[3]); -} - - - - -void GetGainModuleLevel(TString filename,Bool_t normal=1,Int_t ntofit=500, Bool_t grid=0) -{ - gROOT->SetStyle("Plain"); - gStyle->SetPalette(1,0); - gStyle->SetOptStat(111111); - gStyle->SetOptFit(1); - if(grid) - TGrid::Connect("alien://"); - - TFile* file_data=TFile::Open(filename); - if(!file_data) - return; - TList *listin=0x0; - listin=(TList*)file_data->Get("output"); - if(!listin) - listin=(TList*)file_data->Get("PWGPPdEdxSSDQA/output"); - if(!listin) - listin=(TList*)file_data->Get("PWGPPdEdxSSDQA/SSDdEdxQA"); - if(!listin) - listin=(TList*)file_data->Get("SSDdEdxQA"); - if(!listin) - return; - TH2F* fHistQ=0x0; - if (normal) - fHistQ=(TH2F*)listin ->FindObject("QACharge"); - else - fHistQ=(TH2F*)listin ->FindObject("QAChargeCorrected"); - if(!fHistQ) - return; - TH2F* fHistCR=(TH2F*)listin ->FindObject("QAChargeRatio"); - if(!fHistCR) - return; - TList *listout1=new TList(); - - TList *listout2=new TList(); - - TH1F* fHistMPVs=new TH1F("HistMPVS","HistMPVs;MPV;N",75,70,95); - fHistMPVs->SetDirectory(0); - listout2->Add(fHistMPVs); - - TH1F* fHistSL=new TH1F("HistSL","#sigma_{Landau};#sigma_{Landau};N",40,0,16); - fHistSL->SetDirectory(0); - listout2->Add(fHistSL); - - TH1F* fHistSG=new TH1F("HistSG","#sigma_{Gaus};#sigma_{Gaus};N",40,0,16); - fHistSG->SetDirectory(0); - listout2->Add(fHistSG); - - TH1F* fHistCRmean=new TH1F("HistCRmean","HistCRmean;CRmean;N",200,-1,1); - fHistCRmean->SetDirectory(0); - listout2->Add(fHistCRmean); - - TH1F* fHistCRRMS=new TH1F("HistCRRMS","HistCRRMS;CRRMS;N",100,0,1); - fHistCRRMS->SetDirectory(0); - listout2->Add(fHistCRRMS); - - TH1F* fHistGainP=new TH1F("HistGainP","HistGainP;CRGainPcorr;N",120,0.5,2.0); - fHistGainP->SetDirectory(0); - listout2->Add(fHistGainP); - - TH1F* fHistGainN=new TH1F("HistGainN","HistGainN;CRGainNcorr;N",120,0.5,2.0); - fHistGainN->SetDirectory(0); - listout2->Add(fHistGainN); - - TH1F *fMPVGraph = new TH1F("MPVgraph","MPVgraph;Module number;MPV",1698,-0.5,1697.5); - fMPVGraph->SetMarkerColor(kRed); - fMPVGraph->SetMarkerStyle(22); - listout2->Add(fMPVGraph); - - TH1F *fCRmeanGraph = new TH1F("CRmeangraph","CRmeangraph;Module number;MPV",1698,-0.5,1697.5); - fCRmeanGraph->SetMarkerColor(kBlue); - fCRmeanGraph->SetMarkerStyle(23); - listout2->Add(fCRmeanGraph); - - Float_t gainP[1698]; - Float_t gainN[1698]; - Float_t mpv[1698]; - Int_t flag[1698]; - - ofstream outfiletxt; - outfiletxt.open("gain.txt"); - outfiletxt.width(10) ; - outfiletxt.setf(outfiletxt.left); - outfiletxt<<"MODULE"<<"\t"; - outfiletxt.width(10); - outfiletxt.setf(outfiletxt.left); - outfiletxt<<"FLAG"<<"\t"; - outfiletxt.width(10) ; - outfiletxt.setf(outfiletxt.left); - outfiletxt<<"GainPcorr"<<"\t"; - outfiletxt.width(10) ; - outfiletxt.setf(outfiletxt.left); - outfiletxt<<"GainNcorr"<<"\t"; - outfiletxt.width(10) ; - outfiletxt.setf(outfiletxt.left); - outfiletxt<<"MPV"<ProjectionY(tmpCR,i+1,i+1); - Double_t mean=fHist1DCR->GetMean(); - if(!(TMath::Abs(mean)<1.0)||fHist1DCR->GetEntries()<10) - { - flag[i]=-2; - gainN[i]=1.0; - gainP[i]=1.0; - mpv[i]=1.0; - continue; - } - fHistCRmean->Fill(mean); - fHistCRRMS->Fill(fHist1DCR->GetRMS()); - gainN[i]=1.0/(1.0+mean); - gainP[i]=1.0/(1.0-mean); - fHistGainP->Fill(gainP[i]); - fHistGainN->Fill(gainN[i]); - fCRmeanGraph->SetBinContent(i+1,mean); - fCRmeanGraph->SetBinError(i+1,fHist1DCR->GetRMS()); - - - TH1D* fHist1DQ=fHistQ->ProjectionY(tmpQ,i+1,i+1); - fHist1DQ->SetDirectory(0); - listout1->Add(fHist1DQ); - if(fHist1DQ->GetEntries()GetBinCenter(fHist1DQ->GetMaximumBin()); - TF1 *f1 = new TF1(tmpQ,convolution,range*0.45,range*3.0,4); - f1->SetParameters(7.0,range,1.0,5.5); - Float_t normalization=fHist1DQ->GetEntries()*fHist1DQ->GetXaxis()->GetBinWidth(2)/f1->Integral(range*0.45,range*3.0); - f1->SetParameters(7.0,range,normalization,5.5); - //f1->SetParameters(7.0,range,fHist1DQ->GetMaximum(),5.5); - f1->SetParNames("sigma Landau","MPV","N","sigma Gaus"); - f1->SetParLimits(0,2.0,100.0); - f1->SetParLimits(3,0.0,100.0); - if(fHist1DQ->Fit(tmpQ,"BRQ")==0) - { - mpv[i]=f1->GetParameter(1); - fHistMPVs->Fill(mpv[i]); - fHistSL->Fill(f1->GetParameter(0)); - fHistSG->Fill(f1->GetParameter(3)); - flag[i]=1; - fMPVGraph->SetBinContent(i+1,f1->GetParameter(1)); - fMPVGraph->SetBinError(i+1,f1->GetParError(1)); - if(mpv[i]<75.0) - { - outfiletxtbad<<"MPV lower than 75 \t module="<100.0) - { - outfiletxtbad<<"MPV higher than 100 \t module="<GetParError(1)>1.0) - { - outfiletxtbad<<"MPV high error on MPV \t module="<Divide(2,1); - c1->cd(1); - fHistQ->Draw("colz"); - c1->cd(2); - fHistCR->Draw("colz"); - - - - TFile* fout1=TFile::Open("gain_all_fits.root","recreate"); - listout1->Write("output",TObject::kSingleKey); - fout1->Close(); - - TFile* fout2=TFile::Open("gain_control_plots.root","recreate"); - listout2->Write("output",TObject::kSingleKey); - fout2->Close(); - - - -} +#include "TMath.h" +#include "TList.h" +#include "TH2F.h" +#include "TH1F.h" +#include "TF1.h" +#include "TH1D.h" +#include "TProfile.h" +#include "TFile.h" +#include "TCanvas.h" +#include +#include +#include +#include "TStyle.h" +#include "TGrid.h" + + +class TList; +class TH2F; +class TH1F; +class TH1D; +class TProfile; +class TFile; +class TCanvas; +class TStyle; +class TF1; +class TGrid; + + + + + +Double_t convolution(Double_t* x,Double_t *par) +{ + //Fit parameters: + //par[0]=Width (scale) parameter of Landau density + //par[1]=Most Probable (MP, location) parameter of Landau density + //par[2]=Total area (integral -inf to inf, normalization constant) + //par[3]=Width (sigma) of convoluted Gaussian function + // + //In the Landau distribution (represented by the CERNLIB approximation), + //the maximum is located at x=-0.22278298 with the location parameter=0. + //This shift is corrected within this function, so that the actual + //maximum is identical to the MP parameter. + + // Numeric constants + Double_t invsq2pi = 0.3989422804014; // (2 pi)^(-1/2) + Double_t mpshift = -0.22278298; // Landau maximum location + + // Control constants + Double_t np = 200.0; // number of convolution steps + Double_t sc = 5.0; // convolution extends to +-sc Gaussian sigmas + + // Variables + Double_t xx; + Double_t mpc; + Double_t fland; + Double_t sum = 0.0; + Double_t xlow,xupp; + Double_t step; + Double_t i; + + + // MP shift correction + mpc = par[1] - mpshift * par[0]; + + // Range of convolution integral + xlow = x[0] - sc * par[3]; + xupp = x[0] + sc * par[3]; + + step = (xupp-xlow) / np; + + // Convolution integral of Landau and Gaussian by sum + for(i=1.0; i<=np/2; i++) + { + xx = xlow + (i-.5) * step; + fland = TMath::Landau(xx,mpc,par[0]) / par[0]; + sum += fland * TMath::Gaus(x[0],xx,par[3]); + + xx = xupp - (i-.5) * step; + fland = TMath::Landau(xx,mpc,par[0]) / par[0]; + sum += fland * TMath::Gaus(x[0],xx,par[3]); + } + + return (par[2] * step * sum * invsq2pi / par[3]); +} + + + + +void GetGainModuleLevel(TString filename,Bool_t normal=1,Int_t ntofit=500, Bool_t grid=0) +{ + gROOT->SetStyle("Plain"); + gStyle->SetPalette(1,0); + gStyle->SetOptStat(111111); + gStyle->SetOptFit(1); + if(grid) + TGrid::Connect("alien://"); + + TFile* file_data=TFile::Open(filename); + if(!file_data) + return; + TList *listin=0x0; + listin=(TList*)file_data->Get("output"); + if(!listin) + listin=(TList*)file_data->Get("PWGPPdEdxSSDQA/output"); + if(!listin) + listin=(TList*)file_data->Get("PWGPPdEdxSSDQA/SSDdEdxQA"); + if(!listin) + listin=(TList*)file_data->Get("SSDdEdxQA"); + if(!listin) + return; + TH2F* fHistQ=0x0; + if (normal) + fHistQ=(TH2F*)listin ->FindObject("QACharge"); + else + fHistQ=(TH2F*)listin ->FindObject("QAChargeCorrected"); + if(!fHistQ) + return; + TH2F* fHistCR=(TH2F*)listin ->FindObject("QAChargeRatio"); + if(!fHistCR) + return; + TList *listout1=new TList(); + + TList *listout2=new TList(); + + TH1F* fHistMPVs=new TH1F("HistMPVS","HistMPVs;MPV;N",75,70,95); + fHistMPVs->SetDirectory(0); + listout2->Add(fHistMPVs); + + TH1F* fHistSL=new TH1F("HistSL","#sigma_{Landau};#sigma_{Landau};N",40,0,16); + fHistSL->SetDirectory(0); + listout2->Add(fHistSL); + + TH1F* fHistSG=new TH1F("HistSG","#sigma_{Gaus};#sigma_{Gaus};N",40,0,16); + fHistSG->SetDirectory(0); + listout2->Add(fHistSG); + + TH1F* fHistCRmean=new TH1F("HistCRmean","HistCRmean;CRmean;N",200,-1,1); + fHistCRmean->SetDirectory(0); + listout2->Add(fHistCRmean); + + TH1F* fHistCRRMS=new TH1F("HistCRRMS","HistCRRMS;CRRMS;N",100,0,1); + fHistCRRMS->SetDirectory(0); + listout2->Add(fHistCRRMS); + + TH1F* fHistGainP=new TH1F("HistGainP","HistGainP;CRGainPcorr;N",120,0.5,2.0); + fHistGainP->SetDirectory(0); + listout2->Add(fHistGainP); + + TH1F* fHistGainN=new TH1F("HistGainN","HistGainN;CRGainNcorr;N",120,0.5,2.0); + fHistGainN->SetDirectory(0); + listout2->Add(fHistGainN); + + TH1F *fMPVGraph = new TH1F("MPVgraph","MPVgraph;Module number;MPV",1698,-0.5,1697.5); + fMPVGraph->SetMarkerColor(kRed); + fMPVGraph->SetMarkerStyle(22); + listout2->Add(fMPVGraph); + + TH1F *fCRmeanGraph = new TH1F("CRmeangraph","CRmeangraph;Module number;MPV",1698,-0.5,1697.5); + fCRmeanGraph->SetMarkerColor(kBlue); + fCRmeanGraph->SetMarkerStyle(23); + listout2->Add(fCRmeanGraph); + + Float_t gainP[1698]; + Float_t gainN[1698]; + Float_t mpv[1698]; + Int_t flag[1698]; + + ofstream outfiletxt; + outfiletxt.open("gain.txt"); + outfiletxt.width(10) ; + outfiletxt.setf(outfiletxt.left); + outfiletxt<<"MODULE"<<"\t"; + outfiletxt.width(10); + outfiletxt.setf(outfiletxt.left); + outfiletxt<<"FLAG"<<"\t"; + outfiletxt.width(10) ; + outfiletxt.setf(outfiletxt.left); + outfiletxt<<"GainPcorr"<<"\t"; + outfiletxt.width(10) ; + outfiletxt.setf(outfiletxt.left); + outfiletxt<<"GainNcorr"<<"\t"; + outfiletxt.width(10) ; + outfiletxt.setf(outfiletxt.left); + outfiletxt<<"MPV"<ProjectionY(tmpCR,i+1,i+1); + Double_t mean=fHist1DCR->GetMean(); + if(!(TMath::Abs(mean)<1.0)||fHist1DCR->GetEntries()<10) + { + flag[i]=-2; + gainN[i]=1.0; + gainP[i]=1.0; + mpv[i]=1.0; + continue; + } + fHistCRmean->Fill(mean); + fHistCRRMS->Fill(fHist1DCR->GetRMS()); + gainN[i]=1.0/(1.0+mean); + gainP[i]=1.0/(1.0-mean); + fHistGainP->Fill(gainP[i]); + fHistGainN->Fill(gainN[i]); + fCRmeanGraph->SetBinContent(i+1,mean); + fCRmeanGraph->SetBinError(i+1,fHist1DCR->GetRMS()); + + + TH1D* fHist1DQ=fHistQ->ProjectionY(tmpQ,i+1,i+1); + fHist1DQ->SetDirectory(0); + listout1->Add(fHist1DQ); + if(fHist1DQ->GetEntries()GetBinCenter(fHist1DQ->GetMaximumBin()); + TF1 *f1 = new TF1(tmpQ,convolution,range*0.45,range*3.0,4); + f1->SetParameters(7.0,range,1.0,5.5); + Float_t normalization=fHist1DQ->GetEntries()*fHist1DQ->GetXaxis()->GetBinWidth(2)/f1->Integral(range*0.45,range*3.0); + f1->SetParameters(7.0,range,normalization,5.5); + //f1->SetParameters(7.0,range,fHist1DQ->GetMaximum(),5.5); + f1->SetParNames("sigma Landau","MPV","N","sigma Gaus"); + f1->SetParLimits(0,2.0,100.0); + f1->SetParLimits(3,0.0,100.0); + if(fHist1DQ->Fit(tmpQ,"BRQ")==0) + { + mpv[i]=f1->GetParameter(1); + fHistMPVs->Fill(mpv[i]); + fHistSL->Fill(f1->GetParameter(0)); + fHistSG->Fill(f1->GetParameter(3)); + flag[i]=1; + fMPVGraph->SetBinContent(i+1,f1->GetParameter(1)); + fMPVGraph->SetBinError(i+1,f1->GetParError(1)); + if(mpv[i]<75.0) + { + outfiletxtbad<<"MPV lower than 75 \t module="<100.0) + { + outfiletxtbad<<"MPV higher than 100 \t module="<GetParError(1)>1.0) + { + outfiletxtbad<<"MPV high error on MPV \t module="<Divide(2,1); + c1->cd(1); + fHistQ->Draw("colz"); + c1->cd(2); + fHistCR->Draw("colz"); + + + + TFile* fout1=TFile::Open("gain_all_fits.root","recreate"); + listout1->Write("output",TObject::kSingleKey); + fout1->Close(); + + TFile* fout2=TFile::Open("gain_control_plots.root","recreate"); + listout2->Write("output",TObject::kSingleKey); + fout2->Close(); + + + +} diff --git a/ITS/UPGRADE/KMCDetector.cxx b/ITS/UPGRADE/KMCDetector.cxx index f2c63c1212e..1c9ce095d67 100755 --- a/ITS/UPGRADE/KMCDetector.cxx +++ b/ITS/UPGRADE/KMCDetector.cxx @@ -1,2933 +1,2933 @@ -#include "KMCDetector.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*********************************************************** - -Fast Simulation tool for Inner Tracker Systems - -***********************************************************/ - - -#define RIDICULOUS 999999 // A ridiculously large resolution (cm) to flag a dead detector - -#define Luminosity 1.e27 // Luminosity of the beam (LHC HI == 1.e27, RHIC II == 8.e27 ) -#define SigmaD 6.0 // Size of the interaction diamond (cm) (LHC = 6.0 cm) -#define dNdEtaMinB 1//950//660//950 // Multiplicity per unit Eta (AuAu MinBias = 170, Central = 700) -// #define dNdEtaCent 2300//15000 //1600//2300 // Multiplicity per unit Eta (LHC at 5.5 TeV not known) - -#define CrossSectionMinB 8 // minB Cross section for event under study (PbPb MinBias ~ 8 Barns) -#define AcceptanceOfTpcAndSi 1 //1//0.60 //0.35 // Assumed geometric acceptance (efficiency) of the TPC and Si detectors -#define UPCBackgroundMultiplier 1.0 // Increase multiplicity in detector (0.0 to 1.0 * UPCRate ) (eg 1.0) -#define OtherBackground 0.0 // Increase multiplicity in detector (0.0 to 1.0 * minBias) (eg 0.0) -#define EfficiencySearchFlag 2 // Define search method: - // -> ChiSquarePlusConfLevel = 2, ChiSquare = 1, Simple = 0. - -#define PionMass 0.139 // Mass of the Pion -#define KaonMass 0.498 // Mass of the Kaon -#define D0Mass 1.865 // Mass of the D0 - -//TMatrixD *probKomb; // table for efficiency kombinatorics - -ClassImp(KMCProbe) - -Int_t KMCProbe::fgNITSLayers = 0; -Double_t KMCProbe::fgMissingHitPenalty = 2.; -//__________________________________________________________________________ -KMCProbe& KMCProbe::operator=(const KMCProbe& src) -{ - if (this!=&src) { - AliExternalTrackParam::operator=(src); - fMass = src.fMass; - fChi2 = src.fChi2; - fHits = src.fHits; - fFakes = src.fFakes; - fNHits = src.fNHits; - fNHitsITS = src.fNHitsITS; - fNHitsITSFake = src.fNHitsITSFake; - fInnLrCheck = src.fInnLrCheck; - for (int i=kMaxITSLr;i--;) fClID[i] = src.fClID[i]; - } - return *this; -} - -//__________________________________________________________________________ -KMCProbe::KMCProbe(KMCProbe& src) - : AliExternalTrackParam(src), - fMass(src.fMass), - fChi2(src.fChi2), - fHits(src.fHits), - fFakes(src.fFakes), - fNHits(src.fNHits), - fNHitsITS(src.fNHitsITS), - fNHitsITSFake(src.fNHitsITSFake), - fInnLrCheck(src.fInnLrCheck) -{ - for (int i=kMaxITSLr;i--;) fClID[i] = src.fClID[i]; -} - -//__________________________________________________________________________ -void KMCProbe::ResetCovMat() -{ - // reset errors - double *trCov = (double*)GetCovariance(); - double *trPars = (double*)GetParameter(); - const double kLargeErr2Coord = 50*50; - const double kLargeErr2Dir = 0.6*0.6; - const double kLargeErr2PtI = 0.5*0.5; - for (int ic=15;ic--;) trCov[ic] = 0.; - trCov[kY2] = trCov[kZ2] = kLargeErr2Coord; - trCov[kSnp2] = trCov[kTgl2] = kLargeErr2Dir; - trCov[kPtI2] = kLargeErr2PtI*trPars[kPtI]*trPars[kPtI]; - // -} - -//__________________________________________________________________________ -void KMCProbe::Print(Option_t* option) const -{ - printf("M=%.3f Chi2=%7.2f (Norm:%6.2f|%d) Hits: Total:%d ITS:%d ITSFakes:%d | Y:%+8.4f Z: %+8.4f |", - fMass,fChi2,GetNormChi2(kTRUE),fInnLrCheck,fNHits,fNHitsITS,fNHitsITSFake, GetY(),GetZ()); - for (int i=0;iIsKilled()) { - if (IsKilled()) return 0; - return -1; - } - else if (IsKilled()) return 1; - double chi2a = GetNormChi2(kTRUE); - double chi2b = trc->GetNormChi2(kTRUE); - if (chi2achi2b) return 1; - return 0; -} - -//__________________________________________________________________________ -Bool_t KMCProbe::GetXatLabR(Double_t r,Double_t &x, Double_t bz, Int_t dir) const -{ - // Get local X of the track position estimated at the radius lab radius r. - // The track curvature is accounted exactly - // - // The flag "dir" can be used to remove the ambiguity of which intersection to take (out of 2 possible) - // 0 - take the intersection closest to the current track position - // >0 - go along the track (increasing fX) - // <0 - go backward (decreasing fX) - // - // special case of R=0 - if (r=kAlmost1) { // || to Y axis - double det = (r-fx)*(r+fx); - if (det<0) return kFALSE; // does not reach raduis r - x = fx; - if (dir==0) return kTRUE; - det = TMath::Sqrt(det); - if (dir>0) { // along the track direction - if (sn>0) {if (fy>det) return kFALSE;} // track is along Y axis and above the circle - else {if (fy<-det) return kFALSE;} // track is against Y axis amd belo the circle - } - else if(dir>0) { // agains track direction - if (sn>0) {if (fy<-det) return kFALSE;} // track is along Y axis - else if (fy>det) return kFALSE; // track is against Y axis - } - } - else if (TMath::Abs(sn)<=kAlmost0) { // || to X axis - double det = (r-fy)*(r+fy); - if (det<0) return kFALSE; // does not reach raduis r - det = TMath::Sqrt(det); - if (!dir) { - x = fx>0 ? det : -det; // choose the solution requiring the smalest step - return kTRUE; - } - else if (dir>0) { // along the track direction - if (fx > det) return kFALSE; // current point is in on the right from the circle - else if (fx <-det) x = -det; // on the left - else x = det; // within the circle - } - else { // against the track direction - if (fx <-det) return kFALSE; - else if (fx > det) x = det; - else x = -det; - } - } - else { // general case of straight line - double cs = TMath::Sqrt((1-sn)*(1+sn)); - double xsyc = fx*sn-fy*cs; - double det = (r-xsyc)*(r+xsyc); - if (det<0) return kFALSE; // does not reach raduis r - det = TMath::Sqrt(det); - double xcys = fx*cs+fy*sn; - double t = -xcys; - if (dir==0) t += t>0 ? -det:det; // chose the solution requiring the smalest step - else if (dir>0) { // go in increasing fX direction. ( t+-det > 0) - if (t>=-det) t += -det; // take minimal step giving t>0 - else return kFALSE; // both solutions have negative t - } - else { // go in increasing fx direction. (t+-det < 0) - if (tkAlmost0) { // when y0==0 the x,y is unique - double dfx = tR2r0*TMath::Abs(y0)*det; - double dfy = tR2r0*x0*TMath::Sign(det,y0); - if (dir==0) { // chose the one which corresponds to smallest step - double delta = (x-fx)*dfx-(y-fy)*dfy; // the choice of + in C will lead to smaller step if delta<0 - if (delta<0) x += dfx; - else x -= dfx; - } - else if (dir>0) { // along track direction: x must be > fx - x -= dfx; // try the smallest step (dfx is positive) - if (xfx && (x-=dfx+dfx)>fx) return kFALSE; - } - } - else { // special case: track touching the circle just in 1 point - if ( (dir>0&&xfx) ) return kFALSE; - } - } - // - return kTRUE; -} - -//____________________________________ -Bool_t KMCProbe::PropagateToR(double r, double b, int dir) -{ - // go to radius R - // - double xR = 0; - double rr = r*r; - int iter = 0; - const double kTiny = 1e-4; - while(1) { - if (!GetXatLabR(r ,xR, b, dir)) { - // printf("Track with pt=%f cannot reach radius %f\n",Pt(),r); - // Print("l"); - return kFALSE; - } - - if (!PropagateTo(xR, b)) { - if (AliLog::GetGlobalDebugLevel()>2) { - printf("Failed to propagate to X=%f for R=%f\n",xR,r); - Print("l"); - } - return kFALSE; - } - double rcurr2 = xR*xR + GetY()*GetY(); - if (TMath::Abs(rcurr2-rr)2) { - printf("Failed to rotate to %f to propagate to R=%f\n",phi,r); - Print("l"); - } - return kFALSE; - } - if (++iter>8) { - if (AliLog::GetGlobalDebugLevel()>2) { - printf("Failed to propagate to R=%f after %d steps\n",r,iter); - Print("l"); - } - return kFALSE; - } - } - return kTRUE; -} - - -//__________________________________________________________________________ -Bool_t KMCProbe::CorrectForMeanMaterial(const KMCLayer* lr, Bool_t inward) -{ - // printf("before at r=%.1f p=%.4f\n",lr->fR, P()); - if (AliExternalTrackParam::CorrectForMeanMaterial(lr->fx2X0, inward ? lr->fXRho : -lr->fXRho, GetMass() , kTRUE)) { - // printf("after at r=%.1f p=%.4f\n",lr->fR, P()); - return kTRUE; - } - AliDebug(2,Form("Failed to apply material correction, X/X0=%.4f", lr->fx2X0)); - if (AliLog::GetGlobalDebugLevel()>1) Print(); - return kFALSE; -} - -///////////////////////////////////////////////////////////////////////////// -ClassImp(KMCCluster) - -//_________________________________________________________________________ -KMCCluster::KMCCluster(KMCCluster &src) -: TObject(src), - fY(src.fY),fZ(src.fZ),fX(src.fX),fPhi(src.fPhi) -{} - -//__________________________________________________________________________ -KMCCluster& KMCCluster::operator=(const KMCCluster& src) -{ - if (this!=&src) { - TObject::operator=(src); - fY = src.fY; - fZ = src.fZ; - fX = src.fX; - fPhi = src.fPhi; - } - return *this; -} - -//_________________________________________________________________________ -void KMCCluster::Print(Option_t *) const -{ - printf(" Local YZ = (%3.4lf,%3.4lf) | X=%3.4lf phi: %+.3f %s\n",fY,fZ,fX,fPhi,IsKilled()?"Killed":""); -} - -///////////////////////////////////////////////////////////////////////////// -ClassImp(KMCLayer) - -Double_t KMCLayer::fgDefEff = 1.0; -//__________________________________________________________________________ -KMCLayer::KMCLayer(char *name) : - TNamed(name,name),fR(0),fx2X0(0),fPhiRes(0),fZRes(0),fEff(0),fIsDead(kFALSE),fType(-1),fActiveID(-1),fSig2EstD(999),fSig2EstZ(999), - fClCorr(),fClMC(),fClBg("KMCCluster",5), fTrCorr(), fTrMC("KMCProbe",5) -{ - Reset(); -} - -//__________________________________________________________________________ -void KMCLayer::Reset() -{ - fTrCorr.Reset(); - fClCorr.Reset(); - ResetMC(); - fSig2EstD = fSig2EstZ = 999; - // -} - -//__________________________________________________________________________ -KMCProbe* KMCLayer::AddMCTrack(KMCProbe* src) -{ - int ntr = GetNMCTracks(); - KMCProbe* prb = 0; - if (src) prb = new(fTrMC[ntr]) KMCProbe(*src); - else prb = new(fTrMC[ntr]) KMCProbe(); - if (!IsDead()) prb->ResetHit(GetActiveID()); - return prb; -} - -//__________________________________________________________________________ -void KMCLayer::Print(Option_t *opt) const -{ - printf("Lr%3d(A%3d) %10s R=%5.1f X2X0=%.3f XRho=%.3f SigY=%.4f SigZ=%.4f Eff:%4.2f\n",GetUniqueID(),fActiveID,GetName(), fR, fx2X0,fXRho,fPhiRes,fZRes,fEff); - TString opts = opt; opts.ToLower(); - if (opts.Contains("c")) { - printf("Clusters: MC: %+7.4f:%+7.4f Ideal: %+7.4f:%+7.4f NBgCl: %3d NTrMC: %4d\n",fClMC.fY,fClMC.fZ, fClCorr.fY,fClCorr.fZ, GetNBgClusters(),GetNMCTracks()); - } -} - -///////////////////////////////////////////////////////////////////////////// -Double_t KMCDetector::fgVtxConstraint[2]={-1,-1}; - -ClassImp(KMCDetector) -KMCDetector::KMCDetector() : -TNamed("test_detector","detector"), - fNLayers(0), - fNActiveLayers(0), - fNActiveITSLayers(0), - fLastActiveLayer(-1), - fLastActiveITSLayer(-1), - fLastActiveLayerTracked(-1), - fBFieldG(5.), - fLhcUPCscale(1.0), - fIntegrationTime(0.02), // in ms - fConfLevel(0.0027), // 0.27 % -> 3 sigma confidence - fAvgRapidity(0.45), // Avg rapidity, MCS calc is a function of crossing angle - fParticleMass(0.140), // Standard: pion mass - fMaxRadiusSlowDet(10.), - fAtLeastCorr(-1), // if -1, then correct hit on all ITS layers - fAtLeastFake(1), // if at least x fakes, track is considered fake ... - fdNdEtaCent(2300), - fMaxChi2Cl(25.), - fMaxNormChi2NDF(5.), - fMinITSHits(4), -// - fMaxChi2ClSQ(4.), // precalulated internally - fMaxSeedToPropagate(300), -// - fUseBackground(kFALSE), - fBgYMin(1e6),fBgYMax(-1e6),fBgZMin(1e6),fBgZMax(-1e6), - fBgYMinTr(100),fBgYMaxTr(100),fBgZMinTr(100),fBgZMaxTr(100),fNBgLimits(0), - fDensFactorEta(1.), -// - fUpdCalls(0), - fHMCLrResidRPhi(0), - fHMCLrResidZ(0), - fHMCLrChi2(0), - fPattITS(0) -{ - // - // default constructor - // - // fLayers = new TObjArray(); - RequireMaxChi2Cl(fMaxChi2Cl); // just to precalulate default square -} - -KMCDetector::KMCDetector(char *name, char *title) - : TNamed(name,title), - fNLayers(0), - fNActiveLayers(0), - fNActiveITSLayers(0), - fLastActiveLayer(-1), - fLastActiveITSLayer(-1), - fLastActiveLayerTracked(-1), - fBFieldG(5.0), - fLhcUPCscale(1.0), - fIntegrationTime(0.02), // in ms - fConfLevel(0.0027), // 0.27 % -> 3 sigma confidence - fAvgRapidity(0.45), // Avg rapidity, MCS calc is a function of crossing angle - fParticleMass(0.140), // Standard: pion mass - fMaxRadiusSlowDet(10.), - fAtLeastCorr(-1), // if -1, then correct hit on all ITS layers - fAtLeastFake(1), // if at least x fakes, track is considered fake ... - fdNdEtaCent(2300), - fMaxChi2Cl(9.), - fMaxNormChi2NDF(5.), - fMinITSHits(4), - // - fMaxChi2ClSQ(3.), // precalulated internally - fMaxSeedToPropagate(50), - // - fUseBackground(kFALSE), - fBgYMin(1e6),fBgYMax(-1e6),fBgZMin(1e6),fBgZMax(-1e6), - fBgYMinTr(100),fBgYMaxTr(100),fBgZMinTr(100),fBgZMaxTr(100),fNBgLimits(0), - fDensFactorEta(1.), - // - fUpdCalls(0), - fHMCLrResidRPhi(0), - fHMCLrResidZ(0), - fHMCLrChi2(0), - fPattITS(0) -{ - // - // default constructor, that set the name and title - // - // fLayers = new TObjArray(); -} -KMCDetector::~KMCDetector() { // - // virtual destructor - // - // delete fLayers; -} - -void KMCDetector::InitMCWatchHistos() -{ - // init utility histos used for MC tuning - enum {kNBinRes=1000}; - const double kMaxResidRPhi=1.0,kMaxResidZ=1.0,kMaxChi2=50; - int nlr = fNActiveITSLayers; - TString nam = "mc_residrhi"; - TString tit = "MC $Delta Cl-Tr R#phi"; - fHMCLrResidRPhi = new TH2F(nam.Data(),tit.Data(),kNBinRes,-kMaxResidRPhi,kMaxResidRPhi,nlr,-0.5,nlr-0.5); - fHMCLrResidRPhi->GetXaxis()->SetTitle("cl-tr #Delta r#phi"); - fHMCLrResidRPhi->Sumw2(); - // - nam = "mc_residz"; - tit = "MC $Delta Cl-Tr Z"; - fHMCLrResidZ = new TH2F(nam.Data(),tit.Data(),kNBinRes,-kMaxResidRPhi,kMaxResidZ,nlr,-0.5,nlr-0.5); - fHMCLrResidZ->GetXaxis()->SetTitle("cl-tr #Delta z"); - fHMCLrResidZ->Sumw2(); - // - nam = "mc_chi2"; - tit = "MC #chi^{2} Cl-Tr Z"; - fHMCLrChi2 = new TH2F(nam.Data(),tit.Data(),kNBinRes,-kMaxResidRPhi,kMaxChi2,nlr,-0.5,nlr-0.5); - fHMCLrChi2->GetXaxis()->SetTitle("cl-tr #chi^{2}"); - fHMCLrChi2->Sumw2(); - // - SetBit(kUtilHisto); -} - - -void KMCDetector::AddLayer(char *name, Float_t radius, Float_t x2X0, Float_t xrho, Float_t phiRes, Float_t zRes, Float_t eff) { - // - // Add additional layer to the list of layers (ordered by radius) - // - - KMCLayer *newLayer = (KMCLayer*) fLayers.FindObject(name); - - if (!newLayer) { - newLayer = new KMCLayer(name); - newLayer->fR = radius; - newLayer->fx2X0 = x2X0; - newLayer->fXRho = xrho; - newLayer->fPhiRes = phiRes; - newLayer->fZRes = zRes; - eff = TMath::Min(1.f,eff); - newLayer->fEff = eff <0 ? KMCLayer::GetDefEff() : eff; - newLayer->fActiveID = -2; - TString lname = name; - newLayer->fType = KMCLayer::kTypeNA; - if (lname.Contains("tpc")) newLayer->fType = KMCLayer::kTPC; - else if (lname.Contains("its")) newLayer->fType = KMCLayer::kITS; - if (lname.Contains("vertex")) newLayer->SetBit(KMCLayer::kBitVertex); - // - if (newLayer->fType==KMCLayer::kTypeNA) printf("Attention: the layer %s has undefined type\n",name); - // - newLayer->fIsDead = (newLayer->fPhiRes==RIDICULOUS && newLayer->fZRes==RIDICULOUS); - // - if (fLayers.GetEntries()==0) - fLayers.Add(newLayer); - else { - // - for (Int_t i = 0; ifR) { fLayers.AddBefore(l,newLayer); break; } - if (radius>l->fR && (i+1)==fLayers.GetEntries() ) fLayers.Add(newLayer); // even bigger then last one - } - // - } - // - ClassifyLayers(); - // - } else { - printf("Layer with the name %s does already exist\n",name); - } -} - -//____________________________________________________________ -void KMCDetector::ClassifyLayers() -{ - // assign active Id's, etc - fLastActiveLayer = -1; - fLastActiveITSLayer = -1; - fNActiveLayers = 0; - fNActiveITSLayers = 0; - // - int nl = GetNLayers(); - for (int il=0;ilSetUniqueID(il); - if (!lr->IsDead()) { - fLastActiveLayer = il; - lr->fActiveID = fNActiveLayers++; - if (lr->IsITS()) { - fLastActiveITSLayer = il; - fNActiveITSLayers++; - } - } - } - // - KMCProbe::SetNITSLayers(fNActiveITSLayers); -} - -//____________________________________________________________ -void KMCDetector::KillLayer(char *name) { - // - // Marks layer as dead. Contribution only by Material Budget - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot mark as dead\n",name); - else { - tmp->fPhiRes = 999999; - tmp->fZRes = 999999; - tmp->fIsDead = kTRUE; - ClassifyLayers(); - } -} - -void KMCDetector::SetRadius(char *name, Float_t radius) { - // - // Set layer radius [cm] - // - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - // - if (!tmp) { - printf("Layer %s not found - cannot set radius\n",name); - } else { - - Float_t tmpRadL = tmp->fx2X0; - Float_t tmpPhiRes = tmp->fPhiRes; - Float_t tmpZRes = tmp->fZRes; - Float_t tmpXRho = tmp->fXRho; - RemoveLayer(name); // so that the ordering is correct - AddLayer(name,radius,tmpRadL,tmpXRho,tmpPhiRes,tmpZRes); - } -} - -Float_t KMCDetector::GetRadius(char *name) { - // - // Return layer radius [cm] - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot get radius\n",name); - else - return tmp->fR; - - return 0; -} - -void KMCDetector::SetRadiationLength(char *name, Float_t x2X0) { - // - // Set layer material [cm] - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot set layer material\n",name); - else { - tmp->fx2X0 = x2X0; - } -} - -Float_t KMCDetector::GetRadiationLength(char *name) { - // - // Return layer radius [cm] - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot get layer material\n",name); - else - return tmp->fx2X0; - - return 0; - -} - -void KMCDetector::SetResolution(char *name, Float_t phiRes, Float_t zRes) { - // - // Set layer resolution in [cm] - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot set resolution\n",name); - else { - tmp->fPhiRes = phiRes; - tmp->fZRes = zRes; - tmp->fIsDead = (zRes==RIDICULOUS && phiRes==RIDICULOUS); - ClassifyLayers(); - } -} - -Float_t KMCDetector::GetResolution(char *name, Int_t axis) { - // - // Return layer resolution in [cm] - // axis = 0: resolution in rphi - // axis = 1: resolution in z - // - - KMCLayer *tmp = GetLayer(name); - if (!tmp) - printf("Layer %s not found - cannot get resolution\n",name); - else { - if (axis==0) return tmp->fPhiRes; - if (axis==1) return tmp->fZRes; - printf("error: axis must be either 0 or 1 (rphi or z axis)\n"); - } - return 0; -} - -void KMCDetector::SetLayerEfficiency(char *name, Float_t eff) { - // - // Set layer efficnecy (prop that his is missed within this layer) - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot set layer efficiency\n",name); - else { - tmp->fEff = eff; - } -} - -Float_t KMCDetector::GetLayerEfficiency(char *name) { - // - // Get layer efficnecy (prop that his is missed within this layer) - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot get layer efficneicy\n",name); - else - return tmp->fEff; - - return 0; - -} - -void KMCDetector::RemoveLayer(char *name) { - // - // Removes a layer from the list - // - - KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); - if (!tmp) - printf("Layer %s not found - cannot remove it\n",name); - else { - fLayers.Remove(tmp); - ClassifyLayers(); - } -} - - -void KMCDetector::PrintLayout() { - // - // Prints the detector layout - // - - printf("Detector %s: \"%s\"\n",GetName(),GetTitle()); - - if (fLayers.GetEntries()>0) - printf(" Name \t\t r [cm] \t X0 \t phi & z res [um]\n"); - - KMCLayer *tmp = 0; - for (Int_t i = 0; iGetName()); - if (name.Contains("tpc") && (!name.Contains("tpc_0")) ) continue; - - printf("%d. %s \t %03.2f \t%1.4f\t ",i, - tmp->GetName(), tmp->fR, tmp->fx2X0); - if (tmp->fPhiRes==RIDICULOUS) - printf(" - "); - else - printf("%3.0f ",tmp->fPhiRes*10000); - if (tmp->fZRes==RIDICULOUS) - printf(" -\n"); - else - printf("%3.0f\n",tmp->fZRes*10000); - } -} - -void KMCDetector::PlotLayout(Int_t plotDead) { - // - // Plots the detector layout in Front view - // - - Double_t x0=0, y0=0; - - TGraphErrors *gr = new TGraphErrors(); - gr->SetPoint(0,0,0); - KMCLayer *lastLayer = (KMCLayer*)fLayers.At(fLayers.GetEntries()-1); Double_t maxRad = lastLayer->fR; - gr->SetPointError(0,maxRad,maxRad); - gr->Draw("APE"); - - - KMCLayer *tmp = 0; - for (Int_t i = fLayers.GetEntries()-1; i>=0; i--) { - tmp = (KMCLayer*)fLayers.At(i); - - - Double_t txtpos = tmp->fR; - if ((tmp->IsDead())) txtpos*=-1; // - TText *txt = new TText(x0,txtpos,tmp->GetName()); - txt->SetTextSizePixels(5); txt->SetTextAlign(21); - if (!tmp->IsDead() || plotDead) txt->Draw(); - - TEllipse *layEl = new TEllipse(x0,y0,tmp->fR); - // layEl->SetFillColor(5); - layEl->SetFillStyle(5001); - layEl->SetLineStyle(tmp->IsDead()+1); // dashed if not active - layEl->SetLineColor(4); - TString name(tmp->GetName()); - if (!tmp->IsDead()) layEl->SetLineWidth(2); - if (name.Contains("tpc") ) layEl->SetLineColor(29); - - if (!tmp->IsDead() || plotDead) layEl->Draw(); - - } - -} - - - -void KMCDetector::AddTPC(Float_t phiResMean, Float_t zResMean, Int_t skip) { - // - // Emulates the TPC - // - // skip=1: Use every padrow, skip=2: Signal in every 2nd padrow - - - AddLayer((char*)"IFCtpc", 77.8,0.01367, 0); // Inner Field cage (RS: set correct xrho for eloss) - - // % Radiation Lengths ... Average per TPC row (i.e. total/159 ) - Float_t x2X0PerRow = 0.000036; - - Float_t tpcInnerRadialPitch = 0.75 ; // cm - Float_t tpcMiddleRadialPitch = 1.0 ; // cm - Float_t tpcOuterRadialPitch = 1.5 ; // cm - // Float_t tpcInnerPadWidth = 0.4 ; // cm - // Float_t tpcMiddlePadWidth = 0.6 ; // cm - // Float_t tpcOuterPadWidth = 0.6 ; // cm - Float_t innerRows = 63 ; - Float_t middleRows = 64 ; - Float_t outerRows = 32 ; - Float_t tpcRows = (innerRows + middleRows + outerRows) ; - Float_t rowOneRadius = 85.2 ; // cm - Float_t row64Radius = 135.1 ; // cm - Float_t row128Radius = 199.2 ; // cm - - for ( Int_t k = 0 ; k < tpcRows ; k++ ) { - - Float_t rowRadius =0; - if (k=innerRows && k<(innerRows+middleRows) ) - rowRadius = row64Radius + (k-innerRows+1)*tpcMiddleRadialPitch ; - else if (k>=(innerRows+middleRows) && kGetName()); - if (name.Contains("tpc")) { RemoveLayer((char*)name.Data()); i--; } - } - RemoveLayer((char*)"IFC"); - -} - - -Double_t KMCDetector::ThetaMCS ( Double_t mass, Double_t x2X0, Double_t momentum ) const -{ - // - // returns the Multiple Couloumb scattering angle (compare PDG boolet, 2010, equ. 27.14) - // - - Double_t beta = momentum / TMath::Sqrt(momentum*momentum+mass*mass) ; - Double_t theta = 0.0 ; // Momentum and mass in GeV - // if ( RadLength > 0 ) theta = 0.0136 * TMath::Sqrt(RadLength) / ( beta * momentum ); - if ( x2X0 > 0 ) theta = 0.0136 * TMath::Sqrt(x2X0) / ( beta * momentum ) * (1+0.038*TMath::Log(x2X0)) ; - return (theta) ; -} - - -Double_t KMCDetector::ProbGoodHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) -{ - // Based on work by Howard Wieman: http://rnc.lbl.gov/~wieman/GhostTracks.htm - // and http://rnc.lbl.gov/~wieman/HitFinding2D.htm - // This is the probability of getting a good hit using 2D Gaussian distribution function and infinite search radius - Double_t sx, sy, goodHit ; - sx = 2 * TMath::Pi() * searchRadiusRPhi * searchRadiusRPhi * HitDensity(radius) ; - sy = 2 * TMath::Pi() * searchRadiusZ * searchRadiusZ * HitDensity(radius) ; - goodHit = TMath::Sqrt(1./((1+sx)*(1+sy))) ; - return ( goodHit ) ; -} - - -Double_t KMCDetector::ProbGoodChiSqHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) -{ - // Based on work by Victor Perevoztchikov and Howard Wieman: http://rnc.lbl.gov/~wieman/HitFinding2DXsq.htm - // This is the probability of getting a good hit using a Chi**2 search on a 2D Gaussian distribution function - Double_t sx, goodHit ; - sx = 2 * TMath::Pi() * searchRadiusRPhi * searchRadiusZ * HitDensity(radius) ; - goodHit = 1./(1+sx) ; - return ( goodHit ) ; -} - -Double_t KMCDetector::ProbGoodChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) -{ - // Based on work by Ruben Shahoyen - // This is the probability of getting a good hit using a Chi**2 search on a 2D Gaussian distribution function - // Plus, in addition, taking a "confidence level" and the "layer efficiency" into account - // Following is correct for 2 DOF - - Double_t c = -2 *TMath::Log(fConfLevel); // quantile at cut of confidence level - Double_t alpha = (1 + 2 * TMath::Pi() * HitDensity(radius) * searchRadiusRPhi * searchRadiusZ)/2; - Double_t goodHit = leff/(2*alpha) * (1 - TMath::Exp(-alpha*c)); - return ( goodHit ) ; -} - -Double_t KMCDetector::ProbNullChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) -{ - // Based on work by Ruben Shahoyen - // This is the probability to not have any match to the track (see also :ProbGoodChiSqPlusConfHit:) - - Double_t c = -2 *TMath::Log(fConfLevel); // quantile at cut of confidence level - Double_t alpha = (1 + 2 * TMath::Pi() * HitDensity(radius) * searchRadiusRPhi * searchRadiusZ)/2; - Double_t nullHit = (1-leff+fConfLevel*leff)*TMath::Exp(-c*(alpha-1./2)); - return ( nullHit ) ; -} - -Double_t KMCDetector::HitDensity ( Double_t radius ) -{ - // Background (0-1) is included via 'OtherBackground' which multiplies the minBias rate by a scale factor. - // UPC electrons is a temporary kludge that is based on Kai Schweda's summary of Kai Hainken's MC results - // See K. Hencken et al. PRC 69, 054902 (2004) and PPT slides by Kai Schweda. - // Note that this function assumes we are working in CM and CM**2 [not meters]. - // Based on work by Yan Lu 12/20/2006, all radii and densities in centimeters or cm**2. - - // Double_t MaxRadiusSlowDet = 0.1; //? // Maximum radius for slow detectors. Fast detectors - // and only fast detectors reside outside this radius. - Double_t arealDensity = 0 ; - if (radius<0.01) return 0; - - if ( radius >= fMaxRadiusSlowDet ) - { - arealDensity = OneEventHitDensity(fdNdEtaCent,radius) ; // Fast detectors see central collision density (only) - arealDensity += OtherBackground*OneEventHitDensity(dNdEtaMinB,radius) ; // Increase density due to background - } - - if (radius < fMaxRadiusSlowDet ) - { // Note that IntegratedHitDensity will always be minB one event, or more, even if integration time => zero. - arealDensity = OneEventHitDensity(fdNdEtaCent,radius) - + IntegratedHitDensity(dNdEtaMinB,radius) - + UpcHitDensity(radius) ; - arealDensity += OtherBackground*IntegratedHitDensity(dNdEtaMinB,radius) ; - // Increase density due to background - } - - return ( arealDensity ) ; -} - - -double KMCDetector::OneEventHitDensity( Double_t multiplicity, Double_t radius ) const -{ - // This is for one event at the vertex. No smearing. - double den = multiplicity / (2.*TMath::Pi()*radius*radius) * fDensFactorEta ; // 2 eta ? - // note: surface of sphere is '4*pi*r^2' - // surface of cylinder is '2*pi*r* h' - return den ; -} - - -double KMCDetector::IntegratedHitDensity(Double_t multiplicity, Double_t radius) -{ - // The integral of minBias events smeared over a gaussian vertex distribution. - // Based on work by Yan Lu 12/20/2006, all radii in centimeters. - - Double_t zdcHz = Luminosity * 1.e-24 * CrossSectionMinB ; - Double_t den = zdcHz * fIntegrationTime/1000. * multiplicity * Dist(0., radius) / (2.*TMath::Pi()*radius) ; - - // Note that we do not allow the rate*time calculation to fall below one minB event at the vertex. - double dens1 = OneEventHitDensity(multiplicity,radius); - if ( den < dens1 ) den = dens1; - - return den ; -} - - -double KMCDetector::UpcHitDensity(Double_t radius) -{ - // QED electrons ... - - Double_t mUPCelectrons ; ; - // mUPCelectrons = fLhcUPCscale * (1.23 - radius/6.5) ; // Fit to Kai Schweda summary tables at RHIC * 'scale' for LHC - mUPCelectrons = fLhcUPCscale*5456/(radius*radius)/dNdEtaMinB; // Fit to 'Rossegger,Sadovsky'-Alice simulation - if ( mUPCelectrons < 0 ) mUPCelectrons = 0.0 ; // UPC electrons fall off quickly and don't go to large R - mUPCelectrons *= IntegratedHitDensity(dNdEtaMinB,radius) ; // UPCs increase Mulitiplicty ~ proportional to MinBias rate - mUPCelectrons *= UPCBackgroundMultiplier ; // Allow for an external multiplier (eg 0-1) to turn off UPC - - return mUPCelectrons ; -} - - -double KMCDetector::Dist(double z, double r) -{ - // Convolute dEta/dZ distribution with assumed Gaussian of vertex z distribution - // Based on work by Howard Wieman http://rnc.lbl.gov/~wieman/HitDensityMeasuredLuminosity7.htm - // Based on work by Yan Lu 12/20/2006, all radii and Z location in centimeters. - Int_t index = 1 ; // Start weight at 1 for Simpsons rule integration - Int_t nsteps = 301 ; // NSteps must be odd for Simpson's rule to work - double dist = 0.0 ; - double dz0 = ( 4*SigmaD - (-4)*SigmaD ) / (nsteps-1) ; //cm - double z0 = 0.0 ; //cm - for(int i=0; i= 20 ) pionindex = 399 ; - if ( pionindex >= 0 ) effp = corrEfficiency[0][pionindex] ; - if ( pionindex < 0 ) effp = (corrEfficiency[0][1]-corrEfficiency[0][0])*pionindex + corrEfficiency[0][0] ; // Extrapolate if reqd - if ( effp < 0 ) effp = 0 ; - - if ( kaonindex >= 20 ) kaonindex = 399 ; - if ( kaonindex >= 0 ) effk = corrEfficiency[1][kaonindex] ; - if ( kaonindex < 0 ) effk = (corrEfficiency[1][1]-corrEfficiency[1][0])*kaonindex + corrEfficiency[1][0] ; // Extrapolate if reqd - if ( effk < 0 ) effk = 0 ; - - // Note that we assume that the Kaon Decay efficiency has already been inlcuded in the kaon efficiency used here. - - sum += effp * effk ; - - } - - Double_t mean =sum/360; - return mean ; - -} - -KMCProbe* KMCDetector::PrepareKalmanTrack(double pt, double lambda, double mass, int charge, double phi, double x,double y, double z) -{ - // Prepare trackable Kalman track at the farthest position - // - // Set track parameters - // Assume track started at (0,0,0) and shoots out on the X axis, and B field is on the Z axis - fProbe.Reset(); - fProbe.SetMass(mass); - KMCProbe* probe = new KMCProbe(fProbe); - double *trPars = (double*)probe->GetParameter(); - double *trCov = (double*)probe->GetCovariance(); - double xyz[3] = {x,y,z}; - probe->Global2LocalPosition(xyz,phi); - probe->Set(xyz[0],phi,trPars,trCov); - trPars[KMCProbe::kY] = xyz[1]; - trPars[KMCProbe::kZ] = xyz[2]; - trPars[KMCProbe::kSnp] = 0; // track along X axis at the vertex - trPars[KMCProbe::kTgl] = TMath::Tan(lambda); // dip - trPars[KMCProbe::kPtI] = charge/pt; // q/pt - // - // put tiny errors to propagate to the outer-most radius - trCov[KMCProbe::kY2] = trCov[KMCProbe::kZ2] = trCov[KMCProbe::kSnp2] = trCov[KMCProbe::kTgl2] = trCov[KMCProbe::kPtI2] = 1e-20; - fProbe = *probe; // store original track - // - // propagate to last layer - fLastActiveLayerTracked = 0; - for (Int_t j=0; j<=fLastActiveLayer; j++) { - KMCLayer* lr = GetLayer(j); - lr->Reset(); - // - if (!PropagateToLayer(probe,lr,1)) break; - if (!probe->CorrectForMeanMaterial(lr, kFALSE)) break; - // - lr->fClCorr.Set(probe->GetY(),probe->GetZ(), probe->GetX(), probe->GetAlpha()); - if (!lr->IsDead()) fLastActiveLayerTracked = j; - } - probe->ResetCovMat();// reset cov.matrix - printf("Last active layer trracked: %d (out of %d)\n",fLastActiveLayerTracked,fLastActiveLayer); - // - return probe; -} - - - -TGraph * KMCDetector::GetGraphMomentumResolution(Int_t color, Int_t linewidth) { - // - // returns the momentum resolution - // - - TGraph *graph = new TGraph(20, fTransMomenta, fMomentumRes); - graph->SetTitle("Momentum Resolution .vs. Pt" ) ; - // graph->GetXaxis()->SetRangeUser(0.,5.0) ; - graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; - graph->GetXaxis()->CenterTitle(); - graph->GetXaxis()->SetNoExponent(1) ; - graph->GetXaxis()->SetMoreLogLabels(1) ; - graph->GetYaxis()->SetTitle("Momentum Resolution (%)") ; - graph->GetYaxis()->CenterTitle(); - - graph->SetMaximum(20) ; - graph->SetMinimum(0.1) ; - graph->SetLineColor(color); - graph->SetMarkerColor(color); - graph->SetLineWidth(linewidth); - - return graph; - -} - -TGraph * KMCDetector::GetGraphPointingResolution(Int_t axis, Int_t color, Int_t linewidth) { - - // Returns the pointing resolution - // axis = 0 ... rphi pointing resolution - // axis = 1 ... z pointing resolution - // - - TGraph * graph = 0; - - if (axis==0) { - graph = new TGraph ( 20, fTransMomenta, fResolutionRPhi ) ; - graph->SetTitle("R-#phi Pointing Resolution .vs. Pt" ) ; - graph->GetYaxis()->SetTitle("R-#phi Pointing Resolution (#mum)") ; - } else { - graph = new TGraph ( 20, fTransMomenta, fResolutionZ ) ; - graph->SetTitle("Z Pointing Resolution .vs. Pt" ) ; - graph->GetYaxis()->SetTitle("Z Pointing Resolution (#mum)") ; - } - - graph->SetMinimum(1) ; - graph->SetMaximum(300.1) ; - graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; - graph->GetXaxis()->CenterTitle(); - graph->GetXaxis()->SetNoExponent(1) ; - graph->GetXaxis()->SetMoreLogLabels(1) ; - graph->GetYaxis()->CenterTitle(); - - graph->SetLineWidth(linewidth); - graph->SetLineColor(color); - graph->SetMarkerColor(color); - - return graph; - -} - - -TGraph * KMCDetector::GetGraphPointingResolutionTeleEqu(Int_t axis,Int_t color, Int_t linewidth) { - // - // returns the Pointing resolution (accoring to Telescope equation) - // axis =0 ... in rphi - // axis =1 ... in z - // - - Double_t resolution[20]; - - Double_t layerResolution[2]; - Double_t layerRadius[2]; - Double_t layerThickness[2]; - - Int_t count =0; // search two first active layers - printf("Telescope equation for layers: "); - for (Int_t i = 0; iIsDead() && l->fR>0) { - layerRadius[count] = l->fR; - layerThickness[count] = l->fx2X0; - if (axis==0) { - layerResolution[count] = l->fPhiRes; - } else { - layerResolution[count] = l->fZRes; - } - printf("%s, ",l->GetName()); - count++; - } - if (count>=2) break; - } - printf("\n"); - - Double_t pt, momentum, thickness,aMCS ; - Double_t lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-1*fAvgRapidity)); - - for ( Int_t i = 0 ; i < 20 ; i++ ) { - // Reference data as if first two layers were acting all alone - pt = fTransMomenta[i] ; - momentum = pt / TMath::Cos(lambda) ; // Total momentum - resolution[i] = layerResolution[0]*layerResolution[0]*layerRadius[1]*layerRadius[1] - + layerResolution[1]*layerResolution[1]*layerRadius[0]*layerRadius[0] ; - resolution[i] /= ( layerRadius[1] - layerRadius[0] ) * ( layerRadius[1] - layerRadius[0] ) ; - thickness = layerThickness[0] / TMath::Sin(TMath::Pi()/2 - lambda) ; - aMCS = ThetaMCS(fParticleMass, thickness, momentum) ; - resolution[i] += layerRadius[0]*layerRadius[0]*aMCS*aMCS ; - resolution[i] = TMath::Sqrt(resolution[i]) * 10000.0 ; // result in microns - } - - - - TGraph* graph = new TGraph ( 20, fTransMomenta, resolution ) ; - - if (axis==0) { - graph->SetTitle("RPhi Pointing Resolution .vs. Pt" ) ; - graph->GetYaxis()->SetTitle("RPhi Pointing Resolution (#mum) ") ; - } else { - graph->SetTitle("Z Pointing Resolution .vs. Pt" ) ; - graph->GetYaxis()->SetTitle("Z Pointing Resolution (#mum) ") ; - } - graph->SetMinimum(1) ; - graph->SetMaximum(300.1) ; - graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; - graph->GetXaxis()->CenterTitle(); - graph->GetXaxis()->SetNoExponent(1) ; - graph->GetXaxis()->SetMoreLogLabels(1) ; - graph->GetYaxis()->CenterTitle(); - - graph->SetLineColor(color); - graph->SetMarkerColor(color); - graph->SetLineStyle(kDashed); - graph->SetLineWidth(linewidth); - - return graph; - -} - -TGraph * KMCDetector::GetGraphRecoEfficiency(Int_t particle,Int_t color, Int_t linewidth) { - // - // particle = 0 ... choosen particle (setted particleMass) - // particle = 1 ... Pion - // particle = 2 ... Kaon - // particle = 3 ... D0 - // - Double_t lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-1*fAvgRapidity)); - - Double_t particleEfficiency[20]; // with chosen particle mass - Double_t kaonEfficiency[20], pionEfficiency[20], d0efficiency[20]; - Double_t partEfficiency[2][20]; - - if (particle != 0) { - // resulting Pion and Kaon efficiency scaled with overall efficiency - Double_t doNotDecayFactor; - for ( Int_t massloop = 0 ; massloop < 2 ; massloop++) { //0-pion, 1-kaon - - for ( Int_t j = 0 ; j < 20 ; j++ ) { - // JT Test Let the kaon decay. If it decays inside the TPC ... then it is gone; for all decays < 130 cm. - Double_t momentum = fTransMomenta[j] / TMath::Cos(lambda) ; // Total momentum at average rapidity - if ( massloop == 1 ) { // KAON - doNotDecayFactor = TMath::Exp(-130/(371*momentum/KaonMass)) ; // Decay length for kaon is 371 cm. - kaonEfficiency[j] = fEfficiency[1][j] * AcceptanceOfTpcAndSi*doNotDecayFactor ; - } else { // PION - doNotDecayFactor = 1.0 ; - pionEfficiency[j] = fEfficiency[0][j] * AcceptanceOfTpcAndSi*doNotDecayFactor ; - } - partEfficiency[0][j] = pionEfficiency[j]; - partEfficiency[1][j] = kaonEfficiency[j]; - } - } - - // resulting estimate of the D0 efficiency - for ( Int_t j = 0 ; j < 20 ; j++ ) { - d0efficiency[j] = D0IntegratedEfficiency(fTransMomenta[j],partEfficiency); - } - } else { - for ( Int_t j = 0 ; j < 20 ; j++ ) { - particleEfficiency[j] = fEfficiency[2][j]* AcceptanceOfTpcAndSi; - // NOTE: Decay factor (see kaon) should be included to be realiable - } - } - - for ( Int_t j = 0 ; j < 20 ; j++ ) { - pionEfficiency[j] *= 100; - kaonEfficiency[j] *= 100; - d0efficiency[j] *= 100; - particleEfficiency[j] *= 100; - } - - TGraph * graph = 0; - if (particle==0) { - graph = new TGraph ( 20, fTransMomenta, particleEfficiency ) ; // choosen mass - graph->SetLineWidth(1); - } else if (particle==1) { - graph = new TGraph ( 20, fTransMomenta, pionEfficiency ) ; - graph->SetLineWidth(1); - } else if (particle ==2) { - graph = new TGraph ( 20, fTransMomenta, kaonEfficiency ) ; - graph->SetLineWidth(1); - } else if (particle ==3) { - graph = new TGraph ( 20, fTransMomenta, d0efficiency ) ; - graph->SetLineStyle(kDashed); - } else - return 0; - - graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; - graph->GetXaxis()->CenterTitle(); - graph->GetXaxis()->SetNoExponent(1) ; - graph->GetXaxis()->SetMoreLogLabels(1) ; - graph->GetYaxis()->SetTitle("Efficiency (%)") ; - graph->GetYaxis()->CenterTitle(); - - graph->SetMinimum(0.01) ; - graph->SetMaximum(100) ; - - graph->SetLineColor(color); - graph->SetMarkerColor(color); - graph->SetLineWidth(linewidth); - - return graph; -} - -TGraph * KMCDetector::GetGraphRecoFakes(Int_t particle,Int_t color, Int_t linewidth) { - // - // particle = 0 ... choosen particle (setted particleMass) - // particle = 1 ... Pion - // particle = 2 ... Kaon - // - - Double_t lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-1*fAvgRapidity)); - - Double_t particleFake[20]; // with chosen particle mass - Double_t kaonFake[20], pionFake[20]; - Double_t partFake[2][20]; - - if (particle != 0) { - // resulting Pion and Kaon efficiency scaled with overall efficiency - Double_t doNotDecayFactor; - for ( Int_t massloop = 0 ; massloop < 2 ; massloop++) { //0-pion, 1-kaon - - for ( Int_t j = 0 ; j < 20 ; j++ ) { - // JT Test Let the kaon decay. If it decays inside the TPC ... then it is gone; for all decays < 130 cm. - Double_t momentum = fTransMomenta[j] / TMath::Cos(lambda) ; // Total momentum at average rapidity - if ( massloop == 1 ) { // KAON - doNotDecayFactor = TMath::Exp(-130/(371*momentum/KaonMass)) ; // Decay length for kaon is 371 cm. - kaonFake[j] = fFake[1][j] /( doNotDecayFactor) ; - } else { // PION - pionFake[j] = fFake[0][j] ; - } - partFake[0][j] = pionFake[j]; - partFake[1][j] = kaonFake[j]; - } - } - - } else { - for ( Int_t j = 0 ; j < 20 ; j++ ) { - particleFake[j] = fFake[2][j]; - // NOTE: Decay factor (see kaon) should be included to be realiable - } - } - - for ( Int_t j = 0 ; j < 20 ; j++ ) { - pionFake[j] *= 100; - kaonFake[j] *= 100; - particleFake[j] *= 100; - } - - TGraph * graph = 0; - if (particle==0) { - graph = new TGraph ( 20, fTransMomenta, particleFake ) ; // choosen mass - graph->SetLineWidth(1); - } else if (particle==1) { - graph = new TGraph ( 20, fTransMomenta, pionFake ) ; - graph->SetLineWidth(1); - } else if (particle ==2) { - graph = new TGraph ( 20, fTransMomenta, kaonFake ) ; - graph->SetLineWidth(1); - } - - graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; - graph->GetXaxis()->CenterTitle(); - graph->GetXaxis()->SetNoExponent(1) ; - graph->GetXaxis()->SetMoreLogLabels(1) ; - graph->GetYaxis()->SetTitle("Fake (%)") ; - graph->GetYaxis()->CenterTitle(); - - graph->SetMinimum(0.01) ; - graph->SetMaximum(100) ; - - graph->SetLineColor(color); - graph->SetMarkerColor(color); - graph->SetLineWidth(linewidth); - - return graph; -} - - -TGraph* KMCDetector::GetGraphImpactParam(Int_t mode, Int_t axis, Int_t color, Int_t linewidth) { - // - // returns the Impact Parameter d0 (convolution of pointing resolution and vtx resolution) - // mode 0: impact parameter (convolution of pointing and vertex resolution) - // mode 1: pointing resolution - // mode 2: vtx resolution - - - TGraph *graph = new TGraph(); - - // TFormula vtxResRPhi("vtxRes","50-2*x"); // 50 microns at pt=0, 15 microns at pt =20 ? - TFormula vtxResRPhi("vtxRes","35/(x+1)+10"); // - TFormula vtxResZ("vtxResZ","600/(x+6)+10"); // - - TGraph *trackRes = GetGraphPointingResolution(axis,1); - Double_t *pt = trackRes->GetX(); - Double_t *trRes = trackRes->GetY(); - for (Int_t ip =0; ipGetN(); ip++) { - Double_t vtxRes = 0; - if (axis==0) - vtxRes = vtxResRPhi.Eval(pt[ip]); - else - vtxRes = vtxResZ.Eval(pt[ip]); - - if (mode==0) - graph->SetPoint(ip,pt[ip],TMath::Sqrt(vtxRes*vtxRes+trRes[ip]*trRes[ip])); - else if (mode ==1) - graph->SetPoint(ip,pt[ip],trRes[ip]); - else - graph->SetPoint(ip,pt[ip],vtxRes); - } - - graph->SetTitle("d_{0} r#phi resolution .vs. Pt" ) ; - graph->GetYaxis()->SetTitle("d_{0} r#phi resolution (#mum)") ; - - graph->SetMinimum(1) ; - graph->SetMaximum(300.1) ; - graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; - graph->GetXaxis()->CenterTitle(); - graph->GetXaxis()->SetNoExponent(1) ; - graph->GetXaxis()->SetMoreLogLabels(1) ; - graph->GetYaxis()->CenterTitle(); - - graph->SetLineColor(color); - graph->SetMarkerColor(color); - graph->SetLineWidth(linewidth); - - return graph; - -} - -TGraph* KMCDetector::GetGraph(Int_t number, Int_t color, Int_t linewidth) { - // - // returns graph according to the number - // - switch(number) { - case 1: - return GetGraphPointingResolution(0,color, linewidth); // dr - case 2: - return GetGraphPointingResolution(1,color, linewidth); // dz - case 3: - return GetGraphPointingResolutionTeleEqu(0,color, linewidth); // dr - tele - case 4: - return GetGraphPointingResolutionTeleEqu(1,color, linewidth); // dz - tele - case 5: - return GetGraphMomentumResolution(color, linewidth); // pt resolution - case 10: - return GetGraphRecoEfficiency(0, color, linewidth); // tracked particle - case 11: - return GetGraphRecoEfficiency(1, color, linewidth); // eff. pion - case 12: - return GetGraphRecoEfficiency(2, color, linewidth); // eff. kaon - case 13: - return GetGraphRecoEfficiency(3, color, linewidth); // eff. D0 - case 15: - return GetGraphRecoFakes(0, color, linewidth); // Fake tracked particle - case 16: - return GetGraphRecoFakes(1, color, linewidth); // Fake pion - case 17: - return GetGraphRecoFakes(2, color, linewidth); // Fake kaon - default: - printf(" Error: chosen graph number not valid\n"); - } - return 0; - -} - -void KMCDetector::MakeAliceAllNew(Bool_t flagTPC,Bool_t flagMon, int setVer) { - - // All New configuration with X0 = 0.3 and resolution = 4 microns - - AddLayer((char*)"bpipe_its",2.0,0.0022, 0.092); // beam pipe, 0.5 mm Be - AddLayer((char*)"vertex_its", 0, 0); // dummy vertex for matrix calculation - if (fgVtxConstraint[0]>0 && fgVtxConstraint[1]>0) { - printf("vertex will work as constraint: %.4f %.4f\n",fgVtxConstraint[0],fgVtxConstraint[1]); - SetResolution((char*)"vertex_its",fgVtxConstraint[0],fgVtxConstraint[1]); - } - // - // new ideal Pixel properties? - Double_t x0 = 0.0050; - Double_t resRPhi = 0.0006; - Double_t resZ = 0.0006; - Double_t xrho = 0.0116; // assume 0.5mm of silicon for eloss - // - if (flagMon) { - x0 *= 3./5.; - xrho *=3./5.; - resRPhi = 0.0004; - resZ = 0.0004; - } - - double sclD = 1; - double sclZ = 1; - - // default all new - if (setVer<=0) { - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); - } - else if (setVer==1) { - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2", 2.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 3.6 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its4", 20.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); - AddLayer((char*)"its5", 22.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); - AddLayer((char*)"its6", 43.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); - AddLayer((char*)"its7", 43.6 , x0, xrho, resRPhi*sclD, resZ*sclZ); - // - /* - UInt_t patt[] = { - KMCTrackSummary::Bits(1,1,1), - KMCTrackSummary::Bits(0,0,0,1,1), - KMCTrackSummary::Bits(0,0,0,0,0,1,1) - }; - RequirePattern( patt, sizeof(patt)/sizeof(UInt_t)); - */ - } - else if (setVer==2) { - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its1a", 2.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2", 3.6 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2a", 4.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 20.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); - AddLayer((char*)"its4", 22.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); - AddLayer((char*)"its5", 33.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); - AddLayer((char*)"its6", 43.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); - AddLayer((char*)"its7", 43.6 , x0, xrho, resRPhi*sclD, resZ*sclZ); - // - /* - UInt_t patt[] = { - KMCTrackSummary::Bits(1,1,1,1), - KMCTrackSummary::Bits(0,0,0,0,1,1), - KMCTrackSummary::Bits(0,0,0,0,0,0,1,1,1) - }; - RequirePattern( patt, sizeof(patt)/sizeof(UInt_t)); - */ - } - /* - // last 2 layers strips - double resRPStr=0.0020, resZStr = 0.0830; - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its6", 39.6 , x0, xrho, resRPStr, resZStr); - AddLayer((char*)"its7", 43.0 , x0, xrho, resRPStr, resZStr); - */ - //*/ - /* - // resolution scaled with R as res(2.2) * R/2.2 - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); - KMCLayer* lr0 = 0; - for (int i=0;iIsVertex()) continue; - if (lr0==0) { - lr0=lr; - // continue; - } - double scl = 5*lr->GetRadius()/lr0->GetRadius(); - SetResolution((char*)lr->GetName(), resRPhi*scl, resZ*scl*4); - } - */ - /* - // 1st 2 layers double - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its1a", 2.8 , x0, xrho, resRPhi, resZ); - - AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2a", 4.2 , x0, xrho, resRPhi, resZ); - - AddLayer((char*)"its3a", 6.4 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); - - AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); - */ - /* - // last 4 layers doubled - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); - - AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its4a", 12.8 , x0, xrho, resRPhi, resZ); - - AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its5a", 23.9 , x0, xrho, resRPhi, resZ); - - AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its6a", 40.0 , x0, xrho, resRPhi, resZ); - - AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its7a", 43.4 , x0, xrho, resRPhi, resZ); - */ - - /* //last 3 lr together - AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its5", 42.2 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its6", 42.6 , x0, xrho, resRPhi, resZ); - AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); - */ - if (flagTPC) { - AddTPC(0.1,0.1); // TPC - } - PrintLayout(); -} - -void KMCDetector::MakeAliceCurrent(Bool_t flagTPC, Int_t AlignResiduals) { - - // Numbers taken from - // 2010 JINST 5 P03003 - Alignment of the ALICE Inner Tracking System with cosmic-ray tracks - // number for misalingment: private communication with Andrea Dainese - - // 1.48e-01, 2.48e-01,2.57e-01, 1.34e-01, 3.34e-01,3.50e-01, 2.22e-01, 2.38e-01,2.25e-01}; - - AddLayer((char*)"vertex_its", 0, 0); // dummy vertex for matrix calculation - if (fgVtxConstraint[0]>0 && fgVtxConstraint[1]>0) { - printf("vertex will work as constraint: %.4f %.4f",fgVtxConstraint[0],fgVtxConstraint[1]); - SetResolution((char*)"vertex_its",fgVtxConstraint[0],fgVtxConstraint[1]); - } - // - AddLayer((char*)"bpipe_its",2.94,0.0022, 1.48e-01); // beam pipe - AddLayer((char*)"tshld1_its",11.5,0.0065, 1.34e-01); // Thermal shield // 1.3% /2 - AddLayer((char*)"tshld2_its",31.0,0.0108, 2.22e-01); // Thermal shield // 1.3% /2 - // - if (flagTPC) { - AddTPC(0.1,0.1); // TPC - } - // Adding the ITS - current configuration - - if (AlignResiduals==0) { - AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, 0.0012, 0.0130); - AddLayer((char*)"spd2_its", 7.6, 0.0114, 2.57e-01, 0.0012, 0.0130); - AddLayer((char*)"sdd1_its",15.0, 0.0113, 3.34e-01, 0.0035, 0.0025); - AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, 0.0035, 0.0025); - AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, 0.0020, 0.0830); - AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, 0.0020, 0.0830); - /* - UInt_t patt[] = { - KMCTrackSummary::Bits(1,1), - KMCTrackSummary::Bits(0,0,1,1), - KMCTrackSummary::Bits(0,0,0,0,1,1) - }; - RequirePattern( patt, sizeof(patt)/sizeof(UInt_t)); - */ - } else if (AlignResiduals==1) { - - // tracking errors ... - // (Additional systematic errors due to misalignments) ... - // itsRecoParam->SetClusterMisalErrorYBOn(0.0010,0.0030,0.0500,0.0500,0.0020,0.0020); // [cm] - // itsRecoParam->SetClusterMisalErrorZBOn(0.0050,0.0050,0.0050,0.0050,0.1000,0.1000); - - AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, TMath::Sqrt(0.0012*0.0012+0.0010*0.0010), - TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); - AddLayer((char*)"spd2_its", 7.6, 0.0114, 2.57e-01, TMath::Sqrt(0.0012*0.0012+0.0030*0.0030), - TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); - AddLayer((char*)"sdd1_its",15.0, 0.0113, 3.34e-01, TMath::Sqrt(0.0035*0.0035+0.0100*0.0100), - TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); - AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, TMath::Sqrt(0.0035*0.0035+0.0100*0.0100), - TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); - AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020), - TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); - AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020), - TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); - - } else if (AlignResiduals==2) { - - - // tracking errors ... PLUS ... module misalignment - - // itsRecoParam->SetClusterMisalErrorYBOn(0.0010,0.0030,0.0500,0.0500,0.0020,0.0020); // [cm] - // itsRecoParam->SetClusterMisalErrorZBOn(0.0050,0.0050,0.0050,0.0050,0.1000,0.1000); - - // the ITS modules are misalignment with small gaussian smearings with - // sigmarphi ~ 8, 10, 10 micron in SPD, SDD, SSD - - AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, TMath::Sqrt(0.0012*0.0012+0.0010*0.0010+0.0008*0.0008), - TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); - AddLayer((char*)"spd2_ots", 7.6, 0.0114, 2.57e-01, TMath::Sqrt(0.0012*0.0012+0.0030*0.0030+0.0008*0.0008), - TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); - AddLayer((char*)"sdd1_ots",15.0, 0.0113, 3.34e-01, TMath::Sqrt(0.0035*0.0035+0.0500*0.0500+0.0010*0.0010), - TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); - AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, TMath::Sqrt(0.0035*0.0035+0.0500*0.0500+0.0010*0.0010), - TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); - AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020+0.0010*0.0010), - TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); - AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020+0.0010*0.0010), - TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); - - } else { - - // the ITS modules are misalignment with small gaussian smearings with - // sigmarphi ~ 8, 10, 10 micron in SPD, SDD, SSD - // unknown in Z ???? - - AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, TMath::Sqrt(0.0012*0.0012+0.0008*0.0008), - TMath::Sqrt(0.0130*0.0130+0.000*0.000)); - AddLayer((char*)"spd2_its", 7.6, 0.0114, 2.57e-01, TMath::Sqrt(0.0012*0.0012+0.0008*0.0008), - TMath::Sqrt(0.0130*0.0130+0.000*0.000)); - AddLayer((char*)"sdd1_its",15.0, 0.0113, 3.34e-01, TMath::Sqrt(0.0035*0.0035+0.0010*0.0010), - TMath::Sqrt(0.0025*0.0025+0.000*0.000)); - AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, TMath::Sqrt(0.0035*0.0035+0.0010*0.0010), - TMath::Sqrt(0.0025*0.0025+0.000*0.000)); - AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, TMath::Sqrt(0.0020*0.0020+0.0010*0.0010), - TMath::Sqrt(0.0830*0.0830+0.000*0.000)); - AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, TMath::Sqrt(0.0020*0.0020+0.0010*0.0010), - TMath::Sqrt(0.0830*0.0830+0.000*0.000)); - } - -} - - -void KMCDetector::MakeStandardPlots(Bool_t add, Int_t color, Int_t linewidth,Bool_t onlyPionEff) { - // - // Produces the standard performace plots - // - - if (!add) { - - TCanvas *c1 = new TCanvas("c1","c1");//,100,100,500,500); - c1->Divide(2,2); - - c1->cd(1); gPad->SetGridx(); gPad->SetGridy(); - gPad->SetLogx(); - TGraph *eff = GetGraphRecoEfficiency(1,color,linewidth); - eff->SetTitle("Efficiencies"); - eff->Draw("AL"); - if (!onlyPionEff) { - GetGraphRecoEfficiency(2,color,linewidth)->Draw("L"); - GetGraphRecoEfficiency(3,color,linewidth)->Draw("L"); - } - c1->cd(2); gPad->SetGridx(); gPad->SetGridy(); - gPad->SetLogy(); gPad->SetLogx(); - GetGraphMomentumResolution(color,linewidth)->Draw("AL"); - - c1->cd(3); gPad->SetGridx(); gPad->SetGridy(); - gPad->SetLogx(); - GetGraphPointingResolution(0,color,linewidth)->Draw("AL"); - - c1->cd(4); gPad->SetGridx(); gPad->SetGridy(); - gPad->SetLogx(); - GetGraphPointingResolution(1,color,linewidth)->Draw("AL"); - - } else { - - TVirtualPad *c1 = gPad->GetMother(); - - c1->cd(1); - GetGraphRecoEfficiency(1,color,linewidth)->Draw("L"); - if (!onlyPionEff) { - GetGraphRecoEfficiency(2,color,linewidth)->Draw("L"); - GetGraphRecoEfficiency(3,color,linewidth)->Draw("L"); - } - c1->cd(2); GetGraphMomentumResolution(color,linewidth)->Draw("L"); - - c1->cd(3); GetGraphPointingResolution(0,color,linewidth)->Draw("L"); - - c1->cd(4); GetGraphPointingResolution(1,color,linewidth)->Draw("L"); - - } - -} - -void KMCDetector::ApplyMS(KMCProbe* trc, double x2X0) const -{ - // simulate random modification of track params due to the MS - if (x2X0<=0) return; - double alpha = trc->GetAlpha(); // store original alpha - double mass = trc->GetMass(); - // - double snp = trc->GetSnp(); - double dip = trc->GetTgl(); - Double_t angle=TMath::Sqrt((1.+ dip*dip)/((1-snp)*(1.+snp))); - x2X0 *= angle; - // - static double covCorr[15],covDum[21]={0}; - static double mom[3],pos[3]; - double *cov = (double*) trc->GetCovariance(); - memcpy(covCorr,cov,15*sizeof(double)); - trc->GetXYZ(pos); - trc->GetPxPyPz(mom); - double pt2 = mom[0]*mom[0]+mom[1]*mom[1]; - double pt = TMath::Sqrt(pt2); - double ptot2 = pt2 + mom[2]*mom[2]; - double ptot = TMath::Sqrt(ptot2); - double beta = ptot/TMath::Sqrt(ptot2 + mass*mass); - double sigth = TMath::Sqrt(x2X0)*0.014/(ptot*beta); - // - // a la geant - double phiSC = gRandom->Rndm()*TMath::Pi(); - double thtSC = gRandom->Gaus(0,1.4142*sigth); - // printf("MS phi: %+.5f tht: %+.5f\n",phiSC,thtSC); - double sn = TMath::Sin(thtSC); - double dx = sn*TMath::Sin(phiSC); - double dy = sn*TMath::Cos(phiSC); - double dz = TMath::Cos(thtSC); - double v[3]; - // printf("Before: %+.3e %+.3e %+.3e | MS: %+.3e %+.3e\n",mom[0],mom[1],mom[2],thtSC,phiSC); - for (int i=3;i--;) mom[i] /= ptot; - double vmm = TMath::Sqrt(mom[0]*mom[0]+mom[1]*mom[1]); - if (!IsZero(pt)) { - double pd1 = mom[0]/vmm; - double pd2 = mom[1]/vmm; - v[0] = pd1*mom[2]*dx - pd2*dy + mom[0]*dz; - v[1] = pd2*mom[2]*dx + pd1*dy + mom[1]*dz; - v[2] = -vmm*dx + mom[2]*dz; - } - else { - v[0] = dx; - v[1] = dy; - v[2] = dz*TMath::Sign(1.,mom[2]); - } - double nrm = TMath::Sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); - // printf("before :%+e %+e %+e || %+e %+e %+e %+e\n",mom[0],mom[1],mom[2], sigth, x2X0, pt, beta); - // trc->Print(); - // direction cosines -> p - for (int i=3;i--;) mom[i] = ptot*v[i]/nrm; - // printf("After : %+.3e %+.3e %+.3e\n",mom[0],mom[1],mom[2]); - trc->Set(pos,mom,covDum,trc->Charge()); - // - trc->Rotate(alpha); - memcpy(cov,covCorr,15*sizeof(double)); - // -} - -//________________________________________________________________________________ -Bool_t KMCDetector::TransportKalmanTrackWithMS(KMCProbe *probTr, int maxLr) const -{ - // Transport track till layer maxLr, applying random MS - // - for (Int_t j=0; jIsVertex()) { - ApplyMS(probTr,lr0->fx2X0); // apply MS - if (!probTr->CorrectForMeanMaterial(lr0,kFALSE)) return kFALSE; - } - // - if (!PropagateToLayer(probTr,lr,1)) return kFALSE; - // store randomized cluster local coordinates and phi - lr->ResetBgClusters(); - double rz,ry; - gRandom->Rannor(rz,ry); - lr->GetMCCluster()->Set(probTr->GetY()+ry*lr->GetPhiRes(),probTr->GetZ()+rz*lr->GetZRes(), - probTr->GetX(), probTr->GetAlpha() ); - // - } - // - return kTRUE; -} - -//________________________________________________________________________________ -Bool_t KMCDetector::SolveSingleTrack(Double_t mass, Double_t pt, Double_t eta, TObjArray* sumArr,int nMC, int offset) -{ - // analityc and fullMC (nMC trials) evaluaion of tracks with given kinematics. - // the results are filled in KMCTrackSummary objects provided via summArr array - // - int progressP = 10;//0; // print progress in percents - // - progressP = int(nMC*0.01*progressP); - - if (!SolveSingleTrackViaKalman(mass,pt,eta)) return kFALSE; - // - // Store non-updated track errors of inward propagated seed >>>>>>>> - int maxLr = fLastActiveITSLayer + offset; - if (maxLr >= fLastActiveLayerTracked-1) maxLr = fLastActiveLayerTracked; - KMCProbe probeTmp = fProbe; // original probe at vertex - KMCLayer* lr = 0; - for (Int_t j=1; j<=maxLr; j++) { - lr = GetLayer(j); - // printf("Here0: %d\n",j); - if (!PropagateToLayer(&probeTmp,lr,1)) return 0; - if (j!=maxLr) if (!probeTmp.CorrectForMeanMaterial(lr, kFALSE)) return 0; - // printf("Prelim. Err at lr:%8s | %7.3f %7.3f\n",lr->GetName(),TMath::Sqrt(probeTmp.GetSigmaY2()),TMath::Sqrt(probeTmp.GetSigmaZ2())); - } - for (Int_t j=maxLr; j>0; j--) { - lr = GetLayer(j); - // printf("Here1: %d\n",j); - if (j!=maxLr) if (!PropagateToLayer(&probeTmp,lr,-1)) return 0; - lr->fSig2EstD = probeTmp.GetSigmaY2(); - lr->fSig2EstZ = probeTmp.GetSigmaZ2(); - // probeTmp.Print("l"); - printf("Natural Err at lr:%8s | %7.3f %7.3f\n",lr->GetName(),TMath::Sqrt(lr->fSig2EstD),TMath::Sqrt(lr->fSig2EstZ)); - if (!probeTmp.CorrectForMeanMaterial(lr, kTRUE)) return 0; - } - // Store non-updated track errors of inward propagated seed <<<<<<<< - // - int nsm = sumArr ? sumArr->GetEntriesFast() : 0; - KMCLayer* vtx = GetLayer(0); - // - for (int i=0;iAt(i); - if (!tsm) continue; - tsm->SetRefProbe( GetProbeTrack() ); // attach reference track (generated) - tsm->SetAnProbe( vtx->GetAnProbe() ); // attach analitycal solution - } - // - TStopwatch sw; - sw.Start(); - for (int it=0;itGetWinnerMCTrack(); - vtx->GetMCTracks()->Print(); - if (progressP==1 || (progressP>0 && (it%progressP)==0)) { - printf("%d%% done |",it*100/nMC); - sw.Stop(); sw.Print(); sw.Start(kFALSE); - } - for (int ism=nsm;ism--;) { // account the track in each of summaries - KMCTrackSummary* tsm = (KMCTrackSummary*)sumArr->At(ism); - if (!tsm) continue; - tsm->AddUpdCalls(GetUpdCalls()); - tsm->AddTrack(trc); - } - } - // - sw.Stop(); - printf("Total time: "); sw.Print(); - return kTRUE; -} - -//________________________________________________________________________________ -Int_t KMCDetector::GetLayerID(int actID) const -{ - // find physical layer id from active id - if (actID<0 || actID>fNActiveLayers) return -1; - int start = actIDGetActiveID()==actID) return i; - } - return -1; -} - -//________________________________________________________________________________ -KMCProbe* KMCDetector::KalmanSmooth(int actLr, int actMin,int actMax) const -{ - // estimate kalman smoothed track params at given active lr - // from fit at layers actMin:actMax (excluding actLr) - // SolveSingleTrackViaKalman must have been called before - // - if (actMin>actMax) swap(actMin,actMax); - if (actMax>=fNActiveLayers) actMax = fNActiveLayers-1; - int nlrfit = actMax-actMin; - if (actLr>=actMin && actLr<=actMax) nlrfit-=1; - if (nlrfit<2) {AliInfo("Need a least 2 active layers in the fit"); return 0;} - static KMCProbe iwd,owd; - // - // find phisical layer id's - int pLr = GetLayerID(actLr); - int pMin = GetLayerID(actMin); - int pMax = GetLayerID(actMax); - // - // printf(">>> %d %d %d\n",pLr, pMin,pMax); - Bool_t useIwd=kFALSE, useOwd=kFALSE; - if (pLrfTrCorr; - iwd.ResetCovMat(); - iwd.GetHitsPatt() = 0; - for (int i=pMax;i>=pLr;i--) { - KMCLayer* lr = GetLayer(i); - // printf("IWD %d\n",i); - if (!lr->IsDead() && i!=pLr && i>=pMin) if (!UpdateTrack(&iwd,lr,&lr->fClCorr)) return 0; - if (i!=pLr) { - if (!iwd.CorrectForMeanMaterial(lr,kTRUE)) return 0; // correct for materials of this layer - if (!PropagateToLayer(&iwd,GetLayer(i-1),-1)) return 0; // propagate to next layer - } - // printf("IWD%d: ",i); iwd.Print("l"); - } - useIwd = kTRUE; - } - if (pLr>pMin) { // need outward piece - owd = GetLayer(pMin)->fTrCorr; - owd.ResetCovMat(); - owd.GetHitsPatt() = 0; - for (int i=pMin;i<=pLr;i++) { - KMCLayer* lr = GetLayer(i); - // printf("OWD %d\n",i); - if (!lr->IsDead() && i!=pLr && i<=pMax) if (!UpdateTrack(&owd,lr,&lr->fClCorr)) return 0; - if (i!=pLr) { - if (!owd.CorrectForMeanMaterial(lr,0)) return 0; // correct for materials of this layer - if (!PropagateToLayer(&owd,GetLayer(i+1), 1)) return 0; // propagate to next layer - } - // printf("OWD%d: ",i); owd.Print("l"); - } - useOwd = kTRUE; - } - // - // was this extrapolation outside the fit range? - if (!useIwd) return (KMCProbe*)&owd; - if (!useOwd) return (KMCProbe*)&iwd; - // - // weight both tracks - if (!iwd.Propagate(owd.GetAlpha(),owd.GetX(),fBFieldG)) return 0; - double meas[2] = {owd.GetY(),owd.GetZ()}; - double measErr2[3] = {owd.GetSigmaY2(), owd.GetSigmaZY(), owd.GetSigmaZ2()}; - // printf("Weighting\n"); - // owd.Print("l"); - // iwd.Print("l"); - if (!iwd.Update(meas,measErr2)) return 0; - iwd.GetHitsPatt() |= owd.GetHitsPatt(); - - // printf("->\n"); - // iwd.Print("l"); - - return (KMCProbe*)&iwd; - // -} - -//________________________________________________________________________________ -KMCProbe* KMCDetector::KalmanSmoothFull(int actLr, int actMin,int actMax) const -{ - // estimate kalman smoothed track params at given active lr - // from fit at layers actMin:actMax (excluding actLr) - // SolveSingleTrackViaKalman must have been called before - // - static TClonesArray prediction("KMCProbe",10); - static TClonesArray update("KMCProbe",10); - static KMCProbe res; - // - if (actMin>actMax) swap(actMin,actMax); - int nlrfit = actMax-actMin; - if (actLr>=actMin && actLr<=actMax) nlrfit-=1; - if (nlrfit<2) {AliInfo("Need a least 2 active layers in the fit"); return 0;} - // - // find phisical layer id's - int pLr = GetLayerID(actLr); - int pMin = GetLayerID(actMin); - int pMax = GetLayerID(actMax); - // - int dir=0,dirInt=0; - if (pLr<=pMin) dir=-1; // inward extrapolation - else if (pLr>=pMax) dir= 1; // outward extrapolation - else if (actMax-actLr >= actLr-actMin) dirInt = -1; // inward interpolation (the test point is closer to inner layer) - else dirInt = 1; // outward interpolation (the test point is closer to outer layer) - // - if (dir!=0) { // no sens to do smoothing: simple Kalman filtering extrapolation - int start = dir<0 ? pMax : pMin; - res = GetLayer(start)->fTrCorr; - res.ResetCovMat(); - KMCLayer* lr = 0; - for (int i=(dir<0?pMax:pMin); i!=pLr; i+=dir) { // track till nearest layer to pLr - lr = GetLayer(i); - if (!lr->IsDead() && !(ipMax)) if (!UpdateTrack(&res,lr,&lr->fClCorr)) return 0; // update only with layers in fit range - if (!res.CorrectForMeanMaterial(lr,dir<0 ? kTRUE:kFALSE)) return 0; // correct for materials of this layer - if (!PropagateToLayer(&res,GetLayer(i+dir),dir)) return 0; // propagate to next layer - } - if (!res.CorrectForMeanMaterial(lr,dir<0 ? kTRUE:kFALSE)) return 0; // correct for materials of this nearest layer - if (!PropagateToLayer(&res,GetLayer(pLr), dir)) return 0; // propagate to test layer - return (KMCProbe*)&res; - } - // - // too bad, need to do real filtering - // - int start = dirInt<0 ? pMax : pMin; - int stop = dirInt<0 ? pMin-1 : pMax+1; - res = GetLayer(start)->fTrCorr; - res.ResetCovMat(); - KMCLayer* lr = 0; - int count = 0; - for (int i=start; i!=stop; i+=dirInt) { // track in full range, storing updates and predictions - new(prediction[count]) KMCProbe(res); - lr = GetLayer(i); - if (!lr->IsDead() && i!=pLr) if (!UpdateTrack(&res,lr,&lr->fClCorr)) return 0; // update only with layers in fit range - new(update[count]) KMCProbe(res); - if (!res.CorrectForMeanMaterial(lr,dir<0 ? kTRUE:kFALSE)) return 0; // correct for materials of this layer - if (!PropagateToLayer(&res,GetLayer(i+dir),dir)) return 0; // propagate to next layer - count++; - } - return (KMCProbe*)&res; - // -} - -//________________________________________________________________________________ -Bool_t KMCDetector::SolveSingleTrackViaKalman(Double_t mass, Double_t pt, Double_t eta) -{ - // analytical estimate of tracking resolutions - // fProbe.SetUseLogTermMS(kTRUE); - // - if (fMinITSHits>fNActiveITSLayers) {fMinITSHits = fNActiveITSLayers; printf("Redefined request of min N ITS hits to %d\n",fMinITSHits);} - if (TMath::Abs(eta)<1e-3) fDensFactorEta = 1.; - else { - fDensFactorEta = TMath::Tan( 2.*TMath::ATan(TMath::Exp(-TMath::Abs(eta))) ); - fDensFactorEta = 1./TMath::Sqrt( 1. + 1./fDensFactorEta/fDensFactorEta); - } - double lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-eta)); - KMCProbe* probe = PrepareKalmanTrack(pt,lambda,mass,-1); - if (!probe) return kFALSE; - // - KMCLayer *lr = 0; - // - // - // Start the track fitting -------------------------------------------------------- - // - // Back-propagate the covariance matrix along the track. - // Kalman loop over the layers - // - KMCProbe* currTr = 0; - lr = (KMCLayer*)fLayers.At(fLastActiveLayerTracked); - lr->fTrCorr = *probe; - delete probe; // rethink... - // - for (Int_t j=fLastActiveLayerTracked; j--; ) { // Layer loop - // - KMCLayer *lrP = lr; - lr = (KMCLayer*)fLayers.At(j); - // - lr->fTrCorr = lrP->fTrCorr; - currTr = &lr->fTrCorr; - currTr->ResetHit(lrP->GetActiveID()); - // - // if there was a measurement on prev layer, update the track - if (!lrP->IsDead()) { // include measurement - KMCCluster cl(currTr->GetY(),currTr->GetZ(), currTr->GetX(), currTr->GetAlpha()); - if (!UpdateTrack(currTr,lrP,&cl)) return kFALSE; - } - if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) return kFALSE; // correct for materials of this layer - if (!PropagateToLayer(currTr,lr,-1)) return kFALSE; // propagate to current layer - // - } // end loop over layers - // - return kTRUE; -} - -//____________________________________________________________ -Bool_t KMCDetector::SolveSingleTrackViaKalmanMC(int offset) -{ - // MC estimate of tracking resolutions/effiencies. Requires that the SolveSingleTrackViaKalman - // was called before, since it uses data filled by this method - // - // The MC tracking will be done starting from fLastActiveITSLayer + offset (before analytical estimate will be used) - // - // At this point, the fProbe contains the track params generated at vertex. - // Clone it and propagate to target layer to generate hit positions affected by MS - // - fUpdCalls = 0.; - KMCProbe *currTrP=0,*currTr=0; - int maxLr = fLastActiveITSLayer + offset; - if (maxLr >= fLastActiveLayerTracked-1) maxLr = fLastActiveLayerTracked; - ResetMCTracks(maxLr); - KMCLayer* lr = (KMCLayer*)fLayers.At(maxLr); - currTr = lr->AddMCTrack(&fProbe); // start with original track at vertex - // - if (!TransportKalmanTrackWithMS(currTr, maxLr)) return kFALSE; // transport it to outermost layer where full MC is done - // - if (fLastActiveITSLayerGetCovariance(); - const double *covIdeal =lr->fTrCorr.GetCovariance(); - for (int i=15;i--;) covMS[i] = covIdeal[i]; - } - else { // ITS SA: randomize the starting point - // double *pars = (double*)currTr->GetParameter(); - // pars[0] += gRandom->Gaus(0,TMath::Sqrt(currTr->GetSigmaY2())); - // pars[1] += gRandom->Gaus(0,TMath::Sqrt(currTr->GetSigmaZ2())); - // - currTr->ResetCovMat(); - /* - double *trCov = (double*)currTr->GetCovariance(); - double *trPars = (double*)currTr->GetParameter(); - const double kLargeErr2PtI = 0.3*0.3; - trCov[14] = TMath::Max(trCov[14],kLargeErr2PtI*trPars[4]*trPars[4]); - */ - } - // - for (Int_t j=maxLr; j--; ) { // Layer loop - // - KMCLayer *lrP = lr; - lr = (KMCLayer*)fLayers.At(j); - int ntPrev = lrP->GetNMCTracks(); - // - if (lrP->IsDead()) { // for passive layer just propagate the copy of all tracks of prev layer >>> - for (int itrP=ntPrev;itrP--;) { // loop over all tracks from previous layer - currTrP = lrP->GetMCTrack(itrP); if (currTrP->IsKilled()) continue; - currTr = lr->AddMCTrack( currTrP ); - if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) {currTr->Kill(); continue;} // correct for materials of prev. layer - if (!PropagateToLayer(currTr,lr,-1)) {currTr->Kill(); continue;} // propagate to current layer - } - continue; - } // treatment of dead layer <<< - // - if (lrP->IsTPC()) { // we don't consider bg hits in TPC, just update with MC cluster - for (int itrP=ntPrev;itrP--;) { // loop over all tracks from previous layer - currTrP = lrP->GetMCTrack(itrP); if (currTrP->IsKilled()) continue; - currTr = lr->AddMCTrack( currTrP ); - if (!UpdateTrack(currTr, lrP, lrP->GetMCCluster(), kTRUE)) {currTr->Kill(); continue;} // update with correct MC cl. - if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) {currTr->Kill(); continue;} // correct for materials of prev. layer - if (!PropagateToLayer(currTr,lr,-1)) {currTr->Kill(); continue;} // propagate to current layer - } - continue; - } // treatment of ideal (TPC?) layer <<< - // - // active layer under eff. study (ITS?): propagate copy of every track to MC cluster frame (to have them all in the same frame) - // and calculate the limits of bg generation - KMCCluster* clMC = lrP->GetMCCluster(); - if (lrP->GetLayerEff()Rndm()) clMC->Kill(); // simulate inefficiency - ResetSearchLimits(); - int nseeds = 0; - for (int itrP=ntPrev;itrP--;) { // loop over all tracks from previous layer - currTrP = lrP->GetMCTrack(itrP); if (currTrP->IsKilled()) continue; - currTr = lr->AddMCTrack( currTrP ); - if (!currTr->PropagateToCluster(clMC,fBFieldG)) {currTr->Kill(); continue;} // go to MC cluster - if ( !(currTr->GetNITSHits()>0 && currTr->GetNITSHits()==currTr->GetNFakeITSHits()) ) UpdateSearchLimits(currTr, lrP); // RS - nseeds++; - } - // - // printf("%3d seeds\n",nseeds); - if (fUseBackground && lrP->IsITS()) GenBgClusters(lrP); // generate background hits - // - ntPrev = lr->GetNMCTracks(); - for (int itr=ntPrev;itr--;) { // loop over all tracks PROPAGATED from previous layer to clusters frame on previous layer - currTrP = lr->GetMCTrack(itr); // this is a seed from prev layer. The new clusters are attached to its copies, the seed itself - // will be propagated w/o cluster update if it does not violate requested "reconstructed" track settings - if (currTrP->IsKilled()) continue; - //printf("Check %d %p %d\n",itr,currTrP,currTrP->GetUniqueID()); currTrP->Print(); - CheckTrackProlongations(currTrP, lr, lrP); - if (NeedToKill(currTrP)) currTrP->Kill(); // kill track which was not updated at lrP - //currTrP->Kill(); // kill track which was not updated at lrP - } - // - lr->GetMCTracks()->Sort(); - int ntTot = lr->GetNMCTracks(); // propagate max amount of allowed tracks to current layer - if (ntTot>fMaxSeedToPropagate && fMaxSeedToPropagate>0) { - for (int itr=ntTot;itr>=fMaxSeedToPropagate;itr--) lr->GetMCTracks()->RemoveAt(itr); - ntTot = fMaxSeedToPropagate; - } - // - for (int itr=ntTot;itr--;) { - currTr = lr->GetMCTrack(itr); - if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) {currTr->Kill();continue;} // correct for materials of prev. layer - if (!PropagateToLayer(currTr,lr,-1)) {currTr->Kill();continue;} // propagate to current layer - } - AliDebug(1,Form("Got %d tracks on layer %s",ntTot,lr->GetName())); - // lr->GetMCTracks()->Print(); - // - } // end loop over layers - // - // do we use vertex constraint? - KMCLayer *vtx = GetLayer(0); - if (!vtx->IsDead() && vtx->IsITS()) { - int ntr = vtx->GetNMCTracks(); - for (int itr=0;itrGetMCTrack(itr); - if (currTr->IsKilled()) continue; - KMCCluster* clv = vtx->GetMCCluster(); - double meas[2] = {clv->GetY(),clv->GetZ()}; - double measErr2[3] = {vtx->fPhiRes*vtx->fPhiRes,0,vtx->fZRes*vtx->fZRes}; - double chi2v = currTr->GetPredictedChi2(meas,measErr2); - currTr->AddHit(vtx->GetActiveID(), chi2v, -1); - currTr->SetInnerLrChecked(vtx->GetActiveID()); - if (NeedToKill(currTr)) currTr->Kill(); - // if (vtx->IsITS()) {if (!UpdateTrack(currTr, vtx, vtx->GetMCCluster(), kFALSE)) {currTr->Kill();continue;}} - } - } - EliminateUnrelated(); - - return kTRUE; -} - -//____________________________________________________________________________ -Bool_t KMCDetector::PropagateToLayer(KMCProbe* trc, KMCLayer* lr, int dir) const -{ - // bring the track to layer and rotat to frame normal to its surface - if (!trc->PropagateToR(lr->fR,fBFieldG, dir)) return kFALSE; - // - // rotate to frame with X axis normal to the surface (defined by ideal track) - if (!lr->IsVertex()) { - double pos[3]; - trc->GetXYZ(pos); // lab position - double phi = TMath::ATan2(pos[1],pos[0]); - if ( TMath::Abs(TMath::Abs(phi)-TMath::Pi()/2)<1e-3) phi = 0; - if (!trc->Rotate(phi)) { - AliDebug(2,Form("Failed to rotate to the frame (phi:%+.3f) of layer at %.2f at XYZ: %+.3f %+.3f %+.3f", - phi,lr->fR,pos[0],pos[1],pos[2])); - if (AliLog::GetGlobalDebugLevel()>1) trc->Print("l"); - return kFALSE; - } - } - // - return kTRUE; -} - -//____________________________________________________________________________ -Bool_t KMCDetector::UpdateTrack(KMCProbe* trc, KMCLayer* lr, KMCCluster* cl, Bool_t goToCluster) const -{ - // update track with measured cluster - // propagate to cluster - double meas[2] = {cl->GetY(),cl->GetZ()}; // ideal cluster coordinate - double measErr2[3] = {lr->fPhiRes*lr->fPhiRes,0,lr->fZRes*lr->fZRes}; - // - if (goToCluster) if (!trc->PropagateToCluster(cl,fBFieldG)) return kFALSE; // track was not propagated to cluster frame - // - double chi2 = trc->GetPredictedChi2(meas,measErr2); - // if (chi2>fMaxChi2Cl) return kTRUE; // chi2 is too large - // - if (!trc->Update(meas,measErr2)) { - AliDebug(2,Form("layer %s: Failed to update the track by measurement {%.3f,%3f} err {%.3e %.3e %.3e}", - lr->GetName(),meas[0],meas[1], measErr2[0],measErr2[1],measErr2[2])); - if (AliLog::GetGlobalDebugLevel()>1) trc->Print("l"); - return kFALSE; - } - trc->AddHit(lr->GetActiveID(), chi2); - // - return kTRUE; -} - -//____________________________________________________________________________ -Int_t KMCDetector::GenBgClusters(KMCLayer* lr) -{ - // Generate fake clusters in precalculated RPhi,Z range - if (fNBgLimits<1) return 0; // limits were not set - no track was prolongated - // - // Fix search limits to avoid seeds which will anyway point very far from the vertex - double tolY = TMath::Sqrt(lr->fSig2EstD)*fMaxChi2ClSQ; - double tolZ = TMath::Sqrt(lr->fSig2EstZ)*fMaxChi2ClSQ; - - // printf("Before: Y: %+6.3f : %+6.3f tolY: %6.3f || Z: %+6.3f : %+6.3f tolZ: %6.3f\n",fBgYMin,fBgYMax,tolY, fBgZMin,fBgZMax,tolZ); - if (fBgYMin < lr->fClCorr.fY-tolY) fBgYMin = lr->fClCorr.fY-tolY; - if (fBgYMax > lr->fClCorr.fY+tolY) fBgYMax = lr->fClCorr.fY+tolY; - if (fBgZMin < lr->fClCorr.fZ-tolZ) fBgZMin = lr->fClCorr.fZ-tolZ; - if (fBgZMax > lr->fClCorr.fZ+tolZ) fBgZMax = lr->fClCorr.fZ+tolZ; - //printf("After: Y: %+6.3f : %+6.3f tolY: %6.3f || Z: %+6.3f : %+6.3f tolZ: %6.3f\n",fBgYMin,fBgYMax,tolY, fBgZMin,fBgZMax,tolZ); - // - double dy = fBgYMax - fBgYMin; - double dz = fBgZMax - fBgZMin; - double surf = dy*dz; // surface of generation - if (surf<0) return 0; - double poissProb = surf*HitDensity(lr->fR)*lr->GetLayerEff(); - AliDebug(2,Form("Bg for Lr %s (r=%.2f) : Density %.2f on surface %.2e [%+.4f : %+.4f][%+.4f %+.4f]", - lr->GetName(),lr->fR,HitDensity(lr->fR),surf,fBgYMin,fBgYMax,fBgZMin,fBgZMax)); - int nFakesGen = gRandom->Poisson( poissProb ); // preliminary number of extra clusters to test - KMCCluster *refCl = lr->GetMCCluster(); - double sig2y = lr->GetPhiRes()*lr->GetPhiRes(); - double sig2z = lr->GetZRes()*lr->GetZRes(); - for (int ic=nFakesGen;ic--;) { - double y = fBgYMin+dy*gRandom->Rndm(); - double z = fBgZMin+dz*gRandom->Rndm(); - double dfy = y-refCl->GetY(); - double dfz = z-refCl->GetZ(); - double dist = (dfy*dfy)/sig2y + (dfz*dfz)/sig2z; - if (dist<4) continue; // avoid overlap with MC cluster - lr->AddBgCluster(y, z, refCl->GetX(), refCl->GetPhi()); - } - AliDebug(2,Form("Added %6d noise clusters on lr %s (poisson Prob=%8.2f for surface %.2e) DY:%7.4f DZ: %7.4f", - lr->GetNBgClusters(),lr->GetName(),poissProb,surf,dy,dz)); - return nFakesGen; - // -} - -//____________________________________________________________________________ -void KMCDetector::UpdateSearchLimits(KMCProbe* probe, KMCLayer* lr) -{ - // define the search window for track on layer (where the bg hist will be generated) - static double *currYMin = fBgYMinTr.GetArray(); - static double *currYMax = fBgYMaxTr.GetArray(); - static double *currZMin = fBgZMinTr.GetArray(); - static double *currZMax = fBgZMaxTr.GetArray(); - // - double sizeY = probe->GetSigmaY2(), sizeZ = probe->GetSigmaZ2(); - // /* - if (probe->GetNITSHits()<3) sizeY = 10*lr->fSig2EstD; - if (probe->GetNITSHits()<2) sizeZ = 10*lr->fSig2EstZ; - sizeY = fMaxChi2ClSQ*TMath::Sqrt(sizeY+lr->fPhiRes*lr->fPhiRes); // max deviation in rphi to accept - sizeZ = fMaxChi2ClSQ*TMath::Sqrt(sizeZ+lr->fZRes*lr->fZRes); // max deviation in dz to accept - // */ - // - /* - if (probe->GetNITSHits()<3) sizeY = 1./(1./lr->fSig2EstD + 1./sizeY); - if (probe->GetNITSHits()<2) sizeZ = 1./(1./lr->fSig2EstZ + 1./sizeZ); - sizeY = fMaxChi2ClSQ*TMath::Sqrt(sizeY); // max deviation in rphi to accept - sizeZ = fMaxChi2ClSQ*TMath::Sqrt(sizeZ); // max deviation in dz to accept - */ - // - // if (sizeY>2) sizeY=2; - // if (sizeZ>2) sizeZ=2; - // printf("Sizes at %s: %.5f %.5f\n",lr->GetName(), sizeY,sizeZ); - // - if (fNBgLimits>=fBgYMinTr.GetSize()) { // expand arrays, update pointers - fBgYMinTr.Set(2*(fNBgLimits+1)); - fBgYMaxTr.Set(2*(fNBgLimits+1)); - fBgZMinTr.Set(2*(fNBgLimits+1)); - fBgZMaxTr.Set(2*(fNBgLimits+1)); - currYMin = fBgYMinTr.GetArray(); - currYMax = fBgYMaxTr.GetArray(); - currZMin = fBgZMinTr.GetArray(); - currZMax = fBgZMaxTr.GetArray(); - } - if (fBgYMin > (currYMin[fNBgLimits]=probe->GetY()-sizeY) ) fBgYMin = currYMin[fNBgLimits]; - if (fBgYMax < (currYMax[fNBgLimits]=probe->GetY()+sizeY) ) fBgYMax = currYMax[fNBgLimits]; - if (fBgZMin > (currZMin[fNBgLimits]=probe->GetZ()-sizeZ) ) fBgZMin = currZMin[fNBgLimits]; - if (fBgZMax < (currZMax[fNBgLimits]=probe->GetZ()+sizeZ) ) fBgZMax = currZMax[fNBgLimits]; - if (AliLog::GetGlobalDebugLevel()>=2) { - probe->Print("l"); - AliInfo(Form("Seed%3d Lr %s limits for y:%+8.4f z:%+8.4f [%+.4f : %+.4f][%+.4f %+.4f]",fNBgLimits,lr->GetName(),probe->GetY(),probe->GetZ(),currYMin[fNBgLimits],currYMax[fNBgLimits],currZMin[fNBgLimits],currZMax[fNBgLimits])); - AliInfo(Form("Global Limits Lr %s [%+.4f : %+.4f][%+.4f %+.4f]",lr->GetName(),fBgYMin,fBgYMax,fBgZMin,fBgZMax)); - AliInfo(Form("MC Cluster: %+.4f : %+.4f",lr->fClMC.fY, lr->fClMC.fZ)); - } - probe->SetUniqueID(fNBgLimits++); - // - if (lr->IsITS() && probe->GetNFakeITSHits()==0) { - if (fHMCLrResidRPhi) fHMCLrResidRPhi->Fill(probe->GetY() - lr->GetMCCluster()->GetY(), lr->GetActiveID()); - if (fHMCLrResidZ) fHMCLrResidZ->Fill(probe->GetZ() - lr->GetMCCluster()->GetZ(),lr->GetActiveID()); - } - // -} - -//____________________________________________________________________________ -void KMCDetector::CheckTrackProlongations(KMCProbe *probe, KMCLayer* lr, KMCLayer* lrP) -{ - // explore prolongation of probe from lrP to lr with all possible clusters of lrP - // the probe is already brought to clusters frame - int nCl = lrP->GetNBgClusters(); - double measErr2[3] = {lrP->fPhiRes*lrP->fPhiRes,0,lrP->fZRes*lrP->fZRes}; - double meas[2] = {0,0}; - UInt_t tmpID = probe->GetUniqueID(); - double yMin = fBgYMinTr[tmpID]; - double yMax = fBgYMaxTr[tmpID]; - double zMin = fBgZMinTr[tmpID]; - double zMax = fBgZMaxTr[tmpID]; - // - probe->SetInnerLrChecked(lrP->GetActiveID()); - for (int icl=-1;iclGetMCCluster() : lrP->GetBgCluster(icl); // -1 is for true MC cluster - if (cl->IsKilled()) { - if (AliLog::GetGlobalDebugLevel()>1) {printf("Skip cluster %d ",icl); cl->Print();} - continue; - } - double y = cl->GetY(); - double z = cl->GetZ(); - AliDebug(2,Form("Check seed%d against cl#%d out of %d at layer %s | y:%+8.4f z:%+8.4f [%+.4f:%+.4f] [%+.4f:%+.4f]",tmpID,icl,nCl,lrP->GetName(),y,z,yMin,yMax,zMin,zMax)); - if (AliLog::GetGlobalDebugLevel()>0) { - if (icl==-1 && probe->GetNFakeITSHits()==0) { - meas[0] = y; meas[1] = z; - double chi2a = probe->GetPredictedChi2(meas,measErr2); - if (chi2a>fMaxChi2Cl || (yyMax) || (zzMax)) { - probe->Print(); - printf("Loosing good point (y:%+8.4f z:%+8.4f) on lr %s: chi2: %.2f | dy:%+8.4f dz:%+8.4f [%+.4f:%+.4f] [%+.4f:%+.4f] |x: %.2f %.2f | phi: %.2f %.2f\n", - y,z,lrP->GetName(),chi2a,y-probe->GetY(),z-probe->GetZ(),yMin,yMax,zMin,zMax, probe->GetX(), cl->GetX(), probe->GetAlpha(), cl->GetPhi()); - } - } - } - if (yyMax) continue; // preliminary check on Y - if (zzMax) continue; // preliminary check on Z - meas[0] = y; meas[1] = z; - double chi2 = probe->GetPredictedChi2(meas,measErr2); - if (fHMCLrChi2 && probe->GetNFakeITSHits()==0 && icl==-1) fHMCLrChi2->Fill(chi2,lrP->GetActiveID()); - AliDebug(2,Form("Seed-to-cluster chi2 = Chi2=%.2f",chi2)); - if (chi2>fMaxChi2Cl) continue; - // - // update track copy - KMCProbe* newTr = lr->AddMCTrack( probe ); - fUpdCalls++; - if (!newTr->Update(meas,measErr2)) { - AliDebug(2,Form("Layer %s: Failed to update the track by measurement {%.3f,%3f} err {%.3e %.3e %.3e}", - lrP->GetName(),meas[0],meas[1], measErr2[0],measErr2[1],measErr2[2])); - if (AliLog::GetGlobalDebugLevel()>1) newTr->Print("l"); - newTr->Kill(); - continue; - } - newTr->AddHit(lrP->GetActiveID(), chi2, icl); - if (AliLog::GetGlobalDebugLevel()>1) { - AliInfo("Cloned updated track is:"); - newTr->Print(); - } - if (NeedToKill(newTr)) newTr->Kill(); - } - // -} - -//____________________________________________________________________________ -void KMCDetector::ResetMCTracks(Int_t maxLr) -{ - int nl = GetNLayers(); - if (maxLr<0 || maxLr>=nl) maxLr = nl-1; - for (int i=maxLr+1;i--;) GetLayer(i)->ResetMCTracks(); -} - -//____________________________________________________________________________ -Bool_t KMCDetector::NeedToKill(KMCProbe* probe) const -{ - // check if the seed at given layer (last one where update was tried) - // still has chances to be reconstructed - const Bool_t kModeKillMiss = kFALSE; - // - Bool_t kill = kFALSE; - while (1) { - int il = probe->GetInnerLayerChecked(); - int nITS = probe->GetNITSHits(); - int nITSMax = nITS + il; // maximum it can have - if (nITSMax0) { // check pattern - UInt_t patt = probe->GetHitsPatt(); - // complete the layers not checked yet - for (int i=il;i--;) patt |= (0x1<2) { // check if smallest possible norm chi2/ndf is acceptable - double chi2min = probe->GetChi2(); - if (kModeKillMiss) { - int nMiss = fNActiveITSLayers - probe->GetInnerLayerChecked() - nITS; // layers already missed - chi2min = nMiss*probe->GetMissingHitPenalty(); - } - chi2min /= ((nITSMax<<1)-KMCProbe::kNDOF); - if (chi2min>fMaxNormChi2NDF) { - kill = kTRUE; - break; - } - } - // - // loose vertex constraint - double dst; - if (nITS>=2) { - probe->GetZAt(0,fBFieldG,dst); - //printf("Zd (F%d): %f\n",probe->GetNFakeITSHits(),dst); - if (TMath::Abs(dst)>10.) { - kill = kTRUE; - break; - } - } - if (nITS>=3) { - probe->GetYAt(0,fBFieldG,dst); - //printf("Dd (F%d): %f\n",probe->GetNFakeITSHits(),dst); - if (TMath::Abs(dst)>10.) { - kill = kTRUE; - break; - } - } - // - break; - } - if (kill && AliLog::GetGlobalDebugLevel()>1 && probe->GetNFakeITSHits()==0) { - printf("Killing good seed, last upd layer was %d\n",probe->GetInnerLayerChecked()); - probe->Print("l"); - } - return kill; -} - -//_____________________________________________________________________ -void KMCDetector::EliminateUnrelated() -{ - // kill useless tracks - KMCLayer* lr = GetLayer(0); - int ntr = lr->GetNMCTracks(); - int nval = 0; - for (int itr=0;itrGetMCTrack(itr); - if (probe->IsKilled()) continue; - if (probe->GetNITSHits()-probe->GetNFakeITSHits()<1) {probe->Kill(); continue;} - nval++; - } - lr->GetMCTracks()->Sort(); - const int kDump = 0; - if (kDump>0) { - printf("Valid %d out of %d\n",nval, ntr); - ntr = ntr>kDump ? kDump:0; - for (int itr=0;itrGetMCTrack(itr)->Print(); - } - } -} - -//_____________________________________________________________________ -void KMCDetector::RequirePattern(UInt_t *patt, int groups) -{ - if (groups<1) {fPattITS.Set(0); return;} - fPattITS.Set(groups); - for (int i=0;iGetRadius(); - for (int il1=0;il1GetRadius() - lr1->GetRadius()); - if (ztol>zlims[il1]) zlims[il1] = ztol; - } - } - // - for (int il=0;ilGetActiveID(); - if (aID>-1 && (icl=bwd.fClID[aID])>=-1) { - KMCCluster* clMC = icl<0 ? lr->GetMCCluster() : lr->GetBgCluster(icl); - if (!bwd.PropagateToCluster(clMC,fBFieldG)) return -1; - meas[0] = clMC->GetY(); meas[1] = clMC->GetZ(); - measErr2[0] = lr->fPhiRes*lr->fPhiRes; - measErr2[2] = lr->fZRes*lr->fZRes; - double chi2a = bwd.GetPredictedChi2(meas,measErr2); - chi2Tot += chi2a; - printf("Chis %d (cl%+3d): t2c: %6.3f tot: %6.3f\n",aID,icl,chi2a, chi2Tot); - bwd.Update(meas,measErr2); - bwd.AddHit(aID, chi2a, icl); - } - if (!bwd.CorrectForMeanMaterial(lr,kFALSE)) return -1; - } - return chi2Tot; -} - - -////////////////////////////////////////////////////////////////////////////////////////////// -//-------------------------------------------------------------------------------------------- -ClassImp(KMCTrackSummary) - -Int_t KMCTrackSummary::fgSumCounter = 0; - -//____________________________________________________________________________ -KMCTrackSummary::KMCTrackSummary(const char* name,const char* title, int nlr) : - TNamed(name,name), fNITSLayers(nlr), - fPattITS(0),fPattITSFakeExcl(0),fPattITSCorr(0), - fHMCChi2(0),fHMCSigDCARPhi(0),fHMCSigDCAZ(0),fHMCSigPt(0),fHMCNCl(0),fHMCFakePatt(0), - fCountAcc(0),fCountTot(0),fUpdCalls(0), - fRefProbe(),fAnProbe() -{ - // create summary structure for specific track conditions - // - SetMinMaxClITS(); - SetMinMaxClITSFake(); - SetMinMaxClITSCorr(); - // - if (name==0 && title==0 && nlr==0) return; // default dummy contructor - // - enum {kNBinRes=1000}; - const double kMaxChi2(10),kMaxResRPhi=0.1, kMaxResZ=0.1,kMaxResPt=0.3; - // - TString strN = name, strT = title; - if (strN.IsNull()) strN = Form("TrSum%d",fgSumCounter); - if (strT.IsNull()) strT = strN; - fgSumCounter++; - // - if (fNITSLayers<1) { - fNITSLayers=KMCProbe::GetNITSLayers(); - if (fNITSLayers<1) {AliError("N ITS layer is not provided and not available from KMCProbe::GetNITSLayers()"); exit(1);} - AliInfo(Form("%s No N Layers provided, set %d",strN.Data(),fNITSLayers)); - } - nlr = fNITSLayers; - // - TString nam,tit; - // - nam = Form("%s_mc_chi2",strN.Data()); - tit = Form("%s MC #chi^{2}",strT.Data()); - fHMCChi2 = new TH1F(nam.Data(),tit.Data(),kNBinRes,0,kMaxChi2); - fHMCChi2->GetXaxis()->SetTitle("#chi^{2}"); - fHMCChi2->Sumw2(); - // - nam = Form("%s_mc_DCArphi",strN.Data()); - tit = Form("%s MC #DeltaDCA r#phi",strT.Data()); - fHMCSigDCARPhi = new TH1F(nam.Data(),tit.Data(),kNBinRes,-kMaxResRPhi,kMaxResRPhi); - fHMCSigDCARPhi->GetXaxis()->SetTitle("#Delta r#phi"); - fHMCSigDCARPhi->Sumw2(); - // - nam = Form("%s_mc_DCAz",strN.Data()); - tit = Form("%s MC #DeltaDCA Z",strT.Data()); - fHMCSigDCAZ = new TH1F(nam.Data(),tit.Data(),kNBinRes,-kMaxResZ,kMaxResZ); - fHMCSigDCAZ->GetXaxis()->SetTitle("#Delta Z"); - fHMCSigDCAZ->Sumw2(); - // - nam = Form("%s_mc_pt",strN.Data()); - tit = Form("%s MC $Deltap_{T}/p_{T}",strT.Data()); - fHMCSigPt = new TH1F(nam.Data(),tit.Data(),2*kNBinRes,-kMaxResPt,kMaxResPt); - fHMCSigPt->GetXaxis()->SetTitle("#Deltap_{T}/p_{T}"); - fHMCSigPt->Sumw2(); - // - nam = Form("%s_n_cl",strN.Data()); - tit = Form("%s N Clusters",strT.Data()); - fHMCNCl = new TH2F(nam.Data(),tit.Data(),nlr,1,nlr+1,nlr,1,nlr+1); - fHMCNCl->GetXaxis()->SetTitle("N Clusters Tot"); - fHMCNCl->GetYaxis()->SetTitle("N Clusters Fake"); - fHMCNCl->Sumw2(); - // - nam = Form("%s_fake_cl",strN.Data()); - tit = Form("%s Fake Clusters",strT.Data()); - fHMCFakePatt = new TH1F(nam.Data(),tit.Data(),nlr,-0.5,nlr-0.5); - fHMCFakePatt->GetXaxis()->SetTitle("Fake clusters pattern"); - fHMCFakePatt->Sumw2(); - // -} - -//____________________________________________________________________________ -KMCTrackSummary::~KMCTrackSummary() -{ - if (fHMCChi2) delete fHMCChi2; - if (fHMCSigDCARPhi) delete fHMCSigDCARPhi; - if (fHMCSigDCAZ) delete fHMCSigDCAZ; - if (fHMCSigPt) delete fHMCSigPt; - if (fHMCNCl) delete fHMCNCl; - if (fHMCFakePatt) delete fHMCFakePatt; -} - - -//____________________________________________________________________________ -void KMCTrackSummary::Add(const KMCTrackSummary* src, double scl) -{ - if (fHMCChi2) fHMCChi2->Add(src->fHMCChi2,scl); - if (fHMCSigDCARPhi) fHMCSigDCARPhi->Add(src->fHMCSigDCARPhi,scl); - if (fHMCSigDCAZ) fHMCSigDCAZ->Add(src->fHMCSigDCAZ,scl); - if (fHMCSigPt) fHMCSigPt->Add(src->fHMCSigPt,scl); - if (fHMCNCl) fHMCNCl->Add(src->fHMCNCl,scl); - if (fHMCFakePatt) fHMCFakePatt->Add(src->fHMCFakePatt,scl); - fCountAcc += src->fCountAcc; - fUpdCalls += src->fUpdCalls; -} - -//____________________________________________________________________________ -void KMCTrackSummary::PrependTNamed(TNamed* obj, const char* nm, const char* tit) -{ - // prepend name, title by this prefix - TString name = obj->GetName(),title = obj->GetTitle(); - name.Prepend(nm); title.Prepend(tit); - obj->SetNameTitle(name.Data(),title.Data()); - // -} - -//____________________________________________________________________________ -void KMCTrackSummary::SetNamePrefix(const char* pref) -{ - // prepend all names by this prefix - TString nmT,nmP = pref; - if (nmP.IsNull()) return; - nmP = Form("%s_",pref); - nmT = Form("%s ",pref); - PrependTNamed(this, nmP.Data(), nmT.Data()); - PrependTNamed(fHMCChi2, nmP.Data(), nmT.Data()); - PrependTNamed(fHMCSigDCARPhi, nmP.Data(), nmT.Data()); - PrependTNamed(fHMCSigDCAZ, nmP.Data(), nmT.Data()); - PrependTNamed(fHMCSigPt, nmP.Data(), nmT.Data()); - PrependTNamed(fHMCNCl, nmP.Data(), nmT.Data()); - PrependTNamed(fHMCFakePatt, nmP.Data(), nmT.Data()); - // -} - -//____________________________________________________________________________ -Bool_t KMCTrackSummary::CheckTrack(KMCProbe* trc) -{ - // check if the track satisfies to selection conditions - fCountTot++; - if (!trc) return kFALSE; - if (OutOfRange(trc->GetNITSHits(), fMinMaxClITS)) return kFALSE; - if (OutOfRange(trc->GetNFakeITSHits(), fMinMaxClITSFake)) return kFALSE; - if (OutOfRange(trc->GetNITSHits()-trc->GetNFakeITSHits(), fMinMaxClITSCorr)) return kFALSE; - // - // check layer patterns if requested - UInt_t patt = trc->GetHitsPatt(); - UInt_t pattF = trc->GetFakesPatt(); - UInt_t pattC = patt&(~pattF); // correct hits - // is there at least one hit in each of requested layer groups? - for (int ip=fPattITS.GetSize();ip--;) if (!CheckPattern(patt,fPattITS[ip])) return kFALSE; - // is there at least one fake in any of requested layer groups? - for (int ip=fPattITSFakeExcl.GetSize();ip--;) if (CheckPattern(pattF,fPattITSFakeExcl[ip])) return kFALSE; - // is there at least one correct hit in each of requested layer groups? - for (int ip=fPattITSCorr.GetSize();ip--;) if (!CheckPattern(pattC,fPattITSCorr[ip])) return kFALSE; - // - fCountAcc++; - return kTRUE; -} - -//____________________________________________________________________________ -void KMCTrackSummary::AddTrack(KMCProbe* trc) -{ - // fill track info - if (!CheckTrack(trc)) return; - // - fHMCChi2->Fill(trc->GetNormChi2(kFALSE)); - fHMCSigDCARPhi->Fill(trc->GetY()); - fHMCSigDCAZ->Fill(trc->GetZ()); - if (fRefProbe.Pt()>0) fHMCSigPt->Fill( trc->Pt()/fRefProbe.Pt()-1.); - // printf("Pts: %.3f %.3f -> %.3f\n",trc->Pt(),fRefProbe.Pt(),trc->Pt()/fRefProbe.Pt()-1.); - // trc->Print("l"); - // fRefProbe.Print("l"); - fHMCNCl->Fill(trc->GetNITSHits(),trc->GetNFakeITSHits()); - for (int i=trc->GetNITSLayers();i--;) if (trc->IsHitFake(i)) fHMCFakePatt->Fill(i); - // -} - -//____________________________________________________________________________ -UInt_t KMCTrackSummary::Bits(Bool_t l0, Bool_t l1, Bool_t l2, Bool_t l3, Bool_t l4, Bool_t l5, Bool_t l6, Bool_t l7,Bool_t l8, Bool_t l9, - Bool_t l10,Bool_t l11,Bool_t l12,Bool_t l13,Bool_t l14,Bool_t l15,Bool_t l16,Bool_t l17,Bool_t l18,Bool_t l19, - Bool_t l20,Bool_t l21,Bool_t l22,Bool_t l23,Bool_t l24,Bool_t l25,Bool_t l26,Bool_t l27,Bool_t l28,Bool_t l29, - Bool_t l30,Bool_t l31) -{ - // create corresponding bit pattern - UInt_t patt = 0; - if (l0 ) patt |= (0x1<<0); if (l1 ) patt |= (0x1<<1); if (l2 ) patt |= (0x1<<2); - if (l3 ) patt |= (0x1<<3); if (l4 ) patt |= (0x1<<4); if (l5 ) patt |= (0x1<<5); - if (l6 ) patt |= (0x1<<6); if (l7 ) patt |= (0x1<<7); if (l8 ) patt |= (0x1<<8); - if (l9 ) patt |= (0x1<<9); if (l10) patt |= (0x1<<10); if (l11) patt |= (0x1<<11); - if (l12) patt |= (0x1<<12); if (l13) patt |= (0x1<<13); if (l14) patt |= (0x1<<14); - if (l15) patt |= (0x1<<15); if (l16) patt |= (0x1<<16); if (l17) patt |= (0x1<<17); - if (l18) patt |= (0x1<<18); if (l19) patt |= (0x1<<19); if (l20) patt |= (0x1<<20); - if (l21) patt |= (0x1<<21); if (l22) patt |= (0x1<<22); if (l23) patt |= (0x1<<23); - if (l24) patt |= (0x1<<24); if (l25) patt |= (0x1<<25); if (l26) patt |= (0x1<<26); - if (l27) patt |= (0x1<<27); if (l28) patt |= (0x1<<28); if (l29) patt |= (0x1<<29); - if (l30) patt |= (0x1<<30); if (l31) patt |= (0x1<<31); - return patt; -} - -//__________________________________________________________________________ -void KMCTrackSummary::Print(Option_t* ) const -{ - printf("%s: summary for track M=%5.3f pT: %6.3f eta: %.2f\n", GetName(), - fRefProbe.GetMass(),fRefProbe.Pt(), fRefProbe.Eta()); - printf("Cuts on NCl ITS: Tot: %2d - %2d Fake: %2d - %2d Corr: %2d - %2d\n", - fMinMaxClITS[0],fMinMaxClITS[1], - fMinMaxClITSFake[0],fMinMaxClITSFake[1], - fMinMaxClITSCorr[0],fMinMaxClITSCorr[1]); - // - int nlr = fNITSLayers; - if (fPattITS.GetSize()) { - printf("Require at least 1 hit in groups: "); - printf("Hits obligatory in groups: "); - for (int i=fPattITS.GetSize();i--;) { - UInt_t pat = (UInt_t)fPattITS[i]; - printf("["); - for (int j=0;j Eff: %.4f+-%.4f %.2e KMC updates\n",fCountTot,fCountAcc,GetEff(),GetEffErr(),GetUpdCalls()); -} - +#include "KMCDetector.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*********************************************************** + +Fast Simulation tool for Inner Tracker Systems + +***********************************************************/ + + +#define RIDICULOUS 999999 // A ridiculously large resolution (cm) to flag a dead detector + +#define Luminosity 1.e27 // Luminosity of the beam (LHC HI == 1.e27, RHIC II == 8.e27 ) +#define SigmaD 6.0 // Size of the interaction diamond (cm) (LHC = 6.0 cm) +#define dNdEtaMinB 1//950//660//950 // Multiplicity per unit Eta (AuAu MinBias = 170, Central = 700) +// #define dNdEtaCent 2300//15000 //1600//2300 // Multiplicity per unit Eta (LHC at 5.5 TeV not known) + +#define CrossSectionMinB 8 // minB Cross section for event under study (PbPb MinBias ~ 8 Barns) +#define AcceptanceOfTpcAndSi 1 //1//0.60 //0.35 // Assumed geometric acceptance (efficiency) of the TPC and Si detectors +#define UPCBackgroundMultiplier 1.0 // Increase multiplicity in detector (0.0 to 1.0 * UPCRate ) (eg 1.0) +#define OtherBackground 0.0 // Increase multiplicity in detector (0.0 to 1.0 * minBias) (eg 0.0) +#define EfficiencySearchFlag 2 // Define search method: + // -> ChiSquarePlusConfLevel = 2, ChiSquare = 1, Simple = 0. + +#define PionMass 0.139 // Mass of the Pion +#define KaonMass 0.498 // Mass of the Kaon +#define D0Mass 1.865 // Mass of the D0 + +//TMatrixD *probKomb; // table for efficiency kombinatorics + +ClassImp(KMCProbe) + +Int_t KMCProbe::fgNITSLayers = 0; +Double_t KMCProbe::fgMissingHitPenalty = 2.; +//__________________________________________________________________________ +KMCProbe& KMCProbe::operator=(const KMCProbe& src) +{ + if (this!=&src) { + AliExternalTrackParam::operator=(src); + fMass = src.fMass; + fChi2 = src.fChi2; + fHits = src.fHits; + fFakes = src.fFakes; + fNHits = src.fNHits; + fNHitsITS = src.fNHitsITS; + fNHitsITSFake = src.fNHitsITSFake; + fInnLrCheck = src.fInnLrCheck; + for (int i=kMaxITSLr;i--;) fClID[i] = src.fClID[i]; + } + return *this; +} + +//__________________________________________________________________________ +KMCProbe::KMCProbe(KMCProbe& src) + : AliExternalTrackParam(src), + fMass(src.fMass), + fChi2(src.fChi2), + fHits(src.fHits), + fFakes(src.fFakes), + fNHits(src.fNHits), + fNHitsITS(src.fNHitsITS), + fNHitsITSFake(src.fNHitsITSFake), + fInnLrCheck(src.fInnLrCheck) +{ + for (int i=kMaxITSLr;i--;) fClID[i] = src.fClID[i]; +} + +//__________________________________________________________________________ +void KMCProbe::ResetCovMat() +{ + // reset errors + double *trCov = (double*)GetCovariance(); + double *trPars = (double*)GetParameter(); + const double kLargeErr2Coord = 50*50; + const double kLargeErr2Dir = 0.6*0.6; + const double kLargeErr2PtI = 0.5*0.5; + for (int ic=15;ic--;) trCov[ic] = 0.; + trCov[kY2] = trCov[kZ2] = kLargeErr2Coord; + trCov[kSnp2] = trCov[kTgl2] = kLargeErr2Dir; + trCov[kPtI2] = kLargeErr2PtI*trPars[kPtI]*trPars[kPtI]; + // +} + +//__________________________________________________________________________ +void KMCProbe::Print(Option_t* option) const +{ + printf("M=%.3f Chi2=%7.2f (Norm:%6.2f|%d) Hits: Total:%d ITS:%d ITSFakes:%d | Y:%+8.4f Z: %+8.4f |", + fMass,fChi2,GetNormChi2(kTRUE),fInnLrCheck,fNHits,fNHitsITS,fNHitsITSFake, GetY(),GetZ()); + for (int i=0;iIsKilled()) { + if (IsKilled()) return 0; + return -1; + } + else if (IsKilled()) return 1; + double chi2a = GetNormChi2(kTRUE); + double chi2b = trc->GetNormChi2(kTRUE); + if (chi2achi2b) return 1; + return 0; +} + +//__________________________________________________________________________ +Bool_t KMCProbe::GetXatLabR(Double_t r,Double_t &x, Double_t bz, Int_t dir) const +{ + // Get local X of the track position estimated at the radius lab radius r. + // The track curvature is accounted exactly + // + // The flag "dir" can be used to remove the ambiguity of which intersection to take (out of 2 possible) + // 0 - take the intersection closest to the current track position + // >0 - go along the track (increasing fX) + // <0 - go backward (decreasing fX) + // + // special case of R=0 + if (r=kAlmost1) { // || to Y axis + double det = (r-fx)*(r+fx); + if (det<0) return kFALSE; // does not reach raduis r + x = fx; + if (dir==0) return kTRUE; + det = TMath::Sqrt(det); + if (dir>0) { // along the track direction + if (sn>0) {if (fy>det) return kFALSE;} // track is along Y axis and above the circle + else {if (fy<-det) return kFALSE;} // track is against Y axis amd belo the circle + } + else if(dir>0) { // agains track direction + if (sn>0) {if (fy<-det) return kFALSE;} // track is along Y axis + else if (fy>det) return kFALSE; // track is against Y axis + } + } + else if (TMath::Abs(sn)<=kAlmost0) { // || to X axis + double det = (r-fy)*(r+fy); + if (det<0) return kFALSE; // does not reach raduis r + det = TMath::Sqrt(det); + if (!dir) { + x = fx>0 ? det : -det; // choose the solution requiring the smalest step + return kTRUE; + } + else if (dir>0) { // along the track direction + if (fx > det) return kFALSE; // current point is in on the right from the circle + else if (fx <-det) x = -det; // on the left + else x = det; // within the circle + } + else { // against the track direction + if (fx <-det) return kFALSE; + else if (fx > det) x = det; + else x = -det; + } + } + else { // general case of straight line + double cs = TMath::Sqrt((1-sn)*(1+sn)); + double xsyc = fx*sn-fy*cs; + double det = (r-xsyc)*(r+xsyc); + if (det<0) return kFALSE; // does not reach raduis r + det = TMath::Sqrt(det); + double xcys = fx*cs+fy*sn; + double t = -xcys; + if (dir==0) t += t>0 ? -det:det; // chose the solution requiring the smalest step + else if (dir>0) { // go in increasing fX direction. ( t+-det > 0) + if (t>=-det) t += -det; // take minimal step giving t>0 + else return kFALSE; // both solutions have negative t + } + else { // go in increasing fx direction. (t+-det < 0) + if (tkAlmost0) { // when y0==0 the x,y is unique + double dfx = tR2r0*TMath::Abs(y0)*det; + double dfy = tR2r0*x0*TMath::Sign(det,y0); + if (dir==0) { // chose the one which corresponds to smallest step + double delta = (x-fx)*dfx-(y-fy)*dfy; // the choice of + in C will lead to smaller step if delta<0 + if (delta<0) x += dfx; + else x -= dfx; + } + else if (dir>0) { // along track direction: x must be > fx + x -= dfx; // try the smallest step (dfx is positive) + if (xfx && (x-=dfx+dfx)>fx) return kFALSE; + } + } + else { // special case: track touching the circle just in 1 point + if ( (dir>0&&xfx) ) return kFALSE; + } + } + // + return kTRUE; +} + +//____________________________________ +Bool_t KMCProbe::PropagateToR(double r, double b, int dir) +{ + // go to radius R + // + double xR = 0; + double rr = r*r; + int iter = 0; + const double kTiny = 1e-4; + while(1) { + if (!GetXatLabR(r ,xR, b, dir)) { + // printf("Track with pt=%f cannot reach radius %f\n",Pt(),r); + // Print("l"); + return kFALSE; + } + + if (!PropagateTo(xR, b)) { + if (AliLog::GetGlobalDebugLevel()>2) { + printf("Failed to propagate to X=%f for R=%f\n",xR,r); + Print("l"); + } + return kFALSE; + } + double rcurr2 = xR*xR + GetY()*GetY(); + if (TMath::Abs(rcurr2-rr)2) { + printf("Failed to rotate to %f to propagate to R=%f\n",phi,r); + Print("l"); + } + return kFALSE; + } + if (++iter>8) { + if (AliLog::GetGlobalDebugLevel()>2) { + printf("Failed to propagate to R=%f after %d steps\n",r,iter); + Print("l"); + } + return kFALSE; + } + } + return kTRUE; +} + + +//__________________________________________________________________________ +Bool_t KMCProbe::CorrectForMeanMaterial(const KMCLayer* lr, Bool_t inward) +{ + // printf("before at r=%.1f p=%.4f\n",lr->fR, P()); + if (AliExternalTrackParam::CorrectForMeanMaterial(lr->fx2X0, inward ? lr->fXRho : -lr->fXRho, GetMass() , kTRUE)) { + // printf("after at r=%.1f p=%.4f\n",lr->fR, P()); + return kTRUE; + } + AliDebug(2,Form("Failed to apply material correction, X/X0=%.4f", lr->fx2X0)); + if (AliLog::GetGlobalDebugLevel()>1) Print(); + return kFALSE; +} + +///////////////////////////////////////////////////////////////////////////// +ClassImp(KMCCluster) + +//_________________________________________________________________________ +KMCCluster::KMCCluster(KMCCluster &src) +: TObject(src), + fY(src.fY),fZ(src.fZ),fX(src.fX),fPhi(src.fPhi) +{} + +//__________________________________________________________________________ +KMCCluster& KMCCluster::operator=(const KMCCluster& src) +{ + if (this!=&src) { + TObject::operator=(src); + fY = src.fY; + fZ = src.fZ; + fX = src.fX; + fPhi = src.fPhi; + } + return *this; +} + +//_________________________________________________________________________ +void KMCCluster::Print(Option_t *) const +{ + printf(" Local YZ = (%3.4lf,%3.4lf) | X=%3.4lf phi: %+.3f %s\n",fY,fZ,fX,fPhi,IsKilled()?"Killed":""); +} + +///////////////////////////////////////////////////////////////////////////// +ClassImp(KMCLayer) + +Double_t KMCLayer::fgDefEff = 1.0; +//__________________________________________________________________________ +KMCLayer::KMCLayer(char *name) : + TNamed(name,name),fR(0),fx2X0(0),fPhiRes(0),fZRes(0),fEff(0),fIsDead(kFALSE),fType(-1),fActiveID(-1),fSig2EstD(999),fSig2EstZ(999), + fClCorr(),fClMC(),fClBg("KMCCluster",5), fTrCorr(), fTrMC("KMCProbe",5) +{ + Reset(); +} + +//__________________________________________________________________________ +void KMCLayer::Reset() +{ + fTrCorr.Reset(); + fClCorr.Reset(); + ResetMC(); + fSig2EstD = fSig2EstZ = 999; + // +} + +//__________________________________________________________________________ +KMCProbe* KMCLayer::AddMCTrack(KMCProbe* src) +{ + int ntr = GetNMCTracks(); + KMCProbe* prb = 0; + if (src) prb = new(fTrMC[ntr]) KMCProbe(*src); + else prb = new(fTrMC[ntr]) KMCProbe(); + if (!IsDead()) prb->ResetHit(GetActiveID()); + return prb; +} + +//__________________________________________________________________________ +void KMCLayer::Print(Option_t *opt) const +{ + printf("Lr%3d(A%3d) %10s R=%5.1f X2X0=%.3f XRho=%.3f SigY=%.4f SigZ=%.4f Eff:%4.2f\n",GetUniqueID(),fActiveID,GetName(), fR, fx2X0,fXRho,fPhiRes,fZRes,fEff); + TString opts = opt; opts.ToLower(); + if (opts.Contains("c")) { + printf("Clusters: MC: %+7.4f:%+7.4f Ideal: %+7.4f:%+7.4f NBgCl: %3d NTrMC: %4d\n",fClMC.fY,fClMC.fZ, fClCorr.fY,fClCorr.fZ, GetNBgClusters(),GetNMCTracks()); + } +} + +///////////////////////////////////////////////////////////////////////////// +Double_t KMCDetector::fgVtxConstraint[2]={-1,-1}; + +ClassImp(KMCDetector) +KMCDetector::KMCDetector() : +TNamed("test_detector","detector"), + fNLayers(0), + fNActiveLayers(0), + fNActiveITSLayers(0), + fLastActiveLayer(-1), + fLastActiveITSLayer(-1), + fLastActiveLayerTracked(-1), + fBFieldG(5.), + fLhcUPCscale(1.0), + fIntegrationTime(0.02), // in ms + fConfLevel(0.0027), // 0.27 % -> 3 sigma confidence + fAvgRapidity(0.45), // Avg rapidity, MCS calc is a function of crossing angle + fParticleMass(0.140), // Standard: pion mass + fMaxRadiusSlowDet(10.), + fAtLeastCorr(-1), // if -1, then correct hit on all ITS layers + fAtLeastFake(1), // if at least x fakes, track is considered fake ... + fdNdEtaCent(2300), + fMaxChi2Cl(25.), + fMaxNormChi2NDF(5.), + fMinITSHits(4), +// + fMaxChi2ClSQ(4.), // precalulated internally + fMaxSeedToPropagate(300), +// + fUseBackground(kFALSE), + fBgYMin(1e6),fBgYMax(-1e6),fBgZMin(1e6),fBgZMax(-1e6), + fBgYMinTr(100),fBgYMaxTr(100),fBgZMinTr(100),fBgZMaxTr(100),fNBgLimits(0), + fDensFactorEta(1.), +// + fUpdCalls(0), + fHMCLrResidRPhi(0), + fHMCLrResidZ(0), + fHMCLrChi2(0), + fPattITS(0) +{ + // + // default constructor + // + // fLayers = new TObjArray(); + RequireMaxChi2Cl(fMaxChi2Cl); // just to precalulate default square +} + +KMCDetector::KMCDetector(char *name, char *title) + : TNamed(name,title), + fNLayers(0), + fNActiveLayers(0), + fNActiveITSLayers(0), + fLastActiveLayer(-1), + fLastActiveITSLayer(-1), + fLastActiveLayerTracked(-1), + fBFieldG(5.0), + fLhcUPCscale(1.0), + fIntegrationTime(0.02), // in ms + fConfLevel(0.0027), // 0.27 % -> 3 sigma confidence + fAvgRapidity(0.45), // Avg rapidity, MCS calc is a function of crossing angle + fParticleMass(0.140), // Standard: pion mass + fMaxRadiusSlowDet(10.), + fAtLeastCorr(-1), // if -1, then correct hit on all ITS layers + fAtLeastFake(1), // if at least x fakes, track is considered fake ... + fdNdEtaCent(2300), + fMaxChi2Cl(9.), + fMaxNormChi2NDF(5.), + fMinITSHits(4), + // + fMaxChi2ClSQ(3.), // precalulated internally + fMaxSeedToPropagate(50), + // + fUseBackground(kFALSE), + fBgYMin(1e6),fBgYMax(-1e6),fBgZMin(1e6),fBgZMax(-1e6), + fBgYMinTr(100),fBgYMaxTr(100),fBgZMinTr(100),fBgZMaxTr(100),fNBgLimits(0), + fDensFactorEta(1.), + // + fUpdCalls(0), + fHMCLrResidRPhi(0), + fHMCLrResidZ(0), + fHMCLrChi2(0), + fPattITS(0) +{ + // + // default constructor, that set the name and title + // + // fLayers = new TObjArray(); +} +KMCDetector::~KMCDetector() { // + // virtual destructor + // + // delete fLayers; +} + +void KMCDetector::InitMCWatchHistos() +{ + // init utility histos used for MC tuning + enum {kNBinRes=1000}; + const double kMaxResidRPhi=1.0,kMaxResidZ=1.0,kMaxChi2=50; + int nlr = fNActiveITSLayers; + TString nam = "mc_residrhi"; + TString tit = "MC $Delta Cl-Tr R#phi"; + fHMCLrResidRPhi = new TH2F(nam.Data(),tit.Data(),kNBinRes,-kMaxResidRPhi,kMaxResidRPhi,nlr,-0.5,nlr-0.5); + fHMCLrResidRPhi->GetXaxis()->SetTitle("cl-tr #Delta r#phi"); + fHMCLrResidRPhi->Sumw2(); + // + nam = "mc_residz"; + tit = "MC $Delta Cl-Tr Z"; + fHMCLrResidZ = new TH2F(nam.Data(),tit.Data(),kNBinRes,-kMaxResidRPhi,kMaxResidZ,nlr,-0.5,nlr-0.5); + fHMCLrResidZ->GetXaxis()->SetTitle("cl-tr #Delta z"); + fHMCLrResidZ->Sumw2(); + // + nam = "mc_chi2"; + tit = "MC #chi^{2} Cl-Tr Z"; + fHMCLrChi2 = new TH2F(nam.Data(),tit.Data(),kNBinRes,-kMaxResidRPhi,kMaxChi2,nlr,-0.5,nlr-0.5); + fHMCLrChi2->GetXaxis()->SetTitle("cl-tr #chi^{2}"); + fHMCLrChi2->Sumw2(); + // + SetBit(kUtilHisto); +} + + +void KMCDetector::AddLayer(char *name, Float_t radius, Float_t x2X0, Float_t xrho, Float_t phiRes, Float_t zRes, Float_t eff) { + // + // Add additional layer to the list of layers (ordered by radius) + // + + KMCLayer *newLayer = (KMCLayer*) fLayers.FindObject(name); + + if (!newLayer) { + newLayer = new KMCLayer(name); + newLayer->fR = radius; + newLayer->fx2X0 = x2X0; + newLayer->fXRho = xrho; + newLayer->fPhiRes = phiRes; + newLayer->fZRes = zRes; + eff = TMath::Min(1.f,eff); + newLayer->fEff = eff <0 ? KMCLayer::GetDefEff() : eff; + newLayer->fActiveID = -2; + TString lname = name; + newLayer->fType = KMCLayer::kTypeNA; + if (lname.Contains("tpc")) newLayer->fType = KMCLayer::kTPC; + else if (lname.Contains("its")) newLayer->fType = KMCLayer::kITS; + if (lname.Contains("vertex")) newLayer->SetBit(KMCLayer::kBitVertex); + // + if (newLayer->fType==KMCLayer::kTypeNA) printf("Attention: the layer %s has undefined type\n",name); + // + newLayer->fIsDead = (newLayer->fPhiRes==RIDICULOUS && newLayer->fZRes==RIDICULOUS); + // + if (fLayers.GetEntries()==0) + fLayers.Add(newLayer); + else { + // + for (Int_t i = 0; ifR) { fLayers.AddBefore(l,newLayer); break; } + if (radius>l->fR && (i+1)==fLayers.GetEntries() ) fLayers.Add(newLayer); // even bigger then last one + } + // + } + // + ClassifyLayers(); + // + } else { + printf("Layer with the name %s does already exist\n",name); + } +} + +//____________________________________________________________ +void KMCDetector::ClassifyLayers() +{ + // assign active Id's, etc + fLastActiveLayer = -1; + fLastActiveITSLayer = -1; + fNActiveLayers = 0; + fNActiveITSLayers = 0; + // + int nl = GetNLayers(); + for (int il=0;ilSetUniqueID(il); + if (!lr->IsDead()) { + fLastActiveLayer = il; + lr->fActiveID = fNActiveLayers++; + if (lr->IsITS()) { + fLastActiveITSLayer = il; + fNActiveITSLayers++; + } + } + } + // + KMCProbe::SetNITSLayers(fNActiveITSLayers); +} + +//____________________________________________________________ +void KMCDetector::KillLayer(char *name) { + // + // Marks layer as dead. Contribution only by Material Budget + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot mark as dead\n",name); + else { + tmp->fPhiRes = 999999; + tmp->fZRes = 999999; + tmp->fIsDead = kTRUE; + ClassifyLayers(); + } +} + +void KMCDetector::SetRadius(char *name, Float_t radius) { + // + // Set layer radius [cm] + // + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + // + if (!tmp) { + printf("Layer %s not found - cannot set radius\n",name); + } else { + + Float_t tmpRadL = tmp->fx2X0; + Float_t tmpPhiRes = tmp->fPhiRes; + Float_t tmpZRes = tmp->fZRes; + Float_t tmpXRho = tmp->fXRho; + RemoveLayer(name); // so that the ordering is correct + AddLayer(name,radius,tmpRadL,tmpXRho,tmpPhiRes,tmpZRes); + } +} + +Float_t KMCDetector::GetRadius(char *name) { + // + // Return layer radius [cm] + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot get radius\n",name); + else + return tmp->fR; + + return 0; +} + +void KMCDetector::SetRadiationLength(char *name, Float_t x2X0) { + // + // Set layer material [cm] + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot set layer material\n",name); + else { + tmp->fx2X0 = x2X0; + } +} + +Float_t KMCDetector::GetRadiationLength(char *name) { + // + // Return layer radius [cm] + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot get layer material\n",name); + else + return tmp->fx2X0; + + return 0; + +} + +void KMCDetector::SetResolution(char *name, Float_t phiRes, Float_t zRes) { + // + // Set layer resolution in [cm] + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot set resolution\n",name); + else { + tmp->fPhiRes = phiRes; + tmp->fZRes = zRes; + tmp->fIsDead = (zRes==RIDICULOUS && phiRes==RIDICULOUS); + ClassifyLayers(); + } +} + +Float_t KMCDetector::GetResolution(char *name, Int_t axis) { + // + // Return layer resolution in [cm] + // axis = 0: resolution in rphi + // axis = 1: resolution in z + // + + KMCLayer *tmp = GetLayer(name); + if (!tmp) + printf("Layer %s not found - cannot get resolution\n",name); + else { + if (axis==0) return tmp->fPhiRes; + if (axis==1) return tmp->fZRes; + printf("error: axis must be either 0 or 1 (rphi or z axis)\n"); + } + return 0; +} + +void KMCDetector::SetLayerEfficiency(char *name, Float_t eff) { + // + // Set layer efficnecy (prop that his is missed within this layer) + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot set layer efficiency\n",name); + else { + tmp->fEff = eff; + } +} + +Float_t KMCDetector::GetLayerEfficiency(char *name) { + // + // Get layer efficnecy (prop that his is missed within this layer) + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot get layer efficneicy\n",name); + else + return tmp->fEff; + + return 0; + +} + +void KMCDetector::RemoveLayer(char *name) { + // + // Removes a layer from the list + // + + KMCLayer *tmp = (KMCLayer*) fLayers.FindObject(name); + if (!tmp) + printf("Layer %s not found - cannot remove it\n",name); + else { + fLayers.Remove(tmp); + ClassifyLayers(); + } +} + + +void KMCDetector::PrintLayout() { + // + // Prints the detector layout + // + + printf("Detector %s: \"%s\"\n",GetName(),GetTitle()); + + if (fLayers.GetEntries()>0) + printf(" Name \t\t r [cm] \t X0 \t phi & z res [um]\n"); + + KMCLayer *tmp = 0; + for (Int_t i = 0; iGetName()); + if (name.Contains("tpc") && (!name.Contains("tpc_0")) ) continue; + + printf("%d. %s \t %03.2f \t%1.4f\t ",i, + tmp->GetName(), tmp->fR, tmp->fx2X0); + if (tmp->fPhiRes==RIDICULOUS) + printf(" - "); + else + printf("%3.0f ",tmp->fPhiRes*10000); + if (tmp->fZRes==RIDICULOUS) + printf(" -\n"); + else + printf("%3.0f\n",tmp->fZRes*10000); + } +} + +void KMCDetector::PlotLayout(Int_t plotDead) { + // + // Plots the detector layout in Front view + // + + Double_t x0=0, y0=0; + + TGraphErrors *gr = new TGraphErrors(); + gr->SetPoint(0,0,0); + KMCLayer *lastLayer = (KMCLayer*)fLayers.At(fLayers.GetEntries()-1); Double_t maxRad = lastLayer->fR; + gr->SetPointError(0,maxRad,maxRad); + gr->Draw("APE"); + + + KMCLayer *tmp = 0; + for (Int_t i = fLayers.GetEntries()-1; i>=0; i--) { + tmp = (KMCLayer*)fLayers.At(i); + + + Double_t txtpos = tmp->fR; + if ((tmp->IsDead())) txtpos*=-1; // + TText *txt = new TText(x0,txtpos,tmp->GetName()); + txt->SetTextSizePixels(5); txt->SetTextAlign(21); + if (!tmp->IsDead() || plotDead) txt->Draw(); + + TEllipse *layEl = new TEllipse(x0,y0,tmp->fR); + // layEl->SetFillColor(5); + layEl->SetFillStyle(5001); + layEl->SetLineStyle(tmp->IsDead()+1); // dashed if not active + layEl->SetLineColor(4); + TString name(tmp->GetName()); + if (!tmp->IsDead()) layEl->SetLineWidth(2); + if (name.Contains("tpc") ) layEl->SetLineColor(29); + + if (!tmp->IsDead() || plotDead) layEl->Draw(); + + } + +} + + + +void KMCDetector::AddTPC(Float_t phiResMean, Float_t zResMean, Int_t skip) { + // + // Emulates the TPC + // + // skip=1: Use every padrow, skip=2: Signal in every 2nd padrow + + + AddLayer((char*)"IFCtpc", 77.8,0.01367, 0); // Inner Field cage (RS: set correct xrho for eloss) + + // % Radiation Lengths ... Average per TPC row (i.e. total/159 ) + Float_t x2X0PerRow = 0.000036; + + Float_t tpcInnerRadialPitch = 0.75 ; // cm + Float_t tpcMiddleRadialPitch = 1.0 ; // cm + Float_t tpcOuterRadialPitch = 1.5 ; // cm + // Float_t tpcInnerPadWidth = 0.4 ; // cm + // Float_t tpcMiddlePadWidth = 0.6 ; // cm + // Float_t tpcOuterPadWidth = 0.6 ; // cm + Float_t innerRows = 63 ; + Float_t middleRows = 64 ; + Float_t outerRows = 32 ; + Float_t tpcRows = (innerRows + middleRows + outerRows) ; + Float_t rowOneRadius = 85.2 ; // cm + Float_t row64Radius = 135.1 ; // cm + Float_t row128Radius = 199.2 ; // cm + + for ( Int_t k = 0 ; k < tpcRows ; k++ ) { + + Float_t rowRadius =0; + if (k=innerRows && k<(innerRows+middleRows) ) + rowRadius = row64Radius + (k-innerRows+1)*tpcMiddleRadialPitch ; + else if (k>=(innerRows+middleRows) && kGetName()); + if (name.Contains("tpc")) { RemoveLayer((char*)name.Data()); i--; } + } + RemoveLayer((char*)"IFC"); + +} + + +Double_t KMCDetector::ThetaMCS ( Double_t mass, Double_t x2X0, Double_t momentum ) const +{ + // + // returns the Multiple Couloumb scattering angle (compare PDG boolet, 2010, equ. 27.14) + // + + Double_t beta = momentum / TMath::Sqrt(momentum*momentum+mass*mass) ; + Double_t theta = 0.0 ; // Momentum and mass in GeV + // if ( RadLength > 0 ) theta = 0.0136 * TMath::Sqrt(RadLength) / ( beta * momentum ); + if ( x2X0 > 0 ) theta = 0.0136 * TMath::Sqrt(x2X0) / ( beta * momentum ) * (1+0.038*TMath::Log(x2X0)) ; + return (theta) ; +} + + +Double_t KMCDetector::ProbGoodHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) +{ + // Based on work by Howard Wieman: http://rnc.lbl.gov/~wieman/GhostTracks.htm + // and http://rnc.lbl.gov/~wieman/HitFinding2D.htm + // This is the probability of getting a good hit using 2D Gaussian distribution function and infinite search radius + Double_t sx, sy, goodHit ; + sx = 2 * TMath::Pi() * searchRadiusRPhi * searchRadiusRPhi * HitDensity(radius) ; + sy = 2 * TMath::Pi() * searchRadiusZ * searchRadiusZ * HitDensity(radius) ; + goodHit = TMath::Sqrt(1./((1+sx)*(1+sy))) ; + return ( goodHit ) ; +} + + +Double_t KMCDetector::ProbGoodChiSqHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) +{ + // Based on work by Victor Perevoztchikov and Howard Wieman: http://rnc.lbl.gov/~wieman/HitFinding2DXsq.htm + // This is the probability of getting a good hit using a Chi**2 search on a 2D Gaussian distribution function + Double_t sx, goodHit ; + sx = 2 * TMath::Pi() * searchRadiusRPhi * searchRadiusZ * HitDensity(radius) ; + goodHit = 1./(1+sx) ; + return ( goodHit ) ; +} + +Double_t KMCDetector::ProbGoodChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) +{ + // Based on work by Ruben Shahoyen + // This is the probability of getting a good hit using a Chi**2 search on a 2D Gaussian distribution function + // Plus, in addition, taking a "confidence level" and the "layer efficiency" into account + // Following is correct for 2 DOF + + Double_t c = -2 *TMath::Log(fConfLevel); // quantile at cut of confidence level + Double_t alpha = (1 + 2 * TMath::Pi() * HitDensity(radius) * searchRadiusRPhi * searchRadiusZ)/2; + Double_t goodHit = leff/(2*alpha) * (1 - TMath::Exp(-alpha*c)); + return ( goodHit ) ; +} + +Double_t KMCDetector::ProbNullChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) +{ + // Based on work by Ruben Shahoyen + // This is the probability to not have any match to the track (see also :ProbGoodChiSqPlusConfHit:) + + Double_t c = -2 *TMath::Log(fConfLevel); // quantile at cut of confidence level + Double_t alpha = (1 + 2 * TMath::Pi() * HitDensity(radius) * searchRadiusRPhi * searchRadiusZ)/2; + Double_t nullHit = (1-leff+fConfLevel*leff)*TMath::Exp(-c*(alpha-1./2)); + return ( nullHit ) ; +} + +Double_t KMCDetector::HitDensity ( Double_t radius ) +{ + // Background (0-1) is included via 'OtherBackground' which multiplies the minBias rate by a scale factor. + // UPC electrons is a temporary kludge that is based on Kai Schweda's summary of Kai Hainken's MC results + // See K. Hencken et al. PRC 69, 054902 (2004) and PPT slides by Kai Schweda. + // Note that this function assumes we are working in CM and CM**2 [not meters]. + // Based on work by Yan Lu 12/20/2006, all radii and densities in centimeters or cm**2. + + // Double_t MaxRadiusSlowDet = 0.1; //? // Maximum radius for slow detectors. Fast detectors + // and only fast detectors reside outside this radius. + Double_t arealDensity = 0 ; + if (radius<0.01) return 0; + + if ( radius >= fMaxRadiusSlowDet ) + { + arealDensity = OneEventHitDensity(fdNdEtaCent,radius) ; // Fast detectors see central collision density (only) + arealDensity += OtherBackground*OneEventHitDensity(dNdEtaMinB,radius) ; // Increase density due to background + } + + if (radius < fMaxRadiusSlowDet ) + { // Note that IntegratedHitDensity will always be minB one event, or more, even if integration time => zero. + arealDensity = OneEventHitDensity(fdNdEtaCent,radius) + + IntegratedHitDensity(dNdEtaMinB,radius) + + UpcHitDensity(radius) ; + arealDensity += OtherBackground*IntegratedHitDensity(dNdEtaMinB,radius) ; + // Increase density due to background + } + + return ( arealDensity ) ; +} + + +double KMCDetector::OneEventHitDensity( Double_t multiplicity, Double_t radius ) const +{ + // This is for one event at the vertex. No smearing. + double den = multiplicity / (2.*TMath::Pi()*radius*radius) * fDensFactorEta ; // 2 eta ? + // note: surface of sphere is '4*pi*r^2' + // surface of cylinder is '2*pi*r* h' + return den ; +} + + +double KMCDetector::IntegratedHitDensity(Double_t multiplicity, Double_t radius) +{ + // The integral of minBias events smeared over a gaussian vertex distribution. + // Based on work by Yan Lu 12/20/2006, all radii in centimeters. + + Double_t zdcHz = Luminosity * 1.e-24 * CrossSectionMinB ; + Double_t den = zdcHz * fIntegrationTime/1000. * multiplicity * Dist(0., radius) / (2.*TMath::Pi()*radius) ; + + // Note that we do not allow the rate*time calculation to fall below one minB event at the vertex. + double dens1 = OneEventHitDensity(multiplicity,radius); + if ( den < dens1 ) den = dens1; + + return den ; +} + + +double KMCDetector::UpcHitDensity(Double_t radius) +{ + // QED electrons ... + + Double_t mUPCelectrons ; ; + // mUPCelectrons = fLhcUPCscale * (1.23 - radius/6.5) ; // Fit to Kai Schweda summary tables at RHIC * 'scale' for LHC + mUPCelectrons = fLhcUPCscale*5456/(radius*radius)/dNdEtaMinB; // Fit to 'Rossegger,Sadovsky'-Alice simulation + if ( mUPCelectrons < 0 ) mUPCelectrons = 0.0 ; // UPC electrons fall off quickly and don't go to large R + mUPCelectrons *= IntegratedHitDensity(dNdEtaMinB,radius) ; // UPCs increase Mulitiplicty ~ proportional to MinBias rate + mUPCelectrons *= UPCBackgroundMultiplier ; // Allow for an external multiplier (eg 0-1) to turn off UPC + + return mUPCelectrons ; +} + + +double KMCDetector::Dist(double z, double r) +{ + // Convolute dEta/dZ distribution with assumed Gaussian of vertex z distribution + // Based on work by Howard Wieman http://rnc.lbl.gov/~wieman/HitDensityMeasuredLuminosity7.htm + // Based on work by Yan Lu 12/20/2006, all radii and Z location in centimeters. + Int_t index = 1 ; // Start weight at 1 for Simpsons rule integration + Int_t nsteps = 301 ; // NSteps must be odd for Simpson's rule to work + double dist = 0.0 ; + double dz0 = ( 4*SigmaD - (-4)*SigmaD ) / (nsteps-1) ; //cm + double z0 = 0.0 ; //cm + for(int i=0; i= 20 ) pionindex = 399 ; + if ( pionindex >= 0 ) effp = corrEfficiency[0][pionindex] ; + if ( pionindex < 0 ) effp = (corrEfficiency[0][1]-corrEfficiency[0][0])*pionindex + corrEfficiency[0][0] ; // Extrapolate if reqd + if ( effp < 0 ) effp = 0 ; + + if ( kaonindex >= 20 ) kaonindex = 399 ; + if ( kaonindex >= 0 ) effk = corrEfficiency[1][kaonindex] ; + if ( kaonindex < 0 ) effk = (corrEfficiency[1][1]-corrEfficiency[1][0])*kaonindex + corrEfficiency[1][0] ; // Extrapolate if reqd + if ( effk < 0 ) effk = 0 ; + + // Note that we assume that the Kaon Decay efficiency has already been inlcuded in the kaon efficiency used here. + + sum += effp * effk ; + + } + + Double_t mean =sum/360; + return mean ; + +} + +KMCProbe* KMCDetector::PrepareKalmanTrack(double pt, double lambda, double mass, int charge, double phi, double x,double y, double z) +{ + // Prepare trackable Kalman track at the farthest position + // + // Set track parameters + // Assume track started at (0,0,0) and shoots out on the X axis, and B field is on the Z axis + fProbe.Reset(); + fProbe.SetMass(mass); + KMCProbe* probe = new KMCProbe(fProbe); + double *trPars = (double*)probe->GetParameter(); + double *trCov = (double*)probe->GetCovariance(); + double xyz[3] = {x,y,z}; + probe->Global2LocalPosition(xyz,phi); + probe->Set(xyz[0],phi,trPars,trCov); + trPars[KMCProbe::kY] = xyz[1]; + trPars[KMCProbe::kZ] = xyz[2]; + trPars[KMCProbe::kSnp] = 0; // track along X axis at the vertex + trPars[KMCProbe::kTgl] = TMath::Tan(lambda); // dip + trPars[KMCProbe::kPtI] = charge/pt; // q/pt + // + // put tiny errors to propagate to the outer-most radius + trCov[KMCProbe::kY2] = trCov[KMCProbe::kZ2] = trCov[KMCProbe::kSnp2] = trCov[KMCProbe::kTgl2] = trCov[KMCProbe::kPtI2] = 1e-20; + fProbe = *probe; // store original track + // + // propagate to last layer + fLastActiveLayerTracked = 0; + for (Int_t j=0; j<=fLastActiveLayer; j++) { + KMCLayer* lr = GetLayer(j); + lr->Reset(); + // + if (!PropagateToLayer(probe,lr,1)) break; + if (!probe->CorrectForMeanMaterial(lr, kFALSE)) break; + // + lr->fClCorr.Set(probe->GetY(),probe->GetZ(), probe->GetX(), probe->GetAlpha()); + if (!lr->IsDead()) fLastActiveLayerTracked = j; + } + probe->ResetCovMat();// reset cov.matrix + printf("Last active layer trracked: %d (out of %d)\n",fLastActiveLayerTracked,fLastActiveLayer); + // + return probe; +} + + + +TGraph * KMCDetector::GetGraphMomentumResolution(Int_t color, Int_t linewidth) { + // + // returns the momentum resolution + // + + TGraph *graph = new TGraph(20, fTransMomenta, fMomentumRes); + graph->SetTitle("Momentum Resolution .vs. Pt" ) ; + // graph->GetXaxis()->SetRangeUser(0.,5.0) ; + graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; + graph->GetXaxis()->CenterTitle(); + graph->GetXaxis()->SetNoExponent(1) ; + graph->GetXaxis()->SetMoreLogLabels(1) ; + graph->GetYaxis()->SetTitle("Momentum Resolution (%)") ; + graph->GetYaxis()->CenterTitle(); + + graph->SetMaximum(20) ; + graph->SetMinimum(0.1) ; + graph->SetLineColor(color); + graph->SetMarkerColor(color); + graph->SetLineWidth(linewidth); + + return graph; + +} + +TGraph * KMCDetector::GetGraphPointingResolution(Int_t axis, Int_t color, Int_t linewidth) { + + // Returns the pointing resolution + // axis = 0 ... rphi pointing resolution + // axis = 1 ... z pointing resolution + // + + TGraph * graph = 0; + + if (axis==0) { + graph = new TGraph ( 20, fTransMomenta, fResolutionRPhi ) ; + graph->SetTitle("R-#phi Pointing Resolution .vs. Pt" ) ; + graph->GetYaxis()->SetTitle("R-#phi Pointing Resolution (#mum)") ; + } else { + graph = new TGraph ( 20, fTransMomenta, fResolutionZ ) ; + graph->SetTitle("Z Pointing Resolution .vs. Pt" ) ; + graph->GetYaxis()->SetTitle("Z Pointing Resolution (#mum)") ; + } + + graph->SetMinimum(1) ; + graph->SetMaximum(300.1) ; + graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; + graph->GetXaxis()->CenterTitle(); + graph->GetXaxis()->SetNoExponent(1) ; + graph->GetXaxis()->SetMoreLogLabels(1) ; + graph->GetYaxis()->CenterTitle(); + + graph->SetLineWidth(linewidth); + graph->SetLineColor(color); + graph->SetMarkerColor(color); + + return graph; + +} + + +TGraph * KMCDetector::GetGraphPointingResolutionTeleEqu(Int_t axis,Int_t color, Int_t linewidth) { + // + // returns the Pointing resolution (accoring to Telescope equation) + // axis =0 ... in rphi + // axis =1 ... in z + // + + Double_t resolution[20]; + + Double_t layerResolution[2]; + Double_t layerRadius[2]; + Double_t layerThickness[2]; + + Int_t count =0; // search two first active layers + printf("Telescope equation for layers: "); + for (Int_t i = 0; iIsDead() && l->fR>0) { + layerRadius[count] = l->fR; + layerThickness[count] = l->fx2X0; + if (axis==0) { + layerResolution[count] = l->fPhiRes; + } else { + layerResolution[count] = l->fZRes; + } + printf("%s, ",l->GetName()); + count++; + } + if (count>=2) break; + } + printf("\n"); + + Double_t pt, momentum, thickness,aMCS ; + Double_t lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-1*fAvgRapidity)); + + for ( Int_t i = 0 ; i < 20 ; i++ ) { + // Reference data as if first two layers were acting all alone + pt = fTransMomenta[i] ; + momentum = pt / TMath::Cos(lambda) ; // Total momentum + resolution[i] = layerResolution[0]*layerResolution[0]*layerRadius[1]*layerRadius[1] + + layerResolution[1]*layerResolution[1]*layerRadius[0]*layerRadius[0] ; + resolution[i] /= ( layerRadius[1] - layerRadius[0] ) * ( layerRadius[1] - layerRadius[0] ) ; + thickness = layerThickness[0] / TMath::Sin(TMath::Pi()/2 - lambda) ; + aMCS = ThetaMCS(fParticleMass, thickness, momentum) ; + resolution[i] += layerRadius[0]*layerRadius[0]*aMCS*aMCS ; + resolution[i] = TMath::Sqrt(resolution[i]) * 10000.0 ; // result in microns + } + + + + TGraph* graph = new TGraph ( 20, fTransMomenta, resolution ) ; + + if (axis==0) { + graph->SetTitle("RPhi Pointing Resolution .vs. Pt" ) ; + graph->GetYaxis()->SetTitle("RPhi Pointing Resolution (#mum) ") ; + } else { + graph->SetTitle("Z Pointing Resolution .vs. Pt" ) ; + graph->GetYaxis()->SetTitle("Z Pointing Resolution (#mum) ") ; + } + graph->SetMinimum(1) ; + graph->SetMaximum(300.1) ; + graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; + graph->GetXaxis()->CenterTitle(); + graph->GetXaxis()->SetNoExponent(1) ; + graph->GetXaxis()->SetMoreLogLabels(1) ; + graph->GetYaxis()->CenterTitle(); + + graph->SetLineColor(color); + graph->SetMarkerColor(color); + graph->SetLineStyle(kDashed); + graph->SetLineWidth(linewidth); + + return graph; + +} + +TGraph * KMCDetector::GetGraphRecoEfficiency(Int_t particle,Int_t color, Int_t linewidth) { + // + // particle = 0 ... choosen particle (setted particleMass) + // particle = 1 ... Pion + // particle = 2 ... Kaon + // particle = 3 ... D0 + // + Double_t lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-1*fAvgRapidity)); + + Double_t particleEfficiency[20]; // with chosen particle mass + Double_t kaonEfficiency[20], pionEfficiency[20], d0efficiency[20]; + Double_t partEfficiency[2][20]; + + if (particle != 0) { + // resulting Pion and Kaon efficiency scaled with overall efficiency + Double_t doNotDecayFactor; + for ( Int_t massloop = 0 ; massloop < 2 ; massloop++) { //0-pion, 1-kaon + + for ( Int_t j = 0 ; j < 20 ; j++ ) { + // JT Test Let the kaon decay. If it decays inside the TPC ... then it is gone; for all decays < 130 cm. + Double_t momentum = fTransMomenta[j] / TMath::Cos(lambda) ; // Total momentum at average rapidity + if ( massloop == 1 ) { // KAON + doNotDecayFactor = TMath::Exp(-130/(371*momentum/KaonMass)) ; // Decay length for kaon is 371 cm. + kaonEfficiency[j] = fEfficiency[1][j] * AcceptanceOfTpcAndSi*doNotDecayFactor ; + } else { // PION + doNotDecayFactor = 1.0 ; + pionEfficiency[j] = fEfficiency[0][j] * AcceptanceOfTpcAndSi*doNotDecayFactor ; + } + partEfficiency[0][j] = pionEfficiency[j]; + partEfficiency[1][j] = kaonEfficiency[j]; + } + } + + // resulting estimate of the D0 efficiency + for ( Int_t j = 0 ; j < 20 ; j++ ) { + d0efficiency[j] = D0IntegratedEfficiency(fTransMomenta[j],partEfficiency); + } + } else { + for ( Int_t j = 0 ; j < 20 ; j++ ) { + particleEfficiency[j] = fEfficiency[2][j]* AcceptanceOfTpcAndSi; + // NOTE: Decay factor (see kaon) should be included to be realiable + } + } + + for ( Int_t j = 0 ; j < 20 ; j++ ) { + pionEfficiency[j] *= 100; + kaonEfficiency[j] *= 100; + d0efficiency[j] *= 100; + particleEfficiency[j] *= 100; + } + + TGraph * graph = 0; + if (particle==0) { + graph = new TGraph ( 20, fTransMomenta, particleEfficiency ) ; // choosen mass + graph->SetLineWidth(1); + } else if (particle==1) { + graph = new TGraph ( 20, fTransMomenta, pionEfficiency ) ; + graph->SetLineWidth(1); + } else if (particle ==2) { + graph = new TGraph ( 20, fTransMomenta, kaonEfficiency ) ; + graph->SetLineWidth(1); + } else if (particle ==3) { + graph = new TGraph ( 20, fTransMomenta, d0efficiency ) ; + graph->SetLineStyle(kDashed); + } else + return 0; + + graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; + graph->GetXaxis()->CenterTitle(); + graph->GetXaxis()->SetNoExponent(1) ; + graph->GetXaxis()->SetMoreLogLabels(1) ; + graph->GetYaxis()->SetTitle("Efficiency (%)") ; + graph->GetYaxis()->CenterTitle(); + + graph->SetMinimum(0.01) ; + graph->SetMaximum(100) ; + + graph->SetLineColor(color); + graph->SetMarkerColor(color); + graph->SetLineWidth(linewidth); + + return graph; +} + +TGraph * KMCDetector::GetGraphRecoFakes(Int_t particle,Int_t color, Int_t linewidth) { + // + // particle = 0 ... choosen particle (setted particleMass) + // particle = 1 ... Pion + // particle = 2 ... Kaon + // + + Double_t lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-1*fAvgRapidity)); + + Double_t particleFake[20]; // with chosen particle mass + Double_t kaonFake[20], pionFake[20]; + Double_t partFake[2][20]; + + if (particle != 0) { + // resulting Pion and Kaon efficiency scaled with overall efficiency + Double_t doNotDecayFactor; + for ( Int_t massloop = 0 ; massloop < 2 ; massloop++) { //0-pion, 1-kaon + + for ( Int_t j = 0 ; j < 20 ; j++ ) { + // JT Test Let the kaon decay. If it decays inside the TPC ... then it is gone; for all decays < 130 cm. + Double_t momentum = fTransMomenta[j] / TMath::Cos(lambda) ; // Total momentum at average rapidity + if ( massloop == 1 ) { // KAON + doNotDecayFactor = TMath::Exp(-130/(371*momentum/KaonMass)) ; // Decay length for kaon is 371 cm. + kaonFake[j] = fFake[1][j] /( doNotDecayFactor) ; + } else { // PION + pionFake[j] = fFake[0][j] ; + } + partFake[0][j] = pionFake[j]; + partFake[1][j] = kaonFake[j]; + } + } + + } else { + for ( Int_t j = 0 ; j < 20 ; j++ ) { + particleFake[j] = fFake[2][j]; + // NOTE: Decay factor (see kaon) should be included to be realiable + } + } + + for ( Int_t j = 0 ; j < 20 ; j++ ) { + pionFake[j] *= 100; + kaonFake[j] *= 100; + particleFake[j] *= 100; + } + + TGraph * graph = 0; + if (particle==0) { + graph = new TGraph ( 20, fTransMomenta, particleFake ) ; // choosen mass + graph->SetLineWidth(1); + } else if (particle==1) { + graph = new TGraph ( 20, fTransMomenta, pionFake ) ; + graph->SetLineWidth(1); + } else if (particle ==2) { + graph = new TGraph ( 20, fTransMomenta, kaonFake ) ; + graph->SetLineWidth(1); + } + + graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; + graph->GetXaxis()->CenterTitle(); + graph->GetXaxis()->SetNoExponent(1) ; + graph->GetXaxis()->SetMoreLogLabels(1) ; + graph->GetYaxis()->SetTitle("Fake (%)") ; + graph->GetYaxis()->CenterTitle(); + + graph->SetMinimum(0.01) ; + graph->SetMaximum(100) ; + + graph->SetLineColor(color); + graph->SetMarkerColor(color); + graph->SetLineWidth(linewidth); + + return graph; +} + + +TGraph* KMCDetector::GetGraphImpactParam(Int_t mode, Int_t axis, Int_t color, Int_t linewidth) { + // + // returns the Impact Parameter d0 (convolution of pointing resolution and vtx resolution) + // mode 0: impact parameter (convolution of pointing and vertex resolution) + // mode 1: pointing resolution + // mode 2: vtx resolution + + + TGraph *graph = new TGraph(); + + // TFormula vtxResRPhi("vtxRes","50-2*x"); // 50 microns at pt=0, 15 microns at pt =20 ? + TFormula vtxResRPhi("vtxRes","35/(x+1)+10"); // + TFormula vtxResZ("vtxResZ","600/(x+6)+10"); // + + TGraph *trackRes = GetGraphPointingResolution(axis,1); + Double_t *pt = trackRes->GetX(); + Double_t *trRes = trackRes->GetY(); + for (Int_t ip =0; ipGetN(); ip++) { + Double_t vtxRes = 0; + if (axis==0) + vtxRes = vtxResRPhi.Eval(pt[ip]); + else + vtxRes = vtxResZ.Eval(pt[ip]); + + if (mode==0) + graph->SetPoint(ip,pt[ip],TMath::Sqrt(vtxRes*vtxRes+trRes[ip]*trRes[ip])); + else if (mode ==1) + graph->SetPoint(ip,pt[ip],trRes[ip]); + else + graph->SetPoint(ip,pt[ip],vtxRes); + } + + graph->SetTitle("d_{0} r#phi resolution .vs. Pt" ) ; + graph->GetYaxis()->SetTitle("d_{0} r#phi resolution (#mum)") ; + + graph->SetMinimum(1) ; + graph->SetMaximum(300.1) ; + graph->GetXaxis()->SetTitle("Transverse Momentum (GeV/c)") ; + graph->GetXaxis()->CenterTitle(); + graph->GetXaxis()->SetNoExponent(1) ; + graph->GetXaxis()->SetMoreLogLabels(1) ; + graph->GetYaxis()->CenterTitle(); + + graph->SetLineColor(color); + graph->SetMarkerColor(color); + graph->SetLineWidth(linewidth); + + return graph; + +} + +TGraph* KMCDetector::GetGraph(Int_t number, Int_t color, Int_t linewidth) { + // + // returns graph according to the number + // + switch(number) { + case 1: + return GetGraphPointingResolution(0,color, linewidth); // dr + case 2: + return GetGraphPointingResolution(1,color, linewidth); // dz + case 3: + return GetGraphPointingResolutionTeleEqu(0,color, linewidth); // dr - tele + case 4: + return GetGraphPointingResolutionTeleEqu(1,color, linewidth); // dz - tele + case 5: + return GetGraphMomentumResolution(color, linewidth); // pt resolution + case 10: + return GetGraphRecoEfficiency(0, color, linewidth); // tracked particle + case 11: + return GetGraphRecoEfficiency(1, color, linewidth); // eff. pion + case 12: + return GetGraphRecoEfficiency(2, color, linewidth); // eff. kaon + case 13: + return GetGraphRecoEfficiency(3, color, linewidth); // eff. D0 + case 15: + return GetGraphRecoFakes(0, color, linewidth); // Fake tracked particle + case 16: + return GetGraphRecoFakes(1, color, linewidth); // Fake pion + case 17: + return GetGraphRecoFakes(2, color, linewidth); // Fake kaon + default: + printf(" Error: chosen graph number not valid\n"); + } + return 0; + +} + +void KMCDetector::MakeAliceAllNew(Bool_t flagTPC,Bool_t flagMon, int setVer) { + + // All New configuration with X0 = 0.3 and resolution = 4 microns + + AddLayer((char*)"bpipe_its",2.0,0.0022, 0.092); // beam pipe, 0.5 mm Be + AddLayer((char*)"vertex_its", 0, 0); // dummy vertex for matrix calculation + if (fgVtxConstraint[0]>0 && fgVtxConstraint[1]>0) { + printf("vertex will work as constraint: %.4f %.4f\n",fgVtxConstraint[0],fgVtxConstraint[1]); + SetResolution((char*)"vertex_its",fgVtxConstraint[0],fgVtxConstraint[1]); + } + // + // new ideal Pixel properties? + Double_t x0 = 0.0050; + Double_t resRPhi = 0.0006; + Double_t resZ = 0.0006; + Double_t xrho = 0.0116; // assume 0.5mm of silicon for eloss + // + if (flagMon) { + x0 *= 3./5.; + xrho *=3./5.; + resRPhi = 0.0004; + resZ = 0.0004; + } + + double sclD = 1; + double sclZ = 1; + + // default all new + if (setVer<=0) { + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); + } + else if (setVer==1) { + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2", 2.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 3.6 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its4", 20.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); + AddLayer((char*)"its5", 22.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); + AddLayer((char*)"its6", 43.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); + AddLayer((char*)"its7", 43.6 , x0, xrho, resRPhi*sclD, resZ*sclZ); + // + /* + UInt_t patt[] = { + KMCTrackSummary::Bits(1,1,1), + KMCTrackSummary::Bits(0,0,0,1,1), + KMCTrackSummary::Bits(0,0,0,0,0,1,1) + }; + RequirePattern( patt, sizeof(patt)/sizeof(UInt_t)); + */ + } + else if (setVer==2) { + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its1a", 2.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2", 3.6 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2a", 4.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 20.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); + AddLayer((char*)"its4", 22.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); + AddLayer((char*)"its5", 33.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); + AddLayer((char*)"its6", 43.0 , x0, xrho, resRPhi*sclD, resZ*sclZ); + AddLayer((char*)"its7", 43.6 , x0, xrho, resRPhi*sclD, resZ*sclZ); + // + /* + UInt_t patt[] = { + KMCTrackSummary::Bits(1,1,1,1), + KMCTrackSummary::Bits(0,0,0,0,1,1), + KMCTrackSummary::Bits(0,0,0,0,0,0,1,1,1) + }; + RequirePattern( patt, sizeof(patt)/sizeof(UInt_t)); + */ + } + /* + // last 2 layers strips + double resRPStr=0.0020, resZStr = 0.0830; + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its6", 39.6 , x0, xrho, resRPStr, resZStr); + AddLayer((char*)"its7", 43.0 , x0, xrho, resRPStr, resZStr); + */ + //*/ + /* + // resolution scaled with R as res(2.2) * R/2.2 + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); + KMCLayer* lr0 = 0; + for (int i=0;iIsVertex()) continue; + if (lr0==0) { + lr0=lr; + // continue; + } + double scl = 5*lr->GetRadius()/lr0->GetRadius(); + SetResolution((char*)lr->GetName(), resRPhi*scl, resZ*scl*4); + } + */ + /* + // 1st 2 layers double + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its1a", 2.8 , x0, xrho, resRPhi, resZ); + + AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2a", 4.2 , x0, xrho, resRPhi, resZ); + + AddLayer((char*)"its3a", 6.4 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); + + AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); + */ + /* + // last 4 layers doubled + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); + + AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its4a", 12.8 , x0, xrho, resRPhi, resZ); + + AddLayer((char*)"its5", 23.5 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its5a", 23.9 , x0, xrho, resRPhi, resZ); + + AddLayer((char*)"its6", 39.6 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its6a", 40.0 , x0, xrho, resRPhi, resZ); + + AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its7a", 43.4 , x0, xrho, resRPhi, resZ); + */ + + /* //last 3 lr together + AddLayer((char*)"its1", 2.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its2", 3.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its3", 6.8 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its4", 12.4 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its5", 42.2 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its6", 42.6 , x0, xrho, resRPhi, resZ); + AddLayer((char*)"its7", 43.0 , x0, xrho, resRPhi, resZ); + */ + if (flagTPC) { + AddTPC(0.1,0.1); // TPC + } + PrintLayout(); +} + +void KMCDetector::MakeAliceCurrent(Bool_t flagTPC, Int_t AlignResiduals) { + + // Numbers taken from + // 2010 JINST 5 P03003 - Alignment of the ALICE Inner Tracking System with cosmic-ray tracks + // number for misalingment: private communication with Andrea Dainese + + // 1.48e-01, 2.48e-01,2.57e-01, 1.34e-01, 3.34e-01,3.50e-01, 2.22e-01, 2.38e-01,2.25e-01}; + + AddLayer((char*)"vertex_its", 0, 0); // dummy vertex for matrix calculation + if (fgVtxConstraint[0]>0 && fgVtxConstraint[1]>0) { + printf("vertex will work as constraint: %.4f %.4f",fgVtxConstraint[0],fgVtxConstraint[1]); + SetResolution((char*)"vertex_its",fgVtxConstraint[0],fgVtxConstraint[1]); + } + // + AddLayer((char*)"bpipe_its",2.94,0.0022, 1.48e-01); // beam pipe + AddLayer((char*)"tshld1_its",11.5,0.0065, 1.34e-01); // Thermal shield // 1.3% /2 + AddLayer((char*)"tshld2_its",31.0,0.0108, 2.22e-01); // Thermal shield // 1.3% /2 + // + if (flagTPC) { + AddTPC(0.1,0.1); // TPC + } + // Adding the ITS - current configuration + + if (AlignResiduals==0) { + AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, 0.0012, 0.0130); + AddLayer((char*)"spd2_its", 7.6, 0.0114, 2.57e-01, 0.0012, 0.0130); + AddLayer((char*)"sdd1_its",15.0, 0.0113, 3.34e-01, 0.0035, 0.0025); + AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, 0.0035, 0.0025); + AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, 0.0020, 0.0830); + AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, 0.0020, 0.0830); + /* + UInt_t patt[] = { + KMCTrackSummary::Bits(1,1), + KMCTrackSummary::Bits(0,0,1,1), + KMCTrackSummary::Bits(0,0,0,0,1,1) + }; + RequirePattern( patt, sizeof(patt)/sizeof(UInt_t)); + */ + } else if (AlignResiduals==1) { + + // tracking errors ... + // (Additional systematic errors due to misalignments) ... + // itsRecoParam->SetClusterMisalErrorYBOn(0.0010,0.0030,0.0500,0.0500,0.0020,0.0020); // [cm] + // itsRecoParam->SetClusterMisalErrorZBOn(0.0050,0.0050,0.0050,0.0050,0.1000,0.1000); + + AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, TMath::Sqrt(0.0012*0.0012+0.0010*0.0010), + TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); + AddLayer((char*)"spd2_its", 7.6, 0.0114, 2.57e-01, TMath::Sqrt(0.0012*0.0012+0.0030*0.0030), + TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); + AddLayer((char*)"sdd1_its",15.0, 0.0113, 3.34e-01, TMath::Sqrt(0.0035*0.0035+0.0100*0.0100), + TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); + AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, TMath::Sqrt(0.0035*0.0035+0.0100*0.0100), + TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); + AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020), + TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); + AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020), + TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); + + } else if (AlignResiduals==2) { + + + // tracking errors ... PLUS ... module misalignment + + // itsRecoParam->SetClusterMisalErrorYBOn(0.0010,0.0030,0.0500,0.0500,0.0020,0.0020); // [cm] + // itsRecoParam->SetClusterMisalErrorZBOn(0.0050,0.0050,0.0050,0.0050,0.1000,0.1000); + + // the ITS modules are misalignment with small gaussian smearings with + // sigmarphi ~ 8, 10, 10 micron in SPD, SDD, SSD + + AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, TMath::Sqrt(0.0012*0.0012+0.0010*0.0010+0.0008*0.0008), + TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); + AddLayer((char*)"spd2_ots", 7.6, 0.0114, 2.57e-01, TMath::Sqrt(0.0012*0.0012+0.0030*0.0030+0.0008*0.0008), + TMath::Sqrt(0.0130*0.0130+0.0050*0.0050)); + AddLayer((char*)"sdd1_ots",15.0, 0.0113, 3.34e-01, TMath::Sqrt(0.0035*0.0035+0.0500*0.0500+0.0010*0.0010), + TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); + AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, TMath::Sqrt(0.0035*0.0035+0.0500*0.0500+0.0010*0.0010), + TMath::Sqrt(0.0025*0.0025+0.0050*0.0050)); + AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020+0.0010*0.0010), + TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); + AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, TMath::Sqrt(0.0020*0.0020+0.0020*0.0020+0.0010*0.0010), + TMath::Sqrt(0.0830*0.0830+0.1000*0.1000)); + + } else { + + // the ITS modules are misalignment with small gaussian smearings with + // sigmarphi ~ 8, 10, 10 micron in SPD, SDD, SSD + // unknown in Z ???? + + AddLayer((char*)"spd1_its", 3.9, 0.0114, 2.48e-01, TMath::Sqrt(0.0012*0.0012+0.0008*0.0008), + TMath::Sqrt(0.0130*0.0130+0.000*0.000)); + AddLayer((char*)"spd2_its", 7.6, 0.0114, 2.57e-01, TMath::Sqrt(0.0012*0.0012+0.0008*0.0008), + TMath::Sqrt(0.0130*0.0130+0.000*0.000)); + AddLayer((char*)"sdd1_its",15.0, 0.0113, 3.34e-01, TMath::Sqrt(0.0035*0.0035+0.0010*0.0010), + TMath::Sqrt(0.0025*0.0025+0.000*0.000)); + AddLayer((char*)"sdd2_its",23.9, 0.0126, 3.50e-01, TMath::Sqrt(0.0035*0.0035+0.0010*0.0010), + TMath::Sqrt(0.0025*0.0025+0.000*0.000)); + AddLayer((char*)"ssd1_its",38.0, 0.0083, 2.38e-01, TMath::Sqrt(0.0020*0.0020+0.0010*0.0010), + TMath::Sqrt(0.0830*0.0830+0.000*0.000)); + AddLayer((char*)"ssd2_its",43.0, 0.0086, 2.25e-01, TMath::Sqrt(0.0020*0.0020+0.0010*0.0010), + TMath::Sqrt(0.0830*0.0830+0.000*0.000)); + } + +} + + +void KMCDetector::MakeStandardPlots(Bool_t add, Int_t color, Int_t linewidth,Bool_t onlyPionEff) { + // + // Produces the standard performace plots + // + + if (!add) { + + TCanvas *c1 = new TCanvas("c1","c1");//,100,100,500,500); + c1->Divide(2,2); + + c1->cd(1); gPad->SetGridx(); gPad->SetGridy(); + gPad->SetLogx(); + TGraph *eff = GetGraphRecoEfficiency(1,color,linewidth); + eff->SetTitle("Efficiencies"); + eff->Draw("AL"); + if (!onlyPionEff) { + GetGraphRecoEfficiency(2,color,linewidth)->Draw("L"); + GetGraphRecoEfficiency(3,color,linewidth)->Draw("L"); + } + c1->cd(2); gPad->SetGridx(); gPad->SetGridy(); + gPad->SetLogy(); gPad->SetLogx(); + GetGraphMomentumResolution(color,linewidth)->Draw("AL"); + + c1->cd(3); gPad->SetGridx(); gPad->SetGridy(); + gPad->SetLogx(); + GetGraphPointingResolution(0,color,linewidth)->Draw("AL"); + + c1->cd(4); gPad->SetGridx(); gPad->SetGridy(); + gPad->SetLogx(); + GetGraphPointingResolution(1,color,linewidth)->Draw("AL"); + + } else { + + TVirtualPad *c1 = gPad->GetMother(); + + c1->cd(1); + GetGraphRecoEfficiency(1,color,linewidth)->Draw("L"); + if (!onlyPionEff) { + GetGraphRecoEfficiency(2,color,linewidth)->Draw("L"); + GetGraphRecoEfficiency(3,color,linewidth)->Draw("L"); + } + c1->cd(2); GetGraphMomentumResolution(color,linewidth)->Draw("L"); + + c1->cd(3); GetGraphPointingResolution(0,color,linewidth)->Draw("L"); + + c1->cd(4); GetGraphPointingResolution(1,color,linewidth)->Draw("L"); + + } + +} + +void KMCDetector::ApplyMS(KMCProbe* trc, double x2X0) const +{ + // simulate random modification of track params due to the MS + if (x2X0<=0) return; + double alpha = trc->GetAlpha(); // store original alpha + double mass = trc->GetMass(); + // + double snp = trc->GetSnp(); + double dip = trc->GetTgl(); + Double_t angle=TMath::Sqrt((1.+ dip*dip)/((1-snp)*(1.+snp))); + x2X0 *= angle; + // + static double covCorr[15],covDum[21]={0}; + static double mom[3],pos[3]; + double *cov = (double*) trc->GetCovariance(); + memcpy(covCorr,cov,15*sizeof(double)); + trc->GetXYZ(pos); + trc->GetPxPyPz(mom); + double pt2 = mom[0]*mom[0]+mom[1]*mom[1]; + double pt = TMath::Sqrt(pt2); + double ptot2 = pt2 + mom[2]*mom[2]; + double ptot = TMath::Sqrt(ptot2); + double beta = ptot/TMath::Sqrt(ptot2 + mass*mass); + double sigth = TMath::Sqrt(x2X0)*0.014/(ptot*beta); + // + // a la geant + double phiSC = gRandom->Rndm()*TMath::Pi(); + double thtSC = gRandom->Gaus(0,1.4142*sigth); + // printf("MS phi: %+.5f tht: %+.5f\n",phiSC,thtSC); + double sn = TMath::Sin(thtSC); + double dx = sn*TMath::Sin(phiSC); + double dy = sn*TMath::Cos(phiSC); + double dz = TMath::Cos(thtSC); + double v[3]; + // printf("Before: %+.3e %+.3e %+.3e | MS: %+.3e %+.3e\n",mom[0],mom[1],mom[2],thtSC,phiSC); + for (int i=3;i--;) mom[i] /= ptot; + double vmm = TMath::Sqrt(mom[0]*mom[0]+mom[1]*mom[1]); + if (!IsZero(pt)) { + double pd1 = mom[0]/vmm; + double pd2 = mom[1]/vmm; + v[0] = pd1*mom[2]*dx - pd2*dy + mom[0]*dz; + v[1] = pd2*mom[2]*dx + pd1*dy + mom[1]*dz; + v[2] = -vmm*dx + mom[2]*dz; + } + else { + v[0] = dx; + v[1] = dy; + v[2] = dz*TMath::Sign(1.,mom[2]); + } + double nrm = TMath::Sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); + // printf("before :%+e %+e %+e || %+e %+e %+e %+e\n",mom[0],mom[1],mom[2], sigth, x2X0, pt, beta); + // trc->Print(); + // direction cosines -> p + for (int i=3;i--;) mom[i] = ptot*v[i]/nrm; + // printf("After : %+.3e %+.3e %+.3e\n",mom[0],mom[1],mom[2]); + trc->Set(pos,mom,covDum,trc->Charge()); + // + trc->Rotate(alpha); + memcpy(cov,covCorr,15*sizeof(double)); + // +} + +//________________________________________________________________________________ +Bool_t KMCDetector::TransportKalmanTrackWithMS(KMCProbe *probTr, int maxLr) const +{ + // Transport track till layer maxLr, applying random MS + // + for (Int_t j=0; jIsVertex()) { + ApplyMS(probTr,lr0->fx2X0); // apply MS + if (!probTr->CorrectForMeanMaterial(lr0,kFALSE)) return kFALSE; + } + // + if (!PropagateToLayer(probTr,lr,1)) return kFALSE; + // store randomized cluster local coordinates and phi + lr->ResetBgClusters(); + double rz,ry; + gRandom->Rannor(rz,ry); + lr->GetMCCluster()->Set(probTr->GetY()+ry*lr->GetPhiRes(),probTr->GetZ()+rz*lr->GetZRes(), + probTr->GetX(), probTr->GetAlpha() ); + // + } + // + return kTRUE; +} + +//________________________________________________________________________________ +Bool_t KMCDetector::SolveSingleTrack(Double_t mass, Double_t pt, Double_t eta, TObjArray* sumArr,int nMC, int offset) +{ + // analityc and fullMC (nMC trials) evaluaion of tracks with given kinematics. + // the results are filled in KMCTrackSummary objects provided via summArr array + // + int progressP = 10;//0; // print progress in percents + // + progressP = int(nMC*0.01*progressP); + + if (!SolveSingleTrackViaKalman(mass,pt,eta)) return kFALSE; + // + // Store non-updated track errors of inward propagated seed >>>>>>>> + int maxLr = fLastActiveITSLayer + offset; + if (maxLr >= fLastActiveLayerTracked-1) maxLr = fLastActiveLayerTracked; + KMCProbe probeTmp = fProbe; // original probe at vertex + KMCLayer* lr = 0; + for (Int_t j=1; j<=maxLr; j++) { + lr = GetLayer(j); + // printf("Here0: %d\n",j); + if (!PropagateToLayer(&probeTmp,lr,1)) return 0; + if (j!=maxLr) if (!probeTmp.CorrectForMeanMaterial(lr, kFALSE)) return 0; + // printf("Prelim. Err at lr:%8s | %7.3f %7.3f\n",lr->GetName(),TMath::Sqrt(probeTmp.GetSigmaY2()),TMath::Sqrt(probeTmp.GetSigmaZ2())); + } + for (Int_t j=maxLr; j>0; j--) { + lr = GetLayer(j); + // printf("Here1: %d\n",j); + if (j!=maxLr) if (!PropagateToLayer(&probeTmp,lr,-1)) return 0; + lr->fSig2EstD = probeTmp.GetSigmaY2(); + lr->fSig2EstZ = probeTmp.GetSigmaZ2(); + // probeTmp.Print("l"); + printf("Natural Err at lr:%8s | %7.3f %7.3f\n",lr->GetName(),TMath::Sqrt(lr->fSig2EstD),TMath::Sqrt(lr->fSig2EstZ)); + if (!probeTmp.CorrectForMeanMaterial(lr, kTRUE)) return 0; + } + // Store non-updated track errors of inward propagated seed <<<<<<<< + // + int nsm = sumArr ? sumArr->GetEntriesFast() : 0; + KMCLayer* vtx = GetLayer(0); + // + for (int i=0;iAt(i); + if (!tsm) continue; + tsm->SetRefProbe( GetProbeTrack() ); // attach reference track (generated) + tsm->SetAnProbe( vtx->GetAnProbe() ); // attach analitycal solution + } + // + TStopwatch sw; + sw.Start(); + for (int it=0;itGetWinnerMCTrack(); + vtx->GetMCTracks()->Print(); + if (progressP==1 || (progressP>0 && (it%progressP)==0)) { + printf("%d%% done |",it*100/nMC); + sw.Stop(); sw.Print(); sw.Start(kFALSE); + } + for (int ism=nsm;ism--;) { // account the track in each of summaries + KMCTrackSummary* tsm = (KMCTrackSummary*)sumArr->At(ism); + if (!tsm) continue; + tsm->AddUpdCalls(GetUpdCalls()); + tsm->AddTrack(trc); + } + } + // + sw.Stop(); + printf("Total time: "); sw.Print(); + return kTRUE; +} + +//________________________________________________________________________________ +Int_t KMCDetector::GetLayerID(int actID) const +{ + // find physical layer id from active id + if (actID<0 || actID>fNActiveLayers) return -1; + int start = actIDGetActiveID()==actID) return i; + } + return -1; +} + +//________________________________________________________________________________ +KMCProbe* KMCDetector::KalmanSmooth(int actLr, int actMin,int actMax) const +{ + // estimate kalman smoothed track params at given active lr + // from fit at layers actMin:actMax (excluding actLr) + // SolveSingleTrackViaKalman must have been called before + // + if (actMin>actMax) swap(actMin,actMax); + if (actMax>=fNActiveLayers) actMax = fNActiveLayers-1; + int nlrfit = actMax-actMin; + if (actLr>=actMin && actLr<=actMax) nlrfit-=1; + if (nlrfit<2) {AliInfo("Need a least 2 active layers in the fit"); return 0;} + static KMCProbe iwd,owd; + // + // find phisical layer id's + int pLr = GetLayerID(actLr); + int pMin = GetLayerID(actMin); + int pMax = GetLayerID(actMax); + // + // printf(">>> %d %d %d\n",pLr, pMin,pMax); + Bool_t useIwd=kFALSE, useOwd=kFALSE; + if (pLrfTrCorr; + iwd.ResetCovMat(); + iwd.GetHitsPatt() = 0; + for (int i=pMax;i>=pLr;i--) { + KMCLayer* lr = GetLayer(i); + // printf("IWD %d\n",i); + if (!lr->IsDead() && i!=pLr && i>=pMin) if (!UpdateTrack(&iwd,lr,&lr->fClCorr)) return 0; + if (i!=pLr) { + if (!iwd.CorrectForMeanMaterial(lr,kTRUE)) return 0; // correct for materials of this layer + if (!PropagateToLayer(&iwd,GetLayer(i-1),-1)) return 0; // propagate to next layer + } + // printf("IWD%d: ",i); iwd.Print("l"); + } + useIwd = kTRUE; + } + if (pLr>pMin) { // need outward piece + owd = GetLayer(pMin)->fTrCorr; + owd.ResetCovMat(); + owd.GetHitsPatt() = 0; + for (int i=pMin;i<=pLr;i++) { + KMCLayer* lr = GetLayer(i); + // printf("OWD %d\n",i); + if (!lr->IsDead() && i!=pLr && i<=pMax) if (!UpdateTrack(&owd,lr,&lr->fClCorr)) return 0; + if (i!=pLr) { + if (!owd.CorrectForMeanMaterial(lr,0)) return 0; // correct for materials of this layer + if (!PropagateToLayer(&owd,GetLayer(i+1), 1)) return 0; // propagate to next layer + } + // printf("OWD%d: ",i); owd.Print("l"); + } + useOwd = kTRUE; + } + // + // was this extrapolation outside the fit range? + if (!useIwd) return (KMCProbe*)&owd; + if (!useOwd) return (KMCProbe*)&iwd; + // + // weight both tracks + if (!iwd.Propagate(owd.GetAlpha(),owd.GetX(),fBFieldG)) return 0; + double meas[2] = {owd.GetY(),owd.GetZ()}; + double measErr2[3] = {owd.GetSigmaY2(), owd.GetSigmaZY(), owd.GetSigmaZ2()}; + // printf("Weighting\n"); + // owd.Print("l"); + // iwd.Print("l"); + if (!iwd.Update(meas,measErr2)) return 0; + iwd.GetHitsPatt() |= owd.GetHitsPatt(); + + // printf("->\n"); + // iwd.Print("l"); + + return (KMCProbe*)&iwd; + // +} + +//________________________________________________________________________________ +KMCProbe* KMCDetector::KalmanSmoothFull(int actLr, int actMin,int actMax) const +{ + // estimate kalman smoothed track params at given active lr + // from fit at layers actMin:actMax (excluding actLr) + // SolveSingleTrackViaKalman must have been called before + // + static TClonesArray prediction("KMCProbe",10); + static TClonesArray update("KMCProbe",10); + static KMCProbe res; + // + if (actMin>actMax) swap(actMin,actMax); + int nlrfit = actMax-actMin; + if (actLr>=actMin && actLr<=actMax) nlrfit-=1; + if (nlrfit<2) {AliInfo("Need a least 2 active layers in the fit"); return 0;} + // + // find phisical layer id's + int pLr = GetLayerID(actLr); + int pMin = GetLayerID(actMin); + int pMax = GetLayerID(actMax); + // + int dir=0,dirInt=0; + if (pLr<=pMin) dir=-1; // inward extrapolation + else if (pLr>=pMax) dir= 1; // outward extrapolation + else if (actMax-actLr >= actLr-actMin) dirInt = -1; // inward interpolation (the test point is closer to inner layer) + else dirInt = 1; // outward interpolation (the test point is closer to outer layer) + // + if (dir!=0) { // no sens to do smoothing: simple Kalman filtering extrapolation + int start = dir<0 ? pMax : pMin; + res = GetLayer(start)->fTrCorr; + res.ResetCovMat(); + KMCLayer* lr = 0; + for (int i=(dir<0?pMax:pMin); i!=pLr; i+=dir) { // track till nearest layer to pLr + lr = GetLayer(i); + if (!lr->IsDead() && !(ipMax)) if (!UpdateTrack(&res,lr,&lr->fClCorr)) return 0; // update only with layers in fit range + if (!res.CorrectForMeanMaterial(lr,dir<0 ? kTRUE:kFALSE)) return 0; // correct for materials of this layer + if (!PropagateToLayer(&res,GetLayer(i+dir),dir)) return 0; // propagate to next layer + } + if (!res.CorrectForMeanMaterial(lr,dir<0 ? kTRUE:kFALSE)) return 0; // correct for materials of this nearest layer + if (!PropagateToLayer(&res,GetLayer(pLr), dir)) return 0; // propagate to test layer + return (KMCProbe*)&res; + } + // + // too bad, need to do real filtering + // + int start = dirInt<0 ? pMax : pMin; + int stop = dirInt<0 ? pMin-1 : pMax+1; + res = GetLayer(start)->fTrCorr; + res.ResetCovMat(); + KMCLayer* lr = 0; + int count = 0; + for (int i=start; i!=stop; i+=dirInt) { // track in full range, storing updates and predictions + new(prediction[count]) KMCProbe(res); + lr = GetLayer(i); + if (!lr->IsDead() && i!=pLr) if (!UpdateTrack(&res,lr,&lr->fClCorr)) return 0; // update only with layers in fit range + new(update[count]) KMCProbe(res); + if (!res.CorrectForMeanMaterial(lr,dir<0 ? kTRUE:kFALSE)) return 0; // correct for materials of this layer + if (!PropagateToLayer(&res,GetLayer(i+dir),dir)) return 0; // propagate to next layer + count++; + } + return (KMCProbe*)&res; + // +} + +//________________________________________________________________________________ +Bool_t KMCDetector::SolveSingleTrackViaKalman(Double_t mass, Double_t pt, Double_t eta) +{ + // analytical estimate of tracking resolutions + // fProbe.SetUseLogTermMS(kTRUE); + // + if (fMinITSHits>fNActiveITSLayers) {fMinITSHits = fNActiveITSLayers; printf("Redefined request of min N ITS hits to %d\n",fMinITSHits);} + if (TMath::Abs(eta)<1e-3) fDensFactorEta = 1.; + else { + fDensFactorEta = TMath::Tan( 2.*TMath::ATan(TMath::Exp(-TMath::Abs(eta))) ); + fDensFactorEta = 1./TMath::Sqrt( 1. + 1./fDensFactorEta/fDensFactorEta); + } + double lambda = TMath::Pi()/2.0 - 2.0*TMath::ATan(TMath::Exp(-eta)); + KMCProbe* probe = PrepareKalmanTrack(pt,lambda,mass,-1); + if (!probe) return kFALSE; + // + KMCLayer *lr = 0; + // + // + // Start the track fitting -------------------------------------------------------- + // + // Back-propagate the covariance matrix along the track. + // Kalman loop over the layers + // + KMCProbe* currTr = 0; + lr = (KMCLayer*)fLayers.At(fLastActiveLayerTracked); + lr->fTrCorr = *probe; + delete probe; // rethink... + // + for (Int_t j=fLastActiveLayerTracked; j--; ) { // Layer loop + // + KMCLayer *lrP = lr; + lr = (KMCLayer*)fLayers.At(j); + // + lr->fTrCorr = lrP->fTrCorr; + currTr = &lr->fTrCorr; + currTr->ResetHit(lrP->GetActiveID()); + // + // if there was a measurement on prev layer, update the track + if (!lrP->IsDead()) { // include measurement + KMCCluster cl(currTr->GetY(),currTr->GetZ(), currTr->GetX(), currTr->GetAlpha()); + if (!UpdateTrack(currTr,lrP,&cl)) return kFALSE; + } + if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) return kFALSE; // correct for materials of this layer + if (!PropagateToLayer(currTr,lr,-1)) return kFALSE; // propagate to current layer + // + } // end loop over layers + // + return kTRUE; +} + +//____________________________________________________________ +Bool_t KMCDetector::SolveSingleTrackViaKalmanMC(int offset) +{ + // MC estimate of tracking resolutions/effiencies. Requires that the SolveSingleTrackViaKalman + // was called before, since it uses data filled by this method + // + // The MC tracking will be done starting from fLastActiveITSLayer + offset (before analytical estimate will be used) + // + // At this point, the fProbe contains the track params generated at vertex. + // Clone it and propagate to target layer to generate hit positions affected by MS + // + fUpdCalls = 0.; + KMCProbe *currTrP=0,*currTr=0; + int maxLr = fLastActiveITSLayer + offset; + if (maxLr >= fLastActiveLayerTracked-1) maxLr = fLastActiveLayerTracked; + ResetMCTracks(maxLr); + KMCLayer* lr = (KMCLayer*)fLayers.At(maxLr); + currTr = lr->AddMCTrack(&fProbe); // start with original track at vertex + // + if (!TransportKalmanTrackWithMS(currTr, maxLr)) return kFALSE; // transport it to outermost layer where full MC is done + // + if (fLastActiveITSLayerGetCovariance(); + const double *covIdeal =lr->fTrCorr.GetCovariance(); + for (int i=15;i--;) covMS[i] = covIdeal[i]; + } + else { // ITS SA: randomize the starting point + // double *pars = (double*)currTr->GetParameter(); + // pars[0] += gRandom->Gaus(0,TMath::Sqrt(currTr->GetSigmaY2())); + // pars[1] += gRandom->Gaus(0,TMath::Sqrt(currTr->GetSigmaZ2())); + // + currTr->ResetCovMat(); + /* + double *trCov = (double*)currTr->GetCovariance(); + double *trPars = (double*)currTr->GetParameter(); + const double kLargeErr2PtI = 0.3*0.3; + trCov[14] = TMath::Max(trCov[14],kLargeErr2PtI*trPars[4]*trPars[4]); + */ + } + // + for (Int_t j=maxLr; j--; ) { // Layer loop + // + KMCLayer *lrP = lr; + lr = (KMCLayer*)fLayers.At(j); + int ntPrev = lrP->GetNMCTracks(); + // + if (lrP->IsDead()) { // for passive layer just propagate the copy of all tracks of prev layer >>> + for (int itrP=ntPrev;itrP--;) { // loop over all tracks from previous layer + currTrP = lrP->GetMCTrack(itrP); if (currTrP->IsKilled()) continue; + currTr = lr->AddMCTrack( currTrP ); + if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) {currTr->Kill(); continue;} // correct for materials of prev. layer + if (!PropagateToLayer(currTr,lr,-1)) {currTr->Kill(); continue;} // propagate to current layer + } + continue; + } // treatment of dead layer <<< + // + if (lrP->IsTPC()) { // we don't consider bg hits in TPC, just update with MC cluster + for (int itrP=ntPrev;itrP--;) { // loop over all tracks from previous layer + currTrP = lrP->GetMCTrack(itrP); if (currTrP->IsKilled()) continue; + currTr = lr->AddMCTrack( currTrP ); + if (!UpdateTrack(currTr, lrP, lrP->GetMCCluster(), kTRUE)) {currTr->Kill(); continue;} // update with correct MC cl. + if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) {currTr->Kill(); continue;} // correct for materials of prev. layer + if (!PropagateToLayer(currTr,lr,-1)) {currTr->Kill(); continue;} // propagate to current layer + } + continue; + } // treatment of ideal (TPC?) layer <<< + // + // active layer under eff. study (ITS?): propagate copy of every track to MC cluster frame (to have them all in the same frame) + // and calculate the limits of bg generation + KMCCluster* clMC = lrP->GetMCCluster(); + if (lrP->GetLayerEff()Rndm()) clMC->Kill(); // simulate inefficiency + ResetSearchLimits(); + int nseeds = 0; + for (int itrP=ntPrev;itrP--;) { // loop over all tracks from previous layer + currTrP = lrP->GetMCTrack(itrP); if (currTrP->IsKilled()) continue; + currTr = lr->AddMCTrack( currTrP ); + if (!currTr->PropagateToCluster(clMC,fBFieldG)) {currTr->Kill(); continue;} // go to MC cluster + if ( !(currTr->GetNITSHits()>0 && currTr->GetNITSHits()==currTr->GetNFakeITSHits()) ) UpdateSearchLimits(currTr, lrP); // RS + nseeds++; + } + // + // printf("%3d seeds\n",nseeds); + if (fUseBackground && lrP->IsITS()) GenBgClusters(lrP); // generate background hits + // + ntPrev = lr->GetNMCTracks(); + for (int itr=ntPrev;itr--;) { // loop over all tracks PROPAGATED from previous layer to clusters frame on previous layer + currTrP = lr->GetMCTrack(itr); // this is a seed from prev layer. The new clusters are attached to its copies, the seed itself + // will be propagated w/o cluster update if it does not violate requested "reconstructed" track settings + if (currTrP->IsKilled()) continue; + //printf("Check %d %p %d\n",itr,currTrP,currTrP->GetUniqueID()); currTrP->Print(); + CheckTrackProlongations(currTrP, lr, lrP); + if (NeedToKill(currTrP)) currTrP->Kill(); // kill track which was not updated at lrP + //currTrP->Kill(); // kill track which was not updated at lrP + } + // + lr->GetMCTracks()->Sort(); + int ntTot = lr->GetNMCTracks(); // propagate max amount of allowed tracks to current layer + if (ntTot>fMaxSeedToPropagate && fMaxSeedToPropagate>0) { + for (int itr=ntTot;itr>=fMaxSeedToPropagate;itr--) lr->GetMCTracks()->RemoveAt(itr); + ntTot = fMaxSeedToPropagate; + } + // + for (int itr=ntTot;itr--;) { + currTr = lr->GetMCTrack(itr); + if (!currTr->CorrectForMeanMaterial(lrP,kTRUE)) {currTr->Kill();continue;} // correct for materials of prev. layer + if (!PropagateToLayer(currTr,lr,-1)) {currTr->Kill();continue;} // propagate to current layer + } + AliDebug(1,Form("Got %d tracks on layer %s",ntTot,lr->GetName())); + // lr->GetMCTracks()->Print(); + // + } // end loop over layers + // + // do we use vertex constraint? + KMCLayer *vtx = GetLayer(0); + if (!vtx->IsDead() && vtx->IsITS()) { + int ntr = vtx->GetNMCTracks(); + for (int itr=0;itrGetMCTrack(itr); + if (currTr->IsKilled()) continue; + KMCCluster* clv = vtx->GetMCCluster(); + double meas[2] = {clv->GetY(),clv->GetZ()}; + double measErr2[3] = {vtx->fPhiRes*vtx->fPhiRes,0,vtx->fZRes*vtx->fZRes}; + double chi2v = currTr->GetPredictedChi2(meas,measErr2); + currTr->AddHit(vtx->GetActiveID(), chi2v, -1); + currTr->SetInnerLrChecked(vtx->GetActiveID()); + if (NeedToKill(currTr)) currTr->Kill(); + // if (vtx->IsITS()) {if (!UpdateTrack(currTr, vtx, vtx->GetMCCluster(), kFALSE)) {currTr->Kill();continue;}} + } + } + EliminateUnrelated(); + + return kTRUE; +} + +//____________________________________________________________________________ +Bool_t KMCDetector::PropagateToLayer(KMCProbe* trc, KMCLayer* lr, int dir) const +{ + // bring the track to layer and rotat to frame normal to its surface + if (!trc->PropagateToR(lr->fR,fBFieldG, dir)) return kFALSE; + // + // rotate to frame with X axis normal to the surface (defined by ideal track) + if (!lr->IsVertex()) { + double pos[3]; + trc->GetXYZ(pos); // lab position + double phi = TMath::ATan2(pos[1],pos[0]); + if ( TMath::Abs(TMath::Abs(phi)-TMath::Pi()/2)<1e-3) phi = 0; + if (!trc->Rotate(phi)) { + AliDebug(2,Form("Failed to rotate to the frame (phi:%+.3f) of layer at %.2f at XYZ: %+.3f %+.3f %+.3f", + phi,lr->fR,pos[0],pos[1],pos[2])); + if (AliLog::GetGlobalDebugLevel()>1) trc->Print("l"); + return kFALSE; + } + } + // + return kTRUE; +} + +//____________________________________________________________________________ +Bool_t KMCDetector::UpdateTrack(KMCProbe* trc, KMCLayer* lr, KMCCluster* cl, Bool_t goToCluster) const +{ + // update track with measured cluster + // propagate to cluster + double meas[2] = {cl->GetY(),cl->GetZ()}; // ideal cluster coordinate + double measErr2[3] = {lr->fPhiRes*lr->fPhiRes,0,lr->fZRes*lr->fZRes}; + // + if (goToCluster) if (!trc->PropagateToCluster(cl,fBFieldG)) return kFALSE; // track was not propagated to cluster frame + // + double chi2 = trc->GetPredictedChi2(meas,measErr2); + // if (chi2>fMaxChi2Cl) return kTRUE; // chi2 is too large + // + if (!trc->Update(meas,measErr2)) { + AliDebug(2,Form("layer %s: Failed to update the track by measurement {%.3f,%3f} err {%.3e %.3e %.3e}", + lr->GetName(),meas[0],meas[1], measErr2[0],measErr2[1],measErr2[2])); + if (AliLog::GetGlobalDebugLevel()>1) trc->Print("l"); + return kFALSE; + } + trc->AddHit(lr->GetActiveID(), chi2); + // + return kTRUE; +} + +//____________________________________________________________________________ +Int_t KMCDetector::GenBgClusters(KMCLayer* lr) +{ + // Generate fake clusters in precalculated RPhi,Z range + if (fNBgLimits<1) return 0; // limits were not set - no track was prolongated + // + // Fix search limits to avoid seeds which will anyway point very far from the vertex + double tolY = TMath::Sqrt(lr->fSig2EstD)*fMaxChi2ClSQ; + double tolZ = TMath::Sqrt(lr->fSig2EstZ)*fMaxChi2ClSQ; + + // printf("Before: Y: %+6.3f : %+6.3f tolY: %6.3f || Z: %+6.3f : %+6.3f tolZ: %6.3f\n",fBgYMin,fBgYMax,tolY, fBgZMin,fBgZMax,tolZ); + if (fBgYMin < lr->fClCorr.fY-tolY) fBgYMin = lr->fClCorr.fY-tolY; + if (fBgYMax > lr->fClCorr.fY+tolY) fBgYMax = lr->fClCorr.fY+tolY; + if (fBgZMin < lr->fClCorr.fZ-tolZ) fBgZMin = lr->fClCorr.fZ-tolZ; + if (fBgZMax > lr->fClCorr.fZ+tolZ) fBgZMax = lr->fClCorr.fZ+tolZ; + //printf("After: Y: %+6.3f : %+6.3f tolY: %6.3f || Z: %+6.3f : %+6.3f tolZ: %6.3f\n",fBgYMin,fBgYMax,tolY, fBgZMin,fBgZMax,tolZ); + // + double dy = fBgYMax - fBgYMin; + double dz = fBgZMax - fBgZMin; + double surf = dy*dz; // surface of generation + if (surf<0) return 0; + double poissProb = surf*HitDensity(lr->fR)*lr->GetLayerEff(); + AliDebug(2,Form("Bg for Lr %s (r=%.2f) : Density %.2f on surface %.2e [%+.4f : %+.4f][%+.4f %+.4f]", + lr->GetName(),lr->fR,HitDensity(lr->fR),surf,fBgYMin,fBgYMax,fBgZMin,fBgZMax)); + int nFakesGen = gRandom->Poisson( poissProb ); // preliminary number of extra clusters to test + KMCCluster *refCl = lr->GetMCCluster(); + double sig2y = lr->GetPhiRes()*lr->GetPhiRes(); + double sig2z = lr->GetZRes()*lr->GetZRes(); + for (int ic=nFakesGen;ic--;) { + double y = fBgYMin+dy*gRandom->Rndm(); + double z = fBgZMin+dz*gRandom->Rndm(); + double dfy = y-refCl->GetY(); + double dfz = z-refCl->GetZ(); + double dist = (dfy*dfy)/sig2y + (dfz*dfz)/sig2z; + if (dist<4) continue; // avoid overlap with MC cluster + lr->AddBgCluster(y, z, refCl->GetX(), refCl->GetPhi()); + } + AliDebug(2,Form("Added %6d noise clusters on lr %s (poisson Prob=%8.2f for surface %.2e) DY:%7.4f DZ: %7.4f", + lr->GetNBgClusters(),lr->GetName(),poissProb,surf,dy,dz)); + return nFakesGen; + // +} + +//____________________________________________________________________________ +void KMCDetector::UpdateSearchLimits(KMCProbe* probe, KMCLayer* lr) +{ + // define the search window for track on layer (where the bg hist will be generated) + static double *currYMin = fBgYMinTr.GetArray(); + static double *currYMax = fBgYMaxTr.GetArray(); + static double *currZMin = fBgZMinTr.GetArray(); + static double *currZMax = fBgZMaxTr.GetArray(); + // + double sizeY = probe->GetSigmaY2(), sizeZ = probe->GetSigmaZ2(); + // /* + if (probe->GetNITSHits()<3) sizeY = 10*lr->fSig2EstD; + if (probe->GetNITSHits()<2) sizeZ = 10*lr->fSig2EstZ; + sizeY = fMaxChi2ClSQ*TMath::Sqrt(sizeY+lr->fPhiRes*lr->fPhiRes); // max deviation in rphi to accept + sizeZ = fMaxChi2ClSQ*TMath::Sqrt(sizeZ+lr->fZRes*lr->fZRes); // max deviation in dz to accept + // */ + // + /* + if (probe->GetNITSHits()<3) sizeY = 1./(1./lr->fSig2EstD + 1./sizeY); + if (probe->GetNITSHits()<2) sizeZ = 1./(1./lr->fSig2EstZ + 1./sizeZ); + sizeY = fMaxChi2ClSQ*TMath::Sqrt(sizeY); // max deviation in rphi to accept + sizeZ = fMaxChi2ClSQ*TMath::Sqrt(sizeZ); // max deviation in dz to accept + */ + // + // if (sizeY>2) sizeY=2; + // if (sizeZ>2) sizeZ=2; + // printf("Sizes at %s: %.5f %.5f\n",lr->GetName(), sizeY,sizeZ); + // + if (fNBgLimits>=fBgYMinTr.GetSize()) { // expand arrays, update pointers + fBgYMinTr.Set(2*(fNBgLimits+1)); + fBgYMaxTr.Set(2*(fNBgLimits+1)); + fBgZMinTr.Set(2*(fNBgLimits+1)); + fBgZMaxTr.Set(2*(fNBgLimits+1)); + currYMin = fBgYMinTr.GetArray(); + currYMax = fBgYMaxTr.GetArray(); + currZMin = fBgZMinTr.GetArray(); + currZMax = fBgZMaxTr.GetArray(); + } + if (fBgYMin > (currYMin[fNBgLimits]=probe->GetY()-sizeY) ) fBgYMin = currYMin[fNBgLimits]; + if (fBgYMax < (currYMax[fNBgLimits]=probe->GetY()+sizeY) ) fBgYMax = currYMax[fNBgLimits]; + if (fBgZMin > (currZMin[fNBgLimits]=probe->GetZ()-sizeZ) ) fBgZMin = currZMin[fNBgLimits]; + if (fBgZMax < (currZMax[fNBgLimits]=probe->GetZ()+sizeZ) ) fBgZMax = currZMax[fNBgLimits]; + if (AliLog::GetGlobalDebugLevel()>=2) { + probe->Print("l"); + AliInfo(Form("Seed%3d Lr %s limits for y:%+8.4f z:%+8.4f [%+.4f : %+.4f][%+.4f %+.4f]",fNBgLimits,lr->GetName(),probe->GetY(),probe->GetZ(),currYMin[fNBgLimits],currYMax[fNBgLimits],currZMin[fNBgLimits],currZMax[fNBgLimits])); + AliInfo(Form("Global Limits Lr %s [%+.4f : %+.4f][%+.4f %+.4f]",lr->GetName(),fBgYMin,fBgYMax,fBgZMin,fBgZMax)); + AliInfo(Form("MC Cluster: %+.4f : %+.4f",lr->fClMC.fY, lr->fClMC.fZ)); + } + probe->SetUniqueID(fNBgLimits++); + // + if (lr->IsITS() && probe->GetNFakeITSHits()==0) { + if (fHMCLrResidRPhi) fHMCLrResidRPhi->Fill(probe->GetY() - lr->GetMCCluster()->GetY(), lr->GetActiveID()); + if (fHMCLrResidZ) fHMCLrResidZ->Fill(probe->GetZ() - lr->GetMCCluster()->GetZ(),lr->GetActiveID()); + } + // +} + +//____________________________________________________________________________ +void KMCDetector::CheckTrackProlongations(KMCProbe *probe, KMCLayer* lr, KMCLayer* lrP) +{ + // explore prolongation of probe from lrP to lr with all possible clusters of lrP + // the probe is already brought to clusters frame + int nCl = lrP->GetNBgClusters(); + double measErr2[3] = {lrP->fPhiRes*lrP->fPhiRes,0,lrP->fZRes*lrP->fZRes}; + double meas[2] = {0,0}; + UInt_t tmpID = probe->GetUniqueID(); + double yMin = fBgYMinTr[tmpID]; + double yMax = fBgYMaxTr[tmpID]; + double zMin = fBgZMinTr[tmpID]; + double zMax = fBgZMaxTr[tmpID]; + // + probe->SetInnerLrChecked(lrP->GetActiveID()); + for (int icl=-1;iclGetMCCluster() : lrP->GetBgCluster(icl); // -1 is for true MC cluster + if (cl->IsKilled()) { + if (AliLog::GetGlobalDebugLevel()>1) {printf("Skip cluster %d ",icl); cl->Print();} + continue; + } + double y = cl->GetY(); + double z = cl->GetZ(); + AliDebug(2,Form("Check seed%d against cl#%d out of %d at layer %s | y:%+8.4f z:%+8.4f [%+.4f:%+.4f] [%+.4f:%+.4f]",tmpID,icl,nCl,lrP->GetName(),y,z,yMin,yMax,zMin,zMax)); + if (AliLog::GetGlobalDebugLevel()>0) { + if (icl==-1 && probe->GetNFakeITSHits()==0) { + meas[0] = y; meas[1] = z; + double chi2a = probe->GetPredictedChi2(meas,measErr2); + if (chi2a>fMaxChi2Cl || (yyMax) || (zzMax)) { + probe->Print(); + printf("Loosing good point (y:%+8.4f z:%+8.4f) on lr %s: chi2: %.2f | dy:%+8.4f dz:%+8.4f [%+.4f:%+.4f] [%+.4f:%+.4f] |x: %.2f %.2f | phi: %.2f %.2f\n", + y,z,lrP->GetName(),chi2a,y-probe->GetY(),z-probe->GetZ(),yMin,yMax,zMin,zMax, probe->GetX(), cl->GetX(), probe->GetAlpha(), cl->GetPhi()); + } + } + } + if (yyMax) continue; // preliminary check on Y + if (zzMax) continue; // preliminary check on Z + meas[0] = y; meas[1] = z; + double chi2 = probe->GetPredictedChi2(meas,measErr2); + if (fHMCLrChi2 && probe->GetNFakeITSHits()==0 && icl==-1) fHMCLrChi2->Fill(chi2,lrP->GetActiveID()); + AliDebug(2,Form("Seed-to-cluster chi2 = Chi2=%.2f",chi2)); + if (chi2>fMaxChi2Cl) continue; + // + // update track copy + KMCProbe* newTr = lr->AddMCTrack( probe ); + fUpdCalls++; + if (!newTr->Update(meas,measErr2)) { + AliDebug(2,Form("Layer %s: Failed to update the track by measurement {%.3f,%3f} err {%.3e %.3e %.3e}", + lrP->GetName(),meas[0],meas[1], measErr2[0],measErr2[1],measErr2[2])); + if (AliLog::GetGlobalDebugLevel()>1) newTr->Print("l"); + newTr->Kill(); + continue; + } + newTr->AddHit(lrP->GetActiveID(), chi2, icl); + if (AliLog::GetGlobalDebugLevel()>1) { + AliInfo("Cloned updated track is:"); + newTr->Print(); + } + if (NeedToKill(newTr)) newTr->Kill(); + } + // +} + +//____________________________________________________________________________ +void KMCDetector::ResetMCTracks(Int_t maxLr) +{ + int nl = GetNLayers(); + if (maxLr<0 || maxLr>=nl) maxLr = nl-1; + for (int i=maxLr+1;i--;) GetLayer(i)->ResetMCTracks(); +} + +//____________________________________________________________________________ +Bool_t KMCDetector::NeedToKill(KMCProbe* probe) const +{ + // check if the seed at given layer (last one where update was tried) + // still has chances to be reconstructed + const Bool_t kModeKillMiss = kFALSE; + // + Bool_t kill = kFALSE; + while (1) { + int il = probe->GetInnerLayerChecked(); + int nITS = probe->GetNITSHits(); + int nITSMax = nITS + il; // maximum it can have + if (nITSMax0) { // check pattern + UInt_t patt = probe->GetHitsPatt(); + // complete the layers not checked yet + for (int i=il;i--;) patt |= (0x1<2) { // check if smallest possible norm chi2/ndf is acceptable + double chi2min = probe->GetChi2(); + if (kModeKillMiss) { + int nMiss = fNActiveITSLayers - probe->GetInnerLayerChecked() - nITS; // layers already missed + chi2min = nMiss*probe->GetMissingHitPenalty(); + } + chi2min /= ((nITSMax<<1)-KMCProbe::kNDOF); + if (chi2min>fMaxNormChi2NDF) { + kill = kTRUE; + break; + } + } + // + // loose vertex constraint + double dst; + if (nITS>=2) { + probe->GetZAt(0,fBFieldG,dst); + //printf("Zd (F%d): %f\n",probe->GetNFakeITSHits(),dst); + if (TMath::Abs(dst)>10.) { + kill = kTRUE; + break; + } + } + if (nITS>=3) { + probe->GetYAt(0,fBFieldG,dst); + //printf("Dd (F%d): %f\n",probe->GetNFakeITSHits(),dst); + if (TMath::Abs(dst)>10.) { + kill = kTRUE; + break; + } + } + // + break; + } + if (kill && AliLog::GetGlobalDebugLevel()>1 && probe->GetNFakeITSHits()==0) { + printf("Killing good seed, last upd layer was %d\n",probe->GetInnerLayerChecked()); + probe->Print("l"); + } + return kill; +} + +//_____________________________________________________________________ +void KMCDetector::EliminateUnrelated() +{ + // kill useless tracks + KMCLayer* lr = GetLayer(0); + int ntr = lr->GetNMCTracks(); + int nval = 0; + for (int itr=0;itrGetMCTrack(itr); + if (probe->IsKilled()) continue; + if (probe->GetNITSHits()-probe->GetNFakeITSHits()<1) {probe->Kill(); continue;} + nval++; + } + lr->GetMCTracks()->Sort(); + const int kDump = 0; + if (kDump>0) { + printf("Valid %d out of %d\n",nval, ntr); + ntr = ntr>kDump ? kDump:0; + for (int itr=0;itrGetMCTrack(itr)->Print(); + } + } +} + +//_____________________________________________________________________ +void KMCDetector::RequirePattern(UInt_t *patt, int groups) +{ + if (groups<1) {fPattITS.Set(0); return;} + fPattITS.Set(groups); + for (int i=0;iGetRadius(); + for (int il1=0;il1GetRadius() - lr1->GetRadius()); + if (ztol>zlims[il1]) zlims[il1] = ztol; + } + } + // + for (int il=0;ilGetActiveID(); + if (aID>-1 && (icl=bwd.fClID[aID])>=-1) { + KMCCluster* clMC = icl<0 ? lr->GetMCCluster() : lr->GetBgCluster(icl); + if (!bwd.PropagateToCluster(clMC,fBFieldG)) return -1; + meas[0] = clMC->GetY(); meas[1] = clMC->GetZ(); + measErr2[0] = lr->fPhiRes*lr->fPhiRes; + measErr2[2] = lr->fZRes*lr->fZRes; + double chi2a = bwd.GetPredictedChi2(meas,measErr2); + chi2Tot += chi2a; + printf("Chis %d (cl%+3d): t2c: %6.3f tot: %6.3f\n",aID,icl,chi2a, chi2Tot); + bwd.Update(meas,measErr2); + bwd.AddHit(aID, chi2a, icl); + } + if (!bwd.CorrectForMeanMaterial(lr,kFALSE)) return -1; + } + return chi2Tot; +} + + +////////////////////////////////////////////////////////////////////////////////////////////// +//-------------------------------------------------------------------------------------------- +ClassImp(KMCTrackSummary) + +Int_t KMCTrackSummary::fgSumCounter = 0; + +//____________________________________________________________________________ +KMCTrackSummary::KMCTrackSummary(const char* name,const char* title, int nlr) : + TNamed(name,name), fNITSLayers(nlr), + fPattITS(0),fPattITSFakeExcl(0),fPattITSCorr(0), + fHMCChi2(0),fHMCSigDCARPhi(0),fHMCSigDCAZ(0),fHMCSigPt(0),fHMCNCl(0),fHMCFakePatt(0), + fCountAcc(0),fCountTot(0),fUpdCalls(0), + fRefProbe(),fAnProbe() +{ + // create summary structure for specific track conditions + // + SetMinMaxClITS(); + SetMinMaxClITSFake(); + SetMinMaxClITSCorr(); + // + if (name==0 && title==0 && nlr==0) return; // default dummy contructor + // + enum {kNBinRes=1000}; + const double kMaxChi2(10),kMaxResRPhi=0.1, kMaxResZ=0.1,kMaxResPt=0.3; + // + TString strN = name, strT = title; + if (strN.IsNull()) strN = Form("TrSum%d",fgSumCounter); + if (strT.IsNull()) strT = strN; + fgSumCounter++; + // + if (fNITSLayers<1) { + fNITSLayers=KMCProbe::GetNITSLayers(); + if (fNITSLayers<1) {AliError("N ITS layer is not provided and not available from KMCProbe::GetNITSLayers()"); exit(1);} + AliInfo(Form("%s No N Layers provided, set %d",strN.Data(),fNITSLayers)); + } + nlr = fNITSLayers; + // + TString nam,tit; + // + nam = Form("%s_mc_chi2",strN.Data()); + tit = Form("%s MC #chi^{2}",strT.Data()); + fHMCChi2 = new TH1F(nam.Data(),tit.Data(),kNBinRes,0,kMaxChi2); + fHMCChi2->GetXaxis()->SetTitle("#chi^{2}"); + fHMCChi2->Sumw2(); + // + nam = Form("%s_mc_DCArphi",strN.Data()); + tit = Form("%s MC #DeltaDCA r#phi",strT.Data()); + fHMCSigDCARPhi = new TH1F(nam.Data(),tit.Data(),kNBinRes,-kMaxResRPhi,kMaxResRPhi); + fHMCSigDCARPhi->GetXaxis()->SetTitle("#Delta r#phi"); + fHMCSigDCARPhi->Sumw2(); + // + nam = Form("%s_mc_DCAz",strN.Data()); + tit = Form("%s MC #DeltaDCA Z",strT.Data()); + fHMCSigDCAZ = new TH1F(nam.Data(),tit.Data(),kNBinRes,-kMaxResZ,kMaxResZ); + fHMCSigDCAZ->GetXaxis()->SetTitle("#Delta Z"); + fHMCSigDCAZ->Sumw2(); + // + nam = Form("%s_mc_pt",strN.Data()); + tit = Form("%s MC $Deltap_{T}/p_{T}",strT.Data()); + fHMCSigPt = new TH1F(nam.Data(),tit.Data(),2*kNBinRes,-kMaxResPt,kMaxResPt); + fHMCSigPt->GetXaxis()->SetTitle("#Deltap_{T}/p_{T}"); + fHMCSigPt->Sumw2(); + // + nam = Form("%s_n_cl",strN.Data()); + tit = Form("%s N Clusters",strT.Data()); + fHMCNCl = new TH2F(nam.Data(),tit.Data(),nlr,1,nlr+1,nlr,1,nlr+1); + fHMCNCl->GetXaxis()->SetTitle("N Clusters Tot"); + fHMCNCl->GetYaxis()->SetTitle("N Clusters Fake"); + fHMCNCl->Sumw2(); + // + nam = Form("%s_fake_cl",strN.Data()); + tit = Form("%s Fake Clusters",strT.Data()); + fHMCFakePatt = new TH1F(nam.Data(),tit.Data(),nlr,-0.5,nlr-0.5); + fHMCFakePatt->GetXaxis()->SetTitle("Fake clusters pattern"); + fHMCFakePatt->Sumw2(); + // +} + +//____________________________________________________________________________ +KMCTrackSummary::~KMCTrackSummary() +{ + if (fHMCChi2) delete fHMCChi2; + if (fHMCSigDCARPhi) delete fHMCSigDCARPhi; + if (fHMCSigDCAZ) delete fHMCSigDCAZ; + if (fHMCSigPt) delete fHMCSigPt; + if (fHMCNCl) delete fHMCNCl; + if (fHMCFakePatt) delete fHMCFakePatt; +} + + +//____________________________________________________________________________ +void KMCTrackSummary::Add(const KMCTrackSummary* src, double scl) +{ + if (fHMCChi2) fHMCChi2->Add(src->fHMCChi2,scl); + if (fHMCSigDCARPhi) fHMCSigDCARPhi->Add(src->fHMCSigDCARPhi,scl); + if (fHMCSigDCAZ) fHMCSigDCAZ->Add(src->fHMCSigDCAZ,scl); + if (fHMCSigPt) fHMCSigPt->Add(src->fHMCSigPt,scl); + if (fHMCNCl) fHMCNCl->Add(src->fHMCNCl,scl); + if (fHMCFakePatt) fHMCFakePatt->Add(src->fHMCFakePatt,scl); + fCountAcc += src->fCountAcc; + fUpdCalls += src->fUpdCalls; +} + +//____________________________________________________________________________ +void KMCTrackSummary::PrependTNamed(TNamed* obj, const char* nm, const char* tit) +{ + // prepend name, title by this prefix + TString name = obj->GetName(),title = obj->GetTitle(); + name.Prepend(nm); title.Prepend(tit); + obj->SetNameTitle(name.Data(),title.Data()); + // +} + +//____________________________________________________________________________ +void KMCTrackSummary::SetNamePrefix(const char* pref) +{ + // prepend all names by this prefix + TString nmT,nmP = pref; + if (nmP.IsNull()) return; + nmP = Form("%s_",pref); + nmT = Form("%s ",pref); + PrependTNamed(this, nmP.Data(), nmT.Data()); + PrependTNamed(fHMCChi2, nmP.Data(), nmT.Data()); + PrependTNamed(fHMCSigDCARPhi, nmP.Data(), nmT.Data()); + PrependTNamed(fHMCSigDCAZ, nmP.Data(), nmT.Data()); + PrependTNamed(fHMCSigPt, nmP.Data(), nmT.Data()); + PrependTNamed(fHMCNCl, nmP.Data(), nmT.Data()); + PrependTNamed(fHMCFakePatt, nmP.Data(), nmT.Data()); + // +} + +//____________________________________________________________________________ +Bool_t KMCTrackSummary::CheckTrack(KMCProbe* trc) +{ + // check if the track satisfies to selection conditions + fCountTot++; + if (!trc) return kFALSE; + if (OutOfRange(trc->GetNITSHits(), fMinMaxClITS)) return kFALSE; + if (OutOfRange(trc->GetNFakeITSHits(), fMinMaxClITSFake)) return kFALSE; + if (OutOfRange(trc->GetNITSHits()-trc->GetNFakeITSHits(), fMinMaxClITSCorr)) return kFALSE; + // + // check layer patterns if requested + UInt_t patt = trc->GetHitsPatt(); + UInt_t pattF = trc->GetFakesPatt(); + UInt_t pattC = patt&(~pattF); // correct hits + // is there at least one hit in each of requested layer groups? + for (int ip=fPattITS.GetSize();ip--;) if (!CheckPattern(patt,fPattITS[ip])) return kFALSE; + // is there at least one fake in any of requested layer groups? + for (int ip=fPattITSFakeExcl.GetSize();ip--;) if (CheckPattern(pattF,fPattITSFakeExcl[ip])) return kFALSE; + // is there at least one correct hit in each of requested layer groups? + for (int ip=fPattITSCorr.GetSize();ip--;) if (!CheckPattern(pattC,fPattITSCorr[ip])) return kFALSE; + // + fCountAcc++; + return kTRUE; +} + +//____________________________________________________________________________ +void KMCTrackSummary::AddTrack(KMCProbe* trc) +{ + // fill track info + if (!CheckTrack(trc)) return; + // + fHMCChi2->Fill(trc->GetNormChi2(kFALSE)); + fHMCSigDCARPhi->Fill(trc->GetY()); + fHMCSigDCAZ->Fill(trc->GetZ()); + if (fRefProbe.Pt()>0) fHMCSigPt->Fill( trc->Pt()/fRefProbe.Pt()-1.); + // printf("Pts: %.3f %.3f -> %.3f\n",trc->Pt(),fRefProbe.Pt(),trc->Pt()/fRefProbe.Pt()-1.); + // trc->Print("l"); + // fRefProbe.Print("l"); + fHMCNCl->Fill(trc->GetNITSHits(),trc->GetNFakeITSHits()); + for (int i=trc->GetNITSLayers();i--;) if (trc->IsHitFake(i)) fHMCFakePatt->Fill(i); + // +} + +//____________________________________________________________________________ +UInt_t KMCTrackSummary::Bits(Bool_t l0, Bool_t l1, Bool_t l2, Bool_t l3, Bool_t l4, Bool_t l5, Bool_t l6, Bool_t l7,Bool_t l8, Bool_t l9, + Bool_t l10,Bool_t l11,Bool_t l12,Bool_t l13,Bool_t l14,Bool_t l15,Bool_t l16,Bool_t l17,Bool_t l18,Bool_t l19, + Bool_t l20,Bool_t l21,Bool_t l22,Bool_t l23,Bool_t l24,Bool_t l25,Bool_t l26,Bool_t l27,Bool_t l28,Bool_t l29, + Bool_t l30,Bool_t l31) +{ + // create corresponding bit pattern + UInt_t patt = 0; + if (l0 ) patt |= (0x1<<0); if (l1 ) patt |= (0x1<<1); if (l2 ) patt |= (0x1<<2); + if (l3 ) patt |= (0x1<<3); if (l4 ) patt |= (0x1<<4); if (l5 ) patt |= (0x1<<5); + if (l6 ) patt |= (0x1<<6); if (l7 ) patt |= (0x1<<7); if (l8 ) patt |= (0x1<<8); + if (l9 ) patt |= (0x1<<9); if (l10) patt |= (0x1<<10); if (l11) patt |= (0x1<<11); + if (l12) patt |= (0x1<<12); if (l13) patt |= (0x1<<13); if (l14) patt |= (0x1<<14); + if (l15) patt |= (0x1<<15); if (l16) patt |= (0x1<<16); if (l17) patt |= (0x1<<17); + if (l18) patt |= (0x1<<18); if (l19) patt |= (0x1<<19); if (l20) patt |= (0x1<<20); + if (l21) patt |= (0x1<<21); if (l22) patt |= (0x1<<22); if (l23) patt |= (0x1<<23); + if (l24) patt |= (0x1<<24); if (l25) patt |= (0x1<<25); if (l26) patt |= (0x1<<26); + if (l27) patt |= (0x1<<27); if (l28) patt |= (0x1<<28); if (l29) patt |= (0x1<<29); + if (l30) patt |= (0x1<<30); if (l31) patt |= (0x1<<31); + return patt; +} + +//__________________________________________________________________________ +void KMCTrackSummary::Print(Option_t* ) const +{ + printf("%s: summary for track M=%5.3f pT: %6.3f eta: %.2f\n", GetName(), + fRefProbe.GetMass(),fRefProbe.Pt(), fRefProbe.Eta()); + printf("Cuts on NCl ITS: Tot: %2d - %2d Fake: %2d - %2d Corr: %2d - %2d\n", + fMinMaxClITS[0],fMinMaxClITS[1], + fMinMaxClITSFake[0],fMinMaxClITSFake[1], + fMinMaxClITSCorr[0],fMinMaxClITSCorr[1]); + // + int nlr = fNITSLayers; + if (fPattITS.GetSize()) { + printf("Require at least 1 hit in groups: "); + printf("Hits obligatory in groups: "); + for (int i=fPattITS.GetSize();i--;) { + UInt_t pat = (UInt_t)fPattITS[i]; + printf("["); + for (int j=0;j Eff: %.4f+-%.4f %.2e KMC updates\n",fCountTot,fCountAcc,GetEff(),GetEffErr(),GetUpdCalls()); +} + diff --git a/ITS/UPGRADE/KMCDetector.h b/ITS/UPGRADE/KMCDetector.h index 16e0a24b3f1..2efb1392a0d 100755 --- a/ITS/UPGRADE/KMCDetector.h +++ b/ITS/UPGRADE/KMCDetector.h @@ -1,550 +1,550 @@ -#ifndef DETECTORK_H -#define DETECTORK_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "AliExternalTrackParam.h" -#include "AliLog.h" - -//------------------------------------------------------------------------- -// Current support and development: Ruben Shahoyan (Ruben.Shahoyan@cern.ch) -//------------------------------------------------------------------------- - - -class KMCLayer; -class KMCCluster; - -////////////////////////////////////////////////////////////////////////////////////////////// -//-------------------------------------------------------------------------------------------- -class KMCProbe : public AliExternalTrackParam { - public: - enum {kBitKilled=BIT(14)}; - enum {kNDOF=5}; - enum {kY2=0,kZ2=2,kSnp2=5,kTgl2=9,kPtI2=14}; - enum {kY,kZ,kSnp,kTgl,kPtI}; - // - KMCProbe() : fMass(0.14),fChi2(0),fHits(0),fFakes(0),fNHits(0),fNHitsITS(0),fNHitsITSFake(0),fInnLrCheck(fgNITSLayers) {for (int i=kMaxITSLr;i--;) fClID[i] =-2; -} - KMCProbe(KMCProbe& src); - KMCProbe& operator=(const KMCProbe& src); - virtual ~KMCProbe() {} - virtual void Print(Option_t* option = "") const; - virtual void Reset() {fMass=0.14; fChi2=0; fHits=fFakes=0; for (int i=kMaxITSLr;i--;) fClID[i]=-2; AliExternalTrackParam::Reset();} - virtual Bool_t IsSortable() const {return kTRUE;} - virtual Int_t Compare(const TObject* obj) const; - void ResetCovMat(); - // - void Kill(Bool_t v=kTRUE) {SetBit(kBitKilled,v);} - Bool_t IsKilled() const {return TestBit(kBitKilled);} - // - Bool_t CorrectForMeanMaterial(const KMCLayer* lr, Bool_t inward=kTRUE); - Bool_t GetXatLabR(Double_t r,Double_t &x, Double_t bz, Int_t dir=0) const; - Bool_t PropagateToR(double r, double b, int dir=0); - - // - void SetMass(double m=0.14) {fMass = m;} - Double_t GetMass() const {return fMass;} - Double_t GetChi2() const {return fChi2;} - void SetChi2(double chi2) {fChi2 = chi2;} - void AddChi2(double chi2) {fChi2 += chi2;} - void SetInnerLrChecked(Int_t n) {if (n-1) { - SetWBit(fFakes,lr); - fNHitsITSFake++; - } - fClID[lr] = clID; - //else ResetWBit(fFakes,lr); - } -} - -//_______________________________________ -inline void KMCProbe::ResetHit(Int_t lr) { - // note: lr is active layer ID - if (lr>=fgNITSLayers) return; - if (IsWBit(fHits,lr)) {fNHitsITS--; ResetWBit(fHits,lr);} - if (IsWBit(fFakes,lr)) {fNHitsITSFake--; ResetWBit(fFakes,lr);} -} - -////////////////////////////////////////////////////////////////////////////////////////////// -//-------------------------------------------------------------------------------------------- -class KMCCluster : public TObject { - public: - // - enum {kBitKilled=BIT(14)}; - KMCCluster(Float_t y=0, Float_t z=0, Float_t x=0, Float_t phi=0) : fY(y),fZ(z),fX(x),fPhi(phi) {} - KMCCluster(KMCCluster &src); - KMCCluster& operator=(const KMCCluster& src); - virtual ~KMCCluster() {} - void Reset() {Clear();} - // - Double_t GetY() const {return fY;} - Double_t GetX() const {return fX;} - Double_t GetZ() const {return fZ;} - Double_t GetPhi() const {return fPhi;} - // - void Kill(Bool_t v=kTRUE) {SetBit(kBitKilled,v);} - Bool_t IsKilled() const {return TestBit(kBitKilled);} - Float_t fY; - Float_t fZ; - Float_t fX; - Float_t fPhi; - void Set(Float_t y, Float_t z, Float_t x, Float_t phi) {fY=y; fZ=z; fX=x; fPhi=phi; ResetBit(kBitKilled);} - virtual void Print(Option_t * = 0) const; - ClassDef(KMCCluster,1); -}; - -////////////////////////////////////////////////////////////////////////////////////////////// -//-------------------------------------------------------------------------------------------- -class KMCLayer : public TNamed { -public: - enum {kTypeNA=-1,kITS,kTPC,kBitVertex=BIT(15)}; - KMCLayer(char *name); - Float_t GetRadius() const {return fR;} - Float_t GetRadL() const {return fx2X0;} - Float_t GetXTimesRho() const {return fXRho;} - Float_t GetPhiRes() const {return fPhiRes;} - Float_t GetZRes() const {return fZRes;} - Float_t GetLayerEff() const {return fEff;} - Int_t GetActiveID() const {return fActiveID;} - virtual void Print(Option_t* option = "") const; - // - Bool_t IsDead() const {return fIsDead;} - Bool_t IsITS() const {return fType==kITS;} - Bool_t IsTPC() const {return fType==kTPC;} - Bool_t IsVertex() const {return TestBit(kBitVertex);} - // - Int_t AddBgCluster(double y,double z,double x,double phi) {int n=GetNBgClusters(); new (fClBg[n]) KMCCluster(y,z,x,phi); return ++n;} - KMCCluster* GetBgCluster(Int_t i) {return (KMCCluster*)fClBg[i];} - KMCCluster* GetMCCluster() {return (KMCCluster*)&fClMC;} - // - KMCProbe* GetAnProbe() const {return (KMCProbe*)&fTrCorr;} - Int_t GetNMCTracks() const {return fTrMC.GetEntries();} - KMCProbe* AddMCTrack(KMCProbe* src=0); - KMCProbe* GetMCTrack(Int_t it) const {return (KMCProbe*)fTrMC[it];} - KMCProbe* GetWinnerMCTrack() {if (!fTrMC.IsSorted()) fTrMC.Sort(); return fTrMC.GetEntries() ? (KMCProbe*)fTrMC[0]:0;} - TClonesArray* GetMCTracks() const {return (TClonesArray*)&fTrMC;} - void Reset(); - void ResetMC() { fClBg.Clear(); fTrMC.Clear();} - void ResetBgClusters() { fClBg.Clear(); } - void ResetMCTracks() { fTrMC.Clear(); } - Int_t GetNBgClusters() const { return fClBg.GetEntries();} - static Double_t GetDefEff() {return fgDefEff;} - static void SetDefEff(double eff=1) {fgDefEff = eff>1. ? 1.: (eff<0? 0:eff);} - // - // - Float_t fR; - Float_t fx2X0; - Float_t fXRho; // x*density - Float_t fPhiRes; - Float_t fZRes; - Float_t fEff; - Bool_t fIsDead; - Int_t fType; // its, tpc etc - Int_t fActiveID; // active layer id - Float_t fSig2EstD; - Float_t fSig2EstZ; - // - KMCCluster fClCorr; // ideal cluster - KMCCluster fClMC; // MC cluster (from MS scattered track) - TClonesArray fClBg; // bg clusters for MC - // - KMCProbe fTrCorr; // ideal track - TClonesArray fTrMC; // MC tracks - // - static Double_t fgDefEff; - ClassDef(KMCLayer,1); -}; - -////////////////////////////////////////////////////////////////////////////////////////////// -//-------------------------------------------------------------------------------------------- -class KMCDetector : public TNamed { - public: - enum {kUtilHisto=BIT(14)}; - KMCDetector(); - KMCDetector(char *name,char *title); - virtual ~KMCDetector(); - - void AddLayer(char *name, Float_t radius, Float_t radL, Float_t xrho=0, Float_t phiRes=999999, Float_t zRes=999999, Float_t eff=-1); - Int_t GetLayerID(Int_t actID) const; - void KillLayer(char *name); - void SetRadius(char *name, Float_t radius); - void SetRadiationLength(char *name, Float_t radL); - void SetResolution(char *name, Float_t phiRes=999999, Float_t zRes=999999); - void SetLayerEfficiency(char *name, Float_t eff=1.0); - void RemoveLayer(char *name); - - Float_t GetRadius(char *name); - Float_t GetRadiationLength(char *name); - Float_t GetResolution(char *name, Int_t axis=0); - Float_t GetLayerEfficiency(char *name); - - void PrintLayout(); - void PlotLayout(Int_t plotDead = kTRUE); - - void MakeAliceAllNew(Bool_t flagTPC =0, Bool_t flagMon=1,int setVer=0); - void MakeAliceCurrent(Bool_t flagTPC =0, Int_t AlignResiduals = 0); - void AddTPC(Float_t phiResMean, Float_t zResMean, Int_t skip=1); - void RemoveTPC(); - - void SetBField(Float_t bfield) {fBFieldG = bfield*10; } - Float_t GetBField() const {return fBFieldG/10; } - void SetLhcUPCscale(Float_t lhcUPCscale) {fLhcUPCscale = lhcUPCscale; } - Float_t GetLhcUPCscale() const { return fLhcUPCscale; } - void SetParticleMass(Float_t particleMass) {fParticleMass = particleMass; } - Float_t GetParticleMass() const { return fParticleMass; } - void SetIntegrationTime(Float_t integrationTime) {fIntegrationTime = integrationTime; } - Float_t GetIntegrationTime() const { return fIntegrationTime; } - void SetMaxRadiusOfSlowDetectors(Float_t maxRadiusSlowDet) {fMaxRadiusSlowDet = maxRadiusSlowDet; } - Float_t GetMaxRadiusOfSlowDetectors() const { return fMaxRadiusSlowDet; } - void SetAvgRapidity(Float_t avgRapidity) {fAvgRapidity = avgRapidity; } - Float_t GetAvgRapidity() const { return fAvgRapidity; } - void SetConfidenceLevel(Float_t confLevel) {fConfLevel = confLevel; } - Float_t GetConfidenceLevel() const { return fConfLevel; } - void SetAtLeastCorr(Int_t atLeastCorr ) {fAtLeastCorr = atLeastCorr; } - Float_t GetAtLeastCorr() const { return fAtLeastCorr; } - void SetAtLeastFake(Int_t atLeastFake ) {fAtLeastFake = atLeastFake; } - Float_t GetAtLeastFake() const { return fAtLeastFake; } - - void SetdNdEtaCent(Int_t dNdEtaCent ) {fdNdEtaCent = dNdEtaCent; } - Float_t GetdNdEtaCent() const { return fdNdEtaCent; } - - Int_t GetNLayers() const {return fLayers.GetEntries(); } - Int_t GetNActiveLayers() const {return fNActiveLayers; } - Int_t GetNActiveITSLayers() const {return fNActiveITSLayers; } - - Bool_t SolveSingleTrackViaKalman(Double_t mass, Double_t pt, Double_t eta); - Bool_t SolveSingleTrackViaKalmanMC(int offset=6); - Bool_t SolveSingleTrack(Double_t mass, Double_t pt, Double_t eta, TObjArray* sumArr=0, int nMC=10000,int offset=6); - KMCProbe* KalmanSmooth(int actLr, int actMin,int actMax) const; - KMCProbe* KalmanSmoothFull(int actLr, int actMin,int actMax) const; //TBD - void EliminateUnrelated(); - // - KMCProbe* PrepareKalmanTrack(double pt, double lambda, double mass, int charge, double phi=0,double x=0,double y=0,double z=0); - Bool_t TransportKalmanTrackWithMS(KMCProbe *probTr, int maxLr) const; - void ApplyMS(KMCProbe* trc, double x2x0) const; - Bool_t PropagateToLayer(KMCProbe* trc, KMCLayer* lr, int dir) const; - Bool_t UpdateTrack(KMCProbe* trc, KMCLayer* lr, KMCCluster* cl, Bool_t goToCluster=kTRUE) const; - - // Helper functions - Double_t ThetaMCS ( Double_t mass, Double_t RadLength, Double_t momentum ) const; - Double_t ProbGoodHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; - Double_t ProbGoodChiSqHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; - Double_t ProbGoodChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; - Double_t ProbNullChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; - - // Howard W. hit distribution and convolution integral - Double_t Dist ( Double_t Z, Double_t radius ) ; - Double_t HitDensity ( Double_t radius ) ; - Double_t UpcHitDensity ( Double_t radius ) ; - Double_t IntegratedHitDensity ( Double_t multiplicity, Double_t radius ) ; - Double_t OneEventHitDensity ( Double_t multiplicity, Double_t radius ) const ; - Double_t D0IntegratedEfficiency( Double_t pt, Double_t corrEfficiency[][20] ) const ; - - TGraph* GetGraphMomentumResolution(Int_t color, Int_t linewidth=1); - TGraph* GetGraphPointingResolution(Int_t axis,Int_t color, Int_t linewidth=1); - TGraph* GetGraphPointingResolutionTeleEqu(Int_t axis,Int_t color, Int_t linewidth=1); - - TGraph* GetGraphImpactParam(Int_t mode, Int_t axis, Int_t color, Int_t linewidth=1); - - TGraph* GetGraphRecoEfficiency(Int_t particle, Int_t color, Int_t linewidth=1); - TGraph* GetGraphRecoFakes(Int_t particle,Int_t color, Int_t linewidth); - - TGraph* GetGraph(Int_t number, Int_t color, Int_t linewidth=1); - - void MakeStandardPlots(Bool_t add =0, Int_t color=1, Int_t linewidth=1,Bool_t onlyPionEff=0); - - // method to extend AliExternalTrackParam functionality - Bool_t IsZero(double val, double tol=1e-9) const {return TMath::Abs(val)0 ? cut:9; fMaxChi2ClSQ = TMath::Sqrt(fMaxChi2Cl);} - void RequireMinITSHits(Int_t n=4) {fMinITSHits = n;} - void RequireMaxNormChi2NDF(double cut=5.) {fMaxNormChi2NDF = cut>0 ? cut:9;} - void RequirePattern(UInt_t *patt, int groups); - // - Double_t GetMaxChi2Cl() const {return fMaxChi2Cl;} - Double_t GetMaxNormChi2NDFusterKMC() const {return fMaxNormChi2NDF;} - Int_t GetMinITSHits() const {return fMinITSHits;} - // - Double_t GetUpdCalls() const {return fUpdCalls;} - void InitMCWatchHistos(); - TH2F* GetHMCLrResidRPhi() const {return fHMCLrResidRPhi;} - TH2F* GetHMCLrResidZ() const {return fHMCLrResidZ;} - TH2F* GetHMCLrChi2() const {return fHMCLrChi2;} - // - void PrintITS(Option_t* opt="") const {for (int i=0;i<=fLastActiveITSLayer;i++) if (!GetLayer(i)->IsDead()) GetLayer(i)->Print(opt);} - static void SetVtxConstraint(double d=-1, double z=-1) {fgVtxConstraint[0]=d; fgVtxConstraint[1]=z;} - // - void CalcHardSearchLimits(double dzv); - void SetMaxSeedToPropagate(Int_t n=300) {fMaxSeedToPropagate = n;} - - protected: - - Int_t fNLayers; // total number of layers in the model - Int_t fNActiveLayers; // number of active layers in the model - Int_t fNActiveITSLayers; // number of active ITS layers in the model - Int_t fLastActiveLayer; // id of last active layer - Int_t fLastActiveITSLayer; // id of last active ITS layer - Int_t fLastActiveLayerTracked; // id of last active layer really used for tracking of given pt - TList fLayers; // List of layer pointers - Float_t fBFieldG; // Magnetic Field in Gauss (set in Tesla) - Float_t fLhcUPCscale; // UltraPeripheralElectrons: scale from RHIC to LHC - Float_t fIntegrationTime; // electronics integration time - Float_t fConfLevel; // Confidence Level for the tracking - Float_t fAvgRapidity; // rapidity of the track (= mean) - Float_t fParticleMass; // Particle used for tracking. Standard: mass of pion - Double_t fMaxRadiusSlowDet; // Maximum radius for slow detectors. Fast detectors - // and only fast detectors reside outside this radius. - Int_t fAtLeastCorr; // min. number of correct hits for the track to be "good" - Int_t fAtLeastFake; // min. number of fake hits for the track to be "fake" - - Int_t fdNdEtaCent; // Multiplicity - // - // reconstruction settings - Double_t fMaxChi2Cl; // max cluster-track chi2 - Double_t fMaxNormChi2NDF;// max chi2/NDF to accept - Int_t fMinITSHits; // min ITS hits in track to accept - // - Double_t fMaxChi2ClSQ; // precalculated sqrt(chi2); - // - Int_t fMaxSeedToPropagate; // take 1st fMaxSeedToPropagate seeds from each layer - // background settings - Bool_t fUseBackground; // do we want to simulate background? - Double_t fBgYMin; // min Y for current layer bg generation - Double_t fBgYMax; // max Y for current layer bg generation - Double_t fBgZMin; // min Z for current layer bg generation - Double_t fBgZMax; // max Z for current layer bg generation - TArrayD fBgYMinTr; // min Y for each seed at current layer - TArrayD fBgYMaxTr; // max Y for each seed at current layer - TArrayD fBgZMinTr; // min Z for each seed at current layer - TArrayD fBgZMaxTr; // max Z for each seed at current layer - Int_t fNBgLimits; // depth of limits array - // - enum {kMaxNDetectors = 200}; - - Double_t fTransMomenta[40]; // array of transverse momenta - Double_t fMomentumRes[40]; // array of momentum resolution - Double_t fResolutionRPhi[40]; // array of rphi resolution - Double_t fResolutionZ[40]; // array of z resolution - Double_t fDetPointRes[kMaxNDetectors][40]; // array of rphi resolution per layer - Double_t fDetPointZRes[kMaxNDetectors][40]; // array of z resolution per layer - Double_t fEfficiency[3][40]; // efficiency for different particles - Double_t fFake[3][40]; // fake prob for different particles - // - KMCProbe fProbe; - Double_t fDensFactorEta; // density scaling for non-0 eta (precalculated - // - Double_t fUpdCalls; // number of kalman updates - TH2F* fHMCLrResidRPhi; // Residials on lr, rphi - TH2F* fHMCLrResidZ; // Residials on lr, rphi - TH2F* fHMCLrChi2; // track to clusyer chi2 on each lr, rphi - TArrayI fPattITS; // bit pattern of each group of active layers where hit is required - // - static Double_t fgVtxConstraint[2]; // if both positive, the vertex is used as constraint (accounted in chi2 but not in update) - ClassDef(KMCDetector,1); -}; - -//____________________________________________________________________________ -inline Bool_t KMCProbe::PropagateToCluster(KMCCluster* cl, double b) -{ - // propagate track to cluster frame - if (!Rotate(cl->GetPhi()) || !PropagateTo(cl->GetX(),b)) { - AliDebug(2,Form("Failed to propager track to cluster at phi=%.3f X=%.3f",cl->GetPhi(),cl->GetX())); - if (AliLog::GetGlobalDebugLevel()>1) Print(); - return kFALSE; - } - return kTRUE; -} - -////////////////////////////////////////////////////////////////////////////////////////////// -//-------------------------------------------------------------------------------------------- -// -// Class to collect summary of certrain track performance -// The track can be selected according to min and max ITS clusters to accept (total, fake and or correct) -// and according to presence of (any and/or correct) or absence of fakes clusters in certain groups -// of ITS layers. - -class KMCTrackSummary : public TNamed -{ - public: - KMCTrackSummary(const char* name=0,const char* title=0,int nlr=0); - virtual ~KMCTrackSummary(); - // - void Add(const KMCTrackSummary* src, double scl=1); - - virtual void Print(Option_t* option = "") const; - KMCTrackSummary* MakeCopy(const char* pref) const; - void SetNamePrefix(const char* pref=""); - - Bool_t CheckTrack(KMCProbe* trc); - void AddTrack(KMCProbe* trc); - // - TH1* GetHMCChi2() const {return fHMCChi2;} - TH1* GetHMCSigDCARPhi() const {return fHMCSigDCARPhi;} - TH1* GetHMCSigDCAZ() const {return fHMCSigDCAZ;} - TH1* GetHMCSigPt() const {return fHMCSigPt;} - TH2* GetHMCNCl() const {return fHMCNCl;} - TH1* GetHMCFakePatt() const {return fHMCFakePatt;} - // - Double_t GetCountAcc() const {return fCountAcc;} - Double_t GetCountTot() const {return fCountTot;} - Double_t GetEff() const {return fCountTot>0 ? fCountAcc/fCountTot : 0.;} - Double_t GetEffErr() const; - KMCProbe& GetAnProbe() const {return (KMCProbe&)fAnProbe;} - KMCProbe& GetRefProbe() const {return (KMCProbe&)fRefProbe;} - void SetAnProbe(KMCProbe* pr) {if (pr) fAnProbe = *pr;} - void SetRefProbe(KMCProbe* pr) {if (pr) fRefProbe = *pr;} - // - void SetMinMaxClITS(Int_t mn=0,Int_t mx=999) {fMinMaxClITS[0]=mn; fMinMaxClITS[1]=mx;} - void SetMinMaxClITSFake(Int_t mn=0,Int_t mx=999) {fMinMaxClITSFake[0]=mn; fMinMaxClITSFake[1]=mx;} - void SetMinMaxClITSCorr(Int_t mn=0,Int_t mx=999) {fMinMaxClITSCorr[0]=mn; fMinMaxClITSCorr[1]=mx;} - // - Double_t GetUpdCalls() const {return fCountTot>0 ? fUpdCalls/fCountTot : 0;} - void AddUpdCalls(double v) {fUpdCalls += v;} - // - void AddPatternITS(Int_t patt) {AddPattern(patt,fPattITS);} - void AddPatternITSFakeExcl(Int_t patt) {AddPattern(patt,fPattITSFakeExcl);} - void AddPatternITSCorr(Int_t patt) {AddPattern(patt,fPattITSCorr);} - static UInt_t Bits(Bool_t l0=0, Bool_t l1=0, Bool_t l2=0, Bool_t l3=0, Bool_t l4=0, Bool_t l5=0, Bool_t l6=0, Bool_t l7=0,Bool_t l8=0, Bool_t l9=0, - Bool_t l10=0,Bool_t l11=0,Bool_t l12=0,Bool_t l13=0,Bool_t l14=0,Bool_t l15=0,Bool_t l16=0,Bool_t l17=0,Bool_t l18=0,Bool_t l19=0, - Bool_t l20=0,Bool_t l21=0,Bool_t l22=0,Bool_t l23=0,Bool_t l24=0,Bool_t l25=0,Bool_t l26=0,Bool_t l27=0,Bool_t l28=0,Bool_t l29=0, - Bool_t l30=0,Bool_t l31=0); - // - // protected: - void AddPattern(Int_t patt,TArrayI& arr) {int n=arr.GetSize(); arr.Set(n+1); arr[n]=patt;} - Bool_t CheckPattern(UInt_t patt, Int_t cond) {return ((UInt_t)cond)&patt;} - Int_t OutOfRange(Int_t n, Int_t range[2]) {if (nrange[1]) return 1; return 0;} - static void PrependTNamed(TNamed* obj, const char* nm=0, const char* tit=0); - // - private: - KMCTrackSummary(const KMCTrackSummary& src) :TNamed(src) {} - protected: - // - Int_t fNITSLayers; // number of its layers - // track selection conditions - Int_t fMinMaxClITS[2]; // min and max N ITS clusters (total) - Int_t fMinMaxClITSFake[2]; // min and max N ITS fake clusters - Int_t fMinMaxClITSCorr[2]; // min and max N ITS correct clusters - // - TArrayI fPattITS; // bit pattern of each group of layers where hit is required - TArrayI fPattITSFakeExcl; // bit pattern of each group of layers where fake hit is not tolerated - TArrayI fPattITSCorr; // bit pattern of each group of layers where correc hit is required - // - TH1F* fHMCChi2; // track chi2 - TH1F* fHMCSigDCARPhi; // DCA distribution in RPhi from MC - TH1F* fHMCSigDCAZ; // DCA distribution in Z for from MC - TH1F* fHMCSigPt; // Pt difference distribution from MC - TH2F* fHMCNCl; // number of clusters - TH1F* fHMCFakePatt; // Fakes pattern - // - Double_t fCountAcc; // track counter of accepted tracks - Double_t fCountTot; // track counter of all tracks - Double_t fUpdCalls; // total update calls - // - KMCProbe fRefProbe; // reference probe - KMCProbe fAnProbe; // analital probe - static Int_t fgSumCounter; // global counter of bins - - ClassDef(KMCTrackSummary,1) -}; - -inline Double_t KMCTrackSummary::GetEffErr() const { - // - if (fCountTot<1) return 0; - double r = fCountAcc/fCountTot; - double err = r*(1.-r)/fCountTot; - return err>0 ? TMath::Sqrt(err) : 0; -} - -inline KMCTrackSummary* KMCTrackSummary::MakeCopy(const char* pref) const { - // create a copy, prepending all names with prefix - KMCTrackSummary* sm = (KMCTrackSummary*) Clone(this->GetName()); - sm->SetNamePrefix(pref); - return sm; -} - -#endif +#ifndef DETECTORK_H +#define DETECTORK_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "AliExternalTrackParam.h" +#include "AliLog.h" + +//------------------------------------------------------------------------- +// Current support and development: Ruben Shahoyan (Ruben.Shahoyan@cern.ch) +//------------------------------------------------------------------------- + + +class KMCLayer; +class KMCCluster; + +////////////////////////////////////////////////////////////////////////////////////////////// +//-------------------------------------------------------------------------------------------- +class KMCProbe : public AliExternalTrackParam { + public: + enum {kBitKilled=BIT(14)}; + enum {kNDOF=5}; + enum {kY2=0,kZ2=2,kSnp2=5,kTgl2=9,kPtI2=14}; + enum {kY,kZ,kSnp,kTgl,kPtI}; + // + KMCProbe() : fMass(0.14),fChi2(0),fHits(0),fFakes(0),fNHits(0),fNHitsITS(0),fNHitsITSFake(0),fInnLrCheck(fgNITSLayers) {for (int i=kMaxITSLr;i--;) fClID[i] =-2; +} + KMCProbe(KMCProbe& src); + KMCProbe& operator=(const KMCProbe& src); + virtual ~KMCProbe() {} + virtual void Print(Option_t* option = "") const; + virtual void Reset() {fMass=0.14; fChi2=0; fHits=fFakes=0; for (int i=kMaxITSLr;i--;) fClID[i]=-2; AliExternalTrackParam::Reset();} + virtual Bool_t IsSortable() const {return kTRUE;} + virtual Int_t Compare(const TObject* obj) const; + void ResetCovMat(); + // + void Kill(Bool_t v=kTRUE) {SetBit(kBitKilled,v);} + Bool_t IsKilled() const {return TestBit(kBitKilled);} + // + Bool_t CorrectForMeanMaterial(const KMCLayer* lr, Bool_t inward=kTRUE); + Bool_t GetXatLabR(Double_t r,Double_t &x, Double_t bz, Int_t dir=0) const; + Bool_t PropagateToR(double r, double b, int dir=0); + + // + void SetMass(double m=0.14) {fMass = m;} + Double_t GetMass() const {return fMass;} + Double_t GetChi2() const {return fChi2;} + void SetChi2(double chi2) {fChi2 = chi2;} + void AddChi2(double chi2) {fChi2 += chi2;} + void SetInnerLrChecked(Int_t n) {if (n-1) { + SetWBit(fFakes,lr); + fNHitsITSFake++; + } + fClID[lr] = clID; + //else ResetWBit(fFakes,lr); + } +} + +//_______________________________________ +inline void KMCProbe::ResetHit(Int_t lr) { + // note: lr is active layer ID + if (lr>=fgNITSLayers) return; + if (IsWBit(fHits,lr)) {fNHitsITS--; ResetWBit(fHits,lr);} + if (IsWBit(fFakes,lr)) {fNHitsITSFake--; ResetWBit(fFakes,lr);} +} + +////////////////////////////////////////////////////////////////////////////////////////////// +//-------------------------------------------------------------------------------------------- +class KMCCluster : public TObject { + public: + // + enum {kBitKilled=BIT(14)}; + KMCCluster(Float_t y=0, Float_t z=0, Float_t x=0, Float_t phi=0) : fY(y),fZ(z),fX(x),fPhi(phi) {} + KMCCluster(KMCCluster &src); + KMCCluster& operator=(const KMCCluster& src); + virtual ~KMCCluster() {} + void Reset() {Clear();} + // + Double_t GetY() const {return fY;} + Double_t GetX() const {return fX;} + Double_t GetZ() const {return fZ;} + Double_t GetPhi() const {return fPhi;} + // + void Kill(Bool_t v=kTRUE) {SetBit(kBitKilled,v);} + Bool_t IsKilled() const {return TestBit(kBitKilled);} + Float_t fY; + Float_t fZ; + Float_t fX; + Float_t fPhi; + void Set(Float_t y, Float_t z, Float_t x, Float_t phi) {fY=y; fZ=z; fX=x; fPhi=phi; ResetBit(kBitKilled);} + virtual void Print(Option_t * = 0) const; + ClassDef(KMCCluster,1); +}; + +////////////////////////////////////////////////////////////////////////////////////////////// +//-------------------------------------------------------------------------------------------- +class KMCLayer : public TNamed { +public: + enum {kTypeNA=-1,kITS,kTPC,kBitVertex=BIT(15)}; + KMCLayer(char *name); + Float_t GetRadius() const {return fR;} + Float_t GetRadL() const {return fx2X0;} + Float_t GetXTimesRho() const {return fXRho;} + Float_t GetPhiRes() const {return fPhiRes;} + Float_t GetZRes() const {return fZRes;} + Float_t GetLayerEff() const {return fEff;} + Int_t GetActiveID() const {return fActiveID;} + virtual void Print(Option_t* option = "") const; + // + Bool_t IsDead() const {return fIsDead;} + Bool_t IsITS() const {return fType==kITS;} + Bool_t IsTPC() const {return fType==kTPC;} + Bool_t IsVertex() const {return TestBit(kBitVertex);} + // + Int_t AddBgCluster(double y,double z,double x,double phi) {int n=GetNBgClusters(); new (fClBg[n]) KMCCluster(y,z,x,phi); return ++n;} + KMCCluster* GetBgCluster(Int_t i) {return (KMCCluster*)fClBg[i];} + KMCCluster* GetMCCluster() {return (KMCCluster*)&fClMC;} + // + KMCProbe* GetAnProbe() const {return (KMCProbe*)&fTrCorr;} + Int_t GetNMCTracks() const {return fTrMC.GetEntries();} + KMCProbe* AddMCTrack(KMCProbe* src=0); + KMCProbe* GetMCTrack(Int_t it) const {return (KMCProbe*)fTrMC[it];} + KMCProbe* GetWinnerMCTrack() {if (!fTrMC.IsSorted()) fTrMC.Sort(); return fTrMC.GetEntries() ? (KMCProbe*)fTrMC[0]:0;} + TClonesArray* GetMCTracks() const {return (TClonesArray*)&fTrMC;} + void Reset(); + void ResetMC() { fClBg.Clear(); fTrMC.Clear();} + void ResetBgClusters() { fClBg.Clear(); } + void ResetMCTracks() { fTrMC.Clear(); } + Int_t GetNBgClusters() const { return fClBg.GetEntries();} + static Double_t GetDefEff() {return fgDefEff;} + static void SetDefEff(double eff=1) {fgDefEff = eff>1. ? 1.: (eff<0? 0:eff);} + // + // + Float_t fR; + Float_t fx2X0; + Float_t fXRho; // x*density + Float_t fPhiRes; + Float_t fZRes; + Float_t fEff; + Bool_t fIsDead; + Int_t fType; // its, tpc etc + Int_t fActiveID; // active layer id + Float_t fSig2EstD; + Float_t fSig2EstZ; + // + KMCCluster fClCorr; // ideal cluster + KMCCluster fClMC; // MC cluster (from MS scattered track) + TClonesArray fClBg; // bg clusters for MC + // + KMCProbe fTrCorr; // ideal track + TClonesArray fTrMC; // MC tracks + // + static Double_t fgDefEff; + ClassDef(KMCLayer,1); +}; + +////////////////////////////////////////////////////////////////////////////////////////////// +//-------------------------------------------------------------------------------------------- +class KMCDetector : public TNamed { + public: + enum {kUtilHisto=BIT(14)}; + KMCDetector(); + KMCDetector(char *name,char *title); + virtual ~KMCDetector(); + + void AddLayer(char *name, Float_t radius, Float_t radL, Float_t xrho=0, Float_t phiRes=999999, Float_t zRes=999999, Float_t eff=-1); + Int_t GetLayerID(Int_t actID) const; + void KillLayer(char *name); + void SetRadius(char *name, Float_t radius); + void SetRadiationLength(char *name, Float_t radL); + void SetResolution(char *name, Float_t phiRes=999999, Float_t zRes=999999); + void SetLayerEfficiency(char *name, Float_t eff=1.0); + void RemoveLayer(char *name); + + Float_t GetRadius(char *name); + Float_t GetRadiationLength(char *name); + Float_t GetResolution(char *name, Int_t axis=0); + Float_t GetLayerEfficiency(char *name); + + void PrintLayout(); + void PlotLayout(Int_t plotDead = kTRUE); + + void MakeAliceAllNew(Bool_t flagTPC =0, Bool_t flagMon=1,int setVer=0); + void MakeAliceCurrent(Bool_t flagTPC =0, Int_t AlignResiduals = 0); + void AddTPC(Float_t phiResMean, Float_t zResMean, Int_t skip=1); + void RemoveTPC(); + + void SetBField(Float_t bfield) {fBFieldG = bfield*10; } + Float_t GetBField() const {return fBFieldG/10; } + void SetLhcUPCscale(Float_t lhcUPCscale) {fLhcUPCscale = lhcUPCscale; } + Float_t GetLhcUPCscale() const { return fLhcUPCscale; } + void SetParticleMass(Float_t particleMass) {fParticleMass = particleMass; } + Float_t GetParticleMass() const { return fParticleMass; } + void SetIntegrationTime(Float_t integrationTime) {fIntegrationTime = integrationTime; } + Float_t GetIntegrationTime() const { return fIntegrationTime; } + void SetMaxRadiusOfSlowDetectors(Float_t maxRadiusSlowDet) {fMaxRadiusSlowDet = maxRadiusSlowDet; } + Float_t GetMaxRadiusOfSlowDetectors() const { return fMaxRadiusSlowDet; } + void SetAvgRapidity(Float_t avgRapidity) {fAvgRapidity = avgRapidity; } + Float_t GetAvgRapidity() const { return fAvgRapidity; } + void SetConfidenceLevel(Float_t confLevel) {fConfLevel = confLevel; } + Float_t GetConfidenceLevel() const { return fConfLevel; } + void SetAtLeastCorr(Int_t atLeastCorr ) {fAtLeastCorr = atLeastCorr; } + Float_t GetAtLeastCorr() const { return fAtLeastCorr; } + void SetAtLeastFake(Int_t atLeastFake ) {fAtLeastFake = atLeastFake; } + Float_t GetAtLeastFake() const { return fAtLeastFake; } + + void SetdNdEtaCent(Int_t dNdEtaCent ) {fdNdEtaCent = dNdEtaCent; } + Float_t GetdNdEtaCent() const { return fdNdEtaCent; } + + Int_t GetNLayers() const {return fLayers.GetEntries(); } + Int_t GetNActiveLayers() const {return fNActiveLayers; } + Int_t GetNActiveITSLayers() const {return fNActiveITSLayers; } + + Bool_t SolveSingleTrackViaKalman(Double_t mass, Double_t pt, Double_t eta); + Bool_t SolveSingleTrackViaKalmanMC(int offset=6); + Bool_t SolveSingleTrack(Double_t mass, Double_t pt, Double_t eta, TObjArray* sumArr=0, int nMC=10000,int offset=6); + KMCProbe* KalmanSmooth(int actLr, int actMin,int actMax) const; + KMCProbe* KalmanSmoothFull(int actLr, int actMin,int actMax) const; //TBD + void EliminateUnrelated(); + // + KMCProbe* PrepareKalmanTrack(double pt, double lambda, double mass, int charge, double phi=0,double x=0,double y=0,double z=0); + Bool_t TransportKalmanTrackWithMS(KMCProbe *probTr, int maxLr) const; + void ApplyMS(KMCProbe* trc, double x2x0) const; + Bool_t PropagateToLayer(KMCProbe* trc, KMCLayer* lr, int dir) const; + Bool_t UpdateTrack(KMCProbe* trc, KMCLayer* lr, KMCCluster* cl, Bool_t goToCluster=kTRUE) const; + + // Helper functions + Double_t ThetaMCS ( Double_t mass, Double_t RadLength, Double_t momentum ) const; + Double_t ProbGoodHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; + Double_t ProbGoodChiSqHit ( Double_t radius, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; + Double_t ProbGoodChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; + Double_t ProbNullChiSqPlusConfHit ( Double_t radius, Double_t leff, Double_t searchRadiusRPhi, Double_t searchRadiusZ ) ; + + // Howard W. hit distribution and convolution integral + Double_t Dist ( Double_t Z, Double_t radius ) ; + Double_t HitDensity ( Double_t radius ) ; + Double_t UpcHitDensity ( Double_t radius ) ; + Double_t IntegratedHitDensity ( Double_t multiplicity, Double_t radius ) ; + Double_t OneEventHitDensity ( Double_t multiplicity, Double_t radius ) const ; + Double_t D0IntegratedEfficiency( Double_t pt, Double_t corrEfficiency[][20] ) const ; + + TGraph* GetGraphMomentumResolution(Int_t color, Int_t linewidth=1); + TGraph* GetGraphPointingResolution(Int_t axis,Int_t color, Int_t linewidth=1); + TGraph* GetGraphPointingResolutionTeleEqu(Int_t axis,Int_t color, Int_t linewidth=1); + + TGraph* GetGraphImpactParam(Int_t mode, Int_t axis, Int_t color, Int_t linewidth=1); + + TGraph* GetGraphRecoEfficiency(Int_t particle, Int_t color, Int_t linewidth=1); + TGraph* GetGraphRecoFakes(Int_t particle,Int_t color, Int_t linewidth); + + TGraph* GetGraph(Int_t number, Int_t color, Int_t linewidth=1); + + void MakeStandardPlots(Bool_t add =0, Int_t color=1, Int_t linewidth=1,Bool_t onlyPionEff=0); + + // method to extend AliExternalTrackParam functionality + Bool_t IsZero(double val, double tol=1e-9) const {return TMath::Abs(val)0 ? cut:9; fMaxChi2ClSQ = TMath::Sqrt(fMaxChi2Cl);} + void RequireMinITSHits(Int_t n=4) {fMinITSHits = n;} + void RequireMaxNormChi2NDF(double cut=5.) {fMaxNormChi2NDF = cut>0 ? cut:9;} + void RequirePattern(UInt_t *patt, int groups); + // + Double_t GetMaxChi2Cl() const {return fMaxChi2Cl;} + Double_t GetMaxNormChi2NDFusterKMC() const {return fMaxNormChi2NDF;} + Int_t GetMinITSHits() const {return fMinITSHits;} + // + Double_t GetUpdCalls() const {return fUpdCalls;} + void InitMCWatchHistos(); + TH2F* GetHMCLrResidRPhi() const {return fHMCLrResidRPhi;} + TH2F* GetHMCLrResidZ() const {return fHMCLrResidZ;} + TH2F* GetHMCLrChi2() const {return fHMCLrChi2;} + // + void PrintITS(Option_t* opt="") const {for (int i=0;i<=fLastActiveITSLayer;i++) if (!GetLayer(i)->IsDead()) GetLayer(i)->Print(opt);} + static void SetVtxConstraint(double d=-1, double z=-1) {fgVtxConstraint[0]=d; fgVtxConstraint[1]=z;} + // + void CalcHardSearchLimits(double dzv); + void SetMaxSeedToPropagate(Int_t n=300) {fMaxSeedToPropagate = n;} + + protected: + + Int_t fNLayers; // total number of layers in the model + Int_t fNActiveLayers; // number of active layers in the model + Int_t fNActiveITSLayers; // number of active ITS layers in the model + Int_t fLastActiveLayer; // id of last active layer + Int_t fLastActiveITSLayer; // id of last active ITS layer + Int_t fLastActiveLayerTracked; // id of last active layer really used for tracking of given pt + TList fLayers; // List of layer pointers + Float_t fBFieldG; // Magnetic Field in Gauss (set in Tesla) + Float_t fLhcUPCscale; // UltraPeripheralElectrons: scale from RHIC to LHC + Float_t fIntegrationTime; // electronics integration time + Float_t fConfLevel; // Confidence Level for the tracking + Float_t fAvgRapidity; // rapidity of the track (= mean) + Float_t fParticleMass; // Particle used for tracking. Standard: mass of pion + Double_t fMaxRadiusSlowDet; // Maximum radius for slow detectors. Fast detectors + // and only fast detectors reside outside this radius. + Int_t fAtLeastCorr; // min. number of correct hits for the track to be "good" + Int_t fAtLeastFake; // min. number of fake hits for the track to be "fake" + + Int_t fdNdEtaCent; // Multiplicity + // + // reconstruction settings + Double_t fMaxChi2Cl; // max cluster-track chi2 + Double_t fMaxNormChi2NDF;// max chi2/NDF to accept + Int_t fMinITSHits; // min ITS hits in track to accept + // + Double_t fMaxChi2ClSQ; // precalculated sqrt(chi2); + // + Int_t fMaxSeedToPropagate; // take 1st fMaxSeedToPropagate seeds from each layer + // background settings + Bool_t fUseBackground; // do we want to simulate background? + Double_t fBgYMin; // min Y for current layer bg generation + Double_t fBgYMax; // max Y for current layer bg generation + Double_t fBgZMin; // min Z for current layer bg generation + Double_t fBgZMax; // max Z for current layer bg generation + TArrayD fBgYMinTr; // min Y for each seed at current layer + TArrayD fBgYMaxTr; // max Y for each seed at current layer + TArrayD fBgZMinTr; // min Z for each seed at current layer + TArrayD fBgZMaxTr; // max Z for each seed at current layer + Int_t fNBgLimits; // depth of limits array + // + enum {kMaxNDetectors = 200}; + + Double_t fTransMomenta[40]; // array of transverse momenta + Double_t fMomentumRes[40]; // array of momentum resolution + Double_t fResolutionRPhi[40]; // array of rphi resolution + Double_t fResolutionZ[40]; // array of z resolution + Double_t fDetPointRes[kMaxNDetectors][40]; // array of rphi resolution per layer + Double_t fDetPointZRes[kMaxNDetectors][40]; // array of z resolution per layer + Double_t fEfficiency[3][40]; // efficiency for different particles + Double_t fFake[3][40]; // fake prob for different particles + // + KMCProbe fProbe; + Double_t fDensFactorEta; // density scaling for non-0 eta (precalculated + // + Double_t fUpdCalls; // number of kalman updates + TH2F* fHMCLrResidRPhi; // Residials on lr, rphi + TH2F* fHMCLrResidZ; // Residials on lr, rphi + TH2F* fHMCLrChi2; // track to clusyer chi2 on each lr, rphi + TArrayI fPattITS; // bit pattern of each group of active layers where hit is required + // + static Double_t fgVtxConstraint[2]; // if both positive, the vertex is used as constraint (accounted in chi2 but not in update) + ClassDef(KMCDetector,1); +}; + +//____________________________________________________________________________ +inline Bool_t KMCProbe::PropagateToCluster(KMCCluster* cl, double b) +{ + // propagate track to cluster frame + if (!Rotate(cl->GetPhi()) || !PropagateTo(cl->GetX(),b)) { + AliDebug(2,Form("Failed to propager track to cluster at phi=%.3f X=%.3f",cl->GetPhi(),cl->GetX())); + if (AliLog::GetGlobalDebugLevel()>1) Print(); + return kFALSE; + } + return kTRUE; +} + +////////////////////////////////////////////////////////////////////////////////////////////// +//-------------------------------------------------------------------------------------------- +// +// Class to collect summary of certrain track performance +// The track can be selected according to min and max ITS clusters to accept (total, fake and or correct) +// and according to presence of (any and/or correct) or absence of fakes clusters in certain groups +// of ITS layers. + +class KMCTrackSummary : public TNamed +{ + public: + KMCTrackSummary(const char* name=0,const char* title=0,int nlr=0); + virtual ~KMCTrackSummary(); + // + void Add(const KMCTrackSummary* src, double scl=1); + + virtual void Print(Option_t* option = "") const; + KMCTrackSummary* MakeCopy(const char* pref) const; + void SetNamePrefix(const char* pref=""); + + Bool_t CheckTrack(KMCProbe* trc); + void AddTrack(KMCProbe* trc); + // + TH1* GetHMCChi2() const {return fHMCChi2;} + TH1* GetHMCSigDCARPhi() const {return fHMCSigDCARPhi;} + TH1* GetHMCSigDCAZ() const {return fHMCSigDCAZ;} + TH1* GetHMCSigPt() const {return fHMCSigPt;} + TH2* GetHMCNCl() const {return fHMCNCl;} + TH1* GetHMCFakePatt() const {return fHMCFakePatt;} + // + Double_t GetCountAcc() const {return fCountAcc;} + Double_t GetCountTot() const {return fCountTot;} + Double_t GetEff() const {return fCountTot>0 ? fCountAcc/fCountTot : 0.;} + Double_t GetEffErr() const; + KMCProbe& GetAnProbe() const {return (KMCProbe&)fAnProbe;} + KMCProbe& GetRefProbe() const {return (KMCProbe&)fRefProbe;} + void SetAnProbe(KMCProbe* pr) {if (pr) fAnProbe = *pr;} + void SetRefProbe(KMCProbe* pr) {if (pr) fRefProbe = *pr;} + // + void SetMinMaxClITS(Int_t mn=0,Int_t mx=999) {fMinMaxClITS[0]=mn; fMinMaxClITS[1]=mx;} + void SetMinMaxClITSFake(Int_t mn=0,Int_t mx=999) {fMinMaxClITSFake[0]=mn; fMinMaxClITSFake[1]=mx;} + void SetMinMaxClITSCorr(Int_t mn=0,Int_t mx=999) {fMinMaxClITSCorr[0]=mn; fMinMaxClITSCorr[1]=mx;} + // + Double_t GetUpdCalls() const {return fCountTot>0 ? fUpdCalls/fCountTot : 0;} + void AddUpdCalls(double v) {fUpdCalls += v;} + // + void AddPatternITS(Int_t patt) {AddPattern(patt,fPattITS);} + void AddPatternITSFakeExcl(Int_t patt) {AddPattern(patt,fPattITSFakeExcl);} + void AddPatternITSCorr(Int_t patt) {AddPattern(patt,fPattITSCorr);} + static UInt_t Bits(Bool_t l0=0, Bool_t l1=0, Bool_t l2=0, Bool_t l3=0, Bool_t l4=0, Bool_t l5=0, Bool_t l6=0, Bool_t l7=0,Bool_t l8=0, Bool_t l9=0, + Bool_t l10=0,Bool_t l11=0,Bool_t l12=0,Bool_t l13=0,Bool_t l14=0,Bool_t l15=0,Bool_t l16=0,Bool_t l17=0,Bool_t l18=0,Bool_t l19=0, + Bool_t l20=0,Bool_t l21=0,Bool_t l22=0,Bool_t l23=0,Bool_t l24=0,Bool_t l25=0,Bool_t l26=0,Bool_t l27=0,Bool_t l28=0,Bool_t l29=0, + Bool_t l30=0,Bool_t l31=0); + // + // protected: + void AddPattern(Int_t patt,TArrayI& arr) {int n=arr.GetSize(); arr.Set(n+1); arr[n]=patt;} + Bool_t CheckPattern(UInt_t patt, Int_t cond) {return ((UInt_t)cond)&patt;} + Int_t OutOfRange(Int_t n, Int_t range[2]) {if (nrange[1]) return 1; return 0;} + static void PrependTNamed(TNamed* obj, const char* nm=0, const char* tit=0); + // + private: + KMCTrackSummary(const KMCTrackSummary& src) :TNamed(src) {} + protected: + // + Int_t fNITSLayers; // number of its layers + // track selection conditions + Int_t fMinMaxClITS[2]; // min and max N ITS clusters (total) + Int_t fMinMaxClITSFake[2]; // min and max N ITS fake clusters + Int_t fMinMaxClITSCorr[2]; // min and max N ITS correct clusters + // + TArrayI fPattITS; // bit pattern of each group of layers where hit is required + TArrayI fPattITSFakeExcl; // bit pattern of each group of layers where fake hit is not tolerated + TArrayI fPattITSCorr; // bit pattern of each group of layers where correc hit is required + // + TH1F* fHMCChi2; // track chi2 + TH1F* fHMCSigDCARPhi; // DCA distribution in RPhi from MC + TH1F* fHMCSigDCAZ; // DCA distribution in Z for from MC + TH1F* fHMCSigPt; // Pt difference distribution from MC + TH2F* fHMCNCl; // number of clusters + TH1F* fHMCFakePatt; // Fakes pattern + // + Double_t fCountAcc; // track counter of accepted tracks + Double_t fCountTot; // track counter of all tracks + Double_t fUpdCalls; // total update calls + // + KMCProbe fRefProbe; // reference probe + KMCProbe fAnProbe; // analital probe + static Int_t fgSumCounter; // global counter of bins + + ClassDef(KMCTrackSummary,1) +}; + +inline Double_t KMCTrackSummary::GetEffErr() const { + // + if (fCountTot<1) return 0; + double r = fCountAcc/fCountTot; + double err = r*(1.-r)/fCountTot; + return err>0 ? TMath::Sqrt(err) : 0; +} + +inline KMCTrackSummary* KMCTrackSummary::MakeCopy(const char* pref) const { + // create a copy, prepending all names with prefix + KMCTrackSummary* sm = (KMCTrackSummary*) Clone(this->GetName()); + sm->SetNamePrefix(pref); + return sm; +} + +#endif diff --git a/ITS/doc/doc_itsgeo.html b/ITS/doc/doc_itsgeo.html index 212e1e0aea3..72f984d2ed0 100644 --- a/ITS/doc/doc_itsgeo.html +++ b/ITS/doc/doc_itsgeo.html @@ -1,184 +1,184 @@ - - - - - - - - - - -

-============================================================================

-

-Description of ALICE ITS -Geometry Code (Rev. 1,00 - April, 30th -2008 - M. Sitta)

-

-============================================================================

-

Content -

-


-

-
    -
  1. General - description

    -
  2. - Detector-specific classes

    -
  3. Initialization -

    -
  4. Main - methods

    -
  5. Helper - classes AliITSgeom and AliITSgeomTGeo

    -
-


-

-


-

-

General -description

-

The -AliITSv11Hybrid class describes the overall ITS geometry. It is a -mix between the old geometry (originally coded in the -AliITSvPPRasymmFMD class) and the new -TGeo geometry (v11). The "old" part is described using Geant3 volumes, while -the "new" one using TGeo volumes; moreover the new part is more adherent to -the technical drawings and so is more realistic. -

-

Proper flags, set in the -AliITSInitGeometry class, determine -whether the old or the new part is used. -

-

Currently all the sensitive detectors and their -supports, the mechanical supports and part of the services (namely the SDD -cables) are described in the new geometry. The rest of the services and some -other mechanics are (sometimes partly) described in the old geometry. Work is -in progress to move everything in the new geometry. -

-


-

-

================================================================================

-


-

-

-Detector-specific classes

-

The old geometry is fully described in the -AliITSv11Hybrid class. For the new -geometry on the other hand, a set of specific classes are defined -

-


-

-

-> -AliITSv11GeometrySPD describes the whole SPD geometry -

-

-> -AliITSv11GeometrySDD describes the whole SDD geometry -

-

-> -AliITSv11GeometrySSD describes the whole SSD geometry -

-

-> -AliITSv11GeometrySupport describes the geometry of some mechanical -supports (thermal shields and support cylinders and cones) -

-


-

-

================================================================================

-


-

-

-Initialization

-

To initialize an object of the -AliITSv11Hybrid class it is enough to -call its constructor in the Config.C -macro -

-

-AliITSv11Hybrid *ITS = new AliITSv11Hybrid("ITS","ITS detailed version with TGeo description"); -

-

the first string is the detector name (which -is actually ignored, and internally set to "ITS"), the second string is an -arbitrary title. Both strings are passed to the -AliITS constructor. -

-


-

-

The class constructor initializes its private -members, creates an object for each detector-specific class and sets their -names, and sets the defaults for some detector parameters. -

-


-

-

================================================================================

-


-

-

Main -Methods

-

The main methods of the -AliITSv11Hybrid class are -

-


-

-
    -
  • AliITSv11Hybrid::CreateGeometry first -calls CreateOldGeometry to define the -old (Geant3) volumes (the ones still active according to the aforementioned -flags); then it calls specific methods of the detector classes to create -the new geometry
  • -
  • AliITSv11Hybrid::CreateOldGeometry -creates the old geometry volumes; flags are used to determine which sections -are to be skipped because already coded in the detector-specific classes
  • -
  • AliITSv11Hybrid::CreateMaterials -defines all materials and mediums used in the ITS geometry description
  • -
  • AliITSv11Hybrid::AddAlignableVolumes -creates entries for alignable volumes associating the symbolic volume name -with the corresponding volume path
  • -
  • AliITSv11Hybrid::StepManager is -called at every step in the ITS to save hits according to the subdetector -which the particle is in
  • -
-


-

-

================================================================================

-


-

-

Helper -classes AliITSgeom and AliITSgeomTGeo

-

AliITSgeomTGeo - is a simple interface class to TGeoManager. It is used in the -simulation and reconstruction in order to query the TGeo ITS geometry. -

-

It has methods such as for example
-GetModuleIndex to compute the module -index number from the layer, ladder, and detector numbers
-GetModuleId to compute the layer, -ladder and detector number given the module index number
-GetLayer to compute the layer number -for a given the module index
-GetMatrix to get the -transformation matrix for a given module by quering the TGeoManager
-GetTranslation and -GetRotation to get the translation -vector or the rotation matrix for a given module by quering the -TGeoManager
-LocalToGlobal and -GlobalToLocal to make the conversion -from the local sensitive reference system to the global reference system -and vice-versa, for an arbitrary local or global position -

-


-

-

Similarly the -AliITSgeom class contains other methods for querying and -interfacing the ITS geometry. -

-


-

- - + + + + + + + + + + +

+============================================================================

+

+Description of ALICE ITS +Geometry Code (Rev. 1,00 - April, 30th +2008 - M. Sitta)

+

+============================================================================

+

Content +

+


+

+
    +
  1. General + description

    +
  2. + Detector-specific classes

    +
  3. Initialization +

    +
  4. Main + methods

    +
  5. Helper + classes AliITSgeom and AliITSgeomTGeo

    +
+


+

+


+

+

General +description

+

The +AliITSv11Hybrid class describes the overall ITS geometry. It is a +mix between the old geometry (originally coded in the +AliITSvPPRasymmFMD class) and the new +TGeo geometry (v11). The "old" part is described using Geant3 volumes, while +the "new" one using TGeo volumes; moreover the new part is more adherent to +the technical drawings and so is more realistic. +

+

Proper flags, set in the +AliITSInitGeometry class, determine +whether the old or the new part is used. +

+

Currently all the sensitive detectors and their +supports, the mechanical supports and part of the services (namely the SDD +cables) are described in the new geometry. The rest of the services and some +other mechanics are (sometimes partly) described in the old geometry. Work is +in progress to move everything in the new geometry. +

+


+

+

================================================================================

+


+

+

+Detector-specific classes

+

The old geometry is fully described in the +AliITSv11Hybrid class. For the new +geometry on the other hand, a set of specific classes are defined +

+


+

+

-> +AliITSv11GeometrySPD describes the whole SPD geometry +

+

-> +AliITSv11GeometrySDD describes the whole SDD geometry +

+

-> +AliITSv11GeometrySSD describes the whole SSD geometry +

+

-> +AliITSv11GeometrySupport describes the geometry of some mechanical +supports (thermal shields and support cylinders and cones) +

+


+

+

================================================================================

+


+

+

+Initialization

+

To initialize an object of the +AliITSv11Hybrid class it is enough to +call its constructor in the Config.C +macro +

+

+AliITSv11Hybrid *ITS = new AliITSv11Hybrid("ITS","ITS detailed version with TGeo description"); +

+

the first string is the detector name (which +is actually ignored, and internally set to "ITS"), the second string is an +arbitrary title. Both strings are passed to the +AliITS constructor. +

+


+

+

The class constructor initializes its private +members, creates an object for each detector-specific class and sets their +names, and sets the defaults for some detector parameters. +

+


+

+

================================================================================

+


+

+

Main +Methods

+

The main methods of the +AliITSv11Hybrid class are +

+


+

+
    +
  • AliITSv11Hybrid::CreateGeometry first +calls CreateOldGeometry to define the +old (Geant3) volumes (the ones still active according to the aforementioned +flags); then it calls specific methods of the detector classes to create +the new geometry
  • +
  • AliITSv11Hybrid::CreateOldGeometry +creates the old geometry volumes; flags are used to determine which sections +are to be skipped because already coded in the detector-specific classes
  • +
  • AliITSv11Hybrid::CreateMaterials +defines all materials and mediums used in the ITS geometry description
  • +
  • AliITSv11Hybrid::AddAlignableVolumes +creates entries for alignable volumes associating the symbolic volume name +with the corresponding volume path
  • +
  • AliITSv11Hybrid::StepManager is +called at every step in the ITS to save hits according to the subdetector +which the particle is in
  • +
+


+

+

================================================================================

+


+

+

Helper +classes AliITSgeom and AliITSgeomTGeo

+

AliITSgeomTGeo + is a simple interface class to TGeoManager. It is used in the +simulation and reconstruction in order to query the TGeo ITS geometry. +

+

It has methods such as for example
+GetModuleIndex to compute the module +index number from the layer, ladder, and detector numbers
+GetModuleId to compute the layer, +ladder and detector number given the module index number
+GetLayer to compute the layer number +for a given the module index
+GetMatrix to get the +transformation matrix for a given module by quering the TGeoManager
+GetTranslation and +GetRotation to get the translation +vector or the rotation matrix for a given module by quering the +TGeoManager
+LocalToGlobal and +GlobalToLocal to make the conversion +from the local sensitive reference system to the global reference system +and vice-versa, for an arbitrary local or global position +

+


+

+

Similarly the +AliITSgeom class contains other methods for querying and +interfacing the ITS geometry. +

+


+

+ + diff --git a/ITS/patchSSDBadChannelsMap.C b/ITS/patchSSDBadChannelsMap.C index dc8c1abf926..a82b9c251ee 100644 --- a/ITS/patchSSDBadChannelsMap.C +++ b/ITS/patchSSDBadChannelsMap.C @@ -1,386 +1,386 @@ -// -// Macro adds ether ladder, module or channel to the SSD bad channels map. -// Input parameter: file name with original SSD bad channels map (optional), -// equipment identifier (DDL), -// Slot number, ADC number (optional) and channel number (optional) -// Author: Oleksandr.Borysov@cern.ch -// - - -#if !defined(__CINT__) || defined(__MAKECINT__) -#include -#include -#include "TStyle.h" -#include "TFile.h" -#include "TCanvas.h" -#include "TH2F.h" -#include "TString.h" -#include "AliLog.h" -#include "AliRawReaderRoot.h" -#include "AliITSRawStreamSSDv1.h" -#include "AliITSBadChannelsSSDv2.h" -#include "AliITSModuleDaSSD.h" -#include "AliITSHandleDaSSD.h" -#endif - - -#define EQUIPMENTTODDLMASK 0xFF -#define NUMBEROFSSDMODULESPERSLOT 12 -#define MAXSSDDDLID 15 -#define MINSSDMODULEID 500 - -Bool_t readBCMap(const Char_t *filename, AliITSBadChannelsSSDv2*& bcl); -Int_t addModuleBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId, const Int_t adc); -Int_t addLadderBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId); -Int_t addChannelBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId, const Int_t adc, const Int_t strp); -void Usage (void); -void drawBadChannelMapDAQDB(const char* filename); - -//class gives an access to the protected array with SSD_DDL_Map in case the geometry is not initialized -class AliITSRawStreamSSDtmp : public AliITSRawStreamSSDv1 { -public: - AliITSRawStreamSSDtmp(AliRawReader* rawReader): AliITSRawStreamSSDv1(rawReader) { - Setv11HybridDDLMapping(); - AliInfo("Using SSD DDL Map initialized by AliITSRawStreamSSDv1::Setv11HybridDDLMapping()"); - } - virtual ~AliITSRawStreamSSDtmp() {}; - Int_t GetModId(Int_t iDDL, Int_t iModule) {return fgkDDLModuleMap[iDDL][iModule];} - ClassDef(AliITSRawStreamSSDtmp, 0) -}; - -//_________________________________________________________// -Int_t patchSSDBadChannelsMap(const Char_t *fname = 0, - const Int_t EqId = -1, - const Int_t SlotId = -1, - const Int_t adc = -1, - const Int_t strp = -1) { - //Macro to patch the bad channel list - TString bcfname, pathstr; - AliITSBadChannelsSSDv2 *bc = 0; - if (EqId < 0) { Usage(); cerr << "Equipment number (that is DDL) must be specified! Exit.\n"; return 0; } - else if ((EqId & EQUIPMENTTODDLMASK) > MAXSSDDDLID) { - cerr << "Icorrect equipment number (that is DDL)! Exit.\n"; - return -1; - } - if (SlotId < 1 || SlotId > 9) { - cerr << "Slot number must be specified (in the range 1 - 9)! Exit.\n"; - Usage(); - return -2; - } - if (!fname || fname[0]==0) { - cout << "File name with bad channels map is not specified, an empty map is used!\n"; - bc = new AliITSBadChannelsSSDv2(); - if (!bc) { cerr << "Error creating the AliITSBadChannelsSSDv2 object! Exit.\n"; return -1; } - pathstr = ""; - } - else { - pathstr.Form(fname); - if (!readBCMap(fname, bc)) { - cerr << "Error reading file " << fname << " with Static Bad Channels Map! Exit.\n"; - return -3; - } - } - if (adc < 0) addLadderBCMap(bc, EqId, SlotId); - else if ((adc < 6) || (adc > 7 && (adc - 2) < NUMBEROFSSDMODULESPERSLOT) ) { - if (strp < 0) addModuleBCMap(bc, EqId, SlotId, adc); - else if (strp < AliITSModuleDaSSD::GetStripsPerModuleConst()) addChannelBCMap(bc, EqId, SlotId, adc, strp); - else { - cerr << "Incorrect number for Strip. Exit\n"; - Usage(); - if (bc) delete bc; - return -5; - } - } - else { - cerr << "Incorrect number for ADC. Exit\n"; - if (bc) delete bc; - return -4; - } - bcfname = pathstr(0, pathstr.Last('/')+1); - bcfname.Append(Form("ssdbcmap_%i.root", time(NULL))); - TFile *bcfile = new TFile (bcfname.Data(),"RECREATE"); - if (bcfile->IsZombie()) { - cerr << "Error open file " << bcfname.Data() << " for writing new bad channels map!\n"; - if (bc) delete bc; - return -1; - } - bcfile->WriteTObject(bc); - bcfile->Close(); - delete bcfile; - cout << "New SSD bad channels map was saved in file " << bcfname.Data() << endl; - if (bc) delete bc; - return 0; -} - -//_________________________________________________________// -Bool_t readBCMap(const Char_t *filename, AliITSBadChannelsSSDv2*& bcl) { - // Reads Static Bad Channels Map from the file - TFile *bcfile; - if (!filename) { - cout << "No file name is specified for Static Bad Channels Map!\n"; - return kFALSE; - } - cout << "Reading SSD Bad Channels Map from the file " << filename << endl; - bcfile = new TFile(filename, "READ"); - if (bcfile->IsZombie()) { - cerr << "Error reading file " << filename << " with Static Bad Channels Map!\n"; - return kFALSE; - } - bcfile->GetObject("AliITSBadChannelsSSDv2;1", bcl); - if (!bcl) { - cout << "Error bcl == NULL!\n"; - bcfile->Close(); - delete bcfile; - return kFALSE; - } - bcfile->Close(); - delete bcfile; - return kTRUE; -} - -//_________________________________________________________// -Int_t addModuleBCMap(AliITSBadChannelsSSDv2 *bcl, - const Int_t EqId, const Int_t SlotId, const Int_t adc) { - // Add module to bad channels map. - const Char_t isbad = 3; - Int_t ddl, mn, modid; - AliRawReaderRoot *rwr = 0; - AliITSRawStreamSSDtmp *rst = 0; - rwr = new AliRawReaderRoot(); - rst = new AliITSRawStreamSSDtmp(rwr); - ddl = EqId & EQUIPMENTTODDLMASK; - mn = (SlotId - 1) * NUMBEROFSSDMODULESPERSLOT + (adc<8 ? adc : adc-2); - modid = rst->GetModId(ddl, mn); - modid -= MINSSDMODULEID; - if (modid < 0) return 0; - for (Int_t strind = 0; strind < AliITSModuleDaSSD::GetPNStripsPerModule(); strind++) { - bcl->AddBadChannelP(modid, strind, isbad); - bcl->AddBadChannelN(modid, strind, isbad); - } - delete rst; - delete rwr; - cout << "Module added: ModId = " << modid + MINSSDMODULEID << "; Ddl/Ad/Adc: " << ddl - << " / " << SlotId << " / " << adc << endl; - return 0; -} - -//_________________________________________________________// -Int_t addLadderBCMap(AliITSBadChannelsSSDv2 *bcl, - const Int_t EqId, const Int_t SlotId) { - // Add ladder to bad channels map. - for (Int_t adc = 0; adc < NUMBEROFSSDMODULESPERSLOT; adc++) - addModuleBCMap(bcl, EqId, SlotId, (adc<6 ? adc : adc+2)); - return 0; -} - -//_________________________________________________________// -Int_t addChannelBCMap(AliITSBadChannelsSSDv2 *bcl, - const Int_t EqId, const Int_t SlotId, - const Int_t adc, const Int_t strp) { - // Add strip to bad channels map. - const Char_t isbad = 3; - Int_t ddl, mn, modid; - AliRawReaderRoot *rwr = 0; - AliITSRawStreamSSDtmp *rst = 0; - rwr = new AliRawReaderRoot(); - rst = new AliITSRawStreamSSDtmp(rwr); - ddl = EqId & EQUIPMENTTODDLMASK; - mn = (SlotId - 1) * NUMBEROFSSDMODULESPERSLOT + (adc<8 ? adc : adc-2); - modid = rst->GetModId(ddl, mn); - modid -= MINSSDMODULEID; - if (modid < 0) { cout << "There is no module with given Equipment, Slot, adc.\n" ; return 0; } - if (strp < AliITSModuleDaSSD::GetPNStripsPerModule() ) { - bcl->AddBadChannelP(modid, strp, isbad); - } else { - bcl->AddBadChannelN(modid, (AliITSChannelDaSSD::GetMaxStripIdConst() - strp), isbad); - } - delete rst; - delete rwr; - cout << "Channel added (ModId/Ddl/Ad/Adc/Strip): " << modid + MINSSDMODULEID << " / " << ddl << " / " << SlotId - << " / " << adc << " / " << strp << endl; - return 0; -} - -//_________________________________________________________// -void Usage (void) { - //Usage function - cout << "Usage: PatchSSDBadChannelsMap(bc_fname /* can be \"\" */, EqipmentId, SlotId, adc /*optional*/, strip /*optional*/)\n"; -} - -//_______________________________________// -void drawBadChannelMapDAQDB(const char* filename) { - //Draws the 2D plots of the bad channels maps - const Int_t fgkSSDMODULES = 1698; - static const Int_t fgkDefaultNStripsSSD = 768; - gStyle->SetPalette(1,0); - - TH2F *fHistDAQDBPSideBadChannelMapLayer5 = new TH2F("fHistDAQDBPSideBadChannelMapLayer5", - "Layer 5;N_{module};N_{ladder}", - 22,1,23, - 34,500,534); - fHistDAQDBPSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); - fHistDAQDBPSideBadChannelMapLayer5->SetStats(kFALSE); - fHistDAQDBPSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); - fHistDAQDBPSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); - fHistDAQDBPSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); - fHistDAQDBPSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); - fHistDAQDBPSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); - fHistDAQDBPSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); - fHistDAQDBPSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); - - TH2F *fHistDAQDBNSideBadChannelMapLayer5 = new TH2F("fHistDAQDBNSideBadChannelMapLayer5", - "Layer 5;N_{module};N_{ladder}", - 22,1,23, - 34,500,534); - fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); - fHistDAQDBNSideBadChannelMapLayer5->SetStats(kFALSE); - fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); - fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); - fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); - fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); - fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); - fHistDAQDBNSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); - fHistDAQDBNSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); - - TH2F *fHistDAQDBPSideBadChannelMapLayer6 = new TH2F("fHistDAQDBPSideBadChannelMapLayer6", - "Layer 6;N_{module};N_{ladder}", - 25,1,26, - 38,600,638); - fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); - fHistDAQDBPSideBadChannelMapLayer6->SetStats(kFALSE); - fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); - fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); - fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); - fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); - fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); - fHistDAQDBPSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); - fHistDAQDBPSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); - - TH2F *fHistDAQDBNSideBadChannelMapLayer6 = new TH2F("fHistDAQDBNSideBadChannelMapLayer6", - "Layer 6;N_{module};N_{ladder}", - 25,1,26, - 38,600,638); - fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); - fHistDAQDBNSideBadChannelMapLayer6->SetStats(kFALSE); - fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); - fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); - fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); - fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); - fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); - fHistDAQDBNSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); - fHistDAQDBNSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); - - //===============================// - TFile *f = TFile::Open(filename); - if(!f) { - Printf("File poiter not valid"); - return; - } - - if(!f->IsOpen()) { - Printf("The file was not found"); - return; - } - //===============================// - - AliITSBadChannelsSSDv2 *badChannelsSSD = new AliITSBadChannelsSSDv2(); - badChannelsSSD = dynamic_cast(f->Get("AliITSBadChannelsSSDv2")); - - //_____________________________________________________________________________// - Int_t nPSideChannelsTotal = 0, nNSideChannelsTotal = 0; - Int_t nBadPSideChannelsTotal = 0, nBadNSideChannelsTotal = 0; - Int_t nBadPSideChannels = 0, nBadNSideChannels = 0; - Int_t layer = 0, ladder = 0, module = 0; - Int_t nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; - Int_t nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; - //_____________________________________________________________________________// - - for(Int_t i = 0; i < fgkSSDMODULES; i++) { - //for(Int_t i = 0; i < 1; i++) { - AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module); - nBadPSideChannels = 0, nBadNSideChannels = 0; - nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; - nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; - - Int_t badChannel = 0; - for(Int_t j = 0; j < fgkDefaultNStripsSSD; j++) { - badChannel = (Int_t)(badChannelsSSD->GetBadChannelP(i,j)); - //cout<<"Module: "<GetBadChannelN(i,j)); - //cout<<"Module: "< 0) - fHistDAQDBPSideBadChannelMapLayer5->Fill(module,499+ladder, - 100.*nPSideChannelsLayer5/fgkDefaultNStripsSSD); - else fHistDAQDBPSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001); - if(nNSideChannelsLayer5 > 0) - fHistDAQDBNSideBadChannelMapLayer5->Fill(module,499+ladder, - 100.*nNSideChannelsLayer5/fgkDefaultNStripsSSD); - else fHistDAQDBNSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001); - }//layer 5 - if(layer == 6) { - if(nPSideChannelsLayer6 > 0) - fHistDAQDBPSideBadChannelMapLayer6->Fill(module,599+ladder, - 100.*nPSideChannelsLayer6/fgkDefaultNStripsSSD); - else fHistDAQDBPSideBadChannelMapLayer6->Fill(module,599+ladder,0.0001); - if(nNSideChannelsLayer6 > 0) - fHistDAQDBNSideBadChannelMapLayer6->Fill(module,599+ladder, - 100.*nNSideChannelsLayer6/fgkDefaultNStripsSSD); - else fHistDAQDBNSideBadChannelMapLayer6->Fill(module,599+ladder,0.0001); - }//layer 6 - - nBadPSideChannelsTotal += nBadPSideChannels; - nBadNSideChannelsTotal += nBadNSideChannels; - nPSideChannelsTotal += fgkDefaultNStripsSSD; - nNSideChannelsTotal += fgkDefaultNStripsSSD; - } - - cout<<"================================="<SetHighLightColor(10); cBadChannelDAQDB->SetFillColor(10); - cBadChannelDAQDB->Divide(2,2); - - cBadChannelDAQDB->cd(1)->SetBottomMargin(.2); - cBadChannelDAQDB->cd(1)->SetLeftMargin(.15); - cBadChannelDAQDB->cd(1)->SetRightMargin(.2); - cBadChannelDAQDB->cd(1)->SetGridx(); cBadChannelDAQDB->cd(1)->SetGridy(); - cBadChannelDAQDB->cd(1); fHistDAQDBPSideBadChannelMapLayer5->Draw("colz"); - cBadChannelDAQDB->cd(2)->SetBottomMargin(.2); - cBadChannelDAQDB->cd(2)->SetLeftMargin(.15); - cBadChannelDAQDB->cd(2)->SetRightMargin(.2); - cBadChannelDAQDB->cd(2)->SetGridx(); cBadChannelDAQDB->cd(2)->SetGridy(); - cBadChannelDAQDB->cd(2); fHistDAQDBPSideBadChannelMapLayer6->Draw("colz"); - cBadChannelDAQDB->cd(3)->SetBottomMargin(.2); - cBadChannelDAQDB->cd(3)->SetLeftMargin(.15); - cBadChannelDAQDB->cd(3)->SetRightMargin(.2); - cBadChannelDAQDB->cd(3)->SetGridx(); cBadChannelDAQDB->cd(3)->SetGridy(); - cBadChannelDAQDB->cd(3); fHistDAQDBNSideBadChannelMapLayer5->Draw("colz"); - cBadChannelDAQDB->cd(4)->SetBottomMargin(.2); - cBadChannelDAQDB->cd(4)->SetLeftMargin(.15); - cBadChannelDAQDB->cd(4)->SetRightMargin(.2); - cBadChannelDAQDB->cd(4)->SetGridx(); cBadChannelDAQDB->cd(4)->SetGridy(); - cBadChannelDAQDB->cd(4); fHistDAQDBNSideBadChannelMapLayer6->Draw("colz"); - - return; -} +// +// Macro adds ether ladder, module or channel to the SSD bad channels map. +// Input parameter: file name with original SSD bad channels map (optional), +// equipment identifier (DDL), +// Slot number, ADC number (optional) and channel number (optional) +// Author: Oleksandr.Borysov@cern.ch +// + + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include "TStyle.h" +#include "TFile.h" +#include "TCanvas.h" +#include "TH2F.h" +#include "TString.h" +#include "AliLog.h" +#include "AliRawReaderRoot.h" +#include "AliITSRawStreamSSDv1.h" +#include "AliITSBadChannelsSSDv2.h" +#include "AliITSModuleDaSSD.h" +#include "AliITSHandleDaSSD.h" +#endif + + +#define EQUIPMENTTODDLMASK 0xFF +#define NUMBEROFSSDMODULESPERSLOT 12 +#define MAXSSDDDLID 15 +#define MINSSDMODULEID 500 + +Bool_t readBCMap(const Char_t *filename, AliITSBadChannelsSSDv2*& bcl); +Int_t addModuleBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId, const Int_t adc); +Int_t addLadderBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId); +Int_t addChannelBCMap(AliITSBadChannelsSSDv2 *bcl, const Int_t EqId, const Int_t SlotId, const Int_t adc, const Int_t strp); +void Usage (void); +void drawBadChannelMapDAQDB(const char* filename); + +//class gives an access to the protected array with SSD_DDL_Map in case the geometry is not initialized +class AliITSRawStreamSSDtmp : public AliITSRawStreamSSDv1 { +public: + AliITSRawStreamSSDtmp(AliRawReader* rawReader): AliITSRawStreamSSDv1(rawReader) { + Setv11HybridDDLMapping(); + AliInfo("Using SSD DDL Map initialized by AliITSRawStreamSSDv1::Setv11HybridDDLMapping()"); + } + virtual ~AliITSRawStreamSSDtmp() {}; + Int_t GetModId(Int_t iDDL, Int_t iModule) {return fgkDDLModuleMap[iDDL][iModule];} + ClassDef(AliITSRawStreamSSDtmp, 0) +}; + +//_________________________________________________________// +Int_t patchSSDBadChannelsMap(const Char_t *fname = 0, + const Int_t EqId = -1, + const Int_t SlotId = -1, + const Int_t adc = -1, + const Int_t strp = -1) { + //Macro to patch the bad channel list + TString bcfname, pathstr; + AliITSBadChannelsSSDv2 *bc = 0; + if (EqId < 0) { Usage(); cerr << "Equipment number (that is DDL) must be specified! Exit.\n"; return 0; } + else if ((EqId & EQUIPMENTTODDLMASK) > MAXSSDDDLID) { + cerr << "Icorrect equipment number (that is DDL)! Exit.\n"; + return -1; + } + if (SlotId < 1 || SlotId > 9) { + cerr << "Slot number must be specified (in the range 1 - 9)! Exit.\n"; + Usage(); + return -2; + } + if (!fname || fname[0]==0) { + cout << "File name with bad channels map is not specified, an empty map is used!\n"; + bc = new AliITSBadChannelsSSDv2(); + if (!bc) { cerr << "Error creating the AliITSBadChannelsSSDv2 object! Exit.\n"; return -1; } + pathstr = ""; + } + else { + pathstr.Form(fname); + if (!readBCMap(fname, bc)) { + cerr << "Error reading file " << fname << " with Static Bad Channels Map! Exit.\n"; + return -3; + } + } + if (adc < 0) addLadderBCMap(bc, EqId, SlotId); + else if ((adc < 6) || (adc > 7 && (adc - 2) < NUMBEROFSSDMODULESPERSLOT) ) { + if (strp < 0) addModuleBCMap(bc, EqId, SlotId, adc); + else if (strp < AliITSModuleDaSSD::GetStripsPerModuleConst()) addChannelBCMap(bc, EqId, SlotId, adc, strp); + else { + cerr << "Incorrect number for Strip. Exit\n"; + Usage(); + if (bc) delete bc; + return -5; + } + } + else { + cerr << "Incorrect number for ADC. Exit\n"; + if (bc) delete bc; + return -4; + } + bcfname = pathstr(0, pathstr.Last('/')+1); + bcfname.Append(Form("ssdbcmap_%i.root", time(NULL))); + TFile *bcfile = new TFile (bcfname.Data(),"RECREATE"); + if (bcfile->IsZombie()) { + cerr << "Error open file " << bcfname.Data() << " for writing new bad channels map!\n"; + if (bc) delete bc; + return -1; + } + bcfile->WriteTObject(bc); + bcfile->Close(); + delete bcfile; + cout << "New SSD bad channels map was saved in file " << bcfname.Data() << endl; + if (bc) delete bc; + return 0; +} + +//_________________________________________________________// +Bool_t readBCMap(const Char_t *filename, AliITSBadChannelsSSDv2*& bcl) { + // Reads Static Bad Channels Map from the file + TFile *bcfile; + if (!filename) { + cout << "No file name is specified for Static Bad Channels Map!\n"; + return kFALSE; + } + cout << "Reading SSD Bad Channels Map from the file " << filename << endl; + bcfile = new TFile(filename, "READ"); + if (bcfile->IsZombie()) { + cerr << "Error reading file " << filename << " with Static Bad Channels Map!\n"; + return kFALSE; + } + bcfile->GetObject("AliITSBadChannelsSSDv2;1", bcl); + if (!bcl) { + cout << "Error bcl == NULL!\n"; + bcfile->Close(); + delete bcfile; + return kFALSE; + } + bcfile->Close(); + delete bcfile; + return kTRUE; +} + +//_________________________________________________________// +Int_t addModuleBCMap(AliITSBadChannelsSSDv2 *bcl, + const Int_t EqId, const Int_t SlotId, const Int_t adc) { + // Add module to bad channels map. + const Char_t isbad = 3; + Int_t ddl, mn, modid; + AliRawReaderRoot *rwr = 0; + AliITSRawStreamSSDtmp *rst = 0; + rwr = new AliRawReaderRoot(); + rst = new AliITSRawStreamSSDtmp(rwr); + ddl = EqId & EQUIPMENTTODDLMASK; + mn = (SlotId - 1) * NUMBEROFSSDMODULESPERSLOT + (adc<8 ? adc : adc-2); + modid = rst->GetModId(ddl, mn); + modid -= MINSSDMODULEID; + if (modid < 0) return 0; + for (Int_t strind = 0; strind < AliITSModuleDaSSD::GetPNStripsPerModule(); strind++) { + bcl->AddBadChannelP(modid, strind, isbad); + bcl->AddBadChannelN(modid, strind, isbad); + } + delete rst; + delete rwr; + cout << "Module added: ModId = " << modid + MINSSDMODULEID << "; Ddl/Ad/Adc: " << ddl + << " / " << SlotId << " / " << adc << endl; + return 0; +} + +//_________________________________________________________// +Int_t addLadderBCMap(AliITSBadChannelsSSDv2 *bcl, + const Int_t EqId, const Int_t SlotId) { + // Add ladder to bad channels map. + for (Int_t adc = 0; adc < NUMBEROFSSDMODULESPERSLOT; adc++) + addModuleBCMap(bcl, EqId, SlotId, (adc<6 ? adc : adc+2)); + return 0; +} + +//_________________________________________________________// +Int_t addChannelBCMap(AliITSBadChannelsSSDv2 *bcl, + const Int_t EqId, const Int_t SlotId, + const Int_t adc, const Int_t strp) { + // Add strip to bad channels map. + const Char_t isbad = 3; + Int_t ddl, mn, modid; + AliRawReaderRoot *rwr = 0; + AliITSRawStreamSSDtmp *rst = 0; + rwr = new AliRawReaderRoot(); + rst = new AliITSRawStreamSSDtmp(rwr); + ddl = EqId & EQUIPMENTTODDLMASK; + mn = (SlotId - 1) * NUMBEROFSSDMODULESPERSLOT + (adc<8 ? adc : adc-2); + modid = rst->GetModId(ddl, mn); + modid -= MINSSDMODULEID; + if (modid < 0) { cout << "There is no module with given Equipment, Slot, adc.\n" ; return 0; } + if (strp < AliITSModuleDaSSD::GetPNStripsPerModule() ) { + bcl->AddBadChannelP(modid, strp, isbad); + } else { + bcl->AddBadChannelN(modid, (AliITSChannelDaSSD::GetMaxStripIdConst() - strp), isbad); + } + delete rst; + delete rwr; + cout << "Channel added (ModId/Ddl/Ad/Adc/Strip): " << modid + MINSSDMODULEID << " / " << ddl << " / " << SlotId + << " / " << adc << " / " << strp << endl; + return 0; +} + +//_________________________________________________________// +void Usage (void) { + //Usage function + cout << "Usage: PatchSSDBadChannelsMap(bc_fname /* can be \"\" */, EqipmentId, SlotId, adc /*optional*/, strip /*optional*/)\n"; +} + +//_______________________________________// +void drawBadChannelMapDAQDB(const char* filename) { + //Draws the 2D plots of the bad channels maps + const Int_t fgkSSDMODULES = 1698; + static const Int_t fgkDefaultNStripsSSD = 768; + gStyle->SetPalette(1,0); + + TH2F *fHistDAQDBPSideBadChannelMapLayer5 = new TH2F("fHistDAQDBPSideBadChannelMapLayer5", + "Layer 5;N_{module};N_{ladder}", + 22,1,23, + 34,500,534); + fHistDAQDBPSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); + fHistDAQDBPSideBadChannelMapLayer5->SetStats(kFALSE); + fHistDAQDBPSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); + fHistDAQDBPSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); + fHistDAQDBPSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); + fHistDAQDBPSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); + fHistDAQDBPSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); + fHistDAQDBPSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); + fHistDAQDBPSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); + + TH2F *fHistDAQDBNSideBadChannelMapLayer5 = new TH2F("fHistDAQDBNSideBadChannelMapLayer5", + "Layer 5;N_{module};N_{ladder}", + 22,1,23, + 34,500,534); + fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetTitleColor(1); + fHistDAQDBNSideBadChannelMapLayer5->SetStats(kFALSE); + fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetTitleOffset(1.8); + fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetNdivisions(22); + fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetNdivisions(34); + fHistDAQDBNSideBadChannelMapLayer5->GetXaxis()->SetLabelSize(0.03); + fHistDAQDBNSideBadChannelMapLayer5->GetYaxis()->SetLabelSize(0.03); + fHistDAQDBNSideBadChannelMapLayer5->GetZaxis()->SetTitleOffset(1.6); + fHistDAQDBNSideBadChannelMapLayer5->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); + + TH2F *fHistDAQDBPSideBadChannelMapLayer6 = new TH2F("fHistDAQDBPSideBadChannelMapLayer6", + "Layer 6;N_{module};N_{ladder}", + 25,1,26, + 38,600,638); + fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); + fHistDAQDBPSideBadChannelMapLayer6->SetStats(kFALSE); + fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); + fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); + fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); + fHistDAQDBPSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); + fHistDAQDBPSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); + fHistDAQDBPSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); + fHistDAQDBPSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (p-side)[%]"); + + TH2F *fHistDAQDBNSideBadChannelMapLayer6 = new TH2F("fHistDAQDBNSideBadChannelMapLayer6", + "Layer 6;N_{module};N_{ladder}", + 25,1,26, + 38,600,638); + fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetTitleColor(1); + fHistDAQDBNSideBadChannelMapLayer6->SetStats(kFALSE); + fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetTitleOffset(1.8); + fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetNdivisions(25); + fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetNdivisions(38); + fHistDAQDBNSideBadChannelMapLayer6->GetXaxis()->SetLabelSize(0.03); + fHistDAQDBNSideBadChannelMapLayer6->GetYaxis()->SetLabelSize(0.03); + fHistDAQDBNSideBadChannelMapLayer6->GetZaxis()->SetTitleOffset(1.6); + fHistDAQDBNSideBadChannelMapLayer6->GetZaxis()->SetTitle("Bad channels (n-side)[%]"); + + //===============================// + TFile *f = TFile::Open(filename); + if(!f) { + Printf("File poiter not valid"); + return; + } + + if(!f->IsOpen()) { + Printf("The file was not found"); + return; + } + //===============================// + + AliITSBadChannelsSSDv2 *badChannelsSSD = new AliITSBadChannelsSSDv2(); + badChannelsSSD = dynamic_cast(f->Get("AliITSBadChannelsSSDv2")); + + //_____________________________________________________________________________// + Int_t nPSideChannelsTotal = 0, nNSideChannelsTotal = 0; + Int_t nBadPSideChannelsTotal = 0, nBadNSideChannelsTotal = 0; + Int_t nBadPSideChannels = 0, nBadNSideChannels = 0; + Int_t layer = 0, ladder = 0, module = 0; + Int_t nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; + Int_t nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; + //_____________________________________________________________________________// + + for(Int_t i = 0; i < fgkSSDMODULES; i++) { + //for(Int_t i = 0; i < 1; i++) { + AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module); + nBadPSideChannels = 0, nBadNSideChannels = 0; + nPSideChannelsLayer5 = 0, nNSideChannelsLayer5 = 0; + nPSideChannelsLayer6 = 0, nNSideChannelsLayer6 = 0; + + Int_t badChannel = 0; + for(Int_t j = 0; j < fgkDefaultNStripsSSD; j++) { + badChannel = (Int_t)(badChannelsSSD->GetBadChannelP(i,j)); + //cout<<"Module: "<GetBadChannelN(i,j)); + //cout<<"Module: "< 0) + fHistDAQDBPSideBadChannelMapLayer5->Fill(module,499+ladder, + 100.*nPSideChannelsLayer5/fgkDefaultNStripsSSD); + else fHistDAQDBPSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001); + if(nNSideChannelsLayer5 > 0) + fHistDAQDBNSideBadChannelMapLayer5->Fill(module,499+ladder, + 100.*nNSideChannelsLayer5/fgkDefaultNStripsSSD); + else fHistDAQDBNSideBadChannelMapLayer5->Fill(module,499+ladder,0.0001); + }//layer 5 + if(layer == 6) { + if(nPSideChannelsLayer6 > 0) + fHistDAQDBPSideBadChannelMapLayer6->Fill(module,599+ladder, + 100.*nPSideChannelsLayer6/fgkDefaultNStripsSSD); + else fHistDAQDBPSideBadChannelMapLayer6->Fill(module,599+ladder,0.0001); + if(nNSideChannelsLayer6 > 0) + fHistDAQDBNSideBadChannelMapLayer6->Fill(module,599+ladder, + 100.*nNSideChannelsLayer6/fgkDefaultNStripsSSD); + else fHistDAQDBNSideBadChannelMapLayer6->Fill(module,599+ladder,0.0001); + }//layer 6 + + nBadPSideChannelsTotal += nBadPSideChannels; + nBadNSideChannelsTotal += nBadNSideChannels; + nPSideChannelsTotal += fgkDefaultNStripsSSD; + nNSideChannelsTotal += fgkDefaultNStripsSSD; + } + + cout<<"================================="<SetHighLightColor(10); cBadChannelDAQDB->SetFillColor(10); + cBadChannelDAQDB->Divide(2,2); + + cBadChannelDAQDB->cd(1)->SetBottomMargin(.2); + cBadChannelDAQDB->cd(1)->SetLeftMargin(.15); + cBadChannelDAQDB->cd(1)->SetRightMargin(.2); + cBadChannelDAQDB->cd(1)->SetGridx(); cBadChannelDAQDB->cd(1)->SetGridy(); + cBadChannelDAQDB->cd(1); fHistDAQDBPSideBadChannelMapLayer5->Draw("colz"); + cBadChannelDAQDB->cd(2)->SetBottomMargin(.2); + cBadChannelDAQDB->cd(2)->SetLeftMargin(.15); + cBadChannelDAQDB->cd(2)->SetRightMargin(.2); + cBadChannelDAQDB->cd(2)->SetGridx(); cBadChannelDAQDB->cd(2)->SetGridy(); + cBadChannelDAQDB->cd(2); fHistDAQDBPSideBadChannelMapLayer6->Draw("colz"); + cBadChannelDAQDB->cd(3)->SetBottomMargin(.2); + cBadChannelDAQDB->cd(3)->SetLeftMargin(.15); + cBadChannelDAQDB->cd(3)->SetRightMargin(.2); + cBadChannelDAQDB->cd(3)->SetGridx(); cBadChannelDAQDB->cd(3)->SetGridy(); + cBadChannelDAQDB->cd(3); fHistDAQDBNSideBadChannelMapLayer5->Draw("colz"); + cBadChannelDAQDB->cd(4)->SetBottomMargin(.2); + cBadChannelDAQDB->cd(4)->SetLeftMargin(.15); + cBadChannelDAQDB->cd(4)->SetRightMargin(.2); + cBadChannelDAQDB->cd(4)->SetGridx(); cBadChannelDAQDB->cd(4)->SetGridy(); + cBadChannelDAQDB->cd(4); fHistDAQDBNSideBadChannelMapLayer6->Draw("colz"); + + return; +} diff --git a/LHAPDF/PDFsets/MRST2004qed.LHgrid b/LHAPDF/PDFsets/MRST2004qed.LHgrid index 1771ee170aa..f1bd4b76ffb 100644 --- a/LHAPDF/PDFsets/MRST2004qed.LHgrid +++ b/LHAPDF/PDFsets/MRST2004qed.LHgrid @@ -3574,1780 +3574,1780 @@ 0.00006 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00165 0.00877 -7.41955 0.94922 0.00000 0.00000 0.40370 0.94925 0.01792 - 0.00171 0.00893 -6.96080 0.93272 0.00000 0.00000 0.39336 0.93277 0.01985 - 0.00180 0.00916 -5.65897 0.93393 0.00602 0.00000 0.40314 0.93402 0.02302 - 0.00186 0.00933 -4.25763 0.95317 0.03030 0.00000 0.42822 0.95328 0.02566 - 0.00193 0.00950 -2.30613 0.99137 0.07782 0.00000 0.47227 0.99150 0.02882 - 0.00199 0.00964 -0.19230 1.03930 0.13260 0.00000 0.52507 1.03946 0.03191 - 0.00205 0.00978 2.19572 1.09752 0.19749 0.00000 0.58781 1.09770 0.03522 - 0.00211 0.00993 5.35676 1.17970 0.28641 0.00000 0.67463 1.17991 0.03935 - 0.00217 0.01006 8.53863 1.26501 0.37742 0.00000 0.76384 1.26524 0.04342 - 0.00222 0.01018 11.88903 1.35626 0.47406 0.00000 0.85877 1.35652 0.04767 - 0.00226 0.01028 14.95917 1.44154 0.56350 0.00000 0.94690 1.44183 0.05154 - 0.00236 0.01049 22.12828 1.64722 0.77780 0.06739 1.15847 1.64757 0.06079 - 0.00244 0.01066 29.07692 1.85617 0.99388 0.26238 1.37229 1.85659 0.07037 - 0.00253 0.01086 37.85941 2.12502 1.27045 0.55136 1.64642 2.12554 0.08297 - 0.00263 0.01107 48.29454 2.44606 1.59930 0.88292 1.97281 2.44671 0.09856 - 0.00272 0.01126 58.90303 2.77438 1.93451 1.22238 2.30585 2.77518 0.11517 - 0.00281 0.01144 70.71288 3.14200 2.30891 1.60056 2.67815 3.14299 0.13450 - 0.00288 0.01160 81.40970 3.47673 2.64916 1.94398 3.01668 3.47792 0.15279 - 0.00298 0.01179 95.71258 3.92737 3.10635 2.40493 3.47187 3.92884 0.17865 - 0.00307 0.01196 109.33872 4.35931 3.54399 2.84586 3.90781 4.36109 0.20454 - 0.00314 0.01212 122.38039 4.77436 3.96418 3.26900 4.32646 4.77645 0.23008 - 0.00325 0.01232 140.67477 5.36183 4.55810 3.86663 4.91852 5.36442 0.26845 - 0.00335 0.01251 159.11937 5.95882 5.16109 4.47305 5.51982 5.96199 0.30947 - 0.00344 0.01269 177.24240 6.54904 5.75687 5.07199 6.11408 6.55282 0.35158 - 0.00353 0.01286 196.48404 7.18040 6.39375 5.71199 6.74949 7.18489 0.39867 - 0.00363 0.01304 216.66423 7.84899 7.06774 6.38900 7.42213 7.85433 0.45140 - 0.00372 0.01321 236.19945 8.49906 7.72289 7.04697 8.07604 8.50527 0.50394 - 0.00380 0.01336 256.03580 9.16647 8.39512 7.72184 8.74719 9.17367 0.56121 - 0.00389 0.01352 276.34848 9.85309 9.08657 8.41591 9.43759 9.86135 0.62162 - 0.00398 0.01368 297.43427 10.57239 9.81067 9.14256 10.16073 10.58186 0.68799 - 0.00406 0.01383 318.00177 11.27822 10.52109 9.85538 10.87029 11.28895 0.75518 - 0.00414 0.01398 338.36890 11.98319 11.23045 10.56699 11.57890 11.99527 0.82521 - 0.00423 0.01412 359.18814 12.70682 11.95852 11.29732 12.30625 12.72035 0.89864 - 0.00431 0.01427 380.91580 13.47043 12.72663 12.06764 13.07374 13.48562 0.98042 - 0.00439 0.01440 401.44901 14.19206 13.45252 12.79561 13.79904 14.20883 1.05770 - 0.00446 0.01454 422.47116 14.94264 14.20734 13.55240 14.55344 14.96127 1.14442 - 0.00454 0.01467 443.57132 15.69608 14.96502 14.31206 15.31069 15.71657 1.23150 - 0.00231 0.01065 -5.64439 0.79036 0.00000 0.00000 0.34217 0.79038 0.01759 - 0.00241 0.01087 -5.06609 0.78565 0.00000 0.00000 0.34250 0.78568 0.01925 - 0.00257 0.01118 -3.65938 0.80080 0.00734 0.00000 0.36465 0.80086 0.02200 - 0.00268 0.01141 -2.25695 0.82733 0.03560 0.00000 0.39597 0.82741 0.02429 - 0.00280 0.01165 -0.38780 0.87017 0.08694 0.00000 0.44359 0.87026 0.02704 - 0.00290 0.01186 1.58011 0.91941 0.14189 0.00000 0.49681 0.91952 0.02972 - 0.00300 0.01205 3.75866 0.97654 0.20471 0.00000 0.55763 0.97666 0.03259 - 0.00311 0.01226 6.56973 1.05355 0.28745 0.00000 0.63843 1.05370 0.03616 - 0.00321 0.01244 9.35004 1.13142 0.37017 0.00000 0.71949 1.13159 0.03967 - 0.00330 0.01261 12.24682 1.21350 0.45683 0.00000 0.80458 1.21369 0.04331 - 0.00337 0.01275 14.85951 1.28867 0.53554 0.00000 0.88208 1.28889 0.04661 - 0.00353 0.01304 20.87675 1.46715 0.72134 0.05786 1.06537 1.46742 0.05445 - 0.00366 0.01330 26.59679 1.64491 0.90517 0.22422 1.24711 1.64524 0.06250 - 0.00382 0.01358 33.71036 1.86992 1.13675 0.46767 1.47645 1.87033 0.07300 - 0.00398 0.01387 42.03045 2.13435 1.40783 0.74217 1.74525 2.13489 0.08585 - 0.00413 0.01414 50.36721 2.40102 1.68036 1.01933 2.01579 2.40169 0.09942 - 0.00429 0.01441 59.53029 2.69605 1.98116 1.32433 2.31465 2.69689 0.11507 - 0.00441 0.01464 67.73470 2.96185 2.25165 1.59830 2.58356 2.96285 0.12977 - 0.00457 0.01491 78.56003 3.31540 2.61079 1.96158 2.94085 3.31666 0.15035 - 0.00471 0.01516 88.76070 3.65100 2.95124 2.30562 3.27972 3.65252 0.17079 - 0.00484 0.01538 98.45683 3.97152 3.27613 2.63375 3.60319 3.97331 0.19087 - 0.00501 0.01567 111.86504 4.41955 3.72964 3.09131 4.05498 4.42177 0.22074 - 0.00517 0.01594 125.23028 4.87037 4.18556 3.55096 4.50933 4.87307 0.25238 - 0.00532 0.01619 138.25191 5.31283 4.63275 4.00159 4.95510 5.31606 0.28468 - 0.00548 0.01645 151.94034 5.78213 5.10674 4.47897 5.42773 5.78595 0.32054 - 0.00563 0.01670 166.12743 6.27411 5.60330 4.97880 5.92302 6.27863 0.36035 - 0.00577 0.01694 179.78935 6.75035 6.08383 5.46238 6.40239 6.75558 0.39987 - 0.00591 0.01717 193.48709 7.23407 6.57164 5.95303 6.88916 7.24011 0.44257 - 0.00605 0.01740 207.44412 7.72962 7.07127 6.45548 7.38779 7.73653 0.48744 - 0.00619 0.01763 221.78873 8.24444 7.59014 6.97709 7.90573 8.25233 0.53639 - 0.00633 0.01785 235.69527 8.74701 8.09657 7.48610 8.41131 8.75591 0.58572 - 0.00646 0.01806 249.34453 9.24525 8.59851 7.99046 8.91251 9.25524 0.63683 - 0.00659 0.01827 263.23978 9.75493 9.11191 8.50627 9.42519 9.76606 0.69026 - 0.00672 0.01848 277.58252 10.28785 9.64860 9.04533 9.96125 10.30031 0.74930 - 0.00684 0.01868 291.13684 10.79148 10.15579 9.55475 10.46783 10.80519 0.80510 - 0.00696 0.01887 304.80533 11.30876 10.67658 10.07765 10.98816 11.32392 0.86706 - 0.00709 0.01906 318.52350 11.82796 11.19932 10.60249 11.51042 11.84459 0.92928 - 0.00303 0.01275 -4.26998 0.66502 0.00000 0.00000 0.29285 0.66503 0.01724 - 0.00319 0.01304 -3.62684 0.66820 0.00000 0.00000 0.30016 0.66822 0.01867 - 0.00342 0.01345 -2.20207 0.69157 0.00783 0.00000 0.32927 0.69160 0.02106 - 0.00358 0.01375 -0.85788 0.72139 0.03724 0.00000 0.36300 0.72143 0.02305 - 0.00376 0.01407 0.87241 0.76490 0.08843 0.00000 0.41043 0.76495 0.02543 - 0.00392 0.01434 2.65124 0.81231 0.14063 0.00000 0.46110 0.81237 0.02775 - 0.00407 0.01460 4.58644 0.86560 0.19881 0.00000 0.51742 0.86568 0.03023 - 0.00423 0.01487 7.02841 0.93510 0.27318 0.00000 0.59002 0.93519 0.03329 - 0.00437 0.01511 9.40649 1.00395 0.34618 0.00000 0.66149 1.00406 0.03628 - 0.00450 0.01534 11.86094 1.07570 0.42184 0.00000 0.73570 1.07582 0.03938 - 0.00461 0.01552 14.04331 1.14033 0.48949 0.00000 0.80224 1.14047 0.04216 - 0.00484 0.01591 19.00772 1.29181 0.64723 0.04874 0.95766 1.29200 0.04875 - 0.00505 0.01625 23.64480 1.44020 0.80079 0.18812 1.10932 1.44044 0.05545 - 0.00528 0.01663 29.32796 1.62543 0.99164 0.38993 1.29809 1.62574 0.06411 - 0.00552 0.01702 35.88184 1.84015 1.21203 0.61407 1.51640 1.84056 0.07462 - 0.00574 0.01738 42.36456 2.05408 1.43097 0.83767 1.73350 2.05461 0.08562 - 0.00597 0.01774 49.40945 2.28832 1.67014 1.08113 1.97088 2.28899 0.09821 - 0.00616 0.01805 55.65322 2.49742 1.88324 1.29777 2.18253 2.49823 0.10994 - 0.00639 0.01842 63.79639 2.77268 2.16327 1.58200 2.46085 2.77371 0.12625 - 0.00660 0.01875 71.39709 3.03178 2.42651 1.84888 2.72263 3.03303 0.14232 - 0.00679 0.01905 78.57859 3.27794 2.67641 2.10206 2.97122 3.27941 0.15805 - 0.00703 0.01944 88.38807 3.61836 3.02151 2.45125 3.31472 3.62020 0.18123 - 0.00727 0.01981 98.07211 3.95804 3.36554 2.79905 3.65730 3.96028 0.20562 - 0.00749 0.02015 107.43998 4.28939 3.70091 3.13789 3.99135 4.29205 0.23038 - 0.00772 0.02050 117.20490 4.63830 4.05381 3.49421 4.34298 4.64146 0.25771 - 0.00794 0.02084 127.22639 5.00099 4.42041 3.86409 4.70839 5.00472 0.28783 - 0.00815 0.02117 136.83496 5.35078 4.77385 4.22059 5.06073 5.35509 0.31764 - 0.00835 0.02148 146.36813 5.70292 5.12945 4.57904 5.41535 5.70788 0.34960 - 0.00856 0.02179 156.04271 6.06241 5.49240 4.94483 5.77735 6.06806 0.38308 - 0.00876 0.02210 165.90488 6.43331 5.86673 5.32190 6.15079 6.43975 0.41940 - 0.00895 0.02240 175.41891 6.79387 6.23055 5.68830 6.51380 6.80112 0.45587 - 0.00914 0.02268 184.68965 7.14917 6.58896 6.04912 6.87148 7.15728 0.49345 - 0.00933 0.02297 194.09682 7.51160 6.95453 6.41711 7.23634 7.52062 0.53265 - 0.00952 0.02326 203.72124 7.88776 7.33385 6.79879 7.61502 7.89782 0.57570 - 0.00970 0.02353 212.81657 8.24324 7.69231 7.15948 7.97287 8.25429 0.61639 - 0.00987 0.02379 221.87881 8.60468 8.05669 7.52595 8.33675 8.61686 0.66118 - 0.01005 0.02405 230.97339 8.96745 8.42241 7.89377 8.70196 8.98077 0.70616 - 0.00369 0.01428 -3.58123 0.60177 0.00000 0.00000 0.26769 0.60177 0.01703 - 0.00389 0.01462 -2.91479 0.60848 0.00000 0.00000 0.27807 0.60848 0.01835 - 0.00418 0.01512 -1.50079 0.63514 0.00791 0.00000 0.30983 0.63515 0.02054 - 0.00440 0.01548 -0.20344 0.66590 0.03734 0.00000 0.34406 0.66591 0.02237 - 0.00463 0.01586 1.43572 0.70890 0.08755 0.00000 0.39054 0.70892 0.02456 - 0.00483 0.01618 3.09877 0.75459 0.13756 0.00000 0.43913 0.75462 0.02668 - 0.00502 0.01649 4.89029 0.80517 0.19260 0.00000 0.49239 0.80520 0.02894 - 0.00523 0.01683 7.12218 0.86998 0.26185 0.00000 0.55994 0.87002 0.03173 - 0.00541 0.01711 9.27623 0.93349 0.32914 0.00000 0.62578 0.93354 0.03445 - 0.00558 0.01739 11.48718 0.99926 0.39847 0.00000 0.69373 0.99932 0.03725 - 0.00572 0.01761 13.43650 1.05795 0.45992 0.00000 0.75412 1.05804 0.03976 - 0.00602 0.01809 17.83825 1.19453 0.60220 0.04378 0.89420 1.19465 0.04569 - 0.00627 0.01849 21.90649 1.32705 0.73944 0.16857 1.02961 1.32721 0.05168 - 0.00656 0.01895 26.84845 1.49113 0.90864 0.34814 1.19684 1.49136 0.05938 - 0.00687 0.01943 32.49876 1.67980 1.10248 0.54582 1.38869 1.68012 0.06866 - 0.00715 0.01986 38.04362 1.86643 1.29367 0.74163 1.57814 1.86685 0.07833 - 0.00744 0.02030 44.02737 2.06952 1.50125 0.95347 1.78400 2.07006 0.08935 - 0.00768 0.02067 49.29725 2.24979 1.68517 1.14091 1.96654 2.25046 0.09958 - 0.00797 0.02112 56.12104 2.48564 1.92536 1.38526 2.20511 2.48650 0.11372 - 0.00823 0.02152 62.45283 2.70650 2.15000 1.61352 2.42835 2.70756 0.12760 - 0.00847 0.02189 68.41299 2.91567 2.36257 1.82934 2.63967 2.91693 0.14114 - 0.00878 0.02236 76.49198 3.20305 2.65422 2.12503 2.92979 3.20463 0.16100 - 0.00908 0.02281 84.41979 3.48834 2.94347 2.41801 3.21765 3.49028 0.18180 - 0.00936 0.02323 92.05459 3.76558 3.22437 2.70234 3.49729 3.76789 0.20285 - 0.00964 0.02365 99.97098 4.05622 3.51865 2.99999 3.79034 4.05897 0.22600 - 0.00991 0.02407 108.04546 4.35679 3.82276 3.30735 4.09331 4.36004 0.25140 - 0.01018 0.02446 115.76609 4.64600 4.11529 3.60290 4.38478 4.64975 0.27648 - 0.01043 0.02484 123.37582 4.93555 4.40798 3.89841 4.67653 4.93987 0.30326 - 0.01068 0.02522 131.07903 5.23053 4.70610 4.19932 4.97372 5.23546 0.33126 - 0.01094 0.02560 138.89120 5.53358 5.01225 4.50818 5.27900 5.53919 0.36152 - 0.01118 0.02595 146.40451 5.82741 5.30904 4.80751 5.57499 5.83372 0.39184 - 0.01141 0.02630 153.69235 6.11587 5.60031 5.10116 5.86555 6.12293 0.42300 - 0.01164 0.02664 161.07246 6.40962 5.89690 5.40012 6.16144 6.41747 0.45544 - 0.01187 0.02699 168.58098 6.71311 6.20323 5.70877 6.46713 6.72185 0.49094 - 0.01210 0.02732 175.67674 6.99991 6.49272 6.00046 6.75601 7.00950 0.52449 - 0.01231 0.02764 182.69348 7.28970 6.78516 6.29495 7.04793 7.30027 0.56124 - 0.01253 0.02796 189.73497 7.58056 7.07866 6.59052 7.34092 7.59210 0.59813 - 0.00428 0.01551 -3.13558 0.56073 0.00000 0.00000 0.25126 0.56072 0.01688 - 0.00452 0.01590 -2.45785 0.56955 0.00000 0.00000 0.26344 0.56954 0.01812 - 0.00488 0.01648 -1.05874 0.59802 0.00791 0.00000 0.29658 0.59800 0.02019 - 0.00514 0.01689 0.20142 0.62910 0.03712 0.00000 0.33085 0.62909 0.02191 - 0.00541 0.01732 1.77349 0.67145 0.08636 0.00000 0.37639 0.67144 0.02397 - 0.00565 0.01770 3.35387 0.71574 0.13466 0.00000 0.42334 0.71573 0.02596 - 0.00588 0.01806 5.04458 0.76426 0.18737 0.00000 0.47432 0.76426 0.02808 - 0.00612 0.01844 7.13183 0.82571 0.25297 0.00000 0.53829 0.82571 0.03069 - 0.00634 0.01877 9.13337 0.88549 0.31628 0.00000 0.60019 0.88550 0.03321 - 0.00655 0.01909 11.17960 0.94711 0.38124 0.00000 0.66382 0.94713 0.03582 - 0.00671 0.01935 12.97266 1.00176 0.43846 0.00000 0.72002 1.00179 0.03815 - 0.00707 0.01989 16.99991 1.12826 0.57029 0.04044 0.84972 1.12832 0.04363 - 0.00737 0.02036 20.69313 1.25015 0.69661 0.15547 0.97428 1.25025 0.04915 - 0.00772 0.02089 25.15015 1.40021 0.85145 0.32025 1.12721 1.40036 0.05622 - 0.00808 0.02144 30.21347 1.57173 1.02782 0.50050 1.30166 1.57196 0.06470 - 0.00841 0.02194 35.15289 1.74051 1.20087 0.67810 1.47302 1.74084 0.07351 - 0.00875 0.02245 40.45525 1.92333 1.38789 0.86934 1.65839 1.92377 0.08350 - 0.00903 0.02287 45.10269 2.08494 1.55292 1.03785 1.82208 2.08550 0.09275 - 0.00938 0.02339 51.08764 2.29539 1.76744 1.25649 2.03503 2.29612 0.10548 - 0.00969 0.02386 56.61605 2.49173 1.96731 1.45992 2.23355 2.49264 0.11795 - 0.00997 0.02428 61.80496 2.67721 2.15598 1.65180 2.42101 2.67830 0.13009 - 0.01033 0.02482 68.79691 2.93080 2.41356 1.91338 2.67710 2.93218 0.14781 - 0.01068 0.02534 75.62598 3.18157 2.66803 2.17154 2.93023 3.18328 0.16632 - 0.01100 0.02582 82.17973 3.42457 2.91445 2.42134 3.17542 3.42661 0.18501 - 0.01133 0.02630 88.94697 3.67845 3.17173 2.68194 3.43151 3.68088 0.20550 - 0.01166 0.02678 95.81590 3.93995 3.43654 2.94995 3.69520 3.94284 0.22791 - 0.01196 0.02724 102.36956 4.19112 3.69082 3.20722 3.94845 4.19447 0.25001 - 0.01226 0.02767 108.79523 4.44154 3.94416 3.46333 4.20087 4.44540 0.27352 - 0.01255 0.02811 115.28679 4.69622 4.20178 3.72369 4.45758 4.70063 0.29806 - 0.01285 0.02854 121.84296 4.95700 4.46545 3.99004 4.72040 4.96203 0.32452 - 0.01313 0.02895 128.13271 5.20935 4.72055 4.24764 4.97472 5.21501 0.35098 - 0.01339 0.02935 134.21120 5.45635 4.97017 4.49960 5.22363 5.46268 0.37812 - 0.01366 0.02974 140.35652 5.70756 5.22401 4.75578 5.47678 5.71459 0.40633 - 0.01394 0.03014 146.58034 5.96614 5.48524 5.01929 5.73737 5.97398 0.43712 - 0.01419 0.03052 152.46202 6.21051 5.73211 5.26832 5.98363 6.21911 0.46621 - 0.01444 0.03088 158.24219 6.45622 5.98027 5.51850 6.23127 6.46568 0.49796 - 0.01469 0.03125 164.04256 6.70282 6.22932 5.76958 6.47980 6.71315 0.52982 - 0.00476 0.01651 -2.81946 0.53148 0.00000 0.00000 0.23946 0.53147 0.01676 - 0.00503 0.01694 -2.13658 0.54166 0.00000 0.00000 0.25279 0.54164 0.01795 - 0.00544 0.01758 -0.75426 0.57114 0.00785 0.00000 0.28664 0.57112 0.01992 - 0.00574 0.01803 0.47399 0.60223 0.03673 0.00000 0.32071 0.60220 0.02157 - 0.00605 0.01852 1.99173 0.64386 0.08500 0.00000 0.36532 0.64383 0.02353 - 0.00632 0.01893 3.50695 0.68691 0.13184 0.00000 0.41085 0.68687 0.02542 - 0.00658 0.01933 5.11944 0.73372 0.18264 0.00000 0.45996 0.73369 0.02744 - 0.00686 0.01975 7.09645 0.79251 0.24538 0.00000 0.52111 0.79248 0.02991 - 0.00711 0.02012 8.98304 0.84939 0.30561 0.00000 0.57998 0.84936 0.03230 - 0.00734 0.02048 10.90591 0.90783 0.36722 0.00000 0.64029 0.90781 0.03476 - 0.00753 0.02076 12.58304 0.95941 0.42125 0.00000 0.69332 0.95940 0.03696 - 0.00793 0.02136 16.33459 1.07835 0.54526 0.03796 0.81526 1.07837 0.04212 - 0.00828 0.02188 19.75463 1.19239 0.66350 0.14576 0.93178 1.19244 0.04729 - 0.00867 0.02247 23.86144 1.33215 0.80781 0.29967 1.07424 1.33225 0.05389 - 0.00908 0.02308 28.50437 1.49122 0.97147 0.46721 1.23603 1.49138 0.06180 - 0.00945 0.02363 33.01346 1.64712 1.13143 0.63165 1.39435 1.64737 0.06998 - 0.00983 0.02420 37.83470 1.81540 1.30372 0.80811 1.56502 1.81575 0.07924 - 0.01015 0.02467 42.04524 1.96371 1.45528 0.96310 1.71528 1.96417 0.08779 - 0.01054 0.02525 47.44538 2.15617 1.65160 1.16349 1.91006 2.15679 0.09953 - 0.01089 0.02576 52.41682 2.33521 1.83399 1.34940 2.09114 2.33599 0.11099 - 0.01121 0.02623 57.07288 2.50405 2.00586 1.52444 2.26183 2.50500 0.12214 - 0.01162 0.02683 63.31919 2.73403 2.23964 1.76216 2.49416 2.73526 0.13836 - 0.01201 0.02740 69.39889 2.96081 2.46993 1.99608 2.72314 2.96233 0.15526 - 0.01237 0.02794 75.21840 3.18008 2.69246 2.22194 2.94446 3.18192 0.17230 - 0.01274 0.02848 81.20902 3.40861 2.92421 2.45697 3.17505 3.41081 0.19094 - 0.01310 0.02901 87.26792 3.64330 3.16205 2.69796 3.41179 3.64592 0.21128 - 0.01345 0.02951 93.03951 3.86844 3.39012 2.92897 3.63886 3.87148 0.23131 - 0.01378 0.02999 98.67655 4.09219 3.61665 3.15823 3.86448 4.09570 0.25257 - 0.01411 0.03048 104.36305 4.31948 3.84672 3.39101 4.09366 4.32350 0.27474 - 0.01444 0.03096 110.08869 4.55164 4.08163 3.62854 4.32773 4.55623 0.29859 - 0.01475 0.03141 115.57176 4.77597 4.30856 3.85793 4.55388 4.78114 0.32242 - 0.01505 0.03185 120.85634 4.99507 4.53014 4.08181 4.77476 5.00085 0.34680 - 0.01535 0.03229 126.19264 5.21768 4.75525 4.30922 4.99918 5.22411 0.37214 - 0.01565 0.03273 131.57915 5.44623 4.98629 4.54251 5.22959 5.45339 0.39973 - 0.01594 0.03315 136.66954 5.66222 5.20464 4.76298 5.44733 5.67007 0.42581 - 0.01622 0.03355 141.64952 5.87860 5.42334 4.98366 5.66550 5.88725 0.45417 - 0.01650 0.03396 146.64680 6.09577 5.64282 5.20514 5.88447 6.10522 0.48264 - 0.00681 0.02023 -1.96011 0.45174 0.00000 0.00000 0.20693 0.45169 0.01640 - 0.00723 0.02083 -1.27619 0.46501 0.00000 0.00000 0.22274 0.46494 0.01743 - 0.00784 0.02172 0.03404 0.49615 0.00750 0.00000 0.25742 0.49606 0.01914 - 0.00829 0.02236 1.15301 0.52636 0.03477 0.00000 0.29003 0.52624 0.02056 - 0.00875 0.02303 2.49677 0.56498 0.07929 0.00000 0.33106 0.56484 0.02224 - 0.00916 0.02361 3.81010 0.60370 0.12121 0.00000 0.37179 0.60356 0.02386 - 0.00955 0.02416 5.18522 0.64495 0.16587 0.00000 0.41490 0.64479 0.02557 - 0.00996 0.02476 6.83546 0.69549 0.21978 0.00000 0.46734 0.69532 0.02765 - 0.01032 0.02527 8.38646 0.74361 0.27076 0.00000 0.51706 0.74343 0.02965 - 0.01067 0.02577 9.95231 0.79258 0.32243 0.00000 0.56754 0.79239 0.03171 - 0.01094 0.02616 11.29810 0.83517 0.36712 0.00000 0.61131 0.83498 0.03352 - 0.01153 0.02701 14.27001 0.93226 0.46854 0.03086 0.71082 0.93208 0.03776 - 0.01204 0.02773 16.92854 1.02390 0.56377 0.11804 0.80447 1.02373 0.04196 - 0.01261 0.02855 20.07056 1.13472 0.67847 0.24124 0.91746 1.13457 0.04728 - 0.01321 0.02941 23.56841 1.25912 0.80681 0.37338 1.04407 1.25901 0.05358 - 0.01375 0.03018 26.91722 1.37955 0.93071 0.50150 1.16645 1.37950 0.06004 - 0.01430 0.03097 30.45271 1.50817 1.06274 0.63748 1.29700 1.50818 0.06729 - 0.01476 0.03163 33.50488 1.62042 1.17777 0.75575 1.41082 1.62051 0.07393 - 0.01532 0.03243 37.36845 1.76450 1.32515 0.90697 1.55679 1.76470 0.08297 - 0.01582 0.03315 40.88723 1.89734 1.46086 1.04600 1.69128 1.89767 0.09173 - 0.01627 0.03380 44.15995 2.02191 1.58801 1.17614 1.81733 2.02235 0.10021 - 0.01686 0.03464 48.48876 2.18962 1.75897 1.35081 1.98694 2.19027 0.11244 - 0.01741 0.03543 52.65569 2.35351 1.92586 1.52111 2.15260 2.35438 0.12509 - 0.01793 0.03617 56.61143 2.51091 2.08603 1.68442 2.31166 2.51202 0.13776 - 0.01845 0.03692 60.64336 2.67364 2.25151 1.85298 2.47606 2.67503 0.15154 - 0.01896 0.03766 64.67485 2.83923 2.41978 2.02421 2.64329 2.84094 0.16645 - 0.01945 0.03836 68.49554 2.99743 2.58048 2.18766 2.80304 2.99945 0.18110 - 0.01991 0.03902 72.18118 3.15309 2.73851 2.34825 2.96021 3.15547 0.19651 - 0.02037 0.03969 75.88186 3.31063 2.89840 2.51068 3.11926 3.31339 0.21254 - 0.02083 0.04035 79.57175 3.47031 3.06040 2.67514 3.28045 3.47350 0.22968 - 0.02127 0.04098 83.08510 3.62388 3.21618 2.83322 3.43548 3.62751 0.24673 - 0.02168 0.04158 86.44189 3.77286 3.36725 2.98644 3.58587 3.77695 0.26409 - 0.02210 0.04219 89.81870 3.92376 3.52025 3.14160 3.73821 3.92834 0.28208 - 0.02252 0.04280 93.19105 4.07740 3.67599 3.29944 3.89332 4.08252 0.30154 - 0.02292 0.04337 96.37801 4.22260 3.82317 3.44859 4.03990 4.22823 0.31993 - 0.02330 0.04392 99.45109 4.36643 3.96893 3.59621 4.18513 4.37265 0.33976 - 0.02369 0.04448 102.53458 4.51076 4.11520 3.74435 4.33088 4.51758 0.35966 - 0.01000 0.02513 -1.25548 0.38642 0.00000 0.00000 0.17972 0.38630 0.01599 - 0.01062 0.02598 -0.58927 0.40133 0.00000 0.00000 0.19668 0.40118 0.01689 - 0.01154 0.02724 0.62558 0.43234 0.00695 0.00000 0.23052 0.43213 0.01837 - 0.01220 0.02815 1.62514 0.46062 0.03195 0.00000 0.26073 0.46036 0.01959 - 0.01290 0.02911 2.79253 0.49545 0.07199 0.00000 0.29749 0.49515 0.02102 - 0.01349 0.02993 3.90954 0.52946 0.10870 0.00000 0.33310 0.52912 0.02239 - 0.01406 0.03072 5.06006 0.56501 0.14716 0.00000 0.37015 0.56464 0.02384 - 0.01467 0.03156 6.41096 0.60759 0.19262 0.00000 0.41425 0.60719 0.02558 - 0.01520 0.03229 7.66103 0.64751 0.23499 0.00000 0.45546 0.64709 0.02723 - 0.01570 0.03300 8.91074 0.68776 0.27755 0.00000 0.49692 0.68731 0.02893 - 0.01611 0.03356 9.96847 0.72228 0.31386 0.00000 0.53238 0.72182 0.03041 - 0.01696 0.03475 12.27312 0.80007 0.39536 0.02467 0.61211 0.79958 0.03386 - 0.01770 0.03578 14.29376 0.87236 0.47072 0.09400 0.68601 0.87185 0.03724 - 0.01852 0.03693 16.64187 0.95859 0.56027 0.19097 0.77399 0.95807 0.04147 - 0.01937 0.03813 19.21349 1.05405 0.65909 0.29342 0.87121 1.05352 0.04643 - 0.02015 0.03923 21.63827 1.14529 0.75331 0.39152 0.96402 1.14479 0.05147 - 0.02093 0.04034 24.16360 1.24166 0.85260 0.49448 1.06193 1.24118 0.05707 - 0.02158 0.04126 26.31669 1.32491 0.93823 0.58311 1.14645 1.32447 0.06217 - 0.02237 0.04238 29.00401 1.43056 1.04671 0.69513 1.25361 1.43018 0.06904 - 0.02307 0.04338 31.42320 1.52706 1.14566 0.79715 1.35143 1.52675 0.07564 - 0.02371 0.04429 33.65620 1.61700 1.23782 0.89207 1.44257 1.61677 0.08201 - 0.02453 0.04546 36.56459 1.73663 1.36022 1.01789 1.56372 1.73653 0.09110 - 0.02530 0.04656 39.33059 1.85241 1.47857 1.13938 1.68092 1.85246 0.10042 - 0.02602 0.04760 41.93266 1.96281 1.59134 1.25505 1.79265 1.96302 0.10971 - 0.02674 0.04863 44.55599 2.07599 1.70687 1.37342 1.90716 2.07639 0.11975 - 0.02745 0.04966 47.14615 2.19003 1.82319 1.49246 2.02251 2.19065 0.13053 - 0.02812 0.05062 49.58694 2.29849 1.93379 1.60560 2.13221 2.29933 0.14107 - 0.02875 0.05154 51.90913 2.40409 2.04141 1.71556 2.23901 2.40519 0.15208 - 0.02939 0.05246 54.22879 2.51054 2.14986 1.82634 2.34666 2.51191 0.16348 - 0.03002 0.05337 56.51640 2.61753 2.25883 1.93757 2.45485 2.61920 0.17560 - 0.03061 0.05424 58.68063 2.71993 2.36310 2.04395 2.55840 2.72191 0.18761 - 0.03118 0.05506 60.72813 2.81853 2.46347 2.14630 2.65812 2.82084 0.19977 - 0.03175 0.05589 62.77907 2.91808 2.56480 2.24960 2.75880 2.92074 0.21233 - 0.03232 0.05672 64.80254 3.01852 2.66701 2.35373 2.86040 3.02157 0.22584 - 0.03286 0.05751 66.71478 3.11344 2.76361 2.45214 2.95641 3.11686 0.23860 - 0.03337 0.05826 68.52846 3.20632 2.85811 2.54835 3.05038 3.21016 0.25223 - 0.03389 0.05902 70.34812 3.29952 2.95294 2.64488 3.14469 3.30379 0.26591 - 0.01265 0.02876 -0.90264 0.35396 0.00000 0.00000 0.16593 0.35377 0.01572 - 0.01344 0.02983 -0.25417 0.36929 0.00000 0.00000 0.18306 0.36905 0.01654 - 0.01460 0.03139 0.89642 0.39956 0.00656 0.00000 0.21581 0.39924 0.01790 - 0.01543 0.03252 1.82321 0.42636 0.03003 0.00000 0.24429 0.42597 0.01901 - 0.01630 0.03370 2.88813 0.45873 0.06723 0.00000 0.27836 0.45829 0.02032 - 0.01704 0.03472 3.89435 0.48990 0.10084 0.00000 0.31093 0.48940 0.02156 - 0.01775 0.03569 4.92063 0.52215 0.13575 0.00000 0.34448 0.52160 0.02286 - 0.01851 0.03673 6.10994 0.56028 0.17651 0.00000 0.38394 0.55968 0.02442 - 0.01916 0.03763 7.20024 0.59573 0.21419 0.00000 0.42051 0.59509 0.02590 - 0.01979 0.03850 8.28373 0.63127 0.25184 0.00000 0.45712 0.63059 0.02740 - 0.02029 0.03919 9.19225 0.66150 0.28371 0.00000 0.48817 0.66080 0.02872 - 0.02134 0.04066 11.15557 0.72918 0.35477 0.02145 0.55755 0.72842 0.03175 - 0.02224 0.04192 12.85562 0.79149 0.41989 0.08157 0.62127 0.79069 0.03471 - 0.02325 0.04333 14.81058 0.86521 0.49665 0.16514 0.69652 0.86437 0.03839 - 0.02430 0.04481 16.93006 0.94614 0.58066 0.25264 0.77900 0.94528 0.04268 - 0.02525 0.04615 18.90967 1.02292 0.66015 0.33580 0.85715 1.02204 0.04701 - 0.02620 0.04750 20.95393 1.10344 0.74335 0.42248 0.93903 1.10256 0.05180 - 0.02699 0.04862 22.68329 1.17259 0.81468 0.49664 1.00928 1.17172 0.05613 - 0.02795 0.04999 24.82276 1.25972 0.90440 0.58972 1.09774 1.25889 0.06194 - 0.02880 0.05121 26.73475 1.33886 0.98578 0.67401 1.17804 1.33806 0.06751 - 0.02957 0.05232 28.49112 1.41234 1.06130 0.75213 1.25257 1.41159 0.07285 - 0.03056 0.05374 30.75648 1.50935 1.16084 0.85491 1.35090 1.50868 0.08044 - 0.03148 0.05507 32.89453 1.60268 1.25652 0.95357 1.44548 1.60211 0.08819 - 0.03235 0.05632 34.89428 1.69128 1.34730 1.04708 1.53525 1.69084 0.09588 - 0.03321 0.05758 36.89627 1.78164 1.43980 1.14226 1.62677 1.78133 0.10416 - 0.03406 0.05881 38.85708 1.87212 1.53238 1.23741 1.71841 1.87198 0.11300 - 0.03485 0.05997 40.69803 1.95795 1.62016 1.32758 1.80532 1.95798 0.12163 - 0.03561 0.06108 42.43397 2.04097 1.70502 1.41466 1.88938 2.04119 0.13060 - 0.03636 0.06219 44.16227 2.12443 1.79032 1.50216 1.97390 2.12487 0.13988 - 0.03711 0.06328 45.85451 2.20790 1.87558 1.58955 2.05841 2.20857 0.14970 - 0.03782 0.06432 47.44886 2.28753 1.95692 1.67288 2.13905 2.28845 0.15940 - 0.03849 0.06531 48.94748 2.36385 2.03486 1.75268 2.21634 2.36503 0.16920 - 0.03916 0.06631 50.44447 2.44075 2.11339 1.83307 2.29423 2.44221 0.17930 - 0.03983 0.06730 51.90958 2.51791 2.19215 1.91364 2.37238 2.51967 0.19012 - 0.04046 0.06824 53.29416 2.59082 2.26658 1.98978 2.44624 2.59288 0.20034 - 0.04107 0.06914 54.59307 2.66161 2.33885 2.06365 2.51798 2.66401 0.21120 - 0.04168 0.07005 55.89618 2.73265 2.41137 2.13778 2.58997 2.73539 0.22210 - 0.01508 0.03188 -0.67412 0.33316 0.00000 0.00000 0.15698 0.33291 0.01551 - 0.01601 0.03313 -0.04116 0.34860 0.00000 0.00000 0.17404 0.34827 0.01628 - 0.01737 0.03496 1.06081 0.37811 0.00626 0.00000 0.20580 0.37768 0.01756 - 0.01835 0.03628 1.93523 0.40374 0.02858 0.00000 0.23296 0.40323 0.01860 - 0.01936 0.03766 2.92832 0.43432 0.06372 0.00000 0.26507 0.43372 0.01981 - 0.02023 0.03885 3.85818 0.46346 0.09516 0.00000 0.29549 0.46280 0.02097 - 0.02106 0.03999 4.79982 0.49341 0.12760 0.00000 0.32662 0.49268 0.02217 - 0.02194 0.04120 5.88065 0.52850 0.16516 0.00000 0.36292 0.52771 0.02361 - 0.02270 0.04225 6.86474 0.56092 0.19967 0.00000 0.39637 0.56007 0.02497 - 0.02343 0.04326 7.83842 0.59330 0.23403 0.00000 0.42971 0.59241 0.02635 - 0.02401 0.04406 8.64923 0.62069 0.26295 0.00000 0.45784 0.61975 0.02755 - 0.02523 0.04577 10.39073 0.68169 0.32713 0.01935 0.52039 0.68068 0.03032 - 0.02627 0.04723 11.88466 0.73749 0.38556 0.07343 0.57747 0.73641 0.03300 - 0.02743 0.04887 13.58912 0.80311 0.45404 0.14830 0.64448 0.80197 0.03633 - 0.02863 0.05057 15.42305 0.87470 0.52852 0.22617 0.71747 0.87351 0.04019 - 0.02972 0.05212 17.12374 0.94223 0.59861 0.29977 0.78625 0.94101 0.04406 - 0.03081 0.05368 18.86869 1.01271 0.67160 0.37610 0.85797 1.01146 0.04833 - 0.03171 0.05498 20.33609 1.07295 0.73389 0.44111 0.91921 1.07169 0.05218 - 0.03281 0.05655 22.13929 1.14846 0.81185 0.52228 0.99594 1.14721 0.05732 - 0.03377 0.05795 23.74177 1.21676 0.88226 0.59547 1.06529 1.21552 0.06223 - 0.03465 0.05922 25.20837 1.27999 0.94740 0.66312 1.12948 1.27878 0.06693 - 0.03577 0.06085 27.08579 1.36300 1.03280 0.75162 1.21370 1.36184 0.07358 - 0.03681 0.06238 28.84724 1.44251 1.11453 0.83619 1.29435 1.44143 0.08034 - 0.03779 0.06381 30.48736 1.51775 1.19181 0.91609 1.37064 1.51674 0.08704 - 0.03876 0.06524 32.12032 1.59416 1.27025 0.99709 1.44812 1.59326 0.09422 - 0.03972 0.06665 33.70959 1.67033 1.34839 1.07769 1.52534 1.66956 0.10188 - 0.04061 0.06798 35.19741 1.74243 1.42233 1.15392 1.59842 1.74179 0.10934 - 0.04146 0.06924 36.59048 1.81182 1.49344 1.22716 1.66876 1.81133 0.11706 - 0.04231 0.07050 37.97377 1.88145 1.56480 1.30062 1.73934 1.88113 0.12503 - 0.04314 0.07174 39.32047 1.95080 1.63585 1.37370 1.80965 1.95068 0.13345 - 0.04393 0.07292 40.58507 2.01681 1.70346 1.44322 1.87657 2.01689 0.14175 - 0.04468 0.07404 41.76754 2.07986 1.76803 1.50956 1.94050 2.08015 0.15011 - 0.04543 0.07517 42.94610 2.14328 1.83298 1.57629 2.00481 2.14380 0.15872 - 0.04618 0.07629 44.09206 2.20663 1.89784 1.64288 2.06907 2.20741 0.16792 - 0.04688 0.07735 45.17503 2.26650 1.95914 1.70581 2.12979 2.26752 0.17660 - 0.04756 0.07837 46.18194 2.32429 2.01830 1.76651 2.18844 2.32559 0.18579 - 0.04823 0.07940 47.19205 2.38227 2.07767 1.82741 2.24728 2.38385 0.19502 - 0.01725 0.03458 -0.50934 0.31831 0.00000 0.00000 0.15051 0.31799 0.01533 - 0.01831 0.03598 0.10996 0.33371 0.00000 0.00000 0.16741 0.33329 0.01607 - 0.01985 0.03805 1.17252 0.36250 0.00601 0.00000 0.19829 0.36196 0.01728 - 0.02095 0.03954 2.00590 0.38716 0.02742 0.00000 0.22437 0.38653 0.01827 - 0.02209 0.04110 2.94381 0.41631 0.06092 0.00000 0.25493 0.41558 0.01942 - 0.02307 0.04244 3.81574 0.44389 0.09068 0.00000 0.28369 0.44308 0.02051 - 0.02400 0.04372 4.69377 0.47207 0.12124 0.00000 0.31298 0.47119 0.02164 - 0.02499 0.04508 5.69401 0.50488 0.15639 0.00000 0.34690 0.50391 0.02299 - 0.02584 0.04627 6.59985 0.53504 0.18855 0.00000 0.37801 0.53400 0.02426 - 0.02665 0.04740 7.49301 0.56508 0.22047 0.00000 0.40894 0.56398 0.02555 - 0.02730 0.04830 8.23272 0.59036 0.24722 0.00000 0.43492 0.58922 0.02668 - 0.02866 0.05021 9.81386 0.64648 0.30637 0.01781 0.49247 0.64524 0.02924 - 0.02982 0.05185 11.16017 0.69755 0.35994 0.06752 0.54473 0.69623 0.03173 - 0.03111 0.05369 12.68665 0.75732 0.42244 0.13609 0.60579 0.75592 0.03480 - 0.03244 0.05559 14.31928 0.82222 0.49010 0.20704 0.67200 0.82075 0.03834 - 0.03365 0.05732 15.82476 0.88317 0.55350 0.27383 0.73411 0.88165 0.04189 - 0.03486 0.05906 17.36160 0.94654 0.61926 0.34282 0.79862 0.94497 0.04579 - 0.03585 0.06050 18.64791 1.00050 0.67518 0.40137 0.85352 0.99891 0.04930 - 0.03706 0.06226 20.22021 1.06788 0.74489 0.47418 0.92202 1.06626 0.05397 - 0.03813 0.06381 21.61136 1.12861 0.80764 0.53962 0.98373 1.12699 0.05841 - 0.03909 0.06523 22.88081 1.18471 0.86558 0.59996 1.04073 1.18310 0.06266 - 0.04032 0.06703 24.49623 1.25804 0.94119 0.67857 1.11519 1.25645 0.06865 - 0.04147 0.06873 26.00479 1.32803 1.01330 0.75343 1.18624 1.32649 0.07473 - 0.04254 0.07032 27.40446 1.39409 1.08131 0.82397 1.25328 1.39260 0.08074 - 0.04361 0.07190 28.79198 1.46097 1.15013 0.89526 1.32115 1.45956 0.08717 - 0.04465 0.07346 30.13564 1.52741 1.21844 0.96594 1.38856 1.52609 0.09400 - 0.04563 0.07492 31.39065 1.59018 1.28298 1.03269 1.45225 1.58897 0.10065 - 0.04655 0.07631 32.55916 1.65036 1.34482 1.09657 1.51331 1.64928 0.10752 - 0.04748 0.07770 33.71706 1.71066 1.40677 1.16054 1.57450 1.70972 0.11460 - 0.04839 0.07908 34.83920 1.77054 1.46826 1.22399 1.63526 1.76975 0.12205 - 0.04924 0.08038 35.89017 1.82742 1.52668 1.28425 1.69299 1.82680 0.12940 - 0.05006 0.08161 36.86880 1.88160 1.58231 1.34159 1.74799 1.88116 0.13679 - 0.05087 0.08285 37.84246 1.93604 1.63820 1.39920 1.80325 1.93578 0.14439 - 0.05168 0.08408 38.78427 1.99023 1.69383 1.45649 1.85828 1.99019 0.15248 - 0.05244 0.08525 39.67430 2.04144 1.74641 1.51064 1.91028 2.04161 0.16013 - 0.05317 0.08636 40.49590 2.09064 1.79692 1.56263 1.96027 2.09105 0.16820 - 0.05390 0.08749 41.32008 2.14001 1.84761 1.61479 2.01043 2.14066 0.17629 - 0.02678 0.04574 -0.05124 0.27823 0.00000 0.00000 0.13266 0.27753 0.01467 - 0.02832 0.04784 0.51723 0.29300 0.00000 0.00000 0.14860 0.29214 0.01531 - 0.03055 0.05090 1.44972 0.31903 0.00522 0.00000 0.17626 0.31795 0.01634 - 0.03213 0.05309 2.15480 0.34046 0.02366 0.00000 0.19881 0.33922 0.01717 - 0.03376 0.05538 2.92553 0.36509 0.05209 0.00000 0.22455 0.36369 0.01813 - 0.03515 0.05733 3.62572 0.38789 0.07677 0.00000 0.24828 0.38634 0.01903 - 0.03646 0.05920 4.31802 0.41081 0.10174 0.00000 0.27206 0.40913 0.01997 - 0.03784 0.06117 5.08752 0.43691 0.12988 0.00000 0.29905 0.43510 0.02106 - 0.03903 0.06288 5.77222 0.46057 0.15526 0.00000 0.32346 0.45864 0.02209 - 0.04016 0.06451 6.43967 0.48390 0.18023 0.00000 0.34750 0.48186 0.02312 - 0.04106 0.06581 6.98253 0.50326 0.20086 0.00000 0.36740 0.50113 0.02401 - 0.04294 0.06854 8.12427 0.54571 0.24595 0.01355 0.41099 0.54341 0.02603 - 0.04453 0.07088 9.07203 0.58369 0.28612 0.05114 0.44991 0.58124 0.02797 - 0.04628 0.07347 10.12401 0.62748 0.33229 0.10245 0.49473 0.62487 0.03033 - 0.04809 0.07616 11.22646 0.67427 0.38150 0.15465 0.54257 0.67152 0.03302 - 0.04971 0.07858 12.22356 0.71758 0.42696 0.20311 0.58681 0.71470 0.03569 - 0.05133 0.08102 13.22368 0.76202 0.47351 0.25253 0.63217 0.75902 0.03860 - 0.05265 0.08303 14.04716 0.79942 0.51262 0.29398 0.67032 0.79632 0.04118 - 0.05425 0.08546 15.03524 0.84547 0.56073 0.34484 0.71728 0.84228 0.04460 - 0.05565 0.08761 15.89602 0.88652 0.60356 0.39006 0.75912 0.88324 0.04782 - 0.05692 0.08956 16.67334 0.92416 0.64282 0.43145 0.79748 0.92082 0.05088 - 0.05852 0.09203 17.64172 0.97262 0.69330 0.48458 0.84685 0.96922 0.05515 - 0.06001 0.09435 18.53101 1.01833 0.74089 0.53460 0.89342 1.01489 0.05945 - 0.06139 0.09650 19.34555 1.06109 0.78538 0.58133 0.93698 1.05762 0.06368 - 0.06276 0.09865 20.14025 1.10392 0.82993 0.62806 0.98061 1.10044 0.06816 - 0.06409 0.10075 20.89580 1.14593 0.87361 0.67384 1.02341 1.14245 0.07288 - 0.06534 0.10272 21.59551 1.18542 0.91466 0.71683 1.06363 1.18195 0.07747 - 0.06651 0.10458 22.23342 1.22275 0.95346 0.75743 1.10168 1.21931 0.08215 - 0.06767 0.10643 22.86061 1.25996 0.99214 0.79790 1.13961 1.25657 0.08696 - 0.06881 0.10826 23.45795 1.29651 1.03012 0.83761 1.17687 1.29317 0.09200 - 0.06989 0.10998 24.01180 1.33102 1.06599 0.87509 1.21206 1.32775 0.09694 - 0.07090 0.11161 24.51923 1.36356 1.09981 0.91042 1.24526 1.36036 0.10187 - 0.07191 0.11325 25.02062 1.39612 1.13366 0.94577 1.27848 1.39301 0.10694 - 0.07290 0.11486 25.49569 1.42813 1.16695 0.98053 1.31117 1.42513 0.11229 - 0.07385 0.11639 25.94464 1.45839 1.19841 1.01337 1.34206 1.45548 0.11735 - 0.07474 0.11785 26.34727 1.48698 1.22816 1.04441 1.37128 1.48420 0.12263 - 0.07563 0.11931 26.75109 1.51566 1.25801 1.07555 1.40059 1.51301 0.12793 - 0.04215 0.06317 0.33883 0.24641 0.00000 0.00000 0.11784 0.24486 0.01382 - 0.04434 0.06631 0.84397 0.25988 0.00000 0.00000 0.13223 0.25807 0.01436 - 0.04747 0.07086 1.63579 0.28248 0.00440 0.00000 0.15611 0.28030 0.01522 - 0.04967 0.07409 2.21213 0.30044 0.01982 0.00000 0.17495 0.29800 0.01591 - 0.05192 0.07743 2.82294 0.32053 0.04324 0.00000 0.19592 0.31782 0.01670 - 0.05382 0.08027 3.36428 0.33873 0.06311 0.00000 0.21486 0.33579 0.01744 - 0.05561 0.08297 3.88897 0.35672 0.08292 0.00000 0.23354 0.35357 0.01819 - 0.05748 0.08581 4.45669 0.37678 0.10478 0.00000 0.25430 0.37340 0.01906 - 0.05908 0.08826 4.95222 0.39467 0.12422 0.00000 0.27279 0.39110 0.01987 - 0.06060 0.09059 5.42917 0.41215 0.14316 0.00000 0.29084 0.40840 0.02068 - 0.06179 0.09243 5.80931 0.42642 0.15857 0.00000 0.30556 0.42253 0.02137 - 0.06427 0.09630 6.59418 0.45733 0.19184 0.01000 0.33738 0.45315 0.02294 - 0.06636 0.09958 7.22647 0.48448 0.22097 0.03759 0.36531 0.48006 0.02441 - 0.06865 0.10320 7.91099 0.51527 0.25392 0.07480 0.39694 0.51059 0.02619 - 0.07098 0.10693 8.61164 0.54760 0.28845 0.11200 0.43013 0.54266 0.02819 - 0.07306 0.11027 9.23103 0.57704 0.31984 0.14601 0.46035 0.57188 0.03015 - 0.07512 0.11361 9.83941 0.60681 0.35154 0.18021 0.49088 0.60143 0.03227 - 0.07680 0.11635 10.33053 0.63152 0.37782 0.20854 0.51622 0.62597 0.03414 - 0.07880 0.11964 10.90668 0.66149 0.40967 0.24280 0.54695 0.65574 0.03658 - 0.08055 0.12253 11.39912 0.68786 0.43768 0.27288 0.57398 0.68195 0.03886 - 0.08213 0.12515 11.83802 0.71183 0.46315 0.30021 0.59856 0.70578 0.04102 - 0.08410 0.12844 12.37033 0.74216 0.49535 0.33471 0.62967 0.73595 0.04399 - 0.08592 0.13151 12.84879 0.77039 0.52531 0.36679 0.65862 0.76404 0.04696 - 0.08760 0.13436 13.27973 0.79652 0.55305 0.39646 0.68543 0.79005 0.04985 - 0.08925 0.13717 13.69137 0.82236 0.58048 0.42579 0.71195 0.81578 0.05291 - 0.09085 0.13991 14.07317 0.84734 0.60701 0.45413 0.73760 0.84067 0.05609 - 0.09233 0.14247 14.42263 0.87066 0.63178 0.48059 0.76155 0.86391 0.05917 - 0.09372 0.14487 14.73197 0.89235 0.65483 0.50520 0.78384 0.88554 0.06228 - 0.09509 0.14725 15.03279 0.91384 0.67768 0.52959 0.80594 0.90698 0.06547 - 0.09642 0.14959 15.31211 0.93467 0.69985 0.55324 0.82737 0.92777 0.06879 - 0.09768 0.15178 15.56730 0.95418 0.72062 0.57541 0.84747 0.94726 0.07202 - 0.09885 0.15385 15.79541 0.97236 0.73999 0.59608 0.86620 0.96542 0.07524 - 0.10002 0.15592 16.01845 0.99045 0.75928 0.61666 0.88485 0.98351 0.07852 - 0.10116 0.15795 16.22299 1.00797 0.77799 0.63663 0.90294 1.00104 0.08197 - 0.10223 0.15987 16.41628 1.02453 0.79567 0.65550 0.92004 1.01761 0.08523 - 0.10325 0.16169 16.58156 1.03986 0.81207 0.67301 0.93589 1.03297 0.08859 - 0.10426 0.16351 16.74728 1.05523 0.82853 0.69057 0.95179 1.04837 0.09197 - 0.05523 0.07822 0.54233 0.23107 0.00000 0.00000 0.11034 0.22859 0.01321 - 0.05787 0.08219 1.00445 0.24353 0.00000 0.00000 0.12360 0.24071 0.01369 - 0.06161 0.08790 1.70937 0.26389 0.00391 0.00000 0.14508 0.26057 0.01446 - 0.06421 0.09193 2.21054 0.27974 0.01758 0.00000 0.16170 0.27607 0.01507 - 0.06686 0.09607 2.73149 0.29720 0.03814 0.00000 0.17995 0.29318 0.01577 - 0.06909 0.09959 3.18603 0.31281 0.05536 0.00000 0.19622 0.30849 0.01641 - 0.07119 0.10291 3.62104 0.32808 0.07237 0.00000 0.21211 0.32349 0.01706 - 0.07336 0.10640 4.08367 0.34489 0.09091 0.00000 0.22955 0.34000 0.01782 - 0.07521 0.10938 4.48248 0.35974 0.10724 0.00000 0.24494 0.35460 0.01852 - 0.07697 0.11223 4.86319 0.37415 0.12306 0.00000 0.25987 0.36879 0.01921 - 0.07833 0.11446 5.16260 0.38581 0.13581 0.00000 0.27193 0.38026 0.01980 - 0.08118 0.11915 5.77312 0.41084 0.16313 0.00823 0.29781 0.40492 0.02113 - 0.08355 0.12309 6.25475 0.43258 0.18679 0.03084 0.32026 0.42635 0.02237 - 0.08614 0.12743 6.76720 0.45697 0.21327 0.06111 0.34542 0.45041 0.02385 - 0.08877 0.13187 7.28328 0.48229 0.24072 0.09104 0.37154 0.47540 0.02552 - 0.09109 0.13584 7.73226 0.50510 0.26543 0.11814 0.39507 0.49792 0.02714 - 0.09338 0.13978 8.16672 0.52794 0.29015 0.14517 0.41862 0.52048 0.02887 - 0.09524 0.14300 8.51245 0.54672 0.31048 0.16736 0.43799 0.53904 0.03039 - 0.09745 0.14686 8.91140 0.56927 0.33487 0.19395 0.46125 0.56133 0.03237 - 0.09936 0.15023 9.24758 0.58894 0.35615 0.21712 0.48155 0.58078 0.03421 - 0.10108 0.15327 9.54424 0.60671 0.37539 0.23806 0.49990 0.59837 0.03594 - 0.10322 0.15709 9.89667 0.62894 0.39945 0.26422 0.52285 0.62037 0.03831 - 0.10519 0.16062 10.20813 0.64943 0.42165 0.28834 0.54402 0.64066 0.04067 - 0.10699 0.16388 10.48490 0.66825 0.44206 0.31052 0.56349 0.65932 0.04296 - 0.10876 0.16710 10.74469 0.68671 0.46208 0.33227 0.58259 0.67761 0.04536 - 0.11045 0.17021 10.98066 0.70436 0.48127 0.35310 0.60088 0.69512 0.04785 - 0.11202 0.17312 11.19447 0.72076 0.49910 0.37246 0.61788 0.71140 0.05025 - 0.11348 0.17583 11.37882 0.73583 0.51552 0.39030 0.63353 0.72636 0.05267 - 0.11492 0.17852 11.55630 0.75070 0.53174 0.40791 0.64898 0.74114 0.05514 - 0.11631 0.18113 11.71721 0.76497 0.54733 0.42485 0.66383 0.75532 0.05770 - 0.11761 0.18359 11.86213 0.77827 0.56187 0.44066 0.67767 0.76855 0.06019 - 0.11882 0.18590 11.98851 0.79054 0.57532 0.45528 0.69047 0.78076 0.06264 - 0.12003 0.18819 12.11075 0.80270 0.58867 0.46981 0.70316 0.79288 0.06516 - 0.12120 0.19044 12.21899 0.81435 0.60149 0.48376 0.71535 0.80449 0.06778 - 0.12230 0.19256 12.32128 0.82536 0.61361 0.49695 0.72686 0.81547 0.07026 - 0.12333 0.19456 12.40406 0.83538 0.62470 0.50903 0.73739 0.82548 0.07280 - 0.12435 0.19656 12.48703 0.84544 0.63581 0.52116 0.74794 0.83552 0.07536 - 0.06701 0.09221 0.67697 0.22145 0.00000 0.00000 0.10543 0.21798 0.01271 - 0.06997 0.09687 1.10573 0.23309 0.00000 0.00000 0.11780 0.22919 0.01315 - 0.07416 0.10355 1.74694 0.25175 0.00357 0.00000 0.13751 0.24726 0.01386 - 0.07705 0.10823 2.19491 0.26608 0.01600 0.00000 0.15255 0.26116 0.01442 - 0.07999 0.11303 2.65381 0.28168 0.03460 0.00000 0.16890 0.27634 0.01505 - 0.08245 0.11709 3.04954 0.29550 0.05001 0.00000 0.18333 0.28981 0.01563 - 0.08475 0.12092 3.42463 0.30893 0.06513 0.00000 0.19734 0.30290 0.01622 - 0.08712 0.12491 3.81831 0.32354 0.08146 0.00000 0.21256 0.31717 0.01689 - 0.08914 0.12832 4.15446 0.33637 0.09575 0.00000 0.22590 0.32971 0.01751 - 0.09105 0.13157 4.47330 0.34876 0.10953 0.00000 0.23879 0.34182 0.01813 - 0.09253 0.13411 4.72145 0.35870 0.12056 0.00000 0.24912 0.35156 0.01866 - 0.09560 0.13942 5.22242 0.37993 0.14406 0.00710 0.27116 0.37235 0.01983 - 0.09815 0.14387 5.61085 0.39820 0.16423 0.02653 0.29011 0.39026 0.02092 - 0.10092 0.14875 6.01828 0.41853 0.18664 0.05242 0.31119 0.41020 0.02222 - 0.10371 0.15372 6.42319 0.43944 0.20968 0.07779 0.33288 0.43072 0.02366 - 0.10617 0.15815 6.77079 0.45812 0.23026 0.10060 0.35226 0.44907 0.02506 - 0.10858 0.16252 7.10293 0.47668 0.25070 0.12320 0.37152 0.46731 0.02656 - 0.11054 0.16610 7.36400 0.49184 0.26740 0.14164 0.38725 0.48220 0.02787 - 0.11284 0.17035 7.66097 0.50988 0.28729 0.16358 0.40600 0.49994 0.02955 - 0.11483 0.17405 7.90809 0.52550 0.30454 0.18259 0.42224 0.51532 0.03112 - 0.11662 0.17739 8.12421 0.53956 0.32006 0.19970 0.43686 0.52915 0.03259 - 0.11882 0.18156 8.37613 0.55696 0.33931 0.22090 0.45498 0.54629 0.03460 - 0.12083 0.18540 8.59526 0.57287 0.35694 0.24033 0.47158 0.56197 0.03658 - 0.12268 0.18894 8.78747 0.58741 0.37307 0.25810 0.48675 0.57631 0.03850 - 0.12447 0.19242 8.96480 0.60155 0.38880 0.27542 0.50153 0.59026 0.04051 - 0.12619 0.19577 9.12249 0.61497 0.40375 0.29190 0.51557 0.60350 0.04258 - 0.12777 0.19889 9.26387 0.62737 0.41760 0.30718 0.52858 0.61575 0.04458 - 0.12923 0.20178 9.38236 0.63866 0.43025 0.32113 0.54043 0.62691 0.04659 - 0.13067 0.20465 9.49518 0.64975 0.44269 0.33488 0.55210 0.63787 0.04863 - 0.13206 0.20743 9.59468 0.66030 0.45458 0.34801 0.56322 0.64832 0.05074 - 0.13335 0.21004 9.68279 0.67008 0.46562 0.36022 0.57355 0.65800 0.05278 - 0.13454 0.21247 9.75730 0.67904 0.47576 0.37145 0.58302 0.66688 0.05480 - 0.13573 0.21489 9.82837 0.68789 0.48581 0.38257 0.59240 0.67566 0.05686 - 0.13687 0.21725 9.88838 0.69627 0.49537 0.39318 0.60131 0.68398 0.05900 - 0.13795 0.21948 9.94509 0.70419 0.50441 0.40321 0.60973 0.69184 0.06103 - 0.13895 0.22157 9.98731 0.71130 0.51258 0.41230 0.61733 0.69891 0.06310 - 0.13994 0.22365 10.02962 0.71843 0.52078 0.42143 0.62494 0.70601 0.06517 - 0.07786 0.10552 0.77580 0.21463 0.00000 0.00000 0.10180 0.21011 0.01228 - 0.08107 0.11078 1.17699 0.22557 0.00000 0.00000 0.11344 0.22056 0.01269 - 0.08558 0.11828 1.76761 0.24286 0.00331 0.00000 0.13173 0.23716 0.01335 - 0.08869 0.12352 2.17442 0.25599 0.01479 0.00000 0.14555 0.24981 0.01387 - 0.09183 0.12887 2.58623 0.27016 0.03188 0.00000 0.16044 0.26349 0.01445 - 0.09445 0.13338 2.93796 0.28261 0.04594 0.00000 0.17350 0.27555 0.01498 - 0.09690 0.13762 3.26870 0.29464 0.05966 0.00000 0.18609 0.28719 0.01552 - 0.09941 0.14203 3.61205 0.30763 0.07436 0.00000 0.19967 0.29979 0.01614 - 0.10154 0.14580 3.90291 0.31895 0.08715 0.00000 0.21150 0.31080 0.01671 - 0.10355 0.14937 4.17732 0.32986 0.09945 0.00000 0.22289 0.32139 0.01727 - 0.10511 0.15215 4.38902 0.33855 0.10924 0.00000 0.23197 0.32985 0.01775 - 0.10832 0.15796 4.81269 0.35702 0.12999 0.00628 0.25123 0.34783 0.01880 - 0.11098 0.16281 5.13620 0.37280 0.14768 0.02345 0.26769 0.36320 0.01978 - 0.11385 0.16811 5.47125 0.39023 0.16720 0.04621 0.28587 0.38020 0.02095 - 0.11673 0.17349 5.80034 0.40802 0.18715 0.06838 0.30444 0.39757 0.02224 - 0.11926 0.17826 6.07949 0.42380 0.20485 0.08819 0.32092 0.41298 0.02349 - 0.12173 0.18296 6.34316 0.43938 0.22233 0.10770 0.33720 0.42820 0.02481 - 0.12372 0.18679 6.54807 0.45202 0.23653 0.12355 0.35042 0.44056 0.02597 - 0.12606 0.19134 6.77802 0.46695 0.25334 0.14229 0.36606 0.45517 0.02745 - 0.12807 0.19527 6.96708 0.47981 0.26784 0.15845 0.37954 0.46775 0.02882 - 0.12986 0.19882 7.13097 0.49132 0.28084 0.17295 0.39163 0.47902 0.03011 - 0.13207 0.20322 7.31844 0.50546 0.29685 0.19080 0.40649 0.49287 0.03187 - 0.13408 0.20728 7.47887 0.51829 0.31143 0.20707 0.42001 0.50545 0.03359 - 0.13591 0.21100 7.61769 0.52995 0.32471 0.22189 0.43232 0.51689 0.03526 - 0.13769 0.21464 7.74340 0.54122 0.33758 0.23627 0.44423 0.52794 0.03700 - 0.13938 0.21814 7.85257 0.55182 0.34974 0.24987 0.45546 0.53835 0.03879 - 0.14094 0.22139 7.94924 0.56158 0.36098 0.26243 0.46583 0.54795 0.04051 - 0.14236 0.22439 8.02758 0.57038 0.37116 0.27384 0.47521 0.55660 0.04223 - 0.14377 0.22736 8.10112 0.57900 0.38115 0.28505 0.48441 0.56508 0.04399 - 0.14510 0.23023 8.16370 0.58713 0.39063 0.29570 0.49311 0.57309 0.04579 - 0.14635 0.23292 8.21784 0.59463 0.39941 0.30557 0.50116 0.58048 0.04754 - 0.14750 0.23541 8.26163 0.60144 0.40743 0.31461 0.50850 0.58720 0.04926 - 0.14864 0.23790 8.30251 0.60815 0.41535 0.32354 0.51574 0.59383 0.05102 - 0.14973 0.24031 8.33441 0.61444 0.42283 0.33200 0.52256 0.60004 0.05284 - 0.15076 0.24258 8.36456 0.62038 0.42991 0.34000 0.52900 0.60592 0.05456 - 0.15169 0.24470 8.38358 0.62563 0.43624 0.34720 0.53475 0.61112 0.05631 - 0.15264 0.24681 8.40260 0.63090 0.44259 0.35441 0.54050 0.61634 0.05807 - 0.09754 0.13087 0.91451 0.20524 0.00000 0.00000 0.09652 0.19848 0.01156 - 0.10109 0.13711 1.27129 0.21502 0.00000 0.00000 0.10698 0.20766 0.01193 - 0.10604 0.14595 1.78377 0.23015 0.00292 0.00000 0.12308 0.22195 0.01251 - 0.10942 0.15208 2.12884 0.24144 0.01299 0.00000 0.13506 0.23267 0.01297 - 0.11280 0.15830 2.47145 0.25346 0.02787 0.00000 0.14778 0.24411 0.01348 - 0.11562 0.16352 2.75959 0.26389 0.03996 0.00000 0.15881 0.25407 0.01395 - 0.11823 0.16840 3.02702 0.27386 0.05166 0.00000 0.16935 0.26360 0.01442 - 0.12089 0.17345 3.29968 0.28449 0.06404 0.00000 0.18058 0.27378 0.01495 - 0.12313 0.17773 3.52764 0.29368 0.07473 0.00000 0.19028 0.28258 0.01544 - 0.12524 0.18179 3.74077 0.30246 0.08495 0.00000 0.19956 0.29101 0.01592 - 0.12686 0.18494 3.90276 0.30939 0.09300 0.00000 0.20688 0.29767 0.01633 - 0.13020 0.19148 4.22206 0.32400 0.10995 0.00516 0.22230 0.31172 0.01722 - 0.13293 0.19690 4.45914 0.33632 0.12425 0.01921 0.23532 0.32358 0.01805 - 0.13585 0.20278 4.69906 0.34977 0.13986 0.03771 0.24955 0.33655 0.01903 - 0.13877 0.20872 4.92974 0.36332 0.15564 0.05553 0.26391 0.34963 0.02011 - 0.14130 0.21395 5.12107 0.37519 0.16950 0.07131 0.27651 0.36109 0.02114 - 0.14376 0.21908 5.29785 0.38677 0.18306 0.08672 0.28882 0.37228 0.02224 - 0.14573 0.22323 5.43218 0.39606 0.19397 0.09913 0.29872 0.38126 0.02318 - 0.14802 0.22812 5.57886 0.40690 0.20676 0.11367 0.31030 0.39174 0.02440 - 0.14997 0.23234 5.69646 0.41613 0.21769 0.12612 0.32018 0.40067 0.02551 - 0.15170 0.23612 5.79650 0.42433 0.22743 0.13722 0.32898 0.40861 0.02656 - 0.15381 0.24079 5.90621 0.43424 0.23929 0.15074 0.33965 0.41821 0.02797 - 0.15572 0.24505 5.99660 0.44312 0.24998 0.16296 0.34926 0.42682 0.02935 - 0.15744 0.24895 6.07222 0.45110 0.25965 0.17402 0.35792 0.43457 0.03069 - 0.15909 0.25274 6.13747 0.45871 0.26893 0.18466 0.36621 0.44196 0.03207 - 0.16065 0.25635 6.19051 0.46576 0.27760 0.19462 0.37393 0.44881 0.03349 - 0.16208 0.25970 6.23580 0.47221 0.28557 0.20379 0.38100 0.45508 0.03486 - 0.16336 0.26277 6.26862 0.47790 0.29270 0.21203 0.38731 0.46063 0.03621 - 0.16462 0.26580 6.29792 0.48344 0.29967 0.22008 0.39345 0.46602 0.03759 - 0.16582 0.26870 6.31943 0.48858 0.30620 0.22767 0.39919 0.47103 0.03900 - 0.16692 0.27141 6.33606 0.49327 0.31222 0.23466 0.40445 0.47561 0.04037 - 0.16792 0.27391 6.34634 0.49746 0.31766 0.24101 0.40919 0.47971 0.04171 - 0.16891 0.27639 6.35449 0.50155 0.32300 0.24726 0.41383 0.48371 0.04307 - 0.16985 0.27877 6.35642 0.50530 0.32799 0.25312 0.41813 0.48739 0.04448 - 0.17073 0.28103 6.35824 0.50884 0.33270 0.25866 0.42220 0.49086 0.04581 - 0.17152 0.28309 6.35312 0.51186 0.33684 0.26356 0.42573 0.49383 0.04716 - 0.17231 0.28517 6.34794 0.51489 0.34099 0.26848 0.42927 0.49681 0.04851 - 0.12346 0.16680 1.04454 0.19618 0.00000 0.00000 0.09098 0.18581 0.01070 - 0.12726 0.17414 1.35059 0.20458 0.00000 0.00000 0.10008 0.19350 0.01102 - 0.13249 0.18442 1.77820 0.21728 0.00250 0.00000 0.11379 0.20522 0.01153 - 0.13602 0.19149 2.05853 0.22657 0.01112 0.00000 0.12381 0.21384 0.01192 - 0.13952 0.19860 2.33055 0.23630 0.02373 0.00000 0.13429 0.22292 0.01236 - 0.14241 0.20453 2.55515 0.24464 0.03384 0.00000 0.14326 0.23071 0.01276 - 0.14507 0.21005 2.76036 0.25251 0.04352 0.00000 0.15174 0.23808 0.01315 - 0.14775 0.21571 2.96502 0.26077 0.05364 0.00000 0.16064 0.24584 0.01360 - 0.15000 0.22049 3.13334 0.26782 0.06228 0.00000 0.16825 0.25247 0.01401 - 0.15209 0.22499 3.28894 0.27451 0.07049 0.00000 0.17548 0.25878 0.01442 - 0.15369 0.22846 3.40496 0.27973 0.07689 0.00000 0.18111 0.26370 0.01475 - 0.15695 0.23563 3.62896 0.29060 0.09026 0.00411 0.19288 0.27397 0.01550 - 0.15959 0.24152 3.78872 0.29963 0.10138 0.01522 0.20268 0.28251 0.01618 - 0.16238 0.24786 3.94500 0.30934 0.11340 0.02976 0.21324 0.29171 0.01698 - 0.16513 0.25420 4.09064 0.31896 0.12538 0.04359 0.22374 0.30084 0.01785 - 0.16748 0.25974 4.20731 0.32724 0.13577 0.05570 0.23282 0.30870 0.01869 - 0.16974 0.26513 4.31132 0.33519 0.14583 0.06741 0.24158 0.31626 0.01956 - 0.17153 0.26946 4.38739 0.34147 0.15384 0.07674 0.24854 0.32223 0.02032 - 0.17357 0.27452 4.46645 0.34866 0.16310 0.08758 0.25655 0.32908 0.02128 - 0.17530 0.27884 4.52683 0.35469 0.17094 0.09676 0.26329 0.33482 0.02216 - 0.17682 0.28270 4.57623 0.35998 0.17788 0.10490 0.26925 0.33986 0.02299 - 0.17863 0.28741 4.62549 0.36623 0.18619 0.11468 0.27634 0.34582 0.02409 - 0.18024 0.29167 4.66228 0.37171 0.19360 0.12344 0.28261 0.35105 0.02517 - 0.18168 0.29553 4.69017 0.37656 0.20023 0.13130 0.28821 0.35569 0.02620 - 0.18304 0.29927 4.71050 0.38108 0.20652 0.13879 0.29348 0.36001 0.02727 - 0.18429 0.30278 4.72264 0.38516 0.21232 0.14573 0.29829 0.36392 0.02836 - 0.18543 0.30603 4.73083 0.38884 0.21761 0.15207 0.30266 0.36745 0.02941 - 0.18643 0.30896 4.73159 0.39198 0.22227 0.15770 0.30646 0.37047 0.03044 - 0.18740 0.31185 4.73000 0.39500 0.22679 0.16317 0.31013 0.37336 0.03149 - 0.18830 0.31458 4.72345 0.39770 0.23097 0.16827 0.31349 0.37597 0.03256 - 0.18912 0.31712 4.71480 0.40012 0.23478 0.17294 0.31653 0.37830 0.03359 - 0.18985 0.31943 4.70300 0.40220 0.23818 0.17713 0.31920 0.38032 0.03460 - 0.19056 0.32173 4.68977 0.40420 0.24150 0.18123 0.32180 0.38226 0.03563 - 0.19121 0.32390 4.67274 0.40594 0.24454 0.18503 0.32414 0.38395 0.03668 - 0.19183 0.32595 4.65664 0.40759 0.24741 0.18862 0.32634 0.38555 0.03768 - 0.19235 0.32780 4.63698 0.40887 0.24986 0.19173 0.32817 0.38681 0.03868 - 0.19287 0.32966 4.61722 0.41015 0.25232 0.19485 0.33000 0.38808 0.03968 - 0.16010 0.22296 1.16193 0.18637 0.00000 0.00000 0.08431 0.16966 0.00958 - 0.16388 0.23140 1.40633 0.19301 0.00000 0.00000 0.09176 0.17551 0.00985 - 0.16900 0.24308 1.73611 0.20276 0.00205 0.00000 0.10268 0.18417 0.01027 - 0.17239 0.25100 1.94472 0.20971 0.00904 0.00000 0.11049 0.19042 0.01060 - 0.17569 0.25887 2.14087 0.21685 0.01918 0.00000 0.11850 0.19687 0.01096 - 0.17838 0.26538 2.29884 0.22284 0.02717 0.00000 0.12525 0.20230 0.01128 - 0.18082 0.27138 2.44004 0.22841 0.03473 0.00000 0.13154 0.20736 0.01160 - 0.18324 0.27746 2.57645 0.23413 0.04251 0.00000 0.13801 0.21258 0.01196 - 0.18524 0.28256 2.68598 0.23893 0.04907 0.00000 0.14347 0.21697 0.01229 - 0.18709 0.28732 2.78550 0.24343 0.05525 0.00000 0.14861 0.22109 0.01261 - 0.18847 0.29097 2.85754 0.24687 0.06000 0.00000 0.15255 0.22425 0.01287 - 0.19125 0.29841 2.99181 0.25394 0.06983 0.00306 0.16069 0.23076 0.01346 - 0.19345 0.30445 3.08061 0.25967 0.07787 0.01130 0.16732 0.23605 0.01399 - 0.19571 0.31085 3.16184 0.26568 0.08643 0.02197 0.17435 0.24162 0.01461 - 0.19789 0.31717 3.23280 0.27146 0.09482 0.03196 0.18119 0.24699 0.01528 - 0.19970 0.32261 3.28530 0.27630 0.10198 0.04060 0.18697 0.25148 0.01592 - 0.20139 0.32784 3.32799 0.28082 0.10881 0.04884 0.19245 0.25568 0.01658 - 0.20269 0.33197 3.35590 0.28428 0.11416 0.05534 0.19670 0.25891 0.01715 - 0.20413 0.33674 3.38028 0.28810 0.12026 0.06277 0.20149 0.26248 0.01787 - 0.20531 0.34076 3.39527 0.29121 0.12534 0.06899 0.20544 0.26538 0.01853 - 0.20632 0.34431 3.40505 0.29387 0.12980 0.07447 0.20888 0.26787 0.01914 - 0.20747 0.34856 3.40834 0.29684 0.13502 0.08094 0.21283 0.27066 0.01995 - 0.20845 0.35234 3.40533 0.29932 0.13960 0.08666 0.21625 0.27301 0.02074 - 0.20928 0.35573 3.39846 0.30143 0.14365 0.09174 0.21922 0.27500 0.02149 - 0.21003 0.35894 3.38691 0.30328 0.14742 0.09651 0.22193 0.27676 0.02227 - 0.21068 0.36191 3.37091 0.30482 0.15082 0.10086 0.22432 0.27823 0.02305 - 0.21125 0.36462 3.35397 0.30616 0.15389 0.10482 0.22645 0.27951 0.02380 - 0.21170 0.36702 3.33390 0.30716 0.15653 0.10825 0.22820 0.28048 0.02454 - 0.21212 0.36935 3.31256 0.30807 0.15906 0.11158 0.22987 0.28136 0.02529 - 0.21247 0.37151 3.28879 0.30878 0.16134 0.11462 0.23131 0.28206 0.02605 - 0.21276 0.37348 3.26500 0.30934 0.16340 0.11738 0.23258 0.28263 0.02678 - 0.21299 0.37525 3.24056 0.30972 0.16518 0.11983 0.23363 0.28303 0.02749 - 0.21320 0.37698 3.21536 0.31005 0.16691 0.12220 0.23462 0.28337 0.02821 - 0.21335 0.37857 3.18844 0.31020 0.16844 0.12435 0.23543 0.28356 0.02894 - 0.21349 0.38007 3.16299 0.31034 0.16988 0.12639 0.23620 0.28373 0.02964 - 0.21355 0.38137 3.13664 0.31027 0.17105 0.12810 0.23674 0.28371 0.03033 - 0.21362 0.38267 3.11019 0.31020 0.17222 0.12981 0.23727 0.28370 0.03103 - 0.19082 0.27547 1.21697 0.17918 0.00000 0.00000 0.07901 0.15604 0.00870 - 0.19427 0.28439 1.41600 0.18443 0.00000 0.00000 0.08522 0.16052 0.00893 - 0.19884 0.29658 1.67697 0.19195 0.00173 0.00000 0.09414 0.16703 0.00930 - 0.20180 0.30474 1.83691 0.19721 0.00762 0.00000 0.10041 0.17164 0.00957 - 0.20464 0.31276 1.98305 0.20250 0.01608 0.00000 0.10675 0.17631 0.00988 - 0.20690 0.31933 2.09812 0.20687 0.02267 0.00000 0.11201 0.18019 0.01015 - 0.20892 0.32533 2.19885 0.21086 0.02885 0.00000 0.11686 0.18375 0.01042 - 0.21088 0.33135 2.29320 0.21487 0.03512 0.00000 0.12178 0.18735 0.01072 - 0.21246 0.33634 2.36711 0.21818 0.04036 0.00000 0.12587 0.19033 0.01100 - 0.21391 0.34099 2.43306 0.22125 0.04526 0.00000 0.12969 0.19310 0.01126 - 0.21496 0.34450 2.47926 0.22355 0.04900 0.00000 0.13258 0.19518 0.01148 - 0.21704 0.35160 2.56172 0.22820 0.05665 0.00242 0.13848 0.19941 0.01196 - 0.21861 0.35728 2.61070 0.23186 0.06283 0.00889 0.14321 0.20276 0.01240 - 0.22018 0.36321 2.65084 0.23559 0.06933 0.01722 0.14813 0.20619 0.01290 - 0.22161 0.36898 2.68191 0.23905 0.07562 0.02492 0.15281 0.20939 0.01345 - 0.22275 0.37386 2.70096 0.24183 0.08091 0.03150 0.15670 0.21197 0.01396 - 0.22375 0.37847 2.71242 0.24432 0.08589 0.03772 0.16030 0.21429 0.01449 - 0.22447 0.38207 2.71636 0.24614 0.08976 0.04258 0.16303 0.21600 0.01495 - 0.22521 0.38614 2.71428 0.24804 0.09409 0.04808 0.16604 0.21780 0.01552 - 0.22576 0.38951 2.70783 0.24948 0.09766 0.05264 0.16845 0.21918 0.01604 - 0.22620 0.39245 2.69923 0.25066 0.10076 0.05662 0.17052 0.22031 0.01653 - 0.22661 0.39588 2.68202 0.25182 0.10433 0.06127 0.17280 0.22145 0.01716 - 0.22690 0.39886 2.66186 0.25267 0.10740 0.06533 0.17470 0.22230 0.01778 - 0.22709 0.40148 2.64044 0.25330 0.11009 0.06890 0.17630 0.22295 0.01837 - 0.22720 0.40391 2.61607 0.25373 0.11255 0.07222 0.17770 0.22342 0.01897 - 0.22722 0.40608 2.58935 0.25394 0.11472 0.07521 0.17885 0.22370 0.01958 - 0.22720 0.40803 2.56309 0.25405 0.11666 0.07791 0.17985 0.22387 0.02016 - 0.22709 0.40968 2.53590 0.25395 0.11829 0.08022 0.18059 0.22387 0.02073 - 0.22696 0.41126 2.50804 0.25380 0.11983 0.08243 0.18127 0.22380 0.02130 - 0.22676 0.41267 2.47910 0.25349 0.12118 0.08443 0.18178 0.22361 0.02188 - 0.22654 0.41393 2.45103 0.25314 0.12238 0.08623 0.18220 0.22336 0.02244 - 0.22628 0.41501 2.42348 0.25269 0.12339 0.08780 0.18248 0.22302 0.02298 - 0.22600 0.41604 2.39552 0.25219 0.12436 0.08931 0.18272 0.22265 0.02353 - 0.22567 0.41693 2.36690 0.25158 0.12518 0.09066 0.18282 0.22217 0.02408 - 0.22536 0.41776 2.33985 0.25100 0.12595 0.09193 0.18293 0.22171 0.02461 - 0.22499 0.41841 2.31313 0.25031 0.12653 0.09296 0.18288 0.22115 0.02513 - 0.22462 0.41906 2.28632 0.24961 0.12711 0.09400 0.18284 0.22059 0.02566 - 0.23940 0.37090 1.23913 0.16730 0.00000 0.00000 0.07009 0.13223 0.00735 - 0.24167 0.37949 1.37436 0.17040 0.00000 0.00000 0.07452 0.13487 0.00753 - 0.24449 0.39092 1.54272 0.17463 0.00130 0.00000 0.08068 0.13854 0.00781 - 0.24617 0.39837 1.63951 0.17746 0.00571 0.00000 0.08489 0.14107 0.00802 - 0.24766 0.40551 1.72267 0.18019 0.01197 0.00000 0.08903 0.14354 0.00825 - 0.24875 0.41122 1.78502 0.18234 0.01675 0.00000 0.09239 0.14552 0.00846 - 0.24966 0.41634 1.83699 0.18423 0.02116 0.00000 0.09542 0.14727 0.00866 - 0.25042 0.42132 1.88200 0.18601 0.02555 0.00000 0.09840 0.14896 0.00889 - 0.25097 0.42535 1.91495 0.18740 0.02917 0.00000 0.10082 0.15030 0.00909 - 0.25142 0.42904 1.94279 0.18864 0.03252 0.00000 0.10305 0.15151 0.00929 - 0.25168 0.43176 1.96030 0.18951 0.03503 0.00000 0.10469 0.15237 0.00945 - 0.25209 0.43711 1.98638 0.19115 0.04010 0.00164 0.10796 0.15404 0.00980 - 0.25224 0.44120 1.99360 0.19231 0.04412 0.00601 0.11048 0.15527 0.01012 - 0.25223 0.44529 1.99198 0.19332 0.04825 0.01157 0.11301 0.15640 0.01048 - 0.25204 0.44907 1.98376 0.19406 0.05216 0.01661 0.11530 0.15731 0.01087 - 0.25171 0.45209 1.97092 0.19448 0.05538 0.02085 0.11710 0.15791 0.01123 - 0.25125 0.45480 1.95356 0.19467 0.05834 0.02480 0.11867 0.15832 0.01161 - 0.25077 0.45677 1.93613 0.19467 0.06059 0.02783 0.11979 0.15851 0.01192 - 0.25006 0.45883 1.91141 0.19445 0.06305 0.03119 0.12093 0.15856 0.01232 - 0.24935 0.46041 1.88734 0.19411 0.06503 0.03395 0.12176 0.15848 0.01268 - 0.24865 0.46170 1.86410 0.19371 0.06671 0.03632 0.12243 0.15832 0.01301 - 0.24764 0.46299 1.83168 0.19298 0.06859 0.03903 0.12304 0.15793 0.01345 - 0.24659 0.46395 1.79964 0.19215 0.07016 0.04136 0.12346 0.15743 0.01386 - 0.24556 0.46467 1.76876 0.19128 0.07149 0.04337 0.12373 0.15688 0.01426 - 0.24447 0.46519 1.73686 0.19029 0.07266 0.04520 0.12388 0.15623 0.01466 - 0.24332 0.46548 1.70473 0.18921 0.07366 0.04682 0.12388 0.15548 0.01507 - 0.24220 0.46566 1.67422 0.18813 0.07452 0.04825 0.12384 0.15474 0.01546 - 0.24109 0.46563 1.64477 0.18701 0.07519 0.04945 0.12367 0.15394 0.01583 - 0.23994 0.46552 1.61526 0.18586 0.07582 0.05058 0.12346 0.15311 0.01621 - 0.23877 0.46527 1.58595 0.18464 0.07633 0.05157 0.12317 0.15222 0.01659 - 0.23764 0.46495 1.55816 0.18345 0.07675 0.05245 0.12285 0.15135 0.01695 - 0.23653 0.46453 1.53178 0.18227 0.07708 0.05319 0.12248 0.15047 0.01730 - 0.23539 0.46406 1.50535 0.18107 0.07738 0.05389 0.12209 0.14958 0.01765 - 0.23423 0.46347 1.47923 0.17981 0.07759 0.05449 0.12163 0.14864 0.01801 - 0.23314 0.46291 1.45455 0.17863 0.07779 0.05506 0.12120 0.14775 0.01835 - 0.23204 0.46221 1.43117 0.17743 0.07788 0.05548 0.12070 0.14684 0.01869 - 0.23093 0.46152 1.40771 0.17622 0.07797 0.05591 0.12021 0.14592 0.01902 - 0.27500 0.45425 1.20634 0.15611 0.00000 0.00000 0.06230 0.11156 0.00631 - 0.27578 0.46137 1.29865 0.15759 0.00000 0.00000 0.06551 0.11308 0.00646 - 0.27644 0.47050 1.40733 0.15944 0.00102 0.00000 0.06984 0.11511 0.00669 - 0.27660 0.47620 1.46498 0.16059 0.00445 0.00000 0.07272 0.11644 0.00686 - 0.27652 0.48146 1.51037 0.16158 0.00929 0.00000 0.07548 0.11769 0.00704 - 0.27629 0.48551 1.54193 0.16227 0.01292 0.00000 0.07767 0.11862 0.00720 - 0.27595 0.48901 1.56609 0.16278 0.01624 0.00000 0.07959 0.11940 0.00736 - 0.27541 0.49224 1.58383 0.16315 0.01949 0.00000 0.08143 0.12009 0.00754 - 0.27484 0.49473 1.59466 0.16335 0.02213 0.00000 0.08288 0.12058 0.00770 - 0.27423 0.49693 1.60226 0.16347 0.02456 0.00000 0.08419 0.12099 0.00785 - 0.27367 0.49845 1.60495 0.16347 0.02636 0.00000 0.08512 0.12125 0.00797 - 0.27236 0.50125 1.60274 0.16334 0.02995 0.00119 0.08693 0.12166 0.00825 - 0.27108 0.50314 1.59011 0.16305 0.03274 0.00434 0.08825 0.12186 0.00849 - 0.26950 0.50477 1.56960 0.16252 0.03556 0.00830 0.08950 0.12192 0.00876 - 0.26772 0.50598 1.54446 0.16177 0.03818 0.01185 0.09054 0.12178 0.00906 - 0.26599 0.50669 1.51863 0.16091 0.04029 0.01479 0.09127 0.12150 0.00933 - 0.26415 0.50705 1.49025 0.15990 0.04220 0.01748 0.09184 0.12109 0.00961 - 0.26255 0.50709 1.46518 0.15895 0.04361 0.01953 0.09217 0.12065 0.00985 - 0.26052 0.50682 1.43312 0.15768 0.04512 0.02177 0.09241 0.11999 0.01014 - 0.25867 0.50635 1.40390 0.15646 0.04631 0.02358 0.09251 0.11933 0.01040 - 0.25695 0.50578 1.37674 0.15529 0.04731 0.02512 0.09254 0.11867 0.01065 - 0.25467 0.50472 1.34122 0.15369 0.04838 0.02685 0.09241 0.11772 0.01096 - 0.25247 0.50349 1.30752 0.15210 0.04923 0.02830 0.09217 0.11676 0.01127 - 0.25039 0.50219 1.27593 0.15057 0.04994 0.02955 0.09189 0.11580 0.01155 - 0.24826 0.50071 1.24427 0.14897 0.05054 0.03066 0.09152 0.11479 0.01185 - 0.24613 0.49906 1.21334 0.14735 0.05101 0.03162 0.09107 0.11374 0.01214 - 0.24411 0.49742 1.18435 0.14581 0.05140 0.03246 0.09061 0.11273 0.01241 - 0.24217 0.49570 1.15717 0.14429 0.05168 0.03313 0.09011 0.11172 0.01268 - 0.24021 0.49391 1.13018 0.14276 0.05192 0.03377 0.08958 0.11070 0.01295 - 0.23825 0.49203 1.10393 0.14122 0.05208 0.03431 0.08900 0.10966 0.01322 - 0.23639 0.49017 1.07929 0.13975 0.05221 0.03477 0.08844 0.10866 0.01347 - 0.23460 0.48832 1.05629 0.13833 0.05227 0.03515 0.08786 0.10769 0.01372 - 0.23280 0.48642 1.03338 0.13690 0.05231 0.03551 0.08727 0.10671 0.01397 - 0.23100 0.48443 1.01116 0.13546 0.05230 0.03579 0.08665 0.10571 0.01422 - 0.22930 0.48255 0.99016 0.13410 0.05229 0.03606 0.08606 0.10477 0.01446 - 0.22764 0.48062 0.97071 0.13278 0.05222 0.03624 0.08546 0.10384 0.01469 - 0.22598 0.47868 0.95119 0.13145 0.05215 0.03642 0.08485 0.10292 0.01492 - 0.30052 0.52593 1.15013 0.14456 0.00000 0.00000 0.05525 0.09374 0.00548 - 0.29969 0.53084 1.21188 0.14480 0.00000 0.00000 0.05757 0.09459 0.00560 - 0.29808 0.53669 1.27943 0.14489 0.00082 0.00000 0.06061 0.09565 0.00579 - 0.29668 0.54003 1.31096 0.14481 0.00356 0.00000 0.06258 0.09629 0.00593 - 0.29502 0.54282 1.33183 0.14458 0.00739 0.00000 0.06442 0.09684 0.00608 - 0.29346 0.54475 1.34386 0.14425 0.01023 0.00000 0.06583 0.09719 0.00621 - 0.29188 0.54624 1.35072 0.14384 0.01279 0.00000 0.06703 0.09744 0.00634 - 0.29007 0.54733 1.35200 0.14326 0.01527 0.00000 0.06814 0.09758 0.00648 - 0.28842 0.54798 1.34977 0.14268 0.01727 0.00000 0.06898 0.09763 0.00661 - 0.28680 0.54842 1.34562 0.14207 0.01909 0.00000 0.06971 0.09762 0.00673 - 0.28546 0.54854 1.33994 0.14153 0.02043 0.00000 0.07021 0.09756 0.00683 - 0.28253 0.54842 1.32226 0.14028 0.02306 0.00089 0.07113 0.09734 0.00704 - 0.27991 0.54785 1.29948 0.13911 0.02507 0.00324 0.07174 0.09703 0.00723 - 0.27691 0.54678 1.26992 0.13767 0.02708 0.00618 0.07225 0.09657 0.00745 - 0.27369 0.54522 1.23723 0.13605 0.02891 0.00878 0.07257 0.09595 0.00768 - 0.27071 0.54346 1.20613 0.13447 0.03035 0.01090 0.07272 0.09528 0.00789 - 0.26766 0.54137 1.17376 0.13280 0.03163 0.01283 0.07273 0.09452 0.00810 - 0.26509 0.53942 1.14634 0.13135 0.03257 0.01427 0.07264 0.09382 0.00829 - 0.26193 0.53678 1.11262 0.12953 0.03353 0.01583 0.07243 0.09289 0.00851 - 0.25911 0.53424 1.08274 0.12787 0.03428 0.01707 0.07215 0.09202 0.00871 - 0.25652 0.53182 1.05546 0.12634 0.03489 0.01813 0.07186 0.09119 0.00890 - 0.25319 0.52845 1.02086 0.12433 0.03551 0.01928 0.07137 0.09007 0.00914 - 0.25005 0.52511 0.98872 0.12241 0.03599 0.02024 0.07085 0.08897 0.00937 - 0.24711 0.52186 0.95905 0.12059 0.03637 0.02105 0.07031 0.08792 0.00959 - 0.24415 0.51848 0.92984 0.11876 0.03667 0.02176 0.06972 0.08683 0.00980 - 0.24125 0.51500 0.90180 0.11695 0.03688 0.02235 0.06909 0.08574 0.01002 - 0.23852 0.51168 0.87572 0.11523 0.03705 0.02287 0.06848 0.08470 0.01023 - 0.23592 0.50840 0.85170 0.11360 0.03713 0.02327 0.06786 0.08369 0.01043 - 0.23333 0.50508 0.82801 0.11197 0.03719 0.02364 0.06722 0.08268 0.01063 - 0.23078 0.50171 0.80525 0.11035 0.03720 0.02394 0.06656 0.08167 0.01083 - 0.22836 0.49848 0.78405 0.10882 0.03719 0.02420 0.06593 0.08070 0.01101 - 0.22607 0.49535 0.76446 0.10737 0.03714 0.02439 0.06531 0.07978 0.01120 - 0.22377 0.49218 0.74504 0.10592 0.03708 0.02458 0.06468 0.07885 0.01138 - 0.22149 0.48896 0.72644 0.10448 0.03699 0.02471 0.06403 0.07792 0.01156 - 0.21935 0.48592 0.70886 0.10312 0.03689 0.02483 0.06342 0.07704 0.01174 - 0.21729 0.48293 0.69282 0.10183 0.03677 0.02489 0.06282 0.07620 0.01191 - 0.21523 0.47992 0.67673 0.10053 0.03664 0.02496 0.06221 0.07535 0.01208 - 0.32112 0.59981 1.06702 0.12935 0.00000 0.00000 0.04728 0.07529 0.00464 - 0.31832 0.60134 1.10153 0.12846 0.00000 0.00000 0.04881 0.07568 0.00474 - 0.31395 0.60230 1.13355 0.12699 0.00063 0.00000 0.05074 0.07607 0.00488 - 0.31067 0.60221 1.14323 0.12587 0.00274 0.00000 0.05193 0.07626 0.00499 - 0.30714 0.60149 1.14420 0.12461 0.00566 0.00000 0.05299 0.07634 0.00511 - 0.30404 0.60046 1.14077 0.12345 0.00781 0.00000 0.05376 0.07632 0.00521 - 0.30103 0.59915 1.13426 0.12229 0.00972 0.00000 0.05439 0.07623 0.00531 - 0.29777 0.59734 1.12323 0.12098 0.01153 0.00000 0.05491 0.07603 0.00542 - 0.29491 0.59552 1.11151 0.11980 0.01298 0.00000 0.05528 0.07580 0.00552 - 0.29215 0.59362 1.09899 0.11864 0.01429 0.00000 0.05557 0.07555 0.00561 - 0.28994 0.59192 1.08758 0.11770 0.01524 0.00000 0.05574 0.07530 0.00569 - 0.28523 0.58801 1.05977 0.11565 0.01708 0.00064 0.05600 0.07472 0.00585 - 0.28118 0.58429 1.03107 0.11386 0.01847 0.00233 0.05609 0.07414 0.00600 - 0.27664 0.57981 0.99689 0.11181 0.01983 0.00442 0.05607 0.07341 0.00616 - 0.27192 0.57481 0.96095 0.10963 0.02104 0.00623 0.05590 0.07256 0.00633 - 0.26764 0.57002 0.92818 0.10761 0.02197 0.00770 0.05565 0.07171 0.00649 - 0.26334 0.56498 0.89519 0.10556 0.02278 0.00901 0.05531 0.07081 0.00666 - 0.25978 0.56064 0.86802 0.10384 0.02335 0.00998 0.05496 0.07002 0.00679 - 0.25548 0.55519 0.83549 0.10174 0.02392 0.01102 0.05447 0.06902 0.00696 - 0.25170 0.55025 0.80725 0.09988 0.02435 0.01183 0.05398 0.06810 0.00711 - 0.24827 0.54567 0.78181 0.09819 0.02468 0.01251 0.05351 0.06725 0.00724 - 0.24392 0.53967 0.75034 0.09602 0.02500 0.01324 0.05285 0.06613 0.00742 - 0.23987 0.53393 0.72160 0.09400 0.02523 0.01383 0.05219 0.06506 0.00759 - 0.23612 0.52850 0.69539 0.09213 0.02539 0.01432 0.05154 0.06405 0.00774 - 0.23240 0.52300 0.66997 0.09026 0.02550 0.01474 0.05087 0.06302 0.00790 - 0.22878 0.51754 0.64595 0.08845 0.02555 0.01508 0.05019 0.06201 0.00806 - 0.22540 0.51237 0.62376 0.08675 0.02558 0.01537 0.04953 0.06105 0.00821 - 0.22222 0.50742 0.60365 0.08516 0.02556 0.01558 0.04890 0.06014 0.00835 - 0.21907 0.50245 0.58392 0.08358 0.02552 0.01578 0.04825 0.05923 0.00849 - 0.21599 0.49752 0.56519 0.08204 0.02545 0.01592 0.04761 0.05833 0.00863 - 0.21310 0.49283 0.54786 0.08060 0.02537 0.01604 0.04699 0.05748 0.00877 - 0.21038 0.48837 0.53201 0.07924 0.02527 0.01612 0.04640 0.05668 0.00890 - 0.20766 0.48388 0.51636 0.07789 0.02516 0.01620 0.04580 0.05587 0.00903 - 0.20499 0.47941 0.50154 0.07657 0.02504 0.01623 0.04520 0.05507 0.00916 - 0.20247 0.47518 0.48753 0.07532 0.02491 0.01627 0.04464 0.05432 0.00928 - 0.20010 0.47112 0.47495 0.07415 0.02477 0.01627 0.04410 0.05361 0.00940 - 0.19771 0.46704 0.46232 0.07298 0.02463 0.01627 0.04355 0.05289 0.00952 - 0.33159 0.65708 0.98033 0.11352 0.00000 0.00000 0.04017 0.06075 0.00395 - 0.32695 0.65485 0.99558 0.11189 0.00000 0.00000 0.04115 0.06091 0.00402 - 0.32007 0.65052 1.00332 0.10945 0.00050 0.00000 0.04232 0.06097 0.00414 - 0.31510 0.64678 0.99863 0.10769 0.00214 0.00000 0.04300 0.06092 0.00423 - 0.30992 0.64239 0.98697 0.10582 0.00441 0.00000 0.04356 0.06078 0.00432 - 0.30547 0.63829 0.97403 0.10419 0.00605 0.00000 0.04393 0.06058 0.00441 - 0.30122 0.63413 0.95953 0.10262 0.00750 0.00000 0.04420 0.06032 0.00449 - 0.29672 0.62940 0.94150 0.10092 0.00886 0.00000 0.04437 0.05998 0.00457 - 0.29284 0.62511 0.92460 0.09944 0.00994 0.00000 0.04445 0.05964 0.00465 - 0.28913 0.62089 0.90766 0.09801 0.01090 0.00000 0.04449 0.05928 0.00472 - 0.28619 0.61741 0.89340 0.09687 0.01158 0.00000 0.04446 0.05896 0.00478 - 0.28003 0.60983 0.86102 0.09446 0.01291 0.00048 0.04435 0.05824 0.00491 - 0.27481 0.60311 0.83034 0.09241 0.01389 0.00171 0.04416 0.05757 0.00502 - 0.26905 0.59541 0.79529 0.09013 0.01483 0.00323 0.04386 0.05677 0.00515 - 0.26314 0.58720 0.75945 0.08776 0.01565 0.00453 0.04345 0.05587 0.00528 - 0.25786 0.57964 0.72758 0.08563 0.01626 0.00557 0.04301 0.05501 0.00540 - 0.25261 0.57191 0.69616 0.08349 0.01678 0.00649 0.04251 0.05410 0.00553 - 0.24831 0.56544 0.67073 0.08173 0.01714 0.00716 0.04206 0.05333 0.00563 - 0.24318 0.55750 0.64084 0.07962 0.01748 0.00786 0.04146 0.05237 0.00575 - 0.23870 0.55045 0.61526 0.07778 0.01773 0.00841 0.04091 0.05151 0.00587 - 0.23466 0.54400 0.59243 0.07612 0.01791 0.00886 0.04039 0.05071 0.00597 - 0.22960 0.53574 0.56467 0.07404 0.01807 0.00933 0.03969 0.04968 0.00610 - 0.22493 0.52796 0.53963 0.07211 0.01816 0.00971 0.03901 0.04871 0.00623 - 0.22063 0.52071 0.51702 0.07034 0.01822 0.01001 0.03837 0.04780 0.00634 - 0.21639 0.51346 0.49533 0.06860 0.01823 0.01027 0.03771 0.04688 0.00646 - 0.21231 0.50636 0.47507 0.06693 0.01821 0.01047 0.03706 0.04599 0.00658 - 0.20851 0.49969 0.45646 0.06538 0.01818 0.01063 0.03644 0.04515 0.00669 - 0.20498 0.49340 0.43980 0.06394 0.01811 0.01074 0.03585 0.04436 0.00679 - 0.20148 0.48712 0.42352 0.06251 0.01804 0.01084 0.03526 0.04357 0.00689 - 0.19809 0.48096 0.40823 0.06114 0.01794 0.01091 0.03467 0.04280 0.00700 - 0.19490 0.47514 0.39413 0.05986 0.01784 0.01096 0.03412 0.04208 0.00710 - 0.19194 0.46965 0.38136 0.05866 0.01774 0.01099 0.03359 0.04140 0.00719 - 0.18898 0.46415 0.36877 0.05748 0.01762 0.01101 0.03307 0.04071 0.00728 - 0.18610 0.45874 0.35698 0.05633 0.01750 0.01100 0.03255 0.04005 0.00738 - 0.18337 0.45362 0.34582 0.05524 0.01738 0.01100 0.03206 0.03941 0.00747 - 0.18083 0.44876 0.33592 0.05424 0.01725 0.01098 0.03159 0.03882 0.00755 - 0.17828 0.44389 0.32600 0.05323 0.01712 0.01095 0.03112 0.03823 0.00764 - 0.33395 0.69888 0.89512 0.09759 0.00000 0.00000 0.03385 0.04955 0.00337 - 0.32769 0.69279 0.89651 0.09554 0.00000 0.00000 0.03446 0.04958 0.00343 - 0.31863 0.68311 0.88736 0.09258 0.00039 0.00000 0.03512 0.04945 0.00353 - 0.31223 0.67575 0.87309 0.09050 0.00169 0.00000 0.03546 0.04928 0.00360 - 0.30565 0.66775 0.85339 0.08835 0.00347 0.00000 0.03570 0.04902 0.00367 - 0.30007 0.66067 0.83462 0.08651 0.00474 0.00000 0.03582 0.04873 0.00374 - 0.29480 0.65377 0.81543 0.08477 0.00585 0.00000 0.03586 0.04840 0.00380 - 0.28929 0.64625 0.79356 0.08292 0.00689 0.00000 0.03582 0.04799 0.00387 - 0.28459 0.63964 0.77400 0.08134 0.00769 0.00000 0.03574 0.04760 0.00393 - 0.28011 0.63325 0.75493 0.07983 0.00841 0.00000 0.03562 0.04720 0.00399 - 0.27661 0.62811 0.73947 0.07865 0.00891 0.00000 0.03550 0.04686 0.00404 - 0.26931 0.61716 0.70560 0.07617 0.00988 0.00036 0.03518 0.04611 0.00414 - 0.26320 0.60772 0.67502 0.07410 0.01058 0.00127 0.03485 0.04542 0.00423 - 0.25653 0.59713 0.64100 0.07183 0.01124 0.00240 0.03442 0.04462 0.00433 - 0.24975 0.58610 0.60690 0.06951 0.01181 0.00335 0.03390 0.04374 0.00443 - 0.24375 0.57611 0.57711 0.06744 0.01222 0.00409 0.03339 0.04292 0.00452 - 0.23783 0.56607 0.54818 0.06541 0.01256 0.00475 0.03284 0.04207 0.00462 - 0.23301 0.55776 0.52508 0.06375 0.01278 0.00522 0.03236 0.04135 0.00470 - 0.22731 0.54773 0.49830 0.06179 0.01299 0.00571 0.03176 0.04046 0.00479 - 0.22237 0.53892 0.47563 0.06009 0.01313 0.00608 0.03121 0.03968 0.00488 - 0.21793 0.53092 0.45555 0.05856 0.01322 0.00638 0.03069 0.03896 0.00496 - 0.21242 0.52082 0.43146 0.05668 0.01329 0.00670 0.03003 0.03804 0.00506 - 0.20737 0.51141 0.40997 0.05495 0.01332 0.00694 0.02939 0.03718 0.00515 - 0.20274 0.50270 0.39070 0.05338 0.01332 0.00713 0.02880 0.03637 0.00524 - 0.19820 0.49408 0.37238 0.05184 0.01329 0.00729 0.02820 0.03558 0.00533 - 0.19387 0.48571 0.35544 0.05038 0.01324 0.00740 0.02761 0.03480 0.00542 - 0.18984 0.47790 0.33994 0.04902 0.01318 0.00749 0.02706 0.03408 0.00550 - 0.18612 0.47059 0.32622 0.04778 0.01310 0.00755 0.02654 0.03340 0.00558 - 0.18245 0.46334 0.31286 0.04655 0.01302 0.00760 0.02602 0.03273 0.00565 - 0.17891 0.45627 0.30041 0.04538 0.01292 0.00762 0.02552 0.03208 0.00573 - 0.17560 0.44962 0.28898 0.04429 0.01282 0.00764 0.02504 0.03146 0.00580 - 0.17253 0.44339 0.27869 0.04328 0.01272 0.00764 0.02459 0.03089 0.00587 - 0.16947 0.43717 0.26859 0.04228 0.01262 0.00763 0.02414 0.03032 0.00594 - 0.16651 0.43109 0.25919 0.04132 0.01251 0.00761 0.02370 0.02976 0.00601 - 0.16372 0.42534 0.25031 0.04041 0.01240 0.00759 0.02329 0.02923 0.00608 - 0.16113 0.41994 0.24250 0.03958 0.01229 0.00756 0.02290 0.02874 0.00614 - 0.15853 0.41453 0.23468 0.03874 0.01219 0.00753 0.02251 0.02825 0.00620 - 0.32983 0.72644 0.81353 0.08212 0.00000 0.00000 0.02830 0.04103 0.00288 - 0.32220 0.71659 0.80487 0.07992 0.00000 0.00000 0.02865 0.04096 0.00293 - 0.31132 0.70177 0.78398 0.07680 0.00031 0.00000 0.02897 0.04071 0.00301 - 0.30375 0.69096 0.76341 0.07463 0.00135 0.00000 0.02909 0.04045 0.00307 - 0.29605 0.67958 0.73871 0.07243 0.00275 0.00000 0.02913 0.04012 0.00313 - 0.28957 0.66973 0.71653 0.07057 0.00374 0.00000 0.02909 0.03978 0.00318 - 0.28351 0.66030 0.69475 0.06883 0.00460 0.00000 0.02900 0.03941 0.00323 - 0.27723 0.65025 0.67105 0.06701 0.00539 0.00000 0.02884 0.03897 0.00329 - 0.27190 0.64155 0.65040 0.06547 0.00600 0.00000 0.02866 0.03856 0.00333 - 0.26686 0.63321 0.63059 0.06401 0.00654 0.00000 0.02847 0.03815 0.00338 - 0.26294 0.62660 0.61492 0.06287 0.00692 0.00000 0.02829 0.03780 0.00342 - 0.25481 0.61268 0.58135 0.06052 0.00763 0.00027 0.02788 0.03705 0.00350 - 0.24807 0.60087 0.55203 0.05857 0.00814 0.00096 0.02749 0.03638 0.00357 - 0.24076 0.58781 0.52004 0.05646 0.00861 0.00179 0.02701 0.03560 0.00365 - 0.23340 0.57439 0.48846 0.05433 0.00900 0.00250 0.02647 0.03477 0.00373 - 0.22692 0.56237 0.46126 0.05245 0.00928 0.00304 0.02595 0.03400 0.00380 - 0.22058 0.55042 0.43516 0.05062 0.00950 0.00351 0.02541 0.03321 0.00387 - 0.21545 0.54063 0.41455 0.04914 0.00964 0.00385 0.02495 0.03255 0.00394 - 0.20941 0.52892 0.39093 0.04740 0.00976 0.00419 0.02438 0.03175 0.00401 - 0.20422 0.51872 0.37111 0.04591 0.00984 0.00444 0.02386 0.03104 0.00408 - 0.19956 0.50950 0.35367 0.04458 0.00988 0.00465 0.02339 0.03040 0.00414 - 0.19382 0.49798 0.33299 0.04295 0.00990 0.00486 0.02279 0.02958 0.00421 - 0.18859 0.48734 0.31470 0.04147 0.00989 0.00502 0.02223 0.02882 0.00429 - 0.18381 0.47754 0.29841 0.04012 0.00987 0.00514 0.02170 0.02812 0.00435 - 0.17916 0.46790 0.28305 0.03881 0.00982 0.00523 0.02118 0.02743 0.00442 - 0.17473 0.45863 0.26896 0.03758 0.00976 0.00530 0.02067 0.02676 0.00449 - 0.17062 0.44999 0.25613 0.03644 0.00969 0.00535 0.02019 0.02614 0.00455 - 0.16686 0.44198 0.24487 0.03541 0.00962 0.00538 0.01975 0.02556 0.00461 - 0.16316 0.43405 0.23394 0.03439 0.00954 0.00540 0.01931 0.02498 0.00467 - 0.15960 0.42637 0.22382 0.03342 0.00945 0.00540 0.01888 0.02443 0.00472 - 0.15628 0.41917 0.21457 0.03252 0.00936 0.00540 0.01848 0.02391 0.00478 - 0.15321 0.41246 0.20630 0.03170 0.00928 0.00538 0.01811 0.02343 0.00483 - 0.15017 0.40577 0.19819 0.03088 0.00919 0.00537 0.01773 0.02295 0.00488 - 0.14724 0.39928 0.19071 0.03010 0.00909 0.00534 0.01737 0.02248 0.00493 - 0.14447 0.39314 0.18363 0.02936 0.00901 0.00532 0.01703 0.02204 0.00498 - 0.14192 0.38743 0.17748 0.02869 0.00892 0.00528 0.01671 0.02163 0.00503 - 0.13936 0.38169 0.17130 0.02802 0.00883 0.00525 0.01639 0.02123 0.00508 - 0.32055 0.74105 0.73643 0.06763 0.00000 0.00000 0.02346 0.03453 0.00246 - 0.31182 0.72767 0.72055 0.06546 0.00000 0.00000 0.02364 0.03438 0.00250 - 0.29952 0.70809 0.69163 0.06243 0.00025 0.00000 0.02373 0.03402 0.00256 - 0.29104 0.69414 0.66706 0.06035 0.00107 0.00000 0.02372 0.03370 0.00261 - 0.28249 0.67970 0.63948 0.05826 0.00218 0.00000 0.02363 0.03331 0.00266 - 0.27536 0.66737 0.61553 0.05651 0.00296 0.00000 0.02350 0.03293 0.00270 - 0.26871 0.65570 0.59260 0.05488 0.00363 0.00000 0.02334 0.03253 0.00275 - 0.26188 0.64344 0.56836 0.05321 0.00424 0.00000 0.02312 0.03207 0.00279 - 0.25611 0.63293 0.54763 0.05179 0.00470 0.00000 0.02290 0.03165 0.00283 - 0.25068 0.62292 0.52797 0.05046 0.00511 0.00000 0.02267 0.03123 0.00287 - 0.24648 0.61506 0.51268 0.04943 0.00539 0.00000 0.02247 0.03089 0.00290 - 0.23781 0.59863 0.48048 0.04731 0.00592 0.00020 0.02203 0.03015 0.00296 - 0.23067 0.58486 0.45304 0.04558 0.00629 0.00072 0.02163 0.02950 0.00301 - 0.22299 0.56978 0.42357 0.04371 0.00663 0.00135 0.02115 0.02876 0.00308 - 0.21529 0.55443 0.39485 0.04184 0.00691 0.00187 0.02063 0.02798 0.00314 - 0.20856 0.54081 0.37039 0.04022 0.00710 0.00227 0.02014 0.02726 0.00320 - 0.20201 0.52736 0.34718 0.03864 0.00724 0.00261 0.01964 0.02654 0.00326 - 0.19674 0.51643 0.32902 0.03737 0.00733 0.00285 0.01922 0.02594 0.00330 - 0.19057 0.50345 0.30842 0.03589 0.00740 0.00309 0.01870 0.02521 0.00336 - 0.18528 0.49222 0.29127 0.03463 0.00743 0.00327 0.01825 0.02458 0.00341 - 0.18055 0.48212 0.27625 0.03351 0.00745 0.00342 0.01783 0.02400 0.00346 - 0.17477 0.46958 0.25865 0.03215 0.00744 0.00356 0.01731 0.02328 0.00352 - 0.16952 0.45808 0.24319 0.03092 0.00742 0.00366 0.01682 0.02261 0.00358 - 0.16474 0.44754 0.22951 0.02981 0.00738 0.00373 0.01637 0.02200 0.00363 - 0.16010 0.43722 0.21670 0.02874 0.00733 0.00379 0.01592 0.02140 0.00368 - 0.15572 0.42736 0.20504 0.02773 0.00727 0.00383 0.01549 0.02082 0.00373 - 0.15166 0.41820 0.19445 0.02680 0.00721 0.00385 0.01509 0.02028 0.00378 - 0.14797 0.40976 0.18524 0.02597 0.00714 0.00386 0.01472 0.01979 0.00382 - 0.14433 0.40142 0.17632 0.02515 0.00707 0.00387 0.01435 0.01930 0.00387 - 0.14085 0.39339 0.16813 0.02437 0.00700 0.00386 0.01400 0.01882 0.00391 - 0.13762 0.38589 0.16066 0.02365 0.00692 0.00385 0.01367 0.01838 0.00395 - 0.13464 0.37892 0.15402 0.02299 0.00685 0.00383 0.01336 0.01798 0.00399 - 0.13169 0.37200 0.14752 0.02234 0.00678 0.00381 0.01306 0.01757 0.00403 - 0.12886 0.36531 0.14156 0.02173 0.00670 0.00378 0.01276 0.01718 0.00407 - 0.12618 0.35899 0.13593 0.02114 0.00663 0.00376 0.01249 0.01681 0.00410 - 0.12374 0.35314 0.13107 0.02062 0.00656 0.00373 0.01223 0.01647 0.00414 - 0.12128 0.34727 0.12620 0.02009 0.00648 0.00370 0.01197 0.01613 0.00417 - 0.30725 0.74403 0.66412 0.05449 0.00000 0.00000 0.01928 0.02950 0.00210 - 0.29769 0.72746 0.64318 0.05249 0.00000 0.00000 0.01934 0.02926 0.00213 - 0.28434 0.70362 0.60899 0.04971 0.00020 0.00000 0.01930 0.02880 0.00218 - 0.27522 0.68690 0.58210 0.04783 0.00086 0.00000 0.01920 0.02842 0.00222 - 0.26609 0.66981 0.55314 0.04596 0.00174 0.00000 0.01905 0.02798 0.00226 - 0.25850 0.65536 0.52856 0.04440 0.00235 0.00000 0.01887 0.02756 0.00230 - 0.25148 0.64179 0.50545 0.04295 0.00287 0.00000 0.01868 0.02714 0.00233 - 0.24430 0.62768 0.48154 0.04148 0.00334 0.00000 0.01843 0.02667 0.00237 - 0.23827 0.61566 0.46138 0.04025 0.00370 0.00000 0.01820 0.02625 0.00240 - 0.23261 0.60427 0.44243 0.03908 0.00401 0.00000 0.01797 0.02583 0.00243 - 0.22825 0.59540 0.42790 0.03819 0.00422 0.00000 0.01777 0.02549 0.00245 - 0.21930 0.57696 0.39768 0.03637 0.00461 0.00015 0.01734 0.02477 0.00250 - 0.21198 0.56164 0.37244 0.03489 0.00489 0.00055 0.01695 0.02415 0.00255 - 0.20413 0.54500 0.34569 0.03331 0.00513 0.00102 0.01650 0.02344 0.00260 - 0.19632 0.52818 0.31991 0.03173 0.00532 0.00141 0.01603 0.02271 0.00265 - 0.18953 0.51338 0.29820 0.03037 0.00545 0.00170 0.01559 0.02205 0.00269 - 0.18294 0.49885 0.27777 0.02906 0.00555 0.00195 0.01514 0.02138 0.00274 - 0.17767 0.48711 0.26192 0.02801 0.00560 0.00213 0.01477 0.02084 0.00278 - 0.17153 0.47326 0.24411 0.02680 0.00564 0.00230 0.01432 0.02018 0.00282 - 0.16629 0.46134 0.22938 0.02577 0.00565 0.00242 0.01392 0.01961 0.00286 - 0.16162 0.45065 0.21656 0.02485 0.00566 0.00252 0.01357 0.01910 0.00290 - 0.15594 0.43748 0.20167 0.02375 0.00564 0.00261 0.01312 0.01846 0.00294 - 0.15079 0.42546 0.18868 0.02276 0.00560 0.00268 0.01271 0.01788 0.00299 - 0.14613 0.41448 0.17725 0.02187 0.00556 0.00273 0.01233 0.01734 0.00303 - 0.14163 0.40380 0.16661 0.02101 0.00552 0.00276 0.01195 0.01681 0.00307 - 0.13739 0.39364 0.15700 0.02021 0.00546 0.00278 0.01160 0.01631 0.00310 - 0.13347 0.38422 0.14831 0.01948 0.00541 0.00279 0.01127 0.01585 0.00314 - 0.12992 0.37559 0.14080 0.01882 0.00535 0.00279 0.01096 0.01543 0.00318 - 0.12643 0.36709 0.13355 0.01817 0.00529 0.00278 0.01066 0.01501 0.00321 - 0.12311 0.35893 0.12693 0.01757 0.00523 0.00277 0.01038 0.01461 0.00324 - 0.12002 0.35133 0.12091 0.01700 0.00517 0.00276 0.01011 0.01423 0.00327 - 0.11719 0.34430 0.11559 0.01649 0.00511 0.00274 0.00986 0.01389 0.00330 - 0.11439 0.33733 0.11040 0.01599 0.00505 0.00272 0.00962 0.01355 0.00333 - 0.11172 0.33062 0.10566 0.01551 0.00499 0.00270 0.00938 0.01322 0.00336 - 0.10919 0.32428 0.10119 0.01506 0.00493 0.00267 0.00916 0.01291 0.00339 - 0.10689 0.31846 0.09736 0.01466 0.00487 0.00265 0.00895 0.01263 0.00342 - 0.10459 0.31262 0.09351 0.01426 0.00482 0.00262 0.00875 0.01235 0.00344 - 0.29091 0.73675 0.59664 0.04293 0.00000 0.00000 0.01570 0.02547 0.00178 - 0.28076 0.71738 0.57229 0.04118 0.00000 0.00000 0.01569 0.02515 0.00181 - 0.26673 0.68990 0.53493 0.03876 0.00016 0.00000 0.01557 0.02460 0.00186 - 0.25720 0.67083 0.50695 0.03714 0.00068 0.00000 0.01543 0.02417 0.00189 - 0.24773 0.65153 0.47770 0.03553 0.00138 0.00000 0.01525 0.02368 0.00192 - 0.23990 0.63534 0.45331 0.03420 0.00187 0.00000 0.01505 0.02324 0.00195 - 0.23268 0.62022 0.43069 0.03298 0.00227 0.00000 0.01485 0.02280 0.00198 - 0.22535 0.60463 0.40769 0.03173 0.00264 0.00000 0.01460 0.02232 0.00201 - 0.21921 0.59143 0.38851 0.03070 0.00291 0.00000 0.01438 0.02190 0.00203 - 0.21346 0.57897 0.37062 0.02973 0.00315 0.00000 0.01416 0.02149 0.00205 - 0.20906 0.56932 0.35706 0.02898 0.00331 0.00000 0.01397 0.02116 0.00207 - 0.20004 0.54937 0.32918 0.02747 0.00360 0.00012 0.01357 0.02046 0.00211 - 0.19271 0.53291 0.30627 0.02625 0.00380 0.00042 0.01322 0.01986 0.00215 - 0.18489 0.51515 0.28228 0.02495 0.00398 0.00077 0.01282 0.01920 0.00219 - 0.17715 0.49733 0.25939 0.02367 0.00412 0.00106 0.01239 0.01852 0.00223 - 0.17045 0.48173 0.24029 0.02257 0.00421 0.00128 0.01201 0.01791 0.00226 - 0.16398 0.46651 0.22247 0.02151 0.00427 0.00146 0.01162 0.01730 0.00230 - 0.15883 0.45427 0.20876 0.02067 0.00430 0.00159 0.01130 0.01680 0.00233 - 0.15284 0.43991 0.19348 0.01970 0.00432 0.00171 0.01092 0.01622 0.00236 - 0.14776 0.42760 0.18093 0.01889 0.00432 0.00180 0.01059 0.01571 0.00240 - 0.14324 0.41661 0.17005 0.01816 0.00431 0.00186 0.01029 0.01525 0.00242 - 0.13777 0.40314 0.15752 0.01729 0.00429 0.00193 0.00991 0.01469 0.00246 - 0.13284 0.39091 0.14668 0.01652 0.00426 0.00197 0.00957 0.01418 0.00249 - 0.12838 0.37977 0.13717 0.01582 0.00422 0.00200 0.00926 0.01371 0.00252 - 0.12409 0.36898 0.12839 0.01515 0.00418 0.00202 0.00895 0.01325 0.00256 - 0.12007 0.35877 0.12051 0.01454 0.00413 0.00202 0.00866 0.01282 0.00259 - 0.11636 0.34932 0.11339 0.01397 0.00408 0.00203 0.00839 0.01243 0.00261 - 0.11301 0.34071 0.10730 0.01346 0.00404 0.00202 0.00815 0.01206 0.00264 - 0.10973 0.33224 0.10143 0.01297 0.00399 0.00201 0.00790 0.01171 0.00267 - 0.10661 0.32415 0.09609 0.01250 0.00394 0.00200 0.00767 0.01137 0.00269 - 0.10373 0.31663 0.09126 0.01207 0.00389 0.00199 0.00746 0.01105 0.00271 - 0.10109 0.30970 0.08701 0.01169 0.00384 0.00197 0.00726 0.01076 0.00274 - 0.09848 0.30283 0.08287 0.01130 0.00379 0.00195 0.00707 0.01047 0.00276 - 0.09600 0.29626 0.07911 0.01094 0.00375 0.00193 0.00688 0.01020 0.00278 - 0.09365 0.29005 0.07557 0.01060 0.00370 0.00191 0.00670 0.00994 0.00280 - 0.09153 0.28437 0.07255 0.01030 0.00366 0.00189 0.00654 0.00971 0.00282 - 0.08940 0.27867 0.06953 0.01000 0.00361 0.00187 0.00638 0.00947 0.00284 - 0.27234 0.72051 0.53391 0.03306 0.00000 0.00000 0.01267 0.02211 0.00151 - 0.26186 0.69880 0.50746 0.03159 0.00000 0.00000 0.01261 0.02172 0.00154 - 0.24747 0.66831 0.46853 0.02958 0.00013 0.00000 0.01245 0.02109 0.00157 - 0.23777 0.64736 0.44039 0.02824 0.00055 0.00000 0.01230 0.02061 0.00160 - 0.22817 0.62631 0.41163 0.02691 0.00110 0.00000 0.01211 0.02010 0.00163 - 0.22027 0.60876 0.38798 0.02582 0.00148 0.00000 0.01191 0.01964 0.00165 - 0.21302 0.59247 0.36631 0.02482 0.00180 0.00000 0.01172 0.01920 0.00167 - 0.20569 0.57578 0.34460 0.02381 0.00208 0.00000 0.01149 0.01872 0.00169 - 0.19957 0.56171 0.32667 0.02297 0.00229 0.00000 0.01128 0.01830 0.00171 - 0.19386 0.54848 0.31005 0.02219 0.00247 0.00000 0.01108 0.01790 0.00173 - 0.18951 0.53829 0.29759 0.02159 0.00259 0.00000 0.01091 0.01758 0.00175 - 0.18062 0.51732 0.27220 0.02038 0.00282 0.00009 0.01055 0.01691 0.00178 - 0.17343 0.50011 0.25164 0.01941 0.00296 0.00032 0.01024 0.01635 0.00181 - 0.16580 0.48166 0.23034 0.01838 0.00309 0.00059 0.00989 0.01573 0.00184 - 0.15827 0.46325 0.21020 0.01737 0.00319 0.00080 0.00953 0.01510 0.00187 - 0.15179 0.44723 0.19355 0.01650 0.00325 0.00096 0.00920 0.01454 0.00190 - 0.14556 0.43167 0.17813 0.01567 0.00329 0.00110 0.00887 0.01399 0.00193 - 0.14061 0.41921 0.16636 0.01502 0.00331 0.00119 0.00861 0.01355 0.00195 - 0.13489 0.40467 0.15333 0.01426 0.00332 0.00127 0.00829 0.01302 0.00198 - 0.13005 0.39226 0.14270 0.01363 0.00331 0.00133 0.00801 0.01258 0.00200 - 0.12576 0.38120 0.13353 0.01307 0.00330 0.00138 0.00776 0.01217 0.00203 - 0.12058 0.36774 0.12307 0.01241 0.00328 0.00142 0.00746 0.01168 0.00205 - 0.11594 0.35555 0.11406 0.01181 0.00325 0.00145 0.00718 0.01123 0.00208 - 0.11175 0.34450 0.10620 0.01128 0.00322 0.00146 0.00692 0.01083 0.00210 - 0.10774 0.33383 0.09898 0.01078 0.00318 0.00147 0.00667 0.01044 0.00213 - 0.10398 0.32377 0.09254 0.01031 0.00314 0.00148 0.00644 0.01007 0.00215 - 0.10053 0.31449 0.08675 0.00988 0.00310 0.00147 0.00623 0.00973 0.00217 - 0.09742 0.30607 0.08183 0.00950 0.00306 0.00147 0.00603 0.00942 0.00219 - 0.09438 0.29780 0.07709 0.00913 0.00302 0.00146 0.00584 0.00912 0.00221 - 0.09151 0.28993 0.07281 0.00878 0.00298 0.00145 0.00565 0.00883 0.00223 - 0.08886 0.28263 0.06895 0.00846 0.00295 0.00143 0.00548 0.00857 0.00225 - 0.08643 0.27593 0.06556 0.00817 0.00291 0.00142 0.00533 0.00832 0.00227 - 0.08404 0.26930 0.06227 0.00789 0.00287 0.00140 0.00517 0.00808 0.00228 - 0.08177 0.26297 0.05930 0.00762 0.00284 0.00138 0.00503 0.00786 0.00230 - 0.07963 0.25699 0.05650 0.00737 0.00280 0.00137 0.00489 0.00764 0.00232 - 0.07771 0.25156 0.05413 0.00715 0.00277 0.00135 0.00477 0.00745 0.00233 - 0.07577 0.24611 0.05176 0.00693 0.00273 0.00133 0.00464 0.00725 0.00235 - 0.25227 0.69661 0.47581 0.02487 0.00000 0.00000 0.01012 0.01918 0.00128 - 0.24169 0.67303 0.44829 0.02369 0.00000 0.00000 0.01004 0.01873 0.00130 - 0.22724 0.64021 0.40901 0.02208 0.00010 0.00000 0.00987 0.01805 0.00133 - 0.21755 0.61785 0.38140 0.02101 0.00043 0.00000 0.00972 0.01755 0.00135 - 0.20802 0.59552 0.35369 0.01996 0.00088 0.00000 0.00953 0.01702 0.00137 - 0.20021 0.57701 0.33119 0.01910 0.00117 0.00000 0.00935 0.01655 0.00139 - 0.19306 0.55989 0.31078 0.01831 0.00142 0.00000 0.00917 0.01611 0.00141 - 0.18588 0.54247 0.29058 0.01752 0.00164 0.00000 0.00897 0.01564 0.00143 - 0.17990 0.52786 0.27405 0.01686 0.00180 0.00000 0.00878 0.01524 0.00144 - 0.17433 0.51415 0.25882 0.01625 0.00194 0.00000 0.00860 0.01486 0.00146 - 0.17011 0.50364 0.24750 0.01578 0.00203 0.00000 0.00846 0.01456 0.00147 - 0.16150 0.48209 0.22463 0.01484 0.00220 0.00007 0.00815 0.01393 0.00150 - 0.15457 0.46452 0.20637 0.01409 0.00231 0.00024 0.00788 0.01341 0.00152 - 0.14725 0.44577 0.18762 0.01330 0.00240 0.00044 0.00758 0.01284 0.00154 - 0.14006 0.42716 0.17005 0.01252 0.00247 0.00060 0.00728 0.01227 0.00157 - 0.13390 0.41104 0.15565 0.01186 0.00251 0.00072 0.00700 0.01176 0.00159 - 0.12799 0.39546 0.14241 0.01123 0.00254 0.00082 0.00673 0.01127 0.00161 - 0.12333 0.38304 0.13238 0.01073 0.00255 0.00088 0.00651 0.01088 0.00163 - 0.11795 0.36861 0.12135 0.01016 0.00255 0.00095 0.00625 0.01042 0.00165 - 0.11341 0.35633 0.11241 0.00968 0.00254 0.00099 0.00602 0.01002 0.00167 - 0.10940 0.34543 0.10473 0.00926 0.00253 0.00102 0.00582 0.00967 0.00169 - 0.10458 0.33221 0.09603 0.00877 0.00251 0.00105 0.00557 0.00925 0.00171 - 0.10027 0.32030 0.08859 0.00832 0.00249 0.00106 0.00535 0.00886 0.00173 - 0.09640 0.30953 0.08213 0.00793 0.00246 0.00107 0.00515 0.00851 0.00175 - 0.09270 0.29917 0.07623 0.00755 0.00243 0.00108 0.00495 0.00818 0.00177 - 0.08925 0.28944 0.07100 0.00721 0.00240 0.00108 0.00476 0.00787 0.00178 - 0.08608 0.28048 0.06631 0.00689 0.00237 0.00107 0.00459 0.00758 0.00180 - 0.08325 0.27239 0.06234 0.00661 0.00234 0.00106 0.00444 0.00732 0.00182 - 0.08048 0.26446 0.05854 0.00634 0.00231 0.00106 0.00429 0.00707 0.00183 - 0.07787 0.25694 0.05512 0.00608 0.00228 0.00105 0.00414 0.00683 0.00185 - 0.07546 0.24997 0.05204 0.00585 0.00225 0.00103 0.00401 0.00661 0.00186 - 0.07326 0.24359 0.04936 0.00564 0.00222 0.00102 0.00389 0.00641 0.00187 - 0.07110 0.23729 0.04676 0.00543 0.00219 0.00101 0.00377 0.00621 0.00189 - 0.06906 0.23131 0.04442 0.00524 0.00216 0.00099 0.00366 0.00602 0.00190 - 0.06713 0.22565 0.04222 0.00506 0.00213 0.00098 0.00355 0.00584 0.00191 - 0.06540 0.22053 0.04037 0.00490 0.00211 0.00097 0.00345 0.00569 0.00192 - 0.06367 0.21540 0.03852 0.00474 0.00208 0.00095 0.00336 0.00553 0.00193 - 0.23131 0.66630 0.42217 0.01825 0.00000 0.00000 0.00800 0.01654 0.00108 - 0.22081 0.64134 0.39439 0.01734 0.00000 0.00000 0.00792 0.01606 0.00109 - 0.20657 0.60687 0.35571 0.01611 0.00008 0.00000 0.00775 0.01534 0.00112 - 0.19708 0.58355 0.32912 0.01529 0.00035 0.00000 0.00760 0.01483 0.00113 - 0.18778 0.56039 0.30286 0.01449 0.00069 0.00000 0.00743 0.01431 0.00115 - 0.18019 0.54130 0.28178 0.01383 0.00093 0.00000 0.00727 0.01386 0.00117 - 0.17326 0.52371 0.26281 0.01323 0.00112 0.00000 0.00712 0.01343 0.00118 - 0.16634 0.50591 0.24427 0.01263 0.00129 0.00000 0.00694 0.01298 0.00120 - 0.16060 0.49104 0.22921 0.01213 0.00142 0.00000 0.00678 0.01260 0.00121 - 0.15525 0.47712 0.21541 0.01167 0.00152 0.00000 0.00662 0.01224 0.00122 - 0.15122 0.46650 0.20524 0.01132 0.00159 0.00000 0.00650 0.01196 0.00123 - 0.14302 0.44479 0.18486 0.01061 0.00172 0.00005 0.00624 0.01139 0.00125 - 0.13645 0.42719 0.16877 0.01004 0.00180 0.00018 0.00601 0.01091 0.00127 - 0.12954 0.40850 0.15241 0.00945 0.00187 0.00033 0.00577 0.01040 0.00129 - 0.12278 0.39003 0.13721 0.00887 0.00192 0.00045 0.00552 0.00989 0.00131 - 0.11701 0.37411 0.12484 0.00838 0.00195 0.00054 0.00529 0.00944 0.00133 - 0.11150 0.35879 0.11357 0.00791 0.00196 0.00061 0.00507 0.00901 0.00134 - 0.10716 0.34662 0.10507 0.00754 0.00197 0.00066 0.00489 0.00866 0.00136 - 0.10218 0.33254 0.09580 0.00712 0.00197 0.00070 0.00468 0.00826 0.00137 - 0.09798 0.32061 0.08833 0.00677 0.00196 0.00073 0.00450 0.00792 0.00139 - 0.09429 0.31004 0.08194 0.00646 0.00195 0.00075 0.00434 0.00762 0.00140 - 0.08987 0.29729 0.07475 0.00610 0.00193 0.00077 0.00414 0.00726 0.00142 - 0.08593 0.28584 0.06865 0.00577 0.00191 0.00078 0.00396 0.00693 0.00143 - 0.08240 0.27551 0.06337 0.00549 0.00189 0.00079 0.00380 0.00664 0.00145 - 0.07903 0.26561 0.05857 0.00522 0.00186 0.00079 0.00364 0.00636 0.00146 - 0.07591 0.25635 0.05435 0.00496 0.00184 0.00078 0.00350 0.00610 0.00148 - 0.07305 0.24783 0.05057 0.00474 0.00181 0.00078 0.00337 0.00586 0.00149 - 0.07050 0.24018 0.04740 0.00454 0.00179 0.00077 0.00325 0.00564 0.00150 - 0.06800 0.23269 0.04436 0.00434 0.00177 0.00076 0.00313 0.00543 0.00151 - 0.06566 0.22561 0.04165 0.00416 0.00174 0.00075 0.00302 0.00524 0.00152 - 0.06350 0.21906 0.03921 0.00399 0.00172 0.00075 0.00291 0.00506 0.00153 - 0.06155 0.21309 0.03709 0.00384 0.00170 0.00074 0.00282 0.00489 0.00154 - 0.05962 0.20719 0.03504 0.00369 0.00168 0.00072 0.00273 0.00473 0.00155 - 0.05781 0.20161 0.03321 0.00356 0.00166 0.00071 0.00264 0.00458 0.00156 - 0.05609 0.19634 0.03148 0.00343 0.00164 0.00070 0.00256 0.00443 0.00157 - 0.05457 0.19159 0.03005 0.00331 0.00162 0.00069 0.00249 0.00430 0.00158 - 0.05303 0.18683 0.02861 0.00320 0.00160 0.00068 0.00242 0.00417 0.00159 - 0.20998 0.63078 0.37283 0.01306 0.00000 0.00000 0.00625 0.01411 0.00090 - 0.19975 0.60492 0.34542 0.01239 0.00000 0.00000 0.00617 0.01362 0.00091 - 0.18594 0.56947 0.30805 0.01148 0.00007 0.00000 0.00602 0.01290 0.00093 - 0.17679 0.54562 0.28285 0.01088 0.00027 0.00000 0.00589 0.01241 0.00095 - 0.16786 0.52208 0.25832 0.01028 0.00055 0.00000 0.00574 0.01190 0.00096 - 0.16060 0.50276 0.23880 0.00980 0.00073 0.00000 0.00560 0.01147 0.00097 - 0.15399 0.48503 0.22140 0.00936 0.00088 0.00000 0.00547 0.01107 0.00098 - 0.14742 0.46718 0.20456 0.00892 0.00101 0.00000 0.00531 0.01066 0.00100 - 0.14198 0.45231 0.19099 0.00855 0.00111 0.00000 0.00518 0.01031 0.00101 - 0.13694 0.43844 0.17862 0.00821 0.00119 0.00000 0.00505 0.00998 0.00102 - 0.13314 0.42790 0.16957 0.00796 0.00124 0.00000 0.00495 0.00973 0.00102 - 0.12545 0.40641 0.15157 0.00744 0.00134 0.00004 0.00473 0.00921 0.00104 - 0.11931 0.38908 0.13753 0.00703 0.00140 0.00014 0.00455 0.00878 0.00106 - 0.11288 0.37075 0.12337 0.00659 0.00145 0.00025 0.00435 0.00833 0.00107 - 0.10662 0.35274 0.11032 0.00617 0.00149 0.00034 0.00414 0.00788 0.00109 - 0.10129 0.33727 0.09978 0.00582 0.00151 0.00040 0.00396 0.00750 0.00110 - 0.09622 0.32244 0.09024 0.00548 0.00152 0.00045 0.00378 0.00712 0.00111 - 0.09224 0.31071 0.08310 0.00521 0.00152 0.00049 0.00364 0.00683 0.00112 - 0.08769 0.29719 0.07536 0.00491 0.00152 0.00052 0.00347 0.00649 0.00114 - 0.08387 0.28577 0.06916 0.00466 0.00151 0.00054 0.00333 0.00620 0.00115 - 0.08051 0.27568 0.06388 0.00444 0.00150 0.00055 0.00320 0.00594 0.00116 - 0.07652 0.26356 0.05799 0.00418 0.00149 0.00056 0.00305 0.00564 0.00117 - 0.07296 0.25271 0.05300 0.00395 0.00147 0.00057 0.00291 0.00537 0.00118 - 0.06979 0.24295 0.04872 0.00374 0.00145 0.00057 0.00278 0.00512 0.00120 - 0.06677 0.23364 0.04485 0.00355 0.00143 0.00057 0.00266 0.00489 0.00121 - 0.06398 0.22495 0.04146 0.00337 0.00141 0.00057 0.00255 0.00467 0.00122 - 0.06142 0.21698 0.03843 0.00321 0.00140 0.00056 0.00245 0.00448 0.00123 - 0.05915 0.20984 0.03591 0.00307 0.00138 0.00056 0.00236 0.00430 0.00124 - 0.05694 0.20286 0.03350 0.00293 0.00136 0.00055 0.00227 0.00413 0.00124 - 0.05487 0.19629 0.03135 0.00280 0.00134 0.00054 0.00218 0.00397 0.00125 - 0.05296 0.19023 0.02943 0.00268 0.00132 0.00054 0.00210 0.00382 0.00126 - 0.05124 0.18471 0.02777 0.00258 0.00131 0.00053 0.00203 0.00369 0.00127 - 0.04954 0.17927 0.02617 0.00248 0.00129 0.00052 0.00196 0.00356 0.00128 - 0.04795 0.17414 0.02474 0.00238 0.00128 0.00051 0.00190 0.00344 0.00128 - 0.04645 0.16929 0.02340 0.00229 0.00126 0.00050 0.00184 0.00332 0.00129 - 0.04512 0.16495 0.02229 0.00221 0.00125 0.00050 0.00178 0.00322 0.00130 - 0.04378 0.16059 0.02117 0.00213 0.00123 0.00049 0.00173 0.00312 0.00130 - 0.18874 0.59119 0.32760 0.00910 0.00000 0.00000 0.00483 0.01186 0.00075 - 0.17891 0.56490 0.30106 0.00863 0.00000 0.00000 0.00476 0.01138 0.00076 - 0.16572 0.52908 0.26552 0.00798 0.00005 0.00000 0.00462 0.01070 0.00078 - 0.15703 0.50514 0.24197 0.00756 0.00022 0.00000 0.00451 0.01023 0.00079 - 0.14858 0.48163 0.21932 0.00714 0.00043 0.00000 0.00438 0.00976 0.00080 - 0.14173 0.46240 0.20147 0.00679 0.00058 0.00000 0.00427 0.00937 0.00081 - 0.13553 0.44483 0.18567 0.00648 0.00069 0.00000 0.00416 0.00900 0.00082 - 0.12938 0.42721 0.17055 0.00617 0.00079 0.00000 0.00403 0.00863 0.00083 - 0.12431 0.41260 0.15844 0.00591 0.00087 0.00000 0.00392 0.00832 0.00084 - 0.11961 0.39899 0.14745 0.00567 0.00093 0.00000 0.00382 0.00802 0.00084 - 0.11609 0.38869 0.13949 0.00548 0.00097 0.00000 0.00373 0.00780 0.00085 - 0.10897 0.36777 0.12373 0.00512 0.00104 0.00003 0.00355 0.00734 0.00086 - 0.10332 0.35096 0.11157 0.00482 0.00109 0.00010 0.00341 0.00698 0.00087 - 0.09741 0.33327 0.09941 0.00452 0.00113 0.00019 0.00325 0.00658 0.00089 - 0.09169 0.31596 0.08830 0.00422 0.00115 0.00025 0.00308 0.00620 0.00090 - 0.08683 0.30115 0.07939 0.00397 0.00117 0.00030 0.00294 0.00587 0.00091 - 0.08223 0.28702 0.07138 0.00373 0.00117 0.00034 0.00280 0.00555 0.00092 - 0.07863 0.27587 0.06542 0.00354 0.00117 0.00036 0.00269 0.00531 0.00093 - 0.07453 0.26308 0.05901 0.00333 0.00117 0.00038 0.00255 0.00502 0.00094 - 0.07110 0.25231 0.05391 0.00315 0.00117 0.00040 0.00244 0.00478 0.00095 - 0.06809 0.24280 0.04957 0.00300 0.00116 0.00041 0.00234 0.00457 0.00095 - 0.06452 0.23145 0.04477 0.00282 0.00115 0.00041 0.00222 0.00432 0.00096 - 0.06136 0.22132 0.04074 0.00266 0.00113 0.00042 0.00212 0.00410 0.00097 - 0.05854 0.21223 0.03728 0.00251 0.00112 0.00042 0.00202 0.00390 0.00098 - 0.05587 0.20358 0.03418 0.00238 0.00111 0.00042 0.00193 0.00371 0.00099 - 0.05340 0.19555 0.03147 0.00225 0.00109 0.00041 0.00184 0.00354 0.00100 - 0.05115 0.18819 0.02907 0.00214 0.00108 0.00041 0.00176 0.00338 0.00101 - 0.04916 0.18162 0.02707 0.00204 0.00106 0.00040 0.00169 0.00324 0.00101 - 0.04722 0.17521 0.02517 0.00195 0.00105 0.00040 0.00163 0.00310 0.00102 - 0.04541 0.16919 0.02349 0.00186 0.00104 0.00039 0.00156 0.00297 0.00103 - 0.04375 0.16365 0.02199 0.00178 0.00102 0.00039 0.00150 0.00286 0.00103 - 0.04225 0.15862 0.02070 0.00171 0.00101 0.00038 0.00145 0.00275 0.00104 - 0.04078 0.15367 0.01945 0.00164 0.00100 0.00037 0.00140 0.00265 0.00104 - 0.03940 0.14901 0.01835 0.00157 0.00099 0.00037 0.00135 0.00255 0.00105 - 0.03810 0.14461 0.01731 0.00151 0.00098 0.00036 0.00130 0.00246 0.00105 - 0.03695 0.14069 0.01645 0.00146 0.00097 0.00035 0.00126 0.00238 0.00106 - 0.03579 0.13676 0.01560 0.00140 0.00095 0.00035 0.00122 0.00230 0.00106 - 0.16793 0.54859 0.28630 0.00617 0.00000 0.00000 0.00368 0.00980 0.00062 - 0.15864 0.52230 0.26100 0.00585 0.00000 0.00000 0.00362 0.00935 0.00063 - 0.14622 0.48672 0.22767 0.00542 0.00004 0.00000 0.00351 0.00872 0.00064 - 0.13808 0.46307 0.20592 0.00513 0.00017 0.00000 0.00341 0.00829 0.00065 - 0.13019 0.43994 0.18525 0.00484 0.00034 0.00000 0.00331 0.00787 0.00066 - 0.12384 0.42111 0.16910 0.00461 0.00045 0.00000 0.00321 0.00752 0.00067 - 0.11809 0.40396 0.15491 0.00439 0.00054 0.00000 0.00312 0.00720 0.00067 - 0.11241 0.38685 0.14146 0.00418 0.00062 0.00000 0.00302 0.00687 0.00068 - 0.10774 0.37270 0.13077 0.00400 0.00068 0.00000 0.00293 0.00660 0.00069 - 0.10343 0.35956 0.12110 0.00383 0.00072 0.00000 0.00285 0.00635 0.00069 - 0.10021 0.34964 0.11414 0.00371 0.00075 0.00000 0.00278 0.00615 0.00070 - 0.09371 0.32956 0.10048 0.00345 0.00081 0.00002 0.00264 0.00576 0.00071 - 0.08857 0.31350 0.09004 0.00325 0.00084 0.00008 0.00252 0.00545 0.00072 - 0.08322 0.29667 0.07969 0.00304 0.00087 0.00014 0.00240 0.00512 0.00073 - 0.07806 0.28027 0.07030 0.00284 0.00089 0.00019 0.00227 0.00480 0.00074 - 0.07370 0.26630 0.06283 0.00266 0.00090 0.00022 0.00216 0.00452 0.00074 - 0.06958 0.25301 0.05616 0.00250 0.00091 0.00025 0.00205 0.00426 0.00075 - 0.06637 0.24256 0.05123 0.00237 0.00091 0.00026 0.00196 0.00406 0.00076 - 0.06272 0.23062 0.04596 0.00222 0.00090 0.00028 0.00186 0.00383 0.00077 - 0.05968 0.22060 0.04178 0.00210 0.00090 0.00029 0.00177 0.00363 0.00077 - 0.05701 0.21178 0.03825 0.00200 0.00089 0.00030 0.00170 0.00346 0.00078 - 0.05387 0.20129 0.03438 0.00187 0.00088 0.00030 0.00161 0.00326 0.00079 - 0.05109 0.19196 0.03114 0.00176 0.00088 0.00030 0.00153 0.00308 0.00080 - 0.04861 0.18361 0.02837 0.00166 0.00087 0.00030 0.00145 0.00292 0.00080 - 0.04628 0.17568 0.02590 0.00157 0.00085 0.00030 0.00138 0.00277 0.00081 - 0.04413 0.16835 0.02376 0.00149 0.00084 0.00030 0.00132 0.00263 0.00081 - 0.04218 0.16164 0.02186 0.00141 0.00083 0.00029 0.00126 0.00251 0.00082 - 0.04045 0.15568 0.02030 0.00135 0.00082 0.00029 0.00121 0.00240 0.00082 - 0.03877 0.14986 0.01881 0.00128 0.00081 0.00029 0.00116 0.00229 0.00083 - 0.03721 0.14443 0.01750 0.00122 0.00080 0.00028 0.00111 0.00219 0.00083 - 0.03578 0.13942 0.01634 0.00117 0.00079 0.00028 0.00107 0.00210 0.00084 - 0.03449 0.13490 0.01534 0.00112 0.00078 0.00027 0.00103 0.00202 0.00084 - 0.03323 0.13045 0.01437 0.00107 0.00077 0.00027 0.00099 0.00194 0.00085 - 0.03205 0.12628 0.01353 0.00103 0.00077 0.00026 0.00095 0.00186 0.00085 - 0.03094 0.12234 0.01273 0.00098 0.00076 0.00026 0.00092 0.00179 0.00085 - 0.02996 0.11884 0.01208 0.00095 0.00075 0.00025 0.00089 0.00173 0.00086 - 0.02897 0.11533 0.01142 0.00091 0.00074 0.00025 0.00086 0.00167 0.00086 - 0.14790 0.50400 0.24875 0.00406 0.00000 0.00000 0.00277 0.00793 0.00051 - 0.13922 0.47813 0.22497 0.00386 0.00000 0.00000 0.00272 0.00753 0.00052 - 0.12770 0.44331 0.19410 0.00358 0.00003 0.00000 0.00262 0.00697 0.00053 - 0.12017 0.42029 0.17424 0.00339 0.00013 0.00000 0.00255 0.00659 0.00053 - 0.11292 0.39789 0.15557 0.00321 0.00026 0.00000 0.00247 0.00623 0.00054 - 0.10709 0.37972 0.14111 0.00305 0.00035 0.00000 0.00239 0.00592 0.00055 - 0.10183 0.36322 0.12850 0.00291 0.00042 0.00000 0.00232 0.00565 0.00055 - 0.09666 0.34683 0.11665 0.00277 0.00048 0.00000 0.00224 0.00537 0.00056 - 0.09243 0.33333 0.10729 0.00265 0.00052 0.00000 0.00217 0.00514 0.00056 - 0.08852 0.32081 0.09887 0.00254 0.00056 0.00000 0.00210 0.00493 0.00057 - 0.08561 0.31140 0.09285 0.00246 0.00058 0.00000 0.00205 0.00476 0.00057 - 0.07976 0.29239 0.08111 0.00229 0.00063 0.00002 0.00194 0.00444 0.00058 - 0.07515 0.27727 0.07222 0.00215 0.00065 0.00006 0.00185 0.00418 0.00059 - 0.07037 0.26147 0.06348 0.00201 0.00067 0.00010 0.00175 0.00391 0.00059 - 0.06577 0.24614 0.05562 0.00187 0.00069 0.00014 0.00165 0.00365 0.00060 - 0.06190 0.23314 0.04941 0.00176 0.00070 0.00016 0.00156 0.00342 0.00061 - 0.05826 0.22082 0.04390 0.00165 0.00070 0.00018 0.00148 0.00321 0.00061 - 0.05543 0.21116 0.03985 0.00156 0.00070 0.00019 0.00141 0.00305 0.00062 - 0.05223 0.20017 0.03556 0.00146 0.00070 0.00020 0.00134 0.00286 0.00062 - 0.04957 0.19097 0.03217 0.00138 0.00069 0.00021 0.00127 0.00271 0.00063 - 0.04724 0.18289 0.02932 0.00131 0.00069 0.00022 0.00122 0.00257 0.00063 - 0.04450 0.17332 0.02622 0.00123 0.00068 0.00022 0.00115 0.00241 0.00064 - 0.04209 0.16483 0.02363 0.00115 0.00068 0.00022 0.00109 0.00227 0.00065 - 0.03995 0.15726 0.02144 0.00109 0.00067 0.00022 0.00103 0.00215 0.00065 - 0.03794 0.15009 0.01949 0.00103 0.00066 0.00022 0.00098 0.00203 0.00065 - 0.03609 0.14348 0.01781 0.00097 0.00065 0.00021 0.00093 0.00192 0.00066 - 0.03441 0.13745 0.01632 0.00092 0.00065 0.00021 0.00089 0.00183 0.00066 - 0.03293 0.13211 0.01511 0.00087 0.00064 0.00021 0.00085 0.00174 0.00067 - 0.03150 0.12690 0.01395 0.00083 0.00063 0.00021 0.00081 0.00166 0.00067 - 0.03017 0.12205 0.01294 0.00079 0.00062 0.00020 0.00078 0.00158 0.00067 - 0.02895 0.11760 0.01205 0.00075 0.00062 0.00020 0.00075 0.00151 0.00068 - 0.02786 0.11358 0.01128 0.00072 0.00061 0.00019 0.00072 0.00145 0.00068 - 0.02679 0.10963 0.01054 0.00069 0.00060 0.00019 0.00069 0.00139 0.00068 - 0.02579 0.10594 0.00990 0.00066 0.00060 0.00019 0.00067 0.00134 0.00069 - 0.02485 0.10246 0.00929 0.00063 0.00059 0.00018 0.00064 0.00128 0.00069 - 0.02403 0.09938 0.00880 0.00061 0.00059 0.00018 0.00062 0.00124 0.00069 - 0.02320 0.09629 0.00830 0.00059 0.00058 0.00018 0.00060 0.00119 0.00069 - 0.12885 0.45831 0.21474 0.00259 0.00000 0.00000 0.00205 0.00628 0.00041 - 0.12086 0.43322 0.19267 0.00247 0.00000 0.00000 0.00201 0.00593 0.00042 - 0.11031 0.39964 0.16442 0.00231 0.00002 0.00000 0.00194 0.00545 0.00043 - 0.10345 0.37756 0.14649 0.00219 0.00010 0.00000 0.00188 0.00513 0.00043 - 0.09687 0.35616 0.12981 0.00208 0.00020 0.00000 0.00181 0.00482 0.00044 - 0.09159 0.33887 0.11699 0.00198 0.00027 0.00000 0.00175 0.00457 0.00044 - 0.08685 0.32323 0.10589 0.00189 0.00033 0.00000 0.00169 0.00434 0.00045 - 0.08221 0.30775 0.09555 0.00180 0.00037 0.00000 0.00163 0.00411 0.00045 - 0.07842 0.29504 0.08744 0.00173 0.00040 0.00000 0.00158 0.00392 0.00046 - 0.07493 0.28328 0.08017 0.00165 0.00043 0.00000 0.00153 0.00374 0.00046 - 0.07233 0.27447 0.07502 0.00160 0.00045 0.00000 0.00149 0.00361 0.00046 - 0.06713 0.25673 0.06502 0.00149 0.00048 0.00001 0.00140 0.00335 0.00047 - 0.06305 0.24268 0.05753 0.00140 0.00050 0.00004 0.00133 0.00314 0.00047 - 0.05884 0.22805 0.05022 0.00131 0.00052 0.00008 0.00126 0.00292 0.00048 - 0.05480 0.21392 0.04369 0.00122 0.00053 0.00010 0.00118 0.00271 0.00049 - 0.05142 0.20198 0.03857 0.00114 0.00054 0.00012 0.00112 0.00254 0.00049 - 0.04824 0.19070 0.03406 0.00107 0.00054 0.00013 0.00106 0.00237 0.00050 - 0.04578 0.18190 0.03077 0.00101 0.00054 0.00014 0.00101 0.00224 0.00050 - 0.04301 0.17191 0.02730 0.00095 0.00054 0.00015 0.00095 0.00210 0.00050 - 0.04071 0.16358 0.02458 0.00090 0.00054 0.00015 0.00090 0.00198 0.00051 - 0.03870 0.15627 0.02230 0.00085 0.00053 0.00016 0.00086 0.00187 0.00051 - 0.03635 0.14766 0.01984 0.00079 0.00053 0.00016 0.00081 0.00175 0.00052 - 0.03429 0.14004 0.01780 0.00074 0.00052 0.00016 0.00077 0.00164 0.00052 - 0.03246 0.13326 0.01607 0.00070 0.00052 0.00016 0.00073 0.00155 0.00052 - 0.03074 0.12687 0.01455 0.00066 0.00051 0.00016 0.00069 0.00146 0.00053 - 0.02918 0.12099 0.01324 0.00062 0.00051 0.00015 0.00066 0.00138 0.00053 - 0.02775 0.11563 0.01209 0.00059 0.00050 0.00015 0.00062 0.00131 0.00053 - 0.02651 0.11091 0.01115 0.00056 0.00050 0.00015 0.00060 0.00124 0.00054 - 0.02530 0.10631 0.01027 0.00053 0.00049 0.00015 0.00057 0.00118 0.00054 - 0.02418 0.10204 0.00950 0.00051 0.00049 0.00015 0.00055 0.00112 0.00054 - 0.02316 0.09812 0.00881 0.00048 0.00048 0.00014 0.00053 0.00107 0.00054 - 0.02225 0.09460 0.00823 0.00046 0.00048 0.00014 0.00051 0.00103 0.00055 - 0.02135 0.09114 0.00767 0.00044 0.00047 0.00014 0.00049 0.00098 0.00055 - 0.02052 0.08792 0.00718 0.00042 0.00047 0.00014 0.00047 0.00094 0.00055 - 0.01974 0.08488 0.00673 0.00040 0.00047 0.00014 0.00045 0.00090 0.00055 - 0.01906 0.08221 0.00636 0.00039 0.00046 0.00013 0.00044 0.00087 0.00055 - 0.01837 0.07952 0.00599 0.00037 0.00046 0.00013 0.00043 0.00083 0.00056 - 0.11099 0.41239 0.18410 0.00160 0.00000 0.00000 0.00150 0.00486 0.00033 - 0.10374 0.38840 0.16386 0.00154 0.00000 0.00000 0.00146 0.00456 0.00034 - 0.09421 0.35647 0.13830 0.00145 0.00002 0.00000 0.00140 0.00416 0.00034 - 0.08804 0.33558 0.12228 0.00138 0.00008 0.00000 0.00136 0.00390 0.00035 - 0.08215 0.31542 0.10753 0.00132 0.00016 0.00000 0.00131 0.00365 0.00035 - 0.07745 0.29920 0.09629 0.00126 0.00021 0.00000 0.00126 0.00344 0.00036 - 0.07323 0.28457 0.08661 0.00121 0.00025 0.00000 0.00122 0.00325 0.00036 - 0.06911 0.27016 0.07769 0.00115 0.00029 0.00000 0.00117 0.00307 0.00036 - 0.06577 0.25835 0.07073 0.00110 0.00031 0.00000 0.00113 0.00292 0.00037 - 0.06269 0.24746 0.06452 0.00106 0.00033 0.00000 0.00109 0.00278 0.00037 - 0.06041 0.23932 0.06015 0.00103 0.00035 0.00000 0.00106 0.00268 0.00037 - 0.05585 0.22299 0.05172 0.00096 0.00037 0.00001 0.00100 0.00247 0.00038 - 0.05229 0.21010 0.04546 0.00090 0.00039 0.00003 0.00095 0.00231 0.00038 - 0.04862 0.19675 0.03940 0.00084 0.00040 0.00006 0.00090 0.00214 0.00038 - 0.04513 0.18390 0.03404 0.00078 0.00041 0.00007 0.00084 0.00198 0.00039 - 0.04220 0.17308 0.02986 0.00074 0.00041 0.00009 0.00079 0.00184 0.00039 - 0.03947 0.16289 0.02621 0.00069 0.00042 0.00010 0.00075 0.00171 0.00040 - 0.03736 0.15497 0.02356 0.00065 0.00042 0.00010 0.00071 0.00162 0.00040 - 0.03499 0.14602 0.02078 0.00061 0.00042 0.00011 0.00067 0.00151 0.00040 - 0.03303 0.13857 0.01862 0.00057 0.00042 0.00011 0.00064 0.00142 0.00041 - 0.03133 0.13205 0.01681 0.00054 0.00042 0.00011 0.00061 0.00134 0.00041 - 0.02934 0.12440 0.01487 0.00051 0.00041 0.00012 0.00058 0.00124 0.00041 - 0.02759 0.11766 0.01328 0.00048 0.00041 0.00012 0.00055 0.00116 0.00041 - 0.02605 0.11167 0.01194 0.00045 0.00041 0.00012 0.00052 0.00109 0.00042 - 0.02461 0.10604 0.01076 0.00042 0.00040 0.00012 0.00049 0.00103 0.00042 - 0.02330 0.10088 0.00975 0.00040 0.00040 0.00012 0.00047 0.00097 0.00042 - 0.02211 0.09619 0.00887 0.00038 0.00040 0.00011 0.00045 0.00091 0.00042 - 0.02108 0.09206 0.00816 0.00036 0.00039 0.00011 0.00043 0.00087 0.00043 - 0.02007 0.08806 0.00748 0.00034 0.00039 0.00011 0.00041 0.00082 0.00043 - 0.01915 0.08435 0.00690 0.00032 0.00038 0.00011 0.00040 0.00078 0.00043 - 0.01830 0.08095 0.00638 0.00031 0.00038 0.00011 0.00038 0.00074 0.00043 - 0.01755 0.07790 0.00594 0.00029 0.00038 0.00011 0.00037 0.00071 0.00043 - 0.01681 0.07491 0.00553 0.00028 0.00038 0.00011 0.00035 0.00068 0.00044 - 0.01613 0.07214 0.00516 0.00027 0.00037 0.00010 0.00034 0.00065 0.00044 - 0.01548 0.06952 0.00482 0.00026 0.00037 0.00010 0.00033 0.00062 0.00044 - 0.01492 0.06722 0.00455 0.00025 0.00037 0.00010 0.00032 0.00059 0.00044 - 0.01436 0.06492 0.00427 0.00023 0.00036 0.00010 0.00031 0.00057 0.00044 - 0.09447 0.36700 0.15663 0.00096 0.00000 0.00000 0.00107 0.00366 0.00027 - 0.08798 0.34438 0.13829 0.00093 0.00000 0.00000 0.00105 0.00342 0.00027 - 0.07949 0.31444 0.11543 0.00089 0.00001 0.00000 0.00100 0.00310 0.00027 - 0.07403 0.29495 0.10127 0.00085 0.00006 0.00000 0.00097 0.00289 0.00028 - 0.06882 0.27623 0.08836 0.00082 0.00012 0.00000 0.00093 0.00269 0.00028 - 0.06468 0.26122 0.07860 0.00079 0.00016 0.00000 0.00090 0.00253 0.00028 - 0.06099 0.24772 0.07026 0.00075 0.00019 0.00000 0.00087 0.00238 0.00029 - 0.05739 0.23448 0.06263 0.00072 0.00022 0.00000 0.00084 0.00224 0.00029 - 0.05447 0.22367 0.05672 0.00069 0.00024 0.00000 0.00081 0.00212 0.00029 - 0.05180 0.21371 0.05148 0.00067 0.00026 0.00000 0.00078 0.00202 0.00029 - 0.04982 0.20631 0.04781 0.00065 0.00027 0.00000 0.00076 0.00194 0.00030 - 0.04589 0.19147 0.04077 0.00061 0.00029 0.00001 0.00072 0.00178 0.00030 - 0.04282 0.17982 0.03560 0.00057 0.00030 0.00002 0.00068 0.00165 0.00030 - 0.03968 0.16779 0.03063 0.00053 0.00031 0.00004 0.00064 0.00153 0.00031 - 0.03669 0.15626 0.02627 0.00050 0.00032 0.00006 0.00060 0.00140 0.00031 - 0.03420 0.14659 0.02290 0.00047 0.00032 0.00007 0.00057 0.00130 0.00031 - 0.03189 0.13752 0.01997 0.00044 0.00033 0.00007 0.00054 0.00121 0.00031 - 0.03010 0.13049 0.01785 0.00041 0.00033 0.00008 0.00051 0.00114 0.00032 - 0.02811 0.12257 0.01566 0.00039 0.00033 0.00008 0.00048 0.00105 0.00032 - 0.02646 0.11600 0.01396 0.00036 0.00033 0.00008 0.00046 0.00099 0.00032 - 0.02503 0.11027 0.01254 0.00034 0.00033 0.00009 0.00044 0.00093 0.00032 - 0.02337 0.10356 0.01104 0.00032 0.00032 0.00009 0.00041 0.00086 0.00033 - 0.02192 0.09767 0.00980 0.00030 0.00032 0.00009 0.00039 0.00080 0.00033 - 0.02064 0.09246 0.00877 0.00028 0.00032 0.00009 0.00037 0.00075 0.00033 - 0.01945 0.08757 0.00787 0.00027 0.00032 0.00009 0.00035 0.00071 0.00033 - 0.01837 0.08310 0.00710 0.00025 0.00031 0.00009 0.00034 0.00066 0.00033 - 0.01739 0.07905 0.00643 0.00024 0.00031 0.00009 0.00032 0.00062 0.00033 - 0.01654 0.07550 0.00590 0.00022 0.00031 0.00009 0.00031 0.00059 0.00034 - 0.01571 0.07205 0.00539 0.00021 0.00031 0.00009 0.00030 0.00056 0.00034 - 0.01496 0.06887 0.00495 0.00020 0.00030 0.00008 0.00029 0.00053 0.00034 - 0.01427 0.06596 0.00457 0.00019 0.00030 0.00008 0.00028 0.00050 0.00034 - 0.01365 0.06336 0.00424 0.00018 0.00030 0.00008 0.00027 0.00048 0.00034 - 0.01305 0.06081 0.00393 0.00017 0.00030 0.00008 0.00026 0.00045 0.00034 - 0.01250 0.05846 0.00367 0.00017 0.00030 0.00008 0.00025 0.00043 0.00034 - 0.01198 0.05623 0.00341 0.00016 0.00029 0.00008 0.00024 0.00041 0.00034 - 0.01153 0.05429 0.00321 0.00015 0.00029 0.00008 0.00024 0.00040 0.00035 - 0.01108 0.05235 0.00301 0.00015 0.00029 0.00008 0.00023 0.00038 0.00035 - 0.07936 0.32278 0.13214 0.00056 0.00000 0.00000 0.00076 0.00268 0.00021 - 0.07364 0.30175 0.11571 0.00055 0.00000 0.00000 0.00074 0.00249 0.00021 - 0.06619 0.27408 0.09549 0.00053 0.00001 0.00000 0.00071 0.00224 0.00022 - 0.06142 0.25615 0.08312 0.00052 0.00005 0.00000 0.00069 0.00208 0.00022 - 0.05689 0.23900 0.07195 0.00050 0.00009 0.00000 0.00066 0.00193 0.00022 - 0.05331 0.22531 0.06358 0.00048 0.00012 0.00000 0.00063 0.00180 0.00022 - 0.05011 0.21303 0.05647 0.00047 0.00015 0.00000 0.00061 0.00170 0.00023 - 0.04702 0.20104 0.05002 0.00045 0.00017 0.00000 0.00059 0.00159 0.00023 - 0.04452 0.19128 0.04506 0.00043 0.00018 0.00000 0.00056 0.00150 0.00023 - 0.04222 0.18231 0.04067 0.00042 0.00020 0.00000 0.00054 0.00142 0.00023 - 0.04054 0.17566 0.03763 0.00041 0.00021 0.00000 0.00053 0.00136 0.00023 - 0.03719 0.16238 0.03182 0.00038 0.00022 0.00000 0.00050 0.00124 0.00024 - 0.03459 0.15199 0.02760 0.00036 0.00023 0.00002 0.00047 0.00115 0.00024 - 0.03193 0.14131 0.02357 0.00034 0.00024 0.00003 0.00044 0.00106 0.00024 - 0.02942 0.13111 0.02006 0.00031 0.00024 0.00004 0.00041 0.00097 0.00024 - 0.02733 0.12259 0.01737 0.00029 0.00025 0.00005 0.00039 0.00090 0.00024 - 0.02540 0.11463 0.01505 0.00028 0.00025 0.00005 0.00036 0.00083 0.00025 - 0.02391 0.10847 0.01338 0.00026 0.00025 0.00006 0.00035 0.00078 0.00025 - 0.02226 0.10157 0.01167 0.00024 0.00025 0.00006 0.00033 0.00072 0.00025 - 0.02090 0.09586 0.01034 0.00023 0.00025 0.00006 0.00031 0.00067 0.00025 - 0.01972 0.09089 0.00925 0.00022 0.00025 0.00006 0.00029 0.00063 0.00025 - 0.01835 0.08510 0.00809 0.00020 0.00025 0.00006 0.00028 0.00058 0.00025 - 0.01716 0.08003 0.00715 0.00019 0.00025 0.00006 0.00026 0.00054 0.00026 - 0.01612 0.07555 0.00637 0.00018 0.00024 0.00006 0.00025 0.00051 0.00026 - 0.01515 0.07137 0.00569 0.00017 0.00024 0.00006 0.00023 0.00047 0.00026 - 0.01427 0.06756 0.00511 0.00016 0.00024 0.00006 0.00022 0.00044 0.00026 - 0.01347 0.06410 0.00461 0.00015 0.00024 0.00006 0.00021 0.00041 0.00026 - 0.01279 0.06109 0.00421 0.00014 0.00024 0.00006 0.00020 0.00039 0.00026 - 0.01212 0.05817 0.00383 0.00013 0.00024 0.00006 0.00019 0.00037 0.00026 - 0.01151 0.05549 0.00351 0.00013 0.00023 0.00006 0.00019 0.00035 0.00026 - 0.01096 0.05303 0.00323 0.00012 0.00023 0.00006 0.00018 0.00033 0.00026 - 0.01047 0.05085 0.00299 0.00011 0.00023 0.00006 0.00017 0.00031 0.00027 - 0.00999 0.04871 0.00276 0.00011 0.00023 0.00006 0.00017 0.00030 0.00027 - 0.00955 0.04674 0.00257 0.00010 0.00023 0.00006 0.00016 0.00028 0.00027 - 0.00913 0.04487 0.00239 0.00010 0.00023 0.00006 0.00016 0.00027 0.00027 - 0.00878 0.04326 0.00224 0.00009 0.00023 0.00006 0.00016 0.00026 0.00027 - 0.00842 0.04163 0.00210 0.00009 0.00022 0.00006 0.00015 0.00025 0.00027 - 0.06575 0.28034 0.11043 0.00032 0.00000 0.00000 0.00052 0.00190 0.00016 - 0.06078 0.26108 0.09590 0.00032 0.00000 0.00000 0.00050 0.00176 0.00017 - 0.05434 0.23587 0.07824 0.00032 0.00001 0.00000 0.00048 0.00157 0.00017 - 0.05024 0.21962 0.06755 0.00031 0.00003 0.00000 0.00046 0.00145 0.00017 - 0.04636 0.20414 0.05800 0.00030 0.00007 0.00000 0.00044 0.00134 0.00017 - 0.04330 0.19183 0.05090 0.00029 0.00009 0.00000 0.00042 0.00125 0.00017 - 0.04058 0.18082 0.04491 0.00029 0.00011 0.00000 0.00041 0.00117 0.00018 - 0.03796 0.17013 0.03953 0.00028 0.00013 0.00000 0.00039 0.00109 0.00018 - 0.03585 0.16144 0.03541 0.00027 0.00014 0.00000 0.00037 0.00103 0.00018 - 0.03391 0.15348 0.03178 0.00026 0.00015 0.00000 0.00036 0.00097 0.00018 - 0.03250 0.14759 0.02929 0.00025 0.00015 0.00000 0.00035 0.00093 0.00018 - 0.02969 0.13588 0.02456 0.00024 0.00016 0.00000 0.00032 0.00085 0.00018 - 0.02752 0.12675 0.02114 0.00022 0.00017 0.00001 0.00030 0.00078 0.00018 - 0.02531 0.11740 0.01792 0.00021 0.00018 0.00002 0.00028 0.00071 0.00019 - 0.02323 0.10852 0.01513 0.00020 0.00018 0.00003 0.00026 0.00065 0.00019 - 0.02151 0.10112 0.01301 0.00018 0.00018 0.00003 0.00024 0.00060 0.00019 - 0.01992 0.09424 0.01120 0.00017 0.00019 0.00003 0.00023 0.00055 0.00019 - 0.01871 0.08893 0.00990 0.00016 0.00019 0.00004 0.00022 0.00052 0.00019 - 0.01735 0.08300 0.00858 0.00015 0.00019 0.00004 0.00020 0.00048 0.00019 - 0.01625 0.07812 0.00757 0.00014 0.00019 0.00004 0.00019 0.00044 0.00019 - 0.01529 0.07387 0.00673 0.00014 0.00019 0.00004 0.00018 0.00041 0.00020 - 0.01418 0.06895 0.00585 0.00013 0.00019 0.00004 0.00017 0.00038 0.00020 - 0.01323 0.06465 0.00515 0.00012 0.00018 0.00004 0.00015 0.00035 0.00020 - 0.01239 0.06086 0.00456 0.00011 0.00018 0.00004 0.00015 0.00033 0.00020 - 0.01161 0.05734 0.00405 0.00010 0.00018 0.00004 0.00014 0.00031 0.00020 - 0.01091 0.05414 0.00363 0.00010 0.00018 0.00004 0.00013 0.00029 0.00020 - 0.01027 0.05124 0.00326 0.00009 0.00018 0.00004 0.00012 0.00027 0.00020 - 0.00973 0.04872 0.00296 0.00009 0.00018 0.00004 0.00011 0.00025 0.00020 - 0.00920 0.04629 0.00269 0.00008 0.00017 0.00004 0.00011 0.00024 0.00020 - 0.00872 0.04405 0.00245 0.00008 0.00017 0.00004 0.00010 0.00022 0.00020 - 0.00828 0.04202 0.00225 0.00007 0.00017 0.00004 0.00010 0.00021 0.00020 - 0.00790 0.04021 0.00208 0.00007 0.00017 0.00003 0.00009 0.00020 0.00020 - 0.00752 0.03844 0.00191 0.00007 0.00017 0.00003 0.00009 0.00019 0.00020 - 0.00717 0.03681 0.00177 0.00006 0.00017 0.00003 0.00009 0.00018 0.00021 - 0.00685 0.03528 0.00164 0.00006 0.00017 0.00003 0.00008 0.00017 0.00021 - 0.00657 0.03395 0.00154 0.00006 0.00017 0.00003 0.00008 0.00016 0.00021 - 0.00629 0.03262 0.00144 0.00006 0.00017 0.00003 0.00008 0.00016 0.00021 - 0.05364 0.24019 0.09134 0.00018 0.00000 0.00000 0.00034 0.00130 0.00013 - 0.04939 0.22282 0.07864 0.00018 0.00000 0.00000 0.00033 0.00120 0.00013 - 0.04392 0.20019 0.06340 0.00019 0.00001 0.00000 0.00032 0.00107 0.00013 - 0.04045 0.18569 0.05429 0.00018 0.00003 0.00000 0.00031 0.00098 0.00013 - 0.03718 0.17193 0.04623 0.00018 0.00005 0.00000 0.00029 0.00090 0.00013 - 0.03461 0.16103 0.04027 0.00018 0.00007 0.00000 0.00028 0.00084 0.00013 - 0.03234 0.15132 0.03529 0.00017 0.00008 0.00000 0.00027 0.00078 0.00013 - 0.03016 0.14192 0.03086 0.00017 0.00009 0.00000 0.00025 0.00073 0.00014 - 0.02840 0.13431 0.02748 0.00016 0.00010 0.00000 0.00024 0.00068 0.00014 - 0.02680 0.12735 0.02453 0.00016 0.00011 0.00000 0.00023 0.00064 0.00014 - 0.02563 0.12223 0.02251 0.00015 0.00011 0.00000 0.00023 0.00061 0.00014 - 0.02332 0.11205 0.01870 0.00015 0.00012 0.00000 0.00021 0.00056 0.00014 - 0.02154 0.10416 0.01599 0.00014 0.00013 0.00001 0.00020 0.00051 0.00014 - 0.01973 0.09611 0.01344 0.00013 0.00013 0.00001 0.00018 0.00047 0.00014 - 0.01804 0.08849 0.01126 0.00012 0.00014 0.00002 0.00017 0.00042 0.00014 - 0.01665 0.08217 0.00961 0.00011 0.00014 0.00002 0.00016 0.00039 0.00014 - 0.01536 0.07631 0.00821 0.00011 0.00014 0.00002 0.00015 0.00036 0.00015 - 0.01438 0.07181 0.00722 0.00010 0.00014 0.00002 0.00014 0.00033 0.00015 - 0.01330 0.06680 0.00622 0.00009 0.00014 0.00003 0.00013 0.00030 0.00015 - 0.01242 0.06269 0.00545 0.00009 0.00014 0.00003 0.00012 0.00028 0.00015 - 0.01165 0.05912 0.00482 0.00008 0.00014 0.00003 0.00011 0.00026 0.00015 - 0.01077 0.05500 0.00417 0.00008 0.00014 0.00003 0.00011 0.00024 0.00015 - 0.01002 0.05142 0.00364 0.00007 0.00014 0.00003 0.00010 0.00022 0.00015 - 0.00935 0.04827 0.00321 0.00007 0.00014 0.00003 0.00009 0.00021 0.00015 - 0.00874 0.04534 0.00284 0.00006 0.00014 0.00003 0.00009 0.00019 0.00015 - 0.00819 0.04270 0.00253 0.00006 0.00014 0.00003 0.00008 0.00018 0.00015 - 0.00769 0.04031 0.00226 0.00006 0.00014 0.00003 0.00008 0.00017 0.00015 - 0.00727 0.03824 0.00205 0.00005 0.00013 0.00003 0.00007 0.00016 0.00015 - 0.00686 0.03624 0.00185 0.00005 0.00013 0.00003 0.00007 0.00015 0.00015 - 0.00648 0.03442 0.00168 0.00005 0.00013 0.00003 0.00006 0.00014 0.00015 - 0.00615 0.03276 0.00154 0.00004 0.00013 0.00002 0.00006 0.00013 0.00015 - 0.00585 0.03128 0.00142 0.00004 0.00013 0.00002 0.00006 0.00012 0.00015 - 0.00556 0.02984 0.00130 0.00004 0.00013 0.00002 0.00006 0.00012 0.00016 - 0.00529 0.02853 0.00120 0.00004 0.00013 0.00002 0.00005 0.00011 0.00016 - 0.00504 0.02728 0.00111 0.00004 0.00013 0.00002 0.00005 0.00010 0.00016 - 0.00483 0.02622 0.00104 0.00004 0.00013 0.00002 0.00005 0.00010 0.00016 - 0.00461 0.02514 0.00097 0.00003 0.00013 0.00002 0.00005 0.00010 0.00016 - 0.03383 0.16827 0.06021 0.00006 0.00000 0.00000 0.00014 0.00055 0.00007 - 0.03090 0.15481 0.05092 0.00006 0.00000 0.00000 0.00014 0.00050 0.00007 - 0.02716 0.13749 0.04004 0.00006 0.00000 0.00000 0.00013 0.00044 0.00007 - 0.02482 0.12651 0.03369 0.00007 0.00001 0.00000 0.00012 0.00040 0.00007 - 0.02263 0.11618 0.02818 0.00007 0.00003 0.00000 0.00011 0.00036 0.00007 - 0.02092 0.10806 0.02419 0.00007 0.00004 0.00000 0.00011 0.00034 0.00007 - 0.01942 0.10088 0.02089 0.00006 0.00005 0.00000 0.00010 0.00031 0.00007 - 0.01799 0.09399 0.01801 0.00006 0.00005 0.00000 0.00010 0.00029 0.00008 - 0.01684 0.08845 0.01585 0.00006 0.00006 0.00000 0.00009 0.00027 0.00008 - 0.01581 0.08340 0.01397 0.00006 0.00006 0.00000 0.00009 0.00025 0.00008 - 0.01505 0.07971 0.01271 0.00006 0.00006 0.00000 0.00009 0.00024 0.00008 - 0.01357 0.07243 0.01036 0.00005 0.00007 0.00000 0.00008 0.00021 0.00008 - 0.01245 0.06683 0.00872 0.00005 0.00007 0.00000 0.00008 0.00020 0.00008 - 0.01131 0.06117 0.00721 0.00005 0.00008 0.00001 0.00007 0.00018 0.00008 - 0.01026 0.05586 0.00593 0.00005 0.00008 0.00001 0.00006 0.00016 0.00008 - 0.00940 0.05149 0.00499 0.00004 0.00008 0.00001 0.00006 0.00015 0.00008 - 0.00861 0.04747 0.00420 0.00004 0.00008 0.00001 0.00006 0.00013 0.00008 - 0.00801 0.04441 0.00365 0.00004 0.00008 0.00001 0.00005 0.00012 0.00008 - 0.00736 0.04102 0.00309 0.00003 0.00008 0.00001 0.00005 0.00011 0.00008 - 0.00682 0.03826 0.00268 0.00003 0.00008 0.00001 0.00005 0.00010 0.00008 - 0.00637 0.03588 0.00234 0.00003 0.00008 0.00001 0.00004 0.00010 0.00008 - 0.00585 0.03315 0.00200 0.00003 0.00008 0.00001 0.00004 0.00009 0.00008 - 0.00540 0.03079 0.00173 0.00003 0.00008 0.00001 0.00004 0.00008 0.00008 - 0.00501 0.02873 0.00150 0.00002 0.00008 0.00001 0.00003 0.00007 0.00008 - 0.00466 0.02683 0.00132 0.00002 0.00008 0.00001 0.00003 0.00007 0.00008 - 0.00434 0.02513 0.00116 0.00002 0.00008 0.00001 0.00003 0.00006 0.00008 - 0.00405 0.02359 0.00103 0.00002 0.00008 0.00001 0.00003 0.00006 0.00008 - 0.00381 0.02227 0.00092 0.00002 0.00008 0.00001 0.00003 0.00005 0.00008 - 0.00358 0.02101 0.00083 0.00002 0.00008 0.00001 0.00003 0.00005 0.00008 - 0.00337 0.01985 0.00075 0.00002 0.00008 0.00001 0.00003 0.00005 0.00008 - 0.00318 0.01881 0.00068 0.00002 0.00008 0.00001 0.00003 0.00004 0.00008 - 0.00301 0.01789 0.00062 0.00001 0.00008 0.00001 0.00003 0.00004 0.00008 - 0.00285 0.01699 0.00057 0.00001 0.00008 0.00001 0.00003 0.00004 0.00008 - 0.00270 0.01618 0.00052 0.00001 0.00008 0.00001 0.00003 0.00004 0.00009 - 0.00256 0.01541 0.00048 0.00001 0.00007 0.00001 0.00003 0.00003 0.00009 - 0.00244 0.01475 0.00044 0.00001 0.00007 0.00001 0.00003 0.00003 0.00009 - 0.00233 0.01409 0.00041 0.00001 0.00007 0.00001 0.00003 0.00003 0.00009 - 0.01955 0.10931 0.03732 0.00002 0.00000 0.00000 0.00004 0.00019 0.00004 - 0.01770 0.09967 0.03095 0.00002 0.00000 0.00000 0.00004 0.00017 0.00004 - 0.01536 0.08741 0.02369 0.00002 0.00000 0.00000 0.00003 0.00015 0.00004 - 0.01391 0.07972 0.01955 0.00002 0.00001 0.00000 0.00003 0.00013 0.00004 - 0.01257 0.07257 0.01604 0.00002 0.00002 0.00000 0.00003 0.00012 0.00004 - 0.01154 0.06699 0.01354 0.00002 0.00002 0.00000 0.00003 0.00011 0.00004 - 0.01063 0.06208 0.01151 0.00002 0.00002 0.00000 0.00003 0.00010 0.00004 - 0.00978 0.05743 0.00977 0.00002 0.00003 0.00000 0.00003 0.00009 0.00004 - 0.00910 0.05371 0.00848 0.00002 0.00003 0.00000 0.00003 0.00009 0.00004 - 0.00849 0.05034 0.00738 0.00002 0.00003 0.00000 0.00003 0.00008 0.00004 - 0.00805 0.04789 0.00665 0.00002 0.00003 0.00000 0.00003 0.00008 0.00004 - 0.00719 0.04310 0.00531 0.00002 0.00004 0.00000 0.00003 0.00007 0.00004 - 0.00654 0.03945 0.00439 0.00002 0.00004 0.00000 0.00002 0.00006 0.00004 - 0.00589 0.03579 0.00356 0.00002 0.00004 0.00000 0.00002 0.00006 0.00004 - 0.00529 0.03239 0.00287 0.00001 0.00004 0.00000 0.00002 0.00005 0.00004 - 0.00481 0.02962 0.00237 0.00001 0.00004 0.00000 0.00002 0.00004 0.00004 - 0.00437 0.02709 0.00196 0.00001 0.00004 0.00001 0.00002 0.00004 0.00004 - 0.00404 0.02518 0.00168 0.00001 0.00004 0.00001 0.00002 0.00004 0.00004 - 0.00368 0.02308 0.00141 0.00001 0.00004 0.00001 0.00002 0.00003 0.00004 - 0.00339 0.02138 0.00120 0.00001 0.00005 0.00001 0.00002 0.00003 0.00004 - 0.00314 0.01993 0.00104 0.00001 0.00005 0.00001 0.00002 0.00003 0.00004 - 0.00287 0.01827 0.00087 0.00001 0.00005 0.00001 0.00002 0.00003 0.00004 - 0.00263 0.01686 0.00074 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 - 0.00242 0.01562 0.00064 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 - 0.00224 0.01450 0.00055 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 - 0.00207 0.01349 0.00048 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 - 0.00192 0.01259 0.00042 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 - 0.00180 0.01183 0.00038 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 - 0.00168 0.01109 0.00033 0.00001 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00157 0.01043 0.00030 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00148 0.00983 0.00027 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00139 0.00931 0.00024 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00131 0.00880 0.00022 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00124 0.00834 0.00020 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00117 0.00791 0.00018 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00111 0.00754 0.00017 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.00105 0.00718 0.00016 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 - 0.01005 0.06426 0.02127 0.00001 0.00000 0.00000 0.00001 0.00005 0.00002 - 0.00900 0.05801 0.01726 0.00001 0.00000 0.00000 0.00001 0.00004 0.00002 - 0.00771 0.05016 0.01281 0.00001 0.00000 0.00000 0.00001 0.00004 0.00002 - 0.00691 0.04530 0.01035 0.00001 0.00000 0.00000 0.00001 0.00003 0.00002 - 0.00618 0.04082 0.00831 0.00001 0.00001 0.00000 0.00001 0.00003 0.00002 - 0.00562 0.03736 0.00688 0.00001 0.00001 0.00000 0.00001 0.00003 0.00002 - 0.00514 0.03435 0.00574 0.00001 0.00001 0.00000 0.00001 0.00002 0.00002 - 0.00469 0.03152 0.00479 0.00000 0.00001 0.00000 0.00001 0.00002 0.00002 - 0.00433 0.02927 0.00410 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 - 0.00401 0.02725 0.00351 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 - 0.00379 0.02579 0.00313 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 - 0.00334 0.02296 0.00244 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 - 0.00301 0.02083 0.00198 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00269 0.01871 0.00157 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00239 0.01676 0.00124 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00215 0.01519 0.00100 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00194 0.01377 0.00081 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00178 0.01270 0.00069 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00161 0.01155 0.00056 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00147 0.01062 0.00047 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00135 0.00982 0.00040 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00122 0.00893 0.00033 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 - 0.00111 0.00818 0.00028 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00102 0.00752 0.00024 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00093 0.00693 0.00020 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00086 0.00641 0.00017 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00079 0.00594 0.00015 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00074 0.00554 0.00013 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00068 0.00517 0.00012 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00064 0.00483 0.00010 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00059 0.00453 0.00009 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00056 0.00426 0.00008 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00052 0.00401 0.00008 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00049 0.00378 0.00007 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00046 0.00357 0.00006 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00043 0.00339 0.00006 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00041 0.00321 0.00005 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 - 0.00436 0.03279 0.01075 0.00000 0.00000 0.00000 0.00000 0.00001 0.00001 - 0.00386 0.02926 0.00850 0.00000 0.00000 0.00000 0.00000 0.00001 0.00001 - 0.00325 0.02489 0.00609 0.00000 0.00000 0.00000 0.00000 0.00001 0.00001 - 0.00288 0.02222 0.00480 0.00000 0.00000 0.00000 0.00000 0.00000 0.00001 - 0.00255 0.01979 0.00375 0.00000 0.00000 0.00000 0.00000 0.00000 0.00001 - 0.00230 0.01793 0.00304 0.00000 0.00000 0.00000 0.00000 0.00000 0.00001 - 0.00208 0.01633 0.00248 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00188 0.01484 0.00203 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00172 0.01368 0.00171 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00158 0.01263 0.00143 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00148 0.01188 0.00126 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00129 0.01045 0.00096 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00115 0.00938 0.00076 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00102 0.00833 0.00059 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00089 0.00737 0.00045 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00080 0.00661 0.00036 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00071 0.00593 0.00028 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00065 0.00542 0.00023 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00058 0.00488 0.00019 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00052 0.00445 0.00016 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00048 0.00408 0.00013 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00043 0.00368 0.00011 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00039 0.00333 0.00009 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00035 0.00304 0.00007 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00032 0.00278 0.00006 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00029 0.00255 0.00005 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00027 0.00234 0.00004 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00024 0.00217 0.00004 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00023 0.00201 0.00003 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00021 0.00187 0.00003 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00019 0.00174 0.00003 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00018 0.00163 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00017 0.00152 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00016 0.00143 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00015 0.00134 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00014 0.00126 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00013 0.00119 0.00001 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00030 0.00369 0.00132 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00026 0.00318 0.00097 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00021 0.00258 0.00063 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00018 0.00223 0.00046 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00015 0.00192 0.00033 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00013 0.00169 0.00025 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00012 0.00150 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00010 0.00133 0.00015 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00009 0.00119 0.00012 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00008 0.00108 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00008 0.00100 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00006 0.00084 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00006 0.00073 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00005 0.00063 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00004 0.00054 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00003 0.00047 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00003 0.00041 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00003 0.00036 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00002 0.00032 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00002 0.00028 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00002 0.00025 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00002 0.00022 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00017 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00016 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00014 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00013 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00011 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00001 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00165 0.00877 -7.41955 0.94922 0.00000 0.00000 0.40370 0.94925 0.01792 + 0.00171 0.00893 -6.96080 0.93272 0.00000 0.00000 0.39336 0.93277 0.01985 + 0.00180 0.00916 -5.65897 0.93393 0.00602 0.00000 0.40314 0.93402 0.02302 + 0.00186 0.00933 -4.25763 0.95317 0.03030 0.00000 0.42822 0.95328 0.02566 + 0.00193 0.00950 -2.30613 0.99137 0.07782 0.00000 0.47227 0.99150 0.02882 + 0.00199 0.00964 -0.19230 1.03930 0.13260 0.00000 0.52507 1.03946 0.03191 + 0.00205 0.00978 2.19572 1.09752 0.19749 0.00000 0.58781 1.09770 0.03522 + 0.00211 0.00993 5.35676 1.17970 0.28641 0.00000 0.67463 1.17991 0.03935 + 0.00217 0.01006 8.53863 1.26501 0.37742 0.00000 0.76384 1.26524 0.04342 + 0.00222 0.01018 11.88903 1.35626 0.47406 0.00000 0.85877 1.35652 0.04767 + 0.00226 0.01028 14.95917 1.44154 0.56350 0.00000 0.94690 1.44183 0.05154 + 0.00236 0.01049 22.12828 1.64722 0.77780 0.06739 1.15847 1.64757 0.06079 + 0.00244 0.01066 29.07692 1.85617 0.99388 0.26238 1.37229 1.85659 0.07037 + 0.00253 0.01086 37.85941 2.12502 1.27045 0.55136 1.64642 2.12554 0.08297 + 0.00263 0.01107 48.29454 2.44606 1.59930 0.88292 1.97281 2.44671 0.09856 + 0.00272 0.01126 58.90303 2.77438 1.93451 1.22238 2.30585 2.77518 0.11517 + 0.00281 0.01144 70.71288 3.14200 2.30891 1.60056 2.67815 3.14299 0.13450 + 0.00288 0.01160 81.40970 3.47673 2.64916 1.94398 3.01668 3.47792 0.15279 + 0.00298 0.01179 95.71258 3.92737 3.10635 2.40493 3.47187 3.92884 0.17865 + 0.00307 0.01196 109.33872 4.35931 3.54399 2.84586 3.90781 4.36109 0.20454 + 0.00314 0.01212 122.38039 4.77436 3.96418 3.26900 4.32646 4.77645 0.23008 + 0.00325 0.01232 140.67477 5.36183 4.55810 3.86663 4.91852 5.36442 0.26845 + 0.00335 0.01251 159.11937 5.95882 5.16109 4.47305 5.51982 5.96199 0.30947 + 0.00344 0.01269 177.24240 6.54904 5.75687 5.07199 6.11408 6.55282 0.35158 + 0.00353 0.01286 196.48404 7.18040 6.39375 5.71199 6.74949 7.18489 0.39867 + 0.00363 0.01304 216.66423 7.84899 7.06774 6.38900 7.42213 7.85433 0.45140 + 0.00372 0.01321 236.19945 8.49906 7.72289 7.04697 8.07604 8.50527 0.50394 + 0.00380 0.01336 256.03580 9.16647 8.39512 7.72184 8.74719 9.17367 0.56121 + 0.00389 0.01352 276.34848 9.85309 9.08657 8.41591 9.43759 9.86135 0.62162 + 0.00398 0.01368 297.43427 10.57239 9.81067 9.14256 10.16073 10.58186 0.68799 + 0.00406 0.01383 318.00177 11.27822 10.52109 9.85538 10.87029 11.28895 0.75518 + 0.00414 0.01398 338.36890 11.98319 11.23045 10.56699 11.57890 11.99527 0.82521 + 0.00423 0.01412 359.18814 12.70682 11.95852 11.29732 12.30625 12.72035 0.89864 + 0.00431 0.01427 380.91580 13.47043 12.72663 12.06764 13.07374 13.48562 0.98042 + 0.00439 0.01440 401.44901 14.19206 13.45252 12.79561 13.79904 14.20883 1.05770 + 0.00446 0.01454 422.47116 14.94264 14.20734 13.55240 14.55344 14.96127 1.14442 + 0.00454 0.01467 443.57132 15.69608 14.96502 14.31206 15.31069 15.71657 1.23150 + 0.00231 0.01065 -5.64439 0.79036 0.00000 0.00000 0.34217 0.79038 0.01759 + 0.00241 0.01087 -5.06609 0.78565 0.00000 0.00000 0.34250 0.78568 0.01925 + 0.00257 0.01118 -3.65938 0.80080 0.00734 0.00000 0.36465 0.80086 0.02200 + 0.00268 0.01141 -2.25695 0.82733 0.03560 0.00000 0.39597 0.82741 0.02429 + 0.00280 0.01165 -0.38780 0.87017 0.08694 0.00000 0.44359 0.87026 0.02704 + 0.00290 0.01186 1.58011 0.91941 0.14189 0.00000 0.49681 0.91952 0.02972 + 0.00300 0.01205 3.75866 0.97654 0.20471 0.00000 0.55763 0.97666 0.03259 + 0.00311 0.01226 6.56973 1.05355 0.28745 0.00000 0.63843 1.05370 0.03616 + 0.00321 0.01244 9.35004 1.13142 0.37017 0.00000 0.71949 1.13159 0.03967 + 0.00330 0.01261 12.24682 1.21350 0.45683 0.00000 0.80458 1.21369 0.04331 + 0.00337 0.01275 14.85951 1.28867 0.53554 0.00000 0.88208 1.28889 0.04661 + 0.00353 0.01304 20.87675 1.46715 0.72134 0.05786 1.06537 1.46742 0.05445 + 0.00366 0.01330 26.59679 1.64491 0.90517 0.22422 1.24711 1.64524 0.06250 + 0.00382 0.01358 33.71036 1.86992 1.13675 0.46767 1.47645 1.87033 0.07300 + 0.00398 0.01387 42.03045 2.13435 1.40783 0.74217 1.74525 2.13489 0.08585 + 0.00413 0.01414 50.36721 2.40102 1.68036 1.01933 2.01579 2.40169 0.09942 + 0.00429 0.01441 59.53029 2.69605 1.98116 1.32433 2.31465 2.69689 0.11507 + 0.00441 0.01464 67.73470 2.96185 2.25165 1.59830 2.58356 2.96285 0.12977 + 0.00457 0.01491 78.56003 3.31540 2.61079 1.96158 2.94085 3.31666 0.15035 + 0.00471 0.01516 88.76070 3.65100 2.95124 2.30562 3.27972 3.65252 0.17079 + 0.00484 0.01538 98.45683 3.97152 3.27613 2.63375 3.60319 3.97331 0.19087 + 0.00501 0.01567 111.86504 4.41955 3.72964 3.09131 4.05498 4.42177 0.22074 + 0.00517 0.01594 125.23028 4.87037 4.18556 3.55096 4.50933 4.87307 0.25238 + 0.00532 0.01619 138.25191 5.31283 4.63275 4.00159 4.95510 5.31606 0.28468 + 0.00548 0.01645 151.94034 5.78213 5.10674 4.47897 5.42773 5.78595 0.32054 + 0.00563 0.01670 166.12743 6.27411 5.60330 4.97880 5.92302 6.27863 0.36035 + 0.00577 0.01694 179.78935 6.75035 6.08383 5.46238 6.40239 6.75558 0.39987 + 0.00591 0.01717 193.48709 7.23407 6.57164 5.95303 6.88916 7.24011 0.44257 + 0.00605 0.01740 207.44412 7.72962 7.07127 6.45548 7.38779 7.73653 0.48744 + 0.00619 0.01763 221.78873 8.24444 7.59014 6.97709 7.90573 8.25233 0.53639 + 0.00633 0.01785 235.69527 8.74701 8.09657 7.48610 8.41131 8.75591 0.58572 + 0.00646 0.01806 249.34453 9.24525 8.59851 7.99046 8.91251 9.25524 0.63683 + 0.00659 0.01827 263.23978 9.75493 9.11191 8.50627 9.42519 9.76606 0.69026 + 0.00672 0.01848 277.58252 10.28785 9.64860 9.04533 9.96125 10.30031 0.74930 + 0.00684 0.01868 291.13684 10.79148 10.15579 9.55475 10.46783 10.80519 0.80510 + 0.00696 0.01887 304.80533 11.30876 10.67658 10.07765 10.98816 11.32392 0.86706 + 0.00709 0.01906 318.52350 11.82796 11.19932 10.60249 11.51042 11.84459 0.92928 + 0.00303 0.01275 -4.26998 0.66502 0.00000 0.00000 0.29285 0.66503 0.01724 + 0.00319 0.01304 -3.62684 0.66820 0.00000 0.00000 0.30016 0.66822 0.01867 + 0.00342 0.01345 -2.20207 0.69157 0.00783 0.00000 0.32927 0.69160 0.02106 + 0.00358 0.01375 -0.85788 0.72139 0.03724 0.00000 0.36300 0.72143 0.02305 + 0.00376 0.01407 0.87241 0.76490 0.08843 0.00000 0.41043 0.76495 0.02543 + 0.00392 0.01434 2.65124 0.81231 0.14063 0.00000 0.46110 0.81237 0.02775 + 0.00407 0.01460 4.58644 0.86560 0.19881 0.00000 0.51742 0.86568 0.03023 + 0.00423 0.01487 7.02841 0.93510 0.27318 0.00000 0.59002 0.93519 0.03329 + 0.00437 0.01511 9.40649 1.00395 0.34618 0.00000 0.66149 1.00406 0.03628 + 0.00450 0.01534 11.86094 1.07570 0.42184 0.00000 0.73570 1.07582 0.03938 + 0.00461 0.01552 14.04331 1.14033 0.48949 0.00000 0.80224 1.14047 0.04216 + 0.00484 0.01591 19.00772 1.29181 0.64723 0.04874 0.95766 1.29200 0.04875 + 0.00505 0.01625 23.64480 1.44020 0.80079 0.18812 1.10932 1.44044 0.05545 + 0.00528 0.01663 29.32796 1.62543 0.99164 0.38993 1.29809 1.62574 0.06411 + 0.00552 0.01702 35.88184 1.84015 1.21203 0.61407 1.51640 1.84056 0.07462 + 0.00574 0.01738 42.36456 2.05408 1.43097 0.83767 1.73350 2.05461 0.08562 + 0.00597 0.01774 49.40945 2.28832 1.67014 1.08113 1.97088 2.28899 0.09821 + 0.00616 0.01805 55.65322 2.49742 1.88324 1.29777 2.18253 2.49823 0.10994 + 0.00639 0.01842 63.79639 2.77268 2.16327 1.58200 2.46085 2.77371 0.12625 + 0.00660 0.01875 71.39709 3.03178 2.42651 1.84888 2.72263 3.03303 0.14232 + 0.00679 0.01905 78.57859 3.27794 2.67641 2.10206 2.97122 3.27941 0.15805 + 0.00703 0.01944 88.38807 3.61836 3.02151 2.45125 3.31472 3.62020 0.18123 + 0.00727 0.01981 98.07211 3.95804 3.36554 2.79905 3.65730 3.96028 0.20562 + 0.00749 0.02015 107.43998 4.28939 3.70091 3.13789 3.99135 4.29205 0.23038 + 0.00772 0.02050 117.20490 4.63830 4.05381 3.49421 4.34298 4.64146 0.25771 + 0.00794 0.02084 127.22639 5.00099 4.42041 3.86409 4.70839 5.00472 0.28783 + 0.00815 0.02117 136.83496 5.35078 4.77385 4.22059 5.06073 5.35509 0.31764 + 0.00835 0.02148 146.36813 5.70292 5.12945 4.57904 5.41535 5.70788 0.34960 + 0.00856 0.02179 156.04271 6.06241 5.49240 4.94483 5.77735 6.06806 0.38308 + 0.00876 0.02210 165.90488 6.43331 5.86673 5.32190 6.15079 6.43975 0.41940 + 0.00895 0.02240 175.41891 6.79387 6.23055 5.68830 6.51380 6.80112 0.45587 + 0.00914 0.02268 184.68965 7.14917 6.58896 6.04912 6.87148 7.15728 0.49345 + 0.00933 0.02297 194.09682 7.51160 6.95453 6.41711 7.23634 7.52062 0.53265 + 0.00952 0.02326 203.72124 7.88776 7.33385 6.79879 7.61502 7.89782 0.57570 + 0.00970 0.02353 212.81657 8.24324 7.69231 7.15948 7.97287 8.25429 0.61639 + 0.00987 0.02379 221.87881 8.60468 8.05669 7.52595 8.33675 8.61686 0.66118 + 0.01005 0.02405 230.97339 8.96745 8.42241 7.89377 8.70196 8.98077 0.70616 + 0.00369 0.01428 -3.58123 0.60177 0.00000 0.00000 0.26769 0.60177 0.01703 + 0.00389 0.01462 -2.91479 0.60848 0.00000 0.00000 0.27807 0.60848 0.01835 + 0.00418 0.01512 -1.50079 0.63514 0.00791 0.00000 0.30983 0.63515 0.02054 + 0.00440 0.01548 -0.20344 0.66590 0.03734 0.00000 0.34406 0.66591 0.02237 + 0.00463 0.01586 1.43572 0.70890 0.08755 0.00000 0.39054 0.70892 0.02456 + 0.00483 0.01618 3.09877 0.75459 0.13756 0.00000 0.43913 0.75462 0.02668 + 0.00502 0.01649 4.89029 0.80517 0.19260 0.00000 0.49239 0.80520 0.02894 + 0.00523 0.01683 7.12218 0.86998 0.26185 0.00000 0.55994 0.87002 0.03173 + 0.00541 0.01711 9.27623 0.93349 0.32914 0.00000 0.62578 0.93354 0.03445 + 0.00558 0.01739 11.48718 0.99926 0.39847 0.00000 0.69373 0.99932 0.03725 + 0.00572 0.01761 13.43650 1.05795 0.45992 0.00000 0.75412 1.05804 0.03976 + 0.00602 0.01809 17.83825 1.19453 0.60220 0.04378 0.89420 1.19465 0.04569 + 0.00627 0.01849 21.90649 1.32705 0.73944 0.16857 1.02961 1.32721 0.05168 + 0.00656 0.01895 26.84845 1.49113 0.90864 0.34814 1.19684 1.49136 0.05938 + 0.00687 0.01943 32.49876 1.67980 1.10248 0.54582 1.38869 1.68012 0.06866 + 0.00715 0.01986 38.04362 1.86643 1.29367 0.74163 1.57814 1.86685 0.07833 + 0.00744 0.02030 44.02737 2.06952 1.50125 0.95347 1.78400 2.07006 0.08935 + 0.00768 0.02067 49.29725 2.24979 1.68517 1.14091 1.96654 2.25046 0.09958 + 0.00797 0.02112 56.12104 2.48564 1.92536 1.38526 2.20511 2.48650 0.11372 + 0.00823 0.02152 62.45283 2.70650 2.15000 1.61352 2.42835 2.70756 0.12760 + 0.00847 0.02189 68.41299 2.91567 2.36257 1.82934 2.63967 2.91693 0.14114 + 0.00878 0.02236 76.49198 3.20305 2.65422 2.12503 2.92979 3.20463 0.16100 + 0.00908 0.02281 84.41979 3.48834 2.94347 2.41801 3.21765 3.49028 0.18180 + 0.00936 0.02323 92.05459 3.76558 3.22437 2.70234 3.49729 3.76789 0.20285 + 0.00964 0.02365 99.97098 4.05622 3.51865 2.99999 3.79034 4.05897 0.22600 + 0.00991 0.02407 108.04546 4.35679 3.82276 3.30735 4.09331 4.36004 0.25140 + 0.01018 0.02446 115.76609 4.64600 4.11529 3.60290 4.38478 4.64975 0.27648 + 0.01043 0.02484 123.37582 4.93555 4.40798 3.89841 4.67653 4.93987 0.30326 + 0.01068 0.02522 131.07903 5.23053 4.70610 4.19932 4.97372 5.23546 0.33126 + 0.01094 0.02560 138.89120 5.53358 5.01225 4.50818 5.27900 5.53919 0.36152 + 0.01118 0.02595 146.40451 5.82741 5.30904 4.80751 5.57499 5.83372 0.39184 + 0.01141 0.02630 153.69235 6.11587 5.60031 5.10116 5.86555 6.12293 0.42300 + 0.01164 0.02664 161.07246 6.40962 5.89690 5.40012 6.16144 6.41747 0.45544 + 0.01187 0.02699 168.58098 6.71311 6.20323 5.70877 6.46713 6.72185 0.49094 + 0.01210 0.02732 175.67674 6.99991 6.49272 6.00046 6.75601 7.00950 0.52449 + 0.01231 0.02764 182.69348 7.28970 6.78516 6.29495 7.04793 7.30027 0.56124 + 0.01253 0.02796 189.73497 7.58056 7.07866 6.59052 7.34092 7.59210 0.59813 + 0.00428 0.01551 -3.13558 0.56073 0.00000 0.00000 0.25126 0.56072 0.01688 + 0.00452 0.01590 -2.45785 0.56955 0.00000 0.00000 0.26344 0.56954 0.01812 + 0.00488 0.01648 -1.05874 0.59802 0.00791 0.00000 0.29658 0.59800 0.02019 + 0.00514 0.01689 0.20142 0.62910 0.03712 0.00000 0.33085 0.62909 0.02191 + 0.00541 0.01732 1.77349 0.67145 0.08636 0.00000 0.37639 0.67144 0.02397 + 0.00565 0.01770 3.35387 0.71574 0.13466 0.00000 0.42334 0.71573 0.02596 + 0.00588 0.01806 5.04458 0.76426 0.18737 0.00000 0.47432 0.76426 0.02808 + 0.00612 0.01844 7.13183 0.82571 0.25297 0.00000 0.53829 0.82571 0.03069 + 0.00634 0.01877 9.13337 0.88549 0.31628 0.00000 0.60019 0.88550 0.03321 + 0.00655 0.01909 11.17960 0.94711 0.38124 0.00000 0.66382 0.94713 0.03582 + 0.00671 0.01935 12.97266 1.00176 0.43846 0.00000 0.72002 1.00179 0.03815 + 0.00707 0.01989 16.99991 1.12826 0.57029 0.04044 0.84972 1.12832 0.04363 + 0.00737 0.02036 20.69313 1.25015 0.69661 0.15547 0.97428 1.25025 0.04915 + 0.00772 0.02089 25.15015 1.40021 0.85145 0.32025 1.12721 1.40036 0.05622 + 0.00808 0.02144 30.21347 1.57173 1.02782 0.50050 1.30166 1.57196 0.06470 + 0.00841 0.02194 35.15289 1.74051 1.20087 0.67810 1.47302 1.74084 0.07351 + 0.00875 0.02245 40.45525 1.92333 1.38789 0.86934 1.65839 1.92377 0.08350 + 0.00903 0.02287 45.10269 2.08494 1.55292 1.03785 1.82208 2.08550 0.09275 + 0.00938 0.02339 51.08764 2.29539 1.76744 1.25649 2.03503 2.29612 0.10548 + 0.00969 0.02386 56.61605 2.49173 1.96731 1.45992 2.23355 2.49264 0.11795 + 0.00997 0.02428 61.80496 2.67721 2.15598 1.65180 2.42101 2.67830 0.13009 + 0.01033 0.02482 68.79691 2.93080 2.41356 1.91338 2.67710 2.93218 0.14781 + 0.01068 0.02534 75.62598 3.18157 2.66803 2.17154 2.93023 3.18328 0.16632 + 0.01100 0.02582 82.17973 3.42457 2.91445 2.42134 3.17542 3.42661 0.18501 + 0.01133 0.02630 88.94697 3.67845 3.17173 2.68194 3.43151 3.68088 0.20550 + 0.01166 0.02678 95.81590 3.93995 3.43654 2.94995 3.69520 3.94284 0.22791 + 0.01196 0.02724 102.36956 4.19112 3.69082 3.20722 3.94845 4.19447 0.25001 + 0.01226 0.02767 108.79523 4.44154 3.94416 3.46333 4.20087 4.44540 0.27352 + 0.01255 0.02811 115.28679 4.69622 4.20178 3.72369 4.45758 4.70063 0.29806 + 0.01285 0.02854 121.84296 4.95700 4.46545 3.99004 4.72040 4.96203 0.32452 + 0.01313 0.02895 128.13271 5.20935 4.72055 4.24764 4.97472 5.21501 0.35098 + 0.01339 0.02935 134.21120 5.45635 4.97017 4.49960 5.22363 5.46268 0.37812 + 0.01366 0.02974 140.35652 5.70756 5.22401 4.75578 5.47678 5.71459 0.40633 + 0.01394 0.03014 146.58034 5.96614 5.48524 5.01929 5.73737 5.97398 0.43712 + 0.01419 0.03052 152.46202 6.21051 5.73211 5.26832 5.98363 6.21911 0.46621 + 0.01444 0.03088 158.24219 6.45622 5.98027 5.51850 6.23127 6.46568 0.49796 + 0.01469 0.03125 164.04256 6.70282 6.22932 5.76958 6.47980 6.71315 0.52982 + 0.00476 0.01651 -2.81946 0.53148 0.00000 0.00000 0.23946 0.53147 0.01676 + 0.00503 0.01694 -2.13658 0.54166 0.00000 0.00000 0.25279 0.54164 0.01795 + 0.00544 0.01758 -0.75426 0.57114 0.00785 0.00000 0.28664 0.57112 0.01992 + 0.00574 0.01803 0.47399 0.60223 0.03673 0.00000 0.32071 0.60220 0.02157 + 0.00605 0.01852 1.99173 0.64386 0.08500 0.00000 0.36532 0.64383 0.02353 + 0.00632 0.01893 3.50695 0.68691 0.13184 0.00000 0.41085 0.68687 0.02542 + 0.00658 0.01933 5.11944 0.73372 0.18264 0.00000 0.45996 0.73369 0.02744 + 0.00686 0.01975 7.09645 0.79251 0.24538 0.00000 0.52111 0.79248 0.02991 + 0.00711 0.02012 8.98304 0.84939 0.30561 0.00000 0.57998 0.84936 0.03230 + 0.00734 0.02048 10.90591 0.90783 0.36722 0.00000 0.64029 0.90781 0.03476 + 0.00753 0.02076 12.58304 0.95941 0.42125 0.00000 0.69332 0.95940 0.03696 + 0.00793 0.02136 16.33459 1.07835 0.54526 0.03796 0.81526 1.07837 0.04212 + 0.00828 0.02188 19.75463 1.19239 0.66350 0.14576 0.93178 1.19244 0.04729 + 0.00867 0.02247 23.86144 1.33215 0.80781 0.29967 1.07424 1.33225 0.05389 + 0.00908 0.02308 28.50437 1.49122 0.97147 0.46721 1.23603 1.49138 0.06180 + 0.00945 0.02363 33.01346 1.64712 1.13143 0.63165 1.39435 1.64737 0.06998 + 0.00983 0.02420 37.83470 1.81540 1.30372 0.80811 1.56502 1.81575 0.07924 + 0.01015 0.02467 42.04524 1.96371 1.45528 0.96310 1.71528 1.96417 0.08779 + 0.01054 0.02525 47.44538 2.15617 1.65160 1.16349 1.91006 2.15679 0.09953 + 0.01089 0.02576 52.41682 2.33521 1.83399 1.34940 2.09114 2.33599 0.11099 + 0.01121 0.02623 57.07288 2.50405 2.00586 1.52444 2.26183 2.50500 0.12214 + 0.01162 0.02683 63.31919 2.73403 2.23964 1.76216 2.49416 2.73526 0.13836 + 0.01201 0.02740 69.39889 2.96081 2.46993 1.99608 2.72314 2.96233 0.15526 + 0.01237 0.02794 75.21840 3.18008 2.69246 2.22194 2.94446 3.18192 0.17230 + 0.01274 0.02848 81.20902 3.40861 2.92421 2.45697 3.17505 3.41081 0.19094 + 0.01310 0.02901 87.26792 3.64330 3.16205 2.69796 3.41179 3.64592 0.21128 + 0.01345 0.02951 93.03951 3.86844 3.39012 2.92897 3.63886 3.87148 0.23131 + 0.01378 0.02999 98.67655 4.09219 3.61665 3.15823 3.86448 4.09570 0.25257 + 0.01411 0.03048 104.36305 4.31948 3.84672 3.39101 4.09366 4.32350 0.27474 + 0.01444 0.03096 110.08869 4.55164 4.08163 3.62854 4.32773 4.55623 0.29859 + 0.01475 0.03141 115.57176 4.77597 4.30856 3.85793 4.55388 4.78114 0.32242 + 0.01505 0.03185 120.85634 4.99507 4.53014 4.08181 4.77476 5.00085 0.34680 + 0.01535 0.03229 126.19264 5.21768 4.75525 4.30922 4.99918 5.22411 0.37214 + 0.01565 0.03273 131.57915 5.44623 4.98629 4.54251 5.22959 5.45339 0.39973 + 0.01594 0.03315 136.66954 5.66222 5.20464 4.76298 5.44733 5.67007 0.42581 + 0.01622 0.03355 141.64952 5.87860 5.42334 4.98366 5.66550 5.88725 0.45417 + 0.01650 0.03396 146.64680 6.09577 5.64282 5.20514 5.88447 6.10522 0.48264 + 0.00681 0.02023 -1.96011 0.45174 0.00000 0.00000 0.20693 0.45169 0.01640 + 0.00723 0.02083 -1.27619 0.46501 0.00000 0.00000 0.22274 0.46494 0.01743 + 0.00784 0.02172 0.03404 0.49615 0.00750 0.00000 0.25742 0.49606 0.01914 + 0.00829 0.02236 1.15301 0.52636 0.03477 0.00000 0.29003 0.52624 0.02056 + 0.00875 0.02303 2.49677 0.56498 0.07929 0.00000 0.33106 0.56484 0.02224 + 0.00916 0.02361 3.81010 0.60370 0.12121 0.00000 0.37179 0.60356 0.02386 + 0.00955 0.02416 5.18522 0.64495 0.16587 0.00000 0.41490 0.64479 0.02557 + 0.00996 0.02476 6.83546 0.69549 0.21978 0.00000 0.46734 0.69532 0.02765 + 0.01032 0.02527 8.38646 0.74361 0.27076 0.00000 0.51706 0.74343 0.02965 + 0.01067 0.02577 9.95231 0.79258 0.32243 0.00000 0.56754 0.79239 0.03171 + 0.01094 0.02616 11.29810 0.83517 0.36712 0.00000 0.61131 0.83498 0.03352 + 0.01153 0.02701 14.27001 0.93226 0.46854 0.03086 0.71082 0.93208 0.03776 + 0.01204 0.02773 16.92854 1.02390 0.56377 0.11804 0.80447 1.02373 0.04196 + 0.01261 0.02855 20.07056 1.13472 0.67847 0.24124 0.91746 1.13457 0.04728 + 0.01321 0.02941 23.56841 1.25912 0.80681 0.37338 1.04407 1.25901 0.05358 + 0.01375 0.03018 26.91722 1.37955 0.93071 0.50150 1.16645 1.37950 0.06004 + 0.01430 0.03097 30.45271 1.50817 1.06274 0.63748 1.29700 1.50818 0.06729 + 0.01476 0.03163 33.50488 1.62042 1.17777 0.75575 1.41082 1.62051 0.07393 + 0.01532 0.03243 37.36845 1.76450 1.32515 0.90697 1.55679 1.76470 0.08297 + 0.01582 0.03315 40.88723 1.89734 1.46086 1.04600 1.69128 1.89767 0.09173 + 0.01627 0.03380 44.15995 2.02191 1.58801 1.17614 1.81733 2.02235 0.10021 + 0.01686 0.03464 48.48876 2.18962 1.75897 1.35081 1.98694 2.19027 0.11244 + 0.01741 0.03543 52.65569 2.35351 1.92586 1.52111 2.15260 2.35438 0.12509 + 0.01793 0.03617 56.61143 2.51091 2.08603 1.68442 2.31166 2.51202 0.13776 + 0.01845 0.03692 60.64336 2.67364 2.25151 1.85298 2.47606 2.67503 0.15154 + 0.01896 0.03766 64.67485 2.83923 2.41978 2.02421 2.64329 2.84094 0.16645 + 0.01945 0.03836 68.49554 2.99743 2.58048 2.18766 2.80304 2.99945 0.18110 + 0.01991 0.03902 72.18118 3.15309 2.73851 2.34825 2.96021 3.15547 0.19651 + 0.02037 0.03969 75.88186 3.31063 2.89840 2.51068 3.11926 3.31339 0.21254 + 0.02083 0.04035 79.57175 3.47031 3.06040 2.67514 3.28045 3.47350 0.22968 + 0.02127 0.04098 83.08510 3.62388 3.21618 2.83322 3.43548 3.62751 0.24673 + 0.02168 0.04158 86.44189 3.77286 3.36725 2.98644 3.58587 3.77695 0.26409 + 0.02210 0.04219 89.81870 3.92376 3.52025 3.14160 3.73821 3.92834 0.28208 + 0.02252 0.04280 93.19105 4.07740 3.67599 3.29944 3.89332 4.08252 0.30154 + 0.02292 0.04337 96.37801 4.22260 3.82317 3.44859 4.03990 4.22823 0.31993 + 0.02330 0.04392 99.45109 4.36643 3.96893 3.59621 4.18513 4.37265 0.33976 + 0.02369 0.04448 102.53458 4.51076 4.11520 3.74435 4.33088 4.51758 0.35966 + 0.01000 0.02513 -1.25548 0.38642 0.00000 0.00000 0.17972 0.38630 0.01599 + 0.01062 0.02598 -0.58927 0.40133 0.00000 0.00000 0.19668 0.40118 0.01689 + 0.01154 0.02724 0.62558 0.43234 0.00695 0.00000 0.23052 0.43213 0.01837 + 0.01220 0.02815 1.62514 0.46062 0.03195 0.00000 0.26073 0.46036 0.01959 + 0.01290 0.02911 2.79253 0.49545 0.07199 0.00000 0.29749 0.49515 0.02102 + 0.01349 0.02993 3.90954 0.52946 0.10870 0.00000 0.33310 0.52912 0.02239 + 0.01406 0.03072 5.06006 0.56501 0.14716 0.00000 0.37015 0.56464 0.02384 + 0.01467 0.03156 6.41096 0.60759 0.19262 0.00000 0.41425 0.60719 0.02558 + 0.01520 0.03229 7.66103 0.64751 0.23499 0.00000 0.45546 0.64709 0.02723 + 0.01570 0.03300 8.91074 0.68776 0.27755 0.00000 0.49692 0.68731 0.02893 + 0.01611 0.03356 9.96847 0.72228 0.31386 0.00000 0.53238 0.72182 0.03041 + 0.01696 0.03475 12.27312 0.80007 0.39536 0.02467 0.61211 0.79958 0.03386 + 0.01770 0.03578 14.29376 0.87236 0.47072 0.09400 0.68601 0.87185 0.03724 + 0.01852 0.03693 16.64187 0.95859 0.56027 0.19097 0.77399 0.95807 0.04147 + 0.01937 0.03813 19.21349 1.05405 0.65909 0.29342 0.87121 1.05352 0.04643 + 0.02015 0.03923 21.63827 1.14529 0.75331 0.39152 0.96402 1.14479 0.05147 + 0.02093 0.04034 24.16360 1.24166 0.85260 0.49448 1.06193 1.24118 0.05707 + 0.02158 0.04126 26.31669 1.32491 0.93823 0.58311 1.14645 1.32447 0.06217 + 0.02237 0.04238 29.00401 1.43056 1.04671 0.69513 1.25361 1.43018 0.06904 + 0.02307 0.04338 31.42320 1.52706 1.14566 0.79715 1.35143 1.52675 0.07564 + 0.02371 0.04429 33.65620 1.61700 1.23782 0.89207 1.44257 1.61677 0.08201 + 0.02453 0.04546 36.56459 1.73663 1.36022 1.01789 1.56372 1.73653 0.09110 + 0.02530 0.04656 39.33059 1.85241 1.47857 1.13938 1.68092 1.85246 0.10042 + 0.02602 0.04760 41.93266 1.96281 1.59134 1.25505 1.79265 1.96302 0.10971 + 0.02674 0.04863 44.55599 2.07599 1.70687 1.37342 1.90716 2.07639 0.11975 + 0.02745 0.04966 47.14615 2.19003 1.82319 1.49246 2.02251 2.19065 0.13053 + 0.02812 0.05062 49.58694 2.29849 1.93379 1.60560 2.13221 2.29933 0.14107 + 0.02875 0.05154 51.90913 2.40409 2.04141 1.71556 2.23901 2.40519 0.15208 + 0.02939 0.05246 54.22879 2.51054 2.14986 1.82634 2.34666 2.51191 0.16348 + 0.03002 0.05337 56.51640 2.61753 2.25883 1.93757 2.45485 2.61920 0.17560 + 0.03061 0.05424 58.68063 2.71993 2.36310 2.04395 2.55840 2.72191 0.18761 + 0.03118 0.05506 60.72813 2.81853 2.46347 2.14630 2.65812 2.82084 0.19977 + 0.03175 0.05589 62.77907 2.91808 2.56480 2.24960 2.75880 2.92074 0.21233 + 0.03232 0.05672 64.80254 3.01852 2.66701 2.35373 2.86040 3.02157 0.22584 + 0.03286 0.05751 66.71478 3.11344 2.76361 2.45214 2.95641 3.11686 0.23860 + 0.03337 0.05826 68.52846 3.20632 2.85811 2.54835 3.05038 3.21016 0.25223 + 0.03389 0.05902 70.34812 3.29952 2.95294 2.64488 3.14469 3.30379 0.26591 + 0.01265 0.02876 -0.90264 0.35396 0.00000 0.00000 0.16593 0.35377 0.01572 + 0.01344 0.02983 -0.25417 0.36929 0.00000 0.00000 0.18306 0.36905 0.01654 + 0.01460 0.03139 0.89642 0.39956 0.00656 0.00000 0.21581 0.39924 0.01790 + 0.01543 0.03252 1.82321 0.42636 0.03003 0.00000 0.24429 0.42597 0.01901 + 0.01630 0.03370 2.88813 0.45873 0.06723 0.00000 0.27836 0.45829 0.02032 + 0.01704 0.03472 3.89435 0.48990 0.10084 0.00000 0.31093 0.48940 0.02156 + 0.01775 0.03569 4.92063 0.52215 0.13575 0.00000 0.34448 0.52160 0.02286 + 0.01851 0.03673 6.10994 0.56028 0.17651 0.00000 0.38394 0.55968 0.02442 + 0.01916 0.03763 7.20024 0.59573 0.21419 0.00000 0.42051 0.59509 0.02590 + 0.01979 0.03850 8.28373 0.63127 0.25184 0.00000 0.45712 0.63059 0.02740 + 0.02029 0.03919 9.19225 0.66150 0.28371 0.00000 0.48817 0.66080 0.02872 + 0.02134 0.04066 11.15557 0.72918 0.35477 0.02145 0.55755 0.72842 0.03175 + 0.02224 0.04192 12.85562 0.79149 0.41989 0.08157 0.62127 0.79069 0.03471 + 0.02325 0.04333 14.81058 0.86521 0.49665 0.16514 0.69652 0.86437 0.03839 + 0.02430 0.04481 16.93006 0.94614 0.58066 0.25264 0.77900 0.94528 0.04268 + 0.02525 0.04615 18.90967 1.02292 0.66015 0.33580 0.85715 1.02204 0.04701 + 0.02620 0.04750 20.95393 1.10344 0.74335 0.42248 0.93903 1.10256 0.05180 + 0.02699 0.04862 22.68329 1.17259 0.81468 0.49664 1.00928 1.17172 0.05613 + 0.02795 0.04999 24.82276 1.25972 0.90440 0.58972 1.09774 1.25889 0.06194 + 0.02880 0.05121 26.73475 1.33886 0.98578 0.67401 1.17804 1.33806 0.06751 + 0.02957 0.05232 28.49112 1.41234 1.06130 0.75213 1.25257 1.41159 0.07285 + 0.03056 0.05374 30.75648 1.50935 1.16084 0.85491 1.35090 1.50868 0.08044 + 0.03148 0.05507 32.89453 1.60268 1.25652 0.95357 1.44548 1.60211 0.08819 + 0.03235 0.05632 34.89428 1.69128 1.34730 1.04708 1.53525 1.69084 0.09588 + 0.03321 0.05758 36.89627 1.78164 1.43980 1.14226 1.62677 1.78133 0.10416 + 0.03406 0.05881 38.85708 1.87212 1.53238 1.23741 1.71841 1.87198 0.11300 + 0.03485 0.05997 40.69803 1.95795 1.62016 1.32758 1.80532 1.95798 0.12163 + 0.03561 0.06108 42.43397 2.04097 1.70502 1.41466 1.88938 2.04119 0.13060 + 0.03636 0.06219 44.16227 2.12443 1.79032 1.50216 1.97390 2.12487 0.13988 + 0.03711 0.06328 45.85451 2.20790 1.87558 1.58955 2.05841 2.20857 0.14970 + 0.03782 0.06432 47.44886 2.28753 1.95692 1.67288 2.13905 2.28845 0.15940 + 0.03849 0.06531 48.94748 2.36385 2.03486 1.75268 2.21634 2.36503 0.16920 + 0.03916 0.06631 50.44447 2.44075 2.11339 1.83307 2.29423 2.44221 0.17930 + 0.03983 0.06730 51.90958 2.51791 2.19215 1.91364 2.37238 2.51967 0.19012 + 0.04046 0.06824 53.29416 2.59082 2.26658 1.98978 2.44624 2.59288 0.20034 + 0.04107 0.06914 54.59307 2.66161 2.33885 2.06365 2.51798 2.66401 0.21120 + 0.04168 0.07005 55.89618 2.73265 2.41137 2.13778 2.58997 2.73539 0.22210 + 0.01508 0.03188 -0.67412 0.33316 0.00000 0.00000 0.15698 0.33291 0.01551 + 0.01601 0.03313 -0.04116 0.34860 0.00000 0.00000 0.17404 0.34827 0.01628 + 0.01737 0.03496 1.06081 0.37811 0.00626 0.00000 0.20580 0.37768 0.01756 + 0.01835 0.03628 1.93523 0.40374 0.02858 0.00000 0.23296 0.40323 0.01860 + 0.01936 0.03766 2.92832 0.43432 0.06372 0.00000 0.26507 0.43372 0.01981 + 0.02023 0.03885 3.85818 0.46346 0.09516 0.00000 0.29549 0.46280 0.02097 + 0.02106 0.03999 4.79982 0.49341 0.12760 0.00000 0.32662 0.49268 0.02217 + 0.02194 0.04120 5.88065 0.52850 0.16516 0.00000 0.36292 0.52771 0.02361 + 0.02270 0.04225 6.86474 0.56092 0.19967 0.00000 0.39637 0.56007 0.02497 + 0.02343 0.04326 7.83842 0.59330 0.23403 0.00000 0.42971 0.59241 0.02635 + 0.02401 0.04406 8.64923 0.62069 0.26295 0.00000 0.45784 0.61975 0.02755 + 0.02523 0.04577 10.39073 0.68169 0.32713 0.01935 0.52039 0.68068 0.03032 + 0.02627 0.04723 11.88466 0.73749 0.38556 0.07343 0.57747 0.73641 0.03300 + 0.02743 0.04887 13.58912 0.80311 0.45404 0.14830 0.64448 0.80197 0.03633 + 0.02863 0.05057 15.42305 0.87470 0.52852 0.22617 0.71747 0.87351 0.04019 + 0.02972 0.05212 17.12374 0.94223 0.59861 0.29977 0.78625 0.94101 0.04406 + 0.03081 0.05368 18.86869 1.01271 0.67160 0.37610 0.85797 1.01146 0.04833 + 0.03171 0.05498 20.33609 1.07295 0.73389 0.44111 0.91921 1.07169 0.05218 + 0.03281 0.05655 22.13929 1.14846 0.81185 0.52228 0.99594 1.14721 0.05732 + 0.03377 0.05795 23.74177 1.21676 0.88226 0.59547 1.06529 1.21552 0.06223 + 0.03465 0.05922 25.20837 1.27999 0.94740 0.66312 1.12948 1.27878 0.06693 + 0.03577 0.06085 27.08579 1.36300 1.03280 0.75162 1.21370 1.36184 0.07358 + 0.03681 0.06238 28.84724 1.44251 1.11453 0.83619 1.29435 1.44143 0.08034 + 0.03779 0.06381 30.48736 1.51775 1.19181 0.91609 1.37064 1.51674 0.08704 + 0.03876 0.06524 32.12032 1.59416 1.27025 0.99709 1.44812 1.59326 0.09422 + 0.03972 0.06665 33.70959 1.67033 1.34839 1.07769 1.52534 1.66956 0.10188 + 0.04061 0.06798 35.19741 1.74243 1.42233 1.15392 1.59842 1.74179 0.10934 + 0.04146 0.06924 36.59048 1.81182 1.49344 1.22716 1.66876 1.81133 0.11706 + 0.04231 0.07050 37.97377 1.88145 1.56480 1.30062 1.73934 1.88113 0.12503 + 0.04314 0.07174 39.32047 1.95080 1.63585 1.37370 1.80965 1.95068 0.13345 + 0.04393 0.07292 40.58507 2.01681 1.70346 1.44322 1.87657 2.01689 0.14175 + 0.04468 0.07404 41.76754 2.07986 1.76803 1.50956 1.94050 2.08015 0.15011 + 0.04543 0.07517 42.94610 2.14328 1.83298 1.57629 2.00481 2.14380 0.15872 + 0.04618 0.07629 44.09206 2.20663 1.89784 1.64288 2.06907 2.20741 0.16792 + 0.04688 0.07735 45.17503 2.26650 1.95914 1.70581 2.12979 2.26752 0.17660 + 0.04756 0.07837 46.18194 2.32429 2.01830 1.76651 2.18844 2.32559 0.18579 + 0.04823 0.07940 47.19205 2.38227 2.07767 1.82741 2.24728 2.38385 0.19502 + 0.01725 0.03458 -0.50934 0.31831 0.00000 0.00000 0.15051 0.31799 0.01533 + 0.01831 0.03598 0.10996 0.33371 0.00000 0.00000 0.16741 0.33329 0.01607 + 0.01985 0.03805 1.17252 0.36250 0.00601 0.00000 0.19829 0.36196 0.01728 + 0.02095 0.03954 2.00590 0.38716 0.02742 0.00000 0.22437 0.38653 0.01827 + 0.02209 0.04110 2.94381 0.41631 0.06092 0.00000 0.25493 0.41558 0.01942 + 0.02307 0.04244 3.81574 0.44389 0.09068 0.00000 0.28369 0.44308 0.02051 + 0.02400 0.04372 4.69377 0.47207 0.12124 0.00000 0.31298 0.47119 0.02164 + 0.02499 0.04508 5.69401 0.50488 0.15639 0.00000 0.34690 0.50391 0.02299 + 0.02584 0.04627 6.59985 0.53504 0.18855 0.00000 0.37801 0.53400 0.02426 + 0.02665 0.04740 7.49301 0.56508 0.22047 0.00000 0.40894 0.56398 0.02555 + 0.02730 0.04830 8.23272 0.59036 0.24722 0.00000 0.43492 0.58922 0.02668 + 0.02866 0.05021 9.81386 0.64648 0.30637 0.01781 0.49247 0.64524 0.02924 + 0.02982 0.05185 11.16017 0.69755 0.35994 0.06752 0.54473 0.69623 0.03173 + 0.03111 0.05369 12.68665 0.75732 0.42244 0.13609 0.60579 0.75592 0.03480 + 0.03244 0.05559 14.31928 0.82222 0.49010 0.20704 0.67200 0.82075 0.03834 + 0.03365 0.05732 15.82476 0.88317 0.55350 0.27383 0.73411 0.88165 0.04189 + 0.03486 0.05906 17.36160 0.94654 0.61926 0.34282 0.79862 0.94497 0.04579 + 0.03585 0.06050 18.64791 1.00050 0.67518 0.40137 0.85352 0.99891 0.04930 + 0.03706 0.06226 20.22021 1.06788 0.74489 0.47418 0.92202 1.06626 0.05397 + 0.03813 0.06381 21.61136 1.12861 0.80764 0.53962 0.98373 1.12699 0.05841 + 0.03909 0.06523 22.88081 1.18471 0.86558 0.59996 1.04073 1.18310 0.06266 + 0.04032 0.06703 24.49623 1.25804 0.94119 0.67857 1.11519 1.25645 0.06865 + 0.04147 0.06873 26.00479 1.32803 1.01330 0.75343 1.18624 1.32649 0.07473 + 0.04254 0.07032 27.40446 1.39409 1.08131 0.82397 1.25328 1.39260 0.08074 + 0.04361 0.07190 28.79198 1.46097 1.15013 0.89526 1.32115 1.45956 0.08717 + 0.04465 0.07346 30.13564 1.52741 1.21844 0.96594 1.38856 1.52609 0.09400 + 0.04563 0.07492 31.39065 1.59018 1.28298 1.03269 1.45225 1.58897 0.10065 + 0.04655 0.07631 32.55916 1.65036 1.34482 1.09657 1.51331 1.64928 0.10752 + 0.04748 0.07770 33.71706 1.71066 1.40677 1.16054 1.57450 1.70972 0.11460 + 0.04839 0.07908 34.83920 1.77054 1.46826 1.22399 1.63526 1.76975 0.12205 + 0.04924 0.08038 35.89017 1.82742 1.52668 1.28425 1.69299 1.82680 0.12940 + 0.05006 0.08161 36.86880 1.88160 1.58231 1.34159 1.74799 1.88116 0.13679 + 0.05087 0.08285 37.84246 1.93604 1.63820 1.39920 1.80325 1.93578 0.14439 + 0.05168 0.08408 38.78427 1.99023 1.69383 1.45649 1.85828 1.99019 0.15248 + 0.05244 0.08525 39.67430 2.04144 1.74641 1.51064 1.91028 2.04161 0.16013 + 0.05317 0.08636 40.49590 2.09064 1.79692 1.56263 1.96027 2.09105 0.16820 + 0.05390 0.08749 41.32008 2.14001 1.84761 1.61479 2.01043 2.14066 0.17629 + 0.02678 0.04574 -0.05124 0.27823 0.00000 0.00000 0.13266 0.27753 0.01467 + 0.02832 0.04784 0.51723 0.29300 0.00000 0.00000 0.14860 0.29214 0.01531 + 0.03055 0.05090 1.44972 0.31903 0.00522 0.00000 0.17626 0.31795 0.01634 + 0.03213 0.05309 2.15480 0.34046 0.02366 0.00000 0.19881 0.33922 0.01717 + 0.03376 0.05538 2.92553 0.36509 0.05209 0.00000 0.22455 0.36369 0.01813 + 0.03515 0.05733 3.62572 0.38789 0.07677 0.00000 0.24828 0.38634 0.01903 + 0.03646 0.05920 4.31802 0.41081 0.10174 0.00000 0.27206 0.40913 0.01997 + 0.03784 0.06117 5.08752 0.43691 0.12988 0.00000 0.29905 0.43510 0.02106 + 0.03903 0.06288 5.77222 0.46057 0.15526 0.00000 0.32346 0.45864 0.02209 + 0.04016 0.06451 6.43967 0.48390 0.18023 0.00000 0.34750 0.48186 0.02312 + 0.04106 0.06581 6.98253 0.50326 0.20086 0.00000 0.36740 0.50113 0.02401 + 0.04294 0.06854 8.12427 0.54571 0.24595 0.01355 0.41099 0.54341 0.02603 + 0.04453 0.07088 9.07203 0.58369 0.28612 0.05114 0.44991 0.58124 0.02797 + 0.04628 0.07347 10.12401 0.62748 0.33229 0.10245 0.49473 0.62487 0.03033 + 0.04809 0.07616 11.22646 0.67427 0.38150 0.15465 0.54257 0.67152 0.03302 + 0.04971 0.07858 12.22356 0.71758 0.42696 0.20311 0.58681 0.71470 0.03569 + 0.05133 0.08102 13.22368 0.76202 0.47351 0.25253 0.63217 0.75902 0.03860 + 0.05265 0.08303 14.04716 0.79942 0.51262 0.29398 0.67032 0.79632 0.04118 + 0.05425 0.08546 15.03524 0.84547 0.56073 0.34484 0.71728 0.84228 0.04460 + 0.05565 0.08761 15.89602 0.88652 0.60356 0.39006 0.75912 0.88324 0.04782 + 0.05692 0.08956 16.67334 0.92416 0.64282 0.43145 0.79748 0.92082 0.05088 + 0.05852 0.09203 17.64172 0.97262 0.69330 0.48458 0.84685 0.96922 0.05515 + 0.06001 0.09435 18.53101 1.01833 0.74089 0.53460 0.89342 1.01489 0.05945 + 0.06139 0.09650 19.34555 1.06109 0.78538 0.58133 0.93698 1.05762 0.06368 + 0.06276 0.09865 20.14025 1.10392 0.82993 0.62806 0.98061 1.10044 0.06816 + 0.06409 0.10075 20.89580 1.14593 0.87361 0.67384 1.02341 1.14245 0.07288 + 0.06534 0.10272 21.59551 1.18542 0.91466 0.71683 1.06363 1.18195 0.07747 + 0.06651 0.10458 22.23342 1.22275 0.95346 0.75743 1.10168 1.21931 0.08215 + 0.06767 0.10643 22.86061 1.25996 0.99214 0.79790 1.13961 1.25657 0.08696 + 0.06881 0.10826 23.45795 1.29651 1.03012 0.83761 1.17687 1.29317 0.09200 + 0.06989 0.10998 24.01180 1.33102 1.06599 0.87509 1.21206 1.32775 0.09694 + 0.07090 0.11161 24.51923 1.36356 1.09981 0.91042 1.24526 1.36036 0.10187 + 0.07191 0.11325 25.02062 1.39612 1.13366 0.94577 1.27848 1.39301 0.10694 + 0.07290 0.11486 25.49569 1.42813 1.16695 0.98053 1.31117 1.42513 0.11229 + 0.07385 0.11639 25.94464 1.45839 1.19841 1.01337 1.34206 1.45548 0.11735 + 0.07474 0.11785 26.34727 1.48698 1.22816 1.04441 1.37128 1.48420 0.12263 + 0.07563 0.11931 26.75109 1.51566 1.25801 1.07555 1.40059 1.51301 0.12793 + 0.04215 0.06317 0.33883 0.24641 0.00000 0.00000 0.11784 0.24486 0.01382 + 0.04434 0.06631 0.84397 0.25988 0.00000 0.00000 0.13223 0.25807 0.01436 + 0.04747 0.07086 1.63579 0.28248 0.00440 0.00000 0.15611 0.28030 0.01522 + 0.04967 0.07409 2.21213 0.30044 0.01982 0.00000 0.17495 0.29800 0.01591 + 0.05192 0.07743 2.82294 0.32053 0.04324 0.00000 0.19592 0.31782 0.01670 + 0.05382 0.08027 3.36428 0.33873 0.06311 0.00000 0.21486 0.33579 0.01744 + 0.05561 0.08297 3.88897 0.35672 0.08292 0.00000 0.23354 0.35357 0.01819 + 0.05748 0.08581 4.45669 0.37678 0.10478 0.00000 0.25430 0.37340 0.01906 + 0.05908 0.08826 4.95222 0.39467 0.12422 0.00000 0.27279 0.39110 0.01987 + 0.06060 0.09059 5.42917 0.41215 0.14316 0.00000 0.29084 0.40840 0.02068 + 0.06179 0.09243 5.80931 0.42642 0.15857 0.00000 0.30556 0.42253 0.02137 + 0.06427 0.09630 6.59418 0.45733 0.19184 0.01000 0.33738 0.45315 0.02294 + 0.06636 0.09958 7.22647 0.48448 0.22097 0.03759 0.36531 0.48006 0.02441 + 0.06865 0.10320 7.91099 0.51527 0.25392 0.07480 0.39694 0.51059 0.02619 + 0.07098 0.10693 8.61164 0.54760 0.28845 0.11200 0.43013 0.54266 0.02819 + 0.07306 0.11027 9.23103 0.57704 0.31984 0.14601 0.46035 0.57188 0.03015 + 0.07512 0.11361 9.83941 0.60681 0.35154 0.18021 0.49088 0.60143 0.03227 + 0.07680 0.11635 10.33053 0.63152 0.37782 0.20854 0.51622 0.62597 0.03414 + 0.07880 0.11964 10.90668 0.66149 0.40967 0.24280 0.54695 0.65574 0.03658 + 0.08055 0.12253 11.39912 0.68786 0.43768 0.27288 0.57398 0.68195 0.03886 + 0.08213 0.12515 11.83802 0.71183 0.46315 0.30021 0.59856 0.70578 0.04102 + 0.08410 0.12844 12.37033 0.74216 0.49535 0.33471 0.62967 0.73595 0.04399 + 0.08592 0.13151 12.84879 0.77039 0.52531 0.36679 0.65862 0.76404 0.04696 + 0.08760 0.13436 13.27973 0.79652 0.55305 0.39646 0.68543 0.79005 0.04985 + 0.08925 0.13717 13.69137 0.82236 0.58048 0.42579 0.71195 0.81578 0.05291 + 0.09085 0.13991 14.07317 0.84734 0.60701 0.45413 0.73760 0.84067 0.05609 + 0.09233 0.14247 14.42263 0.87066 0.63178 0.48059 0.76155 0.86391 0.05917 + 0.09372 0.14487 14.73197 0.89235 0.65483 0.50520 0.78384 0.88554 0.06228 + 0.09509 0.14725 15.03279 0.91384 0.67768 0.52959 0.80594 0.90698 0.06547 + 0.09642 0.14959 15.31211 0.93467 0.69985 0.55324 0.82737 0.92777 0.06879 + 0.09768 0.15178 15.56730 0.95418 0.72062 0.57541 0.84747 0.94726 0.07202 + 0.09885 0.15385 15.79541 0.97236 0.73999 0.59608 0.86620 0.96542 0.07524 + 0.10002 0.15592 16.01845 0.99045 0.75928 0.61666 0.88485 0.98351 0.07852 + 0.10116 0.15795 16.22299 1.00797 0.77799 0.63663 0.90294 1.00104 0.08197 + 0.10223 0.15987 16.41628 1.02453 0.79567 0.65550 0.92004 1.01761 0.08523 + 0.10325 0.16169 16.58156 1.03986 0.81207 0.67301 0.93589 1.03297 0.08859 + 0.10426 0.16351 16.74728 1.05523 0.82853 0.69057 0.95179 1.04837 0.09197 + 0.05523 0.07822 0.54233 0.23107 0.00000 0.00000 0.11034 0.22859 0.01321 + 0.05787 0.08219 1.00445 0.24353 0.00000 0.00000 0.12360 0.24071 0.01369 + 0.06161 0.08790 1.70937 0.26389 0.00391 0.00000 0.14508 0.26057 0.01446 + 0.06421 0.09193 2.21054 0.27974 0.01758 0.00000 0.16170 0.27607 0.01507 + 0.06686 0.09607 2.73149 0.29720 0.03814 0.00000 0.17995 0.29318 0.01577 + 0.06909 0.09959 3.18603 0.31281 0.05536 0.00000 0.19622 0.30849 0.01641 + 0.07119 0.10291 3.62104 0.32808 0.07237 0.00000 0.21211 0.32349 0.01706 + 0.07336 0.10640 4.08367 0.34489 0.09091 0.00000 0.22955 0.34000 0.01782 + 0.07521 0.10938 4.48248 0.35974 0.10724 0.00000 0.24494 0.35460 0.01852 + 0.07697 0.11223 4.86319 0.37415 0.12306 0.00000 0.25987 0.36879 0.01921 + 0.07833 0.11446 5.16260 0.38581 0.13581 0.00000 0.27193 0.38026 0.01980 + 0.08118 0.11915 5.77312 0.41084 0.16313 0.00823 0.29781 0.40492 0.02113 + 0.08355 0.12309 6.25475 0.43258 0.18679 0.03084 0.32026 0.42635 0.02237 + 0.08614 0.12743 6.76720 0.45697 0.21327 0.06111 0.34542 0.45041 0.02385 + 0.08877 0.13187 7.28328 0.48229 0.24072 0.09104 0.37154 0.47540 0.02552 + 0.09109 0.13584 7.73226 0.50510 0.26543 0.11814 0.39507 0.49792 0.02714 + 0.09338 0.13978 8.16672 0.52794 0.29015 0.14517 0.41862 0.52048 0.02887 + 0.09524 0.14300 8.51245 0.54672 0.31048 0.16736 0.43799 0.53904 0.03039 + 0.09745 0.14686 8.91140 0.56927 0.33487 0.19395 0.46125 0.56133 0.03237 + 0.09936 0.15023 9.24758 0.58894 0.35615 0.21712 0.48155 0.58078 0.03421 + 0.10108 0.15327 9.54424 0.60671 0.37539 0.23806 0.49990 0.59837 0.03594 + 0.10322 0.15709 9.89667 0.62894 0.39945 0.26422 0.52285 0.62037 0.03831 + 0.10519 0.16062 10.20813 0.64943 0.42165 0.28834 0.54402 0.64066 0.04067 + 0.10699 0.16388 10.48490 0.66825 0.44206 0.31052 0.56349 0.65932 0.04296 + 0.10876 0.16710 10.74469 0.68671 0.46208 0.33227 0.58259 0.67761 0.04536 + 0.11045 0.17021 10.98066 0.70436 0.48127 0.35310 0.60088 0.69512 0.04785 + 0.11202 0.17312 11.19447 0.72076 0.49910 0.37246 0.61788 0.71140 0.05025 + 0.11348 0.17583 11.37882 0.73583 0.51552 0.39030 0.63353 0.72636 0.05267 + 0.11492 0.17852 11.55630 0.75070 0.53174 0.40791 0.64898 0.74114 0.05514 + 0.11631 0.18113 11.71721 0.76497 0.54733 0.42485 0.66383 0.75532 0.05770 + 0.11761 0.18359 11.86213 0.77827 0.56187 0.44066 0.67767 0.76855 0.06019 + 0.11882 0.18590 11.98851 0.79054 0.57532 0.45528 0.69047 0.78076 0.06264 + 0.12003 0.18819 12.11075 0.80270 0.58867 0.46981 0.70316 0.79288 0.06516 + 0.12120 0.19044 12.21899 0.81435 0.60149 0.48376 0.71535 0.80449 0.06778 + 0.12230 0.19256 12.32128 0.82536 0.61361 0.49695 0.72686 0.81547 0.07026 + 0.12333 0.19456 12.40406 0.83538 0.62470 0.50903 0.73739 0.82548 0.07280 + 0.12435 0.19656 12.48703 0.84544 0.63581 0.52116 0.74794 0.83552 0.07536 + 0.06701 0.09221 0.67697 0.22145 0.00000 0.00000 0.10543 0.21798 0.01271 + 0.06997 0.09687 1.10573 0.23309 0.00000 0.00000 0.11780 0.22919 0.01315 + 0.07416 0.10355 1.74694 0.25175 0.00357 0.00000 0.13751 0.24726 0.01386 + 0.07705 0.10823 2.19491 0.26608 0.01600 0.00000 0.15255 0.26116 0.01442 + 0.07999 0.11303 2.65381 0.28168 0.03460 0.00000 0.16890 0.27634 0.01505 + 0.08245 0.11709 3.04954 0.29550 0.05001 0.00000 0.18333 0.28981 0.01563 + 0.08475 0.12092 3.42463 0.30893 0.06513 0.00000 0.19734 0.30290 0.01622 + 0.08712 0.12491 3.81831 0.32354 0.08146 0.00000 0.21256 0.31717 0.01689 + 0.08914 0.12832 4.15446 0.33637 0.09575 0.00000 0.22590 0.32971 0.01751 + 0.09105 0.13157 4.47330 0.34876 0.10953 0.00000 0.23879 0.34182 0.01813 + 0.09253 0.13411 4.72145 0.35870 0.12056 0.00000 0.24912 0.35156 0.01866 + 0.09560 0.13942 5.22242 0.37993 0.14406 0.00710 0.27116 0.37235 0.01983 + 0.09815 0.14387 5.61085 0.39820 0.16423 0.02653 0.29011 0.39026 0.02092 + 0.10092 0.14875 6.01828 0.41853 0.18664 0.05242 0.31119 0.41020 0.02222 + 0.10371 0.15372 6.42319 0.43944 0.20968 0.07779 0.33288 0.43072 0.02366 + 0.10617 0.15815 6.77079 0.45812 0.23026 0.10060 0.35226 0.44907 0.02506 + 0.10858 0.16252 7.10293 0.47668 0.25070 0.12320 0.37152 0.46731 0.02656 + 0.11054 0.16610 7.36400 0.49184 0.26740 0.14164 0.38725 0.48220 0.02787 + 0.11284 0.17035 7.66097 0.50988 0.28729 0.16358 0.40600 0.49994 0.02955 + 0.11483 0.17405 7.90809 0.52550 0.30454 0.18259 0.42224 0.51532 0.03112 + 0.11662 0.17739 8.12421 0.53956 0.32006 0.19970 0.43686 0.52915 0.03259 + 0.11882 0.18156 8.37613 0.55696 0.33931 0.22090 0.45498 0.54629 0.03460 + 0.12083 0.18540 8.59526 0.57287 0.35694 0.24033 0.47158 0.56197 0.03658 + 0.12268 0.18894 8.78747 0.58741 0.37307 0.25810 0.48675 0.57631 0.03850 + 0.12447 0.19242 8.96480 0.60155 0.38880 0.27542 0.50153 0.59026 0.04051 + 0.12619 0.19577 9.12249 0.61497 0.40375 0.29190 0.51557 0.60350 0.04258 + 0.12777 0.19889 9.26387 0.62737 0.41760 0.30718 0.52858 0.61575 0.04458 + 0.12923 0.20178 9.38236 0.63866 0.43025 0.32113 0.54043 0.62691 0.04659 + 0.13067 0.20465 9.49518 0.64975 0.44269 0.33488 0.55210 0.63787 0.04863 + 0.13206 0.20743 9.59468 0.66030 0.45458 0.34801 0.56322 0.64832 0.05074 + 0.13335 0.21004 9.68279 0.67008 0.46562 0.36022 0.57355 0.65800 0.05278 + 0.13454 0.21247 9.75730 0.67904 0.47576 0.37145 0.58302 0.66688 0.05480 + 0.13573 0.21489 9.82837 0.68789 0.48581 0.38257 0.59240 0.67566 0.05686 + 0.13687 0.21725 9.88838 0.69627 0.49537 0.39318 0.60131 0.68398 0.05900 + 0.13795 0.21948 9.94509 0.70419 0.50441 0.40321 0.60973 0.69184 0.06103 + 0.13895 0.22157 9.98731 0.71130 0.51258 0.41230 0.61733 0.69891 0.06310 + 0.13994 0.22365 10.02962 0.71843 0.52078 0.42143 0.62494 0.70601 0.06517 + 0.07786 0.10552 0.77580 0.21463 0.00000 0.00000 0.10180 0.21011 0.01228 + 0.08107 0.11078 1.17699 0.22557 0.00000 0.00000 0.11344 0.22056 0.01269 + 0.08558 0.11828 1.76761 0.24286 0.00331 0.00000 0.13173 0.23716 0.01335 + 0.08869 0.12352 2.17442 0.25599 0.01479 0.00000 0.14555 0.24981 0.01387 + 0.09183 0.12887 2.58623 0.27016 0.03188 0.00000 0.16044 0.26349 0.01445 + 0.09445 0.13338 2.93796 0.28261 0.04594 0.00000 0.17350 0.27555 0.01498 + 0.09690 0.13762 3.26870 0.29464 0.05966 0.00000 0.18609 0.28719 0.01552 + 0.09941 0.14203 3.61205 0.30763 0.07436 0.00000 0.19967 0.29979 0.01614 + 0.10154 0.14580 3.90291 0.31895 0.08715 0.00000 0.21150 0.31080 0.01671 + 0.10355 0.14937 4.17732 0.32986 0.09945 0.00000 0.22289 0.32139 0.01727 + 0.10511 0.15215 4.38902 0.33855 0.10924 0.00000 0.23197 0.32985 0.01775 + 0.10832 0.15796 4.81269 0.35702 0.12999 0.00628 0.25123 0.34783 0.01880 + 0.11098 0.16281 5.13620 0.37280 0.14768 0.02345 0.26769 0.36320 0.01978 + 0.11385 0.16811 5.47125 0.39023 0.16720 0.04621 0.28587 0.38020 0.02095 + 0.11673 0.17349 5.80034 0.40802 0.18715 0.06838 0.30444 0.39757 0.02224 + 0.11926 0.17826 6.07949 0.42380 0.20485 0.08819 0.32092 0.41298 0.02349 + 0.12173 0.18296 6.34316 0.43938 0.22233 0.10770 0.33720 0.42820 0.02481 + 0.12372 0.18679 6.54807 0.45202 0.23653 0.12355 0.35042 0.44056 0.02597 + 0.12606 0.19134 6.77802 0.46695 0.25334 0.14229 0.36606 0.45517 0.02745 + 0.12807 0.19527 6.96708 0.47981 0.26784 0.15845 0.37954 0.46775 0.02882 + 0.12986 0.19882 7.13097 0.49132 0.28084 0.17295 0.39163 0.47902 0.03011 + 0.13207 0.20322 7.31844 0.50546 0.29685 0.19080 0.40649 0.49287 0.03187 + 0.13408 0.20728 7.47887 0.51829 0.31143 0.20707 0.42001 0.50545 0.03359 + 0.13591 0.21100 7.61769 0.52995 0.32471 0.22189 0.43232 0.51689 0.03526 + 0.13769 0.21464 7.74340 0.54122 0.33758 0.23627 0.44423 0.52794 0.03700 + 0.13938 0.21814 7.85257 0.55182 0.34974 0.24987 0.45546 0.53835 0.03879 + 0.14094 0.22139 7.94924 0.56158 0.36098 0.26243 0.46583 0.54795 0.04051 + 0.14236 0.22439 8.02758 0.57038 0.37116 0.27384 0.47521 0.55660 0.04223 + 0.14377 0.22736 8.10112 0.57900 0.38115 0.28505 0.48441 0.56508 0.04399 + 0.14510 0.23023 8.16370 0.58713 0.39063 0.29570 0.49311 0.57309 0.04579 + 0.14635 0.23292 8.21784 0.59463 0.39941 0.30557 0.50116 0.58048 0.04754 + 0.14750 0.23541 8.26163 0.60144 0.40743 0.31461 0.50850 0.58720 0.04926 + 0.14864 0.23790 8.30251 0.60815 0.41535 0.32354 0.51574 0.59383 0.05102 + 0.14973 0.24031 8.33441 0.61444 0.42283 0.33200 0.52256 0.60004 0.05284 + 0.15076 0.24258 8.36456 0.62038 0.42991 0.34000 0.52900 0.60592 0.05456 + 0.15169 0.24470 8.38358 0.62563 0.43624 0.34720 0.53475 0.61112 0.05631 + 0.15264 0.24681 8.40260 0.63090 0.44259 0.35441 0.54050 0.61634 0.05807 + 0.09754 0.13087 0.91451 0.20524 0.00000 0.00000 0.09652 0.19848 0.01156 + 0.10109 0.13711 1.27129 0.21502 0.00000 0.00000 0.10698 0.20766 0.01193 + 0.10604 0.14595 1.78377 0.23015 0.00292 0.00000 0.12308 0.22195 0.01251 + 0.10942 0.15208 2.12884 0.24144 0.01299 0.00000 0.13506 0.23267 0.01297 + 0.11280 0.15830 2.47145 0.25346 0.02787 0.00000 0.14778 0.24411 0.01348 + 0.11562 0.16352 2.75959 0.26389 0.03996 0.00000 0.15881 0.25407 0.01395 + 0.11823 0.16840 3.02702 0.27386 0.05166 0.00000 0.16935 0.26360 0.01442 + 0.12089 0.17345 3.29968 0.28449 0.06404 0.00000 0.18058 0.27378 0.01495 + 0.12313 0.17773 3.52764 0.29368 0.07473 0.00000 0.19028 0.28258 0.01544 + 0.12524 0.18179 3.74077 0.30246 0.08495 0.00000 0.19956 0.29101 0.01592 + 0.12686 0.18494 3.90276 0.30939 0.09300 0.00000 0.20688 0.29767 0.01633 + 0.13020 0.19148 4.22206 0.32400 0.10995 0.00516 0.22230 0.31172 0.01722 + 0.13293 0.19690 4.45914 0.33632 0.12425 0.01921 0.23532 0.32358 0.01805 + 0.13585 0.20278 4.69906 0.34977 0.13986 0.03771 0.24955 0.33655 0.01903 + 0.13877 0.20872 4.92974 0.36332 0.15564 0.05553 0.26391 0.34963 0.02011 + 0.14130 0.21395 5.12107 0.37519 0.16950 0.07131 0.27651 0.36109 0.02114 + 0.14376 0.21908 5.29785 0.38677 0.18306 0.08672 0.28882 0.37228 0.02224 + 0.14573 0.22323 5.43218 0.39606 0.19397 0.09913 0.29872 0.38126 0.02318 + 0.14802 0.22812 5.57886 0.40690 0.20676 0.11367 0.31030 0.39174 0.02440 + 0.14997 0.23234 5.69646 0.41613 0.21769 0.12612 0.32018 0.40067 0.02551 + 0.15170 0.23612 5.79650 0.42433 0.22743 0.13722 0.32898 0.40861 0.02656 + 0.15381 0.24079 5.90621 0.43424 0.23929 0.15074 0.33965 0.41821 0.02797 + 0.15572 0.24505 5.99660 0.44312 0.24998 0.16296 0.34926 0.42682 0.02935 + 0.15744 0.24895 6.07222 0.45110 0.25965 0.17402 0.35792 0.43457 0.03069 + 0.15909 0.25274 6.13747 0.45871 0.26893 0.18466 0.36621 0.44196 0.03207 + 0.16065 0.25635 6.19051 0.46576 0.27760 0.19462 0.37393 0.44881 0.03349 + 0.16208 0.25970 6.23580 0.47221 0.28557 0.20379 0.38100 0.45508 0.03486 + 0.16336 0.26277 6.26862 0.47790 0.29270 0.21203 0.38731 0.46063 0.03621 + 0.16462 0.26580 6.29792 0.48344 0.29967 0.22008 0.39345 0.46602 0.03759 + 0.16582 0.26870 6.31943 0.48858 0.30620 0.22767 0.39919 0.47103 0.03900 + 0.16692 0.27141 6.33606 0.49327 0.31222 0.23466 0.40445 0.47561 0.04037 + 0.16792 0.27391 6.34634 0.49746 0.31766 0.24101 0.40919 0.47971 0.04171 + 0.16891 0.27639 6.35449 0.50155 0.32300 0.24726 0.41383 0.48371 0.04307 + 0.16985 0.27877 6.35642 0.50530 0.32799 0.25312 0.41813 0.48739 0.04448 + 0.17073 0.28103 6.35824 0.50884 0.33270 0.25866 0.42220 0.49086 0.04581 + 0.17152 0.28309 6.35312 0.51186 0.33684 0.26356 0.42573 0.49383 0.04716 + 0.17231 0.28517 6.34794 0.51489 0.34099 0.26848 0.42927 0.49681 0.04851 + 0.12346 0.16680 1.04454 0.19618 0.00000 0.00000 0.09098 0.18581 0.01070 + 0.12726 0.17414 1.35059 0.20458 0.00000 0.00000 0.10008 0.19350 0.01102 + 0.13249 0.18442 1.77820 0.21728 0.00250 0.00000 0.11379 0.20522 0.01153 + 0.13602 0.19149 2.05853 0.22657 0.01112 0.00000 0.12381 0.21384 0.01192 + 0.13952 0.19860 2.33055 0.23630 0.02373 0.00000 0.13429 0.22292 0.01236 + 0.14241 0.20453 2.55515 0.24464 0.03384 0.00000 0.14326 0.23071 0.01276 + 0.14507 0.21005 2.76036 0.25251 0.04352 0.00000 0.15174 0.23808 0.01315 + 0.14775 0.21571 2.96502 0.26077 0.05364 0.00000 0.16064 0.24584 0.01360 + 0.15000 0.22049 3.13334 0.26782 0.06228 0.00000 0.16825 0.25247 0.01401 + 0.15209 0.22499 3.28894 0.27451 0.07049 0.00000 0.17548 0.25878 0.01442 + 0.15369 0.22846 3.40496 0.27973 0.07689 0.00000 0.18111 0.26370 0.01475 + 0.15695 0.23563 3.62896 0.29060 0.09026 0.00411 0.19288 0.27397 0.01550 + 0.15959 0.24152 3.78872 0.29963 0.10138 0.01522 0.20268 0.28251 0.01618 + 0.16238 0.24786 3.94500 0.30934 0.11340 0.02976 0.21324 0.29171 0.01698 + 0.16513 0.25420 4.09064 0.31896 0.12538 0.04359 0.22374 0.30084 0.01785 + 0.16748 0.25974 4.20731 0.32724 0.13577 0.05570 0.23282 0.30870 0.01869 + 0.16974 0.26513 4.31132 0.33519 0.14583 0.06741 0.24158 0.31626 0.01956 + 0.17153 0.26946 4.38739 0.34147 0.15384 0.07674 0.24854 0.32223 0.02032 + 0.17357 0.27452 4.46645 0.34866 0.16310 0.08758 0.25655 0.32908 0.02128 + 0.17530 0.27884 4.52683 0.35469 0.17094 0.09676 0.26329 0.33482 0.02216 + 0.17682 0.28270 4.57623 0.35998 0.17788 0.10490 0.26925 0.33986 0.02299 + 0.17863 0.28741 4.62549 0.36623 0.18619 0.11468 0.27634 0.34582 0.02409 + 0.18024 0.29167 4.66228 0.37171 0.19360 0.12344 0.28261 0.35105 0.02517 + 0.18168 0.29553 4.69017 0.37656 0.20023 0.13130 0.28821 0.35569 0.02620 + 0.18304 0.29927 4.71050 0.38108 0.20652 0.13879 0.29348 0.36001 0.02727 + 0.18429 0.30278 4.72264 0.38516 0.21232 0.14573 0.29829 0.36392 0.02836 + 0.18543 0.30603 4.73083 0.38884 0.21761 0.15207 0.30266 0.36745 0.02941 + 0.18643 0.30896 4.73159 0.39198 0.22227 0.15770 0.30646 0.37047 0.03044 + 0.18740 0.31185 4.73000 0.39500 0.22679 0.16317 0.31013 0.37336 0.03149 + 0.18830 0.31458 4.72345 0.39770 0.23097 0.16827 0.31349 0.37597 0.03256 + 0.18912 0.31712 4.71480 0.40012 0.23478 0.17294 0.31653 0.37830 0.03359 + 0.18985 0.31943 4.70300 0.40220 0.23818 0.17713 0.31920 0.38032 0.03460 + 0.19056 0.32173 4.68977 0.40420 0.24150 0.18123 0.32180 0.38226 0.03563 + 0.19121 0.32390 4.67274 0.40594 0.24454 0.18503 0.32414 0.38395 0.03668 + 0.19183 0.32595 4.65664 0.40759 0.24741 0.18862 0.32634 0.38555 0.03768 + 0.19235 0.32780 4.63698 0.40887 0.24986 0.19173 0.32817 0.38681 0.03868 + 0.19287 0.32966 4.61722 0.41015 0.25232 0.19485 0.33000 0.38808 0.03968 + 0.16010 0.22296 1.16193 0.18637 0.00000 0.00000 0.08431 0.16966 0.00958 + 0.16388 0.23140 1.40633 0.19301 0.00000 0.00000 0.09176 0.17551 0.00985 + 0.16900 0.24308 1.73611 0.20276 0.00205 0.00000 0.10268 0.18417 0.01027 + 0.17239 0.25100 1.94472 0.20971 0.00904 0.00000 0.11049 0.19042 0.01060 + 0.17569 0.25887 2.14087 0.21685 0.01918 0.00000 0.11850 0.19687 0.01096 + 0.17838 0.26538 2.29884 0.22284 0.02717 0.00000 0.12525 0.20230 0.01128 + 0.18082 0.27138 2.44004 0.22841 0.03473 0.00000 0.13154 0.20736 0.01160 + 0.18324 0.27746 2.57645 0.23413 0.04251 0.00000 0.13801 0.21258 0.01196 + 0.18524 0.28256 2.68598 0.23893 0.04907 0.00000 0.14347 0.21697 0.01229 + 0.18709 0.28732 2.78550 0.24343 0.05525 0.00000 0.14861 0.22109 0.01261 + 0.18847 0.29097 2.85754 0.24687 0.06000 0.00000 0.15255 0.22425 0.01287 + 0.19125 0.29841 2.99181 0.25394 0.06983 0.00306 0.16069 0.23076 0.01346 + 0.19345 0.30445 3.08061 0.25967 0.07787 0.01130 0.16732 0.23605 0.01399 + 0.19571 0.31085 3.16184 0.26568 0.08643 0.02197 0.17435 0.24162 0.01461 + 0.19789 0.31717 3.23280 0.27146 0.09482 0.03196 0.18119 0.24699 0.01528 + 0.19970 0.32261 3.28530 0.27630 0.10198 0.04060 0.18697 0.25148 0.01592 + 0.20139 0.32784 3.32799 0.28082 0.10881 0.04884 0.19245 0.25568 0.01658 + 0.20269 0.33197 3.35590 0.28428 0.11416 0.05534 0.19670 0.25891 0.01715 + 0.20413 0.33674 3.38028 0.28810 0.12026 0.06277 0.20149 0.26248 0.01787 + 0.20531 0.34076 3.39527 0.29121 0.12534 0.06899 0.20544 0.26538 0.01853 + 0.20632 0.34431 3.40505 0.29387 0.12980 0.07447 0.20888 0.26787 0.01914 + 0.20747 0.34856 3.40834 0.29684 0.13502 0.08094 0.21283 0.27066 0.01995 + 0.20845 0.35234 3.40533 0.29932 0.13960 0.08666 0.21625 0.27301 0.02074 + 0.20928 0.35573 3.39846 0.30143 0.14365 0.09174 0.21922 0.27500 0.02149 + 0.21003 0.35894 3.38691 0.30328 0.14742 0.09651 0.22193 0.27676 0.02227 + 0.21068 0.36191 3.37091 0.30482 0.15082 0.10086 0.22432 0.27823 0.02305 + 0.21125 0.36462 3.35397 0.30616 0.15389 0.10482 0.22645 0.27951 0.02380 + 0.21170 0.36702 3.33390 0.30716 0.15653 0.10825 0.22820 0.28048 0.02454 + 0.21212 0.36935 3.31256 0.30807 0.15906 0.11158 0.22987 0.28136 0.02529 + 0.21247 0.37151 3.28879 0.30878 0.16134 0.11462 0.23131 0.28206 0.02605 + 0.21276 0.37348 3.26500 0.30934 0.16340 0.11738 0.23258 0.28263 0.02678 + 0.21299 0.37525 3.24056 0.30972 0.16518 0.11983 0.23363 0.28303 0.02749 + 0.21320 0.37698 3.21536 0.31005 0.16691 0.12220 0.23462 0.28337 0.02821 + 0.21335 0.37857 3.18844 0.31020 0.16844 0.12435 0.23543 0.28356 0.02894 + 0.21349 0.38007 3.16299 0.31034 0.16988 0.12639 0.23620 0.28373 0.02964 + 0.21355 0.38137 3.13664 0.31027 0.17105 0.12810 0.23674 0.28371 0.03033 + 0.21362 0.38267 3.11019 0.31020 0.17222 0.12981 0.23727 0.28370 0.03103 + 0.19082 0.27547 1.21697 0.17918 0.00000 0.00000 0.07901 0.15604 0.00870 + 0.19427 0.28439 1.41600 0.18443 0.00000 0.00000 0.08522 0.16052 0.00893 + 0.19884 0.29658 1.67697 0.19195 0.00173 0.00000 0.09414 0.16703 0.00930 + 0.20180 0.30474 1.83691 0.19721 0.00762 0.00000 0.10041 0.17164 0.00957 + 0.20464 0.31276 1.98305 0.20250 0.01608 0.00000 0.10675 0.17631 0.00988 + 0.20690 0.31933 2.09812 0.20687 0.02267 0.00000 0.11201 0.18019 0.01015 + 0.20892 0.32533 2.19885 0.21086 0.02885 0.00000 0.11686 0.18375 0.01042 + 0.21088 0.33135 2.29320 0.21487 0.03512 0.00000 0.12178 0.18735 0.01072 + 0.21246 0.33634 2.36711 0.21818 0.04036 0.00000 0.12587 0.19033 0.01100 + 0.21391 0.34099 2.43306 0.22125 0.04526 0.00000 0.12969 0.19310 0.01126 + 0.21496 0.34450 2.47926 0.22355 0.04900 0.00000 0.13258 0.19518 0.01148 + 0.21704 0.35160 2.56172 0.22820 0.05665 0.00242 0.13848 0.19941 0.01196 + 0.21861 0.35728 2.61070 0.23186 0.06283 0.00889 0.14321 0.20276 0.01240 + 0.22018 0.36321 2.65084 0.23559 0.06933 0.01722 0.14813 0.20619 0.01290 + 0.22161 0.36898 2.68191 0.23905 0.07562 0.02492 0.15281 0.20939 0.01345 + 0.22275 0.37386 2.70096 0.24183 0.08091 0.03150 0.15670 0.21197 0.01396 + 0.22375 0.37847 2.71242 0.24432 0.08589 0.03772 0.16030 0.21429 0.01449 + 0.22447 0.38207 2.71636 0.24614 0.08976 0.04258 0.16303 0.21600 0.01495 + 0.22521 0.38614 2.71428 0.24804 0.09409 0.04808 0.16604 0.21780 0.01552 + 0.22576 0.38951 2.70783 0.24948 0.09766 0.05264 0.16845 0.21918 0.01604 + 0.22620 0.39245 2.69923 0.25066 0.10076 0.05662 0.17052 0.22031 0.01653 + 0.22661 0.39588 2.68202 0.25182 0.10433 0.06127 0.17280 0.22145 0.01716 + 0.22690 0.39886 2.66186 0.25267 0.10740 0.06533 0.17470 0.22230 0.01778 + 0.22709 0.40148 2.64044 0.25330 0.11009 0.06890 0.17630 0.22295 0.01837 + 0.22720 0.40391 2.61607 0.25373 0.11255 0.07222 0.17770 0.22342 0.01897 + 0.22722 0.40608 2.58935 0.25394 0.11472 0.07521 0.17885 0.22370 0.01958 + 0.22720 0.40803 2.56309 0.25405 0.11666 0.07791 0.17985 0.22387 0.02016 + 0.22709 0.40968 2.53590 0.25395 0.11829 0.08022 0.18059 0.22387 0.02073 + 0.22696 0.41126 2.50804 0.25380 0.11983 0.08243 0.18127 0.22380 0.02130 + 0.22676 0.41267 2.47910 0.25349 0.12118 0.08443 0.18178 0.22361 0.02188 + 0.22654 0.41393 2.45103 0.25314 0.12238 0.08623 0.18220 0.22336 0.02244 + 0.22628 0.41501 2.42348 0.25269 0.12339 0.08780 0.18248 0.22302 0.02298 + 0.22600 0.41604 2.39552 0.25219 0.12436 0.08931 0.18272 0.22265 0.02353 + 0.22567 0.41693 2.36690 0.25158 0.12518 0.09066 0.18282 0.22217 0.02408 + 0.22536 0.41776 2.33985 0.25100 0.12595 0.09193 0.18293 0.22171 0.02461 + 0.22499 0.41841 2.31313 0.25031 0.12653 0.09296 0.18288 0.22115 0.02513 + 0.22462 0.41906 2.28632 0.24961 0.12711 0.09400 0.18284 0.22059 0.02566 + 0.23940 0.37090 1.23913 0.16730 0.00000 0.00000 0.07009 0.13223 0.00735 + 0.24167 0.37949 1.37436 0.17040 0.00000 0.00000 0.07452 0.13487 0.00753 + 0.24449 0.39092 1.54272 0.17463 0.00130 0.00000 0.08068 0.13854 0.00781 + 0.24617 0.39837 1.63951 0.17746 0.00571 0.00000 0.08489 0.14107 0.00802 + 0.24766 0.40551 1.72267 0.18019 0.01197 0.00000 0.08903 0.14354 0.00825 + 0.24875 0.41122 1.78502 0.18234 0.01675 0.00000 0.09239 0.14552 0.00846 + 0.24966 0.41634 1.83699 0.18423 0.02116 0.00000 0.09542 0.14727 0.00866 + 0.25042 0.42132 1.88200 0.18601 0.02555 0.00000 0.09840 0.14896 0.00889 + 0.25097 0.42535 1.91495 0.18740 0.02917 0.00000 0.10082 0.15030 0.00909 + 0.25142 0.42904 1.94279 0.18864 0.03252 0.00000 0.10305 0.15151 0.00929 + 0.25168 0.43176 1.96030 0.18951 0.03503 0.00000 0.10469 0.15237 0.00945 + 0.25209 0.43711 1.98638 0.19115 0.04010 0.00164 0.10796 0.15404 0.00980 + 0.25224 0.44120 1.99360 0.19231 0.04412 0.00601 0.11048 0.15527 0.01012 + 0.25223 0.44529 1.99198 0.19332 0.04825 0.01157 0.11301 0.15640 0.01048 + 0.25204 0.44907 1.98376 0.19406 0.05216 0.01661 0.11530 0.15731 0.01087 + 0.25171 0.45209 1.97092 0.19448 0.05538 0.02085 0.11710 0.15791 0.01123 + 0.25125 0.45480 1.95356 0.19467 0.05834 0.02480 0.11867 0.15832 0.01161 + 0.25077 0.45677 1.93613 0.19467 0.06059 0.02783 0.11979 0.15851 0.01192 + 0.25006 0.45883 1.91141 0.19445 0.06305 0.03119 0.12093 0.15856 0.01232 + 0.24935 0.46041 1.88734 0.19411 0.06503 0.03395 0.12176 0.15848 0.01268 + 0.24865 0.46170 1.86410 0.19371 0.06671 0.03632 0.12243 0.15832 0.01301 + 0.24764 0.46299 1.83168 0.19298 0.06859 0.03903 0.12304 0.15793 0.01345 + 0.24659 0.46395 1.79964 0.19215 0.07016 0.04136 0.12346 0.15743 0.01386 + 0.24556 0.46467 1.76876 0.19128 0.07149 0.04337 0.12373 0.15688 0.01426 + 0.24447 0.46519 1.73686 0.19029 0.07266 0.04520 0.12388 0.15623 0.01466 + 0.24332 0.46548 1.70473 0.18921 0.07366 0.04682 0.12388 0.15548 0.01507 + 0.24220 0.46566 1.67422 0.18813 0.07452 0.04825 0.12384 0.15474 0.01546 + 0.24109 0.46563 1.64477 0.18701 0.07519 0.04945 0.12367 0.15394 0.01583 + 0.23994 0.46552 1.61526 0.18586 0.07582 0.05058 0.12346 0.15311 0.01621 + 0.23877 0.46527 1.58595 0.18464 0.07633 0.05157 0.12317 0.15222 0.01659 + 0.23764 0.46495 1.55816 0.18345 0.07675 0.05245 0.12285 0.15135 0.01695 + 0.23653 0.46453 1.53178 0.18227 0.07708 0.05319 0.12248 0.15047 0.01730 + 0.23539 0.46406 1.50535 0.18107 0.07738 0.05389 0.12209 0.14958 0.01765 + 0.23423 0.46347 1.47923 0.17981 0.07759 0.05449 0.12163 0.14864 0.01801 + 0.23314 0.46291 1.45455 0.17863 0.07779 0.05506 0.12120 0.14775 0.01835 + 0.23204 0.46221 1.43117 0.17743 0.07788 0.05548 0.12070 0.14684 0.01869 + 0.23093 0.46152 1.40771 0.17622 0.07797 0.05591 0.12021 0.14592 0.01902 + 0.27500 0.45425 1.20634 0.15611 0.00000 0.00000 0.06230 0.11156 0.00631 + 0.27578 0.46137 1.29865 0.15759 0.00000 0.00000 0.06551 0.11308 0.00646 + 0.27644 0.47050 1.40733 0.15944 0.00102 0.00000 0.06984 0.11511 0.00669 + 0.27660 0.47620 1.46498 0.16059 0.00445 0.00000 0.07272 0.11644 0.00686 + 0.27652 0.48146 1.51037 0.16158 0.00929 0.00000 0.07548 0.11769 0.00704 + 0.27629 0.48551 1.54193 0.16227 0.01292 0.00000 0.07767 0.11862 0.00720 + 0.27595 0.48901 1.56609 0.16278 0.01624 0.00000 0.07959 0.11940 0.00736 + 0.27541 0.49224 1.58383 0.16315 0.01949 0.00000 0.08143 0.12009 0.00754 + 0.27484 0.49473 1.59466 0.16335 0.02213 0.00000 0.08288 0.12058 0.00770 + 0.27423 0.49693 1.60226 0.16347 0.02456 0.00000 0.08419 0.12099 0.00785 + 0.27367 0.49845 1.60495 0.16347 0.02636 0.00000 0.08512 0.12125 0.00797 + 0.27236 0.50125 1.60274 0.16334 0.02995 0.00119 0.08693 0.12166 0.00825 + 0.27108 0.50314 1.59011 0.16305 0.03274 0.00434 0.08825 0.12186 0.00849 + 0.26950 0.50477 1.56960 0.16252 0.03556 0.00830 0.08950 0.12192 0.00876 + 0.26772 0.50598 1.54446 0.16177 0.03818 0.01185 0.09054 0.12178 0.00906 + 0.26599 0.50669 1.51863 0.16091 0.04029 0.01479 0.09127 0.12150 0.00933 + 0.26415 0.50705 1.49025 0.15990 0.04220 0.01748 0.09184 0.12109 0.00961 + 0.26255 0.50709 1.46518 0.15895 0.04361 0.01953 0.09217 0.12065 0.00985 + 0.26052 0.50682 1.43312 0.15768 0.04512 0.02177 0.09241 0.11999 0.01014 + 0.25867 0.50635 1.40390 0.15646 0.04631 0.02358 0.09251 0.11933 0.01040 + 0.25695 0.50578 1.37674 0.15529 0.04731 0.02512 0.09254 0.11867 0.01065 + 0.25467 0.50472 1.34122 0.15369 0.04838 0.02685 0.09241 0.11772 0.01096 + 0.25247 0.50349 1.30752 0.15210 0.04923 0.02830 0.09217 0.11676 0.01127 + 0.25039 0.50219 1.27593 0.15057 0.04994 0.02955 0.09189 0.11580 0.01155 + 0.24826 0.50071 1.24427 0.14897 0.05054 0.03066 0.09152 0.11479 0.01185 + 0.24613 0.49906 1.21334 0.14735 0.05101 0.03162 0.09107 0.11374 0.01214 + 0.24411 0.49742 1.18435 0.14581 0.05140 0.03246 0.09061 0.11273 0.01241 + 0.24217 0.49570 1.15717 0.14429 0.05168 0.03313 0.09011 0.11172 0.01268 + 0.24021 0.49391 1.13018 0.14276 0.05192 0.03377 0.08958 0.11070 0.01295 + 0.23825 0.49203 1.10393 0.14122 0.05208 0.03431 0.08900 0.10966 0.01322 + 0.23639 0.49017 1.07929 0.13975 0.05221 0.03477 0.08844 0.10866 0.01347 + 0.23460 0.48832 1.05629 0.13833 0.05227 0.03515 0.08786 0.10769 0.01372 + 0.23280 0.48642 1.03338 0.13690 0.05231 0.03551 0.08727 0.10671 0.01397 + 0.23100 0.48443 1.01116 0.13546 0.05230 0.03579 0.08665 0.10571 0.01422 + 0.22930 0.48255 0.99016 0.13410 0.05229 0.03606 0.08606 0.10477 0.01446 + 0.22764 0.48062 0.97071 0.13278 0.05222 0.03624 0.08546 0.10384 0.01469 + 0.22598 0.47868 0.95119 0.13145 0.05215 0.03642 0.08485 0.10292 0.01492 + 0.30052 0.52593 1.15013 0.14456 0.00000 0.00000 0.05525 0.09374 0.00548 + 0.29969 0.53084 1.21188 0.14480 0.00000 0.00000 0.05757 0.09459 0.00560 + 0.29808 0.53669 1.27943 0.14489 0.00082 0.00000 0.06061 0.09565 0.00579 + 0.29668 0.54003 1.31096 0.14481 0.00356 0.00000 0.06258 0.09629 0.00593 + 0.29502 0.54282 1.33183 0.14458 0.00739 0.00000 0.06442 0.09684 0.00608 + 0.29346 0.54475 1.34386 0.14425 0.01023 0.00000 0.06583 0.09719 0.00621 + 0.29188 0.54624 1.35072 0.14384 0.01279 0.00000 0.06703 0.09744 0.00634 + 0.29007 0.54733 1.35200 0.14326 0.01527 0.00000 0.06814 0.09758 0.00648 + 0.28842 0.54798 1.34977 0.14268 0.01727 0.00000 0.06898 0.09763 0.00661 + 0.28680 0.54842 1.34562 0.14207 0.01909 0.00000 0.06971 0.09762 0.00673 + 0.28546 0.54854 1.33994 0.14153 0.02043 0.00000 0.07021 0.09756 0.00683 + 0.28253 0.54842 1.32226 0.14028 0.02306 0.00089 0.07113 0.09734 0.00704 + 0.27991 0.54785 1.29948 0.13911 0.02507 0.00324 0.07174 0.09703 0.00723 + 0.27691 0.54678 1.26992 0.13767 0.02708 0.00618 0.07225 0.09657 0.00745 + 0.27369 0.54522 1.23723 0.13605 0.02891 0.00878 0.07257 0.09595 0.00768 + 0.27071 0.54346 1.20613 0.13447 0.03035 0.01090 0.07272 0.09528 0.00789 + 0.26766 0.54137 1.17376 0.13280 0.03163 0.01283 0.07273 0.09452 0.00810 + 0.26509 0.53942 1.14634 0.13135 0.03257 0.01427 0.07264 0.09382 0.00829 + 0.26193 0.53678 1.11262 0.12953 0.03353 0.01583 0.07243 0.09289 0.00851 + 0.25911 0.53424 1.08274 0.12787 0.03428 0.01707 0.07215 0.09202 0.00871 + 0.25652 0.53182 1.05546 0.12634 0.03489 0.01813 0.07186 0.09119 0.00890 + 0.25319 0.52845 1.02086 0.12433 0.03551 0.01928 0.07137 0.09007 0.00914 + 0.25005 0.52511 0.98872 0.12241 0.03599 0.02024 0.07085 0.08897 0.00937 + 0.24711 0.52186 0.95905 0.12059 0.03637 0.02105 0.07031 0.08792 0.00959 + 0.24415 0.51848 0.92984 0.11876 0.03667 0.02176 0.06972 0.08683 0.00980 + 0.24125 0.51500 0.90180 0.11695 0.03688 0.02235 0.06909 0.08574 0.01002 + 0.23852 0.51168 0.87572 0.11523 0.03705 0.02287 0.06848 0.08470 0.01023 + 0.23592 0.50840 0.85170 0.11360 0.03713 0.02327 0.06786 0.08369 0.01043 + 0.23333 0.50508 0.82801 0.11197 0.03719 0.02364 0.06722 0.08268 0.01063 + 0.23078 0.50171 0.80525 0.11035 0.03720 0.02394 0.06656 0.08167 0.01083 + 0.22836 0.49848 0.78405 0.10882 0.03719 0.02420 0.06593 0.08070 0.01101 + 0.22607 0.49535 0.76446 0.10737 0.03714 0.02439 0.06531 0.07978 0.01120 + 0.22377 0.49218 0.74504 0.10592 0.03708 0.02458 0.06468 0.07885 0.01138 + 0.22149 0.48896 0.72644 0.10448 0.03699 0.02471 0.06403 0.07792 0.01156 + 0.21935 0.48592 0.70886 0.10312 0.03689 0.02483 0.06342 0.07704 0.01174 + 0.21729 0.48293 0.69282 0.10183 0.03677 0.02489 0.06282 0.07620 0.01191 + 0.21523 0.47992 0.67673 0.10053 0.03664 0.02496 0.06221 0.07535 0.01208 + 0.32112 0.59981 1.06702 0.12935 0.00000 0.00000 0.04728 0.07529 0.00464 + 0.31832 0.60134 1.10153 0.12846 0.00000 0.00000 0.04881 0.07568 0.00474 + 0.31395 0.60230 1.13355 0.12699 0.00063 0.00000 0.05074 0.07607 0.00488 + 0.31067 0.60221 1.14323 0.12587 0.00274 0.00000 0.05193 0.07626 0.00499 + 0.30714 0.60149 1.14420 0.12461 0.00566 0.00000 0.05299 0.07634 0.00511 + 0.30404 0.60046 1.14077 0.12345 0.00781 0.00000 0.05376 0.07632 0.00521 + 0.30103 0.59915 1.13426 0.12229 0.00972 0.00000 0.05439 0.07623 0.00531 + 0.29777 0.59734 1.12323 0.12098 0.01153 0.00000 0.05491 0.07603 0.00542 + 0.29491 0.59552 1.11151 0.11980 0.01298 0.00000 0.05528 0.07580 0.00552 + 0.29215 0.59362 1.09899 0.11864 0.01429 0.00000 0.05557 0.07555 0.00561 + 0.28994 0.59192 1.08758 0.11770 0.01524 0.00000 0.05574 0.07530 0.00569 + 0.28523 0.58801 1.05977 0.11565 0.01708 0.00064 0.05600 0.07472 0.00585 + 0.28118 0.58429 1.03107 0.11386 0.01847 0.00233 0.05609 0.07414 0.00600 + 0.27664 0.57981 0.99689 0.11181 0.01983 0.00442 0.05607 0.07341 0.00616 + 0.27192 0.57481 0.96095 0.10963 0.02104 0.00623 0.05590 0.07256 0.00633 + 0.26764 0.57002 0.92818 0.10761 0.02197 0.00770 0.05565 0.07171 0.00649 + 0.26334 0.56498 0.89519 0.10556 0.02278 0.00901 0.05531 0.07081 0.00666 + 0.25978 0.56064 0.86802 0.10384 0.02335 0.00998 0.05496 0.07002 0.00679 + 0.25548 0.55519 0.83549 0.10174 0.02392 0.01102 0.05447 0.06902 0.00696 + 0.25170 0.55025 0.80725 0.09988 0.02435 0.01183 0.05398 0.06810 0.00711 + 0.24827 0.54567 0.78181 0.09819 0.02468 0.01251 0.05351 0.06725 0.00724 + 0.24392 0.53967 0.75034 0.09602 0.02500 0.01324 0.05285 0.06613 0.00742 + 0.23987 0.53393 0.72160 0.09400 0.02523 0.01383 0.05219 0.06506 0.00759 + 0.23612 0.52850 0.69539 0.09213 0.02539 0.01432 0.05154 0.06405 0.00774 + 0.23240 0.52300 0.66997 0.09026 0.02550 0.01474 0.05087 0.06302 0.00790 + 0.22878 0.51754 0.64595 0.08845 0.02555 0.01508 0.05019 0.06201 0.00806 + 0.22540 0.51237 0.62376 0.08675 0.02558 0.01537 0.04953 0.06105 0.00821 + 0.22222 0.50742 0.60365 0.08516 0.02556 0.01558 0.04890 0.06014 0.00835 + 0.21907 0.50245 0.58392 0.08358 0.02552 0.01578 0.04825 0.05923 0.00849 + 0.21599 0.49752 0.56519 0.08204 0.02545 0.01592 0.04761 0.05833 0.00863 + 0.21310 0.49283 0.54786 0.08060 0.02537 0.01604 0.04699 0.05748 0.00877 + 0.21038 0.48837 0.53201 0.07924 0.02527 0.01612 0.04640 0.05668 0.00890 + 0.20766 0.48388 0.51636 0.07789 0.02516 0.01620 0.04580 0.05587 0.00903 + 0.20499 0.47941 0.50154 0.07657 0.02504 0.01623 0.04520 0.05507 0.00916 + 0.20247 0.47518 0.48753 0.07532 0.02491 0.01627 0.04464 0.05432 0.00928 + 0.20010 0.47112 0.47495 0.07415 0.02477 0.01627 0.04410 0.05361 0.00940 + 0.19771 0.46704 0.46232 0.07298 0.02463 0.01627 0.04355 0.05289 0.00952 + 0.33159 0.65708 0.98033 0.11352 0.00000 0.00000 0.04017 0.06075 0.00395 + 0.32695 0.65485 0.99558 0.11189 0.00000 0.00000 0.04115 0.06091 0.00402 + 0.32007 0.65052 1.00332 0.10945 0.00050 0.00000 0.04232 0.06097 0.00414 + 0.31510 0.64678 0.99863 0.10769 0.00214 0.00000 0.04300 0.06092 0.00423 + 0.30992 0.64239 0.98697 0.10582 0.00441 0.00000 0.04356 0.06078 0.00432 + 0.30547 0.63829 0.97403 0.10419 0.00605 0.00000 0.04393 0.06058 0.00441 + 0.30122 0.63413 0.95953 0.10262 0.00750 0.00000 0.04420 0.06032 0.00449 + 0.29672 0.62940 0.94150 0.10092 0.00886 0.00000 0.04437 0.05998 0.00457 + 0.29284 0.62511 0.92460 0.09944 0.00994 0.00000 0.04445 0.05964 0.00465 + 0.28913 0.62089 0.90766 0.09801 0.01090 0.00000 0.04449 0.05928 0.00472 + 0.28619 0.61741 0.89340 0.09687 0.01158 0.00000 0.04446 0.05896 0.00478 + 0.28003 0.60983 0.86102 0.09446 0.01291 0.00048 0.04435 0.05824 0.00491 + 0.27481 0.60311 0.83034 0.09241 0.01389 0.00171 0.04416 0.05757 0.00502 + 0.26905 0.59541 0.79529 0.09013 0.01483 0.00323 0.04386 0.05677 0.00515 + 0.26314 0.58720 0.75945 0.08776 0.01565 0.00453 0.04345 0.05587 0.00528 + 0.25786 0.57964 0.72758 0.08563 0.01626 0.00557 0.04301 0.05501 0.00540 + 0.25261 0.57191 0.69616 0.08349 0.01678 0.00649 0.04251 0.05410 0.00553 + 0.24831 0.56544 0.67073 0.08173 0.01714 0.00716 0.04206 0.05333 0.00563 + 0.24318 0.55750 0.64084 0.07962 0.01748 0.00786 0.04146 0.05237 0.00575 + 0.23870 0.55045 0.61526 0.07778 0.01773 0.00841 0.04091 0.05151 0.00587 + 0.23466 0.54400 0.59243 0.07612 0.01791 0.00886 0.04039 0.05071 0.00597 + 0.22960 0.53574 0.56467 0.07404 0.01807 0.00933 0.03969 0.04968 0.00610 + 0.22493 0.52796 0.53963 0.07211 0.01816 0.00971 0.03901 0.04871 0.00623 + 0.22063 0.52071 0.51702 0.07034 0.01822 0.01001 0.03837 0.04780 0.00634 + 0.21639 0.51346 0.49533 0.06860 0.01823 0.01027 0.03771 0.04688 0.00646 + 0.21231 0.50636 0.47507 0.06693 0.01821 0.01047 0.03706 0.04599 0.00658 + 0.20851 0.49969 0.45646 0.06538 0.01818 0.01063 0.03644 0.04515 0.00669 + 0.20498 0.49340 0.43980 0.06394 0.01811 0.01074 0.03585 0.04436 0.00679 + 0.20148 0.48712 0.42352 0.06251 0.01804 0.01084 0.03526 0.04357 0.00689 + 0.19809 0.48096 0.40823 0.06114 0.01794 0.01091 0.03467 0.04280 0.00700 + 0.19490 0.47514 0.39413 0.05986 0.01784 0.01096 0.03412 0.04208 0.00710 + 0.19194 0.46965 0.38136 0.05866 0.01774 0.01099 0.03359 0.04140 0.00719 + 0.18898 0.46415 0.36877 0.05748 0.01762 0.01101 0.03307 0.04071 0.00728 + 0.18610 0.45874 0.35698 0.05633 0.01750 0.01100 0.03255 0.04005 0.00738 + 0.18337 0.45362 0.34582 0.05524 0.01738 0.01100 0.03206 0.03941 0.00747 + 0.18083 0.44876 0.33592 0.05424 0.01725 0.01098 0.03159 0.03882 0.00755 + 0.17828 0.44389 0.32600 0.05323 0.01712 0.01095 0.03112 0.03823 0.00764 + 0.33395 0.69888 0.89512 0.09759 0.00000 0.00000 0.03385 0.04955 0.00337 + 0.32769 0.69279 0.89651 0.09554 0.00000 0.00000 0.03446 0.04958 0.00343 + 0.31863 0.68311 0.88736 0.09258 0.00039 0.00000 0.03512 0.04945 0.00353 + 0.31223 0.67575 0.87309 0.09050 0.00169 0.00000 0.03546 0.04928 0.00360 + 0.30565 0.66775 0.85339 0.08835 0.00347 0.00000 0.03570 0.04902 0.00367 + 0.30007 0.66067 0.83462 0.08651 0.00474 0.00000 0.03582 0.04873 0.00374 + 0.29480 0.65377 0.81543 0.08477 0.00585 0.00000 0.03586 0.04840 0.00380 + 0.28929 0.64625 0.79356 0.08292 0.00689 0.00000 0.03582 0.04799 0.00387 + 0.28459 0.63964 0.77400 0.08134 0.00769 0.00000 0.03574 0.04760 0.00393 + 0.28011 0.63325 0.75493 0.07983 0.00841 0.00000 0.03562 0.04720 0.00399 + 0.27661 0.62811 0.73947 0.07865 0.00891 0.00000 0.03550 0.04686 0.00404 + 0.26931 0.61716 0.70560 0.07617 0.00988 0.00036 0.03518 0.04611 0.00414 + 0.26320 0.60772 0.67502 0.07410 0.01058 0.00127 0.03485 0.04542 0.00423 + 0.25653 0.59713 0.64100 0.07183 0.01124 0.00240 0.03442 0.04462 0.00433 + 0.24975 0.58610 0.60690 0.06951 0.01181 0.00335 0.03390 0.04374 0.00443 + 0.24375 0.57611 0.57711 0.06744 0.01222 0.00409 0.03339 0.04292 0.00452 + 0.23783 0.56607 0.54818 0.06541 0.01256 0.00475 0.03284 0.04207 0.00462 + 0.23301 0.55776 0.52508 0.06375 0.01278 0.00522 0.03236 0.04135 0.00470 + 0.22731 0.54773 0.49830 0.06179 0.01299 0.00571 0.03176 0.04046 0.00479 + 0.22237 0.53892 0.47563 0.06009 0.01313 0.00608 0.03121 0.03968 0.00488 + 0.21793 0.53092 0.45555 0.05856 0.01322 0.00638 0.03069 0.03896 0.00496 + 0.21242 0.52082 0.43146 0.05668 0.01329 0.00670 0.03003 0.03804 0.00506 + 0.20737 0.51141 0.40997 0.05495 0.01332 0.00694 0.02939 0.03718 0.00515 + 0.20274 0.50270 0.39070 0.05338 0.01332 0.00713 0.02880 0.03637 0.00524 + 0.19820 0.49408 0.37238 0.05184 0.01329 0.00729 0.02820 0.03558 0.00533 + 0.19387 0.48571 0.35544 0.05038 0.01324 0.00740 0.02761 0.03480 0.00542 + 0.18984 0.47790 0.33994 0.04902 0.01318 0.00749 0.02706 0.03408 0.00550 + 0.18612 0.47059 0.32622 0.04778 0.01310 0.00755 0.02654 0.03340 0.00558 + 0.18245 0.46334 0.31286 0.04655 0.01302 0.00760 0.02602 0.03273 0.00565 + 0.17891 0.45627 0.30041 0.04538 0.01292 0.00762 0.02552 0.03208 0.00573 + 0.17560 0.44962 0.28898 0.04429 0.01282 0.00764 0.02504 0.03146 0.00580 + 0.17253 0.44339 0.27869 0.04328 0.01272 0.00764 0.02459 0.03089 0.00587 + 0.16947 0.43717 0.26859 0.04228 0.01262 0.00763 0.02414 0.03032 0.00594 + 0.16651 0.43109 0.25919 0.04132 0.01251 0.00761 0.02370 0.02976 0.00601 + 0.16372 0.42534 0.25031 0.04041 0.01240 0.00759 0.02329 0.02923 0.00608 + 0.16113 0.41994 0.24250 0.03958 0.01229 0.00756 0.02290 0.02874 0.00614 + 0.15853 0.41453 0.23468 0.03874 0.01219 0.00753 0.02251 0.02825 0.00620 + 0.32983 0.72644 0.81353 0.08212 0.00000 0.00000 0.02830 0.04103 0.00288 + 0.32220 0.71659 0.80487 0.07992 0.00000 0.00000 0.02865 0.04096 0.00293 + 0.31132 0.70177 0.78398 0.07680 0.00031 0.00000 0.02897 0.04071 0.00301 + 0.30375 0.69096 0.76341 0.07463 0.00135 0.00000 0.02909 0.04045 0.00307 + 0.29605 0.67958 0.73871 0.07243 0.00275 0.00000 0.02913 0.04012 0.00313 + 0.28957 0.66973 0.71653 0.07057 0.00374 0.00000 0.02909 0.03978 0.00318 + 0.28351 0.66030 0.69475 0.06883 0.00460 0.00000 0.02900 0.03941 0.00323 + 0.27723 0.65025 0.67105 0.06701 0.00539 0.00000 0.02884 0.03897 0.00329 + 0.27190 0.64155 0.65040 0.06547 0.00600 0.00000 0.02866 0.03856 0.00333 + 0.26686 0.63321 0.63059 0.06401 0.00654 0.00000 0.02847 0.03815 0.00338 + 0.26294 0.62660 0.61492 0.06287 0.00692 0.00000 0.02829 0.03780 0.00342 + 0.25481 0.61268 0.58135 0.06052 0.00763 0.00027 0.02788 0.03705 0.00350 + 0.24807 0.60087 0.55203 0.05857 0.00814 0.00096 0.02749 0.03638 0.00357 + 0.24076 0.58781 0.52004 0.05646 0.00861 0.00179 0.02701 0.03560 0.00365 + 0.23340 0.57439 0.48846 0.05433 0.00900 0.00250 0.02647 0.03477 0.00373 + 0.22692 0.56237 0.46126 0.05245 0.00928 0.00304 0.02595 0.03400 0.00380 + 0.22058 0.55042 0.43516 0.05062 0.00950 0.00351 0.02541 0.03321 0.00387 + 0.21545 0.54063 0.41455 0.04914 0.00964 0.00385 0.02495 0.03255 0.00394 + 0.20941 0.52892 0.39093 0.04740 0.00976 0.00419 0.02438 0.03175 0.00401 + 0.20422 0.51872 0.37111 0.04591 0.00984 0.00444 0.02386 0.03104 0.00408 + 0.19956 0.50950 0.35367 0.04458 0.00988 0.00465 0.02339 0.03040 0.00414 + 0.19382 0.49798 0.33299 0.04295 0.00990 0.00486 0.02279 0.02958 0.00421 + 0.18859 0.48734 0.31470 0.04147 0.00989 0.00502 0.02223 0.02882 0.00429 + 0.18381 0.47754 0.29841 0.04012 0.00987 0.00514 0.02170 0.02812 0.00435 + 0.17916 0.46790 0.28305 0.03881 0.00982 0.00523 0.02118 0.02743 0.00442 + 0.17473 0.45863 0.26896 0.03758 0.00976 0.00530 0.02067 0.02676 0.00449 + 0.17062 0.44999 0.25613 0.03644 0.00969 0.00535 0.02019 0.02614 0.00455 + 0.16686 0.44198 0.24487 0.03541 0.00962 0.00538 0.01975 0.02556 0.00461 + 0.16316 0.43405 0.23394 0.03439 0.00954 0.00540 0.01931 0.02498 0.00467 + 0.15960 0.42637 0.22382 0.03342 0.00945 0.00540 0.01888 0.02443 0.00472 + 0.15628 0.41917 0.21457 0.03252 0.00936 0.00540 0.01848 0.02391 0.00478 + 0.15321 0.41246 0.20630 0.03170 0.00928 0.00538 0.01811 0.02343 0.00483 + 0.15017 0.40577 0.19819 0.03088 0.00919 0.00537 0.01773 0.02295 0.00488 + 0.14724 0.39928 0.19071 0.03010 0.00909 0.00534 0.01737 0.02248 0.00493 + 0.14447 0.39314 0.18363 0.02936 0.00901 0.00532 0.01703 0.02204 0.00498 + 0.14192 0.38743 0.17748 0.02869 0.00892 0.00528 0.01671 0.02163 0.00503 + 0.13936 0.38169 0.17130 0.02802 0.00883 0.00525 0.01639 0.02123 0.00508 + 0.32055 0.74105 0.73643 0.06763 0.00000 0.00000 0.02346 0.03453 0.00246 + 0.31182 0.72767 0.72055 0.06546 0.00000 0.00000 0.02364 0.03438 0.00250 + 0.29952 0.70809 0.69163 0.06243 0.00025 0.00000 0.02373 0.03402 0.00256 + 0.29104 0.69414 0.66706 0.06035 0.00107 0.00000 0.02372 0.03370 0.00261 + 0.28249 0.67970 0.63948 0.05826 0.00218 0.00000 0.02363 0.03331 0.00266 + 0.27536 0.66737 0.61553 0.05651 0.00296 0.00000 0.02350 0.03293 0.00270 + 0.26871 0.65570 0.59260 0.05488 0.00363 0.00000 0.02334 0.03253 0.00275 + 0.26188 0.64344 0.56836 0.05321 0.00424 0.00000 0.02312 0.03207 0.00279 + 0.25611 0.63293 0.54763 0.05179 0.00470 0.00000 0.02290 0.03165 0.00283 + 0.25068 0.62292 0.52797 0.05046 0.00511 0.00000 0.02267 0.03123 0.00287 + 0.24648 0.61506 0.51268 0.04943 0.00539 0.00000 0.02247 0.03089 0.00290 + 0.23781 0.59863 0.48048 0.04731 0.00592 0.00020 0.02203 0.03015 0.00296 + 0.23067 0.58486 0.45304 0.04558 0.00629 0.00072 0.02163 0.02950 0.00301 + 0.22299 0.56978 0.42357 0.04371 0.00663 0.00135 0.02115 0.02876 0.00308 + 0.21529 0.55443 0.39485 0.04184 0.00691 0.00187 0.02063 0.02798 0.00314 + 0.20856 0.54081 0.37039 0.04022 0.00710 0.00227 0.02014 0.02726 0.00320 + 0.20201 0.52736 0.34718 0.03864 0.00724 0.00261 0.01964 0.02654 0.00326 + 0.19674 0.51643 0.32902 0.03737 0.00733 0.00285 0.01922 0.02594 0.00330 + 0.19057 0.50345 0.30842 0.03589 0.00740 0.00309 0.01870 0.02521 0.00336 + 0.18528 0.49222 0.29127 0.03463 0.00743 0.00327 0.01825 0.02458 0.00341 + 0.18055 0.48212 0.27625 0.03351 0.00745 0.00342 0.01783 0.02400 0.00346 + 0.17477 0.46958 0.25865 0.03215 0.00744 0.00356 0.01731 0.02328 0.00352 + 0.16952 0.45808 0.24319 0.03092 0.00742 0.00366 0.01682 0.02261 0.00358 + 0.16474 0.44754 0.22951 0.02981 0.00738 0.00373 0.01637 0.02200 0.00363 + 0.16010 0.43722 0.21670 0.02874 0.00733 0.00379 0.01592 0.02140 0.00368 + 0.15572 0.42736 0.20504 0.02773 0.00727 0.00383 0.01549 0.02082 0.00373 + 0.15166 0.41820 0.19445 0.02680 0.00721 0.00385 0.01509 0.02028 0.00378 + 0.14797 0.40976 0.18524 0.02597 0.00714 0.00386 0.01472 0.01979 0.00382 + 0.14433 0.40142 0.17632 0.02515 0.00707 0.00387 0.01435 0.01930 0.00387 + 0.14085 0.39339 0.16813 0.02437 0.00700 0.00386 0.01400 0.01882 0.00391 + 0.13762 0.38589 0.16066 0.02365 0.00692 0.00385 0.01367 0.01838 0.00395 + 0.13464 0.37892 0.15402 0.02299 0.00685 0.00383 0.01336 0.01798 0.00399 + 0.13169 0.37200 0.14752 0.02234 0.00678 0.00381 0.01306 0.01757 0.00403 + 0.12886 0.36531 0.14156 0.02173 0.00670 0.00378 0.01276 0.01718 0.00407 + 0.12618 0.35899 0.13593 0.02114 0.00663 0.00376 0.01249 0.01681 0.00410 + 0.12374 0.35314 0.13107 0.02062 0.00656 0.00373 0.01223 0.01647 0.00414 + 0.12128 0.34727 0.12620 0.02009 0.00648 0.00370 0.01197 0.01613 0.00417 + 0.30725 0.74403 0.66412 0.05449 0.00000 0.00000 0.01928 0.02950 0.00210 + 0.29769 0.72746 0.64318 0.05249 0.00000 0.00000 0.01934 0.02926 0.00213 + 0.28434 0.70362 0.60899 0.04971 0.00020 0.00000 0.01930 0.02880 0.00218 + 0.27522 0.68690 0.58210 0.04783 0.00086 0.00000 0.01920 0.02842 0.00222 + 0.26609 0.66981 0.55314 0.04596 0.00174 0.00000 0.01905 0.02798 0.00226 + 0.25850 0.65536 0.52856 0.04440 0.00235 0.00000 0.01887 0.02756 0.00230 + 0.25148 0.64179 0.50545 0.04295 0.00287 0.00000 0.01868 0.02714 0.00233 + 0.24430 0.62768 0.48154 0.04148 0.00334 0.00000 0.01843 0.02667 0.00237 + 0.23827 0.61566 0.46138 0.04025 0.00370 0.00000 0.01820 0.02625 0.00240 + 0.23261 0.60427 0.44243 0.03908 0.00401 0.00000 0.01797 0.02583 0.00243 + 0.22825 0.59540 0.42790 0.03819 0.00422 0.00000 0.01777 0.02549 0.00245 + 0.21930 0.57696 0.39768 0.03637 0.00461 0.00015 0.01734 0.02477 0.00250 + 0.21198 0.56164 0.37244 0.03489 0.00489 0.00055 0.01695 0.02415 0.00255 + 0.20413 0.54500 0.34569 0.03331 0.00513 0.00102 0.01650 0.02344 0.00260 + 0.19632 0.52818 0.31991 0.03173 0.00532 0.00141 0.01603 0.02271 0.00265 + 0.18953 0.51338 0.29820 0.03037 0.00545 0.00170 0.01559 0.02205 0.00269 + 0.18294 0.49885 0.27777 0.02906 0.00555 0.00195 0.01514 0.02138 0.00274 + 0.17767 0.48711 0.26192 0.02801 0.00560 0.00213 0.01477 0.02084 0.00278 + 0.17153 0.47326 0.24411 0.02680 0.00564 0.00230 0.01432 0.02018 0.00282 + 0.16629 0.46134 0.22938 0.02577 0.00565 0.00242 0.01392 0.01961 0.00286 + 0.16162 0.45065 0.21656 0.02485 0.00566 0.00252 0.01357 0.01910 0.00290 + 0.15594 0.43748 0.20167 0.02375 0.00564 0.00261 0.01312 0.01846 0.00294 + 0.15079 0.42546 0.18868 0.02276 0.00560 0.00268 0.01271 0.01788 0.00299 + 0.14613 0.41448 0.17725 0.02187 0.00556 0.00273 0.01233 0.01734 0.00303 + 0.14163 0.40380 0.16661 0.02101 0.00552 0.00276 0.01195 0.01681 0.00307 + 0.13739 0.39364 0.15700 0.02021 0.00546 0.00278 0.01160 0.01631 0.00310 + 0.13347 0.38422 0.14831 0.01948 0.00541 0.00279 0.01127 0.01585 0.00314 + 0.12992 0.37559 0.14080 0.01882 0.00535 0.00279 0.01096 0.01543 0.00318 + 0.12643 0.36709 0.13355 0.01817 0.00529 0.00278 0.01066 0.01501 0.00321 + 0.12311 0.35893 0.12693 0.01757 0.00523 0.00277 0.01038 0.01461 0.00324 + 0.12002 0.35133 0.12091 0.01700 0.00517 0.00276 0.01011 0.01423 0.00327 + 0.11719 0.34430 0.11559 0.01649 0.00511 0.00274 0.00986 0.01389 0.00330 + 0.11439 0.33733 0.11040 0.01599 0.00505 0.00272 0.00962 0.01355 0.00333 + 0.11172 0.33062 0.10566 0.01551 0.00499 0.00270 0.00938 0.01322 0.00336 + 0.10919 0.32428 0.10119 0.01506 0.00493 0.00267 0.00916 0.01291 0.00339 + 0.10689 0.31846 0.09736 0.01466 0.00487 0.00265 0.00895 0.01263 0.00342 + 0.10459 0.31262 0.09351 0.01426 0.00482 0.00262 0.00875 0.01235 0.00344 + 0.29091 0.73675 0.59664 0.04293 0.00000 0.00000 0.01570 0.02547 0.00178 + 0.28076 0.71738 0.57229 0.04118 0.00000 0.00000 0.01569 0.02515 0.00181 + 0.26673 0.68990 0.53493 0.03876 0.00016 0.00000 0.01557 0.02460 0.00186 + 0.25720 0.67083 0.50695 0.03714 0.00068 0.00000 0.01543 0.02417 0.00189 + 0.24773 0.65153 0.47770 0.03553 0.00138 0.00000 0.01525 0.02368 0.00192 + 0.23990 0.63534 0.45331 0.03420 0.00187 0.00000 0.01505 0.02324 0.00195 + 0.23268 0.62022 0.43069 0.03298 0.00227 0.00000 0.01485 0.02280 0.00198 + 0.22535 0.60463 0.40769 0.03173 0.00264 0.00000 0.01460 0.02232 0.00201 + 0.21921 0.59143 0.38851 0.03070 0.00291 0.00000 0.01438 0.02190 0.00203 + 0.21346 0.57897 0.37062 0.02973 0.00315 0.00000 0.01416 0.02149 0.00205 + 0.20906 0.56932 0.35706 0.02898 0.00331 0.00000 0.01397 0.02116 0.00207 + 0.20004 0.54937 0.32918 0.02747 0.00360 0.00012 0.01357 0.02046 0.00211 + 0.19271 0.53291 0.30627 0.02625 0.00380 0.00042 0.01322 0.01986 0.00215 + 0.18489 0.51515 0.28228 0.02495 0.00398 0.00077 0.01282 0.01920 0.00219 + 0.17715 0.49733 0.25939 0.02367 0.00412 0.00106 0.01239 0.01852 0.00223 + 0.17045 0.48173 0.24029 0.02257 0.00421 0.00128 0.01201 0.01791 0.00226 + 0.16398 0.46651 0.22247 0.02151 0.00427 0.00146 0.01162 0.01730 0.00230 + 0.15883 0.45427 0.20876 0.02067 0.00430 0.00159 0.01130 0.01680 0.00233 + 0.15284 0.43991 0.19348 0.01970 0.00432 0.00171 0.01092 0.01622 0.00236 + 0.14776 0.42760 0.18093 0.01889 0.00432 0.00180 0.01059 0.01571 0.00240 + 0.14324 0.41661 0.17005 0.01816 0.00431 0.00186 0.01029 0.01525 0.00242 + 0.13777 0.40314 0.15752 0.01729 0.00429 0.00193 0.00991 0.01469 0.00246 + 0.13284 0.39091 0.14668 0.01652 0.00426 0.00197 0.00957 0.01418 0.00249 + 0.12838 0.37977 0.13717 0.01582 0.00422 0.00200 0.00926 0.01371 0.00252 + 0.12409 0.36898 0.12839 0.01515 0.00418 0.00202 0.00895 0.01325 0.00256 + 0.12007 0.35877 0.12051 0.01454 0.00413 0.00202 0.00866 0.01282 0.00259 + 0.11636 0.34932 0.11339 0.01397 0.00408 0.00203 0.00839 0.01243 0.00261 + 0.11301 0.34071 0.10730 0.01346 0.00404 0.00202 0.00815 0.01206 0.00264 + 0.10973 0.33224 0.10143 0.01297 0.00399 0.00201 0.00790 0.01171 0.00267 + 0.10661 0.32415 0.09609 0.01250 0.00394 0.00200 0.00767 0.01137 0.00269 + 0.10373 0.31663 0.09126 0.01207 0.00389 0.00199 0.00746 0.01105 0.00271 + 0.10109 0.30970 0.08701 0.01169 0.00384 0.00197 0.00726 0.01076 0.00274 + 0.09848 0.30283 0.08287 0.01130 0.00379 0.00195 0.00707 0.01047 0.00276 + 0.09600 0.29626 0.07911 0.01094 0.00375 0.00193 0.00688 0.01020 0.00278 + 0.09365 0.29005 0.07557 0.01060 0.00370 0.00191 0.00670 0.00994 0.00280 + 0.09153 0.28437 0.07255 0.01030 0.00366 0.00189 0.00654 0.00971 0.00282 + 0.08940 0.27867 0.06953 0.01000 0.00361 0.00187 0.00638 0.00947 0.00284 + 0.27234 0.72051 0.53391 0.03306 0.00000 0.00000 0.01267 0.02211 0.00151 + 0.26186 0.69880 0.50746 0.03159 0.00000 0.00000 0.01261 0.02172 0.00154 + 0.24747 0.66831 0.46853 0.02958 0.00013 0.00000 0.01245 0.02109 0.00157 + 0.23777 0.64736 0.44039 0.02824 0.00055 0.00000 0.01230 0.02061 0.00160 + 0.22817 0.62631 0.41163 0.02691 0.00110 0.00000 0.01211 0.02010 0.00163 + 0.22027 0.60876 0.38798 0.02582 0.00148 0.00000 0.01191 0.01964 0.00165 + 0.21302 0.59247 0.36631 0.02482 0.00180 0.00000 0.01172 0.01920 0.00167 + 0.20569 0.57578 0.34460 0.02381 0.00208 0.00000 0.01149 0.01872 0.00169 + 0.19957 0.56171 0.32667 0.02297 0.00229 0.00000 0.01128 0.01830 0.00171 + 0.19386 0.54848 0.31005 0.02219 0.00247 0.00000 0.01108 0.01790 0.00173 + 0.18951 0.53829 0.29759 0.02159 0.00259 0.00000 0.01091 0.01758 0.00175 + 0.18062 0.51732 0.27220 0.02038 0.00282 0.00009 0.01055 0.01691 0.00178 + 0.17343 0.50011 0.25164 0.01941 0.00296 0.00032 0.01024 0.01635 0.00181 + 0.16580 0.48166 0.23034 0.01838 0.00309 0.00059 0.00989 0.01573 0.00184 + 0.15827 0.46325 0.21020 0.01737 0.00319 0.00080 0.00953 0.01510 0.00187 + 0.15179 0.44723 0.19355 0.01650 0.00325 0.00096 0.00920 0.01454 0.00190 + 0.14556 0.43167 0.17813 0.01567 0.00329 0.00110 0.00887 0.01399 0.00193 + 0.14061 0.41921 0.16636 0.01502 0.00331 0.00119 0.00861 0.01355 0.00195 + 0.13489 0.40467 0.15333 0.01426 0.00332 0.00127 0.00829 0.01302 0.00198 + 0.13005 0.39226 0.14270 0.01363 0.00331 0.00133 0.00801 0.01258 0.00200 + 0.12576 0.38120 0.13353 0.01307 0.00330 0.00138 0.00776 0.01217 0.00203 + 0.12058 0.36774 0.12307 0.01241 0.00328 0.00142 0.00746 0.01168 0.00205 + 0.11594 0.35555 0.11406 0.01181 0.00325 0.00145 0.00718 0.01123 0.00208 + 0.11175 0.34450 0.10620 0.01128 0.00322 0.00146 0.00692 0.01083 0.00210 + 0.10774 0.33383 0.09898 0.01078 0.00318 0.00147 0.00667 0.01044 0.00213 + 0.10398 0.32377 0.09254 0.01031 0.00314 0.00148 0.00644 0.01007 0.00215 + 0.10053 0.31449 0.08675 0.00988 0.00310 0.00147 0.00623 0.00973 0.00217 + 0.09742 0.30607 0.08183 0.00950 0.00306 0.00147 0.00603 0.00942 0.00219 + 0.09438 0.29780 0.07709 0.00913 0.00302 0.00146 0.00584 0.00912 0.00221 + 0.09151 0.28993 0.07281 0.00878 0.00298 0.00145 0.00565 0.00883 0.00223 + 0.08886 0.28263 0.06895 0.00846 0.00295 0.00143 0.00548 0.00857 0.00225 + 0.08643 0.27593 0.06556 0.00817 0.00291 0.00142 0.00533 0.00832 0.00227 + 0.08404 0.26930 0.06227 0.00789 0.00287 0.00140 0.00517 0.00808 0.00228 + 0.08177 0.26297 0.05930 0.00762 0.00284 0.00138 0.00503 0.00786 0.00230 + 0.07963 0.25699 0.05650 0.00737 0.00280 0.00137 0.00489 0.00764 0.00232 + 0.07771 0.25156 0.05413 0.00715 0.00277 0.00135 0.00477 0.00745 0.00233 + 0.07577 0.24611 0.05176 0.00693 0.00273 0.00133 0.00464 0.00725 0.00235 + 0.25227 0.69661 0.47581 0.02487 0.00000 0.00000 0.01012 0.01918 0.00128 + 0.24169 0.67303 0.44829 0.02369 0.00000 0.00000 0.01004 0.01873 0.00130 + 0.22724 0.64021 0.40901 0.02208 0.00010 0.00000 0.00987 0.01805 0.00133 + 0.21755 0.61785 0.38140 0.02101 0.00043 0.00000 0.00972 0.01755 0.00135 + 0.20802 0.59552 0.35369 0.01996 0.00088 0.00000 0.00953 0.01702 0.00137 + 0.20021 0.57701 0.33119 0.01910 0.00117 0.00000 0.00935 0.01655 0.00139 + 0.19306 0.55989 0.31078 0.01831 0.00142 0.00000 0.00917 0.01611 0.00141 + 0.18588 0.54247 0.29058 0.01752 0.00164 0.00000 0.00897 0.01564 0.00143 + 0.17990 0.52786 0.27405 0.01686 0.00180 0.00000 0.00878 0.01524 0.00144 + 0.17433 0.51415 0.25882 0.01625 0.00194 0.00000 0.00860 0.01486 0.00146 + 0.17011 0.50364 0.24750 0.01578 0.00203 0.00000 0.00846 0.01456 0.00147 + 0.16150 0.48209 0.22463 0.01484 0.00220 0.00007 0.00815 0.01393 0.00150 + 0.15457 0.46452 0.20637 0.01409 0.00231 0.00024 0.00788 0.01341 0.00152 + 0.14725 0.44577 0.18762 0.01330 0.00240 0.00044 0.00758 0.01284 0.00154 + 0.14006 0.42716 0.17005 0.01252 0.00247 0.00060 0.00728 0.01227 0.00157 + 0.13390 0.41104 0.15565 0.01186 0.00251 0.00072 0.00700 0.01176 0.00159 + 0.12799 0.39546 0.14241 0.01123 0.00254 0.00082 0.00673 0.01127 0.00161 + 0.12333 0.38304 0.13238 0.01073 0.00255 0.00088 0.00651 0.01088 0.00163 + 0.11795 0.36861 0.12135 0.01016 0.00255 0.00095 0.00625 0.01042 0.00165 + 0.11341 0.35633 0.11241 0.00968 0.00254 0.00099 0.00602 0.01002 0.00167 + 0.10940 0.34543 0.10473 0.00926 0.00253 0.00102 0.00582 0.00967 0.00169 + 0.10458 0.33221 0.09603 0.00877 0.00251 0.00105 0.00557 0.00925 0.00171 + 0.10027 0.32030 0.08859 0.00832 0.00249 0.00106 0.00535 0.00886 0.00173 + 0.09640 0.30953 0.08213 0.00793 0.00246 0.00107 0.00515 0.00851 0.00175 + 0.09270 0.29917 0.07623 0.00755 0.00243 0.00108 0.00495 0.00818 0.00177 + 0.08925 0.28944 0.07100 0.00721 0.00240 0.00108 0.00476 0.00787 0.00178 + 0.08608 0.28048 0.06631 0.00689 0.00237 0.00107 0.00459 0.00758 0.00180 + 0.08325 0.27239 0.06234 0.00661 0.00234 0.00106 0.00444 0.00732 0.00182 + 0.08048 0.26446 0.05854 0.00634 0.00231 0.00106 0.00429 0.00707 0.00183 + 0.07787 0.25694 0.05512 0.00608 0.00228 0.00105 0.00414 0.00683 0.00185 + 0.07546 0.24997 0.05204 0.00585 0.00225 0.00103 0.00401 0.00661 0.00186 + 0.07326 0.24359 0.04936 0.00564 0.00222 0.00102 0.00389 0.00641 0.00187 + 0.07110 0.23729 0.04676 0.00543 0.00219 0.00101 0.00377 0.00621 0.00189 + 0.06906 0.23131 0.04442 0.00524 0.00216 0.00099 0.00366 0.00602 0.00190 + 0.06713 0.22565 0.04222 0.00506 0.00213 0.00098 0.00355 0.00584 0.00191 + 0.06540 0.22053 0.04037 0.00490 0.00211 0.00097 0.00345 0.00569 0.00192 + 0.06367 0.21540 0.03852 0.00474 0.00208 0.00095 0.00336 0.00553 0.00193 + 0.23131 0.66630 0.42217 0.01825 0.00000 0.00000 0.00800 0.01654 0.00108 + 0.22081 0.64134 0.39439 0.01734 0.00000 0.00000 0.00792 0.01606 0.00109 + 0.20657 0.60687 0.35571 0.01611 0.00008 0.00000 0.00775 0.01534 0.00112 + 0.19708 0.58355 0.32912 0.01529 0.00035 0.00000 0.00760 0.01483 0.00113 + 0.18778 0.56039 0.30286 0.01449 0.00069 0.00000 0.00743 0.01431 0.00115 + 0.18019 0.54130 0.28178 0.01383 0.00093 0.00000 0.00727 0.01386 0.00117 + 0.17326 0.52371 0.26281 0.01323 0.00112 0.00000 0.00712 0.01343 0.00118 + 0.16634 0.50591 0.24427 0.01263 0.00129 0.00000 0.00694 0.01298 0.00120 + 0.16060 0.49104 0.22921 0.01213 0.00142 0.00000 0.00678 0.01260 0.00121 + 0.15525 0.47712 0.21541 0.01167 0.00152 0.00000 0.00662 0.01224 0.00122 + 0.15122 0.46650 0.20524 0.01132 0.00159 0.00000 0.00650 0.01196 0.00123 + 0.14302 0.44479 0.18486 0.01061 0.00172 0.00005 0.00624 0.01139 0.00125 + 0.13645 0.42719 0.16877 0.01004 0.00180 0.00018 0.00601 0.01091 0.00127 + 0.12954 0.40850 0.15241 0.00945 0.00187 0.00033 0.00577 0.01040 0.00129 + 0.12278 0.39003 0.13721 0.00887 0.00192 0.00045 0.00552 0.00989 0.00131 + 0.11701 0.37411 0.12484 0.00838 0.00195 0.00054 0.00529 0.00944 0.00133 + 0.11150 0.35879 0.11357 0.00791 0.00196 0.00061 0.00507 0.00901 0.00134 + 0.10716 0.34662 0.10507 0.00754 0.00197 0.00066 0.00489 0.00866 0.00136 + 0.10218 0.33254 0.09580 0.00712 0.00197 0.00070 0.00468 0.00826 0.00137 + 0.09798 0.32061 0.08833 0.00677 0.00196 0.00073 0.00450 0.00792 0.00139 + 0.09429 0.31004 0.08194 0.00646 0.00195 0.00075 0.00434 0.00762 0.00140 + 0.08987 0.29729 0.07475 0.00610 0.00193 0.00077 0.00414 0.00726 0.00142 + 0.08593 0.28584 0.06865 0.00577 0.00191 0.00078 0.00396 0.00693 0.00143 + 0.08240 0.27551 0.06337 0.00549 0.00189 0.00079 0.00380 0.00664 0.00145 + 0.07903 0.26561 0.05857 0.00522 0.00186 0.00079 0.00364 0.00636 0.00146 + 0.07591 0.25635 0.05435 0.00496 0.00184 0.00078 0.00350 0.00610 0.00148 + 0.07305 0.24783 0.05057 0.00474 0.00181 0.00078 0.00337 0.00586 0.00149 + 0.07050 0.24018 0.04740 0.00454 0.00179 0.00077 0.00325 0.00564 0.00150 + 0.06800 0.23269 0.04436 0.00434 0.00177 0.00076 0.00313 0.00543 0.00151 + 0.06566 0.22561 0.04165 0.00416 0.00174 0.00075 0.00302 0.00524 0.00152 + 0.06350 0.21906 0.03921 0.00399 0.00172 0.00075 0.00291 0.00506 0.00153 + 0.06155 0.21309 0.03709 0.00384 0.00170 0.00074 0.00282 0.00489 0.00154 + 0.05962 0.20719 0.03504 0.00369 0.00168 0.00072 0.00273 0.00473 0.00155 + 0.05781 0.20161 0.03321 0.00356 0.00166 0.00071 0.00264 0.00458 0.00156 + 0.05609 0.19634 0.03148 0.00343 0.00164 0.00070 0.00256 0.00443 0.00157 + 0.05457 0.19159 0.03005 0.00331 0.00162 0.00069 0.00249 0.00430 0.00158 + 0.05303 0.18683 0.02861 0.00320 0.00160 0.00068 0.00242 0.00417 0.00159 + 0.20998 0.63078 0.37283 0.01306 0.00000 0.00000 0.00625 0.01411 0.00090 + 0.19975 0.60492 0.34542 0.01239 0.00000 0.00000 0.00617 0.01362 0.00091 + 0.18594 0.56947 0.30805 0.01148 0.00007 0.00000 0.00602 0.01290 0.00093 + 0.17679 0.54562 0.28285 0.01088 0.00027 0.00000 0.00589 0.01241 0.00095 + 0.16786 0.52208 0.25832 0.01028 0.00055 0.00000 0.00574 0.01190 0.00096 + 0.16060 0.50276 0.23880 0.00980 0.00073 0.00000 0.00560 0.01147 0.00097 + 0.15399 0.48503 0.22140 0.00936 0.00088 0.00000 0.00547 0.01107 0.00098 + 0.14742 0.46718 0.20456 0.00892 0.00101 0.00000 0.00531 0.01066 0.00100 + 0.14198 0.45231 0.19099 0.00855 0.00111 0.00000 0.00518 0.01031 0.00101 + 0.13694 0.43844 0.17862 0.00821 0.00119 0.00000 0.00505 0.00998 0.00102 + 0.13314 0.42790 0.16957 0.00796 0.00124 0.00000 0.00495 0.00973 0.00102 + 0.12545 0.40641 0.15157 0.00744 0.00134 0.00004 0.00473 0.00921 0.00104 + 0.11931 0.38908 0.13753 0.00703 0.00140 0.00014 0.00455 0.00878 0.00106 + 0.11288 0.37075 0.12337 0.00659 0.00145 0.00025 0.00435 0.00833 0.00107 + 0.10662 0.35274 0.11032 0.00617 0.00149 0.00034 0.00414 0.00788 0.00109 + 0.10129 0.33727 0.09978 0.00582 0.00151 0.00040 0.00396 0.00750 0.00110 + 0.09622 0.32244 0.09024 0.00548 0.00152 0.00045 0.00378 0.00712 0.00111 + 0.09224 0.31071 0.08310 0.00521 0.00152 0.00049 0.00364 0.00683 0.00112 + 0.08769 0.29719 0.07536 0.00491 0.00152 0.00052 0.00347 0.00649 0.00114 + 0.08387 0.28577 0.06916 0.00466 0.00151 0.00054 0.00333 0.00620 0.00115 + 0.08051 0.27568 0.06388 0.00444 0.00150 0.00055 0.00320 0.00594 0.00116 + 0.07652 0.26356 0.05799 0.00418 0.00149 0.00056 0.00305 0.00564 0.00117 + 0.07296 0.25271 0.05300 0.00395 0.00147 0.00057 0.00291 0.00537 0.00118 + 0.06979 0.24295 0.04872 0.00374 0.00145 0.00057 0.00278 0.00512 0.00120 + 0.06677 0.23364 0.04485 0.00355 0.00143 0.00057 0.00266 0.00489 0.00121 + 0.06398 0.22495 0.04146 0.00337 0.00141 0.00057 0.00255 0.00467 0.00122 + 0.06142 0.21698 0.03843 0.00321 0.00140 0.00056 0.00245 0.00448 0.00123 + 0.05915 0.20984 0.03591 0.00307 0.00138 0.00056 0.00236 0.00430 0.00124 + 0.05694 0.20286 0.03350 0.00293 0.00136 0.00055 0.00227 0.00413 0.00124 + 0.05487 0.19629 0.03135 0.00280 0.00134 0.00054 0.00218 0.00397 0.00125 + 0.05296 0.19023 0.02943 0.00268 0.00132 0.00054 0.00210 0.00382 0.00126 + 0.05124 0.18471 0.02777 0.00258 0.00131 0.00053 0.00203 0.00369 0.00127 + 0.04954 0.17927 0.02617 0.00248 0.00129 0.00052 0.00196 0.00356 0.00128 + 0.04795 0.17414 0.02474 0.00238 0.00128 0.00051 0.00190 0.00344 0.00128 + 0.04645 0.16929 0.02340 0.00229 0.00126 0.00050 0.00184 0.00332 0.00129 + 0.04512 0.16495 0.02229 0.00221 0.00125 0.00050 0.00178 0.00322 0.00130 + 0.04378 0.16059 0.02117 0.00213 0.00123 0.00049 0.00173 0.00312 0.00130 + 0.18874 0.59119 0.32760 0.00910 0.00000 0.00000 0.00483 0.01186 0.00075 + 0.17891 0.56490 0.30106 0.00863 0.00000 0.00000 0.00476 0.01138 0.00076 + 0.16572 0.52908 0.26552 0.00798 0.00005 0.00000 0.00462 0.01070 0.00078 + 0.15703 0.50514 0.24197 0.00756 0.00022 0.00000 0.00451 0.01023 0.00079 + 0.14858 0.48163 0.21932 0.00714 0.00043 0.00000 0.00438 0.00976 0.00080 + 0.14173 0.46240 0.20147 0.00679 0.00058 0.00000 0.00427 0.00937 0.00081 + 0.13553 0.44483 0.18567 0.00648 0.00069 0.00000 0.00416 0.00900 0.00082 + 0.12938 0.42721 0.17055 0.00617 0.00079 0.00000 0.00403 0.00863 0.00083 + 0.12431 0.41260 0.15844 0.00591 0.00087 0.00000 0.00392 0.00832 0.00084 + 0.11961 0.39899 0.14745 0.00567 0.00093 0.00000 0.00382 0.00802 0.00084 + 0.11609 0.38869 0.13949 0.00548 0.00097 0.00000 0.00373 0.00780 0.00085 + 0.10897 0.36777 0.12373 0.00512 0.00104 0.00003 0.00355 0.00734 0.00086 + 0.10332 0.35096 0.11157 0.00482 0.00109 0.00010 0.00341 0.00698 0.00087 + 0.09741 0.33327 0.09941 0.00452 0.00113 0.00019 0.00325 0.00658 0.00089 + 0.09169 0.31596 0.08830 0.00422 0.00115 0.00025 0.00308 0.00620 0.00090 + 0.08683 0.30115 0.07939 0.00397 0.00117 0.00030 0.00294 0.00587 0.00091 + 0.08223 0.28702 0.07138 0.00373 0.00117 0.00034 0.00280 0.00555 0.00092 + 0.07863 0.27587 0.06542 0.00354 0.00117 0.00036 0.00269 0.00531 0.00093 + 0.07453 0.26308 0.05901 0.00333 0.00117 0.00038 0.00255 0.00502 0.00094 + 0.07110 0.25231 0.05391 0.00315 0.00117 0.00040 0.00244 0.00478 0.00095 + 0.06809 0.24280 0.04957 0.00300 0.00116 0.00041 0.00234 0.00457 0.00095 + 0.06452 0.23145 0.04477 0.00282 0.00115 0.00041 0.00222 0.00432 0.00096 + 0.06136 0.22132 0.04074 0.00266 0.00113 0.00042 0.00212 0.00410 0.00097 + 0.05854 0.21223 0.03728 0.00251 0.00112 0.00042 0.00202 0.00390 0.00098 + 0.05587 0.20358 0.03418 0.00238 0.00111 0.00042 0.00193 0.00371 0.00099 + 0.05340 0.19555 0.03147 0.00225 0.00109 0.00041 0.00184 0.00354 0.00100 + 0.05115 0.18819 0.02907 0.00214 0.00108 0.00041 0.00176 0.00338 0.00101 + 0.04916 0.18162 0.02707 0.00204 0.00106 0.00040 0.00169 0.00324 0.00101 + 0.04722 0.17521 0.02517 0.00195 0.00105 0.00040 0.00163 0.00310 0.00102 + 0.04541 0.16919 0.02349 0.00186 0.00104 0.00039 0.00156 0.00297 0.00103 + 0.04375 0.16365 0.02199 0.00178 0.00102 0.00039 0.00150 0.00286 0.00103 + 0.04225 0.15862 0.02070 0.00171 0.00101 0.00038 0.00145 0.00275 0.00104 + 0.04078 0.15367 0.01945 0.00164 0.00100 0.00037 0.00140 0.00265 0.00104 + 0.03940 0.14901 0.01835 0.00157 0.00099 0.00037 0.00135 0.00255 0.00105 + 0.03810 0.14461 0.01731 0.00151 0.00098 0.00036 0.00130 0.00246 0.00105 + 0.03695 0.14069 0.01645 0.00146 0.00097 0.00035 0.00126 0.00238 0.00106 + 0.03579 0.13676 0.01560 0.00140 0.00095 0.00035 0.00122 0.00230 0.00106 + 0.16793 0.54859 0.28630 0.00617 0.00000 0.00000 0.00368 0.00980 0.00062 + 0.15864 0.52230 0.26100 0.00585 0.00000 0.00000 0.00362 0.00935 0.00063 + 0.14622 0.48672 0.22767 0.00542 0.00004 0.00000 0.00351 0.00872 0.00064 + 0.13808 0.46307 0.20592 0.00513 0.00017 0.00000 0.00341 0.00829 0.00065 + 0.13019 0.43994 0.18525 0.00484 0.00034 0.00000 0.00331 0.00787 0.00066 + 0.12384 0.42111 0.16910 0.00461 0.00045 0.00000 0.00321 0.00752 0.00067 + 0.11809 0.40396 0.15491 0.00439 0.00054 0.00000 0.00312 0.00720 0.00067 + 0.11241 0.38685 0.14146 0.00418 0.00062 0.00000 0.00302 0.00687 0.00068 + 0.10774 0.37270 0.13077 0.00400 0.00068 0.00000 0.00293 0.00660 0.00069 + 0.10343 0.35956 0.12110 0.00383 0.00072 0.00000 0.00285 0.00635 0.00069 + 0.10021 0.34964 0.11414 0.00371 0.00075 0.00000 0.00278 0.00615 0.00070 + 0.09371 0.32956 0.10048 0.00345 0.00081 0.00002 0.00264 0.00576 0.00071 + 0.08857 0.31350 0.09004 0.00325 0.00084 0.00008 0.00252 0.00545 0.00072 + 0.08322 0.29667 0.07969 0.00304 0.00087 0.00014 0.00240 0.00512 0.00073 + 0.07806 0.28027 0.07030 0.00284 0.00089 0.00019 0.00227 0.00480 0.00074 + 0.07370 0.26630 0.06283 0.00266 0.00090 0.00022 0.00216 0.00452 0.00074 + 0.06958 0.25301 0.05616 0.00250 0.00091 0.00025 0.00205 0.00426 0.00075 + 0.06637 0.24256 0.05123 0.00237 0.00091 0.00026 0.00196 0.00406 0.00076 + 0.06272 0.23062 0.04596 0.00222 0.00090 0.00028 0.00186 0.00383 0.00077 + 0.05968 0.22060 0.04178 0.00210 0.00090 0.00029 0.00177 0.00363 0.00077 + 0.05701 0.21178 0.03825 0.00200 0.00089 0.00030 0.00170 0.00346 0.00078 + 0.05387 0.20129 0.03438 0.00187 0.00088 0.00030 0.00161 0.00326 0.00079 + 0.05109 0.19196 0.03114 0.00176 0.00088 0.00030 0.00153 0.00308 0.00080 + 0.04861 0.18361 0.02837 0.00166 0.00087 0.00030 0.00145 0.00292 0.00080 + 0.04628 0.17568 0.02590 0.00157 0.00085 0.00030 0.00138 0.00277 0.00081 + 0.04413 0.16835 0.02376 0.00149 0.00084 0.00030 0.00132 0.00263 0.00081 + 0.04218 0.16164 0.02186 0.00141 0.00083 0.00029 0.00126 0.00251 0.00082 + 0.04045 0.15568 0.02030 0.00135 0.00082 0.00029 0.00121 0.00240 0.00082 + 0.03877 0.14986 0.01881 0.00128 0.00081 0.00029 0.00116 0.00229 0.00083 + 0.03721 0.14443 0.01750 0.00122 0.00080 0.00028 0.00111 0.00219 0.00083 + 0.03578 0.13942 0.01634 0.00117 0.00079 0.00028 0.00107 0.00210 0.00084 + 0.03449 0.13490 0.01534 0.00112 0.00078 0.00027 0.00103 0.00202 0.00084 + 0.03323 0.13045 0.01437 0.00107 0.00077 0.00027 0.00099 0.00194 0.00085 + 0.03205 0.12628 0.01353 0.00103 0.00077 0.00026 0.00095 0.00186 0.00085 + 0.03094 0.12234 0.01273 0.00098 0.00076 0.00026 0.00092 0.00179 0.00085 + 0.02996 0.11884 0.01208 0.00095 0.00075 0.00025 0.00089 0.00173 0.00086 + 0.02897 0.11533 0.01142 0.00091 0.00074 0.00025 0.00086 0.00167 0.00086 + 0.14790 0.50400 0.24875 0.00406 0.00000 0.00000 0.00277 0.00793 0.00051 + 0.13922 0.47813 0.22497 0.00386 0.00000 0.00000 0.00272 0.00753 0.00052 + 0.12770 0.44331 0.19410 0.00358 0.00003 0.00000 0.00262 0.00697 0.00053 + 0.12017 0.42029 0.17424 0.00339 0.00013 0.00000 0.00255 0.00659 0.00053 + 0.11292 0.39789 0.15557 0.00321 0.00026 0.00000 0.00247 0.00623 0.00054 + 0.10709 0.37972 0.14111 0.00305 0.00035 0.00000 0.00239 0.00592 0.00055 + 0.10183 0.36322 0.12850 0.00291 0.00042 0.00000 0.00232 0.00565 0.00055 + 0.09666 0.34683 0.11665 0.00277 0.00048 0.00000 0.00224 0.00537 0.00056 + 0.09243 0.33333 0.10729 0.00265 0.00052 0.00000 0.00217 0.00514 0.00056 + 0.08852 0.32081 0.09887 0.00254 0.00056 0.00000 0.00210 0.00493 0.00057 + 0.08561 0.31140 0.09285 0.00246 0.00058 0.00000 0.00205 0.00476 0.00057 + 0.07976 0.29239 0.08111 0.00229 0.00063 0.00002 0.00194 0.00444 0.00058 + 0.07515 0.27727 0.07222 0.00215 0.00065 0.00006 0.00185 0.00418 0.00059 + 0.07037 0.26147 0.06348 0.00201 0.00067 0.00010 0.00175 0.00391 0.00059 + 0.06577 0.24614 0.05562 0.00187 0.00069 0.00014 0.00165 0.00365 0.00060 + 0.06190 0.23314 0.04941 0.00176 0.00070 0.00016 0.00156 0.00342 0.00061 + 0.05826 0.22082 0.04390 0.00165 0.00070 0.00018 0.00148 0.00321 0.00061 + 0.05543 0.21116 0.03985 0.00156 0.00070 0.00019 0.00141 0.00305 0.00062 + 0.05223 0.20017 0.03556 0.00146 0.00070 0.00020 0.00134 0.00286 0.00062 + 0.04957 0.19097 0.03217 0.00138 0.00069 0.00021 0.00127 0.00271 0.00063 + 0.04724 0.18289 0.02932 0.00131 0.00069 0.00022 0.00122 0.00257 0.00063 + 0.04450 0.17332 0.02622 0.00123 0.00068 0.00022 0.00115 0.00241 0.00064 + 0.04209 0.16483 0.02363 0.00115 0.00068 0.00022 0.00109 0.00227 0.00065 + 0.03995 0.15726 0.02144 0.00109 0.00067 0.00022 0.00103 0.00215 0.00065 + 0.03794 0.15009 0.01949 0.00103 0.00066 0.00022 0.00098 0.00203 0.00065 + 0.03609 0.14348 0.01781 0.00097 0.00065 0.00021 0.00093 0.00192 0.00066 + 0.03441 0.13745 0.01632 0.00092 0.00065 0.00021 0.00089 0.00183 0.00066 + 0.03293 0.13211 0.01511 0.00087 0.00064 0.00021 0.00085 0.00174 0.00067 + 0.03150 0.12690 0.01395 0.00083 0.00063 0.00021 0.00081 0.00166 0.00067 + 0.03017 0.12205 0.01294 0.00079 0.00062 0.00020 0.00078 0.00158 0.00067 + 0.02895 0.11760 0.01205 0.00075 0.00062 0.00020 0.00075 0.00151 0.00068 + 0.02786 0.11358 0.01128 0.00072 0.00061 0.00019 0.00072 0.00145 0.00068 + 0.02679 0.10963 0.01054 0.00069 0.00060 0.00019 0.00069 0.00139 0.00068 + 0.02579 0.10594 0.00990 0.00066 0.00060 0.00019 0.00067 0.00134 0.00069 + 0.02485 0.10246 0.00929 0.00063 0.00059 0.00018 0.00064 0.00128 0.00069 + 0.02403 0.09938 0.00880 0.00061 0.00059 0.00018 0.00062 0.00124 0.00069 + 0.02320 0.09629 0.00830 0.00059 0.00058 0.00018 0.00060 0.00119 0.00069 + 0.12885 0.45831 0.21474 0.00259 0.00000 0.00000 0.00205 0.00628 0.00041 + 0.12086 0.43322 0.19267 0.00247 0.00000 0.00000 0.00201 0.00593 0.00042 + 0.11031 0.39964 0.16442 0.00231 0.00002 0.00000 0.00194 0.00545 0.00043 + 0.10345 0.37756 0.14649 0.00219 0.00010 0.00000 0.00188 0.00513 0.00043 + 0.09687 0.35616 0.12981 0.00208 0.00020 0.00000 0.00181 0.00482 0.00044 + 0.09159 0.33887 0.11699 0.00198 0.00027 0.00000 0.00175 0.00457 0.00044 + 0.08685 0.32323 0.10589 0.00189 0.00033 0.00000 0.00169 0.00434 0.00045 + 0.08221 0.30775 0.09555 0.00180 0.00037 0.00000 0.00163 0.00411 0.00045 + 0.07842 0.29504 0.08744 0.00173 0.00040 0.00000 0.00158 0.00392 0.00046 + 0.07493 0.28328 0.08017 0.00165 0.00043 0.00000 0.00153 0.00374 0.00046 + 0.07233 0.27447 0.07502 0.00160 0.00045 0.00000 0.00149 0.00361 0.00046 + 0.06713 0.25673 0.06502 0.00149 0.00048 0.00001 0.00140 0.00335 0.00047 + 0.06305 0.24268 0.05753 0.00140 0.00050 0.00004 0.00133 0.00314 0.00047 + 0.05884 0.22805 0.05022 0.00131 0.00052 0.00008 0.00126 0.00292 0.00048 + 0.05480 0.21392 0.04369 0.00122 0.00053 0.00010 0.00118 0.00271 0.00049 + 0.05142 0.20198 0.03857 0.00114 0.00054 0.00012 0.00112 0.00254 0.00049 + 0.04824 0.19070 0.03406 0.00107 0.00054 0.00013 0.00106 0.00237 0.00050 + 0.04578 0.18190 0.03077 0.00101 0.00054 0.00014 0.00101 0.00224 0.00050 + 0.04301 0.17191 0.02730 0.00095 0.00054 0.00015 0.00095 0.00210 0.00050 + 0.04071 0.16358 0.02458 0.00090 0.00054 0.00015 0.00090 0.00198 0.00051 + 0.03870 0.15627 0.02230 0.00085 0.00053 0.00016 0.00086 0.00187 0.00051 + 0.03635 0.14766 0.01984 0.00079 0.00053 0.00016 0.00081 0.00175 0.00052 + 0.03429 0.14004 0.01780 0.00074 0.00052 0.00016 0.00077 0.00164 0.00052 + 0.03246 0.13326 0.01607 0.00070 0.00052 0.00016 0.00073 0.00155 0.00052 + 0.03074 0.12687 0.01455 0.00066 0.00051 0.00016 0.00069 0.00146 0.00053 + 0.02918 0.12099 0.01324 0.00062 0.00051 0.00015 0.00066 0.00138 0.00053 + 0.02775 0.11563 0.01209 0.00059 0.00050 0.00015 0.00062 0.00131 0.00053 + 0.02651 0.11091 0.01115 0.00056 0.00050 0.00015 0.00060 0.00124 0.00054 + 0.02530 0.10631 0.01027 0.00053 0.00049 0.00015 0.00057 0.00118 0.00054 + 0.02418 0.10204 0.00950 0.00051 0.00049 0.00015 0.00055 0.00112 0.00054 + 0.02316 0.09812 0.00881 0.00048 0.00048 0.00014 0.00053 0.00107 0.00054 + 0.02225 0.09460 0.00823 0.00046 0.00048 0.00014 0.00051 0.00103 0.00055 + 0.02135 0.09114 0.00767 0.00044 0.00047 0.00014 0.00049 0.00098 0.00055 + 0.02052 0.08792 0.00718 0.00042 0.00047 0.00014 0.00047 0.00094 0.00055 + 0.01974 0.08488 0.00673 0.00040 0.00047 0.00014 0.00045 0.00090 0.00055 + 0.01906 0.08221 0.00636 0.00039 0.00046 0.00013 0.00044 0.00087 0.00055 + 0.01837 0.07952 0.00599 0.00037 0.00046 0.00013 0.00043 0.00083 0.00056 + 0.11099 0.41239 0.18410 0.00160 0.00000 0.00000 0.00150 0.00486 0.00033 + 0.10374 0.38840 0.16386 0.00154 0.00000 0.00000 0.00146 0.00456 0.00034 + 0.09421 0.35647 0.13830 0.00145 0.00002 0.00000 0.00140 0.00416 0.00034 + 0.08804 0.33558 0.12228 0.00138 0.00008 0.00000 0.00136 0.00390 0.00035 + 0.08215 0.31542 0.10753 0.00132 0.00016 0.00000 0.00131 0.00365 0.00035 + 0.07745 0.29920 0.09629 0.00126 0.00021 0.00000 0.00126 0.00344 0.00036 + 0.07323 0.28457 0.08661 0.00121 0.00025 0.00000 0.00122 0.00325 0.00036 + 0.06911 0.27016 0.07769 0.00115 0.00029 0.00000 0.00117 0.00307 0.00036 + 0.06577 0.25835 0.07073 0.00110 0.00031 0.00000 0.00113 0.00292 0.00037 + 0.06269 0.24746 0.06452 0.00106 0.00033 0.00000 0.00109 0.00278 0.00037 + 0.06041 0.23932 0.06015 0.00103 0.00035 0.00000 0.00106 0.00268 0.00037 + 0.05585 0.22299 0.05172 0.00096 0.00037 0.00001 0.00100 0.00247 0.00038 + 0.05229 0.21010 0.04546 0.00090 0.00039 0.00003 0.00095 0.00231 0.00038 + 0.04862 0.19675 0.03940 0.00084 0.00040 0.00006 0.00090 0.00214 0.00038 + 0.04513 0.18390 0.03404 0.00078 0.00041 0.00007 0.00084 0.00198 0.00039 + 0.04220 0.17308 0.02986 0.00074 0.00041 0.00009 0.00079 0.00184 0.00039 + 0.03947 0.16289 0.02621 0.00069 0.00042 0.00010 0.00075 0.00171 0.00040 + 0.03736 0.15497 0.02356 0.00065 0.00042 0.00010 0.00071 0.00162 0.00040 + 0.03499 0.14602 0.02078 0.00061 0.00042 0.00011 0.00067 0.00151 0.00040 + 0.03303 0.13857 0.01862 0.00057 0.00042 0.00011 0.00064 0.00142 0.00041 + 0.03133 0.13205 0.01681 0.00054 0.00042 0.00011 0.00061 0.00134 0.00041 + 0.02934 0.12440 0.01487 0.00051 0.00041 0.00012 0.00058 0.00124 0.00041 + 0.02759 0.11766 0.01328 0.00048 0.00041 0.00012 0.00055 0.00116 0.00041 + 0.02605 0.11167 0.01194 0.00045 0.00041 0.00012 0.00052 0.00109 0.00042 + 0.02461 0.10604 0.01076 0.00042 0.00040 0.00012 0.00049 0.00103 0.00042 + 0.02330 0.10088 0.00975 0.00040 0.00040 0.00012 0.00047 0.00097 0.00042 + 0.02211 0.09619 0.00887 0.00038 0.00040 0.00011 0.00045 0.00091 0.00042 + 0.02108 0.09206 0.00816 0.00036 0.00039 0.00011 0.00043 0.00087 0.00043 + 0.02007 0.08806 0.00748 0.00034 0.00039 0.00011 0.00041 0.00082 0.00043 + 0.01915 0.08435 0.00690 0.00032 0.00038 0.00011 0.00040 0.00078 0.00043 + 0.01830 0.08095 0.00638 0.00031 0.00038 0.00011 0.00038 0.00074 0.00043 + 0.01755 0.07790 0.00594 0.00029 0.00038 0.00011 0.00037 0.00071 0.00043 + 0.01681 0.07491 0.00553 0.00028 0.00038 0.00011 0.00035 0.00068 0.00044 + 0.01613 0.07214 0.00516 0.00027 0.00037 0.00010 0.00034 0.00065 0.00044 + 0.01548 0.06952 0.00482 0.00026 0.00037 0.00010 0.00033 0.00062 0.00044 + 0.01492 0.06722 0.00455 0.00025 0.00037 0.00010 0.00032 0.00059 0.00044 + 0.01436 0.06492 0.00427 0.00023 0.00036 0.00010 0.00031 0.00057 0.00044 + 0.09447 0.36700 0.15663 0.00096 0.00000 0.00000 0.00107 0.00366 0.00027 + 0.08798 0.34438 0.13829 0.00093 0.00000 0.00000 0.00105 0.00342 0.00027 + 0.07949 0.31444 0.11543 0.00089 0.00001 0.00000 0.00100 0.00310 0.00027 + 0.07403 0.29495 0.10127 0.00085 0.00006 0.00000 0.00097 0.00289 0.00028 + 0.06882 0.27623 0.08836 0.00082 0.00012 0.00000 0.00093 0.00269 0.00028 + 0.06468 0.26122 0.07860 0.00079 0.00016 0.00000 0.00090 0.00253 0.00028 + 0.06099 0.24772 0.07026 0.00075 0.00019 0.00000 0.00087 0.00238 0.00029 + 0.05739 0.23448 0.06263 0.00072 0.00022 0.00000 0.00084 0.00224 0.00029 + 0.05447 0.22367 0.05672 0.00069 0.00024 0.00000 0.00081 0.00212 0.00029 + 0.05180 0.21371 0.05148 0.00067 0.00026 0.00000 0.00078 0.00202 0.00029 + 0.04982 0.20631 0.04781 0.00065 0.00027 0.00000 0.00076 0.00194 0.00030 + 0.04589 0.19147 0.04077 0.00061 0.00029 0.00001 0.00072 0.00178 0.00030 + 0.04282 0.17982 0.03560 0.00057 0.00030 0.00002 0.00068 0.00165 0.00030 + 0.03968 0.16779 0.03063 0.00053 0.00031 0.00004 0.00064 0.00153 0.00031 + 0.03669 0.15626 0.02627 0.00050 0.00032 0.00006 0.00060 0.00140 0.00031 + 0.03420 0.14659 0.02290 0.00047 0.00032 0.00007 0.00057 0.00130 0.00031 + 0.03189 0.13752 0.01997 0.00044 0.00033 0.00007 0.00054 0.00121 0.00031 + 0.03010 0.13049 0.01785 0.00041 0.00033 0.00008 0.00051 0.00114 0.00032 + 0.02811 0.12257 0.01566 0.00039 0.00033 0.00008 0.00048 0.00105 0.00032 + 0.02646 0.11600 0.01396 0.00036 0.00033 0.00008 0.00046 0.00099 0.00032 + 0.02503 0.11027 0.01254 0.00034 0.00033 0.00009 0.00044 0.00093 0.00032 + 0.02337 0.10356 0.01104 0.00032 0.00032 0.00009 0.00041 0.00086 0.00033 + 0.02192 0.09767 0.00980 0.00030 0.00032 0.00009 0.00039 0.00080 0.00033 + 0.02064 0.09246 0.00877 0.00028 0.00032 0.00009 0.00037 0.00075 0.00033 + 0.01945 0.08757 0.00787 0.00027 0.00032 0.00009 0.00035 0.00071 0.00033 + 0.01837 0.08310 0.00710 0.00025 0.00031 0.00009 0.00034 0.00066 0.00033 + 0.01739 0.07905 0.00643 0.00024 0.00031 0.00009 0.00032 0.00062 0.00033 + 0.01654 0.07550 0.00590 0.00022 0.00031 0.00009 0.00031 0.00059 0.00034 + 0.01571 0.07205 0.00539 0.00021 0.00031 0.00009 0.00030 0.00056 0.00034 + 0.01496 0.06887 0.00495 0.00020 0.00030 0.00008 0.00029 0.00053 0.00034 + 0.01427 0.06596 0.00457 0.00019 0.00030 0.00008 0.00028 0.00050 0.00034 + 0.01365 0.06336 0.00424 0.00018 0.00030 0.00008 0.00027 0.00048 0.00034 + 0.01305 0.06081 0.00393 0.00017 0.00030 0.00008 0.00026 0.00045 0.00034 + 0.01250 0.05846 0.00367 0.00017 0.00030 0.00008 0.00025 0.00043 0.00034 + 0.01198 0.05623 0.00341 0.00016 0.00029 0.00008 0.00024 0.00041 0.00034 + 0.01153 0.05429 0.00321 0.00015 0.00029 0.00008 0.00024 0.00040 0.00035 + 0.01108 0.05235 0.00301 0.00015 0.00029 0.00008 0.00023 0.00038 0.00035 + 0.07936 0.32278 0.13214 0.00056 0.00000 0.00000 0.00076 0.00268 0.00021 + 0.07364 0.30175 0.11571 0.00055 0.00000 0.00000 0.00074 0.00249 0.00021 + 0.06619 0.27408 0.09549 0.00053 0.00001 0.00000 0.00071 0.00224 0.00022 + 0.06142 0.25615 0.08312 0.00052 0.00005 0.00000 0.00069 0.00208 0.00022 + 0.05689 0.23900 0.07195 0.00050 0.00009 0.00000 0.00066 0.00193 0.00022 + 0.05331 0.22531 0.06358 0.00048 0.00012 0.00000 0.00063 0.00180 0.00022 + 0.05011 0.21303 0.05647 0.00047 0.00015 0.00000 0.00061 0.00170 0.00023 + 0.04702 0.20104 0.05002 0.00045 0.00017 0.00000 0.00059 0.00159 0.00023 + 0.04452 0.19128 0.04506 0.00043 0.00018 0.00000 0.00056 0.00150 0.00023 + 0.04222 0.18231 0.04067 0.00042 0.00020 0.00000 0.00054 0.00142 0.00023 + 0.04054 0.17566 0.03763 0.00041 0.00021 0.00000 0.00053 0.00136 0.00023 + 0.03719 0.16238 0.03182 0.00038 0.00022 0.00000 0.00050 0.00124 0.00024 + 0.03459 0.15199 0.02760 0.00036 0.00023 0.00002 0.00047 0.00115 0.00024 + 0.03193 0.14131 0.02357 0.00034 0.00024 0.00003 0.00044 0.00106 0.00024 + 0.02942 0.13111 0.02006 0.00031 0.00024 0.00004 0.00041 0.00097 0.00024 + 0.02733 0.12259 0.01737 0.00029 0.00025 0.00005 0.00039 0.00090 0.00024 + 0.02540 0.11463 0.01505 0.00028 0.00025 0.00005 0.00036 0.00083 0.00025 + 0.02391 0.10847 0.01338 0.00026 0.00025 0.00006 0.00035 0.00078 0.00025 + 0.02226 0.10157 0.01167 0.00024 0.00025 0.00006 0.00033 0.00072 0.00025 + 0.02090 0.09586 0.01034 0.00023 0.00025 0.00006 0.00031 0.00067 0.00025 + 0.01972 0.09089 0.00925 0.00022 0.00025 0.00006 0.00029 0.00063 0.00025 + 0.01835 0.08510 0.00809 0.00020 0.00025 0.00006 0.00028 0.00058 0.00025 + 0.01716 0.08003 0.00715 0.00019 0.00025 0.00006 0.00026 0.00054 0.00026 + 0.01612 0.07555 0.00637 0.00018 0.00024 0.00006 0.00025 0.00051 0.00026 + 0.01515 0.07137 0.00569 0.00017 0.00024 0.00006 0.00023 0.00047 0.00026 + 0.01427 0.06756 0.00511 0.00016 0.00024 0.00006 0.00022 0.00044 0.00026 + 0.01347 0.06410 0.00461 0.00015 0.00024 0.00006 0.00021 0.00041 0.00026 + 0.01279 0.06109 0.00421 0.00014 0.00024 0.00006 0.00020 0.00039 0.00026 + 0.01212 0.05817 0.00383 0.00013 0.00024 0.00006 0.00019 0.00037 0.00026 + 0.01151 0.05549 0.00351 0.00013 0.00023 0.00006 0.00019 0.00035 0.00026 + 0.01096 0.05303 0.00323 0.00012 0.00023 0.00006 0.00018 0.00033 0.00026 + 0.01047 0.05085 0.00299 0.00011 0.00023 0.00006 0.00017 0.00031 0.00027 + 0.00999 0.04871 0.00276 0.00011 0.00023 0.00006 0.00017 0.00030 0.00027 + 0.00955 0.04674 0.00257 0.00010 0.00023 0.00006 0.00016 0.00028 0.00027 + 0.00913 0.04487 0.00239 0.00010 0.00023 0.00006 0.00016 0.00027 0.00027 + 0.00878 0.04326 0.00224 0.00009 0.00023 0.00006 0.00016 0.00026 0.00027 + 0.00842 0.04163 0.00210 0.00009 0.00022 0.00006 0.00015 0.00025 0.00027 + 0.06575 0.28034 0.11043 0.00032 0.00000 0.00000 0.00052 0.00190 0.00016 + 0.06078 0.26108 0.09590 0.00032 0.00000 0.00000 0.00050 0.00176 0.00017 + 0.05434 0.23587 0.07824 0.00032 0.00001 0.00000 0.00048 0.00157 0.00017 + 0.05024 0.21962 0.06755 0.00031 0.00003 0.00000 0.00046 0.00145 0.00017 + 0.04636 0.20414 0.05800 0.00030 0.00007 0.00000 0.00044 0.00134 0.00017 + 0.04330 0.19183 0.05090 0.00029 0.00009 0.00000 0.00042 0.00125 0.00017 + 0.04058 0.18082 0.04491 0.00029 0.00011 0.00000 0.00041 0.00117 0.00018 + 0.03796 0.17013 0.03953 0.00028 0.00013 0.00000 0.00039 0.00109 0.00018 + 0.03585 0.16144 0.03541 0.00027 0.00014 0.00000 0.00037 0.00103 0.00018 + 0.03391 0.15348 0.03178 0.00026 0.00015 0.00000 0.00036 0.00097 0.00018 + 0.03250 0.14759 0.02929 0.00025 0.00015 0.00000 0.00035 0.00093 0.00018 + 0.02969 0.13588 0.02456 0.00024 0.00016 0.00000 0.00032 0.00085 0.00018 + 0.02752 0.12675 0.02114 0.00022 0.00017 0.00001 0.00030 0.00078 0.00018 + 0.02531 0.11740 0.01792 0.00021 0.00018 0.00002 0.00028 0.00071 0.00019 + 0.02323 0.10852 0.01513 0.00020 0.00018 0.00003 0.00026 0.00065 0.00019 + 0.02151 0.10112 0.01301 0.00018 0.00018 0.00003 0.00024 0.00060 0.00019 + 0.01992 0.09424 0.01120 0.00017 0.00019 0.00003 0.00023 0.00055 0.00019 + 0.01871 0.08893 0.00990 0.00016 0.00019 0.00004 0.00022 0.00052 0.00019 + 0.01735 0.08300 0.00858 0.00015 0.00019 0.00004 0.00020 0.00048 0.00019 + 0.01625 0.07812 0.00757 0.00014 0.00019 0.00004 0.00019 0.00044 0.00019 + 0.01529 0.07387 0.00673 0.00014 0.00019 0.00004 0.00018 0.00041 0.00020 + 0.01418 0.06895 0.00585 0.00013 0.00019 0.00004 0.00017 0.00038 0.00020 + 0.01323 0.06465 0.00515 0.00012 0.00018 0.00004 0.00015 0.00035 0.00020 + 0.01239 0.06086 0.00456 0.00011 0.00018 0.00004 0.00015 0.00033 0.00020 + 0.01161 0.05734 0.00405 0.00010 0.00018 0.00004 0.00014 0.00031 0.00020 + 0.01091 0.05414 0.00363 0.00010 0.00018 0.00004 0.00013 0.00029 0.00020 + 0.01027 0.05124 0.00326 0.00009 0.00018 0.00004 0.00012 0.00027 0.00020 + 0.00973 0.04872 0.00296 0.00009 0.00018 0.00004 0.00011 0.00025 0.00020 + 0.00920 0.04629 0.00269 0.00008 0.00017 0.00004 0.00011 0.00024 0.00020 + 0.00872 0.04405 0.00245 0.00008 0.00017 0.00004 0.00010 0.00022 0.00020 + 0.00828 0.04202 0.00225 0.00007 0.00017 0.00004 0.00010 0.00021 0.00020 + 0.00790 0.04021 0.00208 0.00007 0.00017 0.00003 0.00009 0.00020 0.00020 + 0.00752 0.03844 0.00191 0.00007 0.00017 0.00003 0.00009 0.00019 0.00020 + 0.00717 0.03681 0.00177 0.00006 0.00017 0.00003 0.00009 0.00018 0.00021 + 0.00685 0.03528 0.00164 0.00006 0.00017 0.00003 0.00008 0.00017 0.00021 + 0.00657 0.03395 0.00154 0.00006 0.00017 0.00003 0.00008 0.00016 0.00021 + 0.00629 0.03262 0.00144 0.00006 0.00017 0.00003 0.00008 0.00016 0.00021 + 0.05364 0.24019 0.09134 0.00018 0.00000 0.00000 0.00034 0.00130 0.00013 + 0.04939 0.22282 0.07864 0.00018 0.00000 0.00000 0.00033 0.00120 0.00013 + 0.04392 0.20019 0.06340 0.00019 0.00001 0.00000 0.00032 0.00107 0.00013 + 0.04045 0.18569 0.05429 0.00018 0.00003 0.00000 0.00031 0.00098 0.00013 + 0.03718 0.17193 0.04623 0.00018 0.00005 0.00000 0.00029 0.00090 0.00013 + 0.03461 0.16103 0.04027 0.00018 0.00007 0.00000 0.00028 0.00084 0.00013 + 0.03234 0.15132 0.03529 0.00017 0.00008 0.00000 0.00027 0.00078 0.00013 + 0.03016 0.14192 0.03086 0.00017 0.00009 0.00000 0.00025 0.00073 0.00014 + 0.02840 0.13431 0.02748 0.00016 0.00010 0.00000 0.00024 0.00068 0.00014 + 0.02680 0.12735 0.02453 0.00016 0.00011 0.00000 0.00023 0.00064 0.00014 + 0.02563 0.12223 0.02251 0.00015 0.00011 0.00000 0.00023 0.00061 0.00014 + 0.02332 0.11205 0.01870 0.00015 0.00012 0.00000 0.00021 0.00056 0.00014 + 0.02154 0.10416 0.01599 0.00014 0.00013 0.00001 0.00020 0.00051 0.00014 + 0.01973 0.09611 0.01344 0.00013 0.00013 0.00001 0.00018 0.00047 0.00014 + 0.01804 0.08849 0.01126 0.00012 0.00014 0.00002 0.00017 0.00042 0.00014 + 0.01665 0.08217 0.00961 0.00011 0.00014 0.00002 0.00016 0.00039 0.00014 + 0.01536 0.07631 0.00821 0.00011 0.00014 0.00002 0.00015 0.00036 0.00015 + 0.01438 0.07181 0.00722 0.00010 0.00014 0.00002 0.00014 0.00033 0.00015 + 0.01330 0.06680 0.00622 0.00009 0.00014 0.00003 0.00013 0.00030 0.00015 + 0.01242 0.06269 0.00545 0.00009 0.00014 0.00003 0.00012 0.00028 0.00015 + 0.01165 0.05912 0.00482 0.00008 0.00014 0.00003 0.00011 0.00026 0.00015 + 0.01077 0.05500 0.00417 0.00008 0.00014 0.00003 0.00011 0.00024 0.00015 + 0.01002 0.05142 0.00364 0.00007 0.00014 0.00003 0.00010 0.00022 0.00015 + 0.00935 0.04827 0.00321 0.00007 0.00014 0.00003 0.00009 0.00021 0.00015 + 0.00874 0.04534 0.00284 0.00006 0.00014 0.00003 0.00009 0.00019 0.00015 + 0.00819 0.04270 0.00253 0.00006 0.00014 0.00003 0.00008 0.00018 0.00015 + 0.00769 0.04031 0.00226 0.00006 0.00014 0.00003 0.00008 0.00017 0.00015 + 0.00727 0.03824 0.00205 0.00005 0.00013 0.00003 0.00007 0.00016 0.00015 + 0.00686 0.03624 0.00185 0.00005 0.00013 0.00003 0.00007 0.00015 0.00015 + 0.00648 0.03442 0.00168 0.00005 0.00013 0.00003 0.00006 0.00014 0.00015 + 0.00615 0.03276 0.00154 0.00004 0.00013 0.00002 0.00006 0.00013 0.00015 + 0.00585 0.03128 0.00142 0.00004 0.00013 0.00002 0.00006 0.00012 0.00015 + 0.00556 0.02984 0.00130 0.00004 0.00013 0.00002 0.00006 0.00012 0.00016 + 0.00529 0.02853 0.00120 0.00004 0.00013 0.00002 0.00005 0.00011 0.00016 + 0.00504 0.02728 0.00111 0.00004 0.00013 0.00002 0.00005 0.00010 0.00016 + 0.00483 0.02622 0.00104 0.00004 0.00013 0.00002 0.00005 0.00010 0.00016 + 0.00461 0.02514 0.00097 0.00003 0.00013 0.00002 0.00005 0.00010 0.00016 + 0.03383 0.16827 0.06021 0.00006 0.00000 0.00000 0.00014 0.00055 0.00007 + 0.03090 0.15481 0.05092 0.00006 0.00000 0.00000 0.00014 0.00050 0.00007 + 0.02716 0.13749 0.04004 0.00006 0.00000 0.00000 0.00013 0.00044 0.00007 + 0.02482 0.12651 0.03369 0.00007 0.00001 0.00000 0.00012 0.00040 0.00007 + 0.02263 0.11618 0.02818 0.00007 0.00003 0.00000 0.00011 0.00036 0.00007 + 0.02092 0.10806 0.02419 0.00007 0.00004 0.00000 0.00011 0.00034 0.00007 + 0.01942 0.10088 0.02089 0.00006 0.00005 0.00000 0.00010 0.00031 0.00007 + 0.01799 0.09399 0.01801 0.00006 0.00005 0.00000 0.00010 0.00029 0.00008 + 0.01684 0.08845 0.01585 0.00006 0.00006 0.00000 0.00009 0.00027 0.00008 + 0.01581 0.08340 0.01397 0.00006 0.00006 0.00000 0.00009 0.00025 0.00008 + 0.01505 0.07971 0.01271 0.00006 0.00006 0.00000 0.00009 0.00024 0.00008 + 0.01357 0.07243 0.01036 0.00005 0.00007 0.00000 0.00008 0.00021 0.00008 + 0.01245 0.06683 0.00872 0.00005 0.00007 0.00000 0.00008 0.00020 0.00008 + 0.01131 0.06117 0.00721 0.00005 0.00008 0.00001 0.00007 0.00018 0.00008 + 0.01026 0.05586 0.00593 0.00005 0.00008 0.00001 0.00006 0.00016 0.00008 + 0.00940 0.05149 0.00499 0.00004 0.00008 0.00001 0.00006 0.00015 0.00008 + 0.00861 0.04747 0.00420 0.00004 0.00008 0.00001 0.00006 0.00013 0.00008 + 0.00801 0.04441 0.00365 0.00004 0.00008 0.00001 0.00005 0.00012 0.00008 + 0.00736 0.04102 0.00309 0.00003 0.00008 0.00001 0.00005 0.00011 0.00008 + 0.00682 0.03826 0.00268 0.00003 0.00008 0.00001 0.00005 0.00010 0.00008 + 0.00637 0.03588 0.00234 0.00003 0.00008 0.00001 0.00004 0.00010 0.00008 + 0.00585 0.03315 0.00200 0.00003 0.00008 0.00001 0.00004 0.00009 0.00008 + 0.00540 0.03079 0.00173 0.00003 0.00008 0.00001 0.00004 0.00008 0.00008 + 0.00501 0.02873 0.00150 0.00002 0.00008 0.00001 0.00003 0.00007 0.00008 + 0.00466 0.02683 0.00132 0.00002 0.00008 0.00001 0.00003 0.00007 0.00008 + 0.00434 0.02513 0.00116 0.00002 0.00008 0.00001 0.00003 0.00006 0.00008 + 0.00405 0.02359 0.00103 0.00002 0.00008 0.00001 0.00003 0.00006 0.00008 + 0.00381 0.02227 0.00092 0.00002 0.00008 0.00001 0.00003 0.00005 0.00008 + 0.00358 0.02101 0.00083 0.00002 0.00008 0.00001 0.00003 0.00005 0.00008 + 0.00337 0.01985 0.00075 0.00002 0.00008 0.00001 0.00003 0.00005 0.00008 + 0.00318 0.01881 0.00068 0.00002 0.00008 0.00001 0.00003 0.00004 0.00008 + 0.00301 0.01789 0.00062 0.00001 0.00008 0.00001 0.00003 0.00004 0.00008 + 0.00285 0.01699 0.00057 0.00001 0.00008 0.00001 0.00003 0.00004 0.00008 + 0.00270 0.01618 0.00052 0.00001 0.00008 0.00001 0.00003 0.00004 0.00009 + 0.00256 0.01541 0.00048 0.00001 0.00007 0.00001 0.00003 0.00003 0.00009 + 0.00244 0.01475 0.00044 0.00001 0.00007 0.00001 0.00003 0.00003 0.00009 + 0.00233 0.01409 0.00041 0.00001 0.00007 0.00001 0.00003 0.00003 0.00009 + 0.01955 0.10931 0.03732 0.00002 0.00000 0.00000 0.00004 0.00019 0.00004 + 0.01770 0.09967 0.03095 0.00002 0.00000 0.00000 0.00004 0.00017 0.00004 + 0.01536 0.08741 0.02369 0.00002 0.00000 0.00000 0.00003 0.00015 0.00004 + 0.01391 0.07972 0.01955 0.00002 0.00001 0.00000 0.00003 0.00013 0.00004 + 0.01257 0.07257 0.01604 0.00002 0.00002 0.00000 0.00003 0.00012 0.00004 + 0.01154 0.06699 0.01354 0.00002 0.00002 0.00000 0.00003 0.00011 0.00004 + 0.01063 0.06208 0.01151 0.00002 0.00002 0.00000 0.00003 0.00010 0.00004 + 0.00978 0.05743 0.00977 0.00002 0.00003 0.00000 0.00003 0.00009 0.00004 + 0.00910 0.05371 0.00848 0.00002 0.00003 0.00000 0.00003 0.00009 0.00004 + 0.00849 0.05034 0.00738 0.00002 0.00003 0.00000 0.00003 0.00008 0.00004 + 0.00805 0.04789 0.00665 0.00002 0.00003 0.00000 0.00003 0.00008 0.00004 + 0.00719 0.04310 0.00531 0.00002 0.00004 0.00000 0.00003 0.00007 0.00004 + 0.00654 0.03945 0.00439 0.00002 0.00004 0.00000 0.00002 0.00006 0.00004 + 0.00589 0.03579 0.00356 0.00002 0.00004 0.00000 0.00002 0.00006 0.00004 + 0.00529 0.03239 0.00287 0.00001 0.00004 0.00000 0.00002 0.00005 0.00004 + 0.00481 0.02962 0.00237 0.00001 0.00004 0.00000 0.00002 0.00004 0.00004 + 0.00437 0.02709 0.00196 0.00001 0.00004 0.00001 0.00002 0.00004 0.00004 + 0.00404 0.02518 0.00168 0.00001 0.00004 0.00001 0.00002 0.00004 0.00004 + 0.00368 0.02308 0.00141 0.00001 0.00004 0.00001 0.00002 0.00003 0.00004 + 0.00339 0.02138 0.00120 0.00001 0.00005 0.00001 0.00002 0.00003 0.00004 + 0.00314 0.01993 0.00104 0.00001 0.00005 0.00001 0.00002 0.00003 0.00004 + 0.00287 0.01827 0.00087 0.00001 0.00005 0.00001 0.00002 0.00003 0.00004 + 0.00263 0.01686 0.00074 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 + 0.00242 0.01562 0.00064 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 + 0.00224 0.01450 0.00055 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 + 0.00207 0.01349 0.00048 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 + 0.00192 0.01259 0.00042 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 + 0.00180 0.01183 0.00038 0.00001 0.00004 0.00001 0.00002 0.00002 0.00004 + 0.00168 0.01109 0.00033 0.00001 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00157 0.01043 0.00030 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00148 0.00983 0.00027 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00139 0.00931 0.00024 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00131 0.00880 0.00022 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00124 0.00834 0.00020 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00117 0.00791 0.00018 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00111 0.00754 0.00017 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.00105 0.00718 0.00016 0.00000 0.00004 0.00001 0.00002 0.00001 0.00004 + 0.01005 0.06426 0.02127 0.00001 0.00000 0.00000 0.00001 0.00005 0.00002 + 0.00900 0.05801 0.01726 0.00001 0.00000 0.00000 0.00001 0.00004 0.00002 + 0.00771 0.05016 0.01281 0.00001 0.00000 0.00000 0.00001 0.00004 0.00002 + 0.00691 0.04530 0.01035 0.00001 0.00000 0.00000 0.00001 0.00003 0.00002 + 0.00618 0.04082 0.00831 0.00001 0.00001 0.00000 0.00001 0.00003 0.00002 + 0.00562 0.03736 0.00688 0.00001 0.00001 0.00000 0.00001 0.00003 0.00002 + 0.00514 0.03435 0.00574 0.00001 0.00001 0.00000 0.00001 0.00002 0.00002 + 0.00469 0.03152 0.00479 0.00000 0.00001 0.00000 0.00001 0.00002 0.00002 + 0.00433 0.02927 0.00410 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 + 0.00401 0.02725 0.00351 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 + 0.00379 0.02579 0.00313 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 + 0.00334 0.02296 0.00244 0.00000 0.00002 0.00000 0.00001 0.00002 0.00002 + 0.00301 0.02083 0.00198 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00269 0.01871 0.00157 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00239 0.01676 0.00124 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00215 0.01519 0.00100 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00194 0.01377 0.00081 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00178 0.01270 0.00069 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00161 0.01155 0.00056 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00147 0.01062 0.00047 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00135 0.00982 0.00040 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00122 0.00893 0.00033 0.00000 0.00002 0.00000 0.00001 0.00001 0.00002 + 0.00111 0.00818 0.00028 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00102 0.00752 0.00024 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00093 0.00693 0.00020 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00086 0.00641 0.00017 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00079 0.00594 0.00015 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00074 0.00554 0.00013 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00068 0.00517 0.00012 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00064 0.00483 0.00010 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00059 0.00453 0.00009 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00056 0.00426 0.00008 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00052 0.00401 0.00008 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00049 0.00378 0.00007 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00046 0.00357 0.00006 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00043 0.00339 0.00006 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00041 0.00321 0.00005 0.00000 0.00002 0.00001 0.00001 0.00000 0.00002 + 0.00436 0.03279 0.01075 0.00000 0.00000 0.00000 0.00000 0.00001 0.00001 + 0.00386 0.02926 0.00850 0.00000 0.00000 0.00000 0.00000 0.00001 0.00001 + 0.00325 0.02489 0.00609 0.00000 0.00000 0.00000 0.00000 0.00001 0.00001 + 0.00288 0.02222 0.00480 0.00000 0.00000 0.00000 0.00000 0.00000 0.00001 + 0.00255 0.01979 0.00375 0.00000 0.00000 0.00000 0.00000 0.00000 0.00001 + 0.00230 0.01793 0.00304 0.00000 0.00000 0.00000 0.00000 0.00000 0.00001 + 0.00208 0.01633 0.00248 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00188 0.01484 0.00203 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00172 0.01368 0.00171 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00158 0.01263 0.00143 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00148 0.01188 0.00126 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00129 0.01045 0.00096 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00115 0.00938 0.00076 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00102 0.00833 0.00059 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00089 0.00737 0.00045 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00080 0.00661 0.00036 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00071 0.00593 0.00028 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00065 0.00542 0.00023 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00058 0.00488 0.00019 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00052 0.00445 0.00016 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00048 0.00408 0.00013 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00043 0.00368 0.00011 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00039 0.00333 0.00009 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00035 0.00304 0.00007 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00032 0.00278 0.00006 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00029 0.00255 0.00005 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00027 0.00234 0.00004 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00024 0.00217 0.00004 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00023 0.00201 0.00003 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00021 0.00187 0.00003 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00019 0.00174 0.00003 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00018 0.00163 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00017 0.00152 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00016 0.00143 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00015 0.00134 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00014 0.00126 0.00002 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00013 0.00119 0.00001 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00030 0.00369 0.00132 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00026 0.00318 0.00097 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00021 0.00258 0.00063 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00018 0.00223 0.00046 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00015 0.00192 0.00033 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00013 0.00169 0.00025 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00012 0.00150 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00010 0.00133 0.00015 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00009 0.00119 0.00012 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00008 0.00108 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00008 0.00100 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00006 0.00084 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00006 0.00073 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00005 0.00063 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00004 0.00054 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00003 0.00047 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00003 0.00041 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00003 0.00036 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00002 0.00032 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00002 0.00028 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00002 0.00025 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00002 0.00022 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00017 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00016 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00014 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00013 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00011 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00001 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 'End:' diff --git a/LHAPDF/PDFsets/MRST2007lomod.LHgrid b/LHAPDF/PDFsets/MRST2007lomod.LHgrid index 3ca074baa51..40bb23f8db8 100644 --- a/LHAPDF/PDFsets/MRST2007lomod.LHgrid +++ b/LHAPDF/PDFsets/MRST2007lomod.LHgrid @@ -1,3576 +1,3576 @@ -'Version' '5.4' -'Description:' -'MRST fit: arXiv:0711.2473v2 - LOmod' -'Parton Distributions for LO Generators' -'A. Sherstnev and R. Thorne.' -'This set has 1 member PDFs.' -'Alphas:' -'Variable','nlo','EvolCode' -1,91.71,1.43,4.30,180.0 -'MinMax:' -1,1 -1.E-05,1.,1.25,10000000. -'QCDparams:' -1,1 -0.345,0.241 -'Parameterlist:' -'list',1,1 - 0.1204 - 0.1204 -'Evolution:' -'lo',1.0,1.0 -'MRSTgrid' -1,0 - 0.02366 0.01081 9.07020 0.83158 0.00000 0.00000 0.43256 0.83158 - 0.02383 0.01095 12.48341 0.86348 0.00000 0.00000 0.46703 0.86348 - 0.02408 0.01115 18.65619 0.93210 0.00000 0.00000 0.53938 0.93210 - 0.02426 0.01129 23.97873 1.00041 0.06542 0.00000 0.61032 1.00041 - 0.02445 0.01145 30.42459 1.09094 0.16238 0.00000 0.70356 1.09094 - 0.02461 0.01158 36.72531 1.18593 0.26281 0.00000 0.80084 1.18593 - 0.02476 0.01170 43.44030 1.29302 0.37502 0.00000 0.91008 1.29302 - 0.02492 0.01184 51.31299 1.42510 0.51245 0.00000 1.04442 1.42510 - 0.02506 0.01195 58.79745 1.55632 0.64823 0.00000 1.17756 1.55632 - 0.02520 0.01207 66.60634 1.69841 0.79467 0.00000 1.32148 1.69841 - 0.02531 0.01216 73.20739 1.82222 0.92187 0.00000 1.44672 1.82222 - 0.02553 0.01234 88.53299 2.12126 1.22802 0.00172 1.74875 2.12126 - 0.02573 0.01251 102.75306 2.41926 1.53204 0.30236 2.04929 2.41927 - 0.02595 0.01269 120.16188 2.79906 1.91842 0.70038 2.43186 2.79906 - 0.02617 0.01288 139.97977 3.24856 2.37463 1.16843 2.88419 3.24857 - 0.02638 0.01305 159.48859 3.70700 2.83902 1.64333 3.34513 3.70700 - 0.02658 0.01323 180.66284 4.22072 3.35864 2.17334 3.86133 4.22073 - 0.02675 0.01337 199.37390 4.68746 3.83018 2.65335 4.33009 4.68747 - 0.02696 0.01355 223.45438 5.30441 4.45286 3.28610 4.94945 5.30442 - 0.02714 0.01371 246.03366 5.89830 5.05172 3.89372 5.54543 5.89830 - 0.02731 0.01385 267.79172 6.48372 5.64164 4.49154 6.13274 6.48373 - 0.02752 0.01403 296.84021 7.28408 6.44759 5.30734 6.93545 7.28408 - 0.02772 0.01420 325.62436 8.09696 7.26566 6.13449 7.75051 8.09696 - 0.02791 0.01436 353.88416 8.91304 8.08652 6.96373 8.56861 8.91305 - 0.02810 0.01452 383.36743 9.78234 8.96051 7.84596 9.43988 9.78235 - 0.02828 0.01468 413.42319 10.68644 9.86915 8.76253 10.34589 10.68645 - 0.02845 0.01483 442.94604 11.59115 10.77809 9.67888 11.25238 11.59117 - 0.02862 0.01497 471.72626 12.48836 11.67923 10.58689 12.15123 12.48837 - 0.02878 0.01511 501.56931 13.43383 12.62861 11.54310 13.09835 13.43385 - 0.02894 0.01525 531.82843 14.40778 13.60635 12.52746 14.07388 14.40779 - 0.02910 0.01539 561.41571 15.37430 14.57644 13.50378 15.04191 15.37432 - 0.02924 0.01551 590.14099 16.32567 15.53114 14.46430 15.99468 16.32568 - 0.02939 0.01564 619.84021 17.32247 16.53127 15.47024 16.99288 17.32248 - 0.02954 0.01577 649.84717 18.34259 17.55465 16.49930 18.01437 18.34261 - 0.02968 0.01589 679.12280 19.35028 18.56542 17.51542 19.02335 19.35030 - 0.02981 0.01600 707.48151 20.33768 19.55571 18.51075 20.01197 20.33770 - 0.02994 0.01612 736.73621 21.36765 20.58858 19.54867 21.04315 21.36767 - 0.02700 0.01348 7.96348 0.71306 0.00000 0.00000 0.37131 0.71306 - 0.02720 0.01365 10.86776 0.74096 0.00000 0.00000 0.40142 0.74096 - 0.02749 0.01390 16.03893 0.80013 0.00000 0.00000 0.46377 0.80013 - 0.02771 0.01408 20.43001 0.85827 0.05570 0.00000 0.52417 0.85828 - 0.02793 0.01427 25.68217 0.93452 0.13748 0.00000 0.60274 0.93453 - 0.02812 0.01444 30.75863 1.01376 0.22139 0.00000 0.68394 1.01376 - 0.02831 0.01460 36.11567 1.10233 0.31437 0.00000 0.77436 1.10234 - 0.02850 0.01476 42.33580 1.21067 0.42730 0.00000 0.88463 1.21068 - 0.02867 0.01491 48.19603 1.31747 0.53802 0.00000 0.99307 1.31747 - 0.02883 0.01505 54.26094 1.43230 0.65659 0.00000 1.10947 1.43231 - 0.02896 0.01516 59.35228 1.53176 0.75896 0.00000 1.21016 1.53177 - 0.02924 0.01540 71.06065 1.77002 1.00334 0.00137 1.45098 1.77003 - 0.02947 0.01560 81.78095 2.00507 1.24354 0.23937 1.68819 2.00508 - 0.02974 0.01583 94.75594 2.30171 1.54584 0.55146 1.98721 2.30172 - 0.03001 0.01607 109.35155 2.64921 1.89910 0.91466 2.33712 2.64922 - 0.03026 0.01629 123.55772 3.00016 2.25517 1.27957 2.69022 3.00018 - 0.03052 0.01650 138.81337 3.38985 2.64991 1.68304 3.08203 3.38987 - 0.03072 0.01668 152.16571 3.74098 3.00517 2.04541 3.43489 3.74100 - 0.03098 0.01690 169.18658 4.20131 3.47042 2.51912 3.89728 4.20134 - 0.03120 0.01710 184.99269 4.64076 3.91414 2.97019 4.33852 4.64079 - 0.03141 0.01728 200.09329 5.07076 4.34799 3.41067 4.77013 5.07078 - 0.03167 0.01750 220.06784 5.65396 4.93600 4.00695 5.35535 5.65399 - 0.03192 0.01772 239.66544 6.24129 5.52778 4.60635 5.94454 6.24132 - 0.03215 0.01792 258.72931 6.82631 6.11690 5.20250 6.53128 6.82635 - 0.03239 0.01812 278.44409 7.44481 6.73943 5.83194 7.15146 7.44485 - 0.03261 0.01831 298.36728 8.08333 7.38184 6.48100 7.79161 8.08337 - 0.03283 0.01850 317.77621 8.71782 8.01995 7.12532 8.42762 8.71786 - 0.03303 0.01868 336.54990 9.34290 8.64841 7.75955 9.05411 9.34294 - 0.03324 0.01885 355.87140 9.99745 9.30631 8.42317 9.71007 9.99751 - 0.03344 0.01903 375.31610 10.66748 9.97959 9.10200 10.38146 10.66753 - 0.03364 0.01919 394.19354 11.32841 10.64358 9.77122 11.04368 11.32847 - 0.03382 0.01935 412.39755 11.97531 11.29334 10.42585 11.69177 11.97537 - 0.03401 0.01951 431.09399 12.64933 11.97022 11.10760 12.36699 12.64939 - 0.03419 0.01967 449.86148 13.33539 12.65907 11.80120 13.05421 13.33545 - 0.03437 0.01982 468.05460 14.00947 13.33579 12.48241 13.72940 14.00954 - 0.03454 0.01996 485.57220 14.66669 13.99549 13.14633 14.38766 14.66676 - 0.03471 0.02010 503.53693 15.34889 14.68017 13.83524 15.07090 15.34897 - 0.03069 0.01656 6.99648 0.61443 0.00000 0.00000 0.32026 0.61443 - 0.03092 0.01677 9.46487 0.63885 0.00000 0.00000 0.34657 0.63885 - 0.03126 0.01708 13.79128 0.68989 0.00000 0.00000 0.40035 0.68990 - 0.03151 0.01730 17.40904 0.73940 0.04744 0.00000 0.45179 0.73941 - 0.03177 0.01754 21.68345 0.80364 0.11643 0.00000 0.51802 0.80365 - 0.03200 0.01774 25.76971 0.86976 0.18657 0.00000 0.58582 0.86977 - 0.03222 0.01794 30.04086 0.94305 0.26365 0.00000 0.66070 0.94306 - 0.03244 0.01814 34.95436 1.03198 0.35652 0.00000 0.75127 1.03199 - 0.03264 0.01832 39.54406 1.11898 0.44690 0.00000 0.83968 1.11899 - 0.03284 0.01849 44.25797 1.21190 0.54303 0.00000 0.93395 1.21192 - 0.03299 0.01863 48.18958 1.29193 0.62556 0.00000 1.01502 1.29194 - 0.03331 0.01892 57.15152 1.48213 0.82101 0.00109 1.20742 1.48215 - 0.03359 0.01917 65.25593 1.66800 1.01131 0.19002 1.39514 1.66802 - 0.03391 0.01945 74.96340 1.90046 1.24863 0.43556 1.62963 1.90048 - 0.03424 0.01974 85.76724 2.17022 1.52334 0.71863 1.90146 2.17025 - 0.03454 0.02001 96.17752 2.44026 1.79777 1.00048 2.17333 2.44029 - 0.03484 0.02028 107.25268 2.73763 2.09948 1.30952 2.47252 2.73766 - 0.03509 0.02050 116.86543 3.00361 2.36901 1.58502 2.73998 3.00365 - 0.03539 0.02077 129.01874 3.34979 2.71941 1.94252 3.08793 3.34983 - 0.03567 0.02101 140.21144 3.67786 3.05115 2.28043 3.41753 3.67791 - 0.03591 0.02123 150.82655 3.99682 3.37341 2.60826 3.73787 3.99687 - 0.03623 0.02150 164.75859 4.42647 3.80719 3.04898 4.16925 4.42652 - 0.03653 0.02176 178.31473 4.85603 4.24057 3.48875 4.60040 4.85609 - 0.03681 0.02201 191.40092 5.28105 4.66910 3.92318 5.02689 5.28111 - 0.03710 0.02226 204.83585 5.72756 5.11907 4.37894 5.47485 5.72763 - 0.03738 0.02250 218.31612 6.18567 5.58052 4.84598 5.93436 6.18575 - 0.03764 0.02272 231.36015 6.63825 6.03621 5.30687 6.38823 6.63833 - 0.03789 0.02294 243.89775 7.08170 6.48255 5.75805 6.83289 7.08178 - 0.03814 0.02316 256.72339 7.54365 6.94738 6.22766 7.29604 7.54374 - 0.03839 0.02337 269.55334 8.01408 7.42060 6.70554 7.76764 8.01418 - 0.03863 0.02357 281.93805 8.47588 7.88502 7.17433 8.23053 8.47598 - 0.03886 0.02376 293.81683 8.92579 8.33739 7.63079 8.68147 8.92590 - 0.03909 0.02396 305.95276 9.39249 8.80654 8.10401 9.14919 9.39260 - 0.03932 0.02415 318.07233 9.86545 9.28189 8.58335 9.62315 9.86556 - 0.03953 0.02433 329.76175 10.32818 9.74689 9.05210 10.08683 10.32831 - 0.03974 0.02451 340.96423 10.77755 10.19838 9.50713 10.53709 10.77768 - 0.03995 0.02468 352.39966 11.24220 10.66516 9.97746 11.00263 11.24233 - 0.03312 0.01871 6.48074 0.56323 0.00000 0.00000 0.29374 0.56323 - 0.03338 0.01895 8.71949 0.58580 0.00000 0.00000 0.31805 0.58581 - 0.03376 0.01930 12.60485 0.63256 0.00000 0.00000 0.36730 0.63257 - 0.03404 0.01955 15.82258 0.67755 0.04310 0.00000 0.41404 0.67756 - 0.03433 0.01981 19.59520 0.73552 0.10543 0.00000 0.47383 0.73553 - 0.03458 0.02004 23.17697 0.79484 0.16841 0.00000 0.53468 0.79485 - 0.03482 0.02026 26.89844 0.86025 0.23729 0.00000 0.60154 0.86026 - 0.03508 0.02049 31.15475 0.93921 0.31985 0.00000 0.68200 0.93923 - 0.03530 0.02070 35.10921 1.01610 0.39982 0.00000 0.76018 1.01612 - 0.03552 0.02089 39.15126 1.09788 0.48453 0.00000 0.84318 1.09790 - 0.03569 0.02104 42.50878 1.16805 0.55700 0.00000 0.91432 1.16808 - 0.03606 0.02137 50.11974 1.33404 0.72779 0.00095 1.08231 1.33407 - 0.03637 0.02166 56.94827 1.49530 0.89310 0.16527 1.24526 1.49534 - 0.03673 0.02197 65.07397 1.69584 1.09808 0.37767 1.44765 1.69588 - 0.03710 0.02230 74.05653 1.92721 1.33396 0.62108 1.68090 1.92725 - 0.03744 0.02260 82.65697 2.15753 1.56829 0.86209 1.91290 2.15758 - 0.03778 0.02290 91.75272 2.40987 1.82460 1.12500 2.16690 2.40993 - 0.03807 0.02315 99.60578 2.63454 2.05251 1.35829 2.39292 2.63460 - 0.03841 0.02346 109.48273 2.92564 2.34746 1.65963 2.68562 2.92570 - 0.03872 0.02373 118.53139 3.20026 2.62542 1.94316 2.96164 3.20033 - 0.03901 0.02397 127.07339 3.46618 2.89437 2.21712 3.22883 3.46626 - 0.03937 0.02429 138.22931 3.82287 3.25483 2.58382 3.58709 3.82296 - 0.03971 0.02458 149.02731 4.17788 3.61333 2.94807 3.94356 4.17798 - 0.04004 0.02486 159.40056 4.52769 3.96634 3.30639 4.29470 4.52779 - 0.04036 0.02513 170.00134 4.89374 4.33555 3.68081 4.66207 4.89384 - 0.04068 0.02540 180.58994 5.26786 4.71272 4.06300 5.03746 5.26797 - 0.04098 0.02566 190.79234 5.63612 5.08383 4.43879 5.40692 5.63625 - 0.04127 0.02590 200.55952 5.99574 5.44609 4.80541 5.76764 5.99588 - 0.04156 0.02615 210.51302 6.36917 5.82213 5.18576 6.14216 6.36930 - 0.04185 0.02639 220.43213 6.74823 6.20375 5.57157 6.52229 6.74838 - 0.04213 0.02662 229.97256 7.11922 6.57713 5.94888 6.89428 7.11937 - 0.04239 0.02683 239.09229 7.47964 6.93979 6.31522 7.25563 7.47980 - 0.04265 0.02705 248.37852 7.85247 7.31486 6.69395 7.62940 7.85264 - 0.04291 0.02727 257.62228 8.22929 7.69387 7.07654 8.00713 8.22947 - 0.04317 0.02747 266.50970 8.59700 8.06364 7.44970 8.37570 8.59719 - 0.04341 0.02767 275.00174 8.95322 8.42180 7.81103 8.73273 8.95341 - 0.04365 0.02787 283.64520 9.32067 8.79120 8.18361 9.10099 9.32086 - 0.03498 0.02041 6.13536 0.52948 0.00000 0.00000 0.27625 0.52948 - 0.03526 0.02067 8.22148 0.55082 0.00000 0.00000 0.29922 0.55083 - 0.03568 0.02105 11.81531 0.59473 0.00000 0.00000 0.34546 0.59474 - 0.03598 0.02132 14.77010 0.63672 0.04023 0.00000 0.38910 0.63673 - 0.03630 0.02161 18.21447 0.69056 0.09814 0.00000 0.44464 0.69057 - 0.03657 0.02186 21.46766 0.74539 0.15642 0.00000 0.50091 0.74541 - 0.03683 0.02210 24.83249 0.80563 0.21990 0.00000 0.56250 0.80565 - 0.03711 0.02235 28.66401 0.87806 0.29572 0.00000 0.63634 0.87809 - 0.03736 0.02257 32.20930 0.94835 0.36890 0.00000 0.70784 0.94838 - 0.03759 0.02279 35.81995 1.02288 0.44617 0.00000 0.78351 1.02292 - 0.03778 0.02295 38.80980 1.08666 0.51210 0.00000 0.84819 1.08670 - 0.03818 0.02331 45.55868 1.23698 0.66691 0.00086 1.00038 1.23702 - 0.03853 0.02362 51.57695 1.38236 0.81609 0.14930 1.14734 1.38241 - 0.03892 0.02396 58.70229 1.56239 1.00028 0.34036 1.32911 1.56245 - 0.03933 0.02432 66.53792 1.76917 1.21129 0.55836 1.53766 1.76924 - 0.03970 0.02465 74.00317 1.97416 1.42004 0.77330 1.74422 1.97423 - 0.04008 0.02498 81.86190 2.19787 1.64746 1.00685 1.96947 2.19795 - 0.04040 0.02525 88.61882 2.39635 1.84898 1.21335 2.16922 2.39644 - 0.04078 0.02558 97.08227 2.65263 2.10886 1.47917 2.42700 2.65272 - 0.04113 0.02587 104.80379 2.89356 2.35293 1.72838 2.66924 2.89366 - 0.04144 0.02614 112.06613 3.12614 2.58835 1.96844 2.90301 3.12625 - 0.04184 0.02648 121.51340 3.43708 2.90282 2.28871 3.21542 3.43720 - 0.04222 0.02681 130.61909 3.74548 3.21449 2.60571 3.52519 3.74561 - 0.04258 0.02711 139.33240 4.04838 3.52039 2.91652 3.82934 4.04852 - 0.04294 0.02741 148.20369 4.36437 3.83934 3.24031 4.14656 4.36452 - 0.04330 0.02770 157.03224 4.68636 4.16419 3.56981 4.46975 4.68652 - 0.04363 0.02798 165.50919 5.00242 4.48290 3.89286 4.78691 5.00258 - 0.04395 0.02824 173.59793 5.31023 4.79319 4.20718 5.09576 5.31041 - 0.04428 0.02851 181.81505 5.62904 5.11447 4.53245 5.41560 5.62923 - 0.04460 0.02877 189.97807 5.95187 5.43968 4.86154 5.73942 5.95206 - 0.04490 0.02902 197.80595 6.26705 5.75710 5.18261 6.05554 6.26725 - 0.04519 0.02925 205.26749 6.57256 6.06472 5.49363 6.36193 6.57278 - 0.04549 0.02949 212.84416 6.88790 6.38215 5.81446 6.67815 6.88813 - 0.04578 0.02972 220.36563 7.20593 6.70223 6.13786 6.99703 7.20616 - 0.04606 0.02995 227.57787 7.51562 7.01386 6.45261 7.30753 7.51586 - 0.04633 0.03016 234.45189 7.81503 7.31509 6.75679 7.60771 7.81529 - 0.04660 0.03038 241.43127 8.12330 7.62519 7.06983 7.91674 8.12357 - 0.03648 0.02180 5.88041 0.50498 0.00000 0.00000 0.26355 0.50498 - 0.03678 0.02208 7.85486 0.52542 0.00000 0.00000 0.28554 0.52543 - 0.03722 0.02248 11.23652 0.56724 0.00000 0.00000 0.32957 0.56725 - 0.03754 0.02278 14.00105 0.60703 0.03813 0.00000 0.37093 0.60705 - 0.03788 0.02309 17.20911 0.65786 0.09283 0.00000 0.42338 0.65788 - 0.03817 0.02335 20.22689 0.70945 0.14769 0.00000 0.47633 0.70947 - 0.03845 0.02361 23.33732 0.76594 0.20727 0.00000 0.53411 0.76597 - 0.03875 0.02388 26.86715 0.83368 0.27822 0.00000 0.60319 0.83371 - 0.03901 0.02411 30.12302 0.89923 0.34652 0.00000 0.66988 0.89927 - 0.03926 0.02434 33.42966 0.96857 0.41847 0.00000 0.74031 0.96861 - 0.03946 0.02452 36.16127 1.02779 0.47973 0.00000 0.80038 1.02783 - 0.03989 0.02490 42.30732 1.16695 0.62317 0.00080 0.94132 1.16700 - 0.04027 0.02523 47.76242 1.30109 0.76091 0.13797 1.07697 1.30115 - 0.04069 0.02560 54.19625 1.46666 0.93044 0.31398 1.24419 1.46673 - 0.04113 0.02598 61.24351 1.65619 1.12399 0.51412 1.43539 1.65627 - 0.04153 0.02633 67.93269 1.84348 1.31486 0.71082 1.62418 1.84357 - 0.04193 0.02668 74.94997 2.04727 1.52218 0.92392 1.82944 2.04737 - 0.04227 0.02697 80.96469 2.22760 1.70540 1.11184 2.01098 2.22771 - 0.04269 0.02732 88.47541 2.45984 1.94107 1.35310 2.24464 2.45995 - 0.04306 0.02764 95.30652 2.67760 2.16181 1.57870 2.46365 2.67772 - 0.04340 0.02792 101.71379 2.88733 2.37423 1.79550 2.67451 2.88747 - 0.04383 0.02829 110.02437 3.16704 2.65730 2.08402 2.95561 3.16719 - 0.04424 0.02863 118.00949 3.44374 2.93710 2.36885 3.23361 3.44389 - 0.04463 0.02895 125.62845 3.71485 3.21107 2.64745 3.50591 3.71501 - 0.04502 0.02927 133.36423 3.99704 3.49607 2.93701 3.78927 3.99721 - 0.04540 0.02958 141.04193 4.28394 3.78569 3.23101 4.07731 4.28413 - 0.04577 0.02988 148.39502 4.56497 4.06925 3.51866 4.35940 4.56518 - 0.04612 0.03016 155.39447 4.83814 4.34477 3.79798 4.63355 4.83835 - 0.04647 0.03044 162.48862 5.12054 4.62951 4.08649 4.91693 5.12077 - 0.04681 0.03072 169.51987 5.40596 4.91720 4.37783 5.20329 5.40620 - 0.04715 0.03099 176.24768 5.68414 5.19752 4.66158 5.48236 5.68439 - 0.04746 0.03124 182.64737 5.95334 5.46872 4.93599 5.75240 5.95360 - 0.04778 0.03149 189.13263 6.23075 5.74812 5.21859 6.03065 6.23102 - 0.04810 0.03174 195.55785 6.51009 6.02941 5.50301 6.31080 6.51038 - 0.04840 0.03198 201.70689 6.78169 6.30285 5.77939 6.58317 6.78198 - 0.04869 0.03220 207.55687 7.04391 6.56680 6.04611 6.84611 7.04421 - 0.04899 0.03243 213.48586 7.31350 6.83812 6.32022 7.11642 7.31381 - 0.04163 0.02675 5.15040 0.43649 0.00000 0.00000 0.22804 0.43650 - 0.04200 0.02709 6.80841 0.45436 0.00000 0.00000 0.24723 0.45438 - 0.04255 0.02759 9.59410 0.49027 0.00000 0.00000 0.28502 0.49029 - 0.04295 0.02795 11.82906 0.52388 0.03221 0.00000 0.31997 0.52391 - 0.04337 0.02832 14.38445 0.56626 0.07790 0.00000 0.36373 0.56630 - 0.04374 0.02865 16.75673 0.60879 0.12322 0.00000 0.40742 0.60883 - 0.04409 0.02896 19.17403 0.65489 0.17195 0.00000 0.45462 0.65495 - 0.04447 0.02929 21.88703 0.70964 0.22945 0.00000 0.51051 0.70971 - 0.04480 0.02958 24.36397 0.76216 0.28431 0.00000 0.56401 0.76223 - 0.04512 0.02986 26.85673 0.81727 0.34165 0.00000 0.62005 0.81735 - 0.04537 0.03008 28.90009 0.86403 0.39014 0.00000 0.66753 0.86411 - 0.04592 0.03054 33.44957 0.97291 0.50267 0.00062 0.77793 0.97301 - 0.04639 0.03095 37.42582 1.07671 0.60955 0.10734 0.88302 1.07682 - 0.04693 0.03140 42.05719 1.20349 0.73971 0.24289 1.01121 1.20362 - 0.04749 0.03186 47.06540 1.34705 0.88671 0.39536 1.15620 1.34720 - 0.04801 0.03229 51.76191 1.48747 1.03018 0.54368 1.29790 1.48764 - 0.04853 0.03272 56.63353 1.63882 1.18454 0.70284 1.45050 1.63900 - 0.04897 0.03307 60.76723 1.77161 1.31979 0.84200 1.58432 1.77181 - 0.04951 0.03350 65.87799 1.94120 1.49232 1.01916 1.75514 1.94142 - 0.04998 0.03389 70.47986 2.09890 1.65256 1.18344 1.91390 2.09913 - 0.05043 0.03424 74.75804 2.24967 1.80563 1.34014 2.06563 2.24992 - 0.05099 0.03468 80.25473 2.44917 2.00800 1.54704 2.26633 2.44944 - 0.05152 0.03510 85.48305 2.64490 2.20638 1.74959 2.46316 2.64519 - 0.05203 0.03549 90.42516 2.83520 2.39913 1.94619 2.65449 2.83551 - 0.05254 0.03588 95.39863 3.03187 2.59820 2.14903 2.85216 3.03220 - 0.05304 0.03626 100.29173 3.23041 2.79906 2.35353 3.05167 3.23076 - 0.05351 0.03662 104.93932 3.42359 2.99441 2.55227 3.24577 3.42396 - 0.05397 0.03697 109.32909 3.61021 3.18304 2.74405 3.43323 3.61060 - 0.05442 0.03731 113.74519 3.80200 3.37683 2.94096 3.62585 3.80241 - 0.05488 0.03765 118.08972 3.99471 3.57148 3.13864 3.81937 3.99514 - 0.05531 0.03797 122.21742 4.18148 3.76008 3.33009 4.00691 4.18193 - 0.05573 0.03827 126.11768 4.36129 3.94160 3.51427 4.18744 4.36176 - 0.05614 0.03858 130.04422 4.54565 4.12766 3.70299 4.37251 4.54614 - 0.05656 0.03888 133.90953 4.73037 4.31406 3.89197 4.55793 4.73088 - 0.05696 0.03917 137.58543 4.90911 4.49437 4.07472 4.73733 4.90963 - 0.05734 0.03945 141.06190 5.08089 4.66764 4.25029 4.90974 5.08144 - 0.05773 0.03973 144.56499 5.25674 4.84497 4.42992 5.08621 5.25730 - 0.04768 0.03277 4.50643 0.37823 0.00000 0.00000 0.19783 0.37825 - 0.04815 0.03318 5.88895 0.39389 0.00000 0.00000 0.21461 0.39392 - 0.04886 0.03379 8.16341 0.42468 0.00000 0.00000 0.24700 0.42473 - 0.04938 0.03423 9.95090 0.45297 0.02712 0.00000 0.27644 0.45304 - 0.04992 0.03469 11.96176 0.48814 0.06510 0.00000 0.31278 0.48822 - 0.05040 0.03509 13.80173 0.52298 0.10231 0.00000 0.34861 0.52307 - 0.05086 0.03547 15.65330 0.56034 0.14191 0.00000 0.38690 0.56045 - 0.05136 0.03588 17.70631 0.60423 0.18814 0.00000 0.43178 0.60436 - 0.05179 0.03623 19.55978 0.64594 0.23184 0.00000 0.47431 0.64608 - 0.05221 0.03657 21.40660 0.68933 0.27712 0.00000 0.51850 0.68948 - 0.05254 0.03684 22.90765 0.72587 0.31515 0.00000 0.55566 0.72604 - 0.05326 0.03741 26.21148 0.81013 0.40252 0.00048 0.64122 0.81033 - 0.05389 0.03790 29.04941 0.88951 0.48452 0.08262 0.72170 0.88973 - 0.05460 0.03845 32.30956 0.98537 0.58326 0.18582 0.81877 0.98562 - 0.05535 0.03903 35.78522 1.09265 0.69347 0.30054 0.92727 1.09293 - 0.05603 0.03955 39.00108 1.19642 0.79985 0.41093 1.03214 1.19674 - 0.05673 0.04007 42.29527 1.30713 0.91313 0.52818 1.14392 1.30747 - 0.05731 0.04050 45.05922 1.40338 1.01148 0.62975 1.24106 1.40375 - 0.05802 0.04103 48.43869 1.52521 1.13581 0.75792 1.36393 1.52561 - 0.05866 0.04150 51.44758 1.63747 1.25025 0.87569 1.47711 1.63790 - 0.05925 0.04192 54.21704 1.74394 1.35869 0.98713 1.58441 1.74440 - 0.06000 0.04247 57.73747 1.88364 1.50085 1.13303 1.72514 1.88414 - 0.06071 0.04297 61.04794 2.01948 1.63895 1.27457 1.86193 2.02001 - 0.06139 0.04345 64.14410 2.15046 1.77202 1.41082 1.99380 2.15103 - 0.06206 0.04393 67.22849 2.28476 1.90839 1.55031 2.12897 2.28536 - 0.06273 0.04439 70.23277 2.41932 2.04493 1.68985 2.26436 2.41995 - 0.06337 0.04483 73.05930 2.54930 2.17677 1.82449 2.39512 2.54997 - 0.06398 0.04525 75.70518 2.67402 2.30322 1.95353 2.52057 2.67472 - 0.06459 0.04567 78.34405 2.80137 2.43228 2.08518 2.64864 2.80210 - 0.06519 0.04608 80.91782 2.92852 2.56110 2.21650 2.77650 2.92929 - 0.06577 0.04647 83.34300 3.05101 2.68517 2.34291 2.89965 3.05181 - 0.06633 0.04684 85.61670 3.16827 2.80389 2.46383 3.01753 3.16910 - 0.06689 0.04721 87.88810 3.28783 2.92492 2.58705 3.13771 3.28869 - 0.06744 0.04758 90.10722 3.40698 3.04551 2.70977 3.25746 3.40787 - 0.06797 0.04793 92.20187 3.52166 3.16154 2.82782 3.37272 3.52258 - 0.06848 0.04826 94.16901 3.63134 3.27250 2.94068 3.48294 3.63229 - 0.06900 0.04860 96.13747 3.74307 3.38552 3.05559 3.59521 3.74406 - 0.05176 0.03686 4.16730 0.34837 0.00000 0.00000 0.18235 0.34840 - 0.05232 0.03732 5.40540 0.36289 0.00000 0.00000 0.19789 0.36294 - 0.05315 0.03801 7.41548 0.39102 0.00000 0.00000 0.22749 0.39111 - 0.05377 0.03851 8.97463 0.41658 0.02449 0.00000 0.25409 0.41668 - 0.05442 0.03903 10.71075 0.44803 0.05850 0.00000 0.28662 0.44816 - 0.05499 0.03948 12.28489 0.47894 0.09157 0.00000 0.31843 0.47909 - 0.05554 0.03991 13.85649 0.51186 0.12652 0.00000 0.35220 0.51202 - 0.05613 0.04037 15.58577 0.55027 0.16706 0.00000 0.39151 0.55047 - 0.05664 0.04076 17.13596 0.58654 0.20515 0.00000 0.42854 0.58676 - 0.05714 0.04115 18.67086 0.62408 0.24441 0.00000 0.46680 0.62432 - 0.05754 0.04145 19.91170 0.65555 0.27723 0.00000 0.49883 0.65580 - 0.05840 0.04209 22.62300 0.72766 0.35217 0.00041 0.57214 0.72795 - 0.05915 0.04265 24.92589 0.79509 0.42199 0.07050 0.64057 0.79541 - 0.06000 0.04327 27.54815 0.87594 0.50547 0.15795 0.72253 0.87631 - 0.06090 0.04392 30.31849 0.96575 0.59795 0.25447 0.81346 0.96616 - 0.06171 0.04450 32.85975 1.05204 0.68661 0.34671 0.90075 1.05249 - 0.06255 0.04509 35.44203 1.14349 0.78042 0.44405 0.99320 1.14399 - 0.06325 0.04558 37.59300 1.22255 0.86140 0.52791 1.07307 1.22308 - 0.06410 0.04617 40.20416 1.32206 0.96320 0.63313 1.17354 1.32264 - 0.06486 0.04670 42.51210 1.41324 1.05637 0.72927 1.26556 1.41386 - 0.06557 0.04718 44.62263 1.49929 1.14422 0.81980 1.35237 1.49994 - 0.06647 0.04779 47.28684 1.61160 1.25877 0.93769 1.46563 1.61230 - 0.06732 0.04836 49.77347 1.72018 1.36943 1.05143 1.57509 1.72093 - 0.06813 0.04889 52.08295 1.82435 1.47552 1.16034 1.68007 1.82515 - 0.06894 0.04943 54.36831 1.93063 1.58369 1.27130 1.78715 1.93148 - 0.06974 0.04995 56.57959 2.03660 1.69149 1.38178 1.89390 2.03750 - 0.07050 0.05044 58.64695 2.13851 1.79510 1.48789 1.99653 2.13945 - 0.07122 0.05091 60.57061 2.23588 1.89406 1.58916 2.09457 2.23687 - 0.07196 0.05138 62.47810 2.33491 1.99467 1.69207 2.19427 2.33594 - 0.07268 0.05184 64.32774 2.43338 2.09467 1.79430 2.29339 2.43445 - 0.07337 0.05227 66.06090 2.52788 2.19062 1.89235 2.38851 2.52900 - 0.07403 0.05269 67.67719 2.61803 2.28212 1.98581 2.47923 2.61919 - 0.07470 0.05310 69.28337 2.70962 2.37507 2.08070 2.57140 2.71082 - 0.07536 0.05351 70.84445 2.80059 2.46736 2.17490 2.66293 2.80183 - 0.07599 0.05390 72.31041 2.88786 2.55588 2.26522 2.75073 2.88914 - 0.07660 0.05428 73.68045 2.97106 2.64026 2.35129 2.83443 2.97238 - 0.07721 0.05465 75.04483 3.05556 2.72594 2.43866 2.91944 3.05692 - 0.05502 0.04007 3.94328 0.32887 0.00000 0.00000 0.17226 0.32892 - 0.05565 0.04058 5.08547 0.34264 0.00000 0.00000 0.18699 0.34272 - 0.05661 0.04132 6.92158 0.36904 0.00000 0.00000 0.21476 0.36916 - 0.05731 0.04187 8.33185 0.39279 0.02276 0.00000 0.23949 0.39293 - 0.05805 0.04244 9.89013 0.42182 0.05418 0.00000 0.26953 0.42200 - 0.05870 0.04293 11.29336 0.45016 0.08455 0.00000 0.29872 0.45037 - 0.05933 0.04340 12.68598 0.48019 0.11648 0.00000 0.32955 0.48042 - 0.06001 0.04390 14.20950 0.51506 0.15334 0.00000 0.36525 0.51532 - 0.06060 0.04433 15.56791 0.54782 0.18780 0.00000 0.39873 0.54811 - 0.06117 0.04475 16.90650 0.58159 0.22319 0.00000 0.43319 0.58191 - 0.06163 0.04508 17.98423 0.60980 0.25267 0.00000 0.46193 0.61015 - 0.06262 0.04578 20.32610 0.67416 0.31968 0.00037 0.52741 0.67455 - 0.06348 0.04639 22.29790 0.73399 0.38176 0.06279 0.58819 0.73443 - 0.06445 0.04707 24.52796 0.80536 0.45558 0.14028 0.66059 0.80585 - 0.06547 0.04777 26.86749 0.88419 0.53692 0.22534 0.74049 0.88473 - 0.06641 0.04841 28.99929 0.95953 0.61450 0.30621 0.81677 0.96013 - 0.06737 0.04905 31.15196 1.03900 0.69618 0.39115 0.89718 1.03965 - 0.06817 0.04958 32.93495 1.10741 0.76639 0.46402 0.96635 1.10810 - 0.06914 0.05023 35.08725 1.19313 0.85427 0.55505 1.05299 1.19389 - 0.07001 0.05080 36.97872 1.27135 0.93436 0.63788 1.13200 1.27216 - 0.07082 0.05132 38.69954 1.34489 1.00960 0.71558 1.20626 1.34574 - 0.07185 0.05198 40.85984 1.44048 1.10731 0.81637 1.30275 1.44140 - 0.07282 0.05260 42.86415 1.53251 1.20129 0.91319 1.39562 1.53349 - 0.07374 0.05318 44.71528 1.62045 1.29104 1.00555 1.48432 1.62148 - 0.07467 0.05376 46.53725 1.70983 1.38222 1.09929 1.57447 1.71093 - 0.07558 0.05433 48.29073 1.79863 1.47274 1.19228 1.66401 1.79979 - 0.07645 0.05487 49.92167 1.88373 1.55945 1.28129 1.74979 1.88494 - 0.07728 0.05537 51.43184 1.96478 1.64200 1.36597 1.83148 1.96604 - 0.07811 0.05588 52.92221 2.04695 1.72566 1.45175 1.91429 2.04827 - 0.07893 0.05637 54.36046 2.12841 1.80857 1.53672 1.99636 2.12978 - 0.07972 0.05684 55.70192 2.20635 1.88788 1.61797 2.07489 2.20778 - 0.08046 0.05729 56.94738 2.28050 1.96331 1.69520 2.14959 2.28198 - 0.08122 0.05774 58.17962 2.35563 2.03972 1.77341 2.22527 2.35716 - 0.08197 0.05818 59.37204 2.43006 2.11540 1.85085 2.30023 2.43164 - 0.08269 0.05861 60.48693 2.50127 2.18780 1.92490 2.37195 2.50290 - 0.08338 0.05901 61.52457 2.56900 2.25665 1.99531 2.44016 2.57068 - 0.08407 0.05941 62.55368 2.63763 2.32640 2.06662 2.50927 2.63935 - 0.05772 0.04273 3.77879 0.31470 0.00000 0.00000 0.16494 0.31478 - 0.05843 0.04327 4.85035 0.32794 0.00000 0.00000 0.17908 0.32804 - 0.05949 0.04407 6.55933 0.35307 0.00000 0.00000 0.20552 0.35322 - 0.06027 0.04465 7.86163 0.37551 0.02151 0.00000 0.22889 0.37569 - 0.06110 0.04526 9.29176 0.40278 0.05104 0.00000 0.25712 0.40300 - 0.06182 0.04579 10.57253 0.42926 0.07945 0.00000 0.28441 0.42952 - 0.06252 0.04629 11.83758 0.45719 0.10920 0.00000 0.31311 0.45749 - 0.06327 0.04683 13.21516 0.48950 0.14339 0.00000 0.34622 0.48983 - 0.06393 0.04729 14.43820 0.51975 0.17526 0.00000 0.37715 0.52011 - 0.06457 0.04774 15.63881 0.55082 0.20787 0.00000 0.40887 0.55122 - 0.06508 0.04809 16.60230 0.57671 0.23496 0.00000 0.43527 0.57713 - 0.06618 0.04884 18.68669 0.63554 0.29632 0.00034 0.49517 0.63603 - 0.06713 0.04949 20.42936 0.68999 0.35291 0.05732 0.55053 0.69053 - 0.06822 0.05022 22.38960 0.75466 0.41992 0.12777 0.61620 0.75526 - 0.06935 0.05097 24.43460 0.82578 0.49344 0.20478 0.68833 0.82645 - 0.07040 0.05165 26.28814 0.89347 0.56326 0.27769 0.75693 0.89420 - 0.07146 0.05234 28.15049 0.96460 0.63650 0.35399 0.82896 0.96539 - 0.07235 0.05291 29.68606 1.02561 0.69924 0.41922 0.89071 1.02646 - 0.07343 0.05360 31.53139 1.10182 0.77751 0.50045 0.96779 1.10274 - 0.07440 0.05421 33.14566 1.17112 0.84860 0.57411 1.03785 1.17210 - 0.07530 0.05476 34.60829 1.23608 0.91518 0.64301 1.10351 1.23712 - 0.07644 0.05547 36.43635 1.32026 1.00138 0.73210 1.18855 1.32137 - 0.07752 0.05613 38.12432 1.40102 1.08402 0.81740 1.27011 1.40220 - 0.07854 0.05675 39.67632 1.47796 1.16270 0.89852 1.34779 1.47921 - 0.07957 0.05737 41.19726 1.55593 1.24238 0.98062 1.42650 1.55725 - 0.08058 0.05797 42.65473 1.63317 1.32128 1.06183 1.50445 1.63456 - 0.08154 0.05854 44.00474 1.70700 1.39665 1.13936 1.57894 1.70845 - 0.08245 0.05907 45.24985 1.77713 1.46822 1.21293 1.64968 1.77864 - 0.08337 0.05961 46.47392 1.84805 1.54058 1.28728 1.72122 1.84963 - 0.08428 0.06014 47.65060 1.91820 1.61212 1.36075 1.79196 1.91984 - 0.08515 0.06064 48.74395 1.98516 1.68040 1.43085 1.85950 1.98687 - 0.08597 0.06112 49.75541 2.04873 1.74520 1.49734 1.92359 2.05050 - 0.08681 0.06159 50.75253 2.11300 1.81071 1.56454 1.98840 2.11483 - 0.08763 0.06206 51.71397 2.17654 1.87545 1.63093 2.05246 2.17843 - 0.08843 0.06251 52.60968 2.23722 1.93727 1.69431 2.11362 2.23916 - 0.08918 0.06294 53.44049 2.29482 1.99595 1.75445 2.17168 2.29681 - 0.08995 0.06336 54.26169 2.35307 2.05528 1.81525 2.23040 2.35512 - 0.06794 0.05219 3.32287 0.27537 0.00000 0.00000 0.14466 0.27557 - 0.06896 0.05288 4.19249 0.28713 0.00000 0.00000 0.15721 0.28739 - 0.07049 0.05388 5.54340 0.30872 0.00000 0.00000 0.17995 0.30908 - 0.07162 0.05461 6.54571 0.32748 0.01801 0.00000 0.19953 0.32791 - 0.07281 0.05537 7.62371 0.34982 0.04230 0.00000 0.22270 0.35032 - 0.07386 0.05603 8.57133 0.37113 0.06528 0.00000 0.24473 0.37170 - 0.07486 0.05666 9.49230 0.39328 0.08900 0.00000 0.26756 0.39392 - 0.07594 0.05732 10.47950 0.41854 0.11590 0.00000 0.29352 0.41925 - 0.07688 0.05790 11.34317 0.44189 0.14066 0.00000 0.31748 0.44266 - 0.07780 0.05846 12.17996 0.46561 0.16572 0.00000 0.34177 0.46644 - 0.07853 0.05890 12.84397 0.48519 0.18634 0.00000 0.36180 0.48607 - 0.08010 0.05983 14.25869 0.52911 0.23247 0.00025 0.40667 0.53010 - 0.08146 0.06064 15.41185 0.56914 0.27438 0.04267 0.44752 0.57023 - 0.08300 0.06154 16.68438 0.61600 0.32330 0.09441 0.49526 0.61720 - 0.08462 0.06247 17.98583 0.66677 0.37617 0.15015 0.54694 0.66808 - 0.08609 0.06331 19.14318 0.71440 0.42569 0.20221 0.59539 0.71583 - 0.08759 0.06416 20.28525 0.76381 0.47696 0.25600 0.64561 0.76535 - 0.08885 0.06486 21.21159 0.80570 0.52038 0.30146 0.68816 0.80733 - 0.09037 0.06571 22.30664 0.85742 0.57393 0.35744 0.74067 0.85916 - 0.09173 0.06645 23.24849 0.90390 0.62201 0.40764 0.78785 0.90576 - 0.09298 0.06714 24.08894 0.94704 0.66659 0.45412 0.83162 0.94899 - 0.09457 0.06800 25.12208 1.00232 0.72369 0.51359 0.88769 1.00440 - 0.09607 0.06880 26.05892 1.05476 0.77780 0.56989 0.94086 1.05695 - 0.09748 0.06956 26.90561 1.10417 0.82878 0.62288 0.99095 1.10647 - 0.09890 0.07030 27.72158 1.15375 0.87989 0.67598 1.04120 1.15616 - 0.10029 0.07103 28.49040 1.20236 0.93000 0.72799 1.09046 1.20489 - 0.10161 0.07172 29.19095 1.24839 0.97742 0.77719 1.13710 1.25102 - 0.10286 0.07237 29.82691 1.29172 1.02206 0.82349 1.18100 1.29446 - 0.10411 0.07301 30.44246 1.33518 1.06682 0.86988 1.22503 1.33802 - 0.10535 0.07365 31.02482 1.37780 1.11070 0.91535 1.26820 1.38073 - 0.10653 0.07425 31.55755 1.41815 1.15226 0.95840 1.30908 1.42119 - 0.10764 0.07481 32.04296 1.45617 1.19139 0.99893 1.34758 1.45929 - 0.10877 0.07538 32.51421 1.49432 1.23067 1.03960 1.38623 1.49754 - 0.10989 0.07594 32.96166 1.53176 1.26922 1.07950 1.42415 1.53507 - 0.11096 0.07647 33.37206 1.56725 1.30576 1.11732 1.46010 1.57065 - 0.11197 0.07698 33.74701 1.60072 1.34021 1.15299 1.49400 1.60421 - 0.11299 0.07748 34.11201 1.63435 1.37483 1.18881 1.52807 1.63792 - 0.08231 0.06391 2.95777 0.24233 0.00000 0.00000 0.12778 0.24292 - 0.08384 0.06478 3.64843 0.25286 0.00000 0.00000 0.13903 0.25357 - 0.08612 0.06606 4.69052 0.27143 0.00000 0.00000 0.15864 0.27232 - 0.08780 0.06699 5.44040 0.28704 0.01506 0.00000 0.17500 0.28806 - 0.08958 0.06796 6.22800 0.30517 0.03495 0.00000 0.19391 0.30634 - 0.09112 0.06879 6.90575 0.32211 0.05340 0.00000 0.21151 0.32340 - 0.09260 0.06959 7.55226 0.33941 0.07212 0.00000 0.22943 0.34083 - 0.09418 0.07044 8.23271 0.35882 0.09301 0.00000 0.24950 0.36037 - 0.09557 0.07116 8.81788 0.37649 0.11196 0.00000 0.26773 0.37816 - 0.09691 0.07187 9.37617 0.39421 0.13090 0.00000 0.28599 0.39599 - 0.09797 0.07242 9.81333 0.40867 0.14632 0.00000 0.30087 0.41054 - 0.10024 0.07360 10.72795 0.44065 0.18032 0.00018 0.33375 0.44271 - 0.10222 0.07460 11.44966 0.46928 0.21067 0.03115 0.36314 0.47151 - 0.10443 0.07573 12.22743 0.50223 0.24553 0.06833 0.39693 0.50466 - 0.10674 0.07689 13.00342 0.53731 0.28256 0.10773 0.43288 0.53994 - 0.10884 0.07793 13.67704 0.56970 0.31669 0.14397 0.46604 0.57251 - 0.11097 0.07898 14.32654 0.60278 0.35151 0.18086 0.49989 0.60578 - 0.11273 0.07984 14.84218 0.63044 0.38061 0.21165 0.52819 0.63360 - 0.11487 0.08088 15.43860 0.66415 0.41603 0.24909 0.56266 0.66750 - 0.11677 0.08179 15.93998 0.69403 0.44742 0.28222 0.59321 0.69756 - 0.11851 0.08262 16.37811 0.72143 0.47618 0.31257 0.62122 0.72511 - 0.12071 0.08366 16.90435 0.75610 0.51257 0.35092 0.65665 0.75998 - 0.12278 0.08463 17.36934 0.78854 0.54660 0.38676 0.68979 0.79261 - 0.12472 0.08554 17.77913 0.81872 0.57826 0.42010 0.72063 0.82296 - 0.12665 0.08644 18.16429 0.84863 0.60964 0.45312 0.75120 0.85306 - 0.12854 0.08731 18.51786 0.87762 0.64005 0.48511 0.78082 0.88221 - 0.13033 0.08813 18.83179 0.90475 0.66852 0.51506 0.80855 0.90951 - 0.13201 0.08889 19.10953 0.93002 0.69505 0.54295 0.83438 0.93494 - 0.13369 0.08965 19.37145 0.95510 0.72138 0.57065 0.86002 0.96017 - 0.13534 0.09040 19.61252 0.97945 0.74694 0.59753 0.88490 0.98467 - 0.13691 0.09110 19.82699 1.00227 0.77092 0.62275 0.90824 1.00764 - 0.13839 0.09176 20.01704 1.02357 0.79331 0.64629 0.93003 1.02908 - 0.13989 0.09243 20.19625 1.04475 0.81558 0.66972 0.95169 1.05040 - 0.14135 0.09307 20.36129 1.06535 0.83724 0.69252 0.97276 1.07113 - 0.14275 0.09369 20.50790 1.08470 0.85761 0.71395 0.99257 1.09061 - 0.14408 0.09427 20.63760 1.10280 0.87666 0.73400 1.01109 1.10883 - 0.14541 0.09485 20.75964 1.12082 0.89565 0.75400 1.02954 1.12698 - 0.09402 0.07221 2.79352 0.22537 0.00000 0.00000 0.11922 0.22648 - 0.09598 0.07323 3.38785 0.23525 0.00000 0.00000 0.12981 0.23654 - 0.09890 0.07472 4.26803 0.25222 0.00000 0.00000 0.14780 0.25376 - 0.10103 0.07580 4.88859 0.26615 0.01355 0.00000 0.16248 0.26790 - 0.10328 0.07693 5.53019 0.28208 0.03119 0.00000 0.17917 0.28403 - 0.10523 0.07790 6.07452 0.29675 0.04732 0.00000 0.19449 0.29888 - 0.10710 0.07882 6.58728 0.31155 0.06351 0.00000 0.20992 0.31386 - 0.10909 0.07979 7.12031 0.32797 0.08138 0.00000 0.22699 0.33046 - 0.11082 0.08063 7.57336 0.34277 0.09744 0.00000 0.24236 0.34543 - 0.11249 0.08144 8.00101 0.35748 0.11335 0.00000 0.25761 0.36030 - 0.11382 0.08208 8.33279 0.36940 0.12622 0.00000 0.26995 0.37234 - 0.11664 0.08342 9.01814 0.39550 0.15431 0.00015 0.29694 0.39871 - 0.11908 0.08457 9.54571 0.41858 0.17909 0.02560 0.32079 0.42203 - 0.12181 0.08585 10.10441 0.44485 0.20724 0.05585 0.34790 0.44856 - 0.12465 0.08716 10.65160 0.47249 0.23681 0.08756 0.37641 0.47646 - 0.12722 0.08834 11.11793 0.49771 0.26378 0.11642 0.40242 0.50194 - 0.12980 0.08952 11.55952 0.52322 0.29102 0.14553 0.42870 0.52769 - 0.13194 0.09049 11.90416 0.54435 0.31358 0.16961 0.45048 0.54903 - 0.13453 0.09165 12.29578 0.56985 0.34080 0.19865 0.47676 0.57479 - 0.13681 0.09266 12.61879 0.59226 0.36471 0.22414 0.49984 0.59742 - 0.13889 0.09359 12.89603 0.61263 0.38645 0.24730 0.52083 0.61799 - 0.14152 0.09474 13.22230 0.63818 0.41371 0.27635 0.54715 0.64380 - 0.14399 0.09582 13.50389 0.66185 0.43899 0.30326 0.57154 0.66771 - 0.14628 0.09681 13.74624 0.68368 0.46231 0.32809 0.59404 0.68977 - 0.14857 0.09780 13.96850 0.70513 0.48524 0.35250 0.61616 0.71144 - 0.15079 0.09875 14.16720 0.72574 0.50728 0.37598 0.63741 0.73227 - 0.15288 0.09964 14.33884 0.74487 0.52776 0.39779 0.65715 0.75160 - 0.15485 0.10047 14.48640 0.76255 0.54671 0.41798 0.67540 0.76948 - 0.15681 0.10129 14.62139 0.77997 0.56539 0.43789 0.69339 0.78709 - 0.15873 0.10210 14.74151 0.79675 0.58340 0.45709 0.71072 0.80405 - 0.16054 0.10285 14.84458 0.81237 0.60019 0.47500 0.72686 0.81985 - 0.16225 0.10356 14.93246 0.82684 0.61576 0.49162 0.74182 0.83449 - 0.16397 0.10427 15.01185 0.84113 0.63115 0.50805 0.75661 0.84894 - 0.16565 0.10496 15.08153 0.85493 0.64603 0.52396 0.77090 0.86291 - 0.16725 0.10561 15.14013 0.86781 0.65994 0.53883 0.78424 0.87594 - 0.16876 0.10622 15.18895 0.87977 0.67287 0.55267 0.79663 0.88805 - 0.17028 0.10684 15.23181 0.89161 0.68569 0.56640 0.80891 0.90004 - 0.10465 0.07901 2.70233 0.21414 0.00000 0.00000 0.11364 0.21589 - 0.10700 0.08016 3.23114 0.22356 0.00000 0.00000 0.12377 0.22554 - 0.11046 0.08183 4.00325 0.23941 0.00000 0.00000 0.14066 0.24173 - 0.11299 0.08303 4.53893 0.25220 0.01255 0.00000 0.15420 0.25478 - 0.11565 0.08429 5.08598 0.26663 0.02870 0.00000 0.16941 0.26947 - 0.11795 0.08537 5.54494 0.27978 0.04331 0.00000 0.18323 0.28285 - 0.12014 0.08639 5.97300 0.29293 0.05785 0.00000 0.19701 0.29622 - 0.12247 0.08747 6.41359 0.30738 0.07378 0.00000 0.21213 0.31091 - 0.12450 0.08839 6.78453 0.32031 0.08797 0.00000 0.22563 0.32405 - 0.12645 0.08928 7.13165 0.33307 0.10194 0.00000 0.23894 0.33701 - 0.12799 0.08998 7.39892 0.34335 0.11317 0.00000 0.24966 0.34744 - 0.13127 0.09146 7.94522 0.36568 0.13752 0.00013 0.27290 0.37010 - 0.13409 0.09272 8.35658 0.38525 0.15880 0.02212 0.29325 0.38996 - 0.13724 0.09411 8.78565 0.40731 0.18277 0.04805 0.31618 0.41234 - 0.14049 0.09554 9.19906 0.43030 0.20773 0.07500 0.34006 0.43567 - 0.14343 0.09682 9.54558 0.45110 0.23030 0.09934 0.36167 0.45677 - 0.14638 0.09809 9.86830 0.47196 0.25292 0.12371 0.38332 0.47793 - 0.14881 0.09914 10.11614 0.48911 0.27152 0.14374 0.40113 0.49532 - 0.15174 0.10038 10.39297 0.50965 0.29381 0.16772 0.42247 0.51617 - 0.15431 0.10147 10.61702 0.52756 0.31325 0.18864 0.44108 0.53434 - 0.15666 0.10246 10.80583 0.54374 0.33082 0.20754 0.45788 0.55076 - 0.15961 0.10369 11.02331 0.56387 0.35271 0.23109 0.47881 0.57119 - 0.16236 0.10483 11.20622 0.58238 0.37285 0.25276 0.49806 0.58998 - 0.16492 0.10588 11.35943 0.59932 0.39131 0.27263 0.51569 0.60718 - 0.16746 0.10691 11.49586 0.61585 0.40935 0.29205 0.53290 0.62397 - 0.16992 0.10791 11.61383 0.63161 0.42658 0.31062 0.54932 0.63998 - 0.17223 0.10885 11.71203 0.64614 0.44249 0.32777 0.56448 0.65474 - 0.17439 0.10971 11.79309 0.65948 0.45712 0.34356 0.57840 0.66830 - 0.17655 0.11057 11.86387 0.67254 0.47147 0.35906 0.59204 0.68157 - 0.17865 0.11140 11.92343 0.68503 0.48522 0.37392 0.60510 0.69428 - 0.18063 0.11218 11.97128 0.69658 0.49796 0.38772 0.61719 0.70603 - 0.18249 0.11291 12.00902 0.70723 0.50973 0.40046 0.62834 0.71686 - 0.18435 0.11364 12.03991 0.71767 0.52130 0.41300 0.63929 0.72748 - 0.18618 0.11435 12.06372 0.72769 0.53242 0.42508 0.64981 0.73769 - 0.18791 0.11501 12.08043 0.73698 0.54277 0.43632 0.65957 0.74715 - 0.18953 0.11564 12.09115 0.74556 0.55234 0.44674 0.66860 0.75589 - 0.19117 0.11626 12.09709 0.75401 0.56179 0.45703 0.67749 0.76450 - 0.11466 0.08495 2.64712 0.20575 0.00000 0.00000 0.10953 0.20824 - 0.11735 0.08620 3.12633 0.21481 0.00000 0.00000 0.11931 0.21757 - 0.12131 0.08803 3.81792 0.22978 0.00000 0.00000 0.13535 0.23296 - 0.12419 0.08934 4.29118 0.24170 0.01180 0.00000 0.14804 0.24519 - 0.12721 0.09071 4.76946 0.25500 0.02685 0.00000 0.16214 0.25881 - 0.12980 0.09188 5.16694 0.26700 0.04035 0.00000 0.17483 0.27109 - 0.13229 0.09298 5.53451 0.27892 0.05368 0.00000 0.18739 0.28327 - 0.13491 0.09415 5.90960 0.29192 0.06818 0.00000 0.20109 0.29656 - 0.13719 0.09515 6.22280 0.30348 0.08102 0.00000 0.21323 0.30835 - 0.13937 0.09610 6.51367 0.31481 0.09359 0.00000 0.22513 0.31992 - 0.14110 0.09686 6.73612 0.32390 0.10365 0.00000 0.23467 0.32919 - 0.14476 0.09844 7.18655 0.34351 0.12532 0.00012 0.25522 0.34919 - 0.14790 0.09979 7.51867 0.36056 0.14413 0.01965 0.27307 0.36658 - 0.15140 0.10127 7.86016 0.37963 0.16515 0.04254 0.29304 0.38602 - 0.15500 0.10279 8.18410 0.39935 0.18687 0.06616 0.31367 0.40612 - 0.15823 0.10414 8.45125 0.41705 0.20638 0.08736 0.33220 0.42416 - 0.16147 0.10548 8.69593 0.43466 0.22580 0.10844 0.35064 0.44212 - 0.16414 0.10658 8.88076 0.44906 0.24168 0.12568 0.36571 0.45680 - 0.16734 0.10789 9.08351 0.46619 0.26060 0.14621 0.38366 0.47427 - 0.17014 0.10903 9.24425 0.48102 0.27700 0.16402 0.39921 0.48939 - 0.17269 0.11005 9.37694 0.49434 0.29175 0.18002 0.41317 0.50298 - 0.17589 0.11133 9.52597 0.51080 0.31001 0.19986 0.43046 0.51978 - 0.17886 0.11251 9.64741 0.52583 0.32671 0.21802 0.44625 0.53512 - 0.18162 0.11360 9.74561 0.53950 0.34193 0.23458 0.46062 0.54907 - 0.18434 0.11467 9.82957 0.55274 0.35672 0.25069 0.47456 0.56259 - 0.18698 0.11569 9.89863 0.56528 0.37077 0.26601 0.48779 0.57541 - 0.18944 0.11664 9.95279 0.57678 0.38367 0.28009 0.49992 0.58716 - 0.19174 0.11753 9.99432 0.58726 0.39548 0.29300 0.51100 0.59788 - 0.19403 0.11840 10.02729 0.59746 0.40700 0.30561 0.52180 0.60831 - 0.19626 0.11924 10.05153 0.60716 0.41799 0.31765 0.53208 0.61824 - 0.19835 0.12003 10.06749 0.61608 0.42812 0.32878 0.54154 0.62736 - 0.20031 0.12077 10.07655 0.62424 0.43743 0.33902 0.55022 0.63572 - 0.20227 0.12150 10.07997 0.63220 0.44654 0.34906 0.55870 0.64388 - 0.20419 0.12221 10.07808 0.63979 0.45527 0.35868 0.56680 0.65167 - 0.20599 0.12287 10.07156 0.64679 0.46334 0.36761 0.57428 0.65885 - 0.20769 0.12349 10.06137 0.65322 0.47078 0.37585 0.58116 0.66544 - 0.20940 0.12412 10.04726 0.65950 0.47809 0.38396 0.58790 0.67189 - 0.13362 0.09532 2.59019 0.19337 0.00000 0.00000 0.10359 0.19757 - 0.13689 0.09676 2.99594 0.20181 0.00000 0.00000 0.11282 0.20639 - 0.14170 0.09884 3.57047 0.21542 0.00000 0.00000 0.12756 0.22055 - 0.14517 0.10033 3.95441 0.22601 0.01070 0.00000 0.13897 0.23154 - 0.14879 0.10187 4.33560 0.23762 0.02415 0.00000 0.15144 0.24357 - 0.15189 0.10318 4.64727 0.24795 0.03604 0.00000 0.16249 0.25425 - 0.15484 0.10442 4.93126 0.25807 0.04765 0.00000 0.17330 0.26470 - 0.15795 0.10572 5.21673 0.26898 0.06013 0.00000 0.18494 0.27597 - 0.16064 0.10683 5.45162 0.27857 0.07107 0.00000 0.19516 0.28586 - 0.16321 0.10789 5.66679 0.28788 0.08169 0.00000 0.20508 0.29547 - 0.16523 0.10871 5.82935 0.29529 0.09012 0.00000 0.21296 0.30310 - 0.16950 0.11045 6.15285 0.31110 0.10809 0.00010 0.22977 0.31939 - 0.17314 0.11192 6.38137 0.32465 0.12349 0.01628 0.24417 0.33335 - 0.17717 0.11353 6.60971 0.33961 0.14050 0.03503 0.26008 0.34876 - 0.18129 0.11517 6.81942 0.35487 0.15787 0.05417 0.27631 0.36448 - 0.18498 0.11662 6.98645 0.36838 0.17328 0.07115 0.29070 0.37840 - 0.18865 0.11805 7.13380 0.38166 0.18846 0.08788 0.30485 0.39208 - 0.19165 0.11921 7.24084 0.39239 0.20075 0.10143 0.31630 0.40313 - 0.19524 0.12059 7.35309 0.40501 0.21524 0.11742 0.32977 0.41614 - 0.19837 0.12178 7.43736 0.41580 0.22768 0.13117 0.34132 0.42728 - 0.20120 0.12285 7.50293 0.42539 0.23876 0.14343 0.35159 0.43716 - 0.20473 0.12418 7.57103 0.43710 0.25236 0.15849 0.36416 0.44925 - 0.20800 0.12539 7.62069 0.44765 0.26466 0.17214 0.37551 0.46015 - 0.21100 0.12650 7.65544 0.45712 0.27576 0.18449 0.38572 0.46994 - 0.21396 0.12758 7.67961 0.46619 0.28644 0.19639 0.39552 0.47931 - 0.21681 0.12861 7.69367 0.47467 0.29649 0.20761 0.40471 0.48809 - 0.21946 0.12957 7.69889 0.48234 0.30564 0.21785 0.41304 0.49603 - 0.22192 0.13045 7.69707 0.48926 0.31393 0.22716 0.42058 0.50320 - 0.22436 0.13131 7.68912 0.49591 0.32195 0.23619 0.42784 0.51009 - 0.22672 0.13214 7.67565 0.50215 0.32953 0.24475 0.43469 0.51657 - 0.22893 0.13291 7.65803 0.50781 0.33646 0.25260 0.44092 0.52246 - 0.23099 0.13362 7.63731 0.51293 0.34278 0.25977 0.44657 0.52778 - 0.23304 0.13433 7.61264 0.51786 0.34890 0.26675 0.45204 0.53292 - 0.23503 0.13501 7.58487 0.52251 0.35472 0.27341 0.45721 0.53776 - 0.23691 0.13564 7.55535 0.52673 0.36006 0.27953 0.46193 0.54217 - 0.23866 0.13623 7.52480 0.53056 0.36493 0.28514 0.46622 0.54616 - 0.24042 0.13682 7.49154 0.53425 0.36968 0.29063 0.47038 0.55002 - 0.16049 0.10878 2.56212 0.18004 0.00000 0.00000 0.09746 0.18729 - 0.16447 0.11042 2.89068 0.18774 0.00000 0.00000 0.10602 0.19548 - 0.17027 0.11278 3.34528 0.19978 0.00000 0.00000 0.11931 0.20823 - 0.17443 0.11446 3.63972 0.20891 0.00955 0.00000 0.12933 0.21786 - 0.17874 0.11619 3.92535 0.21872 0.02134 0.00000 0.14008 0.22820 - 0.18240 0.11765 4.15396 0.22730 0.03160 0.00000 0.14944 0.23721 - 0.18588 0.11902 4.35817 0.23557 0.04148 0.00000 0.15847 0.24589 - 0.18951 0.12044 4.55924 0.24436 0.05196 0.00000 0.16805 0.25512 - 0.19263 0.12166 4.72131 0.25198 0.06103 0.00000 0.17635 0.26310 - 0.19561 0.12281 4.86689 0.25930 0.06975 0.00000 0.18432 0.27077 - 0.19794 0.12370 4.97491 0.26505 0.07660 0.00000 0.19059 0.27680 - 0.20284 0.12557 5.18430 0.27717 0.09104 0.00008 0.20379 0.28948 - 0.20698 0.12714 5.32146 0.28738 0.10324 0.01310 0.21492 0.30017 - 0.21152 0.12884 5.45166 0.29847 0.11652 0.02800 0.22702 0.31177 - 0.21614 0.13056 5.56407 0.30956 0.12987 0.04300 0.23915 0.32338 - 0.22025 0.13206 5.64727 0.31922 0.14155 0.05614 0.24974 0.33349 - 0.22429 0.13353 5.71450 0.32856 0.15290 0.06893 0.26000 0.34327 - 0.22758 0.13471 5.75853 0.33597 0.16198 0.07918 0.26818 0.35104 - 0.23149 0.13610 5.79865 0.34456 0.17256 0.09115 0.27767 0.36005 - 0.23487 0.13730 5.82300 0.35179 0.18153 0.10133 0.28569 0.36763 - 0.23790 0.13836 5.83683 0.35810 0.18942 0.11031 0.29272 0.37426 - 0.24167 0.13966 5.84366 0.36568 0.19899 0.12124 0.30120 0.38224 - 0.24512 0.14084 5.84007 0.37238 0.20754 0.13103 0.30873 0.38929 - 0.24828 0.14190 5.82871 0.37827 0.21515 0.13979 0.31540 0.39550 - 0.25136 0.14293 5.81033 0.38381 0.22238 0.14814 0.32169 0.40135 - 0.25430 0.14391 5.78611 0.38888 0.22909 0.15594 0.32750 0.40671 - 0.25703 0.14480 5.75805 0.39338 0.23513 0.16299 0.33269 0.41148 - 0.25954 0.14561 5.72743 0.39735 0.24054 0.16933 0.33730 0.41569 - 0.26200 0.14639 5.69295 0.40109 0.24571 0.17542 0.34167 0.41966 - 0.26438 0.14714 5.65569 0.40452 0.25053 0.18114 0.34571 0.42331 - 0.26659 0.14783 5.61748 0.40756 0.25489 0.18634 0.34934 0.42655 - 0.26863 0.14847 5.57905 0.41024 0.25881 0.19104 0.35257 0.42942 - 0.27065 0.14908 5.53820 0.41276 0.26257 0.19558 0.35563 0.43213 - 0.27261 0.14967 5.49605 0.41507 0.26610 0.19987 0.35848 0.43461 - 0.27443 0.15022 5.45426 0.41711 0.26929 0.20378 0.36102 0.43682 - 0.27613 0.15072 5.41332 0.41891 0.27217 0.20733 0.36329 0.43876 - 0.27782 0.15121 5.37074 0.42059 0.27494 0.21077 0.36545 0.44059 - 0.20278 0.12836 2.55725 0.16360 0.00000 0.00000 0.09033 0.17669 - 0.20758 0.13021 2.79742 0.17025 0.00000 0.00000 0.09795 0.18394 - 0.21450 0.13284 3.11885 0.18029 0.00000 0.00000 0.10939 0.19485 - 0.21940 0.13468 3.31664 0.18766 0.00819 0.00000 0.11776 0.20282 - 0.22444 0.13656 3.50144 0.19538 0.01810 0.00000 0.12650 0.21114 - 0.22868 0.13813 3.64420 0.20196 0.02654 0.00000 0.13396 0.21822 - 0.23268 0.13958 3.76741 0.20818 0.03453 0.00000 0.14100 0.22491 - 0.23682 0.14109 3.88430 0.21466 0.04287 0.00000 0.14835 0.23187 - 0.24035 0.14236 3.97492 0.22017 0.04998 0.00000 0.15461 0.23779 - 0.24369 0.14355 4.05321 0.22538 0.05671 0.00000 0.16052 0.24337 - 0.24629 0.14447 4.10916 0.22941 0.06195 0.00000 0.16511 0.24770 - 0.25171 0.14637 4.21151 0.23774 0.07280 0.00006 0.17460 0.25662 - 0.25624 0.14793 4.26515 0.24458 0.08179 0.00991 0.18242 0.26395 - 0.26115 0.14961 4.30770 0.25181 0.09139 0.02101 0.19073 0.27170 - 0.26609 0.15126 4.33535 0.25885 0.10086 0.03198 0.19887 0.27925 - 0.27042 0.15270 4.34732 0.26480 0.10898 0.04144 0.20580 0.28564 - 0.27464 0.15407 4.34812 0.27039 0.11673 0.05050 0.21236 0.29165 - 0.27803 0.15516 4.34110 0.27471 0.12282 0.05766 0.21748 0.29630 - 0.28202 0.15642 4.32420 0.27958 0.12980 0.06591 0.22329 0.30154 - 0.28543 0.15748 4.30242 0.28355 0.13561 0.07282 0.22808 0.30583 - 0.28845 0.15840 4.27743 0.28692 0.14064 0.07884 0.23218 0.30947 - 0.29216 0.15952 4.23961 0.29082 0.14664 0.08606 0.23701 0.31370 - 0.29552 0.16051 4.19856 0.29414 0.15189 0.09243 0.24117 0.31730 - 0.29855 0.16138 4.15589 0.29693 0.15647 0.09804 0.24475 0.32035 - 0.30148 0.16221 4.10973 0.29944 0.16074 0.10332 0.24802 0.32309 - 0.30423 0.16297 4.06158 0.30163 0.16463 0.10818 0.25095 0.32550 - 0.30675 0.16365 4.01368 0.30346 0.16806 0.11251 0.25347 0.32752 - 0.30904 0.16425 3.96674 0.30499 0.17107 0.11635 0.25564 0.32922 - 0.31127 0.16482 3.91809 0.30634 0.17389 0.11999 0.25761 0.33073 - 0.31338 0.16535 3.86896 0.30749 0.17647 0.12337 0.25937 0.33202 - 0.31533 0.16583 3.82129 0.30842 0.17875 0.12639 0.26088 0.33308 - 0.31711 0.16625 3.77544 0.30916 0.18076 0.12909 0.26216 0.33394 - 0.31884 0.16665 3.72859 0.30978 0.18264 0.13166 0.26331 0.33466 - 0.32050 0.16702 3.68186 0.31027 0.18436 0.13405 0.26432 0.33525 - 0.32203 0.16735 3.63693 0.31063 0.18588 0.13620 0.26517 0.33569 - 0.32343 0.16765 3.59403 0.31087 0.18722 0.13812 0.26587 0.33601 - 0.32481 0.16793 3.55046 0.31103 0.18847 0.13996 0.26648 0.33623 - 0.24275 0.14588 2.55219 0.15029 0.00000 0.00000 0.08487 0.16963 - 0.24803 0.14780 2.72880 0.15605 0.00000 0.00000 0.09167 0.17602 - 0.25555 0.15050 2.95737 0.16451 0.00000 0.00000 0.10161 0.18536 - 0.26083 0.15236 3.08975 0.17056 0.00717 0.00000 0.10872 0.19201 - 0.26621 0.15424 3.20793 0.17675 0.01570 0.00000 0.11599 0.19880 - 0.27072 0.15579 3.29521 0.18193 0.02286 0.00000 0.12208 0.20446 - 0.27491 0.15722 3.36709 0.18673 0.02955 0.00000 0.12775 0.20971 - 0.27924 0.15868 3.43166 0.19165 0.03643 0.00000 0.13357 0.21508 - 0.28289 0.15989 3.47866 0.19576 0.04223 0.00000 0.13845 0.21956 - 0.28633 0.16102 3.51655 0.19958 0.04766 0.00000 0.14300 0.22373 - 0.28899 0.16189 3.54169 0.20250 0.05184 0.00000 0.14649 0.22691 - 0.29447 0.16364 3.58196 0.20842 0.06041 0.00005 0.15359 0.23334 - 0.29901 0.16507 3.58875 0.21315 0.06738 0.00790 0.15933 0.23849 - 0.30387 0.16656 3.58349 0.21802 0.07472 0.01662 0.16529 0.24379 - 0.30870 0.16801 3.56631 0.22262 0.08183 0.02513 0.17100 0.24880 - 0.31288 0.16924 3.54182 0.22638 0.08783 0.03237 0.17574 0.25290 - 0.31691 0.17039 3.50972 0.22980 0.09346 0.03922 0.18012 0.25663 - 0.32011 0.17128 3.47821 0.23236 0.09783 0.04456 0.18346 0.25942 - 0.32382 0.17228 3.43492 0.23512 0.10276 0.05065 0.18716 0.26245 - 0.32695 0.17311 3.39265 0.23728 0.10679 0.05569 0.19012 0.26481 - 0.32969 0.17381 3.35110 0.23904 0.11024 0.06004 0.19260 0.26674 - 0.33301 0.17462 3.29517 0.24096 0.11427 0.06519 0.19541 0.26885 - 0.33597 0.17532 3.23986 0.24247 0.11773 0.06967 0.19775 0.27052 - 0.33860 0.17591 3.18614 0.24364 0.12070 0.07358 0.19967 0.27183 - 0.34110 0.17645 3.13097 0.24459 0.12342 0.07720 0.20135 0.27288 - 0.34342 0.17692 3.07588 0.24530 0.12584 0.08050 0.20278 0.27370 - 0.34550 0.17732 3.02300 0.24580 0.12793 0.08340 0.20393 0.27427 - 0.34736 0.17765 2.97269 0.24612 0.12972 0.08594 0.20486 0.27465 - 0.34915 0.17795 2.92184 0.24631 0.13136 0.08832 0.20564 0.27487 - 0.35081 0.17820 2.87168 0.24635 0.13283 0.09050 0.20626 0.27495 - 0.35230 0.17841 2.82396 0.24628 0.13409 0.09242 0.20674 0.27491 - 0.35365 0.17858 2.77887 0.24612 0.13517 0.09412 0.20707 0.27475 - 0.35494 0.17872 2.73351 0.24586 0.13615 0.09571 0.20731 0.27450 - 0.35615 0.17884 2.68894 0.24552 0.13702 0.09717 0.20746 0.27416 - 0.35724 0.17892 2.64665 0.24512 0.13775 0.09847 0.20751 0.27374 - 0.35822 0.17898 2.60676 0.24467 0.13838 0.09962 0.20749 0.27328 - 0.35916 0.17901 2.56670 0.24416 0.13893 0.10069 0.20740 0.27274 - 0.31642 0.17671 2.49090 0.12805 0.00000 0.00000 0.07606 0.15947 - 0.32189 0.17846 2.57836 0.13237 0.00000 0.00000 0.08143 0.16426 - 0.32955 0.18085 2.68105 0.13843 0.00000 0.00000 0.08898 0.17092 - 0.33482 0.18245 2.72793 0.14256 0.00562 0.00000 0.09416 0.17544 - 0.34009 0.18401 2.76152 0.14663 0.01215 0.00000 0.09930 0.17987 - 0.34442 0.18526 2.78021 0.14990 0.01750 0.00000 0.10347 0.18343 - 0.34839 0.18638 2.79015 0.15283 0.02238 0.00000 0.10724 0.18660 - 0.35241 0.18748 2.79306 0.15573 0.02731 0.00000 0.11100 0.18971 - 0.35575 0.18837 2.78986 0.15807 0.03138 0.00000 0.11407 0.19222 - 0.35884 0.18917 2.78223 0.16017 0.03513 0.00000 0.11686 0.19446 - 0.36119 0.18977 2.77333 0.16172 0.03797 0.00000 0.11896 0.19611 - 0.36595 0.19092 2.74684 0.16473 0.04366 0.00003 0.12308 0.19929 - 0.36978 0.19180 2.70576 0.16699 0.04818 0.00538 0.12626 0.20166 - 0.37378 0.19265 2.65369 0.16915 0.05280 0.01120 0.12943 0.20389 - 0.37761 0.19341 2.59473 0.17100 0.05716 0.01676 0.13229 0.20579 - 0.38082 0.19398 2.53801 0.17236 0.06073 0.02138 0.13453 0.20715 - 0.38380 0.19446 2.47847 0.17344 0.06398 0.02567 0.13648 0.20819 - 0.38609 0.19477 2.42779 0.17413 0.06644 0.02896 0.13786 0.20883 - 0.38864 0.19507 2.36532 0.17473 0.06913 0.03263 0.13927 0.20935 - 0.39071 0.19525 2.30951 0.17505 0.07127 0.03561 0.14030 0.20958 - 0.39245 0.19536 2.25814 0.17520 0.07304 0.03813 0.14107 0.20962 - 0.39446 0.19541 2.19306 0.17518 0.07504 0.04106 0.14182 0.20944 - 0.39614 0.19538 2.13223 0.17497 0.07669 0.04356 0.14232 0.20907 - 0.39754 0.19529 2.07578 0.17463 0.07805 0.04568 0.14262 0.20855 - 0.39879 0.19514 2.02006 0.17415 0.07923 0.04761 0.14276 0.20788 - 0.39985 0.19493 1.96632 0.17355 0.08023 0.04933 0.14275 0.20709 - 0.40073 0.19468 1.91629 0.17289 0.08105 0.05080 0.14263 0.20623 - 0.40144 0.19440 1.86995 0.17217 0.08170 0.05207 0.14242 0.20532 - 0.40205 0.19408 1.82421 0.17138 0.08226 0.05322 0.14212 0.20432 - 0.40255 0.19373 1.78008 0.17053 0.08272 0.05425 0.14175 0.20326 - 0.40293 0.19336 1.73894 0.16966 0.08308 0.05514 0.14132 0.20218 - 0.40321 0.19298 1.70076 0.16879 0.08334 0.05590 0.14086 0.20111 - 0.40342 0.19257 1.66301 0.16786 0.08355 0.05659 0.14033 0.19997 - 0.40355 0.19214 1.62648 0.16691 0.08369 0.05721 0.13977 0.19881 - 0.40361 0.19171 1.59233 0.16596 0.08378 0.05774 0.13919 0.19765 - 0.40361 0.19128 1.56055 0.16503 0.08382 0.05819 0.13860 0.19652 - 0.40355 0.19082 1.52903 0.16406 0.08382 0.05859 0.13797 0.19535 - 0.38186 0.20276 2.36148 0.10954 0.00000 0.00000 0.06862 0.15087 - 0.38681 0.20405 2.38967 0.11276 0.00000 0.00000 0.07279 0.15420 - 0.39357 0.20571 2.41196 0.11708 0.00000 0.00000 0.07846 0.15861 - 0.39809 0.20676 2.40678 0.11991 0.00445 0.00000 0.08222 0.16144 - 0.40252 0.20771 2.39080 0.12258 0.00952 0.00000 0.08583 0.16408 - 0.40606 0.20842 2.37069 0.12464 0.01360 0.00000 0.08868 0.16607 - 0.40924 0.20901 2.34673 0.12642 0.01727 0.00000 0.09119 0.16776 - 0.41238 0.20954 2.31704 0.12810 0.02090 0.00000 0.09361 0.16931 - 0.41491 0.20992 2.28820 0.12939 0.02386 0.00000 0.09554 0.17047 - 0.41720 0.21022 2.25810 0.13050 0.02654 0.00000 0.09723 0.17143 - 0.41891 0.21042 2.23290 0.13128 0.02854 0.00000 0.09847 0.17209 - 0.42223 0.21071 2.17585 0.13269 0.03250 0.00002 0.10082 0.17319 - 0.42478 0.21084 2.11512 0.13362 0.03556 0.00384 0.10253 0.17383 - 0.42728 0.21085 2.04549 0.13437 0.03862 0.00792 0.10411 0.17422 - 0.42953 0.21071 1.97262 0.13484 0.04144 0.01175 0.10542 0.17429 - 0.43125 0.21047 1.90670 0.13503 0.04368 0.01489 0.10633 0.17408 - 0.43272 0.21012 1.84083 0.13501 0.04567 0.01775 0.10701 0.17364 - 0.43373 0.20976 1.78692 0.13484 0.04713 0.01990 0.10741 0.17311 - 0.43471 0.20923 1.72271 0.13447 0.04869 0.02228 0.10770 0.17229 - 0.43538 0.20868 1.66713 0.13401 0.04988 0.02417 0.10780 0.17141 - 0.43582 0.20812 1.61729 0.13348 0.05084 0.02575 0.10777 0.17049 - 0.43617 0.20734 1.55572 0.13269 0.05188 0.02755 0.10758 0.16919 - 0.43628 0.20652 1.49962 0.13182 0.05269 0.02906 0.10727 0.16784 - 0.43622 0.20570 1.44868 0.13091 0.05332 0.03031 0.10687 0.16647 - 0.43599 0.20482 1.39936 0.12993 0.05383 0.03143 0.10637 0.16502 - 0.43561 0.20391 1.35266 0.12889 0.05423 0.03240 0.10579 0.16352 - 0.43512 0.20300 1.30988 0.12786 0.05452 0.03322 0.10518 0.16204 - 0.43455 0.20211 1.27082 0.12683 0.05471 0.03391 0.10455 0.16059 - 0.43387 0.20118 1.23279 0.12576 0.05485 0.03452 0.10386 0.15910 - 0.43311 0.20023 1.19656 0.12468 0.05492 0.03505 0.10314 0.15759 - 0.43229 0.19930 1.16318 0.12362 0.05494 0.03549 0.10241 0.15613 - 0.43144 0.19839 1.13252 0.12259 0.05491 0.03585 0.10170 0.15472 - 0.43051 0.19746 1.10250 0.12153 0.05485 0.03618 0.10095 0.15327 - 0.42953 0.19652 1.07374 0.12047 0.05475 0.03645 0.10018 0.15183 - 0.42853 0.19560 1.04709 0.11944 0.05463 0.03668 0.09943 0.15044 - 0.42752 0.19471 1.02249 0.11845 0.05449 0.03686 0.09870 0.14911 - 0.42646 0.19380 0.99828 0.11744 0.05432 0.03701 0.09794 0.14775 - 0.43903 0.22430 2.18378 0.09402 0.00000 0.00000 0.06197 0.14216 - 0.44294 0.22492 2.17208 0.09640 0.00000 0.00000 0.06513 0.14421 - 0.44810 0.22559 2.14227 0.09947 0.00000 0.00000 0.06931 0.14673 - 0.45140 0.22589 2.10511 0.10138 0.00353 0.00000 0.07198 0.14820 - 0.45450 0.22606 2.05990 0.10310 0.00749 0.00000 0.07447 0.14942 - 0.45687 0.22609 2.01783 0.10437 0.01063 0.00000 0.07636 0.15023 - 0.45890 0.22602 1.97543 0.10539 0.01340 0.00000 0.07797 0.15081 - 0.46079 0.22585 1.92878 0.10631 0.01612 0.00000 0.07948 0.15122 - 0.46224 0.22563 1.88722 0.10695 0.01830 0.00000 0.08063 0.15143 - 0.46346 0.22535 1.84650 0.10746 0.02025 0.00000 0.08160 0.15150 - 0.46431 0.22508 1.81397 0.10778 0.02169 0.00000 0.08228 0.15146 - 0.46579 0.22440 1.74422 0.10826 0.02449 0.00002 0.08349 0.15117 - 0.46673 0.22368 1.67723 0.10844 0.02662 0.00280 0.08428 0.15067 - 0.46743 0.22275 1.60345 0.10842 0.02870 0.00574 0.08491 0.14988 - 0.46778 0.22166 1.52892 0.10818 0.03056 0.00845 0.08530 0.14881 - 0.46779 0.22055 1.46352 0.10777 0.03201 0.01064 0.08546 0.14766 - 0.46752 0.21935 1.39985 0.10721 0.03326 0.01261 0.08543 0.14634 - 0.46710 0.21828 1.34884 0.10665 0.03415 0.01408 0.08530 0.14514 - 0.46635 0.21691 1.28928 0.10585 0.03507 0.01567 0.08500 0.14357 - 0.46548 0.21563 1.23870 0.10505 0.03575 0.01692 0.08463 0.14209 - 0.46454 0.21441 1.19406 0.10425 0.03628 0.01795 0.08421 0.14067 - 0.46313 0.21280 1.13979 0.10316 0.03681 0.01911 0.08358 0.13879 - 0.46161 0.21123 1.09114 0.10207 0.03720 0.02006 0.08290 0.13695 - 0.46003 0.20970 1.04759 0.10098 0.03747 0.02083 0.08219 0.13518 - 0.45829 0.20814 1.00597 0.09985 0.03766 0.02151 0.08143 0.13337 - 0.45646 0.20657 0.96704 0.09871 0.03777 0.02209 0.08063 0.13156 - 0.45461 0.20505 0.93177 0.09760 0.03783 0.02257 0.07984 0.12983 - 0.45277 0.20360 0.89990 0.09653 0.03782 0.02295 0.07906 0.12818 - 0.45083 0.20211 0.86914 0.09544 0.03778 0.02329 0.07825 0.12651 - 0.44884 0.20062 0.84011 0.09435 0.03770 0.02357 0.07743 0.12485 - 0.44687 0.19919 0.81357 0.09330 0.03760 0.02380 0.07664 0.12327 - 0.44495 0.19783 0.78938 0.09230 0.03747 0.02398 0.07587 0.12177 - 0.44294 0.19643 0.76587 0.09128 0.03732 0.02413 0.07508 0.12026 - 0.44091 0.19504 0.74348 0.09027 0.03714 0.02425 0.07429 0.11876 - 0.43892 0.19371 0.72288 0.08931 0.03696 0.02434 0.07353 0.11733 - 0.43699 0.19243 0.70397 0.08839 0.03677 0.02440 0.07281 0.11598 - 0.43500 0.19113 0.68546 0.08745 0.03657 0.02444 0.07206 0.11461 - 0.49905 0.24513 1.92477 0.07835 0.00000 0.00000 0.05446 0.13038 - 0.50119 0.24475 1.88218 0.07995 0.00000 0.00000 0.05662 0.13110 - 0.50369 0.24394 1.81399 0.08189 0.00000 0.00000 0.05934 0.13172 - 0.50504 0.24318 1.75509 0.08302 0.00263 0.00000 0.06099 0.13187 - 0.50606 0.24224 1.69130 0.08395 0.00554 0.00000 0.06245 0.13178 - 0.50663 0.24133 1.63624 0.08457 0.00780 0.00000 0.06351 0.13151 - 0.50693 0.24036 1.58374 0.08501 0.00978 0.00000 0.06434 0.13110 - 0.50699 0.23925 1.52866 0.08533 0.01168 0.00000 0.06507 0.13052 - 0.50684 0.23822 1.48151 0.08549 0.01318 0.00000 0.06558 0.12991 - 0.50653 0.23717 1.43676 0.08556 0.01451 0.00000 0.06596 0.12923 - 0.50617 0.23630 1.40191 0.08555 0.01548 0.00000 0.06620 0.12863 - 0.50508 0.23435 1.32954 0.08538 0.01732 0.00001 0.06652 0.12721 - 0.50381 0.23256 1.26421 0.08507 0.01869 0.00192 0.06662 0.12583 - 0.50206 0.23046 1.19431 0.08456 0.02000 0.00390 0.06655 0.12414 - 0.49990 0.22818 1.12560 0.08388 0.02114 0.00571 0.06630 0.12225 - 0.49766 0.22603 1.06674 0.08314 0.02199 0.00714 0.06594 0.12043 - 0.49515 0.22379 1.01062 0.08230 0.02270 0.00841 0.06546 0.11852 - 0.49289 0.22189 0.96648 0.08153 0.02319 0.00934 0.06499 0.11688 - 0.48996 0.21954 0.91581 0.08054 0.02367 0.01034 0.06433 0.11485 - 0.48719 0.21741 0.87348 0.07961 0.02400 0.01111 0.06369 0.11302 - 0.48453 0.21543 0.83663 0.07873 0.02424 0.01174 0.06306 0.11132 - 0.48098 0.21289 0.79247 0.07756 0.02445 0.01243 0.06221 0.10914 - 0.47749 0.21047 0.75345 0.07642 0.02458 0.01298 0.06136 0.10708 - 0.47410 0.20817 0.71898 0.07534 0.02464 0.01342 0.06054 0.10514 - 0.47059 0.20586 0.68643 0.07423 0.02466 0.01380 0.05968 0.10320 - 0.46706 0.20358 0.65631 0.07313 0.02462 0.01412 0.05883 0.10131 - 0.46364 0.20141 0.62931 0.07209 0.02456 0.01437 0.05800 0.09952 - 0.46034 0.19936 0.60513 0.07109 0.02446 0.01456 0.05721 0.09784 - 0.45697 0.19728 0.58199 0.07009 0.02435 0.01473 0.05641 0.09617 - 0.45359 0.19524 0.56033 0.06910 0.02421 0.01486 0.05561 0.09453 - 0.45033 0.19330 0.54068 0.06816 0.02406 0.01496 0.05485 0.09299 - 0.44721 0.19145 0.52289 0.06727 0.02391 0.01503 0.05413 0.09153 - 0.44402 0.18959 0.50570 0.06638 0.02374 0.01508 0.05339 0.09008 - 0.44084 0.18776 0.48945 0.06550 0.02356 0.01512 0.05267 0.08866 - 0.43778 0.18601 0.47457 0.06466 0.02338 0.01513 0.05199 0.08732 - 0.43485 0.18434 0.46100 0.06387 0.02321 0.01514 0.05133 0.08606 - 0.43186 0.18266 0.44777 0.06307 0.02302 0.01513 0.05067 0.08479 - 0.54669 0.25948 1.65278 0.06629 0.00000 0.00000 0.04771 0.11751 - 0.54673 0.25801 1.59415 0.06732 0.00000 0.00000 0.04909 0.11722 - 0.54614 0.25563 1.50772 0.06848 0.00000 0.00000 0.05072 0.11644 - 0.54526 0.25376 1.44030 0.06907 0.00195 0.00000 0.05164 0.11566 - 0.54397 0.25168 1.37052 0.06948 0.00408 0.00000 0.05239 0.11465 - 0.54256 0.24980 1.31228 0.06969 0.00571 0.00000 0.05286 0.11366 - 0.54098 0.24793 1.25825 0.06976 0.00711 0.00000 0.05319 0.11260 - 0.53907 0.24589 1.20295 0.06973 0.00845 0.00000 0.05342 0.11139 - 0.53723 0.24406 1.15662 0.06962 0.00949 0.00000 0.05352 0.11027 - 0.53530 0.24226 1.11347 0.06944 0.01039 0.00000 0.05354 0.10914 - 0.53368 0.24081 1.08036 0.06925 0.01105 0.00000 0.05351 0.10821 - 0.52994 0.23765 1.01293 0.06874 0.01228 0.00001 0.05331 0.10615 - 0.52643 0.23486 0.95425 0.06818 0.01317 0.00132 0.05302 0.10430 - 0.52223 0.23168 0.89268 0.06745 0.01400 0.00268 0.05258 0.10215 - 0.51759 0.22831 0.83330 0.06658 0.01470 0.00390 0.05200 0.09987 - 0.51316 0.22522 0.78330 0.06572 0.01521 0.00485 0.05139 0.09776 - 0.50849 0.22207 0.73636 0.06479 0.01561 0.00569 0.05070 0.09561 - 0.50449 0.21943 0.69992 0.06398 0.01588 0.00629 0.05009 0.09382 - 0.49949 0.21622 0.65861 0.06296 0.01613 0.00693 0.04931 0.09165 - 0.49495 0.21338 0.62451 0.06203 0.01628 0.00742 0.04859 0.08973 - 0.49070 0.21076 0.59514 0.06117 0.01638 0.00781 0.04790 0.08798 - 0.48520 0.20743 0.56032 0.06005 0.01645 0.00823 0.04701 0.08578 - 0.47994 0.20431 0.52989 0.05898 0.01646 0.00856 0.04615 0.08373 - 0.47493 0.20139 0.50327 0.05797 0.01644 0.00883 0.04533 0.08183 - 0.46986 0.19847 0.47835 0.05696 0.01638 0.00904 0.04450 0.07995 - 0.46484 0.19563 0.45549 0.05596 0.01630 0.00922 0.04369 0.07814 - 0.46005 0.19295 0.43514 0.05503 0.01620 0.00935 0.04292 0.07645 - 0.45550 0.19043 0.41705 0.05414 0.01609 0.00946 0.04219 0.07488 - 0.45091 0.18792 0.39985 0.05326 0.01597 0.00954 0.04146 0.07332 - 0.44636 0.18545 0.38385 0.05240 0.01584 0.00960 0.04075 0.07182 - 0.44203 0.18312 0.36941 0.05158 0.01570 0.00964 0.04007 0.07041 - 0.43791 0.18093 0.35641 0.05081 0.01556 0.00966 0.03944 0.06909 - 0.43375 0.17873 0.34391 0.05005 0.01541 0.00967 0.03880 0.06779 - 0.42963 0.17657 0.33213 0.04929 0.01526 0.00968 0.03818 0.06651 - 0.42570 0.17452 0.32140 0.04858 0.01511 0.00967 0.03759 0.06532 - 0.42196 0.17259 0.31165 0.04791 0.01496 0.00965 0.03703 0.06420 - 0.41818 0.17064 0.30218 0.04724 0.01481 0.00963 0.03647 0.06309 - 0.58259 0.26783 1.38817 0.05721 0.00000 0.00000 0.04162 0.10392 - 0.58037 0.26527 1.32357 0.05781 0.00000 0.00000 0.04241 0.10290 - 0.57651 0.26134 1.23208 0.05838 0.00000 0.00000 0.04325 0.10117 - 0.57330 0.25839 1.16434 0.05859 0.00144 0.00000 0.04365 0.09977 - 0.56961 0.25522 1.09612 0.05865 0.00298 0.00000 0.04390 0.09818 - 0.56618 0.25243 1.04040 0.05858 0.00415 0.00000 0.04399 0.09675 - 0.56270 0.24971 0.98961 0.05842 0.00515 0.00000 0.04399 0.09531 - 0.55882 0.24680 0.93848 0.05817 0.00608 0.00000 0.04389 0.09375 - 0.55530 0.24425 0.89630 0.05788 0.00680 0.00000 0.04375 0.09235 - 0.55178 0.24176 0.85751 0.05756 0.00743 0.00000 0.04355 0.09099 - 0.54892 0.23979 0.82807 0.05727 0.00787 0.00000 0.04336 0.08989 - 0.54261 0.23555 0.76895 0.05657 0.00869 0.00001 0.04288 0.08754 - 0.53697 0.23187 0.71880 0.05588 0.00927 0.00092 0.04238 0.08549 - 0.53046 0.22774 0.66696 0.05505 0.00980 0.00185 0.04175 0.08318 - 0.52350 0.22345 0.61768 0.05411 0.01024 0.00268 0.04102 0.08079 - 0.51704 0.21956 0.57675 0.05322 0.01054 0.00332 0.04031 0.07863 - 0.51040 0.21565 0.53877 0.05228 0.01077 0.00388 0.03956 0.07647 - 0.50483 0.21241 0.50960 0.05148 0.01092 0.00427 0.03892 0.07469 - 0.49799 0.20851 0.47685 0.05050 0.01104 0.00469 0.03812 0.07258 - 0.49188 0.20508 0.45008 0.04962 0.01110 0.00500 0.03740 0.07073 - 0.48624 0.20196 0.42721 0.04880 0.01113 0.00525 0.03673 0.06907 - 0.47905 0.19803 0.40032 0.04776 0.01114 0.00552 0.03588 0.06699 - 0.47226 0.19437 0.37702 0.04678 0.01111 0.00572 0.03508 0.06508 - 0.46588 0.19097 0.35679 0.04587 0.01105 0.00588 0.03433 0.06334 - 0.45949 0.18761 0.33799 0.04496 0.01098 0.00601 0.03358 0.06162 - 0.45324 0.18435 0.32085 0.04407 0.01089 0.00611 0.03285 0.05999 - 0.44732 0.18130 0.30569 0.04324 0.01080 0.00618 0.03217 0.05847 - 0.44176 0.17846 0.29228 0.04246 0.01070 0.00623 0.03153 0.05707 - 0.43617 0.17563 0.27959 0.04169 0.01059 0.00627 0.03090 0.05570 - 0.43070 0.17287 0.26784 0.04094 0.01047 0.00630 0.03028 0.05437 - 0.42550 0.17028 0.25728 0.04023 0.01036 0.00631 0.02970 0.05314 - 0.42061 0.16785 0.24780 0.03956 0.01025 0.00632 0.02916 0.05200 - 0.41568 0.16543 0.23873 0.03890 0.01013 0.00632 0.02862 0.05087 - 0.41084 0.16306 0.23021 0.03826 0.01001 0.00631 0.02809 0.04978 - 0.40625 0.16082 0.22247 0.03765 0.00989 0.00629 0.02760 0.04875 - 0.40190 0.15872 0.21545 0.03708 0.00978 0.00627 0.02713 0.04780 - 0.39752 0.15661 0.20865 0.03651 0.00967 0.00625 0.02667 0.04686 - 0.60752 0.27074 1.14340 0.05046 0.00000 0.00000 0.03614 0.09007 - 0.60300 0.26716 1.07941 0.05071 0.00000 0.00000 0.03649 0.08859 - 0.59585 0.26179 0.99112 0.05083 0.00000 0.00000 0.03677 0.08628 - 0.59034 0.25785 0.92796 0.05075 0.00105 0.00000 0.03681 0.08453 - 0.58429 0.25369 0.86556 0.05055 0.00216 0.00000 0.03673 0.08264 - 0.57890 0.25008 0.81539 0.05028 0.00300 0.00000 0.03657 0.08098 - 0.57359 0.24662 0.77028 0.04996 0.00370 0.00000 0.03636 0.07937 - 0.56783 0.24294 0.72545 0.04955 0.00436 0.00000 0.03607 0.07766 - 0.56272 0.23976 0.68888 0.04915 0.00486 0.00000 0.03578 0.07616 - 0.55771 0.23668 0.65560 0.04873 0.00528 0.00000 0.03546 0.07472 - 0.55370 0.23426 0.63055 0.04838 0.00558 0.00000 0.03519 0.07359 - 0.54502 0.22911 0.58081 0.04757 0.00613 0.00000 0.03455 0.07118 - 0.53742 0.22470 0.53940 0.04682 0.00651 0.00064 0.03396 0.06912 - 0.52881 0.21980 0.49713 0.04594 0.00685 0.00128 0.03326 0.06685 - 0.51978 0.21475 0.45742 0.04498 0.00712 0.00185 0.03249 0.06454 - 0.51153 0.21023 0.42479 0.04408 0.00730 0.00228 0.03177 0.06248 - 0.50318 0.20573 0.39482 0.04317 0.00744 0.00265 0.03102 0.06045 - 0.49624 0.20203 0.37198 0.04240 0.00751 0.00292 0.03040 0.05880 - 0.48783 0.19761 0.34655 0.04146 0.00757 0.00319 0.02965 0.05685 - 0.48040 0.19375 0.32593 0.04063 0.00759 0.00340 0.02898 0.05517 - 0.47359 0.19025 0.30842 0.03987 0.00759 0.00356 0.02836 0.05366 - 0.46500 0.18589 0.28798 0.03891 0.00756 0.00372 0.02759 0.05180 - 0.45696 0.18185 0.27039 0.03801 0.00752 0.00385 0.02687 0.05011 - 0.44947 0.17813 0.25521 0.03718 0.00747 0.00395 0.02621 0.04857 - 0.44203 0.17447 0.24117 0.03636 0.00740 0.00403 0.02555 0.04707 - 0.43480 0.17094 0.22844 0.03556 0.00732 0.00409 0.02492 0.04565 - 0.42801 0.16766 0.21723 0.03482 0.00724 0.00413 0.02433 0.04434 - 0.42165 0.16461 0.20735 0.03413 0.00716 0.00416 0.02378 0.04315 - 0.41532 0.16159 0.19804 0.03345 0.00707 0.00417 0.02324 0.04197 - 0.40913 0.15866 0.18944 0.03279 0.00698 0.00419 0.02272 0.04085 - 0.40330 0.15592 0.18174 0.03217 0.00689 0.00419 0.02224 0.03981 - 0.39783 0.15336 0.17485 0.03159 0.00680 0.00419 0.02178 0.03884 - 0.39236 0.15082 0.16826 0.03101 0.00671 0.00418 0.02133 0.03790 - 0.38700 0.14834 0.16209 0.03045 0.00662 0.00417 0.02090 0.03699 - 0.38192 0.14601 0.15650 0.02992 0.00654 0.00415 0.02049 0.03614 - 0.37715 0.14382 0.15143 0.02943 0.00645 0.00413 0.02011 0.03535 - 0.37236 0.14164 0.14654 0.02894 0.00637 0.00411 0.01973 0.03457 - 0.62231 0.26885 0.92518 0.04540 0.00000 0.00000 0.03121 0.07648 - 0.61555 0.26434 0.86585 0.04536 0.00000 0.00000 0.03126 0.07476 - 0.60523 0.25771 0.78558 0.04512 0.00000 0.00000 0.03114 0.07218 - 0.59753 0.25291 0.72959 0.04482 0.00076 0.00000 0.03095 0.07029 - 0.58927 0.24789 0.67510 0.04441 0.00156 0.00000 0.03066 0.06829 - 0.58205 0.24359 0.63185 0.04399 0.00215 0.00000 0.03035 0.06658 - 0.57505 0.23950 0.59338 0.04355 0.00264 0.00000 0.03002 0.06495 - 0.56756 0.23519 0.55554 0.04303 0.00310 0.00000 0.02962 0.06324 - 0.56101 0.23148 0.52497 0.04255 0.00344 0.00000 0.02925 0.06177 - 0.55465 0.22794 0.49738 0.04206 0.00373 0.00000 0.02887 0.06036 - 0.54960 0.22515 0.47676 0.04166 0.00394 0.00000 0.02856 0.05927 - 0.53882 0.21928 0.43618 0.04077 0.00431 0.00000 0.02787 0.05697 - 0.52950 0.21429 0.40292 0.03998 0.00456 0.00044 0.02725 0.05504 - 0.51907 0.20881 0.36929 0.03907 0.00478 0.00089 0.02654 0.05293 - 0.50826 0.20320 0.33803 0.03811 0.00494 0.00128 0.02579 0.05081 - 0.49850 0.19822 0.31256 0.03723 0.00505 0.00157 0.02510 0.04895 - 0.48872 0.19329 0.28936 0.03633 0.00513 0.00182 0.02441 0.04712 - 0.48065 0.18927 0.27181 0.03559 0.00516 0.00200 0.02384 0.04566 - 0.47095 0.18449 0.25239 0.03470 0.00519 0.00218 0.02315 0.04394 - 0.46245 0.18035 0.23674 0.03392 0.00519 0.00232 0.02254 0.04247 - 0.45472 0.17662 0.22353 0.03321 0.00518 0.00242 0.02200 0.04116 - 0.44502 0.17198 0.20818 0.03231 0.00515 0.00253 0.02132 0.03956 - 0.43601 0.16772 0.19504 0.03149 0.00510 0.00261 0.02069 0.03811 - 0.42768 0.16381 0.18375 0.03073 0.00505 0.00267 0.02012 0.03680 - 0.41945 0.15998 0.17336 0.02998 0.00500 0.00272 0.01955 0.03554 - 0.41149 0.15631 0.16397 0.02926 0.00493 0.00275 0.01902 0.03434 - 0.40406 0.15291 0.15572 0.02859 0.00487 0.00278 0.01852 0.03325 - 0.39714 0.14976 0.14848 0.02797 0.00481 0.00279 0.01806 0.03225 - 0.39027 0.14666 0.14167 0.02736 0.00474 0.00280 0.01761 0.03128 - 0.38360 0.14367 0.13539 0.02676 0.00467 0.00280 0.01717 0.03035 - 0.37734 0.14087 0.12978 0.02621 0.00461 0.00280 0.01677 0.02950 - 0.37148 0.13827 0.12477 0.02570 0.00454 0.00280 0.01639 0.02871 - 0.36564 0.13570 0.11999 0.02519 0.00448 0.00279 0.01602 0.02794 - 0.35994 0.13320 0.11552 0.02470 0.00441 0.00278 0.01566 0.02720 - 0.35457 0.13085 0.11147 0.02423 0.00435 0.00277 0.01533 0.02651 - 0.34953 0.12866 0.10780 0.02380 0.00429 0.00275 0.01502 0.02588 - 0.34449 0.12647 0.10427 0.02337 0.00422 0.00274 0.01471 0.02525 - 0.62785 0.26280 0.73626 0.04149 0.00000 0.00000 0.02681 0.06358 - 0.61898 0.25751 0.68380 0.04121 0.00000 0.00000 0.02664 0.06180 - 0.60573 0.24981 0.61393 0.04066 0.00000 0.00000 0.02628 0.05918 - 0.59602 0.24430 0.56616 0.04018 0.00054 0.00000 0.02594 0.05731 - 0.58575 0.23859 0.52025 0.03961 0.00111 0.00000 0.02552 0.05536 - 0.57688 0.23374 0.48420 0.03907 0.00153 0.00000 0.02513 0.05372 - 0.56837 0.22915 0.45242 0.03853 0.00187 0.00000 0.02473 0.05217 - 0.55935 0.22436 0.42145 0.03792 0.00219 0.00000 0.02429 0.05057 - 0.55153 0.22025 0.39663 0.03738 0.00243 0.00000 0.02389 0.04920 - 0.54401 0.21635 0.37438 0.03684 0.00262 0.00000 0.02349 0.04791 - 0.53807 0.21329 0.35785 0.03641 0.00276 0.00000 0.02317 0.04690 - 0.52548 0.20689 0.32558 0.03547 0.00301 0.00000 0.02248 0.04482 - 0.51471 0.20150 0.29945 0.03465 0.00317 0.00031 0.02188 0.04309 - 0.50278 0.19561 0.27326 0.03372 0.00331 0.00062 0.02120 0.04122 - 0.49051 0.18963 0.24911 0.03276 0.00342 0.00088 0.02050 0.03936 - 0.47953 0.18435 0.22960 0.03189 0.00348 0.00108 0.01987 0.03774 - 0.46860 0.17916 0.21193 0.03103 0.00352 0.00125 0.01924 0.03617 - 0.45965 0.17495 0.19864 0.03031 0.00354 0.00137 0.01873 0.03491 - 0.44896 0.16997 0.18402 0.02946 0.00355 0.00149 0.01812 0.03345 - 0.43965 0.16567 0.17229 0.02872 0.00354 0.00158 0.01759 0.03221 - 0.43123 0.16182 0.16243 0.02805 0.00353 0.00165 0.01711 0.03111 - 0.42072 0.15706 0.15102 0.02721 0.00350 0.00172 0.01653 0.02977 - 0.41102 0.15271 0.14129 0.02644 0.00346 0.00178 0.01599 0.02857 - 0.40209 0.14873 0.13297 0.02574 0.00342 0.00181 0.01550 0.02749 - 0.39331 0.14485 0.12532 0.02505 0.00338 0.00184 0.01502 0.02645 - 0.38487 0.14115 0.11843 0.02439 0.00333 0.00187 0.01457 0.02547 - 0.37702 0.13774 0.11239 0.02378 0.00328 0.00188 0.01415 0.02458 - 0.36975 0.13459 0.10710 0.02322 0.00324 0.00189 0.01377 0.02378 - 0.36255 0.13150 0.10213 0.02267 0.00319 0.00189 0.01339 0.02299 - 0.35559 0.12852 0.09755 0.02213 0.00314 0.00189 0.01304 0.02225 - 0.34907 0.12575 0.09347 0.02164 0.00309 0.00189 0.01270 0.02157 - 0.34300 0.12319 0.08983 0.02118 0.00304 0.00188 0.01239 0.02094 - 0.33696 0.12065 0.08635 0.02072 0.00299 0.00188 0.01209 0.02033 - 0.33110 0.11819 0.08310 0.02028 0.00295 0.00187 0.01180 0.01974 - 0.32558 0.11590 0.08016 0.01987 0.00290 0.00186 0.01153 0.01920 - 0.32042 0.11376 0.07750 0.01949 0.00286 0.00185 0.01128 0.01870 - 0.31527 0.11163 0.07493 0.01910 0.00281 0.00183 0.01103 0.01821 - 0.62509 0.25327 0.57655 0.03829 0.00000 0.00000 0.02289 0.05172 - 0.61432 0.24735 0.53187 0.03781 0.00000 0.00000 0.02259 0.04999 - 0.59843 0.23882 0.47317 0.03701 0.00000 0.00000 0.02207 0.04752 - 0.58693 0.23276 0.43369 0.03638 0.00039 0.00000 0.02165 0.04577 - 0.57490 0.22653 0.39615 0.03567 0.00078 0.00000 0.02117 0.04398 - 0.56460 0.22127 0.36695 0.03504 0.00108 0.00000 0.02075 0.04248 - 0.55479 0.21632 0.34142 0.03442 0.00132 0.00000 0.02032 0.04108 - 0.54448 0.21118 0.31672 0.03374 0.00153 0.00000 0.01987 0.03965 - 0.53559 0.20680 0.29707 0.03315 0.00170 0.00000 0.01947 0.03843 - 0.52709 0.20265 0.27956 0.03258 0.00183 0.00000 0.01908 0.03730 - 0.52042 0.19942 0.26662 0.03212 0.00192 0.00000 0.01877 0.03642 - 0.50635 0.19268 0.24152 0.03114 0.00209 0.00000 0.01811 0.03461 - 0.49442 0.18705 0.22140 0.03031 0.00220 0.00021 0.01755 0.03312 - 0.48129 0.18092 0.20138 0.02938 0.00229 0.00043 0.01693 0.03152 - 0.46789 0.17474 0.18304 0.02842 0.00235 0.00061 0.01629 0.02994 - 0.45598 0.16932 0.16832 0.02757 0.00239 0.00075 0.01573 0.02858 - 0.44420 0.16401 0.15506 0.02673 0.00242 0.00086 0.01517 0.02727 - 0.43461 0.15973 0.14514 0.02604 0.00243 0.00094 0.01472 0.02623 - 0.42321 0.15469 0.13425 0.02522 0.00242 0.00103 0.01419 0.02503 - 0.41333 0.15036 0.12556 0.02452 0.00242 0.00109 0.01374 0.02401 - 0.40445 0.14649 0.11828 0.02389 0.00240 0.00113 0.01333 0.02311 - 0.39341 0.14173 0.10987 0.02310 0.00238 0.00118 0.01283 0.02203 - 0.38326 0.13740 0.10272 0.02239 0.00235 0.00121 0.01238 0.02106 - 0.37397 0.13346 0.09662 0.02173 0.00232 0.00124 0.01197 0.02019 - 0.36488 0.12963 0.09102 0.02110 0.00229 0.00126 0.01157 0.01937 - 0.35618 0.12600 0.08598 0.02049 0.00225 0.00127 0.01119 0.01859 - 0.34811 0.12265 0.08158 0.01993 0.00222 0.00128 0.01084 0.01789 - 0.34066 0.11958 0.07771 0.01942 0.00218 0.00128 0.01053 0.01725 - 0.33331 0.11657 0.07409 0.01892 0.00215 0.00128 0.01022 0.01664 - 0.32623 0.11368 0.07076 0.01843 0.00211 0.00128 0.00992 0.01606 - 0.31962 0.11100 0.06778 0.01798 0.00207 0.00128 0.00965 0.01552 - 0.31349 0.10853 0.06513 0.01757 0.00204 0.00128 0.00940 0.01504 - 0.30740 0.10609 0.06260 0.01716 0.00201 0.00127 0.00915 0.01456 - 0.30150 0.10373 0.06023 0.01677 0.00197 0.00126 0.00892 0.01411 - 0.29597 0.10153 0.05809 0.01640 0.00194 0.00125 0.00870 0.01369 - 0.29081 0.09949 0.05615 0.01606 0.00191 0.00125 0.00849 0.01331 - 0.28567 0.09746 0.05428 0.01572 0.00188 0.00124 0.00829 0.01293 - 0.61497 0.24090 0.44444 0.03546 0.00000 0.00000 0.01942 0.04112 - 0.60252 0.23452 0.40759 0.03482 0.00000 0.00000 0.01904 0.03954 - 0.58435 0.22538 0.35974 0.03382 0.00000 0.00000 0.01845 0.03731 - 0.57132 0.21894 0.32801 0.03306 0.00027 0.00000 0.01799 0.03576 - 0.55781 0.21236 0.29813 0.03225 0.00055 0.00000 0.01749 0.03419 - 0.54632 0.20683 0.27508 0.03155 0.00075 0.00000 0.01706 0.03288 - 0.53544 0.20166 0.25506 0.03087 0.00092 0.00000 0.01665 0.03167 - 0.52407 0.19631 0.23582 0.03014 0.00107 0.00000 0.01620 0.03044 - 0.51433 0.19178 0.22061 0.02952 0.00118 0.00000 0.01582 0.02941 - 0.50506 0.18750 0.20713 0.02892 0.00127 0.00000 0.01546 0.02844 - 0.49781 0.18417 0.19721 0.02845 0.00133 0.00000 0.01517 0.02770 - 0.48261 0.17728 0.17807 0.02745 0.00144 0.00000 0.01456 0.02618 - 0.46980 0.17154 0.16285 0.02661 0.00151 0.00015 0.01405 0.02494 - 0.45579 0.16534 0.14780 0.02568 0.00157 0.00029 0.01350 0.02363 - 0.44159 0.15912 0.13410 0.02474 0.00161 0.00042 0.01293 0.02234 - 0.42903 0.15369 0.12314 0.02391 0.00164 0.00051 0.01244 0.02123 - 0.41669 0.14839 0.11333 0.02310 0.00165 0.00059 0.01196 0.02017 - 0.40668 0.14414 0.10600 0.02244 0.00165 0.00065 0.01157 0.01933 - 0.39484 0.13916 0.09799 0.02166 0.00165 0.00070 0.01112 0.01837 - 0.38463 0.13490 0.09161 0.02100 0.00164 0.00074 0.01073 0.01756 - 0.37548 0.13111 0.08627 0.02040 0.00163 0.00078 0.01039 0.01685 - 0.36416 0.12646 0.08012 0.01967 0.00161 0.00081 0.00996 0.01600 - 0.35381 0.12224 0.07489 0.01900 0.00159 0.00083 0.00958 0.01524 - 0.34437 0.11843 0.07044 0.01839 0.00157 0.00085 0.00924 0.01457 - 0.33517 0.11473 0.06636 0.01781 0.00155 0.00086 0.00891 0.01392 - 0.32639 0.11123 0.06269 0.01725 0.00152 0.00087 0.00860 0.01332 - 0.31828 0.10802 0.05947 0.01674 0.00150 0.00087 0.00831 0.01278 - 0.31081 0.10509 0.05666 0.01627 0.00147 0.00087 0.00805 0.01229 - 0.30348 0.10222 0.05402 0.01581 0.00145 0.00087 0.00780 0.01182 - 0.29643 0.09947 0.05159 0.01538 0.00142 0.00087 0.00756 0.01138 - 0.28987 0.09694 0.04942 0.01497 0.00140 0.00087 0.00734 0.01098 - 0.28380 0.09459 0.04748 0.01460 0.00137 0.00087 0.00714 0.01061 - 0.27779 0.09229 0.04563 0.01423 0.00135 0.00086 0.00694 0.01025 - 0.27198 0.09008 0.04390 0.01388 0.00133 0.00086 0.00675 0.00991 - 0.26655 0.08801 0.04234 0.01355 0.00130 0.00085 0.00657 0.00959 - 0.26148 0.08610 0.04092 0.01324 0.00128 0.00085 0.00641 0.00931 - 0.25646 0.08421 0.03955 0.01294 0.00126 0.00084 0.00625 0.00902 - 0.59841 0.22632 0.33728 0.03277 0.00000 0.00000 0.01637 0.03192 - 0.58454 0.21963 0.30776 0.03200 0.00000 0.00000 0.01595 0.03055 - 0.56448 0.21012 0.26982 0.03084 0.00000 0.00000 0.01533 0.02862 - 0.55021 0.20347 0.24496 0.03000 0.00019 0.00000 0.01487 0.02730 - 0.53550 0.19670 0.22176 0.02912 0.00038 0.00000 0.01439 0.02597 - 0.52307 0.19104 0.20398 0.02836 0.00052 0.00000 0.01397 0.02488 - 0.51138 0.18578 0.18864 0.02765 0.00063 0.00000 0.01358 0.02387 - 0.49920 0.18035 0.17398 0.02689 0.00074 0.00000 0.01316 0.02285 - 0.48882 0.17577 0.16245 0.02625 0.00081 0.00000 0.01281 0.02200 - 0.47898 0.17146 0.15228 0.02564 0.00087 0.00000 0.01248 0.02121 - 0.47131 0.16812 0.14482 0.02516 0.00091 0.00000 0.01222 0.02061 - 0.45531 0.16123 0.13050 0.02417 0.00099 0.00000 0.01167 0.01938 - 0.44191 0.15553 0.11918 0.02333 0.00104 0.00010 0.01122 0.01838 - 0.42732 0.14938 0.10804 0.02242 0.00107 0.00020 0.01073 0.01733 - 0.41262 0.14326 0.09795 0.02151 0.00110 0.00029 0.01025 0.01631 - 0.39970 0.13794 0.08991 0.02071 0.00112 0.00035 0.00982 0.01543 - 0.38705 0.13277 0.08272 0.01993 0.00112 0.00041 0.00941 0.01460 - 0.37684 0.12864 0.07736 0.01931 0.00113 0.00045 0.00908 0.01395 - 0.36481 0.12382 0.07152 0.01857 0.00112 0.00048 0.00869 0.01320 - 0.35447 0.11971 0.06688 0.01794 0.00112 0.00051 0.00837 0.01258 - 0.34525 0.11606 0.06299 0.01739 0.00111 0.00053 0.00808 0.01203 - 0.33389 0.11161 0.05852 0.01671 0.00109 0.00055 0.00773 0.01138 - 0.32354 0.10759 0.05472 0.01609 0.00108 0.00057 0.00741 0.01080 - 0.31413 0.10396 0.05148 0.01553 0.00106 0.00058 0.00713 0.01029 - 0.30500 0.10046 0.04851 0.01499 0.00105 0.00059 0.00686 0.00980 - 0.29631 0.09716 0.04584 0.01449 0.00103 0.00059 0.00660 0.00935 - 0.28832 0.09414 0.04350 0.01402 0.00101 0.00060 0.00637 0.00895 - 0.28098 0.09138 0.04145 0.01360 0.00099 0.00060 0.00616 0.00858 - 0.27379 0.08869 0.03952 0.01318 0.00097 0.00060 0.00595 0.00823 - 0.26690 0.08613 0.03775 0.01279 0.00096 0.00060 0.00576 0.00790 - 0.26050 0.08377 0.03616 0.01243 0.00094 0.00059 0.00558 0.00760 - 0.25459 0.08160 0.03474 0.01209 0.00092 0.00059 0.00541 0.00733 - 0.24877 0.07947 0.03339 0.01176 0.00091 0.00059 0.00525 0.00707 - 0.24314 0.07742 0.03212 0.01145 0.00089 0.00058 0.00510 0.00682 - 0.23790 0.07551 0.03097 0.01116 0.00088 0.00058 0.00496 0.00659 - 0.23302 0.07375 0.02993 0.01089 0.00086 0.00058 0.00483 0.00638 - 0.22819 0.07201 0.02893 0.01062 0.00085 0.00057 0.00470 0.00617 - 0.57634 0.21010 0.25194 0.03007 0.00000 0.00000 0.01369 0.02414 - 0.56133 0.20327 0.22893 0.02921 0.00000 0.00000 0.01327 0.02300 - 0.53978 0.19361 0.19963 0.02796 0.00000 0.00000 0.01266 0.02141 - 0.52456 0.18689 0.18065 0.02706 0.00013 0.00000 0.01222 0.02032 - 0.50896 0.18009 0.16305 0.02613 0.00026 0.00000 0.01176 0.01924 - 0.49585 0.17443 0.14965 0.02535 0.00036 0.00000 0.01138 0.01836 - 0.48356 0.16918 0.13815 0.02462 0.00043 0.00000 0.01102 0.01755 - 0.47084 0.16380 0.12722 0.02386 0.00050 0.00000 0.01064 0.01673 - 0.46003 0.15926 0.11866 0.02321 0.00055 0.00000 0.01033 0.01606 - 0.44982 0.15502 0.11113 0.02260 0.00059 0.00000 0.01003 0.01544 - 0.44188 0.15174 0.10563 0.02213 0.00062 0.00000 0.00980 0.01496 - 0.42541 0.14499 0.09511 0.02115 0.00067 0.00000 0.00932 0.01400 - 0.41167 0.13943 0.08683 0.02034 0.00070 0.00007 0.00893 0.01322 - 0.39680 0.13347 0.07870 0.01946 0.00073 0.00014 0.00851 0.01241 - 0.38189 0.12755 0.07136 0.01859 0.00075 0.00020 0.00809 0.01162 - 0.36884 0.12243 0.06553 0.01783 0.00076 0.00024 0.00773 0.01095 - 0.35613 0.11749 0.06032 0.01710 0.00076 0.00028 0.00738 0.01032 - 0.34591 0.11355 0.05645 0.01651 0.00076 0.00031 0.00710 0.00983 - 0.33391 0.10896 0.05222 0.01583 0.00076 0.00033 0.00678 0.00927 - 0.32365 0.10507 0.04886 0.01525 0.00076 0.00035 0.00651 0.00880 - 0.31452 0.10163 0.04605 0.01473 0.00075 0.00037 0.00627 0.00840 - 0.30331 0.09745 0.04281 0.01410 0.00074 0.00038 0.00598 0.00791 - 0.29314 0.09368 0.04006 0.01354 0.00073 0.00039 0.00572 0.00748 - 0.28393 0.09029 0.03771 0.01303 0.00072 0.00040 0.00549 0.00710 - 0.27501 0.08703 0.03555 0.01255 0.00071 0.00040 0.00526 0.00675 - 0.26656 0.08397 0.03361 0.01209 0.00069 0.00041 0.00506 0.00642 - 0.25881 0.08117 0.03190 0.01167 0.00068 0.00041 0.00487 0.00612 - 0.25171 0.07863 0.03040 0.01129 0.00067 0.00041 0.00470 0.00586 - 0.24478 0.07615 0.02900 0.01092 0.00066 0.00041 0.00453 0.00561 - 0.23815 0.07380 0.02770 0.01057 0.00064 0.00041 0.00437 0.00537 - 0.23202 0.07164 0.02653 0.01025 0.00063 0.00041 0.00423 0.00515 - 0.22636 0.06965 0.02549 0.00995 0.00062 0.00040 0.00410 0.00496 - 0.22080 0.06771 0.02450 0.00966 0.00061 0.00040 0.00397 0.00477 - 0.21544 0.06585 0.02357 0.00938 0.00060 0.00040 0.00385 0.00459 - 0.21045 0.06412 0.02272 0.00913 0.00059 0.00040 0.00374 0.00443 - 0.20582 0.06253 0.02195 0.00889 0.00058 0.00039 0.00363 0.00428 - 0.20124 0.06095 0.02121 0.00865 0.00057 0.00039 0.00353 0.00413 - 0.54964 0.19280 0.18518 0.02731 0.00000 0.00000 0.01136 0.01776 - 0.53379 0.18597 0.16772 0.02639 0.00000 0.00000 0.01096 0.01684 - 0.51117 0.17637 0.14568 0.02508 0.00000 0.00000 0.01038 0.01557 - 0.49529 0.16972 0.13153 0.02416 0.00009 0.00000 0.00997 0.01472 - 0.47910 0.16302 0.11850 0.02323 0.00018 0.00000 0.00956 0.01387 - 0.46555 0.15747 0.10863 0.02244 0.00024 0.00000 0.00921 0.01318 - 0.45291 0.15234 0.10020 0.02172 0.00029 0.00000 0.00889 0.01256 - 0.43986 0.14710 0.09222 0.02097 0.00034 0.00000 0.00856 0.01193 - 0.42883 0.14270 0.08599 0.02034 0.00037 0.00000 0.00828 0.01141 - 0.41844 0.13859 0.08052 0.01974 0.00040 0.00000 0.00802 0.01093 - 0.41039 0.13543 0.07654 0.01929 0.00042 0.00000 0.00782 0.01057 - 0.39374 0.12894 0.06894 0.01835 0.00046 0.00000 0.00741 0.00984 - 0.37993 0.12362 0.06298 0.01757 0.00048 0.00005 0.00707 0.00926 - 0.36504 0.11794 0.05713 0.01674 0.00049 0.00010 0.00671 0.00865 - 0.35018 0.11233 0.05186 0.01592 0.00051 0.00014 0.00636 0.00807 - 0.33723 0.10749 0.04768 0.01521 0.00051 0.00017 0.00605 0.00757 - 0.32467 0.10284 0.04394 0.01453 0.00052 0.00019 0.00576 0.00711 - 0.31461 0.09915 0.04116 0.01399 0.00052 0.00021 0.00553 0.00675 - 0.30284 0.09486 0.03812 0.01336 0.00051 0.00023 0.00526 0.00634 - 0.29281 0.09124 0.03570 0.01283 0.00051 0.00024 0.00504 0.00600 - 0.28392 0.08805 0.03368 0.01236 0.00051 0.00025 0.00484 0.00571 - 0.27304 0.08417 0.03134 0.01180 0.00050 0.00026 0.00461 0.00536 - 0.26320 0.08070 0.02935 0.01129 0.00049 0.00027 0.00439 0.00505 - 0.25432 0.07758 0.02765 0.01083 0.00048 0.00027 0.00420 0.00478 - 0.24575 0.07460 0.02608 0.01040 0.00048 0.00028 0.00402 0.00453 - 0.23766 0.07180 0.02467 0.00999 0.00047 0.00028 0.00386 0.00429 - 0.23025 0.06925 0.02342 0.00962 0.00046 0.00028 0.00370 0.00408 - 0.22349 0.06694 0.02233 0.00928 0.00045 0.00028 0.00357 0.00390 - 0.21690 0.06470 0.02130 0.00896 0.00044 0.00028 0.00344 0.00372 - 0.21062 0.06258 0.02034 0.00865 0.00043 0.00028 0.00331 0.00355 - 0.20482 0.06063 0.01949 0.00837 0.00043 0.00028 0.00320 0.00340 - 0.19948 0.05884 0.01872 0.00811 0.00042 0.00028 0.00309 0.00327 - 0.19424 0.05709 0.01799 0.00785 0.00041 0.00028 0.00299 0.00314 - 0.18921 0.05543 0.01730 0.00761 0.00040 0.00027 0.00289 0.00301 - 0.18453 0.05388 0.01668 0.00739 0.00040 0.00027 0.00280 0.00290 - 0.18021 0.05246 0.01611 0.00719 0.00039 0.00027 0.00272 0.00280 - 0.17593 0.05106 0.01556 0.00698 0.00038 0.00027 0.00264 0.00270 - 0.51918 0.17490 0.13387 0.02446 0.00000 0.00000 0.00934 0.01267 - 0.50277 0.16820 0.12099 0.02353 0.00000 0.00000 0.00897 0.01196 - 0.47948 0.15883 0.10485 0.02222 0.00000 0.00000 0.00845 0.01099 - 0.46323 0.15237 0.09457 0.02131 0.00006 0.00000 0.00808 0.01034 - 0.44674 0.14589 0.08515 0.02039 0.00012 0.00000 0.00771 0.00970 - 0.43299 0.14055 0.07805 0.01962 0.00016 0.00000 0.00740 0.00918 - 0.42022 0.13563 0.07200 0.01892 0.00020 0.00000 0.00712 0.00871 - 0.40709 0.13062 0.06629 0.01820 0.00023 0.00000 0.00683 0.00825 - 0.39602 0.12642 0.06185 0.01760 0.00025 0.00000 0.00659 0.00786 - 0.38563 0.12252 0.05796 0.01704 0.00027 0.00000 0.00637 0.00751 - 0.37760 0.11952 0.05513 0.01660 0.00028 0.00000 0.00620 0.00725 - 0.36106 0.11339 0.04973 0.01572 0.00031 0.00000 0.00585 0.00672 - 0.34739 0.10838 0.04550 0.01500 0.00032 0.00003 0.00556 0.00629 - 0.33272 0.10306 0.04135 0.01423 0.00033 0.00007 0.00526 0.00586 - 0.31814 0.09783 0.03761 0.01347 0.00034 0.00009 0.00497 0.00543 - 0.30550 0.09333 0.03464 0.01283 0.00034 0.00012 0.00471 0.00508 - 0.29328 0.08903 0.03198 0.01221 0.00035 0.00013 0.00447 0.00475 - 0.28352 0.08562 0.02999 0.01172 0.00035 0.00014 0.00428 0.00450 - 0.27215 0.08168 0.02782 0.01115 0.00035 0.00016 0.00406 0.00421 - 0.26250 0.07835 0.02609 0.01067 0.00034 0.00017 0.00388 0.00397 - 0.25396 0.07544 0.02463 0.01025 0.00034 0.00017 0.00372 0.00377 - 0.24355 0.07191 0.02295 0.00975 0.00034 0.00018 0.00353 0.00352 - 0.23417 0.06876 0.02151 0.00930 0.00033 0.00018 0.00336 0.00331 - 0.22573 0.06594 0.02028 0.00890 0.00033 0.00019 0.00321 0.00312 - 0.21762 0.06325 0.01914 0.00851 0.00032 0.00019 0.00306 0.00295 - 0.20997 0.06073 0.01811 0.00816 0.00031 0.00019 0.00293 0.00279 - 0.20299 0.05844 0.01720 0.00783 0.00031 0.00019 0.00281 0.00265 - 0.19664 0.05638 0.01640 0.00754 0.00030 0.00019 0.00270 0.00252 - 0.19047 0.05438 0.01564 0.00726 0.00030 0.00019 0.00259 0.00240 - 0.18459 0.05249 0.01494 0.00699 0.00029 0.00019 0.00249 0.00229 - 0.17918 0.05075 0.01431 0.00675 0.00029 0.00019 0.00240 0.00219 - 0.17422 0.04917 0.01375 0.00652 0.00028 0.00019 0.00232 0.00209 - 0.16935 0.04763 0.01320 0.00631 0.00028 0.00019 0.00224 0.00201 - 0.16469 0.04615 0.01270 0.00610 0.00027 0.00019 0.00216 0.00192 - 0.16036 0.04479 0.01223 0.00591 0.00027 0.00018 0.00209 0.00185 - 0.15637 0.04354 0.01181 0.00574 0.00026 0.00018 0.00203 0.00178 - 0.15243 0.04231 0.01140 0.00557 0.00026 0.00018 0.00197 0.00171 - 0.48578 0.15684 0.09513 0.02157 0.00000 0.00000 0.00761 0.00873 - 0.46909 0.15038 0.08590 0.02066 0.00000 0.00000 0.00728 0.00820 - 0.44554 0.14139 0.07442 0.01938 0.00000 0.00000 0.00681 0.00749 - 0.42918 0.13523 0.06715 0.01850 0.00004 0.00000 0.00649 0.00701 - 0.41266 0.12907 0.06051 0.01763 0.00008 0.00000 0.00617 0.00655 - 0.39895 0.12402 0.05552 0.01691 0.00011 0.00000 0.00590 0.00618 - 0.38625 0.11937 0.05129 0.01624 0.00013 0.00000 0.00566 0.00584 - 0.37324 0.11466 0.04730 0.01557 0.00015 0.00000 0.00542 0.00551 - 0.36231 0.11073 0.04419 0.01501 0.00017 0.00000 0.00521 0.00524 - 0.35208 0.10708 0.04148 0.01449 0.00018 0.00000 0.00502 0.00499 - 0.34419 0.10428 0.03950 0.01409 0.00019 0.00000 0.00488 0.00480 - 0.32800 0.09858 0.03573 0.01328 0.00020 0.00000 0.00458 0.00443 - 0.31468 0.09395 0.03277 0.01262 0.00021 0.00002 0.00435 0.00413 - 0.30044 0.08904 0.02986 0.01192 0.00022 0.00005 0.00410 0.00383 - 0.28635 0.08423 0.02723 0.01124 0.00023 0.00006 0.00385 0.00354 - 0.27418 0.08012 0.02513 0.01066 0.00023 0.00008 0.00365 0.00330 - 0.26246 0.07620 0.02325 0.01011 0.00023 0.00009 0.00345 0.00307 - 0.25314 0.07310 0.02184 0.00967 0.00023 0.00010 0.00329 0.00290 - 0.24231 0.06953 0.02030 0.00917 0.00023 0.00011 0.00312 0.00270 - 0.23314 0.06653 0.01906 0.00875 0.00023 0.00011 0.00297 0.00254 - 0.22506 0.06391 0.01801 0.00838 0.00023 0.00012 0.00284 0.00240 - 0.21524 0.06074 0.01680 0.00794 0.00023 0.00012 0.00269 0.00224 - 0.20642 0.05792 0.01576 0.00755 0.00022 0.00013 0.00255 0.00210 - 0.19851 0.05541 0.01486 0.00720 0.00022 0.00013 0.00243 0.00198 - 0.19092 0.05302 0.01404 0.00687 0.00022 0.00013 0.00231 0.00186 - 0.18380 0.05079 0.01328 0.00656 0.00021 0.00013 0.00221 0.00176 - 0.17731 0.04877 0.01262 0.00629 0.00021 0.00013 0.00211 0.00166 - 0.17142 0.04695 0.01203 0.00604 0.00020 0.00013 0.00202 0.00158 - 0.16571 0.04519 0.01147 0.00580 0.00020 0.00013 0.00194 0.00150 - 0.16029 0.04353 0.01096 0.00557 0.00020 0.00013 0.00186 0.00143 - 0.15531 0.04201 0.01049 0.00536 0.00019 0.00013 0.00179 0.00136 - 0.15075 0.04063 0.01007 0.00518 0.00019 0.00013 0.00173 0.00130 - 0.14629 0.03928 0.00967 0.00499 0.00018 0.00013 0.00167 0.00124 - 0.14202 0.03800 0.00930 0.00482 0.00018 0.00013 0.00161 0.00119 - 0.13807 0.03682 0.00895 0.00466 0.00018 0.00013 0.00155 0.00114 - 0.13443 0.03573 0.00864 0.00452 0.00017 0.00012 0.00150 0.00110 - 0.13084 0.03467 0.00834 0.00437 0.00017 0.00012 0.00145 0.00105 - 0.45024 0.13899 0.06639 0.01869 0.00000 0.00000 0.00614 0.00578 - 0.43354 0.13288 0.05999 0.01782 0.00000 0.00000 0.00585 0.00540 - 0.41009 0.12440 0.05207 0.01662 0.00000 0.00000 0.00544 0.00490 - 0.39389 0.11862 0.04707 0.01580 0.00003 0.00000 0.00517 0.00457 - 0.37759 0.11287 0.04253 0.01499 0.00005 0.00000 0.00489 0.00425 - 0.36411 0.10816 0.03911 0.01432 0.00007 0.00000 0.00467 0.00399 - 0.35168 0.10385 0.03622 0.01371 0.00009 0.00000 0.00446 0.00376 - 0.33898 0.09948 0.03349 0.01310 0.00010 0.00000 0.00425 0.00354 - 0.32834 0.09586 0.03137 0.01259 0.00011 0.00000 0.00408 0.00335 - 0.31842 0.09250 0.02951 0.01212 0.00012 0.00000 0.00393 0.00318 - 0.31078 0.08993 0.02815 0.01176 0.00013 0.00000 0.00381 0.00306 - 0.29516 0.08472 0.02556 0.01103 0.00014 0.00000 0.00356 0.00281 - 0.28236 0.08049 0.02351 0.01045 0.00014 0.00002 0.00337 0.00261 - 0.26874 0.07603 0.02150 0.00983 0.00015 0.00003 0.00316 0.00241 - 0.25531 0.07169 0.01966 0.00923 0.00015 0.00004 0.00296 0.00222 - 0.24375 0.06798 0.01820 0.00872 0.00015 0.00005 0.00280 0.00206 - 0.23267 0.06446 0.01687 0.00823 0.00016 0.00006 0.00264 0.00191 - 0.22388 0.06169 0.01588 0.00785 0.00016 0.00007 0.00251 0.00180 - 0.21370 0.05851 0.01478 0.00742 0.00016 0.00007 0.00237 0.00167 - 0.20511 0.05584 0.01389 0.00706 0.00015 0.00008 0.00225 0.00157 - 0.19757 0.05352 0.01315 0.00674 0.00015 0.00008 0.00215 0.00148 - 0.18842 0.05072 0.01227 0.00637 0.00015 0.00008 0.00203 0.00137 - 0.18024 0.04823 0.01152 0.00603 0.00015 0.00009 0.00192 0.00128 - 0.17291 0.04603 0.01087 0.00574 0.00015 0.00009 0.00182 0.00120 - 0.16591 0.04393 0.01027 0.00546 0.00014 0.00009 0.00173 0.00113 - 0.15936 0.04198 0.00972 0.00520 0.00014 0.00009 0.00165 0.00106 - 0.15340 0.04022 0.00923 0.00497 0.00014 0.00009 0.00157 0.00100 - 0.14801 0.03864 0.00880 0.00476 0.00014 0.00009 0.00151 0.00095 - 0.14280 0.03711 0.00839 0.00456 0.00013 0.00009 0.00144 0.00090 - 0.13786 0.03568 0.00801 0.00437 0.00013 0.00009 0.00138 0.00086 - 0.13333 0.03437 0.00766 0.00420 0.00013 0.00009 0.00133 0.00082 - 0.12919 0.03318 0.00735 0.00404 0.00013 0.00009 0.00128 0.00078 - 0.12516 0.03202 0.00706 0.00389 0.00012 0.00009 0.00123 0.00074 - 0.12130 0.03092 0.00678 0.00375 0.00012 0.00009 0.00118 0.00071 - 0.11774 0.02991 0.00652 0.00362 0.00012 0.00009 0.00114 0.00068 - 0.11446 0.02899 0.00629 0.00350 0.00012 0.00008 0.00110 0.00065 - 0.11124 0.02808 0.00607 0.00338 0.00011 0.00008 0.00107 0.00063 - 0.41326 0.12168 0.04549 0.01588 0.00000 0.00000 0.00490 0.00365 - 0.39680 0.11598 0.04122 0.01508 0.00000 0.00000 0.00465 0.00340 - 0.37380 0.10812 0.03594 0.01399 0.00000 0.00000 0.00430 0.00307 - 0.35798 0.10278 0.03262 0.01324 0.00002 0.00000 0.00407 0.00285 - 0.34213 0.09749 0.02959 0.01251 0.00003 0.00000 0.00384 0.00263 - 0.32908 0.09317 0.02732 0.01191 0.00005 0.00000 0.00365 0.00247 - 0.31707 0.08923 0.02539 0.01137 0.00006 0.00000 0.00348 0.00232 - 0.30485 0.08526 0.02357 0.01082 0.00007 0.00000 0.00331 0.00217 - 0.29465 0.08196 0.02215 0.01037 0.00007 0.00000 0.00317 0.00205 - 0.28515 0.07892 0.02090 0.00995 0.00008 0.00000 0.00304 0.00194 - 0.27787 0.07660 0.01999 0.00964 0.00008 0.00000 0.00294 0.00186 - 0.26300 0.07191 0.01823 0.00900 0.00009 0.00000 0.00274 0.00170 - 0.25087 0.06811 0.01683 0.00849 0.00009 0.00001 0.00258 0.00158 - 0.23801 0.06413 0.01545 0.00795 0.00010 0.00002 0.00242 0.00145 - 0.22538 0.06026 0.01418 0.00744 0.00010 0.00003 0.00226 0.00133 - 0.21456 0.05697 0.01315 0.00700 0.00010 0.00004 0.00212 0.00123 - 0.20421 0.05386 0.01222 0.00659 0.00010 0.00004 0.00200 0.00114 - 0.19603 0.05142 0.01152 0.00627 0.00010 0.00005 0.00190 0.00107 - 0.18659 0.04862 0.01074 0.00590 0.00010 0.00005 0.00179 0.00099 - 0.17866 0.04629 0.01011 0.00559 0.00010 0.00005 0.00169 0.00092 - 0.17170 0.04426 0.00957 0.00533 0.00010 0.00006 0.00161 0.00087 - 0.16329 0.04182 0.00894 0.00501 0.00010 0.00006 0.00152 0.00081 - 0.15579 0.03966 0.00840 0.00474 0.00010 0.00006 0.00143 0.00075 - 0.14911 0.03776 0.00793 0.00449 0.00010 0.00006 0.00136 0.00070 - 0.14273 0.03595 0.00749 0.00426 0.00010 0.00006 0.00129 0.00066 - 0.13677 0.03427 0.00708 0.00405 0.00009 0.00006 0.00122 0.00062 - 0.13138 0.03276 0.00673 0.00385 0.00009 0.00006 0.00116 0.00058 - 0.12651 0.03141 0.00641 0.00368 0.00009 0.00006 0.00111 0.00055 - 0.12181 0.03010 0.00611 0.00352 0.00009 0.00006 0.00106 0.00052 - 0.11737 0.02888 0.00583 0.00336 0.00009 0.00006 0.00101 0.00050 - 0.11330 0.02777 0.00557 0.00323 0.00009 0.00006 0.00097 0.00047 - 0.10960 0.02676 0.00534 0.00310 0.00008 0.00006 0.00093 0.00045 - 0.10599 0.02578 0.00513 0.00298 0.00008 0.00006 0.00090 0.00043 - 0.10255 0.02485 0.00492 0.00286 0.00008 0.00006 0.00086 0.00041 - 0.09938 0.02400 0.00473 0.00276 0.00008 0.00006 0.00083 0.00039 - 0.09646 0.02322 0.00456 0.00266 0.00008 0.00006 0.00080 0.00037 - 0.09361 0.02246 0.00439 0.00257 0.00008 0.00006 0.00077 0.00036 - 0.37554 0.10518 0.03056 0.01323 0.00000 0.00000 0.00386 0.00218 - 0.35956 0.09996 0.02783 0.01251 0.00000 0.00000 0.00365 0.00202 - 0.33732 0.09278 0.02447 0.01153 0.00000 0.00000 0.00336 0.00181 - 0.32210 0.08793 0.02234 0.01088 0.00001 0.00000 0.00317 0.00167 - 0.30690 0.08314 0.02039 0.01023 0.00002 0.00000 0.00298 0.00154 - 0.29443 0.07924 0.01893 0.00971 0.00003 0.00000 0.00282 0.00144 - 0.28300 0.07570 0.01768 0.00924 0.00004 0.00000 0.00268 0.00135 - 0.27140 0.07214 0.01649 0.00876 0.00004 0.00000 0.00254 0.00126 - 0.26174 0.06919 0.01556 0.00837 0.00005 0.00000 0.00243 0.00119 - 0.25278 0.06648 0.01474 0.00802 0.00005 0.00000 0.00233 0.00112 - 0.24591 0.06442 0.01413 0.00775 0.00005 0.00000 0.00225 0.00107 - 0.23196 0.06025 0.01296 0.00720 0.00006 0.00000 0.00209 0.00098 - 0.22062 0.05690 0.01201 0.00677 0.00006 0.00001 0.00196 0.00090 - 0.20864 0.05339 0.01107 0.00631 0.00007 0.00001 0.00183 0.00083 - 0.19692 0.05000 0.01019 0.00588 0.00007 0.00002 0.00170 0.00075 - 0.18692 0.04713 0.00948 0.00551 0.00007 0.00003 0.00160 0.00070 - 0.17738 0.04442 0.00883 0.00517 0.00007 0.00003 0.00150 0.00064 - 0.16987 0.04230 0.00834 0.00490 0.00007 0.00003 0.00142 0.00060 - 0.16123 0.03988 0.00778 0.00460 0.00007 0.00003 0.00133 0.00056 - 0.15399 0.03787 0.00733 0.00435 0.00007 0.00004 0.00126 0.00052 - 0.14766 0.03612 0.00694 0.00413 0.00007 0.00004 0.00120 0.00049 - 0.14003 0.03403 0.00649 0.00387 0.00007 0.00004 0.00112 0.00045 - 0.13325 0.03219 0.00609 0.00364 0.00007 0.00004 0.00106 0.00042 - 0.12722 0.03057 0.00575 0.00345 0.00006 0.00004 0.00100 0.00039 - 0.12149 0.02903 0.00543 0.00326 0.00006 0.00004 0.00094 0.00037 - 0.11615 0.02761 0.00513 0.00309 0.00006 0.00004 0.00089 0.00034 - 0.11133 0.02633 0.00487 0.00293 0.00006 0.00004 0.00085 0.00032 - 0.10699 0.02519 0.00464 0.00279 0.00006 0.00004 0.00081 0.00031 - 0.10280 0.02409 0.00442 0.00266 0.00006 0.00004 0.00077 0.00029 - 0.09886 0.02307 0.00421 0.00254 0.00006 0.00004 0.00074 0.00027 - 0.09526 0.02214 0.00402 0.00243 0.00006 0.00004 0.00070 0.00026 - 0.09198 0.02129 0.00386 0.00233 0.00006 0.00004 0.00068 0.00025 - 0.08879 0.02048 0.00369 0.00223 0.00005 0.00004 0.00065 0.00024 - 0.08577 0.01970 0.00354 0.00214 0.00005 0.00004 0.00062 0.00023 - 0.08298 0.01900 0.00340 0.00206 0.00005 0.00004 0.00060 0.00022 - 0.08042 0.01835 0.00328 0.00198 0.00005 0.00004 0.00058 0.00021 - 0.07792 0.01772 0.00315 0.00191 0.00005 0.00004 0.00055 0.00020 - 0.33773 0.08971 0.02011 0.01077 0.00000 0.00000 0.00300 0.00121 - 0.32242 0.08500 0.01847 0.01015 0.00000 0.00000 0.00283 0.00112 - 0.30121 0.07855 0.01643 0.00931 0.00000 0.00000 0.00259 0.00100 - 0.28677 0.07422 0.01513 0.00874 0.00001 0.00000 0.00243 0.00092 - 0.27240 0.06995 0.01393 0.00819 0.00001 0.00000 0.00228 0.00084 - 0.26065 0.06649 0.01301 0.00775 0.00002 0.00000 0.00215 0.00078 - 0.24991 0.06335 0.01223 0.00734 0.00002 0.00000 0.00204 0.00073 - 0.23905 0.06021 0.01147 0.00695 0.00003 0.00000 0.00193 0.00068 - 0.23003 0.05762 0.01088 0.00662 0.00003 0.00000 0.00184 0.00064 - 0.22168 0.05524 0.01035 0.00632 0.00003 0.00000 0.00176 0.00060 - 0.21531 0.05343 0.00995 0.00609 0.00004 0.00000 0.00169 0.00058 - 0.20239 0.04980 0.00918 0.00564 0.00004 0.00000 0.00157 0.00052 - 0.19192 0.04688 0.00854 0.00528 0.00004 0.00000 0.00147 0.00048 - 0.18091 0.04385 0.00790 0.00491 0.00004 0.00001 0.00137 0.00044 - 0.17018 0.04092 0.00730 0.00455 0.00004 0.00001 0.00127 0.00040 - 0.16106 0.03845 0.00681 0.00425 0.00004 0.00002 0.00118 0.00037 - 0.15239 0.03613 0.00635 0.00397 0.00005 0.00002 0.00111 0.00034 - 0.14559 0.03432 0.00600 0.00375 0.00005 0.00002 0.00105 0.00032 - 0.13779 0.03226 0.00561 0.00351 0.00005 0.00002 0.00098 0.00030 - 0.13126 0.03055 0.00528 0.00331 0.00005 0.00002 0.00092 0.00028 - 0.12558 0.02907 0.00501 0.00313 0.00004 0.00003 0.00087 0.00026 - 0.11875 0.02731 0.00468 0.00293 0.00004 0.00003 0.00082 0.00024 - 0.11270 0.02576 0.00439 0.00275 0.00004 0.00003 0.00077 0.00022 - 0.10734 0.02440 0.00414 0.00259 0.00004 0.00003 0.00072 0.00021 - 0.10225 0.02311 0.00391 0.00244 0.00004 0.00003 0.00068 0.00020 - 0.09753 0.02193 0.00369 0.00230 0.00004 0.00003 0.00065 0.00018 - 0.09327 0.02087 0.00350 0.00218 0.00004 0.00003 0.00061 0.00017 - 0.08945 0.01992 0.00333 0.00208 0.00004 0.00003 0.00058 0.00016 - 0.08577 0.01901 0.00317 0.00197 0.00004 0.00003 0.00055 0.00015 - 0.08231 0.01816 0.00302 0.00188 0.00004 0.00003 0.00053 0.00015 - 0.07917 0.01740 0.00288 0.00179 0.00004 0.00003 0.00050 0.00014 - 0.07631 0.01670 0.00276 0.00172 0.00004 0.00003 0.00048 0.00013 - 0.07353 0.01603 0.00264 0.00164 0.00004 0.00003 0.00046 0.00013 - 0.07090 0.01540 0.00253 0.00157 0.00003 0.00003 0.00044 0.00012 - 0.06848 0.01482 0.00242 0.00151 0.00003 0.00003 0.00042 0.00012 - 0.06627 0.01429 0.00233 0.00145 0.00003 0.00003 0.00041 0.00011 - 0.06411 0.01378 0.00224 0.00139 0.00003 0.00002 0.00039 0.00011 - 0.30037 0.07542 0.01297 0.00857 0.00000 0.00000 0.00230 0.00061 - 0.28591 0.07124 0.01205 0.00804 0.00000 0.00000 0.00216 0.00057 - 0.26597 0.06555 0.01091 0.00733 0.00000 0.00000 0.00197 0.00050 - 0.25245 0.06173 0.01015 0.00686 0.00000 0.00000 0.00184 0.00046 - 0.23905 0.05799 0.00944 0.00640 0.00001 0.00000 0.00172 0.00042 - 0.22813 0.05498 0.00890 0.00604 0.00001 0.00000 0.00162 0.00039 - 0.21818 0.05225 0.00842 0.00571 0.00002 0.00000 0.00153 0.00037 - 0.20815 0.04952 0.00795 0.00538 0.00002 0.00000 0.00144 0.00034 - 0.19985 0.04728 0.00758 0.00511 0.00002 0.00000 0.00137 0.00032 - 0.19218 0.04522 0.00724 0.00487 0.00002 0.00000 0.00131 0.00030 - 0.18634 0.04367 0.00698 0.00468 0.00002 0.00000 0.00126 0.00029 - 0.17454 0.04055 0.00648 0.00431 0.00003 0.00000 0.00116 0.00026 - 0.16502 0.03806 0.00606 0.00402 0.00003 0.00000 0.00108 0.00024 - 0.15503 0.03547 0.00562 0.00372 0.00003 0.00001 0.00100 0.00022 - 0.14535 0.03299 0.00521 0.00344 0.00003 0.00001 0.00093 0.00020 - 0.13714 0.03090 0.00486 0.00320 0.00003 0.00001 0.00086 0.00019 - 0.12937 0.02894 0.00454 0.00298 0.00003 0.00001 0.00081 0.00017 - 0.12329 0.02742 0.00429 0.00281 0.00003 0.00001 0.00076 0.00016 - 0.11634 0.02570 0.00401 0.00262 0.00003 0.00002 0.00071 0.00015 - 0.11055 0.02427 0.00378 0.00246 0.00003 0.00002 0.00067 0.00014 - 0.10551 0.02304 0.00358 0.00232 0.00003 0.00002 0.00063 0.00013 - 0.09948 0.02158 0.00335 0.00216 0.00003 0.00002 0.00059 0.00012 - 0.09416 0.02030 0.00314 0.00202 0.00003 0.00002 0.00055 0.00011 - 0.08945 0.01917 0.00296 0.00190 0.00003 0.00002 0.00052 0.00011 - 0.08500 0.01812 0.00279 0.00179 0.00003 0.00002 0.00049 0.00010 - 0.08088 0.01715 0.00263 0.00168 0.00003 0.00002 0.00046 0.00009 - 0.07718 0.01628 0.00249 0.00159 0.00003 0.00002 0.00043 0.00009 - 0.07385 0.01550 0.00237 0.00151 0.00003 0.00002 0.00041 0.00008 - 0.07067 0.01477 0.00225 0.00143 0.00002 0.00002 0.00039 0.00008 - 0.06769 0.01408 0.00214 0.00136 0.00002 0.00002 0.00037 0.00008 - 0.06497 0.01346 0.00204 0.00129 0.00002 0.00002 0.00035 0.00007 - 0.06251 0.01290 0.00195 0.00123 0.00002 0.00002 0.00034 0.00007 - 0.06013 0.01236 0.00186 0.00118 0.00002 0.00002 0.00032 0.00007 - 0.05787 0.01185 0.00178 0.00113 0.00002 0.00002 0.00031 0.00006 - 0.05581 0.01138 0.00171 0.00108 0.00002 0.00002 0.00030 0.00006 - 0.05392 0.01096 0.00164 0.00103 0.00002 0.00002 0.00028 0.00006 - 0.05207 0.01055 0.00158 0.00099 0.00002 0.00002 0.00027 0.00006 - 0.26400 0.06243 0.00818 0.00665 0.00000 0.00000 0.00173 0.00028 - 0.25054 0.05879 0.00774 0.00621 0.00000 0.00000 0.00162 0.00025 - 0.23205 0.05385 0.00715 0.00564 0.00000 0.00000 0.00147 0.00022 - 0.21957 0.05055 0.00675 0.00525 0.00000 0.00000 0.00137 0.00021 - 0.20726 0.04733 0.00636 0.00488 0.00001 0.00000 0.00128 0.00019 - 0.19725 0.04474 0.00605 0.00459 0.00001 0.00000 0.00120 0.00018 - 0.18817 0.04241 0.00577 0.00432 0.00001 0.00000 0.00113 0.00017 - 0.17904 0.04009 0.00549 0.00406 0.00001 0.00000 0.00106 0.00015 - 0.17150 0.03818 0.00526 0.00385 0.00001 0.00000 0.00101 0.00015 - 0.16456 0.03644 0.00504 0.00365 0.00001 0.00000 0.00096 0.00014 - 0.15928 0.03512 0.00488 0.00351 0.00001 0.00000 0.00092 0.00013 - 0.14865 0.03249 0.00455 0.00322 0.00002 0.00000 0.00085 0.00012 - 0.14011 0.03040 0.00427 0.00299 0.00002 0.00000 0.00079 0.00011 - 0.13119 0.02823 0.00397 0.00276 0.00002 0.00000 0.00073 0.00010 - 0.12257 0.02616 0.00369 0.00254 0.00002 0.00001 0.00067 0.00010 - 0.11529 0.02443 0.00345 0.00235 0.00002 0.00001 0.00062 0.00009 - 0.10842 0.02281 0.00322 0.00218 0.00002 0.00001 0.00058 0.00008 - 0.10307 0.02155 0.00305 0.00205 0.00002 0.00001 0.00054 0.00008 - 0.09696 0.02014 0.00285 0.00190 0.00002 0.00001 0.00051 0.00007 - 0.09189 0.01897 0.00268 0.00178 0.00002 0.00001 0.00047 0.00007 - 0.08750 0.01796 0.00254 0.00168 0.00002 0.00001 0.00045 0.00007 - 0.08225 0.01677 0.00237 0.00156 0.00002 0.00001 0.00042 0.00006 - 0.07763 0.01573 0.00222 0.00145 0.00002 0.00001 0.00039 0.00006 - 0.07356 0.01482 0.00209 0.00136 0.00002 0.00001 0.00036 0.00005 - 0.06972 0.01396 0.00197 0.00127 0.00002 0.00001 0.00034 0.00005 - 0.06618 0.01318 0.00185 0.00120 0.00002 0.00001 0.00032 0.00005 - 0.06300 0.01248 0.00175 0.00113 0.00002 0.00001 0.00030 0.00005 - 0.06016 0.01186 0.00166 0.00107 0.00002 0.00001 0.00029 0.00004 - 0.05745 0.01128 0.00158 0.00101 0.00002 0.00001 0.00027 0.00004 - 0.05490 0.01073 0.00150 0.00096 0.00002 0.00001 0.00026 0.00004 - 0.05260 0.01023 0.00143 0.00091 0.00002 0.00001 0.00025 0.00004 - 0.05051 0.00979 0.00136 0.00086 0.00001 0.00001 0.00023 0.00004 - 0.04850 0.00936 0.00130 0.00082 0.00001 0.00001 0.00022 0.00004 - 0.04659 0.00896 0.00124 0.00079 0.00001 0.00001 0.00021 0.00003 - 0.04485 0.00859 0.00119 0.00075 0.00001 0.00001 0.00020 0.00003 - 0.04326 0.00826 0.00114 0.00072 0.00001 0.00001 0.00020 0.00003 - 0.04171 0.00793 0.00109 0.00069 0.00001 0.00001 0.00019 0.00003 - 0.22909 0.05081 0.00505 0.00502 0.00000 0.00000 0.00128 0.00010 - 0.21674 0.04770 0.00488 0.00467 0.00000 0.00000 0.00119 0.00010 - 0.19985 0.04349 0.00464 0.00421 0.00000 0.00000 0.00108 0.00009 - 0.18851 0.04070 0.00445 0.00391 0.00000 0.00000 0.00100 0.00008 - 0.17735 0.03798 0.00426 0.00362 0.00000 0.00000 0.00093 0.00008 - 0.16832 0.03579 0.00409 0.00339 0.00001 0.00000 0.00087 0.00007 - 0.16014 0.03384 0.00393 0.00319 0.00001 0.00000 0.00082 0.00007 - 0.15195 0.03189 0.00376 0.00298 0.00001 0.00000 0.00077 0.00007 - 0.14521 0.03030 0.00362 0.00282 0.00001 0.00000 0.00073 0.00006 - 0.13902 0.02885 0.00349 0.00267 0.00001 0.00000 0.00069 0.00006 - 0.13433 0.02776 0.00339 0.00256 0.00001 0.00000 0.00066 0.00006 - 0.12489 0.02558 0.00317 0.00234 0.00001 0.00000 0.00060 0.00005 - 0.11735 0.02385 0.00298 0.00216 0.00001 0.00000 0.00056 0.00005 - 0.10949 0.02207 0.00278 0.00199 0.00001 0.00000 0.00052 0.00005 - 0.10193 0.02038 0.00259 0.00182 0.00001 0.00000 0.00047 0.00005 - 0.09557 0.01897 0.00242 0.00168 0.00001 0.00000 0.00044 0.00004 - 0.08960 0.01765 0.00226 0.00155 0.00001 0.00001 0.00041 0.00004 - 0.08495 0.01664 0.00214 0.00145 0.00001 0.00001 0.00038 0.00004 - 0.07967 0.01549 0.00200 0.00134 0.00001 0.00001 0.00035 0.00004 - 0.07530 0.01455 0.00188 0.00126 0.00001 0.00001 0.00033 0.00004 - 0.07152 0.01375 0.00178 0.00118 0.00001 0.00001 0.00031 0.00003 - 0.06703 0.01279 0.00165 0.00109 0.00001 0.00001 0.00029 0.00003 - 0.06308 0.01196 0.00155 0.00101 0.00001 0.00001 0.00027 0.00003 - 0.05962 0.01124 0.00145 0.00095 0.00001 0.00001 0.00025 0.00003 - 0.05636 0.01056 0.00137 0.00088 0.00001 0.00001 0.00023 0.00003 - 0.05336 0.00995 0.00129 0.00083 0.00001 0.00001 0.00022 0.00003 - 0.05068 0.00940 0.00121 0.00078 0.00001 0.00001 0.00021 0.00003 - 0.04828 0.00891 0.00115 0.00073 0.00001 0.00001 0.00020 0.00003 - 0.04600 0.00845 0.00109 0.00069 0.00001 0.00001 0.00018 0.00002 - 0.04387 0.00802 0.00103 0.00065 0.00001 0.00001 0.00017 0.00002 - 0.04194 0.00763 0.00098 0.00062 0.00001 0.00001 0.00017 0.00002 - 0.04020 0.00729 0.00093 0.00059 0.00001 0.00001 0.00016 0.00002 - 0.03852 0.00695 0.00089 0.00056 0.00001 0.00001 0.00015 0.00002 - 0.03694 0.00664 0.00085 0.00053 0.00001 0.00001 0.00014 0.00002 - 0.03550 0.00636 0.00081 0.00051 0.00001 0.00001 0.00014 0.00002 - 0.03418 0.00610 0.00078 0.00049 0.00001 0.00001 0.00013 0.00002 - 0.03290 0.00585 0.00074 0.00046 0.00001 0.00001 0.00013 0.00002 - 0.16510 0.03176 0.00181 0.00260 0.00000 0.00000 0.00066 0.00002 - 0.15519 0.02962 0.00187 0.00241 0.00000 0.00000 0.00061 0.00002 - 0.14177 0.02675 0.00191 0.00215 0.00000 0.00000 0.00054 0.00002 - 0.13283 0.02486 0.00191 0.00198 0.00000 0.00000 0.00050 0.00002 - 0.12411 0.02303 0.00188 0.00182 0.00000 0.00000 0.00046 0.00002 - 0.11710 0.02158 0.00184 0.00169 0.00000 0.00000 0.00043 0.00002 - 0.11080 0.02028 0.00179 0.00158 0.00000 0.00000 0.00040 0.00002 - 0.10452 0.01900 0.00174 0.00147 0.00000 0.00000 0.00037 0.00002 - 0.09939 0.01796 0.00169 0.00138 0.00000 0.00000 0.00035 0.00002 - 0.09470 0.01702 0.00163 0.00130 0.00000 0.00000 0.00033 0.00002 - 0.09117 0.01631 0.00159 0.00124 0.00000 0.00000 0.00032 0.00002 - 0.08410 0.01491 0.00150 0.00112 0.00000 0.00000 0.00029 0.00002 - 0.07850 0.01381 0.00141 0.00103 0.00000 0.00000 0.00027 0.00002 - 0.07271 0.01268 0.00132 0.00094 0.00000 0.00000 0.00024 0.00002 - 0.06718 0.01162 0.00122 0.00085 0.00000 0.00000 0.00022 0.00002 - 0.06257 0.01074 0.00114 0.00078 0.00000 0.00000 0.00020 0.00002 - 0.05827 0.00993 0.00107 0.00072 0.00000 0.00000 0.00019 0.00002 - 0.05494 0.00930 0.00101 0.00067 0.00000 0.00000 0.00017 0.00002 - 0.05119 0.00861 0.00094 0.00061 0.00000 0.00000 0.00016 0.00002 - 0.04811 0.00804 0.00088 0.00057 0.00000 0.00000 0.00015 0.00002 - 0.04546 0.00755 0.00083 0.00053 0.00000 0.00000 0.00014 0.00002 - 0.04233 0.00698 0.00077 0.00049 0.00000 0.00000 0.00013 0.00002 - 0.03960 0.00649 0.00071 0.00045 0.00000 0.00000 0.00012 0.00002 - 0.03721 0.00606 0.00067 0.00042 0.00000 0.00000 0.00011 0.00002 - 0.03498 0.00566 0.00062 0.00039 0.00000 0.00000 0.00010 0.00002 - 0.03294 0.00530 0.00059 0.00036 0.00000 0.00000 0.00010 0.00002 - 0.03113 0.00499 0.00055 0.00034 0.00000 0.00000 0.00009 0.00001 - 0.02952 0.00470 0.00052 0.00032 0.00000 0.00000 0.00008 0.00001 - 0.02800 0.00444 0.00049 0.00030 0.00000 0.00000 0.00008 0.00001 - 0.02658 0.00419 0.00046 0.00028 0.00000 0.00000 0.00007 0.00001 - 0.02530 0.00397 0.00044 0.00026 0.00000 0.00000 0.00007 0.00001 - 0.02415 0.00378 0.00042 0.00025 0.00000 0.00000 0.00007 0.00001 - 0.02305 0.00359 0.00039 0.00024 0.00000 0.00000 0.00006 0.00001 - 0.02202 0.00342 0.00038 0.00022 0.00000 0.00000 0.00006 0.00001 - 0.02108 0.00326 0.00036 0.00021 0.00000 0.00000 0.00006 0.00001 - 0.02022 0.00311 0.00034 0.00020 0.00000 0.00000 0.00005 0.00001 - 0.01940 0.00298 0.00033 0.00019 0.00000 0.00000 0.00005 0.00001 - 0.11086 0.01806 0.00060 0.00117 0.00000 0.00000 0.00030 0.00004 - 0.10348 0.01672 0.00069 0.00107 0.00000 0.00000 0.00028 0.00004 - 0.09357 0.01495 0.00077 0.00095 0.00000 0.00000 0.00025 0.00003 - 0.08704 0.01379 0.00079 0.00086 0.00000 0.00000 0.00022 0.00003 - 0.08072 0.01268 0.00080 0.00079 0.00000 0.00000 0.00021 0.00003 - 0.07568 0.01180 0.00079 0.00073 0.00000 0.00000 0.00019 0.00003 - 0.07117 0.01102 0.00078 0.00067 0.00000 0.00000 0.00018 0.00003 - 0.06672 0.01026 0.00076 0.00062 0.00000 0.00000 0.00016 0.00003 - 0.06310 0.00964 0.00074 0.00058 0.00000 0.00000 0.00015 0.00003 - 0.05981 0.00909 0.00072 0.00054 0.00000 0.00000 0.00014 0.00003 - 0.05734 0.00868 0.00070 0.00052 0.00000 0.00000 0.00014 0.00003 - 0.05245 0.00786 0.00066 0.00046 0.00000 0.00000 0.00012 0.00002 - 0.04860 0.00723 0.00062 0.00042 0.00000 0.00000 0.00011 0.00002 - 0.04466 0.00658 0.00058 0.00038 0.00000 0.00000 0.00010 0.00002 - 0.04093 0.00598 0.00053 0.00034 0.00000 0.00000 0.00009 0.00002 - 0.03784 0.00549 0.00050 0.00031 0.00000 0.00000 0.00008 0.00002 - 0.03498 0.00503 0.00046 0.00028 0.00000 0.00000 0.00008 0.00002 - 0.03279 0.00469 0.00043 0.00026 0.00000 0.00000 0.00007 0.00002 - 0.03033 0.00431 0.00040 0.00024 0.00000 0.00000 0.00006 0.00002 - 0.02833 0.00400 0.00037 0.00022 0.00000 0.00000 0.00006 0.00002 - 0.02662 0.00373 0.00035 0.00020 0.00000 0.00000 0.00006 0.00001 - 0.02461 0.00343 0.00032 0.00019 0.00000 0.00000 0.00005 0.00001 - 0.02287 0.00316 0.00030 0.00017 0.00000 0.00000 0.00005 0.00001 - 0.02136 0.00294 0.00028 0.00016 0.00000 0.00000 0.00004 0.00001 - 0.01996 0.00273 0.00026 0.00015 0.00000 0.00000 0.00004 0.00001 - 0.01869 0.00254 0.00024 0.00013 0.00000 0.00000 0.00004 0.00001 - 0.01756 0.00237 0.00022 0.00012 0.00000 0.00000 0.00003 0.00001 - 0.01657 0.00223 0.00021 0.00012 0.00000 0.00000 0.00003 0.00001 - 0.01563 0.00209 0.00020 0.00011 0.00000 0.00000 0.00003 0.00001 - 0.01477 0.00197 0.00019 0.00010 0.00000 0.00000 0.00003 0.00001 - 0.01399 0.00185 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 - 0.01330 0.00175 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 - 0.01264 0.00166 0.00016 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01202 0.00157 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01146 0.00149 0.00014 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01095 0.00142 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 - 0.01046 0.00135 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 - 0.06781 0.00906 0.00019 0.00043 0.00000 0.00000 0.00012 0.00004 - 0.06280 0.00832 0.00024 0.00040 0.00000 0.00000 0.00011 0.00004 - 0.05614 0.00735 0.00029 0.00034 0.00000 0.00000 0.00010 0.00004 - 0.05180 0.00672 0.00031 0.00031 0.00000 0.00000 0.00009 0.00003 - 0.04763 0.00613 0.00031 0.00028 0.00000 0.00000 0.00008 0.00003 - 0.04434 0.00566 0.00031 0.00026 0.00000 0.00000 0.00007 0.00003 - 0.04142 0.00525 0.00031 0.00024 0.00000 0.00000 0.00007 0.00003 - 0.03856 0.00486 0.00030 0.00022 0.00000 0.00000 0.00006 0.00002 - 0.03624 0.00454 0.00029 0.00020 0.00000 0.00000 0.00006 0.00002 - 0.03416 0.00425 0.00028 0.00019 0.00000 0.00000 0.00005 0.00002 - 0.03260 0.00404 0.00027 0.00018 0.00000 0.00000 0.00005 0.00002 - 0.02953 0.00362 0.00025 0.00016 0.00000 0.00000 0.00004 0.00002 - 0.02714 0.00330 0.00024 0.00014 0.00000 0.00000 0.00004 0.00002 - 0.02472 0.00298 0.00022 0.00013 0.00000 0.00000 0.00004 0.00002 - 0.02245 0.00268 0.00020 0.00011 0.00000 0.00000 0.00003 0.00002 - 0.02058 0.00244 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 - 0.01887 0.00222 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 - 0.01757 0.00206 0.00016 0.00009 0.00000 0.00000 0.00002 0.00001 - 0.01613 0.00187 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01495 0.00172 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 - 0.01396 0.00160 0.00013 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01280 0.00146 0.00012 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01181 0.00134 0.00011 0.00005 0.00000 0.00000 0.00002 0.00001 - 0.01096 0.00123 0.00010 0.00005 0.00000 0.00000 0.00001 0.00001 - 0.01017 0.00114 0.00009 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00946 0.00105 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00883 0.00098 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00829 0.00091 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00777 0.00085 0.00007 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.00730 0.00079 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00688 0.00074 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00651 0.00070 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00615 0.00066 0.00005 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00582 0.00062 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00553 0.00059 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00526 0.00056 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00500 0.00053 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.03634 0.00380 0.00005 0.00013 0.00000 0.00000 0.00004 0.00003 - 0.03335 0.00346 0.00007 0.00011 0.00000 0.00000 0.00003 0.00002 - 0.02942 0.00301 0.00008 0.00010 0.00000 0.00000 0.00003 0.00002 - 0.02689 0.00273 0.00008 0.00009 0.00000 0.00000 0.00003 0.00002 - 0.02449 0.00246 0.00008 0.00008 0.00000 0.00000 0.00002 0.00002 - 0.02261 0.00226 0.00008 0.00007 0.00000 0.00000 0.00002 0.00002 - 0.02095 0.00208 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01934 0.00191 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01806 0.00177 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 - 0.01690 0.00164 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 - 0.01605 0.00155 0.00007 0.00005 0.00000 0.00000 0.00001 0.00001 - 0.01437 0.00138 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.01309 0.00125 0.00006 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.01179 0.00111 0.00006 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.01060 0.00099 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.00962 0.00089 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.00874 0.00080 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 - 0.00807 0.00074 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 - 0.00734 0.00067 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00675 0.00061 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00626 0.00056 0.00003 0.00002 0.00000 0.00000 0.00000 0.00000 - 0.00569 0.00051 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00520 0.00046 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00478 0.00042 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00441 0.00038 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00407 0.00035 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00377 0.00033 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00351 0.00030 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00327 0.00028 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00305 0.00026 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00286 0.00024 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00269 0.00023 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00253 0.00021 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00238 0.00020 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00225 0.00019 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00213 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00201 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00478 0.00023 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00427 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00363 0.00017 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00323 0.00015 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00286 0.00013 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00257 0.00012 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00233 0.00011 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00210 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00192 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00177 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00165 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00143 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00127 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00111 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00097 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00085 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00075 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00068 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00060 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00054 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00049 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00043 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00039 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00035 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00031 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00028 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00026 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00023 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00021 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00020 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00015 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00014 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00013 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00012 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00011 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.02366 0.01081 9.07020 0.83158 0.00000 0.00000 0.43256 0.83158 - 0.02383 0.01095 12.48341 0.86348 0.00000 0.00000 0.46703 0.86348 - 0.02408 0.01115 18.65619 0.93210 0.00000 0.00000 0.53938 0.93210 - 0.02426 0.01129 23.97873 1.00041 0.06542 0.00000 0.61032 1.00041 - 0.02445 0.01145 30.42459 1.09094 0.16238 0.00000 0.70356 1.09094 - 0.02461 0.01158 36.72531 1.18593 0.26281 0.00000 0.80084 1.18593 - 0.02476 0.01170 43.44030 1.29302 0.37502 0.00000 0.91008 1.29302 - 0.02492 0.01184 51.31299 1.42510 0.51245 0.00000 1.04442 1.42510 - 0.02506 0.01195 58.79745 1.55632 0.64823 0.00000 1.17756 1.55632 - 0.02520 0.01207 66.60634 1.69841 0.79467 0.00000 1.32148 1.69841 - 0.02531 0.01216 73.20739 1.82222 0.92187 0.00000 1.44672 1.82222 - 0.02553 0.01234 88.53299 2.12126 1.22802 0.00172 1.74875 2.12126 - 0.02573 0.01251 102.75306 2.41926 1.53204 0.30236 2.04929 2.41927 - 0.02595 0.01269 120.16188 2.79906 1.91842 0.70038 2.43186 2.79906 - 0.02617 0.01288 139.97977 3.24856 2.37463 1.16843 2.88419 3.24857 - 0.02638 0.01305 159.48859 3.70700 2.83902 1.64333 3.34513 3.70700 - 0.02658 0.01323 180.66284 4.22072 3.35864 2.17334 3.86133 4.22073 - 0.02675 0.01337 199.37390 4.68746 3.83018 2.65335 4.33009 4.68747 - 0.02696 0.01355 223.45438 5.30441 4.45286 3.28610 4.94945 5.30442 - 0.02714 0.01371 246.03366 5.89830 5.05172 3.89372 5.54543 5.89830 - 0.02731 0.01385 267.79172 6.48372 5.64164 4.49154 6.13274 6.48373 - 0.02752 0.01403 296.84021 7.28408 6.44759 5.30734 6.93545 7.28408 - 0.02772 0.01420 325.62436 8.09696 7.26566 6.13449 7.75051 8.09696 - 0.02791 0.01436 353.88416 8.91304 8.08652 6.96373 8.56861 8.91305 - 0.02810 0.01452 383.36743 9.78234 8.96051 7.84596 9.43988 9.78235 - 0.02828 0.01468 413.42319 10.68644 9.86915 8.76253 10.34589 10.68645 - 0.02845 0.01483 442.94604 11.59115 10.77809 9.67888 11.25238 11.59117 - 0.02862 0.01497 471.72626 12.48836 11.67923 10.58689 12.15123 12.48837 - 0.02878 0.01511 501.56931 13.43383 12.62861 11.54310 13.09835 13.43385 - 0.02894 0.01525 531.82843 14.40778 13.60635 12.52746 14.07388 14.40779 - 0.02910 0.01539 561.41571 15.37430 14.57644 13.50378 15.04191 15.37432 - 0.02924 0.01551 590.14099 16.32567 15.53114 14.46430 15.99468 16.32568 - 0.02939 0.01564 619.84021 17.32247 16.53127 15.47024 16.99288 17.32248 - 0.02954 0.01577 649.84717 18.34259 17.55465 16.49930 18.01437 18.34261 - 0.02968 0.01589 679.12280 19.35028 18.56542 17.51542 19.02335 19.35030 - 0.02981 0.01600 707.48151 20.33768 19.55571 18.51075 20.01197 20.33770 - 0.02994 0.01612 736.73621 21.36765 20.58858 19.54867 21.04315 21.36767 - 0.02700 0.01348 7.96348 0.71306 0.00000 0.00000 0.37131 0.71306 - 0.02720 0.01365 10.86776 0.74096 0.00000 0.00000 0.40142 0.74096 - 0.02749 0.01390 16.03893 0.80013 0.00000 0.00000 0.46377 0.80013 - 0.02771 0.01408 20.43001 0.85827 0.05570 0.00000 0.52417 0.85828 - 0.02793 0.01427 25.68217 0.93452 0.13748 0.00000 0.60274 0.93453 - 0.02812 0.01444 30.75863 1.01376 0.22139 0.00000 0.68394 1.01376 - 0.02831 0.01460 36.11567 1.10233 0.31437 0.00000 0.77436 1.10234 - 0.02850 0.01476 42.33580 1.21067 0.42730 0.00000 0.88463 1.21068 - 0.02867 0.01491 48.19603 1.31747 0.53802 0.00000 0.99307 1.31747 - 0.02883 0.01505 54.26094 1.43230 0.65659 0.00000 1.10947 1.43231 - 0.02896 0.01516 59.35228 1.53176 0.75896 0.00000 1.21016 1.53177 - 0.02924 0.01540 71.06065 1.77002 1.00334 0.00137 1.45098 1.77003 - 0.02947 0.01560 81.78095 2.00507 1.24354 0.23937 1.68819 2.00508 - 0.02974 0.01583 94.75594 2.30171 1.54584 0.55146 1.98721 2.30172 - 0.03001 0.01607 109.35155 2.64921 1.89910 0.91466 2.33712 2.64922 - 0.03026 0.01629 123.55772 3.00016 2.25517 1.27957 2.69022 3.00018 - 0.03052 0.01650 138.81337 3.38985 2.64991 1.68304 3.08203 3.38987 - 0.03072 0.01668 152.16571 3.74098 3.00517 2.04541 3.43489 3.74100 - 0.03098 0.01690 169.18658 4.20131 3.47042 2.51912 3.89728 4.20134 - 0.03120 0.01710 184.99269 4.64076 3.91414 2.97019 4.33852 4.64079 - 0.03141 0.01728 200.09329 5.07076 4.34799 3.41067 4.77013 5.07078 - 0.03167 0.01750 220.06784 5.65396 4.93600 4.00695 5.35535 5.65399 - 0.03192 0.01772 239.66544 6.24129 5.52778 4.60635 5.94454 6.24132 - 0.03215 0.01792 258.72931 6.82631 6.11690 5.20250 6.53128 6.82635 - 0.03239 0.01812 278.44409 7.44481 6.73943 5.83194 7.15146 7.44485 - 0.03261 0.01831 298.36728 8.08333 7.38184 6.48100 7.79161 8.08337 - 0.03283 0.01850 317.77621 8.71782 8.01995 7.12532 8.42762 8.71786 - 0.03303 0.01868 336.54990 9.34290 8.64841 7.75955 9.05411 9.34294 - 0.03324 0.01885 355.87140 9.99745 9.30631 8.42317 9.71007 9.99751 - 0.03344 0.01903 375.31610 10.66748 9.97959 9.10200 10.38146 10.66753 - 0.03364 0.01919 394.19354 11.32841 10.64358 9.77122 11.04368 11.32847 - 0.03382 0.01935 412.39755 11.97531 11.29334 10.42585 11.69177 11.97537 - 0.03401 0.01951 431.09399 12.64933 11.97022 11.10760 12.36699 12.64939 - 0.03419 0.01967 449.86148 13.33539 12.65907 11.80120 13.05421 13.33545 - 0.03437 0.01982 468.05460 14.00947 13.33579 12.48241 13.72940 14.00954 - 0.03454 0.01996 485.57220 14.66669 13.99549 13.14633 14.38766 14.66676 - 0.03471 0.02010 503.53693 15.34889 14.68017 13.83524 15.07090 15.34897 - 0.03069 0.01656 6.99648 0.61443 0.00000 0.00000 0.32026 0.61443 - 0.03092 0.01677 9.46487 0.63885 0.00000 0.00000 0.34657 0.63885 - 0.03126 0.01708 13.79128 0.68989 0.00000 0.00000 0.40035 0.68990 - 0.03151 0.01730 17.40904 0.73940 0.04744 0.00000 0.45179 0.73941 - 0.03177 0.01754 21.68345 0.80364 0.11643 0.00000 0.51802 0.80365 - 0.03200 0.01774 25.76971 0.86976 0.18657 0.00000 0.58582 0.86977 - 0.03222 0.01794 30.04086 0.94305 0.26365 0.00000 0.66070 0.94306 - 0.03244 0.01814 34.95436 1.03198 0.35652 0.00000 0.75127 1.03199 - 0.03264 0.01832 39.54406 1.11898 0.44690 0.00000 0.83968 1.11899 - 0.03284 0.01849 44.25797 1.21190 0.54303 0.00000 0.93395 1.21192 - 0.03299 0.01863 48.18958 1.29193 0.62556 0.00000 1.01502 1.29194 - 0.03331 0.01892 57.15152 1.48213 0.82101 0.00109 1.20742 1.48215 - 0.03359 0.01917 65.25593 1.66800 1.01131 0.19002 1.39514 1.66802 - 0.03391 0.01945 74.96340 1.90046 1.24863 0.43556 1.62963 1.90048 - 0.03424 0.01974 85.76724 2.17022 1.52334 0.71863 1.90146 2.17025 - 0.03454 0.02001 96.17752 2.44026 1.79777 1.00048 2.17333 2.44029 - 0.03484 0.02028 107.25268 2.73763 2.09948 1.30952 2.47252 2.73766 - 0.03509 0.02050 116.86543 3.00361 2.36901 1.58502 2.73998 3.00365 - 0.03539 0.02077 129.01874 3.34979 2.71941 1.94252 3.08793 3.34983 - 0.03567 0.02101 140.21144 3.67786 3.05115 2.28043 3.41753 3.67791 - 0.03591 0.02123 150.82655 3.99682 3.37341 2.60826 3.73787 3.99687 - 0.03623 0.02150 164.75859 4.42647 3.80719 3.04898 4.16925 4.42652 - 0.03653 0.02176 178.31473 4.85603 4.24057 3.48875 4.60040 4.85609 - 0.03681 0.02201 191.40092 5.28105 4.66910 3.92318 5.02689 5.28111 - 0.03710 0.02226 204.83585 5.72756 5.11907 4.37894 5.47485 5.72763 - 0.03738 0.02250 218.31612 6.18567 5.58052 4.84598 5.93436 6.18575 - 0.03764 0.02272 231.36015 6.63825 6.03621 5.30687 6.38823 6.63833 - 0.03789 0.02294 243.89775 7.08170 6.48255 5.75805 6.83289 7.08178 - 0.03814 0.02316 256.72339 7.54365 6.94738 6.22766 7.29604 7.54374 - 0.03839 0.02337 269.55334 8.01408 7.42060 6.70554 7.76764 8.01418 - 0.03863 0.02357 281.93805 8.47588 7.88502 7.17433 8.23053 8.47598 - 0.03886 0.02376 293.81683 8.92579 8.33739 7.63079 8.68147 8.92590 - 0.03909 0.02396 305.95276 9.39249 8.80654 8.10401 9.14919 9.39260 - 0.03932 0.02415 318.07233 9.86545 9.28189 8.58335 9.62315 9.86556 - 0.03953 0.02433 329.76175 10.32818 9.74689 9.05210 10.08683 10.32831 - 0.03974 0.02451 340.96423 10.77755 10.19838 9.50713 10.53709 10.77768 - 0.03995 0.02468 352.39966 11.24220 10.66516 9.97746 11.00263 11.24233 - 0.03312 0.01871 6.48074 0.56323 0.00000 0.00000 0.29374 0.56323 - 0.03338 0.01895 8.71949 0.58580 0.00000 0.00000 0.31805 0.58581 - 0.03376 0.01930 12.60485 0.63256 0.00000 0.00000 0.36730 0.63257 - 0.03404 0.01955 15.82258 0.67755 0.04310 0.00000 0.41404 0.67756 - 0.03433 0.01981 19.59520 0.73552 0.10543 0.00000 0.47383 0.73553 - 0.03458 0.02004 23.17697 0.79484 0.16841 0.00000 0.53468 0.79485 - 0.03482 0.02026 26.89844 0.86025 0.23729 0.00000 0.60154 0.86026 - 0.03508 0.02049 31.15475 0.93921 0.31985 0.00000 0.68200 0.93923 - 0.03530 0.02070 35.10921 1.01610 0.39982 0.00000 0.76018 1.01612 - 0.03552 0.02089 39.15126 1.09788 0.48453 0.00000 0.84318 1.09790 - 0.03569 0.02104 42.50878 1.16805 0.55700 0.00000 0.91432 1.16808 - 0.03606 0.02137 50.11974 1.33404 0.72779 0.00095 1.08231 1.33407 - 0.03637 0.02166 56.94827 1.49530 0.89310 0.16527 1.24526 1.49534 - 0.03673 0.02197 65.07397 1.69584 1.09808 0.37767 1.44765 1.69588 - 0.03710 0.02230 74.05653 1.92721 1.33396 0.62108 1.68090 1.92725 - 0.03744 0.02260 82.65697 2.15753 1.56829 0.86209 1.91290 2.15758 - 0.03778 0.02290 91.75272 2.40987 1.82460 1.12500 2.16690 2.40993 - 0.03807 0.02315 99.60578 2.63454 2.05251 1.35829 2.39292 2.63460 - 0.03841 0.02346 109.48273 2.92564 2.34746 1.65963 2.68562 2.92570 - 0.03872 0.02373 118.53139 3.20026 2.62542 1.94316 2.96164 3.20033 - 0.03901 0.02397 127.07339 3.46618 2.89437 2.21712 3.22883 3.46626 - 0.03937 0.02429 138.22931 3.82287 3.25483 2.58382 3.58709 3.82296 - 0.03971 0.02458 149.02731 4.17788 3.61333 2.94807 3.94356 4.17798 - 0.04004 0.02486 159.40056 4.52769 3.96634 3.30639 4.29470 4.52779 - 0.04036 0.02513 170.00134 4.89374 4.33555 3.68081 4.66207 4.89384 - 0.04068 0.02540 180.58994 5.26786 4.71272 4.06300 5.03746 5.26797 - 0.04098 0.02566 190.79234 5.63612 5.08383 4.43879 5.40692 5.63625 - 0.04127 0.02590 200.55952 5.99574 5.44609 4.80541 5.76764 5.99588 - 0.04156 0.02615 210.51302 6.36917 5.82213 5.18576 6.14216 6.36930 - 0.04185 0.02639 220.43213 6.74823 6.20375 5.57157 6.52229 6.74838 - 0.04213 0.02662 229.97256 7.11922 6.57713 5.94888 6.89428 7.11937 - 0.04239 0.02683 239.09229 7.47964 6.93979 6.31522 7.25563 7.47980 - 0.04265 0.02705 248.37852 7.85247 7.31486 6.69395 7.62940 7.85264 - 0.04291 0.02727 257.62228 8.22929 7.69387 7.07654 8.00713 8.22947 - 0.04317 0.02747 266.50970 8.59700 8.06364 7.44970 8.37570 8.59719 - 0.04341 0.02767 275.00174 8.95322 8.42180 7.81103 8.73273 8.95341 - 0.04365 0.02787 283.64520 9.32067 8.79120 8.18361 9.10099 9.32086 - 0.03498 0.02041 6.13536 0.52948 0.00000 0.00000 0.27625 0.52948 - 0.03526 0.02067 8.22148 0.55082 0.00000 0.00000 0.29922 0.55083 - 0.03568 0.02105 11.81531 0.59473 0.00000 0.00000 0.34546 0.59474 - 0.03598 0.02132 14.77010 0.63672 0.04023 0.00000 0.38910 0.63673 - 0.03630 0.02161 18.21447 0.69056 0.09814 0.00000 0.44464 0.69057 - 0.03657 0.02186 21.46766 0.74539 0.15642 0.00000 0.50091 0.74541 - 0.03683 0.02210 24.83249 0.80563 0.21990 0.00000 0.56250 0.80565 - 0.03711 0.02235 28.66401 0.87806 0.29572 0.00000 0.63634 0.87809 - 0.03736 0.02257 32.20930 0.94835 0.36890 0.00000 0.70784 0.94838 - 0.03759 0.02279 35.81995 1.02288 0.44617 0.00000 0.78351 1.02292 - 0.03778 0.02295 38.80980 1.08666 0.51210 0.00000 0.84819 1.08670 - 0.03818 0.02331 45.55868 1.23698 0.66691 0.00086 1.00038 1.23702 - 0.03853 0.02362 51.57695 1.38236 0.81609 0.14930 1.14734 1.38241 - 0.03892 0.02396 58.70229 1.56239 1.00028 0.34036 1.32911 1.56245 - 0.03933 0.02432 66.53792 1.76917 1.21129 0.55836 1.53766 1.76924 - 0.03970 0.02465 74.00317 1.97416 1.42004 0.77330 1.74422 1.97423 - 0.04008 0.02498 81.86190 2.19787 1.64746 1.00685 1.96947 2.19795 - 0.04040 0.02525 88.61882 2.39635 1.84898 1.21335 2.16922 2.39644 - 0.04078 0.02558 97.08227 2.65263 2.10886 1.47917 2.42700 2.65272 - 0.04113 0.02587 104.80379 2.89356 2.35293 1.72838 2.66924 2.89366 - 0.04144 0.02614 112.06613 3.12614 2.58835 1.96844 2.90301 3.12625 - 0.04184 0.02648 121.51340 3.43708 2.90282 2.28871 3.21542 3.43720 - 0.04222 0.02681 130.61909 3.74548 3.21449 2.60571 3.52519 3.74561 - 0.04258 0.02711 139.33240 4.04838 3.52039 2.91652 3.82934 4.04852 - 0.04294 0.02741 148.20369 4.36437 3.83934 3.24031 4.14656 4.36452 - 0.04330 0.02770 157.03224 4.68636 4.16419 3.56981 4.46975 4.68652 - 0.04363 0.02798 165.50919 5.00242 4.48290 3.89286 4.78691 5.00258 - 0.04395 0.02824 173.59793 5.31023 4.79319 4.20718 5.09576 5.31041 - 0.04428 0.02851 181.81505 5.62904 5.11447 4.53245 5.41560 5.62923 - 0.04460 0.02877 189.97807 5.95187 5.43968 4.86154 5.73942 5.95206 - 0.04490 0.02902 197.80595 6.26705 5.75710 5.18261 6.05554 6.26725 - 0.04519 0.02925 205.26749 6.57256 6.06472 5.49363 6.36193 6.57278 - 0.04549 0.02949 212.84416 6.88790 6.38215 5.81446 6.67815 6.88813 - 0.04578 0.02972 220.36563 7.20593 6.70223 6.13786 6.99703 7.20616 - 0.04606 0.02995 227.57787 7.51562 7.01386 6.45261 7.30753 7.51586 - 0.04633 0.03016 234.45189 7.81503 7.31509 6.75679 7.60771 7.81529 - 0.04660 0.03038 241.43127 8.12330 7.62519 7.06983 7.91674 8.12357 - 0.03648 0.02180 5.88041 0.50498 0.00000 0.00000 0.26355 0.50498 - 0.03678 0.02208 7.85486 0.52542 0.00000 0.00000 0.28554 0.52543 - 0.03722 0.02248 11.23652 0.56724 0.00000 0.00000 0.32957 0.56725 - 0.03754 0.02278 14.00105 0.60703 0.03813 0.00000 0.37093 0.60705 - 0.03788 0.02309 17.20911 0.65786 0.09283 0.00000 0.42338 0.65788 - 0.03817 0.02335 20.22689 0.70945 0.14769 0.00000 0.47633 0.70947 - 0.03845 0.02361 23.33732 0.76594 0.20727 0.00000 0.53411 0.76597 - 0.03875 0.02388 26.86715 0.83368 0.27822 0.00000 0.60319 0.83371 - 0.03901 0.02411 30.12302 0.89923 0.34652 0.00000 0.66988 0.89927 - 0.03926 0.02434 33.42966 0.96857 0.41847 0.00000 0.74031 0.96861 - 0.03946 0.02452 36.16127 1.02779 0.47973 0.00000 0.80038 1.02783 - 0.03989 0.02490 42.30732 1.16695 0.62317 0.00080 0.94132 1.16700 - 0.04027 0.02523 47.76242 1.30109 0.76091 0.13797 1.07697 1.30115 - 0.04069 0.02560 54.19625 1.46666 0.93044 0.31398 1.24419 1.46673 - 0.04113 0.02598 61.24351 1.65619 1.12399 0.51412 1.43539 1.65627 - 0.04153 0.02633 67.93269 1.84348 1.31486 0.71082 1.62418 1.84357 - 0.04193 0.02668 74.94997 2.04727 1.52218 0.92392 1.82944 2.04737 - 0.04227 0.02697 80.96469 2.22760 1.70540 1.11184 2.01098 2.22771 - 0.04269 0.02732 88.47541 2.45984 1.94107 1.35310 2.24464 2.45995 - 0.04306 0.02764 95.30652 2.67760 2.16181 1.57870 2.46365 2.67772 - 0.04340 0.02792 101.71379 2.88733 2.37423 1.79550 2.67451 2.88747 - 0.04383 0.02829 110.02437 3.16704 2.65730 2.08402 2.95561 3.16719 - 0.04424 0.02863 118.00949 3.44374 2.93710 2.36885 3.23361 3.44389 - 0.04463 0.02895 125.62845 3.71485 3.21107 2.64745 3.50591 3.71501 - 0.04502 0.02927 133.36423 3.99704 3.49607 2.93701 3.78927 3.99721 - 0.04540 0.02958 141.04193 4.28394 3.78569 3.23101 4.07731 4.28413 - 0.04577 0.02988 148.39502 4.56497 4.06925 3.51866 4.35940 4.56518 - 0.04612 0.03016 155.39447 4.83814 4.34477 3.79798 4.63355 4.83835 - 0.04647 0.03044 162.48862 5.12054 4.62951 4.08649 4.91693 5.12077 - 0.04681 0.03072 169.51987 5.40596 4.91720 4.37783 5.20329 5.40620 - 0.04715 0.03099 176.24768 5.68414 5.19752 4.66158 5.48236 5.68439 - 0.04746 0.03124 182.64737 5.95334 5.46872 4.93599 5.75240 5.95360 - 0.04778 0.03149 189.13263 6.23075 5.74812 5.21859 6.03065 6.23102 - 0.04810 0.03174 195.55785 6.51009 6.02941 5.50301 6.31080 6.51038 - 0.04840 0.03198 201.70689 6.78169 6.30285 5.77939 6.58317 6.78198 - 0.04869 0.03220 207.55687 7.04391 6.56680 6.04611 6.84611 7.04421 - 0.04899 0.03243 213.48586 7.31350 6.83812 6.32022 7.11642 7.31381 - 0.04163 0.02675 5.15040 0.43649 0.00000 0.00000 0.22804 0.43650 - 0.04200 0.02709 6.80841 0.45436 0.00000 0.00000 0.24723 0.45438 - 0.04255 0.02759 9.59410 0.49027 0.00000 0.00000 0.28502 0.49029 - 0.04295 0.02795 11.82906 0.52388 0.03221 0.00000 0.31997 0.52391 - 0.04337 0.02832 14.38445 0.56626 0.07790 0.00000 0.36373 0.56630 - 0.04374 0.02865 16.75673 0.60879 0.12322 0.00000 0.40742 0.60883 - 0.04409 0.02896 19.17403 0.65489 0.17195 0.00000 0.45462 0.65495 - 0.04447 0.02929 21.88703 0.70964 0.22945 0.00000 0.51051 0.70971 - 0.04480 0.02958 24.36397 0.76216 0.28431 0.00000 0.56401 0.76223 - 0.04512 0.02986 26.85673 0.81727 0.34165 0.00000 0.62005 0.81735 - 0.04537 0.03008 28.90009 0.86403 0.39014 0.00000 0.66753 0.86411 - 0.04592 0.03054 33.44957 0.97291 0.50267 0.00062 0.77793 0.97301 - 0.04639 0.03095 37.42582 1.07671 0.60955 0.10734 0.88302 1.07682 - 0.04693 0.03140 42.05719 1.20349 0.73971 0.24289 1.01121 1.20362 - 0.04749 0.03186 47.06540 1.34705 0.88671 0.39536 1.15620 1.34720 - 0.04801 0.03229 51.76191 1.48747 1.03018 0.54368 1.29790 1.48764 - 0.04853 0.03272 56.63353 1.63882 1.18454 0.70284 1.45050 1.63900 - 0.04897 0.03307 60.76723 1.77161 1.31979 0.84200 1.58432 1.77181 - 0.04951 0.03350 65.87799 1.94120 1.49232 1.01916 1.75514 1.94142 - 0.04998 0.03389 70.47986 2.09890 1.65256 1.18344 1.91390 2.09913 - 0.05043 0.03424 74.75804 2.24967 1.80563 1.34014 2.06563 2.24992 - 0.05099 0.03468 80.25473 2.44917 2.00800 1.54704 2.26633 2.44944 - 0.05152 0.03510 85.48305 2.64490 2.20638 1.74959 2.46316 2.64519 - 0.05203 0.03549 90.42516 2.83520 2.39913 1.94619 2.65449 2.83551 - 0.05254 0.03588 95.39863 3.03187 2.59820 2.14903 2.85216 3.03220 - 0.05304 0.03626 100.29173 3.23041 2.79906 2.35353 3.05167 3.23076 - 0.05351 0.03662 104.93932 3.42359 2.99441 2.55227 3.24577 3.42396 - 0.05397 0.03697 109.32909 3.61021 3.18304 2.74405 3.43323 3.61060 - 0.05442 0.03731 113.74519 3.80200 3.37683 2.94096 3.62585 3.80241 - 0.05488 0.03765 118.08972 3.99471 3.57148 3.13864 3.81937 3.99514 - 0.05531 0.03797 122.21742 4.18148 3.76008 3.33009 4.00691 4.18193 - 0.05573 0.03827 126.11768 4.36129 3.94160 3.51427 4.18744 4.36176 - 0.05614 0.03858 130.04422 4.54565 4.12766 3.70299 4.37251 4.54614 - 0.05656 0.03888 133.90953 4.73037 4.31406 3.89197 4.55793 4.73088 - 0.05696 0.03917 137.58543 4.90911 4.49437 4.07472 4.73733 4.90963 - 0.05734 0.03945 141.06190 5.08089 4.66764 4.25029 4.90974 5.08144 - 0.05773 0.03973 144.56499 5.25674 4.84497 4.42992 5.08621 5.25730 - 0.04768 0.03277 4.50643 0.37823 0.00000 0.00000 0.19783 0.37825 - 0.04815 0.03318 5.88895 0.39389 0.00000 0.00000 0.21461 0.39392 - 0.04886 0.03379 8.16341 0.42468 0.00000 0.00000 0.24700 0.42473 - 0.04938 0.03423 9.95090 0.45297 0.02712 0.00000 0.27644 0.45304 - 0.04992 0.03469 11.96176 0.48814 0.06510 0.00000 0.31278 0.48822 - 0.05040 0.03509 13.80173 0.52298 0.10231 0.00000 0.34861 0.52307 - 0.05086 0.03547 15.65330 0.56034 0.14191 0.00000 0.38690 0.56045 - 0.05136 0.03588 17.70631 0.60423 0.18814 0.00000 0.43178 0.60436 - 0.05179 0.03623 19.55978 0.64594 0.23184 0.00000 0.47431 0.64608 - 0.05221 0.03657 21.40660 0.68933 0.27712 0.00000 0.51850 0.68948 - 0.05254 0.03684 22.90765 0.72587 0.31515 0.00000 0.55566 0.72604 - 0.05326 0.03741 26.21148 0.81013 0.40252 0.00048 0.64122 0.81033 - 0.05389 0.03790 29.04941 0.88951 0.48452 0.08262 0.72170 0.88973 - 0.05460 0.03845 32.30956 0.98537 0.58326 0.18582 0.81877 0.98562 - 0.05535 0.03903 35.78522 1.09265 0.69347 0.30054 0.92727 1.09293 - 0.05603 0.03955 39.00108 1.19642 0.79985 0.41093 1.03214 1.19674 - 0.05673 0.04007 42.29527 1.30713 0.91313 0.52818 1.14392 1.30747 - 0.05731 0.04050 45.05922 1.40338 1.01148 0.62975 1.24106 1.40375 - 0.05802 0.04103 48.43869 1.52521 1.13581 0.75792 1.36393 1.52561 - 0.05866 0.04150 51.44758 1.63747 1.25025 0.87569 1.47711 1.63790 - 0.05925 0.04192 54.21704 1.74394 1.35869 0.98713 1.58441 1.74440 - 0.06000 0.04247 57.73747 1.88364 1.50085 1.13303 1.72514 1.88414 - 0.06071 0.04297 61.04794 2.01948 1.63895 1.27457 1.86193 2.02001 - 0.06139 0.04345 64.14410 2.15046 1.77202 1.41082 1.99380 2.15103 - 0.06206 0.04393 67.22849 2.28476 1.90839 1.55031 2.12897 2.28536 - 0.06273 0.04439 70.23277 2.41932 2.04493 1.68985 2.26436 2.41995 - 0.06337 0.04483 73.05930 2.54930 2.17677 1.82449 2.39512 2.54997 - 0.06398 0.04525 75.70518 2.67402 2.30322 1.95353 2.52057 2.67472 - 0.06459 0.04567 78.34405 2.80137 2.43228 2.08518 2.64864 2.80210 - 0.06519 0.04608 80.91782 2.92852 2.56110 2.21650 2.77650 2.92929 - 0.06577 0.04647 83.34300 3.05101 2.68517 2.34291 2.89965 3.05181 - 0.06633 0.04684 85.61670 3.16827 2.80389 2.46383 3.01753 3.16910 - 0.06689 0.04721 87.88810 3.28783 2.92492 2.58705 3.13771 3.28869 - 0.06744 0.04758 90.10722 3.40698 3.04551 2.70977 3.25746 3.40787 - 0.06797 0.04793 92.20187 3.52166 3.16154 2.82782 3.37272 3.52258 - 0.06848 0.04826 94.16901 3.63134 3.27250 2.94068 3.48294 3.63229 - 0.06900 0.04860 96.13747 3.74307 3.38552 3.05559 3.59521 3.74406 - 0.05176 0.03686 4.16730 0.34837 0.00000 0.00000 0.18235 0.34840 - 0.05232 0.03732 5.40540 0.36289 0.00000 0.00000 0.19789 0.36294 - 0.05315 0.03801 7.41548 0.39102 0.00000 0.00000 0.22749 0.39111 - 0.05377 0.03851 8.97463 0.41658 0.02449 0.00000 0.25409 0.41668 - 0.05442 0.03903 10.71075 0.44803 0.05850 0.00000 0.28662 0.44816 - 0.05499 0.03948 12.28489 0.47894 0.09157 0.00000 0.31843 0.47909 - 0.05554 0.03991 13.85649 0.51186 0.12652 0.00000 0.35220 0.51202 - 0.05613 0.04037 15.58577 0.55027 0.16706 0.00000 0.39151 0.55047 - 0.05664 0.04076 17.13596 0.58654 0.20515 0.00000 0.42854 0.58676 - 0.05714 0.04115 18.67086 0.62408 0.24441 0.00000 0.46680 0.62432 - 0.05754 0.04145 19.91170 0.65555 0.27723 0.00000 0.49883 0.65580 - 0.05840 0.04209 22.62300 0.72766 0.35217 0.00041 0.57214 0.72795 - 0.05915 0.04265 24.92589 0.79509 0.42199 0.07050 0.64057 0.79541 - 0.06000 0.04327 27.54815 0.87594 0.50547 0.15795 0.72253 0.87631 - 0.06090 0.04392 30.31849 0.96575 0.59795 0.25447 0.81346 0.96616 - 0.06171 0.04450 32.85975 1.05204 0.68661 0.34671 0.90075 1.05249 - 0.06255 0.04509 35.44203 1.14349 0.78042 0.44405 0.99320 1.14399 - 0.06325 0.04558 37.59300 1.22255 0.86140 0.52791 1.07307 1.22308 - 0.06410 0.04617 40.20416 1.32206 0.96320 0.63313 1.17354 1.32264 - 0.06486 0.04670 42.51210 1.41324 1.05637 0.72927 1.26556 1.41386 - 0.06557 0.04718 44.62263 1.49929 1.14422 0.81980 1.35237 1.49994 - 0.06647 0.04779 47.28684 1.61160 1.25877 0.93769 1.46563 1.61230 - 0.06732 0.04836 49.77347 1.72018 1.36943 1.05143 1.57509 1.72093 - 0.06813 0.04889 52.08295 1.82435 1.47552 1.16034 1.68007 1.82515 - 0.06894 0.04943 54.36831 1.93063 1.58369 1.27130 1.78715 1.93148 - 0.06974 0.04995 56.57959 2.03660 1.69149 1.38178 1.89390 2.03750 - 0.07050 0.05044 58.64695 2.13851 1.79510 1.48789 1.99653 2.13945 - 0.07122 0.05091 60.57061 2.23588 1.89406 1.58916 2.09457 2.23687 - 0.07196 0.05138 62.47810 2.33491 1.99467 1.69207 2.19427 2.33594 - 0.07268 0.05184 64.32774 2.43338 2.09467 1.79430 2.29339 2.43445 - 0.07337 0.05227 66.06090 2.52788 2.19062 1.89235 2.38851 2.52900 - 0.07403 0.05269 67.67719 2.61803 2.28212 1.98581 2.47923 2.61919 - 0.07470 0.05310 69.28337 2.70962 2.37507 2.08070 2.57140 2.71082 - 0.07536 0.05351 70.84445 2.80059 2.46736 2.17490 2.66293 2.80183 - 0.07599 0.05390 72.31041 2.88786 2.55588 2.26522 2.75073 2.88914 - 0.07660 0.05428 73.68045 2.97106 2.64026 2.35129 2.83443 2.97238 - 0.07721 0.05465 75.04483 3.05556 2.72594 2.43866 2.91944 3.05692 - 0.05502 0.04007 3.94328 0.32887 0.00000 0.00000 0.17226 0.32892 - 0.05565 0.04058 5.08547 0.34264 0.00000 0.00000 0.18699 0.34272 - 0.05661 0.04132 6.92158 0.36904 0.00000 0.00000 0.21476 0.36916 - 0.05731 0.04187 8.33185 0.39279 0.02276 0.00000 0.23949 0.39293 - 0.05805 0.04244 9.89013 0.42182 0.05418 0.00000 0.26953 0.42200 - 0.05870 0.04293 11.29336 0.45016 0.08455 0.00000 0.29872 0.45037 - 0.05933 0.04340 12.68598 0.48019 0.11648 0.00000 0.32955 0.48042 - 0.06001 0.04390 14.20950 0.51506 0.15334 0.00000 0.36525 0.51532 - 0.06060 0.04433 15.56791 0.54782 0.18780 0.00000 0.39873 0.54811 - 0.06117 0.04475 16.90650 0.58159 0.22319 0.00000 0.43319 0.58191 - 0.06163 0.04508 17.98423 0.60980 0.25267 0.00000 0.46193 0.61015 - 0.06262 0.04578 20.32610 0.67416 0.31968 0.00037 0.52741 0.67455 - 0.06348 0.04639 22.29790 0.73399 0.38176 0.06279 0.58819 0.73443 - 0.06445 0.04707 24.52796 0.80536 0.45558 0.14028 0.66059 0.80585 - 0.06547 0.04777 26.86749 0.88419 0.53692 0.22534 0.74049 0.88473 - 0.06641 0.04841 28.99929 0.95953 0.61450 0.30621 0.81677 0.96013 - 0.06737 0.04905 31.15196 1.03900 0.69618 0.39115 0.89718 1.03965 - 0.06817 0.04958 32.93495 1.10741 0.76639 0.46402 0.96635 1.10810 - 0.06914 0.05023 35.08725 1.19313 0.85427 0.55505 1.05299 1.19389 - 0.07001 0.05080 36.97872 1.27135 0.93436 0.63788 1.13200 1.27216 - 0.07082 0.05132 38.69954 1.34489 1.00960 0.71558 1.20626 1.34574 - 0.07185 0.05198 40.85984 1.44048 1.10731 0.81637 1.30275 1.44140 - 0.07282 0.05260 42.86415 1.53251 1.20129 0.91319 1.39562 1.53349 - 0.07374 0.05318 44.71528 1.62045 1.29104 1.00555 1.48432 1.62148 - 0.07467 0.05376 46.53725 1.70983 1.38222 1.09929 1.57447 1.71093 - 0.07558 0.05433 48.29073 1.79863 1.47274 1.19228 1.66401 1.79979 - 0.07645 0.05487 49.92167 1.88373 1.55945 1.28129 1.74979 1.88494 - 0.07728 0.05537 51.43184 1.96478 1.64200 1.36597 1.83148 1.96604 - 0.07811 0.05588 52.92221 2.04695 1.72566 1.45175 1.91429 2.04827 - 0.07893 0.05637 54.36046 2.12841 1.80857 1.53672 1.99636 2.12978 - 0.07972 0.05684 55.70192 2.20635 1.88788 1.61797 2.07489 2.20778 - 0.08046 0.05729 56.94738 2.28050 1.96331 1.69520 2.14959 2.28198 - 0.08122 0.05774 58.17962 2.35563 2.03972 1.77341 2.22527 2.35716 - 0.08197 0.05818 59.37204 2.43006 2.11540 1.85085 2.30023 2.43164 - 0.08269 0.05861 60.48693 2.50127 2.18780 1.92490 2.37195 2.50290 - 0.08338 0.05901 61.52457 2.56900 2.25665 1.99531 2.44016 2.57068 - 0.08407 0.05941 62.55368 2.63763 2.32640 2.06662 2.50927 2.63935 - 0.05772 0.04273 3.77879 0.31470 0.00000 0.00000 0.16494 0.31478 - 0.05843 0.04327 4.85035 0.32794 0.00000 0.00000 0.17908 0.32804 - 0.05949 0.04407 6.55933 0.35307 0.00000 0.00000 0.20552 0.35322 - 0.06027 0.04465 7.86163 0.37551 0.02151 0.00000 0.22889 0.37569 - 0.06110 0.04526 9.29176 0.40278 0.05104 0.00000 0.25712 0.40300 - 0.06182 0.04579 10.57253 0.42926 0.07945 0.00000 0.28441 0.42952 - 0.06252 0.04629 11.83758 0.45719 0.10920 0.00000 0.31311 0.45749 - 0.06327 0.04683 13.21516 0.48950 0.14339 0.00000 0.34622 0.48983 - 0.06393 0.04729 14.43820 0.51975 0.17526 0.00000 0.37715 0.52011 - 0.06457 0.04774 15.63881 0.55082 0.20787 0.00000 0.40887 0.55122 - 0.06508 0.04809 16.60230 0.57671 0.23496 0.00000 0.43527 0.57713 - 0.06618 0.04884 18.68669 0.63554 0.29632 0.00034 0.49517 0.63603 - 0.06713 0.04949 20.42936 0.68999 0.35291 0.05732 0.55053 0.69053 - 0.06822 0.05022 22.38960 0.75466 0.41992 0.12777 0.61620 0.75526 - 0.06935 0.05097 24.43460 0.82578 0.49344 0.20478 0.68833 0.82645 - 0.07040 0.05165 26.28814 0.89347 0.56326 0.27769 0.75693 0.89420 - 0.07146 0.05234 28.15049 0.96460 0.63650 0.35399 0.82896 0.96539 - 0.07235 0.05291 29.68606 1.02561 0.69924 0.41922 0.89071 1.02646 - 0.07343 0.05360 31.53139 1.10182 0.77751 0.50045 0.96779 1.10274 - 0.07440 0.05421 33.14566 1.17112 0.84860 0.57411 1.03785 1.17210 - 0.07530 0.05476 34.60829 1.23608 0.91518 0.64301 1.10351 1.23712 - 0.07644 0.05547 36.43635 1.32026 1.00138 0.73210 1.18855 1.32137 - 0.07752 0.05613 38.12432 1.40102 1.08402 0.81740 1.27011 1.40220 - 0.07854 0.05675 39.67632 1.47796 1.16270 0.89852 1.34779 1.47921 - 0.07957 0.05737 41.19726 1.55593 1.24238 0.98062 1.42650 1.55725 - 0.08058 0.05797 42.65473 1.63317 1.32128 1.06183 1.50445 1.63456 - 0.08154 0.05854 44.00474 1.70700 1.39665 1.13936 1.57894 1.70845 - 0.08245 0.05907 45.24985 1.77713 1.46822 1.21293 1.64968 1.77864 - 0.08337 0.05961 46.47392 1.84805 1.54058 1.28728 1.72122 1.84963 - 0.08428 0.06014 47.65060 1.91820 1.61212 1.36075 1.79196 1.91984 - 0.08515 0.06064 48.74395 1.98516 1.68040 1.43085 1.85950 1.98687 - 0.08597 0.06112 49.75541 2.04873 1.74520 1.49734 1.92359 2.05050 - 0.08681 0.06159 50.75253 2.11300 1.81071 1.56454 1.98840 2.11483 - 0.08763 0.06206 51.71397 2.17654 1.87545 1.63093 2.05246 2.17843 - 0.08843 0.06251 52.60968 2.23722 1.93727 1.69431 2.11362 2.23916 - 0.08918 0.06294 53.44049 2.29482 1.99595 1.75445 2.17168 2.29681 - 0.08995 0.06336 54.26169 2.35307 2.05528 1.81525 2.23040 2.35512 - 0.06794 0.05219 3.32287 0.27537 0.00000 0.00000 0.14466 0.27557 - 0.06896 0.05288 4.19249 0.28713 0.00000 0.00000 0.15721 0.28739 - 0.07049 0.05388 5.54340 0.30872 0.00000 0.00000 0.17995 0.30908 - 0.07162 0.05461 6.54571 0.32748 0.01801 0.00000 0.19953 0.32791 - 0.07281 0.05537 7.62371 0.34982 0.04230 0.00000 0.22270 0.35032 - 0.07386 0.05603 8.57133 0.37113 0.06528 0.00000 0.24473 0.37170 - 0.07486 0.05666 9.49230 0.39328 0.08900 0.00000 0.26756 0.39392 - 0.07594 0.05732 10.47950 0.41854 0.11590 0.00000 0.29352 0.41925 - 0.07688 0.05790 11.34317 0.44189 0.14066 0.00000 0.31748 0.44266 - 0.07780 0.05846 12.17996 0.46561 0.16572 0.00000 0.34177 0.46644 - 0.07853 0.05890 12.84397 0.48519 0.18634 0.00000 0.36180 0.48607 - 0.08010 0.05983 14.25869 0.52911 0.23247 0.00025 0.40667 0.53010 - 0.08146 0.06064 15.41185 0.56914 0.27438 0.04267 0.44752 0.57023 - 0.08300 0.06154 16.68438 0.61600 0.32330 0.09441 0.49526 0.61720 - 0.08462 0.06247 17.98583 0.66677 0.37617 0.15015 0.54694 0.66808 - 0.08609 0.06331 19.14318 0.71440 0.42569 0.20221 0.59539 0.71583 - 0.08759 0.06416 20.28525 0.76381 0.47696 0.25600 0.64561 0.76535 - 0.08885 0.06486 21.21159 0.80570 0.52038 0.30146 0.68816 0.80733 - 0.09037 0.06571 22.30664 0.85742 0.57393 0.35744 0.74067 0.85916 - 0.09173 0.06645 23.24849 0.90390 0.62201 0.40764 0.78785 0.90576 - 0.09298 0.06714 24.08894 0.94704 0.66659 0.45412 0.83162 0.94899 - 0.09457 0.06800 25.12208 1.00232 0.72369 0.51359 0.88769 1.00440 - 0.09607 0.06880 26.05892 1.05476 0.77780 0.56989 0.94086 1.05695 - 0.09748 0.06956 26.90561 1.10417 0.82878 0.62288 0.99095 1.10647 - 0.09890 0.07030 27.72158 1.15375 0.87989 0.67598 1.04120 1.15616 - 0.10029 0.07103 28.49040 1.20236 0.93000 0.72799 1.09046 1.20489 - 0.10161 0.07172 29.19095 1.24839 0.97742 0.77719 1.13710 1.25102 - 0.10286 0.07237 29.82691 1.29172 1.02206 0.82349 1.18100 1.29446 - 0.10411 0.07301 30.44246 1.33518 1.06682 0.86988 1.22503 1.33802 - 0.10535 0.07365 31.02482 1.37780 1.11070 0.91535 1.26820 1.38073 - 0.10653 0.07425 31.55755 1.41815 1.15226 0.95840 1.30908 1.42119 - 0.10764 0.07481 32.04296 1.45617 1.19139 0.99893 1.34758 1.45929 - 0.10877 0.07538 32.51421 1.49432 1.23067 1.03960 1.38623 1.49754 - 0.10989 0.07594 32.96166 1.53176 1.26922 1.07950 1.42415 1.53507 - 0.11096 0.07647 33.37206 1.56725 1.30576 1.11732 1.46010 1.57065 - 0.11197 0.07698 33.74701 1.60072 1.34021 1.15299 1.49400 1.60421 - 0.11299 0.07748 34.11201 1.63435 1.37483 1.18881 1.52807 1.63792 - 0.08231 0.06391 2.95777 0.24233 0.00000 0.00000 0.12778 0.24292 - 0.08384 0.06478 3.64843 0.25286 0.00000 0.00000 0.13903 0.25357 - 0.08612 0.06606 4.69052 0.27143 0.00000 0.00000 0.15864 0.27232 - 0.08780 0.06699 5.44040 0.28704 0.01506 0.00000 0.17500 0.28806 - 0.08958 0.06796 6.22800 0.30517 0.03495 0.00000 0.19391 0.30634 - 0.09112 0.06879 6.90575 0.32211 0.05340 0.00000 0.21151 0.32340 - 0.09260 0.06959 7.55226 0.33941 0.07212 0.00000 0.22943 0.34083 - 0.09418 0.07044 8.23271 0.35882 0.09301 0.00000 0.24950 0.36037 - 0.09557 0.07116 8.81788 0.37649 0.11196 0.00000 0.26773 0.37816 - 0.09691 0.07187 9.37617 0.39421 0.13090 0.00000 0.28599 0.39599 - 0.09797 0.07242 9.81333 0.40867 0.14632 0.00000 0.30087 0.41054 - 0.10024 0.07360 10.72795 0.44065 0.18032 0.00018 0.33375 0.44271 - 0.10222 0.07460 11.44966 0.46928 0.21067 0.03115 0.36314 0.47151 - 0.10443 0.07573 12.22743 0.50223 0.24553 0.06833 0.39693 0.50466 - 0.10674 0.07689 13.00342 0.53731 0.28256 0.10773 0.43288 0.53994 - 0.10884 0.07793 13.67704 0.56970 0.31669 0.14397 0.46604 0.57251 - 0.11097 0.07898 14.32654 0.60278 0.35151 0.18086 0.49989 0.60578 - 0.11273 0.07984 14.84218 0.63044 0.38061 0.21165 0.52819 0.63360 - 0.11487 0.08088 15.43860 0.66415 0.41603 0.24909 0.56266 0.66750 - 0.11677 0.08179 15.93998 0.69403 0.44742 0.28222 0.59321 0.69756 - 0.11851 0.08262 16.37811 0.72143 0.47618 0.31257 0.62122 0.72511 - 0.12071 0.08366 16.90435 0.75610 0.51257 0.35092 0.65665 0.75998 - 0.12278 0.08463 17.36934 0.78854 0.54660 0.38676 0.68979 0.79261 - 0.12472 0.08554 17.77913 0.81872 0.57826 0.42010 0.72063 0.82296 - 0.12665 0.08644 18.16429 0.84863 0.60964 0.45312 0.75120 0.85306 - 0.12854 0.08731 18.51786 0.87762 0.64005 0.48511 0.78082 0.88221 - 0.13033 0.08813 18.83179 0.90475 0.66852 0.51506 0.80855 0.90951 - 0.13201 0.08889 19.10953 0.93002 0.69505 0.54295 0.83438 0.93494 - 0.13369 0.08965 19.37145 0.95510 0.72138 0.57065 0.86002 0.96017 - 0.13534 0.09040 19.61252 0.97945 0.74694 0.59753 0.88490 0.98467 - 0.13691 0.09110 19.82699 1.00227 0.77092 0.62275 0.90824 1.00764 - 0.13839 0.09176 20.01704 1.02357 0.79331 0.64629 0.93003 1.02908 - 0.13989 0.09243 20.19625 1.04475 0.81558 0.66972 0.95169 1.05040 - 0.14135 0.09307 20.36129 1.06535 0.83724 0.69252 0.97276 1.07113 - 0.14275 0.09369 20.50790 1.08470 0.85761 0.71395 0.99257 1.09061 - 0.14408 0.09427 20.63760 1.10280 0.87666 0.73400 1.01109 1.10883 - 0.14541 0.09485 20.75964 1.12082 0.89565 0.75400 1.02954 1.12698 - 0.09402 0.07221 2.79352 0.22537 0.00000 0.00000 0.11922 0.22648 - 0.09598 0.07323 3.38785 0.23525 0.00000 0.00000 0.12981 0.23654 - 0.09890 0.07472 4.26803 0.25222 0.00000 0.00000 0.14780 0.25376 - 0.10103 0.07580 4.88859 0.26615 0.01355 0.00000 0.16248 0.26790 - 0.10328 0.07693 5.53019 0.28208 0.03119 0.00000 0.17917 0.28403 - 0.10523 0.07790 6.07452 0.29675 0.04732 0.00000 0.19449 0.29888 - 0.10710 0.07882 6.58728 0.31155 0.06351 0.00000 0.20992 0.31386 - 0.10909 0.07979 7.12031 0.32797 0.08138 0.00000 0.22699 0.33046 - 0.11082 0.08063 7.57336 0.34277 0.09744 0.00000 0.24236 0.34543 - 0.11249 0.08144 8.00101 0.35748 0.11335 0.00000 0.25761 0.36030 - 0.11382 0.08208 8.33279 0.36940 0.12622 0.00000 0.26995 0.37234 - 0.11664 0.08342 9.01814 0.39550 0.15431 0.00015 0.29694 0.39871 - 0.11908 0.08457 9.54571 0.41858 0.17909 0.02560 0.32079 0.42203 - 0.12181 0.08585 10.10441 0.44485 0.20724 0.05585 0.34790 0.44856 - 0.12465 0.08716 10.65160 0.47249 0.23681 0.08756 0.37641 0.47646 - 0.12722 0.08834 11.11793 0.49771 0.26378 0.11642 0.40242 0.50194 - 0.12980 0.08952 11.55952 0.52322 0.29102 0.14553 0.42870 0.52769 - 0.13194 0.09049 11.90416 0.54435 0.31358 0.16961 0.45048 0.54903 - 0.13453 0.09165 12.29578 0.56985 0.34080 0.19865 0.47676 0.57479 - 0.13681 0.09266 12.61879 0.59226 0.36471 0.22414 0.49984 0.59742 - 0.13889 0.09359 12.89603 0.61263 0.38645 0.24730 0.52083 0.61799 - 0.14152 0.09474 13.22230 0.63818 0.41371 0.27635 0.54715 0.64380 - 0.14399 0.09582 13.50389 0.66185 0.43899 0.30326 0.57154 0.66771 - 0.14628 0.09681 13.74624 0.68368 0.46231 0.32809 0.59404 0.68977 - 0.14857 0.09780 13.96850 0.70513 0.48524 0.35250 0.61616 0.71144 - 0.15079 0.09875 14.16720 0.72574 0.50728 0.37598 0.63741 0.73227 - 0.15288 0.09964 14.33884 0.74487 0.52776 0.39779 0.65715 0.75160 - 0.15485 0.10047 14.48640 0.76255 0.54671 0.41798 0.67540 0.76948 - 0.15681 0.10129 14.62139 0.77997 0.56539 0.43789 0.69339 0.78709 - 0.15873 0.10210 14.74151 0.79675 0.58340 0.45709 0.71072 0.80405 - 0.16054 0.10285 14.84458 0.81237 0.60019 0.47500 0.72686 0.81985 - 0.16225 0.10356 14.93246 0.82684 0.61576 0.49162 0.74182 0.83449 - 0.16397 0.10427 15.01185 0.84113 0.63115 0.50805 0.75661 0.84894 - 0.16565 0.10496 15.08153 0.85493 0.64603 0.52396 0.77090 0.86291 - 0.16725 0.10561 15.14013 0.86781 0.65994 0.53883 0.78424 0.87594 - 0.16876 0.10622 15.18895 0.87977 0.67287 0.55267 0.79663 0.88805 - 0.17028 0.10684 15.23181 0.89161 0.68569 0.56640 0.80891 0.90004 - 0.10465 0.07901 2.70233 0.21414 0.00000 0.00000 0.11364 0.21589 - 0.10700 0.08016 3.23114 0.22356 0.00000 0.00000 0.12377 0.22554 - 0.11046 0.08183 4.00325 0.23941 0.00000 0.00000 0.14066 0.24173 - 0.11299 0.08303 4.53893 0.25220 0.01255 0.00000 0.15420 0.25478 - 0.11565 0.08429 5.08598 0.26663 0.02870 0.00000 0.16941 0.26947 - 0.11795 0.08537 5.54494 0.27978 0.04331 0.00000 0.18323 0.28285 - 0.12014 0.08639 5.97300 0.29293 0.05785 0.00000 0.19701 0.29622 - 0.12247 0.08747 6.41359 0.30738 0.07378 0.00000 0.21213 0.31091 - 0.12450 0.08839 6.78453 0.32031 0.08797 0.00000 0.22563 0.32405 - 0.12645 0.08928 7.13165 0.33307 0.10194 0.00000 0.23894 0.33701 - 0.12799 0.08998 7.39892 0.34335 0.11317 0.00000 0.24966 0.34744 - 0.13127 0.09146 7.94522 0.36568 0.13752 0.00013 0.27290 0.37010 - 0.13409 0.09272 8.35658 0.38525 0.15880 0.02212 0.29325 0.38996 - 0.13724 0.09411 8.78565 0.40731 0.18277 0.04805 0.31618 0.41234 - 0.14049 0.09554 9.19906 0.43030 0.20773 0.07500 0.34006 0.43567 - 0.14343 0.09682 9.54558 0.45110 0.23030 0.09934 0.36167 0.45677 - 0.14638 0.09809 9.86830 0.47196 0.25292 0.12371 0.38332 0.47793 - 0.14881 0.09914 10.11614 0.48911 0.27152 0.14374 0.40113 0.49532 - 0.15174 0.10038 10.39297 0.50965 0.29381 0.16772 0.42247 0.51617 - 0.15431 0.10147 10.61702 0.52756 0.31325 0.18864 0.44108 0.53434 - 0.15666 0.10246 10.80583 0.54374 0.33082 0.20754 0.45788 0.55076 - 0.15961 0.10369 11.02331 0.56387 0.35271 0.23109 0.47881 0.57119 - 0.16236 0.10483 11.20622 0.58238 0.37285 0.25276 0.49806 0.58998 - 0.16492 0.10588 11.35943 0.59932 0.39131 0.27263 0.51569 0.60718 - 0.16746 0.10691 11.49586 0.61585 0.40935 0.29205 0.53290 0.62397 - 0.16992 0.10791 11.61383 0.63161 0.42658 0.31062 0.54932 0.63998 - 0.17223 0.10885 11.71203 0.64614 0.44249 0.32777 0.56448 0.65474 - 0.17439 0.10971 11.79309 0.65948 0.45712 0.34356 0.57840 0.66830 - 0.17655 0.11057 11.86387 0.67254 0.47147 0.35906 0.59204 0.68157 - 0.17865 0.11140 11.92343 0.68503 0.48522 0.37392 0.60510 0.69428 - 0.18063 0.11218 11.97128 0.69658 0.49796 0.38772 0.61719 0.70603 - 0.18249 0.11291 12.00902 0.70723 0.50973 0.40046 0.62834 0.71686 - 0.18435 0.11364 12.03991 0.71767 0.52130 0.41300 0.63929 0.72748 - 0.18618 0.11435 12.06372 0.72769 0.53242 0.42508 0.64981 0.73769 - 0.18791 0.11501 12.08043 0.73698 0.54277 0.43632 0.65957 0.74715 - 0.18953 0.11564 12.09115 0.74556 0.55234 0.44674 0.66860 0.75589 - 0.19117 0.11626 12.09709 0.75401 0.56179 0.45703 0.67749 0.76450 - 0.11466 0.08495 2.64712 0.20575 0.00000 0.00000 0.10953 0.20824 - 0.11735 0.08620 3.12633 0.21481 0.00000 0.00000 0.11931 0.21757 - 0.12131 0.08803 3.81792 0.22978 0.00000 0.00000 0.13535 0.23296 - 0.12419 0.08934 4.29118 0.24170 0.01180 0.00000 0.14804 0.24519 - 0.12721 0.09071 4.76946 0.25500 0.02685 0.00000 0.16214 0.25881 - 0.12980 0.09188 5.16694 0.26700 0.04035 0.00000 0.17483 0.27109 - 0.13229 0.09298 5.53451 0.27892 0.05368 0.00000 0.18739 0.28327 - 0.13491 0.09415 5.90960 0.29192 0.06818 0.00000 0.20109 0.29656 - 0.13719 0.09515 6.22280 0.30348 0.08102 0.00000 0.21323 0.30835 - 0.13937 0.09610 6.51367 0.31481 0.09359 0.00000 0.22513 0.31992 - 0.14110 0.09686 6.73612 0.32390 0.10365 0.00000 0.23467 0.32919 - 0.14476 0.09844 7.18655 0.34351 0.12532 0.00012 0.25522 0.34919 - 0.14790 0.09979 7.51867 0.36056 0.14413 0.01965 0.27307 0.36658 - 0.15140 0.10127 7.86016 0.37963 0.16515 0.04254 0.29304 0.38602 - 0.15500 0.10279 8.18410 0.39935 0.18687 0.06616 0.31367 0.40612 - 0.15823 0.10414 8.45125 0.41705 0.20638 0.08736 0.33220 0.42416 - 0.16147 0.10548 8.69593 0.43466 0.22580 0.10844 0.35064 0.44212 - 0.16414 0.10658 8.88076 0.44906 0.24168 0.12568 0.36571 0.45680 - 0.16734 0.10789 9.08351 0.46619 0.26060 0.14621 0.38366 0.47427 - 0.17014 0.10903 9.24425 0.48102 0.27700 0.16402 0.39921 0.48939 - 0.17269 0.11005 9.37694 0.49434 0.29175 0.18002 0.41317 0.50298 - 0.17589 0.11133 9.52597 0.51080 0.31001 0.19986 0.43046 0.51978 - 0.17886 0.11251 9.64741 0.52583 0.32671 0.21802 0.44625 0.53512 - 0.18162 0.11360 9.74561 0.53950 0.34193 0.23458 0.46062 0.54907 - 0.18434 0.11467 9.82957 0.55274 0.35672 0.25069 0.47456 0.56259 - 0.18698 0.11569 9.89863 0.56528 0.37077 0.26601 0.48779 0.57541 - 0.18944 0.11664 9.95279 0.57678 0.38367 0.28009 0.49992 0.58716 - 0.19174 0.11753 9.99432 0.58726 0.39548 0.29300 0.51100 0.59788 - 0.19403 0.11840 10.02729 0.59746 0.40700 0.30561 0.52180 0.60831 - 0.19626 0.11924 10.05153 0.60716 0.41799 0.31765 0.53208 0.61824 - 0.19835 0.12003 10.06749 0.61608 0.42812 0.32878 0.54154 0.62736 - 0.20031 0.12077 10.07655 0.62424 0.43743 0.33902 0.55022 0.63572 - 0.20227 0.12150 10.07997 0.63220 0.44654 0.34906 0.55870 0.64388 - 0.20419 0.12221 10.07808 0.63979 0.45527 0.35868 0.56680 0.65167 - 0.20599 0.12287 10.07156 0.64679 0.46334 0.36761 0.57428 0.65885 - 0.20769 0.12349 10.06137 0.65322 0.47078 0.37585 0.58116 0.66544 - 0.20940 0.12412 10.04726 0.65950 0.47809 0.38396 0.58790 0.67189 - 0.13362 0.09532 2.59019 0.19337 0.00000 0.00000 0.10359 0.19757 - 0.13689 0.09676 2.99594 0.20181 0.00000 0.00000 0.11282 0.20639 - 0.14170 0.09884 3.57047 0.21542 0.00000 0.00000 0.12756 0.22055 - 0.14517 0.10033 3.95441 0.22601 0.01070 0.00000 0.13897 0.23154 - 0.14879 0.10187 4.33560 0.23762 0.02415 0.00000 0.15144 0.24357 - 0.15189 0.10318 4.64727 0.24795 0.03604 0.00000 0.16249 0.25425 - 0.15484 0.10442 4.93126 0.25807 0.04765 0.00000 0.17330 0.26470 - 0.15795 0.10572 5.21673 0.26898 0.06013 0.00000 0.18494 0.27597 - 0.16064 0.10683 5.45162 0.27857 0.07107 0.00000 0.19516 0.28586 - 0.16321 0.10789 5.66679 0.28788 0.08169 0.00000 0.20508 0.29547 - 0.16523 0.10871 5.82935 0.29529 0.09012 0.00000 0.21296 0.30310 - 0.16950 0.11045 6.15285 0.31110 0.10809 0.00010 0.22977 0.31939 - 0.17314 0.11192 6.38137 0.32465 0.12349 0.01628 0.24417 0.33335 - 0.17717 0.11353 6.60971 0.33961 0.14050 0.03503 0.26008 0.34876 - 0.18129 0.11517 6.81942 0.35487 0.15787 0.05417 0.27631 0.36448 - 0.18498 0.11662 6.98645 0.36838 0.17328 0.07115 0.29070 0.37840 - 0.18865 0.11805 7.13380 0.38166 0.18846 0.08788 0.30485 0.39208 - 0.19165 0.11921 7.24084 0.39239 0.20075 0.10143 0.31630 0.40313 - 0.19524 0.12059 7.35309 0.40501 0.21524 0.11742 0.32977 0.41614 - 0.19837 0.12178 7.43736 0.41580 0.22768 0.13117 0.34132 0.42728 - 0.20120 0.12285 7.50293 0.42539 0.23876 0.14343 0.35159 0.43716 - 0.20473 0.12418 7.57103 0.43710 0.25236 0.15849 0.36416 0.44925 - 0.20800 0.12539 7.62069 0.44765 0.26466 0.17214 0.37551 0.46015 - 0.21100 0.12650 7.65544 0.45712 0.27576 0.18449 0.38572 0.46994 - 0.21396 0.12758 7.67961 0.46619 0.28644 0.19639 0.39552 0.47931 - 0.21681 0.12861 7.69367 0.47467 0.29649 0.20761 0.40471 0.48809 - 0.21946 0.12957 7.69889 0.48234 0.30564 0.21785 0.41304 0.49603 - 0.22192 0.13045 7.69707 0.48926 0.31393 0.22716 0.42058 0.50320 - 0.22436 0.13131 7.68912 0.49591 0.32195 0.23619 0.42784 0.51009 - 0.22672 0.13214 7.67565 0.50215 0.32953 0.24475 0.43469 0.51657 - 0.22893 0.13291 7.65803 0.50781 0.33646 0.25260 0.44092 0.52246 - 0.23099 0.13362 7.63731 0.51293 0.34278 0.25977 0.44657 0.52778 - 0.23304 0.13433 7.61264 0.51786 0.34890 0.26675 0.45204 0.53292 - 0.23503 0.13501 7.58487 0.52251 0.35472 0.27341 0.45721 0.53776 - 0.23691 0.13564 7.55535 0.52673 0.36006 0.27953 0.46193 0.54217 - 0.23866 0.13623 7.52480 0.53056 0.36493 0.28514 0.46622 0.54616 - 0.24042 0.13682 7.49154 0.53425 0.36968 0.29063 0.47038 0.55002 - 0.16049 0.10878 2.56212 0.18004 0.00000 0.00000 0.09746 0.18729 - 0.16447 0.11042 2.89068 0.18774 0.00000 0.00000 0.10602 0.19548 - 0.17027 0.11278 3.34528 0.19978 0.00000 0.00000 0.11931 0.20823 - 0.17443 0.11446 3.63972 0.20891 0.00955 0.00000 0.12933 0.21786 - 0.17874 0.11619 3.92535 0.21872 0.02134 0.00000 0.14008 0.22820 - 0.18240 0.11765 4.15396 0.22730 0.03160 0.00000 0.14944 0.23721 - 0.18588 0.11902 4.35817 0.23557 0.04148 0.00000 0.15847 0.24589 - 0.18951 0.12044 4.55924 0.24436 0.05196 0.00000 0.16805 0.25512 - 0.19263 0.12166 4.72131 0.25198 0.06103 0.00000 0.17635 0.26310 - 0.19561 0.12281 4.86689 0.25930 0.06975 0.00000 0.18432 0.27077 - 0.19794 0.12370 4.97491 0.26505 0.07660 0.00000 0.19059 0.27680 - 0.20284 0.12557 5.18430 0.27717 0.09104 0.00008 0.20379 0.28948 - 0.20698 0.12714 5.32146 0.28738 0.10324 0.01310 0.21492 0.30017 - 0.21152 0.12884 5.45166 0.29847 0.11652 0.02800 0.22702 0.31177 - 0.21614 0.13056 5.56407 0.30956 0.12987 0.04300 0.23915 0.32338 - 0.22025 0.13206 5.64727 0.31922 0.14155 0.05614 0.24974 0.33349 - 0.22429 0.13353 5.71450 0.32856 0.15290 0.06893 0.26000 0.34327 - 0.22758 0.13471 5.75853 0.33597 0.16198 0.07918 0.26818 0.35104 - 0.23149 0.13610 5.79865 0.34456 0.17256 0.09115 0.27767 0.36005 - 0.23487 0.13730 5.82300 0.35179 0.18153 0.10133 0.28569 0.36763 - 0.23790 0.13836 5.83683 0.35810 0.18942 0.11031 0.29272 0.37426 - 0.24167 0.13966 5.84366 0.36568 0.19899 0.12124 0.30120 0.38224 - 0.24512 0.14084 5.84007 0.37238 0.20754 0.13103 0.30873 0.38929 - 0.24828 0.14190 5.82871 0.37827 0.21515 0.13979 0.31540 0.39550 - 0.25136 0.14293 5.81033 0.38381 0.22238 0.14814 0.32169 0.40135 - 0.25430 0.14391 5.78611 0.38888 0.22909 0.15594 0.32750 0.40671 - 0.25703 0.14480 5.75805 0.39338 0.23513 0.16299 0.33269 0.41148 - 0.25954 0.14561 5.72743 0.39735 0.24054 0.16933 0.33730 0.41569 - 0.26200 0.14639 5.69295 0.40109 0.24571 0.17542 0.34167 0.41966 - 0.26438 0.14714 5.65569 0.40452 0.25053 0.18114 0.34571 0.42331 - 0.26659 0.14783 5.61748 0.40756 0.25489 0.18634 0.34934 0.42655 - 0.26863 0.14847 5.57905 0.41024 0.25881 0.19104 0.35257 0.42942 - 0.27065 0.14908 5.53820 0.41276 0.26257 0.19558 0.35563 0.43213 - 0.27261 0.14967 5.49605 0.41507 0.26610 0.19987 0.35848 0.43461 - 0.27443 0.15022 5.45426 0.41711 0.26929 0.20378 0.36102 0.43682 - 0.27613 0.15072 5.41332 0.41891 0.27217 0.20733 0.36329 0.43876 - 0.27782 0.15121 5.37074 0.42059 0.27494 0.21077 0.36545 0.44059 - 0.20278 0.12836 2.55725 0.16360 0.00000 0.00000 0.09033 0.17669 - 0.20758 0.13021 2.79742 0.17025 0.00000 0.00000 0.09795 0.18394 - 0.21450 0.13284 3.11885 0.18029 0.00000 0.00000 0.10939 0.19485 - 0.21940 0.13468 3.31664 0.18766 0.00819 0.00000 0.11776 0.20282 - 0.22444 0.13656 3.50144 0.19538 0.01810 0.00000 0.12650 0.21114 - 0.22868 0.13813 3.64420 0.20196 0.02654 0.00000 0.13396 0.21822 - 0.23268 0.13958 3.76741 0.20818 0.03453 0.00000 0.14100 0.22491 - 0.23682 0.14109 3.88430 0.21466 0.04287 0.00000 0.14835 0.23187 - 0.24035 0.14236 3.97492 0.22017 0.04998 0.00000 0.15461 0.23779 - 0.24369 0.14355 4.05321 0.22538 0.05671 0.00000 0.16052 0.24337 - 0.24629 0.14447 4.10916 0.22941 0.06195 0.00000 0.16511 0.24770 - 0.25171 0.14637 4.21151 0.23774 0.07280 0.00006 0.17460 0.25662 - 0.25624 0.14793 4.26515 0.24458 0.08179 0.00991 0.18242 0.26395 - 0.26115 0.14961 4.30770 0.25181 0.09139 0.02101 0.19073 0.27170 - 0.26609 0.15126 4.33535 0.25885 0.10086 0.03198 0.19887 0.27925 - 0.27042 0.15270 4.34732 0.26480 0.10898 0.04144 0.20580 0.28564 - 0.27464 0.15407 4.34812 0.27039 0.11673 0.05050 0.21236 0.29165 - 0.27803 0.15516 4.34110 0.27471 0.12282 0.05766 0.21748 0.29630 - 0.28202 0.15642 4.32420 0.27958 0.12980 0.06591 0.22329 0.30154 - 0.28543 0.15748 4.30242 0.28355 0.13561 0.07282 0.22808 0.30583 - 0.28845 0.15840 4.27743 0.28692 0.14064 0.07884 0.23218 0.30947 - 0.29216 0.15952 4.23961 0.29082 0.14664 0.08606 0.23701 0.31370 - 0.29552 0.16051 4.19856 0.29414 0.15189 0.09243 0.24117 0.31730 - 0.29855 0.16138 4.15589 0.29693 0.15647 0.09804 0.24475 0.32035 - 0.30148 0.16221 4.10973 0.29944 0.16074 0.10332 0.24802 0.32309 - 0.30423 0.16297 4.06158 0.30163 0.16463 0.10818 0.25095 0.32550 - 0.30675 0.16365 4.01368 0.30346 0.16806 0.11251 0.25347 0.32752 - 0.30904 0.16425 3.96674 0.30499 0.17107 0.11635 0.25564 0.32922 - 0.31127 0.16482 3.91809 0.30634 0.17389 0.11999 0.25761 0.33073 - 0.31338 0.16535 3.86896 0.30749 0.17647 0.12337 0.25937 0.33202 - 0.31533 0.16583 3.82129 0.30842 0.17875 0.12639 0.26088 0.33308 - 0.31711 0.16625 3.77544 0.30916 0.18076 0.12909 0.26216 0.33394 - 0.31884 0.16665 3.72859 0.30978 0.18264 0.13166 0.26331 0.33466 - 0.32050 0.16702 3.68186 0.31027 0.18436 0.13405 0.26432 0.33525 - 0.32203 0.16735 3.63693 0.31063 0.18588 0.13620 0.26517 0.33569 - 0.32343 0.16765 3.59403 0.31087 0.18722 0.13812 0.26587 0.33601 - 0.32481 0.16793 3.55046 0.31103 0.18847 0.13996 0.26648 0.33623 - 0.24275 0.14588 2.55219 0.15029 0.00000 0.00000 0.08487 0.16963 - 0.24803 0.14780 2.72880 0.15605 0.00000 0.00000 0.09167 0.17602 - 0.25555 0.15050 2.95737 0.16451 0.00000 0.00000 0.10161 0.18536 - 0.26083 0.15236 3.08975 0.17056 0.00717 0.00000 0.10872 0.19201 - 0.26621 0.15424 3.20793 0.17675 0.01570 0.00000 0.11599 0.19880 - 0.27072 0.15579 3.29521 0.18193 0.02286 0.00000 0.12208 0.20446 - 0.27491 0.15722 3.36709 0.18673 0.02955 0.00000 0.12775 0.20971 - 0.27924 0.15868 3.43166 0.19165 0.03643 0.00000 0.13357 0.21508 - 0.28289 0.15989 3.47866 0.19576 0.04223 0.00000 0.13845 0.21956 - 0.28633 0.16102 3.51655 0.19958 0.04766 0.00000 0.14300 0.22373 - 0.28899 0.16189 3.54169 0.20250 0.05184 0.00000 0.14649 0.22691 - 0.29447 0.16364 3.58196 0.20842 0.06041 0.00005 0.15359 0.23334 - 0.29901 0.16507 3.58875 0.21315 0.06738 0.00790 0.15933 0.23849 - 0.30387 0.16656 3.58349 0.21802 0.07472 0.01662 0.16529 0.24379 - 0.30870 0.16801 3.56631 0.22262 0.08183 0.02513 0.17100 0.24880 - 0.31288 0.16924 3.54182 0.22638 0.08783 0.03237 0.17574 0.25290 - 0.31691 0.17039 3.50972 0.22980 0.09346 0.03922 0.18012 0.25663 - 0.32011 0.17128 3.47821 0.23236 0.09783 0.04456 0.18346 0.25942 - 0.32382 0.17228 3.43492 0.23512 0.10276 0.05065 0.18716 0.26245 - 0.32695 0.17311 3.39265 0.23728 0.10679 0.05569 0.19012 0.26481 - 0.32969 0.17381 3.35110 0.23904 0.11024 0.06004 0.19260 0.26674 - 0.33301 0.17462 3.29517 0.24096 0.11427 0.06519 0.19541 0.26885 - 0.33597 0.17532 3.23986 0.24247 0.11773 0.06967 0.19775 0.27052 - 0.33860 0.17591 3.18614 0.24364 0.12070 0.07358 0.19967 0.27183 - 0.34110 0.17645 3.13097 0.24459 0.12342 0.07720 0.20135 0.27288 - 0.34342 0.17692 3.07588 0.24530 0.12584 0.08050 0.20278 0.27370 - 0.34550 0.17732 3.02300 0.24580 0.12793 0.08340 0.20393 0.27427 - 0.34736 0.17765 2.97269 0.24612 0.12972 0.08594 0.20486 0.27465 - 0.34915 0.17795 2.92184 0.24631 0.13136 0.08832 0.20564 0.27487 - 0.35081 0.17820 2.87168 0.24635 0.13283 0.09050 0.20626 0.27495 - 0.35230 0.17841 2.82396 0.24628 0.13409 0.09242 0.20674 0.27491 - 0.35365 0.17858 2.77887 0.24612 0.13517 0.09412 0.20707 0.27475 - 0.35494 0.17872 2.73351 0.24586 0.13615 0.09571 0.20731 0.27450 - 0.35615 0.17884 2.68894 0.24552 0.13702 0.09717 0.20746 0.27416 - 0.35724 0.17892 2.64665 0.24512 0.13775 0.09847 0.20751 0.27374 - 0.35822 0.17898 2.60676 0.24467 0.13838 0.09962 0.20749 0.27328 - 0.35916 0.17901 2.56670 0.24416 0.13893 0.10069 0.20740 0.27274 - 0.31642 0.17671 2.49090 0.12805 0.00000 0.00000 0.07606 0.15947 - 0.32189 0.17846 2.57836 0.13237 0.00000 0.00000 0.08143 0.16426 - 0.32955 0.18085 2.68105 0.13843 0.00000 0.00000 0.08898 0.17092 - 0.33482 0.18245 2.72793 0.14256 0.00562 0.00000 0.09416 0.17544 - 0.34009 0.18401 2.76152 0.14663 0.01215 0.00000 0.09930 0.17987 - 0.34442 0.18526 2.78021 0.14990 0.01750 0.00000 0.10347 0.18343 - 0.34839 0.18638 2.79015 0.15283 0.02238 0.00000 0.10724 0.18660 - 0.35241 0.18748 2.79306 0.15573 0.02731 0.00000 0.11100 0.18971 - 0.35575 0.18837 2.78986 0.15807 0.03138 0.00000 0.11407 0.19222 - 0.35884 0.18917 2.78223 0.16017 0.03513 0.00000 0.11686 0.19446 - 0.36119 0.18977 2.77333 0.16172 0.03797 0.00000 0.11896 0.19611 - 0.36595 0.19092 2.74684 0.16473 0.04366 0.00003 0.12308 0.19929 - 0.36978 0.19180 2.70576 0.16699 0.04818 0.00538 0.12626 0.20166 - 0.37378 0.19265 2.65369 0.16915 0.05280 0.01120 0.12943 0.20389 - 0.37761 0.19341 2.59473 0.17100 0.05716 0.01676 0.13229 0.20579 - 0.38082 0.19398 2.53801 0.17236 0.06073 0.02138 0.13453 0.20715 - 0.38380 0.19446 2.47847 0.17344 0.06398 0.02567 0.13648 0.20819 - 0.38609 0.19477 2.42779 0.17413 0.06644 0.02896 0.13786 0.20883 - 0.38864 0.19507 2.36532 0.17473 0.06913 0.03263 0.13927 0.20935 - 0.39071 0.19525 2.30951 0.17505 0.07127 0.03561 0.14030 0.20958 - 0.39245 0.19536 2.25814 0.17520 0.07304 0.03813 0.14107 0.20962 - 0.39446 0.19541 2.19306 0.17518 0.07504 0.04106 0.14182 0.20944 - 0.39614 0.19538 2.13223 0.17497 0.07669 0.04356 0.14232 0.20907 - 0.39754 0.19529 2.07578 0.17463 0.07805 0.04568 0.14262 0.20855 - 0.39879 0.19514 2.02006 0.17415 0.07923 0.04761 0.14276 0.20788 - 0.39985 0.19493 1.96632 0.17355 0.08023 0.04933 0.14275 0.20709 - 0.40073 0.19468 1.91629 0.17289 0.08105 0.05080 0.14263 0.20623 - 0.40144 0.19440 1.86995 0.17217 0.08170 0.05207 0.14242 0.20532 - 0.40205 0.19408 1.82421 0.17138 0.08226 0.05322 0.14212 0.20432 - 0.40255 0.19373 1.78008 0.17053 0.08272 0.05425 0.14175 0.20326 - 0.40293 0.19336 1.73894 0.16966 0.08308 0.05514 0.14132 0.20218 - 0.40321 0.19298 1.70076 0.16879 0.08334 0.05590 0.14086 0.20111 - 0.40342 0.19257 1.66301 0.16786 0.08355 0.05659 0.14033 0.19997 - 0.40355 0.19214 1.62648 0.16691 0.08369 0.05721 0.13977 0.19881 - 0.40361 0.19171 1.59233 0.16596 0.08378 0.05774 0.13919 0.19765 - 0.40361 0.19128 1.56055 0.16503 0.08382 0.05819 0.13860 0.19652 - 0.40355 0.19082 1.52903 0.16406 0.08382 0.05859 0.13797 0.19535 - 0.38186 0.20276 2.36148 0.10954 0.00000 0.00000 0.06862 0.15087 - 0.38681 0.20405 2.38967 0.11276 0.00000 0.00000 0.07279 0.15420 - 0.39357 0.20571 2.41196 0.11708 0.00000 0.00000 0.07846 0.15861 - 0.39809 0.20676 2.40678 0.11991 0.00445 0.00000 0.08222 0.16144 - 0.40252 0.20771 2.39080 0.12258 0.00952 0.00000 0.08583 0.16408 - 0.40606 0.20842 2.37069 0.12464 0.01360 0.00000 0.08868 0.16607 - 0.40924 0.20901 2.34673 0.12642 0.01727 0.00000 0.09119 0.16776 - 0.41238 0.20954 2.31704 0.12810 0.02090 0.00000 0.09361 0.16931 - 0.41491 0.20992 2.28820 0.12939 0.02386 0.00000 0.09554 0.17047 - 0.41720 0.21022 2.25810 0.13050 0.02654 0.00000 0.09723 0.17143 - 0.41891 0.21042 2.23290 0.13128 0.02854 0.00000 0.09847 0.17209 - 0.42223 0.21071 2.17585 0.13269 0.03250 0.00002 0.10082 0.17319 - 0.42478 0.21084 2.11512 0.13362 0.03556 0.00384 0.10253 0.17383 - 0.42728 0.21085 2.04549 0.13437 0.03862 0.00792 0.10411 0.17422 - 0.42953 0.21071 1.97262 0.13484 0.04144 0.01175 0.10542 0.17429 - 0.43125 0.21047 1.90670 0.13503 0.04368 0.01489 0.10633 0.17408 - 0.43272 0.21012 1.84083 0.13501 0.04567 0.01775 0.10701 0.17364 - 0.43373 0.20976 1.78692 0.13484 0.04713 0.01990 0.10741 0.17311 - 0.43471 0.20923 1.72271 0.13447 0.04869 0.02228 0.10770 0.17229 - 0.43538 0.20868 1.66713 0.13401 0.04988 0.02417 0.10780 0.17141 - 0.43582 0.20812 1.61729 0.13348 0.05084 0.02575 0.10777 0.17049 - 0.43617 0.20734 1.55572 0.13269 0.05188 0.02755 0.10758 0.16919 - 0.43628 0.20652 1.49962 0.13182 0.05269 0.02906 0.10727 0.16784 - 0.43622 0.20570 1.44868 0.13091 0.05332 0.03031 0.10687 0.16647 - 0.43599 0.20482 1.39936 0.12993 0.05383 0.03143 0.10637 0.16502 - 0.43561 0.20391 1.35266 0.12889 0.05423 0.03240 0.10579 0.16352 - 0.43512 0.20300 1.30988 0.12786 0.05452 0.03322 0.10518 0.16204 - 0.43455 0.20211 1.27082 0.12683 0.05471 0.03391 0.10455 0.16059 - 0.43387 0.20118 1.23279 0.12576 0.05485 0.03452 0.10386 0.15910 - 0.43311 0.20023 1.19656 0.12468 0.05492 0.03505 0.10314 0.15759 - 0.43229 0.19930 1.16318 0.12362 0.05494 0.03549 0.10241 0.15613 - 0.43144 0.19839 1.13252 0.12259 0.05491 0.03585 0.10170 0.15472 - 0.43051 0.19746 1.10250 0.12153 0.05485 0.03618 0.10095 0.15327 - 0.42953 0.19652 1.07374 0.12047 0.05475 0.03645 0.10018 0.15183 - 0.42853 0.19560 1.04709 0.11944 0.05463 0.03668 0.09943 0.15044 - 0.42752 0.19471 1.02249 0.11845 0.05449 0.03686 0.09870 0.14911 - 0.42646 0.19380 0.99828 0.11744 0.05432 0.03701 0.09794 0.14775 - 0.43903 0.22430 2.18378 0.09402 0.00000 0.00000 0.06197 0.14216 - 0.44294 0.22492 2.17208 0.09640 0.00000 0.00000 0.06513 0.14421 - 0.44810 0.22559 2.14227 0.09947 0.00000 0.00000 0.06931 0.14673 - 0.45140 0.22589 2.10511 0.10138 0.00353 0.00000 0.07198 0.14820 - 0.45450 0.22606 2.05990 0.10310 0.00749 0.00000 0.07447 0.14942 - 0.45687 0.22609 2.01783 0.10437 0.01063 0.00000 0.07636 0.15023 - 0.45890 0.22602 1.97543 0.10539 0.01340 0.00000 0.07797 0.15081 - 0.46079 0.22585 1.92878 0.10631 0.01612 0.00000 0.07948 0.15122 - 0.46224 0.22563 1.88722 0.10695 0.01830 0.00000 0.08063 0.15143 - 0.46346 0.22535 1.84650 0.10746 0.02025 0.00000 0.08160 0.15150 - 0.46431 0.22508 1.81397 0.10778 0.02169 0.00000 0.08228 0.15146 - 0.46579 0.22440 1.74422 0.10826 0.02449 0.00002 0.08349 0.15117 - 0.46673 0.22368 1.67723 0.10844 0.02662 0.00280 0.08428 0.15067 - 0.46743 0.22275 1.60345 0.10842 0.02870 0.00574 0.08491 0.14988 - 0.46778 0.22166 1.52892 0.10818 0.03056 0.00845 0.08530 0.14881 - 0.46779 0.22055 1.46352 0.10777 0.03201 0.01064 0.08546 0.14766 - 0.46752 0.21935 1.39985 0.10721 0.03326 0.01261 0.08543 0.14634 - 0.46710 0.21828 1.34884 0.10665 0.03415 0.01408 0.08530 0.14514 - 0.46635 0.21691 1.28928 0.10585 0.03507 0.01567 0.08500 0.14357 - 0.46548 0.21563 1.23870 0.10505 0.03575 0.01692 0.08463 0.14209 - 0.46454 0.21441 1.19406 0.10425 0.03628 0.01795 0.08421 0.14067 - 0.46313 0.21280 1.13979 0.10316 0.03681 0.01911 0.08358 0.13879 - 0.46161 0.21123 1.09114 0.10207 0.03720 0.02006 0.08290 0.13695 - 0.46003 0.20970 1.04759 0.10098 0.03747 0.02083 0.08219 0.13518 - 0.45829 0.20814 1.00597 0.09985 0.03766 0.02151 0.08143 0.13337 - 0.45646 0.20657 0.96704 0.09871 0.03777 0.02209 0.08063 0.13156 - 0.45461 0.20505 0.93177 0.09760 0.03783 0.02257 0.07984 0.12983 - 0.45277 0.20360 0.89990 0.09653 0.03782 0.02295 0.07906 0.12818 - 0.45083 0.20211 0.86914 0.09544 0.03778 0.02329 0.07825 0.12651 - 0.44884 0.20062 0.84011 0.09435 0.03770 0.02357 0.07743 0.12485 - 0.44687 0.19919 0.81357 0.09330 0.03760 0.02380 0.07664 0.12327 - 0.44495 0.19783 0.78938 0.09230 0.03747 0.02398 0.07587 0.12177 - 0.44294 0.19643 0.76587 0.09128 0.03732 0.02413 0.07508 0.12026 - 0.44091 0.19504 0.74348 0.09027 0.03714 0.02425 0.07429 0.11876 - 0.43892 0.19371 0.72288 0.08931 0.03696 0.02434 0.07353 0.11733 - 0.43699 0.19243 0.70397 0.08839 0.03677 0.02440 0.07281 0.11598 - 0.43500 0.19113 0.68546 0.08745 0.03657 0.02444 0.07206 0.11461 - 0.49905 0.24513 1.92477 0.07835 0.00000 0.00000 0.05446 0.13038 - 0.50119 0.24475 1.88218 0.07995 0.00000 0.00000 0.05662 0.13110 - 0.50369 0.24394 1.81399 0.08189 0.00000 0.00000 0.05934 0.13172 - 0.50504 0.24318 1.75509 0.08302 0.00263 0.00000 0.06099 0.13187 - 0.50606 0.24224 1.69130 0.08395 0.00554 0.00000 0.06245 0.13178 - 0.50663 0.24133 1.63624 0.08457 0.00780 0.00000 0.06351 0.13151 - 0.50693 0.24036 1.58374 0.08501 0.00978 0.00000 0.06434 0.13110 - 0.50699 0.23925 1.52866 0.08533 0.01168 0.00000 0.06507 0.13052 - 0.50684 0.23822 1.48151 0.08549 0.01318 0.00000 0.06558 0.12991 - 0.50653 0.23717 1.43676 0.08556 0.01451 0.00000 0.06596 0.12923 - 0.50617 0.23630 1.40191 0.08555 0.01548 0.00000 0.06620 0.12863 - 0.50508 0.23435 1.32954 0.08538 0.01732 0.00001 0.06652 0.12721 - 0.50381 0.23256 1.26421 0.08507 0.01869 0.00192 0.06662 0.12583 - 0.50206 0.23046 1.19431 0.08456 0.02000 0.00390 0.06655 0.12414 - 0.49990 0.22818 1.12560 0.08388 0.02114 0.00571 0.06630 0.12225 - 0.49766 0.22603 1.06674 0.08314 0.02199 0.00714 0.06594 0.12043 - 0.49515 0.22379 1.01062 0.08230 0.02270 0.00841 0.06546 0.11852 - 0.49289 0.22189 0.96648 0.08153 0.02319 0.00934 0.06499 0.11688 - 0.48996 0.21954 0.91581 0.08054 0.02367 0.01034 0.06433 0.11485 - 0.48719 0.21741 0.87348 0.07961 0.02400 0.01111 0.06369 0.11302 - 0.48453 0.21543 0.83663 0.07873 0.02424 0.01174 0.06306 0.11132 - 0.48098 0.21289 0.79247 0.07756 0.02445 0.01243 0.06221 0.10914 - 0.47749 0.21047 0.75345 0.07642 0.02458 0.01298 0.06136 0.10708 - 0.47410 0.20817 0.71898 0.07534 0.02464 0.01342 0.06054 0.10514 - 0.47059 0.20586 0.68643 0.07423 0.02466 0.01380 0.05968 0.10320 - 0.46706 0.20358 0.65631 0.07313 0.02462 0.01412 0.05883 0.10131 - 0.46364 0.20141 0.62931 0.07209 0.02456 0.01437 0.05800 0.09952 - 0.46034 0.19936 0.60513 0.07109 0.02446 0.01456 0.05721 0.09784 - 0.45697 0.19728 0.58199 0.07009 0.02435 0.01473 0.05641 0.09617 - 0.45359 0.19524 0.56033 0.06910 0.02421 0.01486 0.05561 0.09453 - 0.45033 0.19330 0.54068 0.06816 0.02406 0.01496 0.05485 0.09299 - 0.44721 0.19145 0.52289 0.06727 0.02391 0.01503 0.05413 0.09153 - 0.44402 0.18959 0.50570 0.06638 0.02374 0.01508 0.05339 0.09008 - 0.44084 0.18776 0.48945 0.06550 0.02356 0.01512 0.05267 0.08866 - 0.43778 0.18601 0.47457 0.06466 0.02338 0.01513 0.05199 0.08732 - 0.43485 0.18434 0.46100 0.06387 0.02321 0.01514 0.05133 0.08606 - 0.43186 0.18266 0.44777 0.06307 0.02302 0.01513 0.05067 0.08479 - 0.54669 0.25948 1.65278 0.06629 0.00000 0.00000 0.04771 0.11751 - 0.54673 0.25801 1.59415 0.06732 0.00000 0.00000 0.04909 0.11722 - 0.54614 0.25563 1.50772 0.06848 0.00000 0.00000 0.05072 0.11644 - 0.54526 0.25376 1.44030 0.06907 0.00195 0.00000 0.05164 0.11566 - 0.54397 0.25168 1.37052 0.06948 0.00408 0.00000 0.05239 0.11465 - 0.54256 0.24980 1.31228 0.06969 0.00571 0.00000 0.05286 0.11366 - 0.54098 0.24793 1.25825 0.06976 0.00711 0.00000 0.05319 0.11260 - 0.53907 0.24589 1.20295 0.06973 0.00845 0.00000 0.05342 0.11139 - 0.53723 0.24406 1.15662 0.06962 0.00949 0.00000 0.05352 0.11027 - 0.53530 0.24226 1.11347 0.06944 0.01039 0.00000 0.05354 0.10914 - 0.53368 0.24081 1.08036 0.06925 0.01105 0.00000 0.05351 0.10821 - 0.52994 0.23765 1.01293 0.06874 0.01228 0.00001 0.05331 0.10615 - 0.52643 0.23486 0.95425 0.06818 0.01317 0.00132 0.05302 0.10430 - 0.52223 0.23168 0.89268 0.06745 0.01400 0.00268 0.05258 0.10215 - 0.51759 0.22831 0.83330 0.06658 0.01470 0.00390 0.05200 0.09987 - 0.51316 0.22522 0.78330 0.06572 0.01521 0.00485 0.05139 0.09776 - 0.50849 0.22207 0.73636 0.06479 0.01561 0.00569 0.05070 0.09561 - 0.50449 0.21943 0.69992 0.06398 0.01588 0.00629 0.05009 0.09382 - 0.49949 0.21622 0.65861 0.06296 0.01613 0.00693 0.04931 0.09165 - 0.49495 0.21338 0.62451 0.06203 0.01628 0.00742 0.04859 0.08973 - 0.49070 0.21076 0.59514 0.06117 0.01638 0.00781 0.04790 0.08798 - 0.48520 0.20743 0.56032 0.06005 0.01645 0.00823 0.04701 0.08578 - 0.47994 0.20431 0.52989 0.05898 0.01646 0.00856 0.04615 0.08373 - 0.47493 0.20139 0.50327 0.05797 0.01644 0.00883 0.04533 0.08183 - 0.46986 0.19847 0.47835 0.05696 0.01638 0.00904 0.04450 0.07995 - 0.46484 0.19563 0.45549 0.05596 0.01630 0.00922 0.04369 0.07814 - 0.46005 0.19295 0.43514 0.05503 0.01620 0.00935 0.04292 0.07645 - 0.45550 0.19043 0.41705 0.05414 0.01609 0.00946 0.04219 0.07488 - 0.45091 0.18792 0.39985 0.05326 0.01597 0.00954 0.04146 0.07332 - 0.44636 0.18545 0.38385 0.05240 0.01584 0.00960 0.04075 0.07182 - 0.44203 0.18312 0.36941 0.05158 0.01570 0.00964 0.04007 0.07041 - 0.43791 0.18093 0.35641 0.05081 0.01556 0.00966 0.03944 0.06909 - 0.43375 0.17873 0.34391 0.05005 0.01541 0.00967 0.03880 0.06779 - 0.42963 0.17657 0.33213 0.04929 0.01526 0.00968 0.03818 0.06651 - 0.42570 0.17452 0.32140 0.04858 0.01511 0.00967 0.03759 0.06532 - 0.42196 0.17259 0.31165 0.04791 0.01496 0.00965 0.03703 0.06420 - 0.41818 0.17064 0.30218 0.04724 0.01481 0.00963 0.03647 0.06309 - 0.58259 0.26783 1.38817 0.05721 0.00000 0.00000 0.04162 0.10392 - 0.58037 0.26527 1.32357 0.05781 0.00000 0.00000 0.04241 0.10290 - 0.57651 0.26134 1.23208 0.05838 0.00000 0.00000 0.04325 0.10117 - 0.57330 0.25839 1.16434 0.05859 0.00144 0.00000 0.04365 0.09977 - 0.56961 0.25522 1.09612 0.05865 0.00298 0.00000 0.04390 0.09818 - 0.56618 0.25243 1.04040 0.05858 0.00415 0.00000 0.04399 0.09675 - 0.56270 0.24971 0.98961 0.05842 0.00515 0.00000 0.04399 0.09531 - 0.55882 0.24680 0.93848 0.05817 0.00608 0.00000 0.04389 0.09375 - 0.55530 0.24425 0.89630 0.05788 0.00680 0.00000 0.04375 0.09235 - 0.55178 0.24176 0.85751 0.05756 0.00743 0.00000 0.04355 0.09099 - 0.54892 0.23979 0.82807 0.05727 0.00787 0.00000 0.04336 0.08989 - 0.54261 0.23555 0.76895 0.05657 0.00869 0.00001 0.04288 0.08754 - 0.53697 0.23187 0.71880 0.05588 0.00927 0.00092 0.04238 0.08549 - 0.53046 0.22774 0.66696 0.05505 0.00980 0.00185 0.04175 0.08318 - 0.52350 0.22345 0.61768 0.05411 0.01024 0.00268 0.04102 0.08079 - 0.51704 0.21956 0.57675 0.05322 0.01054 0.00332 0.04031 0.07863 - 0.51040 0.21565 0.53877 0.05228 0.01077 0.00388 0.03956 0.07647 - 0.50483 0.21241 0.50960 0.05148 0.01092 0.00427 0.03892 0.07469 - 0.49799 0.20851 0.47685 0.05050 0.01104 0.00469 0.03812 0.07258 - 0.49188 0.20508 0.45008 0.04962 0.01110 0.00500 0.03740 0.07073 - 0.48624 0.20196 0.42721 0.04880 0.01113 0.00525 0.03673 0.06907 - 0.47905 0.19803 0.40032 0.04776 0.01114 0.00552 0.03588 0.06699 - 0.47226 0.19437 0.37702 0.04678 0.01111 0.00572 0.03508 0.06508 - 0.46588 0.19097 0.35679 0.04587 0.01105 0.00588 0.03433 0.06334 - 0.45949 0.18761 0.33799 0.04496 0.01098 0.00601 0.03358 0.06162 - 0.45324 0.18435 0.32085 0.04407 0.01089 0.00611 0.03285 0.05999 - 0.44732 0.18130 0.30569 0.04324 0.01080 0.00618 0.03217 0.05847 - 0.44176 0.17846 0.29228 0.04246 0.01070 0.00623 0.03153 0.05707 - 0.43617 0.17563 0.27959 0.04169 0.01059 0.00627 0.03090 0.05570 - 0.43070 0.17287 0.26784 0.04094 0.01047 0.00630 0.03028 0.05437 - 0.42550 0.17028 0.25728 0.04023 0.01036 0.00631 0.02970 0.05314 - 0.42061 0.16785 0.24780 0.03956 0.01025 0.00632 0.02916 0.05200 - 0.41568 0.16543 0.23873 0.03890 0.01013 0.00632 0.02862 0.05087 - 0.41084 0.16306 0.23021 0.03826 0.01001 0.00631 0.02809 0.04978 - 0.40625 0.16082 0.22247 0.03765 0.00989 0.00629 0.02760 0.04875 - 0.40190 0.15872 0.21545 0.03708 0.00978 0.00627 0.02713 0.04780 - 0.39752 0.15661 0.20865 0.03651 0.00967 0.00625 0.02667 0.04686 - 0.60752 0.27074 1.14340 0.05046 0.00000 0.00000 0.03614 0.09007 - 0.60300 0.26716 1.07941 0.05071 0.00000 0.00000 0.03649 0.08859 - 0.59585 0.26179 0.99112 0.05083 0.00000 0.00000 0.03677 0.08628 - 0.59034 0.25785 0.92796 0.05075 0.00105 0.00000 0.03681 0.08453 - 0.58429 0.25369 0.86556 0.05055 0.00216 0.00000 0.03673 0.08264 - 0.57890 0.25008 0.81539 0.05028 0.00300 0.00000 0.03657 0.08098 - 0.57359 0.24662 0.77028 0.04996 0.00370 0.00000 0.03636 0.07937 - 0.56783 0.24294 0.72545 0.04955 0.00436 0.00000 0.03607 0.07766 - 0.56272 0.23976 0.68888 0.04915 0.00486 0.00000 0.03578 0.07616 - 0.55771 0.23668 0.65560 0.04873 0.00528 0.00000 0.03546 0.07472 - 0.55370 0.23426 0.63055 0.04838 0.00558 0.00000 0.03519 0.07359 - 0.54502 0.22911 0.58081 0.04757 0.00613 0.00000 0.03455 0.07118 - 0.53742 0.22470 0.53940 0.04682 0.00651 0.00064 0.03396 0.06912 - 0.52881 0.21980 0.49713 0.04594 0.00685 0.00128 0.03326 0.06685 - 0.51978 0.21475 0.45742 0.04498 0.00712 0.00185 0.03249 0.06454 - 0.51153 0.21023 0.42479 0.04408 0.00730 0.00228 0.03177 0.06248 - 0.50318 0.20573 0.39482 0.04317 0.00744 0.00265 0.03102 0.06045 - 0.49624 0.20203 0.37198 0.04240 0.00751 0.00292 0.03040 0.05880 - 0.48783 0.19761 0.34655 0.04146 0.00757 0.00319 0.02965 0.05685 - 0.48040 0.19375 0.32593 0.04063 0.00759 0.00340 0.02898 0.05517 - 0.47359 0.19025 0.30842 0.03987 0.00759 0.00356 0.02836 0.05366 - 0.46500 0.18589 0.28798 0.03891 0.00756 0.00372 0.02759 0.05180 - 0.45696 0.18185 0.27039 0.03801 0.00752 0.00385 0.02687 0.05011 - 0.44947 0.17813 0.25521 0.03718 0.00747 0.00395 0.02621 0.04857 - 0.44203 0.17447 0.24117 0.03636 0.00740 0.00403 0.02555 0.04707 - 0.43480 0.17094 0.22844 0.03556 0.00732 0.00409 0.02492 0.04565 - 0.42801 0.16766 0.21723 0.03482 0.00724 0.00413 0.02433 0.04434 - 0.42165 0.16461 0.20735 0.03413 0.00716 0.00416 0.02378 0.04315 - 0.41532 0.16159 0.19804 0.03345 0.00707 0.00417 0.02324 0.04197 - 0.40913 0.15866 0.18944 0.03279 0.00698 0.00419 0.02272 0.04085 - 0.40330 0.15592 0.18174 0.03217 0.00689 0.00419 0.02224 0.03981 - 0.39783 0.15336 0.17485 0.03159 0.00680 0.00419 0.02178 0.03884 - 0.39236 0.15082 0.16826 0.03101 0.00671 0.00418 0.02133 0.03790 - 0.38700 0.14834 0.16209 0.03045 0.00662 0.00417 0.02090 0.03699 - 0.38192 0.14601 0.15650 0.02992 0.00654 0.00415 0.02049 0.03614 - 0.37715 0.14382 0.15143 0.02943 0.00645 0.00413 0.02011 0.03535 - 0.37236 0.14164 0.14654 0.02894 0.00637 0.00411 0.01973 0.03457 - 0.62231 0.26885 0.92518 0.04540 0.00000 0.00000 0.03121 0.07648 - 0.61555 0.26434 0.86585 0.04536 0.00000 0.00000 0.03126 0.07476 - 0.60523 0.25771 0.78558 0.04512 0.00000 0.00000 0.03114 0.07218 - 0.59753 0.25291 0.72959 0.04482 0.00076 0.00000 0.03095 0.07029 - 0.58927 0.24789 0.67510 0.04441 0.00156 0.00000 0.03066 0.06829 - 0.58205 0.24359 0.63185 0.04399 0.00215 0.00000 0.03035 0.06658 - 0.57505 0.23950 0.59338 0.04355 0.00264 0.00000 0.03002 0.06495 - 0.56756 0.23519 0.55554 0.04303 0.00310 0.00000 0.02962 0.06324 - 0.56101 0.23148 0.52497 0.04255 0.00344 0.00000 0.02925 0.06177 - 0.55465 0.22794 0.49738 0.04206 0.00373 0.00000 0.02887 0.06036 - 0.54960 0.22515 0.47676 0.04166 0.00394 0.00000 0.02856 0.05927 - 0.53882 0.21928 0.43618 0.04077 0.00431 0.00000 0.02787 0.05697 - 0.52950 0.21429 0.40292 0.03998 0.00456 0.00044 0.02725 0.05504 - 0.51907 0.20881 0.36929 0.03907 0.00478 0.00089 0.02654 0.05293 - 0.50826 0.20320 0.33803 0.03811 0.00494 0.00128 0.02579 0.05081 - 0.49850 0.19822 0.31256 0.03723 0.00505 0.00157 0.02510 0.04895 - 0.48872 0.19329 0.28936 0.03633 0.00513 0.00182 0.02441 0.04712 - 0.48065 0.18927 0.27181 0.03559 0.00516 0.00200 0.02384 0.04566 - 0.47095 0.18449 0.25239 0.03470 0.00519 0.00218 0.02315 0.04394 - 0.46245 0.18035 0.23674 0.03392 0.00519 0.00232 0.02254 0.04247 - 0.45472 0.17662 0.22353 0.03321 0.00518 0.00242 0.02200 0.04116 - 0.44502 0.17198 0.20818 0.03231 0.00515 0.00253 0.02132 0.03956 - 0.43601 0.16772 0.19504 0.03149 0.00510 0.00261 0.02069 0.03811 - 0.42768 0.16381 0.18375 0.03073 0.00505 0.00267 0.02012 0.03680 - 0.41945 0.15998 0.17336 0.02998 0.00500 0.00272 0.01955 0.03554 - 0.41149 0.15631 0.16397 0.02926 0.00493 0.00275 0.01902 0.03434 - 0.40406 0.15291 0.15572 0.02859 0.00487 0.00278 0.01852 0.03325 - 0.39714 0.14976 0.14848 0.02797 0.00481 0.00279 0.01806 0.03225 - 0.39027 0.14666 0.14167 0.02736 0.00474 0.00280 0.01761 0.03128 - 0.38360 0.14367 0.13539 0.02676 0.00467 0.00280 0.01717 0.03035 - 0.37734 0.14087 0.12978 0.02621 0.00461 0.00280 0.01677 0.02950 - 0.37148 0.13827 0.12477 0.02570 0.00454 0.00280 0.01639 0.02871 - 0.36564 0.13570 0.11999 0.02519 0.00448 0.00279 0.01602 0.02794 - 0.35994 0.13320 0.11552 0.02470 0.00441 0.00278 0.01566 0.02720 - 0.35457 0.13085 0.11147 0.02423 0.00435 0.00277 0.01533 0.02651 - 0.34953 0.12866 0.10780 0.02380 0.00429 0.00275 0.01502 0.02588 - 0.34449 0.12647 0.10427 0.02337 0.00422 0.00274 0.01471 0.02525 - 0.62785 0.26280 0.73626 0.04149 0.00000 0.00000 0.02681 0.06358 - 0.61898 0.25751 0.68380 0.04121 0.00000 0.00000 0.02664 0.06180 - 0.60573 0.24981 0.61393 0.04066 0.00000 0.00000 0.02628 0.05918 - 0.59602 0.24430 0.56616 0.04018 0.00054 0.00000 0.02594 0.05731 - 0.58575 0.23859 0.52025 0.03961 0.00111 0.00000 0.02552 0.05536 - 0.57688 0.23374 0.48420 0.03907 0.00153 0.00000 0.02513 0.05372 - 0.56837 0.22915 0.45242 0.03853 0.00187 0.00000 0.02473 0.05217 - 0.55935 0.22436 0.42145 0.03792 0.00219 0.00000 0.02429 0.05057 - 0.55153 0.22025 0.39663 0.03738 0.00243 0.00000 0.02389 0.04920 - 0.54401 0.21635 0.37438 0.03684 0.00262 0.00000 0.02349 0.04791 - 0.53807 0.21329 0.35785 0.03641 0.00276 0.00000 0.02317 0.04690 - 0.52548 0.20689 0.32558 0.03547 0.00301 0.00000 0.02248 0.04482 - 0.51471 0.20150 0.29945 0.03465 0.00317 0.00031 0.02188 0.04309 - 0.50278 0.19561 0.27326 0.03372 0.00331 0.00062 0.02120 0.04122 - 0.49051 0.18963 0.24911 0.03276 0.00342 0.00088 0.02050 0.03936 - 0.47953 0.18435 0.22960 0.03189 0.00348 0.00108 0.01987 0.03774 - 0.46860 0.17916 0.21193 0.03103 0.00352 0.00125 0.01924 0.03617 - 0.45965 0.17495 0.19864 0.03031 0.00354 0.00137 0.01873 0.03491 - 0.44896 0.16997 0.18402 0.02946 0.00355 0.00149 0.01812 0.03345 - 0.43965 0.16567 0.17229 0.02872 0.00354 0.00158 0.01759 0.03221 - 0.43123 0.16182 0.16243 0.02805 0.00353 0.00165 0.01711 0.03111 - 0.42072 0.15706 0.15102 0.02721 0.00350 0.00172 0.01653 0.02977 - 0.41102 0.15271 0.14129 0.02644 0.00346 0.00178 0.01599 0.02857 - 0.40209 0.14873 0.13297 0.02574 0.00342 0.00181 0.01550 0.02749 - 0.39331 0.14485 0.12532 0.02505 0.00338 0.00184 0.01502 0.02645 - 0.38487 0.14115 0.11843 0.02439 0.00333 0.00187 0.01457 0.02547 - 0.37702 0.13774 0.11239 0.02378 0.00328 0.00188 0.01415 0.02458 - 0.36975 0.13459 0.10710 0.02322 0.00324 0.00189 0.01377 0.02378 - 0.36255 0.13150 0.10213 0.02267 0.00319 0.00189 0.01339 0.02299 - 0.35559 0.12852 0.09755 0.02213 0.00314 0.00189 0.01304 0.02225 - 0.34907 0.12575 0.09347 0.02164 0.00309 0.00189 0.01270 0.02157 - 0.34300 0.12319 0.08983 0.02118 0.00304 0.00188 0.01239 0.02094 - 0.33696 0.12065 0.08635 0.02072 0.00299 0.00188 0.01209 0.02033 - 0.33110 0.11819 0.08310 0.02028 0.00295 0.00187 0.01180 0.01974 - 0.32558 0.11590 0.08016 0.01987 0.00290 0.00186 0.01153 0.01920 - 0.32042 0.11376 0.07750 0.01949 0.00286 0.00185 0.01128 0.01870 - 0.31527 0.11163 0.07493 0.01910 0.00281 0.00183 0.01103 0.01821 - 0.62509 0.25327 0.57655 0.03829 0.00000 0.00000 0.02289 0.05172 - 0.61432 0.24735 0.53187 0.03781 0.00000 0.00000 0.02259 0.04999 - 0.59843 0.23882 0.47317 0.03701 0.00000 0.00000 0.02207 0.04752 - 0.58693 0.23276 0.43369 0.03638 0.00039 0.00000 0.02165 0.04577 - 0.57490 0.22653 0.39615 0.03567 0.00078 0.00000 0.02117 0.04398 - 0.56460 0.22127 0.36695 0.03504 0.00108 0.00000 0.02075 0.04248 - 0.55479 0.21632 0.34142 0.03442 0.00132 0.00000 0.02032 0.04108 - 0.54448 0.21118 0.31672 0.03374 0.00153 0.00000 0.01987 0.03965 - 0.53559 0.20680 0.29707 0.03315 0.00170 0.00000 0.01947 0.03843 - 0.52709 0.20265 0.27956 0.03258 0.00183 0.00000 0.01908 0.03730 - 0.52042 0.19942 0.26662 0.03212 0.00192 0.00000 0.01877 0.03642 - 0.50635 0.19268 0.24152 0.03114 0.00209 0.00000 0.01811 0.03461 - 0.49442 0.18705 0.22140 0.03031 0.00220 0.00021 0.01755 0.03312 - 0.48129 0.18092 0.20138 0.02938 0.00229 0.00043 0.01693 0.03152 - 0.46789 0.17474 0.18304 0.02842 0.00235 0.00061 0.01629 0.02994 - 0.45598 0.16932 0.16832 0.02757 0.00239 0.00075 0.01573 0.02858 - 0.44420 0.16401 0.15506 0.02673 0.00242 0.00086 0.01517 0.02727 - 0.43461 0.15973 0.14514 0.02604 0.00243 0.00094 0.01472 0.02623 - 0.42321 0.15469 0.13425 0.02522 0.00242 0.00103 0.01419 0.02503 - 0.41333 0.15036 0.12556 0.02452 0.00242 0.00109 0.01374 0.02401 - 0.40445 0.14649 0.11828 0.02389 0.00240 0.00113 0.01333 0.02311 - 0.39341 0.14173 0.10987 0.02310 0.00238 0.00118 0.01283 0.02203 - 0.38326 0.13740 0.10272 0.02239 0.00235 0.00121 0.01238 0.02106 - 0.37397 0.13346 0.09662 0.02173 0.00232 0.00124 0.01197 0.02019 - 0.36488 0.12963 0.09102 0.02110 0.00229 0.00126 0.01157 0.01937 - 0.35618 0.12600 0.08598 0.02049 0.00225 0.00127 0.01119 0.01859 - 0.34811 0.12265 0.08158 0.01993 0.00222 0.00128 0.01084 0.01789 - 0.34066 0.11958 0.07771 0.01942 0.00218 0.00128 0.01053 0.01725 - 0.33331 0.11657 0.07409 0.01892 0.00215 0.00128 0.01022 0.01664 - 0.32623 0.11368 0.07076 0.01843 0.00211 0.00128 0.00992 0.01606 - 0.31962 0.11100 0.06778 0.01798 0.00207 0.00128 0.00965 0.01552 - 0.31349 0.10853 0.06513 0.01757 0.00204 0.00128 0.00940 0.01504 - 0.30740 0.10609 0.06260 0.01716 0.00201 0.00127 0.00915 0.01456 - 0.30150 0.10373 0.06023 0.01677 0.00197 0.00126 0.00892 0.01411 - 0.29597 0.10153 0.05809 0.01640 0.00194 0.00125 0.00870 0.01369 - 0.29081 0.09949 0.05615 0.01606 0.00191 0.00125 0.00849 0.01331 - 0.28567 0.09746 0.05428 0.01572 0.00188 0.00124 0.00829 0.01293 - 0.61497 0.24090 0.44444 0.03546 0.00000 0.00000 0.01942 0.04112 - 0.60252 0.23452 0.40759 0.03482 0.00000 0.00000 0.01904 0.03954 - 0.58435 0.22538 0.35974 0.03382 0.00000 0.00000 0.01845 0.03731 - 0.57132 0.21894 0.32801 0.03306 0.00027 0.00000 0.01799 0.03576 - 0.55781 0.21236 0.29813 0.03225 0.00055 0.00000 0.01749 0.03419 - 0.54632 0.20683 0.27508 0.03155 0.00075 0.00000 0.01706 0.03288 - 0.53544 0.20166 0.25506 0.03087 0.00092 0.00000 0.01665 0.03167 - 0.52407 0.19631 0.23582 0.03014 0.00107 0.00000 0.01620 0.03044 - 0.51433 0.19178 0.22061 0.02952 0.00118 0.00000 0.01582 0.02941 - 0.50506 0.18750 0.20713 0.02892 0.00127 0.00000 0.01546 0.02844 - 0.49781 0.18417 0.19721 0.02845 0.00133 0.00000 0.01517 0.02770 - 0.48261 0.17728 0.17807 0.02745 0.00144 0.00000 0.01456 0.02618 - 0.46980 0.17154 0.16285 0.02661 0.00151 0.00015 0.01405 0.02494 - 0.45579 0.16534 0.14780 0.02568 0.00157 0.00029 0.01350 0.02363 - 0.44159 0.15912 0.13410 0.02474 0.00161 0.00042 0.01293 0.02234 - 0.42903 0.15369 0.12314 0.02391 0.00164 0.00051 0.01244 0.02123 - 0.41669 0.14839 0.11333 0.02310 0.00165 0.00059 0.01196 0.02017 - 0.40668 0.14414 0.10600 0.02244 0.00165 0.00065 0.01157 0.01933 - 0.39484 0.13916 0.09799 0.02166 0.00165 0.00070 0.01112 0.01837 - 0.38463 0.13490 0.09161 0.02100 0.00164 0.00074 0.01073 0.01756 - 0.37548 0.13111 0.08627 0.02040 0.00163 0.00078 0.01039 0.01685 - 0.36416 0.12646 0.08012 0.01967 0.00161 0.00081 0.00996 0.01600 - 0.35381 0.12224 0.07489 0.01900 0.00159 0.00083 0.00958 0.01524 - 0.34437 0.11843 0.07044 0.01839 0.00157 0.00085 0.00924 0.01457 - 0.33517 0.11473 0.06636 0.01781 0.00155 0.00086 0.00891 0.01392 - 0.32639 0.11123 0.06269 0.01725 0.00152 0.00087 0.00860 0.01332 - 0.31828 0.10802 0.05947 0.01674 0.00150 0.00087 0.00831 0.01278 - 0.31081 0.10509 0.05666 0.01627 0.00147 0.00087 0.00805 0.01229 - 0.30348 0.10222 0.05402 0.01581 0.00145 0.00087 0.00780 0.01182 - 0.29643 0.09947 0.05159 0.01538 0.00142 0.00087 0.00756 0.01138 - 0.28987 0.09694 0.04942 0.01497 0.00140 0.00087 0.00734 0.01098 - 0.28380 0.09459 0.04748 0.01460 0.00137 0.00087 0.00714 0.01061 - 0.27779 0.09229 0.04563 0.01423 0.00135 0.00086 0.00694 0.01025 - 0.27198 0.09008 0.04390 0.01388 0.00133 0.00086 0.00675 0.00991 - 0.26655 0.08801 0.04234 0.01355 0.00130 0.00085 0.00657 0.00959 - 0.26148 0.08610 0.04092 0.01324 0.00128 0.00085 0.00641 0.00931 - 0.25646 0.08421 0.03955 0.01294 0.00126 0.00084 0.00625 0.00902 - 0.59841 0.22632 0.33728 0.03277 0.00000 0.00000 0.01637 0.03192 - 0.58454 0.21963 0.30776 0.03200 0.00000 0.00000 0.01595 0.03055 - 0.56448 0.21012 0.26982 0.03084 0.00000 0.00000 0.01533 0.02862 - 0.55021 0.20347 0.24496 0.03000 0.00019 0.00000 0.01487 0.02730 - 0.53550 0.19670 0.22176 0.02912 0.00038 0.00000 0.01439 0.02597 - 0.52307 0.19104 0.20398 0.02836 0.00052 0.00000 0.01397 0.02488 - 0.51138 0.18578 0.18864 0.02765 0.00063 0.00000 0.01358 0.02387 - 0.49920 0.18035 0.17398 0.02689 0.00074 0.00000 0.01316 0.02285 - 0.48882 0.17577 0.16245 0.02625 0.00081 0.00000 0.01281 0.02200 - 0.47898 0.17146 0.15228 0.02564 0.00087 0.00000 0.01248 0.02121 - 0.47131 0.16812 0.14482 0.02516 0.00091 0.00000 0.01222 0.02061 - 0.45531 0.16123 0.13050 0.02417 0.00099 0.00000 0.01167 0.01938 - 0.44191 0.15553 0.11918 0.02333 0.00104 0.00010 0.01122 0.01838 - 0.42732 0.14938 0.10804 0.02242 0.00107 0.00020 0.01073 0.01733 - 0.41262 0.14326 0.09795 0.02151 0.00110 0.00029 0.01025 0.01631 - 0.39970 0.13794 0.08991 0.02071 0.00112 0.00035 0.00982 0.01543 - 0.38705 0.13277 0.08272 0.01993 0.00112 0.00041 0.00941 0.01460 - 0.37684 0.12864 0.07736 0.01931 0.00113 0.00045 0.00908 0.01395 - 0.36481 0.12382 0.07152 0.01857 0.00112 0.00048 0.00869 0.01320 - 0.35447 0.11971 0.06688 0.01794 0.00112 0.00051 0.00837 0.01258 - 0.34525 0.11606 0.06299 0.01739 0.00111 0.00053 0.00808 0.01203 - 0.33389 0.11161 0.05852 0.01671 0.00109 0.00055 0.00773 0.01138 - 0.32354 0.10759 0.05472 0.01609 0.00108 0.00057 0.00741 0.01080 - 0.31413 0.10396 0.05148 0.01553 0.00106 0.00058 0.00713 0.01029 - 0.30500 0.10046 0.04851 0.01499 0.00105 0.00059 0.00686 0.00980 - 0.29631 0.09716 0.04584 0.01449 0.00103 0.00059 0.00660 0.00935 - 0.28832 0.09414 0.04350 0.01402 0.00101 0.00060 0.00637 0.00895 - 0.28098 0.09138 0.04145 0.01360 0.00099 0.00060 0.00616 0.00858 - 0.27379 0.08869 0.03952 0.01318 0.00097 0.00060 0.00595 0.00823 - 0.26690 0.08613 0.03775 0.01279 0.00096 0.00060 0.00576 0.00790 - 0.26050 0.08377 0.03616 0.01243 0.00094 0.00059 0.00558 0.00760 - 0.25459 0.08160 0.03474 0.01209 0.00092 0.00059 0.00541 0.00733 - 0.24877 0.07947 0.03339 0.01176 0.00091 0.00059 0.00525 0.00707 - 0.24314 0.07742 0.03212 0.01145 0.00089 0.00058 0.00510 0.00682 - 0.23790 0.07551 0.03097 0.01116 0.00088 0.00058 0.00496 0.00659 - 0.23302 0.07375 0.02993 0.01089 0.00086 0.00058 0.00483 0.00638 - 0.22819 0.07201 0.02893 0.01062 0.00085 0.00057 0.00470 0.00617 - 0.57634 0.21010 0.25194 0.03007 0.00000 0.00000 0.01369 0.02414 - 0.56133 0.20327 0.22893 0.02921 0.00000 0.00000 0.01327 0.02300 - 0.53978 0.19361 0.19963 0.02796 0.00000 0.00000 0.01266 0.02141 - 0.52456 0.18689 0.18065 0.02706 0.00013 0.00000 0.01222 0.02032 - 0.50896 0.18009 0.16305 0.02613 0.00026 0.00000 0.01176 0.01924 - 0.49585 0.17443 0.14965 0.02535 0.00036 0.00000 0.01138 0.01836 - 0.48356 0.16918 0.13815 0.02462 0.00043 0.00000 0.01102 0.01755 - 0.47084 0.16380 0.12722 0.02386 0.00050 0.00000 0.01064 0.01673 - 0.46003 0.15926 0.11866 0.02321 0.00055 0.00000 0.01033 0.01606 - 0.44982 0.15502 0.11113 0.02260 0.00059 0.00000 0.01003 0.01544 - 0.44188 0.15174 0.10563 0.02213 0.00062 0.00000 0.00980 0.01496 - 0.42541 0.14499 0.09511 0.02115 0.00067 0.00000 0.00932 0.01400 - 0.41167 0.13943 0.08683 0.02034 0.00070 0.00007 0.00893 0.01322 - 0.39680 0.13347 0.07870 0.01946 0.00073 0.00014 0.00851 0.01241 - 0.38189 0.12755 0.07136 0.01859 0.00075 0.00020 0.00809 0.01162 - 0.36884 0.12243 0.06553 0.01783 0.00076 0.00024 0.00773 0.01095 - 0.35613 0.11749 0.06032 0.01710 0.00076 0.00028 0.00738 0.01032 - 0.34591 0.11355 0.05645 0.01651 0.00076 0.00031 0.00710 0.00983 - 0.33391 0.10896 0.05222 0.01583 0.00076 0.00033 0.00678 0.00927 - 0.32365 0.10507 0.04886 0.01525 0.00076 0.00035 0.00651 0.00880 - 0.31452 0.10163 0.04605 0.01473 0.00075 0.00037 0.00627 0.00840 - 0.30331 0.09745 0.04281 0.01410 0.00074 0.00038 0.00598 0.00791 - 0.29314 0.09368 0.04006 0.01354 0.00073 0.00039 0.00572 0.00748 - 0.28393 0.09029 0.03771 0.01303 0.00072 0.00040 0.00549 0.00710 - 0.27501 0.08703 0.03555 0.01255 0.00071 0.00040 0.00526 0.00675 - 0.26656 0.08397 0.03361 0.01209 0.00069 0.00041 0.00506 0.00642 - 0.25881 0.08117 0.03190 0.01167 0.00068 0.00041 0.00487 0.00612 - 0.25171 0.07863 0.03040 0.01129 0.00067 0.00041 0.00470 0.00586 - 0.24478 0.07615 0.02900 0.01092 0.00066 0.00041 0.00453 0.00561 - 0.23815 0.07380 0.02770 0.01057 0.00064 0.00041 0.00437 0.00537 - 0.23202 0.07164 0.02653 0.01025 0.00063 0.00041 0.00423 0.00515 - 0.22636 0.06965 0.02549 0.00995 0.00062 0.00040 0.00410 0.00496 - 0.22080 0.06771 0.02450 0.00966 0.00061 0.00040 0.00397 0.00477 - 0.21544 0.06585 0.02357 0.00938 0.00060 0.00040 0.00385 0.00459 - 0.21045 0.06412 0.02272 0.00913 0.00059 0.00040 0.00374 0.00443 - 0.20582 0.06253 0.02195 0.00889 0.00058 0.00039 0.00363 0.00428 - 0.20124 0.06095 0.02121 0.00865 0.00057 0.00039 0.00353 0.00413 - 0.54964 0.19280 0.18518 0.02731 0.00000 0.00000 0.01136 0.01776 - 0.53379 0.18597 0.16772 0.02639 0.00000 0.00000 0.01096 0.01684 - 0.51117 0.17637 0.14568 0.02508 0.00000 0.00000 0.01038 0.01557 - 0.49529 0.16972 0.13153 0.02416 0.00009 0.00000 0.00997 0.01472 - 0.47910 0.16302 0.11850 0.02323 0.00018 0.00000 0.00956 0.01387 - 0.46555 0.15747 0.10863 0.02244 0.00024 0.00000 0.00921 0.01318 - 0.45291 0.15234 0.10020 0.02172 0.00029 0.00000 0.00889 0.01256 - 0.43986 0.14710 0.09222 0.02097 0.00034 0.00000 0.00856 0.01193 - 0.42883 0.14270 0.08599 0.02034 0.00037 0.00000 0.00828 0.01141 - 0.41844 0.13859 0.08052 0.01974 0.00040 0.00000 0.00802 0.01093 - 0.41039 0.13543 0.07654 0.01929 0.00042 0.00000 0.00782 0.01057 - 0.39374 0.12894 0.06894 0.01835 0.00046 0.00000 0.00741 0.00984 - 0.37993 0.12362 0.06298 0.01757 0.00048 0.00005 0.00707 0.00926 - 0.36504 0.11794 0.05713 0.01674 0.00049 0.00010 0.00671 0.00865 - 0.35018 0.11233 0.05186 0.01592 0.00051 0.00014 0.00636 0.00807 - 0.33723 0.10749 0.04768 0.01521 0.00051 0.00017 0.00605 0.00757 - 0.32467 0.10284 0.04394 0.01453 0.00052 0.00019 0.00576 0.00711 - 0.31461 0.09915 0.04116 0.01399 0.00052 0.00021 0.00553 0.00675 - 0.30284 0.09486 0.03812 0.01336 0.00051 0.00023 0.00526 0.00634 - 0.29281 0.09124 0.03570 0.01283 0.00051 0.00024 0.00504 0.00600 - 0.28392 0.08805 0.03368 0.01236 0.00051 0.00025 0.00484 0.00571 - 0.27304 0.08417 0.03134 0.01180 0.00050 0.00026 0.00461 0.00536 - 0.26320 0.08070 0.02935 0.01129 0.00049 0.00027 0.00439 0.00505 - 0.25432 0.07758 0.02765 0.01083 0.00048 0.00027 0.00420 0.00478 - 0.24575 0.07460 0.02608 0.01040 0.00048 0.00028 0.00402 0.00453 - 0.23766 0.07180 0.02467 0.00999 0.00047 0.00028 0.00386 0.00429 - 0.23025 0.06925 0.02342 0.00962 0.00046 0.00028 0.00370 0.00408 - 0.22349 0.06694 0.02233 0.00928 0.00045 0.00028 0.00357 0.00390 - 0.21690 0.06470 0.02130 0.00896 0.00044 0.00028 0.00344 0.00372 - 0.21062 0.06258 0.02034 0.00865 0.00043 0.00028 0.00331 0.00355 - 0.20482 0.06063 0.01949 0.00837 0.00043 0.00028 0.00320 0.00340 - 0.19948 0.05884 0.01872 0.00811 0.00042 0.00028 0.00309 0.00327 - 0.19424 0.05709 0.01799 0.00785 0.00041 0.00028 0.00299 0.00314 - 0.18921 0.05543 0.01730 0.00761 0.00040 0.00027 0.00289 0.00301 - 0.18453 0.05388 0.01668 0.00739 0.00040 0.00027 0.00280 0.00290 - 0.18021 0.05246 0.01611 0.00719 0.00039 0.00027 0.00272 0.00280 - 0.17593 0.05106 0.01556 0.00698 0.00038 0.00027 0.00264 0.00270 - 0.51918 0.17490 0.13387 0.02446 0.00000 0.00000 0.00934 0.01267 - 0.50277 0.16820 0.12099 0.02353 0.00000 0.00000 0.00897 0.01196 - 0.47948 0.15883 0.10485 0.02222 0.00000 0.00000 0.00845 0.01099 - 0.46323 0.15237 0.09457 0.02131 0.00006 0.00000 0.00808 0.01034 - 0.44674 0.14589 0.08515 0.02039 0.00012 0.00000 0.00771 0.00970 - 0.43299 0.14055 0.07805 0.01962 0.00016 0.00000 0.00740 0.00918 - 0.42022 0.13563 0.07200 0.01892 0.00020 0.00000 0.00712 0.00871 - 0.40709 0.13062 0.06629 0.01820 0.00023 0.00000 0.00683 0.00825 - 0.39602 0.12642 0.06185 0.01760 0.00025 0.00000 0.00659 0.00786 - 0.38563 0.12252 0.05796 0.01704 0.00027 0.00000 0.00637 0.00751 - 0.37760 0.11952 0.05513 0.01660 0.00028 0.00000 0.00620 0.00725 - 0.36106 0.11339 0.04973 0.01572 0.00031 0.00000 0.00585 0.00672 - 0.34739 0.10838 0.04550 0.01500 0.00032 0.00003 0.00556 0.00629 - 0.33272 0.10306 0.04135 0.01423 0.00033 0.00007 0.00526 0.00586 - 0.31814 0.09783 0.03761 0.01347 0.00034 0.00009 0.00497 0.00543 - 0.30550 0.09333 0.03464 0.01283 0.00034 0.00012 0.00471 0.00508 - 0.29328 0.08903 0.03198 0.01221 0.00035 0.00013 0.00447 0.00475 - 0.28352 0.08562 0.02999 0.01172 0.00035 0.00014 0.00428 0.00450 - 0.27215 0.08168 0.02782 0.01115 0.00035 0.00016 0.00406 0.00421 - 0.26250 0.07835 0.02609 0.01067 0.00034 0.00017 0.00388 0.00397 - 0.25396 0.07544 0.02463 0.01025 0.00034 0.00017 0.00372 0.00377 - 0.24355 0.07191 0.02295 0.00975 0.00034 0.00018 0.00353 0.00352 - 0.23417 0.06876 0.02151 0.00930 0.00033 0.00018 0.00336 0.00331 - 0.22573 0.06594 0.02028 0.00890 0.00033 0.00019 0.00321 0.00312 - 0.21762 0.06325 0.01914 0.00851 0.00032 0.00019 0.00306 0.00295 - 0.20997 0.06073 0.01811 0.00816 0.00031 0.00019 0.00293 0.00279 - 0.20299 0.05844 0.01720 0.00783 0.00031 0.00019 0.00281 0.00265 - 0.19664 0.05638 0.01640 0.00754 0.00030 0.00019 0.00270 0.00252 - 0.19047 0.05438 0.01564 0.00726 0.00030 0.00019 0.00259 0.00240 - 0.18459 0.05249 0.01494 0.00699 0.00029 0.00019 0.00249 0.00229 - 0.17918 0.05075 0.01431 0.00675 0.00029 0.00019 0.00240 0.00219 - 0.17422 0.04917 0.01375 0.00652 0.00028 0.00019 0.00232 0.00209 - 0.16935 0.04763 0.01320 0.00631 0.00028 0.00019 0.00224 0.00201 - 0.16469 0.04615 0.01270 0.00610 0.00027 0.00019 0.00216 0.00192 - 0.16036 0.04479 0.01223 0.00591 0.00027 0.00018 0.00209 0.00185 - 0.15637 0.04354 0.01181 0.00574 0.00026 0.00018 0.00203 0.00178 - 0.15243 0.04231 0.01140 0.00557 0.00026 0.00018 0.00197 0.00171 - 0.48578 0.15684 0.09513 0.02157 0.00000 0.00000 0.00761 0.00873 - 0.46909 0.15038 0.08590 0.02066 0.00000 0.00000 0.00728 0.00820 - 0.44554 0.14139 0.07442 0.01938 0.00000 0.00000 0.00681 0.00749 - 0.42918 0.13523 0.06715 0.01850 0.00004 0.00000 0.00649 0.00701 - 0.41266 0.12907 0.06051 0.01763 0.00008 0.00000 0.00617 0.00655 - 0.39895 0.12402 0.05552 0.01691 0.00011 0.00000 0.00590 0.00618 - 0.38625 0.11937 0.05129 0.01624 0.00013 0.00000 0.00566 0.00584 - 0.37324 0.11466 0.04730 0.01557 0.00015 0.00000 0.00542 0.00551 - 0.36231 0.11073 0.04419 0.01501 0.00017 0.00000 0.00521 0.00524 - 0.35208 0.10708 0.04148 0.01449 0.00018 0.00000 0.00502 0.00499 - 0.34419 0.10428 0.03950 0.01409 0.00019 0.00000 0.00488 0.00480 - 0.32800 0.09858 0.03573 0.01328 0.00020 0.00000 0.00458 0.00443 - 0.31468 0.09395 0.03277 0.01262 0.00021 0.00002 0.00435 0.00413 - 0.30044 0.08904 0.02986 0.01192 0.00022 0.00005 0.00410 0.00383 - 0.28635 0.08423 0.02723 0.01124 0.00023 0.00006 0.00385 0.00354 - 0.27418 0.08012 0.02513 0.01066 0.00023 0.00008 0.00365 0.00330 - 0.26246 0.07620 0.02325 0.01011 0.00023 0.00009 0.00345 0.00307 - 0.25314 0.07310 0.02184 0.00967 0.00023 0.00010 0.00329 0.00290 - 0.24231 0.06953 0.02030 0.00917 0.00023 0.00011 0.00312 0.00270 - 0.23314 0.06653 0.01906 0.00875 0.00023 0.00011 0.00297 0.00254 - 0.22506 0.06391 0.01801 0.00838 0.00023 0.00012 0.00284 0.00240 - 0.21524 0.06074 0.01680 0.00794 0.00023 0.00012 0.00269 0.00224 - 0.20642 0.05792 0.01576 0.00755 0.00022 0.00013 0.00255 0.00210 - 0.19851 0.05541 0.01486 0.00720 0.00022 0.00013 0.00243 0.00198 - 0.19092 0.05302 0.01404 0.00687 0.00022 0.00013 0.00231 0.00186 - 0.18380 0.05079 0.01328 0.00656 0.00021 0.00013 0.00221 0.00176 - 0.17731 0.04877 0.01262 0.00629 0.00021 0.00013 0.00211 0.00166 - 0.17142 0.04695 0.01203 0.00604 0.00020 0.00013 0.00202 0.00158 - 0.16571 0.04519 0.01147 0.00580 0.00020 0.00013 0.00194 0.00150 - 0.16029 0.04353 0.01096 0.00557 0.00020 0.00013 0.00186 0.00143 - 0.15531 0.04201 0.01049 0.00536 0.00019 0.00013 0.00179 0.00136 - 0.15075 0.04063 0.01007 0.00518 0.00019 0.00013 0.00173 0.00130 - 0.14629 0.03928 0.00967 0.00499 0.00018 0.00013 0.00167 0.00124 - 0.14202 0.03800 0.00930 0.00482 0.00018 0.00013 0.00161 0.00119 - 0.13807 0.03682 0.00895 0.00466 0.00018 0.00013 0.00155 0.00114 - 0.13443 0.03573 0.00864 0.00452 0.00017 0.00012 0.00150 0.00110 - 0.13084 0.03467 0.00834 0.00437 0.00017 0.00012 0.00145 0.00105 - 0.45024 0.13899 0.06639 0.01869 0.00000 0.00000 0.00614 0.00578 - 0.43354 0.13288 0.05999 0.01782 0.00000 0.00000 0.00585 0.00540 - 0.41009 0.12440 0.05207 0.01662 0.00000 0.00000 0.00544 0.00490 - 0.39389 0.11862 0.04707 0.01580 0.00003 0.00000 0.00517 0.00457 - 0.37759 0.11287 0.04253 0.01499 0.00005 0.00000 0.00489 0.00425 - 0.36411 0.10816 0.03911 0.01432 0.00007 0.00000 0.00467 0.00399 - 0.35168 0.10385 0.03622 0.01371 0.00009 0.00000 0.00446 0.00376 - 0.33898 0.09948 0.03349 0.01310 0.00010 0.00000 0.00425 0.00354 - 0.32834 0.09586 0.03137 0.01259 0.00011 0.00000 0.00408 0.00335 - 0.31842 0.09250 0.02951 0.01212 0.00012 0.00000 0.00393 0.00318 - 0.31078 0.08993 0.02815 0.01176 0.00013 0.00000 0.00381 0.00306 - 0.29516 0.08472 0.02556 0.01103 0.00014 0.00000 0.00356 0.00281 - 0.28236 0.08049 0.02351 0.01045 0.00014 0.00002 0.00337 0.00261 - 0.26874 0.07603 0.02150 0.00983 0.00015 0.00003 0.00316 0.00241 - 0.25531 0.07169 0.01966 0.00923 0.00015 0.00004 0.00296 0.00222 - 0.24375 0.06798 0.01820 0.00872 0.00015 0.00005 0.00280 0.00206 - 0.23267 0.06446 0.01687 0.00823 0.00016 0.00006 0.00264 0.00191 - 0.22388 0.06169 0.01588 0.00785 0.00016 0.00007 0.00251 0.00180 - 0.21370 0.05851 0.01478 0.00742 0.00016 0.00007 0.00237 0.00167 - 0.20511 0.05584 0.01389 0.00706 0.00015 0.00008 0.00225 0.00157 - 0.19757 0.05352 0.01315 0.00674 0.00015 0.00008 0.00215 0.00148 - 0.18842 0.05072 0.01227 0.00637 0.00015 0.00008 0.00203 0.00137 - 0.18024 0.04823 0.01152 0.00603 0.00015 0.00009 0.00192 0.00128 - 0.17291 0.04603 0.01087 0.00574 0.00015 0.00009 0.00182 0.00120 - 0.16591 0.04393 0.01027 0.00546 0.00014 0.00009 0.00173 0.00113 - 0.15936 0.04198 0.00972 0.00520 0.00014 0.00009 0.00165 0.00106 - 0.15340 0.04022 0.00923 0.00497 0.00014 0.00009 0.00157 0.00100 - 0.14801 0.03864 0.00880 0.00476 0.00014 0.00009 0.00151 0.00095 - 0.14280 0.03711 0.00839 0.00456 0.00013 0.00009 0.00144 0.00090 - 0.13786 0.03568 0.00801 0.00437 0.00013 0.00009 0.00138 0.00086 - 0.13333 0.03437 0.00766 0.00420 0.00013 0.00009 0.00133 0.00082 - 0.12919 0.03318 0.00735 0.00404 0.00013 0.00009 0.00128 0.00078 - 0.12516 0.03202 0.00706 0.00389 0.00012 0.00009 0.00123 0.00074 - 0.12130 0.03092 0.00678 0.00375 0.00012 0.00009 0.00118 0.00071 - 0.11774 0.02991 0.00652 0.00362 0.00012 0.00009 0.00114 0.00068 - 0.11446 0.02899 0.00629 0.00350 0.00012 0.00008 0.00110 0.00065 - 0.11124 0.02808 0.00607 0.00338 0.00011 0.00008 0.00107 0.00063 - 0.41326 0.12168 0.04549 0.01588 0.00000 0.00000 0.00490 0.00365 - 0.39680 0.11598 0.04122 0.01508 0.00000 0.00000 0.00465 0.00340 - 0.37380 0.10812 0.03594 0.01399 0.00000 0.00000 0.00430 0.00307 - 0.35798 0.10278 0.03262 0.01324 0.00002 0.00000 0.00407 0.00285 - 0.34213 0.09749 0.02959 0.01251 0.00003 0.00000 0.00384 0.00263 - 0.32908 0.09317 0.02732 0.01191 0.00005 0.00000 0.00365 0.00247 - 0.31707 0.08923 0.02539 0.01137 0.00006 0.00000 0.00348 0.00232 - 0.30485 0.08526 0.02357 0.01082 0.00007 0.00000 0.00331 0.00217 - 0.29465 0.08196 0.02215 0.01037 0.00007 0.00000 0.00317 0.00205 - 0.28515 0.07892 0.02090 0.00995 0.00008 0.00000 0.00304 0.00194 - 0.27787 0.07660 0.01999 0.00964 0.00008 0.00000 0.00294 0.00186 - 0.26300 0.07191 0.01823 0.00900 0.00009 0.00000 0.00274 0.00170 - 0.25087 0.06811 0.01683 0.00849 0.00009 0.00001 0.00258 0.00158 - 0.23801 0.06413 0.01545 0.00795 0.00010 0.00002 0.00242 0.00145 - 0.22538 0.06026 0.01418 0.00744 0.00010 0.00003 0.00226 0.00133 - 0.21456 0.05697 0.01315 0.00700 0.00010 0.00004 0.00212 0.00123 - 0.20421 0.05386 0.01222 0.00659 0.00010 0.00004 0.00200 0.00114 - 0.19603 0.05142 0.01152 0.00627 0.00010 0.00005 0.00190 0.00107 - 0.18659 0.04862 0.01074 0.00590 0.00010 0.00005 0.00179 0.00099 - 0.17866 0.04629 0.01011 0.00559 0.00010 0.00005 0.00169 0.00092 - 0.17170 0.04426 0.00957 0.00533 0.00010 0.00006 0.00161 0.00087 - 0.16329 0.04182 0.00894 0.00501 0.00010 0.00006 0.00152 0.00081 - 0.15579 0.03966 0.00840 0.00474 0.00010 0.00006 0.00143 0.00075 - 0.14911 0.03776 0.00793 0.00449 0.00010 0.00006 0.00136 0.00070 - 0.14273 0.03595 0.00749 0.00426 0.00010 0.00006 0.00129 0.00066 - 0.13677 0.03427 0.00708 0.00405 0.00009 0.00006 0.00122 0.00062 - 0.13138 0.03276 0.00673 0.00385 0.00009 0.00006 0.00116 0.00058 - 0.12651 0.03141 0.00641 0.00368 0.00009 0.00006 0.00111 0.00055 - 0.12181 0.03010 0.00611 0.00352 0.00009 0.00006 0.00106 0.00052 - 0.11737 0.02888 0.00583 0.00336 0.00009 0.00006 0.00101 0.00050 - 0.11330 0.02777 0.00557 0.00323 0.00009 0.00006 0.00097 0.00047 - 0.10960 0.02676 0.00534 0.00310 0.00008 0.00006 0.00093 0.00045 - 0.10599 0.02578 0.00513 0.00298 0.00008 0.00006 0.00090 0.00043 - 0.10255 0.02485 0.00492 0.00286 0.00008 0.00006 0.00086 0.00041 - 0.09938 0.02400 0.00473 0.00276 0.00008 0.00006 0.00083 0.00039 - 0.09646 0.02322 0.00456 0.00266 0.00008 0.00006 0.00080 0.00037 - 0.09361 0.02246 0.00439 0.00257 0.00008 0.00006 0.00077 0.00036 - 0.37554 0.10518 0.03056 0.01323 0.00000 0.00000 0.00386 0.00218 - 0.35956 0.09996 0.02783 0.01251 0.00000 0.00000 0.00365 0.00202 - 0.33732 0.09278 0.02447 0.01153 0.00000 0.00000 0.00336 0.00181 - 0.32210 0.08793 0.02234 0.01088 0.00001 0.00000 0.00317 0.00167 - 0.30690 0.08314 0.02039 0.01023 0.00002 0.00000 0.00298 0.00154 - 0.29443 0.07924 0.01893 0.00971 0.00003 0.00000 0.00282 0.00144 - 0.28300 0.07570 0.01768 0.00924 0.00004 0.00000 0.00268 0.00135 - 0.27140 0.07214 0.01649 0.00876 0.00004 0.00000 0.00254 0.00126 - 0.26174 0.06919 0.01556 0.00837 0.00005 0.00000 0.00243 0.00119 - 0.25278 0.06648 0.01474 0.00802 0.00005 0.00000 0.00233 0.00112 - 0.24591 0.06442 0.01413 0.00775 0.00005 0.00000 0.00225 0.00107 - 0.23196 0.06025 0.01296 0.00720 0.00006 0.00000 0.00209 0.00098 - 0.22062 0.05690 0.01201 0.00677 0.00006 0.00001 0.00196 0.00090 - 0.20864 0.05339 0.01107 0.00631 0.00007 0.00001 0.00183 0.00083 - 0.19692 0.05000 0.01019 0.00588 0.00007 0.00002 0.00170 0.00075 - 0.18692 0.04713 0.00948 0.00551 0.00007 0.00003 0.00160 0.00070 - 0.17738 0.04442 0.00883 0.00517 0.00007 0.00003 0.00150 0.00064 - 0.16987 0.04230 0.00834 0.00490 0.00007 0.00003 0.00142 0.00060 - 0.16123 0.03988 0.00778 0.00460 0.00007 0.00003 0.00133 0.00056 - 0.15399 0.03787 0.00733 0.00435 0.00007 0.00004 0.00126 0.00052 - 0.14766 0.03612 0.00694 0.00413 0.00007 0.00004 0.00120 0.00049 - 0.14003 0.03403 0.00649 0.00387 0.00007 0.00004 0.00112 0.00045 - 0.13325 0.03219 0.00609 0.00364 0.00007 0.00004 0.00106 0.00042 - 0.12722 0.03057 0.00575 0.00345 0.00006 0.00004 0.00100 0.00039 - 0.12149 0.02903 0.00543 0.00326 0.00006 0.00004 0.00094 0.00037 - 0.11615 0.02761 0.00513 0.00309 0.00006 0.00004 0.00089 0.00034 - 0.11133 0.02633 0.00487 0.00293 0.00006 0.00004 0.00085 0.00032 - 0.10699 0.02519 0.00464 0.00279 0.00006 0.00004 0.00081 0.00031 - 0.10280 0.02409 0.00442 0.00266 0.00006 0.00004 0.00077 0.00029 - 0.09886 0.02307 0.00421 0.00254 0.00006 0.00004 0.00074 0.00027 - 0.09526 0.02214 0.00402 0.00243 0.00006 0.00004 0.00070 0.00026 - 0.09198 0.02129 0.00386 0.00233 0.00006 0.00004 0.00068 0.00025 - 0.08879 0.02048 0.00369 0.00223 0.00005 0.00004 0.00065 0.00024 - 0.08577 0.01970 0.00354 0.00214 0.00005 0.00004 0.00062 0.00023 - 0.08298 0.01900 0.00340 0.00206 0.00005 0.00004 0.00060 0.00022 - 0.08042 0.01835 0.00328 0.00198 0.00005 0.00004 0.00058 0.00021 - 0.07792 0.01772 0.00315 0.00191 0.00005 0.00004 0.00055 0.00020 - 0.33773 0.08971 0.02011 0.01077 0.00000 0.00000 0.00300 0.00121 - 0.32242 0.08500 0.01847 0.01015 0.00000 0.00000 0.00283 0.00112 - 0.30121 0.07855 0.01643 0.00931 0.00000 0.00000 0.00259 0.00100 - 0.28677 0.07422 0.01513 0.00874 0.00001 0.00000 0.00243 0.00092 - 0.27240 0.06995 0.01393 0.00819 0.00001 0.00000 0.00228 0.00084 - 0.26065 0.06649 0.01301 0.00775 0.00002 0.00000 0.00215 0.00078 - 0.24991 0.06335 0.01223 0.00734 0.00002 0.00000 0.00204 0.00073 - 0.23905 0.06021 0.01147 0.00695 0.00003 0.00000 0.00193 0.00068 - 0.23003 0.05762 0.01088 0.00662 0.00003 0.00000 0.00184 0.00064 - 0.22168 0.05524 0.01035 0.00632 0.00003 0.00000 0.00176 0.00060 - 0.21531 0.05343 0.00995 0.00609 0.00004 0.00000 0.00169 0.00058 - 0.20239 0.04980 0.00918 0.00564 0.00004 0.00000 0.00157 0.00052 - 0.19192 0.04688 0.00854 0.00528 0.00004 0.00000 0.00147 0.00048 - 0.18091 0.04385 0.00790 0.00491 0.00004 0.00001 0.00137 0.00044 - 0.17018 0.04092 0.00730 0.00455 0.00004 0.00001 0.00127 0.00040 - 0.16106 0.03845 0.00681 0.00425 0.00004 0.00002 0.00118 0.00037 - 0.15239 0.03613 0.00635 0.00397 0.00005 0.00002 0.00111 0.00034 - 0.14559 0.03432 0.00600 0.00375 0.00005 0.00002 0.00105 0.00032 - 0.13779 0.03226 0.00561 0.00351 0.00005 0.00002 0.00098 0.00030 - 0.13126 0.03055 0.00528 0.00331 0.00005 0.00002 0.00092 0.00028 - 0.12558 0.02907 0.00501 0.00313 0.00004 0.00003 0.00087 0.00026 - 0.11875 0.02731 0.00468 0.00293 0.00004 0.00003 0.00082 0.00024 - 0.11270 0.02576 0.00439 0.00275 0.00004 0.00003 0.00077 0.00022 - 0.10734 0.02440 0.00414 0.00259 0.00004 0.00003 0.00072 0.00021 - 0.10225 0.02311 0.00391 0.00244 0.00004 0.00003 0.00068 0.00020 - 0.09753 0.02193 0.00369 0.00230 0.00004 0.00003 0.00065 0.00018 - 0.09327 0.02087 0.00350 0.00218 0.00004 0.00003 0.00061 0.00017 - 0.08945 0.01992 0.00333 0.00208 0.00004 0.00003 0.00058 0.00016 - 0.08577 0.01901 0.00317 0.00197 0.00004 0.00003 0.00055 0.00015 - 0.08231 0.01816 0.00302 0.00188 0.00004 0.00003 0.00053 0.00015 - 0.07917 0.01740 0.00288 0.00179 0.00004 0.00003 0.00050 0.00014 - 0.07631 0.01670 0.00276 0.00172 0.00004 0.00003 0.00048 0.00013 - 0.07353 0.01603 0.00264 0.00164 0.00004 0.00003 0.00046 0.00013 - 0.07090 0.01540 0.00253 0.00157 0.00003 0.00003 0.00044 0.00012 - 0.06848 0.01482 0.00242 0.00151 0.00003 0.00003 0.00042 0.00012 - 0.06627 0.01429 0.00233 0.00145 0.00003 0.00003 0.00041 0.00011 - 0.06411 0.01378 0.00224 0.00139 0.00003 0.00002 0.00039 0.00011 - 0.30037 0.07542 0.01297 0.00857 0.00000 0.00000 0.00230 0.00061 - 0.28591 0.07124 0.01205 0.00804 0.00000 0.00000 0.00216 0.00057 - 0.26597 0.06555 0.01091 0.00733 0.00000 0.00000 0.00197 0.00050 - 0.25245 0.06173 0.01015 0.00686 0.00000 0.00000 0.00184 0.00046 - 0.23905 0.05799 0.00944 0.00640 0.00001 0.00000 0.00172 0.00042 - 0.22813 0.05498 0.00890 0.00604 0.00001 0.00000 0.00162 0.00039 - 0.21818 0.05225 0.00842 0.00571 0.00002 0.00000 0.00153 0.00037 - 0.20815 0.04952 0.00795 0.00538 0.00002 0.00000 0.00144 0.00034 - 0.19985 0.04728 0.00758 0.00511 0.00002 0.00000 0.00137 0.00032 - 0.19218 0.04522 0.00724 0.00487 0.00002 0.00000 0.00131 0.00030 - 0.18634 0.04367 0.00698 0.00468 0.00002 0.00000 0.00126 0.00029 - 0.17454 0.04055 0.00648 0.00431 0.00003 0.00000 0.00116 0.00026 - 0.16502 0.03806 0.00606 0.00402 0.00003 0.00000 0.00108 0.00024 - 0.15503 0.03547 0.00562 0.00372 0.00003 0.00001 0.00100 0.00022 - 0.14535 0.03299 0.00521 0.00344 0.00003 0.00001 0.00093 0.00020 - 0.13714 0.03090 0.00486 0.00320 0.00003 0.00001 0.00086 0.00019 - 0.12937 0.02894 0.00454 0.00298 0.00003 0.00001 0.00081 0.00017 - 0.12329 0.02742 0.00429 0.00281 0.00003 0.00001 0.00076 0.00016 - 0.11634 0.02570 0.00401 0.00262 0.00003 0.00002 0.00071 0.00015 - 0.11055 0.02427 0.00378 0.00246 0.00003 0.00002 0.00067 0.00014 - 0.10551 0.02304 0.00358 0.00232 0.00003 0.00002 0.00063 0.00013 - 0.09948 0.02158 0.00335 0.00216 0.00003 0.00002 0.00059 0.00012 - 0.09416 0.02030 0.00314 0.00202 0.00003 0.00002 0.00055 0.00011 - 0.08945 0.01917 0.00296 0.00190 0.00003 0.00002 0.00052 0.00011 - 0.08500 0.01812 0.00279 0.00179 0.00003 0.00002 0.00049 0.00010 - 0.08088 0.01715 0.00263 0.00168 0.00003 0.00002 0.00046 0.00009 - 0.07718 0.01628 0.00249 0.00159 0.00003 0.00002 0.00043 0.00009 - 0.07385 0.01550 0.00237 0.00151 0.00003 0.00002 0.00041 0.00008 - 0.07067 0.01477 0.00225 0.00143 0.00002 0.00002 0.00039 0.00008 - 0.06769 0.01408 0.00214 0.00136 0.00002 0.00002 0.00037 0.00008 - 0.06497 0.01346 0.00204 0.00129 0.00002 0.00002 0.00035 0.00007 - 0.06251 0.01290 0.00195 0.00123 0.00002 0.00002 0.00034 0.00007 - 0.06013 0.01236 0.00186 0.00118 0.00002 0.00002 0.00032 0.00007 - 0.05787 0.01185 0.00178 0.00113 0.00002 0.00002 0.00031 0.00006 - 0.05581 0.01138 0.00171 0.00108 0.00002 0.00002 0.00030 0.00006 - 0.05392 0.01096 0.00164 0.00103 0.00002 0.00002 0.00028 0.00006 - 0.05207 0.01055 0.00158 0.00099 0.00002 0.00002 0.00027 0.00006 - 0.26400 0.06243 0.00818 0.00665 0.00000 0.00000 0.00173 0.00028 - 0.25054 0.05879 0.00774 0.00621 0.00000 0.00000 0.00162 0.00025 - 0.23205 0.05385 0.00715 0.00564 0.00000 0.00000 0.00147 0.00022 - 0.21957 0.05055 0.00675 0.00525 0.00000 0.00000 0.00137 0.00021 - 0.20726 0.04733 0.00636 0.00488 0.00001 0.00000 0.00128 0.00019 - 0.19725 0.04474 0.00605 0.00459 0.00001 0.00000 0.00120 0.00018 - 0.18817 0.04241 0.00577 0.00432 0.00001 0.00000 0.00113 0.00017 - 0.17904 0.04009 0.00549 0.00406 0.00001 0.00000 0.00106 0.00015 - 0.17150 0.03818 0.00526 0.00385 0.00001 0.00000 0.00101 0.00015 - 0.16456 0.03644 0.00504 0.00365 0.00001 0.00000 0.00096 0.00014 - 0.15928 0.03512 0.00488 0.00351 0.00001 0.00000 0.00092 0.00013 - 0.14865 0.03249 0.00455 0.00322 0.00002 0.00000 0.00085 0.00012 - 0.14011 0.03040 0.00427 0.00299 0.00002 0.00000 0.00079 0.00011 - 0.13119 0.02823 0.00397 0.00276 0.00002 0.00000 0.00073 0.00010 - 0.12257 0.02616 0.00369 0.00254 0.00002 0.00001 0.00067 0.00010 - 0.11529 0.02443 0.00345 0.00235 0.00002 0.00001 0.00062 0.00009 - 0.10842 0.02281 0.00322 0.00218 0.00002 0.00001 0.00058 0.00008 - 0.10307 0.02155 0.00305 0.00205 0.00002 0.00001 0.00054 0.00008 - 0.09696 0.02014 0.00285 0.00190 0.00002 0.00001 0.00051 0.00007 - 0.09189 0.01897 0.00268 0.00178 0.00002 0.00001 0.00047 0.00007 - 0.08750 0.01796 0.00254 0.00168 0.00002 0.00001 0.00045 0.00007 - 0.08225 0.01677 0.00237 0.00156 0.00002 0.00001 0.00042 0.00006 - 0.07763 0.01573 0.00222 0.00145 0.00002 0.00001 0.00039 0.00006 - 0.07356 0.01482 0.00209 0.00136 0.00002 0.00001 0.00036 0.00005 - 0.06972 0.01396 0.00197 0.00127 0.00002 0.00001 0.00034 0.00005 - 0.06618 0.01318 0.00185 0.00120 0.00002 0.00001 0.00032 0.00005 - 0.06300 0.01248 0.00175 0.00113 0.00002 0.00001 0.00030 0.00005 - 0.06016 0.01186 0.00166 0.00107 0.00002 0.00001 0.00029 0.00004 - 0.05745 0.01128 0.00158 0.00101 0.00002 0.00001 0.00027 0.00004 - 0.05490 0.01073 0.00150 0.00096 0.00002 0.00001 0.00026 0.00004 - 0.05260 0.01023 0.00143 0.00091 0.00002 0.00001 0.00025 0.00004 - 0.05051 0.00979 0.00136 0.00086 0.00001 0.00001 0.00023 0.00004 - 0.04850 0.00936 0.00130 0.00082 0.00001 0.00001 0.00022 0.00004 - 0.04659 0.00896 0.00124 0.00079 0.00001 0.00001 0.00021 0.00003 - 0.04485 0.00859 0.00119 0.00075 0.00001 0.00001 0.00020 0.00003 - 0.04326 0.00826 0.00114 0.00072 0.00001 0.00001 0.00020 0.00003 - 0.04171 0.00793 0.00109 0.00069 0.00001 0.00001 0.00019 0.00003 - 0.22909 0.05081 0.00505 0.00502 0.00000 0.00000 0.00128 0.00010 - 0.21674 0.04770 0.00488 0.00467 0.00000 0.00000 0.00119 0.00010 - 0.19985 0.04349 0.00464 0.00421 0.00000 0.00000 0.00108 0.00009 - 0.18851 0.04070 0.00445 0.00391 0.00000 0.00000 0.00100 0.00008 - 0.17735 0.03798 0.00426 0.00362 0.00000 0.00000 0.00093 0.00008 - 0.16832 0.03579 0.00409 0.00339 0.00001 0.00000 0.00087 0.00007 - 0.16014 0.03384 0.00393 0.00319 0.00001 0.00000 0.00082 0.00007 - 0.15195 0.03189 0.00376 0.00298 0.00001 0.00000 0.00077 0.00007 - 0.14521 0.03030 0.00362 0.00282 0.00001 0.00000 0.00073 0.00006 - 0.13902 0.02885 0.00349 0.00267 0.00001 0.00000 0.00069 0.00006 - 0.13433 0.02776 0.00339 0.00256 0.00001 0.00000 0.00066 0.00006 - 0.12489 0.02558 0.00317 0.00234 0.00001 0.00000 0.00060 0.00005 - 0.11735 0.02385 0.00298 0.00216 0.00001 0.00000 0.00056 0.00005 - 0.10949 0.02207 0.00278 0.00199 0.00001 0.00000 0.00052 0.00005 - 0.10193 0.02038 0.00259 0.00182 0.00001 0.00000 0.00047 0.00005 - 0.09557 0.01897 0.00242 0.00168 0.00001 0.00000 0.00044 0.00004 - 0.08960 0.01765 0.00226 0.00155 0.00001 0.00001 0.00041 0.00004 - 0.08495 0.01664 0.00214 0.00145 0.00001 0.00001 0.00038 0.00004 - 0.07967 0.01549 0.00200 0.00134 0.00001 0.00001 0.00035 0.00004 - 0.07530 0.01455 0.00188 0.00126 0.00001 0.00001 0.00033 0.00004 - 0.07152 0.01375 0.00178 0.00118 0.00001 0.00001 0.00031 0.00003 - 0.06703 0.01279 0.00165 0.00109 0.00001 0.00001 0.00029 0.00003 - 0.06308 0.01196 0.00155 0.00101 0.00001 0.00001 0.00027 0.00003 - 0.05962 0.01124 0.00145 0.00095 0.00001 0.00001 0.00025 0.00003 - 0.05636 0.01056 0.00137 0.00088 0.00001 0.00001 0.00023 0.00003 - 0.05336 0.00995 0.00129 0.00083 0.00001 0.00001 0.00022 0.00003 - 0.05068 0.00940 0.00121 0.00078 0.00001 0.00001 0.00021 0.00003 - 0.04828 0.00891 0.00115 0.00073 0.00001 0.00001 0.00020 0.00003 - 0.04600 0.00845 0.00109 0.00069 0.00001 0.00001 0.00018 0.00002 - 0.04387 0.00802 0.00103 0.00065 0.00001 0.00001 0.00017 0.00002 - 0.04194 0.00763 0.00098 0.00062 0.00001 0.00001 0.00017 0.00002 - 0.04020 0.00729 0.00093 0.00059 0.00001 0.00001 0.00016 0.00002 - 0.03852 0.00695 0.00089 0.00056 0.00001 0.00001 0.00015 0.00002 - 0.03694 0.00664 0.00085 0.00053 0.00001 0.00001 0.00014 0.00002 - 0.03550 0.00636 0.00081 0.00051 0.00001 0.00001 0.00014 0.00002 - 0.03418 0.00610 0.00078 0.00049 0.00001 0.00001 0.00013 0.00002 - 0.03290 0.00585 0.00074 0.00046 0.00001 0.00001 0.00013 0.00002 - 0.16510 0.03176 0.00181 0.00260 0.00000 0.00000 0.00066 0.00002 - 0.15519 0.02962 0.00187 0.00241 0.00000 0.00000 0.00061 0.00002 - 0.14177 0.02675 0.00191 0.00215 0.00000 0.00000 0.00054 0.00002 - 0.13283 0.02486 0.00191 0.00198 0.00000 0.00000 0.00050 0.00002 - 0.12411 0.02303 0.00188 0.00182 0.00000 0.00000 0.00046 0.00002 - 0.11710 0.02158 0.00184 0.00169 0.00000 0.00000 0.00043 0.00002 - 0.11080 0.02028 0.00179 0.00158 0.00000 0.00000 0.00040 0.00002 - 0.10452 0.01900 0.00174 0.00147 0.00000 0.00000 0.00037 0.00002 - 0.09939 0.01796 0.00169 0.00138 0.00000 0.00000 0.00035 0.00002 - 0.09470 0.01702 0.00163 0.00130 0.00000 0.00000 0.00033 0.00002 - 0.09117 0.01631 0.00159 0.00124 0.00000 0.00000 0.00032 0.00002 - 0.08410 0.01491 0.00150 0.00112 0.00000 0.00000 0.00029 0.00002 - 0.07850 0.01381 0.00141 0.00103 0.00000 0.00000 0.00027 0.00002 - 0.07271 0.01268 0.00132 0.00094 0.00000 0.00000 0.00024 0.00002 - 0.06718 0.01162 0.00122 0.00085 0.00000 0.00000 0.00022 0.00002 - 0.06257 0.01074 0.00114 0.00078 0.00000 0.00000 0.00020 0.00002 - 0.05827 0.00993 0.00107 0.00072 0.00000 0.00000 0.00019 0.00002 - 0.05494 0.00930 0.00101 0.00067 0.00000 0.00000 0.00017 0.00002 - 0.05119 0.00861 0.00094 0.00061 0.00000 0.00000 0.00016 0.00002 - 0.04811 0.00804 0.00088 0.00057 0.00000 0.00000 0.00015 0.00002 - 0.04546 0.00755 0.00083 0.00053 0.00000 0.00000 0.00014 0.00002 - 0.04233 0.00698 0.00077 0.00049 0.00000 0.00000 0.00013 0.00002 - 0.03960 0.00649 0.00071 0.00045 0.00000 0.00000 0.00012 0.00002 - 0.03721 0.00606 0.00067 0.00042 0.00000 0.00000 0.00011 0.00002 - 0.03498 0.00566 0.00062 0.00039 0.00000 0.00000 0.00010 0.00002 - 0.03294 0.00530 0.00059 0.00036 0.00000 0.00000 0.00010 0.00002 - 0.03113 0.00499 0.00055 0.00034 0.00000 0.00000 0.00009 0.00001 - 0.02952 0.00470 0.00052 0.00032 0.00000 0.00000 0.00008 0.00001 - 0.02800 0.00444 0.00049 0.00030 0.00000 0.00000 0.00008 0.00001 - 0.02658 0.00419 0.00046 0.00028 0.00000 0.00000 0.00007 0.00001 - 0.02530 0.00397 0.00044 0.00026 0.00000 0.00000 0.00007 0.00001 - 0.02415 0.00378 0.00042 0.00025 0.00000 0.00000 0.00007 0.00001 - 0.02305 0.00359 0.00039 0.00024 0.00000 0.00000 0.00006 0.00001 - 0.02202 0.00342 0.00038 0.00022 0.00000 0.00000 0.00006 0.00001 - 0.02108 0.00326 0.00036 0.00021 0.00000 0.00000 0.00006 0.00001 - 0.02022 0.00311 0.00034 0.00020 0.00000 0.00000 0.00005 0.00001 - 0.01940 0.00298 0.00033 0.00019 0.00000 0.00000 0.00005 0.00001 - 0.11086 0.01806 0.00060 0.00117 0.00000 0.00000 0.00030 0.00004 - 0.10348 0.01672 0.00069 0.00107 0.00000 0.00000 0.00028 0.00004 - 0.09357 0.01495 0.00077 0.00095 0.00000 0.00000 0.00025 0.00003 - 0.08704 0.01379 0.00079 0.00086 0.00000 0.00000 0.00022 0.00003 - 0.08072 0.01268 0.00080 0.00079 0.00000 0.00000 0.00021 0.00003 - 0.07568 0.01180 0.00079 0.00073 0.00000 0.00000 0.00019 0.00003 - 0.07117 0.01102 0.00078 0.00067 0.00000 0.00000 0.00018 0.00003 - 0.06672 0.01026 0.00076 0.00062 0.00000 0.00000 0.00016 0.00003 - 0.06310 0.00964 0.00074 0.00058 0.00000 0.00000 0.00015 0.00003 - 0.05981 0.00909 0.00072 0.00054 0.00000 0.00000 0.00014 0.00003 - 0.05734 0.00868 0.00070 0.00052 0.00000 0.00000 0.00014 0.00003 - 0.05245 0.00786 0.00066 0.00046 0.00000 0.00000 0.00012 0.00002 - 0.04860 0.00723 0.00062 0.00042 0.00000 0.00000 0.00011 0.00002 - 0.04466 0.00658 0.00058 0.00038 0.00000 0.00000 0.00010 0.00002 - 0.04093 0.00598 0.00053 0.00034 0.00000 0.00000 0.00009 0.00002 - 0.03784 0.00549 0.00050 0.00031 0.00000 0.00000 0.00008 0.00002 - 0.03498 0.00503 0.00046 0.00028 0.00000 0.00000 0.00008 0.00002 - 0.03279 0.00469 0.00043 0.00026 0.00000 0.00000 0.00007 0.00002 - 0.03033 0.00431 0.00040 0.00024 0.00000 0.00000 0.00006 0.00002 - 0.02833 0.00400 0.00037 0.00022 0.00000 0.00000 0.00006 0.00002 - 0.02662 0.00373 0.00035 0.00020 0.00000 0.00000 0.00006 0.00001 - 0.02461 0.00343 0.00032 0.00019 0.00000 0.00000 0.00005 0.00001 - 0.02287 0.00316 0.00030 0.00017 0.00000 0.00000 0.00005 0.00001 - 0.02136 0.00294 0.00028 0.00016 0.00000 0.00000 0.00004 0.00001 - 0.01996 0.00273 0.00026 0.00015 0.00000 0.00000 0.00004 0.00001 - 0.01869 0.00254 0.00024 0.00013 0.00000 0.00000 0.00004 0.00001 - 0.01756 0.00237 0.00022 0.00012 0.00000 0.00000 0.00003 0.00001 - 0.01657 0.00223 0.00021 0.00012 0.00000 0.00000 0.00003 0.00001 - 0.01563 0.00209 0.00020 0.00011 0.00000 0.00000 0.00003 0.00001 - 0.01477 0.00197 0.00019 0.00010 0.00000 0.00000 0.00003 0.00001 - 0.01399 0.00185 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 - 0.01330 0.00175 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 - 0.01264 0.00166 0.00016 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01202 0.00157 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01146 0.00149 0.00014 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01095 0.00142 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 - 0.01046 0.00135 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 - 0.06781 0.00906 0.00019 0.00043 0.00000 0.00000 0.00012 0.00004 - 0.06280 0.00832 0.00024 0.00040 0.00000 0.00000 0.00011 0.00004 - 0.05614 0.00735 0.00029 0.00034 0.00000 0.00000 0.00010 0.00004 - 0.05180 0.00672 0.00031 0.00031 0.00000 0.00000 0.00009 0.00003 - 0.04763 0.00613 0.00031 0.00028 0.00000 0.00000 0.00008 0.00003 - 0.04434 0.00566 0.00031 0.00026 0.00000 0.00000 0.00007 0.00003 - 0.04142 0.00525 0.00031 0.00024 0.00000 0.00000 0.00007 0.00003 - 0.03856 0.00486 0.00030 0.00022 0.00000 0.00000 0.00006 0.00002 - 0.03624 0.00454 0.00029 0.00020 0.00000 0.00000 0.00006 0.00002 - 0.03416 0.00425 0.00028 0.00019 0.00000 0.00000 0.00005 0.00002 - 0.03260 0.00404 0.00027 0.00018 0.00000 0.00000 0.00005 0.00002 - 0.02953 0.00362 0.00025 0.00016 0.00000 0.00000 0.00004 0.00002 - 0.02714 0.00330 0.00024 0.00014 0.00000 0.00000 0.00004 0.00002 - 0.02472 0.00298 0.00022 0.00013 0.00000 0.00000 0.00004 0.00002 - 0.02245 0.00268 0.00020 0.00011 0.00000 0.00000 0.00003 0.00002 - 0.02058 0.00244 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 - 0.01887 0.00222 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 - 0.01757 0.00206 0.00016 0.00009 0.00000 0.00000 0.00002 0.00001 - 0.01613 0.00187 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 - 0.01495 0.00172 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 - 0.01396 0.00160 0.00013 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01280 0.00146 0.00012 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01181 0.00134 0.00011 0.00005 0.00000 0.00000 0.00002 0.00001 - 0.01096 0.00123 0.00010 0.00005 0.00000 0.00000 0.00001 0.00001 - 0.01017 0.00114 0.00009 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00946 0.00105 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00883 0.00098 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00829 0.00091 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.00777 0.00085 0.00007 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.00730 0.00079 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00688 0.00074 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00651 0.00070 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00615 0.00066 0.00005 0.00003 0.00000 0.00000 0.00001 0.00000 - 0.00582 0.00062 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00553 0.00059 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00526 0.00056 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00500 0.00053 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.03634 0.00380 0.00005 0.00013 0.00000 0.00000 0.00004 0.00003 - 0.03335 0.00346 0.00007 0.00011 0.00000 0.00000 0.00003 0.00002 - 0.02942 0.00301 0.00008 0.00010 0.00000 0.00000 0.00003 0.00002 - 0.02689 0.00273 0.00008 0.00009 0.00000 0.00000 0.00003 0.00002 - 0.02449 0.00246 0.00008 0.00008 0.00000 0.00000 0.00002 0.00002 - 0.02261 0.00226 0.00008 0.00007 0.00000 0.00000 0.00002 0.00002 - 0.02095 0.00208 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01934 0.00191 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 - 0.01806 0.00177 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 - 0.01690 0.00164 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 - 0.01605 0.00155 0.00007 0.00005 0.00000 0.00000 0.00001 0.00001 - 0.01437 0.00138 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.01309 0.00125 0.00006 0.00004 0.00000 0.00000 0.00001 0.00001 - 0.01179 0.00111 0.00006 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.01060 0.00099 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.00962 0.00089 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 - 0.00874 0.00080 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 - 0.00807 0.00074 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 - 0.00734 0.00067 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00675 0.00061 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 - 0.00626 0.00056 0.00003 0.00002 0.00000 0.00000 0.00000 0.00000 - 0.00569 0.00051 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00520 0.00046 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00478 0.00042 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00441 0.00038 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00407 0.00035 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00377 0.00033 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00351 0.00030 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00327 0.00028 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00305 0.00026 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00286 0.00024 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00269 0.00023 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00253 0.00021 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00238 0.00020 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00225 0.00019 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00213 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00201 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00478 0.00023 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00427 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00363 0.00017 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00323 0.00015 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00286 0.00013 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00257 0.00012 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00233 0.00011 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00210 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00192 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00177 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00165 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00143 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00127 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00111 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00097 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00085 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00075 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00068 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00060 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00054 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00049 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00043 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00039 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00035 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00031 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00028 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00026 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00023 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00021 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00020 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00015 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00014 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00013 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00012 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00011 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -'End:' +'Version' '5.4' +'Description:' +'MRST fit: arXiv:0711.2473v2 - LOmod' +'Parton Distributions for LO Generators' +'A. Sherstnev and R. Thorne.' +'This set has 1 member PDFs.' +'Alphas:' +'Variable','nlo','EvolCode' +1,91.71,1.43,4.30,180.0 +'MinMax:' +1,1 +1.E-05,1.,1.25,10000000. +'QCDparams:' +1,1 +0.345,0.241 +'Parameterlist:' +'list',1,1 + 0.1204 + 0.1204 +'Evolution:' +'lo',1.0,1.0 +'MRSTgrid' +1,0 + 0.02366 0.01081 9.07020 0.83158 0.00000 0.00000 0.43256 0.83158 + 0.02383 0.01095 12.48341 0.86348 0.00000 0.00000 0.46703 0.86348 + 0.02408 0.01115 18.65619 0.93210 0.00000 0.00000 0.53938 0.93210 + 0.02426 0.01129 23.97873 1.00041 0.06542 0.00000 0.61032 1.00041 + 0.02445 0.01145 30.42459 1.09094 0.16238 0.00000 0.70356 1.09094 + 0.02461 0.01158 36.72531 1.18593 0.26281 0.00000 0.80084 1.18593 + 0.02476 0.01170 43.44030 1.29302 0.37502 0.00000 0.91008 1.29302 + 0.02492 0.01184 51.31299 1.42510 0.51245 0.00000 1.04442 1.42510 + 0.02506 0.01195 58.79745 1.55632 0.64823 0.00000 1.17756 1.55632 + 0.02520 0.01207 66.60634 1.69841 0.79467 0.00000 1.32148 1.69841 + 0.02531 0.01216 73.20739 1.82222 0.92187 0.00000 1.44672 1.82222 + 0.02553 0.01234 88.53299 2.12126 1.22802 0.00172 1.74875 2.12126 + 0.02573 0.01251 102.75306 2.41926 1.53204 0.30236 2.04929 2.41927 + 0.02595 0.01269 120.16188 2.79906 1.91842 0.70038 2.43186 2.79906 + 0.02617 0.01288 139.97977 3.24856 2.37463 1.16843 2.88419 3.24857 + 0.02638 0.01305 159.48859 3.70700 2.83902 1.64333 3.34513 3.70700 + 0.02658 0.01323 180.66284 4.22072 3.35864 2.17334 3.86133 4.22073 + 0.02675 0.01337 199.37390 4.68746 3.83018 2.65335 4.33009 4.68747 + 0.02696 0.01355 223.45438 5.30441 4.45286 3.28610 4.94945 5.30442 + 0.02714 0.01371 246.03366 5.89830 5.05172 3.89372 5.54543 5.89830 + 0.02731 0.01385 267.79172 6.48372 5.64164 4.49154 6.13274 6.48373 + 0.02752 0.01403 296.84021 7.28408 6.44759 5.30734 6.93545 7.28408 + 0.02772 0.01420 325.62436 8.09696 7.26566 6.13449 7.75051 8.09696 + 0.02791 0.01436 353.88416 8.91304 8.08652 6.96373 8.56861 8.91305 + 0.02810 0.01452 383.36743 9.78234 8.96051 7.84596 9.43988 9.78235 + 0.02828 0.01468 413.42319 10.68644 9.86915 8.76253 10.34589 10.68645 + 0.02845 0.01483 442.94604 11.59115 10.77809 9.67888 11.25238 11.59117 + 0.02862 0.01497 471.72626 12.48836 11.67923 10.58689 12.15123 12.48837 + 0.02878 0.01511 501.56931 13.43383 12.62861 11.54310 13.09835 13.43385 + 0.02894 0.01525 531.82843 14.40778 13.60635 12.52746 14.07388 14.40779 + 0.02910 0.01539 561.41571 15.37430 14.57644 13.50378 15.04191 15.37432 + 0.02924 0.01551 590.14099 16.32567 15.53114 14.46430 15.99468 16.32568 + 0.02939 0.01564 619.84021 17.32247 16.53127 15.47024 16.99288 17.32248 + 0.02954 0.01577 649.84717 18.34259 17.55465 16.49930 18.01437 18.34261 + 0.02968 0.01589 679.12280 19.35028 18.56542 17.51542 19.02335 19.35030 + 0.02981 0.01600 707.48151 20.33768 19.55571 18.51075 20.01197 20.33770 + 0.02994 0.01612 736.73621 21.36765 20.58858 19.54867 21.04315 21.36767 + 0.02700 0.01348 7.96348 0.71306 0.00000 0.00000 0.37131 0.71306 + 0.02720 0.01365 10.86776 0.74096 0.00000 0.00000 0.40142 0.74096 + 0.02749 0.01390 16.03893 0.80013 0.00000 0.00000 0.46377 0.80013 + 0.02771 0.01408 20.43001 0.85827 0.05570 0.00000 0.52417 0.85828 + 0.02793 0.01427 25.68217 0.93452 0.13748 0.00000 0.60274 0.93453 + 0.02812 0.01444 30.75863 1.01376 0.22139 0.00000 0.68394 1.01376 + 0.02831 0.01460 36.11567 1.10233 0.31437 0.00000 0.77436 1.10234 + 0.02850 0.01476 42.33580 1.21067 0.42730 0.00000 0.88463 1.21068 + 0.02867 0.01491 48.19603 1.31747 0.53802 0.00000 0.99307 1.31747 + 0.02883 0.01505 54.26094 1.43230 0.65659 0.00000 1.10947 1.43231 + 0.02896 0.01516 59.35228 1.53176 0.75896 0.00000 1.21016 1.53177 + 0.02924 0.01540 71.06065 1.77002 1.00334 0.00137 1.45098 1.77003 + 0.02947 0.01560 81.78095 2.00507 1.24354 0.23937 1.68819 2.00508 + 0.02974 0.01583 94.75594 2.30171 1.54584 0.55146 1.98721 2.30172 + 0.03001 0.01607 109.35155 2.64921 1.89910 0.91466 2.33712 2.64922 + 0.03026 0.01629 123.55772 3.00016 2.25517 1.27957 2.69022 3.00018 + 0.03052 0.01650 138.81337 3.38985 2.64991 1.68304 3.08203 3.38987 + 0.03072 0.01668 152.16571 3.74098 3.00517 2.04541 3.43489 3.74100 + 0.03098 0.01690 169.18658 4.20131 3.47042 2.51912 3.89728 4.20134 + 0.03120 0.01710 184.99269 4.64076 3.91414 2.97019 4.33852 4.64079 + 0.03141 0.01728 200.09329 5.07076 4.34799 3.41067 4.77013 5.07078 + 0.03167 0.01750 220.06784 5.65396 4.93600 4.00695 5.35535 5.65399 + 0.03192 0.01772 239.66544 6.24129 5.52778 4.60635 5.94454 6.24132 + 0.03215 0.01792 258.72931 6.82631 6.11690 5.20250 6.53128 6.82635 + 0.03239 0.01812 278.44409 7.44481 6.73943 5.83194 7.15146 7.44485 + 0.03261 0.01831 298.36728 8.08333 7.38184 6.48100 7.79161 8.08337 + 0.03283 0.01850 317.77621 8.71782 8.01995 7.12532 8.42762 8.71786 + 0.03303 0.01868 336.54990 9.34290 8.64841 7.75955 9.05411 9.34294 + 0.03324 0.01885 355.87140 9.99745 9.30631 8.42317 9.71007 9.99751 + 0.03344 0.01903 375.31610 10.66748 9.97959 9.10200 10.38146 10.66753 + 0.03364 0.01919 394.19354 11.32841 10.64358 9.77122 11.04368 11.32847 + 0.03382 0.01935 412.39755 11.97531 11.29334 10.42585 11.69177 11.97537 + 0.03401 0.01951 431.09399 12.64933 11.97022 11.10760 12.36699 12.64939 + 0.03419 0.01967 449.86148 13.33539 12.65907 11.80120 13.05421 13.33545 + 0.03437 0.01982 468.05460 14.00947 13.33579 12.48241 13.72940 14.00954 + 0.03454 0.01996 485.57220 14.66669 13.99549 13.14633 14.38766 14.66676 + 0.03471 0.02010 503.53693 15.34889 14.68017 13.83524 15.07090 15.34897 + 0.03069 0.01656 6.99648 0.61443 0.00000 0.00000 0.32026 0.61443 + 0.03092 0.01677 9.46487 0.63885 0.00000 0.00000 0.34657 0.63885 + 0.03126 0.01708 13.79128 0.68989 0.00000 0.00000 0.40035 0.68990 + 0.03151 0.01730 17.40904 0.73940 0.04744 0.00000 0.45179 0.73941 + 0.03177 0.01754 21.68345 0.80364 0.11643 0.00000 0.51802 0.80365 + 0.03200 0.01774 25.76971 0.86976 0.18657 0.00000 0.58582 0.86977 + 0.03222 0.01794 30.04086 0.94305 0.26365 0.00000 0.66070 0.94306 + 0.03244 0.01814 34.95436 1.03198 0.35652 0.00000 0.75127 1.03199 + 0.03264 0.01832 39.54406 1.11898 0.44690 0.00000 0.83968 1.11899 + 0.03284 0.01849 44.25797 1.21190 0.54303 0.00000 0.93395 1.21192 + 0.03299 0.01863 48.18958 1.29193 0.62556 0.00000 1.01502 1.29194 + 0.03331 0.01892 57.15152 1.48213 0.82101 0.00109 1.20742 1.48215 + 0.03359 0.01917 65.25593 1.66800 1.01131 0.19002 1.39514 1.66802 + 0.03391 0.01945 74.96340 1.90046 1.24863 0.43556 1.62963 1.90048 + 0.03424 0.01974 85.76724 2.17022 1.52334 0.71863 1.90146 2.17025 + 0.03454 0.02001 96.17752 2.44026 1.79777 1.00048 2.17333 2.44029 + 0.03484 0.02028 107.25268 2.73763 2.09948 1.30952 2.47252 2.73766 + 0.03509 0.02050 116.86543 3.00361 2.36901 1.58502 2.73998 3.00365 + 0.03539 0.02077 129.01874 3.34979 2.71941 1.94252 3.08793 3.34983 + 0.03567 0.02101 140.21144 3.67786 3.05115 2.28043 3.41753 3.67791 + 0.03591 0.02123 150.82655 3.99682 3.37341 2.60826 3.73787 3.99687 + 0.03623 0.02150 164.75859 4.42647 3.80719 3.04898 4.16925 4.42652 + 0.03653 0.02176 178.31473 4.85603 4.24057 3.48875 4.60040 4.85609 + 0.03681 0.02201 191.40092 5.28105 4.66910 3.92318 5.02689 5.28111 + 0.03710 0.02226 204.83585 5.72756 5.11907 4.37894 5.47485 5.72763 + 0.03738 0.02250 218.31612 6.18567 5.58052 4.84598 5.93436 6.18575 + 0.03764 0.02272 231.36015 6.63825 6.03621 5.30687 6.38823 6.63833 + 0.03789 0.02294 243.89775 7.08170 6.48255 5.75805 6.83289 7.08178 + 0.03814 0.02316 256.72339 7.54365 6.94738 6.22766 7.29604 7.54374 + 0.03839 0.02337 269.55334 8.01408 7.42060 6.70554 7.76764 8.01418 + 0.03863 0.02357 281.93805 8.47588 7.88502 7.17433 8.23053 8.47598 + 0.03886 0.02376 293.81683 8.92579 8.33739 7.63079 8.68147 8.92590 + 0.03909 0.02396 305.95276 9.39249 8.80654 8.10401 9.14919 9.39260 + 0.03932 0.02415 318.07233 9.86545 9.28189 8.58335 9.62315 9.86556 + 0.03953 0.02433 329.76175 10.32818 9.74689 9.05210 10.08683 10.32831 + 0.03974 0.02451 340.96423 10.77755 10.19838 9.50713 10.53709 10.77768 + 0.03995 0.02468 352.39966 11.24220 10.66516 9.97746 11.00263 11.24233 + 0.03312 0.01871 6.48074 0.56323 0.00000 0.00000 0.29374 0.56323 + 0.03338 0.01895 8.71949 0.58580 0.00000 0.00000 0.31805 0.58581 + 0.03376 0.01930 12.60485 0.63256 0.00000 0.00000 0.36730 0.63257 + 0.03404 0.01955 15.82258 0.67755 0.04310 0.00000 0.41404 0.67756 + 0.03433 0.01981 19.59520 0.73552 0.10543 0.00000 0.47383 0.73553 + 0.03458 0.02004 23.17697 0.79484 0.16841 0.00000 0.53468 0.79485 + 0.03482 0.02026 26.89844 0.86025 0.23729 0.00000 0.60154 0.86026 + 0.03508 0.02049 31.15475 0.93921 0.31985 0.00000 0.68200 0.93923 + 0.03530 0.02070 35.10921 1.01610 0.39982 0.00000 0.76018 1.01612 + 0.03552 0.02089 39.15126 1.09788 0.48453 0.00000 0.84318 1.09790 + 0.03569 0.02104 42.50878 1.16805 0.55700 0.00000 0.91432 1.16808 + 0.03606 0.02137 50.11974 1.33404 0.72779 0.00095 1.08231 1.33407 + 0.03637 0.02166 56.94827 1.49530 0.89310 0.16527 1.24526 1.49534 + 0.03673 0.02197 65.07397 1.69584 1.09808 0.37767 1.44765 1.69588 + 0.03710 0.02230 74.05653 1.92721 1.33396 0.62108 1.68090 1.92725 + 0.03744 0.02260 82.65697 2.15753 1.56829 0.86209 1.91290 2.15758 + 0.03778 0.02290 91.75272 2.40987 1.82460 1.12500 2.16690 2.40993 + 0.03807 0.02315 99.60578 2.63454 2.05251 1.35829 2.39292 2.63460 + 0.03841 0.02346 109.48273 2.92564 2.34746 1.65963 2.68562 2.92570 + 0.03872 0.02373 118.53139 3.20026 2.62542 1.94316 2.96164 3.20033 + 0.03901 0.02397 127.07339 3.46618 2.89437 2.21712 3.22883 3.46626 + 0.03937 0.02429 138.22931 3.82287 3.25483 2.58382 3.58709 3.82296 + 0.03971 0.02458 149.02731 4.17788 3.61333 2.94807 3.94356 4.17798 + 0.04004 0.02486 159.40056 4.52769 3.96634 3.30639 4.29470 4.52779 + 0.04036 0.02513 170.00134 4.89374 4.33555 3.68081 4.66207 4.89384 + 0.04068 0.02540 180.58994 5.26786 4.71272 4.06300 5.03746 5.26797 + 0.04098 0.02566 190.79234 5.63612 5.08383 4.43879 5.40692 5.63625 + 0.04127 0.02590 200.55952 5.99574 5.44609 4.80541 5.76764 5.99588 + 0.04156 0.02615 210.51302 6.36917 5.82213 5.18576 6.14216 6.36930 + 0.04185 0.02639 220.43213 6.74823 6.20375 5.57157 6.52229 6.74838 + 0.04213 0.02662 229.97256 7.11922 6.57713 5.94888 6.89428 7.11937 + 0.04239 0.02683 239.09229 7.47964 6.93979 6.31522 7.25563 7.47980 + 0.04265 0.02705 248.37852 7.85247 7.31486 6.69395 7.62940 7.85264 + 0.04291 0.02727 257.62228 8.22929 7.69387 7.07654 8.00713 8.22947 + 0.04317 0.02747 266.50970 8.59700 8.06364 7.44970 8.37570 8.59719 + 0.04341 0.02767 275.00174 8.95322 8.42180 7.81103 8.73273 8.95341 + 0.04365 0.02787 283.64520 9.32067 8.79120 8.18361 9.10099 9.32086 + 0.03498 0.02041 6.13536 0.52948 0.00000 0.00000 0.27625 0.52948 + 0.03526 0.02067 8.22148 0.55082 0.00000 0.00000 0.29922 0.55083 + 0.03568 0.02105 11.81531 0.59473 0.00000 0.00000 0.34546 0.59474 + 0.03598 0.02132 14.77010 0.63672 0.04023 0.00000 0.38910 0.63673 + 0.03630 0.02161 18.21447 0.69056 0.09814 0.00000 0.44464 0.69057 + 0.03657 0.02186 21.46766 0.74539 0.15642 0.00000 0.50091 0.74541 + 0.03683 0.02210 24.83249 0.80563 0.21990 0.00000 0.56250 0.80565 + 0.03711 0.02235 28.66401 0.87806 0.29572 0.00000 0.63634 0.87809 + 0.03736 0.02257 32.20930 0.94835 0.36890 0.00000 0.70784 0.94838 + 0.03759 0.02279 35.81995 1.02288 0.44617 0.00000 0.78351 1.02292 + 0.03778 0.02295 38.80980 1.08666 0.51210 0.00000 0.84819 1.08670 + 0.03818 0.02331 45.55868 1.23698 0.66691 0.00086 1.00038 1.23702 + 0.03853 0.02362 51.57695 1.38236 0.81609 0.14930 1.14734 1.38241 + 0.03892 0.02396 58.70229 1.56239 1.00028 0.34036 1.32911 1.56245 + 0.03933 0.02432 66.53792 1.76917 1.21129 0.55836 1.53766 1.76924 + 0.03970 0.02465 74.00317 1.97416 1.42004 0.77330 1.74422 1.97423 + 0.04008 0.02498 81.86190 2.19787 1.64746 1.00685 1.96947 2.19795 + 0.04040 0.02525 88.61882 2.39635 1.84898 1.21335 2.16922 2.39644 + 0.04078 0.02558 97.08227 2.65263 2.10886 1.47917 2.42700 2.65272 + 0.04113 0.02587 104.80379 2.89356 2.35293 1.72838 2.66924 2.89366 + 0.04144 0.02614 112.06613 3.12614 2.58835 1.96844 2.90301 3.12625 + 0.04184 0.02648 121.51340 3.43708 2.90282 2.28871 3.21542 3.43720 + 0.04222 0.02681 130.61909 3.74548 3.21449 2.60571 3.52519 3.74561 + 0.04258 0.02711 139.33240 4.04838 3.52039 2.91652 3.82934 4.04852 + 0.04294 0.02741 148.20369 4.36437 3.83934 3.24031 4.14656 4.36452 + 0.04330 0.02770 157.03224 4.68636 4.16419 3.56981 4.46975 4.68652 + 0.04363 0.02798 165.50919 5.00242 4.48290 3.89286 4.78691 5.00258 + 0.04395 0.02824 173.59793 5.31023 4.79319 4.20718 5.09576 5.31041 + 0.04428 0.02851 181.81505 5.62904 5.11447 4.53245 5.41560 5.62923 + 0.04460 0.02877 189.97807 5.95187 5.43968 4.86154 5.73942 5.95206 + 0.04490 0.02902 197.80595 6.26705 5.75710 5.18261 6.05554 6.26725 + 0.04519 0.02925 205.26749 6.57256 6.06472 5.49363 6.36193 6.57278 + 0.04549 0.02949 212.84416 6.88790 6.38215 5.81446 6.67815 6.88813 + 0.04578 0.02972 220.36563 7.20593 6.70223 6.13786 6.99703 7.20616 + 0.04606 0.02995 227.57787 7.51562 7.01386 6.45261 7.30753 7.51586 + 0.04633 0.03016 234.45189 7.81503 7.31509 6.75679 7.60771 7.81529 + 0.04660 0.03038 241.43127 8.12330 7.62519 7.06983 7.91674 8.12357 + 0.03648 0.02180 5.88041 0.50498 0.00000 0.00000 0.26355 0.50498 + 0.03678 0.02208 7.85486 0.52542 0.00000 0.00000 0.28554 0.52543 + 0.03722 0.02248 11.23652 0.56724 0.00000 0.00000 0.32957 0.56725 + 0.03754 0.02278 14.00105 0.60703 0.03813 0.00000 0.37093 0.60705 + 0.03788 0.02309 17.20911 0.65786 0.09283 0.00000 0.42338 0.65788 + 0.03817 0.02335 20.22689 0.70945 0.14769 0.00000 0.47633 0.70947 + 0.03845 0.02361 23.33732 0.76594 0.20727 0.00000 0.53411 0.76597 + 0.03875 0.02388 26.86715 0.83368 0.27822 0.00000 0.60319 0.83371 + 0.03901 0.02411 30.12302 0.89923 0.34652 0.00000 0.66988 0.89927 + 0.03926 0.02434 33.42966 0.96857 0.41847 0.00000 0.74031 0.96861 + 0.03946 0.02452 36.16127 1.02779 0.47973 0.00000 0.80038 1.02783 + 0.03989 0.02490 42.30732 1.16695 0.62317 0.00080 0.94132 1.16700 + 0.04027 0.02523 47.76242 1.30109 0.76091 0.13797 1.07697 1.30115 + 0.04069 0.02560 54.19625 1.46666 0.93044 0.31398 1.24419 1.46673 + 0.04113 0.02598 61.24351 1.65619 1.12399 0.51412 1.43539 1.65627 + 0.04153 0.02633 67.93269 1.84348 1.31486 0.71082 1.62418 1.84357 + 0.04193 0.02668 74.94997 2.04727 1.52218 0.92392 1.82944 2.04737 + 0.04227 0.02697 80.96469 2.22760 1.70540 1.11184 2.01098 2.22771 + 0.04269 0.02732 88.47541 2.45984 1.94107 1.35310 2.24464 2.45995 + 0.04306 0.02764 95.30652 2.67760 2.16181 1.57870 2.46365 2.67772 + 0.04340 0.02792 101.71379 2.88733 2.37423 1.79550 2.67451 2.88747 + 0.04383 0.02829 110.02437 3.16704 2.65730 2.08402 2.95561 3.16719 + 0.04424 0.02863 118.00949 3.44374 2.93710 2.36885 3.23361 3.44389 + 0.04463 0.02895 125.62845 3.71485 3.21107 2.64745 3.50591 3.71501 + 0.04502 0.02927 133.36423 3.99704 3.49607 2.93701 3.78927 3.99721 + 0.04540 0.02958 141.04193 4.28394 3.78569 3.23101 4.07731 4.28413 + 0.04577 0.02988 148.39502 4.56497 4.06925 3.51866 4.35940 4.56518 + 0.04612 0.03016 155.39447 4.83814 4.34477 3.79798 4.63355 4.83835 + 0.04647 0.03044 162.48862 5.12054 4.62951 4.08649 4.91693 5.12077 + 0.04681 0.03072 169.51987 5.40596 4.91720 4.37783 5.20329 5.40620 + 0.04715 0.03099 176.24768 5.68414 5.19752 4.66158 5.48236 5.68439 + 0.04746 0.03124 182.64737 5.95334 5.46872 4.93599 5.75240 5.95360 + 0.04778 0.03149 189.13263 6.23075 5.74812 5.21859 6.03065 6.23102 + 0.04810 0.03174 195.55785 6.51009 6.02941 5.50301 6.31080 6.51038 + 0.04840 0.03198 201.70689 6.78169 6.30285 5.77939 6.58317 6.78198 + 0.04869 0.03220 207.55687 7.04391 6.56680 6.04611 6.84611 7.04421 + 0.04899 0.03243 213.48586 7.31350 6.83812 6.32022 7.11642 7.31381 + 0.04163 0.02675 5.15040 0.43649 0.00000 0.00000 0.22804 0.43650 + 0.04200 0.02709 6.80841 0.45436 0.00000 0.00000 0.24723 0.45438 + 0.04255 0.02759 9.59410 0.49027 0.00000 0.00000 0.28502 0.49029 + 0.04295 0.02795 11.82906 0.52388 0.03221 0.00000 0.31997 0.52391 + 0.04337 0.02832 14.38445 0.56626 0.07790 0.00000 0.36373 0.56630 + 0.04374 0.02865 16.75673 0.60879 0.12322 0.00000 0.40742 0.60883 + 0.04409 0.02896 19.17403 0.65489 0.17195 0.00000 0.45462 0.65495 + 0.04447 0.02929 21.88703 0.70964 0.22945 0.00000 0.51051 0.70971 + 0.04480 0.02958 24.36397 0.76216 0.28431 0.00000 0.56401 0.76223 + 0.04512 0.02986 26.85673 0.81727 0.34165 0.00000 0.62005 0.81735 + 0.04537 0.03008 28.90009 0.86403 0.39014 0.00000 0.66753 0.86411 + 0.04592 0.03054 33.44957 0.97291 0.50267 0.00062 0.77793 0.97301 + 0.04639 0.03095 37.42582 1.07671 0.60955 0.10734 0.88302 1.07682 + 0.04693 0.03140 42.05719 1.20349 0.73971 0.24289 1.01121 1.20362 + 0.04749 0.03186 47.06540 1.34705 0.88671 0.39536 1.15620 1.34720 + 0.04801 0.03229 51.76191 1.48747 1.03018 0.54368 1.29790 1.48764 + 0.04853 0.03272 56.63353 1.63882 1.18454 0.70284 1.45050 1.63900 + 0.04897 0.03307 60.76723 1.77161 1.31979 0.84200 1.58432 1.77181 + 0.04951 0.03350 65.87799 1.94120 1.49232 1.01916 1.75514 1.94142 + 0.04998 0.03389 70.47986 2.09890 1.65256 1.18344 1.91390 2.09913 + 0.05043 0.03424 74.75804 2.24967 1.80563 1.34014 2.06563 2.24992 + 0.05099 0.03468 80.25473 2.44917 2.00800 1.54704 2.26633 2.44944 + 0.05152 0.03510 85.48305 2.64490 2.20638 1.74959 2.46316 2.64519 + 0.05203 0.03549 90.42516 2.83520 2.39913 1.94619 2.65449 2.83551 + 0.05254 0.03588 95.39863 3.03187 2.59820 2.14903 2.85216 3.03220 + 0.05304 0.03626 100.29173 3.23041 2.79906 2.35353 3.05167 3.23076 + 0.05351 0.03662 104.93932 3.42359 2.99441 2.55227 3.24577 3.42396 + 0.05397 0.03697 109.32909 3.61021 3.18304 2.74405 3.43323 3.61060 + 0.05442 0.03731 113.74519 3.80200 3.37683 2.94096 3.62585 3.80241 + 0.05488 0.03765 118.08972 3.99471 3.57148 3.13864 3.81937 3.99514 + 0.05531 0.03797 122.21742 4.18148 3.76008 3.33009 4.00691 4.18193 + 0.05573 0.03827 126.11768 4.36129 3.94160 3.51427 4.18744 4.36176 + 0.05614 0.03858 130.04422 4.54565 4.12766 3.70299 4.37251 4.54614 + 0.05656 0.03888 133.90953 4.73037 4.31406 3.89197 4.55793 4.73088 + 0.05696 0.03917 137.58543 4.90911 4.49437 4.07472 4.73733 4.90963 + 0.05734 0.03945 141.06190 5.08089 4.66764 4.25029 4.90974 5.08144 + 0.05773 0.03973 144.56499 5.25674 4.84497 4.42992 5.08621 5.25730 + 0.04768 0.03277 4.50643 0.37823 0.00000 0.00000 0.19783 0.37825 + 0.04815 0.03318 5.88895 0.39389 0.00000 0.00000 0.21461 0.39392 + 0.04886 0.03379 8.16341 0.42468 0.00000 0.00000 0.24700 0.42473 + 0.04938 0.03423 9.95090 0.45297 0.02712 0.00000 0.27644 0.45304 + 0.04992 0.03469 11.96176 0.48814 0.06510 0.00000 0.31278 0.48822 + 0.05040 0.03509 13.80173 0.52298 0.10231 0.00000 0.34861 0.52307 + 0.05086 0.03547 15.65330 0.56034 0.14191 0.00000 0.38690 0.56045 + 0.05136 0.03588 17.70631 0.60423 0.18814 0.00000 0.43178 0.60436 + 0.05179 0.03623 19.55978 0.64594 0.23184 0.00000 0.47431 0.64608 + 0.05221 0.03657 21.40660 0.68933 0.27712 0.00000 0.51850 0.68948 + 0.05254 0.03684 22.90765 0.72587 0.31515 0.00000 0.55566 0.72604 + 0.05326 0.03741 26.21148 0.81013 0.40252 0.00048 0.64122 0.81033 + 0.05389 0.03790 29.04941 0.88951 0.48452 0.08262 0.72170 0.88973 + 0.05460 0.03845 32.30956 0.98537 0.58326 0.18582 0.81877 0.98562 + 0.05535 0.03903 35.78522 1.09265 0.69347 0.30054 0.92727 1.09293 + 0.05603 0.03955 39.00108 1.19642 0.79985 0.41093 1.03214 1.19674 + 0.05673 0.04007 42.29527 1.30713 0.91313 0.52818 1.14392 1.30747 + 0.05731 0.04050 45.05922 1.40338 1.01148 0.62975 1.24106 1.40375 + 0.05802 0.04103 48.43869 1.52521 1.13581 0.75792 1.36393 1.52561 + 0.05866 0.04150 51.44758 1.63747 1.25025 0.87569 1.47711 1.63790 + 0.05925 0.04192 54.21704 1.74394 1.35869 0.98713 1.58441 1.74440 + 0.06000 0.04247 57.73747 1.88364 1.50085 1.13303 1.72514 1.88414 + 0.06071 0.04297 61.04794 2.01948 1.63895 1.27457 1.86193 2.02001 + 0.06139 0.04345 64.14410 2.15046 1.77202 1.41082 1.99380 2.15103 + 0.06206 0.04393 67.22849 2.28476 1.90839 1.55031 2.12897 2.28536 + 0.06273 0.04439 70.23277 2.41932 2.04493 1.68985 2.26436 2.41995 + 0.06337 0.04483 73.05930 2.54930 2.17677 1.82449 2.39512 2.54997 + 0.06398 0.04525 75.70518 2.67402 2.30322 1.95353 2.52057 2.67472 + 0.06459 0.04567 78.34405 2.80137 2.43228 2.08518 2.64864 2.80210 + 0.06519 0.04608 80.91782 2.92852 2.56110 2.21650 2.77650 2.92929 + 0.06577 0.04647 83.34300 3.05101 2.68517 2.34291 2.89965 3.05181 + 0.06633 0.04684 85.61670 3.16827 2.80389 2.46383 3.01753 3.16910 + 0.06689 0.04721 87.88810 3.28783 2.92492 2.58705 3.13771 3.28869 + 0.06744 0.04758 90.10722 3.40698 3.04551 2.70977 3.25746 3.40787 + 0.06797 0.04793 92.20187 3.52166 3.16154 2.82782 3.37272 3.52258 + 0.06848 0.04826 94.16901 3.63134 3.27250 2.94068 3.48294 3.63229 + 0.06900 0.04860 96.13747 3.74307 3.38552 3.05559 3.59521 3.74406 + 0.05176 0.03686 4.16730 0.34837 0.00000 0.00000 0.18235 0.34840 + 0.05232 0.03732 5.40540 0.36289 0.00000 0.00000 0.19789 0.36294 + 0.05315 0.03801 7.41548 0.39102 0.00000 0.00000 0.22749 0.39111 + 0.05377 0.03851 8.97463 0.41658 0.02449 0.00000 0.25409 0.41668 + 0.05442 0.03903 10.71075 0.44803 0.05850 0.00000 0.28662 0.44816 + 0.05499 0.03948 12.28489 0.47894 0.09157 0.00000 0.31843 0.47909 + 0.05554 0.03991 13.85649 0.51186 0.12652 0.00000 0.35220 0.51202 + 0.05613 0.04037 15.58577 0.55027 0.16706 0.00000 0.39151 0.55047 + 0.05664 0.04076 17.13596 0.58654 0.20515 0.00000 0.42854 0.58676 + 0.05714 0.04115 18.67086 0.62408 0.24441 0.00000 0.46680 0.62432 + 0.05754 0.04145 19.91170 0.65555 0.27723 0.00000 0.49883 0.65580 + 0.05840 0.04209 22.62300 0.72766 0.35217 0.00041 0.57214 0.72795 + 0.05915 0.04265 24.92589 0.79509 0.42199 0.07050 0.64057 0.79541 + 0.06000 0.04327 27.54815 0.87594 0.50547 0.15795 0.72253 0.87631 + 0.06090 0.04392 30.31849 0.96575 0.59795 0.25447 0.81346 0.96616 + 0.06171 0.04450 32.85975 1.05204 0.68661 0.34671 0.90075 1.05249 + 0.06255 0.04509 35.44203 1.14349 0.78042 0.44405 0.99320 1.14399 + 0.06325 0.04558 37.59300 1.22255 0.86140 0.52791 1.07307 1.22308 + 0.06410 0.04617 40.20416 1.32206 0.96320 0.63313 1.17354 1.32264 + 0.06486 0.04670 42.51210 1.41324 1.05637 0.72927 1.26556 1.41386 + 0.06557 0.04718 44.62263 1.49929 1.14422 0.81980 1.35237 1.49994 + 0.06647 0.04779 47.28684 1.61160 1.25877 0.93769 1.46563 1.61230 + 0.06732 0.04836 49.77347 1.72018 1.36943 1.05143 1.57509 1.72093 + 0.06813 0.04889 52.08295 1.82435 1.47552 1.16034 1.68007 1.82515 + 0.06894 0.04943 54.36831 1.93063 1.58369 1.27130 1.78715 1.93148 + 0.06974 0.04995 56.57959 2.03660 1.69149 1.38178 1.89390 2.03750 + 0.07050 0.05044 58.64695 2.13851 1.79510 1.48789 1.99653 2.13945 + 0.07122 0.05091 60.57061 2.23588 1.89406 1.58916 2.09457 2.23687 + 0.07196 0.05138 62.47810 2.33491 1.99467 1.69207 2.19427 2.33594 + 0.07268 0.05184 64.32774 2.43338 2.09467 1.79430 2.29339 2.43445 + 0.07337 0.05227 66.06090 2.52788 2.19062 1.89235 2.38851 2.52900 + 0.07403 0.05269 67.67719 2.61803 2.28212 1.98581 2.47923 2.61919 + 0.07470 0.05310 69.28337 2.70962 2.37507 2.08070 2.57140 2.71082 + 0.07536 0.05351 70.84445 2.80059 2.46736 2.17490 2.66293 2.80183 + 0.07599 0.05390 72.31041 2.88786 2.55588 2.26522 2.75073 2.88914 + 0.07660 0.05428 73.68045 2.97106 2.64026 2.35129 2.83443 2.97238 + 0.07721 0.05465 75.04483 3.05556 2.72594 2.43866 2.91944 3.05692 + 0.05502 0.04007 3.94328 0.32887 0.00000 0.00000 0.17226 0.32892 + 0.05565 0.04058 5.08547 0.34264 0.00000 0.00000 0.18699 0.34272 + 0.05661 0.04132 6.92158 0.36904 0.00000 0.00000 0.21476 0.36916 + 0.05731 0.04187 8.33185 0.39279 0.02276 0.00000 0.23949 0.39293 + 0.05805 0.04244 9.89013 0.42182 0.05418 0.00000 0.26953 0.42200 + 0.05870 0.04293 11.29336 0.45016 0.08455 0.00000 0.29872 0.45037 + 0.05933 0.04340 12.68598 0.48019 0.11648 0.00000 0.32955 0.48042 + 0.06001 0.04390 14.20950 0.51506 0.15334 0.00000 0.36525 0.51532 + 0.06060 0.04433 15.56791 0.54782 0.18780 0.00000 0.39873 0.54811 + 0.06117 0.04475 16.90650 0.58159 0.22319 0.00000 0.43319 0.58191 + 0.06163 0.04508 17.98423 0.60980 0.25267 0.00000 0.46193 0.61015 + 0.06262 0.04578 20.32610 0.67416 0.31968 0.00037 0.52741 0.67455 + 0.06348 0.04639 22.29790 0.73399 0.38176 0.06279 0.58819 0.73443 + 0.06445 0.04707 24.52796 0.80536 0.45558 0.14028 0.66059 0.80585 + 0.06547 0.04777 26.86749 0.88419 0.53692 0.22534 0.74049 0.88473 + 0.06641 0.04841 28.99929 0.95953 0.61450 0.30621 0.81677 0.96013 + 0.06737 0.04905 31.15196 1.03900 0.69618 0.39115 0.89718 1.03965 + 0.06817 0.04958 32.93495 1.10741 0.76639 0.46402 0.96635 1.10810 + 0.06914 0.05023 35.08725 1.19313 0.85427 0.55505 1.05299 1.19389 + 0.07001 0.05080 36.97872 1.27135 0.93436 0.63788 1.13200 1.27216 + 0.07082 0.05132 38.69954 1.34489 1.00960 0.71558 1.20626 1.34574 + 0.07185 0.05198 40.85984 1.44048 1.10731 0.81637 1.30275 1.44140 + 0.07282 0.05260 42.86415 1.53251 1.20129 0.91319 1.39562 1.53349 + 0.07374 0.05318 44.71528 1.62045 1.29104 1.00555 1.48432 1.62148 + 0.07467 0.05376 46.53725 1.70983 1.38222 1.09929 1.57447 1.71093 + 0.07558 0.05433 48.29073 1.79863 1.47274 1.19228 1.66401 1.79979 + 0.07645 0.05487 49.92167 1.88373 1.55945 1.28129 1.74979 1.88494 + 0.07728 0.05537 51.43184 1.96478 1.64200 1.36597 1.83148 1.96604 + 0.07811 0.05588 52.92221 2.04695 1.72566 1.45175 1.91429 2.04827 + 0.07893 0.05637 54.36046 2.12841 1.80857 1.53672 1.99636 2.12978 + 0.07972 0.05684 55.70192 2.20635 1.88788 1.61797 2.07489 2.20778 + 0.08046 0.05729 56.94738 2.28050 1.96331 1.69520 2.14959 2.28198 + 0.08122 0.05774 58.17962 2.35563 2.03972 1.77341 2.22527 2.35716 + 0.08197 0.05818 59.37204 2.43006 2.11540 1.85085 2.30023 2.43164 + 0.08269 0.05861 60.48693 2.50127 2.18780 1.92490 2.37195 2.50290 + 0.08338 0.05901 61.52457 2.56900 2.25665 1.99531 2.44016 2.57068 + 0.08407 0.05941 62.55368 2.63763 2.32640 2.06662 2.50927 2.63935 + 0.05772 0.04273 3.77879 0.31470 0.00000 0.00000 0.16494 0.31478 + 0.05843 0.04327 4.85035 0.32794 0.00000 0.00000 0.17908 0.32804 + 0.05949 0.04407 6.55933 0.35307 0.00000 0.00000 0.20552 0.35322 + 0.06027 0.04465 7.86163 0.37551 0.02151 0.00000 0.22889 0.37569 + 0.06110 0.04526 9.29176 0.40278 0.05104 0.00000 0.25712 0.40300 + 0.06182 0.04579 10.57253 0.42926 0.07945 0.00000 0.28441 0.42952 + 0.06252 0.04629 11.83758 0.45719 0.10920 0.00000 0.31311 0.45749 + 0.06327 0.04683 13.21516 0.48950 0.14339 0.00000 0.34622 0.48983 + 0.06393 0.04729 14.43820 0.51975 0.17526 0.00000 0.37715 0.52011 + 0.06457 0.04774 15.63881 0.55082 0.20787 0.00000 0.40887 0.55122 + 0.06508 0.04809 16.60230 0.57671 0.23496 0.00000 0.43527 0.57713 + 0.06618 0.04884 18.68669 0.63554 0.29632 0.00034 0.49517 0.63603 + 0.06713 0.04949 20.42936 0.68999 0.35291 0.05732 0.55053 0.69053 + 0.06822 0.05022 22.38960 0.75466 0.41992 0.12777 0.61620 0.75526 + 0.06935 0.05097 24.43460 0.82578 0.49344 0.20478 0.68833 0.82645 + 0.07040 0.05165 26.28814 0.89347 0.56326 0.27769 0.75693 0.89420 + 0.07146 0.05234 28.15049 0.96460 0.63650 0.35399 0.82896 0.96539 + 0.07235 0.05291 29.68606 1.02561 0.69924 0.41922 0.89071 1.02646 + 0.07343 0.05360 31.53139 1.10182 0.77751 0.50045 0.96779 1.10274 + 0.07440 0.05421 33.14566 1.17112 0.84860 0.57411 1.03785 1.17210 + 0.07530 0.05476 34.60829 1.23608 0.91518 0.64301 1.10351 1.23712 + 0.07644 0.05547 36.43635 1.32026 1.00138 0.73210 1.18855 1.32137 + 0.07752 0.05613 38.12432 1.40102 1.08402 0.81740 1.27011 1.40220 + 0.07854 0.05675 39.67632 1.47796 1.16270 0.89852 1.34779 1.47921 + 0.07957 0.05737 41.19726 1.55593 1.24238 0.98062 1.42650 1.55725 + 0.08058 0.05797 42.65473 1.63317 1.32128 1.06183 1.50445 1.63456 + 0.08154 0.05854 44.00474 1.70700 1.39665 1.13936 1.57894 1.70845 + 0.08245 0.05907 45.24985 1.77713 1.46822 1.21293 1.64968 1.77864 + 0.08337 0.05961 46.47392 1.84805 1.54058 1.28728 1.72122 1.84963 + 0.08428 0.06014 47.65060 1.91820 1.61212 1.36075 1.79196 1.91984 + 0.08515 0.06064 48.74395 1.98516 1.68040 1.43085 1.85950 1.98687 + 0.08597 0.06112 49.75541 2.04873 1.74520 1.49734 1.92359 2.05050 + 0.08681 0.06159 50.75253 2.11300 1.81071 1.56454 1.98840 2.11483 + 0.08763 0.06206 51.71397 2.17654 1.87545 1.63093 2.05246 2.17843 + 0.08843 0.06251 52.60968 2.23722 1.93727 1.69431 2.11362 2.23916 + 0.08918 0.06294 53.44049 2.29482 1.99595 1.75445 2.17168 2.29681 + 0.08995 0.06336 54.26169 2.35307 2.05528 1.81525 2.23040 2.35512 + 0.06794 0.05219 3.32287 0.27537 0.00000 0.00000 0.14466 0.27557 + 0.06896 0.05288 4.19249 0.28713 0.00000 0.00000 0.15721 0.28739 + 0.07049 0.05388 5.54340 0.30872 0.00000 0.00000 0.17995 0.30908 + 0.07162 0.05461 6.54571 0.32748 0.01801 0.00000 0.19953 0.32791 + 0.07281 0.05537 7.62371 0.34982 0.04230 0.00000 0.22270 0.35032 + 0.07386 0.05603 8.57133 0.37113 0.06528 0.00000 0.24473 0.37170 + 0.07486 0.05666 9.49230 0.39328 0.08900 0.00000 0.26756 0.39392 + 0.07594 0.05732 10.47950 0.41854 0.11590 0.00000 0.29352 0.41925 + 0.07688 0.05790 11.34317 0.44189 0.14066 0.00000 0.31748 0.44266 + 0.07780 0.05846 12.17996 0.46561 0.16572 0.00000 0.34177 0.46644 + 0.07853 0.05890 12.84397 0.48519 0.18634 0.00000 0.36180 0.48607 + 0.08010 0.05983 14.25869 0.52911 0.23247 0.00025 0.40667 0.53010 + 0.08146 0.06064 15.41185 0.56914 0.27438 0.04267 0.44752 0.57023 + 0.08300 0.06154 16.68438 0.61600 0.32330 0.09441 0.49526 0.61720 + 0.08462 0.06247 17.98583 0.66677 0.37617 0.15015 0.54694 0.66808 + 0.08609 0.06331 19.14318 0.71440 0.42569 0.20221 0.59539 0.71583 + 0.08759 0.06416 20.28525 0.76381 0.47696 0.25600 0.64561 0.76535 + 0.08885 0.06486 21.21159 0.80570 0.52038 0.30146 0.68816 0.80733 + 0.09037 0.06571 22.30664 0.85742 0.57393 0.35744 0.74067 0.85916 + 0.09173 0.06645 23.24849 0.90390 0.62201 0.40764 0.78785 0.90576 + 0.09298 0.06714 24.08894 0.94704 0.66659 0.45412 0.83162 0.94899 + 0.09457 0.06800 25.12208 1.00232 0.72369 0.51359 0.88769 1.00440 + 0.09607 0.06880 26.05892 1.05476 0.77780 0.56989 0.94086 1.05695 + 0.09748 0.06956 26.90561 1.10417 0.82878 0.62288 0.99095 1.10647 + 0.09890 0.07030 27.72158 1.15375 0.87989 0.67598 1.04120 1.15616 + 0.10029 0.07103 28.49040 1.20236 0.93000 0.72799 1.09046 1.20489 + 0.10161 0.07172 29.19095 1.24839 0.97742 0.77719 1.13710 1.25102 + 0.10286 0.07237 29.82691 1.29172 1.02206 0.82349 1.18100 1.29446 + 0.10411 0.07301 30.44246 1.33518 1.06682 0.86988 1.22503 1.33802 + 0.10535 0.07365 31.02482 1.37780 1.11070 0.91535 1.26820 1.38073 + 0.10653 0.07425 31.55755 1.41815 1.15226 0.95840 1.30908 1.42119 + 0.10764 0.07481 32.04296 1.45617 1.19139 0.99893 1.34758 1.45929 + 0.10877 0.07538 32.51421 1.49432 1.23067 1.03960 1.38623 1.49754 + 0.10989 0.07594 32.96166 1.53176 1.26922 1.07950 1.42415 1.53507 + 0.11096 0.07647 33.37206 1.56725 1.30576 1.11732 1.46010 1.57065 + 0.11197 0.07698 33.74701 1.60072 1.34021 1.15299 1.49400 1.60421 + 0.11299 0.07748 34.11201 1.63435 1.37483 1.18881 1.52807 1.63792 + 0.08231 0.06391 2.95777 0.24233 0.00000 0.00000 0.12778 0.24292 + 0.08384 0.06478 3.64843 0.25286 0.00000 0.00000 0.13903 0.25357 + 0.08612 0.06606 4.69052 0.27143 0.00000 0.00000 0.15864 0.27232 + 0.08780 0.06699 5.44040 0.28704 0.01506 0.00000 0.17500 0.28806 + 0.08958 0.06796 6.22800 0.30517 0.03495 0.00000 0.19391 0.30634 + 0.09112 0.06879 6.90575 0.32211 0.05340 0.00000 0.21151 0.32340 + 0.09260 0.06959 7.55226 0.33941 0.07212 0.00000 0.22943 0.34083 + 0.09418 0.07044 8.23271 0.35882 0.09301 0.00000 0.24950 0.36037 + 0.09557 0.07116 8.81788 0.37649 0.11196 0.00000 0.26773 0.37816 + 0.09691 0.07187 9.37617 0.39421 0.13090 0.00000 0.28599 0.39599 + 0.09797 0.07242 9.81333 0.40867 0.14632 0.00000 0.30087 0.41054 + 0.10024 0.07360 10.72795 0.44065 0.18032 0.00018 0.33375 0.44271 + 0.10222 0.07460 11.44966 0.46928 0.21067 0.03115 0.36314 0.47151 + 0.10443 0.07573 12.22743 0.50223 0.24553 0.06833 0.39693 0.50466 + 0.10674 0.07689 13.00342 0.53731 0.28256 0.10773 0.43288 0.53994 + 0.10884 0.07793 13.67704 0.56970 0.31669 0.14397 0.46604 0.57251 + 0.11097 0.07898 14.32654 0.60278 0.35151 0.18086 0.49989 0.60578 + 0.11273 0.07984 14.84218 0.63044 0.38061 0.21165 0.52819 0.63360 + 0.11487 0.08088 15.43860 0.66415 0.41603 0.24909 0.56266 0.66750 + 0.11677 0.08179 15.93998 0.69403 0.44742 0.28222 0.59321 0.69756 + 0.11851 0.08262 16.37811 0.72143 0.47618 0.31257 0.62122 0.72511 + 0.12071 0.08366 16.90435 0.75610 0.51257 0.35092 0.65665 0.75998 + 0.12278 0.08463 17.36934 0.78854 0.54660 0.38676 0.68979 0.79261 + 0.12472 0.08554 17.77913 0.81872 0.57826 0.42010 0.72063 0.82296 + 0.12665 0.08644 18.16429 0.84863 0.60964 0.45312 0.75120 0.85306 + 0.12854 0.08731 18.51786 0.87762 0.64005 0.48511 0.78082 0.88221 + 0.13033 0.08813 18.83179 0.90475 0.66852 0.51506 0.80855 0.90951 + 0.13201 0.08889 19.10953 0.93002 0.69505 0.54295 0.83438 0.93494 + 0.13369 0.08965 19.37145 0.95510 0.72138 0.57065 0.86002 0.96017 + 0.13534 0.09040 19.61252 0.97945 0.74694 0.59753 0.88490 0.98467 + 0.13691 0.09110 19.82699 1.00227 0.77092 0.62275 0.90824 1.00764 + 0.13839 0.09176 20.01704 1.02357 0.79331 0.64629 0.93003 1.02908 + 0.13989 0.09243 20.19625 1.04475 0.81558 0.66972 0.95169 1.05040 + 0.14135 0.09307 20.36129 1.06535 0.83724 0.69252 0.97276 1.07113 + 0.14275 0.09369 20.50790 1.08470 0.85761 0.71395 0.99257 1.09061 + 0.14408 0.09427 20.63760 1.10280 0.87666 0.73400 1.01109 1.10883 + 0.14541 0.09485 20.75964 1.12082 0.89565 0.75400 1.02954 1.12698 + 0.09402 0.07221 2.79352 0.22537 0.00000 0.00000 0.11922 0.22648 + 0.09598 0.07323 3.38785 0.23525 0.00000 0.00000 0.12981 0.23654 + 0.09890 0.07472 4.26803 0.25222 0.00000 0.00000 0.14780 0.25376 + 0.10103 0.07580 4.88859 0.26615 0.01355 0.00000 0.16248 0.26790 + 0.10328 0.07693 5.53019 0.28208 0.03119 0.00000 0.17917 0.28403 + 0.10523 0.07790 6.07452 0.29675 0.04732 0.00000 0.19449 0.29888 + 0.10710 0.07882 6.58728 0.31155 0.06351 0.00000 0.20992 0.31386 + 0.10909 0.07979 7.12031 0.32797 0.08138 0.00000 0.22699 0.33046 + 0.11082 0.08063 7.57336 0.34277 0.09744 0.00000 0.24236 0.34543 + 0.11249 0.08144 8.00101 0.35748 0.11335 0.00000 0.25761 0.36030 + 0.11382 0.08208 8.33279 0.36940 0.12622 0.00000 0.26995 0.37234 + 0.11664 0.08342 9.01814 0.39550 0.15431 0.00015 0.29694 0.39871 + 0.11908 0.08457 9.54571 0.41858 0.17909 0.02560 0.32079 0.42203 + 0.12181 0.08585 10.10441 0.44485 0.20724 0.05585 0.34790 0.44856 + 0.12465 0.08716 10.65160 0.47249 0.23681 0.08756 0.37641 0.47646 + 0.12722 0.08834 11.11793 0.49771 0.26378 0.11642 0.40242 0.50194 + 0.12980 0.08952 11.55952 0.52322 0.29102 0.14553 0.42870 0.52769 + 0.13194 0.09049 11.90416 0.54435 0.31358 0.16961 0.45048 0.54903 + 0.13453 0.09165 12.29578 0.56985 0.34080 0.19865 0.47676 0.57479 + 0.13681 0.09266 12.61879 0.59226 0.36471 0.22414 0.49984 0.59742 + 0.13889 0.09359 12.89603 0.61263 0.38645 0.24730 0.52083 0.61799 + 0.14152 0.09474 13.22230 0.63818 0.41371 0.27635 0.54715 0.64380 + 0.14399 0.09582 13.50389 0.66185 0.43899 0.30326 0.57154 0.66771 + 0.14628 0.09681 13.74624 0.68368 0.46231 0.32809 0.59404 0.68977 + 0.14857 0.09780 13.96850 0.70513 0.48524 0.35250 0.61616 0.71144 + 0.15079 0.09875 14.16720 0.72574 0.50728 0.37598 0.63741 0.73227 + 0.15288 0.09964 14.33884 0.74487 0.52776 0.39779 0.65715 0.75160 + 0.15485 0.10047 14.48640 0.76255 0.54671 0.41798 0.67540 0.76948 + 0.15681 0.10129 14.62139 0.77997 0.56539 0.43789 0.69339 0.78709 + 0.15873 0.10210 14.74151 0.79675 0.58340 0.45709 0.71072 0.80405 + 0.16054 0.10285 14.84458 0.81237 0.60019 0.47500 0.72686 0.81985 + 0.16225 0.10356 14.93246 0.82684 0.61576 0.49162 0.74182 0.83449 + 0.16397 0.10427 15.01185 0.84113 0.63115 0.50805 0.75661 0.84894 + 0.16565 0.10496 15.08153 0.85493 0.64603 0.52396 0.77090 0.86291 + 0.16725 0.10561 15.14013 0.86781 0.65994 0.53883 0.78424 0.87594 + 0.16876 0.10622 15.18895 0.87977 0.67287 0.55267 0.79663 0.88805 + 0.17028 0.10684 15.23181 0.89161 0.68569 0.56640 0.80891 0.90004 + 0.10465 0.07901 2.70233 0.21414 0.00000 0.00000 0.11364 0.21589 + 0.10700 0.08016 3.23114 0.22356 0.00000 0.00000 0.12377 0.22554 + 0.11046 0.08183 4.00325 0.23941 0.00000 0.00000 0.14066 0.24173 + 0.11299 0.08303 4.53893 0.25220 0.01255 0.00000 0.15420 0.25478 + 0.11565 0.08429 5.08598 0.26663 0.02870 0.00000 0.16941 0.26947 + 0.11795 0.08537 5.54494 0.27978 0.04331 0.00000 0.18323 0.28285 + 0.12014 0.08639 5.97300 0.29293 0.05785 0.00000 0.19701 0.29622 + 0.12247 0.08747 6.41359 0.30738 0.07378 0.00000 0.21213 0.31091 + 0.12450 0.08839 6.78453 0.32031 0.08797 0.00000 0.22563 0.32405 + 0.12645 0.08928 7.13165 0.33307 0.10194 0.00000 0.23894 0.33701 + 0.12799 0.08998 7.39892 0.34335 0.11317 0.00000 0.24966 0.34744 + 0.13127 0.09146 7.94522 0.36568 0.13752 0.00013 0.27290 0.37010 + 0.13409 0.09272 8.35658 0.38525 0.15880 0.02212 0.29325 0.38996 + 0.13724 0.09411 8.78565 0.40731 0.18277 0.04805 0.31618 0.41234 + 0.14049 0.09554 9.19906 0.43030 0.20773 0.07500 0.34006 0.43567 + 0.14343 0.09682 9.54558 0.45110 0.23030 0.09934 0.36167 0.45677 + 0.14638 0.09809 9.86830 0.47196 0.25292 0.12371 0.38332 0.47793 + 0.14881 0.09914 10.11614 0.48911 0.27152 0.14374 0.40113 0.49532 + 0.15174 0.10038 10.39297 0.50965 0.29381 0.16772 0.42247 0.51617 + 0.15431 0.10147 10.61702 0.52756 0.31325 0.18864 0.44108 0.53434 + 0.15666 0.10246 10.80583 0.54374 0.33082 0.20754 0.45788 0.55076 + 0.15961 0.10369 11.02331 0.56387 0.35271 0.23109 0.47881 0.57119 + 0.16236 0.10483 11.20622 0.58238 0.37285 0.25276 0.49806 0.58998 + 0.16492 0.10588 11.35943 0.59932 0.39131 0.27263 0.51569 0.60718 + 0.16746 0.10691 11.49586 0.61585 0.40935 0.29205 0.53290 0.62397 + 0.16992 0.10791 11.61383 0.63161 0.42658 0.31062 0.54932 0.63998 + 0.17223 0.10885 11.71203 0.64614 0.44249 0.32777 0.56448 0.65474 + 0.17439 0.10971 11.79309 0.65948 0.45712 0.34356 0.57840 0.66830 + 0.17655 0.11057 11.86387 0.67254 0.47147 0.35906 0.59204 0.68157 + 0.17865 0.11140 11.92343 0.68503 0.48522 0.37392 0.60510 0.69428 + 0.18063 0.11218 11.97128 0.69658 0.49796 0.38772 0.61719 0.70603 + 0.18249 0.11291 12.00902 0.70723 0.50973 0.40046 0.62834 0.71686 + 0.18435 0.11364 12.03991 0.71767 0.52130 0.41300 0.63929 0.72748 + 0.18618 0.11435 12.06372 0.72769 0.53242 0.42508 0.64981 0.73769 + 0.18791 0.11501 12.08043 0.73698 0.54277 0.43632 0.65957 0.74715 + 0.18953 0.11564 12.09115 0.74556 0.55234 0.44674 0.66860 0.75589 + 0.19117 0.11626 12.09709 0.75401 0.56179 0.45703 0.67749 0.76450 + 0.11466 0.08495 2.64712 0.20575 0.00000 0.00000 0.10953 0.20824 + 0.11735 0.08620 3.12633 0.21481 0.00000 0.00000 0.11931 0.21757 + 0.12131 0.08803 3.81792 0.22978 0.00000 0.00000 0.13535 0.23296 + 0.12419 0.08934 4.29118 0.24170 0.01180 0.00000 0.14804 0.24519 + 0.12721 0.09071 4.76946 0.25500 0.02685 0.00000 0.16214 0.25881 + 0.12980 0.09188 5.16694 0.26700 0.04035 0.00000 0.17483 0.27109 + 0.13229 0.09298 5.53451 0.27892 0.05368 0.00000 0.18739 0.28327 + 0.13491 0.09415 5.90960 0.29192 0.06818 0.00000 0.20109 0.29656 + 0.13719 0.09515 6.22280 0.30348 0.08102 0.00000 0.21323 0.30835 + 0.13937 0.09610 6.51367 0.31481 0.09359 0.00000 0.22513 0.31992 + 0.14110 0.09686 6.73612 0.32390 0.10365 0.00000 0.23467 0.32919 + 0.14476 0.09844 7.18655 0.34351 0.12532 0.00012 0.25522 0.34919 + 0.14790 0.09979 7.51867 0.36056 0.14413 0.01965 0.27307 0.36658 + 0.15140 0.10127 7.86016 0.37963 0.16515 0.04254 0.29304 0.38602 + 0.15500 0.10279 8.18410 0.39935 0.18687 0.06616 0.31367 0.40612 + 0.15823 0.10414 8.45125 0.41705 0.20638 0.08736 0.33220 0.42416 + 0.16147 0.10548 8.69593 0.43466 0.22580 0.10844 0.35064 0.44212 + 0.16414 0.10658 8.88076 0.44906 0.24168 0.12568 0.36571 0.45680 + 0.16734 0.10789 9.08351 0.46619 0.26060 0.14621 0.38366 0.47427 + 0.17014 0.10903 9.24425 0.48102 0.27700 0.16402 0.39921 0.48939 + 0.17269 0.11005 9.37694 0.49434 0.29175 0.18002 0.41317 0.50298 + 0.17589 0.11133 9.52597 0.51080 0.31001 0.19986 0.43046 0.51978 + 0.17886 0.11251 9.64741 0.52583 0.32671 0.21802 0.44625 0.53512 + 0.18162 0.11360 9.74561 0.53950 0.34193 0.23458 0.46062 0.54907 + 0.18434 0.11467 9.82957 0.55274 0.35672 0.25069 0.47456 0.56259 + 0.18698 0.11569 9.89863 0.56528 0.37077 0.26601 0.48779 0.57541 + 0.18944 0.11664 9.95279 0.57678 0.38367 0.28009 0.49992 0.58716 + 0.19174 0.11753 9.99432 0.58726 0.39548 0.29300 0.51100 0.59788 + 0.19403 0.11840 10.02729 0.59746 0.40700 0.30561 0.52180 0.60831 + 0.19626 0.11924 10.05153 0.60716 0.41799 0.31765 0.53208 0.61824 + 0.19835 0.12003 10.06749 0.61608 0.42812 0.32878 0.54154 0.62736 + 0.20031 0.12077 10.07655 0.62424 0.43743 0.33902 0.55022 0.63572 + 0.20227 0.12150 10.07997 0.63220 0.44654 0.34906 0.55870 0.64388 + 0.20419 0.12221 10.07808 0.63979 0.45527 0.35868 0.56680 0.65167 + 0.20599 0.12287 10.07156 0.64679 0.46334 0.36761 0.57428 0.65885 + 0.20769 0.12349 10.06137 0.65322 0.47078 0.37585 0.58116 0.66544 + 0.20940 0.12412 10.04726 0.65950 0.47809 0.38396 0.58790 0.67189 + 0.13362 0.09532 2.59019 0.19337 0.00000 0.00000 0.10359 0.19757 + 0.13689 0.09676 2.99594 0.20181 0.00000 0.00000 0.11282 0.20639 + 0.14170 0.09884 3.57047 0.21542 0.00000 0.00000 0.12756 0.22055 + 0.14517 0.10033 3.95441 0.22601 0.01070 0.00000 0.13897 0.23154 + 0.14879 0.10187 4.33560 0.23762 0.02415 0.00000 0.15144 0.24357 + 0.15189 0.10318 4.64727 0.24795 0.03604 0.00000 0.16249 0.25425 + 0.15484 0.10442 4.93126 0.25807 0.04765 0.00000 0.17330 0.26470 + 0.15795 0.10572 5.21673 0.26898 0.06013 0.00000 0.18494 0.27597 + 0.16064 0.10683 5.45162 0.27857 0.07107 0.00000 0.19516 0.28586 + 0.16321 0.10789 5.66679 0.28788 0.08169 0.00000 0.20508 0.29547 + 0.16523 0.10871 5.82935 0.29529 0.09012 0.00000 0.21296 0.30310 + 0.16950 0.11045 6.15285 0.31110 0.10809 0.00010 0.22977 0.31939 + 0.17314 0.11192 6.38137 0.32465 0.12349 0.01628 0.24417 0.33335 + 0.17717 0.11353 6.60971 0.33961 0.14050 0.03503 0.26008 0.34876 + 0.18129 0.11517 6.81942 0.35487 0.15787 0.05417 0.27631 0.36448 + 0.18498 0.11662 6.98645 0.36838 0.17328 0.07115 0.29070 0.37840 + 0.18865 0.11805 7.13380 0.38166 0.18846 0.08788 0.30485 0.39208 + 0.19165 0.11921 7.24084 0.39239 0.20075 0.10143 0.31630 0.40313 + 0.19524 0.12059 7.35309 0.40501 0.21524 0.11742 0.32977 0.41614 + 0.19837 0.12178 7.43736 0.41580 0.22768 0.13117 0.34132 0.42728 + 0.20120 0.12285 7.50293 0.42539 0.23876 0.14343 0.35159 0.43716 + 0.20473 0.12418 7.57103 0.43710 0.25236 0.15849 0.36416 0.44925 + 0.20800 0.12539 7.62069 0.44765 0.26466 0.17214 0.37551 0.46015 + 0.21100 0.12650 7.65544 0.45712 0.27576 0.18449 0.38572 0.46994 + 0.21396 0.12758 7.67961 0.46619 0.28644 0.19639 0.39552 0.47931 + 0.21681 0.12861 7.69367 0.47467 0.29649 0.20761 0.40471 0.48809 + 0.21946 0.12957 7.69889 0.48234 0.30564 0.21785 0.41304 0.49603 + 0.22192 0.13045 7.69707 0.48926 0.31393 0.22716 0.42058 0.50320 + 0.22436 0.13131 7.68912 0.49591 0.32195 0.23619 0.42784 0.51009 + 0.22672 0.13214 7.67565 0.50215 0.32953 0.24475 0.43469 0.51657 + 0.22893 0.13291 7.65803 0.50781 0.33646 0.25260 0.44092 0.52246 + 0.23099 0.13362 7.63731 0.51293 0.34278 0.25977 0.44657 0.52778 + 0.23304 0.13433 7.61264 0.51786 0.34890 0.26675 0.45204 0.53292 + 0.23503 0.13501 7.58487 0.52251 0.35472 0.27341 0.45721 0.53776 + 0.23691 0.13564 7.55535 0.52673 0.36006 0.27953 0.46193 0.54217 + 0.23866 0.13623 7.52480 0.53056 0.36493 0.28514 0.46622 0.54616 + 0.24042 0.13682 7.49154 0.53425 0.36968 0.29063 0.47038 0.55002 + 0.16049 0.10878 2.56212 0.18004 0.00000 0.00000 0.09746 0.18729 + 0.16447 0.11042 2.89068 0.18774 0.00000 0.00000 0.10602 0.19548 + 0.17027 0.11278 3.34528 0.19978 0.00000 0.00000 0.11931 0.20823 + 0.17443 0.11446 3.63972 0.20891 0.00955 0.00000 0.12933 0.21786 + 0.17874 0.11619 3.92535 0.21872 0.02134 0.00000 0.14008 0.22820 + 0.18240 0.11765 4.15396 0.22730 0.03160 0.00000 0.14944 0.23721 + 0.18588 0.11902 4.35817 0.23557 0.04148 0.00000 0.15847 0.24589 + 0.18951 0.12044 4.55924 0.24436 0.05196 0.00000 0.16805 0.25512 + 0.19263 0.12166 4.72131 0.25198 0.06103 0.00000 0.17635 0.26310 + 0.19561 0.12281 4.86689 0.25930 0.06975 0.00000 0.18432 0.27077 + 0.19794 0.12370 4.97491 0.26505 0.07660 0.00000 0.19059 0.27680 + 0.20284 0.12557 5.18430 0.27717 0.09104 0.00008 0.20379 0.28948 + 0.20698 0.12714 5.32146 0.28738 0.10324 0.01310 0.21492 0.30017 + 0.21152 0.12884 5.45166 0.29847 0.11652 0.02800 0.22702 0.31177 + 0.21614 0.13056 5.56407 0.30956 0.12987 0.04300 0.23915 0.32338 + 0.22025 0.13206 5.64727 0.31922 0.14155 0.05614 0.24974 0.33349 + 0.22429 0.13353 5.71450 0.32856 0.15290 0.06893 0.26000 0.34327 + 0.22758 0.13471 5.75853 0.33597 0.16198 0.07918 0.26818 0.35104 + 0.23149 0.13610 5.79865 0.34456 0.17256 0.09115 0.27767 0.36005 + 0.23487 0.13730 5.82300 0.35179 0.18153 0.10133 0.28569 0.36763 + 0.23790 0.13836 5.83683 0.35810 0.18942 0.11031 0.29272 0.37426 + 0.24167 0.13966 5.84366 0.36568 0.19899 0.12124 0.30120 0.38224 + 0.24512 0.14084 5.84007 0.37238 0.20754 0.13103 0.30873 0.38929 + 0.24828 0.14190 5.82871 0.37827 0.21515 0.13979 0.31540 0.39550 + 0.25136 0.14293 5.81033 0.38381 0.22238 0.14814 0.32169 0.40135 + 0.25430 0.14391 5.78611 0.38888 0.22909 0.15594 0.32750 0.40671 + 0.25703 0.14480 5.75805 0.39338 0.23513 0.16299 0.33269 0.41148 + 0.25954 0.14561 5.72743 0.39735 0.24054 0.16933 0.33730 0.41569 + 0.26200 0.14639 5.69295 0.40109 0.24571 0.17542 0.34167 0.41966 + 0.26438 0.14714 5.65569 0.40452 0.25053 0.18114 0.34571 0.42331 + 0.26659 0.14783 5.61748 0.40756 0.25489 0.18634 0.34934 0.42655 + 0.26863 0.14847 5.57905 0.41024 0.25881 0.19104 0.35257 0.42942 + 0.27065 0.14908 5.53820 0.41276 0.26257 0.19558 0.35563 0.43213 + 0.27261 0.14967 5.49605 0.41507 0.26610 0.19987 0.35848 0.43461 + 0.27443 0.15022 5.45426 0.41711 0.26929 0.20378 0.36102 0.43682 + 0.27613 0.15072 5.41332 0.41891 0.27217 0.20733 0.36329 0.43876 + 0.27782 0.15121 5.37074 0.42059 0.27494 0.21077 0.36545 0.44059 + 0.20278 0.12836 2.55725 0.16360 0.00000 0.00000 0.09033 0.17669 + 0.20758 0.13021 2.79742 0.17025 0.00000 0.00000 0.09795 0.18394 + 0.21450 0.13284 3.11885 0.18029 0.00000 0.00000 0.10939 0.19485 + 0.21940 0.13468 3.31664 0.18766 0.00819 0.00000 0.11776 0.20282 + 0.22444 0.13656 3.50144 0.19538 0.01810 0.00000 0.12650 0.21114 + 0.22868 0.13813 3.64420 0.20196 0.02654 0.00000 0.13396 0.21822 + 0.23268 0.13958 3.76741 0.20818 0.03453 0.00000 0.14100 0.22491 + 0.23682 0.14109 3.88430 0.21466 0.04287 0.00000 0.14835 0.23187 + 0.24035 0.14236 3.97492 0.22017 0.04998 0.00000 0.15461 0.23779 + 0.24369 0.14355 4.05321 0.22538 0.05671 0.00000 0.16052 0.24337 + 0.24629 0.14447 4.10916 0.22941 0.06195 0.00000 0.16511 0.24770 + 0.25171 0.14637 4.21151 0.23774 0.07280 0.00006 0.17460 0.25662 + 0.25624 0.14793 4.26515 0.24458 0.08179 0.00991 0.18242 0.26395 + 0.26115 0.14961 4.30770 0.25181 0.09139 0.02101 0.19073 0.27170 + 0.26609 0.15126 4.33535 0.25885 0.10086 0.03198 0.19887 0.27925 + 0.27042 0.15270 4.34732 0.26480 0.10898 0.04144 0.20580 0.28564 + 0.27464 0.15407 4.34812 0.27039 0.11673 0.05050 0.21236 0.29165 + 0.27803 0.15516 4.34110 0.27471 0.12282 0.05766 0.21748 0.29630 + 0.28202 0.15642 4.32420 0.27958 0.12980 0.06591 0.22329 0.30154 + 0.28543 0.15748 4.30242 0.28355 0.13561 0.07282 0.22808 0.30583 + 0.28845 0.15840 4.27743 0.28692 0.14064 0.07884 0.23218 0.30947 + 0.29216 0.15952 4.23961 0.29082 0.14664 0.08606 0.23701 0.31370 + 0.29552 0.16051 4.19856 0.29414 0.15189 0.09243 0.24117 0.31730 + 0.29855 0.16138 4.15589 0.29693 0.15647 0.09804 0.24475 0.32035 + 0.30148 0.16221 4.10973 0.29944 0.16074 0.10332 0.24802 0.32309 + 0.30423 0.16297 4.06158 0.30163 0.16463 0.10818 0.25095 0.32550 + 0.30675 0.16365 4.01368 0.30346 0.16806 0.11251 0.25347 0.32752 + 0.30904 0.16425 3.96674 0.30499 0.17107 0.11635 0.25564 0.32922 + 0.31127 0.16482 3.91809 0.30634 0.17389 0.11999 0.25761 0.33073 + 0.31338 0.16535 3.86896 0.30749 0.17647 0.12337 0.25937 0.33202 + 0.31533 0.16583 3.82129 0.30842 0.17875 0.12639 0.26088 0.33308 + 0.31711 0.16625 3.77544 0.30916 0.18076 0.12909 0.26216 0.33394 + 0.31884 0.16665 3.72859 0.30978 0.18264 0.13166 0.26331 0.33466 + 0.32050 0.16702 3.68186 0.31027 0.18436 0.13405 0.26432 0.33525 + 0.32203 0.16735 3.63693 0.31063 0.18588 0.13620 0.26517 0.33569 + 0.32343 0.16765 3.59403 0.31087 0.18722 0.13812 0.26587 0.33601 + 0.32481 0.16793 3.55046 0.31103 0.18847 0.13996 0.26648 0.33623 + 0.24275 0.14588 2.55219 0.15029 0.00000 0.00000 0.08487 0.16963 + 0.24803 0.14780 2.72880 0.15605 0.00000 0.00000 0.09167 0.17602 + 0.25555 0.15050 2.95737 0.16451 0.00000 0.00000 0.10161 0.18536 + 0.26083 0.15236 3.08975 0.17056 0.00717 0.00000 0.10872 0.19201 + 0.26621 0.15424 3.20793 0.17675 0.01570 0.00000 0.11599 0.19880 + 0.27072 0.15579 3.29521 0.18193 0.02286 0.00000 0.12208 0.20446 + 0.27491 0.15722 3.36709 0.18673 0.02955 0.00000 0.12775 0.20971 + 0.27924 0.15868 3.43166 0.19165 0.03643 0.00000 0.13357 0.21508 + 0.28289 0.15989 3.47866 0.19576 0.04223 0.00000 0.13845 0.21956 + 0.28633 0.16102 3.51655 0.19958 0.04766 0.00000 0.14300 0.22373 + 0.28899 0.16189 3.54169 0.20250 0.05184 0.00000 0.14649 0.22691 + 0.29447 0.16364 3.58196 0.20842 0.06041 0.00005 0.15359 0.23334 + 0.29901 0.16507 3.58875 0.21315 0.06738 0.00790 0.15933 0.23849 + 0.30387 0.16656 3.58349 0.21802 0.07472 0.01662 0.16529 0.24379 + 0.30870 0.16801 3.56631 0.22262 0.08183 0.02513 0.17100 0.24880 + 0.31288 0.16924 3.54182 0.22638 0.08783 0.03237 0.17574 0.25290 + 0.31691 0.17039 3.50972 0.22980 0.09346 0.03922 0.18012 0.25663 + 0.32011 0.17128 3.47821 0.23236 0.09783 0.04456 0.18346 0.25942 + 0.32382 0.17228 3.43492 0.23512 0.10276 0.05065 0.18716 0.26245 + 0.32695 0.17311 3.39265 0.23728 0.10679 0.05569 0.19012 0.26481 + 0.32969 0.17381 3.35110 0.23904 0.11024 0.06004 0.19260 0.26674 + 0.33301 0.17462 3.29517 0.24096 0.11427 0.06519 0.19541 0.26885 + 0.33597 0.17532 3.23986 0.24247 0.11773 0.06967 0.19775 0.27052 + 0.33860 0.17591 3.18614 0.24364 0.12070 0.07358 0.19967 0.27183 + 0.34110 0.17645 3.13097 0.24459 0.12342 0.07720 0.20135 0.27288 + 0.34342 0.17692 3.07588 0.24530 0.12584 0.08050 0.20278 0.27370 + 0.34550 0.17732 3.02300 0.24580 0.12793 0.08340 0.20393 0.27427 + 0.34736 0.17765 2.97269 0.24612 0.12972 0.08594 0.20486 0.27465 + 0.34915 0.17795 2.92184 0.24631 0.13136 0.08832 0.20564 0.27487 + 0.35081 0.17820 2.87168 0.24635 0.13283 0.09050 0.20626 0.27495 + 0.35230 0.17841 2.82396 0.24628 0.13409 0.09242 0.20674 0.27491 + 0.35365 0.17858 2.77887 0.24612 0.13517 0.09412 0.20707 0.27475 + 0.35494 0.17872 2.73351 0.24586 0.13615 0.09571 0.20731 0.27450 + 0.35615 0.17884 2.68894 0.24552 0.13702 0.09717 0.20746 0.27416 + 0.35724 0.17892 2.64665 0.24512 0.13775 0.09847 0.20751 0.27374 + 0.35822 0.17898 2.60676 0.24467 0.13838 0.09962 0.20749 0.27328 + 0.35916 0.17901 2.56670 0.24416 0.13893 0.10069 0.20740 0.27274 + 0.31642 0.17671 2.49090 0.12805 0.00000 0.00000 0.07606 0.15947 + 0.32189 0.17846 2.57836 0.13237 0.00000 0.00000 0.08143 0.16426 + 0.32955 0.18085 2.68105 0.13843 0.00000 0.00000 0.08898 0.17092 + 0.33482 0.18245 2.72793 0.14256 0.00562 0.00000 0.09416 0.17544 + 0.34009 0.18401 2.76152 0.14663 0.01215 0.00000 0.09930 0.17987 + 0.34442 0.18526 2.78021 0.14990 0.01750 0.00000 0.10347 0.18343 + 0.34839 0.18638 2.79015 0.15283 0.02238 0.00000 0.10724 0.18660 + 0.35241 0.18748 2.79306 0.15573 0.02731 0.00000 0.11100 0.18971 + 0.35575 0.18837 2.78986 0.15807 0.03138 0.00000 0.11407 0.19222 + 0.35884 0.18917 2.78223 0.16017 0.03513 0.00000 0.11686 0.19446 + 0.36119 0.18977 2.77333 0.16172 0.03797 0.00000 0.11896 0.19611 + 0.36595 0.19092 2.74684 0.16473 0.04366 0.00003 0.12308 0.19929 + 0.36978 0.19180 2.70576 0.16699 0.04818 0.00538 0.12626 0.20166 + 0.37378 0.19265 2.65369 0.16915 0.05280 0.01120 0.12943 0.20389 + 0.37761 0.19341 2.59473 0.17100 0.05716 0.01676 0.13229 0.20579 + 0.38082 0.19398 2.53801 0.17236 0.06073 0.02138 0.13453 0.20715 + 0.38380 0.19446 2.47847 0.17344 0.06398 0.02567 0.13648 0.20819 + 0.38609 0.19477 2.42779 0.17413 0.06644 0.02896 0.13786 0.20883 + 0.38864 0.19507 2.36532 0.17473 0.06913 0.03263 0.13927 0.20935 + 0.39071 0.19525 2.30951 0.17505 0.07127 0.03561 0.14030 0.20958 + 0.39245 0.19536 2.25814 0.17520 0.07304 0.03813 0.14107 0.20962 + 0.39446 0.19541 2.19306 0.17518 0.07504 0.04106 0.14182 0.20944 + 0.39614 0.19538 2.13223 0.17497 0.07669 0.04356 0.14232 0.20907 + 0.39754 0.19529 2.07578 0.17463 0.07805 0.04568 0.14262 0.20855 + 0.39879 0.19514 2.02006 0.17415 0.07923 0.04761 0.14276 0.20788 + 0.39985 0.19493 1.96632 0.17355 0.08023 0.04933 0.14275 0.20709 + 0.40073 0.19468 1.91629 0.17289 0.08105 0.05080 0.14263 0.20623 + 0.40144 0.19440 1.86995 0.17217 0.08170 0.05207 0.14242 0.20532 + 0.40205 0.19408 1.82421 0.17138 0.08226 0.05322 0.14212 0.20432 + 0.40255 0.19373 1.78008 0.17053 0.08272 0.05425 0.14175 0.20326 + 0.40293 0.19336 1.73894 0.16966 0.08308 0.05514 0.14132 0.20218 + 0.40321 0.19298 1.70076 0.16879 0.08334 0.05590 0.14086 0.20111 + 0.40342 0.19257 1.66301 0.16786 0.08355 0.05659 0.14033 0.19997 + 0.40355 0.19214 1.62648 0.16691 0.08369 0.05721 0.13977 0.19881 + 0.40361 0.19171 1.59233 0.16596 0.08378 0.05774 0.13919 0.19765 + 0.40361 0.19128 1.56055 0.16503 0.08382 0.05819 0.13860 0.19652 + 0.40355 0.19082 1.52903 0.16406 0.08382 0.05859 0.13797 0.19535 + 0.38186 0.20276 2.36148 0.10954 0.00000 0.00000 0.06862 0.15087 + 0.38681 0.20405 2.38967 0.11276 0.00000 0.00000 0.07279 0.15420 + 0.39357 0.20571 2.41196 0.11708 0.00000 0.00000 0.07846 0.15861 + 0.39809 0.20676 2.40678 0.11991 0.00445 0.00000 0.08222 0.16144 + 0.40252 0.20771 2.39080 0.12258 0.00952 0.00000 0.08583 0.16408 + 0.40606 0.20842 2.37069 0.12464 0.01360 0.00000 0.08868 0.16607 + 0.40924 0.20901 2.34673 0.12642 0.01727 0.00000 0.09119 0.16776 + 0.41238 0.20954 2.31704 0.12810 0.02090 0.00000 0.09361 0.16931 + 0.41491 0.20992 2.28820 0.12939 0.02386 0.00000 0.09554 0.17047 + 0.41720 0.21022 2.25810 0.13050 0.02654 0.00000 0.09723 0.17143 + 0.41891 0.21042 2.23290 0.13128 0.02854 0.00000 0.09847 0.17209 + 0.42223 0.21071 2.17585 0.13269 0.03250 0.00002 0.10082 0.17319 + 0.42478 0.21084 2.11512 0.13362 0.03556 0.00384 0.10253 0.17383 + 0.42728 0.21085 2.04549 0.13437 0.03862 0.00792 0.10411 0.17422 + 0.42953 0.21071 1.97262 0.13484 0.04144 0.01175 0.10542 0.17429 + 0.43125 0.21047 1.90670 0.13503 0.04368 0.01489 0.10633 0.17408 + 0.43272 0.21012 1.84083 0.13501 0.04567 0.01775 0.10701 0.17364 + 0.43373 0.20976 1.78692 0.13484 0.04713 0.01990 0.10741 0.17311 + 0.43471 0.20923 1.72271 0.13447 0.04869 0.02228 0.10770 0.17229 + 0.43538 0.20868 1.66713 0.13401 0.04988 0.02417 0.10780 0.17141 + 0.43582 0.20812 1.61729 0.13348 0.05084 0.02575 0.10777 0.17049 + 0.43617 0.20734 1.55572 0.13269 0.05188 0.02755 0.10758 0.16919 + 0.43628 0.20652 1.49962 0.13182 0.05269 0.02906 0.10727 0.16784 + 0.43622 0.20570 1.44868 0.13091 0.05332 0.03031 0.10687 0.16647 + 0.43599 0.20482 1.39936 0.12993 0.05383 0.03143 0.10637 0.16502 + 0.43561 0.20391 1.35266 0.12889 0.05423 0.03240 0.10579 0.16352 + 0.43512 0.20300 1.30988 0.12786 0.05452 0.03322 0.10518 0.16204 + 0.43455 0.20211 1.27082 0.12683 0.05471 0.03391 0.10455 0.16059 + 0.43387 0.20118 1.23279 0.12576 0.05485 0.03452 0.10386 0.15910 + 0.43311 0.20023 1.19656 0.12468 0.05492 0.03505 0.10314 0.15759 + 0.43229 0.19930 1.16318 0.12362 0.05494 0.03549 0.10241 0.15613 + 0.43144 0.19839 1.13252 0.12259 0.05491 0.03585 0.10170 0.15472 + 0.43051 0.19746 1.10250 0.12153 0.05485 0.03618 0.10095 0.15327 + 0.42953 0.19652 1.07374 0.12047 0.05475 0.03645 0.10018 0.15183 + 0.42853 0.19560 1.04709 0.11944 0.05463 0.03668 0.09943 0.15044 + 0.42752 0.19471 1.02249 0.11845 0.05449 0.03686 0.09870 0.14911 + 0.42646 0.19380 0.99828 0.11744 0.05432 0.03701 0.09794 0.14775 + 0.43903 0.22430 2.18378 0.09402 0.00000 0.00000 0.06197 0.14216 + 0.44294 0.22492 2.17208 0.09640 0.00000 0.00000 0.06513 0.14421 + 0.44810 0.22559 2.14227 0.09947 0.00000 0.00000 0.06931 0.14673 + 0.45140 0.22589 2.10511 0.10138 0.00353 0.00000 0.07198 0.14820 + 0.45450 0.22606 2.05990 0.10310 0.00749 0.00000 0.07447 0.14942 + 0.45687 0.22609 2.01783 0.10437 0.01063 0.00000 0.07636 0.15023 + 0.45890 0.22602 1.97543 0.10539 0.01340 0.00000 0.07797 0.15081 + 0.46079 0.22585 1.92878 0.10631 0.01612 0.00000 0.07948 0.15122 + 0.46224 0.22563 1.88722 0.10695 0.01830 0.00000 0.08063 0.15143 + 0.46346 0.22535 1.84650 0.10746 0.02025 0.00000 0.08160 0.15150 + 0.46431 0.22508 1.81397 0.10778 0.02169 0.00000 0.08228 0.15146 + 0.46579 0.22440 1.74422 0.10826 0.02449 0.00002 0.08349 0.15117 + 0.46673 0.22368 1.67723 0.10844 0.02662 0.00280 0.08428 0.15067 + 0.46743 0.22275 1.60345 0.10842 0.02870 0.00574 0.08491 0.14988 + 0.46778 0.22166 1.52892 0.10818 0.03056 0.00845 0.08530 0.14881 + 0.46779 0.22055 1.46352 0.10777 0.03201 0.01064 0.08546 0.14766 + 0.46752 0.21935 1.39985 0.10721 0.03326 0.01261 0.08543 0.14634 + 0.46710 0.21828 1.34884 0.10665 0.03415 0.01408 0.08530 0.14514 + 0.46635 0.21691 1.28928 0.10585 0.03507 0.01567 0.08500 0.14357 + 0.46548 0.21563 1.23870 0.10505 0.03575 0.01692 0.08463 0.14209 + 0.46454 0.21441 1.19406 0.10425 0.03628 0.01795 0.08421 0.14067 + 0.46313 0.21280 1.13979 0.10316 0.03681 0.01911 0.08358 0.13879 + 0.46161 0.21123 1.09114 0.10207 0.03720 0.02006 0.08290 0.13695 + 0.46003 0.20970 1.04759 0.10098 0.03747 0.02083 0.08219 0.13518 + 0.45829 0.20814 1.00597 0.09985 0.03766 0.02151 0.08143 0.13337 + 0.45646 0.20657 0.96704 0.09871 0.03777 0.02209 0.08063 0.13156 + 0.45461 0.20505 0.93177 0.09760 0.03783 0.02257 0.07984 0.12983 + 0.45277 0.20360 0.89990 0.09653 0.03782 0.02295 0.07906 0.12818 + 0.45083 0.20211 0.86914 0.09544 0.03778 0.02329 0.07825 0.12651 + 0.44884 0.20062 0.84011 0.09435 0.03770 0.02357 0.07743 0.12485 + 0.44687 0.19919 0.81357 0.09330 0.03760 0.02380 0.07664 0.12327 + 0.44495 0.19783 0.78938 0.09230 0.03747 0.02398 0.07587 0.12177 + 0.44294 0.19643 0.76587 0.09128 0.03732 0.02413 0.07508 0.12026 + 0.44091 0.19504 0.74348 0.09027 0.03714 0.02425 0.07429 0.11876 + 0.43892 0.19371 0.72288 0.08931 0.03696 0.02434 0.07353 0.11733 + 0.43699 0.19243 0.70397 0.08839 0.03677 0.02440 0.07281 0.11598 + 0.43500 0.19113 0.68546 0.08745 0.03657 0.02444 0.07206 0.11461 + 0.49905 0.24513 1.92477 0.07835 0.00000 0.00000 0.05446 0.13038 + 0.50119 0.24475 1.88218 0.07995 0.00000 0.00000 0.05662 0.13110 + 0.50369 0.24394 1.81399 0.08189 0.00000 0.00000 0.05934 0.13172 + 0.50504 0.24318 1.75509 0.08302 0.00263 0.00000 0.06099 0.13187 + 0.50606 0.24224 1.69130 0.08395 0.00554 0.00000 0.06245 0.13178 + 0.50663 0.24133 1.63624 0.08457 0.00780 0.00000 0.06351 0.13151 + 0.50693 0.24036 1.58374 0.08501 0.00978 0.00000 0.06434 0.13110 + 0.50699 0.23925 1.52866 0.08533 0.01168 0.00000 0.06507 0.13052 + 0.50684 0.23822 1.48151 0.08549 0.01318 0.00000 0.06558 0.12991 + 0.50653 0.23717 1.43676 0.08556 0.01451 0.00000 0.06596 0.12923 + 0.50617 0.23630 1.40191 0.08555 0.01548 0.00000 0.06620 0.12863 + 0.50508 0.23435 1.32954 0.08538 0.01732 0.00001 0.06652 0.12721 + 0.50381 0.23256 1.26421 0.08507 0.01869 0.00192 0.06662 0.12583 + 0.50206 0.23046 1.19431 0.08456 0.02000 0.00390 0.06655 0.12414 + 0.49990 0.22818 1.12560 0.08388 0.02114 0.00571 0.06630 0.12225 + 0.49766 0.22603 1.06674 0.08314 0.02199 0.00714 0.06594 0.12043 + 0.49515 0.22379 1.01062 0.08230 0.02270 0.00841 0.06546 0.11852 + 0.49289 0.22189 0.96648 0.08153 0.02319 0.00934 0.06499 0.11688 + 0.48996 0.21954 0.91581 0.08054 0.02367 0.01034 0.06433 0.11485 + 0.48719 0.21741 0.87348 0.07961 0.02400 0.01111 0.06369 0.11302 + 0.48453 0.21543 0.83663 0.07873 0.02424 0.01174 0.06306 0.11132 + 0.48098 0.21289 0.79247 0.07756 0.02445 0.01243 0.06221 0.10914 + 0.47749 0.21047 0.75345 0.07642 0.02458 0.01298 0.06136 0.10708 + 0.47410 0.20817 0.71898 0.07534 0.02464 0.01342 0.06054 0.10514 + 0.47059 0.20586 0.68643 0.07423 0.02466 0.01380 0.05968 0.10320 + 0.46706 0.20358 0.65631 0.07313 0.02462 0.01412 0.05883 0.10131 + 0.46364 0.20141 0.62931 0.07209 0.02456 0.01437 0.05800 0.09952 + 0.46034 0.19936 0.60513 0.07109 0.02446 0.01456 0.05721 0.09784 + 0.45697 0.19728 0.58199 0.07009 0.02435 0.01473 0.05641 0.09617 + 0.45359 0.19524 0.56033 0.06910 0.02421 0.01486 0.05561 0.09453 + 0.45033 0.19330 0.54068 0.06816 0.02406 0.01496 0.05485 0.09299 + 0.44721 0.19145 0.52289 0.06727 0.02391 0.01503 0.05413 0.09153 + 0.44402 0.18959 0.50570 0.06638 0.02374 0.01508 0.05339 0.09008 + 0.44084 0.18776 0.48945 0.06550 0.02356 0.01512 0.05267 0.08866 + 0.43778 0.18601 0.47457 0.06466 0.02338 0.01513 0.05199 0.08732 + 0.43485 0.18434 0.46100 0.06387 0.02321 0.01514 0.05133 0.08606 + 0.43186 0.18266 0.44777 0.06307 0.02302 0.01513 0.05067 0.08479 + 0.54669 0.25948 1.65278 0.06629 0.00000 0.00000 0.04771 0.11751 + 0.54673 0.25801 1.59415 0.06732 0.00000 0.00000 0.04909 0.11722 + 0.54614 0.25563 1.50772 0.06848 0.00000 0.00000 0.05072 0.11644 + 0.54526 0.25376 1.44030 0.06907 0.00195 0.00000 0.05164 0.11566 + 0.54397 0.25168 1.37052 0.06948 0.00408 0.00000 0.05239 0.11465 + 0.54256 0.24980 1.31228 0.06969 0.00571 0.00000 0.05286 0.11366 + 0.54098 0.24793 1.25825 0.06976 0.00711 0.00000 0.05319 0.11260 + 0.53907 0.24589 1.20295 0.06973 0.00845 0.00000 0.05342 0.11139 + 0.53723 0.24406 1.15662 0.06962 0.00949 0.00000 0.05352 0.11027 + 0.53530 0.24226 1.11347 0.06944 0.01039 0.00000 0.05354 0.10914 + 0.53368 0.24081 1.08036 0.06925 0.01105 0.00000 0.05351 0.10821 + 0.52994 0.23765 1.01293 0.06874 0.01228 0.00001 0.05331 0.10615 + 0.52643 0.23486 0.95425 0.06818 0.01317 0.00132 0.05302 0.10430 + 0.52223 0.23168 0.89268 0.06745 0.01400 0.00268 0.05258 0.10215 + 0.51759 0.22831 0.83330 0.06658 0.01470 0.00390 0.05200 0.09987 + 0.51316 0.22522 0.78330 0.06572 0.01521 0.00485 0.05139 0.09776 + 0.50849 0.22207 0.73636 0.06479 0.01561 0.00569 0.05070 0.09561 + 0.50449 0.21943 0.69992 0.06398 0.01588 0.00629 0.05009 0.09382 + 0.49949 0.21622 0.65861 0.06296 0.01613 0.00693 0.04931 0.09165 + 0.49495 0.21338 0.62451 0.06203 0.01628 0.00742 0.04859 0.08973 + 0.49070 0.21076 0.59514 0.06117 0.01638 0.00781 0.04790 0.08798 + 0.48520 0.20743 0.56032 0.06005 0.01645 0.00823 0.04701 0.08578 + 0.47994 0.20431 0.52989 0.05898 0.01646 0.00856 0.04615 0.08373 + 0.47493 0.20139 0.50327 0.05797 0.01644 0.00883 0.04533 0.08183 + 0.46986 0.19847 0.47835 0.05696 0.01638 0.00904 0.04450 0.07995 + 0.46484 0.19563 0.45549 0.05596 0.01630 0.00922 0.04369 0.07814 + 0.46005 0.19295 0.43514 0.05503 0.01620 0.00935 0.04292 0.07645 + 0.45550 0.19043 0.41705 0.05414 0.01609 0.00946 0.04219 0.07488 + 0.45091 0.18792 0.39985 0.05326 0.01597 0.00954 0.04146 0.07332 + 0.44636 0.18545 0.38385 0.05240 0.01584 0.00960 0.04075 0.07182 + 0.44203 0.18312 0.36941 0.05158 0.01570 0.00964 0.04007 0.07041 + 0.43791 0.18093 0.35641 0.05081 0.01556 0.00966 0.03944 0.06909 + 0.43375 0.17873 0.34391 0.05005 0.01541 0.00967 0.03880 0.06779 + 0.42963 0.17657 0.33213 0.04929 0.01526 0.00968 0.03818 0.06651 + 0.42570 0.17452 0.32140 0.04858 0.01511 0.00967 0.03759 0.06532 + 0.42196 0.17259 0.31165 0.04791 0.01496 0.00965 0.03703 0.06420 + 0.41818 0.17064 0.30218 0.04724 0.01481 0.00963 0.03647 0.06309 + 0.58259 0.26783 1.38817 0.05721 0.00000 0.00000 0.04162 0.10392 + 0.58037 0.26527 1.32357 0.05781 0.00000 0.00000 0.04241 0.10290 + 0.57651 0.26134 1.23208 0.05838 0.00000 0.00000 0.04325 0.10117 + 0.57330 0.25839 1.16434 0.05859 0.00144 0.00000 0.04365 0.09977 + 0.56961 0.25522 1.09612 0.05865 0.00298 0.00000 0.04390 0.09818 + 0.56618 0.25243 1.04040 0.05858 0.00415 0.00000 0.04399 0.09675 + 0.56270 0.24971 0.98961 0.05842 0.00515 0.00000 0.04399 0.09531 + 0.55882 0.24680 0.93848 0.05817 0.00608 0.00000 0.04389 0.09375 + 0.55530 0.24425 0.89630 0.05788 0.00680 0.00000 0.04375 0.09235 + 0.55178 0.24176 0.85751 0.05756 0.00743 0.00000 0.04355 0.09099 + 0.54892 0.23979 0.82807 0.05727 0.00787 0.00000 0.04336 0.08989 + 0.54261 0.23555 0.76895 0.05657 0.00869 0.00001 0.04288 0.08754 + 0.53697 0.23187 0.71880 0.05588 0.00927 0.00092 0.04238 0.08549 + 0.53046 0.22774 0.66696 0.05505 0.00980 0.00185 0.04175 0.08318 + 0.52350 0.22345 0.61768 0.05411 0.01024 0.00268 0.04102 0.08079 + 0.51704 0.21956 0.57675 0.05322 0.01054 0.00332 0.04031 0.07863 + 0.51040 0.21565 0.53877 0.05228 0.01077 0.00388 0.03956 0.07647 + 0.50483 0.21241 0.50960 0.05148 0.01092 0.00427 0.03892 0.07469 + 0.49799 0.20851 0.47685 0.05050 0.01104 0.00469 0.03812 0.07258 + 0.49188 0.20508 0.45008 0.04962 0.01110 0.00500 0.03740 0.07073 + 0.48624 0.20196 0.42721 0.04880 0.01113 0.00525 0.03673 0.06907 + 0.47905 0.19803 0.40032 0.04776 0.01114 0.00552 0.03588 0.06699 + 0.47226 0.19437 0.37702 0.04678 0.01111 0.00572 0.03508 0.06508 + 0.46588 0.19097 0.35679 0.04587 0.01105 0.00588 0.03433 0.06334 + 0.45949 0.18761 0.33799 0.04496 0.01098 0.00601 0.03358 0.06162 + 0.45324 0.18435 0.32085 0.04407 0.01089 0.00611 0.03285 0.05999 + 0.44732 0.18130 0.30569 0.04324 0.01080 0.00618 0.03217 0.05847 + 0.44176 0.17846 0.29228 0.04246 0.01070 0.00623 0.03153 0.05707 + 0.43617 0.17563 0.27959 0.04169 0.01059 0.00627 0.03090 0.05570 + 0.43070 0.17287 0.26784 0.04094 0.01047 0.00630 0.03028 0.05437 + 0.42550 0.17028 0.25728 0.04023 0.01036 0.00631 0.02970 0.05314 + 0.42061 0.16785 0.24780 0.03956 0.01025 0.00632 0.02916 0.05200 + 0.41568 0.16543 0.23873 0.03890 0.01013 0.00632 0.02862 0.05087 + 0.41084 0.16306 0.23021 0.03826 0.01001 0.00631 0.02809 0.04978 + 0.40625 0.16082 0.22247 0.03765 0.00989 0.00629 0.02760 0.04875 + 0.40190 0.15872 0.21545 0.03708 0.00978 0.00627 0.02713 0.04780 + 0.39752 0.15661 0.20865 0.03651 0.00967 0.00625 0.02667 0.04686 + 0.60752 0.27074 1.14340 0.05046 0.00000 0.00000 0.03614 0.09007 + 0.60300 0.26716 1.07941 0.05071 0.00000 0.00000 0.03649 0.08859 + 0.59585 0.26179 0.99112 0.05083 0.00000 0.00000 0.03677 0.08628 + 0.59034 0.25785 0.92796 0.05075 0.00105 0.00000 0.03681 0.08453 + 0.58429 0.25369 0.86556 0.05055 0.00216 0.00000 0.03673 0.08264 + 0.57890 0.25008 0.81539 0.05028 0.00300 0.00000 0.03657 0.08098 + 0.57359 0.24662 0.77028 0.04996 0.00370 0.00000 0.03636 0.07937 + 0.56783 0.24294 0.72545 0.04955 0.00436 0.00000 0.03607 0.07766 + 0.56272 0.23976 0.68888 0.04915 0.00486 0.00000 0.03578 0.07616 + 0.55771 0.23668 0.65560 0.04873 0.00528 0.00000 0.03546 0.07472 + 0.55370 0.23426 0.63055 0.04838 0.00558 0.00000 0.03519 0.07359 + 0.54502 0.22911 0.58081 0.04757 0.00613 0.00000 0.03455 0.07118 + 0.53742 0.22470 0.53940 0.04682 0.00651 0.00064 0.03396 0.06912 + 0.52881 0.21980 0.49713 0.04594 0.00685 0.00128 0.03326 0.06685 + 0.51978 0.21475 0.45742 0.04498 0.00712 0.00185 0.03249 0.06454 + 0.51153 0.21023 0.42479 0.04408 0.00730 0.00228 0.03177 0.06248 + 0.50318 0.20573 0.39482 0.04317 0.00744 0.00265 0.03102 0.06045 + 0.49624 0.20203 0.37198 0.04240 0.00751 0.00292 0.03040 0.05880 + 0.48783 0.19761 0.34655 0.04146 0.00757 0.00319 0.02965 0.05685 + 0.48040 0.19375 0.32593 0.04063 0.00759 0.00340 0.02898 0.05517 + 0.47359 0.19025 0.30842 0.03987 0.00759 0.00356 0.02836 0.05366 + 0.46500 0.18589 0.28798 0.03891 0.00756 0.00372 0.02759 0.05180 + 0.45696 0.18185 0.27039 0.03801 0.00752 0.00385 0.02687 0.05011 + 0.44947 0.17813 0.25521 0.03718 0.00747 0.00395 0.02621 0.04857 + 0.44203 0.17447 0.24117 0.03636 0.00740 0.00403 0.02555 0.04707 + 0.43480 0.17094 0.22844 0.03556 0.00732 0.00409 0.02492 0.04565 + 0.42801 0.16766 0.21723 0.03482 0.00724 0.00413 0.02433 0.04434 + 0.42165 0.16461 0.20735 0.03413 0.00716 0.00416 0.02378 0.04315 + 0.41532 0.16159 0.19804 0.03345 0.00707 0.00417 0.02324 0.04197 + 0.40913 0.15866 0.18944 0.03279 0.00698 0.00419 0.02272 0.04085 + 0.40330 0.15592 0.18174 0.03217 0.00689 0.00419 0.02224 0.03981 + 0.39783 0.15336 0.17485 0.03159 0.00680 0.00419 0.02178 0.03884 + 0.39236 0.15082 0.16826 0.03101 0.00671 0.00418 0.02133 0.03790 + 0.38700 0.14834 0.16209 0.03045 0.00662 0.00417 0.02090 0.03699 + 0.38192 0.14601 0.15650 0.02992 0.00654 0.00415 0.02049 0.03614 + 0.37715 0.14382 0.15143 0.02943 0.00645 0.00413 0.02011 0.03535 + 0.37236 0.14164 0.14654 0.02894 0.00637 0.00411 0.01973 0.03457 + 0.62231 0.26885 0.92518 0.04540 0.00000 0.00000 0.03121 0.07648 + 0.61555 0.26434 0.86585 0.04536 0.00000 0.00000 0.03126 0.07476 + 0.60523 0.25771 0.78558 0.04512 0.00000 0.00000 0.03114 0.07218 + 0.59753 0.25291 0.72959 0.04482 0.00076 0.00000 0.03095 0.07029 + 0.58927 0.24789 0.67510 0.04441 0.00156 0.00000 0.03066 0.06829 + 0.58205 0.24359 0.63185 0.04399 0.00215 0.00000 0.03035 0.06658 + 0.57505 0.23950 0.59338 0.04355 0.00264 0.00000 0.03002 0.06495 + 0.56756 0.23519 0.55554 0.04303 0.00310 0.00000 0.02962 0.06324 + 0.56101 0.23148 0.52497 0.04255 0.00344 0.00000 0.02925 0.06177 + 0.55465 0.22794 0.49738 0.04206 0.00373 0.00000 0.02887 0.06036 + 0.54960 0.22515 0.47676 0.04166 0.00394 0.00000 0.02856 0.05927 + 0.53882 0.21928 0.43618 0.04077 0.00431 0.00000 0.02787 0.05697 + 0.52950 0.21429 0.40292 0.03998 0.00456 0.00044 0.02725 0.05504 + 0.51907 0.20881 0.36929 0.03907 0.00478 0.00089 0.02654 0.05293 + 0.50826 0.20320 0.33803 0.03811 0.00494 0.00128 0.02579 0.05081 + 0.49850 0.19822 0.31256 0.03723 0.00505 0.00157 0.02510 0.04895 + 0.48872 0.19329 0.28936 0.03633 0.00513 0.00182 0.02441 0.04712 + 0.48065 0.18927 0.27181 0.03559 0.00516 0.00200 0.02384 0.04566 + 0.47095 0.18449 0.25239 0.03470 0.00519 0.00218 0.02315 0.04394 + 0.46245 0.18035 0.23674 0.03392 0.00519 0.00232 0.02254 0.04247 + 0.45472 0.17662 0.22353 0.03321 0.00518 0.00242 0.02200 0.04116 + 0.44502 0.17198 0.20818 0.03231 0.00515 0.00253 0.02132 0.03956 + 0.43601 0.16772 0.19504 0.03149 0.00510 0.00261 0.02069 0.03811 + 0.42768 0.16381 0.18375 0.03073 0.00505 0.00267 0.02012 0.03680 + 0.41945 0.15998 0.17336 0.02998 0.00500 0.00272 0.01955 0.03554 + 0.41149 0.15631 0.16397 0.02926 0.00493 0.00275 0.01902 0.03434 + 0.40406 0.15291 0.15572 0.02859 0.00487 0.00278 0.01852 0.03325 + 0.39714 0.14976 0.14848 0.02797 0.00481 0.00279 0.01806 0.03225 + 0.39027 0.14666 0.14167 0.02736 0.00474 0.00280 0.01761 0.03128 + 0.38360 0.14367 0.13539 0.02676 0.00467 0.00280 0.01717 0.03035 + 0.37734 0.14087 0.12978 0.02621 0.00461 0.00280 0.01677 0.02950 + 0.37148 0.13827 0.12477 0.02570 0.00454 0.00280 0.01639 0.02871 + 0.36564 0.13570 0.11999 0.02519 0.00448 0.00279 0.01602 0.02794 + 0.35994 0.13320 0.11552 0.02470 0.00441 0.00278 0.01566 0.02720 + 0.35457 0.13085 0.11147 0.02423 0.00435 0.00277 0.01533 0.02651 + 0.34953 0.12866 0.10780 0.02380 0.00429 0.00275 0.01502 0.02588 + 0.34449 0.12647 0.10427 0.02337 0.00422 0.00274 0.01471 0.02525 + 0.62785 0.26280 0.73626 0.04149 0.00000 0.00000 0.02681 0.06358 + 0.61898 0.25751 0.68380 0.04121 0.00000 0.00000 0.02664 0.06180 + 0.60573 0.24981 0.61393 0.04066 0.00000 0.00000 0.02628 0.05918 + 0.59602 0.24430 0.56616 0.04018 0.00054 0.00000 0.02594 0.05731 + 0.58575 0.23859 0.52025 0.03961 0.00111 0.00000 0.02552 0.05536 + 0.57688 0.23374 0.48420 0.03907 0.00153 0.00000 0.02513 0.05372 + 0.56837 0.22915 0.45242 0.03853 0.00187 0.00000 0.02473 0.05217 + 0.55935 0.22436 0.42145 0.03792 0.00219 0.00000 0.02429 0.05057 + 0.55153 0.22025 0.39663 0.03738 0.00243 0.00000 0.02389 0.04920 + 0.54401 0.21635 0.37438 0.03684 0.00262 0.00000 0.02349 0.04791 + 0.53807 0.21329 0.35785 0.03641 0.00276 0.00000 0.02317 0.04690 + 0.52548 0.20689 0.32558 0.03547 0.00301 0.00000 0.02248 0.04482 + 0.51471 0.20150 0.29945 0.03465 0.00317 0.00031 0.02188 0.04309 + 0.50278 0.19561 0.27326 0.03372 0.00331 0.00062 0.02120 0.04122 + 0.49051 0.18963 0.24911 0.03276 0.00342 0.00088 0.02050 0.03936 + 0.47953 0.18435 0.22960 0.03189 0.00348 0.00108 0.01987 0.03774 + 0.46860 0.17916 0.21193 0.03103 0.00352 0.00125 0.01924 0.03617 + 0.45965 0.17495 0.19864 0.03031 0.00354 0.00137 0.01873 0.03491 + 0.44896 0.16997 0.18402 0.02946 0.00355 0.00149 0.01812 0.03345 + 0.43965 0.16567 0.17229 0.02872 0.00354 0.00158 0.01759 0.03221 + 0.43123 0.16182 0.16243 0.02805 0.00353 0.00165 0.01711 0.03111 + 0.42072 0.15706 0.15102 0.02721 0.00350 0.00172 0.01653 0.02977 + 0.41102 0.15271 0.14129 0.02644 0.00346 0.00178 0.01599 0.02857 + 0.40209 0.14873 0.13297 0.02574 0.00342 0.00181 0.01550 0.02749 + 0.39331 0.14485 0.12532 0.02505 0.00338 0.00184 0.01502 0.02645 + 0.38487 0.14115 0.11843 0.02439 0.00333 0.00187 0.01457 0.02547 + 0.37702 0.13774 0.11239 0.02378 0.00328 0.00188 0.01415 0.02458 + 0.36975 0.13459 0.10710 0.02322 0.00324 0.00189 0.01377 0.02378 + 0.36255 0.13150 0.10213 0.02267 0.00319 0.00189 0.01339 0.02299 + 0.35559 0.12852 0.09755 0.02213 0.00314 0.00189 0.01304 0.02225 + 0.34907 0.12575 0.09347 0.02164 0.00309 0.00189 0.01270 0.02157 + 0.34300 0.12319 0.08983 0.02118 0.00304 0.00188 0.01239 0.02094 + 0.33696 0.12065 0.08635 0.02072 0.00299 0.00188 0.01209 0.02033 + 0.33110 0.11819 0.08310 0.02028 0.00295 0.00187 0.01180 0.01974 + 0.32558 0.11590 0.08016 0.01987 0.00290 0.00186 0.01153 0.01920 + 0.32042 0.11376 0.07750 0.01949 0.00286 0.00185 0.01128 0.01870 + 0.31527 0.11163 0.07493 0.01910 0.00281 0.00183 0.01103 0.01821 + 0.62509 0.25327 0.57655 0.03829 0.00000 0.00000 0.02289 0.05172 + 0.61432 0.24735 0.53187 0.03781 0.00000 0.00000 0.02259 0.04999 + 0.59843 0.23882 0.47317 0.03701 0.00000 0.00000 0.02207 0.04752 + 0.58693 0.23276 0.43369 0.03638 0.00039 0.00000 0.02165 0.04577 + 0.57490 0.22653 0.39615 0.03567 0.00078 0.00000 0.02117 0.04398 + 0.56460 0.22127 0.36695 0.03504 0.00108 0.00000 0.02075 0.04248 + 0.55479 0.21632 0.34142 0.03442 0.00132 0.00000 0.02032 0.04108 + 0.54448 0.21118 0.31672 0.03374 0.00153 0.00000 0.01987 0.03965 + 0.53559 0.20680 0.29707 0.03315 0.00170 0.00000 0.01947 0.03843 + 0.52709 0.20265 0.27956 0.03258 0.00183 0.00000 0.01908 0.03730 + 0.52042 0.19942 0.26662 0.03212 0.00192 0.00000 0.01877 0.03642 + 0.50635 0.19268 0.24152 0.03114 0.00209 0.00000 0.01811 0.03461 + 0.49442 0.18705 0.22140 0.03031 0.00220 0.00021 0.01755 0.03312 + 0.48129 0.18092 0.20138 0.02938 0.00229 0.00043 0.01693 0.03152 + 0.46789 0.17474 0.18304 0.02842 0.00235 0.00061 0.01629 0.02994 + 0.45598 0.16932 0.16832 0.02757 0.00239 0.00075 0.01573 0.02858 + 0.44420 0.16401 0.15506 0.02673 0.00242 0.00086 0.01517 0.02727 + 0.43461 0.15973 0.14514 0.02604 0.00243 0.00094 0.01472 0.02623 + 0.42321 0.15469 0.13425 0.02522 0.00242 0.00103 0.01419 0.02503 + 0.41333 0.15036 0.12556 0.02452 0.00242 0.00109 0.01374 0.02401 + 0.40445 0.14649 0.11828 0.02389 0.00240 0.00113 0.01333 0.02311 + 0.39341 0.14173 0.10987 0.02310 0.00238 0.00118 0.01283 0.02203 + 0.38326 0.13740 0.10272 0.02239 0.00235 0.00121 0.01238 0.02106 + 0.37397 0.13346 0.09662 0.02173 0.00232 0.00124 0.01197 0.02019 + 0.36488 0.12963 0.09102 0.02110 0.00229 0.00126 0.01157 0.01937 + 0.35618 0.12600 0.08598 0.02049 0.00225 0.00127 0.01119 0.01859 + 0.34811 0.12265 0.08158 0.01993 0.00222 0.00128 0.01084 0.01789 + 0.34066 0.11958 0.07771 0.01942 0.00218 0.00128 0.01053 0.01725 + 0.33331 0.11657 0.07409 0.01892 0.00215 0.00128 0.01022 0.01664 + 0.32623 0.11368 0.07076 0.01843 0.00211 0.00128 0.00992 0.01606 + 0.31962 0.11100 0.06778 0.01798 0.00207 0.00128 0.00965 0.01552 + 0.31349 0.10853 0.06513 0.01757 0.00204 0.00128 0.00940 0.01504 + 0.30740 0.10609 0.06260 0.01716 0.00201 0.00127 0.00915 0.01456 + 0.30150 0.10373 0.06023 0.01677 0.00197 0.00126 0.00892 0.01411 + 0.29597 0.10153 0.05809 0.01640 0.00194 0.00125 0.00870 0.01369 + 0.29081 0.09949 0.05615 0.01606 0.00191 0.00125 0.00849 0.01331 + 0.28567 0.09746 0.05428 0.01572 0.00188 0.00124 0.00829 0.01293 + 0.61497 0.24090 0.44444 0.03546 0.00000 0.00000 0.01942 0.04112 + 0.60252 0.23452 0.40759 0.03482 0.00000 0.00000 0.01904 0.03954 + 0.58435 0.22538 0.35974 0.03382 0.00000 0.00000 0.01845 0.03731 + 0.57132 0.21894 0.32801 0.03306 0.00027 0.00000 0.01799 0.03576 + 0.55781 0.21236 0.29813 0.03225 0.00055 0.00000 0.01749 0.03419 + 0.54632 0.20683 0.27508 0.03155 0.00075 0.00000 0.01706 0.03288 + 0.53544 0.20166 0.25506 0.03087 0.00092 0.00000 0.01665 0.03167 + 0.52407 0.19631 0.23582 0.03014 0.00107 0.00000 0.01620 0.03044 + 0.51433 0.19178 0.22061 0.02952 0.00118 0.00000 0.01582 0.02941 + 0.50506 0.18750 0.20713 0.02892 0.00127 0.00000 0.01546 0.02844 + 0.49781 0.18417 0.19721 0.02845 0.00133 0.00000 0.01517 0.02770 + 0.48261 0.17728 0.17807 0.02745 0.00144 0.00000 0.01456 0.02618 + 0.46980 0.17154 0.16285 0.02661 0.00151 0.00015 0.01405 0.02494 + 0.45579 0.16534 0.14780 0.02568 0.00157 0.00029 0.01350 0.02363 + 0.44159 0.15912 0.13410 0.02474 0.00161 0.00042 0.01293 0.02234 + 0.42903 0.15369 0.12314 0.02391 0.00164 0.00051 0.01244 0.02123 + 0.41669 0.14839 0.11333 0.02310 0.00165 0.00059 0.01196 0.02017 + 0.40668 0.14414 0.10600 0.02244 0.00165 0.00065 0.01157 0.01933 + 0.39484 0.13916 0.09799 0.02166 0.00165 0.00070 0.01112 0.01837 + 0.38463 0.13490 0.09161 0.02100 0.00164 0.00074 0.01073 0.01756 + 0.37548 0.13111 0.08627 0.02040 0.00163 0.00078 0.01039 0.01685 + 0.36416 0.12646 0.08012 0.01967 0.00161 0.00081 0.00996 0.01600 + 0.35381 0.12224 0.07489 0.01900 0.00159 0.00083 0.00958 0.01524 + 0.34437 0.11843 0.07044 0.01839 0.00157 0.00085 0.00924 0.01457 + 0.33517 0.11473 0.06636 0.01781 0.00155 0.00086 0.00891 0.01392 + 0.32639 0.11123 0.06269 0.01725 0.00152 0.00087 0.00860 0.01332 + 0.31828 0.10802 0.05947 0.01674 0.00150 0.00087 0.00831 0.01278 + 0.31081 0.10509 0.05666 0.01627 0.00147 0.00087 0.00805 0.01229 + 0.30348 0.10222 0.05402 0.01581 0.00145 0.00087 0.00780 0.01182 + 0.29643 0.09947 0.05159 0.01538 0.00142 0.00087 0.00756 0.01138 + 0.28987 0.09694 0.04942 0.01497 0.00140 0.00087 0.00734 0.01098 + 0.28380 0.09459 0.04748 0.01460 0.00137 0.00087 0.00714 0.01061 + 0.27779 0.09229 0.04563 0.01423 0.00135 0.00086 0.00694 0.01025 + 0.27198 0.09008 0.04390 0.01388 0.00133 0.00086 0.00675 0.00991 + 0.26655 0.08801 0.04234 0.01355 0.00130 0.00085 0.00657 0.00959 + 0.26148 0.08610 0.04092 0.01324 0.00128 0.00085 0.00641 0.00931 + 0.25646 0.08421 0.03955 0.01294 0.00126 0.00084 0.00625 0.00902 + 0.59841 0.22632 0.33728 0.03277 0.00000 0.00000 0.01637 0.03192 + 0.58454 0.21963 0.30776 0.03200 0.00000 0.00000 0.01595 0.03055 + 0.56448 0.21012 0.26982 0.03084 0.00000 0.00000 0.01533 0.02862 + 0.55021 0.20347 0.24496 0.03000 0.00019 0.00000 0.01487 0.02730 + 0.53550 0.19670 0.22176 0.02912 0.00038 0.00000 0.01439 0.02597 + 0.52307 0.19104 0.20398 0.02836 0.00052 0.00000 0.01397 0.02488 + 0.51138 0.18578 0.18864 0.02765 0.00063 0.00000 0.01358 0.02387 + 0.49920 0.18035 0.17398 0.02689 0.00074 0.00000 0.01316 0.02285 + 0.48882 0.17577 0.16245 0.02625 0.00081 0.00000 0.01281 0.02200 + 0.47898 0.17146 0.15228 0.02564 0.00087 0.00000 0.01248 0.02121 + 0.47131 0.16812 0.14482 0.02516 0.00091 0.00000 0.01222 0.02061 + 0.45531 0.16123 0.13050 0.02417 0.00099 0.00000 0.01167 0.01938 + 0.44191 0.15553 0.11918 0.02333 0.00104 0.00010 0.01122 0.01838 + 0.42732 0.14938 0.10804 0.02242 0.00107 0.00020 0.01073 0.01733 + 0.41262 0.14326 0.09795 0.02151 0.00110 0.00029 0.01025 0.01631 + 0.39970 0.13794 0.08991 0.02071 0.00112 0.00035 0.00982 0.01543 + 0.38705 0.13277 0.08272 0.01993 0.00112 0.00041 0.00941 0.01460 + 0.37684 0.12864 0.07736 0.01931 0.00113 0.00045 0.00908 0.01395 + 0.36481 0.12382 0.07152 0.01857 0.00112 0.00048 0.00869 0.01320 + 0.35447 0.11971 0.06688 0.01794 0.00112 0.00051 0.00837 0.01258 + 0.34525 0.11606 0.06299 0.01739 0.00111 0.00053 0.00808 0.01203 + 0.33389 0.11161 0.05852 0.01671 0.00109 0.00055 0.00773 0.01138 + 0.32354 0.10759 0.05472 0.01609 0.00108 0.00057 0.00741 0.01080 + 0.31413 0.10396 0.05148 0.01553 0.00106 0.00058 0.00713 0.01029 + 0.30500 0.10046 0.04851 0.01499 0.00105 0.00059 0.00686 0.00980 + 0.29631 0.09716 0.04584 0.01449 0.00103 0.00059 0.00660 0.00935 + 0.28832 0.09414 0.04350 0.01402 0.00101 0.00060 0.00637 0.00895 + 0.28098 0.09138 0.04145 0.01360 0.00099 0.00060 0.00616 0.00858 + 0.27379 0.08869 0.03952 0.01318 0.00097 0.00060 0.00595 0.00823 + 0.26690 0.08613 0.03775 0.01279 0.00096 0.00060 0.00576 0.00790 + 0.26050 0.08377 0.03616 0.01243 0.00094 0.00059 0.00558 0.00760 + 0.25459 0.08160 0.03474 0.01209 0.00092 0.00059 0.00541 0.00733 + 0.24877 0.07947 0.03339 0.01176 0.00091 0.00059 0.00525 0.00707 + 0.24314 0.07742 0.03212 0.01145 0.00089 0.00058 0.00510 0.00682 + 0.23790 0.07551 0.03097 0.01116 0.00088 0.00058 0.00496 0.00659 + 0.23302 0.07375 0.02993 0.01089 0.00086 0.00058 0.00483 0.00638 + 0.22819 0.07201 0.02893 0.01062 0.00085 0.00057 0.00470 0.00617 + 0.57634 0.21010 0.25194 0.03007 0.00000 0.00000 0.01369 0.02414 + 0.56133 0.20327 0.22893 0.02921 0.00000 0.00000 0.01327 0.02300 + 0.53978 0.19361 0.19963 0.02796 0.00000 0.00000 0.01266 0.02141 + 0.52456 0.18689 0.18065 0.02706 0.00013 0.00000 0.01222 0.02032 + 0.50896 0.18009 0.16305 0.02613 0.00026 0.00000 0.01176 0.01924 + 0.49585 0.17443 0.14965 0.02535 0.00036 0.00000 0.01138 0.01836 + 0.48356 0.16918 0.13815 0.02462 0.00043 0.00000 0.01102 0.01755 + 0.47084 0.16380 0.12722 0.02386 0.00050 0.00000 0.01064 0.01673 + 0.46003 0.15926 0.11866 0.02321 0.00055 0.00000 0.01033 0.01606 + 0.44982 0.15502 0.11113 0.02260 0.00059 0.00000 0.01003 0.01544 + 0.44188 0.15174 0.10563 0.02213 0.00062 0.00000 0.00980 0.01496 + 0.42541 0.14499 0.09511 0.02115 0.00067 0.00000 0.00932 0.01400 + 0.41167 0.13943 0.08683 0.02034 0.00070 0.00007 0.00893 0.01322 + 0.39680 0.13347 0.07870 0.01946 0.00073 0.00014 0.00851 0.01241 + 0.38189 0.12755 0.07136 0.01859 0.00075 0.00020 0.00809 0.01162 + 0.36884 0.12243 0.06553 0.01783 0.00076 0.00024 0.00773 0.01095 + 0.35613 0.11749 0.06032 0.01710 0.00076 0.00028 0.00738 0.01032 + 0.34591 0.11355 0.05645 0.01651 0.00076 0.00031 0.00710 0.00983 + 0.33391 0.10896 0.05222 0.01583 0.00076 0.00033 0.00678 0.00927 + 0.32365 0.10507 0.04886 0.01525 0.00076 0.00035 0.00651 0.00880 + 0.31452 0.10163 0.04605 0.01473 0.00075 0.00037 0.00627 0.00840 + 0.30331 0.09745 0.04281 0.01410 0.00074 0.00038 0.00598 0.00791 + 0.29314 0.09368 0.04006 0.01354 0.00073 0.00039 0.00572 0.00748 + 0.28393 0.09029 0.03771 0.01303 0.00072 0.00040 0.00549 0.00710 + 0.27501 0.08703 0.03555 0.01255 0.00071 0.00040 0.00526 0.00675 + 0.26656 0.08397 0.03361 0.01209 0.00069 0.00041 0.00506 0.00642 + 0.25881 0.08117 0.03190 0.01167 0.00068 0.00041 0.00487 0.00612 + 0.25171 0.07863 0.03040 0.01129 0.00067 0.00041 0.00470 0.00586 + 0.24478 0.07615 0.02900 0.01092 0.00066 0.00041 0.00453 0.00561 + 0.23815 0.07380 0.02770 0.01057 0.00064 0.00041 0.00437 0.00537 + 0.23202 0.07164 0.02653 0.01025 0.00063 0.00041 0.00423 0.00515 + 0.22636 0.06965 0.02549 0.00995 0.00062 0.00040 0.00410 0.00496 + 0.22080 0.06771 0.02450 0.00966 0.00061 0.00040 0.00397 0.00477 + 0.21544 0.06585 0.02357 0.00938 0.00060 0.00040 0.00385 0.00459 + 0.21045 0.06412 0.02272 0.00913 0.00059 0.00040 0.00374 0.00443 + 0.20582 0.06253 0.02195 0.00889 0.00058 0.00039 0.00363 0.00428 + 0.20124 0.06095 0.02121 0.00865 0.00057 0.00039 0.00353 0.00413 + 0.54964 0.19280 0.18518 0.02731 0.00000 0.00000 0.01136 0.01776 + 0.53379 0.18597 0.16772 0.02639 0.00000 0.00000 0.01096 0.01684 + 0.51117 0.17637 0.14568 0.02508 0.00000 0.00000 0.01038 0.01557 + 0.49529 0.16972 0.13153 0.02416 0.00009 0.00000 0.00997 0.01472 + 0.47910 0.16302 0.11850 0.02323 0.00018 0.00000 0.00956 0.01387 + 0.46555 0.15747 0.10863 0.02244 0.00024 0.00000 0.00921 0.01318 + 0.45291 0.15234 0.10020 0.02172 0.00029 0.00000 0.00889 0.01256 + 0.43986 0.14710 0.09222 0.02097 0.00034 0.00000 0.00856 0.01193 + 0.42883 0.14270 0.08599 0.02034 0.00037 0.00000 0.00828 0.01141 + 0.41844 0.13859 0.08052 0.01974 0.00040 0.00000 0.00802 0.01093 + 0.41039 0.13543 0.07654 0.01929 0.00042 0.00000 0.00782 0.01057 + 0.39374 0.12894 0.06894 0.01835 0.00046 0.00000 0.00741 0.00984 + 0.37993 0.12362 0.06298 0.01757 0.00048 0.00005 0.00707 0.00926 + 0.36504 0.11794 0.05713 0.01674 0.00049 0.00010 0.00671 0.00865 + 0.35018 0.11233 0.05186 0.01592 0.00051 0.00014 0.00636 0.00807 + 0.33723 0.10749 0.04768 0.01521 0.00051 0.00017 0.00605 0.00757 + 0.32467 0.10284 0.04394 0.01453 0.00052 0.00019 0.00576 0.00711 + 0.31461 0.09915 0.04116 0.01399 0.00052 0.00021 0.00553 0.00675 + 0.30284 0.09486 0.03812 0.01336 0.00051 0.00023 0.00526 0.00634 + 0.29281 0.09124 0.03570 0.01283 0.00051 0.00024 0.00504 0.00600 + 0.28392 0.08805 0.03368 0.01236 0.00051 0.00025 0.00484 0.00571 + 0.27304 0.08417 0.03134 0.01180 0.00050 0.00026 0.00461 0.00536 + 0.26320 0.08070 0.02935 0.01129 0.00049 0.00027 0.00439 0.00505 + 0.25432 0.07758 0.02765 0.01083 0.00048 0.00027 0.00420 0.00478 + 0.24575 0.07460 0.02608 0.01040 0.00048 0.00028 0.00402 0.00453 + 0.23766 0.07180 0.02467 0.00999 0.00047 0.00028 0.00386 0.00429 + 0.23025 0.06925 0.02342 0.00962 0.00046 0.00028 0.00370 0.00408 + 0.22349 0.06694 0.02233 0.00928 0.00045 0.00028 0.00357 0.00390 + 0.21690 0.06470 0.02130 0.00896 0.00044 0.00028 0.00344 0.00372 + 0.21062 0.06258 0.02034 0.00865 0.00043 0.00028 0.00331 0.00355 + 0.20482 0.06063 0.01949 0.00837 0.00043 0.00028 0.00320 0.00340 + 0.19948 0.05884 0.01872 0.00811 0.00042 0.00028 0.00309 0.00327 + 0.19424 0.05709 0.01799 0.00785 0.00041 0.00028 0.00299 0.00314 + 0.18921 0.05543 0.01730 0.00761 0.00040 0.00027 0.00289 0.00301 + 0.18453 0.05388 0.01668 0.00739 0.00040 0.00027 0.00280 0.00290 + 0.18021 0.05246 0.01611 0.00719 0.00039 0.00027 0.00272 0.00280 + 0.17593 0.05106 0.01556 0.00698 0.00038 0.00027 0.00264 0.00270 + 0.51918 0.17490 0.13387 0.02446 0.00000 0.00000 0.00934 0.01267 + 0.50277 0.16820 0.12099 0.02353 0.00000 0.00000 0.00897 0.01196 + 0.47948 0.15883 0.10485 0.02222 0.00000 0.00000 0.00845 0.01099 + 0.46323 0.15237 0.09457 0.02131 0.00006 0.00000 0.00808 0.01034 + 0.44674 0.14589 0.08515 0.02039 0.00012 0.00000 0.00771 0.00970 + 0.43299 0.14055 0.07805 0.01962 0.00016 0.00000 0.00740 0.00918 + 0.42022 0.13563 0.07200 0.01892 0.00020 0.00000 0.00712 0.00871 + 0.40709 0.13062 0.06629 0.01820 0.00023 0.00000 0.00683 0.00825 + 0.39602 0.12642 0.06185 0.01760 0.00025 0.00000 0.00659 0.00786 + 0.38563 0.12252 0.05796 0.01704 0.00027 0.00000 0.00637 0.00751 + 0.37760 0.11952 0.05513 0.01660 0.00028 0.00000 0.00620 0.00725 + 0.36106 0.11339 0.04973 0.01572 0.00031 0.00000 0.00585 0.00672 + 0.34739 0.10838 0.04550 0.01500 0.00032 0.00003 0.00556 0.00629 + 0.33272 0.10306 0.04135 0.01423 0.00033 0.00007 0.00526 0.00586 + 0.31814 0.09783 0.03761 0.01347 0.00034 0.00009 0.00497 0.00543 + 0.30550 0.09333 0.03464 0.01283 0.00034 0.00012 0.00471 0.00508 + 0.29328 0.08903 0.03198 0.01221 0.00035 0.00013 0.00447 0.00475 + 0.28352 0.08562 0.02999 0.01172 0.00035 0.00014 0.00428 0.00450 + 0.27215 0.08168 0.02782 0.01115 0.00035 0.00016 0.00406 0.00421 + 0.26250 0.07835 0.02609 0.01067 0.00034 0.00017 0.00388 0.00397 + 0.25396 0.07544 0.02463 0.01025 0.00034 0.00017 0.00372 0.00377 + 0.24355 0.07191 0.02295 0.00975 0.00034 0.00018 0.00353 0.00352 + 0.23417 0.06876 0.02151 0.00930 0.00033 0.00018 0.00336 0.00331 + 0.22573 0.06594 0.02028 0.00890 0.00033 0.00019 0.00321 0.00312 + 0.21762 0.06325 0.01914 0.00851 0.00032 0.00019 0.00306 0.00295 + 0.20997 0.06073 0.01811 0.00816 0.00031 0.00019 0.00293 0.00279 + 0.20299 0.05844 0.01720 0.00783 0.00031 0.00019 0.00281 0.00265 + 0.19664 0.05638 0.01640 0.00754 0.00030 0.00019 0.00270 0.00252 + 0.19047 0.05438 0.01564 0.00726 0.00030 0.00019 0.00259 0.00240 + 0.18459 0.05249 0.01494 0.00699 0.00029 0.00019 0.00249 0.00229 + 0.17918 0.05075 0.01431 0.00675 0.00029 0.00019 0.00240 0.00219 + 0.17422 0.04917 0.01375 0.00652 0.00028 0.00019 0.00232 0.00209 + 0.16935 0.04763 0.01320 0.00631 0.00028 0.00019 0.00224 0.00201 + 0.16469 0.04615 0.01270 0.00610 0.00027 0.00019 0.00216 0.00192 + 0.16036 0.04479 0.01223 0.00591 0.00027 0.00018 0.00209 0.00185 + 0.15637 0.04354 0.01181 0.00574 0.00026 0.00018 0.00203 0.00178 + 0.15243 0.04231 0.01140 0.00557 0.00026 0.00018 0.00197 0.00171 + 0.48578 0.15684 0.09513 0.02157 0.00000 0.00000 0.00761 0.00873 + 0.46909 0.15038 0.08590 0.02066 0.00000 0.00000 0.00728 0.00820 + 0.44554 0.14139 0.07442 0.01938 0.00000 0.00000 0.00681 0.00749 + 0.42918 0.13523 0.06715 0.01850 0.00004 0.00000 0.00649 0.00701 + 0.41266 0.12907 0.06051 0.01763 0.00008 0.00000 0.00617 0.00655 + 0.39895 0.12402 0.05552 0.01691 0.00011 0.00000 0.00590 0.00618 + 0.38625 0.11937 0.05129 0.01624 0.00013 0.00000 0.00566 0.00584 + 0.37324 0.11466 0.04730 0.01557 0.00015 0.00000 0.00542 0.00551 + 0.36231 0.11073 0.04419 0.01501 0.00017 0.00000 0.00521 0.00524 + 0.35208 0.10708 0.04148 0.01449 0.00018 0.00000 0.00502 0.00499 + 0.34419 0.10428 0.03950 0.01409 0.00019 0.00000 0.00488 0.00480 + 0.32800 0.09858 0.03573 0.01328 0.00020 0.00000 0.00458 0.00443 + 0.31468 0.09395 0.03277 0.01262 0.00021 0.00002 0.00435 0.00413 + 0.30044 0.08904 0.02986 0.01192 0.00022 0.00005 0.00410 0.00383 + 0.28635 0.08423 0.02723 0.01124 0.00023 0.00006 0.00385 0.00354 + 0.27418 0.08012 0.02513 0.01066 0.00023 0.00008 0.00365 0.00330 + 0.26246 0.07620 0.02325 0.01011 0.00023 0.00009 0.00345 0.00307 + 0.25314 0.07310 0.02184 0.00967 0.00023 0.00010 0.00329 0.00290 + 0.24231 0.06953 0.02030 0.00917 0.00023 0.00011 0.00312 0.00270 + 0.23314 0.06653 0.01906 0.00875 0.00023 0.00011 0.00297 0.00254 + 0.22506 0.06391 0.01801 0.00838 0.00023 0.00012 0.00284 0.00240 + 0.21524 0.06074 0.01680 0.00794 0.00023 0.00012 0.00269 0.00224 + 0.20642 0.05792 0.01576 0.00755 0.00022 0.00013 0.00255 0.00210 + 0.19851 0.05541 0.01486 0.00720 0.00022 0.00013 0.00243 0.00198 + 0.19092 0.05302 0.01404 0.00687 0.00022 0.00013 0.00231 0.00186 + 0.18380 0.05079 0.01328 0.00656 0.00021 0.00013 0.00221 0.00176 + 0.17731 0.04877 0.01262 0.00629 0.00021 0.00013 0.00211 0.00166 + 0.17142 0.04695 0.01203 0.00604 0.00020 0.00013 0.00202 0.00158 + 0.16571 0.04519 0.01147 0.00580 0.00020 0.00013 0.00194 0.00150 + 0.16029 0.04353 0.01096 0.00557 0.00020 0.00013 0.00186 0.00143 + 0.15531 0.04201 0.01049 0.00536 0.00019 0.00013 0.00179 0.00136 + 0.15075 0.04063 0.01007 0.00518 0.00019 0.00013 0.00173 0.00130 + 0.14629 0.03928 0.00967 0.00499 0.00018 0.00013 0.00167 0.00124 + 0.14202 0.03800 0.00930 0.00482 0.00018 0.00013 0.00161 0.00119 + 0.13807 0.03682 0.00895 0.00466 0.00018 0.00013 0.00155 0.00114 + 0.13443 0.03573 0.00864 0.00452 0.00017 0.00012 0.00150 0.00110 + 0.13084 0.03467 0.00834 0.00437 0.00017 0.00012 0.00145 0.00105 + 0.45024 0.13899 0.06639 0.01869 0.00000 0.00000 0.00614 0.00578 + 0.43354 0.13288 0.05999 0.01782 0.00000 0.00000 0.00585 0.00540 + 0.41009 0.12440 0.05207 0.01662 0.00000 0.00000 0.00544 0.00490 + 0.39389 0.11862 0.04707 0.01580 0.00003 0.00000 0.00517 0.00457 + 0.37759 0.11287 0.04253 0.01499 0.00005 0.00000 0.00489 0.00425 + 0.36411 0.10816 0.03911 0.01432 0.00007 0.00000 0.00467 0.00399 + 0.35168 0.10385 0.03622 0.01371 0.00009 0.00000 0.00446 0.00376 + 0.33898 0.09948 0.03349 0.01310 0.00010 0.00000 0.00425 0.00354 + 0.32834 0.09586 0.03137 0.01259 0.00011 0.00000 0.00408 0.00335 + 0.31842 0.09250 0.02951 0.01212 0.00012 0.00000 0.00393 0.00318 + 0.31078 0.08993 0.02815 0.01176 0.00013 0.00000 0.00381 0.00306 + 0.29516 0.08472 0.02556 0.01103 0.00014 0.00000 0.00356 0.00281 + 0.28236 0.08049 0.02351 0.01045 0.00014 0.00002 0.00337 0.00261 + 0.26874 0.07603 0.02150 0.00983 0.00015 0.00003 0.00316 0.00241 + 0.25531 0.07169 0.01966 0.00923 0.00015 0.00004 0.00296 0.00222 + 0.24375 0.06798 0.01820 0.00872 0.00015 0.00005 0.00280 0.00206 + 0.23267 0.06446 0.01687 0.00823 0.00016 0.00006 0.00264 0.00191 + 0.22388 0.06169 0.01588 0.00785 0.00016 0.00007 0.00251 0.00180 + 0.21370 0.05851 0.01478 0.00742 0.00016 0.00007 0.00237 0.00167 + 0.20511 0.05584 0.01389 0.00706 0.00015 0.00008 0.00225 0.00157 + 0.19757 0.05352 0.01315 0.00674 0.00015 0.00008 0.00215 0.00148 + 0.18842 0.05072 0.01227 0.00637 0.00015 0.00008 0.00203 0.00137 + 0.18024 0.04823 0.01152 0.00603 0.00015 0.00009 0.00192 0.00128 + 0.17291 0.04603 0.01087 0.00574 0.00015 0.00009 0.00182 0.00120 + 0.16591 0.04393 0.01027 0.00546 0.00014 0.00009 0.00173 0.00113 + 0.15936 0.04198 0.00972 0.00520 0.00014 0.00009 0.00165 0.00106 + 0.15340 0.04022 0.00923 0.00497 0.00014 0.00009 0.00157 0.00100 + 0.14801 0.03864 0.00880 0.00476 0.00014 0.00009 0.00151 0.00095 + 0.14280 0.03711 0.00839 0.00456 0.00013 0.00009 0.00144 0.00090 + 0.13786 0.03568 0.00801 0.00437 0.00013 0.00009 0.00138 0.00086 + 0.13333 0.03437 0.00766 0.00420 0.00013 0.00009 0.00133 0.00082 + 0.12919 0.03318 0.00735 0.00404 0.00013 0.00009 0.00128 0.00078 + 0.12516 0.03202 0.00706 0.00389 0.00012 0.00009 0.00123 0.00074 + 0.12130 0.03092 0.00678 0.00375 0.00012 0.00009 0.00118 0.00071 + 0.11774 0.02991 0.00652 0.00362 0.00012 0.00009 0.00114 0.00068 + 0.11446 0.02899 0.00629 0.00350 0.00012 0.00008 0.00110 0.00065 + 0.11124 0.02808 0.00607 0.00338 0.00011 0.00008 0.00107 0.00063 + 0.41326 0.12168 0.04549 0.01588 0.00000 0.00000 0.00490 0.00365 + 0.39680 0.11598 0.04122 0.01508 0.00000 0.00000 0.00465 0.00340 + 0.37380 0.10812 0.03594 0.01399 0.00000 0.00000 0.00430 0.00307 + 0.35798 0.10278 0.03262 0.01324 0.00002 0.00000 0.00407 0.00285 + 0.34213 0.09749 0.02959 0.01251 0.00003 0.00000 0.00384 0.00263 + 0.32908 0.09317 0.02732 0.01191 0.00005 0.00000 0.00365 0.00247 + 0.31707 0.08923 0.02539 0.01137 0.00006 0.00000 0.00348 0.00232 + 0.30485 0.08526 0.02357 0.01082 0.00007 0.00000 0.00331 0.00217 + 0.29465 0.08196 0.02215 0.01037 0.00007 0.00000 0.00317 0.00205 + 0.28515 0.07892 0.02090 0.00995 0.00008 0.00000 0.00304 0.00194 + 0.27787 0.07660 0.01999 0.00964 0.00008 0.00000 0.00294 0.00186 + 0.26300 0.07191 0.01823 0.00900 0.00009 0.00000 0.00274 0.00170 + 0.25087 0.06811 0.01683 0.00849 0.00009 0.00001 0.00258 0.00158 + 0.23801 0.06413 0.01545 0.00795 0.00010 0.00002 0.00242 0.00145 + 0.22538 0.06026 0.01418 0.00744 0.00010 0.00003 0.00226 0.00133 + 0.21456 0.05697 0.01315 0.00700 0.00010 0.00004 0.00212 0.00123 + 0.20421 0.05386 0.01222 0.00659 0.00010 0.00004 0.00200 0.00114 + 0.19603 0.05142 0.01152 0.00627 0.00010 0.00005 0.00190 0.00107 + 0.18659 0.04862 0.01074 0.00590 0.00010 0.00005 0.00179 0.00099 + 0.17866 0.04629 0.01011 0.00559 0.00010 0.00005 0.00169 0.00092 + 0.17170 0.04426 0.00957 0.00533 0.00010 0.00006 0.00161 0.00087 + 0.16329 0.04182 0.00894 0.00501 0.00010 0.00006 0.00152 0.00081 + 0.15579 0.03966 0.00840 0.00474 0.00010 0.00006 0.00143 0.00075 + 0.14911 0.03776 0.00793 0.00449 0.00010 0.00006 0.00136 0.00070 + 0.14273 0.03595 0.00749 0.00426 0.00010 0.00006 0.00129 0.00066 + 0.13677 0.03427 0.00708 0.00405 0.00009 0.00006 0.00122 0.00062 + 0.13138 0.03276 0.00673 0.00385 0.00009 0.00006 0.00116 0.00058 + 0.12651 0.03141 0.00641 0.00368 0.00009 0.00006 0.00111 0.00055 + 0.12181 0.03010 0.00611 0.00352 0.00009 0.00006 0.00106 0.00052 + 0.11737 0.02888 0.00583 0.00336 0.00009 0.00006 0.00101 0.00050 + 0.11330 0.02777 0.00557 0.00323 0.00009 0.00006 0.00097 0.00047 + 0.10960 0.02676 0.00534 0.00310 0.00008 0.00006 0.00093 0.00045 + 0.10599 0.02578 0.00513 0.00298 0.00008 0.00006 0.00090 0.00043 + 0.10255 0.02485 0.00492 0.00286 0.00008 0.00006 0.00086 0.00041 + 0.09938 0.02400 0.00473 0.00276 0.00008 0.00006 0.00083 0.00039 + 0.09646 0.02322 0.00456 0.00266 0.00008 0.00006 0.00080 0.00037 + 0.09361 0.02246 0.00439 0.00257 0.00008 0.00006 0.00077 0.00036 + 0.37554 0.10518 0.03056 0.01323 0.00000 0.00000 0.00386 0.00218 + 0.35956 0.09996 0.02783 0.01251 0.00000 0.00000 0.00365 0.00202 + 0.33732 0.09278 0.02447 0.01153 0.00000 0.00000 0.00336 0.00181 + 0.32210 0.08793 0.02234 0.01088 0.00001 0.00000 0.00317 0.00167 + 0.30690 0.08314 0.02039 0.01023 0.00002 0.00000 0.00298 0.00154 + 0.29443 0.07924 0.01893 0.00971 0.00003 0.00000 0.00282 0.00144 + 0.28300 0.07570 0.01768 0.00924 0.00004 0.00000 0.00268 0.00135 + 0.27140 0.07214 0.01649 0.00876 0.00004 0.00000 0.00254 0.00126 + 0.26174 0.06919 0.01556 0.00837 0.00005 0.00000 0.00243 0.00119 + 0.25278 0.06648 0.01474 0.00802 0.00005 0.00000 0.00233 0.00112 + 0.24591 0.06442 0.01413 0.00775 0.00005 0.00000 0.00225 0.00107 + 0.23196 0.06025 0.01296 0.00720 0.00006 0.00000 0.00209 0.00098 + 0.22062 0.05690 0.01201 0.00677 0.00006 0.00001 0.00196 0.00090 + 0.20864 0.05339 0.01107 0.00631 0.00007 0.00001 0.00183 0.00083 + 0.19692 0.05000 0.01019 0.00588 0.00007 0.00002 0.00170 0.00075 + 0.18692 0.04713 0.00948 0.00551 0.00007 0.00003 0.00160 0.00070 + 0.17738 0.04442 0.00883 0.00517 0.00007 0.00003 0.00150 0.00064 + 0.16987 0.04230 0.00834 0.00490 0.00007 0.00003 0.00142 0.00060 + 0.16123 0.03988 0.00778 0.00460 0.00007 0.00003 0.00133 0.00056 + 0.15399 0.03787 0.00733 0.00435 0.00007 0.00004 0.00126 0.00052 + 0.14766 0.03612 0.00694 0.00413 0.00007 0.00004 0.00120 0.00049 + 0.14003 0.03403 0.00649 0.00387 0.00007 0.00004 0.00112 0.00045 + 0.13325 0.03219 0.00609 0.00364 0.00007 0.00004 0.00106 0.00042 + 0.12722 0.03057 0.00575 0.00345 0.00006 0.00004 0.00100 0.00039 + 0.12149 0.02903 0.00543 0.00326 0.00006 0.00004 0.00094 0.00037 + 0.11615 0.02761 0.00513 0.00309 0.00006 0.00004 0.00089 0.00034 + 0.11133 0.02633 0.00487 0.00293 0.00006 0.00004 0.00085 0.00032 + 0.10699 0.02519 0.00464 0.00279 0.00006 0.00004 0.00081 0.00031 + 0.10280 0.02409 0.00442 0.00266 0.00006 0.00004 0.00077 0.00029 + 0.09886 0.02307 0.00421 0.00254 0.00006 0.00004 0.00074 0.00027 + 0.09526 0.02214 0.00402 0.00243 0.00006 0.00004 0.00070 0.00026 + 0.09198 0.02129 0.00386 0.00233 0.00006 0.00004 0.00068 0.00025 + 0.08879 0.02048 0.00369 0.00223 0.00005 0.00004 0.00065 0.00024 + 0.08577 0.01970 0.00354 0.00214 0.00005 0.00004 0.00062 0.00023 + 0.08298 0.01900 0.00340 0.00206 0.00005 0.00004 0.00060 0.00022 + 0.08042 0.01835 0.00328 0.00198 0.00005 0.00004 0.00058 0.00021 + 0.07792 0.01772 0.00315 0.00191 0.00005 0.00004 0.00055 0.00020 + 0.33773 0.08971 0.02011 0.01077 0.00000 0.00000 0.00300 0.00121 + 0.32242 0.08500 0.01847 0.01015 0.00000 0.00000 0.00283 0.00112 + 0.30121 0.07855 0.01643 0.00931 0.00000 0.00000 0.00259 0.00100 + 0.28677 0.07422 0.01513 0.00874 0.00001 0.00000 0.00243 0.00092 + 0.27240 0.06995 0.01393 0.00819 0.00001 0.00000 0.00228 0.00084 + 0.26065 0.06649 0.01301 0.00775 0.00002 0.00000 0.00215 0.00078 + 0.24991 0.06335 0.01223 0.00734 0.00002 0.00000 0.00204 0.00073 + 0.23905 0.06021 0.01147 0.00695 0.00003 0.00000 0.00193 0.00068 + 0.23003 0.05762 0.01088 0.00662 0.00003 0.00000 0.00184 0.00064 + 0.22168 0.05524 0.01035 0.00632 0.00003 0.00000 0.00176 0.00060 + 0.21531 0.05343 0.00995 0.00609 0.00004 0.00000 0.00169 0.00058 + 0.20239 0.04980 0.00918 0.00564 0.00004 0.00000 0.00157 0.00052 + 0.19192 0.04688 0.00854 0.00528 0.00004 0.00000 0.00147 0.00048 + 0.18091 0.04385 0.00790 0.00491 0.00004 0.00001 0.00137 0.00044 + 0.17018 0.04092 0.00730 0.00455 0.00004 0.00001 0.00127 0.00040 + 0.16106 0.03845 0.00681 0.00425 0.00004 0.00002 0.00118 0.00037 + 0.15239 0.03613 0.00635 0.00397 0.00005 0.00002 0.00111 0.00034 + 0.14559 0.03432 0.00600 0.00375 0.00005 0.00002 0.00105 0.00032 + 0.13779 0.03226 0.00561 0.00351 0.00005 0.00002 0.00098 0.00030 + 0.13126 0.03055 0.00528 0.00331 0.00005 0.00002 0.00092 0.00028 + 0.12558 0.02907 0.00501 0.00313 0.00004 0.00003 0.00087 0.00026 + 0.11875 0.02731 0.00468 0.00293 0.00004 0.00003 0.00082 0.00024 + 0.11270 0.02576 0.00439 0.00275 0.00004 0.00003 0.00077 0.00022 + 0.10734 0.02440 0.00414 0.00259 0.00004 0.00003 0.00072 0.00021 + 0.10225 0.02311 0.00391 0.00244 0.00004 0.00003 0.00068 0.00020 + 0.09753 0.02193 0.00369 0.00230 0.00004 0.00003 0.00065 0.00018 + 0.09327 0.02087 0.00350 0.00218 0.00004 0.00003 0.00061 0.00017 + 0.08945 0.01992 0.00333 0.00208 0.00004 0.00003 0.00058 0.00016 + 0.08577 0.01901 0.00317 0.00197 0.00004 0.00003 0.00055 0.00015 + 0.08231 0.01816 0.00302 0.00188 0.00004 0.00003 0.00053 0.00015 + 0.07917 0.01740 0.00288 0.00179 0.00004 0.00003 0.00050 0.00014 + 0.07631 0.01670 0.00276 0.00172 0.00004 0.00003 0.00048 0.00013 + 0.07353 0.01603 0.00264 0.00164 0.00004 0.00003 0.00046 0.00013 + 0.07090 0.01540 0.00253 0.00157 0.00003 0.00003 0.00044 0.00012 + 0.06848 0.01482 0.00242 0.00151 0.00003 0.00003 0.00042 0.00012 + 0.06627 0.01429 0.00233 0.00145 0.00003 0.00003 0.00041 0.00011 + 0.06411 0.01378 0.00224 0.00139 0.00003 0.00002 0.00039 0.00011 + 0.30037 0.07542 0.01297 0.00857 0.00000 0.00000 0.00230 0.00061 + 0.28591 0.07124 0.01205 0.00804 0.00000 0.00000 0.00216 0.00057 + 0.26597 0.06555 0.01091 0.00733 0.00000 0.00000 0.00197 0.00050 + 0.25245 0.06173 0.01015 0.00686 0.00000 0.00000 0.00184 0.00046 + 0.23905 0.05799 0.00944 0.00640 0.00001 0.00000 0.00172 0.00042 + 0.22813 0.05498 0.00890 0.00604 0.00001 0.00000 0.00162 0.00039 + 0.21818 0.05225 0.00842 0.00571 0.00002 0.00000 0.00153 0.00037 + 0.20815 0.04952 0.00795 0.00538 0.00002 0.00000 0.00144 0.00034 + 0.19985 0.04728 0.00758 0.00511 0.00002 0.00000 0.00137 0.00032 + 0.19218 0.04522 0.00724 0.00487 0.00002 0.00000 0.00131 0.00030 + 0.18634 0.04367 0.00698 0.00468 0.00002 0.00000 0.00126 0.00029 + 0.17454 0.04055 0.00648 0.00431 0.00003 0.00000 0.00116 0.00026 + 0.16502 0.03806 0.00606 0.00402 0.00003 0.00000 0.00108 0.00024 + 0.15503 0.03547 0.00562 0.00372 0.00003 0.00001 0.00100 0.00022 + 0.14535 0.03299 0.00521 0.00344 0.00003 0.00001 0.00093 0.00020 + 0.13714 0.03090 0.00486 0.00320 0.00003 0.00001 0.00086 0.00019 + 0.12937 0.02894 0.00454 0.00298 0.00003 0.00001 0.00081 0.00017 + 0.12329 0.02742 0.00429 0.00281 0.00003 0.00001 0.00076 0.00016 + 0.11634 0.02570 0.00401 0.00262 0.00003 0.00002 0.00071 0.00015 + 0.11055 0.02427 0.00378 0.00246 0.00003 0.00002 0.00067 0.00014 + 0.10551 0.02304 0.00358 0.00232 0.00003 0.00002 0.00063 0.00013 + 0.09948 0.02158 0.00335 0.00216 0.00003 0.00002 0.00059 0.00012 + 0.09416 0.02030 0.00314 0.00202 0.00003 0.00002 0.00055 0.00011 + 0.08945 0.01917 0.00296 0.00190 0.00003 0.00002 0.00052 0.00011 + 0.08500 0.01812 0.00279 0.00179 0.00003 0.00002 0.00049 0.00010 + 0.08088 0.01715 0.00263 0.00168 0.00003 0.00002 0.00046 0.00009 + 0.07718 0.01628 0.00249 0.00159 0.00003 0.00002 0.00043 0.00009 + 0.07385 0.01550 0.00237 0.00151 0.00003 0.00002 0.00041 0.00008 + 0.07067 0.01477 0.00225 0.00143 0.00002 0.00002 0.00039 0.00008 + 0.06769 0.01408 0.00214 0.00136 0.00002 0.00002 0.00037 0.00008 + 0.06497 0.01346 0.00204 0.00129 0.00002 0.00002 0.00035 0.00007 + 0.06251 0.01290 0.00195 0.00123 0.00002 0.00002 0.00034 0.00007 + 0.06013 0.01236 0.00186 0.00118 0.00002 0.00002 0.00032 0.00007 + 0.05787 0.01185 0.00178 0.00113 0.00002 0.00002 0.00031 0.00006 + 0.05581 0.01138 0.00171 0.00108 0.00002 0.00002 0.00030 0.00006 + 0.05392 0.01096 0.00164 0.00103 0.00002 0.00002 0.00028 0.00006 + 0.05207 0.01055 0.00158 0.00099 0.00002 0.00002 0.00027 0.00006 + 0.26400 0.06243 0.00818 0.00665 0.00000 0.00000 0.00173 0.00028 + 0.25054 0.05879 0.00774 0.00621 0.00000 0.00000 0.00162 0.00025 + 0.23205 0.05385 0.00715 0.00564 0.00000 0.00000 0.00147 0.00022 + 0.21957 0.05055 0.00675 0.00525 0.00000 0.00000 0.00137 0.00021 + 0.20726 0.04733 0.00636 0.00488 0.00001 0.00000 0.00128 0.00019 + 0.19725 0.04474 0.00605 0.00459 0.00001 0.00000 0.00120 0.00018 + 0.18817 0.04241 0.00577 0.00432 0.00001 0.00000 0.00113 0.00017 + 0.17904 0.04009 0.00549 0.00406 0.00001 0.00000 0.00106 0.00015 + 0.17150 0.03818 0.00526 0.00385 0.00001 0.00000 0.00101 0.00015 + 0.16456 0.03644 0.00504 0.00365 0.00001 0.00000 0.00096 0.00014 + 0.15928 0.03512 0.00488 0.00351 0.00001 0.00000 0.00092 0.00013 + 0.14865 0.03249 0.00455 0.00322 0.00002 0.00000 0.00085 0.00012 + 0.14011 0.03040 0.00427 0.00299 0.00002 0.00000 0.00079 0.00011 + 0.13119 0.02823 0.00397 0.00276 0.00002 0.00000 0.00073 0.00010 + 0.12257 0.02616 0.00369 0.00254 0.00002 0.00001 0.00067 0.00010 + 0.11529 0.02443 0.00345 0.00235 0.00002 0.00001 0.00062 0.00009 + 0.10842 0.02281 0.00322 0.00218 0.00002 0.00001 0.00058 0.00008 + 0.10307 0.02155 0.00305 0.00205 0.00002 0.00001 0.00054 0.00008 + 0.09696 0.02014 0.00285 0.00190 0.00002 0.00001 0.00051 0.00007 + 0.09189 0.01897 0.00268 0.00178 0.00002 0.00001 0.00047 0.00007 + 0.08750 0.01796 0.00254 0.00168 0.00002 0.00001 0.00045 0.00007 + 0.08225 0.01677 0.00237 0.00156 0.00002 0.00001 0.00042 0.00006 + 0.07763 0.01573 0.00222 0.00145 0.00002 0.00001 0.00039 0.00006 + 0.07356 0.01482 0.00209 0.00136 0.00002 0.00001 0.00036 0.00005 + 0.06972 0.01396 0.00197 0.00127 0.00002 0.00001 0.00034 0.00005 + 0.06618 0.01318 0.00185 0.00120 0.00002 0.00001 0.00032 0.00005 + 0.06300 0.01248 0.00175 0.00113 0.00002 0.00001 0.00030 0.00005 + 0.06016 0.01186 0.00166 0.00107 0.00002 0.00001 0.00029 0.00004 + 0.05745 0.01128 0.00158 0.00101 0.00002 0.00001 0.00027 0.00004 + 0.05490 0.01073 0.00150 0.00096 0.00002 0.00001 0.00026 0.00004 + 0.05260 0.01023 0.00143 0.00091 0.00002 0.00001 0.00025 0.00004 + 0.05051 0.00979 0.00136 0.00086 0.00001 0.00001 0.00023 0.00004 + 0.04850 0.00936 0.00130 0.00082 0.00001 0.00001 0.00022 0.00004 + 0.04659 0.00896 0.00124 0.00079 0.00001 0.00001 0.00021 0.00003 + 0.04485 0.00859 0.00119 0.00075 0.00001 0.00001 0.00020 0.00003 + 0.04326 0.00826 0.00114 0.00072 0.00001 0.00001 0.00020 0.00003 + 0.04171 0.00793 0.00109 0.00069 0.00001 0.00001 0.00019 0.00003 + 0.22909 0.05081 0.00505 0.00502 0.00000 0.00000 0.00128 0.00010 + 0.21674 0.04770 0.00488 0.00467 0.00000 0.00000 0.00119 0.00010 + 0.19985 0.04349 0.00464 0.00421 0.00000 0.00000 0.00108 0.00009 + 0.18851 0.04070 0.00445 0.00391 0.00000 0.00000 0.00100 0.00008 + 0.17735 0.03798 0.00426 0.00362 0.00000 0.00000 0.00093 0.00008 + 0.16832 0.03579 0.00409 0.00339 0.00001 0.00000 0.00087 0.00007 + 0.16014 0.03384 0.00393 0.00319 0.00001 0.00000 0.00082 0.00007 + 0.15195 0.03189 0.00376 0.00298 0.00001 0.00000 0.00077 0.00007 + 0.14521 0.03030 0.00362 0.00282 0.00001 0.00000 0.00073 0.00006 + 0.13902 0.02885 0.00349 0.00267 0.00001 0.00000 0.00069 0.00006 + 0.13433 0.02776 0.00339 0.00256 0.00001 0.00000 0.00066 0.00006 + 0.12489 0.02558 0.00317 0.00234 0.00001 0.00000 0.00060 0.00005 + 0.11735 0.02385 0.00298 0.00216 0.00001 0.00000 0.00056 0.00005 + 0.10949 0.02207 0.00278 0.00199 0.00001 0.00000 0.00052 0.00005 + 0.10193 0.02038 0.00259 0.00182 0.00001 0.00000 0.00047 0.00005 + 0.09557 0.01897 0.00242 0.00168 0.00001 0.00000 0.00044 0.00004 + 0.08960 0.01765 0.00226 0.00155 0.00001 0.00001 0.00041 0.00004 + 0.08495 0.01664 0.00214 0.00145 0.00001 0.00001 0.00038 0.00004 + 0.07967 0.01549 0.00200 0.00134 0.00001 0.00001 0.00035 0.00004 + 0.07530 0.01455 0.00188 0.00126 0.00001 0.00001 0.00033 0.00004 + 0.07152 0.01375 0.00178 0.00118 0.00001 0.00001 0.00031 0.00003 + 0.06703 0.01279 0.00165 0.00109 0.00001 0.00001 0.00029 0.00003 + 0.06308 0.01196 0.00155 0.00101 0.00001 0.00001 0.00027 0.00003 + 0.05962 0.01124 0.00145 0.00095 0.00001 0.00001 0.00025 0.00003 + 0.05636 0.01056 0.00137 0.00088 0.00001 0.00001 0.00023 0.00003 + 0.05336 0.00995 0.00129 0.00083 0.00001 0.00001 0.00022 0.00003 + 0.05068 0.00940 0.00121 0.00078 0.00001 0.00001 0.00021 0.00003 + 0.04828 0.00891 0.00115 0.00073 0.00001 0.00001 0.00020 0.00003 + 0.04600 0.00845 0.00109 0.00069 0.00001 0.00001 0.00018 0.00002 + 0.04387 0.00802 0.00103 0.00065 0.00001 0.00001 0.00017 0.00002 + 0.04194 0.00763 0.00098 0.00062 0.00001 0.00001 0.00017 0.00002 + 0.04020 0.00729 0.00093 0.00059 0.00001 0.00001 0.00016 0.00002 + 0.03852 0.00695 0.00089 0.00056 0.00001 0.00001 0.00015 0.00002 + 0.03694 0.00664 0.00085 0.00053 0.00001 0.00001 0.00014 0.00002 + 0.03550 0.00636 0.00081 0.00051 0.00001 0.00001 0.00014 0.00002 + 0.03418 0.00610 0.00078 0.00049 0.00001 0.00001 0.00013 0.00002 + 0.03290 0.00585 0.00074 0.00046 0.00001 0.00001 0.00013 0.00002 + 0.16510 0.03176 0.00181 0.00260 0.00000 0.00000 0.00066 0.00002 + 0.15519 0.02962 0.00187 0.00241 0.00000 0.00000 0.00061 0.00002 + 0.14177 0.02675 0.00191 0.00215 0.00000 0.00000 0.00054 0.00002 + 0.13283 0.02486 0.00191 0.00198 0.00000 0.00000 0.00050 0.00002 + 0.12411 0.02303 0.00188 0.00182 0.00000 0.00000 0.00046 0.00002 + 0.11710 0.02158 0.00184 0.00169 0.00000 0.00000 0.00043 0.00002 + 0.11080 0.02028 0.00179 0.00158 0.00000 0.00000 0.00040 0.00002 + 0.10452 0.01900 0.00174 0.00147 0.00000 0.00000 0.00037 0.00002 + 0.09939 0.01796 0.00169 0.00138 0.00000 0.00000 0.00035 0.00002 + 0.09470 0.01702 0.00163 0.00130 0.00000 0.00000 0.00033 0.00002 + 0.09117 0.01631 0.00159 0.00124 0.00000 0.00000 0.00032 0.00002 + 0.08410 0.01491 0.00150 0.00112 0.00000 0.00000 0.00029 0.00002 + 0.07850 0.01381 0.00141 0.00103 0.00000 0.00000 0.00027 0.00002 + 0.07271 0.01268 0.00132 0.00094 0.00000 0.00000 0.00024 0.00002 + 0.06718 0.01162 0.00122 0.00085 0.00000 0.00000 0.00022 0.00002 + 0.06257 0.01074 0.00114 0.00078 0.00000 0.00000 0.00020 0.00002 + 0.05827 0.00993 0.00107 0.00072 0.00000 0.00000 0.00019 0.00002 + 0.05494 0.00930 0.00101 0.00067 0.00000 0.00000 0.00017 0.00002 + 0.05119 0.00861 0.00094 0.00061 0.00000 0.00000 0.00016 0.00002 + 0.04811 0.00804 0.00088 0.00057 0.00000 0.00000 0.00015 0.00002 + 0.04546 0.00755 0.00083 0.00053 0.00000 0.00000 0.00014 0.00002 + 0.04233 0.00698 0.00077 0.00049 0.00000 0.00000 0.00013 0.00002 + 0.03960 0.00649 0.00071 0.00045 0.00000 0.00000 0.00012 0.00002 + 0.03721 0.00606 0.00067 0.00042 0.00000 0.00000 0.00011 0.00002 + 0.03498 0.00566 0.00062 0.00039 0.00000 0.00000 0.00010 0.00002 + 0.03294 0.00530 0.00059 0.00036 0.00000 0.00000 0.00010 0.00002 + 0.03113 0.00499 0.00055 0.00034 0.00000 0.00000 0.00009 0.00001 + 0.02952 0.00470 0.00052 0.00032 0.00000 0.00000 0.00008 0.00001 + 0.02800 0.00444 0.00049 0.00030 0.00000 0.00000 0.00008 0.00001 + 0.02658 0.00419 0.00046 0.00028 0.00000 0.00000 0.00007 0.00001 + 0.02530 0.00397 0.00044 0.00026 0.00000 0.00000 0.00007 0.00001 + 0.02415 0.00378 0.00042 0.00025 0.00000 0.00000 0.00007 0.00001 + 0.02305 0.00359 0.00039 0.00024 0.00000 0.00000 0.00006 0.00001 + 0.02202 0.00342 0.00038 0.00022 0.00000 0.00000 0.00006 0.00001 + 0.02108 0.00326 0.00036 0.00021 0.00000 0.00000 0.00006 0.00001 + 0.02022 0.00311 0.00034 0.00020 0.00000 0.00000 0.00005 0.00001 + 0.01940 0.00298 0.00033 0.00019 0.00000 0.00000 0.00005 0.00001 + 0.11086 0.01806 0.00060 0.00117 0.00000 0.00000 0.00030 0.00004 + 0.10348 0.01672 0.00069 0.00107 0.00000 0.00000 0.00028 0.00004 + 0.09357 0.01495 0.00077 0.00095 0.00000 0.00000 0.00025 0.00003 + 0.08704 0.01379 0.00079 0.00086 0.00000 0.00000 0.00022 0.00003 + 0.08072 0.01268 0.00080 0.00079 0.00000 0.00000 0.00021 0.00003 + 0.07568 0.01180 0.00079 0.00073 0.00000 0.00000 0.00019 0.00003 + 0.07117 0.01102 0.00078 0.00067 0.00000 0.00000 0.00018 0.00003 + 0.06672 0.01026 0.00076 0.00062 0.00000 0.00000 0.00016 0.00003 + 0.06310 0.00964 0.00074 0.00058 0.00000 0.00000 0.00015 0.00003 + 0.05981 0.00909 0.00072 0.00054 0.00000 0.00000 0.00014 0.00003 + 0.05734 0.00868 0.00070 0.00052 0.00000 0.00000 0.00014 0.00003 + 0.05245 0.00786 0.00066 0.00046 0.00000 0.00000 0.00012 0.00002 + 0.04860 0.00723 0.00062 0.00042 0.00000 0.00000 0.00011 0.00002 + 0.04466 0.00658 0.00058 0.00038 0.00000 0.00000 0.00010 0.00002 + 0.04093 0.00598 0.00053 0.00034 0.00000 0.00000 0.00009 0.00002 + 0.03784 0.00549 0.00050 0.00031 0.00000 0.00000 0.00008 0.00002 + 0.03498 0.00503 0.00046 0.00028 0.00000 0.00000 0.00008 0.00002 + 0.03279 0.00469 0.00043 0.00026 0.00000 0.00000 0.00007 0.00002 + 0.03033 0.00431 0.00040 0.00024 0.00000 0.00000 0.00006 0.00002 + 0.02833 0.00400 0.00037 0.00022 0.00000 0.00000 0.00006 0.00002 + 0.02662 0.00373 0.00035 0.00020 0.00000 0.00000 0.00006 0.00001 + 0.02461 0.00343 0.00032 0.00019 0.00000 0.00000 0.00005 0.00001 + 0.02287 0.00316 0.00030 0.00017 0.00000 0.00000 0.00005 0.00001 + 0.02136 0.00294 0.00028 0.00016 0.00000 0.00000 0.00004 0.00001 + 0.01996 0.00273 0.00026 0.00015 0.00000 0.00000 0.00004 0.00001 + 0.01869 0.00254 0.00024 0.00013 0.00000 0.00000 0.00004 0.00001 + 0.01756 0.00237 0.00022 0.00012 0.00000 0.00000 0.00003 0.00001 + 0.01657 0.00223 0.00021 0.00012 0.00000 0.00000 0.00003 0.00001 + 0.01563 0.00209 0.00020 0.00011 0.00000 0.00000 0.00003 0.00001 + 0.01477 0.00197 0.00019 0.00010 0.00000 0.00000 0.00003 0.00001 + 0.01399 0.00185 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 + 0.01330 0.00175 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 + 0.01264 0.00166 0.00016 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01202 0.00157 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01146 0.00149 0.00014 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01095 0.00142 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 + 0.01046 0.00135 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 + 0.06781 0.00906 0.00019 0.00043 0.00000 0.00000 0.00012 0.00004 + 0.06280 0.00832 0.00024 0.00040 0.00000 0.00000 0.00011 0.00004 + 0.05614 0.00735 0.00029 0.00034 0.00000 0.00000 0.00010 0.00004 + 0.05180 0.00672 0.00031 0.00031 0.00000 0.00000 0.00009 0.00003 + 0.04763 0.00613 0.00031 0.00028 0.00000 0.00000 0.00008 0.00003 + 0.04434 0.00566 0.00031 0.00026 0.00000 0.00000 0.00007 0.00003 + 0.04142 0.00525 0.00031 0.00024 0.00000 0.00000 0.00007 0.00003 + 0.03856 0.00486 0.00030 0.00022 0.00000 0.00000 0.00006 0.00002 + 0.03624 0.00454 0.00029 0.00020 0.00000 0.00000 0.00006 0.00002 + 0.03416 0.00425 0.00028 0.00019 0.00000 0.00000 0.00005 0.00002 + 0.03260 0.00404 0.00027 0.00018 0.00000 0.00000 0.00005 0.00002 + 0.02953 0.00362 0.00025 0.00016 0.00000 0.00000 0.00004 0.00002 + 0.02714 0.00330 0.00024 0.00014 0.00000 0.00000 0.00004 0.00002 + 0.02472 0.00298 0.00022 0.00013 0.00000 0.00000 0.00004 0.00002 + 0.02245 0.00268 0.00020 0.00011 0.00000 0.00000 0.00003 0.00002 + 0.02058 0.00244 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 + 0.01887 0.00222 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 + 0.01757 0.00206 0.00016 0.00009 0.00000 0.00000 0.00002 0.00001 + 0.01613 0.00187 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01495 0.00172 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 + 0.01396 0.00160 0.00013 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01280 0.00146 0.00012 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01181 0.00134 0.00011 0.00005 0.00000 0.00000 0.00002 0.00001 + 0.01096 0.00123 0.00010 0.00005 0.00000 0.00000 0.00001 0.00001 + 0.01017 0.00114 0.00009 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00946 0.00105 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00883 0.00098 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00829 0.00091 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00777 0.00085 0.00007 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.00730 0.00079 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00688 0.00074 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00651 0.00070 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00615 0.00066 0.00005 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00582 0.00062 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00553 0.00059 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00526 0.00056 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00500 0.00053 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.03634 0.00380 0.00005 0.00013 0.00000 0.00000 0.00004 0.00003 + 0.03335 0.00346 0.00007 0.00011 0.00000 0.00000 0.00003 0.00002 + 0.02942 0.00301 0.00008 0.00010 0.00000 0.00000 0.00003 0.00002 + 0.02689 0.00273 0.00008 0.00009 0.00000 0.00000 0.00003 0.00002 + 0.02449 0.00246 0.00008 0.00008 0.00000 0.00000 0.00002 0.00002 + 0.02261 0.00226 0.00008 0.00007 0.00000 0.00000 0.00002 0.00002 + 0.02095 0.00208 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01934 0.00191 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01806 0.00177 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 + 0.01690 0.00164 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 + 0.01605 0.00155 0.00007 0.00005 0.00000 0.00000 0.00001 0.00001 + 0.01437 0.00138 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.01309 0.00125 0.00006 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.01179 0.00111 0.00006 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.01060 0.00099 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.00962 0.00089 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.00874 0.00080 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 + 0.00807 0.00074 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 + 0.00734 0.00067 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00675 0.00061 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00626 0.00056 0.00003 0.00002 0.00000 0.00000 0.00000 0.00000 + 0.00569 0.00051 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00520 0.00046 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00478 0.00042 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00441 0.00038 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00407 0.00035 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00377 0.00033 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00351 0.00030 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00327 0.00028 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00305 0.00026 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00286 0.00024 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00269 0.00023 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00253 0.00021 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00238 0.00020 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00225 0.00019 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00213 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00201 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00478 0.00023 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00427 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00363 0.00017 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00323 0.00015 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00286 0.00013 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00257 0.00012 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00233 0.00011 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00210 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00192 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00177 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00165 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00143 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00127 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00111 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00097 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00085 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00075 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00068 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00060 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00054 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00049 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00043 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00039 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00035 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00031 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00028 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00026 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00023 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00021 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00020 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00015 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00014 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00013 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00012 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00011 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.02366 0.01081 9.07020 0.83158 0.00000 0.00000 0.43256 0.83158 + 0.02383 0.01095 12.48341 0.86348 0.00000 0.00000 0.46703 0.86348 + 0.02408 0.01115 18.65619 0.93210 0.00000 0.00000 0.53938 0.93210 + 0.02426 0.01129 23.97873 1.00041 0.06542 0.00000 0.61032 1.00041 + 0.02445 0.01145 30.42459 1.09094 0.16238 0.00000 0.70356 1.09094 + 0.02461 0.01158 36.72531 1.18593 0.26281 0.00000 0.80084 1.18593 + 0.02476 0.01170 43.44030 1.29302 0.37502 0.00000 0.91008 1.29302 + 0.02492 0.01184 51.31299 1.42510 0.51245 0.00000 1.04442 1.42510 + 0.02506 0.01195 58.79745 1.55632 0.64823 0.00000 1.17756 1.55632 + 0.02520 0.01207 66.60634 1.69841 0.79467 0.00000 1.32148 1.69841 + 0.02531 0.01216 73.20739 1.82222 0.92187 0.00000 1.44672 1.82222 + 0.02553 0.01234 88.53299 2.12126 1.22802 0.00172 1.74875 2.12126 + 0.02573 0.01251 102.75306 2.41926 1.53204 0.30236 2.04929 2.41927 + 0.02595 0.01269 120.16188 2.79906 1.91842 0.70038 2.43186 2.79906 + 0.02617 0.01288 139.97977 3.24856 2.37463 1.16843 2.88419 3.24857 + 0.02638 0.01305 159.48859 3.70700 2.83902 1.64333 3.34513 3.70700 + 0.02658 0.01323 180.66284 4.22072 3.35864 2.17334 3.86133 4.22073 + 0.02675 0.01337 199.37390 4.68746 3.83018 2.65335 4.33009 4.68747 + 0.02696 0.01355 223.45438 5.30441 4.45286 3.28610 4.94945 5.30442 + 0.02714 0.01371 246.03366 5.89830 5.05172 3.89372 5.54543 5.89830 + 0.02731 0.01385 267.79172 6.48372 5.64164 4.49154 6.13274 6.48373 + 0.02752 0.01403 296.84021 7.28408 6.44759 5.30734 6.93545 7.28408 + 0.02772 0.01420 325.62436 8.09696 7.26566 6.13449 7.75051 8.09696 + 0.02791 0.01436 353.88416 8.91304 8.08652 6.96373 8.56861 8.91305 + 0.02810 0.01452 383.36743 9.78234 8.96051 7.84596 9.43988 9.78235 + 0.02828 0.01468 413.42319 10.68644 9.86915 8.76253 10.34589 10.68645 + 0.02845 0.01483 442.94604 11.59115 10.77809 9.67888 11.25238 11.59117 + 0.02862 0.01497 471.72626 12.48836 11.67923 10.58689 12.15123 12.48837 + 0.02878 0.01511 501.56931 13.43383 12.62861 11.54310 13.09835 13.43385 + 0.02894 0.01525 531.82843 14.40778 13.60635 12.52746 14.07388 14.40779 + 0.02910 0.01539 561.41571 15.37430 14.57644 13.50378 15.04191 15.37432 + 0.02924 0.01551 590.14099 16.32567 15.53114 14.46430 15.99468 16.32568 + 0.02939 0.01564 619.84021 17.32247 16.53127 15.47024 16.99288 17.32248 + 0.02954 0.01577 649.84717 18.34259 17.55465 16.49930 18.01437 18.34261 + 0.02968 0.01589 679.12280 19.35028 18.56542 17.51542 19.02335 19.35030 + 0.02981 0.01600 707.48151 20.33768 19.55571 18.51075 20.01197 20.33770 + 0.02994 0.01612 736.73621 21.36765 20.58858 19.54867 21.04315 21.36767 + 0.02700 0.01348 7.96348 0.71306 0.00000 0.00000 0.37131 0.71306 + 0.02720 0.01365 10.86776 0.74096 0.00000 0.00000 0.40142 0.74096 + 0.02749 0.01390 16.03893 0.80013 0.00000 0.00000 0.46377 0.80013 + 0.02771 0.01408 20.43001 0.85827 0.05570 0.00000 0.52417 0.85828 + 0.02793 0.01427 25.68217 0.93452 0.13748 0.00000 0.60274 0.93453 + 0.02812 0.01444 30.75863 1.01376 0.22139 0.00000 0.68394 1.01376 + 0.02831 0.01460 36.11567 1.10233 0.31437 0.00000 0.77436 1.10234 + 0.02850 0.01476 42.33580 1.21067 0.42730 0.00000 0.88463 1.21068 + 0.02867 0.01491 48.19603 1.31747 0.53802 0.00000 0.99307 1.31747 + 0.02883 0.01505 54.26094 1.43230 0.65659 0.00000 1.10947 1.43231 + 0.02896 0.01516 59.35228 1.53176 0.75896 0.00000 1.21016 1.53177 + 0.02924 0.01540 71.06065 1.77002 1.00334 0.00137 1.45098 1.77003 + 0.02947 0.01560 81.78095 2.00507 1.24354 0.23937 1.68819 2.00508 + 0.02974 0.01583 94.75594 2.30171 1.54584 0.55146 1.98721 2.30172 + 0.03001 0.01607 109.35155 2.64921 1.89910 0.91466 2.33712 2.64922 + 0.03026 0.01629 123.55772 3.00016 2.25517 1.27957 2.69022 3.00018 + 0.03052 0.01650 138.81337 3.38985 2.64991 1.68304 3.08203 3.38987 + 0.03072 0.01668 152.16571 3.74098 3.00517 2.04541 3.43489 3.74100 + 0.03098 0.01690 169.18658 4.20131 3.47042 2.51912 3.89728 4.20134 + 0.03120 0.01710 184.99269 4.64076 3.91414 2.97019 4.33852 4.64079 + 0.03141 0.01728 200.09329 5.07076 4.34799 3.41067 4.77013 5.07078 + 0.03167 0.01750 220.06784 5.65396 4.93600 4.00695 5.35535 5.65399 + 0.03192 0.01772 239.66544 6.24129 5.52778 4.60635 5.94454 6.24132 + 0.03215 0.01792 258.72931 6.82631 6.11690 5.20250 6.53128 6.82635 + 0.03239 0.01812 278.44409 7.44481 6.73943 5.83194 7.15146 7.44485 + 0.03261 0.01831 298.36728 8.08333 7.38184 6.48100 7.79161 8.08337 + 0.03283 0.01850 317.77621 8.71782 8.01995 7.12532 8.42762 8.71786 + 0.03303 0.01868 336.54990 9.34290 8.64841 7.75955 9.05411 9.34294 + 0.03324 0.01885 355.87140 9.99745 9.30631 8.42317 9.71007 9.99751 + 0.03344 0.01903 375.31610 10.66748 9.97959 9.10200 10.38146 10.66753 + 0.03364 0.01919 394.19354 11.32841 10.64358 9.77122 11.04368 11.32847 + 0.03382 0.01935 412.39755 11.97531 11.29334 10.42585 11.69177 11.97537 + 0.03401 0.01951 431.09399 12.64933 11.97022 11.10760 12.36699 12.64939 + 0.03419 0.01967 449.86148 13.33539 12.65907 11.80120 13.05421 13.33545 + 0.03437 0.01982 468.05460 14.00947 13.33579 12.48241 13.72940 14.00954 + 0.03454 0.01996 485.57220 14.66669 13.99549 13.14633 14.38766 14.66676 + 0.03471 0.02010 503.53693 15.34889 14.68017 13.83524 15.07090 15.34897 + 0.03069 0.01656 6.99648 0.61443 0.00000 0.00000 0.32026 0.61443 + 0.03092 0.01677 9.46487 0.63885 0.00000 0.00000 0.34657 0.63885 + 0.03126 0.01708 13.79128 0.68989 0.00000 0.00000 0.40035 0.68990 + 0.03151 0.01730 17.40904 0.73940 0.04744 0.00000 0.45179 0.73941 + 0.03177 0.01754 21.68345 0.80364 0.11643 0.00000 0.51802 0.80365 + 0.03200 0.01774 25.76971 0.86976 0.18657 0.00000 0.58582 0.86977 + 0.03222 0.01794 30.04086 0.94305 0.26365 0.00000 0.66070 0.94306 + 0.03244 0.01814 34.95436 1.03198 0.35652 0.00000 0.75127 1.03199 + 0.03264 0.01832 39.54406 1.11898 0.44690 0.00000 0.83968 1.11899 + 0.03284 0.01849 44.25797 1.21190 0.54303 0.00000 0.93395 1.21192 + 0.03299 0.01863 48.18958 1.29193 0.62556 0.00000 1.01502 1.29194 + 0.03331 0.01892 57.15152 1.48213 0.82101 0.00109 1.20742 1.48215 + 0.03359 0.01917 65.25593 1.66800 1.01131 0.19002 1.39514 1.66802 + 0.03391 0.01945 74.96340 1.90046 1.24863 0.43556 1.62963 1.90048 + 0.03424 0.01974 85.76724 2.17022 1.52334 0.71863 1.90146 2.17025 + 0.03454 0.02001 96.17752 2.44026 1.79777 1.00048 2.17333 2.44029 + 0.03484 0.02028 107.25268 2.73763 2.09948 1.30952 2.47252 2.73766 + 0.03509 0.02050 116.86543 3.00361 2.36901 1.58502 2.73998 3.00365 + 0.03539 0.02077 129.01874 3.34979 2.71941 1.94252 3.08793 3.34983 + 0.03567 0.02101 140.21144 3.67786 3.05115 2.28043 3.41753 3.67791 + 0.03591 0.02123 150.82655 3.99682 3.37341 2.60826 3.73787 3.99687 + 0.03623 0.02150 164.75859 4.42647 3.80719 3.04898 4.16925 4.42652 + 0.03653 0.02176 178.31473 4.85603 4.24057 3.48875 4.60040 4.85609 + 0.03681 0.02201 191.40092 5.28105 4.66910 3.92318 5.02689 5.28111 + 0.03710 0.02226 204.83585 5.72756 5.11907 4.37894 5.47485 5.72763 + 0.03738 0.02250 218.31612 6.18567 5.58052 4.84598 5.93436 6.18575 + 0.03764 0.02272 231.36015 6.63825 6.03621 5.30687 6.38823 6.63833 + 0.03789 0.02294 243.89775 7.08170 6.48255 5.75805 6.83289 7.08178 + 0.03814 0.02316 256.72339 7.54365 6.94738 6.22766 7.29604 7.54374 + 0.03839 0.02337 269.55334 8.01408 7.42060 6.70554 7.76764 8.01418 + 0.03863 0.02357 281.93805 8.47588 7.88502 7.17433 8.23053 8.47598 + 0.03886 0.02376 293.81683 8.92579 8.33739 7.63079 8.68147 8.92590 + 0.03909 0.02396 305.95276 9.39249 8.80654 8.10401 9.14919 9.39260 + 0.03932 0.02415 318.07233 9.86545 9.28189 8.58335 9.62315 9.86556 + 0.03953 0.02433 329.76175 10.32818 9.74689 9.05210 10.08683 10.32831 + 0.03974 0.02451 340.96423 10.77755 10.19838 9.50713 10.53709 10.77768 + 0.03995 0.02468 352.39966 11.24220 10.66516 9.97746 11.00263 11.24233 + 0.03312 0.01871 6.48074 0.56323 0.00000 0.00000 0.29374 0.56323 + 0.03338 0.01895 8.71949 0.58580 0.00000 0.00000 0.31805 0.58581 + 0.03376 0.01930 12.60485 0.63256 0.00000 0.00000 0.36730 0.63257 + 0.03404 0.01955 15.82258 0.67755 0.04310 0.00000 0.41404 0.67756 + 0.03433 0.01981 19.59520 0.73552 0.10543 0.00000 0.47383 0.73553 + 0.03458 0.02004 23.17697 0.79484 0.16841 0.00000 0.53468 0.79485 + 0.03482 0.02026 26.89844 0.86025 0.23729 0.00000 0.60154 0.86026 + 0.03508 0.02049 31.15475 0.93921 0.31985 0.00000 0.68200 0.93923 + 0.03530 0.02070 35.10921 1.01610 0.39982 0.00000 0.76018 1.01612 + 0.03552 0.02089 39.15126 1.09788 0.48453 0.00000 0.84318 1.09790 + 0.03569 0.02104 42.50878 1.16805 0.55700 0.00000 0.91432 1.16808 + 0.03606 0.02137 50.11974 1.33404 0.72779 0.00095 1.08231 1.33407 + 0.03637 0.02166 56.94827 1.49530 0.89310 0.16527 1.24526 1.49534 + 0.03673 0.02197 65.07397 1.69584 1.09808 0.37767 1.44765 1.69588 + 0.03710 0.02230 74.05653 1.92721 1.33396 0.62108 1.68090 1.92725 + 0.03744 0.02260 82.65697 2.15753 1.56829 0.86209 1.91290 2.15758 + 0.03778 0.02290 91.75272 2.40987 1.82460 1.12500 2.16690 2.40993 + 0.03807 0.02315 99.60578 2.63454 2.05251 1.35829 2.39292 2.63460 + 0.03841 0.02346 109.48273 2.92564 2.34746 1.65963 2.68562 2.92570 + 0.03872 0.02373 118.53139 3.20026 2.62542 1.94316 2.96164 3.20033 + 0.03901 0.02397 127.07339 3.46618 2.89437 2.21712 3.22883 3.46626 + 0.03937 0.02429 138.22931 3.82287 3.25483 2.58382 3.58709 3.82296 + 0.03971 0.02458 149.02731 4.17788 3.61333 2.94807 3.94356 4.17798 + 0.04004 0.02486 159.40056 4.52769 3.96634 3.30639 4.29470 4.52779 + 0.04036 0.02513 170.00134 4.89374 4.33555 3.68081 4.66207 4.89384 + 0.04068 0.02540 180.58994 5.26786 4.71272 4.06300 5.03746 5.26797 + 0.04098 0.02566 190.79234 5.63612 5.08383 4.43879 5.40692 5.63625 + 0.04127 0.02590 200.55952 5.99574 5.44609 4.80541 5.76764 5.99588 + 0.04156 0.02615 210.51302 6.36917 5.82213 5.18576 6.14216 6.36930 + 0.04185 0.02639 220.43213 6.74823 6.20375 5.57157 6.52229 6.74838 + 0.04213 0.02662 229.97256 7.11922 6.57713 5.94888 6.89428 7.11937 + 0.04239 0.02683 239.09229 7.47964 6.93979 6.31522 7.25563 7.47980 + 0.04265 0.02705 248.37852 7.85247 7.31486 6.69395 7.62940 7.85264 + 0.04291 0.02727 257.62228 8.22929 7.69387 7.07654 8.00713 8.22947 + 0.04317 0.02747 266.50970 8.59700 8.06364 7.44970 8.37570 8.59719 + 0.04341 0.02767 275.00174 8.95322 8.42180 7.81103 8.73273 8.95341 + 0.04365 0.02787 283.64520 9.32067 8.79120 8.18361 9.10099 9.32086 + 0.03498 0.02041 6.13536 0.52948 0.00000 0.00000 0.27625 0.52948 + 0.03526 0.02067 8.22148 0.55082 0.00000 0.00000 0.29922 0.55083 + 0.03568 0.02105 11.81531 0.59473 0.00000 0.00000 0.34546 0.59474 + 0.03598 0.02132 14.77010 0.63672 0.04023 0.00000 0.38910 0.63673 + 0.03630 0.02161 18.21447 0.69056 0.09814 0.00000 0.44464 0.69057 + 0.03657 0.02186 21.46766 0.74539 0.15642 0.00000 0.50091 0.74541 + 0.03683 0.02210 24.83249 0.80563 0.21990 0.00000 0.56250 0.80565 + 0.03711 0.02235 28.66401 0.87806 0.29572 0.00000 0.63634 0.87809 + 0.03736 0.02257 32.20930 0.94835 0.36890 0.00000 0.70784 0.94838 + 0.03759 0.02279 35.81995 1.02288 0.44617 0.00000 0.78351 1.02292 + 0.03778 0.02295 38.80980 1.08666 0.51210 0.00000 0.84819 1.08670 + 0.03818 0.02331 45.55868 1.23698 0.66691 0.00086 1.00038 1.23702 + 0.03853 0.02362 51.57695 1.38236 0.81609 0.14930 1.14734 1.38241 + 0.03892 0.02396 58.70229 1.56239 1.00028 0.34036 1.32911 1.56245 + 0.03933 0.02432 66.53792 1.76917 1.21129 0.55836 1.53766 1.76924 + 0.03970 0.02465 74.00317 1.97416 1.42004 0.77330 1.74422 1.97423 + 0.04008 0.02498 81.86190 2.19787 1.64746 1.00685 1.96947 2.19795 + 0.04040 0.02525 88.61882 2.39635 1.84898 1.21335 2.16922 2.39644 + 0.04078 0.02558 97.08227 2.65263 2.10886 1.47917 2.42700 2.65272 + 0.04113 0.02587 104.80379 2.89356 2.35293 1.72838 2.66924 2.89366 + 0.04144 0.02614 112.06613 3.12614 2.58835 1.96844 2.90301 3.12625 + 0.04184 0.02648 121.51340 3.43708 2.90282 2.28871 3.21542 3.43720 + 0.04222 0.02681 130.61909 3.74548 3.21449 2.60571 3.52519 3.74561 + 0.04258 0.02711 139.33240 4.04838 3.52039 2.91652 3.82934 4.04852 + 0.04294 0.02741 148.20369 4.36437 3.83934 3.24031 4.14656 4.36452 + 0.04330 0.02770 157.03224 4.68636 4.16419 3.56981 4.46975 4.68652 + 0.04363 0.02798 165.50919 5.00242 4.48290 3.89286 4.78691 5.00258 + 0.04395 0.02824 173.59793 5.31023 4.79319 4.20718 5.09576 5.31041 + 0.04428 0.02851 181.81505 5.62904 5.11447 4.53245 5.41560 5.62923 + 0.04460 0.02877 189.97807 5.95187 5.43968 4.86154 5.73942 5.95206 + 0.04490 0.02902 197.80595 6.26705 5.75710 5.18261 6.05554 6.26725 + 0.04519 0.02925 205.26749 6.57256 6.06472 5.49363 6.36193 6.57278 + 0.04549 0.02949 212.84416 6.88790 6.38215 5.81446 6.67815 6.88813 + 0.04578 0.02972 220.36563 7.20593 6.70223 6.13786 6.99703 7.20616 + 0.04606 0.02995 227.57787 7.51562 7.01386 6.45261 7.30753 7.51586 + 0.04633 0.03016 234.45189 7.81503 7.31509 6.75679 7.60771 7.81529 + 0.04660 0.03038 241.43127 8.12330 7.62519 7.06983 7.91674 8.12357 + 0.03648 0.02180 5.88041 0.50498 0.00000 0.00000 0.26355 0.50498 + 0.03678 0.02208 7.85486 0.52542 0.00000 0.00000 0.28554 0.52543 + 0.03722 0.02248 11.23652 0.56724 0.00000 0.00000 0.32957 0.56725 + 0.03754 0.02278 14.00105 0.60703 0.03813 0.00000 0.37093 0.60705 + 0.03788 0.02309 17.20911 0.65786 0.09283 0.00000 0.42338 0.65788 + 0.03817 0.02335 20.22689 0.70945 0.14769 0.00000 0.47633 0.70947 + 0.03845 0.02361 23.33732 0.76594 0.20727 0.00000 0.53411 0.76597 + 0.03875 0.02388 26.86715 0.83368 0.27822 0.00000 0.60319 0.83371 + 0.03901 0.02411 30.12302 0.89923 0.34652 0.00000 0.66988 0.89927 + 0.03926 0.02434 33.42966 0.96857 0.41847 0.00000 0.74031 0.96861 + 0.03946 0.02452 36.16127 1.02779 0.47973 0.00000 0.80038 1.02783 + 0.03989 0.02490 42.30732 1.16695 0.62317 0.00080 0.94132 1.16700 + 0.04027 0.02523 47.76242 1.30109 0.76091 0.13797 1.07697 1.30115 + 0.04069 0.02560 54.19625 1.46666 0.93044 0.31398 1.24419 1.46673 + 0.04113 0.02598 61.24351 1.65619 1.12399 0.51412 1.43539 1.65627 + 0.04153 0.02633 67.93269 1.84348 1.31486 0.71082 1.62418 1.84357 + 0.04193 0.02668 74.94997 2.04727 1.52218 0.92392 1.82944 2.04737 + 0.04227 0.02697 80.96469 2.22760 1.70540 1.11184 2.01098 2.22771 + 0.04269 0.02732 88.47541 2.45984 1.94107 1.35310 2.24464 2.45995 + 0.04306 0.02764 95.30652 2.67760 2.16181 1.57870 2.46365 2.67772 + 0.04340 0.02792 101.71379 2.88733 2.37423 1.79550 2.67451 2.88747 + 0.04383 0.02829 110.02437 3.16704 2.65730 2.08402 2.95561 3.16719 + 0.04424 0.02863 118.00949 3.44374 2.93710 2.36885 3.23361 3.44389 + 0.04463 0.02895 125.62845 3.71485 3.21107 2.64745 3.50591 3.71501 + 0.04502 0.02927 133.36423 3.99704 3.49607 2.93701 3.78927 3.99721 + 0.04540 0.02958 141.04193 4.28394 3.78569 3.23101 4.07731 4.28413 + 0.04577 0.02988 148.39502 4.56497 4.06925 3.51866 4.35940 4.56518 + 0.04612 0.03016 155.39447 4.83814 4.34477 3.79798 4.63355 4.83835 + 0.04647 0.03044 162.48862 5.12054 4.62951 4.08649 4.91693 5.12077 + 0.04681 0.03072 169.51987 5.40596 4.91720 4.37783 5.20329 5.40620 + 0.04715 0.03099 176.24768 5.68414 5.19752 4.66158 5.48236 5.68439 + 0.04746 0.03124 182.64737 5.95334 5.46872 4.93599 5.75240 5.95360 + 0.04778 0.03149 189.13263 6.23075 5.74812 5.21859 6.03065 6.23102 + 0.04810 0.03174 195.55785 6.51009 6.02941 5.50301 6.31080 6.51038 + 0.04840 0.03198 201.70689 6.78169 6.30285 5.77939 6.58317 6.78198 + 0.04869 0.03220 207.55687 7.04391 6.56680 6.04611 6.84611 7.04421 + 0.04899 0.03243 213.48586 7.31350 6.83812 6.32022 7.11642 7.31381 + 0.04163 0.02675 5.15040 0.43649 0.00000 0.00000 0.22804 0.43650 + 0.04200 0.02709 6.80841 0.45436 0.00000 0.00000 0.24723 0.45438 + 0.04255 0.02759 9.59410 0.49027 0.00000 0.00000 0.28502 0.49029 + 0.04295 0.02795 11.82906 0.52388 0.03221 0.00000 0.31997 0.52391 + 0.04337 0.02832 14.38445 0.56626 0.07790 0.00000 0.36373 0.56630 + 0.04374 0.02865 16.75673 0.60879 0.12322 0.00000 0.40742 0.60883 + 0.04409 0.02896 19.17403 0.65489 0.17195 0.00000 0.45462 0.65495 + 0.04447 0.02929 21.88703 0.70964 0.22945 0.00000 0.51051 0.70971 + 0.04480 0.02958 24.36397 0.76216 0.28431 0.00000 0.56401 0.76223 + 0.04512 0.02986 26.85673 0.81727 0.34165 0.00000 0.62005 0.81735 + 0.04537 0.03008 28.90009 0.86403 0.39014 0.00000 0.66753 0.86411 + 0.04592 0.03054 33.44957 0.97291 0.50267 0.00062 0.77793 0.97301 + 0.04639 0.03095 37.42582 1.07671 0.60955 0.10734 0.88302 1.07682 + 0.04693 0.03140 42.05719 1.20349 0.73971 0.24289 1.01121 1.20362 + 0.04749 0.03186 47.06540 1.34705 0.88671 0.39536 1.15620 1.34720 + 0.04801 0.03229 51.76191 1.48747 1.03018 0.54368 1.29790 1.48764 + 0.04853 0.03272 56.63353 1.63882 1.18454 0.70284 1.45050 1.63900 + 0.04897 0.03307 60.76723 1.77161 1.31979 0.84200 1.58432 1.77181 + 0.04951 0.03350 65.87799 1.94120 1.49232 1.01916 1.75514 1.94142 + 0.04998 0.03389 70.47986 2.09890 1.65256 1.18344 1.91390 2.09913 + 0.05043 0.03424 74.75804 2.24967 1.80563 1.34014 2.06563 2.24992 + 0.05099 0.03468 80.25473 2.44917 2.00800 1.54704 2.26633 2.44944 + 0.05152 0.03510 85.48305 2.64490 2.20638 1.74959 2.46316 2.64519 + 0.05203 0.03549 90.42516 2.83520 2.39913 1.94619 2.65449 2.83551 + 0.05254 0.03588 95.39863 3.03187 2.59820 2.14903 2.85216 3.03220 + 0.05304 0.03626 100.29173 3.23041 2.79906 2.35353 3.05167 3.23076 + 0.05351 0.03662 104.93932 3.42359 2.99441 2.55227 3.24577 3.42396 + 0.05397 0.03697 109.32909 3.61021 3.18304 2.74405 3.43323 3.61060 + 0.05442 0.03731 113.74519 3.80200 3.37683 2.94096 3.62585 3.80241 + 0.05488 0.03765 118.08972 3.99471 3.57148 3.13864 3.81937 3.99514 + 0.05531 0.03797 122.21742 4.18148 3.76008 3.33009 4.00691 4.18193 + 0.05573 0.03827 126.11768 4.36129 3.94160 3.51427 4.18744 4.36176 + 0.05614 0.03858 130.04422 4.54565 4.12766 3.70299 4.37251 4.54614 + 0.05656 0.03888 133.90953 4.73037 4.31406 3.89197 4.55793 4.73088 + 0.05696 0.03917 137.58543 4.90911 4.49437 4.07472 4.73733 4.90963 + 0.05734 0.03945 141.06190 5.08089 4.66764 4.25029 4.90974 5.08144 + 0.05773 0.03973 144.56499 5.25674 4.84497 4.42992 5.08621 5.25730 + 0.04768 0.03277 4.50643 0.37823 0.00000 0.00000 0.19783 0.37825 + 0.04815 0.03318 5.88895 0.39389 0.00000 0.00000 0.21461 0.39392 + 0.04886 0.03379 8.16341 0.42468 0.00000 0.00000 0.24700 0.42473 + 0.04938 0.03423 9.95090 0.45297 0.02712 0.00000 0.27644 0.45304 + 0.04992 0.03469 11.96176 0.48814 0.06510 0.00000 0.31278 0.48822 + 0.05040 0.03509 13.80173 0.52298 0.10231 0.00000 0.34861 0.52307 + 0.05086 0.03547 15.65330 0.56034 0.14191 0.00000 0.38690 0.56045 + 0.05136 0.03588 17.70631 0.60423 0.18814 0.00000 0.43178 0.60436 + 0.05179 0.03623 19.55978 0.64594 0.23184 0.00000 0.47431 0.64608 + 0.05221 0.03657 21.40660 0.68933 0.27712 0.00000 0.51850 0.68948 + 0.05254 0.03684 22.90765 0.72587 0.31515 0.00000 0.55566 0.72604 + 0.05326 0.03741 26.21148 0.81013 0.40252 0.00048 0.64122 0.81033 + 0.05389 0.03790 29.04941 0.88951 0.48452 0.08262 0.72170 0.88973 + 0.05460 0.03845 32.30956 0.98537 0.58326 0.18582 0.81877 0.98562 + 0.05535 0.03903 35.78522 1.09265 0.69347 0.30054 0.92727 1.09293 + 0.05603 0.03955 39.00108 1.19642 0.79985 0.41093 1.03214 1.19674 + 0.05673 0.04007 42.29527 1.30713 0.91313 0.52818 1.14392 1.30747 + 0.05731 0.04050 45.05922 1.40338 1.01148 0.62975 1.24106 1.40375 + 0.05802 0.04103 48.43869 1.52521 1.13581 0.75792 1.36393 1.52561 + 0.05866 0.04150 51.44758 1.63747 1.25025 0.87569 1.47711 1.63790 + 0.05925 0.04192 54.21704 1.74394 1.35869 0.98713 1.58441 1.74440 + 0.06000 0.04247 57.73747 1.88364 1.50085 1.13303 1.72514 1.88414 + 0.06071 0.04297 61.04794 2.01948 1.63895 1.27457 1.86193 2.02001 + 0.06139 0.04345 64.14410 2.15046 1.77202 1.41082 1.99380 2.15103 + 0.06206 0.04393 67.22849 2.28476 1.90839 1.55031 2.12897 2.28536 + 0.06273 0.04439 70.23277 2.41932 2.04493 1.68985 2.26436 2.41995 + 0.06337 0.04483 73.05930 2.54930 2.17677 1.82449 2.39512 2.54997 + 0.06398 0.04525 75.70518 2.67402 2.30322 1.95353 2.52057 2.67472 + 0.06459 0.04567 78.34405 2.80137 2.43228 2.08518 2.64864 2.80210 + 0.06519 0.04608 80.91782 2.92852 2.56110 2.21650 2.77650 2.92929 + 0.06577 0.04647 83.34300 3.05101 2.68517 2.34291 2.89965 3.05181 + 0.06633 0.04684 85.61670 3.16827 2.80389 2.46383 3.01753 3.16910 + 0.06689 0.04721 87.88810 3.28783 2.92492 2.58705 3.13771 3.28869 + 0.06744 0.04758 90.10722 3.40698 3.04551 2.70977 3.25746 3.40787 + 0.06797 0.04793 92.20187 3.52166 3.16154 2.82782 3.37272 3.52258 + 0.06848 0.04826 94.16901 3.63134 3.27250 2.94068 3.48294 3.63229 + 0.06900 0.04860 96.13747 3.74307 3.38552 3.05559 3.59521 3.74406 + 0.05176 0.03686 4.16730 0.34837 0.00000 0.00000 0.18235 0.34840 + 0.05232 0.03732 5.40540 0.36289 0.00000 0.00000 0.19789 0.36294 + 0.05315 0.03801 7.41548 0.39102 0.00000 0.00000 0.22749 0.39111 + 0.05377 0.03851 8.97463 0.41658 0.02449 0.00000 0.25409 0.41668 + 0.05442 0.03903 10.71075 0.44803 0.05850 0.00000 0.28662 0.44816 + 0.05499 0.03948 12.28489 0.47894 0.09157 0.00000 0.31843 0.47909 + 0.05554 0.03991 13.85649 0.51186 0.12652 0.00000 0.35220 0.51202 + 0.05613 0.04037 15.58577 0.55027 0.16706 0.00000 0.39151 0.55047 + 0.05664 0.04076 17.13596 0.58654 0.20515 0.00000 0.42854 0.58676 + 0.05714 0.04115 18.67086 0.62408 0.24441 0.00000 0.46680 0.62432 + 0.05754 0.04145 19.91170 0.65555 0.27723 0.00000 0.49883 0.65580 + 0.05840 0.04209 22.62300 0.72766 0.35217 0.00041 0.57214 0.72795 + 0.05915 0.04265 24.92589 0.79509 0.42199 0.07050 0.64057 0.79541 + 0.06000 0.04327 27.54815 0.87594 0.50547 0.15795 0.72253 0.87631 + 0.06090 0.04392 30.31849 0.96575 0.59795 0.25447 0.81346 0.96616 + 0.06171 0.04450 32.85975 1.05204 0.68661 0.34671 0.90075 1.05249 + 0.06255 0.04509 35.44203 1.14349 0.78042 0.44405 0.99320 1.14399 + 0.06325 0.04558 37.59300 1.22255 0.86140 0.52791 1.07307 1.22308 + 0.06410 0.04617 40.20416 1.32206 0.96320 0.63313 1.17354 1.32264 + 0.06486 0.04670 42.51210 1.41324 1.05637 0.72927 1.26556 1.41386 + 0.06557 0.04718 44.62263 1.49929 1.14422 0.81980 1.35237 1.49994 + 0.06647 0.04779 47.28684 1.61160 1.25877 0.93769 1.46563 1.61230 + 0.06732 0.04836 49.77347 1.72018 1.36943 1.05143 1.57509 1.72093 + 0.06813 0.04889 52.08295 1.82435 1.47552 1.16034 1.68007 1.82515 + 0.06894 0.04943 54.36831 1.93063 1.58369 1.27130 1.78715 1.93148 + 0.06974 0.04995 56.57959 2.03660 1.69149 1.38178 1.89390 2.03750 + 0.07050 0.05044 58.64695 2.13851 1.79510 1.48789 1.99653 2.13945 + 0.07122 0.05091 60.57061 2.23588 1.89406 1.58916 2.09457 2.23687 + 0.07196 0.05138 62.47810 2.33491 1.99467 1.69207 2.19427 2.33594 + 0.07268 0.05184 64.32774 2.43338 2.09467 1.79430 2.29339 2.43445 + 0.07337 0.05227 66.06090 2.52788 2.19062 1.89235 2.38851 2.52900 + 0.07403 0.05269 67.67719 2.61803 2.28212 1.98581 2.47923 2.61919 + 0.07470 0.05310 69.28337 2.70962 2.37507 2.08070 2.57140 2.71082 + 0.07536 0.05351 70.84445 2.80059 2.46736 2.17490 2.66293 2.80183 + 0.07599 0.05390 72.31041 2.88786 2.55588 2.26522 2.75073 2.88914 + 0.07660 0.05428 73.68045 2.97106 2.64026 2.35129 2.83443 2.97238 + 0.07721 0.05465 75.04483 3.05556 2.72594 2.43866 2.91944 3.05692 + 0.05502 0.04007 3.94328 0.32887 0.00000 0.00000 0.17226 0.32892 + 0.05565 0.04058 5.08547 0.34264 0.00000 0.00000 0.18699 0.34272 + 0.05661 0.04132 6.92158 0.36904 0.00000 0.00000 0.21476 0.36916 + 0.05731 0.04187 8.33185 0.39279 0.02276 0.00000 0.23949 0.39293 + 0.05805 0.04244 9.89013 0.42182 0.05418 0.00000 0.26953 0.42200 + 0.05870 0.04293 11.29336 0.45016 0.08455 0.00000 0.29872 0.45037 + 0.05933 0.04340 12.68598 0.48019 0.11648 0.00000 0.32955 0.48042 + 0.06001 0.04390 14.20950 0.51506 0.15334 0.00000 0.36525 0.51532 + 0.06060 0.04433 15.56791 0.54782 0.18780 0.00000 0.39873 0.54811 + 0.06117 0.04475 16.90650 0.58159 0.22319 0.00000 0.43319 0.58191 + 0.06163 0.04508 17.98423 0.60980 0.25267 0.00000 0.46193 0.61015 + 0.06262 0.04578 20.32610 0.67416 0.31968 0.00037 0.52741 0.67455 + 0.06348 0.04639 22.29790 0.73399 0.38176 0.06279 0.58819 0.73443 + 0.06445 0.04707 24.52796 0.80536 0.45558 0.14028 0.66059 0.80585 + 0.06547 0.04777 26.86749 0.88419 0.53692 0.22534 0.74049 0.88473 + 0.06641 0.04841 28.99929 0.95953 0.61450 0.30621 0.81677 0.96013 + 0.06737 0.04905 31.15196 1.03900 0.69618 0.39115 0.89718 1.03965 + 0.06817 0.04958 32.93495 1.10741 0.76639 0.46402 0.96635 1.10810 + 0.06914 0.05023 35.08725 1.19313 0.85427 0.55505 1.05299 1.19389 + 0.07001 0.05080 36.97872 1.27135 0.93436 0.63788 1.13200 1.27216 + 0.07082 0.05132 38.69954 1.34489 1.00960 0.71558 1.20626 1.34574 + 0.07185 0.05198 40.85984 1.44048 1.10731 0.81637 1.30275 1.44140 + 0.07282 0.05260 42.86415 1.53251 1.20129 0.91319 1.39562 1.53349 + 0.07374 0.05318 44.71528 1.62045 1.29104 1.00555 1.48432 1.62148 + 0.07467 0.05376 46.53725 1.70983 1.38222 1.09929 1.57447 1.71093 + 0.07558 0.05433 48.29073 1.79863 1.47274 1.19228 1.66401 1.79979 + 0.07645 0.05487 49.92167 1.88373 1.55945 1.28129 1.74979 1.88494 + 0.07728 0.05537 51.43184 1.96478 1.64200 1.36597 1.83148 1.96604 + 0.07811 0.05588 52.92221 2.04695 1.72566 1.45175 1.91429 2.04827 + 0.07893 0.05637 54.36046 2.12841 1.80857 1.53672 1.99636 2.12978 + 0.07972 0.05684 55.70192 2.20635 1.88788 1.61797 2.07489 2.20778 + 0.08046 0.05729 56.94738 2.28050 1.96331 1.69520 2.14959 2.28198 + 0.08122 0.05774 58.17962 2.35563 2.03972 1.77341 2.22527 2.35716 + 0.08197 0.05818 59.37204 2.43006 2.11540 1.85085 2.30023 2.43164 + 0.08269 0.05861 60.48693 2.50127 2.18780 1.92490 2.37195 2.50290 + 0.08338 0.05901 61.52457 2.56900 2.25665 1.99531 2.44016 2.57068 + 0.08407 0.05941 62.55368 2.63763 2.32640 2.06662 2.50927 2.63935 + 0.05772 0.04273 3.77879 0.31470 0.00000 0.00000 0.16494 0.31478 + 0.05843 0.04327 4.85035 0.32794 0.00000 0.00000 0.17908 0.32804 + 0.05949 0.04407 6.55933 0.35307 0.00000 0.00000 0.20552 0.35322 + 0.06027 0.04465 7.86163 0.37551 0.02151 0.00000 0.22889 0.37569 + 0.06110 0.04526 9.29176 0.40278 0.05104 0.00000 0.25712 0.40300 + 0.06182 0.04579 10.57253 0.42926 0.07945 0.00000 0.28441 0.42952 + 0.06252 0.04629 11.83758 0.45719 0.10920 0.00000 0.31311 0.45749 + 0.06327 0.04683 13.21516 0.48950 0.14339 0.00000 0.34622 0.48983 + 0.06393 0.04729 14.43820 0.51975 0.17526 0.00000 0.37715 0.52011 + 0.06457 0.04774 15.63881 0.55082 0.20787 0.00000 0.40887 0.55122 + 0.06508 0.04809 16.60230 0.57671 0.23496 0.00000 0.43527 0.57713 + 0.06618 0.04884 18.68669 0.63554 0.29632 0.00034 0.49517 0.63603 + 0.06713 0.04949 20.42936 0.68999 0.35291 0.05732 0.55053 0.69053 + 0.06822 0.05022 22.38960 0.75466 0.41992 0.12777 0.61620 0.75526 + 0.06935 0.05097 24.43460 0.82578 0.49344 0.20478 0.68833 0.82645 + 0.07040 0.05165 26.28814 0.89347 0.56326 0.27769 0.75693 0.89420 + 0.07146 0.05234 28.15049 0.96460 0.63650 0.35399 0.82896 0.96539 + 0.07235 0.05291 29.68606 1.02561 0.69924 0.41922 0.89071 1.02646 + 0.07343 0.05360 31.53139 1.10182 0.77751 0.50045 0.96779 1.10274 + 0.07440 0.05421 33.14566 1.17112 0.84860 0.57411 1.03785 1.17210 + 0.07530 0.05476 34.60829 1.23608 0.91518 0.64301 1.10351 1.23712 + 0.07644 0.05547 36.43635 1.32026 1.00138 0.73210 1.18855 1.32137 + 0.07752 0.05613 38.12432 1.40102 1.08402 0.81740 1.27011 1.40220 + 0.07854 0.05675 39.67632 1.47796 1.16270 0.89852 1.34779 1.47921 + 0.07957 0.05737 41.19726 1.55593 1.24238 0.98062 1.42650 1.55725 + 0.08058 0.05797 42.65473 1.63317 1.32128 1.06183 1.50445 1.63456 + 0.08154 0.05854 44.00474 1.70700 1.39665 1.13936 1.57894 1.70845 + 0.08245 0.05907 45.24985 1.77713 1.46822 1.21293 1.64968 1.77864 + 0.08337 0.05961 46.47392 1.84805 1.54058 1.28728 1.72122 1.84963 + 0.08428 0.06014 47.65060 1.91820 1.61212 1.36075 1.79196 1.91984 + 0.08515 0.06064 48.74395 1.98516 1.68040 1.43085 1.85950 1.98687 + 0.08597 0.06112 49.75541 2.04873 1.74520 1.49734 1.92359 2.05050 + 0.08681 0.06159 50.75253 2.11300 1.81071 1.56454 1.98840 2.11483 + 0.08763 0.06206 51.71397 2.17654 1.87545 1.63093 2.05246 2.17843 + 0.08843 0.06251 52.60968 2.23722 1.93727 1.69431 2.11362 2.23916 + 0.08918 0.06294 53.44049 2.29482 1.99595 1.75445 2.17168 2.29681 + 0.08995 0.06336 54.26169 2.35307 2.05528 1.81525 2.23040 2.35512 + 0.06794 0.05219 3.32287 0.27537 0.00000 0.00000 0.14466 0.27557 + 0.06896 0.05288 4.19249 0.28713 0.00000 0.00000 0.15721 0.28739 + 0.07049 0.05388 5.54340 0.30872 0.00000 0.00000 0.17995 0.30908 + 0.07162 0.05461 6.54571 0.32748 0.01801 0.00000 0.19953 0.32791 + 0.07281 0.05537 7.62371 0.34982 0.04230 0.00000 0.22270 0.35032 + 0.07386 0.05603 8.57133 0.37113 0.06528 0.00000 0.24473 0.37170 + 0.07486 0.05666 9.49230 0.39328 0.08900 0.00000 0.26756 0.39392 + 0.07594 0.05732 10.47950 0.41854 0.11590 0.00000 0.29352 0.41925 + 0.07688 0.05790 11.34317 0.44189 0.14066 0.00000 0.31748 0.44266 + 0.07780 0.05846 12.17996 0.46561 0.16572 0.00000 0.34177 0.46644 + 0.07853 0.05890 12.84397 0.48519 0.18634 0.00000 0.36180 0.48607 + 0.08010 0.05983 14.25869 0.52911 0.23247 0.00025 0.40667 0.53010 + 0.08146 0.06064 15.41185 0.56914 0.27438 0.04267 0.44752 0.57023 + 0.08300 0.06154 16.68438 0.61600 0.32330 0.09441 0.49526 0.61720 + 0.08462 0.06247 17.98583 0.66677 0.37617 0.15015 0.54694 0.66808 + 0.08609 0.06331 19.14318 0.71440 0.42569 0.20221 0.59539 0.71583 + 0.08759 0.06416 20.28525 0.76381 0.47696 0.25600 0.64561 0.76535 + 0.08885 0.06486 21.21159 0.80570 0.52038 0.30146 0.68816 0.80733 + 0.09037 0.06571 22.30664 0.85742 0.57393 0.35744 0.74067 0.85916 + 0.09173 0.06645 23.24849 0.90390 0.62201 0.40764 0.78785 0.90576 + 0.09298 0.06714 24.08894 0.94704 0.66659 0.45412 0.83162 0.94899 + 0.09457 0.06800 25.12208 1.00232 0.72369 0.51359 0.88769 1.00440 + 0.09607 0.06880 26.05892 1.05476 0.77780 0.56989 0.94086 1.05695 + 0.09748 0.06956 26.90561 1.10417 0.82878 0.62288 0.99095 1.10647 + 0.09890 0.07030 27.72158 1.15375 0.87989 0.67598 1.04120 1.15616 + 0.10029 0.07103 28.49040 1.20236 0.93000 0.72799 1.09046 1.20489 + 0.10161 0.07172 29.19095 1.24839 0.97742 0.77719 1.13710 1.25102 + 0.10286 0.07237 29.82691 1.29172 1.02206 0.82349 1.18100 1.29446 + 0.10411 0.07301 30.44246 1.33518 1.06682 0.86988 1.22503 1.33802 + 0.10535 0.07365 31.02482 1.37780 1.11070 0.91535 1.26820 1.38073 + 0.10653 0.07425 31.55755 1.41815 1.15226 0.95840 1.30908 1.42119 + 0.10764 0.07481 32.04296 1.45617 1.19139 0.99893 1.34758 1.45929 + 0.10877 0.07538 32.51421 1.49432 1.23067 1.03960 1.38623 1.49754 + 0.10989 0.07594 32.96166 1.53176 1.26922 1.07950 1.42415 1.53507 + 0.11096 0.07647 33.37206 1.56725 1.30576 1.11732 1.46010 1.57065 + 0.11197 0.07698 33.74701 1.60072 1.34021 1.15299 1.49400 1.60421 + 0.11299 0.07748 34.11201 1.63435 1.37483 1.18881 1.52807 1.63792 + 0.08231 0.06391 2.95777 0.24233 0.00000 0.00000 0.12778 0.24292 + 0.08384 0.06478 3.64843 0.25286 0.00000 0.00000 0.13903 0.25357 + 0.08612 0.06606 4.69052 0.27143 0.00000 0.00000 0.15864 0.27232 + 0.08780 0.06699 5.44040 0.28704 0.01506 0.00000 0.17500 0.28806 + 0.08958 0.06796 6.22800 0.30517 0.03495 0.00000 0.19391 0.30634 + 0.09112 0.06879 6.90575 0.32211 0.05340 0.00000 0.21151 0.32340 + 0.09260 0.06959 7.55226 0.33941 0.07212 0.00000 0.22943 0.34083 + 0.09418 0.07044 8.23271 0.35882 0.09301 0.00000 0.24950 0.36037 + 0.09557 0.07116 8.81788 0.37649 0.11196 0.00000 0.26773 0.37816 + 0.09691 0.07187 9.37617 0.39421 0.13090 0.00000 0.28599 0.39599 + 0.09797 0.07242 9.81333 0.40867 0.14632 0.00000 0.30087 0.41054 + 0.10024 0.07360 10.72795 0.44065 0.18032 0.00018 0.33375 0.44271 + 0.10222 0.07460 11.44966 0.46928 0.21067 0.03115 0.36314 0.47151 + 0.10443 0.07573 12.22743 0.50223 0.24553 0.06833 0.39693 0.50466 + 0.10674 0.07689 13.00342 0.53731 0.28256 0.10773 0.43288 0.53994 + 0.10884 0.07793 13.67704 0.56970 0.31669 0.14397 0.46604 0.57251 + 0.11097 0.07898 14.32654 0.60278 0.35151 0.18086 0.49989 0.60578 + 0.11273 0.07984 14.84218 0.63044 0.38061 0.21165 0.52819 0.63360 + 0.11487 0.08088 15.43860 0.66415 0.41603 0.24909 0.56266 0.66750 + 0.11677 0.08179 15.93998 0.69403 0.44742 0.28222 0.59321 0.69756 + 0.11851 0.08262 16.37811 0.72143 0.47618 0.31257 0.62122 0.72511 + 0.12071 0.08366 16.90435 0.75610 0.51257 0.35092 0.65665 0.75998 + 0.12278 0.08463 17.36934 0.78854 0.54660 0.38676 0.68979 0.79261 + 0.12472 0.08554 17.77913 0.81872 0.57826 0.42010 0.72063 0.82296 + 0.12665 0.08644 18.16429 0.84863 0.60964 0.45312 0.75120 0.85306 + 0.12854 0.08731 18.51786 0.87762 0.64005 0.48511 0.78082 0.88221 + 0.13033 0.08813 18.83179 0.90475 0.66852 0.51506 0.80855 0.90951 + 0.13201 0.08889 19.10953 0.93002 0.69505 0.54295 0.83438 0.93494 + 0.13369 0.08965 19.37145 0.95510 0.72138 0.57065 0.86002 0.96017 + 0.13534 0.09040 19.61252 0.97945 0.74694 0.59753 0.88490 0.98467 + 0.13691 0.09110 19.82699 1.00227 0.77092 0.62275 0.90824 1.00764 + 0.13839 0.09176 20.01704 1.02357 0.79331 0.64629 0.93003 1.02908 + 0.13989 0.09243 20.19625 1.04475 0.81558 0.66972 0.95169 1.05040 + 0.14135 0.09307 20.36129 1.06535 0.83724 0.69252 0.97276 1.07113 + 0.14275 0.09369 20.50790 1.08470 0.85761 0.71395 0.99257 1.09061 + 0.14408 0.09427 20.63760 1.10280 0.87666 0.73400 1.01109 1.10883 + 0.14541 0.09485 20.75964 1.12082 0.89565 0.75400 1.02954 1.12698 + 0.09402 0.07221 2.79352 0.22537 0.00000 0.00000 0.11922 0.22648 + 0.09598 0.07323 3.38785 0.23525 0.00000 0.00000 0.12981 0.23654 + 0.09890 0.07472 4.26803 0.25222 0.00000 0.00000 0.14780 0.25376 + 0.10103 0.07580 4.88859 0.26615 0.01355 0.00000 0.16248 0.26790 + 0.10328 0.07693 5.53019 0.28208 0.03119 0.00000 0.17917 0.28403 + 0.10523 0.07790 6.07452 0.29675 0.04732 0.00000 0.19449 0.29888 + 0.10710 0.07882 6.58728 0.31155 0.06351 0.00000 0.20992 0.31386 + 0.10909 0.07979 7.12031 0.32797 0.08138 0.00000 0.22699 0.33046 + 0.11082 0.08063 7.57336 0.34277 0.09744 0.00000 0.24236 0.34543 + 0.11249 0.08144 8.00101 0.35748 0.11335 0.00000 0.25761 0.36030 + 0.11382 0.08208 8.33279 0.36940 0.12622 0.00000 0.26995 0.37234 + 0.11664 0.08342 9.01814 0.39550 0.15431 0.00015 0.29694 0.39871 + 0.11908 0.08457 9.54571 0.41858 0.17909 0.02560 0.32079 0.42203 + 0.12181 0.08585 10.10441 0.44485 0.20724 0.05585 0.34790 0.44856 + 0.12465 0.08716 10.65160 0.47249 0.23681 0.08756 0.37641 0.47646 + 0.12722 0.08834 11.11793 0.49771 0.26378 0.11642 0.40242 0.50194 + 0.12980 0.08952 11.55952 0.52322 0.29102 0.14553 0.42870 0.52769 + 0.13194 0.09049 11.90416 0.54435 0.31358 0.16961 0.45048 0.54903 + 0.13453 0.09165 12.29578 0.56985 0.34080 0.19865 0.47676 0.57479 + 0.13681 0.09266 12.61879 0.59226 0.36471 0.22414 0.49984 0.59742 + 0.13889 0.09359 12.89603 0.61263 0.38645 0.24730 0.52083 0.61799 + 0.14152 0.09474 13.22230 0.63818 0.41371 0.27635 0.54715 0.64380 + 0.14399 0.09582 13.50389 0.66185 0.43899 0.30326 0.57154 0.66771 + 0.14628 0.09681 13.74624 0.68368 0.46231 0.32809 0.59404 0.68977 + 0.14857 0.09780 13.96850 0.70513 0.48524 0.35250 0.61616 0.71144 + 0.15079 0.09875 14.16720 0.72574 0.50728 0.37598 0.63741 0.73227 + 0.15288 0.09964 14.33884 0.74487 0.52776 0.39779 0.65715 0.75160 + 0.15485 0.10047 14.48640 0.76255 0.54671 0.41798 0.67540 0.76948 + 0.15681 0.10129 14.62139 0.77997 0.56539 0.43789 0.69339 0.78709 + 0.15873 0.10210 14.74151 0.79675 0.58340 0.45709 0.71072 0.80405 + 0.16054 0.10285 14.84458 0.81237 0.60019 0.47500 0.72686 0.81985 + 0.16225 0.10356 14.93246 0.82684 0.61576 0.49162 0.74182 0.83449 + 0.16397 0.10427 15.01185 0.84113 0.63115 0.50805 0.75661 0.84894 + 0.16565 0.10496 15.08153 0.85493 0.64603 0.52396 0.77090 0.86291 + 0.16725 0.10561 15.14013 0.86781 0.65994 0.53883 0.78424 0.87594 + 0.16876 0.10622 15.18895 0.87977 0.67287 0.55267 0.79663 0.88805 + 0.17028 0.10684 15.23181 0.89161 0.68569 0.56640 0.80891 0.90004 + 0.10465 0.07901 2.70233 0.21414 0.00000 0.00000 0.11364 0.21589 + 0.10700 0.08016 3.23114 0.22356 0.00000 0.00000 0.12377 0.22554 + 0.11046 0.08183 4.00325 0.23941 0.00000 0.00000 0.14066 0.24173 + 0.11299 0.08303 4.53893 0.25220 0.01255 0.00000 0.15420 0.25478 + 0.11565 0.08429 5.08598 0.26663 0.02870 0.00000 0.16941 0.26947 + 0.11795 0.08537 5.54494 0.27978 0.04331 0.00000 0.18323 0.28285 + 0.12014 0.08639 5.97300 0.29293 0.05785 0.00000 0.19701 0.29622 + 0.12247 0.08747 6.41359 0.30738 0.07378 0.00000 0.21213 0.31091 + 0.12450 0.08839 6.78453 0.32031 0.08797 0.00000 0.22563 0.32405 + 0.12645 0.08928 7.13165 0.33307 0.10194 0.00000 0.23894 0.33701 + 0.12799 0.08998 7.39892 0.34335 0.11317 0.00000 0.24966 0.34744 + 0.13127 0.09146 7.94522 0.36568 0.13752 0.00013 0.27290 0.37010 + 0.13409 0.09272 8.35658 0.38525 0.15880 0.02212 0.29325 0.38996 + 0.13724 0.09411 8.78565 0.40731 0.18277 0.04805 0.31618 0.41234 + 0.14049 0.09554 9.19906 0.43030 0.20773 0.07500 0.34006 0.43567 + 0.14343 0.09682 9.54558 0.45110 0.23030 0.09934 0.36167 0.45677 + 0.14638 0.09809 9.86830 0.47196 0.25292 0.12371 0.38332 0.47793 + 0.14881 0.09914 10.11614 0.48911 0.27152 0.14374 0.40113 0.49532 + 0.15174 0.10038 10.39297 0.50965 0.29381 0.16772 0.42247 0.51617 + 0.15431 0.10147 10.61702 0.52756 0.31325 0.18864 0.44108 0.53434 + 0.15666 0.10246 10.80583 0.54374 0.33082 0.20754 0.45788 0.55076 + 0.15961 0.10369 11.02331 0.56387 0.35271 0.23109 0.47881 0.57119 + 0.16236 0.10483 11.20622 0.58238 0.37285 0.25276 0.49806 0.58998 + 0.16492 0.10588 11.35943 0.59932 0.39131 0.27263 0.51569 0.60718 + 0.16746 0.10691 11.49586 0.61585 0.40935 0.29205 0.53290 0.62397 + 0.16992 0.10791 11.61383 0.63161 0.42658 0.31062 0.54932 0.63998 + 0.17223 0.10885 11.71203 0.64614 0.44249 0.32777 0.56448 0.65474 + 0.17439 0.10971 11.79309 0.65948 0.45712 0.34356 0.57840 0.66830 + 0.17655 0.11057 11.86387 0.67254 0.47147 0.35906 0.59204 0.68157 + 0.17865 0.11140 11.92343 0.68503 0.48522 0.37392 0.60510 0.69428 + 0.18063 0.11218 11.97128 0.69658 0.49796 0.38772 0.61719 0.70603 + 0.18249 0.11291 12.00902 0.70723 0.50973 0.40046 0.62834 0.71686 + 0.18435 0.11364 12.03991 0.71767 0.52130 0.41300 0.63929 0.72748 + 0.18618 0.11435 12.06372 0.72769 0.53242 0.42508 0.64981 0.73769 + 0.18791 0.11501 12.08043 0.73698 0.54277 0.43632 0.65957 0.74715 + 0.18953 0.11564 12.09115 0.74556 0.55234 0.44674 0.66860 0.75589 + 0.19117 0.11626 12.09709 0.75401 0.56179 0.45703 0.67749 0.76450 + 0.11466 0.08495 2.64712 0.20575 0.00000 0.00000 0.10953 0.20824 + 0.11735 0.08620 3.12633 0.21481 0.00000 0.00000 0.11931 0.21757 + 0.12131 0.08803 3.81792 0.22978 0.00000 0.00000 0.13535 0.23296 + 0.12419 0.08934 4.29118 0.24170 0.01180 0.00000 0.14804 0.24519 + 0.12721 0.09071 4.76946 0.25500 0.02685 0.00000 0.16214 0.25881 + 0.12980 0.09188 5.16694 0.26700 0.04035 0.00000 0.17483 0.27109 + 0.13229 0.09298 5.53451 0.27892 0.05368 0.00000 0.18739 0.28327 + 0.13491 0.09415 5.90960 0.29192 0.06818 0.00000 0.20109 0.29656 + 0.13719 0.09515 6.22280 0.30348 0.08102 0.00000 0.21323 0.30835 + 0.13937 0.09610 6.51367 0.31481 0.09359 0.00000 0.22513 0.31992 + 0.14110 0.09686 6.73612 0.32390 0.10365 0.00000 0.23467 0.32919 + 0.14476 0.09844 7.18655 0.34351 0.12532 0.00012 0.25522 0.34919 + 0.14790 0.09979 7.51867 0.36056 0.14413 0.01965 0.27307 0.36658 + 0.15140 0.10127 7.86016 0.37963 0.16515 0.04254 0.29304 0.38602 + 0.15500 0.10279 8.18410 0.39935 0.18687 0.06616 0.31367 0.40612 + 0.15823 0.10414 8.45125 0.41705 0.20638 0.08736 0.33220 0.42416 + 0.16147 0.10548 8.69593 0.43466 0.22580 0.10844 0.35064 0.44212 + 0.16414 0.10658 8.88076 0.44906 0.24168 0.12568 0.36571 0.45680 + 0.16734 0.10789 9.08351 0.46619 0.26060 0.14621 0.38366 0.47427 + 0.17014 0.10903 9.24425 0.48102 0.27700 0.16402 0.39921 0.48939 + 0.17269 0.11005 9.37694 0.49434 0.29175 0.18002 0.41317 0.50298 + 0.17589 0.11133 9.52597 0.51080 0.31001 0.19986 0.43046 0.51978 + 0.17886 0.11251 9.64741 0.52583 0.32671 0.21802 0.44625 0.53512 + 0.18162 0.11360 9.74561 0.53950 0.34193 0.23458 0.46062 0.54907 + 0.18434 0.11467 9.82957 0.55274 0.35672 0.25069 0.47456 0.56259 + 0.18698 0.11569 9.89863 0.56528 0.37077 0.26601 0.48779 0.57541 + 0.18944 0.11664 9.95279 0.57678 0.38367 0.28009 0.49992 0.58716 + 0.19174 0.11753 9.99432 0.58726 0.39548 0.29300 0.51100 0.59788 + 0.19403 0.11840 10.02729 0.59746 0.40700 0.30561 0.52180 0.60831 + 0.19626 0.11924 10.05153 0.60716 0.41799 0.31765 0.53208 0.61824 + 0.19835 0.12003 10.06749 0.61608 0.42812 0.32878 0.54154 0.62736 + 0.20031 0.12077 10.07655 0.62424 0.43743 0.33902 0.55022 0.63572 + 0.20227 0.12150 10.07997 0.63220 0.44654 0.34906 0.55870 0.64388 + 0.20419 0.12221 10.07808 0.63979 0.45527 0.35868 0.56680 0.65167 + 0.20599 0.12287 10.07156 0.64679 0.46334 0.36761 0.57428 0.65885 + 0.20769 0.12349 10.06137 0.65322 0.47078 0.37585 0.58116 0.66544 + 0.20940 0.12412 10.04726 0.65950 0.47809 0.38396 0.58790 0.67189 + 0.13362 0.09532 2.59019 0.19337 0.00000 0.00000 0.10359 0.19757 + 0.13689 0.09676 2.99594 0.20181 0.00000 0.00000 0.11282 0.20639 + 0.14170 0.09884 3.57047 0.21542 0.00000 0.00000 0.12756 0.22055 + 0.14517 0.10033 3.95441 0.22601 0.01070 0.00000 0.13897 0.23154 + 0.14879 0.10187 4.33560 0.23762 0.02415 0.00000 0.15144 0.24357 + 0.15189 0.10318 4.64727 0.24795 0.03604 0.00000 0.16249 0.25425 + 0.15484 0.10442 4.93126 0.25807 0.04765 0.00000 0.17330 0.26470 + 0.15795 0.10572 5.21673 0.26898 0.06013 0.00000 0.18494 0.27597 + 0.16064 0.10683 5.45162 0.27857 0.07107 0.00000 0.19516 0.28586 + 0.16321 0.10789 5.66679 0.28788 0.08169 0.00000 0.20508 0.29547 + 0.16523 0.10871 5.82935 0.29529 0.09012 0.00000 0.21296 0.30310 + 0.16950 0.11045 6.15285 0.31110 0.10809 0.00010 0.22977 0.31939 + 0.17314 0.11192 6.38137 0.32465 0.12349 0.01628 0.24417 0.33335 + 0.17717 0.11353 6.60971 0.33961 0.14050 0.03503 0.26008 0.34876 + 0.18129 0.11517 6.81942 0.35487 0.15787 0.05417 0.27631 0.36448 + 0.18498 0.11662 6.98645 0.36838 0.17328 0.07115 0.29070 0.37840 + 0.18865 0.11805 7.13380 0.38166 0.18846 0.08788 0.30485 0.39208 + 0.19165 0.11921 7.24084 0.39239 0.20075 0.10143 0.31630 0.40313 + 0.19524 0.12059 7.35309 0.40501 0.21524 0.11742 0.32977 0.41614 + 0.19837 0.12178 7.43736 0.41580 0.22768 0.13117 0.34132 0.42728 + 0.20120 0.12285 7.50293 0.42539 0.23876 0.14343 0.35159 0.43716 + 0.20473 0.12418 7.57103 0.43710 0.25236 0.15849 0.36416 0.44925 + 0.20800 0.12539 7.62069 0.44765 0.26466 0.17214 0.37551 0.46015 + 0.21100 0.12650 7.65544 0.45712 0.27576 0.18449 0.38572 0.46994 + 0.21396 0.12758 7.67961 0.46619 0.28644 0.19639 0.39552 0.47931 + 0.21681 0.12861 7.69367 0.47467 0.29649 0.20761 0.40471 0.48809 + 0.21946 0.12957 7.69889 0.48234 0.30564 0.21785 0.41304 0.49603 + 0.22192 0.13045 7.69707 0.48926 0.31393 0.22716 0.42058 0.50320 + 0.22436 0.13131 7.68912 0.49591 0.32195 0.23619 0.42784 0.51009 + 0.22672 0.13214 7.67565 0.50215 0.32953 0.24475 0.43469 0.51657 + 0.22893 0.13291 7.65803 0.50781 0.33646 0.25260 0.44092 0.52246 + 0.23099 0.13362 7.63731 0.51293 0.34278 0.25977 0.44657 0.52778 + 0.23304 0.13433 7.61264 0.51786 0.34890 0.26675 0.45204 0.53292 + 0.23503 0.13501 7.58487 0.52251 0.35472 0.27341 0.45721 0.53776 + 0.23691 0.13564 7.55535 0.52673 0.36006 0.27953 0.46193 0.54217 + 0.23866 0.13623 7.52480 0.53056 0.36493 0.28514 0.46622 0.54616 + 0.24042 0.13682 7.49154 0.53425 0.36968 0.29063 0.47038 0.55002 + 0.16049 0.10878 2.56212 0.18004 0.00000 0.00000 0.09746 0.18729 + 0.16447 0.11042 2.89068 0.18774 0.00000 0.00000 0.10602 0.19548 + 0.17027 0.11278 3.34528 0.19978 0.00000 0.00000 0.11931 0.20823 + 0.17443 0.11446 3.63972 0.20891 0.00955 0.00000 0.12933 0.21786 + 0.17874 0.11619 3.92535 0.21872 0.02134 0.00000 0.14008 0.22820 + 0.18240 0.11765 4.15396 0.22730 0.03160 0.00000 0.14944 0.23721 + 0.18588 0.11902 4.35817 0.23557 0.04148 0.00000 0.15847 0.24589 + 0.18951 0.12044 4.55924 0.24436 0.05196 0.00000 0.16805 0.25512 + 0.19263 0.12166 4.72131 0.25198 0.06103 0.00000 0.17635 0.26310 + 0.19561 0.12281 4.86689 0.25930 0.06975 0.00000 0.18432 0.27077 + 0.19794 0.12370 4.97491 0.26505 0.07660 0.00000 0.19059 0.27680 + 0.20284 0.12557 5.18430 0.27717 0.09104 0.00008 0.20379 0.28948 + 0.20698 0.12714 5.32146 0.28738 0.10324 0.01310 0.21492 0.30017 + 0.21152 0.12884 5.45166 0.29847 0.11652 0.02800 0.22702 0.31177 + 0.21614 0.13056 5.56407 0.30956 0.12987 0.04300 0.23915 0.32338 + 0.22025 0.13206 5.64727 0.31922 0.14155 0.05614 0.24974 0.33349 + 0.22429 0.13353 5.71450 0.32856 0.15290 0.06893 0.26000 0.34327 + 0.22758 0.13471 5.75853 0.33597 0.16198 0.07918 0.26818 0.35104 + 0.23149 0.13610 5.79865 0.34456 0.17256 0.09115 0.27767 0.36005 + 0.23487 0.13730 5.82300 0.35179 0.18153 0.10133 0.28569 0.36763 + 0.23790 0.13836 5.83683 0.35810 0.18942 0.11031 0.29272 0.37426 + 0.24167 0.13966 5.84366 0.36568 0.19899 0.12124 0.30120 0.38224 + 0.24512 0.14084 5.84007 0.37238 0.20754 0.13103 0.30873 0.38929 + 0.24828 0.14190 5.82871 0.37827 0.21515 0.13979 0.31540 0.39550 + 0.25136 0.14293 5.81033 0.38381 0.22238 0.14814 0.32169 0.40135 + 0.25430 0.14391 5.78611 0.38888 0.22909 0.15594 0.32750 0.40671 + 0.25703 0.14480 5.75805 0.39338 0.23513 0.16299 0.33269 0.41148 + 0.25954 0.14561 5.72743 0.39735 0.24054 0.16933 0.33730 0.41569 + 0.26200 0.14639 5.69295 0.40109 0.24571 0.17542 0.34167 0.41966 + 0.26438 0.14714 5.65569 0.40452 0.25053 0.18114 0.34571 0.42331 + 0.26659 0.14783 5.61748 0.40756 0.25489 0.18634 0.34934 0.42655 + 0.26863 0.14847 5.57905 0.41024 0.25881 0.19104 0.35257 0.42942 + 0.27065 0.14908 5.53820 0.41276 0.26257 0.19558 0.35563 0.43213 + 0.27261 0.14967 5.49605 0.41507 0.26610 0.19987 0.35848 0.43461 + 0.27443 0.15022 5.45426 0.41711 0.26929 0.20378 0.36102 0.43682 + 0.27613 0.15072 5.41332 0.41891 0.27217 0.20733 0.36329 0.43876 + 0.27782 0.15121 5.37074 0.42059 0.27494 0.21077 0.36545 0.44059 + 0.20278 0.12836 2.55725 0.16360 0.00000 0.00000 0.09033 0.17669 + 0.20758 0.13021 2.79742 0.17025 0.00000 0.00000 0.09795 0.18394 + 0.21450 0.13284 3.11885 0.18029 0.00000 0.00000 0.10939 0.19485 + 0.21940 0.13468 3.31664 0.18766 0.00819 0.00000 0.11776 0.20282 + 0.22444 0.13656 3.50144 0.19538 0.01810 0.00000 0.12650 0.21114 + 0.22868 0.13813 3.64420 0.20196 0.02654 0.00000 0.13396 0.21822 + 0.23268 0.13958 3.76741 0.20818 0.03453 0.00000 0.14100 0.22491 + 0.23682 0.14109 3.88430 0.21466 0.04287 0.00000 0.14835 0.23187 + 0.24035 0.14236 3.97492 0.22017 0.04998 0.00000 0.15461 0.23779 + 0.24369 0.14355 4.05321 0.22538 0.05671 0.00000 0.16052 0.24337 + 0.24629 0.14447 4.10916 0.22941 0.06195 0.00000 0.16511 0.24770 + 0.25171 0.14637 4.21151 0.23774 0.07280 0.00006 0.17460 0.25662 + 0.25624 0.14793 4.26515 0.24458 0.08179 0.00991 0.18242 0.26395 + 0.26115 0.14961 4.30770 0.25181 0.09139 0.02101 0.19073 0.27170 + 0.26609 0.15126 4.33535 0.25885 0.10086 0.03198 0.19887 0.27925 + 0.27042 0.15270 4.34732 0.26480 0.10898 0.04144 0.20580 0.28564 + 0.27464 0.15407 4.34812 0.27039 0.11673 0.05050 0.21236 0.29165 + 0.27803 0.15516 4.34110 0.27471 0.12282 0.05766 0.21748 0.29630 + 0.28202 0.15642 4.32420 0.27958 0.12980 0.06591 0.22329 0.30154 + 0.28543 0.15748 4.30242 0.28355 0.13561 0.07282 0.22808 0.30583 + 0.28845 0.15840 4.27743 0.28692 0.14064 0.07884 0.23218 0.30947 + 0.29216 0.15952 4.23961 0.29082 0.14664 0.08606 0.23701 0.31370 + 0.29552 0.16051 4.19856 0.29414 0.15189 0.09243 0.24117 0.31730 + 0.29855 0.16138 4.15589 0.29693 0.15647 0.09804 0.24475 0.32035 + 0.30148 0.16221 4.10973 0.29944 0.16074 0.10332 0.24802 0.32309 + 0.30423 0.16297 4.06158 0.30163 0.16463 0.10818 0.25095 0.32550 + 0.30675 0.16365 4.01368 0.30346 0.16806 0.11251 0.25347 0.32752 + 0.30904 0.16425 3.96674 0.30499 0.17107 0.11635 0.25564 0.32922 + 0.31127 0.16482 3.91809 0.30634 0.17389 0.11999 0.25761 0.33073 + 0.31338 0.16535 3.86896 0.30749 0.17647 0.12337 0.25937 0.33202 + 0.31533 0.16583 3.82129 0.30842 0.17875 0.12639 0.26088 0.33308 + 0.31711 0.16625 3.77544 0.30916 0.18076 0.12909 0.26216 0.33394 + 0.31884 0.16665 3.72859 0.30978 0.18264 0.13166 0.26331 0.33466 + 0.32050 0.16702 3.68186 0.31027 0.18436 0.13405 0.26432 0.33525 + 0.32203 0.16735 3.63693 0.31063 0.18588 0.13620 0.26517 0.33569 + 0.32343 0.16765 3.59403 0.31087 0.18722 0.13812 0.26587 0.33601 + 0.32481 0.16793 3.55046 0.31103 0.18847 0.13996 0.26648 0.33623 + 0.24275 0.14588 2.55219 0.15029 0.00000 0.00000 0.08487 0.16963 + 0.24803 0.14780 2.72880 0.15605 0.00000 0.00000 0.09167 0.17602 + 0.25555 0.15050 2.95737 0.16451 0.00000 0.00000 0.10161 0.18536 + 0.26083 0.15236 3.08975 0.17056 0.00717 0.00000 0.10872 0.19201 + 0.26621 0.15424 3.20793 0.17675 0.01570 0.00000 0.11599 0.19880 + 0.27072 0.15579 3.29521 0.18193 0.02286 0.00000 0.12208 0.20446 + 0.27491 0.15722 3.36709 0.18673 0.02955 0.00000 0.12775 0.20971 + 0.27924 0.15868 3.43166 0.19165 0.03643 0.00000 0.13357 0.21508 + 0.28289 0.15989 3.47866 0.19576 0.04223 0.00000 0.13845 0.21956 + 0.28633 0.16102 3.51655 0.19958 0.04766 0.00000 0.14300 0.22373 + 0.28899 0.16189 3.54169 0.20250 0.05184 0.00000 0.14649 0.22691 + 0.29447 0.16364 3.58196 0.20842 0.06041 0.00005 0.15359 0.23334 + 0.29901 0.16507 3.58875 0.21315 0.06738 0.00790 0.15933 0.23849 + 0.30387 0.16656 3.58349 0.21802 0.07472 0.01662 0.16529 0.24379 + 0.30870 0.16801 3.56631 0.22262 0.08183 0.02513 0.17100 0.24880 + 0.31288 0.16924 3.54182 0.22638 0.08783 0.03237 0.17574 0.25290 + 0.31691 0.17039 3.50972 0.22980 0.09346 0.03922 0.18012 0.25663 + 0.32011 0.17128 3.47821 0.23236 0.09783 0.04456 0.18346 0.25942 + 0.32382 0.17228 3.43492 0.23512 0.10276 0.05065 0.18716 0.26245 + 0.32695 0.17311 3.39265 0.23728 0.10679 0.05569 0.19012 0.26481 + 0.32969 0.17381 3.35110 0.23904 0.11024 0.06004 0.19260 0.26674 + 0.33301 0.17462 3.29517 0.24096 0.11427 0.06519 0.19541 0.26885 + 0.33597 0.17532 3.23986 0.24247 0.11773 0.06967 0.19775 0.27052 + 0.33860 0.17591 3.18614 0.24364 0.12070 0.07358 0.19967 0.27183 + 0.34110 0.17645 3.13097 0.24459 0.12342 0.07720 0.20135 0.27288 + 0.34342 0.17692 3.07588 0.24530 0.12584 0.08050 0.20278 0.27370 + 0.34550 0.17732 3.02300 0.24580 0.12793 0.08340 0.20393 0.27427 + 0.34736 0.17765 2.97269 0.24612 0.12972 0.08594 0.20486 0.27465 + 0.34915 0.17795 2.92184 0.24631 0.13136 0.08832 0.20564 0.27487 + 0.35081 0.17820 2.87168 0.24635 0.13283 0.09050 0.20626 0.27495 + 0.35230 0.17841 2.82396 0.24628 0.13409 0.09242 0.20674 0.27491 + 0.35365 0.17858 2.77887 0.24612 0.13517 0.09412 0.20707 0.27475 + 0.35494 0.17872 2.73351 0.24586 0.13615 0.09571 0.20731 0.27450 + 0.35615 0.17884 2.68894 0.24552 0.13702 0.09717 0.20746 0.27416 + 0.35724 0.17892 2.64665 0.24512 0.13775 0.09847 0.20751 0.27374 + 0.35822 0.17898 2.60676 0.24467 0.13838 0.09962 0.20749 0.27328 + 0.35916 0.17901 2.56670 0.24416 0.13893 0.10069 0.20740 0.27274 + 0.31642 0.17671 2.49090 0.12805 0.00000 0.00000 0.07606 0.15947 + 0.32189 0.17846 2.57836 0.13237 0.00000 0.00000 0.08143 0.16426 + 0.32955 0.18085 2.68105 0.13843 0.00000 0.00000 0.08898 0.17092 + 0.33482 0.18245 2.72793 0.14256 0.00562 0.00000 0.09416 0.17544 + 0.34009 0.18401 2.76152 0.14663 0.01215 0.00000 0.09930 0.17987 + 0.34442 0.18526 2.78021 0.14990 0.01750 0.00000 0.10347 0.18343 + 0.34839 0.18638 2.79015 0.15283 0.02238 0.00000 0.10724 0.18660 + 0.35241 0.18748 2.79306 0.15573 0.02731 0.00000 0.11100 0.18971 + 0.35575 0.18837 2.78986 0.15807 0.03138 0.00000 0.11407 0.19222 + 0.35884 0.18917 2.78223 0.16017 0.03513 0.00000 0.11686 0.19446 + 0.36119 0.18977 2.77333 0.16172 0.03797 0.00000 0.11896 0.19611 + 0.36595 0.19092 2.74684 0.16473 0.04366 0.00003 0.12308 0.19929 + 0.36978 0.19180 2.70576 0.16699 0.04818 0.00538 0.12626 0.20166 + 0.37378 0.19265 2.65369 0.16915 0.05280 0.01120 0.12943 0.20389 + 0.37761 0.19341 2.59473 0.17100 0.05716 0.01676 0.13229 0.20579 + 0.38082 0.19398 2.53801 0.17236 0.06073 0.02138 0.13453 0.20715 + 0.38380 0.19446 2.47847 0.17344 0.06398 0.02567 0.13648 0.20819 + 0.38609 0.19477 2.42779 0.17413 0.06644 0.02896 0.13786 0.20883 + 0.38864 0.19507 2.36532 0.17473 0.06913 0.03263 0.13927 0.20935 + 0.39071 0.19525 2.30951 0.17505 0.07127 0.03561 0.14030 0.20958 + 0.39245 0.19536 2.25814 0.17520 0.07304 0.03813 0.14107 0.20962 + 0.39446 0.19541 2.19306 0.17518 0.07504 0.04106 0.14182 0.20944 + 0.39614 0.19538 2.13223 0.17497 0.07669 0.04356 0.14232 0.20907 + 0.39754 0.19529 2.07578 0.17463 0.07805 0.04568 0.14262 0.20855 + 0.39879 0.19514 2.02006 0.17415 0.07923 0.04761 0.14276 0.20788 + 0.39985 0.19493 1.96632 0.17355 0.08023 0.04933 0.14275 0.20709 + 0.40073 0.19468 1.91629 0.17289 0.08105 0.05080 0.14263 0.20623 + 0.40144 0.19440 1.86995 0.17217 0.08170 0.05207 0.14242 0.20532 + 0.40205 0.19408 1.82421 0.17138 0.08226 0.05322 0.14212 0.20432 + 0.40255 0.19373 1.78008 0.17053 0.08272 0.05425 0.14175 0.20326 + 0.40293 0.19336 1.73894 0.16966 0.08308 0.05514 0.14132 0.20218 + 0.40321 0.19298 1.70076 0.16879 0.08334 0.05590 0.14086 0.20111 + 0.40342 0.19257 1.66301 0.16786 0.08355 0.05659 0.14033 0.19997 + 0.40355 0.19214 1.62648 0.16691 0.08369 0.05721 0.13977 0.19881 + 0.40361 0.19171 1.59233 0.16596 0.08378 0.05774 0.13919 0.19765 + 0.40361 0.19128 1.56055 0.16503 0.08382 0.05819 0.13860 0.19652 + 0.40355 0.19082 1.52903 0.16406 0.08382 0.05859 0.13797 0.19535 + 0.38186 0.20276 2.36148 0.10954 0.00000 0.00000 0.06862 0.15087 + 0.38681 0.20405 2.38967 0.11276 0.00000 0.00000 0.07279 0.15420 + 0.39357 0.20571 2.41196 0.11708 0.00000 0.00000 0.07846 0.15861 + 0.39809 0.20676 2.40678 0.11991 0.00445 0.00000 0.08222 0.16144 + 0.40252 0.20771 2.39080 0.12258 0.00952 0.00000 0.08583 0.16408 + 0.40606 0.20842 2.37069 0.12464 0.01360 0.00000 0.08868 0.16607 + 0.40924 0.20901 2.34673 0.12642 0.01727 0.00000 0.09119 0.16776 + 0.41238 0.20954 2.31704 0.12810 0.02090 0.00000 0.09361 0.16931 + 0.41491 0.20992 2.28820 0.12939 0.02386 0.00000 0.09554 0.17047 + 0.41720 0.21022 2.25810 0.13050 0.02654 0.00000 0.09723 0.17143 + 0.41891 0.21042 2.23290 0.13128 0.02854 0.00000 0.09847 0.17209 + 0.42223 0.21071 2.17585 0.13269 0.03250 0.00002 0.10082 0.17319 + 0.42478 0.21084 2.11512 0.13362 0.03556 0.00384 0.10253 0.17383 + 0.42728 0.21085 2.04549 0.13437 0.03862 0.00792 0.10411 0.17422 + 0.42953 0.21071 1.97262 0.13484 0.04144 0.01175 0.10542 0.17429 + 0.43125 0.21047 1.90670 0.13503 0.04368 0.01489 0.10633 0.17408 + 0.43272 0.21012 1.84083 0.13501 0.04567 0.01775 0.10701 0.17364 + 0.43373 0.20976 1.78692 0.13484 0.04713 0.01990 0.10741 0.17311 + 0.43471 0.20923 1.72271 0.13447 0.04869 0.02228 0.10770 0.17229 + 0.43538 0.20868 1.66713 0.13401 0.04988 0.02417 0.10780 0.17141 + 0.43582 0.20812 1.61729 0.13348 0.05084 0.02575 0.10777 0.17049 + 0.43617 0.20734 1.55572 0.13269 0.05188 0.02755 0.10758 0.16919 + 0.43628 0.20652 1.49962 0.13182 0.05269 0.02906 0.10727 0.16784 + 0.43622 0.20570 1.44868 0.13091 0.05332 0.03031 0.10687 0.16647 + 0.43599 0.20482 1.39936 0.12993 0.05383 0.03143 0.10637 0.16502 + 0.43561 0.20391 1.35266 0.12889 0.05423 0.03240 0.10579 0.16352 + 0.43512 0.20300 1.30988 0.12786 0.05452 0.03322 0.10518 0.16204 + 0.43455 0.20211 1.27082 0.12683 0.05471 0.03391 0.10455 0.16059 + 0.43387 0.20118 1.23279 0.12576 0.05485 0.03452 0.10386 0.15910 + 0.43311 0.20023 1.19656 0.12468 0.05492 0.03505 0.10314 0.15759 + 0.43229 0.19930 1.16318 0.12362 0.05494 0.03549 0.10241 0.15613 + 0.43144 0.19839 1.13252 0.12259 0.05491 0.03585 0.10170 0.15472 + 0.43051 0.19746 1.10250 0.12153 0.05485 0.03618 0.10095 0.15327 + 0.42953 0.19652 1.07374 0.12047 0.05475 0.03645 0.10018 0.15183 + 0.42853 0.19560 1.04709 0.11944 0.05463 0.03668 0.09943 0.15044 + 0.42752 0.19471 1.02249 0.11845 0.05449 0.03686 0.09870 0.14911 + 0.42646 0.19380 0.99828 0.11744 0.05432 0.03701 0.09794 0.14775 + 0.43903 0.22430 2.18378 0.09402 0.00000 0.00000 0.06197 0.14216 + 0.44294 0.22492 2.17208 0.09640 0.00000 0.00000 0.06513 0.14421 + 0.44810 0.22559 2.14227 0.09947 0.00000 0.00000 0.06931 0.14673 + 0.45140 0.22589 2.10511 0.10138 0.00353 0.00000 0.07198 0.14820 + 0.45450 0.22606 2.05990 0.10310 0.00749 0.00000 0.07447 0.14942 + 0.45687 0.22609 2.01783 0.10437 0.01063 0.00000 0.07636 0.15023 + 0.45890 0.22602 1.97543 0.10539 0.01340 0.00000 0.07797 0.15081 + 0.46079 0.22585 1.92878 0.10631 0.01612 0.00000 0.07948 0.15122 + 0.46224 0.22563 1.88722 0.10695 0.01830 0.00000 0.08063 0.15143 + 0.46346 0.22535 1.84650 0.10746 0.02025 0.00000 0.08160 0.15150 + 0.46431 0.22508 1.81397 0.10778 0.02169 0.00000 0.08228 0.15146 + 0.46579 0.22440 1.74422 0.10826 0.02449 0.00002 0.08349 0.15117 + 0.46673 0.22368 1.67723 0.10844 0.02662 0.00280 0.08428 0.15067 + 0.46743 0.22275 1.60345 0.10842 0.02870 0.00574 0.08491 0.14988 + 0.46778 0.22166 1.52892 0.10818 0.03056 0.00845 0.08530 0.14881 + 0.46779 0.22055 1.46352 0.10777 0.03201 0.01064 0.08546 0.14766 + 0.46752 0.21935 1.39985 0.10721 0.03326 0.01261 0.08543 0.14634 + 0.46710 0.21828 1.34884 0.10665 0.03415 0.01408 0.08530 0.14514 + 0.46635 0.21691 1.28928 0.10585 0.03507 0.01567 0.08500 0.14357 + 0.46548 0.21563 1.23870 0.10505 0.03575 0.01692 0.08463 0.14209 + 0.46454 0.21441 1.19406 0.10425 0.03628 0.01795 0.08421 0.14067 + 0.46313 0.21280 1.13979 0.10316 0.03681 0.01911 0.08358 0.13879 + 0.46161 0.21123 1.09114 0.10207 0.03720 0.02006 0.08290 0.13695 + 0.46003 0.20970 1.04759 0.10098 0.03747 0.02083 0.08219 0.13518 + 0.45829 0.20814 1.00597 0.09985 0.03766 0.02151 0.08143 0.13337 + 0.45646 0.20657 0.96704 0.09871 0.03777 0.02209 0.08063 0.13156 + 0.45461 0.20505 0.93177 0.09760 0.03783 0.02257 0.07984 0.12983 + 0.45277 0.20360 0.89990 0.09653 0.03782 0.02295 0.07906 0.12818 + 0.45083 0.20211 0.86914 0.09544 0.03778 0.02329 0.07825 0.12651 + 0.44884 0.20062 0.84011 0.09435 0.03770 0.02357 0.07743 0.12485 + 0.44687 0.19919 0.81357 0.09330 0.03760 0.02380 0.07664 0.12327 + 0.44495 0.19783 0.78938 0.09230 0.03747 0.02398 0.07587 0.12177 + 0.44294 0.19643 0.76587 0.09128 0.03732 0.02413 0.07508 0.12026 + 0.44091 0.19504 0.74348 0.09027 0.03714 0.02425 0.07429 0.11876 + 0.43892 0.19371 0.72288 0.08931 0.03696 0.02434 0.07353 0.11733 + 0.43699 0.19243 0.70397 0.08839 0.03677 0.02440 0.07281 0.11598 + 0.43500 0.19113 0.68546 0.08745 0.03657 0.02444 0.07206 0.11461 + 0.49905 0.24513 1.92477 0.07835 0.00000 0.00000 0.05446 0.13038 + 0.50119 0.24475 1.88218 0.07995 0.00000 0.00000 0.05662 0.13110 + 0.50369 0.24394 1.81399 0.08189 0.00000 0.00000 0.05934 0.13172 + 0.50504 0.24318 1.75509 0.08302 0.00263 0.00000 0.06099 0.13187 + 0.50606 0.24224 1.69130 0.08395 0.00554 0.00000 0.06245 0.13178 + 0.50663 0.24133 1.63624 0.08457 0.00780 0.00000 0.06351 0.13151 + 0.50693 0.24036 1.58374 0.08501 0.00978 0.00000 0.06434 0.13110 + 0.50699 0.23925 1.52866 0.08533 0.01168 0.00000 0.06507 0.13052 + 0.50684 0.23822 1.48151 0.08549 0.01318 0.00000 0.06558 0.12991 + 0.50653 0.23717 1.43676 0.08556 0.01451 0.00000 0.06596 0.12923 + 0.50617 0.23630 1.40191 0.08555 0.01548 0.00000 0.06620 0.12863 + 0.50508 0.23435 1.32954 0.08538 0.01732 0.00001 0.06652 0.12721 + 0.50381 0.23256 1.26421 0.08507 0.01869 0.00192 0.06662 0.12583 + 0.50206 0.23046 1.19431 0.08456 0.02000 0.00390 0.06655 0.12414 + 0.49990 0.22818 1.12560 0.08388 0.02114 0.00571 0.06630 0.12225 + 0.49766 0.22603 1.06674 0.08314 0.02199 0.00714 0.06594 0.12043 + 0.49515 0.22379 1.01062 0.08230 0.02270 0.00841 0.06546 0.11852 + 0.49289 0.22189 0.96648 0.08153 0.02319 0.00934 0.06499 0.11688 + 0.48996 0.21954 0.91581 0.08054 0.02367 0.01034 0.06433 0.11485 + 0.48719 0.21741 0.87348 0.07961 0.02400 0.01111 0.06369 0.11302 + 0.48453 0.21543 0.83663 0.07873 0.02424 0.01174 0.06306 0.11132 + 0.48098 0.21289 0.79247 0.07756 0.02445 0.01243 0.06221 0.10914 + 0.47749 0.21047 0.75345 0.07642 0.02458 0.01298 0.06136 0.10708 + 0.47410 0.20817 0.71898 0.07534 0.02464 0.01342 0.06054 0.10514 + 0.47059 0.20586 0.68643 0.07423 0.02466 0.01380 0.05968 0.10320 + 0.46706 0.20358 0.65631 0.07313 0.02462 0.01412 0.05883 0.10131 + 0.46364 0.20141 0.62931 0.07209 0.02456 0.01437 0.05800 0.09952 + 0.46034 0.19936 0.60513 0.07109 0.02446 0.01456 0.05721 0.09784 + 0.45697 0.19728 0.58199 0.07009 0.02435 0.01473 0.05641 0.09617 + 0.45359 0.19524 0.56033 0.06910 0.02421 0.01486 0.05561 0.09453 + 0.45033 0.19330 0.54068 0.06816 0.02406 0.01496 0.05485 0.09299 + 0.44721 0.19145 0.52289 0.06727 0.02391 0.01503 0.05413 0.09153 + 0.44402 0.18959 0.50570 0.06638 0.02374 0.01508 0.05339 0.09008 + 0.44084 0.18776 0.48945 0.06550 0.02356 0.01512 0.05267 0.08866 + 0.43778 0.18601 0.47457 0.06466 0.02338 0.01513 0.05199 0.08732 + 0.43485 0.18434 0.46100 0.06387 0.02321 0.01514 0.05133 0.08606 + 0.43186 0.18266 0.44777 0.06307 0.02302 0.01513 0.05067 0.08479 + 0.54669 0.25948 1.65278 0.06629 0.00000 0.00000 0.04771 0.11751 + 0.54673 0.25801 1.59415 0.06732 0.00000 0.00000 0.04909 0.11722 + 0.54614 0.25563 1.50772 0.06848 0.00000 0.00000 0.05072 0.11644 + 0.54526 0.25376 1.44030 0.06907 0.00195 0.00000 0.05164 0.11566 + 0.54397 0.25168 1.37052 0.06948 0.00408 0.00000 0.05239 0.11465 + 0.54256 0.24980 1.31228 0.06969 0.00571 0.00000 0.05286 0.11366 + 0.54098 0.24793 1.25825 0.06976 0.00711 0.00000 0.05319 0.11260 + 0.53907 0.24589 1.20295 0.06973 0.00845 0.00000 0.05342 0.11139 + 0.53723 0.24406 1.15662 0.06962 0.00949 0.00000 0.05352 0.11027 + 0.53530 0.24226 1.11347 0.06944 0.01039 0.00000 0.05354 0.10914 + 0.53368 0.24081 1.08036 0.06925 0.01105 0.00000 0.05351 0.10821 + 0.52994 0.23765 1.01293 0.06874 0.01228 0.00001 0.05331 0.10615 + 0.52643 0.23486 0.95425 0.06818 0.01317 0.00132 0.05302 0.10430 + 0.52223 0.23168 0.89268 0.06745 0.01400 0.00268 0.05258 0.10215 + 0.51759 0.22831 0.83330 0.06658 0.01470 0.00390 0.05200 0.09987 + 0.51316 0.22522 0.78330 0.06572 0.01521 0.00485 0.05139 0.09776 + 0.50849 0.22207 0.73636 0.06479 0.01561 0.00569 0.05070 0.09561 + 0.50449 0.21943 0.69992 0.06398 0.01588 0.00629 0.05009 0.09382 + 0.49949 0.21622 0.65861 0.06296 0.01613 0.00693 0.04931 0.09165 + 0.49495 0.21338 0.62451 0.06203 0.01628 0.00742 0.04859 0.08973 + 0.49070 0.21076 0.59514 0.06117 0.01638 0.00781 0.04790 0.08798 + 0.48520 0.20743 0.56032 0.06005 0.01645 0.00823 0.04701 0.08578 + 0.47994 0.20431 0.52989 0.05898 0.01646 0.00856 0.04615 0.08373 + 0.47493 0.20139 0.50327 0.05797 0.01644 0.00883 0.04533 0.08183 + 0.46986 0.19847 0.47835 0.05696 0.01638 0.00904 0.04450 0.07995 + 0.46484 0.19563 0.45549 0.05596 0.01630 0.00922 0.04369 0.07814 + 0.46005 0.19295 0.43514 0.05503 0.01620 0.00935 0.04292 0.07645 + 0.45550 0.19043 0.41705 0.05414 0.01609 0.00946 0.04219 0.07488 + 0.45091 0.18792 0.39985 0.05326 0.01597 0.00954 0.04146 0.07332 + 0.44636 0.18545 0.38385 0.05240 0.01584 0.00960 0.04075 0.07182 + 0.44203 0.18312 0.36941 0.05158 0.01570 0.00964 0.04007 0.07041 + 0.43791 0.18093 0.35641 0.05081 0.01556 0.00966 0.03944 0.06909 + 0.43375 0.17873 0.34391 0.05005 0.01541 0.00967 0.03880 0.06779 + 0.42963 0.17657 0.33213 0.04929 0.01526 0.00968 0.03818 0.06651 + 0.42570 0.17452 0.32140 0.04858 0.01511 0.00967 0.03759 0.06532 + 0.42196 0.17259 0.31165 0.04791 0.01496 0.00965 0.03703 0.06420 + 0.41818 0.17064 0.30218 0.04724 0.01481 0.00963 0.03647 0.06309 + 0.58259 0.26783 1.38817 0.05721 0.00000 0.00000 0.04162 0.10392 + 0.58037 0.26527 1.32357 0.05781 0.00000 0.00000 0.04241 0.10290 + 0.57651 0.26134 1.23208 0.05838 0.00000 0.00000 0.04325 0.10117 + 0.57330 0.25839 1.16434 0.05859 0.00144 0.00000 0.04365 0.09977 + 0.56961 0.25522 1.09612 0.05865 0.00298 0.00000 0.04390 0.09818 + 0.56618 0.25243 1.04040 0.05858 0.00415 0.00000 0.04399 0.09675 + 0.56270 0.24971 0.98961 0.05842 0.00515 0.00000 0.04399 0.09531 + 0.55882 0.24680 0.93848 0.05817 0.00608 0.00000 0.04389 0.09375 + 0.55530 0.24425 0.89630 0.05788 0.00680 0.00000 0.04375 0.09235 + 0.55178 0.24176 0.85751 0.05756 0.00743 0.00000 0.04355 0.09099 + 0.54892 0.23979 0.82807 0.05727 0.00787 0.00000 0.04336 0.08989 + 0.54261 0.23555 0.76895 0.05657 0.00869 0.00001 0.04288 0.08754 + 0.53697 0.23187 0.71880 0.05588 0.00927 0.00092 0.04238 0.08549 + 0.53046 0.22774 0.66696 0.05505 0.00980 0.00185 0.04175 0.08318 + 0.52350 0.22345 0.61768 0.05411 0.01024 0.00268 0.04102 0.08079 + 0.51704 0.21956 0.57675 0.05322 0.01054 0.00332 0.04031 0.07863 + 0.51040 0.21565 0.53877 0.05228 0.01077 0.00388 0.03956 0.07647 + 0.50483 0.21241 0.50960 0.05148 0.01092 0.00427 0.03892 0.07469 + 0.49799 0.20851 0.47685 0.05050 0.01104 0.00469 0.03812 0.07258 + 0.49188 0.20508 0.45008 0.04962 0.01110 0.00500 0.03740 0.07073 + 0.48624 0.20196 0.42721 0.04880 0.01113 0.00525 0.03673 0.06907 + 0.47905 0.19803 0.40032 0.04776 0.01114 0.00552 0.03588 0.06699 + 0.47226 0.19437 0.37702 0.04678 0.01111 0.00572 0.03508 0.06508 + 0.46588 0.19097 0.35679 0.04587 0.01105 0.00588 0.03433 0.06334 + 0.45949 0.18761 0.33799 0.04496 0.01098 0.00601 0.03358 0.06162 + 0.45324 0.18435 0.32085 0.04407 0.01089 0.00611 0.03285 0.05999 + 0.44732 0.18130 0.30569 0.04324 0.01080 0.00618 0.03217 0.05847 + 0.44176 0.17846 0.29228 0.04246 0.01070 0.00623 0.03153 0.05707 + 0.43617 0.17563 0.27959 0.04169 0.01059 0.00627 0.03090 0.05570 + 0.43070 0.17287 0.26784 0.04094 0.01047 0.00630 0.03028 0.05437 + 0.42550 0.17028 0.25728 0.04023 0.01036 0.00631 0.02970 0.05314 + 0.42061 0.16785 0.24780 0.03956 0.01025 0.00632 0.02916 0.05200 + 0.41568 0.16543 0.23873 0.03890 0.01013 0.00632 0.02862 0.05087 + 0.41084 0.16306 0.23021 0.03826 0.01001 0.00631 0.02809 0.04978 + 0.40625 0.16082 0.22247 0.03765 0.00989 0.00629 0.02760 0.04875 + 0.40190 0.15872 0.21545 0.03708 0.00978 0.00627 0.02713 0.04780 + 0.39752 0.15661 0.20865 0.03651 0.00967 0.00625 0.02667 0.04686 + 0.60752 0.27074 1.14340 0.05046 0.00000 0.00000 0.03614 0.09007 + 0.60300 0.26716 1.07941 0.05071 0.00000 0.00000 0.03649 0.08859 + 0.59585 0.26179 0.99112 0.05083 0.00000 0.00000 0.03677 0.08628 + 0.59034 0.25785 0.92796 0.05075 0.00105 0.00000 0.03681 0.08453 + 0.58429 0.25369 0.86556 0.05055 0.00216 0.00000 0.03673 0.08264 + 0.57890 0.25008 0.81539 0.05028 0.00300 0.00000 0.03657 0.08098 + 0.57359 0.24662 0.77028 0.04996 0.00370 0.00000 0.03636 0.07937 + 0.56783 0.24294 0.72545 0.04955 0.00436 0.00000 0.03607 0.07766 + 0.56272 0.23976 0.68888 0.04915 0.00486 0.00000 0.03578 0.07616 + 0.55771 0.23668 0.65560 0.04873 0.00528 0.00000 0.03546 0.07472 + 0.55370 0.23426 0.63055 0.04838 0.00558 0.00000 0.03519 0.07359 + 0.54502 0.22911 0.58081 0.04757 0.00613 0.00000 0.03455 0.07118 + 0.53742 0.22470 0.53940 0.04682 0.00651 0.00064 0.03396 0.06912 + 0.52881 0.21980 0.49713 0.04594 0.00685 0.00128 0.03326 0.06685 + 0.51978 0.21475 0.45742 0.04498 0.00712 0.00185 0.03249 0.06454 + 0.51153 0.21023 0.42479 0.04408 0.00730 0.00228 0.03177 0.06248 + 0.50318 0.20573 0.39482 0.04317 0.00744 0.00265 0.03102 0.06045 + 0.49624 0.20203 0.37198 0.04240 0.00751 0.00292 0.03040 0.05880 + 0.48783 0.19761 0.34655 0.04146 0.00757 0.00319 0.02965 0.05685 + 0.48040 0.19375 0.32593 0.04063 0.00759 0.00340 0.02898 0.05517 + 0.47359 0.19025 0.30842 0.03987 0.00759 0.00356 0.02836 0.05366 + 0.46500 0.18589 0.28798 0.03891 0.00756 0.00372 0.02759 0.05180 + 0.45696 0.18185 0.27039 0.03801 0.00752 0.00385 0.02687 0.05011 + 0.44947 0.17813 0.25521 0.03718 0.00747 0.00395 0.02621 0.04857 + 0.44203 0.17447 0.24117 0.03636 0.00740 0.00403 0.02555 0.04707 + 0.43480 0.17094 0.22844 0.03556 0.00732 0.00409 0.02492 0.04565 + 0.42801 0.16766 0.21723 0.03482 0.00724 0.00413 0.02433 0.04434 + 0.42165 0.16461 0.20735 0.03413 0.00716 0.00416 0.02378 0.04315 + 0.41532 0.16159 0.19804 0.03345 0.00707 0.00417 0.02324 0.04197 + 0.40913 0.15866 0.18944 0.03279 0.00698 0.00419 0.02272 0.04085 + 0.40330 0.15592 0.18174 0.03217 0.00689 0.00419 0.02224 0.03981 + 0.39783 0.15336 0.17485 0.03159 0.00680 0.00419 0.02178 0.03884 + 0.39236 0.15082 0.16826 0.03101 0.00671 0.00418 0.02133 0.03790 + 0.38700 0.14834 0.16209 0.03045 0.00662 0.00417 0.02090 0.03699 + 0.38192 0.14601 0.15650 0.02992 0.00654 0.00415 0.02049 0.03614 + 0.37715 0.14382 0.15143 0.02943 0.00645 0.00413 0.02011 0.03535 + 0.37236 0.14164 0.14654 0.02894 0.00637 0.00411 0.01973 0.03457 + 0.62231 0.26885 0.92518 0.04540 0.00000 0.00000 0.03121 0.07648 + 0.61555 0.26434 0.86585 0.04536 0.00000 0.00000 0.03126 0.07476 + 0.60523 0.25771 0.78558 0.04512 0.00000 0.00000 0.03114 0.07218 + 0.59753 0.25291 0.72959 0.04482 0.00076 0.00000 0.03095 0.07029 + 0.58927 0.24789 0.67510 0.04441 0.00156 0.00000 0.03066 0.06829 + 0.58205 0.24359 0.63185 0.04399 0.00215 0.00000 0.03035 0.06658 + 0.57505 0.23950 0.59338 0.04355 0.00264 0.00000 0.03002 0.06495 + 0.56756 0.23519 0.55554 0.04303 0.00310 0.00000 0.02962 0.06324 + 0.56101 0.23148 0.52497 0.04255 0.00344 0.00000 0.02925 0.06177 + 0.55465 0.22794 0.49738 0.04206 0.00373 0.00000 0.02887 0.06036 + 0.54960 0.22515 0.47676 0.04166 0.00394 0.00000 0.02856 0.05927 + 0.53882 0.21928 0.43618 0.04077 0.00431 0.00000 0.02787 0.05697 + 0.52950 0.21429 0.40292 0.03998 0.00456 0.00044 0.02725 0.05504 + 0.51907 0.20881 0.36929 0.03907 0.00478 0.00089 0.02654 0.05293 + 0.50826 0.20320 0.33803 0.03811 0.00494 0.00128 0.02579 0.05081 + 0.49850 0.19822 0.31256 0.03723 0.00505 0.00157 0.02510 0.04895 + 0.48872 0.19329 0.28936 0.03633 0.00513 0.00182 0.02441 0.04712 + 0.48065 0.18927 0.27181 0.03559 0.00516 0.00200 0.02384 0.04566 + 0.47095 0.18449 0.25239 0.03470 0.00519 0.00218 0.02315 0.04394 + 0.46245 0.18035 0.23674 0.03392 0.00519 0.00232 0.02254 0.04247 + 0.45472 0.17662 0.22353 0.03321 0.00518 0.00242 0.02200 0.04116 + 0.44502 0.17198 0.20818 0.03231 0.00515 0.00253 0.02132 0.03956 + 0.43601 0.16772 0.19504 0.03149 0.00510 0.00261 0.02069 0.03811 + 0.42768 0.16381 0.18375 0.03073 0.00505 0.00267 0.02012 0.03680 + 0.41945 0.15998 0.17336 0.02998 0.00500 0.00272 0.01955 0.03554 + 0.41149 0.15631 0.16397 0.02926 0.00493 0.00275 0.01902 0.03434 + 0.40406 0.15291 0.15572 0.02859 0.00487 0.00278 0.01852 0.03325 + 0.39714 0.14976 0.14848 0.02797 0.00481 0.00279 0.01806 0.03225 + 0.39027 0.14666 0.14167 0.02736 0.00474 0.00280 0.01761 0.03128 + 0.38360 0.14367 0.13539 0.02676 0.00467 0.00280 0.01717 0.03035 + 0.37734 0.14087 0.12978 0.02621 0.00461 0.00280 0.01677 0.02950 + 0.37148 0.13827 0.12477 0.02570 0.00454 0.00280 0.01639 0.02871 + 0.36564 0.13570 0.11999 0.02519 0.00448 0.00279 0.01602 0.02794 + 0.35994 0.13320 0.11552 0.02470 0.00441 0.00278 0.01566 0.02720 + 0.35457 0.13085 0.11147 0.02423 0.00435 0.00277 0.01533 0.02651 + 0.34953 0.12866 0.10780 0.02380 0.00429 0.00275 0.01502 0.02588 + 0.34449 0.12647 0.10427 0.02337 0.00422 0.00274 0.01471 0.02525 + 0.62785 0.26280 0.73626 0.04149 0.00000 0.00000 0.02681 0.06358 + 0.61898 0.25751 0.68380 0.04121 0.00000 0.00000 0.02664 0.06180 + 0.60573 0.24981 0.61393 0.04066 0.00000 0.00000 0.02628 0.05918 + 0.59602 0.24430 0.56616 0.04018 0.00054 0.00000 0.02594 0.05731 + 0.58575 0.23859 0.52025 0.03961 0.00111 0.00000 0.02552 0.05536 + 0.57688 0.23374 0.48420 0.03907 0.00153 0.00000 0.02513 0.05372 + 0.56837 0.22915 0.45242 0.03853 0.00187 0.00000 0.02473 0.05217 + 0.55935 0.22436 0.42145 0.03792 0.00219 0.00000 0.02429 0.05057 + 0.55153 0.22025 0.39663 0.03738 0.00243 0.00000 0.02389 0.04920 + 0.54401 0.21635 0.37438 0.03684 0.00262 0.00000 0.02349 0.04791 + 0.53807 0.21329 0.35785 0.03641 0.00276 0.00000 0.02317 0.04690 + 0.52548 0.20689 0.32558 0.03547 0.00301 0.00000 0.02248 0.04482 + 0.51471 0.20150 0.29945 0.03465 0.00317 0.00031 0.02188 0.04309 + 0.50278 0.19561 0.27326 0.03372 0.00331 0.00062 0.02120 0.04122 + 0.49051 0.18963 0.24911 0.03276 0.00342 0.00088 0.02050 0.03936 + 0.47953 0.18435 0.22960 0.03189 0.00348 0.00108 0.01987 0.03774 + 0.46860 0.17916 0.21193 0.03103 0.00352 0.00125 0.01924 0.03617 + 0.45965 0.17495 0.19864 0.03031 0.00354 0.00137 0.01873 0.03491 + 0.44896 0.16997 0.18402 0.02946 0.00355 0.00149 0.01812 0.03345 + 0.43965 0.16567 0.17229 0.02872 0.00354 0.00158 0.01759 0.03221 + 0.43123 0.16182 0.16243 0.02805 0.00353 0.00165 0.01711 0.03111 + 0.42072 0.15706 0.15102 0.02721 0.00350 0.00172 0.01653 0.02977 + 0.41102 0.15271 0.14129 0.02644 0.00346 0.00178 0.01599 0.02857 + 0.40209 0.14873 0.13297 0.02574 0.00342 0.00181 0.01550 0.02749 + 0.39331 0.14485 0.12532 0.02505 0.00338 0.00184 0.01502 0.02645 + 0.38487 0.14115 0.11843 0.02439 0.00333 0.00187 0.01457 0.02547 + 0.37702 0.13774 0.11239 0.02378 0.00328 0.00188 0.01415 0.02458 + 0.36975 0.13459 0.10710 0.02322 0.00324 0.00189 0.01377 0.02378 + 0.36255 0.13150 0.10213 0.02267 0.00319 0.00189 0.01339 0.02299 + 0.35559 0.12852 0.09755 0.02213 0.00314 0.00189 0.01304 0.02225 + 0.34907 0.12575 0.09347 0.02164 0.00309 0.00189 0.01270 0.02157 + 0.34300 0.12319 0.08983 0.02118 0.00304 0.00188 0.01239 0.02094 + 0.33696 0.12065 0.08635 0.02072 0.00299 0.00188 0.01209 0.02033 + 0.33110 0.11819 0.08310 0.02028 0.00295 0.00187 0.01180 0.01974 + 0.32558 0.11590 0.08016 0.01987 0.00290 0.00186 0.01153 0.01920 + 0.32042 0.11376 0.07750 0.01949 0.00286 0.00185 0.01128 0.01870 + 0.31527 0.11163 0.07493 0.01910 0.00281 0.00183 0.01103 0.01821 + 0.62509 0.25327 0.57655 0.03829 0.00000 0.00000 0.02289 0.05172 + 0.61432 0.24735 0.53187 0.03781 0.00000 0.00000 0.02259 0.04999 + 0.59843 0.23882 0.47317 0.03701 0.00000 0.00000 0.02207 0.04752 + 0.58693 0.23276 0.43369 0.03638 0.00039 0.00000 0.02165 0.04577 + 0.57490 0.22653 0.39615 0.03567 0.00078 0.00000 0.02117 0.04398 + 0.56460 0.22127 0.36695 0.03504 0.00108 0.00000 0.02075 0.04248 + 0.55479 0.21632 0.34142 0.03442 0.00132 0.00000 0.02032 0.04108 + 0.54448 0.21118 0.31672 0.03374 0.00153 0.00000 0.01987 0.03965 + 0.53559 0.20680 0.29707 0.03315 0.00170 0.00000 0.01947 0.03843 + 0.52709 0.20265 0.27956 0.03258 0.00183 0.00000 0.01908 0.03730 + 0.52042 0.19942 0.26662 0.03212 0.00192 0.00000 0.01877 0.03642 + 0.50635 0.19268 0.24152 0.03114 0.00209 0.00000 0.01811 0.03461 + 0.49442 0.18705 0.22140 0.03031 0.00220 0.00021 0.01755 0.03312 + 0.48129 0.18092 0.20138 0.02938 0.00229 0.00043 0.01693 0.03152 + 0.46789 0.17474 0.18304 0.02842 0.00235 0.00061 0.01629 0.02994 + 0.45598 0.16932 0.16832 0.02757 0.00239 0.00075 0.01573 0.02858 + 0.44420 0.16401 0.15506 0.02673 0.00242 0.00086 0.01517 0.02727 + 0.43461 0.15973 0.14514 0.02604 0.00243 0.00094 0.01472 0.02623 + 0.42321 0.15469 0.13425 0.02522 0.00242 0.00103 0.01419 0.02503 + 0.41333 0.15036 0.12556 0.02452 0.00242 0.00109 0.01374 0.02401 + 0.40445 0.14649 0.11828 0.02389 0.00240 0.00113 0.01333 0.02311 + 0.39341 0.14173 0.10987 0.02310 0.00238 0.00118 0.01283 0.02203 + 0.38326 0.13740 0.10272 0.02239 0.00235 0.00121 0.01238 0.02106 + 0.37397 0.13346 0.09662 0.02173 0.00232 0.00124 0.01197 0.02019 + 0.36488 0.12963 0.09102 0.02110 0.00229 0.00126 0.01157 0.01937 + 0.35618 0.12600 0.08598 0.02049 0.00225 0.00127 0.01119 0.01859 + 0.34811 0.12265 0.08158 0.01993 0.00222 0.00128 0.01084 0.01789 + 0.34066 0.11958 0.07771 0.01942 0.00218 0.00128 0.01053 0.01725 + 0.33331 0.11657 0.07409 0.01892 0.00215 0.00128 0.01022 0.01664 + 0.32623 0.11368 0.07076 0.01843 0.00211 0.00128 0.00992 0.01606 + 0.31962 0.11100 0.06778 0.01798 0.00207 0.00128 0.00965 0.01552 + 0.31349 0.10853 0.06513 0.01757 0.00204 0.00128 0.00940 0.01504 + 0.30740 0.10609 0.06260 0.01716 0.00201 0.00127 0.00915 0.01456 + 0.30150 0.10373 0.06023 0.01677 0.00197 0.00126 0.00892 0.01411 + 0.29597 0.10153 0.05809 0.01640 0.00194 0.00125 0.00870 0.01369 + 0.29081 0.09949 0.05615 0.01606 0.00191 0.00125 0.00849 0.01331 + 0.28567 0.09746 0.05428 0.01572 0.00188 0.00124 0.00829 0.01293 + 0.61497 0.24090 0.44444 0.03546 0.00000 0.00000 0.01942 0.04112 + 0.60252 0.23452 0.40759 0.03482 0.00000 0.00000 0.01904 0.03954 + 0.58435 0.22538 0.35974 0.03382 0.00000 0.00000 0.01845 0.03731 + 0.57132 0.21894 0.32801 0.03306 0.00027 0.00000 0.01799 0.03576 + 0.55781 0.21236 0.29813 0.03225 0.00055 0.00000 0.01749 0.03419 + 0.54632 0.20683 0.27508 0.03155 0.00075 0.00000 0.01706 0.03288 + 0.53544 0.20166 0.25506 0.03087 0.00092 0.00000 0.01665 0.03167 + 0.52407 0.19631 0.23582 0.03014 0.00107 0.00000 0.01620 0.03044 + 0.51433 0.19178 0.22061 0.02952 0.00118 0.00000 0.01582 0.02941 + 0.50506 0.18750 0.20713 0.02892 0.00127 0.00000 0.01546 0.02844 + 0.49781 0.18417 0.19721 0.02845 0.00133 0.00000 0.01517 0.02770 + 0.48261 0.17728 0.17807 0.02745 0.00144 0.00000 0.01456 0.02618 + 0.46980 0.17154 0.16285 0.02661 0.00151 0.00015 0.01405 0.02494 + 0.45579 0.16534 0.14780 0.02568 0.00157 0.00029 0.01350 0.02363 + 0.44159 0.15912 0.13410 0.02474 0.00161 0.00042 0.01293 0.02234 + 0.42903 0.15369 0.12314 0.02391 0.00164 0.00051 0.01244 0.02123 + 0.41669 0.14839 0.11333 0.02310 0.00165 0.00059 0.01196 0.02017 + 0.40668 0.14414 0.10600 0.02244 0.00165 0.00065 0.01157 0.01933 + 0.39484 0.13916 0.09799 0.02166 0.00165 0.00070 0.01112 0.01837 + 0.38463 0.13490 0.09161 0.02100 0.00164 0.00074 0.01073 0.01756 + 0.37548 0.13111 0.08627 0.02040 0.00163 0.00078 0.01039 0.01685 + 0.36416 0.12646 0.08012 0.01967 0.00161 0.00081 0.00996 0.01600 + 0.35381 0.12224 0.07489 0.01900 0.00159 0.00083 0.00958 0.01524 + 0.34437 0.11843 0.07044 0.01839 0.00157 0.00085 0.00924 0.01457 + 0.33517 0.11473 0.06636 0.01781 0.00155 0.00086 0.00891 0.01392 + 0.32639 0.11123 0.06269 0.01725 0.00152 0.00087 0.00860 0.01332 + 0.31828 0.10802 0.05947 0.01674 0.00150 0.00087 0.00831 0.01278 + 0.31081 0.10509 0.05666 0.01627 0.00147 0.00087 0.00805 0.01229 + 0.30348 0.10222 0.05402 0.01581 0.00145 0.00087 0.00780 0.01182 + 0.29643 0.09947 0.05159 0.01538 0.00142 0.00087 0.00756 0.01138 + 0.28987 0.09694 0.04942 0.01497 0.00140 0.00087 0.00734 0.01098 + 0.28380 0.09459 0.04748 0.01460 0.00137 0.00087 0.00714 0.01061 + 0.27779 0.09229 0.04563 0.01423 0.00135 0.00086 0.00694 0.01025 + 0.27198 0.09008 0.04390 0.01388 0.00133 0.00086 0.00675 0.00991 + 0.26655 0.08801 0.04234 0.01355 0.00130 0.00085 0.00657 0.00959 + 0.26148 0.08610 0.04092 0.01324 0.00128 0.00085 0.00641 0.00931 + 0.25646 0.08421 0.03955 0.01294 0.00126 0.00084 0.00625 0.00902 + 0.59841 0.22632 0.33728 0.03277 0.00000 0.00000 0.01637 0.03192 + 0.58454 0.21963 0.30776 0.03200 0.00000 0.00000 0.01595 0.03055 + 0.56448 0.21012 0.26982 0.03084 0.00000 0.00000 0.01533 0.02862 + 0.55021 0.20347 0.24496 0.03000 0.00019 0.00000 0.01487 0.02730 + 0.53550 0.19670 0.22176 0.02912 0.00038 0.00000 0.01439 0.02597 + 0.52307 0.19104 0.20398 0.02836 0.00052 0.00000 0.01397 0.02488 + 0.51138 0.18578 0.18864 0.02765 0.00063 0.00000 0.01358 0.02387 + 0.49920 0.18035 0.17398 0.02689 0.00074 0.00000 0.01316 0.02285 + 0.48882 0.17577 0.16245 0.02625 0.00081 0.00000 0.01281 0.02200 + 0.47898 0.17146 0.15228 0.02564 0.00087 0.00000 0.01248 0.02121 + 0.47131 0.16812 0.14482 0.02516 0.00091 0.00000 0.01222 0.02061 + 0.45531 0.16123 0.13050 0.02417 0.00099 0.00000 0.01167 0.01938 + 0.44191 0.15553 0.11918 0.02333 0.00104 0.00010 0.01122 0.01838 + 0.42732 0.14938 0.10804 0.02242 0.00107 0.00020 0.01073 0.01733 + 0.41262 0.14326 0.09795 0.02151 0.00110 0.00029 0.01025 0.01631 + 0.39970 0.13794 0.08991 0.02071 0.00112 0.00035 0.00982 0.01543 + 0.38705 0.13277 0.08272 0.01993 0.00112 0.00041 0.00941 0.01460 + 0.37684 0.12864 0.07736 0.01931 0.00113 0.00045 0.00908 0.01395 + 0.36481 0.12382 0.07152 0.01857 0.00112 0.00048 0.00869 0.01320 + 0.35447 0.11971 0.06688 0.01794 0.00112 0.00051 0.00837 0.01258 + 0.34525 0.11606 0.06299 0.01739 0.00111 0.00053 0.00808 0.01203 + 0.33389 0.11161 0.05852 0.01671 0.00109 0.00055 0.00773 0.01138 + 0.32354 0.10759 0.05472 0.01609 0.00108 0.00057 0.00741 0.01080 + 0.31413 0.10396 0.05148 0.01553 0.00106 0.00058 0.00713 0.01029 + 0.30500 0.10046 0.04851 0.01499 0.00105 0.00059 0.00686 0.00980 + 0.29631 0.09716 0.04584 0.01449 0.00103 0.00059 0.00660 0.00935 + 0.28832 0.09414 0.04350 0.01402 0.00101 0.00060 0.00637 0.00895 + 0.28098 0.09138 0.04145 0.01360 0.00099 0.00060 0.00616 0.00858 + 0.27379 0.08869 0.03952 0.01318 0.00097 0.00060 0.00595 0.00823 + 0.26690 0.08613 0.03775 0.01279 0.00096 0.00060 0.00576 0.00790 + 0.26050 0.08377 0.03616 0.01243 0.00094 0.00059 0.00558 0.00760 + 0.25459 0.08160 0.03474 0.01209 0.00092 0.00059 0.00541 0.00733 + 0.24877 0.07947 0.03339 0.01176 0.00091 0.00059 0.00525 0.00707 + 0.24314 0.07742 0.03212 0.01145 0.00089 0.00058 0.00510 0.00682 + 0.23790 0.07551 0.03097 0.01116 0.00088 0.00058 0.00496 0.00659 + 0.23302 0.07375 0.02993 0.01089 0.00086 0.00058 0.00483 0.00638 + 0.22819 0.07201 0.02893 0.01062 0.00085 0.00057 0.00470 0.00617 + 0.57634 0.21010 0.25194 0.03007 0.00000 0.00000 0.01369 0.02414 + 0.56133 0.20327 0.22893 0.02921 0.00000 0.00000 0.01327 0.02300 + 0.53978 0.19361 0.19963 0.02796 0.00000 0.00000 0.01266 0.02141 + 0.52456 0.18689 0.18065 0.02706 0.00013 0.00000 0.01222 0.02032 + 0.50896 0.18009 0.16305 0.02613 0.00026 0.00000 0.01176 0.01924 + 0.49585 0.17443 0.14965 0.02535 0.00036 0.00000 0.01138 0.01836 + 0.48356 0.16918 0.13815 0.02462 0.00043 0.00000 0.01102 0.01755 + 0.47084 0.16380 0.12722 0.02386 0.00050 0.00000 0.01064 0.01673 + 0.46003 0.15926 0.11866 0.02321 0.00055 0.00000 0.01033 0.01606 + 0.44982 0.15502 0.11113 0.02260 0.00059 0.00000 0.01003 0.01544 + 0.44188 0.15174 0.10563 0.02213 0.00062 0.00000 0.00980 0.01496 + 0.42541 0.14499 0.09511 0.02115 0.00067 0.00000 0.00932 0.01400 + 0.41167 0.13943 0.08683 0.02034 0.00070 0.00007 0.00893 0.01322 + 0.39680 0.13347 0.07870 0.01946 0.00073 0.00014 0.00851 0.01241 + 0.38189 0.12755 0.07136 0.01859 0.00075 0.00020 0.00809 0.01162 + 0.36884 0.12243 0.06553 0.01783 0.00076 0.00024 0.00773 0.01095 + 0.35613 0.11749 0.06032 0.01710 0.00076 0.00028 0.00738 0.01032 + 0.34591 0.11355 0.05645 0.01651 0.00076 0.00031 0.00710 0.00983 + 0.33391 0.10896 0.05222 0.01583 0.00076 0.00033 0.00678 0.00927 + 0.32365 0.10507 0.04886 0.01525 0.00076 0.00035 0.00651 0.00880 + 0.31452 0.10163 0.04605 0.01473 0.00075 0.00037 0.00627 0.00840 + 0.30331 0.09745 0.04281 0.01410 0.00074 0.00038 0.00598 0.00791 + 0.29314 0.09368 0.04006 0.01354 0.00073 0.00039 0.00572 0.00748 + 0.28393 0.09029 0.03771 0.01303 0.00072 0.00040 0.00549 0.00710 + 0.27501 0.08703 0.03555 0.01255 0.00071 0.00040 0.00526 0.00675 + 0.26656 0.08397 0.03361 0.01209 0.00069 0.00041 0.00506 0.00642 + 0.25881 0.08117 0.03190 0.01167 0.00068 0.00041 0.00487 0.00612 + 0.25171 0.07863 0.03040 0.01129 0.00067 0.00041 0.00470 0.00586 + 0.24478 0.07615 0.02900 0.01092 0.00066 0.00041 0.00453 0.00561 + 0.23815 0.07380 0.02770 0.01057 0.00064 0.00041 0.00437 0.00537 + 0.23202 0.07164 0.02653 0.01025 0.00063 0.00041 0.00423 0.00515 + 0.22636 0.06965 0.02549 0.00995 0.00062 0.00040 0.00410 0.00496 + 0.22080 0.06771 0.02450 0.00966 0.00061 0.00040 0.00397 0.00477 + 0.21544 0.06585 0.02357 0.00938 0.00060 0.00040 0.00385 0.00459 + 0.21045 0.06412 0.02272 0.00913 0.00059 0.00040 0.00374 0.00443 + 0.20582 0.06253 0.02195 0.00889 0.00058 0.00039 0.00363 0.00428 + 0.20124 0.06095 0.02121 0.00865 0.00057 0.00039 0.00353 0.00413 + 0.54964 0.19280 0.18518 0.02731 0.00000 0.00000 0.01136 0.01776 + 0.53379 0.18597 0.16772 0.02639 0.00000 0.00000 0.01096 0.01684 + 0.51117 0.17637 0.14568 0.02508 0.00000 0.00000 0.01038 0.01557 + 0.49529 0.16972 0.13153 0.02416 0.00009 0.00000 0.00997 0.01472 + 0.47910 0.16302 0.11850 0.02323 0.00018 0.00000 0.00956 0.01387 + 0.46555 0.15747 0.10863 0.02244 0.00024 0.00000 0.00921 0.01318 + 0.45291 0.15234 0.10020 0.02172 0.00029 0.00000 0.00889 0.01256 + 0.43986 0.14710 0.09222 0.02097 0.00034 0.00000 0.00856 0.01193 + 0.42883 0.14270 0.08599 0.02034 0.00037 0.00000 0.00828 0.01141 + 0.41844 0.13859 0.08052 0.01974 0.00040 0.00000 0.00802 0.01093 + 0.41039 0.13543 0.07654 0.01929 0.00042 0.00000 0.00782 0.01057 + 0.39374 0.12894 0.06894 0.01835 0.00046 0.00000 0.00741 0.00984 + 0.37993 0.12362 0.06298 0.01757 0.00048 0.00005 0.00707 0.00926 + 0.36504 0.11794 0.05713 0.01674 0.00049 0.00010 0.00671 0.00865 + 0.35018 0.11233 0.05186 0.01592 0.00051 0.00014 0.00636 0.00807 + 0.33723 0.10749 0.04768 0.01521 0.00051 0.00017 0.00605 0.00757 + 0.32467 0.10284 0.04394 0.01453 0.00052 0.00019 0.00576 0.00711 + 0.31461 0.09915 0.04116 0.01399 0.00052 0.00021 0.00553 0.00675 + 0.30284 0.09486 0.03812 0.01336 0.00051 0.00023 0.00526 0.00634 + 0.29281 0.09124 0.03570 0.01283 0.00051 0.00024 0.00504 0.00600 + 0.28392 0.08805 0.03368 0.01236 0.00051 0.00025 0.00484 0.00571 + 0.27304 0.08417 0.03134 0.01180 0.00050 0.00026 0.00461 0.00536 + 0.26320 0.08070 0.02935 0.01129 0.00049 0.00027 0.00439 0.00505 + 0.25432 0.07758 0.02765 0.01083 0.00048 0.00027 0.00420 0.00478 + 0.24575 0.07460 0.02608 0.01040 0.00048 0.00028 0.00402 0.00453 + 0.23766 0.07180 0.02467 0.00999 0.00047 0.00028 0.00386 0.00429 + 0.23025 0.06925 0.02342 0.00962 0.00046 0.00028 0.00370 0.00408 + 0.22349 0.06694 0.02233 0.00928 0.00045 0.00028 0.00357 0.00390 + 0.21690 0.06470 0.02130 0.00896 0.00044 0.00028 0.00344 0.00372 + 0.21062 0.06258 0.02034 0.00865 0.00043 0.00028 0.00331 0.00355 + 0.20482 0.06063 0.01949 0.00837 0.00043 0.00028 0.00320 0.00340 + 0.19948 0.05884 0.01872 0.00811 0.00042 0.00028 0.00309 0.00327 + 0.19424 0.05709 0.01799 0.00785 0.00041 0.00028 0.00299 0.00314 + 0.18921 0.05543 0.01730 0.00761 0.00040 0.00027 0.00289 0.00301 + 0.18453 0.05388 0.01668 0.00739 0.00040 0.00027 0.00280 0.00290 + 0.18021 0.05246 0.01611 0.00719 0.00039 0.00027 0.00272 0.00280 + 0.17593 0.05106 0.01556 0.00698 0.00038 0.00027 0.00264 0.00270 + 0.51918 0.17490 0.13387 0.02446 0.00000 0.00000 0.00934 0.01267 + 0.50277 0.16820 0.12099 0.02353 0.00000 0.00000 0.00897 0.01196 + 0.47948 0.15883 0.10485 0.02222 0.00000 0.00000 0.00845 0.01099 + 0.46323 0.15237 0.09457 0.02131 0.00006 0.00000 0.00808 0.01034 + 0.44674 0.14589 0.08515 0.02039 0.00012 0.00000 0.00771 0.00970 + 0.43299 0.14055 0.07805 0.01962 0.00016 0.00000 0.00740 0.00918 + 0.42022 0.13563 0.07200 0.01892 0.00020 0.00000 0.00712 0.00871 + 0.40709 0.13062 0.06629 0.01820 0.00023 0.00000 0.00683 0.00825 + 0.39602 0.12642 0.06185 0.01760 0.00025 0.00000 0.00659 0.00786 + 0.38563 0.12252 0.05796 0.01704 0.00027 0.00000 0.00637 0.00751 + 0.37760 0.11952 0.05513 0.01660 0.00028 0.00000 0.00620 0.00725 + 0.36106 0.11339 0.04973 0.01572 0.00031 0.00000 0.00585 0.00672 + 0.34739 0.10838 0.04550 0.01500 0.00032 0.00003 0.00556 0.00629 + 0.33272 0.10306 0.04135 0.01423 0.00033 0.00007 0.00526 0.00586 + 0.31814 0.09783 0.03761 0.01347 0.00034 0.00009 0.00497 0.00543 + 0.30550 0.09333 0.03464 0.01283 0.00034 0.00012 0.00471 0.00508 + 0.29328 0.08903 0.03198 0.01221 0.00035 0.00013 0.00447 0.00475 + 0.28352 0.08562 0.02999 0.01172 0.00035 0.00014 0.00428 0.00450 + 0.27215 0.08168 0.02782 0.01115 0.00035 0.00016 0.00406 0.00421 + 0.26250 0.07835 0.02609 0.01067 0.00034 0.00017 0.00388 0.00397 + 0.25396 0.07544 0.02463 0.01025 0.00034 0.00017 0.00372 0.00377 + 0.24355 0.07191 0.02295 0.00975 0.00034 0.00018 0.00353 0.00352 + 0.23417 0.06876 0.02151 0.00930 0.00033 0.00018 0.00336 0.00331 + 0.22573 0.06594 0.02028 0.00890 0.00033 0.00019 0.00321 0.00312 + 0.21762 0.06325 0.01914 0.00851 0.00032 0.00019 0.00306 0.00295 + 0.20997 0.06073 0.01811 0.00816 0.00031 0.00019 0.00293 0.00279 + 0.20299 0.05844 0.01720 0.00783 0.00031 0.00019 0.00281 0.00265 + 0.19664 0.05638 0.01640 0.00754 0.00030 0.00019 0.00270 0.00252 + 0.19047 0.05438 0.01564 0.00726 0.00030 0.00019 0.00259 0.00240 + 0.18459 0.05249 0.01494 0.00699 0.00029 0.00019 0.00249 0.00229 + 0.17918 0.05075 0.01431 0.00675 0.00029 0.00019 0.00240 0.00219 + 0.17422 0.04917 0.01375 0.00652 0.00028 0.00019 0.00232 0.00209 + 0.16935 0.04763 0.01320 0.00631 0.00028 0.00019 0.00224 0.00201 + 0.16469 0.04615 0.01270 0.00610 0.00027 0.00019 0.00216 0.00192 + 0.16036 0.04479 0.01223 0.00591 0.00027 0.00018 0.00209 0.00185 + 0.15637 0.04354 0.01181 0.00574 0.00026 0.00018 0.00203 0.00178 + 0.15243 0.04231 0.01140 0.00557 0.00026 0.00018 0.00197 0.00171 + 0.48578 0.15684 0.09513 0.02157 0.00000 0.00000 0.00761 0.00873 + 0.46909 0.15038 0.08590 0.02066 0.00000 0.00000 0.00728 0.00820 + 0.44554 0.14139 0.07442 0.01938 0.00000 0.00000 0.00681 0.00749 + 0.42918 0.13523 0.06715 0.01850 0.00004 0.00000 0.00649 0.00701 + 0.41266 0.12907 0.06051 0.01763 0.00008 0.00000 0.00617 0.00655 + 0.39895 0.12402 0.05552 0.01691 0.00011 0.00000 0.00590 0.00618 + 0.38625 0.11937 0.05129 0.01624 0.00013 0.00000 0.00566 0.00584 + 0.37324 0.11466 0.04730 0.01557 0.00015 0.00000 0.00542 0.00551 + 0.36231 0.11073 0.04419 0.01501 0.00017 0.00000 0.00521 0.00524 + 0.35208 0.10708 0.04148 0.01449 0.00018 0.00000 0.00502 0.00499 + 0.34419 0.10428 0.03950 0.01409 0.00019 0.00000 0.00488 0.00480 + 0.32800 0.09858 0.03573 0.01328 0.00020 0.00000 0.00458 0.00443 + 0.31468 0.09395 0.03277 0.01262 0.00021 0.00002 0.00435 0.00413 + 0.30044 0.08904 0.02986 0.01192 0.00022 0.00005 0.00410 0.00383 + 0.28635 0.08423 0.02723 0.01124 0.00023 0.00006 0.00385 0.00354 + 0.27418 0.08012 0.02513 0.01066 0.00023 0.00008 0.00365 0.00330 + 0.26246 0.07620 0.02325 0.01011 0.00023 0.00009 0.00345 0.00307 + 0.25314 0.07310 0.02184 0.00967 0.00023 0.00010 0.00329 0.00290 + 0.24231 0.06953 0.02030 0.00917 0.00023 0.00011 0.00312 0.00270 + 0.23314 0.06653 0.01906 0.00875 0.00023 0.00011 0.00297 0.00254 + 0.22506 0.06391 0.01801 0.00838 0.00023 0.00012 0.00284 0.00240 + 0.21524 0.06074 0.01680 0.00794 0.00023 0.00012 0.00269 0.00224 + 0.20642 0.05792 0.01576 0.00755 0.00022 0.00013 0.00255 0.00210 + 0.19851 0.05541 0.01486 0.00720 0.00022 0.00013 0.00243 0.00198 + 0.19092 0.05302 0.01404 0.00687 0.00022 0.00013 0.00231 0.00186 + 0.18380 0.05079 0.01328 0.00656 0.00021 0.00013 0.00221 0.00176 + 0.17731 0.04877 0.01262 0.00629 0.00021 0.00013 0.00211 0.00166 + 0.17142 0.04695 0.01203 0.00604 0.00020 0.00013 0.00202 0.00158 + 0.16571 0.04519 0.01147 0.00580 0.00020 0.00013 0.00194 0.00150 + 0.16029 0.04353 0.01096 0.00557 0.00020 0.00013 0.00186 0.00143 + 0.15531 0.04201 0.01049 0.00536 0.00019 0.00013 0.00179 0.00136 + 0.15075 0.04063 0.01007 0.00518 0.00019 0.00013 0.00173 0.00130 + 0.14629 0.03928 0.00967 0.00499 0.00018 0.00013 0.00167 0.00124 + 0.14202 0.03800 0.00930 0.00482 0.00018 0.00013 0.00161 0.00119 + 0.13807 0.03682 0.00895 0.00466 0.00018 0.00013 0.00155 0.00114 + 0.13443 0.03573 0.00864 0.00452 0.00017 0.00012 0.00150 0.00110 + 0.13084 0.03467 0.00834 0.00437 0.00017 0.00012 0.00145 0.00105 + 0.45024 0.13899 0.06639 0.01869 0.00000 0.00000 0.00614 0.00578 + 0.43354 0.13288 0.05999 0.01782 0.00000 0.00000 0.00585 0.00540 + 0.41009 0.12440 0.05207 0.01662 0.00000 0.00000 0.00544 0.00490 + 0.39389 0.11862 0.04707 0.01580 0.00003 0.00000 0.00517 0.00457 + 0.37759 0.11287 0.04253 0.01499 0.00005 0.00000 0.00489 0.00425 + 0.36411 0.10816 0.03911 0.01432 0.00007 0.00000 0.00467 0.00399 + 0.35168 0.10385 0.03622 0.01371 0.00009 0.00000 0.00446 0.00376 + 0.33898 0.09948 0.03349 0.01310 0.00010 0.00000 0.00425 0.00354 + 0.32834 0.09586 0.03137 0.01259 0.00011 0.00000 0.00408 0.00335 + 0.31842 0.09250 0.02951 0.01212 0.00012 0.00000 0.00393 0.00318 + 0.31078 0.08993 0.02815 0.01176 0.00013 0.00000 0.00381 0.00306 + 0.29516 0.08472 0.02556 0.01103 0.00014 0.00000 0.00356 0.00281 + 0.28236 0.08049 0.02351 0.01045 0.00014 0.00002 0.00337 0.00261 + 0.26874 0.07603 0.02150 0.00983 0.00015 0.00003 0.00316 0.00241 + 0.25531 0.07169 0.01966 0.00923 0.00015 0.00004 0.00296 0.00222 + 0.24375 0.06798 0.01820 0.00872 0.00015 0.00005 0.00280 0.00206 + 0.23267 0.06446 0.01687 0.00823 0.00016 0.00006 0.00264 0.00191 + 0.22388 0.06169 0.01588 0.00785 0.00016 0.00007 0.00251 0.00180 + 0.21370 0.05851 0.01478 0.00742 0.00016 0.00007 0.00237 0.00167 + 0.20511 0.05584 0.01389 0.00706 0.00015 0.00008 0.00225 0.00157 + 0.19757 0.05352 0.01315 0.00674 0.00015 0.00008 0.00215 0.00148 + 0.18842 0.05072 0.01227 0.00637 0.00015 0.00008 0.00203 0.00137 + 0.18024 0.04823 0.01152 0.00603 0.00015 0.00009 0.00192 0.00128 + 0.17291 0.04603 0.01087 0.00574 0.00015 0.00009 0.00182 0.00120 + 0.16591 0.04393 0.01027 0.00546 0.00014 0.00009 0.00173 0.00113 + 0.15936 0.04198 0.00972 0.00520 0.00014 0.00009 0.00165 0.00106 + 0.15340 0.04022 0.00923 0.00497 0.00014 0.00009 0.00157 0.00100 + 0.14801 0.03864 0.00880 0.00476 0.00014 0.00009 0.00151 0.00095 + 0.14280 0.03711 0.00839 0.00456 0.00013 0.00009 0.00144 0.00090 + 0.13786 0.03568 0.00801 0.00437 0.00013 0.00009 0.00138 0.00086 + 0.13333 0.03437 0.00766 0.00420 0.00013 0.00009 0.00133 0.00082 + 0.12919 0.03318 0.00735 0.00404 0.00013 0.00009 0.00128 0.00078 + 0.12516 0.03202 0.00706 0.00389 0.00012 0.00009 0.00123 0.00074 + 0.12130 0.03092 0.00678 0.00375 0.00012 0.00009 0.00118 0.00071 + 0.11774 0.02991 0.00652 0.00362 0.00012 0.00009 0.00114 0.00068 + 0.11446 0.02899 0.00629 0.00350 0.00012 0.00008 0.00110 0.00065 + 0.11124 0.02808 0.00607 0.00338 0.00011 0.00008 0.00107 0.00063 + 0.41326 0.12168 0.04549 0.01588 0.00000 0.00000 0.00490 0.00365 + 0.39680 0.11598 0.04122 0.01508 0.00000 0.00000 0.00465 0.00340 + 0.37380 0.10812 0.03594 0.01399 0.00000 0.00000 0.00430 0.00307 + 0.35798 0.10278 0.03262 0.01324 0.00002 0.00000 0.00407 0.00285 + 0.34213 0.09749 0.02959 0.01251 0.00003 0.00000 0.00384 0.00263 + 0.32908 0.09317 0.02732 0.01191 0.00005 0.00000 0.00365 0.00247 + 0.31707 0.08923 0.02539 0.01137 0.00006 0.00000 0.00348 0.00232 + 0.30485 0.08526 0.02357 0.01082 0.00007 0.00000 0.00331 0.00217 + 0.29465 0.08196 0.02215 0.01037 0.00007 0.00000 0.00317 0.00205 + 0.28515 0.07892 0.02090 0.00995 0.00008 0.00000 0.00304 0.00194 + 0.27787 0.07660 0.01999 0.00964 0.00008 0.00000 0.00294 0.00186 + 0.26300 0.07191 0.01823 0.00900 0.00009 0.00000 0.00274 0.00170 + 0.25087 0.06811 0.01683 0.00849 0.00009 0.00001 0.00258 0.00158 + 0.23801 0.06413 0.01545 0.00795 0.00010 0.00002 0.00242 0.00145 + 0.22538 0.06026 0.01418 0.00744 0.00010 0.00003 0.00226 0.00133 + 0.21456 0.05697 0.01315 0.00700 0.00010 0.00004 0.00212 0.00123 + 0.20421 0.05386 0.01222 0.00659 0.00010 0.00004 0.00200 0.00114 + 0.19603 0.05142 0.01152 0.00627 0.00010 0.00005 0.00190 0.00107 + 0.18659 0.04862 0.01074 0.00590 0.00010 0.00005 0.00179 0.00099 + 0.17866 0.04629 0.01011 0.00559 0.00010 0.00005 0.00169 0.00092 + 0.17170 0.04426 0.00957 0.00533 0.00010 0.00006 0.00161 0.00087 + 0.16329 0.04182 0.00894 0.00501 0.00010 0.00006 0.00152 0.00081 + 0.15579 0.03966 0.00840 0.00474 0.00010 0.00006 0.00143 0.00075 + 0.14911 0.03776 0.00793 0.00449 0.00010 0.00006 0.00136 0.00070 + 0.14273 0.03595 0.00749 0.00426 0.00010 0.00006 0.00129 0.00066 + 0.13677 0.03427 0.00708 0.00405 0.00009 0.00006 0.00122 0.00062 + 0.13138 0.03276 0.00673 0.00385 0.00009 0.00006 0.00116 0.00058 + 0.12651 0.03141 0.00641 0.00368 0.00009 0.00006 0.00111 0.00055 + 0.12181 0.03010 0.00611 0.00352 0.00009 0.00006 0.00106 0.00052 + 0.11737 0.02888 0.00583 0.00336 0.00009 0.00006 0.00101 0.00050 + 0.11330 0.02777 0.00557 0.00323 0.00009 0.00006 0.00097 0.00047 + 0.10960 0.02676 0.00534 0.00310 0.00008 0.00006 0.00093 0.00045 + 0.10599 0.02578 0.00513 0.00298 0.00008 0.00006 0.00090 0.00043 + 0.10255 0.02485 0.00492 0.00286 0.00008 0.00006 0.00086 0.00041 + 0.09938 0.02400 0.00473 0.00276 0.00008 0.00006 0.00083 0.00039 + 0.09646 0.02322 0.00456 0.00266 0.00008 0.00006 0.00080 0.00037 + 0.09361 0.02246 0.00439 0.00257 0.00008 0.00006 0.00077 0.00036 + 0.37554 0.10518 0.03056 0.01323 0.00000 0.00000 0.00386 0.00218 + 0.35956 0.09996 0.02783 0.01251 0.00000 0.00000 0.00365 0.00202 + 0.33732 0.09278 0.02447 0.01153 0.00000 0.00000 0.00336 0.00181 + 0.32210 0.08793 0.02234 0.01088 0.00001 0.00000 0.00317 0.00167 + 0.30690 0.08314 0.02039 0.01023 0.00002 0.00000 0.00298 0.00154 + 0.29443 0.07924 0.01893 0.00971 0.00003 0.00000 0.00282 0.00144 + 0.28300 0.07570 0.01768 0.00924 0.00004 0.00000 0.00268 0.00135 + 0.27140 0.07214 0.01649 0.00876 0.00004 0.00000 0.00254 0.00126 + 0.26174 0.06919 0.01556 0.00837 0.00005 0.00000 0.00243 0.00119 + 0.25278 0.06648 0.01474 0.00802 0.00005 0.00000 0.00233 0.00112 + 0.24591 0.06442 0.01413 0.00775 0.00005 0.00000 0.00225 0.00107 + 0.23196 0.06025 0.01296 0.00720 0.00006 0.00000 0.00209 0.00098 + 0.22062 0.05690 0.01201 0.00677 0.00006 0.00001 0.00196 0.00090 + 0.20864 0.05339 0.01107 0.00631 0.00007 0.00001 0.00183 0.00083 + 0.19692 0.05000 0.01019 0.00588 0.00007 0.00002 0.00170 0.00075 + 0.18692 0.04713 0.00948 0.00551 0.00007 0.00003 0.00160 0.00070 + 0.17738 0.04442 0.00883 0.00517 0.00007 0.00003 0.00150 0.00064 + 0.16987 0.04230 0.00834 0.00490 0.00007 0.00003 0.00142 0.00060 + 0.16123 0.03988 0.00778 0.00460 0.00007 0.00003 0.00133 0.00056 + 0.15399 0.03787 0.00733 0.00435 0.00007 0.00004 0.00126 0.00052 + 0.14766 0.03612 0.00694 0.00413 0.00007 0.00004 0.00120 0.00049 + 0.14003 0.03403 0.00649 0.00387 0.00007 0.00004 0.00112 0.00045 + 0.13325 0.03219 0.00609 0.00364 0.00007 0.00004 0.00106 0.00042 + 0.12722 0.03057 0.00575 0.00345 0.00006 0.00004 0.00100 0.00039 + 0.12149 0.02903 0.00543 0.00326 0.00006 0.00004 0.00094 0.00037 + 0.11615 0.02761 0.00513 0.00309 0.00006 0.00004 0.00089 0.00034 + 0.11133 0.02633 0.00487 0.00293 0.00006 0.00004 0.00085 0.00032 + 0.10699 0.02519 0.00464 0.00279 0.00006 0.00004 0.00081 0.00031 + 0.10280 0.02409 0.00442 0.00266 0.00006 0.00004 0.00077 0.00029 + 0.09886 0.02307 0.00421 0.00254 0.00006 0.00004 0.00074 0.00027 + 0.09526 0.02214 0.00402 0.00243 0.00006 0.00004 0.00070 0.00026 + 0.09198 0.02129 0.00386 0.00233 0.00006 0.00004 0.00068 0.00025 + 0.08879 0.02048 0.00369 0.00223 0.00005 0.00004 0.00065 0.00024 + 0.08577 0.01970 0.00354 0.00214 0.00005 0.00004 0.00062 0.00023 + 0.08298 0.01900 0.00340 0.00206 0.00005 0.00004 0.00060 0.00022 + 0.08042 0.01835 0.00328 0.00198 0.00005 0.00004 0.00058 0.00021 + 0.07792 0.01772 0.00315 0.00191 0.00005 0.00004 0.00055 0.00020 + 0.33773 0.08971 0.02011 0.01077 0.00000 0.00000 0.00300 0.00121 + 0.32242 0.08500 0.01847 0.01015 0.00000 0.00000 0.00283 0.00112 + 0.30121 0.07855 0.01643 0.00931 0.00000 0.00000 0.00259 0.00100 + 0.28677 0.07422 0.01513 0.00874 0.00001 0.00000 0.00243 0.00092 + 0.27240 0.06995 0.01393 0.00819 0.00001 0.00000 0.00228 0.00084 + 0.26065 0.06649 0.01301 0.00775 0.00002 0.00000 0.00215 0.00078 + 0.24991 0.06335 0.01223 0.00734 0.00002 0.00000 0.00204 0.00073 + 0.23905 0.06021 0.01147 0.00695 0.00003 0.00000 0.00193 0.00068 + 0.23003 0.05762 0.01088 0.00662 0.00003 0.00000 0.00184 0.00064 + 0.22168 0.05524 0.01035 0.00632 0.00003 0.00000 0.00176 0.00060 + 0.21531 0.05343 0.00995 0.00609 0.00004 0.00000 0.00169 0.00058 + 0.20239 0.04980 0.00918 0.00564 0.00004 0.00000 0.00157 0.00052 + 0.19192 0.04688 0.00854 0.00528 0.00004 0.00000 0.00147 0.00048 + 0.18091 0.04385 0.00790 0.00491 0.00004 0.00001 0.00137 0.00044 + 0.17018 0.04092 0.00730 0.00455 0.00004 0.00001 0.00127 0.00040 + 0.16106 0.03845 0.00681 0.00425 0.00004 0.00002 0.00118 0.00037 + 0.15239 0.03613 0.00635 0.00397 0.00005 0.00002 0.00111 0.00034 + 0.14559 0.03432 0.00600 0.00375 0.00005 0.00002 0.00105 0.00032 + 0.13779 0.03226 0.00561 0.00351 0.00005 0.00002 0.00098 0.00030 + 0.13126 0.03055 0.00528 0.00331 0.00005 0.00002 0.00092 0.00028 + 0.12558 0.02907 0.00501 0.00313 0.00004 0.00003 0.00087 0.00026 + 0.11875 0.02731 0.00468 0.00293 0.00004 0.00003 0.00082 0.00024 + 0.11270 0.02576 0.00439 0.00275 0.00004 0.00003 0.00077 0.00022 + 0.10734 0.02440 0.00414 0.00259 0.00004 0.00003 0.00072 0.00021 + 0.10225 0.02311 0.00391 0.00244 0.00004 0.00003 0.00068 0.00020 + 0.09753 0.02193 0.00369 0.00230 0.00004 0.00003 0.00065 0.00018 + 0.09327 0.02087 0.00350 0.00218 0.00004 0.00003 0.00061 0.00017 + 0.08945 0.01992 0.00333 0.00208 0.00004 0.00003 0.00058 0.00016 + 0.08577 0.01901 0.00317 0.00197 0.00004 0.00003 0.00055 0.00015 + 0.08231 0.01816 0.00302 0.00188 0.00004 0.00003 0.00053 0.00015 + 0.07917 0.01740 0.00288 0.00179 0.00004 0.00003 0.00050 0.00014 + 0.07631 0.01670 0.00276 0.00172 0.00004 0.00003 0.00048 0.00013 + 0.07353 0.01603 0.00264 0.00164 0.00004 0.00003 0.00046 0.00013 + 0.07090 0.01540 0.00253 0.00157 0.00003 0.00003 0.00044 0.00012 + 0.06848 0.01482 0.00242 0.00151 0.00003 0.00003 0.00042 0.00012 + 0.06627 0.01429 0.00233 0.00145 0.00003 0.00003 0.00041 0.00011 + 0.06411 0.01378 0.00224 0.00139 0.00003 0.00002 0.00039 0.00011 + 0.30037 0.07542 0.01297 0.00857 0.00000 0.00000 0.00230 0.00061 + 0.28591 0.07124 0.01205 0.00804 0.00000 0.00000 0.00216 0.00057 + 0.26597 0.06555 0.01091 0.00733 0.00000 0.00000 0.00197 0.00050 + 0.25245 0.06173 0.01015 0.00686 0.00000 0.00000 0.00184 0.00046 + 0.23905 0.05799 0.00944 0.00640 0.00001 0.00000 0.00172 0.00042 + 0.22813 0.05498 0.00890 0.00604 0.00001 0.00000 0.00162 0.00039 + 0.21818 0.05225 0.00842 0.00571 0.00002 0.00000 0.00153 0.00037 + 0.20815 0.04952 0.00795 0.00538 0.00002 0.00000 0.00144 0.00034 + 0.19985 0.04728 0.00758 0.00511 0.00002 0.00000 0.00137 0.00032 + 0.19218 0.04522 0.00724 0.00487 0.00002 0.00000 0.00131 0.00030 + 0.18634 0.04367 0.00698 0.00468 0.00002 0.00000 0.00126 0.00029 + 0.17454 0.04055 0.00648 0.00431 0.00003 0.00000 0.00116 0.00026 + 0.16502 0.03806 0.00606 0.00402 0.00003 0.00000 0.00108 0.00024 + 0.15503 0.03547 0.00562 0.00372 0.00003 0.00001 0.00100 0.00022 + 0.14535 0.03299 0.00521 0.00344 0.00003 0.00001 0.00093 0.00020 + 0.13714 0.03090 0.00486 0.00320 0.00003 0.00001 0.00086 0.00019 + 0.12937 0.02894 0.00454 0.00298 0.00003 0.00001 0.00081 0.00017 + 0.12329 0.02742 0.00429 0.00281 0.00003 0.00001 0.00076 0.00016 + 0.11634 0.02570 0.00401 0.00262 0.00003 0.00002 0.00071 0.00015 + 0.11055 0.02427 0.00378 0.00246 0.00003 0.00002 0.00067 0.00014 + 0.10551 0.02304 0.00358 0.00232 0.00003 0.00002 0.00063 0.00013 + 0.09948 0.02158 0.00335 0.00216 0.00003 0.00002 0.00059 0.00012 + 0.09416 0.02030 0.00314 0.00202 0.00003 0.00002 0.00055 0.00011 + 0.08945 0.01917 0.00296 0.00190 0.00003 0.00002 0.00052 0.00011 + 0.08500 0.01812 0.00279 0.00179 0.00003 0.00002 0.00049 0.00010 + 0.08088 0.01715 0.00263 0.00168 0.00003 0.00002 0.00046 0.00009 + 0.07718 0.01628 0.00249 0.00159 0.00003 0.00002 0.00043 0.00009 + 0.07385 0.01550 0.00237 0.00151 0.00003 0.00002 0.00041 0.00008 + 0.07067 0.01477 0.00225 0.00143 0.00002 0.00002 0.00039 0.00008 + 0.06769 0.01408 0.00214 0.00136 0.00002 0.00002 0.00037 0.00008 + 0.06497 0.01346 0.00204 0.00129 0.00002 0.00002 0.00035 0.00007 + 0.06251 0.01290 0.00195 0.00123 0.00002 0.00002 0.00034 0.00007 + 0.06013 0.01236 0.00186 0.00118 0.00002 0.00002 0.00032 0.00007 + 0.05787 0.01185 0.00178 0.00113 0.00002 0.00002 0.00031 0.00006 + 0.05581 0.01138 0.00171 0.00108 0.00002 0.00002 0.00030 0.00006 + 0.05392 0.01096 0.00164 0.00103 0.00002 0.00002 0.00028 0.00006 + 0.05207 0.01055 0.00158 0.00099 0.00002 0.00002 0.00027 0.00006 + 0.26400 0.06243 0.00818 0.00665 0.00000 0.00000 0.00173 0.00028 + 0.25054 0.05879 0.00774 0.00621 0.00000 0.00000 0.00162 0.00025 + 0.23205 0.05385 0.00715 0.00564 0.00000 0.00000 0.00147 0.00022 + 0.21957 0.05055 0.00675 0.00525 0.00000 0.00000 0.00137 0.00021 + 0.20726 0.04733 0.00636 0.00488 0.00001 0.00000 0.00128 0.00019 + 0.19725 0.04474 0.00605 0.00459 0.00001 0.00000 0.00120 0.00018 + 0.18817 0.04241 0.00577 0.00432 0.00001 0.00000 0.00113 0.00017 + 0.17904 0.04009 0.00549 0.00406 0.00001 0.00000 0.00106 0.00015 + 0.17150 0.03818 0.00526 0.00385 0.00001 0.00000 0.00101 0.00015 + 0.16456 0.03644 0.00504 0.00365 0.00001 0.00000 0.00096 0.00014 + 0.15928 0.03512 0.00488 0.00351 0.00001 0.00000 0.00092 0.00013 + 0.14865 0.03249 0.00455 0.00322 0.00002 0.00000 0.00085 0.00012 + 0.14011 0.03040 0.00427 0.00299 0.00002 0.00000 0.00079 0.00011 + 0.13119 0.02823 0.00397 0.00276 0.00002 0.00000 0.00073 0.00010 + 0.12257 0.02616 0.00369 0.00254 0.00002 0.00001 0.00067 0.00010 + 0.11529 0.02443 0.00345 0.00235 0.00002 0.00001 0.00062 0.00009 + 0.10842 0.02281 0.00322 0.00218 0.00002 0.00001 0.00058 0.00008 + 0.10307 0.02155 0.00305 0.00205 0.00002 0.00001 0.00054 0.00008 + 0.09696 0.02014 0.00285 0.00190 0.00002 0.00001 0.00051 0.00007 + 0.09189 0.01897 0.00268 0.00178 0.00002 0.00001 0.00047 0.00007 + 0.08750 0.01796 0.00254 0.00168 0.00002 0.00001 0.00045 0.00007 + 0.08225 0.01677 0.00237 0.00156 0.00002 0.00001 0.00042 0.00006 + 0.07763 0.01573 0.00222 0.00145 0.00002 0.00001 0.00039 0.00006 + 0.07356 0.01482 0.00209 0.00136 0.00002 0.00001 0.00036 0.00005 + 0.06972 0.01396 0.00197 0.00127 0.00002 0.00001 0.00034 0.00005 + 0.06618 0.01318 0.00185 0.00120 0.00002 0.00001 0.00032 0.00005 + 0.06300 0.01248 0.00175 0.00113 0.00002 0.00001 0.00030 0.00005 + 0.06016 0.01186 0.00166 0.00107 0.00002 0.00001 0.00029 0.00004 + 0.05745 0.01128 0.00158 0.00101 0.00002 0.00001 0.00027 0.00004 + 0.05490 0.01073 0.00150 0.00096 0.00002 0.00001 0.00026 0.00004 + 0.05260 0.01023 0.00143 0.00091 0.00002 0.00001 0.00025 0.00004 + 0.05051 0.00979 0.00136 0.00086 0.00001 0.00001 0.00023 0.00004 + 0.04850 0.00936 0.00130 0.00082 0.00001 0.00001 0.00022 0.00004 + 0.04659 0.00896 0.00124 0.00079 0.00001 0.00001 0.00021 0.00003 + 0.04485 0.00859 0.00119 0.00075 0.00001 0.00001 0.00020 0.00003 + 0.04326 0.00826 0.00114 0.00072 0.00001 0.00001 0.00020 0.00003 + 0.04171 0.00793 0.00109 0.00069 0.00001 0.00001 0.00019 0.00003 + 0.22909 0.05081 0.00505 0.00502 0.00000 0.00000 0.00128 0.00010 + 0.21674 0.04770 0.00488 0.00467 0.00000 0.00000 0.00119 0.00010 + 0.19985 0.04349 0.00464 0.00421 0.00000 0.00000 0.00108 0.00009 + 0.18851 0.04070 0.00445 0.00391 0.00000 0.00000 0.00100 0.00008 + 0.17735 0.03798 0.00426 0.00362 0.00000 0.00000 0.00093 0.00008 + 0.16832 0.03579 0.00409 0.00339 0.00001 0.00000 0.00087 0.00007 + 0.16014 0.03384 0.00393 0.00319 0.00001 0.00000 0.00082 0.00007 + 0.15195 0.03189 0.00376 0.00298 0.00001 0.00000 0.00077 0.00007 + 0.14521 0.03030 0.00362 0.00282 0.00001 0.00000 0.00073 0.00006 + 0.13902 0.02885 0.00349 0.00267 0.00001 0.00000 0.00069 0.00006 + 0.13433 0.02776 0.00339 0.00256 0.00001 0.00000 0.00066 0.00006 + 0.12489 0.02558 0.00317 0.00234 0.00001 0.00000 0.00060 0.00005 + 0.11735 0.02385 0.00298 0.00216 0.00001 0.00000 0.00056 0.00005 + 0.10949 0.02207 0.00278 0.00199 0.00001 0.00000 0.00052 0.00005 + 0.10193 0.02038 0.00259 0.00182 0.00001 0.00000 0.00047 0.00005 + 0.09557 0.01897 0.00242 0.00168 0.00001 0.00000 0.00044 0.00004 + 0.08960 0.01765 0.00226 0.00155 0.00001 0.00001 0.00041 0.00004 + 0.08495 0.01664 0.00214 0.00145 0.00001 0.00001 0.00038 0.00004 + 0.07967 0.01549 0.00200 0.00134 0.00001 0.00001 0.00035 0.00004 + 0.07530 0.01455 0.00188 0.00126 0.00001 0.00001 0.00033 0.00004 + 0.07152 0.01375 0.00178 0.00118 0.00001 0.00001 0.00031 0.00003 + 0.06703 0.01279 0.00165 0.00109 0.00001 0.00001 0.00029 0.00003 + 0.06308 0.01196 0.00155 0.00101 0.00001 0.00001 0.00027 0.00003 + 0.05962 0.01124 0.00145 0.00095 0.00001 0.00001 0.00025 0.00003 + 0.05636 0.01056 0.00137 0.00088 0.00001 0.00001 0.00023 0.00003 + 0.05336 0.00995 0.00129 0.00083 0.00001 0.00001 0.00022 0.00003 + 0.05068 0.00940 0.00121 0.00078 0.00001 0.00001 0.00021 0.00003 + 0.04828 0.00891 0.00115 0.00073 0.00001 0.00001 0.00020 0.00003 + 0.04600 0.00845 0.00109 0.00069 0.00001 0.00001 0.00018 0.00002 + 0.04387 0.00802 0.00103 0.00065 0.00001 0.00001 0.00017 0.00002 + 0.04194 0.00763 0.00098 0.00062 0.00001 0.00001 0.00017 0.00002 + 0.04020 0.00729 0.00093 0.00059 0.00001 0.00001 0.00016 0.00002 + 0.03852 0.00695 0.00089 0.00056 0.00001 0.00001 0.00015 0.00002 + 0.03694 0.00664 0.00085 0.00053 0.00001 0.00001 0.00014 0.00002 + 0.03550 0.00636 0.00081 0.00051 0.00001 0.00001 0.00014 0.00002 + 0.03418 0.00610 0.00078 0.00049 0.00001 0.00001 0.00013 0.00002 + 0.03290 0.00585 0.00074 0.00046 0.00001 0.00001 0.00013 0.00002 + 0.16510 0.03176 0.00181 0.00260 0.00000 0.00000 0.00066 0.00002 + 0.15519 0.02962 0.00187 0.00241 0.00000 0.00000 0.00061 0.00002 + 0.14177 0.02675 0.00191 0.00215 0.00000 0.00000 0.00054 0.00002 + 0.13283 0.02486 0.00191 0.00198 0.00000 0.00000 0.00050 0.00002 + 0.12411 0.02303 0.00188 0.00182 0.00000 0.00000 0.00046 0.00002 + 0.11710 0.02158 0.00184 0.00169 0.00000 0.00000 0.00043 0.00002 + 0.11080 0.02028 0.00179 0.00158 0.00000 0.00000 0.00040 0.00002 + 0.10452 0.01900 0.00174 0.00147 0.00000 0.00000 0.00037 0.00002 + 0.09939 0.01796 0.00169 0.00138 0.00000 0.00000 0.00035 0.00002 + 0.09470 0.01702 0.00163 0.00130 0.00000 0.00000 0.00033 0.00002 + 0.09117 0.01631 0.00159 0.00124 0.00000 0.00000 0.00032 0.00002 + 0.08410 0.01491 0.00150 0.00112 0.00000 0.00000 0.00029 0.00002 + 0.07850 0.01381 0.00141 0.00103 0.00000 0.00000 0.00027 0.00002 + 0.07271 0.01268 0.00132 0.00094 0.00000 0.00000 0.00024 0.00002 + 0.06718 0.01162 0.00122 0.00085 0.00000 0.00000 0.00022 0.00002 + 0.06257 0.01074 0.00114 0.00078 0.00000 0.00000 0.00020 0.00002 + 0.05827 0.00993 0.00107 0.00072 0.00000 0.00000 0.00019 0.00002 + 0.05494 0.00930 0.00101 0.00067 0.00000 0.00000 0.00017 0.00002 + 0.05119 0.00861 0.00094 0.00061 0.00000 0.00000 0.00016 0.00002 + 0.04811 0.00804 0.00088 0.00057 0.00000 0.00000 0.00015 0.00002 + 0.04546 0.00755 0.00083 0.00053 0.00000 0.00000 0.00014 0.00002 + 0.04233 0.00698 0.00077 0.00049 0.00000 0.00000 0.00013 0.00002 + 0.03960 0.00649 0.00071 0.00045 0.00000 0.00000 0.00012 0.00002 + 0.03721 0.00606 0.00067 0.00042 0.00000 0.00000 0.00011 0.00002 + 0.03498 0.00566 0.00062 0.00039 0.00000 0.00000 0.00010 0.00002 + 0.03294 0.00530 0.00059 0.00036 0.00000 0.00000 0.00010 0.00002 + 0.03113 0.00499 0.00055 0.00034 0.00000 0.00000 0.00009 0.00001 + 0.02952 0.00470 0.00052 0.00032 0.00000 0.00000 0.00008 0.00001 + 0.02800 0.00444 0.00049 0.00030 0.00000 0.00000 0.00008 0.00001 + 0.02658 0.00419 0.00046 0.00028 0.00000 0.00000 0.00007 0.00001 + 0.02530 0.00397 0.00044 0.00026 0.00000 0.00000 0.00007 0.00001 + 0.02415 0.00378 0.00042 0.00025 0.00000 0.00000 0.00007 0.00001 + 0.02305 0.00359 0.00039 0.00024 0.00000 0.00000 0.00006 0.00001 + 0.02202 0.00342 0.00038 0.00022 0.00000 0.00000 0.00006 0.00001 + 0.02108 0.00326 0.00036 0.00021 0.00000 0.00000 0.00006 0.00001 + 0.02022 0.00311 0.00034 0.00020 0.00000 0.00000 0.00005 0.00001 + 0.01940 0.00298 0.00033 0.00019 0.00000 0.00000 0.00005 0.00001 + 0.11086 0.01806 0.00060 0.00117 0.00000 0.00000 0.00030 0.00004 + 0.10348 0.01672 0.00069 0.00107 0.00000 0.00000 0.00028 0.00004 + 0.09357 0.01495 0.00077 0.00095 0.00000 0.00000 0.00025 0.00003 + 0.08704 0.01379 0.00079 0.00086 0.00000 0.00000 0.00022 0.00003 + 0.08072 0.01268 0.00080 0.00079 0.00000 0.00000 0.00021 0.00003 + 0.07568 0.01180 0.00079 0.00073 0.00000 0.00000 0.00019 0.00003 + 0.07117 0.01102 0.00078 0.00067 0.00000 0.00000 0.00018 0.00003 + 0.06672 0.01026 0.00076 0.00062 0.00000 0.00000 0.00016 0.00003 + 0.06310 0.00964 0.00074 0.00058 0.00000 0.00000 0.00015 0.00003 + 0.05981 0.00909 0.00072 0.00054 0.00000 0.00000 0.00014 0.00003 + 0.05734 0.00868 0.00070 0.00052 0.00000 0.00000 0.00014 0.00003 + 0.05245 0.00786 0.00066 0.00046 0.00000 0.00000 0.00012 0.00002 + 0.04860 0.00723 0.00062 0.00042 0.00000 0.00000 0.00011 0.00002 + 0.04466 0.00658 0.00058 0.00038 0.00000 0.00000 0.00010 0.00002 + 0.04093 0.00598 0.00053 0.00034 0.00000 0.00000 0.00009 0.00002 + 0.03784 0.00549 0.00050 0.00031 0.00000 0.00000 0.00008 0.00002 + 0.03498 0.00503 0.00046 0.00028 0.00000 0.00000 0.00008 0.00002 + 0.03279 0.00469 0.00043 0.00026 0.00000 0.00000 0.00007 0.00002 + 0.03033 0.00431 0.00040 0.00024 0.00000 0.00000 0.00006 0.00002 + 0.02833 0.00400 0.00037 0.00022 0.00000 0.00000 0.00006 0.00002 + 0.02662 0.00373 0.00035 0.00020 0.00000 0.00000 0.00006 0.00001 + 0.02461 0.00343 0.00032 0.00019 0.00000 0.00000 0.00005 0.00001 + 0.02287 0.00316 0.00030 0.00017 0.00000 0.00000 0.00005 0.00001 + 0.02136 0.00294 0.00028 0.00016 0.00000 0.00000 0.00004 0.00001 + 0.01996 0.00273 0.00026 0.00015 0.00000 0.00000 0.00004 0.00001 + 0.01869 0.00254 0.00024 0.00013 0.00000 0.00000 0.00004 0.00001 + 0.01756 0.00237 0.00022 0.00012 0.00000 0.00000 0.00003 0.00001 + 0.01657 0.00223 0.00021 0.00012 0.00000 0.00000 0.00003 0.00001 + 0.01563 0.00209 0.00020 0.00011 0.00000 0.00000 0.00003 0.00001 + 0.01477 0.00197 0.00019 0.00010 0.00000 0.00000 0.00003 0.00001 + 0.01399 0.00185 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 + 0.01330 0.00175 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 + 0.01264 0.00166 0.00016 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01202 0.00157 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01146 0.00149 0.00014 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01095 0.00142 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 + 0.01046 0.00135 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 + 0.06781 0.00906 0.00019 0.00043 0.00000 0.00000 0.00012 0.00004 + 0.06280 0.00832 0.00024 0.00040 0.00000 0.00000 0.00011 0.00004 + 0.05614 0.00735 0.00029 0.00034 0.00000 0.00000 0.00010 0.00004 + 0.05180 0.00672 0.00031 0.00031 0.00000 0.00000 0.00009 0.00003 + 0.04763 0.00613 0.00031 0.00028 0.00000 0.00000 0.00008 0.00003 + 0.04434 0.00566 0.00031 0.00026 0.00000 0.00000 0.00007 0.00003 + 0.04142 0.00525 0.00031 0.00024 0.00000 0.00000 0.00007 0.00003 + 0.03856 0.00486 0.00030 0.00022 0.00000 0.00000 0.00006 0.00002 + 0.03624 0.00454 0.00029 0.00020 0.00000 0.00000 0.00006 0.00002 + 0.03416 0.00425 0.00028 0.00019 0.00000 0.00000 0.00005 0.00002 + 0.03260 0.00404 0.00027 0.00018 0.00000 0.00000 0.00005 0.00002 + 0.02953 0.00362 0.00025 0.00016 0.00000 0.00000 0.00004 0.00002 + 0.02714 0.00330 0.00024 0.00014 0.00000 0.00000 0.00004 0.00002 + 0.02472 0.00298 0.00022 0.00013 0.00000 0.00000 0.00004 0.00002 + 0.02245 0.00268 0.00020 0.00011 0.00000 0.00000 0.00003 0.00002 + 0.02058 0.00244 0.00018 0.00010 0.00000 0.00000 0.00003 0.00001 + 0.01887 0.00222 0.00017 0.00009 0.00000 0.00000 0.00003 0.00001 + 0.01757 0.00206 0.00016 0.00009 0.00000 0.00000 0.00002 0.00001 + 0.01613 0.00187 0.00015 0.00008 0.00000 0.00000 0.00002 0.00001 + 0.01495 0.00172 0.00013 0.00007 0.00000 0.00000 0.00002 0.00001 + 0.01396 0.00160 0.00013 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01280 0.00146 0.00012 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01181 0.00134 0.00011 0.00005 0.00000 0.00000 0.00002 0.00001 + 0.01096 0.00123 0.00010 0.00005 0.00000 0.00000 0.00001 0.00001 + 0.01017 0.00114 0.00009 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00946 0.00105 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00883 0.00098 0.00008 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00829 0.00091 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.00777 0.00085 0.00007 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.00730 0.00079 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00688 0.00074 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00651 0.00070 0.00006 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00615 0.00066 0.00005 0.00003 0.00000 0.00000 0.00001 0.00000 + 0.00582 0.00062 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00553 0.00059 0.00005 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00526 0.00056 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00500 0.00053 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.03634 0.00380 0.00005 0.00013 0.00000 0.00000 0.00004 0.00003 + 0.03335 0.00346 0.00007 0.00011 0.00000 0.00000 0.00003 0.00002 + 0.02942 0.00301 0.00008 0.00010 0.00000 0.00000 0.00003 0.00002 + 0.02689 0.00273 0.00008 0.00009 0.00000 0.00000 0.00003 0.00002 + 0.02449 0.00246 0.00008 0.00008 0.00000 0.00000 0.00002 0.00002 + 0.02261 0.00226 0.00008 0.00007 0.00000 0.00000 0.00002 0.00002 + 0.02095 0.00208 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01934 0.00191 0.00008 0.00006 0.00000 0.00000 0.00002 0.00001 + 0.01806 0.00177 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 + 0.01690 0.00164 0.00007 0.00005 0.00000 0.00000 0.00002 0.00001 + 0.01605 0.00155 0.00007 0.00005 0.00000 0.00000 0.00001 0.00001 + 0.01437 0.00138 0.00007 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.01309 0.00125 0.00006 0.00004 0.00000 0.00000 0.00001 0.00001 + 0.01179 0.00111 0.00006 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.01060 0.00099 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.00962 0.00089 0.00005 0.00003 0.00000 0.00000 0.00001 0.00001 + 0.00874 0.00080 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 + 0.00807 0.00074 0.00004 0.00002 0.00000 0.00000 0.00001 0.00001 + 0.00734 0.00067 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00675 0.00061 0.00004 0.00002 0.00000 0.00000 0.00001 0.00000 + 0.00626 0.00056 0.00003 0.00002 0.00000 0.00000 0.00000 0.00000 + 0.00569 0.00051 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00520 0.00046 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00478 0.00042 0.00003 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00441 0.00038 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00407 0.00035 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00377 0.00033 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00351 0.00030 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00327 0.00028 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00305 0.00026 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00286 0.00024 0.00002 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00269 0.00023 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00253 0.00021 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00238 0.00020 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00225 0.00019 0.00001 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00213 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00201 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00478 0.00023 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00427 0.00020 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00363 0.00017 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00323 0.00015 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00286 0.00013 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00257 0.00012 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00233 0.00011 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00210 0.00010 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00192 0.00009 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00177 0.00008 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00165 0.00007 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00143 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00127 0.00006 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00111 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00097 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00085 0.00004 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00075 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00068 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00060 0.00003 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00054 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00049 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00043 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00039 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00035 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00031 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00028 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00026 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00023 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00021 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00020 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00018 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00017 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00015 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00014 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00013 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00012 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00011 0.00001 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 +'End:' diff --git a/LHAPDF/PDFsets/MRSTMCal.LHgrid b/LHAPDF/PDFsets/MRSTMCal.LHgrid index 8edbf92e0eb..3934359df1e 100644 --- a/LHAPDF/PDFsets/MRSTMCal.LHgrid +++ b/LHAPDF/PDFsets/MRSTMCal.LHgrid @@ -1,3574 +1,3574 @@ -'Version' '5.4' -'Description:' -'MRST MC fit - alpha_S k_T^2' -'This set has 1 member PDFs' -'Alphas:' -'Variable','nlo','EvolCode' -1,91.71,1.43,4.30,180.0 -'MinMax:' -1,1 -1.E-05,1.,1.25,10000000. -'QCDparams:' -1,1 -0.265,0.182 -'Parameterlist:' -'list',1,1 - 0.1149 - 0.1149 -'Evolution:' -'lo',1.0,1.0 -'MRSTgrid' -1,0 - 0.02318 0.01029 12.04329 0.81780 0.00000 0.00000 0.42849 0.81780 - 0.02329 0.01039 15.58813 0.85388 0.00000 0.00000 0.46675 0.85388 - 0.02345 0.01055 21.84668 0.92632 0.00000 0.00000 0.54248 0.92632 - 0.02357 0.01067 27.14104 0.99538 0.07033 0.00000 0.61396 0.99538 - 0.02370 0.01079 33.48524 1.08469 0.16572 0.00000 0.70583 1.08469 - 0.02381 0.01090 39.63136 1.17679 0.26305 0.00000 0.80012 1.17679 - 0.02392 0.01101 46.13978 1.27938 0.37064 0.00000 0.90481 1.27938 - 0.02404 0.01112 53.73338 1.40480 0.50132 0.00000 1.03245 1.40480 - 0.02414 0.01122 60.92623 1.52858 0.62964 0.00000 1.15814 1.52858 - 0.02424 0.01132 68.40675 1.66189 0.76727 0.00000 1.29326 1.66188 - 0.02432 0.01140 74.72301 1.77777 0.88655 0.00000 1.41056 1.77776 - 0.02449 0.01157 89.35409 2.05650 1.17243 0.00000 1.69230 2.05650 - 0.02463 0.01171 102.92217 2.33352 1.45547 0.27535 1.97185 2.33352 - 0.02479 0.01187 119.50425 2.68593 1.81445 0.64518 2.32701 2.68593 - 0.02496 0.01204 138.36974 3.10266 2.23784 1.07955 2.74654 3.10266 - 0.02511 0.01220 156.93936 3.52759 2.66866 1.52007 3.17394 3.52759 - 0.02526 0.01235 177.09790 4.00385 3.15071 2.01167 3.65262 4.00384 - 0.02538 0.01248 194.92059 4.43679 3.58836 2.45709 4.08754 4.43679 - 0.02553 0.01264 217.87741 5.00964 4.16681 3.04476 4.66273 5.00963 - 0.02567 0.01277 239.41920 5.56152 4.72356 3.60950 5.21666 5.56152 - 0.02579 0.01290 260.19971 6.10623 5.27264 4.16579 5.76320 6.10622 - 0.02594 0.01306 287.98056 6.85208 6.02396 4.92608 6.51134 6.85208 - 0.02609 0.01322 315.54398 7.61070 6.78762 5.69803 7.27207 7.61070 - 0.02623 0.01336 342.63889 8.37337 7.55493 6.47299 8.03668 8.37336 - 0.02637 0.01350 370.94839 9.18712 8.37327 7.29884 8.85236 9.18712 - 0.02650 0.01365 399.84375 10.03466 9.22521 8.15803 9.70174 10.03466 - 0.02663 0.01378 428.27185 10.88434 10.07902 9.01860 10.55315 10.88434 - 0.02675 0.01391 456.01035 11.72780 10.92632 9.87219 11.39821 11.72780 - 0.02687 0.01404 484.82175 12.61845 11.82077 10.77289 12.29045 12.61845 - 0.02700 0.01416 514.06232 13.53685 12.74287 11.70105 13.21040 13.53685 - 0.02711 0.01428 542.68726 14.44949 13.65899 12.62288 14.12449 14.44949 - 0.02722 0.01440 570.52130 15.34950 14.56226 13.53150 15.02587 15.34950 - 0.02733 0.01452 599.31189 16.29286 15.50888 14.48345 15.97059 16.29286 - 0.02744 0.01463 628.45270 17.26045 16.47964 15.45942 16.93951 17.26045 - 0.02755 0.01474 656.90033 18.21682 17.43902 16.42373 17.89714 18.21682 - 0.02765 0.01485 684.48749 19.15517 18.38020 17.36954 18.83667 19.15517 - 0.02775 0.01495 712.97314 20.13505 19.36292 18.35691 19.81774 20.13505 - 0.02595 0.01294 10.58237 0.69839 0.00000 0.00000 0.36649 0.69839 - 0.02608 0.01307 13.59161 0.73002 0.00000 0.00000 0.39998 0.73002 - 0.02627 0.01327 18.83139 0.79270 0.00000 0.00000 0.46546 0.79270 - 0.02642 0.01342 23.20221 0.85174 0.06012 0.00000 0.52657 0.85174 - 0.02657 0.01358 28.38061 0.92732 0.14091 0.00000 0.60434 0.92732 - 0.02671 0.01372 33.34556 1.00455 0.22262 0.00000 0.68344 1.00455 - 0.02684 0.01385 38.55524 1.08989 0.31224 0.00000 0.77056 1.08989 - 0.02698 0.01400 44.57877 1.19339 0.42024 0.00000 0.87595 1.19339 - 0.02711 0.01413 50.23621 1.29477 0.52551 0.00000 0.97896 1.29478 - 0.02723 0.01425 56.07542 1.40323 0.63767 0.00000 1.08896 1.40323 - 0.02732 0.01435 60.97321 1.49696 0.73432 0.00000 1.18391 1.49696 - 0.02753 0.01456 72.21687 1.72064 0.96411 0.00000 1.41014 1.72064 - 0.02770 0.01475 82.51199 1.94078 1.18940 0.21958 1.63244 1.94079 - 0.02790 0.01495 94.95674 2.21821 1.47245 0.51182 1.91221 2.21821 - 0.02811 0.01517 108.95415 2.54303 1.80296 0.85162 2.23940 2.54303 - 0.02829 0.01536 122.58259 2.87112 2.13608 1.19294 2.56959 2.87112 - 0.02848 0.01556 137.22606 3.23558 2.50549 1.57044 2.93612 3.23558 - 0.02864 0.01572 150.05328 3.56424 2.83819 1.90970 3.26647 3.56425 - 0.02883 0.01592 166.42339 3.99565 3.27437 2.35368 3.69986 3.99565 - 0.02900 0.01609 181.64124 4.40792 3.69079 2.77685 4.11386 4.40792 - 0.02916 0.01625 196.19872 4.81189 4.09851 3.19066 4.51940 4.81190 - 0.02935 0.01646 215.48514 5.36075 4.65203 3.75177 5.07020 5.36076 - 0.02954 0.01665 234.43675 5.91439 5.20998 4.31672 5.62564 5.91441 - 0.02972 0.01683 252.89949 6.46672 5.76627 4.87946 6.17962 6.46673 - 0.02989 0.01702 272.02420 7.05171 6.35517 5.47470 6.76623 7.05172 - 0.03007 0.01720 291.37924 7.65657 6.96380 6.08945 7.37267 7.65659 - 0.03023 0.01737 310.26709 8.25879 7.56953 6.70089 7.97635 8.25880 - 0.03039 0.01753 328.55746 8.85275 8.16677 7.30343 8.57167 8.85277 - 0.03055 0.01769 347.41473 9.47601 8.79327 7.93521 9.19628 9.47603 - 0.03071 0.01785 366.41357 10.11473 9.43515 8.58221 9.83632 10.11475 - 0.03086 0.01800 384.88226 10.74570 10.06909 9.22096 10.46852 10.74572 - 0.03100 0.01815 402.72040 11.36443 10.69060 9.84698 11.08841 11.36446 - 0.03115 0.01829 421.05347 12.00947 11.33842 10.49929 11.73461 12.00950 - 0.03129 0.01844 439.48856 12.66747 11.99913 11.16439 12.39374 12.66750 - 0.03143 0.01858 457.37341 13.31446 12.64868 11.81810 13.04180 13.31449 - 0.03156 0.01871 474.61447 13.94612 13.28275 12.45608 13.67446 13.94615 - 0.03170 0.01885 492.31384 14.60255 13.94161 13.11885 14.33190 14.60259 - 0.02897 0.01601 9.31363 0.59974 0.00000 0.00000 0.31519 0.59974 - 0.02911 0.01617 11.86438 0.62752 0.00000 0.00000 0.34455 0.62752 - 0.02934 0.01641 16.24365 0.68182 0.00000 0.00000 0.40125 0.68182 - 0.02951 0.01660 19.84529 0.73234 0.05143 0.00000 0.45352 0.73234 - 0.02970 0.01680 24.06453 0.79635 0.11989 0.00000 0.51939 0.79635 - 0.02986 0.01697 28.06883 0.86114 0.18853 0.00000 0.58578 0.86114 - 0.03001 0.01714 32.23323 0.93216 0.26321 0.00000 0.65833 0.93217 - 0.03018 0.01732 37.00637 1.01762 0.35252 0.00000 0.74539 1.01762 - 0.03033 0.01748 41.45318 1.10072 0.43895 0.00000 0.82987 1.10072 - 0.03047 0.01764 46.00996 1.18904 0.53044 0.00000 0.91951 1.18904 - 0.03059 0.01776 49.80827 1.26494 0.60883 0.00000 0.99644 1.26494 - 0.03083 0.01803 58.45507 1.44468 0.79380 0.00000 1.17836 1.44469 - 0.03105 0.01825 66.27811 1.61996 0.97348 0.17547 1.35547 1.61996 - 0.03128 0.01851 75.64002 1.83889 1.19723 0.40698 1.57640 1.83890 - 0.03153 0.01878 86.06147 2.09288 1.45608 0.67368 1.83241 2.09289 - 0.03176 0.01902 96.10950 2.34720 1.71469 0.93924 2.08851 2.34721 - 0.03199 0.01926 106.80801 2.62743 1.99916 1.23054 2.37050 2.62744 - 0.03218 0.01946 116.10349 2.87831 2.25349 1.49042 2.62282 2.87833 - 0.03241 0.01971 127.87103 3.20527 2.58454 1.82805 2.95148 3.20529 - 0.03262 0.01993 138.72200 3.51550 2.89831 2.14753 3.26317 3.51552 - 0.03281 0.02013 149.02768 3.81756 3.20356 2.45792 3.56656 3.81757 - 0.03306 0.02038 162.57642 4.22517 3.61515 2.87593 3.97582 4.22519 - 0.03329 0.02062 175.78175 4.63339 4.02705 3.29373 4.38557 4.63341 - 0.03351 0.02084 188.54976 5.03795 4.43499 3.70712 4.79153 5.03797 - 0.03373 0.02107 201.68074 5.46375 4.86413 4.14161 5.21871 5.46378 - 0.03395 0.02129 214.87666 5.90132 5.30491 4.58756 5.65762 5.90135 - 0.03415 0.02150 227.66812 6.33444 5.74103 5.02850 6.09198 6.33448 - 0.03435 0.02170 239.97827 6.75934 6.16872 5.46066 6.51803 6.75937 - 0.03455 0.02190 252.59341 7.20286 6.61501 5.91141 6.96271 7.20290 - 0.03475 0.02210 265.22827 7.65508 7.06992 6.37063 7.41604 7.65512 - 0.03494 0.02229 277.44128 8.09964 7.51702 6.82179 7.86165 8.09968 - 0.03512 0.02247 289.17380 8.53357 7.95332 7.26189 8.29657 8.53362 - 0.03530 0.02265 301.17004 8.98397 8.40609 7.71845 8.74795 8.98402 - 0.03549 0.02283 313.17038 9.44138 8.86581 8.18188 9.20632 9.44144 - 0.03566 0.02300 324.75513 9.88927 9.31588 8.63545 9.65511 9.88932 - 0.03583 0.02317 335.87042 10.32480 9.75347 9.07633 10.09149 10.32485 - 0.03600 0.02333 347.22900 10.77566 10.20640 9.53256 10.54322 10.77573 - 0.03099 0.01817 8.63945 0.54876 0.00000 0.00000 0.28865 0.54876 - 0.03116 0.01835 10.94826 0.57450 0.00000 0.00000 0.31583 0.57450 - 0.03142 0.01863 14.87735 0.62439 0.00000 0.00000 0.36789 0.62439 - 0.03161 0.01884 18.08012 0.67042 0.04686 0.00000 0.41553 0.67043 - 0.03182 0.01907 21.80567 0.72838 0.10888 0.00000 0.47517 0.72839 - 0.03200 0.01926 25.31891 0.78671 0.17070 0.00000 0.53495 0.78671 - 0.03218 0.01946 28.95226 0.85032 0.23765 0.00000 0.59995 0.85032 - 0.03237 0.01966 33.09398 0.92647 0.31732 0.00000 0.67756 0.92648 - 0.03253 0.01984 36.93293 1.00019 0.39407 0.00000 0.75254 1.00020 - 0.03270 0.02002 40.84906 1.07822 0.47499 0.00000 0.83176 1.07823 - 0.03283 0.02016 44.10057 1.14504 0.54408 0.00000 0.89953 1.14505 - 0.03311 0.02046 51.46362 1.30254 0.70634 0.00000 1.05900 1.30255 - 0.03335 0.02072 58.07458 1.45524 0.86306 0.15323 1.21337 1.45525 - 0.03362 0.02101 65.93589 1.64492 1.05712 0.35432 1.40486 1.64494 - 0.03391 0.02131 74.62984 1.86371 1.28034 0.58465 1.62549 1.86373 - 0.03417 0.02159 82.96062 2.08161 1.50215 0.81273 1.84501 2.08163 - 0.03444 0.02186 91.77975 2.32049 1.74489 1.06165 2.08549 2.32051 - 0.03466 0.02209 99.40285 2.53340 1.96093 1.28271 2.29969 2.53342 - 0.03493 0.02237 109.00412 2.80963 2.24088 1.56862 2.57746 2.80966 - 0.03517 0.02262 117.81219 3.07055 2.50503 1.83793 2.83972 3.07058 - 0.03539 0.02285 126.13960 3.32360 2.76099 2.09854 3.09398 3.32364 - 0.03568 0.02313 137.03427 3.66364 3.10465 2.44799 3.43552 3.66368 - 0.03595 0.02341 147.59799 4.00267 3.44702 2.79570 3.77593 4.00271 - 0.03620 0.02366 157.76317 4.33727 3.78471 3.13831 4.11181 4.33732 - 0.03646 0.02392 168.16980 4.68807 4.13854 3.49698 4.46386 4.68812 - 0.03671 0.02417 178.58133 5.04719 4.50058 3.86369 4.82419 5.04724 - 0.03696 0.02441 188.63106 5.40137 4.85749 4.22495 5.17950 5.40143 - 0.03719 0.02463 198.26465 5.74767 5.20633 4.57784 5.52685 5.74773 - 0.03742 0.02486 208.09923 6.10798 5.56916 4.94468 5.88820 6.10804 - 0.03766 0.02509 217.91235 6.47418 5.93782 5.31724 6.25542 6.47425 - 0.03788 0.02530 227.36395 6.83311 6.29905 5.68213 6.61530 6.83318 - 0.03809 0.02550 236.41277 7.18245 6.65054 6.03706 6.96553 7.18253 - 0.03831 0.02571 245.63503 7.54407 7.01431 6.40426 7.32804 7.54415 - 0.03853 0.02591 254.83009 7.91030 7.38266 6.77595 7.69515 7.91039 - 0.03873 0.02611 263.67911 8.26798 7.74233 7.13878 8.05365 8.26808 - 0.03893 0.02629 272.14435 8.61494 8.09116 7.49058 8.40138 8.61504 - 0.03913 0.02648 280.76993 8.97327 8.45136 7.85376 8.76048 8.97337 - 0.03257 0.01988 8.18898 0.51525 0.00000 0.00000 0.27120 0.51525 - 0.03275 0.02008 10.33674 0.53964 0.00000 0.00000 0.29693 0.53964 - 0.03303 0.02039 13.96778 0.58658 0.00000 0.00000 0.34590 0.58658 - 0.03324 0.02062 16.90793 0.62964 0.04383 0.00000 0.39046 0.62965 - 0.03347 0.02087 20.30992 0.68360 0.10158 0.00000 0.44599 0.68360 - 0.03367 0.02109 23.50268 0.73765 0.15891 0.00000 0.50140 0.73766 - 0.03387 0.02130 26.79072 0.79638 0.22076 0.00000 0.56143 0.79639 - 0.03408 0.02152 30.52337 0.86644 0.29411 0.00000 0.63284 0.86645 - 0.03426 0.02172 33.96984 0.93402 0.36452 0.00000 0.70160 0.93403 - 0.03444 0.02191 37.47357 1.00533 0.43854 0.00000 0.77403 1.00534 - 0.03459 0.02207 40.37399 1.06624 0.50157 0.00000 0.83582 1.06625 - 0.03490 0.02240 46.91564 1.20930 0.64908 0.00000 0.98072 1.20931 - 0.03517 0.02268 52.75471 1.34739 0.79092 0.13883 1.12036 1.34741 - 0.03547 0.02300 59.66427 1.51821 0.96584 0.32029 1.29288 1.51823 - 0.03579 0.02333 67.26715 1.71440 1.16616 0.52723 1.49077 1.71442 - 0.03608 0.02363 74.51758 1.90898 1.36440 0.73130 1.68687 1.90900 - 0.03638 0.02393 82.15865 2.12148 1.58051 0.95316 1.90086 2.12151 - 0.03663 0.02418 88.73681 2.31023 1.77219 1.14950 2.09083 2.31027 - 0.03693 0.02449 96.98878 2.55429 2.01973 1.40258 2.33632 2.55433 - 0.03720 0.02476 104.52840 2.78403 2.25248 1.64013 2.56731 2.78407 - 0.03745 0.02501 111.63087 3.00616 2.47733 1.86931 2.79056 3.00621 - 0.03777 0.02532 120.88695 3.30368 2.77824 2.17560 3.08948 3.30374 - 0.03808 0.02562 129.82481 3.59930 3.07698 2.47931 3.38639 3.59936 - 0.03837 0.02590 138.39249 3.89013 3.37069 2.77759 3.67841 3.89019 - 0.03866 0.02618 147.13147 4.19410 3.67750 3.08890 3.98355 4.19417 - 0.03894 0.02645 155.84300 4.50436 3.99049 3.40623 4.29494 4.50444 - 0.03922 0.02671 164.22281 4.80950 4.29818 3.71796 4.60113 4.80958 - 0.03948 0.02696 172.22986 5.10705 4.59811 4.02165 4.89967 5.10714 - 0.03975 0.02721 180.37828 5.41586 4.90927 4.33654 5.20945 5.41595 - 0.04001 0.02745 188.48390 5.72894 5.22464 4.65554 5.52347 5.72904 - 0.04026 0.02769 196.26779 6.03506 5.53292 4.96722 5.83049 6.03517 - 0.04051 0.02791 203.69887 6.33234 5.83221 5.26970 6.12859 6.33245 - 0.04075 0.02814 211.25194 6.63940 6.14128 5.58195 6.43648 6.63952 - 0.04100 0.02836 218.76202 6.94970 6.45355 5.89733 6.74760 6.94982 - 0.04123 0.02857 225.97054 7.25212 6.75784 6.20455 7.05079 7.25225 - 0.04146 0.02877 232.84923 7.54491 7.05237 6.50185 7.34430 7.54504 - 0.04169 0.02898 239.84103 7.84670 7.35592 6.80817 7.64681 7.84684 - 0.03383 0.02130 7.85717 0.49100 0.00000 0.00000 0.25856 0.49100 - 0.03403 0.02151 9.88692 0.51438 0.00000 0.00000 0.28322 0.51439 - 0.03433 0.02184 13.30073 0.55917 0.00000 0.00000 0.32993 0.55918 - 0.03455 0.02208 16.05050 0.60006 0.04161 0.00000 0.37224 0.60007 - 0.03480 0.02235 19.21909 0.65109 0.09625 0.00000 0.42477 0.65110 - 0.03501 0.02258 22.18172 0.70205 0.15031 0.00000 0.47701 0.70206 - 0.03522 0.02281 25.22282 0.75725 0.20847 0.00000 0.53343 0.75726 - 0.03545 0.02305 28.66412 0.82289 0.27724 0.00000 0.60037 0.82291 - 0.03565 0.02326 31.83217 0.88606 0.34309 0.00000 0.66464 0.88607 - 0.03584 0.02347 35.04438 0.95255 0.41215 0.00000 0.73219 0.95256 - 0.03600 0.02363 37.69738 1.00922 0.47084 0.00000 0.78970 1.00924 - 0.03633 0.02398 43.66268 1.14197 0.60781 0.00000 0.92419 1.14198 - 0.03663 0.02429 48.96327 1.26967 0.73908 0.12858 1.05337 1.26970 - 0.03696 0.02463 55.21236 1.42715 0.90044 0.29613 1.21246 1.42718 - 0.03730 0.02498 62.06223 1.60740 1.08463 0.48656 1.39433 1.60744 - 0.03762 0.02530 68.57095 1.78563 1.26632 0.67378 1.57399 1.78566 - 0.03794 0.02563 75.40720 1.97970 1.46382 0.87671 1.76948 1.97975 - 0.03821 0.02590 81.27468 2.15164 1.63853 1.05583 1.94256 2.15168 - 0.03854 0.02622 88.61304 2.37338 1.86357 1.28610 2.16566 2.37343 - 0.03884 0.02651 95.29766 2.58158 2.07463 1.50170 2.37504 2.58163 - 0.03911 0.02678 101.57774 2.78242 2.27805 1.70921 2.57695 2.78248 - 0.03946 0.02712 109.73849 3.05077 2.54962 1.98586 2.84663 3.05084 - 0.03979 0.02743 117.59455 3.31672 2.81853 2.25946 3.11380 3.31679 - 0.04011 0.02773 125.10381 3.57773 3.08228 2.52753 3.37594 3.57781 - 0.04043 0.02803 132.74242 3.84993 3.35717 2.80668 3.64925 3.85002 - 0.04074 0.02833 140.33675 4.12715 3.63697 3.09058 3.92754 4.12724 - 0.04104 0.02861 147.62332 4.39921 3.91146 3.36888 4.20060 4.39931 - 0.04133 0.02887 154.56932 4.66401 4.17850 3.63948 4.46632 4.66411 - 0.04162 0.02914 161.62167 4.93830 4.45503 3.91953 4.74153 4.93841 - 0.04191 0.02940 168.62108 5.21587 4.73478 4.20270 5.02001 5.21600 - 0.04219 0.02965 175.32811 5.48681 5.00776 4.47890 5.29178 5.48694 - 0.04245 0.02989 181.71785 5.74947 5.27233 4.74649 5.55523 5.74961 - 0.04272 0.03013 188.19965 6.02035 5.54512 5.02228 5.82690 6.02049 - 0.04299 0.03036 194.63159 6.29365 5.82029 5.30039 6.10097 6.29381 - 0.04325 0.03059 200.79346 6.55962 6.08802 5.57089 6.36766 6.55978 - 0.04350 0.03081 206.66266 6.81673 6.34680 5.83228 6.62546 6.81690 - 0.04375 0.03103 212.61777 7.08139 6.61312 6.10121 6.89081 7.08156 - 0.03829 0.02634 6.91040 0.42350 0.00000 0.00000 0.22337 0.42350 - 0.03854 0.02660 8.60487 0.44405 0.00000 0.00000 0.24500 0.44406 - 0.03892 0.02701 11.40688 0.48272 0.00000 0.00000 0.28529 0.48273 - 0.03921 0.02732 13.62531 0.51747 0.03534 0.00000 0.32124 0.51748 - 0.03953 0.02764 16.14729 0.56029 0.08123 0.00000 0.36532 0.56030 - 0.03980 0.02793 18.47678 0.60256 0.12613 0.00000 0.40868 0.60258 - 0.04008 0.02821 20.84266 0.64790 0.17399 0.00000 0.45506 0.64792 - 0.04037 0.02851 23.49220 0.70132 0.23006 0.00000 0.50957 0.70134 - 0.04063 0.02877 25.90787 0.75226 0.28328 0.00000 0.56145 0.75229 - 0.04088 0.02903 28.33629 0.80548 0.33868 0.00000 0.61557 0.80552 - 0.04108 0.02923 30.32707 0.85054 0.38545 0.00000 0.66133 0.85058 - 0.04152 0.02966 34.75890 0.95514 0.49363 0.00000 0.76741 0.95519 - 0.04191 0.03004 38.63858 1.05469 0.59620 0.10073 0.86819 1.05474 - 0.04234 0.03046 43.15744 1.17617 0.72098 0.23070 0.99104 1.17623 - 0.04280 0.03090 48.04951 1.31375 0.86189 0.37684 1.12998 1.31381 - 0.04322 0.03130 52.64354 1.44840 0.99949 0.51907 1.26585 1.44848 - 0.04365 0.03170 57.41608 1.59367 1.14766 0.67178 1.41231 1.59376 - 0.04401 0.03203 61.47215 1.72129 1.27763 0.80545 1.54090 1.72139 - 0.04446 0.03243 66.49579 1.88453 1.44367 0.97587 1.70529 1.88463 - 0.04485 0.03279 71.02716 2.03653 1.59810 1.13410 1.85829 2.03665 - 0.04522 0.03312 75.24726 2.18210 1.74586 1.28527 2.00476 2.18223 - 0.04569 0.03353 80.68009 2.37509 1.94157 1.48524 2.19887 2.37523 - 0.04614 0.03393 85.85830 2.56477 2.13376 1.68136 2.38958 2.56492 - 0.04656 0.03429 90.76248 2.74953 2.32084 1.87206 2.57529 2.74969 - 0.04700 0.03466 95.70743 2.94081 2.51441 2.06918 2.76752 2.94099 - 0.04742 0.03503 100.58136 3.13426 2.71006 2.26825 2.96187 3.13445 - 0.04783 0.03537 105.21941 3.32285 2.90070 2.46209 3.15130 3.32305 - 0.04822 0.03570 109.60696 3.50527 3.08504 2.64940 3.33451 3.50549 - 0.04862 0.03602 114.02852 3.69311 3.27477 2.84208 3.52313 3.69334 - 0.04901 0.03635 118.38481 3.88209 3.46560 3.03577 3.71288 3.88234 - 0.04939 0.03665 122.52988 4.06553 3.65078 3.22364 3.89703 4.06579 - 0.04975 0.03695 126.45242 4.24244 3.82931 3.40468 4.07460 4.24271 - 0.05012 0.03724 130.40602 4.42397 4.01246 3.59035 4.25680 4.42425 - 0.05048 0.03753 134.30374 4.60620 4.19627 3.77662 4.43968 4.60650 - 0.05084 0.03781 138.01474 4.78268 4.37426 3.95692 4.61679 4.78300 - 0.05117 0.03808 141.52861 4.95253 4.54552 4.13036 4.78721 4.95286 - 0.05152 0.03835 145.07338 5.12659 4.72100 4.30802 4.96185 5.12693 - 0.04376 0.03254 6.08014 0.36650 0.00000 0.00000 0.19363 0.36651 - 0.04409 0.03287 7.48133 0.38459 0.00000 0.00000 0.21263 0.38460 - 0.04460 0.03337 9.75620 0.41795 0.00000 0.00000 0.24735 0.41797 - 0.04499 0.03374 11.52358 0.44739 0.02993 0.00000 0.27781 0.44742 - 0.04541 0.03415 13.50343 0.48315 0.06828 0.00000 0.31463 0.48319 - 0.04578 0.03450 15.30807 0.51802 0.10537 0.00000 0.35041 0.51806 - 0.04614 0.03485 17.11977 0.55501 0.14449 0.00000 0.38828 0.55506 - 0.04654 0.03522 19.12581 0.59814 0.18986 0.00000 0.43233 0.59820 - 0.04689 0.03554 20.93558 0.63888 0.23253 0.00000 0.47386 0.63895 - 0.04723 0.03586 22.73793 0.68108 0.27657 0.00000 0.51681 0.68115 - 0.04751 0.03611 24.20349 0.71655 0.31348 0.00000 0.55288 0.71663 - 0.04811 0.03665 27.43069 0.79810 0.39806 0.00000 0.63567 0.79819 - 0.04863 0.03711 30.20875 0.87479 0.47731 0.07808 0.71341 0.87490 - 0.04923 0.03763 33.40152 0.96734 0.57265 0.17775 0.80710 0.96747 - 0.04986 0.03817 36.81078 1.07094 0.67907 0.28854 0.91186 1.07109 - 0.05044 0.03866 39.97086 1.17124 0.78186 0.39519 1.01318 1.17140 - 0.05103 0.03916 43.21396 1.27835 0.89143 0.50855 1.12130 1.27854 - 0.05153 0.03957 45.94011 1.37161 0.98668 0.60688 1.21538 1.37181 - 0.05214 0.04007 49.28002 1.48983 1.10727 0.73112 1.33457 1.49005 - 0.05269 0.04051 52.25968 1.59893 1.21843 0.84545 1.44452 1.59917 - 0.05320 0.04091 55.00756 1.70260 1.32395 0.95382 1.54894 1.70285 - 0.05385 0.04142 58.50802 1.83887 1.46253 1.09595 1.68616 1.83915 - 0.05447 0.04191 61.80709 1.97162 1.59742 1.23411 1.81979 1.97193 - 0.05506 0.04236 64.89905 2.09986 1.72763 1.36734 1.94884 2.10019 - 0.05566 0.04282 67.98560 2.23160 1.86131 1.50398 2.08138 2.23196 - 0.05626 0.04326 70.99787 2.36382 1.99540 1.64092 2.21436 2.36420 - 0.05683 0.04369 73.83739 2.49179 2.12511 1.77330 2.34305 2.49219 - 0.05737 0.04409 76.49996 2.61474 2.24970 1.90036 2.46667 2.61518 - 0.05792 0.04449 79.16006 2.74053 2.37710 2.03022 2.59312 2.74099 - 0.05846 0.04488 81.75870 2.86629 2.50443 2.15993 2.71953 2.86677 - 0.05899 0.04526 84.21115 2.98762 2.62724 2.28498 2.84146 2.98812 - 0.05949 0.04562 86.51376 3.10396 2.74496 2.40480 2.95837 3.10448 - 0.06000 0.04598 88.81721 3.22269 2.86507 2.52701 3.07767 3.22324 - 0.06051 0.04634 91.07071 3.34122 2.98496 2.64894 3.19675 3.34179 - 0.06100 0.04668 93.20055 3.45542 3.10044 2.76635 3.31148 3.45602 - 0.06146 0.04701 95.20316 3.56477 3.21100 2.87873 3.42133 3.56540 - 0.06194 0.04734 97.20946 3.67630 3.32374 2.99329 3.53336 3.67695 - 0.04762 0.03680 5.64480 0.33747 0.00000 0.00000 0.17848 0.33749 - 0.04801 0.03717 6.89160 0.35428 0.00000 0.00000 0.19611 0.35431 - 0.04863 0.03774 8.89277 0.38487 0.00000 0.00000 0.22794 0.38491 - 0.04909 0.03816 10.42907 0.41156 0.02711 0.00000 0.25553 0.41161 - 0.04960 0.03862 12.13426 0.44367 0.06157 0.00000 0.28861 0.44374 - 0.05005 0.03902 13.67563 0.47473 0.09465 0.00000 0.32049 0.47480 - 0.05049 0.03941 15.21181 0.50746 0.12930 0.00000 0.35401 0.50754 - 0.05097 0.03983 16.90067 0.54536 0.16923 0.00000 0.39274 0.54545 - 0.05140 0.04020 18.41419 0.58094 0.20656 0.00000 0.42904 0.58105 - 0.05182 0.04056 19.91263 0.61760 0.24489 0.00000 0.46639 0.61772 - 0.05215 0.04084 21.12481 0.64828 0.27687 0.00000 0.49760 0.64841 - 0.05288 0.04145 23.77573 0.71837 0.34971 0.00000 0.56881 0.71852 - 0.05352 0.04198 26.03292 0.78380 0.41745 0.06690 0.63519 0.78397 - 0.05425 0.04257 28.60500 0.86221 0.49839 0.15172 0.71464 0.86241 - 0.05502 0.04318 31.32749 0.94934 0.58808 0.24533 0.80282 0.94957 - 0.05573 0.04373 33.83001 1.03312 0.67412 0.33484 0.88753 1.03337 - 0.05646 0.04429 36.37823 1.12203 0.76526 0.42938 0.97734 1.12231 - 0.05707 0.04476 38.50518 1.19899 0.84403 0.51092 1.05505 1.19929 - 0.05782 0.04532 41.09273 1.29602 0.94322 0.61339 1.15296 1.29635 - 0.05849 0.04582 43.38479 1.38506 1.03413 0.70715 1.24278 1.38543 - 0.05911 0.04628 45.48511 1.46925 1.12001 0.79558 1.32766 1.46964 - 0.05991 0.04686 48.14236 1.57934 1.23220 0.91096 1.43861 1.57976 - 0.06067 0.04741 50.62837 1.68598 1.34079 1.02249 1.54605 1.68644 - 0.06140 0.04792 52.94235 1.78848 1.44508 1.12949 1.64928 1.78897 - 0.06213 0.04843 55.23705 1.89325 1.55162 1.23869 1.75478 1.89379 - 0.06285 0.04894 57.46194 1.99791 1.65798 1.34761 1.86014 1.99847 - 0.06355 0.04941 59.54611 2.09874 1.76041 1.45243 1.96162 2.09934 - 0.06421 0.04986 61.48890 2.19521 1.85837 1.55262 2.05871 2.19585 - 0.06488 0.05032 63.41870 2.29351 1.95814 1.65459 2.15761 2.29418 - 0.06555 0.05076 65.29313 2.39139 2.05746 1.75605 2.25608 2.39209 - 0.06619 0.05119 67.05235 2.48546 2.15289 1.85350 2.35071 2.48620 - 0.06680 0.05159 68.69530 2.57534 2.24403 1.94653 2.44111 2.57611 - 0.06742 0.05200 70.33045 2.66676 2.33671 2.04109 2.53305 2.66756 - 0.06804 0.05240 71.92173 2.75770 2.42890 2.13511 2.62450 2.75854 - 0.06863 0.05279 73.41812 2.84503 2.51740 2.22535 2.71231 2.84590 - 0.06920 0.05315 74.81830 2.92840 2.60188 2.31145 2.79613 2.92930 - 0.06978 0.05352 76.21436 3.01316 2.68775 2.39896 2.88136 3.01410 - 0.05080 0.04016 5.35747 0.31859 0.00000 0.00000 0.16863 0.31863 - 0.05126 0.04057 6.50149 0.33456 0.00000 0.00000 0.18536 0.33461 - 0.05196 0.04119 8.32214 0.36332 0.00000 0.00000 0.21527 0.36339 - 0.05251 0.04165 9.70741 0.38819 0.02526 0.00000 0.24098 0.38827 - 0.05309 0.04216 11.23435 0.41791 0.05716 0.00000 0.27160 0.41800 - 0.05362 0.04260 12.60601 0.44647 0.08760 0.00000 0.30093 0.44658 - 0.05413 0.04302 13.96557 0.47641 0.11934 0.00000 0.33160 0.47653 - 0.05469 0.04348 15.45225 0.51091 0.15573 0.00000 0.36688 0.51105 - 0.05518 0.04388 16.77789 0.54315 0.18960 0.00000 0.39979 0.54331 - 0.05567 0.04427 18.08446 0.57624 0.22424 0.00000 0.43351 0.57641 - 0.05606 0.04459 19.13730 0.60383 0.25305 0.00000 0.46160 0.60401 - 0.05691 0.04525 21.42775 0.66657 0.31835 0.00000 0.52539 0.66679 - 0.05765 0.04583 23.36152 0.72482 0.37876 0.05976 0.58452 0.72506 - 0.05850 0.04647 25.55063 0.79425 0.45055 0.13515 0.65492 0.79453 - 0.05940 0.04714 27.85213 0.87097 0.52967 0.21790 0.73263 0.87129 - 0.06022 0.04775 29.95404 0.94437 0.60519 0.29662 0.80690 0.94473 - 0.06106 0.04836 32.08136 1.02189 0.68479 0.37938 0.88527 1.02228 - 0.06177 0.04887 33.84721 1.08871 0.75331 0.45046 0.95278 1.08913 - 0.06264 0.04949 35.98368 1.17259 0.83921 0.53940 1.03749 1.17305 - 0.06342 0.05003 37.86559 1.24925 0.91762 0.62045 1.11487 1.24975 - 0.06415 0.05053 39.58141 1.32145 0.99141 0.69660 1.18772 1.32199 - 0.06507 0.05116 41.74042 1.41549 1.08742 0.79557 1.28257 1.41607 - 0.06596 0.05176 43.74849 1.50620 1.17996 0.89083 1.37403 1.50683 - 0.06680 0.05232 45.60734 1.59304 1.26848 0.98186 1.46157 1.59371 - 0.06765 0.05288 47.44094 1.68149 1.35859 1.07443 1.55069 1.68220 - 0.06849 0.05343 49.20937 1.76950 1.44820 1.16643 1.63936 1.77026 - 0.06929 0.05395 50.85752 1.85401 1.53421 1.25465 1.72449 1.85481 - 0.07006 0.05444 52.38652 1.93460 1.61621 1.33871 1.80566 1.93545 - 0.07083 0.05493 53.89808 2.01646 1.69946 1.42400 1.88809 2.01736 - 0.07160 0.05542 55.35936 2.09773 1.78208 1.50861 1.96992 2.09866 - 0.07234 0.05588 56.72456 2.17561 1.86124 1.58963 2.04832 2.17659 - 0.07304 0.05632 57.99386 2.24981 1.93663 1.66677 2.12301 2.25083 - 0.07376 0.05676 59.25174 2.32507 2.01309 1.74497 2.19877 2.32613 - 0.07447 0.05720 60.47046 2.39974 2.08894 1.82252 2.27392 2.40085 - 0.07515 0.05762 61.61163 2.47127 2.16157 1.89676 2.34591 2.47242 - 0.07581 0.05801 62.67504 2.53938 2.23073 1.96744 2.41445 2.54057 - 0.07647 0.05842 63.73100 2.60848 2.30087 2.03910 2.48398 2.60970 - 0.05350 0.04296 5.14679 0.30493 0.00000 0.00000 0.16150 0.30498 - 0.05401 0.04339 6.21495 0.32029 0.00000 0.00000 0.17757 0.32035 - 0.05480 0.04406 7.90343 0.34771 0.00000 0.00000 0.20608 0.34779 - 0.05541 0.04456 9.17892 0.37124 0.02390 0.00000 0.23042 0.37135 - 0.05607 0.04510 10.57714 0.39921 0.05394 0.00000 0.25923 0.39933 - 0.05665 0.04557 11.82692 0.42596 0.08246 0.00000 0.28671 0.42610 - 0.05723 0.04603 13.06028 0.45387 0.11208 0.00000 0.31532 0.45404 - 0.05786 0.04652 14.40319 0.48591 0.14591 0.00000 0.34809 0.48610 - 0.05841 0.04695 15.59585 0.51575 0.17728 0.00000 0.37856 0.51595 - 0.05896 0.04737 16.76718 0.54626 0.20927 0.00000 0.40967 0.54648 - 0.05940 0.04770 17.70811 0.57163 0.23580 0.00000 0.43552 0.57187 - 0.06035 0.04842 19.74658 0.62913 0.29573 0.00000 0.49401 0.62941 - 0.06119 0.04903 21.45580 0.68226 0.35091 0.05467 0.54798 0.68257 - 0.06215 0.04973 23.38058 0.74533 0.41622 0.12337 0.61197 0.74568 - 0.06315 0.05044 25.39329 0.81472 0.48789 0.19846 0.68230 0.81512 - 0.06408 0.05110 27.22200 0.88084 0.55601 0.26961 0.74924 0.88128 - 0.06503 0.05175 29.06385 0.95039 0.62756 0.34413 0.81961 0.95088 - 0.06583 0.05230 30.58602 1.01015 0.68893 0.40791 0.88002 1.01068 - 0.06681 0.05295 32.41959 1.08491 0.76561 0.48746 0.95558 1.08549 - 0.06768 0.05354 34.02746 1.15301 0.83538 0.55971 1.02436 1.15364 - 0.06849 0.05407 35.48753 1.21696 0.90084 0.62741 1.08893 1.21763 - 0.06954 0.05475 37.31675 1.29999 0.98575 0.71510 1.17273 1.30071 - 0.07053 0.05539 39.01009 1.37981 1.06732 0.79924 1.25327 1.38059 - 0.07147 0.05599 40.57071 1.45600 1.14511 0.87939 1.33012 1.45683 - 0.07242 0.05659 42.10354 1.53336 1.22406 0.96067 1.40813 1.53425 - 0.07336 0.05717 43.57562 1.61012 1.30236 1.04121 1.48553 1.61107 - 0.07426 0.05773 44.94193 1.68363 1.37730 1.11824 1.55963 1.68463 - 0.07511 0.05825 46.20454 1.75356 1.44857 1.19145 1.63011 1.75461 - 0.07598 0.05878 47.44796 1.82441 1.52076 1.26556 1.70151 1.82551 - 0.07684 0.05930 48.64542 1.89458 1.59222 1.33890 1.77222 1.89573 - 0.07766 0.05979 49.75996 1.96168 1.66054 1.40898 1.83981 1.96288 - 0.07845 0.06026 50.79247 2.02546 1.72547 1.47555 1.90406 2.02671 - 0.07925 0.06073 51.81208 2.09002 1.79118 1.54290 1.96910 2.09132 - 0.08004 0.06120 52.79638 2.15394 1.85623 1.60956 2.03349 2.15529 - 0.08080 0.06164 53.71482 2.21505 1.91840 1.67325 2.09503 2.21645 - 0.08153 0.06206 54.56775 2.27313 1.97748 1.73376 2.15353 2.27458 - 0.08227 0.06249 55.41185 2.33194 2.03730 1.79501 2.21275 2.33343 - 0.06413 0.05300 4.55955 0.26724 0.00000 0.00000 0.14185 0.26740 - 0.06488 0.05354 5.41033 0.28085 0.00000 0.00000 0.15607 0.28104 - 0.06606 0.05438 6.72546 0.30447 0.00000 0.00000 0.18060 0.30471 - 0.06696 0.05500 7.69509 0.32423 0.02008 0.00000 0.20105 0.32451 - 0.06794 0.05568 8.73853 0.34727 0.04487 0.00000 0.22480 0.34759 - 0.06880 0.05627 9.65564 0.36892 0.06804 0.00000 0.24708 0.36929 - 0.06966 0.05684 10.54742 0.39120 0.09177 0.00000 0.26996 0.39161 - 0.07059 0.05746 11.50437 0.41642 0.11852 0.00000 0.29580 0.41688 - 0.07141 0.05800 12.34271 0.43961 0.14303 0.00000 0.31953 0.44011 - 0.07222 0.05853 13.15604 0.46307 0.16775 0.00000 0.34351 0.46361 - 0.07287 0.05894 13.80244 0.48239 0.18807 0.00000 0.36323 0.48296 - 0.07427 0.05984 15.18282 0.52562 0.23339 0.00000 0.40733 0.52627 - 0.07551 0.06061 16.31186 0.56498 0.27451 0.04098 0.44741 0.56570 - 0.07691 0.06148 17.55995 0.61102 0.32250 0.09178 0.49425 0.61182 - 0.07839 0.06237 18.84030 0.66093 0.37438 0.14652 0.54498 0.66183 - 0.07975 0.06319 19.98235 0.70783 0.42303 0.19768 0.59259 0.70880 - 0.08114 0.06400 21.11264 0.75653 0.47346 0.25059 0.64201 0.75759 - 0.08230 0.06468 22.03193 0.79789 0.51623 0.29538 0.68395 0.79903 - 0.08372 0.06550 23.12161 0.84905 0.56908 0.35061 0.73581 0.85028 - 0.08499 0.06622 24.06148 0.89512 0.61662 0.40022 0.78248 0.89643 - 0.08616 0.06688 24.90225 0.93794 0.66077 0.44624 0.82586 0.93934 - 0.08767 0.06772 25.93850 0.99294 0.71744 0.50523 0.88155 0.99444 - 0.08909 0.06851 26.88083 1.04522 0.77126 0.56119 0.93446 1.04681 - 0.09044 0.06925 27.73473 1.09457 0.82205 0.61395 0.98441 1.09626 - 0.09180 0.06998 28.55964 1.14419 0.87308 0.66692 1.03461 1.14598 - 0.09313 0.07070 29.33875 1.19293 0.92319 0.71891 1.08392 1.19482 - 0.09441 0.07138 30.05019 1.23916 0.97071 0.76817 1.13069 1.24114 - 0.09562 0.07202 30.69747 1.28276 1.01551 0.81459 1.17478 1.28483 - 0.09684 0.07266 31.32505 1.32656 1.06050 0.86120 1.21908 1.32871 - 0.09805 0.07329 31.92002 1.36956 1.10468 0.90694 1.26257 1.37181 - 0.09920 0.07389 32.46526 1.41035 1.14657 0.95031 1.30382 1.41269 - 0.10030 0.07446 32.96275 1.44884 1.18609 0.99120 1.34273 1.45125 - 0.10141 0.07503 33.44673 1.48750 1.22580 1.03229 1.38184 1.49000 - 0.10251 0.07559 33.90671 1.52550 1.26482 1.07265 1.42026 1.52809 - 0.10357 0.07612 34.32939 1.56157 1.30186 1.11096 1.45673 1.56423 - 0.10457 0.07663 34.71605 1.59562 1.33682 1.14712 1.49116 1.59836 - 0.10559 0.07714 35.09295 1.62987 1.37199 1.18348 1.52580 1.63269 - 0.07974 0.06551 4.07564 0.23595 0.00000 0.00000 0.12557 0.23644 - 0.08090 0.06620 4.73353 0.24801 0.00000 0.00000 0.13817 0.24857 - 0.08269 0.06726 5.72582 0.26826 0.00000 0.00000 0.15923 0.26893 - 0.08406 0.06806 6.43721 0.28472 0.01677 0.00000 0.17628 0.28548 - 0.08555 0.06892 7.18686 0.30347 0.03707 0.00000 0.19567 0.30433 - 0.08687 0.06967 7.83327 0.32075 0.05569 0.00000 0.21351 0.32170 - 0.08817 0.07040 8.45126 0.33824 0.07446 0.00000 0.23152 0.33927 - 0.08957 0.07119 9.10331 0.35772 0.09529 0.00000 0.25156 0.35885 - 0.09081 0.07187 9.66552 0.37537 0.11412 0.00000 0.26970 0.37659 - 0.09203 0.07254 10.20319 0.39300 0.13287 0.00000 0.28780 0.39430 - 0.09300 0.07307 10.62513 0.40736 0.14812 0.00000 0.30253 0.40873 - 0.09511 0.07420 11.51093 0.43903 0.18168 0.00000 0.33498 0.44057 - 0.09695 0.07518 12.21249 0.46736 0.21161 0.03007 0.36398 0.46903 - 0.09904 0.07627 12.97038 0.49996 0.24597 0.06680 0.39731 0.50179 - 0.10122 0.07740 13.72946 0.53470 0.28251 0.10574 0.43280 0.53670 - 0.10322 0.07841 14.39085 0.56682 0.31623 0.14157 0.46559 0.56898 - 0.10524 0.07944 15.03082 0.59968 0.35068 0.17811 0.49911 0.60200 - 0.10693 0.08028 15.54052 0.62721 0.37952 0.20864 0.52719 0.62967 - 0.10899 0.08130 16.13189 0.66082 0.41469 0.24582 0.56145 0.66344 - 0.11082 0.08219 16.63064 0.69068 0.44592 0.27880 0.59189 0.69346 - 0.11250 0.08301 17.06766 0.71811 0.47460 0.30904 0.61985 0.72103 - 0.11465 0.08404 17.59405 0.75289 0.51095 0.34735 0.65529 0.75600 - 0.11667 0.08501 18.06062 0.78551 0.54502 0.38323 0.68852 0.78878 - 0.11857 0.08591 18.47299 0.81592 0.57678 0.41666 0.71950 0.81935 - 0.12048 0.08680 18.86153 0.84612 0.60833 0.44984 0.75027 0.84972 - 0.12235 0.08767 19.21914 0.87544 0.63895 0.48204 0.78014 0.87920 - 0.12412 0.08849 19.53731 0.90294 0.66768 0.51224 0.80816 0.90686 - 0.12580 0.08926 19.81951 0.92859 0.69448 0.54042 0.83430 0.93266 - 0.12748 0.09003 20.08602 0.95410 0.72114 0.56844 0.86029 0.95831 - 0.12914 0.09078 20.33187 0.97889 0.74706 0.59568 0.88556 0.98325 - 0.13072 0.09150 20.55100 1.00218 0.77141 0.62127 0.90930 1.00668 - 0.13221 0.09217 20.74536 1.02394 0.79417 0.64520 0.93148 1.02857 - 0.13372 0.09284 20.92911 1.04561 0.81685 0.66903 0.95358 1.05037 - 0.13521 0.09350 21.09838 1.06670 0.83894 0.69226 0.97510 1.07160 - 0.13663 0.09413 21.24908 1.08655 0.85973 0.71412 0.99535 1.09158 - 0.13798 0.09472 21.38254 1.10513 0.87920 0.73460 1.01431 1.11028 - 0.13934 0.09532 21.50827 1.12367 0.89863 0.75505 1.03322 1.12894 - 0.09264 0.07435 3.84238 0.22006 0.00000 0.00000 0.11736 0.22103 - 0.09413 0.07516 4.39685 0.23125 0.00000 0.00000 0.12907 0.23233 - 0.09646 0.07640 5.22013 0.24964 0.00000 0.00000 0.14823 0.25090 - 0.09822 0.07733 5.79924 0.26431 0.01503 0.00000 0.16348 0.26570 - 0.10014 0.07833 6.40108 0.28077 0.03297 0.00000 0.18056 0.28231 - 0.10184 0.07920 6.91346 0.29575 0.04922 0.00000 0.19607 0.29742 - 0.10350 0.08005 7.39773 0.31073 0.06544 0.00000 0.21157 0.31254 - 0.10529 0.08096 7.90289 0.32724 0.08326 0.00000 0.22863 0.32920 - 0.10687 0.08176 8.33369 0.34206 0.09922 0.00000 0.24392 0.34415 - 0.10842 0.08253 8.74162 0.35673 0.11499 0.00000 0.25906 0.35895 - 0.10966 0.08314 9.05894 0.36860 0.12772 0.00000 0.27129 0.37092 - 0.11232 0.08445 9.71711 0.39452 0.15548 0.00000 0.29798 0.39708 - 0.11464 0.08557 10.22553 0.41743 0.17995 0.02477 0.32156 0.42019 - 0.11726 0.08682 10.76542 0.44351 0.20776 0.05473 0.34836 0.44649 - 0.11999 0.08811 11.29647 0.47097 0.23699 0.08615 0.37658 0.47420 - 0.12247 0.08927 11.75089 0.49609 0.26370 0.11478 0.40236 0.49954 - 0.12498 0.09043 12.18284 0.52152 0.29071 0.14369 0.42847 0.52521 - 0.12706 0.09139 12.52111 0.54264 0.31313 0.16765 0.45014 0.54651 - 0.12959 0.09254 12.90670 0.56819 0.34024 0.19659 0.47636 0.57230 - 0.13183 0.09355 13.22581 0.59068 0.36410 0.22204 0.49943 0.59500 - 0.13388 0.09446 13.50045 0.61117 0.38584 0.24521 0.52046 0.61568 - 0.13649 0.09562 13.82454 0.63693 0.41317 0.27433 0.54689 0.64168 - 0.13893 0.09670 14.10509 0.66085 0.43856 0.30136 0.57144 0.66584 - 0.14122 0.09770 14.34722 0.68296 0.46203 0.32635 0.59413 0.68817 - 0.14351 0.09869 14.56976 0.70473 0.48516 0.35097 0.61649 0.71016 - 0.14575 0.09965 14.76917 0.72569 0.50744 0.37469 0.63801 0.73133 - 0.14786 0.10055 14.94168 0.74519 0.52818 0.39678 0.65804 0.75103 - 0.14984 0.10140 15.09034 0.76324 0.54740 0.41725 0.67660 0.76927 - 0.15184 0.10224 15.22641 0.78106 0.56638 0.43747 0.69491 0.78727 - 0.15379 0.10306 15.34771 0.79824 0.58471 0.45700 0.71259 0.80465 - 0.15564 0.10383 15.45190 0.81427 0.60182 0.47524 0.72908 0.82085 - 0.15739 0.10456 15.54071 0.82914 0.61771 0.49219 0.74439 0.83589 - 0.15915 0.10528 15.62112 0.84385 0.63344 0.50898 0.75954 0.85076 - 0.16088 0.10600 15.69156 0.85807 0.64867 0.52525 0.77419 0.86515 - 0.16253 0.10667 15.75087 0.87136 0.66292 0.54048 0.78790 0.87860 - 0.16409 0.10730 15.80023 0.88372 0.67619 0.55467 0.80065 0.89111 - 0.16566 0.10794 15.84351 0.89597 0.68936 0.56876 0.81330 0.90351 - 0.10429 0.08154 3.69957 0.20962 0.00000 0.00000 0.11201 0.21117 - 0.10609 0.08245 4.18419 0.22018 0.00000 0.00000 0.12308 0.22188 - 0.10888 0.08383 4.89517 0.23725 0.00000 0.00000 0.14094 0.23920 - 0.11100 0.08488 5.38772 0.25068 0.01385 0.00000 0.15494 0.25281 - 0.11329 0.08599 5.89404 0.26557 0.03021 0.00000 0.17046 0.26791 - 0.11532 0.08697 6.32076 0.27898 0.04490 0.00000 0.18441 0.28150 - 0.11729 0.08792 6.72041 0.29229 0.05943 0.00000 0.19824 0.29499 - 0.11942 0.08893 7.13347 0.30683 0.07528 0.00000 0.21334 0.30973 - 0.12130 0.08982 7.48261 0.31978 0.08937 0.00000 0.22677 0.32286 - 0.12313 0.09067 7.81053 0.33253 0.10321 0.00000 0.23998 0.33577 - 0.12459 0.09135 8.06376 0.34277 0.11432 0.00000 0.25060 0.34615 - 0.12772 0.09279 8.58375 0.36498 0.13838 0.00000 0.27360 0.36866 - 0.13045 0.09404 8.97644 0.38443 0.15941 0.02143 0.29372 0.38837 - 0.13350 0.09541 9.38716 0.40637 0.18309 0.04714 0.31641 0.41061 - 0.13667 0.09683 9.78467 0.42927 0.20779 0.07388 0.34008 0.43381 - 0.13955 0.09810 10.11926 0.45002 0.23016 0.09806 0.36153 0.45486 - 0.14245 0.09936 10.43206 0.47088 0.25262 0.12230 0.38308 0.47600 - 0.14484 0.10040 10.67307 0.48806 0.27113 0.14226 0.40084 0.49342 - 0.14774 0.10165 10.94309 0.50870 0.29336 0.16622 0.42217 0.51435 - 0.15030 0.10274 11.16231 0.52674 0.31280 0.18715 0.44081 0.53264 - 0.15264 0.10373 11.34748 0.54307 0.33040 0.20609 0.45769 0.54920 - 0.15559 0.10497 11.56124 0.56344 0.35238 0.22975 0.47875 0.56987 - 0.15836 0.10612 11.74144 0.58221 0.37265 0.25157 0.49818 0.58892 - 0.16094 0.10719 11.89268 0.59943 0.39128 0.27162 0.51601 0.60641 - 0.16350 0.10824 12.02751 0.61627 0.40951 0.29125 0.53345 0.62350 - 0.16601 0.10926 12.14422 0.63237 0.42696 0.31005 0.55014 0.63985 - 0.16836 0.11021 12.24135 0.64724 0.44311 0.32746 0.56556 0.65496 - 0.17057 0.11110 12.32156 0.66092 0.45798 0.34351 0.57976 0.66886 - 0.17278 0.11198 12.39145 0.67433 0.47259 0.35928 0.59369 0.68249 - 0.17494 0.11284 12.45019 0.68719 0.48662 0.37444 0.60706 0.69557 - 0.17698 0.11365 12.49723 0.69910 0.49965 0.38853 0.61945 0.70768 - 0.17890 0.11441 12.53406 0.71008 0.51168 0.40156 0.63089 0.71886 - 0.18083 0.11516 12.56409 0.72088 0.52354 0.41441 0.64215 0.72985 - 0.18272 0.11590 12.58682 0.73126 0.53496 0.42679 0.65298 0.74042 - 0.18452 0.11659 12.60248 0.74091 0.54559 0.43834 0.66305 0.75024 - 0.18621 0.11724 12.61208 0.74982 0.55544 0.44905 0.67237 0.75932 - 0.18792 0.11790 12.61676 0.75860 0.56516 0.45964 0.68157 0.76828 - 0.11516 0.08775 3.60145 0.20186 0.00000 0.00000 0.10808 0.20409 - 0.11724 0.08875 4.03363 0.21191 0.00000 0.00000 0.11865 0.21434 - 0.12046 0.09027 4.66142 0.22795 0.00000 0.00000 0.13549 0.23069 - 0.12290 0.09141 5.09060 0.24041 0.01295 0.00000 0.14854 0.24339 - 0.12552 0.09263 5.52769 0.25411 0.02813 0.00000 0.16287 0.25734 - 0.12784 0.09370 5.89289 0.26634 0.04165 0.00000 0.17566 0.26980 - 0.13010 0.09473 6.23224 0.27839 0.05495 0.00000 0.18825 0.28207 - 0.13252 0.09583 6.58015 0.29147 0.06935 0.00000 0.20190 0.29539 - 0.13465 0.09679 6.87195 0.30304 0.08208 0.00000 0.21397 0.30718 - 0.13673 0.09772 7.14403 0.31436 0.09452 0.00000 0.22577 0.31871 - 0.13838 0.09845 7.35277 0.32342 0.10446 0.00000 0.23521 0.32794 - 0.14192 0.10001 7.77754 0.34293 0.12586 0.00000 0.25554 0.34782 - 0.14499 0.10135 8.09133 0.35989 0.14443 0.01904 0.27320 0.36509 - 0.14841 0.10283 8.41481 0.37887 0.16520 0.04174 0.29296 0.38443 - 0.15196 0.10434 8.72301 0.39853 0.18670 0.06520 0.31342 0.40445 - 0.15516 0.10570 8.97820 0.41622 0.20604 0.08627 0.33183 0.42248 - 0.15838 0.10705 9.21274 0.43387 0.22534 0.10727 0.35020 0.44046 - 0.16103 0.10815 9.39042 0.44832 0.24115 0.12447 0.36524 0.45519 - 0.16423 0.10947 9.58579 0.46556 0.26003 0.14499 0.38321 0.47277 - 0.16704 0.11062 9.74106 0.48054 0.27645 0.16283 0.39881 0.48804 - 0.16960 0.11166 9.86940 0.49401 0.29123 0.17890 0.41286 0.50179 - 0.17283 0.11296 10.01368 0.51072 0.30959 0.19886 0.43029 0.51883 - 0.17584 0.11416 10.13130 0.52601 0.32643 0.21717 0.44626 0.53444 - 0.17865 0.11527 10.22639 0.53994 0.34180 0.23391 0.46082 0.54866 - 0.18143 0.11637 10.30753 0.55348 0.35677 0.25021 0.47499 0.56249 - 0.18413 0.11742 10.37408 0.56634 0.37102 0.26575 0.48845 0.57563 - 0.18666 0.11840 10.42593 0.57814 0.38414 0.28007 0.50083 0.58769 - 0.18903 0.11932 10.46541 0.58893 0.39617 0.29321 0.51216 0.59873 - 0.19139 0.12022 10.49626 0.59945 0.40792 0.30607 0.52322 0.60949 - 0.19370 0.12110 10.51846 0.60947 0.41915 0.31838 0.53377 0.61975 - 0.19587 0.12192 10.53243 0.61870 0.42952 0.32976 0.54350 0.62920 - 0.19791 0.12269 10.53949 0.62716 0.43906 0.34025 0.55243 0.63787 - 0.19996 0.12345 10.54092 0.63543 0.44842 0.35055 0.56118 0.64635 - 0.20196 0.12420 10.53687 0.64334 0.45739 0.36044 0.56955 0.65446 - 0.20385 0.12490 10.52826 0.65063 0.46571 0.36963 0.57729 0.66195 - 0.20564 0.12555 10.51599 0.65734 0.47337 0.37811 0.58442 0.66883 - 0.20743 0.12621 10.49969 0.66391 0.48092 0.38647 0.59141 0.67559 - 0.13544 0.09844 3.47242 0.19046 0.00000 0.00000 0.10242 0.19430 - 0.13801 0.09958 3.82799 0.19968 0.00000 0.00000 0.11219 0.20380 - 0.14197 0.10133 4.33605 0.21410 0.00000 0.00000 0.12746 0.21865 - 0.14496 0.10264 4.67532 0.22508 0.01163 0.00000 0.13909 0.22997 - 0.14817 0.10404 5.01532 0.23698 0.02507 0.00000 0.15166 0.24222 - 0.15098 0.10525 5.29515 0.24746 0.03690 0.00000 0.16274 0.25302 - 0.15371 0.10642 5.55158 0.25766 0.04841 0.00000 0.17352 0.26352 - 0.15664 0.10767 5.81073 0.26861 0.06075 0.00000 0.18508 0.27480 - 0.15920 0.10875 6.02503 0.27820 0.07155 0.00000 0.19521 0.28467 - 0.16169 0.10979 6.22221 0.28749 0.08202 0.00000 0.20502 0.29424 - 0.16366 0.11062 6.37167 0.29486 0.09033 0.00000 0.21281 0.30184 - 0.16787 0.11236 6.67067 0.31058 0.10803 0.00000 0.22941 0.31803 - 0.17149 0.11385 6.88158 0.32406 0.12321 0.01576 0.24364 0.33191 - 0.17550 0.11548 7.09255 0.33895 0.13999 0.03436 0.25937 0.34726 - 0.17964 0.11714 7.28694 0.35418 0.15717 0.05336 0.27546 0.36295 - 0.18335 0.11862 7.44210 0.36770 0.17244 0.07025 0.28977 0.37689 - 0.18705 0.12008 7.57916 0.38103 0.18752 0.08692 0.30387 0.39063 - 0.19009 0.12126 7.67874 0.39183 0.19976 0.10045 0.31531 0.40177 - 0.19373 0.12268 7.78301 0.40457 0.21423 0.11646 0.32882 0.41491 - 0.19691 0.12390 7.86107 0.41550 0.22669 0.13025 0.34043 0.42620 - 0.19980 0.12500 7.92150 0.42524 0.23782 0.14257 0.35079 0.43625 - 0.20341 0.12636 7.98366 0.43717 0.25150 0.15775 0.36350 0.44858 - 0.20677 0.12762 8.02824 0.44796 0.26392 0.17154 0.37501 0.45973 - 0.20987 0.12877 8.05858 0.45767 0.27515 0.18404 0.38539 0.46977 - 0.21293 0.12990 8.07856 0.46698 0.28598 0.19612 0.39538 0.47942 - 0.21588 0.13098 8.08868 0.47573 0.29620 0.20753 0.40478 0.48848 - 0.21864 0.13198 8.09023 0.48366 0.30552 0.21796 0.41332 0.49670 - 0.22121 0.13290 8.08503 0.49083 0.31398 0.22746 0.42106 0.50414 - 0.22375 0.13381 8.07364 0.49773 0.32219 0.23669 0.42853 0.51131 - 0.22623 0.13469 8.05680 0.50422 0.32996 0.24546 0.43559 0.51806 - 0.22855 0.13550 8.03595 0.51014 0.33707 0.25351 0.44203 0.52421 - 0.23072 0.13626 8.01208 0.51549 0.34356 0.26088 0.44789 0.52979 - 0.23288 0.13701 7.98426 0.52066 0.34988 0.26806 0.45356 0.53519 - 0.23499 0.13773 7.95323 0.52554 0.35588 0.27491 0.45893 0.54028 - 0.23697 0.13841 7.92059 0.52999 0.36139 0.28123 0.46385 0.54493 - 0.23883 0.13904 7.88701 0.53403 0.36644 0.28703 0.46833 0.54915 - 0.24069 0.13967 7.85062 0.53794 0.37136 0.29270 0.47268 0.55324 - 0.16349 0.11198 3.35407 0.17825 0.00000 0.00000 0.09659 0.18496 - 0.16667 0.11331 3.63106 0.18647 0.00000 0.00000 0.10543 0.19357 - 0.17155 0.11533 4.01880 0.19904 0.00000 0.00000 0.11895 0.20674 - 0.17520 0.11684 4.26941 0.20840 0.01022 0.00000 0.12903 0.21656 - 0.17911 0.11843 4.51521 0.21836 0.02186 0.00000 0.13976 0.22700 - 0.18251 0.11982 4.71339 0.22700 0.03196 0.00000 0.14906 0.23606 - 0.18581 0.12114 4.89152 0.23528 0.04167 0.00000 0.15799 0.24475 - 0.18931 0.12255 5.06789 0.24405 0.05195 0.00000 0.16745 0.25395 - 0.19237 0.12376 5.21075 0.25164 0.06085 0.00000 0.17563 0.26190 - 0.19531 0.12492 5.33962 0.25890 0.06939 0.00000 0.18347 0.26952 - 0.19764 0.12584 5.43550 0.26461 0.07611 0.00000 0.18964 0.27551 - 0.20257 0.12776 5.62221 0.27661 0.09027 0.00000 0.20262 0.28811 - 0.20679 0.12938 5.74298 0.28673 0.10224 0.01265 0.21358 0.29873 - 0.21142 0.13115 5.85700 0.29774 0.11530 0.02740 0.22551 0.31029 - 0.21616 0.13294 5.95498 0.30879 0.12846 0.04227 0.23753 0.32191 - 0.22037 0.13451 6.02685 0.31846 0.14002 0.05534 0.24804 0.33206 - 0.22453 0.13604 6.08406 0.32783 0.15128 0.06808 0.25826 0.34191 - 0.22792 0.13728 6.12065 0.33530 0.16031 0.07831 0.26644 0.34977 - 0.23196 0.13874 6.15263 0.34399 0.17087 0.09030 0.27597 0.35892 - 0.23546 0.13999 6.17045 0.35133 0.17984 0.10051 0.28405 0.36665 - 0.23861 0.14111 6.17873 0.35777 0.18777 0.10955 0.29115 0.37344 - 0.24253 0.14249 6.17896 0.36554 0.19741 0.12056 0.29976 0.38163 - 0.24613 0.14374 6.16957 0.37242 0.20604 0.13046 0.30742 0.38890 - 0.24943 0.14487 6.15303 0.37851 0.21376 0.13934 0.31423 0.39534 - 0.25267 0.14597 6.12963 0.38424 0.22110 0.14783 0.32068 0.40141 - 0.25577 0.14701 6.10063 0.38952 0.22795 0.15577 0.32665 0.40701 - 0.25865 0.14796 6.06809 0.39422 0.23411 0.16296 0.33200 0.41200 - 0.26130 0.14883 6.03332 0.39838 0.23965 0.16945 0.33677 0.41643 - 0.26392 0.14968 5.99463 0.40230 0.24495 0.17569 0.34130 0.42062 - 0.26644 0.15049 5.95326 0.40592 0.24991 0.18156 0.34551 0.42449 - 0.26879 0.15124 5.91114 0.40915 0.25440 0.18690 0.34929 0.42794 - 0.27098 0.15192 5.86895 0.41200 0.25845 0.19175 0.35266 0.43100 - 0.27314 0.15259 5.82433 0.41469 0.26234 0.19643 0.35588 0.43390 - 0.27523 0.15324 5.77839 0.41717 0.26599 0.20086 0.35887 0.43658 - 0.27719 0.15383 5.73298 0.41937 0.26931 0.20490 0.36156 0.43896 - 0.27902 0.15438 5.68857 0.42132 0.27231 0.20858 0.36396 0.44107 - 0.28083 0.15492 5.64245 0.42315 0.27519 0.21215 0.36624 0.44306 - 0.20626 0.13108 3.22298 0.16319 0.00000 0.00000 0.08984 0.17543 - 0.21021 0.13263 3.41340 0.17008 0.00000 0.00000 0.09746 0.18286 - 0.21620 0.13497 3.67174 0.18031 0.00000 0.00000 0.10881 0.19390 - 0.22066 0.13668 3.82927 0.18772 0.00858 0.00000 0.11705 0.20190 - 0.22538 0.13849 3.97810 0.19542 0.01818 0.00000 0.12563 0.21021 - 0.22947 0.14005 4.09377 0.20194 0.02636 0.00000 0.13293 0.21727 - 0.23339 0.14153 4.19402 0.20808 0.03410 0.00000 0.13982 0.22392 - 0.23754 0.14308 4.28935 0.21446 0.04217 0.00000 0.14698 0.23082 - 0.24112 0.14440 4.36333 0.21987 0.04907 0.00000 0.15308 0.23669 - 0.24454 0.14566 4.42721 0.22497 0.05560 0.00000 0.15884 0.24221 - 0.24723 0.14665 4.47272 0.22892 0.06068 0.00000 0.16332 0.24650 - 0.25289 0.14869 4.55561 0.23707 0.07122 0.00000 0.17257 0.25533 - 0.25765 0.15039 4.59521 0.24377 0.07997 0.00952 0.18021 0.26260 - 0.26283 0.15222 4.62384 0.25089 0.08935 0.02046 0.18836 0.27032 - 0.26805 0.15403 4.63895 0.25784 0.09863 0.03130 0.19637 0.27787 - 0.27263 0.15559 4.64094 0.26376 0.10662 0.04067 0.20323 0.28430 - 0.27710 0.15710 4.63276 0.26936 0.11428 0.04968 0.20975 0.29037 - 0.28070 0.15829 4.61895 0.27371 0.12032 0.05681 0.21487 0.29511 - 0.28493 0.15967 4.59446 0.27864 0.12727 0.06505 0.22070 0.30047 - 0.28855 0.16083 4.56647 0.28268 0.13308 0.07198 0.22553 0.30488 - 0.29177 0.16185 4.53609 0.28614 0.13814 0.07803 0.22969 0.30865 - 0.29573 0.16308 4.49175 0.29017 0.14417 0.08531 0.23461 0.31306 - 0.29932 0.16418 4.44486 0.29361 0.14948 0.09175 0.23887 0.31684 - 0.30257 0.16515 4.39691 0.29654 0.15413 0.09744 0.24256 0.32006 - 0.30572 0.16607 4.34558 0.29919 0.15848 0.10281 0.24595 0.32298 - 0.30869 0.16692 4.29247 0.30151 0.16246 0.10777 0.24899 0.32556 - 0.31141 0.16769 4.23992 0.30348 0.16597 0.11219 0.25163 0.32775 - 0.31389 0.16837 4.18867 0.30514 0.16907 0.11612 0.25391 0.32961 - 0.31630 0.16902 4.13568 0.30661 0.17198 0.11986 0.25600 0.33127 - 0.31860 0.16962 4.08233 0.30789 0.17465 0.12333 0.25787 0.33271 - 0.32072 0.17017 4.03064 0.30894 0.17702 0.12645 0.25949 0.33391 - 0.32266 0.17065 3.98100 0.30979 0.17911 0.12923 0.26087 0.33490 - 0.32455 0.17112 3.93034 0.31052 0.18108 0.13189 0.26212 0.33576 - 0.32637 0.17155 3.87984 0.31112 0.18288 0.13437 0.26323 0.33647 - 0.32804 0.17193 3.83132 0.31158 0.18448 0.13660 0.26417 0.33703 - 0.32959 0.17228 3.78503 0.31191 0.18589 0.13861 0.26496 0.33745 - 0.33110 0.17261 3.73802 0.31216 0.18722 0.14053 0.26566 0.33778 - 0.24550 0.14770 3.11039 0.15093 0.00000 0.00000 0.08468 0.16914 - 0.24996 0.14937 3.24140 0.15674 0.00000 0.00000 0.09130 0.17555 - 0.25669 0.15187 3.41307 0.16515 0.00000 0.00000 0.10096 0.18487 - 0.26165 0.15370 3.50987 0.17110 0.00737 0.00000 0.10783 0.19147 - 0.26687 0.15560 3.59673 0.17716 0.01550 0.00000 0.11486 0.19819 - 0.27136 0.15722 3.66067 0.18219 0.02234 0.00000 0.12074 0.20379 - 0.27563 0.15874 3.71295 0.18684 0.02873 0.00000 0.12620 0.20897 - 0.28011 0.16032 3.75925 0.19159 0.03532 0.00000 0.13181 0.21426 - 0.28395 0.16167 3.79222 0.19555 0.04088 0.00000 0.13651 0.21867 - 0.28760 0.16293 3.81802 0.19923 0.04609 0.00000 0.14089 0.22277 - 0.29045 0.16391 3.83444 0.20204 0.05011 0.00000 0.14426 0.22591 - 0.29638 0.16591 3.85844 0.20771 0.05836 0.00000 0.15111 0.23224 - 0.30132 0.16755 3.85355 0.21227 0.06509 0.00754 0.15665 0.23732 - 0.30662 0.16928 3.83667 0.21698 0.07220 0.01610 0.16245 0.24258 - 0.31189 0.17095 3.80896 0.22146 0.07913 0.02447 0.16802 0.24758 - 0.31645 0.17237 3.77599 0.22516 0.08500 0.03162 0.17269 0.25170 - 0.32084 0.17370 3.73615 0.22855 0.09055 0.03840 0.17703 0.25548 - 0.32433 0.17474 3.69873 0.23110 0.09486 0.04372 0.18036 0.25833 - 0.32838 0.17591 3.64875 0.23390 0.09975 0.04979 0.18407 0.26146 - 0.33181 0.17687 3.60091 0.23610 0.10378 0.05483 0.18706 0.26392 - 0.33481 0.17769 3.55448 0.23791 0.10723 0.05919 0.18958 0.26595 - 0.33846 0.17866 3.49260 0.23992 0.11130 0.06437 0.19247 0.26820 - 0.34171 0.17949 3.43191 0.24152 0.11480 0.06891 0.19488 0.27001 - 0.34461 0.18020 3.37326 0.24279 0.11782 0.07286 0.19689 0.27144 - 0.34736 0.18085 3.31328 0.24383 0.12060 0.07655 0.19867 0.27263 - 0.34993 0.18142 3.25355 0.24465 0.12308 0.07991 0.20018 0.27358 - 0.35224 0.18192 3.19633 0.24525 0.12523 0.08287 0.20143 0.27427 - 0.35432 0.18234 3.14198 0.24566 0.12710 0.08548 0.20245 0.27476 - 0.35631 0.18272 3.08710 0.24594 0.12881 0.08793 0.20331 0.27510 - 0.35817 0.18306 3.03300 0.24607 0.13034 0.09017 0.20402 0.27529 - 0.35985 0.18334 2.98157 0.24609 0.13167 0.09216 0.20458 0.27534 - 0.36136 0.18357 2.93298 0.24600 0.13281 0.09392 0.20499 0.27527 - 0.36282 0.18377 2.88413 0.24582 0.13385 0.09557 0.20531 0.27511 - 0.36419 0.18395 2.83612 0.24556 0.13478 0.09709 0.20553 0.27485 - 0.36543 0.18408 2.79057 0.24523 0.13558 0.09844 0.20565 0.27451 - 0.36655 0.18419 2.74762 0.24484 0.13626 0.09964 0.20570 0.27412 - 0.36762 0.18427 2.70447 0.24439 0.13687 0.10077 0.20567 0.27365 - 0.31575 0.17622 2.87346 0.13024 0.00000 0.00000 0.07635 0.16005 - 0.32066 0.17791 2.92594 0.13436 0.00000 0.00000 0.08137 0.16472 - 0.32798 0.18038 2.98621 0.14008 0.00000 0.00000 0.08843 0.17122 - 0.33329 0.18215 3.00748 0.14394 0.00561 0.00000 0.09328 0.17562 - 0.33881 0.18395 3.01923 0.14772 0.01165 0.00000 0.09809 0.17993 - 0.34347 0.18545 3.02197 0.15074 0.01663 0.00000 0.10199 0.18338 - 0.34784 0.18683 3.01871 0.15343 0.02120 0.00000 0.10552 0.18645 - 0.35236 0.18823 3.00948 0.15607 0.02581 0.00000 0.10904 0.18946 - 0.35617 0.18939 2.99706 0.15818 0.02964 0.00000 0.11191 0.19187 - 0.35974 0.19045 2.98155 0.16008 0.03316 0.00000 0.11452 0.19403 - 0.36249 0.19125 2.96697 0.16148 0.03584 0.00000 0.11648 0.19562 - 0.36809 0.19283 2.92993 0.16418 0.04123 0.00000 0.12033 0.19866 - 0.37262 0.19406 2.88140 0.16620 0.04552 0.00509 0.12332 0.20092 - 0.37735 0.19528 2.82179 0.16815 0.04993 0.01074 0.12631 0.20308 - 0.38190 0.19638 2.75587 0.16983 0.05412 0.01617 0.12904 0.20492 - 0.38570 0.19724 2.69341 0.17109 0.05757 0.02070 0.13120 0.20626 - 0.38924 0.19798 2.62850 0.17210 0.06074 0.02492 0.13309 0.20731 - 0.39196 0.19850 2.57362 0.17275 0.06315 0.02816 0.13446 0.20797 - 0.39501 0.19902 2.50627 0.17334 0.06581 0.03180 0.13587 0.20852 - 0.39748 0.19938 2.44631 0.17367 0.06794 0.03477 0.13692 0.20879 - 0.39957 0.19965 2.39124 0.17384 0.06971 0.03729 0.13772 0.20888 - 0.40198 0.19989 2.32156 0.17386 0.07174 0.04023 0.13852 0.20877 - 0.40403 0.20001 2.25651 0.17370 0.07342 0.04275 0.13907 0.20847 - 0.40576 0.20006 2.19617 0.17341 0.07481 0.04490 0.13943 0.20801 - 0.40730 0.20003 2.13661 0.17299 0.07603 0.04686 0.13963 0.20741 - 0.40865 0.19993 2.07916 0.17245 0.07708 0.04861 0.13969 0.20668 - 0.40978 0.19978 2.02566 0.17185 0.07795 0.05012 0.13964 0.20587 - 0.41071 0.19959 1.97608 0.17119 0.07865 0.05142 0.13949 0.20502 - 0.41153 0.19935 1.92714 0.17045 0.07926 0.05261 0.13925 0.20407 - 0.41222 0.19907 1.87988 0.16966 0.07977 0.05368 0.13893 0.20305 - 0.41278 0.19877 1.83581 0.16884 0.08017 0.05460 0.13857 0.20202 - 0.41322 0.19844 1.79488 0.16802 0.08049 0.05540 0.13816 0.20098 - 0.41357 0.19808 1.75438 0.16714 0.08074 0.05612 0.13769 0.19989 - 0.41384 0.19770 1.71519 0.16624 0.08093 0.05677 0.13718 0.19875 - 0.41402 0.19730 1.67853 0.16533 0.08106 0.05733 0.13665 0.19763 - 0.41413 0.19690 1.64440 0.16444 0.08114 0.05781 0.13610 0.19653 - 0.41418 0.19647 1.61053 0.16351 0.08118 0.05824 0.13552 0.19538 - 0.37659 0.19991 2.60936 0.11277 0.00000 0.00000 0.06930 0.15219 - 0.38140 0.20137 2.61342 0.11567 0.00000 0.00000 0.07305 0.15537 - 0.38844 0.20345 2.60732 0.11951 0.00000 0.00000 0.07817 0.15957 - 0.39345 0.20489 2.58571 0.12198 0.00433 0.00000 0.08157 0.16226 - 0.39857 0.20631 2.55628 0.12428 0.00892 0.00000 0.08483 0.16474 - 0.40282 0.20744 2.52658 0.12603 0.01264 0.00000 0.08740 0.16661 - 0.40674 0.20845 2.49484 0.12752 0.01599 0.00000 0.08965 0.16817 - 0.41071 0.20943 2.45810 0.12890 0.01933 0.00000 0.09183 0.16958 - 0.41398 0.21019 2.42396 0.12994 0.02205 0.00000 0.09355 0.17063 - 0.41699 0.21086 2.38936 0.13082 0.02453 0.00000 0.09506 0.17147 - 0.41926 0.21133 2.36092 0.13142 0.02639 0.00000 0.09617 0.17204 - 0.42375 0.21219 2.29786 0.13249 0.03007 0.00000 0.09825 0.17295 - 0.42724 0.21276 2.23297 0.13316 0.03293 0.00359 0.09976 0.17344 - 0.43073 0.21322 2.15899 0.13367 0.03581 0.00753 0.10117 0.17369 - 0.43389 0.21350 2.08194 0.13396 0.03848 0.01124 0.10235 0.17365 - 0.43637 0.21360 2.01244 0.13403 0.04062 0.01429 0.10317 0.17337 - 0.43852 0.21356 1.94309 0.13392 0.04255 0.01709 0.10380 0.17288 - 0.44005 0.21343 1.88635 0.13370 0.04397 0.01921 0.10417 0.17233 - 0.44161 0.21315 1.81877 0.13330 0.04550 0.02155 0.10445 0.17149 - 0.44275 0.21280 1.76024 0.13283 0.04669 0.02343 0.10456 0.17061 - 0.44358 0.21241 1.70771 0.13231 0.04766 0.02500 0.10455 0.16969 - 0.44439 0.21181 1.64276 0.13153 0.04871 0.02681 0.10440 0.16840 - 0.44490 0.21115 1.58349 0.13069 0.04955 0.02832 0.10413 0.16706 - 0.44517 0.21046 1.52960 0.12982 0.05022 0.02959 0.10378 0.16571 - 0.44524 0.20970 1.47735 0.12887 0.05077 0.03073 0.10333 0.16427 - 0.44514 0.20889 1.42781 0.12788 0.05120 0.03173 0.10280 0.16279 - 0.44489 0.20807 1.38237 0.12688 0.05153 0.03257 0.10224 0.16132 - 0.44452 0.20724 1.34082 0.12590 0.05177 0.03327 0.10165 0.15989 - 0.44403 0.20637 1.30033 0.12487 0.05195 0.03391 0.10101 0.15841 - 0.44343 0.20548 1.26171 0.12382 0.05206 0.03446 0.10034 0.15692 - 0.44276 0.20459 1.22608 0.12280 0.05212 0.03493 0.09966 0.15547 - 0.44204 0.20373 1.19333 0.12180 0.05214 0.03532 0.09899 0.15407 - 0.44123 0.20282 1.16123 0.12078 0.05212 0.03566 0.09828 0.15263 - 0.44034 0.20190 1.13046 0.11975 0.05206 0.03596 0.09756 0.15120 - 0.43943 0.20100 1.10192 0.11875 0.05197 0.03620 0.09684 0.14981 - 0.43850 0.20013 1.07556 0.11779 0.05186 0.03640 0.09615 0.14848 - 0.43750 0.19922 1.04960 0.11681 0.05173 0.03657 0.09543 0.14712 - 0.42899 0.21940 2.32960 0.09795 0.00000 0.00000 0.06296 0.14403 - 0.43325 0.22044 2.30344 0.09995 0.00000 0.00000 0.06570 0.14594 - 0.43936 0.22185 2.25740 0.10247 0.00000 0.00000 0.06932 0.14824 - 0.44362 0.22276 2.21146 0.10399 0.00336 0.00000 0.07163 0.14955 - 0.44785 0.22359 2.15965 0.10532 0.00687 0.00000 0.07377 0.15060 - 0.45128 0.22419 2.11309 0.10625 0.00968 0.00000 0.07539 0.15125 - 0.45435 0.22467 2.06717 0.10697 0.01217 0.00000 0.07676 0.15167 - 0.45737 0.22506 2.01741 0.10757 0.01462 0.00000 0.07802 0.15191 - 0.45979 0.22531 1.97357 0.10796 0.01660 0.00000 0.07897 0.15196 - 0.46192 0.22546 1.93092 0.10823 0.01837 0.00000 0.07976 0.15187 - 0.46347 0.22552 1.89699 0.10838 0.01968 0.00000 0.08031 0.15172 - 0.46638 0.22547 1.82460 0.10851 0.02224 0.00000 0.08126 0.15117 - 0.46845 0.22525 1.75589 0.10844 0.02420 0.00260 0.08187 0.15048 - 0.47028 0.22482 1.68008 0.10818 0.02613 0.00542 0.08233 0.14949 - 0.47169 0.22417 1.60342 0.10775 0.02787 0.00803 0.08259 0.14826 - 0.47255 0.22343 1.53604 0.10722 0.02924 0.01015 0.08266 0.14698 - 0.47304 0.22254 1.47028 0.10656 0.03044 0.01207 0.08258 0.14556 - 0.47319 0.22170 1.41749 0.10594 0.03130 0.01350 0.08241 0.14430 - 0.47306 0.22058 1.35571 0.10510 0.03221 0.01507 0.08210 0.14266 - 0.47269 0.21950 1.30310 0.10429 0.03289 0.01631 0.08173 0.14114 - 0.47215 0.21843 1.25656 0.10348 0.03342 0.01733 0.08132 0.13969 - 0.47121 0.21700 1.19986 0.10240 0.03398 0.01849 0.08072 0.13778 - 0.47008 0.21556 1.14888 0.10131 0.03439 0.01945 0.08007 0.13592 - 0.46881 0.21415 1.10315 0.10025 0.03469 0.02023 0.07940 0.13414 - 0.46737 0.21268 1.05934 0.09915 0.03492 0.02093 0.07868 0.13231 - 0.46579 0.21119 1.01827 0.09803 0.03507 0.02152 0.07792 0.13050 - 0.46415 0.20974 0.98100 0.09695 0.03516 0.02201 0.07717 0.12875 - 0.46248 0.20833 0.94724 0.09590 0.03520 0.02242 0.07643 0.12710 - 0.46070 0.20688 0.91463 0.09484 0.03520 0.02277 0.07566 0.12542 - 0.45884 0.20543 0.88379 0.09377 0.03516 0.02307 0.07488 0.12375 - 0.45698 0.20402 0.85556 0.09275 0.03509 0.02332 0.07412 0.12217 - 0.45514 0.20266 0.82980 0.09177 0.03500 0.02351 0.07339 0.12066 - 0.45322 0.20128 0.80472 0.09078 0.03488 0.02368 0.07264 0.11914 - 0.45125 0.19989 0.78084 0.08979 0.03474 0.02381 0.07188 0.11764 - 0.44931 0.19855 0.75882 0.08884 0.03459 0.02392 0.07116 0.11620 - 0.44742 0.19727 0.73860 0.08794 0.03444 0.02400 0.07046 0.11485 - 0.44546 0.19596 0.71880 0.08703 0.03427 0.02406 0.06975 0.11347 - 0.48358 0.23832 1.97927 0.08278 0.00000 0.00000 0.05575 0.13278 - 0.48671 0.23865 1.93200 0.08399 0.00000 0.00000 0.05751 0.13337 - 0.49101 0.23896 1.85956 0.08538 0.00000 0.00000 0.05972 0.13377 - 0.49385 0.23902 1.79920 0.08612 0.00245 0.00000 0.06103 0.13374 - 0.49651 0.23893 1.73520 0.08666 0.00497 0.00000 0.06217 0.13342 - 0.49851 0.23872 1.68030 0.08696 0.00695 0.00000 0.06296 0.13295 - 0.50018 0.23840 1.62812 0.08710 0.00869 0.00000 0.06357 0.13233 - 0.50165 0.23793 1.57345 0.08713 0.01037 0.00000 0.06407 0.13152 - 0.50268 0.23743 1.52665 0.08705 0.01170 0.00000 0.06439 0.13071 - 0.50346 0.23685 1.48221 0.08689 0.01288 0.00000 0.06460 0.12983 - 0.50392 0.23633 1.44756 0.08672 0.01374 0.00000 0.06471 0.12907 - 0.50446 0.23504 1.37545 0.08622 0.01540 0.00000 0.06479 0.12732 - 0.50444 0.23376 1.31044 0.08566 0.01663 0.00177 0.06471 0.12568 - 0.50394 0.23215 1.24048 0.08493 0.01782 0.00366 0.06448 0.12374 - 0.50291 0.23030 1.17136 0.08407 0.01887 0.00539 0.06410 0.12162 - 0.50157 0.22849 1.11186 0.08320 0.01967 0.00677 0.06365 0.11964 - 0.49985 0.22654 1.05488 0.08226 0.02034 0.00801 0.06312 0.11758 - 0.49818 0.22485 1.00986 0.08144 0.02081 0.00892 0.06261 0.11585 - 0.49586 0.22271 0.95798 0.08040 0.02128 0.00990 0.06194 0.11372 - 0.49358 0.22075 0.91445 0.07944 0.02162 0.01066 0.06130 0.11182 - 0.49131 0.21890 0.87643 0.07854 0.02187 0.01128 0.06067 0.11006 - 0.48819 0.21650 0.83071 0.07736 0.02211 0.01198 0.05983 0.10782 - 0.48506 0.21418 0.79016 0.07622 0.02227 0.01254 0.05901 0.10571 - 0.48195 0.21196 0.75421 0.07514 0.02236 0.01299 0.05821 0.10373 - 0.47869 0.20971 0.72016 0.07403 0.02241 0.01338 0.05738 0.10176 - 0.47536 0.20747 0.68857 0.07295 0.02241 0.01371 0.05655 0.09984 - 0.47210 0.20534 0.66018 0.07191 0.02238 0.01397 0.05576 0.09803 - 0.46893 0.20330 0.63469 0.07092 0.02232 0.01418 0.05500 0.09633 - 0.46567 0.20124 0.61026 0.06993 0.02224 0.01436 0.05422 0.09464 - 0.46237 0.19920 0.58734 0.06895 0.02214 0.01451 0.05346 0.09299 - 0.45918 0.19725 0.56651 0.06802 0.02202 0.01462 0.05273 0.09143 - 0.45610 0.19540 0.54764 0.06714 0.02190 0.01470 0.05203 0.08997 - 0.45295 0.19352 0.52937 0.06626 0.02176 0.01477 0.05133 0.08851 - 0.44978 0.19166 0.51208 0.06538 0.02162 0.01482 0.05064 0.08708 - 0.44673 0.18989 0.49623 0.06455 0.02147 0.01485 0.04998 0.08573 - 0.44380 0.18820 0.48175 0.06377 0.02132 0.01487 0.04935 0.08446 - 0.44080 0.18649 0.46764 0.06298 0.02116 0.01487 0.04871 0.08319 - 0.52690 0.25158 1.64716 0.07091 0.00000 0.00000 0.04920 0.12032 - 0.52855 0.25107 1.59099 0.07158 0.00000 0.00000 0.05023 0.11990 - 0.53053 0.25009 1.50883 0.07223 0.00000 0.00000 0.05141 0.11888 - 0.53160 0.24918 1.44497 0.07246 0.00178 0.00000 0.05202 0.11787 - 0.53234 0.24806 1.37924 0.07253 0.00358 0.00000 0.05247 0.11660 - 0.53266 0.24696 1.32422 0.07244 0.00498 0.00000 0.05271 0.11535 - 0.53266 0.24578 1.27298 0.07225 0.00619 0.00000 0.05283 0.11404 - 0.53236 0.24440 1.22030 0.07195 0.00735 0.00000 0.05283 0.11255 - 0.53182 0.24310 1.17598 0.07161 0.00826 0.00000 0.05276 0.11118 - 0.53108 0.24176 1.13450 0.07123 0.00905 0.00000 0.05262 0.10981 - 0.53033 0.24065 1.10256 0.07089 0.00962 0.00000 0.05247 0.10869 - 0.52829 0.23811 1.03716 0.07008 0.01070 0.00000 0.05205 0.10624 - 0.52608 0.23578 0.98001 0.06930 0.01149 0.00122 0.05159 0.10408 - 0.52313 0.23302 0.91955 0.06836 0.01223 0.00251 0.05099 0.10163 - 0.51961 0.23003 0.86081 0.06732 0.01286 0.00368 0.05028 0.09908 - 0.51605 0.22722 0.81100 0.06633 0.01333 0.00460 0.04959 0.09677 - 0.51214 0.22430 0.76394 0.06530 0.01372 0.00541 0.04885 0.09446 - 0.50869 0.22183 0.72720 0.06443 0.01397 0.00600 0.04821 0.09255 - 0.50427 0.21879 0.68534 0.06335 0.01422 0.00663 0.04740 0.09026 - 0.50017 0.21606 0.65060 0.06238 0.01438 0.00712 0.04666 0.08826 - 0.49627 0.21353 0.62055 0.06148 0.01450 0.00751 0.04598 0.08644 - 0.49115 0.21030 0.58476 0.06033 0.01459 0.00794 0.04509 0.08417 - 0.48618 0.20724 0.55335 0.05924 0.01463 0.00828 0.04424 0.08206 - 0.48140 0.20436 0.52575 0.05822 0.01463 0.00855 0.04344 0.08012 - 0.47652 0.20147 0.49982 0.05719 0.01461 0.00878 0.04263 0.07821 - 0.47166 0.19864 0.47596 0.05619 0.01456 0.00897 0.04184 0.07637 - 0.46698 0.19596 0.45467 0.05524 0.01449 0.00912 0.04110 0.07466 - 0.46251 0.19343 0.43568 0.05436 0.01441 0.00923 0.04039 0.07307 - 0.45797 0.19090 0.41759 0.05347 0.01432 0.00933 0.03969 0.07150 - 0.45347 0.18841 0.40072 0.05260 0.01421 0.00940 0.03900 0.06998 - 0.44915 0.18606 0.38546 0.05178 0.01410 0.00945 0.03834 0.06856 - 0.44504 0.18383 0.37171 0.05100 0.01399 0.00949 0.03773 0.06724 - 0.44087 0.18160 0.35846 0.05023 0.01387 0.00951 0.03711 0.06592 - 0.43674 0.17940 0.34598 0.04948 0.01375 0.00952 0.03651 0.06465 - 0.43278 0.17731 0.33458 0.04876 0.01362 0.00953 0.03594 0.06345 - 0.42901 0.17534 0.32421 0.04809 0.01350 0.00952 0.03540 0.06234 - 0.42518 0.17335 0.31413 0.04741 0.01337 0.00951 0.03487 0.06122 - 0.55983 0.25963 1.34564 0.06180 0.00000 0.00000 0.04323 0.10700 - 0.55977 0.25822 1.28828 0.06208 0.00000 0.00000 0.04372 0.10586 - 0.55913 0.25587 1.20657 0.06222 0.00000 0.00000 0.04417 0.10386 - 0.55823 0.25396 1.14554 0.06212 0.00128 0.00000 0.04430 0.10219 - 0.55686 0.25178 1.08393 0.06187 0.00257 0.00000 0.04429 0.10029 - 0.55533 0.24977 1.03320 0.06155 0.00356 0.00000 0.04416 0.09855 - 0.55356 0.24772 0.98662 0.06115 0.00440 0.00000 0.04396 0.09682 - 0.55137 0.24544 0.93936 0.06066 0.00520 0.00000 0.04366 0.09493 - 0.54920 0.24337 0.90009 0.06018 0.00581 0.00000 0.04335 0.09325 - 0.54689 0.24130 0.86373 0.05967 0.00635 0.00000 0.04300 0.09162 - 0.54490 0.23962 0.83598 0.05924 0.00673 0.00000 0.04271 0.09031 - 0.54026 0.23590 0.77982 0.05827 0.00743 0.00000 0.04200 0.08753 - 0.53584 0.23259 0.73182 0.05738 0.00794 0.00085 0.04135 0.08514 - 0.53051 0.22880 0.68171 0.05635 0.00840 0.00174 0.04057 0.08251 - 0.52458 0.22478 0.63364 0.05524 0.00879 0.00254 0.03972 0.07984 - 0.51892 0.22110 0.59335 0.05422 0.00907 0.00316 0.03893 0.07747 - 0.51296 0.21735 0.55569 0.05318 0.00929 0.00370 0.03812 0.07513 - 0.50787 0.21422 0.52657 0.05231 0.00943 0.00410 0.03745 0.07324 - 0.50153 0.21042 0.49367 0.05125 0.00956 0.00451 0.03662 0.07100 - 0.49579 0.20706 0.46661 0.05032 0.00963 0.00483 0.03588 0.06907 - 0.49044 0.20399 0.44338 0.04946 0.00968 0.00508 0.03521 0.06734 - 0.48356 0.20010 0.41592 0.04837 0.00970 0.00536 0.03436 0.06520 - 0.47699 0.19646 0.39201 0.04735 0.00969 0.00557 0.03356 0.06324 - 0.47078 0.19306 0.37115 0.04641 0.00967 0.00574 0.03282 0.06145 - 0.46452 0.18969 0.35168 0.04547 0.00962 0.00588 0.03208 0.05971 - 0.45837 0.18642 0.33387 0.04455 0.00956 0.00600 0.03137 0.05805 - 0.45251 0.18334 0.31807 0.04370 0.00949 0.00608 0.03070 0.05652 - 0.44698 0.18047 0.30404 0.04290 0.00942 0.00615 0.03008 0.05511 - 0.44142 0.17760 0.29075 0.04211 0.00933 0.00620 0.02947 0.05373 - 0.43594 0.17481 0.27840 0.04134 0.00924 0.00624 0.02887 0.05240 - 0.43073 0.17217 0.26728 0.04061 0.00915 0.00626 0.02830 0.05117 - 0.42581 0.16970 0.25729 0.03993 0.00906 0.00628 0.02778 0.05003 - 0.42085 0.16723 0.24770 0.03926 0.00897 0.00628 0.02726 0.04890 - 0.41596 0.16482 0.23869 0.03860 0.00887 0.00628 0.02675 0.04781 - 0.41131 0.16253 0.23049 0.03797 0.00877 0.00628 0.02627 0.04679 - 0.40690 0.16038 0.22304 0.03739 0.00868 0.00626 0.02582 0.04584 - 0.40246 0.15823 0.21583 0.03681 0.00858 0.00625 0.02537 0.04491 - 0.58321 0.26294 1.08077 0.05486 0.00000 0.00000 0.03781 0.09333 - 0.58131 0.26062 1.02685 0.05486 0.00000 0.00000 0.03791 0.09172 - 0.57788 0.25692 0.95148 0.05461 0.00000 0.00000 0.03785 0.08910 - 0.57491 0.25403 0.89669 0.05428 0.00092 0.00000 0.03765 0.08705 - 0.57135 0.25082 0.84218 0.05381 0.00184 0.00000 0.03733 0.08480 - 0.56794 0.24794 0.79785 0.05332 0.00253 0.00000 0.03698 0.08281 - 0.56438 0.24508 0.75758 0.05279 0.00311 0.00000 0.03658 0.08087 - 0.56029 0.24196 0.71716 0.05217 0.00366 0.00000 0.03611 0.07881 - 0.55650 0.23917 0.68389 0.05160 0.00408 0.00000 0.03566 0.07701 - 0.55264 0.23643 0.65333 0.05101 0.00444 0.00000 0.03520 0.07528 - 0.54945 0.23423 0.63019 0.05053 0.00469 0.00000 0.03482 0.07392 - 0.54230 0.22947 0.58378 0.04947 0.00515 0.00000 0.03399 0.07107 - 0.53579 0.22530 0.54476 0.04852 0.00548 0.00060 0.03325 0.06867 - 0.52822 0.22062 0.50445 0.04745 0.00577 0.00122 0.03240 0.06607 - 0.52007 0.21574 0.46618 0.04632 0.00601 0.00177 0.03152 0.06347 - 0.51249 0.21133 0.43442 0.04530 0.00618 0.00220 0.03072 0.06121 - 0.50470 0.20690 0.40498 0.04427 0.00630 0.00257 0.02992 0.05901 - 0.49816 0.20326 0.38238 0.04342 0.00638 0.00284 0.02926 0.05724 - 0.49014 0.19887 0.35704 0.04240 0.00644 0.00312 0.02847 0.05518 - 0.48299 0.19503 0.33634 0.04150 0.00647 0.00333 0.02779 0.05342 - 0.47641 0.19154 0.31867 0.04069 0.00648 0.00350 0.02716 0.05186 - 0.46803 0.18717 0.29791 0.03966 0.00648 0.00368 0.02639 0.04994 - 0.46015 0.18311 0.27995 0.03871 0.00646 0.00382 0.02567 0.04821 - 0.45276 0.17936 0.26436 0.03784 0.00642 0.00393 0.02501 0.04664 - 0.44540 0.17566 0.24989 0.03697 0.00638 0.00402 0.02436 0.04513 - 0.43821 0.17209 0.23671 0.03614 0.00632 0.00409 0.02374 0.04369 - 0.43143 0.16876 0.22507 0.03536 0.00626 0.00414 0.02316 0.04238 - 0.42507 0.16567 0.21477 0.03464 0.00620 0.00418 0.02262 0.04118 - 0.41872 0.16260 0.20504 0.03393 0.00613 0.00421 0.02210 0.04001 - 0.41250 0.15962 0.19603 0.03324 0.00606 0.00423 0.02159 0.03889 - 0.40663 0.15683 0.18795 0.03259 0.00599 0.00424 0.02112 0.03785 - 0.40110 0.15422 0.18070 0.03199 0.00593 0.00425 0.02067 0.03690 - 0.39557 0.15162 0.17376 0.03139 0.00585 0.00425 0.02024 0.03596 - 0.39014 0.14910 0.16725 0.03081 0.00578 0.00424 0.01982 0.03506 - 0.38500 0.14671 0.16135 0.03026 0.00571 0.00424 0.01942 0.03423 - 0.38015 0.14448 0.15599 0.02975 0.00564 0.00422 0.01905 0.03345 - 0.37528 0.14225 0.15081 0.02924 0.00557 0.00421 0.01868 0.03268 - 0.59783 0.26202 0.85425 0.04954 0.00000 0.00000 0.03288 0.07981 - 0.59405 0.25884 0.80631 0.04930 0.00000 0.00000 0.03272 0.07795 - 0.58779 0.25385 0.74027 0.04875 0.00000 0.00000 0.03232 0.07503 - 0.58274 0.25004 0.69324 0.04824 0.00066 0.00000 0.03191 0.07281 - 0.57701 0.24589 0.64699 0.04760 0.00130 0.00000 0.03141 0.07043 - 0.57175 0.24222 0.60975 0.04699 0.00178 0.00000 0.03092 0.06837 - 0.56643 0.23863 0.57623 0.04635 0.00219 0.00000 0.03041 0.06639 - 0.56052 0.23475 0.54287 0.04564 0.00256 0.00000 0.02984 0.06432 - 0.55518 0.23134 0.51561 0.04500 0.00285 0.00000 0.02933 0.06253 - 0.54986 0.22802 0.49076 0.04436 0.00309 0.00000 0.02882 0.06084 - 0.54553 0.22538 0.47205 0.04384 0.00326 0.00000 0.02842 0.05952 - 0.53605 0.21972 0.43480 0.04271 0.00356 0.00000 0.02754 0.05678 - 0.52763 0.21485 0.40390 0.04173 0.00377 0.00042 0.02678 0.05451 - 0.51804 0.20944 0.37224 0.04064 0.00396 0.00086 0.02593 0.05209 - 0.50793 0.20388 0.34244 0.03950 0.00410 0.00125 0.02508 0.04970 - 0.49868 0.19891 0.31790 0.03849 0.00420 0.00155 0.02431 0.04765 - 0.48931 0.19398 0.29531 0.03747 0.00427 0.00181 0.02356 0.04567 - 0.48153 0.18995 0.27808 0.03665 0.00431 0.00199 0.02295 0.04410 - 0.47211 0.18514 0.25886 0.03566 0.00434 0.00219 0.02223 0.04229 - 0.46380 0.18097 0.24324 0.03480 0.00436 0.00233 0.02161 0.04075 - 0.45621 0.17721 0.22998 0.03403 0.00436 0.00245 0.02105 0.03940 - 0.44665 0.17252 0.21448 0.03306 0.00434 0.00257 0.02037 0.03775 - 0.43772 0.16820 0.20112 0.03217 0.00432 0.00266 0.01974 0.03628 - 0.42943 0.16424 0.18958 0.03136 0.00428 0.00274 0.01916 0.03495 - 0.42121 0.16035 0.17890 0.03056 0.00425 0.00280 0.01860 0.03368 - 0.41326 0.15662 0.16921 0.02979 0.00420 0.00284 0.01807 0.03248 - 0.40580 0.15316 0.16067 0.02908 0.00415 0.00288 0.01758 0.03139 - 0.39884 0.14996 0.15314 0.02842 0.00411 0.00290 0.01713 0.03040 - 0.39192 0.14680 0.14605 0.02777 0.00406 0.00292 0.01668 0.02944 - 0.38519 0.14375 0.13949 0.02715 0.00400 0.00293 0.01626 0.02852 - 0.37886 0.14090 0.13361 0.02656 0.00395 0.00294 0.01586 0.02768 - 0.37294 0.13825 0.12836 0.02602 0.00390 0.00294 0.01550 0.02691 - 0.36702 0.13562 0.12333 0.02549 0.00385 0.00294 0.01514 0.02615 - 0.36125 0.13307 0.11863 0.02497 0.00380 0.00294 0.01479 0.02543 - 0.35580 0.13068 0.11436 0.02448 0.00375 0.00293 0.01447 0.02476 - 0.35068 0.12844 0.11049 0.02403 0.00370 0.00292 0.01417 0.02414 - 0.34556 0.12621 0.10676 0.02357 0.00365 0.00291 0.01387 0.02353 - 0.60446 0.25738 0.66493 0.04531 0.00000 0.00000 0.02844 0.06690 - 0.59882 0.25341 0.62406 0.04487 0.00000 0.00000 0.02811 0.06495 - 0.58979 0.24727 0.56845 0.04408 0.00000 0.00000 0.02749 0.06197 - 0.58273 0.24264 0.52948 0.04341 0.00046 0.00000 0.02696 0.05976 - 0.57492 0.23766 0.49153 0.04264 0.00091 0.00000 0.02635 0.05742 - 0.56790 0.23330 0.46124 0.04192 0.00125 0.00000 0.02579 0.05542 - 0.56093 0.22908 0.43417 0.04120 0.00153 0.00000 0.02523 0.05353 - 0.55332 0.22457 0.40742 0.04042 0.00178 0.00000 0.02463 0.05156 - 0.54655 0.22063 0.38571 0.03972 0.00197 0.00000 0.02410 0.04989 - 0.53989 0.21684 0.36603 0.03903 0.00214 0.00000 0.02358 0.04831 - 0.53454 0.21384 0.35128 0.03848 0.00225 0.00000 0.02317 0.04710 - 0.52296 0.20747 0.32212 0.03731 0.00245 0.00000 0.02230 0.04459 - 0.51286 0.20205 0.29816 0.03631 0.00259 0.00030 0.02157 0.04255 - 0.50152 0.19610 0.27380 0.03520 0.00270 0.00062 0.02077 0.04039 - 0.48973 0.19005 0.25102 0.03406 0.00280 0.00090 0.01997 0.03829 - 0.47908 0.18469 0.23238 0.03306 0.00286 0.00111 0.01927 0.03649 - 0.46841 0.17941 0.21532 0.03206 0.00290 0.00129 0.01859 0.03479 - 0.45963 0.17514 0.20236 0.03126 0.00292 0.00142 0.01804 0.03344 - 0.44909 0.17007 0.18798 0.03030 0.00293 0.00156 0.01740 0.03190 - 0.43987 0.16570 0.17634 0.02948 0.00293 0.00166 0.01685 0.03061 - 0.43151 0.16179 0.16649 0.02875 0.00293 0.00174 0.01636 0.02948 - 0.42105 0.15694 0.15501 0.02783 0.00291 0.00183 0.01576 0.02811 - 0.41136 0.15251 0.14516 0.02700 0.00289 0.00190 0.01522 0.02689 - 0.40242 0.14845 0.13667 0.02624 0.00287 0.00195 0.01473 0.02580 - 0.39361 0.14451 0.12884 0.02549 0.00283 0.00199 0.01426 0.02477 - 0.38512 0.14074 0.12175 0.02478 0.00280 0.00202 0.01381 0.02380 - 0.37722 0.13725 0.11551 0.02413 0.00277 0.00205 0.01339 0.02292 - 0.36987 0.13405 0.11002 0.02353 0.00273 0.00206 0.01302 0.02213 - 0.36261 0.13089 0.10485 0.02294 0.00269 0.00207 0.01265 0.02136 - 0.35557 0.12786 0.10008 0.02237 0.00266 0.00208 0.01230 0.02063 - 0.34897 0.12504 0.09581 0.02184 0.00262 0.00209 0.01197 0.01997 - 0.34282 0.12242 0.09199 0.02135 0.00258 0.00209 0.01167 0.01936 - 0.33671 0.11984 0.08835 0.02087 0.00255 0.00209 0.01138 0.01877 - 0.33075 0.11734 0.08494 0.02041 0.00251 0.00208 0.01109 0.01820 - 0.32516 0.11500 0.08184 0.01997 0.00247 0.00208 0.01083 0.01768 - 0.31992 0.11282 0.07904 0.01957 0.00244 0.00207 0.01058 0.01720 - 0.31469 0.11065 0.07634 0.01916 0.00241 0.00206 0.01034 0.01673 - 0.60391 0.24956 0.50976 0.04178 0.00000 0.00000 0.02445 0.05492 - 0.59648 0.24490 0.47613 0.04118 0.00000 0.00000 0.02401 0.05303 - 0.58482 0.23777 0.43085 0.04017 0.00000 0.00000 0.02327 0.05018 - 0.57587 0.23244 0.39953 0.03937 0.00032 0.00000 0.02268 0.04809 - 0.56613 0.22677 0.36929 0.03847 0.00064 0.00000 0.02202 0.04592 - 0.55748 0.22185 0.34533 0.03767 0.00087 0.00000 0.02144 0.04407 - 0.54901 0.21711 0.32406 0.03689 0.00106 0.00000 0.02088 0.04234 - 0.53986 0.21209 0.30316 0.03604 0.00123 0.00000 0.02028 0.04056 - 0.53180 0.20775 0.28629 0.03529 0.00136 0.00000 0.01975 0.03906 - 0.52396 0.20359 0.27107 0.03457 0.00147 0.00000 0.01925 0.03766 - 0.51771 0.20032 0.25971 0.03400 0.00155 0.00000 0.01886 0.03658 - 0.50433 0.19343 0.23736 0.03280 0.00168 0.00000 0.01804 0.03439 - 0.49279 0.18763 0.21915 0.03177 0.00177 0.00022 0.01736 0.03261 - 0.47998 0.18131 0.20073 0.03066 0.00184 0.00045 0.01663 0.03076 - 0.46682 0.17494 0.18361 0.02953 0.00190 0.00065 0.01590 0.02897 - 0.45505 0.16935 0.16966 0.02854 0.00194 0.00081 0.01527 0.02746 - 0.44336 0.16389 0.15695 0.02757 0.00196 0.00094 0.01466 0.02604 - 0.43382 0.15949 0.14733 0.02679 0.00197 0.00104 0.01418 0.02492 - 0.42245 0.15431 0.13668 0.02587 0.00198 0.00114 0.01362 0.02366 - 0.41257 0.14987 0.12810 0.02509 0.00198 0.00121 0.01315 0.02260 - 0.40367 0.14591 0.12085 0.02439 0.00197 0.00127 0.01273 0.02168 - 0.39259 0.14104 0.11242 0.02353 0.00196 0.00134 0.01222 0.02058 - 0.38240 0.13661 0.10520 0.02274 0.00194 0.00138 0.01176 0.01961 - 0.37304 0.13259 0.09899 0.02203 0.00192 0.00142 0.01134 0.01874 - 0.36387 0.12868 0.09326 0.02134 0.00190 0.00145 0.01094 0.01792 - 0.35509 0.12497 0.08809 0.02069 0.00187 0.00147 0.01057 0.01716 - 0.34694 0.12155 0.08354 0.02009 0.00185 0.00149 0.01022 0.01647 - 0.33940 0.11842 0.07954 0.01954 0.00182 0.00150 0.00991 0.01585 - 0.33197 0.11535 0.07577 0.01900 0.00180 0.00151 0.00961 0.01525 - 0.32480 0.11241 0.07230 0.01849 0.00177 0.00152 0.00932 0.01469 - 0.31811 0.10969 0.06920 0.01801 0.00175 0.00152 0.00905 0.01418 - 0.31189 0.10717 0.06642 0.01757 0.00172 0.00152 0.00881 0.01371 - 0.30572 0.10468 0.06377 0.01714 0.00169 0.00152 0.00857 0.01326 - 0.29974 0.10229 0.06128 0.01672 0.00167 0.00151 0.00834 0.01283 - 0.29414 0.10006 0.05903 0.01633 0.00164 0.00151 0.00813 0.01243 - 0.28890 0.09798 0.05700 0.01597 0.00162 0.00150 0.00793 0.01207 - 0.28369 0.09593 0.05503 0.01561 0.00160 0.00150 0.00773 0.01171 - 0.59691 0.23909 0.38497 0.03862 0.00000 0.00000 0.02088 0.04414 - 0.58781 0.23385 0.35816 0.03788 0.00000 0.00000 0.02039 0.04240 - 0.57372 0.22590 0.32238 0.03669 0.00000 0.00000 0.01959 0.03980 - 0.56306 0.22002 0.29791 0.03578 0.00022 0.00000 0.01899 0.03792 - 0.55156 0.21380 0.27445 0.03479 0.00044 0.00000 0.01833 0.03598 - 0.54146 0.20844 0.25598 0.03392 0.00060 0.00000 0.01776 0.03435 - 0.53166 0.20332 0.23966 0.03308 0.00073 0.00000 0.01721 0.03283 - 0.52117 0.19794 0.22371 0.03218 0.00085 0.00000 0.01664 0.03128 - 0.51201 0.19330 0.21090 0.03140 0.00093 0.00000 0.01614 0.02999 - 0.50316 0.18889 0.19938 0.03066 0.00101 0.00000 0.01567 0.02878 - 0.49615 0.18543 0.19081 0.03007 0.00106 0.00000 0.01531 0.02786 - 0.48126 0.17821 0.17402 0.02885 0.00114 0.00000 0.01456 0.02601 - 0.46856 0.17218 0.16042 0.02782 0.00120 0.00017 0.01394 0.02452 - 0.45459 0.16566 0.14672 0.02671 0.00125 0.00034 0.01328 0.02298 - 0.44036 0.15914 0.13403 0.02560 0.00129 0.00049 0.01263 0.02151 - 0.42776 0.15346 0.12374 0.02463 0.00131 0.00061 0.01208 0.02027 - 0.41534 0.14796 0.11438 0.02370 0.00133 0.00071 0.01155 0.01912 - 0.40526 0.14355 0.10731 0.02295 0.00133 0.00078 0.01114 0.01823 - 0.39332 0.13839 0.09951 0.02207 0.00134 0.00085 0.01065 0.01722 - 0.38302 0.13399 0.09322 0.02133 0.00133 0.00091 0.01025 0.01638 - 0.37379 0.13009 0.08792 0.02067 0.00133 0.00095 0.00989 0.01566 - 0.36236 0.12531 0.08177 0.01986 0.00132 0.00100 0.00946 0.01480 - 0.35190 0.12098 0.07650 0.01913 0.00131 0.00104 0.00907 0.01404 - 0.34235 0.11707 0.07197 0.01848 0.00129 0.00106 0.00873 0.01337 - 0.33304 0.11329 0.06780 0.01784 0.00127 0.00109 0.00840 0.01274 - 0.32415 0.10972 0.06403 0.01724 0.00126 0.00110 0.00808 0.01216 - 0.31594 0.10644 0.06072 0.01669 0.00124 0.00112 0.00780 0.01163 - 0.30838 0.10345 0.05780 0.01619 0.00122 0.00113 0.00755 0.01116 - 0.30095 0.10053 0.05506 0.01571 0.00120 0.00113 0.00730 0.01071 - 0.29381 0.09774 0.05252 0.01524 0.00119 0.00114 0.00706 0.01029 - 0.28717 0.09516 0.05026 0.01481 0.00117 0.00114 0.00685 0.00990 - 0.28101 0.09278 0.04823 0.01442 0.00115 0.00114 0.00665 0.00955 - 0.27492 0.09045 0.04629 0.01403 0.00113 0.00114 0.00645 0.00921 - 0.26904 0.08820 0.04448 0.01366 0.00111 0.00113 0.00627 0.00889 - 0.26354 0.08611 0.04284 0.01332 0.00110 0.00113 0.00610 0.00860 - 0.25841 0.08418 0.04135 0.01300 0.00108 0.00112 0.00594 0.00833 - 0.25332 0.08226 0.03991 0.01268 0.00106 0.00112 0.00579 0.00807 - 0.58420 0.22645 0.28636 0.03561 0.00000 0.00000 0.01771 0.03471 - 0.57360 0.22077 0.26561 0.03476 0.00000 0.00000 0.01720 0.03317 - 0.55733 0.21221 0.23814 0.03343 0.00000 0.00000 0.01640 0.03090 - 0.54514 0.20592 0.21952 0.03244 0.00015 0.00000 0.01581 0.02927 - 0.53212 0.19931 0.20178 0.03138 0.00030 0.00000 0.01518 0.02760 - 0.52077 0.19365 0.18788 0.03045 0.00041 0.00000 0.01464 0.02621 - 0.50984 0.18827 0.17566 0.02957 0.00050 0.00000 0.01412 0.02493 - 0.49822 0.18264 0.16376 0.02865 0.00058 0.00000 0.01359 0.02363 - 0.48814 0.17783 0.15423 0.02785 0.00064 0.00000 0.01314 0.02255 - 0.47846 0.17327 0.14569 0.02709 0.00069 0.00000 0.01271 0.02155 - 0.47084 0.16972 0.13936 0.02650 0.00072 0.00000 0.01238 0.02079 - 0.45477 0.16234 0.12697 0.02528 0.00078 0.00000 0.01170 0.01927 - 0.44118 0.15622 0.11698 0.02426 0.00082 0.00013 0.01115 0.01806 - 0.42634 0.14966 0.10694 0.02317 0.00085 0.00026 0.01057 0.01682 - 0.41137 0.14315 0.09767 0.02209 0.00087 0.00038 0.01001 0.01564 - 0.39821 0.13751 0.09016 0.02116 0.00089 0.00046 0.00953 0.01467 - 0.38532 0.13208 0.08334 0.02027 0.00090 0.00054 0.00908 0.01377 - 0.37493 0.12776 0.07820 0.01956 0.00090 0.00060 0.00872 0.01307 - 0.36269 0.12273 0.07252 0.01873 0.00090 0.00066 0.00831 0.01229 - 0.35218 0.11846 0.06795 0.01804 0.00090 0.00070 0.00797 0.01164 - 0.34281 0.11469 0.06410 0.01742 0.00090 0.00073 0.00767 0.01109 - 0.33127 0.11010 0.05962 0.01668 0.00089 0.00077 0.00731 0.01043 - 0.32077 0.10597 0.05579 0.01601 0.00088 0.00080 0.00699 0.00986 - 0.31122 0.10224 0.05249 0.01541 0.00087 0.00082 0.00670 0.00936 - 0.30194 0.09866 0.04946 0.01483 0.00086 0.00084 0.00643 0.00888 - 0.29313 0.09529 0.04671 0.01429 0.00085 0.00085 0.00617 0.00845 - 0.28502 0.09220 0.04429 0.01379 0.00083 0.00086 0.00594 0.00806 - 0.27758 0.08940 0.04216 0.01334 0.00082 0.00087 0.00573 0.00771 - 0.27029 0.08667 0.04016 0.01291 0.00081 0.00087 0.00553 0.00738 - 0.26331 0.08407 0.03831 0.01249 0.00080 0.00087 0.00534 0.00707 - 0.25683 0.08167 0.03665 0.01211 0.00078 0.00087 0.00517 0.00679 - 0.25085 0.07947 0.03517 0.01176 0.00077 0.00087 0.00501 0.00653 - 0.24495 0.07732 0.03375 0.01142 0.00076 0.00087 0.00485 0.00629 - 0.23926 0.07525 0.03242 0.01109 0.00075 0.00087 0.00471 0.00605 - 0.23396 0.07333 0.03121 0.01079 0.00073 0.00087 0.00457 0.00584 - 0.22903 0.07155 0.03012 0.01051 0.00072 0.00086 0.00444 0.00565 - 0.22415 0.06980 0.02906 0.01024 0.00071 0.00086 0.00432 0.00546 - 0.56651 0.21215 0.20976 0.03262 0.00000 0.00000 0.01491 0.02666 - 0.55458 0.20615 0.19417 0.03169 0.00000 0.00000 0.01441 0.02535 - 0.53644 0.19717 0.17367 0.03027 0.00000 0.00000 0.01364 0.02344 - 0.52295 0.19062 0.15989 0.02921 0.00010 0.00000 0.01308 0.02208 - 0.50863 0.18377 0.14681 0.02810 0.00020 0.00000 0.01249 0.02070 - 0.49625 0.17794 0.13661 0.02716 0.00028 0.00000 0.01200 0.01956 - 0.48439 0.17243 0.12767 0.02626 0.00034 0.00000 0.01153 0.01851 - 0.47187 0.16669 0.11898 0.02532 0.00039 0.00000 0.01104 0.01745 - 0.46108 0.16181 0.11205 0.02452 0.00043 0.00000 0.01063 0.01658 - 0.45076 0.15720 0.10585 0.02377 0.00046 0.00000 0.01025 0.01578 - 0.44268 0.15363 0.10125 0.02318 0.00049 0.00000 0.00996 0.01517 - 0.42574 0.14626 0.09228 0.02198 0.00053 0.00000 0.00937 0.01396 - 0.41153 0.14018 0.08505 0.02099 0.00055 0.00010 0.00888 0.01301 - 0.39613 0.13371 0.07779 0.01994 0.00057 0.00020 0.00838 0.01204 - 0.38071 0.12734 0.07109 0.01891 0.00059 0.00030 0.00790 0.01113 - 0.36724 0.12186 0.06567 0.01803 0.00060 0.00037 0.00749 0.01039 - 0.35414 0.11661 0.06075 0.01719 0.00061 0.00043 0.00710 0.00970 - 0.34363 0.11246 0.05703 0.01653 0.00061 0.00047 0.00680 0.00917 - 0.33132 0.10764 0.05292 0.01576 0.00061 0.00052 0.00646 0.00858 - 0.32082 0.10358 0.04962 0.01512 0.00061 0.00055 0.00617 0.00810 - 0.31148 0.10001 0.04683 0.01456 0.00060 0.00058 0.00592 0.00769 - 0.30004 0.09568 0.04358 0.01388 0.00060 0.00061 0.00562 0.00720 - 0.28968 0.09180 0.04080 0.01327 0.00059 0.00063 0.00536 0.00678 - 0.28030 0.08832 0.03840 0.01273 0.00059 0.00065 0.00513 0.00641 - 0.27122 0.08498 0.03619 0.01221 0.00058 0.00066 0.00490 0.00607 - 0.26264 0.08185 0.03418 0.01173 0.00057 0.00067 0.00470 0.00575 - 0.25476 0.07900 0.03242 0.01129 0.00056 0.00068 0.00451 0.00547 - 0.24756 0.07641 0.03086 0.01089 0.00055 0.00069 0.00434 0.00522 - 0.24053 0.07391 0.02939 0.01050 0.00054 0.00069 0.00418 0.00498 - 0.23382 0.07153 0.02803 0.01014 0.00054 0.00069 0.00403 0.00476 - 0.22761 0.06934 0.02681 0.00981 0.00053 0.00069 0.00389 0.00456 - 0.22189 0.06734 0.02572 0.00950 0.00052 0.00069 0.00376 0.00438 - 0.21626 0.06538 0.02468 0.00921 0.00051 0.00069 0.00364 0.00421 - 0.21085 0.06351 0.02370 0.00892 0.00050 0.00069 0.00352 0.00404 - 0.20582 0.06177 0.02281 0.00866 0.00049 0.00068 0.00341 0.00389 - 0.20115 0.06017 0.02200 0.00842 0.00049 0.00068 0.00331 0.00376 - 0.19654 0.05860 0.02122 0.00818 0.00048 0.00068 0.00322 0.00362 - 0.54452 0.19663 0.15124 0.02959 0.00000 0.00000 0.01245 0.01998 - 0.53148 0.19045 0.13989 0.02860 0.00000 0.00000 0.01198 0.01891 - 0.51177 0.18125 0.12505 0.02713 0.00000 0.00000 0.01127 0.01736 - 0.49722 0.17457 0.11512 0.02605 0.00007 0.00000 0.01075 0.01626 - 0.48188 0.16764 0.10573 0.02492 0.00014 0.00000 0.01022 0.01516 - 0.46869 0.16175 0.09843 0.02397 0.00019 0.00000 0.00977 0.01425 - 0.45612 0.15622 0.09204 0.02308 0.00023 0.00000 0.00935 0.01342 - 0.44293 0.15050 0.08585 0.02215 0.00026 0.00000 0.00892 0.01259 - 0.43162 0.14565 0.08091 0.02136 0.00029 0.00000 0.00856 0.01190 - 0.42086 0.14109 0.07649 0.02063 0.00031 0.00000 0.00822 0.01128 - 0.41246 0.13757 0.07322 0.02006 0.00033 0.00000 0.00797 0.01081 - 0.39497 0.13034 0.06683 0.01891 0.00035 0.00000 0.00745 0.00988 - 0.38040 0.12443 0.06167 0.01796 0.00037 0.00008 0.00704 0.00916 - 0.36472 0.11817 0.05649 0.01697 0.00039 0.00017 0.00661 0.00842 - 0.34913 0.11204 0.05171 0.01601 0.00040 0.00024 0.00619 0.00774 - 0.33560 0.10682 0.04782 0.01519 0.00040 0.00030 0.00585 0.00718 - 0.32252 0.10183 0.04429 0.01442 0.00041 0.00035 0.00553 0.00668 - 0.31208 0.09791 0.04162 0.01381 0.00041 0.00039 0.00527 0.00629 - 0.29992 0.09338 0.03866 0.01311 0.00041 0.00042 0.00499 0.00586 - 0.28958 0.08959 0.03628 0.01253 0.00041 0.00045 0.00475 0.00551 - 0.28044 0.08626 0.03426 0.01203 0.00041 0.00047 0.00455 0.00521 - 0.26928 0.08224 0.03191 0.01142 0.00040 0.00050 0.00431 0.00486 - 0.25922 0.07866 0.02988 0.01088 0.00040 0.00051 0.00409 0.00456 - 0.25015 0.07546 0.02814 0.01040 0.00040 0.00053 0.00390 0.00430 - 0.24141 0.07240 0.02652 0.00994 0.00039 0.00054 0.00372 0.00406 - 0.23318 0.06954 0.02506 0.00951 0.00039 0.00055 0.00355 0.00383 - 0.22565 0.06695 0.02376 0.00913 0.00038 0.00055 0.00341 0.00364 - 0.21878 0.06461 0.02262 0.00878 0.00037 0.00056 0.00327 0.00346 - 0.21211 0.06234 0.02154 0.00845 0.00037 0.00056 0.00314 0.00329 - 0.20574 0.06020 0.02054 0.00814 0.00036 0.00056 0.00302 0.00314 - 0.19988 0.05824 0.01964 0.00785 0.00036 0.00056 0.00291 0.00300 - 0.19449 0.05644 0.01884 0.00759 0.00035 0.00056 0.00281 0.00288 - 0.18920 0.05469 0.01807 0.00733 0.00035 0.00056 0.00271 0.00276 - 0.18413 0.05302 0.01734 0.00709 0.00034 0.00056 0.00262 0.00264 - 0.17942 0.05148 0.01668 0.00687 0.00033 0.00055 0.00254 0.00254 - 0.17507 0.05006 0.01609 0.00666 0.00033 0.00055 0.00246 0.00245 - 0.17077 0.04867 0.01551 0.00646 0.00032 0.00055 0.00238 0.00236 - 0.51892 0.18032 0.10730 0.02649 0.00000 0.00000 0.01031 0.01459 - 0.50499 0.17409 0.09931 0.02549 0.00000 0.00000 0.00987 0.01374 - 0.48405 0.16485 0.08891 0.02401 0.00000 0.00000 0.00923 0.01253 - 0.46869 0.15818 0.08197 0.02293 0.00005 0.00000 0.00876 0.01167 - 0.45259 0.15129 0.07542 0.02183 0.00009 0.00000 0.00829 0.01082 - 0.43881 0.14547 0.07033 0.02089 0.00013 0.00000 0.00789 0.01012 - 0.42576 0.14003 0.06588 0.02002 0.00015 0.00000 0.00752 0.00948 - 0.41212 0.13442 0.06157 0.01913 0.00018 0.00000 0.00715 0.00885 - 0.40049 0.12969 0.05812 0.01838 0.00020 0.00000 0.00684 0.00833 - 0.38947 0.12526 0.05504 0.01768 0.00021 0.00000 0.00655 0.00786 - 0.38091 0.12185 0.05275 0.01714 0.00022 0.00000 0.00633 0.00751 - 0.36316 0.11489 0.04827 0.01605 0.00024 0.00000 0.00589 0.00682 - 0.34848 0.10923 0.04464 0.01517 0.00025 0.00007 0.00553 0.00628 - 0.33279 0.10328 0.04099 0.01425 0.00026 0.00014 0.00517 0.00575 - 0.31728 0.09750 0.03759 0.01337 0.00027 0.00020 0.00483 0.00525 - 0.30391 0.09259 0.03483 0.01263 0.00027 0.00025 0.00454 0.00485 - 0.29105 0.08794 0.03231 0.01193 0.00028 0.00029 0.00427 0.00448 - 0.28084 0.08429 0.03040 0.01138 0.00028 0.00032 0.00406 0.00421 - 0.26900 0.08011 0.02828 0.01076 0.00028 0.00035 0.00383 0.00390 - 0.25899 0.07662 0.02656 0.01024 0.00028 0.00038 0.00364 0.00366 - 0.25017 0.07357 0.02510 0.00980 0.00028 0.00040 0.00347 0.00345 - 0.23946 0.06990 0.02339 0.00926 0.00027 0.00042 0.00328 0.00321 - 0.22983 0.06665 0.02192 0.00879 0.00027 0.00043 0.00310 0.00300 - 0.22119 0.06375 0.02064 0.00837 0.00027 0.00044 0.00295 0.00282 - 0.21290 0.06100 0.01946 0.00798 0.00026 0.00045 0.00281 0.00265 - 0.20511 0.05843 0.01839 0.00761 0.00026 0.00045 0.00267 0.00250 - 0.19802 0.05611 0.01743 0.00728 0.00026 0.00046 0.00255 0.00236 - 0.19157 0.05402 0.01659 0.00699 0.00025 0.00046 0.00245 0.00224 - 0.18531 0.05200 0.01580 0.00670 0.00025 0.00046 0.00235 0.00213 - 0.17937 0.05010 0.01506 0.00644 0.00025 0.00046 0.00225 0.00203 - 0.17391 0.04836 0.01439 0.00619 0.00024 0.00046 0.00216 0.00193 - 0.16890 0.04678 0.01380 0.00597 0.00024 0.00046 0.00209 0.00185 - 0.16400 0.04524 0.01322 0.00576 0.00023 0.00046 0.00201 0.00177 - 0.15931 0.04377 0.01269 0.00556 0.00023 0.00046 0.00194 0.00169 - 0.15497 0.04242 0.01220 0.00537 0.00023 0.00046 0.00187 0.00163 - 0.15096 0.04118 0.01175 0.00520 0.00022 0.00045 0.00181 0.00156 - 0.14702 0.03996 0.01132 0.00503 0.00022 0.00045 0.00175 0.00150 - 0.49034 0.16360 0.07487 0.02337 0.00000 0.00000 0.00846 0.01035 - 0.47575 0.15743 0.06946 0.02238 0.00000 0.00000 0.00806 0.00971 - 0.45393 0.14833 0.06245 0.02093 0.00000 0.00000 0.00749 0.00879 - 0.43802 0.14179 0.05776 0.01990 0.00003 0.00000 0.00708 0.00815 - 0.42141 0.13506 0.05333 0.01883 0.00006 0.00000 0.00667 0.00751 - 0.40729 0.12941 0.04989 0.01794 0.00008 0.00000 0.00632 0.00699 - 0.39396 0.12415 0.04687 0.01712 0.00010 0.00000 0.00601 0.00652 - 0.38010 0.11874 0.04394 0.01628 0.00012 0.00000 0.00568 0.00605 - 0.36833 0.11421 0.04159 0.01557 0.00013 0.00000 0.00542 0.00568 - 0.35724 0.10998 0.03947 0.01492 0.00014 0.00000 0.00517 0.00533 - 0.34864 0.10674 0.03790 0.01443 0.00015 0.00000 0.00498 0.00508 - 0.33093 0.10015 0.03481 0.01342 0.00016 0.00000 0.00461 0.00458 - 0.31636 0.09482 0.03229 0.01262 0.00017 0.00006 0.00432 0.00420 - 0.30089 0.08926 0.02973 0.01179 0.00018 0.00012 0.00401 0.00382 - 0.28570 0.08389 0.02734 0.01100 0.00018 0.00018 0.00373 0.00347 - 0.27268 0.07935 0.02539 0.01033 0.00018 0.00022 0.00349 0.00319 - 0.26023 0.07508 0.02359 0.00971 0.00019 0.00025 0.00327 0.00293 - 0.25039 0.07174 0.02222 0.00923 0.00019 0.00028 0.00311 0.00274 - 0.23903 0.06794 0.02070 0.00869 0.00019 0.00030 0.00292 0.00254 - 0.22947 0.06477 0.01945 0.00824 0.00019 0.00032 0.00276 0.00237 - 0.22109 0.06202 0.01840 0.00786 0.00019 0.00034 0.00263 0.00223 - 0.21094 0.05873 0.01715 0.00740 0.00019 0.00035 0.00247 0.00206 - 0.20186 0.05582 0.01608 0.00699 0.00018 0.00037 0.00233 0.00192 - 0.19374 0.05324 0.01515 0.00664 0.00018 0.00037 0.00221 0.00180 - 0.18599 0.05079 0.01428 0.00630 0.00018 0.00038 0.00210 0.00169 - 0.17872 0.04852 0.01349 0.00599 0.00018 0.00039 0.00199 0.00159 - 0.17212 0.04648 0.01278 0.00572 0.00018 0.00039 0.00190 0.00150 - 0.16615 0.04464 0.01216 0.00547 0.00017 0.00039 0.00182 0.00142 - 0.16037 0.04287 0.01157 0.00523 0.00017 0.00039 0.00174 0.00135 - 0.15489 0.04121 0.01102 0.00501 0.00017 0.00039 0.00166 0.00128 - 0.14987 0.03970 0.01053 0.00481 0.00016 0.00039 0.00160 0.00122 - 0.14528 0.03832 0.01009 0.00463 0.00016 0.00039 0.00154 0.00116 - 0.14080 0.03698 0.00966 0.00445 0.00016 0.00039 0.00148 0.00111 - 0.13652 0.03572 0.00926 0.00428 0.00016 0.00038 0.00142 0.00106 - 0.13257 0.03455 0.00890 0.00413 0.00015 0.00038 0.00137 0.00102 - 0.12893 0.03348 0.00857 0.00399 0.00015 0.00038 0.00132 0.00098 - 0.12535 0.03244 0.00825 0.00386 0.00015 0.00037 0.00128 0.00094 - 0.45943 0.14682 0.05133 0.02027 0.00000 0.00000 0.00686 0.00712 - 0.44440 0.14082 0.04785 0.01933 0.00000 0.00000 0.00652 0.00665 - 0.42205 0.13201 0.04333 0.01796 0.00000 0.00000 0.00602 0.00598 - 0.40583 0.12571 0.04029 0.01698 0.00002 0.00000 0.00567 0.00552 - 0.38899 0.11926 0.03741 0.01598 0.00004 0.00000 0.00531 0.00506 - 0.37473 0.11386 0.03515 0.01516 0.00006 0.00000 0.00502 0.00468 - 0.36134 0.10885 0.03316 0.01440 0.00007 0.00000 0.00475 0.00435 - 0.34747 0.10373 0.03122 0.01362 0.00008 0.00000 0.00448 0.00402 - 0.33575 0.09945 0.02965 0.01298 0.00009 0.00000 0.00425 0.00375 - 0.32474 0.09548 0.02823 0.01239 0.00009 0.00000 0.00405 0.00351 - 0.31625 0.09245 0.02717 0.01194 0.00010 0.00000 0.00389 0.00334 - 0.29882 0.08631 0.02507 0.01104 0.00011 0.00000 0.00358 0.00299 - 0.28458 0.08138 0.02333 0.01032 0.00011 0.00005 0.00334 0.00273 - 0.26955 0.07625 0.02155 0.00959 0.00012 0.00011 0.00309 0.00246 - 0.25488 0.07134 0.01988 0.00889 0.00012 0.00015 0.00285 0.00223 - 0.24237 0.06721 0.01850 0.00831 0.00012 0.00019 0.00266 0.00204 - 0.23048 0.06335 0.01722 0.00778 0.00013 0.00022 0.00249 0.00187 - 0.22113 0.06035 0.01624 0.00736 0.00013 0.00024 0.00235 0.00174 - 0.21039 0.05694 0.01514 0.00690 0.00013 0.00026 0.00220 0.00161 - 0.20138 0.05411 0.01424 0.00652 0.00013 0.00028 0.00208 0.00150 - 0.19351 0.05167 0.01347 0.00619 0.00013 0.00029 0.00197 0.00140 - 0.18403 0.04876 0.01257 0.00581 0.00013 0.00031 0.00185 0.00130 - 0.17558 0.04619 0.01178 0.00547 0.00013 0.00032 0.00174 0.00120 - 0.16806 0.04393 0.01110 0.00517 0.00012 0.00032 0.00164 0.00113 - 0.16089 0.04179 0.01046 0.00489 0.00012 0.00033 0.00155 0.00105 - 0.15421 0.03981 0.00987 0.00464 0.00012 0.00033 0.00147 0.00099 - 0.14816 0.03804 0.00935 0.00441 0.00012 0.00033 0.00140 0.00093 - 0.14269 0.03644 0.00889 0.00421 0.00012 0.00033 0.00134 0.00088 - 0.13742 0.03492 0.00845 0.00401 0.00012 0.00033 0.00128 0.00084 - 0.13244 0.03349 0.00805 0.00383 0.00011 0.00033 0.00122 0.00079 - 0.12788 0.03219 0.00768 0.00367 0.00011 0.00033 0.00117 0.00075 - 0.12373 0.03101 0.00735 0.00352 0.00011 0.00033 0.00112 0.00072 - 0.11969 0.02987 0.00703 0.00338 0.00011 0.00033 0.00107 0.00069 - 0.11583 0.02879 0.00674 0.00325 0.00011 0.00032 0.00103 0.00065 - 0.11228 0.02780 0.00647 0.00313 0.00010 0.00032 0.00099 0.00063 - 0.10902 0.02689 0.00622 0.00301 0.00010 0.00032 0.00096 0.00060 - 0.10582 0.02601 0.00598 0.00291 0.00010 0.00032 0.00092 0.00058 - 0.42675 0.13028 0.03459 0.01726 0.00000 0.00000 0.00551 0.00474 - 0.41152 0.12455 0.03249 0.01639 0.00000 0.00000 0.00522 0.00441 - 0.38897 0.11616 0.02975 0.01512 0.00000 0.00000 0.00479 0.00394 - 0.37269 0.11018 0.02787 0.01423 0.00001 0.00000 0.00449 0.00362 - 0.35587 0.10409 0.02608 0.01332 0.00003 0.00000 0.00419 0.00330 - 0.34169 0.09902 0.02466 0.01257 0.00004 0.00000 0.00394 0.00304 - 0.32842 0.09433 0.02339 0.01189 0.00005 0.00000 0.00372 0.00282 - 0.31475 0.08956 0.02213 0.01119 0.00005 0.00000 0.00349 0.00259 - 0.30323 0.08559 0.02111 0.01062 0.00006 0.00000 0.00330 0.00241 - 0.29247 0.08192 0.02018 0.01010 0.00006 0.00000 0.00313 0.00225 - 0.28419 0.07912 0.01947 0.00970 0.00007 0.00000 0.00300 0.00213 - 0.26728 0.07349 0.01806 0.00891 0.00007 0.00000 0.00275 0.00190 - 0.25355 0.06899 0.01686 0.00829 0.00008 0.00005 0.00255 0.00172 - 0.23914 0.06434 0.01563 0.00765 0.00008 0.00010 0.00235 0.00155 - 0.22516 0.05992 0.01446 0.00706 0.00008 0.00014 0.00216 0.00139 - 0.21332 0.05623 0.01348 0.00656 0.00008 0.00017 0.00201 0.00127 - 0.20212 0.05278 0.01257 0.00611 0.00009 0.00020 0.00187 0.00116 - 0.19335 0.05012 0.01187 0.00576 0.00009 0.00021 0.00176 0.00108 - 0.18332 0.04712 0.01107 0.00538 0.00009 0.00023 0.00164 0.00099 - 0.17495 0.04464 0.01042 0.00506 0.00009 0.00025 0.00154 0.00092 - 0.16767 0.04250 0.00986 0.00479 0.00009 0.00026 0.00146 0.00086 - 0.15892 0.03996 0.00919 0.00447 0.00009 0.00027 0.00137 0.00080 - 0.15117 0.03774 0.00861 0.00419 0.00009 0.00028 0.00128 0.00074 - 0.14428 0.03578 0.00811 0.00395 0.00008 0.00028 0.00121 0.00069 - 0.13775 0.03394 0.00764 0.00373 0.00008 0.00028 0.00114 0.00065 - 0.13168 0.03224 0.00720 0.00352 0.00008 0.00029 0.00108 0.00061 - 0.12620 0.03073 0.00682 0.00334 0.00008 0.00029 0.00102 0.00057 - 0.12127 0.02937 0.00648 0.00318 0.00008 0.00029 0.00097 0.00054 - 0.11652 0.02807 0.00615 0.00302 0.00008 0.00029 0.00093 0.00051 - 0.11205 0.02686 0.00585 0.00288 0.00008 0.00029 0.00088 0.00048 - 0.10797 0.02576 0.00558 0.00275 0.00008 0.00028 0.00084 0.00046 - 0.10427 0.02477 0.00533 0.00263 0.00008 0.00028 0.00081 0.00044 - 0.10066 0.02381 0.00510 0.00252 0.00007 0.00028 0.00077 0.00042 - 0.09724 0.02290 0.00488 0.00242 0.00007 0.00028 0.00074 0.00040 - 0.09409 0.02207 0.00468 0.00232 0.00007 0.00027 0.00071 0.00038 - 0.09120 0.02131 0.00449 0.00223 0.00007 0.00027 0.00069 0.00037 - 0.08837 0.02058 0.00432 0.00215 0.00007 0.00027 0.00066 0.00035 - 0.39287 0.11426 0.02289 0.01442 0.00000 0.00000 0.00437 0.00305 - 0.37768 0.10886 0.02175 0.01363 0.00000 0.00000 0.00412 0.00282 - 0.35526 0.10100 0.02022 0.01249 0.00000 0.00000 0.00377 0.00251 - 0.33916 0.09543 0.01914 0.01169 0.00001 0.00000 0.00352 0.00229 - 0.32258 0.08977 0.01808 0.01089 0.00002 0.00000 0.00327 0.00208 - 0.30867 0.08508 0.01723 0.01023 0.00002 0.00000 0.00306 0.00191 - 0.29571 0.08076 0.01645 0.00963 0.00003 0.00000 0.00287 0.00176 - 0.28241 0.07638 0.01567 0.00902 0.00004 0.00000 0.00269 0.00162 - 0.27126 0.07275 0.01501 0.00852 0.00004 0.00000 0.00253 0.00150 - 0.26087 0.06941 0.01441 0.00807 0.00004 0.00000 0.00240 0.00139 - 0.25291 0.06687 0.01395 0.00773 0.00004 0.00000 0.00229 0.00132 - 0.23673 0.06178 0.01300 0.00705 0.00005 0.00000 0.00209 0.00117 - 0.22367 0.05775 0.01219 0.00652 0.00005 0.00004 0.00193 0.00106 - 0.21004 0.05360 0.01133 0.00599 0.00005 0.00009 0.00177 0.00095 - 0.19690 0.04968 0.01051 0.00549 0.00006 0.00012 0.00162 0.00085 - 0.18583 0.04642 0.00982 0.00508 0.00006 0.00015 0.00150 0.00077 - 0.17542 0.04341 0.00916 0.00470 0.00006 0.00018 0.00139 0.00071 - 0.16730 0.04109 0.00865 0.00442 0.00006 0.00019 0.00130 0.00066 - 0.15806 0.03847 0.00808 0.00410 0.00006 0.00021 0.00121 0.00060 - 0.15039 0.03633 0.00760 0.00385 0.00006 0.00022 0.00113 0.00056 - 0.14373 0.03449 0.00719 0.00363 0.00006 0.00023 0.00107 0.00052 - 0.13577 0.03232 0.00670 0.00337 0.00006 0.00024 0.00100 0.00048 - 0.12875 0.03041 0.00627 0.00315 0.00006 0.00024 0.00093 0.00045 - 0.12253 0.02875 0.00590 0.00296 0.00006 0.00025 0.00088 0.00042 - 0.11666 0.02719 0.00555 0.00278 0.00006 0.00025 0.00082 0.00039 - 0.11122 0.02576 0.00523 0.00262 0.00006 0.00025 0.00078 0.00037 - 0.10632 0.02448 0.00494 0.00248 0.00006 0.00025 0.00074 0.00034 - 0.10193 0.02334 0.00469 0.00235 0.00006 0.00025 0.00070 0.00033 - 0.09771 0.02226 0.00445 0.00223 0.00005 0.00025 0.00066 0.00031 - 0.09375 0.02125 0.00422 0.00212 0.00005 0.00025 0.00063 0.00029 - 0.09015 0.02033 0.00402 0.00202 0.00005 0.00024 0.00060 0.00028 - 0.08688 0.01951 0.00384 0.00193 0.00005 0.00024 0.00058 0.00027 - 0.08372 0.01871 0.00367 0.00184 0.00005 0.00024 0.00055 0.00025 - 0.08071 0.01796 0.00350 0.00176 0.00005 0.00024 0.00053 0.00024 - 0.07796 0.01728 0.00335 0.00169 0.00005 0.00023 0.00051 0.00023 - 0.07543 0.01666 0.00322 0.00162 0.00005 0.00023 0.00049 0.00022 - 0.07297 0.01605 0.00309 0.00156 0.00005 0.00023 0.00047 0.00021 - 0.35835 0.09897 0.01487 0.01179 0.00000 0.00000 0.00342 0.00189 - 0.34339 0.09398 0.01435 0.01110 0.00000 0.00000 0.00322 0.00174 - 0.32142 0.08673 0.01362 0.01010 0.00000 0.00000 0.00292 0.00154 - 0.30570 0.08162 0.01307 0.00941 0.00001 0.00000 0.00272 0.00141 - 0.28960 0.07645 0.01249 0.00872 0.00001 0.00000 0.00251 0.00127 - 0.27614 0.07218 0.01201 0.00815 0.00002 0.00000 0.00234 0.00117 - 0.26365 0.06826 0.01155 0.00763 0.00002 0.00000 0.00219 0.00107 - 0.25089 0.06430 0.01108 0.00712 0.00002 0.00000 0.00204 0.00098 - 0.24024 0.06104 0.01067 0.00670 0.00003 0.00000 0.00192 0.00091 - 0.23034 0.05804 0.01028 0.00631 0.00003 0.00000 0.00181 0.00084 - 0.22279 0.05578 0.00998 0.00603 0.00003 0.00000 0.00173 0.00079 - 0.20751 0.05126 0.00935 0.00546 0.00003 0.00000 0.00156 0.00070 - 0.19525 0.04769 0.00880 0.00502 0.00004 0.00004 0.00144 0.00063 - 0.18252 0.04405 0.00821 0.00458 0.00004 0.00008 0.00131 0.00057 - 0.17033 0.04062 0.00762 0.00418 0.00004 0.00011 0.00119 0.00051 - 0.16013 0.03780 0.00713 0.00384 0.00004 0.00014 0.00110 0.00046 - 0.15057 0.03520 0.00666 0.00354 0.00004 0.00016 0.00101 0.00042 - 0.14316 0.03320 0.00629 0.00332 0.00004 0.00017 0.00095 0.00039 - 0.13476 0.03097 0.00587 0.00306 0.00004 0.00018 0.00088 0.00036 - 0.12782 0.02915 0.00552 0.00286 0.00004 0.00019 0.00082 0.00034 - 0.12182 0.02759 0.00521 0.00269 0.00004 0.00020 0.00077 0.00031 - 0.11468 0.02575 0.00485 0.00249 0.00004 0.00021 0.00072 0.00029 - 0.10839 0.02416 0.00454 0.00232 0.00004 0.00021 0.00067 0.00027 - 0.10286 0.02277 0.00426 0.00217 0.00004 0.00021 0.00063 0.00025 - 0.09765 0.02147 0.00400 0.00203 0.00004 0.00022 0.00059 0.00024 - 0.09284 0.02028 0.00377 0.00191 0.00004 0.00022 0.00055 0.00022 - 0.08853 0.01922 0.00355 0.00180 0.00004 0.00022 0.00052 0.00021 - 0.08466 0.01828 0.00337 0.00170 0.00004 0.00022 0.00049 0.00020 - 0.08097 0.01739 0.00319 0.00161 0.00004 0.00021 0.00047 0.00019 - 0.07751 0.01656 0.00302 0.00152 0.00004 0.00021 0.00045 0.00018 - 0.07437 0.01581 0.00287 0.00145 0.00004 0.00021 0.00042 0.00017 - 0.07153 0.01513 0.00274 0.00138 0.00004 0.00021 0.00040 0.00016 - 0.06879 0.01449 0.00261 0.00131 0.00004 0.00021 0.00039 0.00016 - 0.06619 0.01388 0.00249 0.00125 0.00004 0.00020 0.00037 0.00015 - 0.06381 0.01332 0.00238 0.00120 0.00003 0.00020 0.00035 0.00014 - 0.06164 0.01282 0.00228 0.00115 0.00003 0.00020 0.00034 0.00014 - 0.05952 0.01233 0.00219 0.00110 0.00003 0.00019 0.00033 0.00013 - 0.32365 0.08459 0.00950 0.00942 0.00000 0.00000 0.00264 0.00113 - 0.30912 0.08005 0.00937 0.00883 0.00000 0.00000 0.00247 0.00104 - 0.28788 0.07348 0.00913 0.00799 0.00000 0.00000 0.00223 0.00092 - 0.27275 0.06886 0.00890 0.00740 0.00000 0.00000 0.00207 0.00084 - 0.25732 0.06421 0.00862 0.00682 0.00001 0.00000 0.00190 0.00076 - 0.24447 0.06039 0.00837 0.00634 0.00001 0.00000 0.00177 0.00069 - 0.23260 0.05689 0.00812 0.00591 0.00001 0.00000 0.00165 0.00064 - 0.22052 0.05338 0.00784 0.00549 0.00002 0.00000 0.00153 0.00058 - 0.21047 0.05049 0.00759 0.00514 0.00002 0.00000 0.00143 0.00054 - 0.20118 0.04785 0.00734 0.00483 0.00002 0.00000 0.00135 0.00050 - 0.19410 0.04586 0.00715 0.00459 0.00002 0.00000 0.00128 0.00047 - 0.17986 0.04191 0.00673 0.00413 0.00002 0.00000 0.00115 0.00042 - 0.16851 0.03881 0.00635 0.00378 0.00002 0.00004 0.00105 0.00038 - 0.15679 0.03566 0.00593 0.00343 0.00003 0.00007 0.00096 0.00034 - 0.14564 0.03272 0.00552 0.00310 0.00003 0.00010 0.00087 0.00031 - 0.13635 0.03031 0.00516 0.00284 0.00003 0.00012 0.00080 0.00028 - 0.12771 0.02810 0.00482 0.00261 0.00003 0.00014 0.00073 0.00025 - 0.12103 0.02642 0.00455 0.00243 0.00003 0.00015 0.00068 0.00024 - 0.11350 0.02455 0.00424 0.00223 0.00003 0.00016 0.00063 0.00022 - 0.10731 0.02302 0.00398 0.00208 0.00003 0.00017 0.00059 0.00020 - 0.10198 0.02173 0.00376 0.00195 0.00003 0.00018 0.00055 0.00019 - 0.09565 0.02020 0.00349 0.00179 0.00003 0.00018 0.00051 0.00018 - 0.09012 0.01889 0.00326 0.00166 0.00003 0.00019 0.00047 0.00017 - 0.08526 0.01774 0.00306 0.00155 0.00003 0.00019 0.00044 0.00015 - 0.08070 0.01668 0.00286 0.00145 0.00003 0.00019 0.00041 0.00015 - 0.07651 0.01570 0.00269 0.00135 0.00003 0.00019 0.00039 0.00014 - 0.07276 0.01484 0.00253 0.00127 0.00003 0.00019 0.00037 0.00013 - 0.06942 0.01408 0.00239 0.00120 0.00003 0.00019 0.00035 0.00012 - 0.06623 0.01336 0.00226 0.00113 0.00003 0.00018 0.00033 0.00012 - 0.06325 0.01269 0.00214 0.00107 0.00003 0.00018 0.00031 0.00011 - 0.06056 0.01209 0.00203 0.00101 0.00003 0.00018 0.00029 0.00011 - 0.05812 0.01155 0.00194 0.00096 0.00003 0.00018 0.00028 0.00010 - 0.05578 0.01103 0.00184 0.00092 0.00003 0.00018 0.00027 0.00010 - 0.05356 0.01055 0.00175 0.00087 0.00003 0.00017 0.00026 0.00009 - 0.05154 0.01011 0.00167 0.00083 0.00003 0.00017 0.00024 0.00009 - 0.04969 0.00970 0.00160 0.00080 0.00002 0.00017 0.00023 0.00009 - 0.04790 0.00932 0.00153 0.00076 0.00002 0.00017 0.00022 0.00008 - 0.28925 0.07128 0.00597 0.00735 0.00000 0.00000 0.00200 0.00066 - 0.27534 0.06721 0.00605 0.00686 0.00000 0.00000 0.00187 0.00061 - 0.25509 0.06135 0.00610 0.00616 0.00000 0.00000 0.00168 0.00054 - 0.24073 0.05726 0.00605 0.00568 0.00000 0.00000 0.00155 0.00049 - 0.22614 0.05315 0.00595 0.00521 0.00001 0.00000 0.00142 0.00045 - 0.21404 0.04978 0.00584 0.00482 0.00001 0.00000 0.00131 0.00041 - 0.20291 0.04671 0.00570 0.00447 0.00001 0.00000 0.00122 0.00038 - 0.19162 0.04365 0.00555 0.00413 0.00001 0.00000 0.00113 0.00035 - 0.18227 0.04113 0.00539 0.00385 0.00001 0.00000 0.00105 0.00032 - 0.17366 0.03884 0.00524 0.00360 0.00001 0.00000 0.00098 0.00030 - 0.16713 0.03712 0.00511 0.00341 0.00001 0.00000 0.00093 0.00028 - 0.15404 0.03373 0.00483 0.00305 0.00002 0.00000 0.00084 0.00025 - 0.14367 0.03108 0.00456 0.00277 0.00002 0.00003 0.00076 0.00023 - 0.13303 0.02841 0.00427 0.00250 0.00002 0.00007 0.00069 0.00021 - 0.12297 0.02593 0.00397 0.00225 0.00002 0.00009 0.00062 0.00019 - 0.11464 0.02391 0.00371 0.00205 0.00002 0.00011 0.00057 0.00017 - 0.10692 0.02207 0.00346 0.00187 0.00002 0.00013 0.00052 0.00016 - 0.10100 0.02068 0.00326 0.00173 0.00002 0.00014 0.00048 0.00015 - 0.09435 0.01913 0.00304 0.00159 0.00002 0.00015 0.00044 0.00014 - 0.08890 0.01788 0.00285 0.00147 0.00002 0.00015 0.00041 0.00013 - 0.08423 0.01682 0.00268 0.00137 0.00002 0.00016 0.00038 0.00012 - 0.07872 0.01558 0.00249 0.00126 0.00002 0.00016 0.00035 0.00011 - 0.07391 0.01451 0.00232 0.00116 0.00002 0.00016 0.00033 0.00011 - 0.06971 0.01358 0.00217 0.00108 0.00002 0.00016 0.00031 0.00010 - 0.06578 0.01273 0.00203 0.00101 0.00002 0.00016 0.00029 0.00009 - 0.06218 0.01195 0.00190 0.00094 0.00002 0.00016 0.00027 0.00009 - 0.05897 0.01126 0.00178 0.00088 0.00002 0.00016 0.00025 0.00008 - 0.05612 0.01066 0.00168 0.00083 0.00002 0.00016 0.00024 0.00008 - 0.05341 0.01008 0.00159 0.00078 0.00002 0.00016 0.00022 0.00008 - 0.05088 0.00956 0.00150 0.00073 0.00002 0.00016 0.00021 0.00007 - 0.04860 0.00908 0.00142 0.00069 0.00002 0.00015 0.00020 0.00007 - 0.04655 0.00866 0.00135 0.00066 0.00002 0.00015 0.00019 0.00007 - 0.04458 0.00825 0.00128 0.00062 0.00002 0.00015 0.00018 0.00007 - 0.04272 0.00787 0.00122 0.00059 0.00002 0.00015 0.00017 0.00006 - 0.04102 0.00752 0.00116 0.00056 0.00002 0.00014 0.00017 0.00006 - 0.03948 0.00721 0.00111 0.00054 0.00002 0.00014 0.00016 0.00006 - 0.03799 0.00691 0.00106 0.00052 0.00002 0.00014 0.00015 0.00006 - 0.25559 0.05913 0.00369 0.00558 0.00000 0.00000 0.00149 0.00039 - 0.24246 0.05556 0.00388 0.00519 0.00000 0.00000 0.00139 0.00036 - 0.22342 0.05043 0.00406 0.00463 0.00000 0.00000 0.00124 0.00032 - 0.20998 0.04686 0.00411 0.00425 0.00000 0.00000 0.00114 0.00030 - 0.19637 0.04329 0.00411 0.00387 0.00000 0.00000 0.00104 0.00027 - 0.18514 0.04038 0.00407 0.00357 0.00000 0.00000 0.00096 0.00025 - 0.17485 0.03774 0.00401 0.00329 0.00001 0.00000 0.00089 0.00023 - 0.16445 0.03510 0.00392 0.00302 0.00001 0.00000 0.00081 0.00021 - 0.15588 0.03295 0.00382 0.00281 0.00001 0.00000 0.00076 0.00020 - 0.14802 0.03101 0.00372 0.00261 0.00001 0.00000 0.00071 0.00019 - 0.14207 0.02955 0.00364 0.00247 0.00001 0.00000 0.00067 0.00018 - 0.13021 0.02668 0.00344 0.00219 0.00001 0.00000 0.00059 0.00016 - 0.12087 0.02446 0.00326 0.00198 0.00001 0.00003 0.00054 0.00015 - 0.11135 0.02224 0.00305 0.00177 0.00001 0.00006 0.00048 0.00013 - 0.10240 0.02018 0.00283 0.00158 0.00001 0.00008 0.00043 0.00012 - 0.09504 0.01852 0.00264 0.00144 0.00001 0.00010 0.00039 0.00011 - 0.08826 0.01702 0.00246 0.00130 0.00001 0.00011 0.00036 0.00010 - 0.08309 0.01588 0.00232 0.00120 0.00001 0.00012 0.00033 0.00010 - 0.07730 0.01463 0.00215 0.00110 0.00001 0.00013 0.00030 0.00009 - 0.07258 0.01362 0.00201 0.00101 0.00001 0.00013 0.00028 0.00009 - 0.06855 0.01277 0.00189 0.00094 0.00001 0.00014 0.00026 0.00008 - 0.06382 0.01178 0.00175 0.00086 0.00001 0.00014 0.00024 0.00008 - 0.05971 0.01093 0.00162 0.00079 0.00001 0.00014 0.00022 0.00007 - 0.05614 0.01020 0.00151 0.00073 0.00001 0.00014 0.00021 0.00007 - 0.05280 0.00953 0.00141 0.00068 0.00001 0.00014 0.00019 0.00006 - 0.04976 0.00892 0.00132 0.00063 0.00001 0.00014 0.00018 0.00006 - 0.04706 0.00838 0.00124 0.00059 0.00001 0.00014 0.00017 0.00006 - 0.04467 0.00791 0.00116 0.00055 0.00001 0.00014 0.00016 0.00006 - 0.04240 0.00746 0.00110 0.00052 0.00001 0.00013 0.00015 0.00005 - 0.04029 0.00705 0.00103 0.00049 0.00001 0.00013 0.00014 0.00005 - 0.03840 0.00668 0.00098 0.00046 0.00001 0.00013 0.00014 0.00005 - 0.03669 0.00636 0.00093 0.00044 0.00001 0.00013 0.00013 0.00005 - 0.03506 0.00604 0.00088 0.00041 0.00001 0.00013 0.00012 0.00005 - 0.03352 0.00575 0.00083 0.00039 0.00001 0.00012 0.00012 0.00004 - 0.03213 0.00549 0.00079 0.00037 0.00001 0.00012 0.00011 0.00004 - 0.03086 0.00525 0.00076 0.00036 0.00001 0.00012 0.00011 0.00004 - 0.02964 0.00502 0.00072 0.00034 0.00001 0.00012 0.00010 0.00004 - 0.19195 0.03857 0.00137 0.00294 0.00000 0.00000 0.00078 0.00017 - 0.18077 0.03596 0.00159 0.00271 0.00000 0.00000 0.00072 0.00016 - 0.16468 0.03226 0.00181 0.00239 0.00000 0.00000 0.00063 0.00014 - 0.15342 0.02970 0.00191 0.00217 0.00000 0.00000 0.00058 0.00013 - 0.14213 0.02716 0.00196 0.00195 0.00000 0.00000 0.00052 0.00012 - 0.13288 0.02511 0.00197 0.00178 0.00000 0.00000 0.00048 0.00012 - 0.12447 0.02326 0.00196 0.00163 0.00000 0.00000 0.00044 0.00011 - 0.11605 0.02144 0.00193 0.00148 0.00000 0.00000 0.00040 0.00010 - 0.10917 0.01996 0.00189 0.00136 0.00000 0.00000 0.00037 0.00010 - 0.10290 0.01863 0.00185 0.00126 0.00000 0.00000 0.00034 0.00009 - 0.09820 0.01765 0.00181 0.00118 0.00000 0.00000 0.00032 0.00009 - 0.08891 0.01573 0.00171 0.00103 0.00001 0.00000 0.00028 0.00008 - 0.08170 0.01426 0.00162 0.00092 0.00001 0.00002 0.00025 0.00007 - 0.07443 0.01281 0.00150 0.00081 0.00001 0.00005 0.00022 0.00007 - 0.06770 0.01149 0.00139 0.00072 0.00001 0.00006 0.00020 0.00006 - 0.06223 0.01043 0.00129 0.00064 0.00001 0.00008 0.00018 0.00006 - 0.05725 0.00949 0.00119 0.00058 0.00001 0.00009 0.00016 0.00005 - 0.05349 0.00879 0.00112 0.00053 0.00001 0.00009 0.00015 0.00005 - 0.04933 0.00802 0.00103 0.00048 0.00001 0.00010 0.00014 0.00005 - 0.04597 0.00741 0.00096 0.00044 0.00001 0.00010 0.00013 0.00005 - 0.04313 0.00690 0.00090 0.00040 0.00001 0.00010 0.00012 0.00004 - 0.03982 0.00631 0.00082 0.00037 0.00001 0.00010 0.00011 0.00004 - 0.03698 0.00581 0.00076 0.00033 0.00001 0.00010 0.00010 0.00004 - 0.03452 0.00538 0.00070 0.00031 0.00001 0.00010 0.00009 0.00004 - 0.03226 0.00499 0.00065 0.00028 0.00001 0.00010 0.00008 0.00004 - 0.03020 0.00464 0.00060 0.00026 0.00001 0.00010 0.00008 0.00003 - 0.02839 0.00433 0.00056 0.00024 0.00001 0.00010 0.00007 0.00003 - 0.02679 0.00406 0.00053 0.00023 0.00001 0.00010 0.00007 0.00003 - 0.02529 0.00381 0.00049 0.00021 0.00001 0.00009 0.00007 0.00003 - 0.02391 0.00358 0.00046 0.00020 0.00001 0.00009 0.00006 0.00003 - 0.02267 0.00338 0.00044 0.00019 0.00001 0.00009 0.00006 0.00003 - 0.02156 0.00320 0.00041 0.00018 0.00001 0.00009 0.00006 0.00003 - 0.02050 0.00302 0.00039 0.00017 0.00001 0.00009 0.00005 0.00003 - 0.01951 0.00287 0.00037 0.00016 0.00001 0.00009 0.00005 0.00003 - 0.01862 0.00272 0.00035 0.00015 0.00001 0.00008 0.00005 0.00003 - 0.01781 0.00259 0.00033 0.00014 0.00001 0.00008 0.00005 0.00003 - 0.01704 0.00247 0.00031 0.00014 0.00001 0.00008 0.00005 0.00003 - 0.13540 0.02305 0.00051 0.00135 0.00000 0.00000 0.00036 0.00011 - 0.12650 0.02132 0.00066 0.00123 0.00000 0.00000 0.00033 0.00010 - 0.11381 0.01888 0.00081 0.00107 0.00000 0.00000 0.00029 0.00009 - 0.10501 0.01721 0.00087 0.00096 0.00000 0.00000 0.00026 0.00009 - 0.09626 0.01557 0.00091 0.00085 0.00000 0.00000 0.00023 0.00008 - 0.08916 0.01425 0.00093 0.00077 0.00000 0.00000 0.00021 0.00007 - 0.08276 0.01308 0.00093 0.00070 0.00000 0.00000 0.00019 0.00007 - 0.07641 0.01192 0.00091 0.00063 0.00000 0.00000 0.00017 0.00006 - 0.07126 0.01100 0.00089 0.00057 0.00000 0.00000 0.00016 0.00006 - 0.06661 0.01018 0.00087 0.00052 0.00000 0.00000 0.00015 0.00006 - 0.06315 0.00957 0.00085 0.00049 0.00000 0.00000 0.00014 0.00005 - 0.05640 0.00840 0.00080 0.00042 0.00000 0.00000 0.00012 0.00005 - 0.05122 0.00753 0.00075 0.00037 0.00000 0.00002 0.00011 0.00005 - 0.04608 0.00667 0.00069 0.00032 0.00000 0.00004 0.00009 0.00004 - 0.04138 0.00590 0.00063 0.00028 0.00000 0.00005 0.00008 0.00004 - 0.03762 0.00530 0.00058 0.00025 0.00000 0.00006 0.00007 0.00004 - 0.03425 0.00476 0.00053 0.00022 0.00000 0.00006 0.00007 0.00003 - 0.03173 0.00437 0.00049 0.00020 0.00001 0.00007 0.00006 0.00003 - 0.02897 0.00395 0.00045 0.00018 0.00001 0.00007 0.00006 0.00003 - 0.02677 0.00361 0.00042 0.00016 0.00001 0.00007 0.00005 0.00003 - 0.02493 0.00334 0.00039 0.00015 0.00001 0.00007 0.00005 0.00003 - 0.02281 0.00302 0.00035 0.00014 0.00001 0.00007 0.00004 0.00003 - 0.02100 0.00276 0.00032 0.00012 0.00001 0.00007 0.00004 0.00002 - 0.01945 0.00254 0.00029 0.00011 0.00001 0.00007 0.00004 0.00002 - 0.01804 0.00233 0.00027 0.00010 0.00001 0.00007 0.00004 0.00002 - 0.01677 0.00215 0.00025 0.00010 0.00001 0.00007 0.00003 0.00002 - 0.01566 0.00200 0.00023 0.00009 0.00001 0.00007 0.00003 0.00002 - 0.01468 0.00186 0.00022 0.00008 0.00001 0.00007 0.00003 0.00002 - 0.01378 0.00173 0.00020 0.00008 0.00001 0.00006 0.00003 0.00002 - 0.01294 0.00162 0.00019 0.00007 0.00001 0.00006 0.00003 0.00002 - 0.01220 0.00152 0.00018 0.00007 0.00001 0.00006 0.00003 0.00002 - 0.01155 0.00143 0.00016 0.00007 0.00001 0.00006 0.00003 0.00002 - 0.01092 0.00135 0.00015 0.00006 0.00001 0.00006 0.00003 0.00002 - 0.01034 0.00127 0.00015 0.00006 0.00001 0.00006 0.00002 0.00002 - 0.00982 0.00120 0.00014 0.00006 0.00001 0.00006 0.00002 0.00002 - 0.00935 0.00114 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.00891 0.00108 0.00012 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.08793 0.01227 0.00019 0.00051 0.00000 0.00000 0.00015 0.00007 - 0.08143 0.01125 0.00027 0.00047 0.00000 0.00000 0.00013 0.00007 - 0.07223 0.00981 0.00035 0.00040 0.00000 0.00000 0.00012 0.00006 - 0.06593 0.00885 0.00038 0.00035 0.00000 0.00000 0.00010 0.00006 - 0.05972 0.00790 0.00040 0.00031 0.00000 0.00000 0.00009 0.00005 - 0.05472 0.00716 0.00040 0.00028 0.00000 0.00000 0.00008 0.00005 - 0.05026 0.00650 0.00040 0.00025 0.00000 0.00000 0.00007 0.00004 - 0.04588 0.00585 0.00039 0.00022 0.00000 0.00000 0.00007 0.00004 - 0.04236 0.00534 0.00038 0.00020 0.00000 0.00000 0.00006 0.00004 - 0.03922 0.00489 0.00037 0.00018 0.00000 0.00000 0.00006 0.00003 - 0.03690 0.00456 0.00036 0.00017 0.00000 0.00000 0.00005 0.00003 - 0.03242 0.00394 0.00033 0.00014 0.00000 0.00000 0.00004 0.00003 - 0.02904 0.00348 0.00031 0.00012 0.00000 0.00001 0.00004 0.00003 - 0.02574 0.00303 0.00028 0.00011 0.00000 0.00003 0.00003 0.00002 - 0.02278 0.00264 0.00025 0.00009 0.00000 0.00003 0.00003 0.00002 - 0.02045 0.00234 0.00023 0.00008 0.00000 0.00004 0.00003 0.00002 - 0.01838 0.00207 0.00021 0.00007 0.00000 0.00004 0.00003 0.00002 - 0.01686 0.00188 0.00019 0.00007 0.00000 0.00004 0.00002 0.00002 - 0.01522 0.00168 0.00017 0.00006 0.00001 0.00005 0.00002 0.00002 - 0.01393 0.00152 0.00016 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.01286 0.00139 0.00014 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.01164 0.00125 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.01061 0.00113 0.00012 0.00004 0.00001 0.00005 0.00002 0.00002 - 0.00974 0.00103 0.00011 0.00004 0.00001 0.00005 0.00002 0.00002 - 0.00895 0.00094 0.00010 0.00004 0.00001 0.00004 0.00002 0.00002 - 0.00825 0.00086 0.00009 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00765 0.00079 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00712 0.00073 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00663 0.00068 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00619 0.00063 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00580 0.00058 0.00006 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00545 0.00055 0.00006 0.00003 0.00001 0.00004 0.00002 0.00002 - 0.00513 0.00051 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 - 0.00483 0.00048 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 - 0.00456 0.00045 0.00005 0.00002 0.00001 0.00004 0.00002 0.00002 - 0.00432 0.00042 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 - 0.00409 0.00040 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 - 0.05080 0.00554 0.00007 0.00015 0.00000 0.00000 0.00005 0.00004 - 0.04656 0.00502 0.00010 0.00014 0.00000 0.00000 0.00004 0.00004 - 0.04063 0.00431 0.00013 0.00012 0.00000 0.00000 0.00004 0.00003 - 0.03661 0.00384 0.00014 0.00010 0.00000 0.00000 0.00003 0.00003 - 0.03270 0.00338 0.00014 0.00009 0.00000 0.00000 0.00003 0.00003 - 0.02959 0.00302 0.00014 0.00008 0.00000 0.00000 0.00003 0.00002 - 0.02684 0.00271 0.00014 0.00007 0.00000 0.00000 0.00002 0.00002 - 0.02417 0.00240 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 - 0.02205 0.00217 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 - 0.02018 0.00196 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 - 0.01881 0.00181 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 - 0.01620 0.00153 0.00011 0.00004 0.00000 0.00000 0.00002 0.00001 - 0.01427 0.00133 0.00010 0.00003 0.00000 0.00001 0.00001 0.00001 - 0.01242 0.00114 0.00009 0.00003 0.00000 0.00002 0.00001 0.00001 - 0.01079 0.00097 0.00008 0.00003 0.00000 0.00002 0.00001 0.00001 - 0.00954 0.00084 0.00007 0.00002 0.00000 0.00002 0.00001 0.00001 - 0.00844 0.00074 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00765 0.00066 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00681 0.00058 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00616 0.00052 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00563 0.00047 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00503 0.00042 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00453 0.00037 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00411 0.00033 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00374 0.00030 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00342 0.00027 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00314 0.00025 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00290 0.00023 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00267 0.00021 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00248 0.00019 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00230 0.00018 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00215 0.00017 0.00002 0.00002 0.00001 0.00003 0.00002 0.00001 - 0.00201 0.00015 0.00002 0.00002 0.00001 0.00003 0.00002 0.00002 - 0.00188 0.00014 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 - 0.00176 0.00013 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 - 0.00166 0.00013 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 - 0.00156 0.00012 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 - 0.00849 0.00042 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00755 0.00037 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00628 0.00031 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00546 0.00026 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00468 0.00022 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00408 0.00019 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00357 0.00016 0.00000 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00309 0.00014 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00272 0.00012 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 - 0.00240 0.00011 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 - 0.00217 0.00010 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 - 0.00176 0.00008 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 - 0.00147 0.00006 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 - 0.00121 0.00005 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00099 0.00004 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00083 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00070 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00061 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00052 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00045 0.00002 0.00000 0.00002 0.00001 0.00001 0.00002 0.00002 - 0.00040 0.00002 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00034 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00030 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00026 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00023 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00020 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00018 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00016 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00015 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00013 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00012 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00011 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00010 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00009 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00007 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.02318 0.01029 12.04329 0.81780 0.00000 0.00000 0.42849 0.81780 - 0.02329 0.01039 15.58813 0.85388 0.00000 0.00000 0.46675 0.85388 - 0.02345 0.01055 21.84668 0.92632 0.00000 0.00000 0.54248 0.92632 - 0.02357 0.01067 27.14104 0.99538 0.07033 0.00000 0.61396 0.99538 - 0.02370 0.01079 33.48524 1.08469 0.16572 0.00000 0.70583 1.08469 - 0.02381 0.01090 39.63136 1.17679 0.26305 0.00000 0.80012 1.17679 - 0.02392 0.01101 46.13978 1.27938 0.37064 0.00000 0.90481 1.27938 - 0.02404 0.01112 53.73338 1.40480 0.50132 0.00000 1.03245 1.40480 - 0.02414 0.01122 60.92623 1.52858 0.62964 0.00000 1.15814 1.52858 - 0.02424 0.01132 68.40675 1.66189 0.76727 0.00000 1.29326 1.66188 - 0.02432 0.01140 74.72301 1.77777 0.88655 0.00000 1.41056 1.77776 - 0.02449 0.01157 89.35409 2.05650 1.17243 0.00000 1.69230 2.05650 - 0.02463 0.01171 102.92217 2.33352 1.45547 0.27535 1.97185 2.33352 - 0.02479 0.01187 119.50425 2.68593 1.81445 0.64518 2.32701 2.68593 - 0.02496 0.01204 138.36974 3.10266 2.23784 1.07955 2.74654 3.10266 - 0.02511 0.01220 156.93936 3.52759 2.66866 1.52007 3.17394 3.52759 - 0.02526 0.01235 177.09790 4.00385 3.15071 2.01167 3.65262 4.00384 - 0.02538 0.01248 194.92059 4.43679 3.58836 2.45709 4.08754 4.43679 - 0.02553 0.01264 217.87741 5.00964 4.16681 3.04476 4.66273 5.00963 - 0.02567 0.01277 239.41920 5.56152 4.72356 3.60950 5.21666 5.56152 - 0.02579 0.01290 260.19971 6.10623 5.27264 4.16579 5.76320 6.10622 - 0.02594 0.01306 287.98056 6.85208 6.02396 4.92608 6.51134 6.85208 - 0.02609 0.01322 315.54398 7.61070 6.78762 5.69803 7.27207 7.61070 - 0.02623 0.01336 342.63889 8.37337 7.55493 6.47299 8.03668 8.37336 - 0.02637 0.01350 370.94839 9.18712 8.37327 7.29884 8.85236 9.18712 - 0.02650 0.01365 399.84375 10.03466 9.22521 8.15803 9.70174 10.03466 - 0.02663 0.01378 428.27185 10.88434 10.07902 9.01860 10.55315 10.88434 - 0.02675 0.01391 456.01035 11.72780 10.92632 9.87219 11.39821 11.72780 - 0.02687 0.01404 484.82175 12.61845 11.82077 10.77289 12.29045 12.61845 - 0.02700 0.01416 514.06232 13.53685 12.74287 11.70105 13.21040 13.53685 - 0.02711 0.01428 542.68726 14.44949 13.65899 12.62288 14.12449 14.44949 - 0.02722 0.01440 570.52130 15.34950 14.56226 13.53150 15.02587 15.34950 - 0.02733 0.01452 599.31189 16.29286 15.50888 14.48345 15.97059 16.29286 - 0.02744 0.01463 628.45270 17.26045 16.47964 15.45942 16.93951 17.26045 - 0.02755 0.01474 656.90033 18.21682 17.43902 16.42373 17.89714 18.21682 - 0.02765 0.01485 684.48749 19.15517 18.38020 17.36954 18.83667 19.15517 - 0.02775 0.01495 712.97314 20.13505 19.36292 18.35691 19.81774 20.13505 - 0.02595 0.01294 10.58237 0.69839 0.00000 0.00000 0.36649 0.69839 - 0.02608 0.01307 13.59161 0.73002 0.00000 0.00000 0.39998 0.73002 - 0.02627 0.01327 18.83139 0.79270 0.00000 0.00000 0.46546 0.79270 - 0.02642 0.01342 23.20221 0.85174 0.06012 0.00000 0.52657 0.85174 - 0.02657 0.01358 28.38061 0.92732 0.14091 0.00000 0.60434 0.92732 - 0.02671 0.01372 33.34556 1.00455 0.22262 0.00000 0.68344 1.00455 - 0.02684 0.01385 38.55524 1.08989 0.31224 0.00000 0.77056 1.08989 - 0.02698 0.01400 44.57877 1.19339 0.42024 0.00000 0.87595 1.19339 - 0.02711 0.01413 50.23621 1.29477 0.52551 0.00000 0.97896 1.29478 - 0.02723 0.01425 56.07542 1.40323 0.63767 0.00000 1.08896 1.40323 - 0.02732 0.01435 60.97321 1.49696 0.73432 0.00000 1.18391 1.49696 - 0.02753 0.01456 72.21687 1.72064 0.96411 0.00000 1.41014 1.72064 - 0.02770 0.01475 82.51199 1.94078 1.18940 0.21958 1.63244 1.94079 - 0.02790 0.01495 94.95674 2.21821 1.47245 0.51182 1.91221 2.21821 - 0.02811 0.01517 108.95415 2.54303 1.80296 0.85162 2.23940 2.54303 - 0.02829 0.01536 122.58259 2.87112 2.13608 1.19294 2.56959 2.87112 - 0.02848 0.01556 137.22606 3.23558 2.50549 1.57044 2.93612 3.23558 - 0.02864 0.01572 150.05328 3.56424 2.83819 1.90970 3.26647 3.56425 - 0.02883 0.01592 166.42339 3.99565 3.27437 2.35368 3.69986 3.99565 - 0.02900 0.01609 181.64124 4.40792 3.69079 2.77685 4.11386 4.40792 - 0.02916 0.01625 196.19872 4.81189 4.09851 3.19066 4.51940 4.81190 - 0.02935 0.01646 215.48514 5.36075 4.65203 3.75177 5.07020 5.36076 - 0.02954 0.01665 234.43675 5.91439 5.20998 4.31672 5.62564 5.91441 - 0.02972 0.01683 252.89949 6.46672 5.76627 4.87946 6.17962 6.46673 - 0.02989 0.01702 272.02420 7.05171 6.35517 5.47470 6.76623 7.05172 - 0.03007 0.01720 291.37924 7.65657 6.96380 6.08945 7.37267 7.65659 - 0.03023 0.01737 310.26709 8.25879 7.56953 6.70089 7.97635 8.25880 - 0.03039 0.01753 328.55746 8.85275 8.16677 7.30343 8.57167 8.85277 - 0.03055 0.01769 347.41473 9.47601 8.79327 7.93521 9.19628 9.47603 - 0.03071 0.01785 366.41357 10.11473 9.43515 8.58221 9.83632 10.11475 - 0.03086 0.01800 384.88226 10.74570 10.06909 9.22096 10.46852 10.74572 - 0.03100 0.01815 402.72040 11.36443 10.69060 9.84698 11.08841 11.36446 - 0.03115 0.01829 421.05347 12.00947 11.33842 10.49929 11.73461 12.00950 - 0.03129 0.01844 439.48856 12.66747 11.99913 11.16439 12.39374 12.66750 - 0.03143 0.01858 457.37341 13.31446 12.64868 11.81810 13.04180 13.31449 - 0.03156 0.01871 474.61447 13.94612 13.28275 12.45608 13.67446 13.94615 - 0.03170 0.01885 492.31384 14.60255 13.94161 13.11885 14.33190 14.60259 - 0.02897 0.01601 9.31363 0.59974 0.00000 0.00000 0.31519 0.59974 - 0.02911 0.01617 11.86438 0.62752 0.00000 0.00000 0.34455 0.62752 - 0.02934 0.01641 16.24365 0.68182 0.00000 0.00000 0.40125 0.68182 - 0.02951 0.01660 19.84529 0.73234 0.05143 0.00000 0.45352 0.73234 - 0.02970 0.01680 24.06453 0.79635 0.11989 0.00000 0.51939 0.79635 - 0.02986 0.01697 28.06883 0.86114 0.18853 0.00000 0.58578 0.86114 - 0.03001 0.01714 32.23323 0.93216 0.26321 0.00000 0.65833 0.93217 - 0.03018 0.01732 37.00637 1.01762 0.35252 0.00000 0.74539 1.01762 - 0.03033 0.01748 41.45318 1.10072 0.43895 0.00000 0.82987 1.10072 - 0.03047 0.01764 46.00996 1.18904 0.53044 0.00000 0.91951 1.18904 - 0.03059 0.01776 49.80827 1.26494 0.60883 0.00000 0.99644 1.26494 - 0.03083 0.01803 58.45507 1.44468 0.79380 0.00000 1.17836 1.44469 - 0.03105 0.01825 66.27811 1.61996 0.97348 0.17547 1.35547 1.61996 - 0.03128 0.01851 75.64002 1.83889 1.19723 0.40698 1.57640 1.83890 - 0.03153 0.01878 86.06147 2.09288 1.45608 0.67368 1.83241 2.09289 - 0.03176 0.01902 96.10950 2.34720 1.71469 0.93924 2.08851 2.34721 - 0.03199 0.01926 106.80801 2.62743 1.99916 1.23054 2.37050 2.62744 - 0.03218 0.01946 116.10349 2.87831 2.25349 1.49042 2.62282 2.87833 - 0.03241 0.01971 127.87103 3.20527 2.58454 1.82805 2.95148 3.20529 - 0.03262 0.01993 138.72200 3.51550 2.89831 2.14753 3.26317 3.51552 - 0.03281 0.02013 149.02768 3.81756 3.20356 2.45792 3.56656 3.81757 - 0.03306 0.02038 162.57642 4.22517 3.61515 2.87593 3.97582 4.22519 - 0.03329 0.02062 175.78175 4.63339 4.02705 3.29373 4.38557 4.63341 - 0.03351 0.02084 188.54976 5.03795 4.43499 3.70712 4.79153 5.03797 - 0.03373 0.02107 201.68074 5.46375 4.86413 4.14161 5.21871 5.46378 - 0.03395 0.02129 214.87666 5.90132 5.30491 4.58756 5.65762 5.90135 - 0.03415 0.02150 227.66812 6.33444 5.74103 5.02850 6.09198 6.33448 - 0.03435 0.02170 239.97827 6.75934 6.16872 5.46066 6.51803 6.75937 - 0.03455 0.02190 252.59341 7.20286 6.61501 5.91141 6.96271 7.20290 - 0.03475 0.02210 265.22827 7.65508 7.06992 6.37063 7.41604 7.65512 - 0.03494 0.02229 277.44128 8.09964 7.51702 6.82179 7.86165 8.09968 - 0.03512 0.02247 289.17380 8.53357 7.95332 7.26189 8.29657 8.53362 - 0.03530 0.02265 301.17004 8.98397 8.40609 7.71845 8.74795 8.98402 - 0.03549 0.02283 313.17038 9.44138 8.86581 8.18188 9.20632 9.44144 - 0.03566 0.02300 324.75513 9.88927 9.31588 8.63545 9.65511 9.88932 - 0.03583 0.02317 335.87042 10.32480 9.75347 9.07633 10.09149 10.32485 - 0.03600 0.02333 347.22900 10.77566 10.20640 9.53256 10.54322 10.77573 - 0.03099 0.01817 8.63945 0.54876 0.00000 0.00000 0.28865 0.54876 - 0.03116 0.01835 10.94826 0.57450 0.00000 0.00000 0.31583 0.57450 - 0.03142 0.01863 14.87735 0.62439 0.00000 0.00000 0.36789 0.62439 - 0.03161 0.01884 18.08012 0.67042 0.04686 0.00000 0.41553 0.67043 - 0.03182 0.01907 21.80567 0.72838 0.10888 0.00000 0.47517 0.72839 - 0.03200 0.01926 25.31891 0.78671 0.17070 0.00000 0.53495 0.78671 - 0.03218 0.01946 28.95226 0.85032 0.23765 0.00000 0.59995 0.85032 - 0.03237 0.01966 33.09398 0.92647 0.31732 0.00000 0.67756 0.92648 - 0.03253 0.01984 36.93293 1.00019 0.39407 0.00000 0.75254 1.00020 - 0.03270 0.02002 40.84906 1.07822 0.47499 0.00000 0.83176 1.07823 - 0.03283 0.02016 44.10057 1.14504 0.54408 0.00000 0.89953 1.14505 - 0.03311 0.02046 51.46362 1.30254 0.70634 0.00000 1.05900 1.30255 - 0.03335 0.02072 58.07458 1.45524 0.86306 0.15323 1.21337 1.45525 - 0.03362 0.02101 65.93589 1.64492 1.05712 0.35432 1.40486 1.64494 - 0.03391 0.02131 74.62984 1.86371 1.28034 0.58465 1.62549 1.86373 - 0.03417 0.02159 82.96062 2.08161 1.50215 0.81273 1.84501 2.08163 - 0.03444 0.02186 91.77975 2.32049 1.74489 1.06165 2.08549 2.32051 - 0.03466 0.02209 99.40285 2.53340 1.96093 1.28271 2.29969 2.53342 - 0.03493 0.02237 109.00412 2.80963 2.24088 1.56862 2.57746 2.80966 - 0.03517 0.02262 117.81219 3.07055 2.50503 1.83793 2.83972 3.07058 - 0.03539 0.02285 126.13960 3.32360 2.76099 2.09854 3.09398 3.32364 - 0.03568 0.02313 137.03427 3.66364 3.10465 2.44799 3.43552 3.66368 - 0.03595 0.02341 147.59799 4.00267 3.44702 2.79570 3.77593 4.00271 - 0.03620 0.02366 157.76317 4.33727 3.78471 3.13831 4.11181 4.33732 - 0.03646 0.02392 168.16980 4.68807 4.13854 3.49698 4.46386 4.68812 - 0.03671 0.02417 178.58133 5.04719 4.50058 3.86369 4.82419 5.04724 - 0.03696 0.02441 188.63106 5.40137 4.85749 4.22495 5.17950 5.40143 - 0.03719 0.02463 198.26465 5.74767 5.20633 4.57784 5.52685 5.74773 - 0.03742 0.02486 208.09923 6.10798 5.56916 4.94468 5.88820 6.10804 - 0.03766 0.02509 217.91235 6.47418 5.93782 5.31724 6.25542 6.47425 - 0.03788 0.02530 227.36395 6.83311 6.29905 5.68213 6.61530 6.83318 - 0.03809 0.02550 236.41277 7.18245 6.65054 6.03706 6.96553 7.18253 - 0.03831 0.02571 245.63503 7.54407 7.01431 6.40426 7.32804 7.54415 - 0.03853 0.02591 254.83009 7.91030 7.38266 6.77595 7.69515 7.91039 - 0.03873 0.02611 263.67911 8.26798 7.74233 7.13878 8.05365 8.26808 - 0.03893 0.02629 272.14435 8.61494 8.09116 7.49058 8.40138 8.61504 - 0.03913 0.02648 280.76993 8.97327 8.45136 7.85376 8.76048 8.97337 - 0.03257 0.01988 8.18898 0.51525 0.00000 0.00000 0.27120 0.51525 - 0.03275 0.02008 10.33674 0.53964 0.00000 0.00000 0.29693 0.53964 - 0.03303 0.02039 13.96778 0.58658 0.00000 0.00000 0.34590 0.58658 - 0.03324 0.02062 16.90793 0.62964 0.04383 0.00000 0.39046 0.62965 - 0.03347 0.02087 20.30992 0.68360 0.10158 0.00000 0.44599 0.68360 - 0.03367 0.02109 23.50268 0.73765 0.15891 0.00000 0.50140 0.73766 - 0.03387 0.02130 26.79072 0.79638 0.22076 0.00000 0.56143 0.79639 - 0.03408 0.02152 30.52337 0.86644 0.29411 0.00000 0.63284 0.86645 - 0.03426 0.02172 33.96984 0.93402 0.36452 0.00000 0.70160 0.93403 - 0.03444 0.02191 37.47357 1.00533 0.43854 0.00000 0.77403 1.00534 - 0.03459 0.02207 40.37399 1.06624 0.50157 0.00000 0.83582 1.06625 - 0.03490 0.02240 46.91564 1.20930 0.64908 0.00000 0.98072 1.20931 - 0.03517 0.02268 52.75471 1.34739 0.79092 0.13883 1.12036 1.34741 - 0.03547 0.02300 59.66427 1.51821 0.96584 0.32029 1.29288 1.51823 - 0.03579 0.02333 67.26715 1.71440 1.16616 0.52723 1.49077 1.71442 - 0.03608 0.02363 74.51758 1.90898 1.36440 0.73130 1.68687 1.90900 - 0.03638 0.02393 82.15865 2.12148 1.58051 0.95316 1.90086 2.12151 - 0.03663 0.02418 88.73681 2.31023 1.77219 1.14950 2.09083 2.31027 - 0.03693 0.02449 96.98878 2.55429 2.01973 1.40258 2.33632 2.55433 - 0.03720 0.02476 104.52840 2.78403 2.25248 1.64013 2.56731 2.78407 - 0.03745 0.02501 111.63087 3.00616 2.47733 1.86931 2.79056 3.00621 - 0.03777 0.02532 120.88695 3.30368 2.77824 2.17560 3.08948 3.30374 - 0.03808 0.02562 129.82481 3.59930 3.07698 2.47931 3.38639 3.59936 - 0.03837 0.02590 138.39249 3.89013 3.37069 2.77759 3.67841 3.89019 - 0.03866 0.02618 147.13147 4.19410 3.67750 3.08890 3.98355 4.19417 - 0.03894 0.02645 155.84300 4.50436 3.99049 3.40623 4.29494 4.50444 - 0.03922 0.02671 164.22281 4.80950 4.29818 3.71796 4.60113 4.80958 - 0.03948 0.02696 172.22986 5.10705 4.59811 4.02165 4.89967 5.10714 - 0.03975 0.02721 180.37828 5.41586 4.90927 4.33654 5.20945 5.41595 - 0.04001 0.02745 188.48390 5.72894 5.22464 4.65554 5.52347 5.72904 - 0.04026 0.02769 196.26779 6.03506 5.53292 4.96722 5.83049 6.03517 - 0.04051 0.02791 203.69887 6.33234 5.83221 5.26970 6.12859 6.33245 - 0.04075 0.02814 211.25194 6.63940 6.14128 5.58195 6.43648 6.63952 - 0.04100 0.02836 218.76202 6.94970 6.45355 5.89733 6.74760 6.94982 - 0.04123 0.02857 225.97054 7.25212 6.75784 6.20455 7.05079 7.25225 - 0.04146 0.02877 232.84923 7.54491 7.05237 6.50185 7.34430 7.54504 - 0.04169 0.02898 239.84103 7.84670 7.35592 6.80817 7.64681 7.84684 - 0.03383 0.02130 7.85717 0.49100 0.00000 0.00000 0.25856 0.49100 - 0.03403 0.02151 9.88692 0.51438 0.00000 0.00000 0.28322 0.51439 - 0.03433 0.02184 13.30073 0.55917 0.00000 0.00000 0.32993 0.55918 - 0.03455 0.02208 16.05050 0.60006 0.04161 0.00000 0.37224 0.60007 - 0.03480 0.02235 19.21909 0.65109 0.09625 0.00000 0.42477 0.65110 - 0.03501 0.02258 22.18172 0.70205 0.15031 0.00000 0.47701 0.70206 - 0.03522 0.02281 25.22282 0.75725 0.20847 0.00000 0.53343 0.75726 - 0.03545 0.02305 28.66412 0.82289 0.27724 0.00000 0.60037 0.82291 - 0.03565 0.02326 31.83217 0.88606 0.34309 0.00000 0.66464 0.88607 - 0.03584 0.02347 35.04438 0.95255 0.41215 0.00000 0.73219 0.95256 - 0.03600 0.02363 37.69738 1.00922 0.47084 0.00000 0.78970 1.00924 - 0.03633 0.02398 43.66268 1.14197 0.60781 0.00000 0.92419 1.14198 - 0.03663 0.02429 48.96327 1.26967 0.73908 0.12858 1.05337 1.26970 - 0.03696 0.02463 55.21236 1.42715 0.90044 0.29613 1.21246 1.42718 - 0.03730 0.02498 62.06223 1.60740 1.08463 0.48656 1.39433 1.60744 - 0.03762 0.02530 68.57095 1.78563 1.26632 0.67378 1.57399 1.78566 - 0.03794 0.02563 75.40720 1.97970 1.46382 0.87671 1.76948 1.97975 - 0.03821 0.02590 81.27468 2.15164 1.63853 1.05583 1.94256 2.15168 - 0.03854 0.02622 88.61304 2.37338 1.86357 1.28610 2.16566 2.37343 - 0.03884 0.02651 95.29766 2.58158 2.07463 1.50170 2.37504 2.58163 - 0.03911 0.02678 101.57774 2.78242 2.27805 1.70921 2.57695 2.78248 - 0.03946 0.02712 109.73849 3.05077 2.54962 1.98586 2.84663 3.05084 - 0.03979 0.02743 117.59455 3.31672 2.81853 2.25946 3.11380 3.31679 - 0.04011 0.02773 125.10381 3.57773 3.08228 2.52753 3.37594 3.57781 - 0.04043 0.02803 132.74242 3.84993 3.35717 2.80668 3.64925 3.85002 - 0.04074 0.02833 140.33675 4.12715 3.63697 3.09058 3.92754 4.12724 - 0.04104 0.02861 147.62332 4.39921 3.91146 3.36888 4.20060 4.39931 - 0.04133 0.02887 154.56932 4.66401 4.17850 3.63948 4.46632 4.66411 - 0.04162 0.02914 161.62167 4.93830 4.45503 3.91953 4.74153 4.93841 - 0.04191 0.02940 168.62108 5.21587 4.73478 4.20270 5.02001 5.21600 - 0.04219 0.02965 175.32811 5.48681 5.00776 4.47890 5.29178 5.48694 - 0.04245 0.02989 181.71785 5.74947 5.27233 4.74649 5.55523 5.74961 - 0.04272 0.03013 188.19965 6.02035 5.54512 5.02228 5.82690 6.02049 - 0.04299 0.03036 194.63159 6.29365 5.82029 5.30039 6.10097 6.29381 - 0.04325 0.03059 200.79346 6.55962 6.08802 5.57089 6.36766 6.55978 - 0.04350 0.03081 206.66266 6.81673 6.34680 5.83228 6.62546 6.81690 - 0.04375 0.03103 212.61777 7.08139 6.61312 6.10121 6.89081 7.08156 - 0.03829 0.02634 6.91040 0.42350 0.00000 0.00000 0.22337 0.42350 - 0.03854 0.02660 8.60487 0.44405 0.00000 0.00000 0.24500 0.44406 - 0.03892 0.02701 11.40688 0.48272 0.00000 0.00000 0.28529 0.48273 - 0.03921 0.02732 13.62531 0.51747 0.03534 0.00000 0.32124 0.51748 - 0.03953 0.02764 16.14729 0.56029 0.08123 0.00000 0.36532 0.56030 - 0.03980 0.02793 18.47678 0.60256 0.12613 0.00000 0.40868 0.60258 - 0.04008 0.02821 20.84266 0.64790 0.17399 0.00000 0.45506 0.64792 - 0.04037 0.02851 23.49220 0.70132 0.23006 0.00000 0.50957 0.70134 - 0.04063 0.02877 25.90787 0.75226 0.28328 0.00000 0.56145 0.75229 - 0.04088 0.02903 28.33629 0.80548 0.33868 0.00000 0.61557 0.80552 - 0.04108 0.02923 30.32707 0.85054 0.38545 0.00000 0.66133 0.85058 - 0.04152 0.02966 34.75890 0.95514 0.49363 0.00000 0.76741 0.95519 - 0.04191 0.03004 38.63858 1.05469 0.59620 0.10073 0.86819 1.05474 - 0.04234 0.03046 43.15744 1.17617 0.72098 0.23070 0.99104 1.17623 - 0.04280 0.03090 48.04951 1.31375 0.86189 0.37684 1.12998 1.31381 - 0.04322 0.03130 52.64354 1.44840 0.99949 0.51907 1.26585 1.44848 - 0.04365 0.03170 57.41608 1.59367 1.14766 0.67178 1.41231 1.59376 - 0.04401 0.03203 61.47215 1.72129 1.27763 0.80545 1.54090 1.72139 - 0.04446 0.03243 66.49579 1.88453 1.44367 0.97587 1.70529 1.88463 - 0.04485 0.03279 71.02716 2.03653 1.59810 1.13410 1.85829 2.03665 - 0.04522 0.03312 75.24726 2.18210 1.74586 1.28527 2.00476 2.18223 - 0.04569 0.03353 80.68009 2.37509 1.94157 1.48524 2.19887 2.37523 - 0.04614 0.03393 85.85830 2.56477 2.13376 1.68136 2.38958 2.56492 - 0.04656 0.03429 90.76248 2.74953 2.32084 1.87206 2.57529 2.74969 - 0.04700 0.03466 95.70743 2.94081 2.51441 2.06918 2.76752 2.94099 - 0.04742 0.03503 100.58136 3.13426 2.71006 2.26825 2.96187 3.13445 - 0.04783 0.03537 105.21941 3.32285 2.90070 2.46209 3.15130 3.32305 - 0.04822 0.03570 109.60696 3.50527 3.08504 2.64940 3.33451 3.50549 - 0.04862 0.03602 114.02852 3.69311 3.27477 2.84208 3.52313 3.69334 - 0.04901 0.03635 118.38481 3.88209 3.46560 3.03577 3.71288 3.88234 - 0.04939 0.03665 122.52988 4.06553 3.65078 3.22364 3.89703 4.06579 - 0.04975 0.03695 126.45242 4.24244 3.82931 3.40468 4.07460 4.24271 - 0.05012 0.03724 130.40602 4.42397 4.01246 3.59035 4.25680 4.42425 - 0.05048 0.03753 134.30374 4.60620 4.19627 3.77662 4.43968 4.60650 - 0.05084 0.03781 138.01474 4.78268 4.37426 3.95692 4.61679 4.78300 - 0.05117 0.03808 141.52861 4.95253 4.54552 4.13036 4.78721 4.95286 - 0.05152 0.03835 145.07338 5.12659 4.72100 4.30802 4.96185 5.12693 - 0.04376 0.03254 6.08014 0.36650 0.00000 0.00000 0.19363 0.36651 - 0.04409 0.03287 7.48133 0.38459 0.00000 0.00000 0.21263 0.38460 - 0.04460 0.03337 9.75620 0.41795 0.00000 0.00000 0.24735 0.41797 - 0.04499 0.03374 11.52358 0.44739 0.02993 0.00000 0.27781 0.44742 - 0.04541 0.03415 13.50343 0.48315 0.06828 0.00000 0.31463 0.48319 - 0.04578 0.03450 15.30807 0.51802 0.10537 0.00000 0.35041 0.51806 - 0.04614 0.03485 17.11977 0.55501 0.14449 0.00000 0.38828 0.55506 - 0.04654 0.03522 19.12581 0.59814 0.18986 0.00000 0.43233 0.59820 - 0.04689 0.03554 20.93558 0.63888 0.23253 0.00000 0.47386 0.63895 - 0.04723 0.03586 22.73793 0.68108 0.27657 0.00000 0.51681 0.68115 - 0.04751 0.03611 24.20349 0.71655 0.31348 0.00000 0.55288 0.71663 - 0.04811 0.03665 27.43069 0.79810 0.39806 0.00000 0.63567 0.79819 - 0.04863 0.03711 30.20875 0.87479 0.47731 0.07808 0.71341 0.87490 - 0.04923 0.03763 33.40152 0.96734 0.57265 0.17775 0.80710 0.96747 - 0.04986 0.03817 36.81078 1.07094 0.67907 0.28854 0.91186 1.07109 - 0.05044 0.03866 39.97086 1.17124 0.78186 0.39519 1.01318 1.17140 - 0.05103 0.03916 43.21396 1.27835 0.89143 0.50855 1.12130 1.27854 - 0.05153 0.03957 45.94011 1.37161 0.98668 0.60688 1.21538 1.37181 - 0.05214 0.04007 49.28002 1.48983 1.10727 0.73112 1.33457 1.49005 - 0.05269 0.04051 52.25968 1.59893 1.21843 0.84545 1.44452 1.59917 - 0.05320 0.04091 55.00756 1.70260 1.32395 0.95382 1.54894 1.70285 - 0.05385 0.04142 58.50802 1.83887 1.46253 1.09595 1.68616 1.83915 - 0.05447 0.04191 61.80709 1.97162 1.59742 1.23411 1.81979 1.97193 - 0.05506 0.04236 64.89905 2.09986 1.72763 1.36734 1.94884 2.10019 - 0.05566 0.04282 67.98560 2.23160 1.86131 1.50398 2.08138 2.23196 - 0.05626 0.04326 70.99787 2.36382 1.99540 1.64092 2.21436 2.36420 - 0.05683 0.04369 73.83739 2.49179 2.12511 1.77330 2.34305 2.49219 - 0.05737 0.04409 76.49996 2.61474 2.24970 1.90036 2.46667 2.61518 - 0.05792 0.04449 79.16006 2.74053 2.37710 2.03022 2.59312 2.74099 - 0.05846 0.04488 81.75870 2.86629 2.50443 2.15993 2.71953 2.86677 - 0.05899 0.04526 84.21115 2.98762 2.62724 2.28498 2.84146 2.98812 - 0.05949 0.04562 86.51376 3.10396 2.74496 2.40480 2.95837 3.10448 - 0.06000 0.04598 88.81721 3.22269 2.86507 2.52701 3.07767 3.22324 - 0.06051 0.04634 91.07071 3.34122 2.98496 2.64894 3.19675 3.34179 - 0.06100 0.04668 93.20055 3.45542 3.10044 2.76635 3.31148 3.45602 - 0.06146 0.04701 95.20316 3.56477 3.21100 2.87873 3.42133 3.56540 - 0.06194 0.04734 97.20946 3.67630 3.32374 2.99329 3.53336 3.67695 - 0.04762 0.03680 5.64480 0.33747 0.00000 0.00000 0.17848 0.33749 - 0.04801 0.03717 6.89160 0.35428 0.00000 0.00000 0.19611 0.35431 - 0.04863 0.03774 8.89277 0.38487 0.00000 0.00000 0.22794 0.38491 - 0.04909 0.03816 10.42907 0.41156 0.02711 0.00000 0.25553 0.41161 - 0.04960 0.03862 12.13426 0.44367 0.06157 0.00000 0.28861 0.44374 - 0.05005 0.03902 13.67563 0.47473 0.09465 0.00000 0.32049 0.47480 - 0.05049 0.03941 15.21181 0.50746 0.12930 0.00000 0.35401 0.50754 - 0.05097 0.03983 16.90067 0.54536 0.16923 0.00000 0.39274 0.54545 - 0.05140 0.04020 18.41419 0.58094 0.20656 0.00000 0.42904 0.58105 - 0.05182 0.04056 19.91263 0.61760 0.24489 0.00000 0.46639 0.61772 - 0.05215 0.04084 21.12481 0.64828 0.27687 0.00000 0.49760 0.64841 - 0.05288 0.04145 23.77573 0.71837 0.34971 0.00000 0.56881 0.71852 - 0.05352 0.04198 26.03292 0.78380 0.41745 0.06690 0.63519 0.78397 - 0.05425 0.04257 28.60500 0.86221 0.49839 0.15172 0.71464 0.86241 - 0.05502 0.04318 31.32749 0.94934 0.58808 0.24533 0.80282 0.94957 - 0.05573 0.04373 33.83001 1.03312 0.67412 0.33484 0.88753 1.03337 - 0.05646 0.04429 36.37823 1.12203 0.76526 0.42938 0.97734 1.12231 - 0.05707 0.04476 38.50518 1.19899 0.84403 0.51092 1.05505 1.19929 - 0.05782 0.04532 41.09273 1.29602 0.94322 0.61339 1.15296 1.29635 - 0.05849 0.04582 43.38479 1.38506 1.03413 0.70715 1.24278 1.38543 - 0.05911 0.04628 45.48511 1.46925 1.12001 0.79558 1.32766 1.46964 - 0.05991 0.04686 48.14236 1.57934 1.23220 0.91096 1.43861 1.57976 - 0.06067 0.04741 50.62837 1.68598 1.34079 1.02249 1.54605 1.68644 - 0.06140 0.04792 52.94235 1.78848 1.44508 1.12949 1.64928 1.78897 - 0.06213 0.04843 55.23705 1.89325 1.55162 1.23869 1.75478 1.89379 - 0.06285 0.04894 57.46194 1.99791 1.65798 1.34761 1.86014 1.99847 - 0.06355 0.04941 59.54611 2.09874 1.76041 1.45243 1.96162 2.09934 - 0.06421 0.04986 61.48890 2.19521 1.85837 1.55262 2.05871 2.19585 - 0.06488 0.05032 63.41870 2.29351 1.95814 1.65459 2.15761 2.29418 - 0.06555 0.05076 65.29313 2.39139 2.05746 1.75605 2.25608 2.39209 - 0.06619 0.05119 67.05235 2.48546 2.15289 1.85350 2.35071 2.48620 - 0.06680 0.05159 68.69530 2.57534 2.24403 1.94653 2.44111 2.57611 - 0.06742 0.05200 70.33045 2.66676 2.33671 2.04109 2.53305 2.66756 - 0.06804 0.05240 71.92173 2.75770 2.42890 2.13511 2.62450 2.75854 - 0.06863 0.05279 73.41812 2.84503 2.51740 2.22535 2.71231 2.84590 - 0.06920 0.05315 74.81830 2.92840 2.60188 2.31145 2.79613 2.92930 - 0.06978 0.05352 76.21436 3.01316 2.68775 2.39896 2.88136 3.01410 - 0.05080 0.04016 5.35747 0.31859 0.00000 0.00000 0.16863 0.31863 - 0.05126 0.04057 6.50149 0.33456 0.00000 0.00000 0.18536 0.33461 - 0.05196 0.04119 8.32214 0.36332 0.00000 0.00000 0.21527 0.36339 - 0.05251 0.04165 9.70741 0.38819 0.02526 0.00000 0.24098 0.38827 - 0.05309 0.04216 11.23435 0.41791 0.05716 0.00000 0.27160 0.41800 - 0.05362 0.04260 12.60601 0.44647 0.08760 0.00000 0.30093 0.44658 - 0.05413 0.04302 13.96557 0.47641 0.11934 0.00000 0.33160 0.47653 - 0.05469 0.04348 15.45225 0.51091 0.15573 0.00000 0.36688 0.51105 - 0.05518 0.04388 16.77789 0.54315 0.18960 0.00000 0.39979 0.54331 - 0.05567 0.04427 18.08446 0.57624 0.22424 0.00000 0.43351 0.57641 - 0.05606 0.04459 19.13730 0.60383 0.25305 0.00000 0.46160 0.60401 - 0.05691 0.04525 21.42775 0.66657 0.31835 0.00000 0.52539 0.66679 - 0.05765 0.04583 23.36152 0.72482 0.37876 0.05976 0.58452 0.72506 - 0.05850 0.04647 25.55063 0.79425 0.45055 0.13515 0.65492 0.79453 - 0.05940 0.04714 27.85213 0.87097 0.52967 0.21790 0.73263 0.87129 - 0.06022 0.04775 29.95404 0.94437 0.60519 0.29662 0.80690 0.94473 - 0.06106 0.04836 32.08136 1.02189 0.68479 0.37938 0.88527 1.02228 - 0.06177 0.04887 33.84721 1.08871 0.75331 0.45046 0.95278 1.08913 - 0.06264 0.04949 35.98368 1.17259 0.83921 0.53940 1.03749 1.17305 - 0.06342 0.05003 37.86559 1.24925 0.91762 0.62045 1.11487 1.24975 - 0.06415 0.05053 39.58141 1.32145 0.99141 0.69660 1.18772 1.32199 - 0.06507 0.05116 41.74042 1.41549 1.08742 0.79557 1.28257 1.41607 - 0.06596 0.05176 43.74849 1.50620 1.17996 0.89083 1.37403 1.50683 - 0.06680 0.05232 45.60734 1.59304 1.26848 0.98186 1.46157 1.59371 - 0.06765 0.05288 47.44094 1.68149 1.35859 1.07443 1.55069 1.68220 - 0.06849 0.05343 49.20937 1.76950 1.44820 1.16643 1.63936 1.77026 - 0.06929 0.05395 50.85752 1.85401 1.53421 1.25465 1.72449 1.85481 - 0.07006 0.05444 52.38652 1.93460 1.61621 1.33871 1.80566 1.93545 - 0.07083 0.05493 53.89808 2.01646 1.69946 1.42400 1.88809 2.01736 - 0.07160 0.05542 55.35936 2.09773 1.78208 1.50861 1.96992 2.09866 - 0.07234 0.05588 56.72456 2.17561 1.86124 1.58963 2.04832 2.17659 - 0.07304 0.05632 57.99386 2.24981 1.93663 1.66677 2.12301 2.25083 - 0.07376 0.05676 59.25174 2.32507 2.01309 1.74497 2.19877 2.32613 - 0.07447 0.05720 60.47046 2.39974 2.08894 1.82252 2.27392 2.40085 - 0.07515 0.05762 61.61163 2.47127 2.16157 1.89676 2.34591 2.47242 - 0.07581 0.05801 62.67504 2.53938 2.23073 1.96744 2.41445 2.54057 - 0.07647 0.05842 63.73100 2.60848 2.30087 2.03910 2.48398 2.60970 - 0.05350 0.04296 5.14679 0.30493 0.00000 0.00000 0.16150 0.30498 - 0.05401 0.04339 6.21495 0.32029 0.00000 0.00000 0.17757 0.32035 - 0.05480 0.04406 7.90343 0.34771 0.00000 0.00000 0.20608 0.34779 - 0.05541 0.04456 9.17892 0.37124 0.02390 0.00000 0.23042 0.37135 - 0.05607 0.04510 10.57714 0.39921 0.05394 0.00000 0.25923 0.39933 - 0.05665 0.04557 11.82692 0.42596 0.08246 0.00000 0.28671 0.42610 - 0.05723 0.04603 13.06028 0.45387 0.11208 0.00000 0.31532 0.45404 - 0.05786 0.04652 14.40319 0.48591 0.14591 0.00000 0.34809 0.48610 - 0.05841 0.04695 15.59585 0.51575 0.17728 0.00000 0.37856 0.51595 - 0.05896 0.04737 16.76718 0.54626 0.20927 0.00000 0.40967 0.54648 - 0.05940 0.04770 17.70811 0.57163 0.23580 0.00000 0.43552 0.57187 - 0.06035 0.04842 19.74658 0.62913 0.29573 0.00000 0.49401 0.62941 - 0.06119 0.04903 21.45580 0.68226 0.35091 0.05467 0.54798 0.68257 - 0.06215 0.04973 23.38058 0.74533 0.41622 0.12337 0.61197 0.74568 - 0.06315 0.05044 25.39329 0.81472 0.48789 0.19846 0.68230 0.81512 - 0.06408 0.05110 27.22200 0.88084 0.55601 0.26961 0.74924 0.88128 - 0.06503 0.05175 29.06385 0.95039 0.62756 0.34413 0.81961 0.95088 - 0.06583 0.05230 30.58602 1.01015 0.68893 0.40791 0.88002 1.01068 - 0.06681 0.05295 32.41959 1.08491 0.76561 0.48746 0.95558 1.08549 - 0.06768 0.05354 34.02746 1.15301 0.83538 0.55971 1.02436 1.15364 - 0.06849 0.05407 35.48753 1.21696 0.90084 0.62741 1.08893 1.21763 - 0.06954 0.05475 37.31675 1.29999 0.98575 0.71510 1.17273 1.30071 - 0.07053 0.05539 39.01009 1.37981 1.06732 0.79924 1.25327 1.38059 - 0.07147 0.05599 40.57071 1.45600 1.14511 0.87939 1.33012 1.45683 - 0.07242 0.05659 42.10354 1.53336 1.22406 0.96067 1.40813 1.53425 - 0.07336 0.05717 43.57562 1.61012 1.30236 1.04121 1.48553 1.61107 - 0.07426 0.05773 44.94193 1.68363 1.37730 1.11824 1.55963 1.68463 - 0.07511 0.05825 46.20454 1.75356 1.44857 1.19145 1.63011 1.75461 - 0.07598 0.05878 47.44796 1.82441 1.52076 1.26556 1.70151 1.82551 - 0.07684 0.05930 48.64542 1.89458 1.59222 1.33890 1.77222 1.89573 - 0.07766 0.05979 49.75996 1.96168 1.66054 1.40898 1.83981 1.96288 - 0.07845 0.06026 50.79247 2.02546 1.72547 1.47555 1.90406 2.02671 - 0.07925 0.06073 51.81208 2.09002 1.79118 1.54290 1.96910 2.09132 - 0.08004 0.06120 52.79638 2.15394 1.85623 1.60956 2.03349 2.15529 - 0.08080 0.06164 53.71482 2.21505 1.91840 1.67325 2.09503 2.21645 - 0.08153 0.06206 54.56775 2.27313 1.97748 1.73376 2.15353 2.27458 - 0.08227 0.06249 55.41185 2.33194 2.03730 1.79501 2.21275 2.33343 - 0.06413 0.05300 4.55955 0.26724 0.00000 0.00000 0.14185 0.26740 - 0.06488 0.05354 5.41033 0.28085 0.00000 0.00000 0.15607 0.28104 - 0.06606 0.05438 6.72546 0.30447 0.00000 0.00000 0.18060 0.30471 - 0.06696 0.05500 7.69509 0.32423 0.02008 0.00000 0.20105 0.32451 - 0.06794 0.05568 8.73853 0.34727 0.04487 0.00000 0.22480 0.34759 - 0.06880 0.05627 9.65564 0.36892 0.06804 0.00000 0.24708 0.36929 - 0.06966 0.05684 10.54742 0.39120 0.09177 0.00000 0.26996 0.39161 - 0.07059 0.05746 11.50437 0.41642 0.11852 0.00000 0.29580 0.41688 - 0.07141 0.05800 12.34271 0.43961 0.14303 0.00000 0.31953 0.44011 - 0.07222 0.05853 13.15604 0.46307 0.16775 0.00000 0.34351 0.46361 - 0.07287 0.05894 13.80244 0.48239 0.18807 0.00000 0.36323 0.48296 - 0.07427 0.05984 15.18282 0.52562 0.23339 0.00000 0.40733 0.52627 - 0.07551 0.06061 16.31186 0.56498 0.27451 0.04098 0.44741 0.56570 - 0.07691 0.06148 17.55995 0.61102 0.32250 0.09178 0.49425 0.61182 - 0.07839 0.06237 18.84030 0.66093 0.37438 0.14652 0.54498 0.66183 - 0.07975 0.06319 19.98235 0.70783 0.42303 0.19768 0.59259 0.70880 - 0.08114 0.06400 21.11264 0.75653 0.47346 0.25059 0.64201 0.75759 - 0.08230 0.06468 22.03193 0.79789 0.51623 0.29538 0.68395 0.79903 - 0.08372 0.06550 23.12161 0.84905 0.56908 0.35061 0.73581 0.85028 - 0.08499 0.06622 24.06148 0.89512 0.61662 0.40022 0.78248 0.89643 - 0.08616 0.06688 24.90225 0.93794 0.66077 0.44624 0.82586 0.93934 - 0.08767 0.06772 25.93850 0.99294 0.71744 0.50523 0.88155 0.99444 - 0.08909 0.06851 26.88083 1.04522 0.77126 0.56119 0.93446 1.04681 - 0.09044 0.06925 27.73473 1.09457 0.82205 0.61395 0.98441 1.09626 - 0.09180 0.06998 28.55964 1.14419 0.87308 0.66692 1.03461 1.14598 - 0.09313 0.07070 29.33875 1.19293 0.92319 0.71891 1.08392 1.19482 - 0.09441 0.07138 30.05019 1.23916 0.97071 0.76817 1.13069 1.24114 - 0.09562 0.07202 30.69747 1.28276 1.01551 0.81459 1.17478 1.28483 - 0.09684 0.07266 31.32505 1.32656 1.06050 0.86120 1.21908 1.32871 - 0.09805 0.07329 31.92002 1.36956 1.10468 0.90694 1.26257 1.37181 - 0.09920 0.07389 32.46526 1.41035 1.14657 0.95031 1.30382 1.41269 - 0.10030 0.07446 32.96275 1.44884 1.18609 0.99120 1.34273 1.45125 - 0.10141 0.07503 33.44673 1.48750 1.22580 1.03229 1.38184 1.49000 - 0.10251 0.07559 33.90671 1.52550 1.26482 1.07265 1.42026 1.52809 - 0.10357 0.07612 34.32939 1.56157 1.30186 1.11096 1.45673 1.56423 - 0.10457 0.07663 34.71605 1.59562 1.33682 1.14712 1.49116 1.59836 - 0.10559 0.07714 35.09295 1.62987 1.37199 1.18348 1.52580 1.63269 - 0.07974 0.06551 4.07564 0.23595 0.00000 0.00000 0.12557 0.23644 - 0.08090 0.06620 4.73353 0.24801 0.00000 0.00000 0.13817 0.24857 - 0.08269 0.06726 5.72582 0.26826 0.00000 0.00000 0.15923 0.26893 - 0.08406 0.06806 6.43721 0.28472 0.01677 0.00000 0.17628 0.28548 - 0.08555 0.06892 7.18686 0.30347 0.03707 0.00000 0.19567 0.30433 - 0.08687 0.06967 7.83327 0.32075 0.05569 0.00000 0.21351 0.32170 - 0.08817 0.07040 8.45126 0.33824 0.07446 0.00000 0.23152 0.33927 - 0.08957 0.07119 9.10331 0.35772 0.09529 0.00000 0.25156 0.35885 - 0.09081 0.07187 9.66552 0.37537 0.11412 0.00000 0.26970 0.37659 - 0.09203 0.07254 10.20319 0.39300 0.13287 0.00000 0.28780 0.39430 - 0.09300 0.07307 10.62513 0.40736 0.14812 0.00000 0.30253 0.40873 - 0.09511 0.07420 11.51093 0.43903 0.18168 0.00000 0.33498 0.44057 - 0.09695 0.07518 12.21249 0.46736 0.21161 0.03007 0.36398 0.46903 - 0.09904 0.07627 12.97038 0.49996 0.24597 0.06680 0.39731 0.50179 - 0.10122 0.07740 13.72946 0.53470 0.28251 0.10574 0.43280 0.53670 - 0.10322 0.07841 14.39085 0.56682 0.31623 0.14157 0.46559 0.56898 - 0.10524 0.07944 15.03082 0.59968 0.35068 0.17811 0.49911 0.60200 - 0.10693 0.08028 15.54052 0.62721 0.37952 0.20864 0.52719 0.62967 - 0.10899 0.08130 16.13189 0.66082 0.41469 0.24582 0.56145 0.66344 - 0.11082 0.08219 16.63064 0.69068 0.44592 0.27880 0.59189 0.69346 - 0.11250 0.08301 17.06766 0.71811 0.47460 0.30904 0.61985 0.72103 - 0.11465 0.08404 17.59405 0.75289 0.51095 0.34735 0.65529 0.75600 - 0.11667 0.08501 18.06062 0.78551 0.54502 0.38323 0.68852 0.78878 - 0.11857 0.08591 18.47299 0.81592 0.57678 0.41666 0.71950 0.81935 - 0.12048 0.08680 18.86153 0.84612 0.60833 0.44984 0.75027 0.84972 - 0.12235 0.08767 19.21914 0.87544 0.63895 0.48204 0.78014 0.87920 - 0.12412 0.08849 19.53731 0.90294 0.66768 0.51224 0.80816 0.90686 - 0.12580 0.08926 19.81951 0.92859 0.69448 0.54042 0.83430 0.93266 - 0.12748 0.09003 20.08602 0.95410 0.72114 0.56844 0.86029 0.95831 - 0.12914 0.09078 20.33187 0.97889 0.74706 0.59568 0.88556 0.98325 - 0.13072 0.09150 20.55100 1.00218 0.77141 0.62127 0.90930 1.00668 - 0.13221 0.09217 20.74536 1.02394 0.79417 0.64520 0.93148 1.02857 - 0.13372 0.09284 20.92911 1.04561 0.81685 0.66903 0.95358 1.05037 - 0.13521 0.09350 21.09838 1.06670 0.83894 0.69226 0.97510 1.07160 - 0.13663 0.09413 21.24908 1.08655 0.85973 0.71412 0.99535 1.09158 - 0.13798 0.09472 21.38254 1.10513 0.87920 0.73460 1.01431 1.11028 - 0.13934 0.09532 21.50827 1.12367 0.89863 0.75505 1.03322 1.12894 - 0.09264 0.07435 3.84238 0.22006 0.00000 0.00000 0.11736 0.22103 - 0.09413 0.07516 4.39685 0.23125 0.00000 0.00000 0.12907 0.23233 - 0.09646 0.07640 5.22013 0.24964 0.00000 0.00000 0.14823 0.25090 - 0.09822 0.07733 5.79924 0.26431 0.01503 0.00000 0.16348 0.26570 - 0.10014 0.07833 6.40108 0.28077 0.03297 0.00000 0.18056 0.28231 - 0.10184 0.07920 6.91346 0.29575 0.04922 0.00000 0.19607 0.29742 - 0.10350 0.08005 7.39773 0.31073 0.06544 0.00000 0.21157 0.31254 - 0.10529 0.08096 7.90289 0.32724 0.08326 0.00000 0.22863 0.32920 - 0.10687 0.08176 8.33369 0.34206 0.09922 0.00000 0.24392 0.34415 - 0.10842 0.08253 8.74162 0.35673 0.11499 0.00000 0.25906 0.35895 - 0.10966 0.08314 9.05894 0.36860 0.12772 0.00000 0.27129 0.37092 - 0.11232 0.08445 9.71711 0.39452 0.15548 0.00000 0.29798 0.39708 - 0.11464 0.08557 10.22553 0.41743 0.17995 0.02477 0.32156 0.42019 - 0.11726 0.08682 10.76542 0.44351 0.20776 0.05473 0.34836 0.44649 - 0.11999 0.08811 11.29647 0.47097 0.23699 0.08615 0.37658 0.47420 - 0.12247 0.08927 11.75089 0.49609 0.26370 0.11478 0.40236 0.49954 - 0.12498 0.09043 12.18284 0.52152 0.29071 0.14369 0.42847 0.52521 - 0.12706 0.09139 12.52111 0.54264 0.31313 0.16765 0.45014 0.54651 - 0.12959 0.09254 12.90670 0.56819 0.34024 0.19659 0.47636 0.57230 - 0.13183 0.09355 13.22581 0.59068 0.36410 0.22204 0.49943 0.59500 - 0.13388 0.09446 13.50045 0.61117 0.38584 0.24521 0.52046 0.61568 - 0.13649 0.09562 13.82454 0.63693 0.41317 0.27433 0.54689 0.64168 - 0.13893 0.09670 14.10509 0.66085 0.43856 0.30136 0.57144 0.66584 - 0.14122 0.09770 14.34722 0.68296 0.46203 0.32635 0.59413 0.68817 - 0.14351 0.09869 14.56976 0.70473 0.48516 0.35097 0.61649 0.71016 - 0.14575 0.09965 14.76917 0.72569 0.50744 0.37469 0.63801 0.73133 - 0.14786 0.10055 14.94168 0.74519 0.52818 0.39678 0.65804 0.75103 - 0.14984 0.10140 15.09034 0.76324 0.54740 0.41725 0.67660 0.76927 - 0.15184 0.10224 15.22641 0.78106 0.56638 0.43747 0.69491 0.78727 - 0.15379 0.10306 15.34771 0.79824 0.58471 0.45700 0.71259 0.80465 - 0.15564 0.10383 15.45190 0.81427 0.60182 0.47524 0.72908 0.82085 - 0.15739 0.10456 15.54071 0.82914 0.61771 0.49219 0.74439 0.83589 - 0.15915 0.10528 15.62112 0.84385 0.63344 0.50898 0.75954 0.85076 - 0.16088 0.10600 15.69156 0.85807 0.64867 0.52525 0.77419 0.86515 - 0.16253 0.10667 15.75087 0.87136 0.66292 0.54048 0.78790 0.87860 - 0.16409 0.10730 15.80023 0.88372 0.67619 0.55467 0.80065 0.89111 - 0.16566 0.10794 15.84351 0.89597 0.68936 0.56876 0.81330 0.90351 - 0.10429 0.08154 3.69957 0.20962 0.00000 0.00000 0.11201 0.21117 - 0.10609 0.08245 4.18419 0.22018 0.00000 0.00000 0.12308 0.22188 - 0.10888 0.08383 4.89517 0.23725 0.00000 0.00000 0.14094 0.23920 - 0.11100 0.08488 5.38772 0.25068 0.01385 0.00000 0.15494 0.25281 - 0.11329 0.08599 5.89404 0.26557 0.03021 0.00000 0.17046 0.26791 - 0.11532 0.08697 6.32076 0.27898 0.04490 0.00000 0.18441 0.28150 - 0.11729 0.08792 6.72041 0.29229 0.05943 0.00000 0.19824 0.29499 - 0.11942 0.08893 7.13347 0.30683 0.07528 0.00000 0.21334 0.30973 - 0.12130 0.08982 7.48261 0.31978 0.08937 0.00000 0.22677 0.32286 - 0.12313 0.09067 7.81053 0.33253 0.10321 0.00000 0.23998 0.33577 - 0.12459 0.09135 8.06376 0.34277 0.11432 0.00000 0.25060 0.34615 - 0.12772 0.09279 8.58375 0.36498 0.13838 0.00000 0.27360 0.36866 - 0.13045 0.09404 8.97644 0.38443 0.15941 0.02143 0.29372 0.38837 - 0.13350 0.09541 9.38716 0.40637 0.18309 0.04714 0.31641 0.41061 - 0.13667 0.09683 9.78467 0.42927 0.20779 0.07388 0.34008 0.43381 - 0.13955 0.09810 10.11926 0.45002 0.23016 0.09806 0.36153 0.45486 - 0.14245 0.09936 10.43206 0.47088 0.25262 0.12230 0.38308 0.47600 - 0.14484 0.10040 10.67307 0.48806 0.27113 0.14226 0.40084 0.49342 - 0.14774 0.10165 10.94309 0.50870 0.29336 0.16622 0.42217 0.51435 - 0.15030 0.10274 11.16231 0.52674 0.31280 0.18715 0.44081 0.53264 - 0.15264 0.10373 11.34748 0.54307 0.33040 0.20609 0.45769 0.54920 - 0.15559 0.10497 11.56124 0.56344 0.35238 0.22975 0.47875 0.56987 - 0.15836 0.10612 11.74144 0.58221 0.37265 0.25157 0.49818 0.58892 - 0.16094 0.10719 11.89268 0.59943 0.39128 0.27162 0.51601 0.60641 - 0.16350 0.10824 12.02751 0.61627 0.40951 0.29125 0.53345 0.62350 - 0.16601 0.10926 12.14422 0.63237 0.42696 0.31005 0.55014 0.63985 - 0.16836 0.11021 12.24135 0.64724 0.44311 0.32746 0.56556 0.65496 - 0.17057 0.11110 12.32156 0.66092 0.45798 0.34351 0.57976 0.66886 - 0.17278 0.11198 12.39145 0.67433 0.47259 0.35928 0.59369 0.68249 - 0.17494 0.11284 12.45019 0.68719 0.48662 0.37444 0.60706 0.69557 - 0.17698 0.11365 12.49723 0.69910 0.49965 0.38853 0.61945 0.70768 - 0.17890 0.11441 12.53406 0.71008 0.51168 0.40156 0.63089 0.71886 - 0.18083 0.11516 12.56409 0.72088 0.52354 0.41441 0.64215 0.72985 - 0.18272 0.11590 12.58682 0.73126 0.53496 0.42679 0.65298 0.74042 - 0.18452 0.11659 12.60248 0.74091 0.54559 0.43834 0.66305 0.75024 - 0.18621 0.11724 12.61208 0.74982 0.55544 0.44905 0.67237 0.75932 - 0.18792 0.11790 12.61676 0.75860 0.56516 0.45964 0.68157 0.76828 - 0.11516 0.08775 3.60145 0.20186 0.00000 0.00000 0.10808 0.20409 - 0.11724 0.08875 4.03363 0.21191 0.00000 0.00000 0.11865 0.21434 - 0.12046 0.09027 4.66142 0.22795 0.00000 0.00000 0.13549 0.23069 - 0.12290 0.09141 5.09060 0.24041 0.01295 0.00000 0.14854 0.24339 - 0.12552 0.09263 5.52769 0.25411 0.02813 0.00000 0.16287 0.25734 - 0.12784 0.09370 5.89289 0.26634 0.04165 0.00000 0.17566 0.26980 - 0.13010 0.09473 6.23224 0.27839 0.05495 0.00000 0.18825 0.28207 - 0.13252 0.09583 6.58015 0.29147 0.06935 0.00000 0.20190 0.29539 - 0.13465 0.09679 6.87195 0.30304 0.08208 0.00000 0.21397 0.30718 - 0.13673 0.09772 7.14403 0.31436 0.09452 0.00000 0.22577 0.31871 - 0.13838 0.09845 7.35277 0.32342 0.10446 0.00000 0.23521 0.32794 - 0.14192 0.10001 7.77754 0.34293 0.12586 0.00000 0.25554 0.34782 - 0.14499 0.10135 8.09133 0.35989 0.14443 0.01904 0.27320 0.36509 - 0.14841 0.10283 8.41481 0.37887 0.16520 0.04174 0.29296 0.38443 - 0.15196 0.10434 8.72301 0.39853 0.18670 0.06520 0.31342 0.40445 - 0.15516 0.10570 8.97820 0.41622 0.20604 0.08627 0.33183 0.42248 - 0.15838 0.10705 9.21274 0.43387 0.22534 0.10727 0.35020 0.44046 - 0.16103 0.10815 9.39042 0.44832 0.24115 0.12447 0.36524 0.45519 - 0.16423 0.10947 9.58579 0.46556 0.26003 0.14499 0.38321 0.47277 - 0.16704 0.11062 9.74106 0.48054 0.27645 0.16283 0.39881 0.48804 - 0.16960 0.11166 9.86940 0.49401 0.29123 0.17890 0.41286 0.50179 - 0.17283 0.11296 10.01368 0.51072 0.30959 0.19886 0.43029 0.51883 - 0.17584 0.11416 10.13130 0.52601 0.32643 0.21717 0.44626 0.53444 - 0.17865 0.11527 10.22639 0.53994 0.34180 0.23391 0.46082 0.54866 - 0.18143 0.11637 10.30753 0.55348 0.35677 0.25021 0.47499 0.56249 - 0.18413 0.11742 10.37408 0.56634 0.37102 0.26575 0.48845 0.57563 - 0.18666 0.11840 10.42593 0.57814 0.38414 0.28007 0.50083 0.58769 - 0.18903 0.11932 10.46541 0.58893 0.39617 0.29321 0.51216 0.59873 - 0.19139 0.12022 10.49626 0.59945 0.40792 0.30607 0.52322 0.60949 - 0.19370 0.12110 10.51846 0.60947 0.41915 0.31838 0.53377 0.61975 - 0.19587 0.12192 10.53243 0.61870 0.42952 0.32976 0.54350 0.62920 - 0.19791 0.12269 10.53949 0.62716 0.43906 0.34025 0.55243 0.63787 - 0.19996 0.12345 10.54092 0.63543 0.44842 0.35055 0.56118 0.64635 - 0.20196 0.12420 10.53687 0.64334 0.45739 0.36044 0.56955 0.65446 - 0.20385 0.12490 10.52826 0.65063 0.46571 0.36963 0.57729 0.66195 - 0.20564 0.12555 10.51599 0.65734 0.47337 0.37811 0.58442 0.66883 - 0.20743 0.12621 10.49969 0.66391 0.48092 0.38647 0.59141 0.67559 - 0.13544 0.09844 3.47242 0.19046 0.00000 0.00000 0.10242 0.19430 - 0.13801 0.09958 3.82799 0.19968 0.00000 0.00000 0.11219 0.20380 - 0.14197 0.10133 4.33605 0.21410 0.00000 0.00000 0.12746 0.21865 - 0.14496 0.10264 4.67532 0.22508 0.01163 0.00000 0.13909 0.22997 - 0.14817 0.10404 5.01532 0.23698 0.02507 0.00000 0.15166 0.24222 - 0.15098 0.10525 5.29515 0.24746 0.03690 0.00000 0.16274 0.25302 - 0.15371 0.10642 5.55158 0.25766 0.04841 0.00000 0.17352 0.26352 - 0.15664 0.10767 5.81073 0.26861 0.06075 0.00000 0.18508 0.27480 - 0.15920 0.10875 6.02503 0.27820 0.07155 0.00000 0.19521 0.28467 - 0.16169 0.10979 6.22221 0.28749 0.08202 0.00000 0.20502 0.29424 - 0.16366 0.11062 6.37167 0.29486 0.09033 0.00000 0.21281 0.30184 - 0.16787 0.11236 6.67067 0.31058 0.10803 0.00000 0.22941 0.31803 - 0.17149 0.11385 6.88158 0.32406 0.12321 0.01576 0.24364 0.33191 - 0.17550 0.11548 7.09255 0.33895 0.13999 0.03436 0.25937 0.34726 - 0.17964 0.11714 7.28694 0.35418 0.15717 0.05336 0.27546 0.36295 - 0.18335 0.11862 7.44210 0.36770 0.17244 0.07025 0.28977 0.37689 - 0.18705 0.12008 7.57916 0.38103 0.18752 0.08692 0.30387 0.39063 - 0.19009 0.12126 7.67874 0.39183 0.19976 0.10045 0.31531 0.40177 - 0.19373 0.12268 7.78301 0.40457 0.21423 0.11646 0.32882 0.41491 - 0.19691 0.12390 7.86107 0.41550 0.22669 0.13025 0.34043 0.42620 - 0.19980 0.12500 7.92150 0.42524 0.23782 0.14257 0.35079 0.43625 - 0.20341 0.12636 7.98366 0.43717 0.25150 0.15775 0.36350 0.44858 - 0.20677 0.12762 8.02824 0.44796 0.26392 0.17154 0.37501 0.45973 - 0.20987 0.12877 8.05858 0.45767 0.27515 0.18404 0.38539 0.46977 - 0.21293 0.12990 8.07856 0.46698 0.28598 0.19612 0.39538 0.47942 - 0.21588 0.13098 8.08868 0.47573 0.29620 0.20753 0.40478 0.48848 - 0.21864 0.13198 8.09023 0.48366 0.30552 0.21796 0.41332 0.49670 - 0.22121 0.13290 8.08503 0.49083 0.31398 0.22746 0.42106 0.50414 - 0.22375 0.13381 8.07364 0.49773 0.32219 0.23669 0.42853 0.51131 - 0.22623 0.13469 8.05680 0.50422 0.32996 0.24546 0.43559 0.51806 - 0.22855 0.13550 8.03595 0.51014 0.33707 0.25351 0.44203 0.52421 - 0.23072 0.13626 8.01208 0.51549 0.34356 0.26088 0.44789 0.52979 - 0.23288 0.13701 7.98426 0.52066 0.34988 0.26806 0.45356 0.53519 - 0.23499 0.13773 7.95323 0.52554 0.35588 0.27491 0.45893 0.54028 - 0.23697 0.13841 7.92059 0.52999 0.36139 0.28123 0.46385 0.54493 - 0.23883 0.13904 7.88701 0.53403 0.36644 0.28703 0.46833 0.54915 - 0.24069 0.13967 7.85062 0.53794 0.37136 0.29270 0.47268 0.55324 - 0.16349 0.11198 3.35407 0.17825 0.00000 0.00000 0.09659 0.18496 - 0.16667 0.11331 3.63106 0.18647 0.00000 0.00000 0.10543 0.19357 - 0.17155 0.11533 4.01880 0.19904 0.00000 0.00000 0.11895 0.20674 - 0.17520 0.11684 4.26941 0.20840 0.01022 0.00000 0.12903 0.21656 - 0.17911 0.11843 4.51521 0.21836 0.02186 0.00000 0.13976 0.22700 - 0.18251 0.11982 4.71339 0.22700 0.03196 0.00000 0.14906 0.23606 - 0.18581 0.12114 4.89152 0.23528 0.04167 0.00000 0.15799 0.24475 - 0.18931 0.12255 5.06789 0.24405 0.05195 0.00000 0.16745 0.25395 - 0.19237 0.12376 5.21075 0.25164 0.06085 0.00000 0.17563 0.26190 - 0.19531 0.12492 5.33962 0.25890 0.06939 0.00000 0.18347 0.26952 - 0.19764 0.12584 5.43550 0.26461 0.07611 0.00000 0.18964 0.27551 - 0.20257 0.12776 5.62221 0.27661 0.09027 0.00000 0.20262 0.28811 - 0.20679 0.12938 5.74298 0.28673 0.10224 0.01265 0.21358 0.29873 - 0.21142 0.13115 5.85700 0.29774 0.11530 0.02740 0.22551 0.31029 - 0.21616 0.13294 5.95498 0.30879 0.12846 0.04227 0.23753 0.32191 - 0.22037 0.13451 6.02685 0.31846 0.14002 0.05534 0.24804 0.33206 - 0.22453 0.13604 6.08406 0.32783 0.15128 0.06808 0.25826 0.34191 - 0.22792 0.13728 6.12065 0.33530 0.16031 0.07831 0.26644 0.34977 - 0.23196 0.13874 6.15263 0.34399 0.17087 0.09030 0.27597 0.35892 - 0.23546 0.13999 6.17045 0.35133 0.17984 0.10051 0.28405 0.36665 - 0.23861 0.14111 6.17873 0.35777 0.18777 0.10955 0.29115 0.37344 - 0.24253 0.14249 6.17896 0.36554 0.19741 0.12056 0.29976 0.38163 - 0.24613 0.14374 6.16957 0.37242 0.20604 0.13046 0.30742 0.38890 - 0.24943 0.14487 6.15303 0.37851 0.21376 0.13934 0.31423 0.39534 - 0.25267 0.14597 6.12963 0.38424 0.22110 0.14783 0.32068 0.40141 - 0.25577 0.14701 6.10063 0.38952 0.22795 0.15577 0.32665 0.40701 - 0.25865 0.14796 6.06809 0.39422 0.23411 0.16296 0.33200 0.41200 - 0.26130 0.14883 6.03332 0.39838 0.23965 0.16945 0.33677 0.41643 - 0.26392 0.14968 5.99463 0.40230 0.24495 0.17569 0.34130 0.42062 - 0.26644 0.15049 5.95326 0.40592 0.24991 0.18156 0.34551 0.42449 - 0.26879 0.15124 5.91114 0.40915 0.25440 0.18690 0.34929 0.42794 - 0.27098 0.15192 5.86895 0.41200 0.25845 0.19175 0.35266 0.43100 - 0.27314 0.15259 5.82433 0.41469 0.26234 0.19643 0.35588 0.43390 - 0.27523 0.15324 5.77839 0.41717 0.26599 0.20086 0.35887 0.43658 - 0.27719 0.15383 5.73298 0.41937 0.26931 0.20490 0.36156 0.43896 - 0.27902 0.15438 5.68857 0.42132 0.27231 0.20858 0.36396 0.44107 - 0.28083 0.15492 5.64245 0.42315 0.27519 0.21215 0.36624 0.44306 - 0.20626 0.13108 3.22298 0.16319 0.00000 0.00000 0.08984 0.17543 - 0.21021 0.13263 3.41340 0.17008 0.00000 0.00000 0.09746 0.18286 - 0.21620 0.13497 3.67174 0.18031 0.00000 0.00000 0.10881 0.19390 - 0.22066 0.13668 3.82927 0.18772 0.00858 0.00000 0.11705 0.20190 - 0.22538 0.13849 3.97810 0.19542 0.01818 0.00000 0.12563 0.21021 - 0.22947 0.14005 4.09377 0.20194 0.02636 0.00000 0.13293 0.21727 - 0.23339 0.14153 4.19402 0.20808 0.03410 0.00000 0.13982 0.22392 - 0.23754 0.14308 4.28935 0.21446 0.04217 0.00000 0.14698 0.23082 - 0.24112 0.14440 4.36333 0.21987 0.04907 0.00000 0.15308 0.23669 - 0.24454 0.14566 4.42721 0.22497 0.05560 0.00000 0.15884 0.24221 - 0.24723 0.14665 4.47272 0.22892 0.06068 0.00000 0.16332 0.24650 - 0.25289 0.14869 4.55561 0.23707 0.07122 0.00000 0.17257 0.25533 - 0.25765 0.15039 4.59521 0.24377 0.07997 0.00952 0.18021 0.26260 - 0.26283 0.15222 4.62384 0.25089 0.08935 0.02046 0.18836 0.27032 - 0.26805 0.15403 4.63895 0.25784 0.09863 0.03130 0.19637 0.27787 - 0.27263 0.15559 4.64094 0.26376 0.10662 0.04067 0.20323 0.28430 - 0.27710 0.15710 4.63276 0.26936 0.11428 0.04968 0.20975 0.29037 - 0.28070 0.15829 4.61895 0.27371 0.12032 0.05681 0.21487 0.29511 - 0.28493 0.15967 4.59446 0.27864 0.12727 0.06505 0.22070 0.30047 - 0.28855 0.16083 4.56647 0.28268 0.13308 0.07198 0.22553 0.30488 - 0.29177 0.16185 4.53609 0.28614 0.13814 0.07803 0.22969 0.30865 - 0.29573 0.16308 4.49175 0.29017 0.14417 0.08531 0.23461 0.31306 - 0.29932 0.16418 4.44486 0.29361 0.14948 0.09175 0.23887 0.31684 - 0.30257 0.16515 4.39691 0.29654 0.15413 0.09744 0.24256 0.32006 - 0.30572 0.16607 4.34558 0.29919 0.15848 0.10281 0.24595 0.32298 - 0.30869 0.16692 4.29247 0.30151 0.16246 0.10777 0.24899 0.32556 - 0.31141 0.16769 4.23992 0.30348 0.16597 0.11219 0.25163 0.32775 - 0.31389 0.16837 4.18867 0.30514 0.16907 0.11612 0.25391 0.32961 - 0.31630 0.16902 4.13568 0.30661 0.17198 0.11986 0.25600 0.33127 - 0.31860 0.16962 4.08233 0.30789 0.17465 0.12333 0.25787 0.33271 - 0.32072 0.17017 4.03064 0.30894 0.17702 0.12645 0.25949 0.33391 - 0.32266 0.17065 3.98100 0.30979 0.17911 0.12923 0.26087 0.33490 - 0.32455 0.17112 3.93034 0.31052 0.18108 0.13189 0.26212 0.33576 - 0.32637 0.17155 3.87984 0.31112 0.18288 0.13437 0.26323 0.33647 - 0.32804 0.17193 3.83132 0.31158 0.18448 0.13660 0.26417 0.33703 - 0.32959 0.17228 3.78503 0.31191 0.18589 0.13861 0.26496 0.33745 - 0.33110 0.17261 3.73802 0.31216 0.18722 0.14053 0.26566 0.33778 - 0.24550 0.14770 3.11039 0.15093 0.00000 0.00000 0.08468 0.16914 - 0.24996 0.14937 3.24140 0.15674 0.00000 0.00000 0.09130 0.17555 - 0.25669 0.15187 3.41307 0.16515 0.00000 0.00000 0.10096 0.18487 - 0.26165 0.15370 3.50987 0.17110 0.00737 0.00000 0.10783 0.19147 - 0.26687 0.15560 3.59673 0.17716 0.01550 0.00000 0.11486 0.19819 - 0.27136 0.15722 3.66067 0.18219 0.02234 0.00000 0.12074 0.20379 - 0.27563 0.15874 3.71295 0.18684 0.02873 0.00000 0.12620 0.20897 - 0.28011 0.16032 3.75925 0.19159 0.03532 0.00000 0.13181 0.21426 - 0.28395 0.16167 3.79222 0.19555 0.04088 0.00000 0.13651 0.21867 - 0.28760 0.16293 3.81802 0.19923 0.04609 0.00000 0.14089 0.22277 - 0.29045 0.16391 3.83444 0.20204 0.05011 0.00000 0.14426 0.22591 - 0.29638 0.16591 3.85844 0.20771 0.05836 0.00000 0.15111 0.23224 - 0.30132 0.16755 3.85355 0.21227 0.06509 0.00754 0.15665 0.23732 - 0.30662 0.16928 3.83667 0.21698 0.07220 0.01610 0.16245 0.24258 - 0.31189 0.17095 3.80896 0.22146 0.07913 0.02447 0.16802 0.24758 - 0.31645 0.17237 3.77599 0.22516 0.08500 0.03162 0.17269 0.25170 - 0.32084 0.17370 3.73615 0.22855 0.09055 0.03840 0.17703 0.25548 - 0.32433 0.17474 3.69873 0.23110 0.09486 0.04372 0.18036 0.25833 - 0.32838 0.17591 3.64875 0.23390 0.09975 0.04979 0.18407 0.26146 - 0.33181 0.17687 3.60091 0.23610 0.10378 0.05483 0.18706 0.26392 - 0.33481 0.17769 3.55448 0.23791 0.10723 0.05919 0.18958 0.26595 - 0.33846 0.17866 3.49260 0.23992 0.11130 0.06437 0.19247 0.26820 - 0.34171 0.17949 3.43191 0.24152 0.11480 0.06891 0.19488 0.27001 - 0.34461 0.18020 3.37326 0.24279 0.11782 0.07286 0.19689 0.27144 - 0.34736 0.18085 3.31328 0.24383 0.12060 0.07655 0.19867 0.27263 - 0.34993 0.18142 3.25355 0.24465 0.12308 0.07991 0.20018 0.27358 - 0.35224 0.18192 3.19633 0.24525 0.12523 0.08287 0.20143 0.27427 - 0.35432 0.18234 3.14198 0.24566 0.12710 0.08548 0.20245 0.27476 - 0.35631 0.18272 3.08710 0.24594 0.12881 0.08793 0.20331 0.27510 - 0.35817 0.18306 3.03300 0.24607 0.13034 0.09017 0.20402 0.27529 - 0.35985 0.18334 2.98157 0.24609 0.13167 0.09216 0.20458 0.27534 - 0.36136 0.18357 2.93298 0.24600 0.13281 0.09392 0.20499 0.27527 - 0.36282 0.18377 2.88413 0.24582 0.13385 0.09557 0.20531 0.27511 - 0.36419 0.18395 2.83612 0.24556 0.13478 0.09709 0.20553 0.27485 - 0.36543 0.18408 2.79057 0.24523 0.13558 0.09844 0.20565 0.27451 - 0.36655 0.18419 2.74762 0.24484 0.13626 0.09964 0.20570 0.27412 - 0.36762 0.18427 2.70447 0.24439 0.13687 0.10077 0.20567 0.27365 - 0.31575 0.17622 2.87346 0.13024 0.00000 0.00000 0.07635 0.16005 - 0.32066 0.17791 2.92594 0.13436 0.00000 0.00000 0.08137 0.16472 - 0.32798 0.18038 2.98621 0.14008 0.00000 0.00000 0.08843 0.17122 - 0.33329 0.18215 3.00748 0.14394 0.00561 0.00000 0.09328 0.17562 - 0.33881 0.18395 3.01923 0.14772 0.01165 0.00000 0.09809 0.17993 - 0.34347 0.18545 3.02197 0.15074 0.01663 0.00000 0.10199 0.18338 - 0.34784 0.18683 3.01871 0.15343 0.02120 0.00000 0.10552 0.18645 - 0.35236 0.18823 3.00948 0.15607 0.02581 0.00000 0.10904 0.18946 - 0.35617 0.18939 2.99706 0.15818 0.02964 0.00000 0.11191 0.19187 - 0.35974 0.19045 2.98155 0.16008 0.03316 0.00000 0.11452 0.19403 - 0.36249 0.19125 2.96697 0.16148 0.03584 0.00000 0.11648 0.19562 - 0.36809 0.19283 2.92993 0.16418 0.04123 0.00000 0.12033 0.19866 - 0.37262 0.19406 2.88140 0.16620 0.04552 0.00509 0.12332 0.20092 - 0.37735 0.19528 2.82179 0.16815 0.04993 0.01074 0.12631 0.20308 - 0.38190 0.19638 2.75587 0.16983 0.05412 0.01617 0.12904 0.20492 - 0.38570 0.19724 2.69341 0.17109 0.05757 0.02070 0.13120 0.20626 - 0.38924 0.19798 2.62850 0.17210 0.06074 0.02492 0.13309 0.20731 - 0.39196 0.19850 2.57362 0.17275 0.06315 0.02816 0.13446 0.20797 - 0.39501 0.19902 2.50627 0.17334 0.06581 0.03180 0.13587 0.20852 - 0.39748 0.19938 2.44631 0.17367 0.06794 0.03477 0.13692 0.20879 - 0.39957 0.19965 2.39124 0.17384 0.06971 0.03729 0.13772 0.20888 - 0.40198 0.19989 2.32156 0.17386 0.07174 0.04023 0.13852 0.20877 - 0.40403 0.20001 2.25651 0.17370 0.07342 0.04275 0.13907 0.20847 - 0.40576 0.20006 2.19617 0.17341 0.07481 0.04490 0.13943 0.20801 - 0.40730 0.20003 2.13661 0.17299 0.07603 0.04686 0.13963 0.20741 - 0.40865 0.19993 2.07916 0.17245 0.07708 0.04861 0.13969 0.20668 - 0.40978 0.19978 2.02566 0.17185 0.07795 0.05012 0.13964 0.20587 - 0.41071 0.19959 1.97608 0.17119 0.07865 0.05142 0.13949 0.20502 - 0.41153 0.19935 1.92714 0.17045 0.07926 0.05261 0.13925 0.20407 - 0.41222 0.19907 1.87988 0.16966 0.07977 0.05368 0.13893 0.20305 - 0.41278 0.19877 1.83581 0.16884 0.08017 0.05460 0.13857 0.20202 - 0.41322 0.19844 1.79488 0.16802 0.08049 0.05540 0.13816 0.20098 - 0.41357 0.19808 1.75438 0.16714 0.08074 0.05612 0.13769 0.19989 - 0.41384 0.19770 1.71519 0.16624 0.08093 0.05677 0.13718 0.19875 - 0.41402 0.19730 1.67853 0.16533 0.08106 0.05733 0.13665 0.19763 - 0.41413 0.19690 1.64440 0.16444 0.08114 0.05781 0.13610 0.19653 - 0.41418 0.19647 1.61053 0.16351 0.08118 0.05824 0.13552 0.19538 - 0.37659 0.19991 2.60936 0.11277 0.00000 0.00000 0.06930 0.15219 - 0.38140 0.20137 2.61342 0.11567 0.00000 0.00000 0.07305 0.15537 - 0.38844 0.20345 2.60732 0.11951 0.00000 0.00000 0.07817 0.15957 - 0.39345 0.20489 2.58571 0.12198 0.00433 0.00000 0.08157 0.16226 - 0.39857 0.20631 2.55628 0.12428 0.00892 0.00000 0.08483 0.16474 - 0.40282 0.20744 2.52658 0.12603 0.01264 0.00000 0.08740 0.16661 - 0.40674 0.20845 2.49484 0.12752 0.01599 0.00000 0.08965 0.16817 - 0.41071 0.20943 2.45810 0.12890 0.01933 0.00000 0.09183 0.16958 - 0.41398 0.21019 2.42396 0.12994 0.02205 0.00000 0.09355 0.17063 - 0.41699 0.21086 2.38936 0.13082 0.02453 0.00000 0.09506 0.17147 - 0.41926 0.21133 2.36092 0.13142 0.02639 0.00000 0.09617 0.17204 - 0.42375 0.21219 2.29786 0.13249 0.03007 0.00000 0.09825 0.17295 - 0.42724 0.21276 2.23297 0.13316 0.03293 0.00359 0.09976 0.17344 - 0.43073 0.21322 2.15899 0.13367 0.03581 0.00753 0.10117 0.17369 - 0.43389 0.21350 2.08194 0.13396 0.03848 0.01124 0.10235 0.17365 - 0.43637 0.21360 2.01244 0.13403 0.04062 0.01429 0.10317 0.17337 - 0.43852 0.21356 1.94309 0.13392 0.04255 0.01709 0.10380 0.17288 - 0.44005 0.21343 1.88635 0.13370 0.04397 0.01921 0.10417 0.17233 - 0.44161 0.21315 1.81877 0.13330 0.04550 0.02155 0.10445 0.17149 - 0.44275 0.21280 1.76024 0.13283 0.04669 0.02343 0.10456 0.17061 - 0.44358 0.21241 1.70771 0.13231 0.04766 0.02500 0.10455 0.16969 - 0.44439 0.21181 1.64276 0.13153 0.04871 0.02681 0.10440 0.16840 - 0.44490 0.21115 1.58349 0.13069 0.04955 0.02832 0.10413 0.16706 - 0.44517 0.21046 1.52960 0.12982 0.05022 0.02959 0.10378 0.16571 - 0.44524 0.20970 1.47735 0.12887 0.05077 0.03073 0.10333 0.16427 - 0.44514 0.20889 1.42781 0.12788 0.05120 0.03173 0.10280 0.16279 - 0.44489 0.20807 1.38237 0.12688 0.05153 0.03257 0.10224 0.16132 - 0.44452 0.20724 1.34082 0.12590 0.05177 0.03327 0.10165 0.15989 - 0.44403 0.20637 1.30033 0.12487 0.05195 0.03391 0.10101 0.15841 - 0.44343 0.20548 1.26171 0.12382 0.05206 0.03446 0.10034 0.15692 - 0.44276 0.20459 1.22608 0.12280 0.05212 0.03493 0.09966 0.15547 - 0.44204 0.20373 1.19333 0.12180 0.05214 0.03532 0.09899 0.15407 - 0.44123 0.20282 1.16123 0.12078 0.05212 0.03566 0.09828 0.15263 - 0.44034 0.20190 1.13046 0.11975 0.05206 0.03596 0.09756 0.15120 - 0.43943 0.20100 1.10192 0.11875 0.05197 0.03620 0.09684 0.14981 - 0.43850 0.20013 1.07556 0.11779 0.05186 0.03640 0.09615 0.14848 - 0.43750 0.19922 1.04960 0.11681 0.05173 0.03657 0.09543 0.14712 - 0.42899 0.21940 2.32960 0.09795 0.00000 0.00000 0.06296 0.14403 - 0.43325 0.22044 2.30344 0.09995 0.00000 0.00000 0.06570 0.14594 - 0.43936 0.22185 2.25740 0.10247 0.00000 0.00000 0.06932 0.14824 - 0.44362 0.22276 2.21146 0.10399 0.00336 0.00000 0.07163 0.14955 - 0.44785 0.22359 2.15965 0.10532 0.00687 0.00000 0.07377 0.15060 - 0.45128 0.22419 2.11309 0.10625 0.00968 0.00000 0.07539 0.15125 - 0.45435 0.22467 2.06717 0.10697 0.01217 0.00000 0.07676 0.15167 - 0.45737 0.22506 2.01741 0.10757 0.01462 0.00000 0.07802 0.15191 - 0.45979 0.22531 1.97357 0.10796 0.01660 0.00000 0.07897 0.15196 - 0.46192 0.22546 1.93092 0.10823 0.01837 0.00000 0.07976 0.15187 - 0.46347 0.22552 1.89699 0.10838 0.01968 0.00000 0.08031 0.15172 - 0.46638 0.22547 1.82460 0.10851 0.02224 0.00000 0.08126 0.15117 - 0.46845 0.22525 1.75589 0.10844 0.02420 0.00260 0.08187 0.15048 - 0.47028 0.22482 1.68008 0.10818 0.02613 0.00542 0.08233 0.14949 - 0.47169 0.22417 1.60342 0.10775 0.02787 0.00803 0.08259 0.14826 - 0.47255 0.22343 1.53604 0.10722 0.02924 0.01015 0.08266 0.14698 - 0.47304 0.22254 1.47028 0.10656 0.03044 0.01207 0.08258 0.14556 - 0.47319 0.22170 1.41749 0.10594 0.03130 0.01350 0.08241 0.14430 - 0.47306 0.22058 1.35571 0.10510 0.03221 0.01507 0.08210 0.14266 - 0.47269 0.21950 1.30310 0.10429 0.03289 0.01631 0.08173 0.14114 - 0.47215 0.21843 1.25656 0.10348 0.03342 0.01733 0.08132 0.13969 - 0.47121 0.21700 1.19986 0.10240 0.03398 0.01849 0.08072 0.13778 - 0.47008 0.21556 1.14888 0.10131 0.03439 0.01945 0.08007 0.13592 - 0.46881 0.21415 1.10315 0.10025 0.03469 0.02023 0.07940 0.13414 - 0.46737 0.21268 1.05934 0.09915 0.03492 0.02093 0.07868 0.13231 - 0.46579 0.21119 1.01827 0.09803 0.03507 0.02152 0.07792 0.13050 - 0.46415 0.20974 0.98100 0.09695 0.03516 0.02201 0.07717 0.12875 - 0.46248 0.20833 0.94724 0.09590 0.03520 0.02242 0.07643 0.12710 - 0.46070 0.20688 0.91463 0.09484 0.03520 0.02277 0.07566 0.12542 - 0.45884 0.20543 0.88379 0.09377 0.03516 0.02307 0.07488 0.12375 - 0.45698 0.20402 0.85556 0.09275 0.03509 0.02332 0.07412 0.12217 - 0.45514 0.20266 0.82980 0.09177 0.03500 0.02351 0.07339 0.12066 - 0.45322 0.20128 0.80472 0.09078 0.03488 0.02368 0.07264 0.11914 - 0.45125 0.19989 0.78084 0.08979 0.03474 0.02381 0.07188 0.11764 - 0.44931 0.19855 0.75882 0.08884 0.03459 0.02392 0.07116 0.11620 - 0.44742 0.19727 0.73860 0.08794 0.03444 0.02400 0.07046 0.11485 - 0.44546 0.19596 0.71880 0.08703 0.03427 0.02406 0.06975 0.11347 - 0.48358 0.23832 1.97927 0.08278 0.00000 0.00000 0.05575 0.13278 - 0.48671 0.23865 1.93200 0.08399 0.00000 0.00000 0.05751 0.13337 - 0.49101 0.23896 1.85956 0.08538 0.00000 0.00000 0.05972 0.13377 - 0.49385 0.23902 1.79920 0.08612 0.00245 0.00000 0.06103 0.13374 - 0.49651 0.23893 1.73520 0.08666 0.00497 0.00000 0.06217 0.13342 - 0.49851 0.23872 1.68030 0.08696 0.00695 0.00000 0.06296 0.13295 - 0.50018 0.23840 1.62812 0.08710 0.00869 0.00000 0.06357 0.13233 - 0.50165 0.23793 1.57345 0.08713 0.01037 0.00000 0.06407 0.13152 - 0.50268 0.23743 1.52665 0.08705 0.01170 0.00000 0.06439 0.13071 - 0.50346 0.23685 1.48221 0.08689 0.01288 0.00000 0.06460 0.12983 - 0.50392 0.23633 1.44756 0.08672 0.01374 0.00000 0.06471 0.12907 - 0.50446 0.23504 1.37545 0.08622 0.01540 0.00000 0.06479 0.12732 - 0.50444 0.23376 1.31044 0.08566 0.01663 0.00177 0.06471 0.12568 - 0.50394 0.23215 1.24048 0.08493 0.01782 0.00366 0.06448 0.12374 - 0.50291 0.23030 1.17136 0.08407 0.01887 0.00539 0.06410 0.12162 - 0.50157 0.22849 1.11186 0.08320 0.01967 0.00677 0.06365 0.11964 - 0.49985 0.22654 1.05488 0.08226 0.02034 0.00801 0.06312 0.11758 - 0.49818 0.22485 1.00986 0.08144 0.02081 0.00892 0.06261 0.11585 - 0.49586 0.22271 0.95798 0.08040 0.02128 0.00990 0.06194 0.11372 - 0.49358 0.22075 0.91445 0.07944 0.02162 0.01066 0.06130 0.11182 - 0.49131 0.21890 0.87643 0.07854 0.02187 0.01128 0.06067 0.11006 - 0.48819 0.21650 0.83071 0.07736 0.02211 0.01198 0.05983 0.10782 - 0.48506 0.21418 0.79016 0.07622 0.02227 0.01254 0.05901 0.10571 - 0.48195 0.21196 0.75421 0.07514 0.02236 0.01299 0.05821 0.10373 - 0.47869 0.20971 0.72016 0.07403 0.02241 0.01338 0.05738 0.10176 - 0.47536 0.20747 0.68857 0.07295 0.02241 0.01371 0.05655 0.09984 - 0.47210 0.20534 0.66018 0.07191 0.02238 0.01397 0.05576 0.09803 - 0.46893 0.20330 0.63469 0.07092 0.02232 0.01418 0.05500 0.09633 - 0.46567 0.20124 0.61026 0.06993 0.02224 0.01436 0.05422 0.09464 - 0.46237 0.19920 0.58734 0.06895 0.02214 0.01451 0.05346 0.09299 - 0.45918 0.19725 0.56651 0.06802 0.02202 0.01462 0.05273 0.09143 - 0.45610 0.19540 0.54764 0.06714 0.02190 0.01470 0.05203 0.08997 - 0.45295 0.19352 0.52937 0.06626 0.02176 0.01477 0.05133 0.08851 - 0.44978 0.19166 0.51208 0.06538 0.02162 0.01482 0.05064 0.08708 - 0.44673 0.18989 0.49623 0.06455 0.02147 0.01485 0.04998 0.08573 - 0.44380 0.18820 0.48175 0.06377 0.02132 0.01487 0.04935 0.08446 - 0.44080 0.18649 0.46764 0.06298 0.02116 0.01487 0.04871 0.08319 - 0.52690 0.25158 1.64716 0.07091 0.00000 0.00000 0.04920 0.12032 - 0.52855 0.25107 1.59099 0.07158 0.00000 0.00000 0.05023 0.11990 - 0.53053 0.25009 1.50883 0.07223 0.00000 0.00000 0.05141 0.11888 - 0.53160 0.24918 1.44497 0.07246 0.00178 0.00000 0.05202 0.11787 - 0.53234 0.24806 1.37924 0.07253 0.00358 0.00000 0.05247 0.11660 - 0.53266 0.24696 1.32422 0.07244 0.00498 0.00000 0.05271 0.11535 - 0.53266 0.24578 1.27298 0.07225 0.00619 0.00000 0.05283 0.11404 - 0.53236 0.24440 1.22030 0.07195 0.00735 0.00000 0.05283 0.11255 - 0.53182 0.24310 1.17598 0.07161 0.00826 0.00000 0.05276 0.11118 - 0.53108 0.24176 1.13450 0.07123 0.00905 0.00000 0.05262 0.10981 - 0.53033 0.24065 1.10256 0.07089 0.00962 0.00000 0.05247 0.10869 - 0.52829 0.23811 1.03716 0.07008 0.01070 0.00000 0.05205 0.10624 - 0.52608 0.23578 0.98001 0.06930 0.01149 0.00122 0.05159 0.10408 - 0.52313 0.23302 0.91955 0.06836 0.01223 0.00251 0.05099 0.10163 - 0.51961 0.23003 0.86081 0.06732 0.01286 0.00368 0.05028 0.09908 - 0.51605 0.22722 0.81100 0.06633 0.01333 0.00460 0.04959 0.09677 - 0.51214 0.22430 0.76394 0.06530 0.01372 0.00541 0.04885 0.09446 - 0.50869 0.22183 0.72720 0.06443 0.01397 0.00600 0.04821 0.09255 - 0.50427 0.21879 0.68534 0.06335 0.01422 0.00663 0.04740 0.09026 - 0.50017 0.21606 0.65060 0.06238 0.01438 0.00712 0.04666 0.08826 - 0.49627 0.21353 0.62055 0.06148 0.01450 0.00751 0.04598 0.08644 - 0.49115 0.21030 0.58476 0.06033 0.01459 0.00794 0.04509 0.08417 - 0.48618 0.20724 0.55335 0.05924 0.01463 0.00828 0.04424 0.08206 - 0.48140 0.20436 0.52575 0.05822 0.01463 0.00855 0.04344 0.08012 - 0.47652 0.20147 0.49982 0.05719 0.01461 0.00878 0.04263 0.07821 - 0.47166 0.19864 0.47596 0.05619 0.01456 0.00897 0.04184 0.07637 - 0.46698 0.19596 0.45467 0.05524 0.01449 0.00912 0.04110 0.07466 - 0.46251 0.19343 0.43568 0.05436 0.01441 0.00923 0.04039 0.07307 - 0.45797 0.19090 0.41759 0.05347 0.01432 0.00933 0.03969 0.07150 - 0.45347 0.18841 0.40072 0.05260 0.01421 0.00940 0.03900 0.06998 - 0.44915 0.18606 0.38546 0.05178 0.01410 0.00945 0.03834 0.06856 - 0.44504 0.18383 0.37171 0.05100 0.01399 0.00949 0.03773 0.06724 - 0.44087 0.18160 0.35846 0.05023 0.01387 0.00951 0.03711 0.06592 - 0.43674 0.17940 0.34598 0.04948 0.01375 0.00952 0.03651 0.06465 - 0.43278 0.17731 0.33458 0.04876 0.01362 0.00953 0.03594 0.06345 - 0.42901 0.17534 0.32421 0.04809 0.01350 0.00952 0.03540 0.06234 - 0.42518 0.17335 0.31413 0.04741 0.01337 0.00951 0.03487 0.06122 - 0.55983 0.25963 1.34564 0.06180 0.00000 0.00000 0.04323 0.10700 - 0.55977 0.25822 1.28828 0.06208 0.00000 0.00000 0.04372 0.10586 - 0.55913 0.25587 1.20657 0.06222 0.00000 0.00000 0.04417 0.10386 - 0.55823 0.25396 1.14554 0.06212 0.00128 0.00000 0.04430 0.10219 - 0.55686 0.25178 1.08393 0.06187 0.00257 0.00000 0.04429 0.10029 - 0.55533 0.24977 1.03320 0.06155 0.00356 0.00000 0.04416 0.09855 - 0.55356 0.24772 0.98662 0.06115 0.00440 0.00000 0.04396 0.09682 - 0.55137 0.24544 0.93936 0.06066 0.00520 0.00000 0.04366 0.09493 - 0.54920 0.24337 0.90009 0.06018 0.00581 0.00000 0.04335 0.09325 - 0.54689 0.24130 0.86373 0.05967 0.00635 0.00000 0.04300 0.09162 - 0.54490 0.23962 0.83598 0.05924 0.00673 0.00000 0.04271 0.09031 - 0.54026 0.23590 0.77982 0.05827 0.00743 0.00000 0.04200 0.08753 - 0.53584 0.23259 0.73182 0.05738 0.00794 0.00085 0.04135 0.08514 - 0.53051 0.22880 0.68171 0.05635 0.00840 0.00174 0.04057 0.08251 - 0.52458 0.22478 0.63364 0.05524 0.00879 0.00254 0.03972 0.07984 - 0.51892 0.22110 0.59335 0.05422 0.00907 0.00316 0.03893 0.07747 - 0.51296 0.21735 0.55569 0.05318 0.00929 0.00370 0.03812 0.07513 - 0.50787 0.21422 0.52657 0.05231 0.00943 0.00410 0.03745 0.07324 - 0.50153 0.21042 0.49367 0.05125 0.00956 0.00451 0.03662 0.07100 - 0.49579 0.20706 0.46661 0.05032 0.00963 0.00483 0.03588 0.06907 - 0.49044 0.20399 0.44338 0.04946 0.00968 0.00508 0.03521 0.06734 - 0.48356 0.20010 0.41592 0.04837 0.00970 0.00536 0.03436 0.06520 - 0.47699 0.19646 0.39201 0.04735 0.00969 0.00557 0.03356 0.06324 - 0.47078 0.19306 0.37115 0.04641 0.00967 0.00574 0.03282 0.06145 - 0.46452 0.18969 0.35168 0.04547 0.00962 0.00588 0.03208 0.05971 - 0.45837 0.18642 0.33387 0.04455 0.00956 0.00600 0.03137 0.05805 - 0.45251 0.18334 0.31807 0.04370 0.00949 0.00608 0.03070 0.05652 - 0.44698 0.18047 0.30404 0.04290 0.00942 0.00615 0.03008 0.05511 - 0.44142 0.17760 0.29075 0.04211 0.00933 0.00620 0.02947 0.05373 - 0.43594 0.17481 0.27840 0.04134 0.00924 0.00624 0.02887 0.05240 - 0.43073 0.17217 0.26728 0.04061 0.00915 0.00626 0.02830 0.05117 - 0.42581 0.16970 0.25729 0.03993 0.00906 0.00628 0.02778 0.05003 - 0.42085 0.16723 0.24770 0.03926 0.00897 0.00628 0.02726 0.04890 - 0.41596 0.16482 0.23869 0.03860 0.00887 0.00628 0.02675 0.04781 - 0.41131 0.16253 0.23049 0.03797 0.00877 0.00628 0.02627 0.04679 - 0.40690 0.16038 0.22304 0.03739 0.00868 0.00626 0.02582 0.04584 - 0.40246 0.15823 0.21583 0.03681 0.00858 0.00625 0.02537 0.04491 - 0.58321 0.26294 1.08077 0.05486 0.00000 0.00000 0.03781 0.09333 - 0.58131 0.26062 1.02685 0.05486 0.00000 0.00000 0.03791 0.09172 - 0.57788 0.25692 0.95148 0.05461 0.00000 0.00000 0.03785 0.08910 - 0.57491 0.25403 0.89669 0.05428 0.00092 0.00000 0.03765 0.08705 - 0.57135 0.25082 0.84218 0.05381 0.00184 0.00000 0.03733 0.08480 - 0.56794 0.24794 0.79785 0.05332 0.00253 0.00000 0.03698 0.08281 - 0.56438 0.24508 0.75758 0.05279 0.00311 0.00000 0.03658 0.08087 - 0.56029 0.24196 0.71716 0.05217 0.00366 0.00000 0.03611 0.07881 - 0.55650 0.23917 0.68389 0.05160 0.00408 0.00000 0.03566 0.07701 - 0.55264 0.23643 0.65333 0.05101 0.00444 0.00000 0.03520 0.07528 - 0.54945 0.23423 0.63019 0.05053 0.00469 0.00000 0.03482 0.07392 - 0.54230 0.22947 0.58378 0.04947 0.00515 0.00000 0.03399 0.07107 - 0.53579 0.22530 0.54476 0.04852 0.00548 0.00060 0.03325 0.06867 - 0.52822 0.22062 0.50445 0.04745 0.00577 0.00122 0.03240 0.06607 - 0.52007 0.21574 0.46618 0.04632 0.00601 0.00177 0.03152 0.06347 - 0.51249 0.21133 0.43442 0.04530 0.00618 0.00220 0.03072 0.06121 - 0.50470 0.20690 0.40498 0.04427 0.00630 0.00257 0.02992 0.05901 - 0.49816 0.20326 0.38238 0.04342 0.00638 0.00284 0.02926 0.05724 - 0.49014 0.19887 0.35704 0.04240 0.00644 0.00312 0.02847 0.05518 - 0.48299 0.19503 0.33634 0.04150 0.00647 0.00333 0.02779 0.05342 - 0.47641 0.19154 0.31867 0.04069 0.00648 0.00350 0.02716 0.05186 - 0.46803 0.18717 0.29791 0.03966 0.00648 0.00368 0.02639 0.04994 - 0.46015 0.18311 0.27995 0.03871 0.00646 0.00382 0.02567 0.04821 - 0.45276 0.17936 0.26436 0.03784 0.00642 0.00393 0.02501 0.04664 - 0.44540 0.17566 0.24989 0.03697 0.00638 0.00402 0.02436 0.04513 - 0.43821 0.17209 0.23671 0.03614 0.00632 0.00409 0.02374 0.04369 - 0.43143 0.16876 0.22507 0.03536 0.00626 0.00414 0.02316 0.04238 - 0.42507 0.16567 0.21477 0.03464 0.00620 0.00418 0.02262 0.04118 - 0.41872 0.16260 0.20504 0.03393 0.00613 0.00421 0.02210 0.04001 - 0.41250 0.15962 0.19603 0.03324 0.00606 0.00423 0.02159 0.03889 - 0.40663 0.15683 0.18795 0.03259 0.00599 0.00424 0.02112 0.03785 - 0.40110 0.15422 0.18070 0.03199 0.00593 0.00425 0.02067 0.03690 - 0.39557 0.15162 0.17376 0.03139 0.00585 0.00425 0.02024 0.03596 - 0.39014 0.14910 0.16725 0.03081 0.00578 0.00424 0.01982 0.03506 - 0.38500 0.14671 0.16135 0.03026 0.00571 0.00424 0.01942 0.03423 - 0.38015 0.14448 0.15599 0.02975 0.00564 0.00422 0.01905 0.03345 - 0.37528 0.14225 0.15081 0.02924 0.00557 0.00421 0.01868 0.03268 - 0.59783 0.26202 0.85425 0.04954 0.00000 0.00000 0.03288 0.07981 - 0.59405 0.25884 0.80631 0.04930 0.00000 0.00000 0.03272 0.07795 - 0.58779 0.25385 0.74027 0.04875 0.00000 0.00000 0.03232 0.07503 - 0.58274 0.25004 0.69324 0.04824 0.00066 0.00000 0.03191 0.07281 - 0.57701 0.24589 0.64699 0.04760 0.00130 0.00000 0.03141 0.07043 - 0.57175 0.24222 0.60975 0.04699 0.00178 0.00000 0.03092 0.06837 - 0.56643 0.23863 0.57623 0.04635 0.00219 0.00000 0.03041 0.06639 - 0.56052 0.23475 0.54287 0.04564 0.00256 0.00000 0.02984 0.06432 - 0.55518 0.23134 0.51561 0.04500 0.00285 0.00000 0.02933 0.06253 - 0.54986 0.22802 0.49076 0.04436 0.00309 0.00000 0.02882 0.06084 - 0.54553 0.22538 0.47205 0.04384 0.00326 0.00000 0.02842 0.05952 - 0.53605 0.21972 0.43480 0.04271 0.00356 0.00000 0.02754 0.05678 - 0.52763 0.21485 0.40390 0.04173 0.00377 0.00042 0.02678 0.05451 - 0.51804 0.20944 0.37224 0.04064 0.00396 0.00086 0.02593 0.05209 - 0.50793 0.20388 0.34244 0.03950 0.00410 0.00125 0.02508 0.04970 - 0.49868 0.19891 0.31790 0.03849 0.00420 0.00155 0.02431 0.04765 - 0.48931 0.19398 0.29531 0.03747 0.00427 0.00181 0.02356 0.04567 - 0.48153 0.18995 0.27808 0.03665 0.00431 0.00199 0.02295 0.04410 - 0.47211 0.18514 0.25886 0.03566 0.00434 0.00219 0.02223 0.04229 - 0.46380 0.18097 0.24324 0.03480 0.00436 0.00233 0.02161 0.04075 - 0.45621 0.17721 0.22998 0.03403 0.00436 0.00245 0.02105 0.03940 - 0.44665 0.17252 0.21448 0.03306 0.00434 0.00257 0.02037 0.03775 - 0.43772 0.16820 0.20112 0.03217 0.00432 0.00266 0.01974 0.03628 - 0.42943 0.16424 0.18958 0.03136 0.00428 0.00274 0.01916 0.03495 - 0.42121 0.16035 0.17890 0.03056 0.00425 0.00280 0.01860 0.03368 - 0.41326 0.15662 0.16921 0.02979 0.00420 0.00284 0.01807 0.03248 - 0.40580 0.15316 0.16067 0.02908 0.00415 0.00288 0.01758 0.03139 - 0.39884 0.14996 0.15314 0.02842 0.00411 0.00290 0.01713 0.03040 - 0.39192 0.14680 0.14605 0.02777 0.00406 0.00292 0.01668 0.02944 - 0.38519 0.14375 0.13949 0.02715 0.00400 0.00293 0.01626 0.02852 - 0.37886 0.14090 0.13361 0.02656 0.00395 0.00294 0.01586 0.02768 - 0.37294 0.13825 0.12836 0.02602 0.00390 0.00294 0.01550 0.02691 - 0.36702 0.13562 0.12333 0.02549 0.00385 0.00294 0.01514 0.02615 - 0.36125 0.13307 0.11863 0.02497 0.00380 0.00294 0.01479 0.02543 - 0.35580 0.13068 0.11436 0.02448 0.00375 0.00293 0.01447 0.02476 - 0.35068 0.12844 0.11049 0.02403 0.00370 0.00292 0.01417 0.02414 - 0.34556 0.12621 0.10676 0.02357 0.00365 0.00291 0.01387 0.02353 - 0.60446 0.25738 0.66493 0.04531 0.00000 0.00000 0.02844 0.06690 - 0.59882 0.25341 0.62406 0.04487 0.00000 0.00000 0.02811 0.06495 - 0.58979 0.24727 0.56845 0.04408 0.00000 0.00000 0.02749 0.06197 - 0.58273 0.24264 0.52948 0.04341 0.00046 0.00000 0.02696 0.05976 - 0.57492 0.23766 0.49153 0.04264 0.00091 0.00000 0.02635 0.05742 - 0.56790 0.23330 0.46124 0.04192 0.00125 0.00000 0.02579 0.05542 - 0.56093 0.22908 0.43417 0.04120 0.00153 0.00000 0.02523 0.05353 - 0.55332 0.22457 0.40742 0.04042 0.00178 0.00000 0.02463 0.05156 - 0.54655 0.22063 0.38571 0.03972 0.00197 0.00000 0.02410 0.04989 - 0.53989 0.21684 0.36603 0.03903 0.00214 0.00000 0.02358 0.04831 - 0.53454 0.21384 0.35128 0.03848 0.00225 0.00000 0.02317 0.04710 - 0.52296 0.20747 0.32212 0.03731 0.00245 0.00000 0.02230 0.04459 - 0.51286 0.20205 0.29816 0.03631 0.00259 0.00030 0.02157 0.04255 - 0.50152 0.19610 0.27380 0.03520 0.00270 0.00062 0.02077 0.04039 - 0.48973 0.19005 0.25102 0.03406 0.00280 0.00090 0.01997 0.03829 - 0.47908 0.18469 0.23238 0.03306 0.00286 0.00111 0.01927 0.03649 - 0.46841 0.17941 0.21532 0.03206 0.00290 0.00129 0.01859 0.03479 - 0.45963 0.17514 0.20236 0.03126 0.00292 0.00142 0.01804 0.03344 - 0.44909 0.17007 0.18798 0.03030 0.00293 0.00156 0.01740 0.03190 - 0.43987 0.16570 0.17634 0.02948 0.00293 0.00166 0.01685 0.03061 - 0.43151 0.16179 0.16649 0.02875 0.00293 0.00174 0.01636 0.02948 - 0.42105 0.15694 0.15501 0.02783 0.00291 0.00183 0.01576 0.02811 - 0.41136 0.15251 0.14516 0.02700 0.00289 0.00190 0.01522 0.02689 - 0.40242 0.14845 0.13667 0.02624 0.00287 0.00195 0.01473 0.02580 - 0.39361 0.14451 0.12884 0.02549 0.00283 0.00199 0.01426 0.02477 - 0.38512 0.14074 0.12175 0.02478 0.00280 0.00202 0.01381 0.02380 - 0.37722 0.13725 0.11551 0.02413 0.00277 0.00205 0.01339 0.02292 - 0.36987 0.13405 0.11002 0.02353 0.00273 0.00206 0.01302 0.02213 - 0.36261 0.13089 0.10485 0.02294 0.00269 0.00207 0.01265 0.02136 - 0.35557 0.12786 0.10008 0.02237 0.00266 0.00208 0.01230 0.02063 - 0.34897 0.12504 0.09581 0.02184 0.00262 0.00209 0.01197 0.01997 - 0.34282 0.12242 0.09199 0.02135 0.00258 0.00209 0.01167 0.01936 - 0.33671 0.11984 0.08835 0.02087 0.00255 0.00209 0.01138 0.01877 - 0.33075 0.11734 0.08494 0.02041 0.00251 0.00208 0.01109 0.01820 - 0.32516 0.11500 0.08184 0.01997 0.00247 0.00208 0.01083 0.01768 - 0.31992 0.11282 0.07904 0.01957 0.00244 0.00207 0.01058 0.01720 - 0.31469 0.11065 0.07634 0.01916 0.00241 0.00206 0.01034 0.01673 - 0.60391 0.24956 0.50976 0.04178 0.00000 0.00000 0.02445 0.05492 - 0.59648 0.24490 0.47613 0.04118 0.00000 0.00000 0.02401 0.05303 - 0.58482 0.23777 0.43085 0.04017 0.00000 0.00000 0.02327 0.05018 - 0.57587 0.23244 0.39953 0.03937 0.00032 0.00000 0.02268 0.04809 - 0.56613 0.22677 0.36929 0.03847 0.00064 0.00000 0.02202 0.04592 - 0.55748 0.22185 0.34533 0.03767 0.00087 0.00000 0.02144 0.04407 - 0.54901 0.21711 0.32406 0.03689 0.00106 0.00000 0.02088 0.04234 - 0.53986 0.21209 0.30316 0.03604 0.00123 0.00000 0.02028 0.04056 - 0.53180 0.20775 0.28629 0.03529 0.00136 0.00000 0.01975 0.03906 - 0.52396 0.20359 0.27107 0.03457 0.00147 0.00000 0.01925 0.03766 - 0.51771 0.20032 0.25971 0.03400 0.00155 0.00000 0.01886 0.03658 - 0.50433 0.19343 0.23736 0.03280 0.00168 0.00000 0.01804 0.03439 - 0.49279 0.18763 0.21915 0.03177 0.00177 0.00022 0.01736 0.03261 - 0.47998 0.18131 0.20073 0.03066 0.00184 0.00045 0.01663 0.03076 - 0.46682 0.17494 0.18361 0.02953 0.00190 0.00065 0.01590 0.02897 - 0.45505 0.16935 0.16966 0.02854 0.00194 0.00081 0.01527 0.02746 - 0.44336 0.16389 0.15695 0.02757 0.00196 0.00094 0.01466 0.02604 - 0.43382 0.15949 0.14733 0.02679 0.00197 0.00104 0.01418 0.02492 - 0.42245 0.15431 0.13668 0.02587 0.00198 0.00114 0.01362 0.02366 - 0.41257 0.14987 0.12810 0.02509 0.00198 0.00121 0.01315 0.02260 - 0.40367 0.14591 0.12085 0.02439 0.00197 0.00127 0.01273 0.02168 - 0.39259 0.14104 0.11242 0.02353 0.00196 0.00134 0.01222 0.02058 - 0.38240 0.13661 0.10520 0.02274 0.00194 0.00138 0.01176 0.01961 - 0.37304 0.13259 0.09899 0.02203 0.00192 0.00142 0.01134 0.01874 - 0.36387 0.12868 0.09326 0.02134 0.00190 0.00145 0.01094 0.01792 - 0.35509 0.12497 0.08809 0.02069 0.00187 0.00147 0.01057 0.01716 - 0.34694 0.12155 0.08354 0.02009 0.00185 0.00149 0.01022 0.01647 - 0.33940 0.11842 0.07954 0.01954 0.00182 0.00150 0.00991 0.01585 - 0.33197 0.11535 0.07577 0.01900 0.00180 0.00151 0.00961 0.01525 - 0.32480 0.11241 0.07230 0.01849 0.00177 0.00152 0.00932 0.01469 - 0.31811 0.10969 0.06920 0.01801 0.00175 0.00152 0.00905 0.01418 - 0.31189 0.10717 0.06642 0.01757 0.00172 0.00152 0.00881 0.01371 - 0.30572 0.10468 0.06377 0.01714 0.00169 0.00152 0.00857 0.01326 - 0.29974 0.10229 0.06128 0.01672 0.00167 0.00151 0.00834 0.01283 - 0.29414 0.10006 0.05903 0.01633 0.00164 0.00151 0.00813 0.01243 - 0.28890 0.09798 0.05700 0.01597 0.00162 0.00150 0.00793 0.01207 - 0.28369 0.09593 0.05503 0.01561 0.00160 0.00150 0.00773 0.01171 - 0.59691 0.23909 0.38497 0.03862 0.00000 0.00000 0.02088 0.04414 - 0.58781 0.23385 0.35816 0.03788 0.00000 0.00000 0.02039 0.04240 - 0.57372 0.22590 0.32238 0.03669 0.00000 0.00000 0.01959 0.03980 - 0.56306 0.22002 0.29791 0.03578 0.00022 0.00000 0.01899 0.03792 - 0.55156 0.21380 0.27445 0.03479 0.00044 0.00000 0.01833 0.03598 - 0.54146 0.20844 0.25598 0.03392 0.00060 0.00000 0.01776 0.03435 - 0.53166 0.20332 0.23966 0.03308 0.00073 0.00000 0.01721 0.03283 - 0.52117 0.19794 0.22371 0.03218 0.00085 0.00000 0.01664 0.03128 - 0.51201 0.19330 0.21090 0.03140 0.00093 0.00000 0.01614 0.02999 - 0.50316 0.18889 0.19938 0.03066 0.00101 0.00000 0.01567 0.02878 - 0.49615 0.18543 0.19081 0.03007 0.00106 0.00000 0.01531 0.02786 - 0.48126 0.17821 0.17402 0.02885 0.00114 0.00000 0.01456 0.02601 - 0.46856 0.17218 0.16042 0.02782 0.00120 0.00017 0.01394 0.02452 - 0.45459 0.16566 0.14672 0.02671 0.00125 0.00034 0.01328 0.02298 - 0.44036 0.15914 0.13403 0.02560 0.00129 0.00049 0.01263 0.02151 - 0.42776 0.15346 0.12374 0.02463 0.00131 0.00061 0.01208 0.02027 - 0.41534 0.14796 0.11438 0.02370 0.00133 0.00071 0.01155 0.01912 - 0.40526 0.14355 0.10731 0.02295 0.00133 0.00078 0.01114 0.01823 - 0.39332 0.13839 0.09951 0.02207 0.00134 0.00085 0.01065 0.01722 - 0.38302 0.13399 0.09322 0.02133 0.00133 0.00091 0.01025 0.01638 - 0.37379 0.13009 0.08792 0.02067 0.00133 0.00095 0.00989 0.01566 - 0.36236 0.12531 0.08177 0.01986 0.00132 0.00100 0.00946 0.01480 - 0.35190 0.12098 0.07650 0.01913 0.00131 0.00104 0.00907 0.01404 - 0.34235 0.11707 0.07197 0.01848 0.00129 0.00106 0.00873 0.01337 - 0.33304 0.11329 0.06780 0.01784 0.00127 0.00109 0.00840 0.01274 - 0.32415 0.10972 0.06403 0.01724 0.00126 0.00110 0.00808 0.01216 - 0.31594 0.10644 0.06072 0.01669 0.00124 0.00112 0.00780 0.01163 - 0.30838 0.10345 0.05780 0.01619 0.00122 0.00113 0.00755 0.01116 - 0.30095 0.10053 0.05506 0.01571 0.00120 0.00113 0.00730 0.01071 - 0.29381 0.09774 0.05252 0.01524 0.00119 0.00114 0.00706 0.01029 - 0.28717 0.09516 0.05026 0.01481 0.00117 0.00114 0.00685 0.00990 - 0.28101 0.09278 0.04823 0.01442 0.00115 0.00114 0.00665 0.00955 - 0.27492 0.09045 0.04629 0.01403 0.00113 0.00114 0.00645 0.00921 - 0.26904 0.08820 0.04448 0.01366 0.00111 0.00113 0.00627 0.00889 - 0.26354 0.08611 0.04284 0.01332 0.00110 0.00113 0.00610 0.00860 - 0.25841 0.08418 0.04135 0.01300 0.00108 0.00112 0.00594 0.00833 - 0.25332 0.08226 0.03991 0.01268 0.00106 0.00112 0.00579 0.00807 - 0.58420 0.22645 0.28636 0.03561 0.00000 0.00000 0.01771 0.03471 - 0.57360 0.22077 0.26561 0.03476 0.00000 0.00000 0.01720 0.03317 - 0.55733 0.21221 0.23814 0.03343 0.00000 0.00000 0.01640 0.03090 - 0.54514 0.20592 0.21952 0.03244 0.00015 0.00000 0.01581 0.02927 - 0.53212 0.19931 0.20178 0.03138 0.00030 0.00000 0.01518 0.02760 - 0.52077 0.19365 0.18788 0.03045 0.00041 0.00000 0.01464 0.02621 - 0.50984 0.18827 0.17566 0.02957 0.00050 0.00000 0.01412 0.02493 - 0.49822 0.18264 0.16376 0.02865 0.00058 0.00000 0.01359 0.02363 - 0.48814 0.17783 0.15423 0.02785 0.00064 0.00000 0.01314 0.02255 - 0.47846 0.17327 0.14569 0.02709 0.00069 0.00000 0.01271 0.02155 - 0.47084 0.16972 0.13936 0.02650 0.00072 0.00000 0.01238 0.02079 - 0.45477 0.16234 0.12697 0.02528 0.00078 0.00000 0.01170 0.01927 - 0.44118 0.15622 0.11698 0.02426 0.00082 0.00013 0.01115 0.01806 - 0.42634 0.14966 0.10694 0.02317 0.00085 0.00026 0.01057 0.01682 - 0.41137 0.14315 0.09767 0.02209 0.00087 0.00038 0.01001 0.01564 - 0.39821 0.13751 0.09016 0.02116 0.00089 0.00046 0.00953 0.01467 - 0.38532 0.13208 0.08334 0.02027 0.00090 0.00054 0.00908 0.01377 - 0.37493 0.12776 0.07820 0.01956 0.00090 0.00060 0.00872 0.01307 - 0.36269 0.12273 0.07252 0.01873 0.00090 0.00066 0.00831 0.01229 - 0.35218 0.11846 0.06795 0.01804 0.00090 0.00070 0.00797 0.01164 - 0.34281 0.11469 0.06410 0.01742 0.00090 0.00073 0.00767 0.01109 - 0.33127 0.11010 0.05962 0.01668 0.00089 0.00077 0.00731 0.01043 - 0.32077 0.10597 0.05579 0.01601 0.00088 0.00080 0.00699 0.00986 - 0.31122 0.10224 0.05249 0.01541 0.00087 0.00082 0.00670 0.00936 - 0.30194 0.09866 0.04946 0.01483 0.00086 0.00084 0.00643 0.00888 - 0.29313 0.09529 0.04671 0.01429 0.00085 0.00085 0.00617 0.00845 - 0.28502 0.09220 0.04429 0.01379 0.00083 0.00086 0.00594 0.00806 - 0.27758 0.08940 0.04216 0.01334 0.00082 0.00087 0.00573 0.00771 - 0.27029 0.08667 0.04016 0.01291 0.00081 0.00087 0.00553 0.00738 - 0.26331 0.08407 0.03831 0.01249 0.00080 0.00087 0.00534 0.00707 - 0.25683 0.08167 0.03665 0.01211 0.00078 0.00087 0.00517 0.00679 - 0.25085 0.07947 0.03517 0.01176 0.00077 0.00087 0.00501 0.00653 - 0.24495 0.07732 0.03375 0.01142 0.00076 0.00087 0.00485 0.00629 - 0.23926 0.07525 0.03242 0.01109 0.00075 0.00087 0.00471 0.00605 - 0.23396 0.07333 0.03121 0.01079 0.00073 0.00087 0.00457 0.00584 - 0.22903 0.07155 0.03012 0.01051 0.00072 0.00086 0.00444 0.00565 - 0.22415 0.06980 0.02906 0.01024 0.00071 0.00086 0.00432 0.00546 - 0.56651 0.21215 0.20976 0.03262 0.00000 0.00000 0.01491 0.02666 - 0.55458 0.20615 0.19417 0.03169 0.00000 0.00000 0.01441 0.02535 - 0.53644 0.19717 0.17367 0.03027 0.00000 0.00000 0.01364 0.02344 - 0.52295 0.19062 0.15989 0.02921 0.00010 0.00000 0.01308 0.02208 - 0.50863 0.18377 0.14681 0.02810 0.00020 0.00000 0.01249 0.02070 - 0.49625 0.17794 0.13661 0.02716 0.00028 0.00000 0.01200 0.01956 - 0.48439 0.17243 0.12767 0.02626 0.00034 0.00000 0.01153 0.01851 - 0.47187 0.16669 0.11898 0.02532 0.00039 0.00000 0.01104 0.01745 - 0.46108 0.16181 0.11205 0.02452 0.00043 0.00000 0.01063 0.01658 - 0.45076 0.15720 0.10585 0.02377 0.00046 0.00000 0.01025 0.01578 - 0.44268 0.15363 0.10125 0.02318 0.00049 0.00000 0.00996 0.01517 - 0.42574 0.14626 0.09228 0.02198 0.00053 0.00000 0.00937 0.01396 - 0.41153 0.14018 0.08505 0.02099 0.00055 0.00010 0.00888 0.01301 - 0.39613 0.13371 0.07779 0.01994 0.00057 0.00020 0.00838 0.01204 - 0.38071 0.12734 0.07109 0.01891 0.00059 0.00030 0.00790 0.01113 - 0.36724 0.12186 0.06567 0.01803 0.00060 0.00037 0.00749 0.01039 - 0.35414 0.11661 0.06075 0.01719 0.00061 0.00043 0.00710 0.00970 - 0.34363 0.11246 0.05703 0.01653 0.00061 0.00047 0.00680 0.00917 - 0.33132 0.10764 0.05292 0.01576 0.00061 0.00052 0.00646 0.00858 - 0.32082 0.10358 0.04962 0.01512 0.00061 0.00055 0.00617 0.00810 - 0.31148 0.10001 0.04683 0.01456 0.00060 0.00058 0.00592 0.00769 - 0.30004 0.09568 0.04358 0.01388 0.00060 0.00061 0.00562 0.00720 - 0.28968 0.09180 0.04080 0.01327 0.00059 0.00063 0.00536 0.00678 - 0.28030 0.08832 0.03840 0.01273 0.00059 0.00065 0.00513 0.00641 - 0.27122 0.08498 0.03619 0.01221 0.00058 0.00066 0.00490 0.00607 - 0.26264 0.08185 0.03418 0.01173 0.00057 0.00067 0.00470 0.00575 - 0.25476 0.07900 0.03242 0.01129 0.00056 0.00068 0.00451 0.00547 - 0.24756 0.07641 0.03086 0.01089 0.00055 0.00069 0.00434 0.00522 - 0.24053 0.07391 0.02939 0.01050 0.00054 0.00069 0.00418 0.00498 - 0.23382 0.07153 0.02803 0.01014 0.00054 0.00069 0.00403 0.00476 - 0.22761 0.06934 0.02681 0.00981 0.00053 0.00069 0.00389 0.00456 - 0.22189 0.06734 0.02572 0.00950 0.00052 0.00069 0.00376 0.00438 - 0.21626 0.06538 0.02468 0.00921 0.00051 0.00069 0.00364 0.00421 - 0.21085 0.06351 0.02370 0.00892 0.00050 0.00069 0.00352 0.00404 - 0.20582 0.06177 0.02281 0.00866 0.00049 0.00068 0.00341 0.00389 - 0.20115 0.06017 0.02200 0.00842 0.00049 0.00068 0.00331 0.00376 - 0.19654 0.05860 0.02122 0.00818 0.00048 0.00068 0.00322 0.00362 - 0.54452 0.19663 0.15124 0.02959 0.00000 0.00000 0.01245 0.01998 - 0.53148 0.19045 0.13989 0.02860 0.00000 0.00000 0.01198 0.01891 - 0.51177 0.18125 0.12505 0.02713 0.00000 0.00000 0.01127 0.01736 - 0.49722 0.17457 0.11512 0.02605 0.00007 0.00000 0.01075 0.01626 - 0.48188 0.16764 0.10573 0.02492 0.00014 0.00000 0.01022 0.01516 - 0.46869 0.16175 0.09843 0.02397 0.00019 0.00000 0.00977 0.01425 - 0.45612 0.15622 0.09204 0.02308 0.00023 0.00000 0.00935 0.01342 - 0.44293 0.15050 0.08585 0.02215 0.00026 0.00000 0.00892 0.01259 - 0.43162 0.14565 0.08091 0.02136 0.00029 0.00000 0.00856 0.01190 - 0.42086 0.14109 0.07649 0.02063 0.00031 0.00000 0.00822 0.01128 - 0.41246 0.13757 0.07322 0.02006 0.00033 0.00000 0.00797 0.01081 - 0.39497 0.13034 0.06683 0.01891 0.00035 0.00000 0.00745 0.00988 - 0.38040 0.12443 0.06167 0.01796 0.00037 0.00008 0.00704 0.00916 - 0.36472 0.11817 0.05649 0.01697 0.00039 0.00017 0.00661 0.00842 - 0.34913 0.11204 0.05171 0.01601 0.00040 0.00024 0.00619 0.00774 - 0.33560 0.10682 0.04782 0.01519 0.00040 0.00030 0.00585 0.00718 - 0.32252 0.10183 0.04429 0.01442 0.00041 0.00035 0.00553 0.00668 - 0.31208 0.09791 0.04162 0.01381 0.00041 0.00039 0.00527 0.00629 - 0.29992 0.09338 0.03866 0.01311 0.00041 0.00042 0.00499 0.00586 - 0.28958 0.08959 0.03628 0.01253 0.00041 0.00045 0.00475 0.00551 - 0.28044 0.08626 0.03426 0.01203 0.00041 0.00047 0.00455 0.00521 - 0.26928 0.08224 0.03191 0.01142 0.00040 0.00050 0.00431 0.00486 - 0.25922 0.07866 0.02988 0.01088 0.00040 0.00051 0.00409 0.00456 - 0.25015 0.07546 0.02814 0.01040 0.00040 0.00053 0.00390 0.00430 - 0.24141 0.07240 0.02652 0.00994 0.00039 0.00054 0.00372 0.00406 - 0.23318 0.06954 0.02506 0.00951 0.00039 0.00055 0.00355 0.00383 - 0.22565 0.06695 0.02376 0.00913 0.00038 0.00055 0.00341 0.00364 - 0.21878 0.06461 0.02262 0.00878 0.00037 0.00056 0.00327 0.00346 - 0.21211 0.06234 0.02154 0.00845 0.00037 0.00056 0.00314 0.00329 - 0.20574 0.06020 0.02054 0.00814 0.00036 0.00056 0.00302 0.00314 - 0.19988 0.05824 0.01964 0.00785 0.00036 0.00056 0.00291 0.00300 - 0.19449 0.05644 0.01884 0.00759 0.00035 0.00056 0.00281 0.00288 - 0.18920 0.05469 0.01807 0.00733 0.00035 0.00056 0.00271 0.00276 - 0.18413 0.05302 0.01734 0.00709 0.00034 0.00056 0.00262 0.00264 - 0.17942 0.05148 0.01668 0.00687 0.00033 0.00055 0.00254 0.00254 - 0.17507 0.05006 0.01609 0.00666 0.00033 0.00055 0.00246 0.00245 - 0.17077 0.04867 0.01551 0.00646 0.00032 0.00055 0.00238 0.00236 - 0.51892 0.18032 0.10730 0.02649 0.00000 0.00000 0.01031 0.01459 - 0.50499 0.17409 0.09931 0.02549 0.00000 0.00000 0.00987 0.01374 - 0.48405 0.16485 0.08891 0.02401 0.00000 0.00000 0.00923 0.01253 - 0.46869 0.15818 0.08197 0.02293 0.00005 0.00000 0.00876 0.01167 - 0.45259 0.15129 0.07542 0.02183 0.00009 0.00000 0.00829 0.01082 - 0.43881 0.14547 0.07033 0.02089 0.00013 0.00000 0.00789 0.01012 - 0.42576 0.14003 0.06588 0.02002 0.00015 0.00000 0.00752 0.00948 - 0.41212 0.13442 0.06157 0.01913 0.00018 0.00000 0.00715 0.00885 - 0.40049 0.12969 0.05812 0.01838 0.00020 0.00000 0.00684 0.00833 - 0.38947 0.12526 0.05504 0.01768 0.00021 0.00000 0.00655 0.00786 - 0.38091 0.12185 0.05275 0.01714 0.00022 0.00000 0.00633 0.00751 - 0.36316 0.11489 0.04827 0.01605 0.00024 0.00000 0.00589 0.00682 - 0.34848 0.10923 0.04464 0.01517 0.00025 0.00007 0.00553 0.00628 - 0.33279 0.10328 0.04099 0.01425 0.00026 0.00014 0.00517 0.00575 - 0.31728 0.09750 0.03759 0.01337 0.00027 0.00020 0.00483 0.00525 - 0.30391 0.09259 0.03483 0.01263 0.00027 0.00025 0.00454 0.00485 - 0.29105 0.08794 0.03231 0.01193 0.00028 0.00029 0.00427 0.00448 - 0.28084 0.08429 0.03040 0.01138 0.00028 0.00032 0.00406 0.00421 - 0.26900 0.08011 0.02828 0.01076 0.00028 0.00035 0.00383 0.00390 - 0.25899 0.07662 0.02656 0.01024 0.00028 0.00038 0.00364 0.00366 - 0.25017 0.07357 0.02510 0.00980 0.00028 0.00040 0.00347 0.00345 - 0.23946 0.06990 0.02339 0.00926 0.00027 0.00042 0.00328 0.00321 - 0.22983 0.06665 0.02192 0.00879 0.00027 0.00043 0.00310 0.00300 - 0.22119 0.06375 0.02064 0.00837 0.00027 0.00044 0.00295 0.00282 - 0.21290 0.06100 0.01946 0.00798 0.00026 0.00045 0.00281 0.00265 - 0.20511 0.05843 0.01839 0.00761 0.00026 0.00045 0.00267 0.00250 - 0.19802 0.05611 0.01743 0.00728 0.00026 0.00046 0.00255 0.00236 - 0.19157 0.05402 0.01659 0.00699 0.00025 0.00046 0.00245 0.00224 - 0.18531 0.05200 0.01580 0.00670 0.00025 0.00046 0.00235 0.00213 - 0.17937 0.05010 0.01506 0.00644 0.00025 0.00046 0.00225 0.00203 - 0.17391 0.04836 0.01439 0.00619 0.00024 0.00046 0.00216 0.00193 - 0.16890 0.04678 0.01380 0.00597 0.00024 0.00046 0.00209 0.00185 - 0.16400 0.04524 0.01322 0.00576 0.00023 0.00046 0.00201 0.00177 - 0.15931 0.04377 0.01269 0.00556 0.00023 0.00046 0.00194 0.00169 - 0.15497 0.04242 0.01220 0.00537 0.00023 0.00046 0.00187 0.00163 - 0.15096 0.04118 0.01175 0.00520 0.00022 0.00045 0.00181 0.00156 - 0.14702 0.03996 0.01132 0.00503 0.00022 0.00045 0.00175 0.00150 - 0.49034 0.16360 0.07487 0.02337 0.00000 0.00000 0.00846 0.01035 - 0.47575 0.15743 0.06946 0.02238 0.00000 0.00000 0.00806 0.00971 - 0.45393 0.14833 0.06245 0.02093 0.00000 0.00000 0.00749 0.00879 - 0.43802 0.14179 0.05776 0.01990 0.00003 0.00000 0.00708 0.00815 - 0.42141 0.13506 0.05333 0.01883 0.00006 0.00000 0.00667 0.00751 - 0.40729 0.12941 0.04989 0.01794 0.00008 0.00000 0.00632 0.00699 - 0.39396 0.12415 0.04687 0.01712 0.00010 0.00000 0.00601 0.00652 - 0.38010 0.11874 0.04394 0.01628 0.00012 0.00000 0.00568 0.00605 - 0.36833 0.11421 0.04159 0.01557 0.00013 0.00000 0.00542 0.00568 - 0.35724 0.10998 0.03947 0.01492 0.00014 0.00000 0.00517 0.00533 - 0.34864 0.10674 0.03790 0.01443 0.00015 0.00000 0.00498 0.00508 - 0.33093 0.10015 0.03481 0.01342 0.00016 0.00000 0.00461 0.00458 - 0.31636 0.09482 0.03229 0.01262 0.00017 0.00006 0.00432 0.00420 - 0.30089 0.08926 0.02973 0.01179 0.00018 0.00012 0.00401 0.00382 - 0.28570 0.08389 0.02734 0.01100 0.00018 0.00018 0.00373 0.00347 - 0.27268 0.07935 0.02539 0.01033 0.00018 0.00022 0.00349 0.00319 - 0.26023 0.07508 0.02359 0.00971 0.00019 0.00025 0.00327 0.00293 - 0.25039 0.07174 0.02222 0.00923 0.00019 0.00028 0.00311 0.00274 - 0.23903 0.06794 0.02070 0.00869 0.00019 0.00030 0.00292 0.00254 - 0.22947 0.06477 0.01945 0.00824 0.00019 0.00032 0.00276 0.00237 - 0.22109 0.06202 0.01840 0.00786 0.00019 0.00034 0.00263 0.00223 - 0.21094 0.05873 0.01715 0.00740 0.00019 0.00035 0.00247 0.00206 - 0.20186 0.05582 0.01608 0.00699 0.00018 0.00037 0.00233 0.00192 - 0.19374 0.05324 0.01515 0.00664 0.00018 0.00037 0.00221 0.00180 - 0.18599 0.05079 0.01428 0.00630 0.00018 0.00038 0.00210 0.00169 - 0.17872 0.04852 0.01349 0.00599 0.00018 0.00039 0.00199 0.00159 - 0.17212 0.04648 0.01278 0.00572 0.00018 0.00039 0.00190 0.00150 - 0.16615 0.04464 0.01216 0.00547 0.00017 0.00039 0.00182 0.00142 - 0.16037 0.04287 0.01157 0.00523 0.00017 0.00039 0.00174 0.00135 - 0.15489 0.04121 0.01102 0.00501 0.00017 0.00039 0.00166 0.00128 - 0.14987 0.03970 0.01053 0.00481 0.00016 0.00039 0.00160 0.00122 - 0.14528 0.03832 0.01009 0.00463 0.00016 0.00039 0.00154 0.00116 - 0.14080 0.03698 0.00966 0.00445 0.00016 0.00039 0.00148 0.00111 - 0.13652 0.03572 0.00926 0.00428 0.00016 0.00038 0.00142 0.00106 - 0.13257 0.03455 0.00890 0.00413 0.00015 0.00038 0.00137 0.00102 - 0.12893 0.03348 0.00857 0.00399 0.00015 0.00038 0.00132 0.00098 - 0.12535 0.03244 0.00825 0.00386 0.00015 0.00037 0.00128 0.00094 - 0.45943 0.14682 0.05133 0.02027 0.00000 0.00000 0.00686 0.00712 - 0.44440 0.14082 0.04785 0.01933 0.00000 0.00000 0.00652 0.00665 - 0.42205 0.13201 0.04333 0.01796 0.00000 0.00000 0.00602 0.00598 - 0.40583 0.12571 0.04029 0.01698 0.00002 0.00000 0.00567 0.00552 - 0.38899 0.11926 0.03741 0.01598 0.00004 0.00000 0.00531 0.00506 - 0.37473 0.11386 0.03515 0.01516 0.00006 0.00000 0.00502 0.00468 - 0.36134 0.10885 0.03316 0.01440 0.00007 0.00000 0.00475 0.00435 - 0.34747 0.10373 0.03122 0.01362 0.00008 0.00000 0.00448 0.00402 - 0.33575 0.09945 0.02965 0.01298 0.00009 0.00000 0.00425 0.00375 - 0.32474 0.09548 0.02823 0.01239 0.00009 0.00000 0.00405 0.00351 - 0.31625 0.09245 0.02717 0.01194 0.00010 0.00000 0.00389 0.00334 - 0.29882 0.08631 0.02507 0.01104 0.00011 0.00000 0.00358 0.00299 - 0.28458 0.08138 0.02333 0.01032 0.00011 0.00005 0.00334 0.00273 - 0.26955 0.07625 0.02155 0.00959 0.00012 0.00011 0.00309 0.00246 - 0.25488 0.07134 0.01988 0.00889 0.00012 0.00015 0.00285 0.00223 - 0.24237 0.06721 0.01850 0.00831 0.00012 0.00019 0.00266 0.00204 - 0.23048 0.06335 0.01722 0.00778 0.00013 0.00022 0.00249 0.00187 - 0.22113 0.06035 0.01624 0.00736 0.00013 0.00024 0.00235 0.00174 - 0.21039 0.05694 0.01514 0.00690 0.00013 0.00026 0.00220 0.00161 - 0.20138 0.05411 0.01424 0.00652 0.00013 0.00028 0.00208 0.00150 - 0.19351 0.05167 0.01347 0.00619 0.00013 0.00029 0.00197 0.00140 - 0.18403 0.04876 0.01257 0.00581 0.00013 0.00031 0.00185 0.00130 - 0.17558 0.04619 0.01178 0.00547 0.00013 0.00032 0.00174 0.00120 - 0.16806 0.04393 0.01110 0.00517 0.00012 0.00032 0.00164 0.00113 - 0.16089 0.04179 0.01046 0.00489 0.00012 0.00033 0.00155 0.00105 - 0.15421 0.03981 0.00987 0.00464 0.00012 0.00033 0.00147 0.00099 - 0.14816 0.03804 0.00935 0.00441 0.00012 0.00033 0.00140 0.00093 - 0.14269 0.03644 0.00889 0.00421 0.00012 0.00033 0.00134 0.00088 - 0.13742 0.03492 0.00845 0.00401 0.00012 0.00033 0.00128 0.00084 - 0.13244 0.03349 0.00805 0.00383 0.00011 0.00033 0.00122 0.00079 - 0.12788 0.03219 0.00768 0.00367 0.00011 0.00033 0.00117 0.00075 - 0.12373 0.03101 0.00735 0.00352 0.00011 0.00033 0.00112 0.00072 - 0.11969 0.02987 0.00703 0.00338 0.00011 0.00033 0.00107 0.00069 - 0.11583 0.02879 0.00674 0.00325 0.00011 0.00032 0.00103 0.00065 - 0.11228 0.02780 0.00647 0.00313 0.00010 0.00032 0.00099 0.00063 - 0.10902 0.02689 0.00622 0.00301 0.00010 0.00032 0.00096 0.00060 - 0.10582 0.02601 0.00598 0.00291 0.00010 0.00032 0.00092 0.00058 - 0.42675 0.13028 0.03459 0.01726 0.00000 0.00000 0.00551 0.00474 - 0.41152 0.12455 0.03249 0.01639 0.00000 0.00000 0.00522 0.00441 - 0.38897 0.11616 0.02975 0.01512 0.00000 0.00000 0.00479 0.00394 - 0.37269 0.11018 0.02787 0.01423 0.00001 0.00000 0.00449 0.00362 - 0.35587 0.10409 0.02608 0.01332 0.00003 0.00000 0.00419 0.00330 - 0.34169 0.09902 0.02466 0.01257 0.00004 0.00000 0.00394 0.00304 - 0.32842 0.09433 0.02339 0.01189 0.00005 0.00000 0.00372 0.00282 - 0.31475 0.08956 0.02213 0.01119 0.00005 0.00000 0.00349 0.00259 - 0.30323 0.08559 0.02111 0.01062 0.00006 0.00000 0.00330 0.00241 - 0.29247 0.08192 0.02018 0.01010 0.00006 0.00000 0.00313 0.00225 - 0.28419 0.07912 0.01947 0.00970 0.00007 0.00000 0.00300 0.00213 - 0.26728 0.07349 0.01806 0.00891 0.00007 0.00000 0.00275 0.00190 - 0.25355 0.06899 0.01686 0.00829 0.00008 0.00005 0.00255 0.00172 - 0.23914 0.06434 0.01563 0.00765 0.00008 0.00010 0.00235 0.00155 - 0.22516 0.05992 0.01446 0.00706 0.00008 0.00014 0.00216 0.00139 - 0.21332 0.05623 0.01348 0.00656 0.00008 0.00017 0.00201 0.00127 - 0.20212 0.05278 0.01257 0.00611 0.00009 0.00020 0.00187 0.00116 - 0.19335 0.05012 0.01187 0.00576 0.00009 0.00021 0.00176 0.00108 - 0.18332 0.04712 0.01107 0.00538 0.00009 0.00023 0.00164 0.00099 - 0.17495 0.04464 0.01042 0.00506 0.00009 0.00025 0.00154 0.00092 - 0.16767 0.04250 0.00986 0.00479 0.00009 0.00026 0.00146 0.00086 - 0.15892 0.03996 0.00919 0.00447 0.00009 0.00027 0.00137 0.00080 - 0.15117 0.03774 0.00861 0.00419 0.00009 0.00028 0.00128 0.00074 - 0.14428 0.03578 0.00811 0.00395 0.00008 0.00028 0.00121 0.00069 - 0.13775 0.03394 0.00764 0.00373 0.00008 0.00028 0.00114 0.00065 - 0.13168 0.03224 0.00720 0.00352 0.00008 0.00029 0.00108 0.00061 - 0.12620 0.03073 0.00682 0.00334 0.00008 0.00029 0.00102 0.00057 - 0.12127 0.02937 0.00648 0.00318 0.00008 0.00029 0.00097 0.00054 - 0.11652 0.02807 0.00615 0.00302 0.00008 0.00029 0.00093 0.00051 - 0.11205 0.02686 0.00585 0.00288 0.00008 0.00029 0.00088 0.00048 - 0.10797 0.02576 0.00558 0.00275 0.00008 0.00028 0.00084 0.00046 - 0.10427 0.02477 0.00533 0.00263 0.00008 0.00028 0.00081 0.00044 - 0.10066 0.02381 0.00510 0.00252 0.00007 0.00028 0.00077 0.00042 - 0.09724 0.02290 0.00488 0.00242 0.00007 0.00028 0.00074 0.00040 - 0.09409 0.02207 0.00468 0.00232 0.00007 0.00027 0.00071 0.00038 - 0.09120 0.02131 0.00449 0.00223 0.00007 0.00027 0.00069 0.00037 - 0.08837 0.02058 0.00432 0.00215 0.00007 0.00027 0.00066 0.00035 - 0.39287 0.11426 0.02289 0.01442 0.00000 0.00000 0.00437 0.00305 - 0.37768 0.10886 0.02175 0.01363 0.00000 0.00000 0.00412 0.00282 - 0.35526 0.10100 0.02022 0.01249 0.00000 0.00000 0.00377 0.00251 - 0.33916 0.09543 0.01914 0.01169 0.00001 0.00000 0.00352 0.00229 - 0.32258 0.08977 0.01808 0.01089 0.00002 0.00000 0.00327 0.00208 - 0.30867 0.08508 0.01723 0.01023 0.00002 0.00000 0.00306 0.00191 - 0.29571 0.08076 0.01645 0.00963 0.00003 0.00000 0.00287 0.00176 - 0.28241 0.07638 0.01567 0.00902 0.00004 0.00000 0.00269 0.00162 - 0.27126 0.07275 0.01501 0.00852 0.00004 0.00000 0.00253 0.00150 - 0.26087 0.06941 0.01441 0.00807 0.00004 0.00000 0.00240 0.00139 - 0.25291 0.06687 0.01395 0.00773 0.00004 0.00000 0.00229 0.00132 - 0.23673 0.06178 0.01300 0.00705 0.00005 0.00000 0.00209 0.00117 - 0.22367 0.05775 0.01219 0.00652 0.00005 0.00004 0.00193 0.00106 - 0.21004 0.05360 0.01133 0.00599 0.00005 0.00009 0.00177 0.00095 - 0.19690 0.04968 0.01051 0.00549 0.00006 0.00012 0.00162 0.00085 - 0.18583 0.04642 0.00982 0.00508 0.00006 0.00015 0.00150 0.00077 - 0.17542 0.04341 0.00916 0.00470 0.00006 0.00018 0.00139 0.00071 - 0.16730 0.04109 0.00865 0.00442 0.00006 0.00019 0.00130 0.00066 - 0.15806 0.03847 0.00808 0.00410 0.00006 0.00021 0.00121 0.00060 - 0.15039 0.03633 0.00760 0.00385 0.00006 0.00022 0.00113 0.00056 - 0.14373 0.03449 0.00719 0.00363 0.00006 0.00023 0.00107 0.00052 - 0.13577 0.03232 0.00670 0.00337 0.00006 0.00024 0.00100 0.00048 - 0.12875 0.03041 0.00627 0.00315 0.00006 0.00024 0.00093 0.00045 - 0.12253 0.02875 0.00590 0.00296 0.00006 0.00025 0.00088 0.00042 - 0.11666 0.02719 0.00555 0.00278 0.00006 0.00025 0.00082 0.00039 - 0.11122 0.02576 0.00523 0.00262 0.00006 0.00025 0.00078 0.00037 - 0.10632 0.02448 0.00494 0.00248 0.00006 0.00025 0.00074 0.00034 - 0.10193 0.02334 0.00469 0.00235 0.00006 0.00025 0.00070 0.00033 - 0.09771 0.02226 0.00445 0.00223 0.00005 0.00025 0.00066 0.00031 - 0.09375 0.02125 0.00422 0.00212 0.00005 0.00025 0.00063 0.00029 - 0.09015 0.02033 0.00402 0.00202 0.00005 0.00024 0.00060 0.00028 - 0.08688 0.01951 0.00384 0.00193 0.00005 0.00024 0.00058 0.00027 - 0.08372 0.01871 0.00367 0.00184 0.00005 0.00024 0.00055 0.00025 - 0.08071 0.01796 0.00350 0.00176 0.00005 0.00024 0.00053 0.00024 - 0.07796 0.01728 0.00335 0.00169 0.00005 0.00023 0.00051 0.00023 - 0.07543 0.01666 0.00322 0.00162 0.00005 0.00023 0.00049 0.00022 - 0.07297 0.01605 0.00309 0.00156 0.00005 0.00023 0.00047 0.00021 - 0.35835 0.09897 0.01487 0.01179 0.00000 0.00000 0.00342 0.00189 - 0.34339 0.09398 0.01435 0.01110 0.00000 0.00000 0.00322 0.00174 - 0.32142 0.08673 0.01362 0.01010 0.00000 0.00000 0.00292 0.00154 - 0.30570 0.08162 0.01307 0.00941 0.00001 0.00000 0.00272 0.00141 - 0.28960 0.07645 0.01249 0.00872 0.00001 0.00000 0.00251 0.00127 - 0.27614 0.07218 0.01201 0.00815 0.00002 0.00000 0.00234 0.00117 - 0.26365 0.06826 0.01155 0.00763 0.00002 0.00000 0.00219 0.00107 - 0.25089 0.06430 0.01108 0.00712 0.00002 0.00000 0.00204 0.00098 - 0.24024 0.06104 0.01067 0.00670 0.00003 0.00000 0.00192 0.00091 - 0.23034 0.05804 0.01028 0.00631 0.00003 0.00000 0.00181 0.00084 - 0.22279 0.05578 0.00998 0.00603 0.00003 0.00000 0.00173 0.00079 - 0.20751 0.05126 0.00935 0.00546 0.00003 0.00000 0.00156 0.00070 - 0.19525 0.04769 0.00880 0.00502 0.00004 0.00004 0.00144 0.00063 - 0.18252 0.04405 0.00821 0.00458 0.00004 0.00008 0.00131 0.00057 - 0.17033 0.04062 0.00762 0.00418 0.00004 0.00011 0.00119 0.00051 - 0.16013 0.03780 0.00713 0.00384 0.00004 0.00014 0.00110 0.00046 - 0.15057 0.03520 0.00666 0.00354 0.00004 0.00016 0.00101 0.00042 - 0.14316 0.03320 0.00629 0.00332 0.00004 0.00017 0.00095 0.00039 - 0.13476 0.03097 0.00587 0.00306 0.00004 0.00018 0.00088 0.00036 - 0.12782 0.02915 0.00552 0.00286 0.00004 0.00019 0.00082 0.00034 - 0.12182 0.02759 0.00521 0.00269 0.00004 0.00020 0.00077 0.00031 - 0.11468 0.02575 0.00485 0.00249 0.00004 0.00021 0.00072 0.00029 - 0.10839 0.02416 0.00454 0.00232 0.00004 0.00021 0.00067 0.00027 - 0.10286 0.02277 0.00426 0.00217 0.00004 0.00021 0.00063 0.00025 - 0.09765 0.02147 0.00400 0.00203 0.00004 0.00022 0.00059 0.00024 - 0.09284 0.02028 0.00377 0.00191 0.00004 0.00022 0.00055 0.00022 - 0.08853 0.01922 0.00355 0.00180 0.00004 0.00022 0.00052 0.00021 - 0.08466 0.01828 0.00337 0.00170 0.00004 0.00022 0.00049 0.00020 - 0.08097 0.01739 0.00319 0.00161 0.00004 0.00021 0.00047 0.00019 - 0.07751 0.01656 0.00302 0.00152 0.00004 0.00021 0.00045 0.00018 - 0.07437 0.01581 0.00287 0.00145 0.00004 0.00021 0.00042 0.00017 - 0.07153 0.01513 0.00274 0.00138 0.00004 0.00021 0.00040 0.00016 - 0.06879 0.01449 0.00261 0.00131 0.00004 0.00021 0.00039 0.00016 - 0.06619 0.01388 0.00249 0.00125 0.00004 0.00020 0.00037 0.00015 - 0.06381 0.01332 0.00238 0.00120 0.00003 0.00020 0.00035 0.00014 - 0.06164 0.01282 0.00228 0.00115 0.00003 0.00020 0.00034 0.00014 - 0.05952 0.01233 0.00219 0.00110 0.00003 0.00019 0.00033 0.00013 - 0.32365 0.08459 0.00950 0.00942 0.00000 0.00000 0.00264 0.00113 - 0.30912 0.08005 0.00937 0.00883 0.00000 0.00000 0.00247 0.00104 - 0.28788 0.07348 0.00913 0.00799 0.00000 0.00000 0.00223 0.00092 - 0.27275 0.06886 0.00890 0.00740 0.00000 0.00000 0.00207 0.00084 - 0.25732 0.06421 0.00862 0.00682 0.00001 0.00000 0.00190 0.00076 - 0.24447 0.06039 0.00837 0.00634 0.00001 0.00000 0.00177 0.00069 - 0.23260 0.05689 0.00812 0.00591 0.00001 0.00000 0.00165 0.00064 - 0.22052 0.05338 0.00784 0.00549 0.00002 0.00000 0.00153 0.00058 - 0.21047 0.05049 0.00759 0.00514 0.00002 0.00000 0.00143 0.00054 - 0.20118 0.04785 0.00734 0.00483 0.00002 0.00000 0.00135 0.00050 - 0.19410 0.04586 0.00715 0.00459 0.00002 0.00000 0.00128 0.00047 - 0.17986 0.04191 0.00673 0.00413 0.00002 0.00000 0.00115 0.00042 - 0.16851 0.03881 0.00635 0.00378 0.00002 0.00004 0.00105 0.00038 - 0.15679 0.03566 0.00593 0.00343 0.00003 0.00007 0.00096 0.00034 - 0.14564 0.03272 0.00552 0.00310 0.00003 0.00010 0.00087 0.00031 - 0.13635 0.03031 0.00516 0.00284 0.00003 0.00012 0.00080 0.00028 - 0.12771 0.02810 0.00482 0.00261 0.00003 0.00014 0.00073 0.00025 - 0.12103 0.02642 0.00455 0.00243 0.00003 0.00015 0.00068 0.00024 - 0.11350 0.02455 0.00424 0.00223 0.00003 0.00016 0.00063 0.00022 - 0.10731 0.02302 0.00398 0.00208 0.00003 0.00017 0.00059 0.00020 - 0.10198 0.02173 0.00376 0.00195 0.00003 0.00018 0.00055 0.00019 - 0.09565 0.02020 0.00349 0.00179 0.00003 0.00018 0.00051 0.00018 - 0.09012 0.01889 0.00326 0.00166 0.00003 0.00019 0.00047 0.00017 - 0.08526 0.01774 0.00306 0.00155 0.00003 0.00019 0.00044 0.00015 - 0.08070 0.01668 0.00286 0.00145 0.00003 0.00019 0.00041 0.00015 - 0.07651 0.01570 0.00269 0.00135 0.00003 0.00019 0.00039 0.00014 - 0.07276 0.01484 0.00253 0.00127 0.00003 0.00019 0.00037 0.00013 - 0.06942 0.01408 0.00239 0.00120 0.00003 0.00019 0.00035 0.00012 - 0.06623 0.01336 0.00226 0.00113 0.00003 0.00018 0.00033 0.00012 - 0.06325 0.01269 0.00214 0.00107 0.00003 0.00018 0.00031 0.00011 - 0.06056 0.01209 0.00203 0.00101 0.00003 0.00018 0.00029 0.00011 - 0.05812 0.01155 0.00194 0.00096 0.00003 0.00018 0.00028 0.00010 - 0.05578 0.01103 0.00184 0.00092 0.00003 0.00018 0.00027 0.00010 - 0.05356 0.01055 0.00175 0.00087 0.00003 0.00017 0.00026 0.00009 - 0.05154 0.01011 0.00167 0.00083 0.00003 0.00017 0.00024 0.00009 - 0.04969 0.00970 0.00160 0.00080 0.00002 0.00017 0.00023 0.00009 - 0.04790 0.00932 0.00153 0.00076 0.00002 0.00017 0.00022 0.00008 - 0.28925 0.07128 0.00597 0.00735 0.00000 0.00000 0.00200 0.00066 - 0.27534 0.06721 0.00605 0.00686 0.00000 0.00000 0.00187 0.00061 - 0.25509 0.06135 0.00610 0.00616 0.00000 0.00000 0.00168 0.00054 - 0.24073 0.05726 0.00605 0.00568 0.00000 0.00000 0.00155 0.00049 - 0.22614 0.05315 0.00595 0.00521 0.00001 0.00000 0.00142 0.00045 - 0.21404 0.04978 0.00584 0.00482 0.00001 0.00000 0.00131 0.00041 - 0.20291 0.04671 0.00570 0.00447 0.00001 0.00000 0.00122 0.00038 - 0.19162 0.04365 0.00555 0.00413 0.00001 0.00000 0.00113 0.00035 - 0.18227 0.04113 0.00539 0.00385 0.00001 0.00000 0.00105 0.00032 - 0.17366 0.03884 0.00524 0.00360 0.00001 0.00000 0.00098 0.00030 - 0.16713 0.03712 0.00511 0.00341 0.00001 0.00000 0.00093 0.00028 - 0.15404 0.03373 0.00483 0.00305 0.00002 0.00000 0.00084 0.00025 - 0.14367 0.03108 0.00456 0.00277 0.00002 0.00003 0.00076 0.00023 - 0.13303 0.02841 0.00427 0.00250 0.00002 0.00007 0.00069 0.00021 - 0.12297 0.02593 0.00397 0.00225 0.00002 0.00009 0.00062 0.00019 - 0.11464 0.02391 0.00371 0.00205 0.00002 0.00011 0.00057 0.00017 - 0.10692 0.02207 0.00346 0.00187 0.00002 0.00013 0.00052 0.00016 - 0.10100 0.02068 0.00326 0.00173 0.00002 0.00014 0.00048 0.00015 - 0.09435 0.01913 0.00304 0.00159 0.00002 0.00015 0.00044 0.00014 - 0.08890 0.01788 0.00285 0.00147 0.00002 0.00015 0.00041 0.00013 - 0.08423 0.01682 0.00268 0.00137 0.00002 0.00016 0.00038 0.00012 - 0.07872 0.01558 0.00249 0.00126 0.00002 0.00016 0.00035 0.00011 - 0.07391 0.01451 0.00232 0.00116 0.00002 0.00016 0.00033 0.00011 - 0.06971 0.01358 0.00217 0.00108 0.00002 0.00016 0.00031 0.00010 - 0.06578 0.01273 0.00203 0.00101 0.00002 0.00016 0.00029 0.00009 - 0.06218 0.01195 0.00190 0.00094 0.00002 0.00016 0.00027 0.00009 - 0.05897 0.01126 0.00178 0.00088 0.00002 0.00016 0.00025 0.00008 - 0.05612 0.01066 0.00168 0.00083 0.00002 0.00016 0.00024 0.00008 - 0.05341 0.01008 0.00159 0.00078 0.00002 0.00016 0.00022 0.00008 - 0.05088 0.00956 0.00150 0.00073 0.00002 0.00016 0.00021 0.00007 - 0.04860 0.00908 0.00142 0.00069 0.00002 0.00015 0.00020 0.00007 - 0.04655 0.00866 0.00135 0.00066 0.00002 0.00015 0.00019 0.00007 - 0.04458 0.00825 0.00128 0.00062 0.00002 0.00015 0.00018 0.00007 - 0.04272 0.00787 0.00122 0.00059 0.00002 0.00015 0.00017 0.00006 - 0.04102 0.00752 0.00116 0.00056 0.00002 0.00014 0.00017 0.00006 - 0.03948 0.00721 0.00111 0.00054 0.00002 0.00014 0.00016 0.00006 - 0.03799 0.00691 0.00106 0.00052 0.00002 0.00014 0.00015 0.00006 - 0.25559 0.05913 0.00369 0.00558 0.00000 0.00000 0.00149 0.00039 - 0.24246 0.05556 0.00388 0.00519 0.00000 0.00000 0.00139 0.00036 - 0.22342 0.05043 0.00406 0.00463 0.00000 0.00000 0.00124 0.00032 - 0.20998 0.04686 0.00411 0.00425 0.00000 0.00000 0.00114 0.00030 - 0.19637 0.04329 0.00411 0.00387 0.00000 0.00000 0.00104 0.00027 - 0.18514 0.04038 0.00407 0.00357 0.00000 0.00000 0.00096 0.00025 - 0.17485 0.03774 0.00401 0.00329 0.00001 0.00000 0.00089 0.00023 - 0.16445 0.03510 0.00392 0.00302 0.00001 0.00000 0.00081 0.00021 - 0.15588 0.03295 0.00382 0.00281 0.00001 0.00000 0.00076 0.00020 - 0.14802 0.03101 0.00372 0.00261 0.00001 0.00000 0.00071 0.00019 - 0.14207 0.02955 0.00364 0.00247 0.00001 0.00000 0.00067 0.00018 - 0.13021 0.02668 0.00344 0.00219 0.00001 0.00000 0.00059 0.00016 - 0.12087 0.02446 0.00326 0.00198 0.00001 0.00003 0.00054 0.00015 - 0.11135 0.02224 0.00305 0.00177 0.00001 0.00006 0.00048 0.00013 - 0.10240 0.02018 0.00283 0.00158 0.00001 0.00008 0.00043 0.00012 - 0.09504 0.01852 0.00264 0.00144 0.00001 0.00010 0.00039 0.00011 - 0.08826 0.01702 0.00246 0.00130 0.00001 0.00011 0.00036 0.00010 - 0.08309 0.01588 0.00232 0.00120 0.00001 0.00012 0.00033 0.00010 - 0.07730 0.01463 0.00215 0.00110 0.00001 0.00013 0.00030 0.00009 - 0.07258 0.01362 0.00201 0.00101 0.00001 0.00013 0.00028 0.00009 - 0.06855 0.01277 0.00189 0.00094 0.00001 0.00014 0.00026 0.00008 - 0.06382 0.01178 0.00175 0.00086 0.00001 0.00014 0.00024 0.00008 - 0.05971 0.01093 0.00162 0.00079 0.00001 0.00014 0.00022 0.00007 - 0.05614 0.01020 0.00151 0.00073 0.00001 0.00014 0.00021 0.00007 - 0.05280 0.00953 0.00141 0.00068 0.00001 0.00014 0.00019 0.00006 - 0.04976 0.00892 0.00132 0.00063 0.00001 0.00014 0.00018 0.00006 - 0.04706 0.00838 0.00124 0.00059 0.00001 0.00014 0.00017 0.00006 - 0.04467 0.00791 0.00116 0.00055 0.00001 0.00014 0.00016 0.00006 - 0.04240 0.00746 0.00110 0.00052 0.00001 0.00013 0.00015 0.00005 - 0.04029 0.00705 0.00103 0.00049 0.00001 0.00013 0.00014 0.00005 - 0.03840 0.00668 0.00098 0.00046 0.00001 0.00013 0.00014 0.00005 - 0.03669 0.00636 0.00093 0.00044 0.00001 0.00013 0.00013 0.00005 - 0.03506 0.00604 0.00088 0.00041 0.00001 0.00013 0.00012 0.00005 - 0.03352 0.00575 0.00083 0.00039 0.00001 0.00012 0.00012 0.00004 - 0.03213 0.00549 0.00079 0.00037 0.00001 0.00012 0.00011 0.00004 - 0.03086 0.00525 0.00076 0.00036 0.00001 0.00012 0.00011 0.00004 - 0.02964 0.00502 0.00072 0.00034 0.00001 0.00012 0.00010 0.00004 - 0.19195 0.03857 0.00137 0.00294 0.00000 0.00000 0.00078 0.00017 - 0.18077 0.03596 0.00159 0.00271 0.00000 0.00000 0.00072 0.00016 - 0.16468 0.03226 0.00181 0.00239 0.00000 0.00000 0.00063 0.00014 - 0.15342 0.02970 0.00191 0.00217 0.00000 0.00000 0.00058 0.00013 - 0.14213 0.02716 0.00196 0.00195 0.00000 0.00000 0.00052 0.00012 - 0.13288 0.02511 0.00197 0.00178 0.00000 0.00000 0.00048 0.00012 - 0.12447 0.02326 0.00196 0.00163 0.00000 0.00000 0.00044 0.00011 - 0.11605 0.02144 0.00193 0.00148 0.00000 0.00000 0.00040 0.00010 - 0.10917 0.01996 0.00189 0.00136 0.00000 0.00000 0.00037 0.00010 - 0.10290 0.01863 0.00185 0.00126 0.00000 0.00000 0.00034 0.00009 - 0.09820 0.01765 0.00181 0.00118 0.00000 0.00000 0.00032 0.00009 - 0.08891 0.01573 0.00171 0.00103 0.00001 0.00000 0.00028 0.00008 - 0.08170 0.01426 0.00162 0.00092 0.00001 0.00002 0.00025 0.00007 - 0.07443 0.01281 0.00150 0.00081 0.00001 0.00005 0.00022 0.00007 - 0.06770 0.01149 0.00139 0.00072 0.00001 0.00006 0.00020 0.00006 - 0.06223 0.01043 0.00129 0.00064 0.00001 0.00008 0.00018 0.00006 - 0.05725 0.00949 0.00119 0.00058 0.00001 0.00009 0.00016 0.00005 - 0.05349 0.00879 0.00112 0.00053 0.00001 0.00009 0.00015 0.00005 - 0.04933 0.00802 0.00103 0.00048 0.00001 0.00010 0.00014 0.00005 - 0.04597 0.00741 0.00096 0.00044 0.00001 0.00010 0.00013 0.00005 - 0.04313 0.00690 0.00090 0.00040 0.00001 0.00010 0.00012 0.00004 - 0.03982 0.00631 0.00082 0.00037 0.00001 0.00010 0.00011 0.00004 - 0.03698 0.00581 0.00076 0.00033 0.00001 0.00010 0.00010 0.00004 - 0.03452 0.00538 0.00070 0.00031 0.00001 0.00010 0.00009 0.00004 - 0.03226 0.00499 0.00065 0.00028 0.00001 0.00010 0.00008 0.00004 - 0.03020 0.00464 0.00060 0.00026 0.00001 0.00010 0.00008 0.00003 - 0.02839 0.00433 0.00056 0.00024 0.00001 0.00010 0.00007 0.00003 - 0.02679 0.00406 0.00053 0.00023 0.00001 0.00010 0.00007 0.00003 - 0.02529 0.00381 0.00049 0.00021 0.00001 0.00009 0.00007 0.00003 - 0.02391 0.00358 0.00046 0.00020 0.00001 0.00009 0.00006 0.00003 - 0.02267 0.00338 0.00044 0.00019 0.00001 0.00009 0.00006 0.00003 - 0.02156 0.00320 0.00041 0.00018 0.00001 0.00009 0.00006 0.00003 - 0.02050 0.00302 0.00039 0.00017 0.00001 0.00009 0.00005 0.00003 - 0.01951 0.00287 0.00037 0.00016 0.00001 0.00009 0.00005 0.00003 - 0.01862 0.00272 0.00035 0.00015 0.00001 0.00008 0.00005 0.00003 - 0.01781 0.00259 0.00033 0.00014 0.00001 0.00008 0.00005 0.00003 - 0.01704 0.00247 0.00031 0.00014 0.00001 0.00008 0.00005 0.00003 - 0.13540 0.02305 0.00051 0.00135 0.00000 0.00000 0.00036 0.00011 - 0.12650 0.02132 0.00066 0.00123 0.00000 0.00000 0.00033 0.00010 - 0.11381 0.01888 0.00081 0.00107 0.00000 0.00000 0.00029 0.00009 - 0.10501 0.01721 0.00087 0.00096 0.00000 0.00000 0.00026 0.00009 - 0.09626 0.01557 0.00091 0.00085 0.00000 0.00000 0.00023 0.00008 - 0.08916 0.01425 0.00093 0.00077 0.00000 0.00000 0.00021 0.00007 - 0.08276 0.01308 0.00093 0.00070 0.00000 0.00000 0.00019 0.00007 - 0.07641 0.01192 0.00091 0.00063 0.00000 0.00000 0.00017 0.00006 - 0.07126 0.01100 0.00089 0.00057 0.00000 0.00000 0.00016 0.00006 - 0.06661 0.01018 0.00087 0.00052 0.00000 0.00000 0.00015 0.00006 - 0.06315 0.00957 0.00085 0.00049 0.00000 0.00000 0.00014 0.00005 - 0.05640 0.00840 0.00080 0.00042 0.00000 0.00000 0.00012 0.00005 - 0.05122 0.00753 0.00075 0.00037 0.00000 0.00002 0.00011 0.00005 - 0.04608 0.00667 0.00069 0.00032 0.00000 0.00004 0.00009 0.00004 - 0.04138 0.00590 0.00063 0.00028 0.00000 0.00005 0.00008 0.00004 - 0.03762 0.00530 0.00058 0.00025 0.00000 0.00006 0.00007 0.00004 - 0.03425 0.00476 0.00053 0.00022 0.00000 0.00006 0.00007 0.00003 - 0.03173 0.00437 0.00049 0.00020 0.00001 0.00007 0.00006 0.00003 - 0.02897 0.00395 0.00045 0.00018 0.00001 0.00007 0.00006 0.00003 - 0.02677 0.00361 0.00042 0.00016 0.00001 0.00007 0.00005 0.00003 - 0.02493 0.00334 0.00039 0.00015 0.00001 0.00007 0.00005 0.00003 - 0.02281 0.00302 0.00035 0.00014 0.00001 0.00007 0.00004 0.00003 - 0.02100 0.00276 0.00032 0.00012 0.00001 0.00007 0.00004 0.00002 - 0.01945 0.00254 0.00029 0.00011 0.00001 0.00007 0.00004 0.00002 - 0.01804 0.00233 0.00027 0.00010 0.00001 0.00007 0.00004 0.00002 - 0.01677 0.00215 0.00025 0.00010 0.00001 0.00007 0.00003 0.00002 - 0.01566 0.00200 0.00023 0.00009 0.00001 0.00007 0.00003 0.00002 - 0.01468 0.00186 0.00022 0.00008 0.00001 0.00007 0.00003 0.00002 - 0.01378 0.00173 0.00020 0.00008 0.00001 0.00006 0.00003 0.00002 - 0.01294 0.00162 0.00019 0.00007 0.00001 0.00006 0.00003 0.00002 - 0.01220 0.00152 0.00018 0.00007 0.00001 0.00006 0.00003 0.00002 - 0.01155 0.00143 0.00016 0.00007 0.00001 0.00006 0.00003 0.00002 - 0.01092 0.00135 0.00015 0.00006 0.00001 0.00006 0.00003 0.00002 - 0.01034 0.00127 0.00015 0.00006 0.00001 0.00006 0.00002 0.00002 - 0.00982 0.00120 0.00014 0.00006 0.00001 0.00006 0.00002 0.00002 - 0.00935 0.00114 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.00891 0.00108 0.00012 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.08793 0.01227 0.00019 0.00051 0.00000 0.00000 0.00015 0.00007 - 0.08143 0.01125 0.00027 0.00047 0.00000 0.00000 0.00013 0.00007 - 0.07223 0.00981 0.00035 0.00040 0.00000 0.00000 0.00012 0.00006 - 0.06593 0.00885 0.00038 0.00035 0.00000 0.00000 0.00010 0.00006 - 0.05972 0.00790 0.00040 0.00031 0.00000 0.00000 0.00009 0.00005 - 0.05472 0.00716 0.00040 0.00028 0.00000 0.00000 0.00008 0.00005 - 0.05026 0.00650 0.00040 0.00025 0.00000 0.00000 0.00007 0.00004 - 0.04588 0.00585 0.00039 0.00022 0.00000 0.00000 0.00007 0.00004 - 0.04236 0.00534 0.00038 0.00020 0.00000 0.00000 0.00006 0.00004 - 0.03922 0.00489 0.00037 0.00018 0.00000 0.00000 0.00006 0.00003 - 0.03690 0.00456 0.00036 0.00017 0.00000 0.00000 0.00005 0.00003 - 0.03242 0.00394 0.00033 0.00014 0.00000 0.00000 0.00004 0.00003 - 0.02904 0.00348 0.00031 0.00012 0.00000 0.00001 0.00004 0.00003 - 0.02574 0.00303 0.00028 0.00011 0.00000 0.00003 0.00003 0.00002 - 0.02278 0.00264 0.00025 0.00009 0.00000 0.00003 0.00003 0.00002 - 0.02045 0.00234 0.00023 0.00008 0.00000 0.00004 0.00003 0.00002 - 0.01838 0.00207 0.00021 0.00007 0.00000 0.00004 0.00003 0.00002 - 0.01686 0.00188 0.00019 0.00007 0.00000 0.00004 0.00002 0.00002 - 0.01522 0.00168 0.00017 0.00006 0.00001 0.00005 0.00002 0.00002 - 0.01393 0.00152 0.00016 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.01286 0.00139 0.00014 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.01164 0.00125 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 - 0.01061 0.00113 0.00012 0.00004 0.00001 0.00005 0.00002 0.00002 - 0.00974 0.00103 0.00011 0.00004 0.00001 0.00005 0.00002 0.00002 - 0.00895 0.00094 0.00010 0.00004 0.00001 0.00004 0.00002 0.00002 - 0.00825 0.00086 0.00009 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00765 0.00079 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00712 0.00073 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00663 0.00068 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00619 0.00063 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00580 0.00058 0.00006 0.00003 0.00001 0.00004 0.00002 0.00001 - 0.00545 0.00055 0.00006 0.00003 0.00001 0.00004 0.00002 0.00002 - 0.00513 0.00051 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 - 0.00483 0.00048 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 - 0.00456 0.00045 0.00005 0.00002 0.00001 0.00004 0.00002 0.00002 - 0.00432 0.00042 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 - 0.00409 0.00040 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 - 0.05080 0.00554 0.00007 0.00015 0.00000 0.00000 0.00005 0.00004 - 0.04656 0.00502 0.00010 0.00014 0.00000 0.00000 0.00004 0.00004 - 0.04063 0.00431 0.00013 0.00012 0.00000 0.00000 0.00004 0.00003 - 0.03661 0.00384 0.00014 0.00010 0.00000 0.00000 0.00003 0.00003 - 0.03270 0.00338 0.00014 0.00009 0.00000 0.00000 0.00003 0.00003 - 0.02959 0.00302 0.00014 0.00008 0.00000 0.00000 0.00003 0.00002 - 0.02684 0.00271 0.00014 0.00007 0.00000 0.00000 0.00002 0.00002 - 0.02417 0.00240 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 - 0.02205 0.00217 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 - 0.02018 0.00196 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 - 0.01881 0.00181 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 - 0.01620 0.00153 0.00011 0.00004 0.00000 0.00000 0.00002 0.00001 - 0.01427 0.00133 0.00010 0.00003 0.00000 0.00001 0.00001 0.00001 - 0.01242 0.00114 0.00009 0.00003 0.00000 0.00002 0.00001 0.00001 - 0.01079 0.00097 0.00008 0.00003 0.00000 0.00002 0.00001 0.00001 - 0.00954 0.00084 0.00007 0.00002 0.00000 0.00002 0.00001 0.00001 - 0.00844 0.00074 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00765 0.00066 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00681 0.00058 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00616 0.00052 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00563 0.00047 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00503 0.00042 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00453 0.00037 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00411 0.00033 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00374 0.00030 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00342 0.00027 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00314 0.00025 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00290 0.00023 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00267 0.00021 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00248 0.00019 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00230 0.00018 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 - 0.00215 0.00017 0.00002 0.00002 0.00001 0.00003 0.00002 0.00001 - 0.00201 0.00015 0.00002 0.00002 0.00001 0.00003 0.00002 0.00002 - 0.00188 0.00014 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 - 0.00176 0.00013 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 - 0.00166 0.00013 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 - 0.00156 0.00012 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 - 0.00849 0.00042 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00755 0.00037 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00628 0.00031 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00546 0.00026 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00468 0.00022 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00408 0.00019 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - 0.00357 0.00016 0.00000 0.00001 0.00000 0.00000 0.00000 0.00000 - 0.00309 0.00014 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 - 0.00272 0.00012 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 - 0.00240 0.00011 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 - 0.00217 0.00010 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 - 0.00176 0.00008 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 - 0.00147 0.00006 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 - 0.00121 0.00005 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00099 0.00004 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00083 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00070 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00061 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00052 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 - 0.00045 0.00002 0.00000 0.00002 0.00001 0.00001 0.00002 0.00002 - 0.00040 0.00002 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00034 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00030 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00026 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 - 0.00023 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00020 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00018 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00016 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00015 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00013 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00012 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00011 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00010 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00009 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 - 0.00007 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 -'End:' +'Version' '5.4' +'Description:' +'MRST MC fit - alpha_S k_T^2' +'This set has 1 member PDFs' +'Alphas:' +'Variable','nlo','EvolCode' +1,91.71,1.43,4.30,180.0 +'MinMax:' +1,1 +1.E-05,1.,1.25,10000000. +'QCDparams:' +1,1 +0.265,0.182 +'Parameterlist:' +'list',1,1 + 0.1149 + 0.1149 +'Evolution:' +'lo',1.0,1.0 +'MRSTgrid' +1,0 + 0.02318 0.01029 12.04329 0.81780 0.00000 0.00000 0.42849 0.81780 + 0.02329 0.01039 15.58813 0.85388 0.00000 0.00000 0.46675 0.85388 + 0.02345 0.01055 21.84668 0.92632 0.00000 0.00000 0.54248 0.92632 + 0.02357 0.01067 27.14104 0.99538 0.07033 0.00000 0.61396 0.99538 + 0.02370 0.01079 33.48524 1.08469 0.16572 0.00000 0.70583 1.08469 + 0.02381 0.01090 39.63136 1.17679 0.26305 0.00000 0.80012 1.17679 + 0.02392 0.01101 46.13978 1.27938 0.37064 0.00000 0.90481 1.27938 + 0.02404 0.01112 53.73338 1.40480 0.50132 0.00000 1.03245 1.40480 + 0.02414 0.01122 60.92623 1.52858 0.62964 0.00000 1.15814 1.52858 + 0.02424 0.01132 68.40675 1.66189 0.76727 0.00000 1.29326 1.66188 + 0.02432 0.01140 74.72301 1.77777 0.88655 0.00000 1.41056 1.77776 + 0.02449 0.01157 89.35409 2.05650 1.17243 0.00000 1.69230 2.05650 + 0.02463 0.01171 102.92217 2.33352 1.45547 0.27535 1.97185 2.33352 + 0.02479 0.01187 119.50425 2.68593 1.81445 0.64518 2.32701 2.68593 + 0.02496 0.01204 138.36974 3.10266 2.23784 1.07955 2.74654 3.10266 + 0.02511 0.01220 156.93936 3.52759 2.66866 1.52007 3.17394 3.52759 + 0.02526 0.01235 177.09790 4.00385 3.15071 2.01167 3.65262 4.00384 + 0.02538 0.01248 194.92059 4.43679 3.58836 2.45709 4.08754 4.43679 + 0.02553 0.01264 217.87741 5.00964 4.16681 3.04476 4.66273 5.00963 + 0.02567 0.01277 239.41920 5.56152 4.72356 3.60950 5.21666 5.56152 + 0.02579 0.01290 260.19971 6.10623 5.27264 4.16579 5.76320 6.10622 + 0.02594 0.01306 287.98056 6.85208 6.02396 4.92608 6.51134 6.85208 + 0.02609 0.01322 315.54398 7.61070 6.78762 5.69803 7.27207 7.61070 + 0.02623 0.01336 342.63889 8.37337 7.55493 6.47299 8.03668 8.37336 + 0.02637 0.01350 370.94839 9.18712 8.37327 7.29884 8.85236 9.18712 + 0.02650 0.01365 399.84375 10.03466 9.22521 8.15803 9.70174 10.03466 + 0.02663 0.01378 428.27185 10.88434 10.07902 9.01860 10.55315 10.88434 + 0.02675 0.01391 456.01035 11.72780 10.92632 9.87219 11.39821 11.72780 + 0.02687 0.01404 484.82175 12.61845 11.82077 10.77289 12.29045 12.61845 + 0.02700 0.01416 514.06232 13.53685 12.74287 11.70105 13.21040 13.53685 + 0.02711 0.01428 542.68726 14.44949 13.65899 12.62288 14.12449 14.44949 + 0.02722 0.01440 570.52130 15.34950 14.56226 13.53150 15.02587 15.34950 + 0.02733 0.01452 599.31189 16.29286 15.50888 14.48345 15.97059 16.29286 + 0.02744 0.01463 628.45270 17.26045 16.47964 15.45942 16.93951 17.26045 + 0.02755 0.01474 656.90033 18.21682 17.43902 16.42373 17.89714 18.21682 + 0.02765 0.01485 684.48749 19.15517 18.38020 17.36954 18.83667 19.15517 + 0.02775 0.01495 712.97314 20.13505 19.36292 18.35691 19.81774 20.13505 + 0.02595 0.01294 10.58237 0.69839 0.00000 0.00000 0.36649 0.69839 + 0.02608 0.01307 13.59161 0.73002 0.00000 0.00000 0.39998 0.73002 + 0.02627 0.01327 18.83139 0.79270 0.00000 0.00000 0.46546 0.79270 + 0.02642 0.01342 23.20221 0.85174 0.06012 0.00000 0.52657 0.85174 + 0.02657 0.01358 28.38061 0.92732 0.14091 0.00000 0.60434 0.92732 + 0.02671 0.01372 33.34556 1.00455 0.22262 0.00000 0.68344 1.00455 + 0.02684 0.01385 38.55524 1.08989 0.31224 0.00000 0.77056 1.08989 + 0.02698 0.01400 44.57877 1.19339 0.42024 0.00000 0.87595 1.19339 + 0.02711 0.01413 50.23621 1.29477 0.52551 0.00000 0.97896 1.29478 + 0.02723 0.01425 56.07542 1.40323 0.63767 0.00000 1.08896 1.40323 + 0.02732 0.01435 60.97321 1.49696 0.73432 0.00000 1.18391 1.49696 + 0.02753 0.01456 72.21687 1.72064 0.96411 0.00000 1.41014 1.72064 + 0.02770 0.01475 82.51199 1.94078 1.18940 0.21958 1.63244 1.94079 + 0.02790 0.01495 94.95674 2.21821 1.47245 0.51182 1.91221 2.21821 + 0.02811 0.01517 108.95415 2.54303 1.80296 0.85162 2.23940 2.54303 + 0.02829 0.01536 122.58259 2.87112 2.13608 1.19294 2.56959 2.87112 + 0.02848 0.01556 137.22606 3.23558 2.50549 1.57044 2.93612 3.23558 + 0.02864 0.01572 150.05328 3.56424 2.83819 1.90970 3.26647 3.56425 + 0.02883 0.01592 166.42339 3.99565 3.27437 2.35368 3.69986 3.99565 + 0.02900 0.01609 181.64124 4.40792 3.69079 2.77685 4.11386 4.40792 + 0.02916 0.01625 196.19872 4.81189 4.09851 3.19066 4.51940 4.81190 + 0.02935 0.01646 215.48514 5.36075 4.65203 3.75177 5.07020 5.36076 + 0.02954 0.01665 234.43675 5.91439 5.20998 4.31672 5.62564 5.91441 + 0.02972 0.01683 252.89949 6.46672 5.76627 4.87946 6.17962 6.46673 + 0.02989 0.01702 272.02420 7.05171 6.35517 5.47470 6.76623 7.05172 + 0.03007 0.01720 291.37924 7.65657 6.96380 6.08945 7.37267 7.65659 + 0.03023 0.01737 310.26709 8.25879 7.56953 6.70089 7.97635 8.25880 + 0.03039 0.01753 328.55746 8.85275 8.16677 7.30343 8.57167 8.85277 + 0.03055 0.01769 347.41473 9.47601 8.79327 7.93521 9.19628 9.47603 + 0.03071 0.01785 366.41357 10.11473 9.43515 8.58221 9.83632 10.11475 + 0.03086 0.01800 384.88226 10.74570 10.06909 9.22096 10.46852 10.74572 + 0.03100 0.01815 402.72040 11.36443 10.69060 9.84698 11.08841 11.36446 + 0.03115 0.01829 421.05347 12.00947 11.33842 10.49929 11.73461 12.00950 + 0.03129 0.01844 439.48856 12.66747 11.99913 11.16439 12.39374 12.66750 + 0.03143 0.01858 457.37341 13.31446 12.64868 11.81810 13.04180 13.31449 + 0.03156 0.01871 474.61447 13.94612 13.28275 12.45608 13.67446 13.94615 + 0.03170 0.01885 492.31384 14.60255 13.94161 13.11885 14.33190 14.60259 + 0.02897 0.01601 9.31363 0.59974 0.00000 0.00000 0.31519 0.59974 + 0.02911 0.01617 11.86438 0.62752 0.00000 0.00000 0.34455 0.62752 + 0.02934 0.01641 16.24365 0.68182 0.00000 0.00000 0.40125 0.68182 + 0.02951 0.01660 19.84529 0.73234 0.05143 0.00000 0.45352 0.73234 + 0.02970 0.01680 24.06453 0.79635 0.11989 0.00000 0.51939 0.79635 + 0.02986 0.01697 28.06883 0.86114 0.18853 0.00000 0.58578 0.86114 + 0.03001 0.01714 32.23323 0.93216 0.26321 0.00000 0.65833 0.93217 + 0.03018 0.01732 37.00637 1.01762 0.35252 0.00000 0.74539 1.01762 + 0.03033 0.01748 41.45318 1.10072 0.43895 0.00000 0.82987 1.10072 + 0.03047 0.01764 46.00996 1.18904 0.53044 0.00000 0.91951 1.18904 + 0.03059 0.01776 49.80827 1.26494 0.60883 0.00000 0.99644 1.26494 + 0.03083 0.01803 58.45507 1.44468 0.79380 0.00000 1.17836 1.44469 + 0.03105 0.01825 66.27811 1.61996 0.97348 0.17547 1.35547 1.61996 + 0.03128 0.01851 75.64002 1.83889 1.19723 0.40698 1.57640 1.83890 + 0.03153 0.01878 86.06147 2.09288 1.45608 0.67368 1.83241 2.09289 + 0.03176 0.01902 96.10950 2.34720 1.71469 0.93924 2.08851 2.34721 + 0.03199 0.01926 106.80801 2.62743 1.99916 1.23054 2.37050 2.62744 + 0.03218 0.01946 116.10349 2.87831 2.25349 1.49042 2.62282 2.87833 + 0.03241 0.01971 127.87103 3.20527 2.58454 1.82805 2.95148 3.20529 + 0.03262 0.01993 138.72200 3.51550 2.89831 2.14753 3.26317 3.51552 + 0.03281 0.02013 149.02768 3.81756 3.20356 2.45792 3.56656 3.81757 + 0.03306 0.02038 162.57642 4.22517 3.61515 2.87593 3.97582 4.22519 + 0.03329 0.02062 175.78175 4.63339 4.02705 3.29373 4.38557 4.63341 + 0.03351 0.02084 188.54976 5.03795 4.43499 3.70712 4.79153 5.03797 + 0.03373 0.02107 201.68074 5.46375 4.86413 4.14161 5.21871 5.46378 + 0.03395 0.02129 214.87666 5.90132 5.30491 4.58756 5.65762 5.90135 + 0.03415 0.02150 227.66812 6.33444 5.74103 5.02850 6.09198 6.33448 + 0.03435 0.02170 239.97827 6.75934 6.16872 5.46066 6.51803 6.75937 + 0.03455 0.02190 252.59341 7.20286 6.61501 5.91141 6.96271 7.20290 + 0.03475 0.02210 265.22827 7.65508 7.06992 6.37063 7.41604 7.65512 + 0.03494 0.02229 277.44128 8.09964 7.51702 6.82179 7.86165 8.09968 + 0.03512 0.02247 289.17380 8.53357 7.95332 7.26189 8.29657 8.53362 + 0.03530 0.02265 301.17004 8.98397 8.40609 7.71845 8.74795 8.98402 + 0.03549 0.02283 313.17038 9.44138 8.86581 8.18188 9.20632 9.44144 + 0.03566 0.02300 324.75513 9.88927 9.31588 8.63545 9.65511 9.88932 + 0.03583 0.02317 335.87042 10.32480 9.75347 9.07633 10.09149 10.32485 + 0.03600 0.02333 347.22900 10.77566 10.20640 9.53256 10.54322 10.77573 + 0.03099 0.01817 8.63945 0.54876 0.00000 0.00000 0.28865 0.54876 + 0.03116 0.01835 10.94826 0.57450 0.00000 0.00000 0.31583 0.57450 + 0.03142 0.01863 14.87735 0.62439 0.00000 0.00000 0.36789 0.62439 + 0.03161 0.01884 18.08012 0.67042 0.04686 0.00000 0.41553 0.67043 + 0.03182 0.01907 21.80567 0.72838 0.10888 0.00000 0.47517 0.72839 + 0.03200 0.01926 25.31891 0.78671 0.17070 0.00000 0.53495 0.78671 + 0.03218 0.01946 28.95226 0.85032 0.23765 0.00000 0.59995 0.85032 + 0.03237 0.01966 33.09398 0.92647 0.31732 0.00000 0.67756 0.92648 + 0.03253 0.01984 36.93293 1.00019 0.39407 0.00000 0.75254 1.00020 + 0.03270 0.02002 40.84906 1.07822 0.47499 0.00000 0.83176 1.07823 + 0.03283 0.02016 44.10057 1.14504 0.54408 0.00000 0.89953 1.14505 + 0.03311 0.02046 51.46362 1.30254 0.70634 0.00000 1.05900 1.30255 + 0.03335 0.02072 58.07458 1.45524 0.86306 0.15323 1.21337 1.45525 + 0.03362 0.02101 65.93589 1.64492 1.05712 0.35432 1.40486 1.64494 + 0.03391 0.02131 74.62984 1.86371 1.28034 0.58465 1.62549 1.86373 + 0.03417 0.02159 82.96062 2.08161 1.50215 0.81273 1.84501 2.08163 + 0.03444 0.02186 91.77975 2.32049 1.74489 1.06165 2.08549 2.32051 + 0.03466 0.02209 99.40285 2.53340 1.96093 1.28271 2.29969 2.53342 + 0.03493 0.02237 109.00412 2.80963 2.24088 1.56862 2.57746 2.80966 + 0.03517 0.02262 117.81219 3.07055 2.50503 1.83793 2.83972 3.07058 + 0.03539 0.02285 126.13960 3.32360 2.76099 2.09854 3.09398 3.32364 + 0.03568 0.02313 137.03427 3.66364 3.10465 2.44799 3.43552 3.66368 + 0.03595 0.02341 147.59799 4.00267 3.44702 2.79570 3.77593 4.00271 + 0.03620 0.02366 157.76317 4.33727 3.78471 3.13831 4.11181 4.33732 + 0.03646 0.02392 168.16980 4.68807 4.13854 3.49698 4.46386 4.68812 + 0.03671 0.02417 178.58133 5.04719 4.50058 3.86369 4.82419 5.04724 + 0.03696 0.02441 188.63106 5.40137 4.85749 4.22495 5.17950 5.40143 + 0.03719 0.02463 198.26465 5.74767 5.20633 4.57784 5.52685 5.74773 + 0.03742 0.02486 208.09923 6.10798 5.56916 4.94468 5.88820 6.10804 + 0.03766 0.02509 217.91235 6.47418 5.93782 5.31724 6.25542 6.47425 + 0.03788 0.02530 227.36395 6.83311 6.29905 5.68213 6.61530 6.83318 + 0.03809 0.02550 236.41277 7.18245 6.65054 6.03706 6.96553 7.18253 + 0.03831 0.02571 245.63503 7.54407 7.01431 6.40426 7.32804 7.54415 + 0.03853 0.02591 254.83009 7.91030 7.38266 6.77595 7.69515 7.91039 + 0.03873 0.02611 263.67911 8.26798 7.74233 7.13878 8.05365 8.26808 + 0.03893 0.02629 272.14435 8.61494 8.09116 7.49058 8.40138 8.61504 + 0.03913 0.02648 280.76993 8.97327 8.45136 7.85376 8.76048 8.97337 + 0.03257 0.01988 8.18898 0.51525 0.00000 0.00000 0.27120 0.51525 + 0.03275 0.02008 10.33674 0.53964 0.00000 0.00000 0.29693 0.53964 + 0.03303 0.02039 13.96778 0.58658 0.00000 0.00000 0.34590 0.58658 + 0.03324 0.02062 16.90793 0.62964 0.04383 0.00000 0.39046 0.62965 + 0.03347 0.02087 20.30992 0.68360 0.10158 0.00000 0.44599 0.68360 + 0.03367 0.02109 23.50268 0.73765 0.15891 0.00000 0.50140 0.73766 + 0.03387 0.02130 26.79072 0.79638 0.22076 0.00000 0.56143 0.79639 + 0.03408 0.02152 30.52337 0.86644 0.29411 0.00000 0.63284 0.86645 + 0.03426 0.02172 33.96984 0.93402 0.36452 0.00000 0.70160 0.93403 + 0.03444 0.02191 37.47357 1.00533 0.43854 0.00000 0.77403 1.00534 + 0.03459 0.02207 40.37399 1.06624 0.50157 0.00000 0.83582 1.06625 + 0.03490 0.02240 46.91564 1.20930 0.64908 0.00000 0.98072 1.20931 + 0.03517 0.02268 52.75471 1.34739 0.79092 0.13883 1.12036 1.34741 + 0.03547 0.02300 59.66427 1.51821 0.96584 0.32029 1.29288 1.51823 + 0.03579 0.02333 67.26715 1.71440 1.16616 0.52723 1.49077 1.71442 + 0.03608 0.02363 74.51758 1.90898 1.36440 0.73130 1.68687 1.90900 + 0.03638 0.02393 82.15865 2.12148 1.58051 0.95316 1.90086 2.12151 + 0.03663 0.02418 88.73681 2.31023 1.77219 1.14950 2.09083 2.31027 + 0.03693 0.02449 96.98878 2.55429 2.01973 1.40258 2.33632 2.55433 + 0.03720 0.02476 104.52840 2.78403 2.25248 1.64013 2.56731 2.78407 + 0.03745 0.02501 111.63087 3.00616 2.47733 1.86931 2.79056 3.00621 + 0.03777 0.02532 120.88695 3.30368 2.77824 2.17560 3.08948 3.30374 + 0.03808 0.02562 129.82481 3.59930 3.07698 2.47931 3.38639 3.59936 + 0.03837 0.02590 138.39249 3.89013 3.37069 2.77759 3.67841 3.89019 + 0.03866 0.02618 147.13147 4.19410 3.67750 3.08890 3.98355 4.19417 + 0.03894 0.02645 155.84300 4.50436 3.99049 3.40623 4.29494 4.50444 + 0.03922 0.02671 164.22281 4.80950 4.29818 3.71796 4.60113 4.80958 + 0.03948 0.02696 172.22986 5.10705 4.59811 4.02165 4.89967 5.10714 + 0.03975 0.02721 180.37828 5.41586 4.90927 4.33654 5.20945 5.41595 + 0.04001 0.02745 188.48390 5.72894 5.22464 4.65554 5.52347 5.72904 + 0.04026 0.02769 196.26779 6.03506 5.53292 4.96722 5.83049 6.03517 + 0.04051 0.02791 203.69887 6.33234 5.83221 5.26970 6.12859 6.33245 + 0.04075 0.02814 211.25194 6.63940 6.14128 5.58195 6.43648 6.63952 + 0.04100 0.02836 218.76202 6.94970 6.45355 5.89733 6.74760 6.94982 + 0.04123 0.02857 225.97054 7.25212 6.75784 6.20455 7.05079 7.25225 + 0.04146 0.02877 232.84923 7.54491 7.05237 6.50185 7.34430 7.54504 + 0.04169 0.02898 239.84103 7.84670 7.35592 6.80817 7.64681 7.84684 + 0.03383 0.02130 7.85717 0.49100 0.00000 0.00000 0.25856 0.49100 + 0.03403 0.02151 9.88692 0.51438 0.00000 0.00000 0.28322 0.51439 + 0.03433 0.02184 13.30073 0.55917 0.00000 0.00000 0.32993 0.55918 + 0.03455 0.02208 16.05050 0.60006 0.04161 0.00000 0.37224 0.60007 + 0.03480 0.02235 19.21909 0.65109 0.09625 0.00000 0.42477 0.65110 + 0.03501 0.02258 22.18172 0.70205 0.15031 0.00000 0.47701 0.70206 + 0.03522 0.02281 25.22282 0.75725 0.20847 0.00000 0.53343 0.75726 + 0.03545 0.02305 28.66412 0.82289 0.27724 0.00000 0.60037 0.82291 + 0.03565 0.02326 31.83217 0.88606 0.34309 0.00000 0.66464 0.88607 + 0.03584 0.02347 35.04438 0.95255 0.41215 0.00000 0.73219 0.95256 + 0.03600 0.02363 37.69738 1.00922 0.47084 0.00000 0.78970 1.00924 + 0.03633 0.02398 43.66268 1.14197 0.60781 0.00000 0.92419 1.14198 + 0.03663 0.02429 48.96327 1.26967 0.73908 0.12858 1.05337 1.26970 + 0.03696 0.02463 55.21236 1.42715 0.90044 0.29613 1.21246 1.42718 + 0.03730 0.02498 62.06223 1.60740 1.08463 0.48656 1.39433 1.60744 + 0.03762 0.02530 68.57095 1.78563 1.26632 0.67378 1.57399 1.78566 + 0.03794 0.02563 75.40720 1.97970 1.46382 0.87671 1.76948 1.97975 + 0.03821 0.02590 81.27468 2.15164 1.63853 1.05583 1.94256 2.15168 + 0.03854 0.02622 88.61304 2.37338 1.86357 1.28610 2.16566 2.37343 + 0.03884 0.02651 95.29766 2.58158 2.07463 1.50170 2.37504 2.58163 + 0.03911 0.02678 101.57774 2.78242 2.27805 1.70921 2.57695 2.78248 + 0.03946 0.02712 109.73849 3.05077 2.54962 1.98586 2.84663 3.05084 + 0.03979 0.02743 117.59455 3.31672 2.81853 2.25946 3.11380 3.31679 + 0.04011 0.02773 125.10381 3.57773 3.08228 2.52753 3.37594 3.57781 + 0.04043 0.02803 132.74242 3.84993 3.35717 2.80668 3.64925 3.85002 + 0.04074 0.02833 140.33675 4.12715 3.63697 3.09058 3.92754 4.12724 + 0.04104 0.02861 147.62332 4.39921 3.91146 3.36888 4.20060 4.39931 + 0.04133 0.02887 154.56932 4.66401 4.17850 3.63948 4.46632 4.66411 + 0.04162 0.02914 161.62167 4.93830 4.45503 3.91953 4.74153 4.93841 + 0.04191 0.02940 168.62108 5.21587 4.73478 4.20270 5.02001 5.21600 + 0.04219 0.02965 175.32811 5.48681 5.00776 4.47890 5.29178 5.48694 + 0.04245 0.02989 181.71785 5.74947 5.27233 4.74649 5.55523 5.74961 + 0.04272 0.03013 188.19965 6.02035 5.54512 5.02228 5.82690 6.02049 + 0.04299 0.03036 194.63159 6.29365 5.82029 5.30039 6.10097 6.29381 + 0.04325 0.03059 200.79346 6.55962 6.08802 5.57089 6.36766 6.55978 + 0.04350 0.03081 206.66266 6.81673 6.34680 5.83228 6.62546 6.81690 + 0.04375 0.03103 212.61777 7.08139 6.61312 6.10121 6.89081 7.08156 + 0.03829 0.02634 6.91040 0.42350 0.00000 0.00000 0.22337 0.42350 + 0.03854 0.02660 8.60487 0.44405 0.00000 0.00000 0.24500 0.44406 + 0.03892 0.02701 11.40688 0.48272 0.00000 0.00000 0.28529 0.48273 + 0.03921 0.02732 13.62531 0.51747 0.03534 0.00000 0.32124 0.51748 + 0.03953 0.02764 16.14729 0.56029 0.08123 0.00000 0.36532 0.56030 + 0.03980 0.02793 18.47678 0.60256 0.12613 0.00000 0.40868 0.60258 + 0.04008 0.02821 20.84266 0.64790 0.17399 0.00000 0.45506 0.64792 + 0.04037 0.02851 23.49220 0.70132 0.23006 0.00000 0.50957 0.70134 + 0.04063 0.02877 25.90787 0.75226 0.28328 0.00000 0.56145 0.75229 + 0.04088 0.02903 28.33629 0.80548 0.33868 0.00000 0.61557 0.80552 + 0.04108 0.02923 30.32707 0.85054 0.38545 0.00000 0.66133 0.85058 + 0.04152 0.02966 34.75890 0.95514 0.49363 0.00000 0.76741 0.95519 + 0.04191 0.03004 38.63858 1.05469 0.59620 0.10073 0.86819 1.05474 + 0.04234 0.03046 43.15744 1.17617 0.72098 0.23070 0.99104 1.17623 + 0.04280 0.03090 48.04951 1.31375 0.86189 0.37684 1.12998 1.31381 + 0.04322 0.03130 52.64354 1.44840 0.99949 0.51907 1.26585 1.44848 + 0.04365 0.03170 57.41608 1.59367 1.14766 0.67178 1.41231 1.59376 + 0.04401 0.03203 61.47215 1.72129 1.27763 0.80545 1.54090 1.72139 + 0.04446 0.03243 66.49579 1.88453 1.44367 0.97587 1.70529 1.88463 + 0.04485 0.03279 71.02716 2.03653 1.59810 1.13410 1.85829 2.03665 + 0.04522 0.03312 75.24726 2.18210 1.74586 1.28527 2.00476 2.18223 + 0.04569 0.03353 80.68009 2.37509 1.94157 1.48524 2.19887 2.37523 + 0.04614 0.03393 85.85830 2.56477 2.13376 1.68136 2.38958 2.56492 + 0.04656 0.03429 90.76248 2.74953 2.32084 1.87206 2.57529 2.74969 + 0.04700 0.03466 95.70743 2.94081 2.51441 2.06918 2.76752 2.94099 + 0.04742 0.03503 100.58136 3.13426 2.71006 2.26825 2.96187 3.13445 + 0.04783 0.03537 105.21941 3.32285 2.90070 2.46209 3.15130 3.32305 + 0.04822 0.03570 109.60696 3.50527 3.08504 2.64940 3.33451 3.50549 + 0.04862 0.03602 114.02852 3.69311 3.27477 2.84208 3.52313 3.69334 + 0.04901 0.03635 118.38481 3.88209 3.46560 3.03577 3.71288 3.88234 + 0.04939 0.03665 122.52988 4.06553 3.65078 3.22364 3.89703 4.06579 + 0.04975 0.03695 126.45242 4.24244 3.82931 3.40468 4.07460 4.24271 + 0.05012 0.03724 130.40602 4.42397 4.01246 3.59035 4.25680 4.42425 + 0.05048 0.03753 134.30374 4.60620 4.19627 3.77662 4.43968 4.60650 + 0.05084 0.03781 138.01474 4.78268 4.37426 3.95692 4.61679 4.78300 + 0.05117 0.03808 141.52861 4.95253 4.54552 4.13036 4.78721 4.95286 + 0.05152 0.03835 145.07338 5.12659 4.72100 4.30802 4.96185 5.12693 + 0.04376 0.03254 6.08014 0.36650 0.00000 0.00000 0.19363 0.36651 + 0.04409 0.03287 7.48133 0.38459 0.00000 0.00000 0.21263 0.38460 + 0.04460 0.03337 9.75620 0.41795 0.00000 0.00000 0.24735 0.41797 + 0.04499 0.03374 11.52358 0.44739 0.02993 0.00000 0.27781 0.44742 + 0.04541 0.03415 13.50343 0.48315 0.06828 0.00000 0.31463 0.48319 + 0.04578 0.03450 15.30807 0.51802 0.10537 0.00000 0.35041 0.51806 + 0.04614 0.03485 17.11977 0.55501 0.14449 0.00000 0.38828 0.55506 + 0.04654 0.03522 19.12581 0.59814 0.18986 0.00000 0.43233 0.59820 + 0.04689 0.03554 20.93558 0.63888 0.23253 0.00000 0.47386 0.63895 + 0.04723 0.03586 22.73793 0.68108 0.27657 0.00000 0.51681 0.68115 + 0.04751 0.03611 24.20349 0.71655 0.31348 0.00000 0.55288 0.71663 + 0.04811 0.03665 27.43069 0.79810 0.39806 0.00000 0.63567 0.79819 + 0.04863 0.03711 30.20875 0.87479 0.47731 0.07808 0.71341 0.87490 + 0.04923 0.03763 33.40152 0.96734 0.57265 0.17775 0.80710 0.96747 + 0.04986 0.03817 36.81078 1.07094 0.67907 0.28854 0.91186 1.07109 + 0.05044 0.03866 39.97086 1.17124 0.78186 0.39519 1.01318 1.17140 + 0.05103 0.03916 43.21396 1.27835 0.89143 0.50855 1.12130 1.27854 + 0.05153 0.03957 45.94011 1.37161 0.98668 0.60688 1.21538 1.37181 + 0.05214 0.04007 49.28002 1.48983 1.10727 0.73112 1.33457 1.49005 + 0.05269 0.04051 52.25968 1.59893 1.21843 0.84545 1.44452 1.59917 + 0.05320 0.04091 55.00756 1.70260 1.32395 0.95382 1.54894 1.70285 + 0.05385 0.04142 58.50802 1.83887 1.46253 1.09595 1.68616 1.83915 + 0.05447 0.04191 61.80709 1.97162 1.59742 1.23411 1.81979 1.97193 + 0.05506 0.04236 64.89905 2.09986 1.72763 1.36734 1.94884 2.10019 + 0.05566 0.04282 67.98560 2.23160 1.86131 1.50398 2.08138 2.23196 + 0.05626 0.04326 70.99787 2.36382 1.99540 1.64092 2.21436 2.36420 + 0.05683 0.04369 73.83739 2.49179 2.12511 1.77330 2.34305 2.49219 + 0.05737 0.04409 76.49996 2.61474 2.24970 1.90036 2.46667 2.61518 + 0.05792 0.04449 79.16006 2.74053 2.37710 2.03022 2.59312 2.74099 + 0.05846 0.04488 81.75870 2.86629 2.50443 2.15993 2.71953 2.86677 + 0.05899 0.04526 84.21115 2.98762 2.62724 2.28498 2.84146 2.98812 + 0.05949 0.04562 86.51376 3.10396 2.74496 2.40480 2.95837 3.10448 + 0.06000 0.04598 88.81721 3.22269 2.86507 2.52701 3.07767 3.22324 + 0.06051 0.04634 91.07071 3.34122 2.98496 2.64894 3.19675 3.34179 + 0.06100 0.04668 93.20055 3.45542 3.10044 2.76635 3.31148 3.45602 + 0.06146 0.04701 95.20316 3.56477 3.21100 2.87873 3.42133 3.56540 + 0.06194 0.04734 97.20946 3.67630 3.32374 2.99329 3.53336 3.67695 + 0.04762 0.03680 5.64480 0.33747 0.00000 0.00000 0.17848 0.33749 + 0.04801 0.03717 6.89160 0.35428 0.00000 0.00000 0.19611 0.35431 + 0.04863 0.03774 8.89277 0.38487 0.00000 0.00000 0.22794 0.38491 + 0.04909 0.03816 10.42907 0.41156 0.02711 0.00000 0.25553 0.41161 + 0.04960 0.03862 12.13426 0.44367 0.06157 0.00000 0.28861 0.44374 + 0.05005 0.03902 13.67563 0.47473 0.09465 0.00000 0.32049 0.47480 + 0.05049 0.03941 15.21181 0.50746 0.12930 0.00000 0.35401 0.50754 + 0.05097 0.03983 16.90067 0.54536 0.16923 0.00000 0.39274 0.54545 + 0.05140 0.04020 18.41419 0.58094 0.20656 0.00000 0.42904 0.58105 + 0.05182 0.04056 19.91263 0.61760 0.24489 0.00000 0.46639 0.61772 + 0.05215 0.04084 21.12481 0.64828 0.27687 0.00000 0.49760 0.64841 + 0.05288 0.04145 23.77573 0.71837 0.34971 0.00000 0.56881 0.71852 + 0.05352 0.04198 26.03292 0.78380 0.41745 0.06690 0.63519 0.78397 + 0.05425 0.04257 28.60500 0.86221 0.49839 0.15172 0.71464 0.86241 + 0.05502 0.04318 31.32749 0.94934 0.58808 0.24533 0.80282 0.94957 + 0.05573 0.04373 33.83001 1.03312 0.67412 0.33484 0.88753 1.03337 + 0.05646 0.04429 36.37823 1.12203 0.76526 0.42938 0.97734 1.12231 + 0.05707 0.04476 38.50518 1.19899 0.84403 0.51092 1.05505 1.19929 + 0.05782 0.04532 41.09273 1.29602 0.94322 0.61339 1.15296 1.29635 + 0.05849 0.04582 43.38479 1.38506 1.03413 0.70715 1.24278 1.38543 + 0.05911 0.04628 45.48511 1.46925 1.12001 0.79558 1.32766 1.46964 + 0.05991 0.04686 48.14236 1.57934 1.23220 0.91096 1.43861 1.57976 + 0.06067 0.04741 50.62837 1.68598 1.34079 1.02249 1.54605 1.68644 + 0.06140 0.04792 52.94235 1.78848 1.44508 1.12949 1.64928 1.78897 + 0.06213 0.04843 55.23705 1.89325 1.55162 1.23869 1.75478 1.89379 + 0.06285 0.04894 57.46194 1.99791 1.65798 1.34761 1.86014 1.99847 + 0.06355 0.04941 59.54611 2.09874 1.76041 1.45243 1.96162 2.09934 + 0.06421 0.04986 61.48890 2.19521 1.85837 1.55262 2.05871 2.19585 + 0.06488 0.05032 63.41870 2.29351 1.95814 1.65459 2.15761 2.29418 + 0.06555 0.05076 65.29313 2.39139 2.05746 1.75605 2.25608 2.39209 + 0.06619 0.05119 67.05235 2.48546 2.15289 1.85350 2.35071 2.48620 + 0.06680 0.05159 68.69530 2.57534 2.24403 1.94653 2.44111 2.57611 + 0.06742 0.05200 70.33045 2.66676 2.33671 2.04109 2.53305 2.66756 + 0.06804 0.05240 71.92173 2.75770 2.42890 2.13511 2.62450 2.75854 + 0.06863 0.05279 73.41812 2.84503 2.51740 2.22535 2.71231 2.84590 + 0.06920 0.05315 74.81830 2.92840 2.60188 2.31145 2.79613 2.92930 + 0.06978 0.05352 76.21436 3.01316 2.68775 2.39896 2.88136 3.01410 + 0.05080 0.04016 5.35747 0.31859 0.00000 0.00000 0.16863 0.31863 + 0.05126 0.04057 6.50149 0.33456 0.00000 0.00000 0.18536 0.33461 + 0.05196 0.04119 8.32214 0.36332 0.00000 0.00000 0.21527 0.36339 + 0.05251 0.04165 9.70741 0.38819 0.02526 0.00000 0.24098 0.38827 + 0.05309 0.04216 11.23435 0.41791 0.05716 0.00000 0.27160 0.41800 + 0.05362 0.04260 12.60601 0.44647 0.08760 0.00000 0.30093 0.44658 + 0.05413 0.04302 13.96557 0.47641 0.11934 0.00000 0.33160 0.47653 + 0.05469 0.04348 15.45225 0.51091 0.15573 0.00000 0.36688 0.51105 + 0.05518 0.04388 16.77789 0.54315 0.18960 0.00000 0.39979 0.54331 + 0.05567 0.04427 18.08446 0.57624 0.22424 0.00000 0.43351 0.57641 + 0.05606 0.04459 19.13730 0.60383 0.25305 0.00000 0.46160 0.60401 + 0.05691 0.04525 21.42775 0.66657 0.31835 0.00000 0.52539 0.66679 + 0.05765 0.04583 23.36152 0.72482 0.37876 0.05976 0.58452 0.72506 + 0.05850 0.04647 25.55063 0.79425 0.45055 0.13515 0.65492 0.79453 + 0.05940 0.04714 27.85213 0.87097 0.52967 0.21790 0.73263 0.87129 + 0.06022 0.04775 29.95404 0.94437 0.60519 0.29662 0.80690 0.94473 + 0.06106 0.04836 32.08136 1.02189 0.68479 0.37938 0.88527 1.02228 + 0.06177 0.04887 33.84721 1.08871 0.75331 0.45046 0.95278 1.08913 + 0.06264 0.04949 35.98368 1.17259 0.83921 0.53940 1.03749 1.17305 + 0.06342 0.05003 37.86559 1.24925 0.91762 0.62045 1.11487 1.24975 + 0.06415 0.05053 39.58141 1.32145 0.99141 0.69660 1.18772 1.32199 + 0.06507 0.05116 41.74042 1.41549 1.08742 0.79557 1.28257 1.41607 + 0.06596 0.05176 43.74849 1.50620 1.17996 0.89083 1.37403 1.50683 + 0.06680 0.05232 45.60734 1.59304 1.26848 0.98186 1.46157 1.59371 + 0.06765 0.05288 47.44094 1.68149 1.35859 1.07443 1.55069 1.68220 + 0.06849 0.05343 49.20937 1.76950 1.44820 1.16643 1.63936 1.77026 + 0.06929 0.05395 50.85752 1.85401 1.53421 1.25465 1.72449 1.85481 + 0.07006 0.05444 52.38652 1.93460 1.61621 1.33871 1.80566 1.93545 + 0.07083 0.05493 53.89808 2.01646 1.69946 1.42400 1.88809 2.01736 + 0.07160 0.05542 55.35936 2.09773 1.78208 1.50861 1.96992 2.09866 + 0.07234 0.05588 56.72456 2.17561 1.86124 1.58963 2.04832 2.17659 + 0.07304 0.05632 57.99386 2.24981 1.93663 1.66677 2.12301 2.25083 + 0.07376 0.05676 59.25174 2.32507 2.01309 1.74497 2.19877 2.32613 + 0.07447 0.05720 60.47046 2.39974 2.08894 1.82252 2.27392 2.40085 + 0.07515 0.05762 61.61163 2.47127 2.16157 1.89676 2.34591 2.47242 + 0.07581 0.05801 62.67504 2.53938 2.23073 1.96744 2.41445 2.54057 + 0.07647 0.05842 63.73100 2.60848 2.30087 2.03910 2.48398 2.60970 + 0.05350 0.04296 5.14679 0.30493 0.00000 0.00000 0.16150 0.30498 + 0.05401 0.04339 6.21495 0.32029 0.00000 0.00000 0.17757 0.32035 + 0.05480 0.04406 7.90343 0.34771 0.00000 0.00000 0.20608 0.34779 + 0.05541 0.04456 9.17892 0.37124 0.02390 0.00000 0.23042 0.37135 + 0.05607 0.04510 10.57714 0.39921 0.05394 0.00000 0.25923 0.39933 + 0.05665 0.04557 11.82692 0.42596 0.08246 0.00000 0.28671 0.42610 + 0.05723 0.04603 13.06028 0.45387 0.11208 0.00000 0.31532 0.45404 + 0.05786 0.04652 14.40319 0.48591 0.14591 0.00000 0.34809 0.48610 + 0.05841 0.04695 15.59585 0.51575 0.17728 0.00000 0.37856 0.51595 + 0.05896 0.04737 16.76718 0.54626 0.20927 0.00000 0.40967 0.54648 + 0.05940 0.04770 17.70811 0.57163 0.23580 0.00000 0.43552 0.57187 + 0.06035 0.04842 19.74658 0.62913 0.29573 0.00000 0.49401 0.62941 + 0.06119 0.04903 21.45580 0.68226 0.35091 0.05467 0.54798 0.68257 + 0.06215 0.04973 23.38058 0.74533 0.41622 0.12337 0.61197 0.74568 + 0.06315 0.05044 25.39329 0.81472 0.48789 0.19846 0.68230 0.81512 + 0.06408 0.05110 27.22200 0.88084 0.55601 0.26961 0.74924 0.88128 + 0.06503 0.05175 29.06385 0.95039 0.62756 0.34413 0.81961 0.95088 + 0.06583 0.05230 30.58602 1.01015 0.68893 0.40791 0.88002 1.01068 + 0.06681 0.05295 32.41959 1.08491 0.76561 0.48746 0.95558 1.08549 + 0.06768 0.05354 34.02746 1.15301 0.83538 0.55971 1.02436 1.15364 + 0.06849 0.05407 35.48753 1.21696 0.90084 0.62741 1.08893 1.21763 + 0.06954 0.05475 37.31675 1.29999 0.98575 0.71510 1.17273 1.30071 + 0.07053 0.05539 39.01009 1.37981 1.06732 0.79924 1.25327 1.38059 + 0.07147 0.05599 40.57071 1.45600 1.14511 0.87939 1.33012 1.45683 + 0.07242 0.05659 42.10354 1.53336 1.22406 0.96067 1.40813 1.53425 + 0.07336 0.05717 43.57562 1.61012 1.30236 1.04121 1.48553 1.61107 + 0.07426 0.05773 44.94193 1.68363 1.37730 1.11824 1.55963 1.68463 + 0.07511 0.05825 46.20454 1.75356 1.44857 1.19145 1.63011 1.75461 + 0.07598 0.05878 47.44796 1.82441 1.52076 1.26556 1.70151 1.82551 + 0.07684 0.05930 48.64542 1.89458 1.59222 1.33890 1.77222 1.89573 + 0.07766 0.05979 49.75996 1.96168 1.66054 1.40898 1.83981 1.96288 + 0.07845 0.06026 50.79247 2.02546 1.72547 1.47555 1.90406 2.02671 + 0.07925 0.06073 51.81208 2.09002 1.79118 1.54290 1.96910 2.09132 + 0.08004 0.06120 52.79638 2.15394 1.85623 1.60956 2.03349 2.15529 + 0.08080 0.06164 53.71482 2.21505 1.91840 1.67325 2.09503 2.21645 + 0.08153 0.06206 54.56775 2.27313 1.97748 1.73376 2.15353 2.27458 + 0.08227 0.06249 55.41185 2.33194 2.03730 1.79501 2.21275 2.33343 + 0.06413 0.05300 4.55955 0.26724 0.00000 0.00000 0.14185 0.26740 + 0.06488 0.05354 5.41033 0.28085 0.00000 0.00000 0.15607 0.28104 + 0.06606 0.05438 6.72546 0.30447 0.00000 0.00000 0.18060 0.30471 + 0.06696 0.05500 7.69509 0.32423 0.02008 0.00000 0.20105 0.32451 + 0.06794 0.05568 8.73853 0.34727 0.04487 0.00000 0.22480 0.34759 + 0.06880 0.05627 9.65564 0.36892 0.06804 0.00000 0.24708 0.36929 + 0.06966 0.05684 10.54742 0.39120 0.09177 0.00000 0.26996 0.39161 + 0.07059 0.05746 11.50437 0.41642 0.11852 0.00000 0.29580 0.41688 + 0.07141 0.05800 12.34271 0.43961 0.14303 0.00000 0.31953 0.44011 + 0.07222 0.05853 13.15604 0.46307 0.16775 0.00000 0.34351 0.46361 + 0.07287 0.05894 13.80244 0.48239 0.18807 0.00000 0.36323 0.48296 + 0.07427 0.05984 15.18282 0.52562 0.23339 0.00000 0.40733 0.52627 + 0.07551 0.06061 16.31186 0.56498 0.27451 0.04098 0.44741 0.56570 + 0.07691 0.06148 17.55995 0.61102 0.32250 0.09178 0.49425 0.61182 + 0.07839 0.06237 18.84030 0.66093 0.37438 0.14652 0.54498 0.66183 + 0.07975 0.06319 19.98235 0.70783 0.42303 0.19768 0.59259 0.70880 + 0.08114 0.06400 21.11264 0.75653 0.47346 0.25059 0.64201 0.75759 + 0.08230 0.06468 22.03193 0.79789 0.51623 0.29538 0.68395 0.79903 + 0.08372 0.06550 23.12161 0.84905 0.56908 0.35061 0.73581 0.85028 + 0.08499 0.06622 24.06148 0.89512 0.61662 0.40022 0.78248 0.89643 + 0.08616 0.06688 24.90225 0.93794 0.66077 0.44624 0.82586 0.93934 + 0.08767 0.06772 25.93850 0.99294 0.71744 0.50523 0.88155 0.99444 + 0.08909 0.06851 26.88083 1.04522 0.77126 0.56119 0.93446 1.04681 + 0.09044 0.06925 27.73473 1.09457 0.82205 0.61395 0.98441 1.09626 + 0.09180 0.06998 28.55964 1.14419 0.87308 0.66692 1.03461 1.14598 + 0.09313 0.07070 29.33875 1.19293 0.92319 0.71891 1.08392 1.19482 + 0.09441 0.07138 30.05019 1.23916 0.97071 0.76817 1.13069 1.24114 + 0.09562 0.07202 30.69747 1.28276 1.01551 0.81459 1.17478 1.28483 + 0.09684 0.07266 31.32505 1.32656 1.06050 0.86120 1.21908 1.32871 + 0.09805 0.07329 31.92002 1.36956 1.10468 0.90694 1.26257 1.37181 + 0.09920 0.07389 32.46526 1.41035 1.14657 0.95031 1.30382 1.41269 + 0.10030 0.07446 32.96275 1.44884 1.18609 0.99120 1.34273 1.45125 + 0.10141 0.07503 33.44673 1.48750 1.22580 1.03229 1.38184 1.49000 + 0.10251 0.07559 33.90671 1.52550 1.26482 1.07265 1.42026 1.52809 + 0.10357 0.07612 34.32939 1.56157 1.30186 1.11096 1.45673 1.56423 + 0.10457 0.07663 34.71605 1.59562 1.33682 1.14712 1.49116 1.59836 + 0.10559 0.07714 35.09295 1.62987 1.37199 1.18348 1.52580 1.63269 + 0.07974 0.06551 4.07564 0.23595 0.00000 0.00000 0.12557 0.23644 + 0.08090 0.06620 4.73353 0.24801 0.00000 0.00000 0.13817 0.24857 + 0.08269 0.06726 5.72582 0.26826 0.00000 0.00000 0.15923 0.26893 + 0.08406 0.06806 6.43721 0.28472 0.01677 0.00000 0.17628 0.28548 + 0.08555 0.06892 7.18686 0.30347 0.03707 0.00000 0.19567 0.30433 + 0.08687 0.06967 7.83327 0.32075 0.05569 0.00000 0.21351 0.32170 + 0.08817 0.07040 8.45126 0.33824 0.07446 0.00000 0.23152 0.33927 + 0.08957 0.07119 9.10331 0.35772 0.09529 0.00000 0.25156 0.35885 + 0.09081 0.07187 9.66552 0.37537 0.11412 0.00000 0.26970 0.37659 + 0.09203 0.07254 10.20319 0.39300 0.13287 0.00000 0.28780 0.39430 + 0.09300 0.07307 10.62513 0.40736 0.14812 0.00000 0.30253 0.40873 + 0.09511 0.07420 11.51093 0.43903 0.18168 0.00000 0.33498 0.44057 + 0.09695 0.07518 12.21249 0.46736 0.21161 0.03007 0.36398 0.46903 + 0.09904 0.07627 12.97038 0.49996 0.24597 0.06680 0.39731 0.50179 + 0.10122 0.07740 13.72946 0.53470 0.28251 0.10574 0.43280 0.53670 + 0.10322 0.07841 14.39085 0.56682 0.31623 0.14157 0.46559 0.56898 + 0.10524 0.07944 15.03082 0.59968 0.35068 0.17811 0.49911 0.60200 + 0.10693 0.08028 15.54052 0.62721 0.37952 0.20864 0.52719 0.62967 + 0.10899 0.08130 16.13189 0.66082 0.41469 0.24582 0.56145 0.66344 + 0.11082 0.08219 16.63064 0.69068 0.44592 0.27880 0.59189 0.69346 + 0.11250 0.08301 17.06766 0.71811 0.47460 0.30904 0.61985 0.72103 + 0.11465 0.08404 17.59405 0.75289 0.51095 0.34735 0.65529 0.75600 + 0.11667 0.08501 18.06062 0.78551 0.54502 0.38323 0.68852 0.78878 + 0.11857 0.08591 18.47299 0.81592 0.57678 0.41666 0.71950 0.81935 + 0.12048 0.08680 18.86153 0.84612 0.60833 0.44984 0.75027 0.84972 + 0.12235 0.08767 19.21914 0.87544 0.63895 0.48204 0.78014 0.87920 + 0.12412 0.08849 19.53731 0.90294 0.66768 0.51224 0.80816 0.90686 + 0.12580 0.08926 19.81951 0.92859 0.69448 0.54042 0.83430 0.93266 + 0.12748 0.09003 20.08602 0.95410 0.72114 0.56844 0.86029 0.95831 + 0.12914 0.09078 20.33187 0.97889 0.74706 0.59568 0.88556 0.98325 + 0.13072 0.09150 20.55100 1.00218 0.77141 0.62127 0.90930 1.00668 + 0.13221 0.09217 20.74536 1.02394 0.79417 0.64520 0.93148 1.02857 + 0.13372 0.09284 20.92911 1.04561 0.81685 0.66903 0.95358 1.05037 + 0.13521 0.09350 21.09838 1.06670 0.83894 0.69226 0.97510 1.07160 + 0.13663 0.09413 21.24908 1.08655 0.85973 0.71412 0.99535 1.09158 + 0.13798 0.09472 21.38254 1.10513 0.87920 0.73460 1.01431 1.11028 + 0.13934 0.09532 21.50827 1.12367 0.89863 0.75505 1.03322 1.12894 + 0.09264 0.07435 3.84238 0.22006 0.00000 0.00000 0.11736 0.22103 + 0.09413 0.07516 4.39685 0.23125 0.00000 0.00000 0.12907 0.23233 + 0.09646 0.07640 5.22013 0.24964 0.00000 0.00000 0.14823 0.25090 + 0.09822 0.07733 5.79924 0.26431 0.01503 0.00000 0.16348 0.26570 + 0.10014 0.07833 6.40108 0.28077 0.03297 0.00000 0.18056 0.28231 + 0.10184 0.07920 6.91346 0.29575 0.04922 0.00000 0.19607 0.29742 + 0.10350 0.08005 7.39773 0.31073 0.06544 0.00000 0.21157 0.31254 + 0.10529 0.08096 7.90289 0.32724 0.08326 0.00000 0.22863 0.32920 + 0.10687 0.08176 8.33369 0.34206 0.09922 0.00000 0.24392 0.34415 + 0.10842 0.08253 8.74162 0.35673 0.11499 0.00000 0.25906 0.35895 + 0.10966 0.08314 9.05894 0.36860 0.12772 0.00000 0.27129 0.37092 + 0.11232 0.08445 9.71711 0.39452 0.15548 0.00000 0.29798 0.39708 + 0.11464 0.08557 10.22553 0.41743 0.17995 0.02477 0.32156 0.42019 + 0.11726 0.08682 10.76542 0.44351 0.20776 0.05473 0.34836 0.44649 + 0.11999 0.08811 11.29647 0.47097 0.23699 0.08615 0.37658 0.47420 + 0.12247 0.08927 11.75089 0.49609 0.26370 0.11478 0.40236 0.49954 + 0.12498 0.09043 12.18284 0.52152 0.29071 0.14369 0.42847 0.52521 + 0.12706 0.09139 12.52111 0.54264 0.31313 0.16765 0.45014 0.54651 + 0.12959 0.09254 12.90670 0.56819 0.34024 0.19659 0.47636 0.57230 + 0.13183 0.09355 13.22581 0.59068 0.36410 0.22204 0.49943 0.59500 + 0.13388 0.09446 13.50045 0.61117 0.38584 0.24521 0.52046 0.61568 + 0.13649 0.09562 13.82454 0.63693 0.41317 0.27433 0.54689 0.64168 + 0.13893 0.09670 14.10509 0.66085 0.43856 0.30136 0.57144 0.66584 + 0.14122 0.09770 14.34722 0.68296 0.46203 0.32635 0.59413 0.68817 + 0.14351 0.09869 14.56976 0.70473 0.48516 0.35097 0.61649 0.71016 + 0.14575 0.09965 14.76917 0.72569 0.50744 0.37469 0.63801 0.73133 + 0.14786 0.10055 14.94168 0.74519 0.52818 0.39678 0.65804 0.75103 + 0.14984 0.10140 15.09034 0.76324 0.54740 0.41725 0.67660 0.76927 + 0.15184 0.10224 15.22641 0.78106 0.56638 0.43747 0.69491 0.78727 + 0.15379 0.10306 15.34771 0.79824 0.58471 0.45700 0.71259 0.80465 + 0.15564 0.10383 15.45190 0.81427 0.60182 0.47524 0.72908 0.82085 + 0.15739 0.10456 15.54071 0.82914 0.61771 0.49219 0.74439 0.83589 + 0.15915 0.10528 15.62112 0.84385 0.63344 0.50898 0.75954 0.85076 + 0.16088 0.10600 15.69156 0.85807 0.64867 0.52525 0.77419 0.86515 + 0.16253 0.10667 15.75087 0.87136 0.66292 0.54048 0.78790 0.87860 + 0.16409 0.10730 15.80023 0.88372 0.67619 0.55467 0.80065 0.89111 + 0.16566 0.10794 15.84351 0.89597 0.68936 0.56876 0.81330 0.90351 + 0.10429 0.08154 3.69957 0.20962 0.00000 0.00000 0.11201 0.21117 + 0.10609 0.08245 4.18419 0.22018 0.00000 0.00000 0.12308 0.22188 + 0.10888 0.08383 4.89517 0.23725 0.00000 0.00000 0.14094 0.23920 + 0.11100 0.08488 5.38772 0.25068 0.01385 0.00000 0.15494 0.25281 + 0.11329 0.08599 5.89404 0.26557 0.03021 0.00000 0.17046 0.26791 + 0.11532 0.08697 6.32076 0.27898 0.04490 0.00000 0.18441 0.28150 + 0.11729 0.08792 6.72041 0.29229 0.05943 0.00000 0.19824 0.29499 + 0.11942 0.08893 7.13347 0.30683 0.07528 0.00000 0.21334 0.30973 + 0.12130 0.08982 7.48261 0.31978 0.08937 0.00000 0.22677 0.32286 + 0.12313 0.09067 7.81053 0.33253 0.10321 0.00000 0.23998 0.33577 + 0.12459 0.09135 8.06376 0.34277 0.11432 0.00000 0.25060 0.34615 + 0.12772 0.09279 8.58375 0.36498 0.13838 0.00000 0.27360 0.36866 + 0.13045 0.09404 8.97644 0.38443 0.15941 0.02143 0.29372 0.38837 + 0.13350 0.09541 9.38716 0.40637 0.18309 0.04714 0.31641 0.41061 + 0.13667 0.09683 9.78467 0.42927 0.20779 0.07388 0.34008 0.43381 + 0.13955 0.09810 10.11926 0.45002 0.23016 0.09806 0.36153 0.45486 + 0.14245 0.09936 10.43206 0.47088 0.25262 0.12230 0.38308 0.47600 + 0.14484 0.10040 10.67307 0.48806 0.27113 0.14226 0.40084 0.49342 + 0.14774 0.10165 10.94309 0.50870 0.29336 0.16622 0.42217 0.51435 + 0.15030 0.10274 11.16231 0.52674 0.31280 0.18715 0.44081 0.53264 + 0.15264 0.10373 11.34748 0.54307 0.33040 0.20609 0.45769 0.54920 + 0.15559 0.10497 11.56124 0.56344 0.35238 0.22975 0.47875 0.56987 + 0.15836 0.10612 11.74144 0.58221 0.37265 0.25157 0.49818 0.58892 + 0.16094 0.10719 11.89268 0.59943 0.39128 0.27162 0.51601 0.60641 + 0.16350 0.10824 12.02751 0.61627 0.40951 0.29125 0.53345 0.62350 + 0.16601 0.10926 12.14422 0.63237 0.42696 0.31005 0.55014 0.63985 + 0.16836 0.11021 12.24135 0.64724 0.44311 0.32746 0.56556 0.65496 + 0.17057 0.11110 12.32156 0.66092 0.45798 0.34351 0.57976 0.66886 + 0.17278 0.11198 12.39145 0.67433 0.47259 0.35928 0.59369 0.68249 + 0.17494 0.11284 12.45019 0.68719 0.48662 0.37444 0.60706 0.69557 + 0.17698 0.11365 12.49723 0.69910 0.49965 0.38853 0.61945 0.70768 + 0.17890 0.11441 12.53406 0.71008 0.51168 0.40156 0.63089 0.71886 + 0.18083 0.11516 12.56409 0.72088 0.52354 0.41441 0.64215 0.72985 + 0.18272 0.11590 12.58682 0.73126 0.53496 0.42679 0.65298 0.74042 + 0.18452 0.11659 12.60248 0.74091 0.54559 0.43834 0.66305 0.75024 + 0.18621 0.11724 12.61208 0.74982 0.55544 0.44905 0.67237 0.75932 + 0.18792 0.11790 12.61676 0.75860 0.56516 0.45964 0.68157 0.76828 + 0.11516 0.08775 3.60145 0.20186 0.00000 0.00000 0.10808 0.20409 + 0.11724 0.08875 4.03363 0.21191 0.00000 0.00000 0.11865 0.21434 + 0.12046 0.09027 4.66142 0.22795 0.00000 0.00000 0.13549 0.23069 + 0.12290 0.09141 5.09060 0.24041 0.01295 0.00000 0.14854 0.24339 + 0.12552 0.09263 5.52769 0.25411 0.02813 0.00000 0.16287 0.25734 + 0.12784 0.09370 5.89289 0.26634 0.04165 0.00000 0.17566 0.26980 + 0.13010 0.09473 6.23224 0.27839 0.05495 0.00000 0.18825 0.28207 + 0.13252 0.09583 6.58015 0.29147 0.06935 0.00000 0.20190 0.29539 + 0.13465 0.09679 6.87195 0.30304 0.08208 0.00000 0.21397 0.30718 + 0.13673 0.09772 7.14403 0.31436 0.09452 0.00000 0.22577 0.31871 + 0.13838 0.09845 7.35277 0.32342 0.10446 0.00000 0.23521 0.32794 + 0.14192 0.10001 7.77754 0.34293 0.12586 0.00000 0.25554 0.34782 + 0.14499 0.10135 8.09133 0.35989 0.14443 0.01904 0.27320 0.36509 + 0.14841 0.10283 8.41481 0.37887 0.16520 0.04174 0.29296 0.38443 + 0.15196 0.10434 8.72301 0.39853 0.18670 0.06520 0.31342 0.40445 + 0.15516 0.10570 8.97820 0.41622 0.20604 0.08627 0.33183 0.42248 + 0.15838 0.10705 9.21274 0.43387 0.22534 0.10727 0.35020 0.44046 + 0.16103 0.10815 9.39042 0.44832 0.24115 0.12447 0.36524 0.45519 + 0.16423 0.10947 9.58579 0.46556 0.26003 0.14499 0.38321 0.47277 + 0.16704 0.11062 9.74106 0.48054 0.27645 0.16283 0.39881 0.48804 + 0.16960 0.11166 9.86940 0.49401 0.29123 0.17890 0.41286 0.50179 + 0.17283 0.11296 10.01368 0.51072 0.30959 0.19886 0.43029 0.51883 + 0.17584 0.11416 10.13130 0.52601 0.32643 0.21717 0.44626 0.53444 + 0.17865 0.11527 10.22639 0.53994 0.34180 0.23391 0.46082 0.54866 + 0.18143 0.11637 10.30753 0.55348 0.35677 0.25021 0.47499 0.56249 + 0.18413 0.11742 10.37408 0.56634 0.37102 0.26575 0.48845 0.57563 + 0.18666 0.11840 10.42593 0.57814 0.38414 0.28007 0.50083 0.58769 + 0.18903 0.11932 10.46541 0.58893 0.39617 0.29321 0.51216 0.59873 + 0.19139 0.12022 10.49626 0.59945 0.40792 0.30607 0.52322 0.60949 + 0.19370 0.12110 10.51846 0.60947 0.41915 0.31838 0.53377 0.61975 + 0.19587 0.12192 10.53243 0.61870 0.42952 0.32976 0.54350 0.62920 + 0.19791 0.12269 10.53949 0.62716 0.43906 0.34025 0.55243 0.63787 + 0.19996 0.12345 10.54092 0.63543 0.44842 0.35055 0.56118 0.64635 + 0.20196 0.12420 10.53687 0.64334 0.45739 0.36044 0.56955 0.65446 + 0.20385 0.12490 10.52826 0.65063 0.46571 0.36963 0.57729 0.66195 + 0.20564 0.12555 10.51599 0.65734 0.47337 0.37811 0.58442 0.66883 + 0.20743 0.12621 10.49969 0.66391 0.48092 0.38647 0.59141 0.67559 + 0.13544 0.09844 3.47242 0.19046 0.00000 0.00000 0.10242 0.19430 + 0.13801 0.09958 3.82799 0.19968 0.00000 0.00000 0.11219 0.20380 + 0.14197 0.10133 4.33605 0.21410 0.00000 0.00000 0.12746 0.21865 + 0.14496 0.10264 4.67532 0.22508 0.01163 0.00000 0.13909 0.22997 + 0.14817 0.10404 5.01532 0.23698 0.02507 0.00000 0.15166 0.24222 + 0.15098 0.10525 5.29515 0.24746 0.03690 0.00000 0.16274 0.25302 + 0.15371 0.10642 5.55158 0.25766 0.04841 0.00000 0.17352 0.26352 + 0.15664 0.10767 5.81073 0.26861 0.06075 0.00000 0.18508 0.27480 + 0.15920 0.10875 6.02503 0.27820 0.07155 0.00000 0.19521 0.28467 + 0.16169 0.10979 6.22221 0.28749 0.08202 0.00000 0.20502 0.29424 + 0.16366 0.11062 6.37167 0.29486 0.09033 0.00000 0.21281 0.30184 + 0.16787 0.11236 6.67067 0.31058 0.10803 0.00000 0.22941 0.31803 + 0.17149 0.11385 6.88158 0.32406 0.12321 0.01576 0.24364 0.33191 + 0.17550 0.11548 7.09255 0.33895 0.13999 0.03436 0.25937 0.34726 + 0.17964 0.11714 7.28694 0.35418 0.15717 0.05336 0.27546 0.36295 + 0.18335 0.11862 7.44210 0.36770 0.17244 0.07025 0.28977 0.37689 + 0.18705 0.12008 7.57916 0.38103 0.18752 0.08692 0.30387 0.39063 + 0.19009 0.12126 7.67874 0.39183 0.19976 0.10045 0.31531 0.40177 + 0.19373 0.12268 7.78301 0.40457 0.21423 0.11646 0.32882 0.41491 + 0.19691 0.12390 7.86107 0.41550 0.22669 0.13025 0.34043 0.42620 + 0.19980 0.12500 7.92150 0.42524 0.23782 0.14257 0.35079 0.43625 + 0.20341 0.12636 7.98366 0.43717 0.25150 0.15775 0.36350 0.44858 + 0.20677 0.12762 8.02824 0.44796 0.26392 0.17154 0.37501 0.45973 + 0.20987 0.12877 8.05858 0.45767 0.27515 0.18404 0.38539 0.46977 + 0.21293 0.12990 8.07856 0.46698 0.28598 0.19612 0.39538 0.47942 + 0.21588 0.13098 8.08868 0.47573 0.29620 0.20753 0.40478 0.48848 + 0.21864 0.13198 8.09023 0.48366 0.30552 0.21796 0.41332 0.49670 + 0.22121 0.13290 8.08503 0.49083 0.31398 0.22746 0.42106 0.50414 + 0.22375 0.13381 8.07364 0.49773 0.32219 0.23669 0.42853 0.51131 + 0.22623 0.13469 8.05680 0.50422 0.32996 0.24546 0.43559 0.51806 + 0.22855 0.13550 8.03595 0.51014 0.33707 0.25351 0.44203 0.52421 + 0.23072 0.13626 8.01208 0.51549 0.34356 0.26088 0.44789 0.52979 + 0.23288 0.13701 7.98426 0.52066 0.34988 0.26806 0.45356 0.53519 + 0.23499 0.13773 7.95323 0.52554 0.35588 0.27491 0.45893 0.54028 + 0.23697 0.13841 7.92059 0.52999 0.36139 0.28123 0.46385 0.54493 + 0.23883 0.13904 7.88701 0.53403 0.36644 0.28703 0.46833 0.54915 + 0.24069 0.13967 7.85062 0.53794 0.37136 0.29270 0.47268 0.55324 + 0.16349 0.11198 3.35407 0.17825 0.00000 0.00000 0.09659 0.18496 + 0.16667 0.11331 3.63106 0.18647 0.00000 0.00000 0.10543 0.19357 + 0.17155 0.11533 4.01880 0.19904 0.00000 0.00000 0.11895 0.20674 + 0.17520 0.11684 4.26941 0.20840 0.01022 0.00000 0.12903 0.21656 + 0.17911 0.11843 4.51521 0.21836 0.02186 0.00000 0.13976 0.22700 + 0.18251 0.11982 4.71339 0.22700 0.03196 0.00000 0.14906 0.23606 + 0.18581 0.12114 4.89152 0.23528 0.04167 0.00000 0.15799 0.24475 + 0.18931 0.12255 5.06789 0.24405 0.05195 0.00000 0.16745 0.25395 + 0.19237 0.12376 5.21075 0.25164 0.06085 0.00000 0.17563 0.26190 + 0.19531 0.12492 5.33962 0.25890 0.06939 0.00000 0.18347 0.26952 + 0.19764 0.12584 5.43550 0.26461 0.07611 0.00000 0.18964 0.27551 + 0.20257 0.12776 5.62221 0.27661 0.09027 0.00000 0.20262 0.28811 + 0.20679 0.12938 5.74298 0.28673 0.10224 0.01265 0.21358 0.29873 + 0.21142 0.13115 5.85700 0.29774 0.11530 0.02740 0.22551 0.31029 + 0.21616 0.13294 5.95498 0.30879 0.12846 0.04227 0.23753 0.32191 + 0.22037 0.13451 6.02685 0.31846 0.14002 0.05534 0.24804 0.33206 + 0.22453 0.13604 6.08406 0.32783 0.15128 0.06808 0.25826 0.34191 + 0.22792 0.13728 6.12065 0.33530 0.16031 0.07831 0.26644 0.34977 + 0.23196 0.13874 6.15263 0.34399 0.17087 0.09030 0.27597 0.35892 + 0.23546 0.13999 6.17045 0.35133 0.17984 0.10051 0.28405 0.36665 + 0.23861 0.14111 6.17873 0.35777 0.18777 0.10955 0.29115 0.37344 + 0.24253 0.14249 6.17896 0.36554 0.19741 0.12056 0.29976 0.38163 + 0.24613 0.14374 6.16957 0.37242 0.20604 0.13046 0.30742 0.38890 + 0.24943 0.14487 6.15303 0.37851 0.21376 0.13934 0.31423 0.39534 + 0.25267 0.14597 6.12963 0.38424 0.22110 0.14783 0.32068 0.40141 + 0.25577 0.14701 6.10063 0.38952 0.22795 0.15577 0.32665 0.40701 + 0.25865 0.14796 6.06809 0.39422 0.23411 0.16296 0.33200 0.41200 + 0.26130 0.14883 6.03332 0.39838 0.23965 0.16945 0.33677 0.41643 + 0.26392 0.14968 5.99463 0.40230 0.24495 0.17569 0.34130 0.42062 + 0.26644 0.15049 5.95326 0.40592 0.24991 0.18156 0.34551 0.42449 + 0.26879 0.15124 5.91114 0.40915 0.25440 0.18690 0.34929 0.42794 + 0.27098 0.15192 5.86895 0.41200 0.25845 0.19175 0.35266 0.43100 + 0.27314 0.15259 5.82433 0.41469 0.26234 0.19643 0.35588 0.43390 + 0.27523 0.15324 5.77839 0.41717 0.26599 0.20086 0.35887 0.43658 + 0.27719 0.15383 5.73298 0.41937 0.26931 0.20490 0.36156 0.43896 + 0.27902 0.15438 5.68857 0.42132 0.27231 0.20858 0.36396 0.44107 + 0.28083 0.15492 5.64245 0.42315 0.27519 0.21215 0.36624 0.44306 + 0.20626 0.13108 3.22298 0.16319 0.00000 0.00000 0.08984 0.17543 + 0.21021 0.13263 3.41340 0.17008 0.00000 0.00000 0.09746 0.18286 + 0.21620 0.13497 3.67174 0.18031 0.00000 0.00000 0.10881 0.19390 + 0.22066 0.13668 3.82927 0.18772 0.00858 0.00000 0.11705 0.20190 + 0.22538 0.13849 3.97810 0.19542 0.01818 0.00000 0.12563 0.21021 + 0.22947 0.14005 4.09377 0.20194 0.02636 0.00000 0.13293 0.21727 + 0.23339 0.14153 4.19402 0.20808 0.03410 0.00000 0.13982 0.22392 + 0.23754 0.14308 4.28935 0.21446 0.04217 0.00000 0.14698 0.23082 + 0.24112 0.14440 4.36333 0.21987 0.04907 0.00000 0.15308 0.23669 + 0.24454 0.14566 4.42721 0.22497 0.05560 0.00000 0.15884 0.24221 + 0.24723 0.14665 4.47272 0.22892 0.06068 0.00000 0.16332 0.24650 + 0.25289 0.14869 4.55561 0.23707 0.07122 0.00000 0.17257 0.25533 + 0.25765 0.15039 4.59521 0.24377 0.07997 0.00952 0.18021 0.26260 + 0.26283 0.15222 4.62384 0.25089 0.08935 0.02046 0.18836 0.27032 + 0.26805 0.15403 4.63895 0.25784 0.09863 0.03130 0.19637 0.27787 + 0.27263 0.15559 4.64094 0.26376 0.10662 0.04067 0.20323 0.28430 + 0.27710 0.15710 4.63276 0.26936 0.11428 0.04968 0.20975 0.29037 + 0.28070 0.15829 4.61895 0.27371 0.12032 0.05681 0.21487 0.29511 + 0.28493 0.15967 4.59446 0.27864 0.12727 0.06505 0.22070 0.30047 + 0.28855 0.16083 4.56647 0.28268 0.13308 0.07198 0.22553 0.30488 + 0.29177 0.16185 4.53609 0.28614 0.13814 0.07803 0.22969 0.30865 + 0.29573 0.16308 4.49175 0.29017 0.14417 0.08531 0.23461 0.31306 + 0.29932 0.16418 4.44486 0.29361 0.14948 0.09175 0.23887 0.31684 + 0.30257 0.16515 4.39691 0.29654 0.15413 0.09744 0.24256 0.32006 + 0.30572 0.16607 4.34558 0.29919 0.15848 0.10281 0.24595 0.32298 + 0.30869 0.16692 4.29247 0.30151 0.16246 0.10777 0.24899 0.32556 + 0.31141 0.16769 4.23992 0.30348 0.16597 0.11219 0.25163 0.32775 + 0.31389 0.16837 4.18867 0.30514 0.16907 0.11612 0.25391 0.32961 + 0.31630 0.16902 4.13568 0.30661 0.17198 0.11986 0.25600 0.33127 + 0.31860 0.16962 4.08233 0.30789 0.17465 0.12333 0.25787 0.33271 + 0.32072 0.17017 4.03064 0.30894 0.17702 0.12645 0.25949 0.33391 + 0.32266 0.17065 3.98100 0.30979 0.17911 0.12923 0.26087 0.33490 + 0.32455 0.17112 3.93034 0.31052 0.18108 0.13189 0.26212 0.33576 + 0.32637 0.17155 3.87984 0.31112 0.18288 0.13437 0.26323 0.33647 + 0.32804 0.17193 3.83132 0.31158 0.18448 0.13660 0.26417 0.33703 + 0.32959 0.17228 3.78503 0.31191 0.18589 0.13861 0.26496 0.33745 + 0.33110 0.17261 3.73802 0.31216 0.18722 0.14053 0.26566 0.33778 + 0.24550 0.14770 3.11039 0.15093 0.00000 0.00000 0.08468 0.16914 + 0.24996 0.14937 3.24140 0.15674 0.00000 0.00000 0.09130 0.17555 + 0.25669 0.15187 3.41307 0.16515 0.00000 0.00000 0.10096 0.18487 + 0.26165 0.15370 3.50987 0.17110 0.00737 0.00000 0.10783 0.19147 + 0.26687 0.15560 3.59673 0.17716 0.01550 0.00000 0.11486 0.19819 + 0.27136 0.15722 3.66067 0.18219 0.02234 0.00000 0.12074 0.20379 + 0.27563 0.15874 3.71295 0.18684 0.02873 0.00000 0.12620 0.20897 + 0.28011 0.16032 3.75925 0.19159 0.03532 0.00000 0.13181 0.21426 + 0.28395 0.16167 3.79222 0.19555 0.04088 0.00000 0.13651 0.21867 + 0.28760 0.16293 3.81802 0.19923 0.04609 0.00000 0.14089 0.22277 + 0.29045 0.16391 3.83444 0.20204 0.05011 0.00000 0.14426 0.22591 + 0.29638 0.16591 3.85844 0.20771 0.05836 0.00000 0.15111 0.23224 + 0.30132 0.16755 3.85355 0.21227 0.06509 0.00754 0.15665 0.23732 + 0.30662 0.16928 3.83667 0.21698 0.07220 0.01610 0.16245 0.24258 + 0.31189 0.17095 3.80896 0.22146 0.07913 0.02447 0.16802 0.24758 + 0.31645 0.17237 3.77599 0.22516 0.08500 0.03162 0.17269 0.25170 + 0.32084 0.17370 3.73615 0.22855 0.09055 0.03840 0.17703 0.25548 + 0.32433 0.17474 3.69873 0.23110 0.09486 0.04372 0.18036 0.25833 + 0.32838 0.17591 3.64875 0.23390 0.09975 0.04979 0.18407 0.26146 + 0.33181 0.17687 3.60091 0.23610 0.10378 0.05483 0.18706 0.26392 + 0.33481 0.17769 3.55448 0.23791 0.10723 0.05919 0.18958 0.26595 + 0.33846 0.17866 3.49260 0.23992 0.11130 0.06437 0.19247 0.26820 + 0.34171 0.17949 3.43191 0.24152 0.11480 0.06891 0.19488 0.27001 + 0.34461 0.18020 3.37326 0.24279 0.11782 0.07286 0.19689 0.27144 + 0.34736 0.18085 3.31328 0.24383 0.12060 0.07655 0.19867 0.27263 + 0.34993 0.18142 3.25355 0.24465 0.12308 0.07991 0.20018 0.27358 + 0.35224 0.18192 3.19633 0.24525 0.12523 0.08287 0.20143 0.27427 + 0.35432 0.18234 3.14198 0.24566 0.12710 0.08548 0.20245 0.27476 + 0.35631 0.18272 3.08710 0.24594 0.12881 0.08793 0.20331 0.27510 + 0.35817 0.18306 3.03300 0.24607 0.13034 0.09017 0.20402 0.27529 + 0.35985 0.18334 2.98157 0.24609 0.13167 0.09216 0.20458 0.27534 + 0.36136 0.18357 2.93298 0.24600 0.13281 0.09392 0.20499 0.27527 + 0.36282 0.18377 2.88413 0.24582 0.13385 0.09557 0.20531 0.27511 + 0.36419 0.18395 2.83612 0.24556 0.13478 0.09709 0.20553 0.27485 + 0.36543 0.18408 2.79057 0.24523 0.13558 0.09844 0.20565 0.27451 + 0.36655 0.18419 2.74762 0.24484 0.13626 0.09964 0.20570 0.27412 + 0.36762 0.18427 2.70447 0.24439 0.13687 0.10077 0.20567 0.27365 + 0.31575 0.17622 2.87346 0.13024 0.00000 0.00000 0.07635 0.16005 + 0.32066 0.17791 2.92594 0.13436 0.00000 0.00000 0.08137 0.16472 + 0.32798 0.18038 2.98621 0.14008 0.00000 0.00000 0.08843 0.17122 + 0.33329 0.18215 3.00748 0.14394 0.00561 0.00000 0.09328 0.17562 + 0.33881 0.18395 3.01923 0.14772 0.01165 0.00000 0.09809 0.17993 + 0.34347 0.18545 3.02197 0.15074 0.01663 0.00000 0.10199 0.18338 + 0.34784 0.18683 3.01871 0.15343 0.02120 0.00000 0.10552 0.18645 + 0.35236 0.18823 3.00948 0.15607 0.02581 0.00000 0.10904 0.18946 + 0.35617 0.18939 2.99706 0.15818 0.02964 0.00000 0.11191 0.19187 + 0.35974 0.19045 2.98155 0.16008 0.03316 0.00000 0.11452 0.19403 + 0.36249 0.19125 2.96697 0.16148 0.03584 0.00000 0.11648 0.19562 + 0.36809 0.19283 2.92993 0.16418 0.04123 0.00000 0.12033 0.19866 + 0.37262 0.19406 2.88140 0.16620 0.04552 0.00509 0.12332 0.20092 + 0.37735 0.19528 2.82179 0.16815 0.04993 0.01074 0.12631 0.20308 + 0.38190 0.19638 2.75587 0.16983 0.05412 0.01617 0.12904 0.20492 + 0.38570 0.19724 2.69341 0.17109 0.05757 0.02070 0.13120 0.20626 + 0.38924 0.19798 2.62850 0.17210 0.06074 0.02492 0.13309 0.20731 + 0.39196 0.19850 2.57362 0.17275 0.06315 0.02816 0.13446 0.20797 + 0.39501 0.19902 2.50627 0.17334 0.06581 0.03180 0.13587 0.20852 + 0.39748 0.19938 2.44631 0.17367 0.06794 0.03477 0.13692 0.20879 + 0.39957 0.19965 2.39124 0.17384 0.06971 0.03729 0.13772 0.20888 + 0.40198 0.19989 2.32156 0.17386 0.07174 0.04023 0.13852 0.20877 + 0.40403 0.20001 2.25651 0.17370 0.07342 0.04275 0.13907 0.20847 + 0.40576 0.20006 2.19617 0.17341 0.07481 0.04490 0.13943 0.20801 + 0.40730 0.20003 2.13661 0.17299 0.07603 0.04686 0.13963 0.20741 + 0.40865 0.19993 2.07916 0.17245 0.07708 0.04861 0.13969 0.20668 + 0.40978 0.19978 2.02566 0.17185 0.07795 0.05012 0.13964 0.20587 + 0.41071 0.19959 1.97608 0.17119 0.07865 0.05142 0.13949 0.20502 + 0.41153 0.19935 1.92714 0.17045 0.07926 0.05261 0.13925 0.20407 + 0.41222 0.19907 1.87988 0.16966 0.07977 0.05368 0.13893 0.20305 + 0.41278 0.19877 1.83581 0.16884 0.08017 0.05460 0.13857 0.20202 + 0.41322 0.19844 1.79488 0.16802 0.08049 0.05540 0.13816 0.20098 + 0.41357 0.19808 1.75438 0.16714 0.08074 0.05612 0.13769 0.19989 + 0.41384 0.19770 1.71519 0.16624 0.08093 0.05677 0.13718 0.19875 + 0.41402 0.19730 1.67853 0.16533 0.08106 0.05733 0.13665 0.19763 + 0.41413 0.19690 1.64440 0.16444 0.08114 0.05781 0.13610 0.19653 + 0.41418 0.19647 1.61053 0.16351 0.08118 0.05824 0.13552 0.19538 + 0.37659 0.19991 2.60936 0.11277 0.00000 0.00000 0.06930 0.15219 + 0.38140 0.20137 2.61342 0.11567 0.00000 0.00000 0.07305 0.15537 + 0.38844 0.20345 2.60732 0.11951 0.00000 0.00000 0.07817 0.15957 + 0.39345 0.20489 2.58571 0.12198 0.00433 0.00000 0.08157 0.16226 + 0.39857 0.20631 2.55628 0.12428 0.00892 0.00000 0.08483 0.16474 + 0.40282 0.20744 2.52658 0.12603 0.01264 0.00000 0.08740 0.16661 + 0.40674 0.20845 2.49484 0.12752 0.01599 0.00000 0.08965 0.16817 + 0.41071 0.20943 2.45810 0.12890 0.01933 0.00000 0.09183 0.16958 + 0.41398 0.21019 2.42396 0.12994 0.02205 0.00000 0.09355 0.17063 + 0.41699 0.21086 2.38936 0.13082 0.02453 0.00000 0.09506 0.17147 + 0.41926 0.21133 2.36092 0.13142 0.02639 0.00000 0.09617 0.17204 + 0.42375 0.21219 2.29786 0.13249 0.03007 0.00000 0.09825 0.17295 + 0.42724 0.21276 2.23297 0.13316 0.03293 0.00359 0.09976 0.17344 + 0.43073 0.21322 2.15899 0.13367 0.03581 0.00753 0.10117 0.17369 + 0.43389 0.21350 2.08194 0.13396 0.03848 0.01124 0.10235 0.17365 + 0.43637 0.21360 2.01244 0.13403 0.04062 0.01429 0.10317 0.17337 + 0.43852 0.21356 1.94309 0.13392 0.04255 0.01709 0.10380 0.17288 + 0.44005 0.21343 1.88635 0.13370 0.04397 0.01921 0.10417 0.17233 + 0.44161 0.21315 1.81877 0.13330 0.04550 0.02155 0.10445 0.17149 + 0.44275 0.21280 1.76024 0.13283 0.04669 0.02343 0.10456 0.17061 + 0.44358 0.21241 1.70771 0.13231 0.04766 0.02500 0.10455 0.16969 + 0.44439 0.21181 1.64276 0.13153 0.04871 0.02681 0.10440 0.16840 + 0.44490 0.21115 1.58349 0.13069 0.04955 0.02832 0.10413 0.16706 + 0.44517 0.21046 1.52960 0.12982 0.05022 0.02959 0.10378 0.16571 + 0.44524 0.20970 1.47735 0.12887 0.05077 0.03073 0.10333 0.16427 + 0.44514 0.20889 1.42781 0.12788 0.05120 0.03173 0.10280 0.16279 + 0.44489 0.20807 1.38237 0.12688 0.05153 0.03257 0.10224 0.16132 + 0.44452 0.20724 1.34082 0.12590 0.05177 0.03327 0.10165 0.15989 + 0.44403 0.20637 1.30033 0.12487 0.05195 0.03391 0.10101 0.15841 + 0.44343 0.20548 1.26171 0.12382 0.05206 0.03446 0.10034 0.15692 + 0.44276 0.20459 1.22608 0.12280 0.05212 0.03493 0.09966 0.15547 + 0.44204 0.20373 1.19333 0.12180 0.05214 0.03532 0.09899 0.15407 + 0.44123 0.20282 1.16123 0.12078 0.05212 0.03566 0.09828 0.15263 + 0.44034 0.20190 1.13046 0.11975 0.05206 0.03596 0.09756 0.15120 + 0.43943 0.20100 1.10192 0.11875 0.05197 0.03620 0.09684 0.14981 + 0.43850 0.20013 1.07556 0.11779 0.05186 0.03640 0.09615 0.14848 + 0.43750 0.19922 1.04960 0.11681 0.05173 0.03657 0.09543 0.14712 + 0.42899 0.21940 2.32960 0.09795 0.00000 0.00000 0.06296 0.14403 + 0.43325 0.22044 2.30344 0.09995 0.00000 0.00000 0.06570 0.14594 + 0.43936 0.22185 2.25740 0.10247 0.00000 0.00000 0.06932 0.14824 + 0.44362 0.22276 2.21146 0.10399 0.00336 0.00000 0.07163 0.14955 + 0.44785 0.22359 2.15965 0.10532 0.00687 0.00000 0.07377 0.15060 + 0.45128 0.22419 2.11309 0.10625 0.00968 0.00000 0.07539 0.15125 + 0.45435 0.22467 2.06717 0.10697 0.01217 0.00000 0.07676 0.15167 + 0.45737 0.22506 2.01741 0.10757 0.01462 0.00000 0.07802 0.15191 + 0.45979 0.22531 1.97357 0.10796 0.01660 0.00000 0.07897 0.15196 + 0.46192 0.22546 1.93092 0.10823 0.01837 0.00000 0.07976 0.15187 + 0.46347 0.22552 1.89699 0.10838 0.01968 0.00000 0.08031 0.15172 + 0.46638 0.22547 1.82460 0.10851 0.02224 0.00000 0.08126 0.15117 + 0.46845 0.22525 1.75589 0.10844 0.02420 0.00260 0.08187 0.15048 + 0.47028 0.22482 1.68008 0.10818 0.02613 0.00542 0.08233 0.14949 + 0.47169 0.22417 1.60342 0.10775 0.02787 0.00803 0.08259 0.14826 + 0.47255 0.22343 1.53604 0.10722 0.02924 0.01015 0.08266 0.14698 + 0.47304 0.22254 1.47028 0.10656 0.03044 0.01207 0.08258 0.14556 + 0.47319 0.22170 1.41749 0.10594 0.03130 0.01350 0.08241 0.14430 + 0.47306 0.22058 1.35571 0.10510 0.03221 0.01507 0.08210 0.14266 + 0.47269 0.21950 1.30310 0.10429 0.03289 0.01631 0.08173 0.14114 + 0.47215 0.21843 1.25656 0.10348 0.03342 0.01733 0.08132 0.13969 + 0.47121 0.21700 1.19986 0.10240 0.03398 0.01849 0.08072 0.13778 + 0.47008 0.21556 1.14888 0.10131 0.03439 0.01945 0.08007 0.13592 + 0.46881 0.21415 1.10315 0.10025 0.03469 0.02023 0.07940 0.13414 + 0.46737 0.21268 1.05934 0.09915 0.03492 0.02093 0.07868 0.13231 + 0.46579 0.21119 1.01827 0.09803 0.03507 0.02152 0.07792 0.13050 + 0.46415 0.20974 0.98100 0.09695 0.03516 0.02201 0.07717 0.12875 + 0.46248 0.20833 0.94724 0.09590 0.03520 0.02242 0.07643 0.12710 + 0.46070 0.20688 0.91463 0.09484 0.03520 0.02277 0.07566 0.12542 + 0.45884 0.20543 0.88379 0.09377 0.03516 0.02307 0.07488 0.12375 + 0.45698 0.20402 0.85556 0.09275 0.03509 0.02332 0.07412 0.12217 + 0.45514 0.20266 0.82980 0.09177 0.03500 0.02351 0.07339 0.12066 + 0.45322 0.20128 0.80472 0.09078 0.03488 0.02368 0.07264 0.11914 + 0.45125 0.19989 0.78084 0.08979 0.03474 0.02381 0.07188 0.11764 + 0.44931 0.19855 0.75882 0.08884 0.03459 0.02392 0.07116 0.11620 + 0.44742 0.19727 0.73860 0.08794 0.03444 0.02400 0.07046 0.11485 + 0.44546 0.19596 0.71880 0.08703 0.03427 0.02406 0.06975 0.11347 + 0.48358 0.23832 1.97927 0.08278 0.00000 0.00000 0.05575 0.13278 + 0.48671 0.23865 1.93200 0.08399 0.00000 0.00000 0.05751 0.13337 + 0.49101 0.23896 1.85956 0.08538 0.00000 0.00000 0.05972 0.13377 + 0.49385 0.23902 1.79920 0.08612 0.00245 0.00000 0.06103 0.13374 + 0.49651 0.23893 1.73520 0.08666 0.00497 0.00000 0.06217 0.13342 + 0.49851 0.23872 1.68030 0.08696 0.00695 0.00000 0.06296 0.13295 + 0.50018 0.23840 1.62812 0.08710 0.00869 0.00000 0.06357 0.13233 + 0.50165 0.23793 1.57345 0.08713 0.01037 0.00000 0.06407 0.13152 + 0.50268 0.23743 1.52665 0.08705 0.01170 0.00000 0.06439 0.13071 + 0.50346 0.23685 1.48221 0.08689 0.01288 0.00000 0.06460 0.12983 + 0.50392 0.23633 1.44756 0.08672 0.01374 0.00000 0.06471 0.12907 + 0.50446 0.23504 1.37545 0.08622 0.01540 0.00000 0.06479 0.12732 + 0.50444 0.23376 1.31044 0.08566 0.01663 0.00177 0.06471 0.12568 + 0.50394 0.23215 1.24048 0.08493 0.01782 0.00366 0.06448 0.12374 + 0.50291 0.23030 1.17136 0.08407 0.01887 0.00539 0.06410 0.12162 + 0.50157 0.22849 1.11186 0.08320 0.01967 0.00677 0.06365 0.11964 + 0.49985 0.22654 1.05488 0.08226 0.02034 0.00801 0.06312 0.11758 + 0.49818 0.22485 1.00986 0.08144 0.02081 0.00892 0.06261 0.11585 + 0.49586 0.22271 0.95798 0.08040 0.02128 0.00990 0.06194 0.11372 + 0.49358 0.22075 0.91445 0.07944 0.02162 0.01066 0.06130 0.11182 + 0.49131 0.21890 0.87643 0.07854 0.02187 0.01128 0.06067 0.11006 + 0.48819 0.21650 0.83071 0.07736 0.02211 0.01198 0.05983 0.10782 + 0.48506 0.21418 0.79016 0.07622 0.02227 0.01254 0.05901 0.10571 + 0.48195 0.21196 0.75421 0.07514 0.02236 0.01299 0.05821 0.10373 + 0.47869 0.20971 0.72016 0.07403 0.02241 0.01338 0.05738 0.10176 + 0.47536 0.20747 0.68857 0.07295 0.02241 0.01371 0.05655 0.09984 + 0.47210 0.20534 0.66018 0.07191 0.02238 0.01397 0.05576 0.09803 + 0.46893 0.20330 0.63469 0.07092 0.02232 0.01418 0.05500 0.09633 + 0.46567 0.20124 0.61026 0.06993 0.02224 0.01436 0.05422 0.09464 + 0.46237 0.19920 0.58734 0.06895 0.02214 0.01451 0.05346 0.09299 + 0.45918 0.19725 0.56651 0.06802 0.02202 0.01462 0.05273 0.09143 + 0.45610 0.19540 0.54764 0.06714 0.02190 0.01470 0.05203 0.08997 + 0.45295 0.19352 0.52937 0.06626 0.02176 0.01477 0.05133 0.08851 + 0.44978 0.19166 0.51208 0.06538 0.02162 0.01482 0.05064 0.08708 + 0.44673 0.18989 0.49623 0.06455 0.02147 0.01485 0.04998 0.08573 + 0.44380 0.18820 0.48175 0.06377 0.02132 0.01487 0.04935 0.08446 + 0.44080 0.18649 0.46764 0.06298 0.02116 0.01487 0.04871 0.08319 + 0.52690 0.25158 1.64716 0.07091 0.00000 0.00000 0.04920 0.12032 + 0.52855 0.25107 1.59099 0.07158 0.00000 0.00000 0.05023 0.11990 + 0.53053 0.25009 1.50883 0.07223 0.00000 0.00000 0.05141 0.11888 + 0.53160 0.24918 1.44497 0.07246 0.00178 0.00000 0.05202 0.11787 + 0.53234 0.24806 1.37924 0.07253 0.00358 0.00000 0.05247 0.11660 + 0.53266 0.24696 1.32422 0.07244 0.00498 0.00000 0.05271 0.11535 + 0.53266 0.24578 1.27298 0.07225 0.00619 0.00000 0.05283 0.11404 + 0.53236 0.24440 1.22030 0.07195 0.00735 0.00000 0.05283 0.11255 + 0.53182 0.24310 1.17598 0.07161 0.00826 0.00000 0.05276 0.11118 + 0.53108 0.24176 1.13450 0.07123 0.00905 0.00000 0.05262 0.10981 + 0.53033 0.24065 1.10256 0.07089 0.00962 0.00000 0.05247 0.10869 + 0.52829 0.23811 1.03716 0.07008 0.01070 0.00000 0.05205 0.10624 + 0.52608 0.23578 0.98001 0.06930 0.01149 0.00122 0.05159 0.10408 + 0.52313 0.23302 0.91955 0.06836 0.01223 0.00251 0.05099 0.10163 + 0.51961 0.23003 0.86081 0.06732 0.01286 0.00368 0.05028 0.09908 + 0.51605 0.22722 0.81100 0.06633 0.01333 0.00460 0.04959 0.09677 + 0.51214 0.22430 0.76394 0.06530 0.01372 0.00541 0.04885 0.09446 + 0.50869 0.22183 0.72720 0.06443 0.01397 0.00600 0.04821 0.09255 + 0.50427 0.21879 0.68534 0.06335 0.01422 0.00663 0.04740 0.09026 + 0.50017 0.21606 0.65060 0.06238 0.01438 0.00712 0.04666 0.08826 + 0.49627 0.21353 0.62055 0.06148 0.01450 0.00751 0.04598 0.08644 + 0.49115 0.21030 0.58476 0.06033 0.01459 0.00794 0.04509 0.08417 + 0.48618 0.20724 0.55335 0.05924 0.01463 0.00828 0.04424 0.08206 + 0.48140 0.20436 0.52575 0.05822 0.01463 0.00855 0.04344 0.08012 + 0.47652 0.20147 0.49982 0.05719 0.01461 0.00878 0.04263 0.07821 + 0.47166 0.19864 0.47596 0.05619 0.01456 0.00897 0.04184 0.07637 + 0.46698 0.19596 0.45467 0.05524 0.01449 0.00912 0.04110 0.07466 + 0.46251 0.19343 0.43568 0.05436 0.01441 0.00923 0.04039 0.07307 + 0.45797 0.19090 0.41759 0.05347 0.01432 0.00933 0.03969 0.07150 + 0.45347 0.18841 0.40072 0.05260 0.01421 0.00940 0.03900 0.06998 + 0.44915 0.18606 0.38546 0.05178 0.01410 0.00945 0.03834 0.06856 + 0.44504 0.18383 0.37171 0.05100 0.01399 0.00949 0.03773 0.06724 + 0.44087 0.18160 0.35846 0.05023 0.01387 0.00951 0.03711 0.06592 + 0.43674 0.17940 0.34598 0.04948 0.01375 0.00952 0.03651 0.06465 + 0.43278 0.17731 0.33458 0.04876 0.01362 0.00953 0.03594 0.06345 + 0.42901 0.17534 0.32421 0.04809 0.01350 0.00952 0.03540 0.06234 + 0.42518 0.17335 0.31413 0.04741 0.01337 0.00951 0.03487 0.06122 + 0.55983 0.25963 1.34564 0.06180 0.00000 0.00000 0.04323 0.10700 + 0.55977 0.25822 1.28828 0.06208 0.00000 0.00000 0.04372 0.10586 + 0.55913 0.25587 1.20657 0.06222 0.00000 0.00000 0.04417 0.10386 + 0.55823 0.25396 1.14554 0.06212 0.00128 0.00000 0.04430 0.10219 + 0.55686 0.25178 1.08393 0.06187 0.00257 0.00000 0.04429 0.10029 + 0.55533 0.24977 1.03320 0.06155 0.00356 0.00000 0.04416 0.09855 + 0.55356 0.24772 0.98662 0.06115 0.00440 0.00000 0.04396 0.09682 + 0.55137 0.24544 0.93936 0.06066 0.00520 0.00000 0.04366 0.09493 + 0.54920 0.24337 0.90009 0.06018 0.00581 0.00000 0.04335 0.09325 + 0.54689 0.24130 0.86373 0.05967 0.00635 0.00000 0.04300 0.09162 + 0.54490 0.23962 0.83598 0.05924 0.00673 0.00000 0.04271 0.09031 + 0.54026 0.23590 0.77982 0.05827 0.00743 0.00000 0.04200 0.08753 + 0.53584 0.23259 0.73182 0.05738 0.00794 0.00085 0.04135 0.08514 + 0.53051 0.22880 0.68171 0.05635 0.00840 0.00174 0.04057 0.08251 + 0.52458 0.22478 0.63364 0.05524 0.00879 0.00254 0.03972 0.07984 + 0.51892 0.22110 0.59335 0.05422 0.00907 0.00316 0.03893 0.07747 + 0.51296 0.21735 0.55569 0.05318 0.00929 0.00370 0.03812 0.07513 + 0.50787 0.21422 0.52657 0.05231 0.00943 0.00410 0.03745 0.07324 + 0.50153 0.21042 0.49367 0.05125 0.00956 0.00451 0.03662 0.07100 + 0.49579 0.20706 0.46661 0.05032 0.00963 0.00483 0.03588 0.06907 + 0.49044 0.20399 0.44338 0.04946 0.00968 0.00508 0.03521 0.06734 + 0.48356 0.20010 0.41592 0.04837 0.00970 0.00536 0.03436 0.06520 + 0.47699 0.19646 0.39201 0.04735 0.00969 0.00557 0.03356 0.06324 + 0.47078 0.19306 0.37115 0.04641 0.00967 0.00574 0.03282 0.06145 + 0.46452 0.18969 0.35168 0.04547 0.00962 0.00588 0.03208 0.05971 + 0.45837 0.18642 0.33387 0.04455 0.00956 0.00600 0.03137 0.05805 + 0.45251 0.18334 0.31807 0.04370 0.00949 0.00608 0.03070 0.05652 + 0.44698 0.18047 0.30404 0.04290 0.00942 0.00615 0.03008 0.05511 + 0.44142 0.17760 0.29075 0.04211 0.00933 0.00620 0.02947 0.05373 + 0.43594 0.17481 0.27840 0.04134 0.00924 0.00624 0.02887 0.05240 + 0.43073 0.17217 0.26728 0.04061 0.00915 0.00626 0.02830 0.05117 + 0.42581 0.16970 0.25729 0.03993 0.00906 0.00628 0.02778 0.05003 + 0.42085 0.16723 0.24770 0.03926 0.00897 0.00628 0.02726 0.04890 + 0.41596 0.16482 0.23869 0.03860 0.00887 0.00628 0.02675 0.04781 + 0.41131 0.16253 0.23049 0.03797 0.00877 0.00628 0.02627 0.04679 + 0.40690 0.16038 0.22304 0.03739 0.00868 0.00626 0.02582 0.04584 + 0.40246 0.15823 0.21583 0.03681 0.00858 0.00625 0.02537 0.04491 + 0.58321 0.26294 1.08077 0.05486 0.00000 0.00000 0.03781 0.09333 + 0.58131 0.26062 1.02685 0.05486 0.00000 0.00000 0.03791 0.09172 + 0.57788 0.25692 0.95148 0.05461 0.00000 0.00000 0.03785 0.08910 + 0.57491 0.25403 0.89669 0.05428 0.00092 0.00000 0.03765 0.08705 + 0.57135 0.25082 0.84218 0.05381 0.00184 0.00000 0.03733 0.08480 + 0.56794 0.24794 0.79785 0.05332 0.00253 0.00000 0.03698 0.08281 + 0.56438 0.24508 0.75758 0.05279 0.00311 0.00000 0.03658 0.08087 + 0.56029 0.24196 0.71716 0.05217 0.00366 0.00000 0.03611 0.07881 + 0.55650 0.23917 0.68389 0.05160 0.00408 0.00000 0.03566 0.07701 + 0.55264 0.23643 0.65333 0.05101 0.00444 0.00000 0.03520 0.07528 + 0.54945 0.23423 0.63019 0.05053 0.00469 0.00000 0.03482 0.07392 + 0.54230 0.22947 0.58378 0.04947 0.00515 0.00000 0.03399 0.07107 + 0.53579 0.22530 0.54476 0.04852 0.00548 0.00060 0.03325 0.06867 + 0.52822 0.22062 0.50445 0.04745 0.00577 0.00122 0.03240 0.06607 + 0.52007 0.21574 0.46618 0.04632 0.00601 0.00177 0.03152 0.06347 + 0.51249 0.21133 0.43442 0.04530 0.00618 0.00220 0.03072 0.06121 + 0.50470 0.20690 0.40498 0.04427 0.00630 0.00257 0.02992 0.05901 + 0.49816 0.20326 0.38238 0.04342 0.00638 0.00284 0.02926 0.05724 + 0.49014 0.19887 0.35704 0.04240 0.00644 0.00312 0.02847 0.05518 + 0.48299 0.19503 0.33634 0.04150 0.00647 0.00333 0.02779 0.05342 + 0.47641 0.19154 0.31867 0.04069 0.00648 0.00350 0.02716 0.05186 + 0.46803 0.18717 0.29791 0.03966 0.00648 0.00368 0.02639 0.04994 + 0.46015 0.18311 0.27995 0.03871 0.00646 0.00382 0.02567 0.04821 + 0.45276 0.17936 0.26436 0.03784 0.00642 0.00393 0.02501 0.04664 + 0.44540 0.17566 0.24989 0.03697 0.00638 0.00402 0.02436 0.04513 + 0.43821 0.17209 0.23671 0.03614 0.00632 0.00409 0.02374 0.04369 + 0.43143 0.16876 0.22507 0.03536 0.00626 0.00414 0.02316 0.04238 + 0.42507 0.16567 0.21477 0.03464 0.00620 0.00418 0.02262 0.04118 + 0.41872 0.16260 0.20504 0.03393 0.00613 0.00421 0.02210 0.04001 + 0.41250 0.15962 0.19603 0.03324 0.00606 0.00423 0.02159 0.03889 + 0.40663 0.15683 0.18795 0.03259 0.00599 0.00424 0.02112 0.03785 + 0.40110 0.15422 0.18070 0.03199 0.00593 0.00425 0.02067 0.03690 + 0.39557 0.15162 0.17376 0.03139 0.00585 0.00425 0.02024 0.03596 + 0.39014 0.14910 0.16725 0.03081 0.00578 0.00424 0.01982 0.03506 + 0.38500 0.14671 0.16135 0.03026 0.00571 0.00424 0.01942 0.03423 + 0.38015 0.14448 0.15599 0.02975 0.00564 0.00422 0.01905 0.03345 + 0.37528 0.14225 0.15081 0.02924 0.00557 0.00421 0.01868 0.03268 + 0.59783 0.26202 0.85425 0.04954 0.00000 0.00000 0.03288 0.07981 + 0.59405 0.25884 0.80631 0.04930 0.00000 0.00000 0.03272 0.07795 + 0.58779 0.25385 0.74027 0.04875 0.00000 0.00000 0.03232 0.07503 + 0.58274 0.25004 0.69324 0.04824 0.00066 0.00000 0.03191 0.07281 + 0.57701 0.24589 0.64699 0.04760 0.00130 0.00000 0.03141 0.07043 + 0.57175 0.24222 0.60975 0.04699 0.00178 0.00000 0.03092 0.06837 + 0.56643 0.23863 0.57623 0.04635 0.00219 0.00000 0.03041 0.06639 + 0.56052 0.23475 0.54287 0.04564 0.00256 0.00000 0.02984 0.06432 + 0.55518 0.23134 0.51561 0.04500 0.00285 0.00000 0.02933 0.06253 + 0.54986 0.22802 0.49076 0.04436 0.00309 0.00000 0.02882 0.06084 + 0.54553 0.22538 0.47205 0.04384 0.00326 0.00000 0.02842 0.05952 + 0.53605 0.21972 0.43480 0.04271 0.00356 0.00000 0.02754 0.05678 + 0.52763 0.21485 0.40390 0.04173 0.00377 0.00042 0.02678 0.05451 + 0.51804 0.20944 0.37224 0.04064 0.00396 0.00086 0.02593 0.05209 + 0.50793 0.20388 0.34244 0.03950 0.00410 0.00125 0.02508 0.04970 + 0.49868 0.19891 0.31790 0.03849 0.00420 0.00155 0.02431 0.04765 + 0.48931 0.19398 0.29531 0.03747 0.00427 0.00181 0.02356 0.04567 + 0.48153 0.18995 0.27808 0.03665 0.00431 0.00199 0.02295 0.04410 + 0.47211 0.18514 0.25886 0.03566 0.00434 0.00219 0.02223 0.04229 + 0.46380 0.18097 0.24324 0.03480 0.00436 0.00233 0.02161 0.04075 + 0.45621 0.17721 0.22998 0.03403 0.00436 0.00245 0.02105 0.03940 + 0.44665 0.17252 0.21448 0.03306 0.00434 0.00257 0.02037 0.03775 + 0.43772 0.16820 0.20112 0.03217 0.00432 0.00266 0.01974 0.03628 + 0.42943 0.16424 0.18958 0.03136 0.00428 0.00274 0.01916 0.03495 + 0.42121 0.16035 0.17890 0.03056 0.00425 0.00280 0.01860 0.03368 + 0.41326 0.15662 0.16921 0.02979 0.00420 0.00284 0.01807 0.03248 + 0.40580 0.15316 0.16067 0.02908 0.00415 0.00288 0.01758 0.03139 + 0.39884 0.14996 0.15314 0.02842 0.00411 0.00290 0.01713 0.03040 + 0.39192 0.14680 0.14605 0.02777 0.00406 0.00292 0.01668 0.02944 + 0.38519 0.14375 0.13949 0.02715 0.00400 0.00293 0.01626 0.02852 + 0.37886 0.14090 0.13361 0.02656 0.00395 0.00294 0.01586 0.02768 + 0.37294 0.13825 0.12836 0.02602 0.00390 0.00294 0.01550 0.02691 + 0.36702 0.13562 0.12333 0.02549 0.00385 0.00294 0.01514 0.02615 + 0.36125 0.13307 0.11863 0.02497 0.00380 0.00294 0.01479 0.02543 + 0.35580 0.13068 0.11436 0.02448 0.00375 0.00293 0.01447 0.02476 + 0.35068 0.12844 0.11049 0.02403 0.00370 0.00292 0.01417 0.02414 + 0.34556 0.12621 0.10676 0.02357 0.00365 0.00291 0.01387 0.02353 + 0.60446 0.25738 0.66493 0.04531 0.00000 0.00000 0.02844 0.06690 + 0.59882 0.25341 0.62406 0.04487 0.00000 0.00000 0.02811 0.06495 + 0.58979 0.24727 0.56845 0.04408 0.00000 0.00000 0.02749 0.06197 + 0.58273 0.24264 0.52948 0.04341 0.00046 0.00000 0.02696 0.05976 + 0.57492 0.23766 0.49153 0.04264 0.00091 0.00000 0.02635 0.05742 + 0.56790 0.23330 0.46124 0.04192 0.00125 0.00000 0.02579 0.05542 + 0.56093 0.22908 0.43417 0.04120 0.00153 0.00000 0.02523 0.05353 + 0.55332 0.22457 0.40742 0.04042 0.00178 0.00000 0.02463 0.05156 + 0.54655 0.22063 0.38571 0.03972 0.00197 0.00000 0.02410 0.04989 + 0.53989 0.21684 0.36603 0.03903 0.00214 0.00000 0.02358 0.04831 + 0.53454 0.21384 0.35128 0.03848 0.00225 0.00000 0.02317 0.04710 + 0.52296 0.20747 0.32212 0.03731 0.00245 0.00000 0.02230 0.04459 + 0.51286 0.20205 0.29816 0.03631 0.00259 0.00030 0.02157 0.04255 + 0.50152 0.19610 0.27380 0.03520 0.00270 0.00062 0.02077 0.04039 + 0.48973 0.19005 0.25102 0.03406 0.00280 0.00090 0.01997 0.03829 + 0.47908 0.18469 0.23238 0.03306 0.00286 0.00111 0.01927 0.03649 + 0.46841 0.17941 0.21532 0.03206 0.00290 0.00129 0.01859 0.03479 + 0.45963 0.17514 0.20236 0.03126 0.00292 0.00142 0.01804 0.03344 + 0.44909 0.17007 0.18798 0.03030 0.00293 0.00156 0.01740 0.03190 + 0.43987 0.16570 0.17634 0.02948 0.00293 0.00166 0.01685 0.03061 + 0.43151 0.16179 0.16649 0.02875 0.00293 0.00174 0.01636 0.02948 + 0.42105 0.15694 0.15501 0.02783 0.00291 0.00183 0.01576 0.02811 + 0.41136 0.15251 0.14516 0.02700 0.00289 0.00190 0.01522 0.02689 + 0.40242 0.14845 0.13667 0.02624 0.00287 0.00195 0.01473 0.02580 + 0.39361 0.14451 0.12884 0.02549 0.00283 0.00199 0.01426 0.02477 + 0.38512 0.14074 0.12175 0.02478 0.00280 0.00202 0.01381 0.02380 + 0.37722 0.13725 0.11551 0.02413 0.00277 0.00205 0.01339 0.02292 + 0.36987 0.13405 0.11002 0.02353 0.00273 0.00206 0.01302 0.02213 + 0.36261 0.13089 0.10485 0.02294 0.00269 0.00207 0.01265 0.02136 + 0.35557 0.12786 0.10008 0.02237 0.00266 0.00208 0.01230 0.02063 + 0.34897 0.12504 0.09581 0.02184 0.00262 0.00209 0.01197 0.01997 + 0.34282 0.12242 0.09199 0.02135 0.00258 0.00209 0.01167 0.01936 + 0.33671 0.11984 0.08835 0.02087 0.00255 0.00209 0.01138 0.01877 + 0.33075 0.11734 0.08494 0.02041 0.00251 0.00208 0.01109 0.01820 + 0.32516 0.11500 0.08184 0.01997 0.00247 0.00208 0.01083 0.01768 + 0.31992 0.11282 0.07904 0.01957 0.00244 0.00207 0.01058 0.01720 + 0.31469 0.11065 0.07634 0.01916 0.00241 0.00206 0.01034 0.01673 + 0.60391 0.24956 0.50976 0.04178 0.00000 0.00000 0.02445 0.05492 + 0.59648 0.24490 0.47613 0.04118 0.00000 0.00000 0.02401 0.05303 + 0.58482 0.23777 0.43085 0.04017 0.00000 0.00000 0.02327 0.05018 + 0.57587 0.23244 0.39953 0.03937 0.00032 0.00000 0.02268 0.04809 + 0.56613 0.22677 0.36929 0.03847 0.00064 0.00000 0.02202 0.04592 + 0.55748 0.22185 0.34533 0.03767 0.00087 0.00000 0.02144 0.04407 + 0.54901 0.21711 0.32406 0.03689 0.00106 0.00000 0.02088 0.04234 + 0.53986 0.21209 0.30316 0.03604 0.00123 0.00000 0.02028 0.04056 + 0.53180 0.20775 0.28629 0.03529 0.00136 0.00000 0.01975 0.03906 + 0.52396 0.20359 0.27107 0.03457 0.00147 0.00000 0.01925 0.03766 + 0.51771 0.20032 0.25971 0.03400 0.00155 0.00000 0.01886 0.03658 + 0.50433 0.19343 0.23736 0.03280 0.00168 0.00000 0.01804 0.03439 + 0.49279 0.18763 0.21915 0.03177 0.00177 0.00022 0.01736 0.03261 + 0.47998 0.18131 0.20073 0.03066 0.00184 0.00045 0.01663 0.03076 + 0.46682 0.17494 0.18361 0.02953 0.00190 0.00065 0.01590 0.02897 + 0.45505 0.16935 0.16966 0.02854 0.00194 0.00081 0.01527 0.02746 + 0.44336 0.16389 0.15695 0.02757 0.00196 0.00094 0.01466 0.02604 + 0.43382 0.15949 0.14733 0.02679 0.00197 0.00104 0.01418 0.02492 + 0.42245 0.15431 0.13668 0.02587 0.00198 0.00114 0.01362 0.02366 + 0.41257 0.14987 0.12810 0.02509 0.00198 0.00121 0.01315 0.02260 + 0.40367 0.14591 0.12085 0.02439 0.00197 0.00127 0.01273 0.02168 + 0.39259 0.14104 0.11242 0.02353 0.00196 0.00134 0.01222 0.02058 + 0.38240 0.13661 0.10520 0.02274 0.00194 0.00138 0.01176 0.01961 + 0.37304 0.13259 0.09899 0.02203 0.00192 0.00142 0.01134 0.01874 + 0.36387 0.12868 0.09326 0.02134 0.00190 0.00145 0.01094 0.01792 + 0.35509 0.12497 0.08809 0.02069 0.00187 0.00147 0.01057 0.01716 + 0.34694 0.12155 0.08354 0.02009 0.00185 0.00149 0.01022 0.01647 + 0.33940 0.11842 0.07954 0.01954 0.00182 0.00150 0.00991 0.01585 + 0.33197 0.11535 0.07577 0.01900 0.00180 0.00151 0.00961 0.01525 + 0.32480 0.11241 0.07230 0.01849 0.00177 0.00152 0.00932 0.01469 + 0.31811 0.10969 0.06920 0.01801 0.00175 0.00152 0.00905 0.01418 + 0.31189 0.10717 0.06642 0.01757 0.00172 0.00152 0.00881 0.01371 + 0.30572 0.10468 0.06377 0.01714 0.00169 0.00152 0.00857 0.01326 + 0.29974 0.10229 0.06128 0.01672 0.00167 0.00151 0.00834 0.01283 + 0.29414 0.10006 0.05903 0.01633 0.00164 0.00151 0.00813 0.01243 + 0.28890 0.09798 0.05700 0.01597 0.00162 0.00150 0.00793 0.01207 + 0.28369 0.09593 0.05503 0.01561 0.00160 0.00150 0.00773 0.01171 + 0.59691 0.23909 0.38497 0.03862 0.00000 0.00000 0.02088 0.04414 + 0.58781 0.23385 0.35816 0.03788 0.00000 0.00000 0.02039 0.04240 + 0.57372 0.22590 0.32238 0.03669 0.00000 0.00000 0.01959 0.03980 + 0.56306 0.22002 0.29791 0.03578 0.00022 0.00000 0.01899 0.03792 + 0.55156 0.21380 0.27445 0.03479 0.00044 0.00000 0.01833 0.03598 + 0.54146 0.20844 0.25598 0.03392 0.00060 0.00000 0.01776 0.03435 + 0.53166 0.20332 0.23966 0.03308 0.00073 0.00000 0.01721 0.03283 + 0.52117 0.19794 0.22371 0.03218 0.00085 0.00000 0.01664 0.03128 + 0.51201 0.19330 0.21090 0.03140 0.00093 0.00000 0.01614 0.02999 + 0.50316 0.18889 0.19938 0.03066 0.00101 0.00000 0.01567 0.02878 + 0.49615 0.18543 0.19081 0.03007 0.00106 0.00000 0.01531 0.02786 + 0.48126 0.17821 0.17402 0.02885 0.00114 0.00000 0.01456 0.02601 + 0.46856 0.17218 0.16042 0.02782 0.00120 0.00017 0.01394 0.02452 + 0.45459 0.16566 0.14672 0.02671 0.00125 0.00034 0.01328 0.02298 + 0.44036 0.15914 0.13403 0.02560 0.00129 0.00049 0.01263 0.02151 + 0.42776 0.15346 0.12374 0.02463 0.00131 0.00061 0.01208 0.02027 + 0.41534 0.14796 0.11438 0.02370 0.00133 0.00071 0.01155 0.01912 + 0.40526 0.14355 0.10731 0.02295 0.00133 0.00078 0.01114 0.01823 + 0.39332 0.13839 0.09951 0.02207 0.00134 0.00085 0.01065 0.01722 + 0.38302 0.13399 0.09322 0.02133 0.00133 0.00091 0.01025 0.01638 + 0.37379 0.13009 0.08792 0.02067 0.00133 0.00095 0.00989 0.01566 + 0.36236 0.12531 0.08177 0.01986 0.00132 0.00100 0.00946 0.01480 + 0.35190 0.12098 0.07650 0.01913 0.00131 0.00104 0.00907 0.01404 + 0.34235 0.11707 0.07197 0.01848 0.00129 0.00106 0.00873 0.01337 + 0.33304 0.11329 0.06780 0.01784 0.00127 0.00109 0.00840 0.01274 + 0.32415 0.10972 0.06403 0.01724 0.00126 0.00110 0.00808 0.01216 + 0.31594 0.10644 0.06072 0.01669 0.00124 0.00112 0.00780 0.01163 + 0.30838 0.10345 0.05780 0.01619 0.00122 0.00113 0.00755 0.01116 + 0.30095 0.10053 0.05506 0.01571 0.00120 0.00113 0.00730 0.01071 + 0.29381 0.09774 0.05252 0.01524 0.00119 0.00114 0.00706 0.01029 + 0.28717 0.09516 0.05026 0.01481 0.00117 0.00114 0.00685 0.00990 + 0.28101 0.09278 0.04823 0.01442 0.00115 0.00114 0.00665 0.00955 + 0.27492 0.09045 0.04629 0.01403 0.00113 0.00114 0.00645 0.00921 + 0.26904 0.08820 0.04448 0.01366 0.00111 0.00113 0.00627 0.00889 + 0.26354 0.08611 0.04284 0.01332 0.00110 0.00113 0.00610 0.00860 + 0.25841 0.08418 0.04135 0.01300 0.00108 0.00112 0.00594 0.00833 + 0.25332 0.08226 0.03991 0.01268 0.00106 0.00112 0.00579 0.00807 + 0.58420 0.22645 0.28636 0.03561 0.00000 0.00000 0.01771 0.03471 + 0.57360 0.22077 0.26561 0.03476 0.00000 0.00000 0.01720 0.03317 + 0.55733 0.21221 0.23814 0.03343 0.00000 0.00000 0.01640 0.03090 + 0.54514 0.20592 0.21952 0.03244 0.00015 0.00000 0.01581 0.02927 + 0.53212 0.19931 0.20178 0.03138 0.00030 0.00000 0.01518 0.02760 + 0.52077 0.19365 0.18788 0.03045 0.00041 0.00000 0.01464 0.02621 + 0.50984 0.18827 0.17566 0.02957 0.00050 0.00000 0.01412 0.02493 + 0.49822 0.18264 0.16376 0.02865 0.00058 0.00000 0.01359 0.02363 + 0.48814 0.17783 0.15423 0.02785 0.00064 0.00000 0.01314 0.02255 + 0.47846 0.17327 0.14569 0.02709 0.00069 0.00000 0.01271 0.02155 + 0.47084 0.16972 0.13936 0.02650 0.00072 0.00000 0.01238 0.02079 + 0.45477 0.16234 0.12697 0.02528 0.00078 0.00000 0.01170 0.01927 + 0.44118 0.15622 0.11698 0.02426 0.00082 0.00013 0.01115 0.01806 + 0.42634 0.14966 0.10694 0.02317 0.00085 0.00026 0.01057 0.01682 + 0.41137 0.14315 0.09767 0.02209 0.00087 0.00038 0.01001 0.01564 + 0.39821 0.13751 0.09016 0.02116 0.00089 0.00046 0.00953 0.01467 + 0.38532 0.13208 0.08334 0.02027 0.00090 0.00054 0.00908 0.01377 + 0.37493 0.12776 0.07820 0.01956 0.00090 0.00060 0.00872 0.01307 + 0.36269 0.12273 0.07252 0.01873 0.00090 0.00066 0.00831 0.01229 + 0.35218 0.11846 0.06795 0.01804 0.00090 0.00070 0.00797 0.01164 + 0.34281 0.11469 0.06410 0.01742 0.00090 0.00073 0.00767 0.01109 + 0.33127 0.11010 0.05962 0.01668 0.00089 0.00077 0.00731 0.01043 + 0.32077 0.10597 0.05579 0.01601 0.00088 0.00080 0.00699 0.00986 + 0.31122 0.10224 0.05249 0.01541 0.00087 0.00082 0.00670 0.00936 + 0.30194 0.09866 0.04946 0.01483 0.00086 0.00084 0.00643 0.00888 + 0.29313 0.09529 0.04671 0.01429 0.00085 0.00085 0.00617 0.00845 + 0.28502 0.09220 0.04429 0.01379 0.00083 0.00086 0.00594 0.00806 + 0.27758 0.08940 0.04216 0.01334 0.00082 0.00087 0.00573 0.00771 + 0.27029 0.08667 0.04016 0.01291 0.00081 0.00087 0.00553 0.00738 + 0.26331 0.08407 0.03831 0.01249 0.00080 0.00087 0.00534 0.00707 + 0.25683 0.08167 0.03665 0.01211 0.00078 0.00087 0.00517 0.00679 + 0.25085 0.07947 0.03517 0.01176 0.00077 0.00087 0.00501 0.00653 + 0.24495 0.07732 0.03375 0.01142 0.00076 0.00087 0.00485 0.00629 + 0.23926 0.07525 0.03242 0.01109 0.00075 0.00087 0.00471 0.00605 + 0.23396 0.07333 0.03121 0.01079 0.00073 0.00087 0.00457 0.00584 + 0.22903 0.07155 0.03012 0.01051 0.00072 0.00086 0.00444 0.00565 + 0.22415 0.06980 0.02906 0.01024 0.00071 0.00086 0.00432 0.00546 + 0.56651 0.21215 0.20976 0.03262 0.00000 0.00000 0.01491 0.02666 + 0.55458 0.20615 0.19417 0.03169 0.00000 0.00000 0.01441 0.02535 + 0.53644 0.19717 0.17367 0.03027 0.00000 0.00000 0.01364 0.02344 + 0.52295 0.19062 0.15989 0.02921 0.00010 0.00000 0.01308 0.02208 + 0.50863 0.18377 0.14681 0.02810 0.00020 0.00000 0.01249 0.02070 + 0.49625 0.17794 0.13661 0.02716 0.00028 0.00000 0.01200 0.01956 + 0.48439 0.17243 0.12767 0.02626 0.00034 0.00000 0.01153 0.01851 + 0.47187 0.16669 0.11898 0.02532 0.00039 0.00000 0.01104 0.01745 + 0.46108 0.16181 0.11205 0.02452 0.00043 0.00000 0.01063 0.01658 + 0.45076 0.15720 0.10585 0.02377 0.00046 0.00000 0.01025 0.01578 + 0.44268 0.15363 0.10125 0.02318 0.00049 0.00000 0.00996 0.01517 + 0.42574 0.14626 0.09228 0.02198 0.00053 0.00000 0.00937 0.01396 + 0.41153 0.14018 0.08505 0.02099 0.00055 0.00010 0.00888 0.01301 + 0.39613 0.13371 0.07779 0.01994 0.00057 0.00020 0.00838 0.01204 + 0.38071 0.12734 0.07109 0.01891 0.00059 0.00030 0.00790 0.01113 + 0.36724 0.12186 0.06567 0.01803 0.00060 0.00037 0.00749 0.01039 + 0.35414 0.11661 0.06075 0.01719 0.00061 0.00043 0.00710 0.00970 + 0.34363 0.11246 0.05703 0.01653 0.00061 0.00047 0.00680 0.00917 + 0.33132 0.10764 0.05292 0.01576 0.00061 0.00052 0.00646 0.00858 + 0.32082 0.10358 0.04962 0.01512 0.00061 0.00055 0.00617 0.00810 + 0.31148 0.10001 0.04683 0.01456 0.00060 0.00058 0.00592 0.00769 + 0.30004 0.09568 0.04358 0.01388 0.00060 0.00061 0.00562 0.00720 + 0.28968 0.09180 0.04080 0.01327 0.00059 0.00063 0.00536 0.00678 + 0.28030 0.08832 0.03840 0.01273 0.00059 0.00065 0.00513 0.00641 + 0.27122 0.08498 0.03619 0.01221 0.00058 0.00066 0.00490 0.00607 + 0.26264 0.08185 0.03418 0.01173 0.00057 0.00067 0.00470 0.00575 + 0.25476 0.07900 0.03242 0.01129 0.00056 0.00068 0.00451 0.00547 + 0.24756 0.07641 0.03086 0.01089 0.00055 0.00069 0.00434 0.00522 + 0.24053 0.07391 0.02939 0.01050 0.00054 0.00069 0.00418 0.00498 + 0.23382 0.07153 0.02803 0.01014 0.00054 0.00069 0.00403 0.00476 + 0.22761 0.06934 0.02681 0.00981 0.00053 0.00069 0.00389 0.00456 + 0.22189 0.06734 0.02572 0.00950 0.00052 0.00069 0.00376 0.00438 + 0.21626 0.06538 0.02468 0.00921 0.00051 0.00069 0.00364 0.00421 + 0.21085 0.06351 0.02370 0.00892 0.00050 0.00069 0.00352 0.00404 + 0.20582 0.06177 0.02281 0.00866 0.00049 0.00068 0.00341 0.00389 + 0.20115 0.06017 0.02200 0.00842 0.00049 0.00068 0.00331 0.00376 + 0.19654 0.05860 0.02122 0.00818 0.00048 0.00068 0.00322 0.00362 + 0.54452 0.19663 0.15124 0.02959 0.00000 0.00000 0.01245 0.01998 + 0.53148 0.19045 0.13989 0.02860 0.00000 0.00000 0.01198 0.01891 + 0.51177 0.18125 0.12505 0.02713 0.00000 0.00000 0.01127 0.01736 + 0.49722 0.17457 0.11512 0.02605 0.00007 0.00000 0.01075 0.01626 + 0.48188 0.16764 0.10573 0.02492 0.00014 0.00000 0.01022 0.01516 + 0.46869 0.16175 0.09843 0.02397 0.00019 0.00000 0.00977 0.01425 + 0.45612 0.15622 0.09204 0.02308 0.00023 0.00000 0.00935 0.01342 + 0.44293 0.15050 0.08585 0.02215 0.00026 0.00000 0.00892 0.01259 + 0.43162 0.14565 0.08091 0.02136 0.00029 0.00000 0.00856 0.01190 + 0.42086 0.14109 0.07649 0.02063 0.00031 0.00000 0.00822 0.01128 + 0.41246 0.13757 0.07322 0.02006 0.00033 0.00000 0.00797 0.01081 + 0.39497 0.13034 0.06683 0.01891 0.00035 0.00000 0.00745 0.00988 + 0.38040 0.12443 0.06167 0.01796 0.00037 0.00008 0.00704 0.00916 + 0.36472 0.11817 0.05649 0.01697 0.00039 0.00017 0.00661 0.00842 + 0.34913 0.11204 0.05171 0.01601 0.00040 0.00024 0.00619 0.00774 + 0.33560 0.10682 0.04782 0.01519 0.00040 0.00030 0.00585 0.00718 + 0.32252 0.10183 0.04429 0.01442 0.00041 0.00035 0.00553 0.00668 + 0.31208 0.09791 0.04162 0.01381 0.00041 0.00039 0.00527 0.00629 + 0.29992 0.09338 0.03866 0.01311 0.00041 0.00042 0.00499 0.00586 + 0.28958 0.08959 0.03628 0.01253 0.00041 0.00045 0.00475 0.00551 + 0.28044 0.08626 0.03426 0.01203 0.00041 0.00047 0.00455 0.00521 + 0.26928 0.08224 0.03191 0.01142 0.00040 0.00050 0.00431 0.00486 + 0.25922 0.07866 0.02988 0.01088 0.00040 0.00051 0.00409 0.00456 + 0.25015 0.07546 0.02814 0.01040 0.00040 0.00053 0.00390 0.00430 + 0.24141 0.07240 0.02652 0.00994 0.00039 0.00054 0.00372 0.00406 + 0.23318 0.06954 0.02506 0.00951 0.00039 0.00055 0.00355 0.00383 + 0.22565 0.06695 0.02376 0.00913 0.00038 0.00055 0.00341 0.00364 + 0.21878 0.06461 0.02262 0.00878 0.00037 0.00056 0.00327 0.00346 + 0.21211 0.06234 0.02154 0.00845 0.00037 0.00056 0.00314 0.00329 + 0.20574 0.06020 0.02054 0.00814 0.00036 0.00056 0.00302 0.00314 + 0.19988 0.05824 0.01964 0.00785 0.00036 0.00056 0.00291 0.00300 + 0.19449 0.05644 0.01884 0.00759 0.00035 0.00056 0.00281 0.00288 + 0.18920 0.05469 0.01807 0.00733 0.00035 0.00056 0.00271 0.00276 + 0.18413 0.05302 0.01734 0.00709 0.00034 0.00056 0.00262 0.00264 + 0.17942 0.05148 0.01668 0.00687 0.00033 0.00055 0.00254 0.00254 + 0.17507 0.05006 0.01609 0.00666 0.00033 0.00055 0.00246 0.00245 + 0.17077 0.04867 0.01551 0.00646 0.00032 0.00055 0.00238 0.00236 + 0.51892 0.18032 0.10730 0.02649 0.00000 0.00000 0.01031 0.01459 + 0.50499 0.17409 0.09931 0.02549 0.00000 0.00000 0.00987 0.01374 + 0.48405 0.16485 0.08891 0.02401 0.00000 0.00000 0.00923 0.01253 + 0.46869 0.15818 0.08197 0.02293 0.00005 0.00000 0.00876 0.01167 + 0.45259 0.15129 0.07542 0.02183 0.00009 0.00000 0.00829 0.01082 + 0.43881 0.14547 0.07033 0.02089 0.00013 0.00000 0.00789 0.01012 + 0.42576 0.14003 0.06588 0.02002 0.00015 0.00000 0.00752 0.00948 + 0.41212 0.13442 0.06157 0.01913 0.00018 0.00000 0.00715 0.00885 + 0.40049 0.12969 0.05812 0.01838 0.00020 0.00000 0.00684 0.00833 + 0.38947 0.12526 0.05504 0.01768 0.00021 0.00000 0.00655 0.00786 + 0.38091 0.12185 0.05275 0.01714 0.00022 0.00000 0.00633 0.00751 + 0.36316 0.11489 0.04827 0.01605 0.00024 0.00000 0.00589 0.00682 + 0.34848 0.10923 0.04464 0.01517 0.00025 0.00007 0.00553 0.00628 + 0.33279 0.10328 0.04099 0.01425 0.00026 0.00014 0.00517 0.00575 + 0.31728 0.09750 0.03759 0.01337 0.00027 0.00020 0.00483 0.00525 + 0.30391 0.09259 0.03483 0.01263 0.00027 0.00025 0.00454 0.00485 + 0.29105 0.08794 0.03231 0.01193 0.00028 0.00029 0.00427 0.00448 + 0.28084 0.08429 0.03040 0.01138 0.00028 0.00032 0.00406 0.00421 + 0.26900 0.08011 0.02828 0.01076 0.00028 0.00035 0.00383 0.00390 + 0.25899 0.07662 0.02656 0.01024 0.00028 0.00038 0.00364 0.00366 + 0.25017 0.07357 0.02510 0.00980 0.00028 0.00040 0.00347 0.00345 + 0.23946 0.06990 0.02339 0.00926 0.00027 0.00042 0.00328 0.00321 + 0.22983 0.06665 0.02192 0.00879 0.00027 0.00043 0.00310 0.00300 + 0.22119 0.06375 0.02064 0.00837 0.00027 0.00044 0.00295 0.00282 + 0.21290 0.06100 0.01946 0.00798 0.00026 0.00045 0.00281 0.00265 + 0.20511 0.05843 0.01839 0.00761 0.00026 0.00045 0.00267 0.00250 + 0.19802 0.05611 0.01743 0.00728 0.00026 0.00046 0.00255 0.00236 + 0.19157 0.05402 0.01659 0.00699 0.00025 0.00046 0.00245 0.00224 + 0.18531 0.05200 0.01580 0.00670 0.00025 0.00046 0.00235 0.00213 + 0.17937 0.05010 0.01506 0.00644 0.00025 0.00046 0.00225 0.00203 + 0.17391 0.04836 0.01439 0.00619 0.00024 0.00046 0.00216 0.00193 + 0.16890 0.04678 0.01380 0.00597 0.00024 0.00046 0.00209 0.00185 + 0.16400 0.04524 0.01322 0.00576 0.00023 0.00046 0.00201 0.00177 + 0.15931 0.04377 0.01269 0.00556 0.00023 0.00046 0.00194 0.00169 + 0.15497 0.04242 0.01220 0.00537 0.00023 0.00046 0.00187 0.00163 + 0.15096 0.04118 0.01175 0.00520 0.00022 0.00045 0.00181 0.00156 + 0.14702 0.03996 0.01132 0.00503 0.00022 0.00045 0.00175 0.00150 + 0.49034 0.16360 0.07487 0.02337 0.00000 0.00000 0.00846 0.01035 + 0.47575 0.15743 0.06946 0.02238 0.00000 0.00000 0.00806 0.00971 + 0.45393 0.14833 0.06245 0.02093 0.00000 0.00000 0.00749 0.00879 + 0.43802 0.14179 0.05776 0.01990 0.00003 0.00000 0.00708 0.00815 + 0.42141 0.13506 0.05333 0.01883 0.00006 0.00000 0.00667 0.00751 + 0.40729 0.12941 0.04989 0.01794 0.00008 0.00000 0.00632 0.00699 + 0.39396 0.12415 0.04687 0.01712 0.00010 0.00000 0.00601 0.00652 + 0.38010 0.11874 0.04394 0.01628 0.00012 0.00000 0.00568 0.00605 + 0.36833 0.11421 0.04159 0.01557 0.00013 0.00000 0.00542 0.00568 + 0.35724 0.10998 0.03947 0.01492 0.00014 0.00000 0.00517 0.00533 + 0.34864 0.10674 0.03790 0.01443 0.00015 0.00000 0.00498 0.00508 + 0.33093 0.10015 0.03481 0.01342 0.00016 0.00000 0.00461 0.00458 + 0.31636 0.09482 0.03229 0.01262 0.00017 0.00006 0.00432 0.00420 + 0.30089 0.08926 0.02973 0.01179 0.00018 0.00012 0.00401 0.00382 + 0.28570 0.08389 0.02734 0.01100 0.00018 0.00018 0.00373 0.00347 + 0.27268 0.07935 0.02539 0.01033 0.00018 0.00022 0.00349 0.00319 + 0.26023 0.07508 0.02359 0.00971 0.00019 0.00025 0.00327 0.00293 + 0.25039 0.07174 0.02222 0.00923 0.00019 0.00028 0.00311 0.00274 + 0.23903 0.06794 0.02070 0.00869 0.00019 0.00030 0.00292 0.00254 + 0.22947 0.06477 0.01945 0.00824 0.00019 0.00032 0.00276 0.00237 + 0.22109 0.06202 0.01840 0.00786 0.00019 0.00034 0.00263 0.00223 + 0.21094 0.05873 0.01715 0.00740 0.00019 0.00035 0.00247 0.00206 + 0.20186 0.05582 0.01608 0.00699 0.00018 0.00037 0.00233 0.00192 + 0.19374 0.05324 0.01515 0.00664 0.00018 0.00037 0.00221 0.00180 + 0.18599 0.05079 0.01428 0.00630 0.00018 0.00038 0.00210 0.00169 + 0.17872 0.04852 0.01349 0.00599 0.00018 0.00039 0.00199 0.00159 + 0.17212 0.04648 0.01278 0.00572 0.00018 0.00039 0.00190 0.00150 + 0.16615 0.04464 0.01216 0.00547 0.00017 0.00039 0.00182 0.00142 + 0.16037 0.04287 0.01157 0.00523 0.00017 0.00039 0.00174 0.00135 + 0.15489 0.04121 0.01102 0.00501 0.00017 0.00039 0.00166 0.00128 + 0.14987 0.03970 0.01053 0.00481 0.00016 0.00039 0.00160 0.00122 + 0.14528 0.03832 0.01009 0.00463 0.00016 0.00039 0.00154 0.00116 + 0.14080 0.03698 0.00966 0.00445 0.00016 0.00039 0.00148 0.00111 + 0.13652 0.03572 0.00926 0.00428 0.00016 0.00038 0.00142 0.00106 + 0.13257 0.03455 0.00890 0.00413 0.00015 0.00038 0.00137 0.00102 + 0.12893 0.03348 0.00857 0.00399 0.00015 0.00038 0.00132 0.00098 + 0.12535 0.03244 0.00825 0.00386 0.00015 0.00037 0.00128 0.00094 + 0.45943 0.14682 0.05133 0.02027 0.00000 0.00000 0.00686 0.00712 + 0.44440 0.14082 0.04785 0.01933 0.00000 0.00000 0.00652 0.00665 + 0.42205 0.13201 0.04333 0.01796 0.00000 0.00000 0.00602 0.00598 + 0.40583 0.12571 0.04029 0.01698 0.00002 0.00000 0.00567 0.00552 + 0.38899 0.11926 0.03741 0.01598 0.00004 0.00000 0.00531 0.00506 + 0.37473 0.11386 0.03515 0.01516 0.00006 0.00000 0.00502 0.00468 + 0.36134 0.10885 0.03316 0.01440 0.00007 0.00000 0.00475 0.00435 + 0.34747 0.10373 0.03122 0.01362 0.00008 0.00000 0.00448 0.00402 + 0.33575 0.09945 0.02965 0.01298 0.00009 0.00000 0.00425 0.00375 + 0.32474 0.09548 0.02823 0.01239 0.00009 0.00000 0.00405 0.00351 + 0.31625 0.09245 0.02717 0.01194 0.00010 0.00000 0.00389 0.00334 + 0.29882 0.08631 0.02507 0.01104 0.00011 0.00000 0.00358 0.00299 + 0.28458 0.08138 0.02333 0.01032 0.00011 0.00005 0.00334 0.00273 + 0.26955 0.07625 0.02155 0.00959 0.00012 0.00011 0.00309 0.00246 + 0.25488 0.07134 0.01988 0.00889 0.00012 0.00015 0.00285 0.00223 + 0.24237 0.06721 0.01850 0.00831 0.00012 0.00019 0.00266 0.00204 + 0.23048 0.06335 0.01722 0.00778 0.00013 0.00022 0.00249 0.00187 + 0.22113 0.06035 0.01624 0.00736 0.00013 0.00024 0.00235 0.00174 + 0.21039 0.05694 0.01514 0.00690 0.00013 0.00026 0.00220 0.00161 + 0.20138 0.05411 0.01424 0.00652 0.00013 0.00028 0.00208 0.00150 + 0.19351 0.05167 0.01347 0.00619 0.00013 0.00029 0.00197 0.00140 + 0.18403 0.04876 0.01257 0.00581 0.00013 0.00031 0.00185 0.00130 + 0.17558 0.04619 0.01178 0.00547 0.00013 0.00032 0.00174 0.00120 + 0.16806 0.04393 0.01110 0.00517 0.00012 0.00032 0.00164 0.00113 + 0.16089 0.04179 0.01046 0.00489 0.00012 0.00033 0.00155 0.00105 + 0.15421 0.03981 0.00987 0.00464 0.00012 0.00033 0.00147 0.00099 + 0.14816 0.03804 0.00935 0.00441 0.00012 0.00033 0.00140 0.00093 + 0.14269 0.03644 0.00889 0.00421 0.00012 0.00033 0.00134 0.00088 + 0.13742 0.03492 0.00845 0.00401 0.00012 0.00033 0.00128 0.00084 + 0.13244 0.03349 0.00805 0.00383 0.00011 0.00033 0.00122 0.00079 + 0.12788 0.03219 0.00768 0.00367 0.00011 0.00033 0.00117 0.00075 + 0.12373 0.03101 0.00735 0.00352 0.00011 0.00033 0.00112 0.00072 + 0.11969 0.02987 0.00703 0.00338 0.00011 0.00033 0.00107 0.00069 + 0.11583 0.02879 0.00674 0.00325 0.00011 0.00032 0.00103 0.00065 + 0.11228 0.02780 0.00647 0.00313 0.00010 0.00032 0.00099 0.00063 + 0.10902 0.02689 0.00622 0.00301 0.00010 0.00032 0.00096 0.00060 + 0.10582 0.02601 0.00598 0.00291 0.00010 0.00032 0.00092 0.00058 + 0.42675 0.13028 0.03459 0.01726 0.00000 0.00000 0.00551 0.00474 + 0.41152 0.12455 0.03249 0.01639 0.00000 0.00000 0.00522 0.00441 + 0.38897 0.11616 0.02975 0.01512 0.00000 0.00000 0.00479 0.00394 + 0.37269 0.11018 0.02787 0.01423 0.00001 0.00000 0.00449 0.00362 + 0.35587 0.10409 0.02608 0.01332 0.00003 0.00000 0.00419 0.00330 + 0.34169 0.09902 0.02466 0.01257 0.00004 0.00000 0.00394 0.00304 + 0.32842 0.09433 0.02339 0.01189 0.00005 0.00000 0.00372 0.00282 + 0.31475 0.08956 0.02213 0.01119 0.00005 0.00000 0.00349 0.00259 + 0.30323 0.08559 0.02111 0.01062 0.00006 0.00000 0.00330 0.00241 + 0.29247 0.08192 0.02018 0.01010 0.00006 0.00000 0.00313 0.00225 + 0.28419 0.07912 0.01947 0.00970 0.00007 0.00000 0.00300 0.00213 + 0.26728 0.07349 0.01806 0.00891 0.00007 0.00000 0.00275 0.00190 + 0.25355 0.06899 0.01686 0.00829 0.00008 0.00005 0.00255 0.00172 + 0.23914 0.06434 0.01563 0.00765 0.00008 0.00010 0.00235 0.00155 + 0.22516 0.05992 0.01446 0.00706 0.00008 0.00014 0.00216 0.00139 + 0.21332 0.05623 0.01348 0.00656 0.00008 0.00017 0.00201 0.00127 + 0.20212 0.05278 0.01257 0.00611 0.00009 0.00020 0.00187 0.00116 + 0.19335 0.05012 0.01187 0.00576 0.00009 0.00021 0.00176 0.00108 + 0.18332 0.04712 0.01107 0.00538 0.00009 0.00023 0.00164 0.00099 + 0.17495 0.04464 0.01042 0.00506 0.00009 0.00025 0.00154 0.00092 + 0.16767 0.04250 0.00986 0.00479 0.00009 0.00026 0.00146 0.00086 + 0.15892 0.03996 0.00919 0.00447 0.00009 0.00027 0.00137 0.00080 + 0.15117 0.03774 0.00861 0.00419 0.00009 0.00028 0.00128 0.00074 + 0.14428 0.03578 0.00811 0.00395 0.00008 0.00028 0.00121 0.00069 + 0.13775 0.03394 0.00764 0.00373 0.00008 0.00028 0.00114 0.00065 + 0.13168 0.03224 0.00720 0.00352 0.00008 0.00029 0.00108 0.00061 + 0.12620 0.03073 0.00682 0.00334 0.00008 0.00029 0.00102 0.00057 + 0.12127 0.02937 0.00648 0.00318 0.00008 0.00029 0.00097 0.00054 + 0.11652 0.02807 0.00615 0.00302 0.00008 0.00029 0.00093 0.00051 + 0.11205 0.02686 0.00585 0.00288 0.00008 0.00029 0.00088 0.00048 + 0.10797 0.02576 0.00558 0.00275 0.00008 0.00028 0.00084 0.00046 + 0.10427 0.02477 0.00533 0.00263 0.00008 0.00028 0.00081 0.00044 + 0.10066 0.02381 0.00510 0.00252 0.00007 0.00028 0.00077 0.00042 + 0.09724 0.02290 0.00488 0.00242 0.00007 0.00028 0.00074 0.00040 + 0.09409 0.02207 0.00468 0.00232 0.00007 0.00027 0.00071 0.00038 + 0.09120 0.02131 0.00449 0.00223 0.00007 0.00027 0.00069 0.00037 + 0.08837 0.02058 0.00432 0.00215 0.00007 0.00027 0.00066 0.00035 + 0.39287 0.11426 0.02289 0.01442 0.00000 0.00000 0.00437 0.00305 + 0.37768 0.10886 0.02175 0.01363 0.00000 0.00000 0.00412 0.00282 + 0.35526 0.10100 0.02022 0.01249 0.00000 0.00000 0.00377 0.00251 + 0.33916 0.09543 0.01914 0.01169 0.00001 0.00000 0.00352 0.00229 + 0.32258 0.08977 0.01808 0.01089 0.00002 0.00000 0.00327 0.00208 + 0.30867 0.08508 0.01723 0.01023 0.00002 0.00000 0.00306 0.00191 + 0.29571 0.08076 0.01645 0.00963 0.00003 0.00000 0.00287 0.00176 + 0.28241 0.07638 0.01567 0.00902 0.00004 0.00000 0.00269 0.00162 + 0.27126 0.07275 0.01501 0.00852 0.00004 0.00000 0.00253 0.00150 + 0.26087 0.06941 0.01441 0.00807 0.00004 0.00000 0.00240 0.00139 + 0.25291 0.06687 0.01395 0.00773 0.00004 0.00000 0.00229 0.00132 + 0.23673 0.06178 0.01300 0.00705 0.00005 0.00000 0.00209 0.00117 + 0.22367 0.05775 0.01219 0.00652 0.00005 0.00004 0.00193 0.00106 + 0.21004 0.05360 0.01133 0.00599 0.00005 0.00009 0.00177 0.00095 + 0.19690 0.04968 0.01051 0.00549 0.00006 0.00012 0.00162 0.00085 + 0.18583 0.04642 0.00982 0.00508 0.00006 0.00015 0.00150 0.00077 + 0.17542 0.04341 0.00916 0.00470 0.00006 0.00018 0.00139 0.00071 + 0.16730 0.04109 0.00865 0.00442 0.00006 0.00019 0.00130 0.00066 + 0.15806 0.03847 0.00808 0.00410 0.00006 0.00021 0.00121 0.00060 + 0.15039 0.03633 0.00760 0.00385 0.00006 0.00022 0.00113 0.00056 + 0.14373 0.03449 0.00719 0.00363 0.00006 0.00023 0.00107 0.00052 + 0.13577 0.03232 0.00670 0.00337 0.00006 0.00024 0.00100 0.00048 + 0.12875 0.03041 0.00627 0.00315 0.00006 0.00024 0.00093 0.00045 + 0.12253 0.02875 0.00590 0.00296 0.00006 0.00025 0.00088 0.00042 + 0.11666 0.02719 0.00555 0.00278 0.00006 0.00025 0.00082 0.00039 + 0.11122 0.02576 0.00523 0.00262 0.00006 0.00025 0.00078 0.00037 + 0.10632 0.02448 0.00494 0.00248 0.00006 0.00025 0.00074 0.00034 + 0.10193 0.02334 0.00469 0.00235 0.00006 0.00025 0.00070 0.00033 + 0.09771 0.02226 0.00445 0.00223 0.00005 0.00025 0.00066 0.00031 + 0.09375 0.02125 0.00422 0.00212 0.00005 0.00025 0.00063 0.00029 + 0.09015 0.02033 0.00402 0.00202 0.00005 0.00024 0.00060 0.00028 + 0.08688 0.01951 0.00384 0.00193 0.00005 0.00024 0.00058 0.00027 + 0.08372 0.01871 0.00367 0.00184 0.00005 0.00024 0.00055 0.00025 + 0.08071 0.01796 0.00350 0.00176 0.00005 0.00024 0.00053 0.00024 + 0.07796 0.01728 0.00335 0.00169 0.00005 0.00023 0.00051 0.00023 + 0.07543 0.01666 0.00322 0.00162 0.00005 0.00023 0.00049 0.00022 + 0.07297 0.01605 0.00309 0.00156 0.00005 0.00023 0.00047 0.00021 + 0.35835 0.09897 0.01487 0.01179 0.00000 0.00000 0.00342 0.00189 + 0.34339 0.09398 0.01435 0.01110 0.00000 0.00000 0.00322 0.00174 + 0.32142 0.08673 0.01362 0.01010 0.00000 0.00000 0.00292 0.00154 + 0.30570 0.08162 0.01307 0.00941 0.00001 0.00000 0.00272 0.00141 + 0.28960 0.07645 0.01249 0.00872 0.00001 0.00000 0.00251 0.00127 + 0.27614 0.07218 0.01201 0.00815 0.00002 0.00000 0.00234 0.00117 + 0.26365 0.06826 0.01155 0.00763 0.00002 0.00000 0.00219 0.00107 + 0.25089 0.06430 0.01108 0.00712 0.00002 0.00000 0.00204 0.00098 + 0.24024 0.06104 0.01067 0.00670 0.00003 0.00000 0.00192 0.00091 + 0.23034 0.05804 0.01028 0.00631 0.00003 0.00000 0.00181 0.00084 + 0.22279 0.05578 0.00998 0.00603 0.00003 0.00000 0.00173 0.00079 + 0.20751 0.05126 0.00935 0.00546 0.00003 0.00000 0.00156 0.00070 + 0.19525 0.04769 0.00880 0.00502 0.00004 0.00004 0.00144 0.00063 + 0.18252 0.04405 0.00821 0.00458 0.00004 0.00008 0.00131 0.00057 + 0.17033 0.04062 0.00762 0.00418 0.00004 0.00011 0.00119 0.00051 + 0.16013 0.03780 0.00713 0.00384 0.00004 0.00014 0.00110 0.00046 + 0.15057 0.03520 0.00666 0.00354 0.00004 0.00016 0.00101 0.00042 + 0.14316 0.03320 0.00629 0.00332 0.00004 0.00017 0.00095 0.00039 + 0.13476 0.03097 0.00587 0.00306 0.00004 0.00018 0.00088 0.00036 + 0.12782 0.02915 0.00552 0.00286 0.00004 0.00019 0.00082 0.00034 + 0.12182 0.02759 0.00521 0.00269 0.00004 0.00020 0.00077 0.00031 + 0.11468 0.02575 0.00485 0.00249 0.00004 0.00021 0.00072 0.00029 + 0.10839 0.02416 0.00454 0.00232 0.00004 0.00021 0.00067 0.00027 + 0.10286 0.02277 0.00426 0.00217 0.00004 0.00021 0.00063 0.00025 + 0.09765 0.02147 0.00400 0.00203 0.00004 0.00022 0.00059 0.00024 + 0.09284 0.02028 0.00377 0.00191 0.00004 0.00022 0.00055 0.00022 + 0.08853 0.01922 0.00355 0.00180 0.00004 0.00022 0.00052 0.00021 + 0.08466 0.01828 0.00337 0.00170 0.00004 0.00022 0.00049 0.00020 + 0.08097 0.01739 0.00319 0.00161 0.00004 0.00021 0.00047 0.00019 + 0.07751 0.01656 0.00302 0.00152 0.00004 0.00021 0.00045 0.00018 + 0.07437 0.01581 0.00287 0.00145 0.00004 0.00021 0.00042 0.00017 + 0.07153 0.01513 0.00274 0.00138 0.00004 0.00021 0.00040 0.00016 + 0.06879 0.01449 0.00261 0.00131 0.00004 0.00021 0.00039 0.00016 + 0.06619 0.01388 0.00249 0.00125 0.00004 0.00020 0.00037 0.00015 + 0.06381 0.01332 0.00238 0.00120 0.00003 0.00020 0.00035 0.00014 + 0.06164 0.01282 0.00228 0.00115 0.00003 0.00020 0.00034 0.00014 + 0.05952 0.01233 0.00219 0.00110 0.00003 0.00019 0.00033 0.00013 + 0.32365 0.08459 0.00950 0.00942 0.00000 0.00000 0.00264 0.00113 + 0.30912 0.08005 0.00937 0.00883 0.00000 0.00000 0.00247 0.00104 + 0.28788 0.07348 0.00913 0.00799 0.00000 0.00000 0.00223 0.00092 + 0.27275 0.06886 0.00890 0.00740 0.00000 0.00000 0.00207 0.00084 + 0.25732 0.06421 0.00862 0.00682 0.00001 0.00000 0.00190 0.00076 + 0.24447 0.06039 0.00837 0.00634 0.00001 0.00000 0.00177 0.00069 + 0.23260 0.05689 0.00812 0.00591 0.00001 0.00000 0.00165 0.00064 + 0.22052 0.05338 0.00784 0.00549 0.00002 0.00000 0.00153 0.00058 + 0.21047 0.05049 0.00759 0.00514 0.00002 0.00000 0.00143 0.00054 + 0.20118 0.04785 0.00734 0.00483 0.00002 0.00000 0.00135 0.00050 + 0.19410 0.04586 0.00715 0.00459 0.00002 0.00000 0.00128 0.00047 + 0.17986 0.04191 0.00673 0.00413 0.00002 0.00000 0.00115 0.00042 + 0.16851 0.03881 0.00635 0.00378 0.00002 0.00004 0.00105 0.00038 + 0.15679 0.03566 0.00593 0.00343 0.00003 0.00007 0.00096 0.00034 + 0.14564 0.03272 0.00552 0.00310 0.00003 0.00010 0.00087 0.00031 + 0.13635 0.03031 0.00516 0.00284 0.00003 0.00012 0.00080 0.00028 + 0.12771 0.02810 0.00482 0.00261 0.00003 0.00014 0.00073 0.00025 + 0.12103 0.02642 0.00455 0.00243 0.00003 0.00015 0.00068 0.00024 + 0.11350 0.02455 0.00424 0.00223 0.00003 0.00016 0.00063 0.00022 + 0.10731 0.02302 0.00398 0.00208 0.00003 0.00017 0.00059 0.00020 + 0.10198 0.02173 0.00376 0.00195 0.00003 0.00018 0.00055 0.00019 + 0.09565 0.02020 0.00349 0.00179 0.00003 0.00018 0.00051 0.00018 + 0.09012 0.01889 0.00326 0.00166 0.00003 0.00019 0.00047 0.00017 + 0.08526 0.01774 0.00306 0.00155 0.00003 0.00019 0.00044 0.00015 + 0.08070 0.01668 0.00286 0.00145 0.00003 0.00019 0.00041 0.00015 + 0.07651 0.01570 0.00269 0.00135 0.00003 0.00019 0.00039 0.00014 + 0.07276 0.01484 0.00253 0.00127 0.00003 0.00019 0.00037 0.00013 + 0.06942 0.01408 0.00239 0.00120 0.00003 0.00019 0.00035 0.00012 + 0.06623 0.01336 0.00226 0.00113 0.00003 0.00018 0.00033 0.00012 + 0.06325 0.01269 0.00214 0.00107 0.00003 0.00018 0.00031 0.00011 + 0.06056 0.01209 0.00203 0.00101 0.00003 0.00018 0.00029 0.00011 + 0.05812 0.01155 0.00194 0.00096 0.00003 0.00018 0.00028 0.00010 + 0.05578 0.01103 0.00184 0.00092 0.00003 0.00018 0.00027 0.00010 + 0.05356 0.01055 0.00175 0.00087 0.00003 0.00017 0.00026 0.00009 + 0.05154 0.01011 0.00167 0.00083 0.00003 0.00017 0.00024 0.00009 + 0.04969 0.00970 0.00160 0.00080 0.00002 0.00017 0.00023 0.00009 + 0.04790 0.00932 0.00153 0.00076 0.00002 0.00017 0.00022 0.00008 + 0.28925 0.07128 0.00597 0.00735 0.00000 0.00000 0.00200 0.00066 + 0.27534 0.06721 0.00605 0.00686 0.00000 0.00000 0.00187 0.00061 + 0.25509 0.06135 0.00610 0.00616 0.00000 0.00000 0.00168 0.00054 + 0.24073 0.05726 0.00605 0.00568 0.00000 0.00000 0.00155 0.00049 + 0.22614 0.05315 0.00595 0.00521 0.00001 0.00000 0.00142 0.00045 + 0.21404 0.04978 0.00584 0.00482 0.00001 0.00000 0.00131 0.00041 + 0.20291 0.04671 0.00570 0.00447 0.00001 0.00000 0.00122 0.00038 + 0.19162 0.04365 0.00555 0.00413 0.00001 0.00000 0.00113 0.00035 + 0.18227 0.04113 0.00539 0.00385 0.00001 0.00000 0.00105 0.00032 + 0.17366 0.03884 0.00524 0.00360 0.00001 0.00000 0.00098 0.00030 + 0.16713 0.03712 0.00511 0.00341 0.00001 0.00000 0.00093 0.00028 + 0.15404 0.03373 0.00483 0.00305 0.00002 0.00000 0.00084 0.00025 + 0.14367 0.03108 0.00456 0.00277 0.00002 0.00003 0.00076 0.00023 + 0.13303 0.02841 0.00427 0.00250 0.00002 0.00007 0.00069 0.00021 + 0.12297 0.02593 0.00397 0.00225 0.00002 0.00009 0.00062 0.00019 + 0.11464 0.02391 0.00371 0.00205 0.00002 0.00011 0.00057 0.00017 + 0.10692 0.02207 0.00346 0.00187 0.00002 0.00013 0.00052 0.00016 + 0.10100 0.02068 0.00326 0.00173 0.00002 0.00014 0.00048 0.00015 + 0.09435 0.01913 0.00304 0.00159 0.00002 0.00015 0.00044 0.00014 + 0.08890 0.01788 0.00285 0.00147 0.00002 0.00015 0.00041 0.00013 + 0.08423 0.01682 0.00268 0.00137 0.00002 0.00016 0.00038 0.00012 + 0.07872 0.01558 0.00249 0.00126 0.00002 0.00016 0.00035 0.00011 + 0.07391 0.01451 0.00232 0.00116 0.00002 0.00016 0.00033 0.00011 + 0.06971 0.01358 0.00217 0.00108 0.00002 0.00016 0.00031 0.00010 + 0.06578 0.01273 0.00203 0.00101 0.00002 0.00016 0.00029 0.00009 + 0.06218 0.01195 0.00190 0.00094 0.00002 0.00016 0.00027 0.00009 + 0.05897 0.01126 0.00178 0.00088 0.00002 0.00016 0.00025 0.00008 + 0.05612 0.01066 0.00168 0.00083 0.00002 0.00016 0.00024 0.00008 + 0.05341 0.01008 0.00159 0.00078 0.00002 0.00016 0.00022 0.00008 + 0.05088 0.00956 0.00150 0.00073 0.00002 0.00016 0.00021 0.00007 + 0.04860 0.00908 0.00142 0.00069 0.00002 0.00015 0.00020 0.00007 + 0.04655 0.00866 0.00135 0.00066 0.00002 0.00015 0.00019 0.00007 + 0.04458 0.00825 0.00128 0.00062 0.00002 0.00015 0.00018 0.00007 + 0.04272 0.00787 0.00122 0.00059 0.00002 0.00015 0.00017 0.00006 + 0.04102 0.00752 0.00116 0.00056 0.00002 0.00014 0.00017 0.00006 + 0.03948 0.00721 0.00111 0.00054 0.00002 0.00014 0.00016 0.00006 + 0.03799 0.00691 0.00106 0.00052 0.00002 0.00014 0.00015 0.00006 + 0.25559 0.05913 0.00369 0.00558 0.00000 0.00000 0.00149 0.00039 + 0.24246 0.05556 0.00388 0.00519 0.00000 0.00000 0.00139 0.00036 + 0.22342 0.05043 0.00406 0.00463 0.00000 0.00000 0.00124 0.00032 + 0.20998 0.04686 0.00411 0.00425 0.00000 0.00000 0.00114 0.00030 + 0.19637 0.04329 0.00411 0.00387 0.00000 0.00000 0.00104 0.00027 + 0.18514 0.04038 0.00407 0.00357 0.00000 0.00000 0.00096 0.00025 + 0.17485 0.03774 0.00401 0.00329 0.00001 0.00000 0.00089 0.00023 + 0.16445 0.03510 0.00392 0.00302 0.00001 0.00000 0.00081 0.00021 + 0.15588 0.03295 0.00382 0.00281 0.00001 0.00000 0.00076 0.00020 + 0.14802 0.03101 0.00372 0.00261 0.00001 0.00000 0.00071 0.00019 + 0.14207 0.02955 0.00364 0.00247 0.00001 0.00000 0.00067 0.00018 + 0.13021 0.02668 0.00344 0.00219 0.00001 0.00000 0.00059 0.00016 + 0.12087 0.02446 0.00326 0.00198 0.00001 0.00003 0.00054 0.00015 + 0.11135 0.02224 0.00305 0.00177 0.00001 0.00006 0.00048 0.00013 + 0.10240 0.02018 0.00283 0.00158 0.00001 0.00008 0.00043 0.00012 + 0.09504 0.01852 0.00264 0.00144 0.00001 0.00010 0.00039 0.00011 + 0.08826 0.01702 0.00246 0.00130 0.00001 0.00011 0.00036 0.00010 + 0.08309 0.01588 0.00232 0.00120 0.00001 0.00012 0.00033 0.00010 + 0.07730 0.01463 0.00215 0.00110 0.00001 0.00013 0.00030 0.00009 + 0.07258 0.01362 0.00201 0.00101 0.00001 0.00013 0.00028 0.00009 + 0.06855 0.01277 0.00189 0.00094 0.00001 0.00014 0.00026 0.00008 + 0.06382 0.01178 0.00175 0.00086 0.00001 0.00014 0.00024 0.00008 + 0.05971 0.01093 0.00162 0.00079 0.00001 0.00014 0.00022 0.00007 + 0.05614 0.01020 0.00151 0.00073 0.00001 0.00014 0.00021 0.00007 + 0.05280 0.00953 0.00141 0.00068 0.00001 0.00014 0.00019 0.00006 + 0.04976 0.00892 0.00132 0.00063 0.00001 0.00014 0.00018 0.00006 + 0.04706 0.00838 0.00124 0.00059 0.00001 0.00014 0.00017 0.00006 + 0.04467 0.00791 0.00116 0.00055 0.00001 0.00014 0.00016 0.00006 + 0.04240 0.00746 0.00110 0.00052 0.00001 0.00013 0.00015 0.00005 + 0.04029 0.00705 0.00103 0.00049 0.00001 0.00013 0.00014 0.00005 + 0.03840 0.00668 0.00098 0.00046 0.00001 0.00013 0.00014 0.00005 + 0.03669 0.00636 0.00093 0.00044 0.00001 0.00013 0.00013 0.00005 + 0.03506 0.00604 0.00088 0.00041 0.00001 0.00013 0.00012 0.00005 + 0.03352 0.00575 0.00083 0.00039 0.00001 0.00012 0.00012 0.00004 + 0.03213 0.00549 0.00079 0.00037 0.00001 0.00012 0.00011 0.00004 + 0.03086 0.00525 0.00076 0.00036 0.00001 0.00012 0.00011 0.00004 + 0.02964 0.00502 0.00072 0.00034 0.00001 0.00012 0.00010 0.00004 + 0.19195 0.03857 0.00137 0.00294 0.00000 0.00000 0.00078 0.00017 + 0.18077 0.03596 0.00159 0.00271 0.00000 0.00000 0.00072 0.00016 + 0.16468 0.03226 0.00181 0.00239 0.00000 0.00000 0.00063 0.00014 + 0.15342 0.02970 0.00191 0.00217 0.00000 0.00000 0.00058 0.00013 + 0.14213 0.02716 0.00196 0.00195 0.00000 0.00000 0.00052 0.00012 + 0.13288 0.02511 0.00197 0.00178 0.00000 0.00000 0.00048 0.00012 + 0.12447 0.02326 0.00196 0.00163 0.00000 0.00000 0.00044 0.00011 + 0.11605 0.02144 0.00193 0.00148 0.00000 0.00000 0.00040 0.00010 + 0.10917 0.01996 0.00189 0.00136 0.00000 0.00000 0.00037 0.00010 + 0.10290 0.01863 0.00185 0.00126 0.00000 0.00000 0.00034 0.00009 + 0.09820 0.01765 0.00181 0.00118 0.00000 0.00000 0.00032 0.00009 + 0.08891 0.01573 0.00171 0.00103 0.00001 0.00000 0.00028 0.00008 + 0.08170 0.01426 0.00162 0.00092 0.00001 0.00002 0.00025 0.00007 + 0.07443 0.01281 0.00150 0.00081 0.00001 0.00005 0.00022 0.00007 + 0.06770 0.01149 0.00139 0.00072 0.00001 0.00006 0.00020 0.00006 + 0.06223 0.01043 0.00129 0.00064 0.00001 0.00008 0.00018 0.00006 + 0.05725 0.00949 0.00119 0.00058 0.00001 0.00009 0.00016 0.00005 + 0.05349 0.00879 0.00112 0.00053 0.00001 0.00009 0.00015 0.00005 + 0.04933 0.00802 0.00103 0.00048 0.00001 0.00010 0.00014 0.00005 + 0.04597 0.00741 0.00096 0.00044 0.00001 0.00010 0.00013 0.00005 + 0.04313 0.00690 0.00090 0.00040 0.00001 0.00010 0.00012 0.00004 + 0.03982 0.00631 0.00082 0.00037 0.00001 0.00010 0.00011 0.00004 + 0.03698 0.00581 0.00076 0.00033 0.00001 0.00010 0.00010 0.00004 + 0.03452 0.00538 0.00070 0.00031 0.00001 0.00010 0.00009 0.00004 + 0.03226 0.00499 0.00065 0.00028 0.00001 0.00010 0.00008 0.00004 + 0.03020 0.00464 0.00060 0.00026 0.00001 0.00010 0.00008 0.00003 + 0.02839 0.00433 0.00056 0.00024 0.00001 0.00010 0.00007 0.00003 + 0.02679 0.00406 0.00053 0.00023 0.00001 0.00010 0.00007 0.00003 + 0.02529 0.00381 0.00049 0.00021 0.00001 0.00009 0.00007 0.00003 + 0.02391 0.00358 0.00046 0.00020 0.00001 0.00009 0.00006 0.00003 + 0.02267 0.00338 0.00044 0.00019 0.00001 0.00009 0.00006 0.00003 + 0.02156 0.00320 0.00041 0.00018 0.00001 0.00009 0.00006 0.00003 + 0.02050 0.00302 0.00039 0.00017 0.00001 0.00009 0.00005 0.00003 + 0.01951 0.00287 0.00037 0.00016 0.00001 0.00009 0.00005 0.00003 + 0.01862 0.00272 0.00035 0.00015 0.00001 0.00008 0.00005 0.00003 + 0.01781 0.00259 0.00033 0.00014 0.00001 0.00008 0.00005 0.00003 + 0.01704 0.00247 0.00031 0.00014 0.00001 0.00008 0.00005 0.00003 + 0.13540 0.02305 0.00051 0.00135 0.00000 0.00000 0.00036 0.00011 + 0.12650 0.02132 0.00066 0.00123 0.00000 0.00000 0.00033 0.00010 + 0.11381 0.01888 0.00081 0.00107 0.00000 0.00000 0.00029 0.00009 + 0.10501 0.01721 0.00087 0.00096 0.00000 0.00000 0.00026 0.00009 + 0.09626 0.01557 0.00091 0.00085 0.00000 0.00000 0.00023 0.00008 + 0.08916 0.01425 0.00093 0.00077 0.00000 0.00000 0.00021 0.00007 + 0.08276 0.01308 0.00093 0.00070 0.00000 0.00000 0.00019 0.00007 + 0.07641 0.01192 0.00091 0.00063 0.00000 0.00000 0.00017 0.00006 + 0.07126 0.01100 0.00089 0.00057 0.00000 0.00000 0.00016 0.00006 + 0.06661 0.01018 0.00087 0.00052 0.00000 0.00000 0.00015 0.00006 + 0.06315 0.00957 0.00085 0.00049 0.00000 0.00000 0.00014 0.00005 + 0.05640 0.00840 0.00080 0.00042 0.00000 0.00000 0.00012 0.00005 + 0.05122 0.00753 0.00075 0.00037 0.00000 0.00002 0.00011 0.00005 + 0.04608 0.00667 0.00069 0.00032 0.00000 0.00004 0.00009 0.00004 + 0.04138 0.00590 0.00063 0.00028 0.00000 0.00005 0.00008 0.00004 + 0.03762 0.00530 0.00058 0.00025 0.00000 0.00006 0.00007 0.00004 + 0.03425 0.00476 0.00053 0.00022 0.00000 0.00006 0.00007 0.00003 + 0.03173 0.00437 0.00049 0.00020 0.00001 0.00007 0.00006 0.00003 + 0.02897 0.00395 0.00045 0.00018 0.00001 0.00007 0.00006 0.00003 + 0.02677 0.00361 0.00042 0.00016 0.00001 0.00007 0.00005 0.00003 + 0.02493 0.00334 0.00039 0.00015 0.00001 0.00007 0.00005 0.00003 + 0.02281 0.00302 0.00035 0.00014 0.00001 0.00007 0.00004 0.00003 + 0.02100 0.00276 0.00032 0.00012 0.00001 0.00007 0.00004 0.00002 + 0.01945 0.00254 0.00029 0.00011 0.00001 0.00007 0.00004 0.00002 + 0.01804 0.00233 0.00027 0.00010 0.00001 0.00007 0.00004 0.00002 + 0.01677 0.00215 0.00025 0.00010 0.00001 0.00007 0.00003 0.00002 + 0.01566 0.00200 0.00023 0.00009 0.00001 0.00007 0.00003 0.00002 + 0.01468 0.00186 0.00022 0.00008 0.00001 0.00007 0.00003 0.00002 + 0.01378 0.00173 0.00020 0.00008 0.00001 0.00006 0.00003 0.00002 + 0.01294 0.00162 0.00019 0.00007 0.00001 0.00006 0.00003 0.00002 + 0.01220 0.00152 0.00018 0.00007 0.00001 0.00006 0.00003 0.00002 + 0.01155 0.00143 0.00016 0.00007 0.00001 0.00006 0.00003 0.00002 + 0.01092 0.00135 0.00015 0.00006 0.00001 0.00006 0.00003 0.00002 + 0.01034 0.00127 0.00015 0.00006 0.00001 0.00006 0.00002 0.00002 + 0.00982 0.00120 0.00014 0.00006 0.00001 0.00006 0.00002 0.00002 + 0.00935 0.00114 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.00891 0.00108 0.00012 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.08793 0.01227 0.00019 0.00051 0.00000 0.00000 0.00015 0.00007 + 0.08143 0.01125 0.00027 0.00047 0.00000 0.00000 0.00013 0.00007 + 0.07223 0.00981 0.00035 0.00040 0.00000 0.00000 0.00012 0.00006 + 0.06593 0.00885 0.00038 0.00035 0.00000 0.00000 0.00010 0.00006 + 0.05972 0.00790 0.00040 0.00031 0.00000 0.00000 0.00009 0.00005 + 0.05472 0.00716 0.00040 0.00028 0.00000 0.00000 0.00008 0.00005 + 0.05026 0.00650 0.00040 0.00025 0.00000 0.00000 0.00007 0.00004 + 0.04588 0.00585 0.00039 0.00022 0.00000 0.00000 0.00007 0.00004 + 0.04236 0.00534 0.00038 0.00020 0.00000 0.00000 0.00006 0.00004 + 0.03922 0.00489 0.00037 0.00018 0.00000 0.00000 0.00006 0.00003 + 0.03690 0.00456 0.00036 0.00017 0.00000 0.00000 0.00005 0.00003 + 0.03242 0.00394 0.00033 0.00014 0.00000 0.00000 0.00004 0.00003 + 0.02904 0.00348 0.00031 0.00012 0.00000 0.00001 0.00004 0.00003 + 0.02574 0.00303 0.00028 0.00011 0.00000 0.00003 0.00003 0.00002 + 0.02278 0.00264 0.00025 0.00009 0.00000 0.00003 0.00003 0.00002 + 0.02045 0.00234 0.00023 0.00008 0.00000 0.00004 0.00003 0.00002 + 0.01838 0.00207 0.00021 0.00007 0.00000 0.00004 0.00003 0.00002 + 0.01686 0.00188 0.00019 0.00007 0.00000 0.00004 0.00002 0.00002 + 0.01522 0.00168 0.00017 0.00006 0.00001 0.00005 0.00002 0.00002 + 0.01393 0.00152 0.00016 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.01286 0.00139 0.00014 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.01164 0.00125 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.01061 0.00113 0.00012 0.00004 0.00001 0.00005 0.00002 0.00002 + 0.00974 0.00103 0.00011 0.00004 0.00001 0.00005 0.00002 0.00002 + 0.00895 0.00094 0.00010 0.00004 0.00001 0.00004 0.00002 0.00002 + 0.00825 0.00086 0.00009 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00765 0.00079 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00712 0.00073 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00663 0.00068 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00619 0.00063 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00580 0.00058 0.00006 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00545 0.00055 0.00006 0.00003 0.00001 0.00004 0.00002 0.00002 + 0.00513 0.00051 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 + 0.00483 0.00048 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 + 0.00456 0.00045 0.00005 0.00002 0.00001 0.00004 0.00002 0.00002 + 0.00432 0.00042 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 + 0.00409 0.00040 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 + 0.05080 0.00554 0.00007 0.00015 0.00000 0.00000 0.00005 0.00004 + 0.04656 0.00502 0.00010 0.00014 0.00000 0.00000 0.00004 0.00004 + 0.04063 0.00431 0.00013 0.00012 0.00000 0.00000 0.00004 0.00003 + 0.03661 0.00384 0.00014 0.00010 0.00000 0.00000 0.00003 0.00003 + 0.03270 0.00338 0.00014 0.00009 0.00000 0.00000 0.00003 0.00003 + 0.02959 0.00302 0.00014 0.00008 0.00000 0.00000 0.00003 0.00002 + 0.02684 0.00271 0.00014 0.00007 0.00000 0.00000 0.00002 0.00002 + 0.02417 0.00240 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 + 0.02205 0.00217 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 + 0.02018 0.00196 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 + 0.01881 0.00181 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 + 0.01620 0.00153 0.00011 0.00004 0.00000 0.00000 0.00002 0.00001 + 0.01427 0.00133 0.00010 0.00003 0.00000 0.00001 0.00001 0.00001 + 0.01242 0.00114 0.00009 0.00003 0.00000 0.00002 0.00001 0.00001 + 0.01079 0.00097 0.00008 0.00003 0.00000 0.00002 0.00001 0.00001 + 0.00954 0.00084 0.00007 0.00002 0.00000 0.00002 0.00001 0.00001 + 0.00844 0.00074 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00765 0.00066 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00681 0.00058 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00616 0.00052 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00563 0.00047 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00503 0.00042 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00453 0.00037 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00411 0.00033 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00374 0.00030 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00342 0.00027 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00314 0.00025 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00290 0.00023 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00267 0.00021 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00248 0.00019 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00230 0.00018 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00215 0.00017 0.00002 0.00002 0.00001 0.00003 0.00002 0.00001 + 0.00201 0.00015 0.00002 0.00002 0.00001 0.00003 0.00002 0.00002 + 0.00188 0.00014 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 + 0.00176 0.00013 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 + 0.00166 0.00013 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 + 0.00156 0.00012 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 + 0.00849 0.00042 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00755 0.00037 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00628 0.00031 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00546 0.00026 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00468 0.00022 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00408 0.00019 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00357 0.00016 0.00000 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00309 0.00014 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00272 0.00012 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 + 0.00240 0.00011 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 + 0.00217 0.00010 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 + 0.00176 0.00008 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 + 0.00147 0.00006 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 + 0.00121 0.00005 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00099 0.00004 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00083 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00070 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00061 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00052 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00045 0.00002 0.00000 0.00002 0.00001 0.00001 0.00002 0.00002 + 0.00040 0.00002 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00034 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00030 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00026 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00023 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00020 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00018 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00016 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00015 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00013 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00012 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00011 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00010 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00009 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00007 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.02318 0.01029 12.04329 0.81780 0.00000 0.00000 0.42849 0.81780 + 0.02329 0.01039 15.58813 0.85388 0.00000 0.00000 0.46675 0.85388 + 0.02345 0.01055 21.84668 0.92632 0.00000 0.00000 0.54248 0.92632 + 0.02357 0.01067 27.14104 0.99538 0.07033 0.00000 0.61396 0.99538 + 0.02370 0.01079 33.48524 1.08469 0.16572 0.00000 0.70583 1.08469 + 0.02381 0.01090 39.63136 1.17679 0.26305 0.00000 0.80012 1.17679 + 0.02392 0.01101 46.13978 1.27938 0.37064 0.00000 0.90481 1.27938 + 0.02404 0.01112 53.73338 1.40480 0.50132 0.00000 1.03245 1.40480 + 0.02414 0.01122 60.92623 1.52858 0.62964 0.00000 1.15814 1.52858 + 0.02424 0.01132 68.40675 1.66189 0.76727 0.00000 1.29326 1.66188 + 0.02432 0.01140 74.72301 1.77777 0.88655 0.00000 1.41056 1.77776 + 0.02449 0.01157 89.35409 2.05650 1.17243 0.00000 1.69230 2.05650 + 0.02463 0.01171 102.92217 2.33352 1.45547 0.27535 1.97185 2.33352 + 0.02479 0.01187 119.50425 2.68593 1.81445 0.64518 2.32701 2.68593 + 0.02496 0.01204 138.36974 3.10266 2.23784 1.07955 2.74654 3.10266 + 0.02511 0.01220 156.93936 3.52759 2.66866 1.52007 3.17394 3.52759 + 0.02526 0.01235 177.09790 4.00385 3.15071 2.01167 3.65262 4.00384 + 0.02538 0.01248 194.92059 4.43679 3.58836 2.45709 4.08754 4.43679 + 0.02553 0.01264 217.87741 5.00964 4.16681 3.04476 4.66273 5.00963 + 0.02567 0.01277 239.41920 5.56152 4.72356 3.60950 5.21666 5.56152 + 0.02579 0.01290 260.19971 6.10623 5.27264 4.16579 5.76320 6.10622 + 0.02594 0.01306 287.98056 6.85208 6.02396 4.92608 6.51134 6.85208 + 0.02609 0.01322 315.54398 7.61070 6.78762 5.69803 7.27207 7.61070 + 0.02623 0.01336 342.63889 8.37337 7.55493 6.47299 8.03668 8.37336 + 0.02637 0.01350 370.94839 9.18712 8.37327 7.29884 8.85236 9.18712 + 0.02650 0.01365 399.84375 10.03466 9.22521 8.15803 9.70174 10.03466 + 0.02663 0.01378 428.27185 10.88434 10.07902 9.01860 10.55315 10.88434 + 0.02675 0.01391 456.01035 11.72780 10.92632 9.87219 11.39821 11.72780 + 0.02687 0.01404 484.82175 12.61845 11.82077 10.77289 12.29045 12.61845 + 0.02700 0.01416 514.06232 13.53685 12.74287 11.70105 13.21040 13.53685 + 0.02711 0.01428 542.68726 14.44949 13.65899 12.62288 14.12449 14.44949 + 0.02722 0.01440 570.52130 15.34950 14.56226 13.53150 15.02587 15.34950 + 0.02733 0.01452 599.31189 16.29286 15.50888 14.48345 15.97059 16.29286 + 0.02744 0.01463 628.45270 17.26045 16.47964 15.45942 16.93951 17.26045 + 0.02755 0.01474 656.90033 18.21682 17.43902 16.42373 17.89714 18.21682 + 0.02765 0.01485 684.48749 19.15517 18.38020 17.36954 18.83667 19.15517 + 0.02775 0.01495 712.97314 20.13505 19.36292 18.35691 19.81774 20.13505 + 0.02595 0.01294 10.58237 0.69839 0.00000 0.00000 0.36649 0.69839 + 0.02608 0.01307 13.59161 0.73002 0.00000 0.00000 0.39998 0.73002 + 0.02627 0.01327 18.83139 0.79270 0.00000 0.00000 0.46546 0.79270 + 0.02642 0.01342 23.20221 0.85174 0.06012 0.00000 0.52657 0.85174 + 0.02657 0.01358 28.38061 0.92732 0.14091 0.00000 0.60434 0.92732 + 0.02671 0.01372 33.34556 1.00455 0.22262 0.00000 0.68344 1.00455 + 0.02684 0.01385 38.55524 1.08989 0.31224 0.00000 0.77056 1.08989 + 0.02698 0.01400 44.57877 1.19339 0.42024 0.00000 0.87595 1.19339 + 0.02711 0.01413 50.23621 1.29477 0.52551 0.00000 0.97896 1.29478 + 0.02723 0.01425 56.07542 1.40323 0.63767 0.00000 1.08896 1.40323 + 0.02732 0.01435 60.97321 1.49696 0.73432 0.00000 1.18391 1.49696 + 0.02753 0.01456 72.21687 1.72064 0.96411 0.00000 1.41014 1.72064 + 0.02770 0.01475 82.51199 1.94078 1.18940 0.21958 1.63244 1.94079 + 0.02790 0.01495 94.95674 2.21821 1.47245 0.51182 1.91221 2.21821 + 0.02811 0.01517 108.95415 2.54303 1.80296 0.85162 2.23940 2.54303 + 0.02829 0.01536 122.58259 2.87112 2.13608 1.19294 2.56959 2.87112 + 0.02848 0.01556 137.22606 3.23558 2.50549 1.57044 2.93612 3.23558 + 0.02864 0.01572 150.05328 3.56424 2.83819 1.90970 3.26647 3.56425 + 0.02883 0.01592 166.42339 3.99565 3.27437 2.35368 3.69986 3.99565 + 0.02900 0.01609 181.64124 4.40792 3.69079 2.77685 4.11386 4.40792 + 0.02916 0.01625 196.19872 4.81189 4.09851 3.19066 4.51940 4.81190 + 0.02935 0.01646 215.48514 5.36075 4.65203 3.75177 5.07020 5.36076 + 0.02954 0.01665 234.43675 5.91439 5.20998 4.31672 5.62564 5.91441 + 0.02972 0.01683 252.89949 6.46672 5.76627 4.87946 6.17962 6.46673 + 0.02989 0.01702 272.02420 7.05171 6.35517 5.47470 6.76623 7.05172 + 0.03007 0.01720 291.37924 7.65657 6.96380 6.08945 7.37267 7.65659 + 0.03023 0.01737 310.26709 8.25879 7.56953 6.70089 7.97635 8.25880 + 0.03039 0.01753 328.55746 8.85275 8.16677 7.30343 8.57167 8.85277 + 0.03055 0.01769 347.41473 9.47601 8.79327 7.93521 9.19628 9.47603 + 0.03071 0.01785 366.41357 10.11473 9.43515 8.58221 9.83632 10.11475 + 0.03086 0.01800 384.88226 10.74570 10.06909 9.22096 10.46852 10.74572 + 0.03100 0.01815 402.72040 11.36443 10.69060 9.84698 11.08841 11.36446 + 0.03115 0.01829 421.05347 12.00947 11.33842 10.49929 11.73461 12.00950 + 0.03129 0.01844 439.48856 12.66747 11.99913 11.16439 12.39374 12.66750 + 0.03143 0.01858 457.37341 13.31446 12.64868 11.81810 13.04180 13.31449 + 0.03156 0.01871 474.61447 13.94612 13.28275 12.45608 13.67446 13.94615 + 0.03170 0.01885 492.31384 14.60255 13.94161 13.11885 14.33190 14.60259 + 0.02897 0.01601 9.31363 0.59974 0.00000 0.00000 0.31519 0.59974 + 0.02911 0.01617 11.86438 0.62752 0.00000 0.00000 0.34455 0.62752 + 0.02934 0.01641 16.24365 0.68182 0.00000 0.00000 0.40125 0.68182 + 0.02951 0.01660 19.84529 0.73234 0.05143 0.00000 0.45352 0.73234 + 0.02970 0.01680 24.06453 0.79635 0.11989 0.00000 0.51939 0.79635 + 0.02986 0.01697 28.06883 0.86114 0.18853 0.00000 0.58578 0.86114 + 0.03001 0.01714 32.23323 0.93216 0.26321 0.00000 0.65833 0.93217 + 0.03018 0.01732 37.00637 1.01762 0.35252 0.00000 0.74539 1.01762 + 0.03033 0.01748 41.45318 1.10072 0.43895 0.00000 0.82987 1.10072 + 0.03047 0.01764 46.00996 1.18904 0.53044 0.00000 0.91951 1.18904 + 0.03059 0.01776 49.80827 1.26494 0.60883 0.00000 0.99644 1.26494 + 0.03083 0.01803 58.45507 1.44468 0.79380 0.00000 1.17836 1.44469 + 0.03105 0.01825 66.27811 1.61996 0.97348 0.17547 1.35547 1.61996 + 0.03128 0.01851 75.64002 1.83889 1.19723 0.40698 1.57640 1.83890 + 0.03153 0.01878 86.06147 2.09288 1.45608 0.67368 1.83241 2.09289 + 0.03176 0.01902 96.10950 2.34720 1.71469 0.93924 2.08851 2.34721 + 0.03199 0.01926 106.80801 2.62743 1.99916 1.23054 2.37050 2.62744 + 0.03218 0.01946 116.10349 2.87831 2.25349 1.49042 2.62282 2.87833 + 0.03241 0.01971 127.87103 3.20527 2.58454 1.82805 2.95148 3.20529 + 0.03262 0.01993 138.72200 3.51550 2.89831 2.14753 3.26317 3.51552 + 0.03281 0.02013 149.02768 3.81756 3.20356 2.45792 3.56656 3.81757 + 0.03306 0.02038 162.57642 4.22517 3.61515 2.87593 3.97582 4.22519 + 0.03329 0.02062 175.78175 4.63339 4.02705 3.29373 4.38557 4.63341 + 0.03351 0.02084 188.54976 5.03795 4.43499 3.70712 4.79153 5.03797 + 0.03373 0.02107 201.68074 5.46375 4.86413 4.14161 5.21871 5.46378 + 0.03395 0.02129 214.87666 5.90132 5.30491 4.58756 5.65762 5.90135 + 0.03415 0.02150 227.66812 6.33444 5.74103 5.02850 6.09198 6.33448 + 0.03435 0.02170 239.97827 6.75934 6.16872 5.46066 6.51803 6.75937 + 0.03455 0.02190 252.59341 7.20286 6.61501 5.91141 6.96271 7.20290 + 0.03475 0.02210 265.22827 7.65508 7.06992 6.37063 7.41604 7.65512 + 0.03494 0.02229 277.44128 8.09964 7.51702 6.82179 7.86165 8.09968 + 0.03512 0.02247 289.17380 8.53357 7.95332 7.26189 8.29657 8.53362 + 0.03530 0.02265 301.17004 8.98397 8.40609 7.71845 8.74795 8.98402 + 0.03549 0.02283 313.17038 9.44138 8.86581 8.18188 9.20632 9.44144 + 0.03566 0.02300 324.75513 9.88927 9.31588 8.63545 9.65511 9.88932 + 0.03583 0.02317 335.87042 10.32480 9.75347 9.07633 10.09149 10.32485 + 0.03600 0.02333 347.22900 10.77566 10.20640 9.53256 10.54322 10.77573 + 0.03099 0.01817 8.63945 0.54876 0.00000 0.00000 0.28865 0.54876 + 0.03116 0.01835 10.94826 0.57450 0.00000 0.00000 0.31583 0.57450 + 0.03142 0.01863 14.87735 0.62439 0.00000 0.00000 0.36789 0.62439 + 0.03161 0.01884 18.08012 0.67042 0.04686 0.00000 0.41553 0.67043 + 0.03182 0.01907 21.80567 0.72838 0.10888 0.00000 0.47517 0.72839 + 0.03200 0.01926 25.31891 0.78671 0.17070 0.00000 0.53495 0.78671 + 0.03218 0.01946 28.95226 0.85032 0.23765 0.00000 0.59995 0.85032 + 0.03237 0.01966 33.09398 0.92647 0.31732 0.00000 0.67756 0.92648 + 0.03253 0.01984 36.93293 1.00019 0.39407 0.00000 0.75254 1.00020 + 0.03270 0.02002 40.84906 1.07822 0.47499 0.00000 0.83176 1.07823 + 0.03283 0.02016 44.10057 1.14504 0.54408 0.00000 0.89953 1.14505 + 0.03311 0.02046 51.46362 1.30254 0.70634 0.00000 1.05900 1.30255 + 0.03335 0.02072 58.07458 1.45524 0.86306 0.15323 1.21337 1.45525 + 0.03362 0.02101 65.93589 1.64492 1.05712 0.35432 1.40486 1.64494 + 0.03391 0.02131 74.62984 1.86371 1.28034 0.58465 1.62549 1.86373 + 0.03417 0.02159 82.96062 2.08161 1.50215 0.81273 1.84501 2.08163 + 0.03444 0.02186 91.77975 2.32049 1.74489 1.06165 2.08549 2.32051 + 0.03466 0.02209 99.40285 2.53340 1.96093 1.28271 2.29969 2.53342 + 0.03493 0.02237 109.00412 2.80963 2.24088 1.56862 2.57746 2.80966 + 0.03517 0.02262 117.81219 3.07055 2.50503 1.83793 2.83972 3.07058 + 0.03539 0.02285 126.13960 3.32360 2.76099 2.09854 3.09398 3.32364 + 0.03568 0.02313 137.03427 3.66364 3.10465 2.44799 3.43552 3.66368 + 0.03595 0.02341 147.59799 4.00267 3.44702 2.79570 3.77593 4.00271 + 0.03620 0.02366 157.76317 4.33727 3.78471 3.13831 4.11181 4.33732 + 0.03646 0.02392 168.16980 4.68807 4.13854 3.49698 4.46386 4.68812 + 0.03671 0.02417 178.58133 5.04719 4.50058 3.86369 4.82419 5.04724 + 0.03696 0.02441 188.63106 5.40137 4.85749 4.22495 5.17950 5.40143 + 0.03719 0.02463 198.26465 5.74767 5.20633 4.57784 5.52685 5.74773 + 0.03742 0.02486 208.09923 6.10798 5.56916 4.94468 5.88820 6.10804 + 0.03766 0.02509 217.91235 6.47418 5.93782 5.31724 6.25542 6.47425 + 0.03788 0.02530 227.36395 6.83311 6.29905 5.68213 6.61530 6.83318 + 0.03809 0.02550 236.41277 7.18245 6.65054 6.03706 6.96553 7.18253 + 0.03831 0.02571 245.63503 7.54407 7.01431 6.40426 7.32804 7.54415 + 0.03853 0.02591 254.83009 7.91030 7.38266 6.77595 7.69515 7.91039 + 0.03873 0.02611 263.67911 8.26798 7.74233 7.13878 8.05365 8.26808 + 0.03893 0.02629 272.14435 8.61494 8.09116 7.49058 8.40138 8.61504 + 0.03913 0.02648 280.76993 8.97327 8.45136 7.85376 8.76048 8.97337 + 0.03257 0.01988 8.18898 0.51525 0.00000 0.00000 0.27120 0.51525 + 0.03275 0.02008 10.33674 0.53964 0.00000 0.00000 0.29693 0.53964 + 0.03303 0.02039 13.96778 0.58658 0.00000 0.00000 0.34590 0.58658 + 0.03324 0.02062 16.90793 0.62964 0.04383 0.00000 0.39046 0.62965 + 0.03347 0.02087 20.30992 0.68360 0.10158 0.00000 0.44599 0.68360 + 0.03367 0.02109 23.50268 0.73765 0.15891 0.00000 0.50140 0.73766 + 0.03387 0.02130 26.79072 0.79638 0.22076 0.00000 0.56143 0.79639 + 0.03408 0.02152 30.52337 0.86644 0.29411 0.00000 0.63284 0.86645 + 0.03426 0.02172 33.96984 0.93402 0.36452 0.00000 0.70160 0.93403 + 0.03444 0.02191 37.47357 1.00533 0.43854 0.00000 0.77403 1.00534 + 0.03459 0.02207 40.37399 1.06624 0.50157 0.00000 0.83582 1.06625 + 0.03490 0.02240 46.91564 1.20930 0.64908 0.00000 0.98072 1.20931 + 0.03517 0.02268 52.75471 1.34739 0.79092 0.13883 1.12036 1.34741 + 0.03547 0.02300 59.66427 1.51821 0.96584 0.32029 1.29288 1.51823 + 0.03579 0.02333 67.26715 1.71440 1.16616 0.52723 1.49077 1.71442 + 0.03608 0.02363 74.51758 1.90898 1.36440 0.73130 1.68687 1.90900 + 0.03638 0.02393 82.15865 2.12148 1.58051 0.95316 1.90086 2.12151 + 0.03663 0.02418 88.73681 2.31023 1.77219 1.14950 2.09083 2.31027 + 0.03693 0.02449 96.98878 2.55429 2.01973 1.40258 2.33632 2.55433 + 0.03720 0.02476 104.52840 2.78403 2.25248 1.64013 2.56731 2.78407 + 0.03745 0.02501 111.63087 3.00616 2.47733 1.86931 2.79056 3.00621 + 0.03777 0.02532 120.88695 3.30368 2.77824 2.17560 3.08948 3.30374 + 0.03808 0.02562 129.82481 3.59930 3.07698 2.47931 3.38639 3.59936 + 0.03837 0.02590 138.39249 3.89013 3.37069 2.77759 3.67841 3.89019 + 0.03866 0.02618 147.13147 4.19410 3.67750 3.08890 3.98355 4.19417 + 0.03894 0.02645 155.84300 4.50436 3.99049 3.40623 4.29494 4.50444 + 0.03922 0.02671 164.22281 4.80950 4.29818 3.71796 4.60113 4.80958 + 0.03948 0.02696 172.22986 5.10705 4.59811 4.02165 4.89967 5.10714 + 0.03975 0.02721 180.37828 5.41586 4.90927 4.33654 5.20945 5.41595 + 0.04001 0.02745 188.48390 5.72894 5.22464 4.65554 5.52347 5.72904 + 0.04026 0.02769 196.26779 6.03506 5.53292 4.96722 5.83049 6.03517 + 0.04051 0.02791 203.69887 6.33234 5.83221 5.26970 6.12859 6.33245 + 0.04075 0.02814 211.25194 6.63940 6.14128 5.58195 6.43648 6.63952 + 0.04100 0.02836 218.76202 6.94970 6.45355 5.89733 6.74760 6.94982 + 0.04123 0.02857 225.97054 7.25212 6.75784 6.20455 7.05079 7.25225 + 0.04146 0.02877 232.84923 7.54491 7.05237 6.50185 7.34430 7.54504 + 0.04169 0.02898 239.84103 7.84670 7.35592 6.80817 7.64681 7.84684 + 0.03383 0.02130 7.85717 0.49100 0.00000 0.00000 0.25856 0.49100 + 0.03403 0.02151 9.88692 0.51438 0.00000 0.00000 0.28322 0.51439 + 0.03433 0.02184 13.30073 0.55917 0.00000 0.00000 0.32993 0.55918 + 0.03455 0.02208 16.05050 0.60006 0.04161 0.00000 0.37224 0.60007 + 0.03480 0.02235 19.21909 0.65109 0.09625 0.00000 0.42477 0.65110 + 0.03501 0.02258 22.18172 0.70205 0.15031 0.00000 0.47701 0.70206 + 0.03522 0.02281 25.22282 0.75725 0.20847 0.00000 0.53343 0.75726 + 0.03545 0.02305 28.66412 0.82289 0.27724 0.00000 0.60037 0.82291 + 0.03565 0.02326 31.83217 0.88606 0.34309 0.00000 0.66464 0.88607 + 0.03584 0.02347 35.04438 0.95255 0.41215 0.00000 0.73219 0.95256 + 0.03600 0.02363 37.69738 1.00922 0.47084 0.00000 0.78970 1.00924 + 0.03633 0.02398 43.66268 1.14197 0.60781 0.00000 0.92419 1.14198 + 0.03663 0.02429 48.96327 1.26967 0.73908 0.12858 1.05337 1.26970 + 0.03696 0.02463 55.21236 1.42715 0.90044 0.29613 1.21246 1.42718 + 0.03730 0.02498 62.06223 1.60740 1.08463 0.48656 1.39433 1.60744 + 0.03762 0.02530 68.57095 1.78563 1.26632 0.67378 1.57399 1.78566 + 0.03794 0.02563 75.40720 1.97970 1.46382 0.87671 1.76948 1.97975 + 0.03821 0.02590 81.27468 2.15164 1.63853 1.05583 1.94256 2.15168 + 0.03854 0.02622 88.61304 2.37338 1.86357 1.28610 2.16566 2.37343 + 0.03884 0.02651 95.29766 2.58158 2.07463 1.50170 2.37504 2.58163 + 0.03911 0.02678 101.57774 2.78242 2.27805 1.70921 2.57695 2.78248 + 0.03946 0.02712 109.73849 3.05077 2.54962 1.98586 2.84663 3.05084 + 0.03979 0.02743 117.59455 3.31672 2.81853 2.25946 3.11380 3.31679 + 0.04011 0.02773 125.10381 3.57773 3.08228 2.52753 3.37594 3.57781 + 0.04043 0.02803 132.74242 3.84993 3.35717 2.80668 3.64925 3.85002 + 0.04074 0.02833 140.33675 4.12715 3.63697 3.09058 3.92754 4.12724 + 0.04104 0.02861 147.62332 4.39921 3.91146 3.36888 4.20060 4.39931 + 0.04133 0.02887 154.56932 4.66401 4.17850 3.63948 4.46632 4.66411 + 0.04162 0.02914 161.62167 4.93830 4.45503 3.91953 4.74153 4.93841 + 0.04191 0.02940 168.62108 5.21587 4.73478 4.20270 5.02001 5.21600 + 0.04219 0.02965 175.32811 5.48681 5.00776 4.47890 5.29178 5.48694 + 0.04245 0.02989 181.71785 5.74947 5.27233 4.74649 5.55523 5.74961 + 0.04272 0.03013 188.19965 6.02035 5.54512 5.02228 5.82690 6.02049 + 0.04299 0.03036 194.63159 6.29365 5.82029 5.30039 6.10097 6.29381 + 0.04325 0.03059 200.79346 6.55962 6.08802 5.57089 6.36766 6.55978 + 0.04350 0.03081 206.66266 6.81673 6.34680 5.83228 6.62546 6.81690 + 0.04375 0.03103 212.61777 7.08139 6.61312 6.10121 6.89081 7.08156 + 0.03829 0.02634 6.91040 0.42350 0.00000 0.00000 0.22337 0.42350 + 0.03854 0.02660 8.60487 0.44405 0.00000 0.00000 0.24500 0.44406 + 0.03892 0.02701 11.40688 0.48272 0.00000 0.00000 0.28529 0.48273 + 0.03921 0.02732 13.62531 0.51747 0.03534 0.00000 0.32124 0.51748 + 0.03953 0.02764 16.14729 0.56029 0.08123 0.00000 0.36532 0.56030 + 0.03980 0.02793 18.47678 0.60256 0.12613 0.00000 0.40868 0.60258 + 0.04008 0.02821 20.84266 0.64790 0.17399 0.00000 0.45506 0.64792 + 0.04037 0.02851 23.49220 0.70132 0.23006 0.00000 0.50957 0.70134 + 0.04063 0.02877 25.90787 0.75226 0.28328 0.00000 0.56145 0.75229 + 0.04088 0.02903 28.33629 0.80548 0.33868 0.00000 0.61557 0.80552 + 0.04108 0.02923 30.32707 0.85054 0.38545 0.00000 0.66133 0.85058 + 0.04152 0.02966 34.75890 0.95514 0.49363 0.00000 0.76741 0.95519 + 0.04191 0.03004 38.63858 1.05469 0.59620 0.10073 0.86819 1.05474 + 0.04234 0.03046 43.15744 1.17617 0.72098 0.23070 0.99104 1.17623 + 0.04280 0.03090 48.04951 1.31375 0.86189 0.37684 1.12998 1.31381 + 0.04322 0.03130 52.64354 1.44840 0.99949 0.51907 1.26585 1.44848 + 0.04365 0.03170 57.41608 1.59367 1.14766 0.67178 1.41231 1.59376 + 0.04401 0.03203 61.47215 1.72129 1.27763 0.80545 1.54090 1.72139 + 0.04446 0.03243 66.49579 1.88453 1.44367 0.97587 1.70529 1.88463 + 0.04485 0.03279 71.02716 2.03653 1.59810 1.13410 1.85829 2.03665 + 0.04522 0.03312 75.24726 2.18210 1.74586 1.28527 2.00476 2.18223 + 0.04569 0.03353 80.68009 2.37509 1.94157 1.48524 2.19887 2.37523 + 0.04614 0.03393 85.85830 2.56477 2.13376 1.68136 2.38958 2.56492 + 0.04656 0.03429 90.76248 2.74953 2.32084 1.87206 2.57529 2.74969 + 0.04700 0.03466 95.70743 2.94081 2.51441 2.06918 2.76752 2.94099 + 0.04742 0.03503 100.58136 3.13426 2.71006 2.26825 2.96187 3.13445 + 0.04783 0.03537 105.21941 3.32285 2.90070 2.46209 3.15130 3.32305 + 0.04822 0.03570 109.60696 3.50527 3.08504 2.64940 3.33451 3.50549 + 0.04862 0.03602 114.02852 3.69311 3.27477 2.84208 3.52313 3.69334 + 0.04901 0.03635 118.38481 3.88209 3.46560 3.03577 3.71288 3.88234 + 0.04939 0.03665 122.52988 4.06553 3.65078 3.22364 3.89703 4.06579 + 0.04975 0.03695 126.45242 4.24244 3.82931 3.40468 4.07460 4.24271 + 0.05012 0.03724 130.40602 4.42397 4.01246 3.59035 4.25680 4.42425 + 0.05048 0.03753 134.30374 4.60620 4.19627 3.77662 4.43968 4.60650 + 0.05084 0.03781 138.01474 4.78268 4.37426 3.95692 4.61679 4.78300 + 0.05117 0.03808 141.52861 4.95253 4.54552 4.13036 4.78721 4.95286 + 0.05152 0.03835 145.07338 5.12659 4.72100 4.30802 4.96185 5.12693 + 0.04376 0.03254 6.08014 0.36650 0.00000 0.00000 0.19363 0.36651 + 0.04409 0.03287 7.48133 0.38459 0.00000 0.00000 0.21263 0.38460 + 0.04460 0.03337 9.75620 0.41795 0.00000 0.00000 0.24735 0.41797 + 0.04499 0.03374 11.52358 0.44739 0.02993 0.00000 0.27781 0.44742 + 0.04541 0.03415 13.50343 0.48315 0.06828 0.00000 0.31463 0.48319 + 0.04578 0.03450 15.30807 0.51802 0.10537 0.00000 0.35041 0.51806 + 0.04614 0.03485 17.11977 0.55501 0.14449 0.00000 0.38828 0.55506 + 0.04654 0.03522 19.12581 0.59814 0.18986 0.00000 0.43233 0.59820 + 0.04689 0.03554 20.93558 0.63888 0.23253 0.00000 0.47386 0.63895 + 0.04723 0.03586 22.73793 0.68108 0.27657 0.00000 0.51681 0.68115 + 0.04751 0.03611 24.20349 0.71655 0.31348 0.00000 0.55288 0.71663 + 0.04811 0.03665 27.43069 0.79810 0.39806 0.00000 0.63567 0.79819 + 0.04863 0.03711 30.20875 0.87479 0.47731 0.07808 0.71341 0.87490 + 0.04923 0.03763 33.40152 0.96734 0.57265 0.17775 0.80710 0.96747 + 0.04986 0.03817 36.81078 1.07094 0.67907 0.28854 0.91186 1.07109 + 0.05044 0.03866 39.97086 1.17124 0.78186 0.39519 1.01318 1.17140 + 0.05103 0.03916 43.21396 1.27835 0.89143 0.50855 1.12130 1.27854 + 0.05153 0.03957 45.94011 1.37161 0.98668 0.60688 1.21538 1.37181 + 0.05214 0.04007 49.28002 1.48983 1.10727 0.73112 1.33457 1.49005 + 0.05269 0.04051 52.25968 1.59893 1.21843 0.84545 1.44452 1.59917 + 0.05320 0.04091 55.00756 1.70260 1.32395 0.95382 1.54894 1.70285 + 0.05385 0.04142 58.50802 1.83887 1.46253 1.09595 1.68616 1.83915 + 0.05447 0.04191 61.80709 1.97162 1.59742 1.23411 1.81979 1.97193 + 0.05506 0.04236 64.89905 2.09986 1.72763 1.36734 1.94884 2.10019 + 0.05566 0.04282 67.98560 2.23160 1.86131 1.50398 2.08138 2.23196 + 0.05626 0.04326 70.99787 2.36382 1.99540 1.64092 2.21436 2.36420 + 0.05683 0.04369 73.83739 2.49179 2.12511 1.77330 2.34305 2.49219 + 0.05737 0.04409 76.49996 2.61474 2.24970 1.90036 2.46667 2.61518 + 0.05792 0.04449 79.16006 2.74053 2.37710 2.03022 2.59312 2.74099 + 0.05846 0.04488 81.75870 2.86629 2.50443 2.15993 2.71953 2.86677 + 0.05899 0.04526 84.21115 2.98762 2.62724 2.28498 2.84146 2.98812 + 0.05949 0.04562 86.51376 3.10396 2.74496 2.40480 2.95837 3.10448 + 0.06000 0.04598 88.81721 3.22269 2.86507 2.52701 3.07767 3.22324 + 0.06051 0.04634 91.07071 3.34122 2.98496 2.64894 3.19675 3.34179 + 0.06100 0.04668 93.20055 3.45542 3.10044 2.76635 3.31148 3.45602 + 0.06146 0.04701 95.20316 3.56477 3.21100 2.87873 3.42133 3.56540 + 0.06194 0.04734 97.20946 3.67630 3.32374 2.99329 3.53336 3.67695 + 0.04762 0.03680 5.64480 0.33747 0.00000 0.00000 0.17848 0.33749 + 0.04801 0.03717 6.89160 0.35428 0.00000 0.00000 0.19611 0.35431 + 0.04863 0.03774 8.89277 0.38487 0.00000 0.00000 0.22794 0.38491 + 0.04909 0.03816 10.42907 0.41156 0.02711 0.00000 0.25553 0.41161 + 0.04960 0.03862 12.13426 0.44367 0.06157 0.00000 0.28861 0.44374 + 0.05005 0.03902 13.67563 0.47473 0.09465 0.00000 0.32049 0.47480 + 0.05049 0.03941 15.21181 0.50746 0.12930 0.00000 0.35401 0.50754 + 0.05097 0.03983 16.90067 0.54536 0.16923 0.00000 0.39274 0.54545 + 0.05140 0.04020 18.41419 0.58094 0.20656 0.00000 0.42904 0.58105 + 0.05182 0.04056 19.91263 0.61760 0.24489 0.00000 0.46639 0.61772 + 0.05215 0.04084 21.12481 0.64828 0.27687 0.00000 0.49760 0.64841 + 0.05288 0.04145 23.77573 0.71837 0.34971 0.00000 0.56881 0.71852 + 0.05352 0.04198 26.03292 0.78380 0.41745 0.06690 0.63519 0.78397 + 0.05425 0.04257 28.60500 0.86221 0.49839 0.15172 0.71464 0.86241 + 0.05502 0.04318 31.32749 0.94934 0.58808 0.24533 0.80282 0.94957 + 0.05573 0.04373 33.83001 1.03312 0.67412 0.33484 0.88753 1.03337 + 0.05646 0.04429 36.37823 1.12203 0.76526 0.42938 0.97734 1.12231 + 0.05707 0.04476 38.50518 1.19899 0.84403 0.51092 1.05505 1.19929 + 0.05782 0.04532 41.09273 1.29602 0.94322 0.61339 1.15296 1.29635 + 0.05849 0.04582 43.38479 1.38506 1.03413 0.70715 1.24278 1.38543 + 0.05911 0.04628 45.48511 1.46925 1.12001 0.79558 1.32766 1.46964 + 0.05991 0.04686 48.14236 1.57934 1.23220 0.91096 1.43861 1.57976 + 0.06067 0.04741 50.62837 1.68598 1.34079 1.02249 1.54605 1.68644 + 0.06140 0.04792 52.94235 1.78848 1.44508 1.12949 1.64928 1.78897 + 0.06213 0.04843 55.23705 1.89325 1.55162 1.23869 1.75478 1.89379 + 0.06285 0.04894 57.46194 1.99791 1.65798 1.34761 1.86014 1.99847 + 0.06355 0.04941 59.54611 2.09874 1.76041 1.45243 1.96162 2.09934 + 0.06421 0.04986 61.48890 2.19521 1.85837 1.55262 2.05871 2.19585 + 0.06488 0.05032 63.41870 2.29351 1.95814 1.65459 2.15761 2.29418 + 0.06555 0.05076 65.29313 2.39139 2.05746 1.75605 2.25608 2.39209 + 0.06619 0.05119 67.05235 2.48546 2.15289 1.85350 2.35071 2.48620 + 0.06680 0.05159 68.69530 2.57534 2.24403 1.94653 2.44111 2.57611 + 0.06742 0.05200 70.33045 2.66676 2.33671 2.04109 2.53305 2.66756 + 0.06804 0.05240 71.92173 2.75770 2.42890 2.13511 2.62450 2.75854 + 0.06863 0.05279 73.41812 2.84503 2.51740 2.22535 2.71231 2.84590 + 0.06920 0.05315 74.81830 2.92840 2.60188 2.31145 2.79613 2.92930 + 0.06978 0.05352 76.21436 3.01316 2.68775 2.39896 2.88136 3.01410 + 0.05080 0.04016 5.35747 0.31859 0.00000 0.00000 0.16863 0.31863 + 0.05126 0.04057 6.50149 0.33456 0.00000 0.00000 0.18536 0.33461 + 0.05196 0.04119 8.32214 0.36332 0.00000 0.00000 0.21527 0.36339 + 0.05251 0.04165 9.70741 0.38819 0.02526 0.00000 0.24098 0.38827 + 0.05309 0.04216 11.23435 0.41791 0.05716 0.00000 0.27160 0.41800 + 0.05362 0.04260 12.60601 0.44647 0.08760 0.00000 0.30093 0.44658 + 0.05413 0.04302 13.96557 0.47641 0.11934 0.00000 0.33160 0.47653 + 0.05469 0.04348 15.45225 0.51091 0.15573 0.00000 0.36688 0.51105 + 0.05518 0.04388 16.77789 0.54315 0.18960 0.00000 0.39979 0.54331 + 0.05567 0.04427 18.08446 0.57624 0.22424 0.00000 0.43351 0.57641 + 0.05606 0.04459 19.13730 0.60383 0.25305 0.00000 0.46160 0.60401 + 0.05691 0.04525 21.42775 0.66657 0.31835 0.00000 0.52539 0.66679 + 0.05765 0.04583 23.36152 0.72482 0.37876 0.05976 0.58452 0.72506 + 0.05850 0.04647 25.55063 0.79425 0.45055 0.13515 0.65492 0.79453 + 0.05940 0.04714 27.85213 0.87097 0.52967 0.21790 0.73263 0.87129 + 0.06022 0.04775 29.95404 0.94437 0.60519 0.29662 0.80690 0.94473 + 0.06106 0.04836 32.08136 1.02189 0.68479 0.37938 0.88527 1.02228 + 0.06177 0.04887 33.84721 1.08871 0.75331 0.45046 0.95278 1.08913 + 0.06264 0.04949 35.98368 1.17259 0.83921 0.53940 1.03749 1.17305 + 0.06342 0.05003 37.86559 1.24925 0.91762 0.62045 1.11487 1.24975 + 0.06415 0.05053 39.58141 1.32145 0.99141 0.69660 1.18772 1.32199 + 0.06507 0.05116 41.74042 1.41549 1.08742 0.79557 1.28257 1.41607 + 0.06596 0.05176 43.74849 1.50620 1.17996 0.89083 1.37403 1.50683 + 0.06680 0.05232 45.60734 1.59304 1.26848 0.98186 1.46157 1.59371 + 0.06765 0.05288 47.44094 1.68149 1.35859 1.07443 1.55069 1.68220 + 0.06849 0.05343 49.20937 1.76950 1.44820 1.16643 1.63936 1.77026 + 0.06929 0.05395 50.85752 1.85401 1.53421 1.25465 1.72449 1.85481 + 0.07006 0.05444 52.38652 1.93460 1.61621 1.33871 1.80566 1.93545 + 0.07083 0.05493 53.89808 2.01646 1.69946 1.42400 1.88809 2.01736 + 0.07160 0.05542 55.35936 2.09773 1.78208 1.50861 1.96992 2.09866 + 0.07234 0.05588 56.72456 2.17561 1.86124 1.58963 2.04832 2.17659 + 0.07304 0.05632 57.99386 2.24981 1.93663 1.66677 2.12301 2.25083 + 0.07376 0.05676 59.25174 2.32507 2.01309 1.74497 2.19877 2.32613 + 0.07447 0.05720 60.47046 2.39974 2.08894 1.82252 2.27392 2.40085 + 0.07515 0.05762 61.61163 2.47127 2.16157 1.89676 2.34591 2.47242 + 0.07581 0.05801 62.67504 2.53938 2.23073 1.96744 2.41445 2.54057 + 0.07647 0.05842 63.73100 2.60848 2.30087 2.03910 2.48398 2.60970 + 0.05350 0.04296 5.14679 0.30493 0.00000 0.00000 0.16150 0.30498 + 0.05401 0.04339 6.21495 0.32029 0.00000 0.00000 0.17757 0.32035 + 0.05480 0.04406 7.90343 0.34771 0.00000 0.00000 0.20608 0.34779 + 0.05541 0.04456 9.17892 0.37124 0.02390 0.00000 0.23042 0.37135 + 0.05607 0.04510 10.57714 0.39921 0.05394 0.00000 0.25923 0.39933 + 0.05665 0.04557 11.82692 0.42596 0.08246 0.00000 0.28671 0.42610 + 0.05723 0.04603 13.06028 0.45387 0.11208 0.00000 0.31532 0.45404 + 0.05786 0.04652 14.40319 0.48591 0.14591 0.00000 0.34809 0.48610 + 0.05841 0.04695 15.59585 0.51575 0.17728 0.00000 0.37856 0.51595 + 0.05896 0.04737 16.76718 0.54626 0.20927 0.00000 0.40967 0.54648 + 0.05940 0.04770 17.70811 0.57163 0.23580 0.00000 0.43552 0.57187 + 0.06035 0.04842 19.74658 0.62913 0.29573 0.00000 0.49401 0.62941 + 0.06119 0.04903 21.45580 0.68226 0.35091 0.05467 0.54798 0.68257 + 0.06215 0.04973 23.38058 0.74533 0.41622 0.12337 0.61197 0.74568 + 0.06315 0.05044 25.39329 0.81472 0.48789 0.19846 0.68230 0.81512 + 0.06408 0.05110 27.22200 0.88084 0.55601 0.26961 0.74924 0.88128 + 0.06503 0.05175 29.06385 0.95039 0.62756 0.34413 0.81961 0.95088 + 0.06583 0.05230 30.58602 1.01015 0.68893 0.40791 0.88002 1.01068 + 0.06681 0.05295 32.41959 1.08491 0.76561 0.48746 0.95558 1.08549 + 0.06768 0.05354 34.02746 1.15301 0.83538 0.55971 1.02436 1.15364 + 0.06849 0.05407 35.48753 1.21696 0.90084 0.62741 1.08893 1.21763 + 0.06954 0.05475 37.31675 1.29999 0.98575 0.71510 1.17273 1.30071 + 0.07053 0.05539 39.01009 1.37981 1.06732 0.79924 1.25327 1.38059 + 0.07147 0.05599 40.57071 1.45600 1.14511 0.87939 1.33012 1.45683 + 0.07242 0.05659 42.10354 1.53336 1.22406 0.96067 1.40813 1.53425 + 0.07336 0.05717 43.57562 1.61012 1.30236 1.04121 1.48553 1.61107 + 0.07426 0.05773 44.94193 1.68363 1.37730 1.11824 1.55963 1.68463 + 0.07511 0.05825 46.20454 1.75356 1.44857 1.19145 1.63011 1.75461 + 0.07598 0.05878 47.44796 1.82441 1.52076 1.26556 1.70151 1.82551 + 0.07684 0.05930 48.64542 1.89458 1.59222 1.33890 1.77222 1.89573 + 0.07766 0.05979 49.75996 1.96168 1.66054 1.40898 1.83981 1.96288 + 0.07845 0.06026 50.79247 2.02546 1.72547 1.47555 1.90406 2.02671 + 0.07925 0.06073 51.81208 2.09002 1.79118 1.54290 1.96910 2.09132 + 0.08004 0.06120 52.79638 2.15394 1.85623 1.60956 2.03349 2.15529 + 0.08080 0.06164 53.71482 2.21505 1.91840 1.67325 2.09503 2.21645 + 0.08153 0.06206 54.56775 2.27313 1.97748 1.73376 2.15353 2.27458 + 0.08227 0.06249 55.41185 2.33194 2.03730 1.79501 2.21275 2.33343 + 0.06413 0.05300 4.55955 0.26724 0.00000 0.00000 0.14185 0.26740 + 0.06488 0.05354 5.41033 0.28085 0.00000 0.00000 0.15607 0.28104 + 0.06606 0.05438 6.72546 0.30447 0.00000 0.00000 0.18060 0.30471 + 0.06696 0.05500 7.69509 0.32423 0.02008 0.00000 0.20105 0.32451 + 0.06794 0.05568 8.73853 0.34727 0.04487 0.00000 0.22480 0.34759 + 0.06880 0.05627 9.65564 0.36892 0.06804 0.00000 0.24708 0.36929 + 0.06966 0.05684 10.54742 0.39120 0.09177 0.00000 0.26996 0.39161 + 0.07059 0.05746 11.50437 0.41642 0.11852 0.00000 0.29580 0.41688 + 0.07141 0.05800 12.34271 0.43961 0.14303 0.00000 0.31953 0.44011 + 0.07222 0.05853 13.15604 0.46307 0.16775 0.00000 0.34351 0.46361 + 0.07287 0.05894 13.80244 0.48239 0.18807 0.00000 0.36323 0.48296 + 0.07427 0.05984 15.18282 0.52562 0.23339 0.00000 0.40733 0.52627 + 0.07551 0.06061 16.31186 0.56498 0.27451 0.04098 0.44741 0.56570 + 0.07691 0.06148 17.55995 0.61102 0.32250 0.09178 0.49425 0.61182 + 0.07839 0.06237 18.84030 0.66093 0.37438 0.14652 0.54498 0.66183 + 0.07975 0.06319 19.98235 0.70783 0.42303 0.19768 0.59259 0.70880 + 0.08114 0.06400 21.11264 0.75653 0.47346 0.25059 0.64201 0.75759 + 0.08230 0.06468 22.03193 0.79789 0.51623 0.29538 0.68395 0.79903 + 0.08372 0.06550 23.12161 0.84905 0.56908 0.35061 0.73581 0.85028 + 0.08499 0.06622 24.06148 0.89512 0.61662 0.40022 0.78248 0.89643 + 0.08616 0.06688 24.90225 0.93794 0.66077 0.44624 0.82586 0.93934 + 0.08767 0.06772 25.93850 0.99294 0.71744 0.50523 0.88155 0.99444 + 0.08909 0.06851 26.88083 1.04522 0.77126 0.56119 0.93446 1.04681 + 0.09044 0.06925 27.73473 1.09457 0.82205 0.61395 0.98441 1.09626 + 0.09180 0.06998 28.55964 1.14419 0.87308 0.66692 1.03461 1.14598 + 0.09313 0.07070 29.33875 1.19293 0.92319 0.71891 1.08392 1.19482 + 0.09441 0.07138 30.05019 1.23916 0.97071 0.76817 1.13069 1.24114 + 0.09562 0.07202 30.69747 1.28276 1.01551 0.81459 1.17478 1.28483 + 0.09684 0.07266 31.32505 1.32656 1.06050 0.86120 1.21908 1.32871 + 0.09805 0.07329 31.92002 1.36956 1.10468 0.90694 1.26257 1.37181 + 0.09920 0.07389 32.46526 1.41035 1.14657 0.95031 1.30382 1.41269 + 0.10030 0.07446 32.96275 1.44884 1.18609 0.99120 1.34273 1.45125 + 0.10141 0.07503 33.44673 1.48750 1.22580 1.03229 1.38184 1.49000 + 0.10251 0.07559 33.90671 1.52550 1.26482 1.07265 1.42026 1.52809 + 0.10357 0.07612 34.32939 1.56157 1.30186 1.11096 1.45673 1.56423 + 0.10457 0.07663 34.71605 1.59562 1.33682 1.14712 1.49116 1.59836 + 0.10559 0.07714 35.09295 1.62987 1.37199 1.18348 1.52580 1.63269 + 0.07974 0.06551 4.07564 0.23595 0.00000 0.00000 0.12557 0.23644 + 0.08090 0.06620 4.73353 0.24801 0.00000 0.00000 0.13817 0.24857 + 0.08269 0.06726 5.72582 0.26826 0.00000 0.00000 0.15923 0.26893 + 0.08406 0.06806 6.43721 0.28472 0.01677 0.00000 0.17628 0.28548 + 0.08555 0.06892 7.18686 0.30347 0.03707 0.00000 0.19567 0.30433 + 0.08687 0.06967 7.83327 0.32075 0.05569 0.00000 0.21351 0.32170 + 0.08817 0.07040 8.45126 0.33824 0.07446 0.00000 0.23152 0.33927 + 0.08957 0.07119 9.10331 0.35772 0.09529 0.00000 0.25156 0.35885 + 0.09081 0.07187 9.66552 0.37537 0.11412 0.00000 0.26970 0.37659 + 0.09203 0.07254 10.20319 0.39300 0.13287 0.00000 0.28780 0.39430 + 0.09300 0.07307 10.62513 0.40736 0.14812 0.00000 0.30253 0.40873 + 0.09511 0.07420 11.51093 0.43903 0.18168 0.00000 0.33498 0.44057 + 0.09695 0.07518 12.21249 0.46736 0.21161 0.03007 0.36398 0.46903 + 0.09904 0.07627 12.97038 0.49996 0.24597 0.06680 0.39731 0.50179 + 0.10122 0.07740 13.72946 0.53470 0.28251 0.10574 0.43280 0.53670 + 0.10322 0.07841 14.39085 0.56682 0.31623 0.14157 0.46559 0.56898 + 0.10524 0.07944 15.03082 0.59968 0.35068 0.17811 0.49911 0.60200 + 0.10693 0.08028 15.54052 0.62721 0.37952 0.20864 0.52719 0.62967 + 0.10899 0.08130 16.13189 0.66082 0.41469 0.24582 0.56145 0.66344 + 0.11082 0.08219 16.63064 0.69068 0.44592 0.27880 0.59189 0.69346 + 0.11250 0.08301 17.06766 0.71811 0.47460 0.30904 0.61985 0.72103 + 0.11465 0.08404 17.59405 0.75289 0.51095 0.34735 0.65529 0.75600 + 0.11667 0.08501 18.06062 0.78551 0.54502 0.38323 0.68852 0.78878 + 0.11857 0.08591 18.47299 0.81592 0.57678 0.41666 0.71950 0.81935 + 0.12048 0.08680 18.86153 0.84612 0.60833 0.44984 0.75027 0.84972 + 0.12235 0.08767 19.21914 0.87544 0.63895 0.48204 0.78014 0.87920 + 0.12412 0.08849 19.53731 0.90294 0.66768 0.51224 0.80816 0.90686 + 0.12580 0.08926 19.81951 0.92859 0.69448 0.54042 0.83430 0.93266 + 0.12748 0.09003 20.08602 0.95410 0.72114 0.56844 0.86029 0.95831 + 0.12914 0.09078 20.33187 0.97889 0.74706 0.59568 0.88556 0.98325 + 0.13072 0.09150 20.55100 1.00218 0.77141 0.62127 0.90930 1.00668 + 0.13221 0.09217 20.74536 1.02394 0.79417 0.64520 0.93148 1.02857 + 0.13372 0.09284 20.92911 1.04561 0.81685 0.66903 0.95358 1.05037 + 0.13521 0.09350 21.09838 1.06670 0.83894 0.69226 0.97510 1.07160 + 0.13663 0.09413 21.24908 1.08655 0.85973 0.71412 0.99535 1.09158 + 0.13798 0.09472 21.38254 1.10513 0.87920 0.73460 1.01431 1.11028 + 0.13934 0.09532 21.50827 1.12367 0.89863 0.75505 1.03322 1.12894 + 0.09264 0.07435 3.84238 0.22006 0.00000 0.00000 0.11736 0.22103 + 0.09413 0.07516 4.39685 0.23125 0.00000 0.00000 0.12907 0.23233 + 0.09646 0.07640 5.22013 0.24964 0.00000 0.00000 0.14823 0.25090 + 0.09822 0.07733 5.79924 0.26431 0.01503 0.00000 0.16348 0.26570 + 0.10014 0.07833 6.40108 0.28077 0.03297 0.00000 0.18056 0.28231 + 0.10184 0.07920 6.91346 0.29575 0.04922 0.00000 0.19607 0.29742 + 0.10350 0.08005 7.39773 0.31073 0.06544 0.00000 0.21157 0.31254 + 0.10529 0.08096 7.90289 0.32724 0.08326 0.00000 0.22863 0.32920 + 0.10687 0.08176 8.33369 0.34206 0.09922 0.00000 0.24392 0.34415 + 0.10842 0.08253 8.74162 0.35673 0.11499 0.00000 0.25906 0.35895 + 0.10966 0.08314 9.05894 0.36860 0.12772 0.00000 0.27129 0.37092 + 0.11232 0.08445 9.71711 0.39452 0.15548 0.00000 0.29798 0.39708 + 0.11464 0.08557 10.22553 0.41743 0.17995 0.02477 0.32156 0.42019 + 0.11726 0.08682 10.76542 0.44351 0.20776 0.05473 0.34836 0.44649 + 0.11999 0.08811 11.29647 0.47097 0.23699 0.08615 0.37658 0.47420 + 0.12247 0.08927 11.75089 0.49609 0.26370 0.11478 0.40236 0.49954 + 0.12498 0.09043 12.18284 0.52152 0.29071 0.14369 0.42847 0.52521 + 0.12706 0.09139 12.52111 0.54264 0.31313 0.16765 0.45014 0.54651 + 0.12959 0.09254 12.90670 0.56819 0.34024 0.19659 0.47636 0.57230 + 0.13183 0.09355 13.22581 0.59068 0.36410 0.22204 0.49943 0.59500 + 0.13388 0.09446 13.50045 0.61117 0.38584 0.24521 0.52046 0.61568 + 0.13649 0.09562 13.82454 0.63693 0.41317 0.27433 0.54689 0.64168 + 0.13893 0.09670 14.10509 0.66085 0.43856 0.30136 0.57144 0.66584 + 0.14122 0.09770 14.34722 0.68296 0.46203 0.32635 0.59413 0.68817 + 0.14351 0.09869 14.56976 0.70473 0.48516 0.35097 0.61649 0.71016 + 0.14575 0.09965 14.76917 0.72569 0.50744 0.37469 0.63801 0.73133 + 0.14786 0.10055 14.94168 0.74519 0.52818 0.39678 0.65804 0.75103 + 0.14984 0.10140 15.09034 0.76324 0.54740 0.41725 0.67660 0.76927 + 0.15184 0.10224 15.22641 0.78106 0.56638 0.43747 0.69491 0.78727 + 0.15379 0.10306 15.34771 0.79824 0.58471 0.45700 0.71259 0.80465 + 0.15564 0.10383 15.45190 0.81427 0.60182 0.47524 0.72908 0.82085 + 0.15739 0.10456 15.54071 0.82914 0.61771 0.49219 0.74439 0.83589 + 0.15915 0.10528 15.62112 0.84385 0.63344 0.50898 0.75954 0.85076 + 0.16088 0.10600 15.69156 0.85807 0.64867 0.52525 0.77419 0.86515 + 0.16253 0.10667 15.75087 0.87136 0.66292 0.54048 0.78790 0.87860 + 0.16409 0.10730 15.80023 0.88372 0.67619 0.55467 0.80065 0.89111 + 0.16566 0.10794 15.84351 0.89597 0.68936 0.56876 0.81330 0.90351 + 0.10429 0.08154 3.69957 0.20962 0.00000 0.00000 0.11201 0.21117 + 0.10609 0.08245 4.18419 0.22018 0.00000 0.00000 0.12308 0.22188 + 0.10888 0.08383 4.89517 0.23725 0.00000 0.00000 0.14094 0.23920 + 0.11100 0.08488 5.38772 0.25068 0.01385 0.00000 0.15494 0.25281 + 0.11329 0.08599 5.89404 0.26557 0.03021 0.00000 0.17046 0.26791 + 0.11532 0.08697 6.32076 0.27898 0.04490 0.00000 0.18441 0.28150 + 0.11729 0.08792 6.72041 0.29229 0.05943 0.00000 0.19824 0.29499 + 0.11942 0.08893 7.13347 0.30683 0.07528 0.00000 0.21334 0.30973 + 0.12130 0.08982 7.48261 0.31978 0.08937 0.00000 0.22677 0.32286 + 0.12313 0.09067 7.81053 0.33253 0.10321 0.00000 0.23998 0.33577 + 0.12459 0.09135 8.06376 0.34277 0.11432 0.00000 0.25060 0.34615 + 0.12772 0.09279 8.58375 0.36498 0.13838 0.00000 0.27360 0.36866 + 0.13045 0.09404 8.97644 0.38443 0.15941 0.02143 0.29372 0.38837 + 0.13350 0.09541 9.38716 0.40637 0.18309 0.04714 0.31641 0.41061 + 0.13667 0.09683 9.78467 0.42927 0.20779 0.07388 0.34008 0.43381 + 0.13955 0.09810 10.11926 0.45002 0.23016 0.09806 0.36153 0.45486 + 0.14245 0.09936 10.43206 0.47088 0.25262 0.12230 0.38308 0.47600 + 0.14484 0.10040 10.67307 0.48806 0.27113 0.14226 0.40084 0.49342 + 0.14774 0.10165 10.94309 0.50870 0.29336 0.16622 0.42217 0.51435 + 0.15030 0.10274 11.16231 0.52674 0.31280 0.18715 0.44081 0.53264 + 0.15264 0.10373 11.34748 0.54307 0.33040 0.20609 0.45769 0.54920 + 0.15559 0.10497 11.56124 0.56344 0.35238 0.22975 0.47875 0.56987 + 0.15836 0.10612 11.74144 0.58221 0.37265 0.25157 0.49818 0.58892 + 0.16094 0.10719 11.89268 0.59943 0.39128 0.27162 0.51601 0.60641 + 0.16350 0.10824 12.02751 0.61627 0.40951 0.29125 0.53345 0.62350 + 0.16601 0.10926 12.14422 0.63237 0.42696 0.31005 0.55014 0.63985 + 0.16836 0.11021 12.24135 0.64724 0.44311 0.32746 0.56556 0.65496 + 0.17057 0.11110 12.32156 0.66092 0.45798 0.34351 0.57976 0.66886 + 0.17278 0.11198 12.39145 0.67433 0.47259 0.35928 0.59369 0.68249 + 0.17494 0.11284 12.45019 0.68719 0.48662 0.37444 0.60706 0.69557 + 0.17698 0.11365 12.49723 0.69910 0.49965 0.38853 0.61945 0.70768 + 0.17890 0.11441 12.53406 0.71008 0.51168 0.40156 0.63089 0.71886 + 0.18083 0.11516 12.56409 0.72088 0.52354 0.41441 0.64215 0.72985 + 0.18272 0.11590 12.58682 0.73126 0.53496 0.42679 0.65298 0.74042 + 0.18452 0.11659 12.60248 0.74091 0.54559 0.43834 0.66305 0.75024 + 0.18621 0.11724 12.61208 0.74982 0.55544 0.44905 0.67237 0.75932 + 0.18792 0.11790 12.61676 0.75860 0.56516 0.45964 0.68157 0.76828 + 0.11516 0.08775 3.60145 0.20186 0.00000 0.00000 0.10808 0.20409 + 0.11724 0.08875 4.03363 0.21191 0.00000 0.00000 0.11865 0.21434 + 0.12046 0.09027 4.66142 0.22795 0.00000 0.00000 0.13549 0.23069 + 0.12290 0.09141 5.09060 0.24041 0.01295 0.00000 0.14854 0.24339 + 0.12552 0.09263 5.52769 0.25411 0.02813 0.00000 0.16287 0.25734 + 0.12784 0.09370 5.89289 0.26634 0.04165 0.00000 0.17566 0.26980 + 0.13010 0.09473 6.23224 0.27839 0.05495 0.00000 0.18825 0.28207 + 0.13252 0.09583 6.58015 0.29147 0.06935 0.00000 0.20190 0.29539 + 0.13465 0.09679 6.87195 0.30304 0.08208 0.00000 0.21397 0.30718 + 0.13673 0.09772 7.14403 0.31436 0.09452 0.00000 0.22577 0.31871 + 0.13838 0.09845 7.35277 0.32342 0.10446 0.00000 0.23521 0.32794 + 0.14192 0.10001 7.77754 0.34293 0.12586 0.00000 0.25554 0.34782 + 0.14499 0.10135 8.09133 0.35989 0.14443 0.01904 0.27320 0.36509 + 0.14841 0.10283 8.41481 0.37887 0.16520 0.04174 0.29296 0.38443 + 0.15196 0.10434 8.72301 0.39853 0.18670 0.06520 0.31342 0.40445 + 0.15516 0.10570 8.97820 0.41622 0.20604 0.08627 0.33183 0.42248 + 0.15838 0.10705 9.21274 0.43387 0.22534 0.10727 0.35020 0.44046 + 0.16103 0.10815 9.39042 0.44832 0.24115 0.12447 0.36524 0.45519 + 0.16423 0.10947 9.58579 0.46556 0.26003 0.14499 0.38321 0.47277 + 0.16704 0.11062 9.74106 0.48054 0.27645 0.16283 0.39881 0.48804 + 0.16960 0.11166 9.86940 0.49401 0.29123 0.17890 0.41286 0.50179 + 0.17283 0.11296 10.01368 0.51072 0.30959 0.19886 0.43029 0.51883 + 0.17584 0.11416 10.13130 0.52601 0.32643 0.21717 0.44626 0.53444 + 0.17865 0.11527 10.22639 0.53994 0.34180 0.23391 0.46082 0.54866 + 0.18143 0.11637 10.30753 0.55348 0.35677 0.25021 0.47499 0.56249 + 0.18413 0.11742 10.37408 0.56634 0.37102 0.26575 0.48845 0.57563 + 0.18666 0.11840 10.42593 0.57814 0.38414 0.28007 0.50083 0.58769 + 0.18903 0.11932 10.46541 0.58893 0.39617 0.29321 0.51216 0.59873 + 0.19139 0.12022 10.49626 0.59945 0.40792 0.30607 0.52322 0.60949 + 0.19370 0.12110 10.51846 0.60947 0.41915 0.31838 0.53377 0.61975 + 0.19587 0.12192 10.53243 0.61870 0.42952 0.32976 0.54350 0.62920 + 0.19791 0.12269 10.53949 0.62716 0.43906 0.34025 0.55243 0.63787 + 0.19996 0.12345 10.54092 0.63543 0.44842 0.35055 0.56118 0.64635 + 0.20196 0.12420 10.53687 0.64334 0.45739 0.36044 0.56955 0.65446 + 0.20385 0.12490 10.52826 0.65063 0.46571 0.36963 0.57729 0.66195 + 0.20564 0.12555 10.51599 0.65734 0.47337 0.37811 0.58442 0.66883 + 0.20743 0.12621 10.49969 0.66391 0.48092 0.38647 0.59141 0.67559 + 0.13544 0.09844 3.47242 0.19046 0.00000 0.00000 0.10242 0.19430 + 0.13801 0.09958 3.82799 0.19968 0.00000 0.00000 0.11219 0.20380 + 0.14197 0.10133 4.33605 0.21410 0.00000 0.00000 0.12746 0.21865 + 0.14496 0.10264 4.67532 0.22508 0.01163 0.00000 0.13909 0.22997 + 0.14817 0.10404 5.01532 0.23698 0.02507 0.00000 0.15166 0.24222 + 0.15098 0.10525 5.29515 0.24746 0.03690 0.00000 0.16274 0.25302 + 0.15371 0.10642 5.55158 0.25766 0.04841 0.00000 0.17352 0.26352 + 0.15664 0.10767 5.81073 0.26861 0.06075 0.00000 0.18508 0.27480 + 0.15920 0.10875 6.02503 0.27820 0.07155 0.00000 0.19521 0.28467 + 0.16169 0.10979 6.22221 0.28749 0.08202 0.00000 0.20502 0.29424 + 0.16366 0.11062 6.37167 0.29486 0.09033 0.00000 0.21281 0.30184 + 0.16787 0.11236 6.67067 0.31058 0.10803 0.00000 0.22941 0.31803 + 0.17149 0.11385 6.88158 0.32406 0.12321 0.01576 0.24364 0.33191 + 0.17550 0.11548 7.09255 0.33895 0.13999 0.03436 0.25937 0.34726 + 0.17964 0.11714 7.28694 0.35418 0.15717 0.05336 0.27546 0.36295 + 0.18335 0.11862 7.44210 0.36770 0.17244 0.07025 0.28977 0.37689 + 0.18705 0.12008 7.57916 0.38103 0.18752 0.08692 0.30387 0.39063 + 0.19009 0.12126 7.67874 0.39183 0.19976 0.10045 0.31531 0.40177 + 0.19373 0.12268 7.78301 0.40457 0.21423 0.11646 0.32882 0.41491 + 0.19691 0.12390 7.86107 0.41550 0.22669 0.13025 0.34043 0.42620 + 0.19980 0.12500 7.92150 0.42524 0.23782 0.14257 0.35079 0.43625 + 0.20341 0.12636 7.98366 0.43717 0.25150 0.15775 0.36350 0.44858 + 0.20677 0.12762 8.02824 0.44796 0.26392 0.17154 0.37501 0.45973 + 0.20987 0.12877 8.05858 0.45767 0.27515 0.18404 0.38539 0.46977 + 0.21293 0.12990 8.07856 0.46698 0.28598 0.19612 0.39538 0.47942 + 0.21588 0.13098 8.08868 0.47573 0.29620 0.20753 0.40478 0.48848 + 0.21864 0.13198 8.09023 0.48366 0.30552 0.21796 0.41332 0.49670 + 0.22121 0.13290 8.08503 0.49083 0.31398 0.22746 0.42106 0.50414 + 0.22375 0.13381 8.07364 0.49773 0.32219 0.23669 0.42853 0.51131 + 0.22623 0.13469 8.05680 0.50422 0.32996 0.24546 0.43559 0.51806 + 0.22855 0.13550 8.03595 0.51014 0.33707 0.25351 0.44203 0.52421 + 0.23072 0.13626 8.01208 0.51549 0.34356 0.26088 0.44789 0.52979 + 0.23288 0.13701 7.98426 0.52066 0.34988 0.26806 0.45356 0.53519 + 0.23499 0.13773 7.95323 0.52554 0.35588 0.27491 0.45893 0.54028 + 0.23697 0.13841 7.92059 0.52999 0.36139 0.28123 0.46385 0.54493 + 0.23883 0.13904 7.88701 0.53403 0.36644 0.28703 0.46833 0.54915 + 0.24069 0.13967 7.85062 0.53794 0.37136 0.29270 0.47268 0.55324 + 0.16349 0.11198 3.35407 0.17825 0.00000 0.00000 0.09659 0.18496 + 0.16667 0.11331 3.63106 0.18647 0.00000 0.00000 0.10543 0.19357 + 0.17155 0.11533 4.01880 0.19904 0.00000 0.00000 0.11895 0.20674 + 0.17520 0.11684 4.26941 0.20840 0.01022 0.00000 0.12903 0.21656 + 0.17911 0.11843 4.51521 0.21836 0.02186 0.00000 0.13976 0.22700 + 0.18251 0.11982 4.71339 0.22700 0.03196 0.00000 0.14906 0.23606 + 0.18581 0.12114 4.89152 0.23528 0.04167 0.00000 0.15799 0.24475 + 0.18931 0.12255 5.06789 0.24405 0.05195 0.00000 0.16745 0.25395 + 0.19237 0.12376 5.21075 0.25164 0.06085 0.00000 0.17563 0.26190 + 0.19531 0.12492 5.33962 0.25890 0.06939 0.00000 0.18347 0.26952 + 0.19764 0.12584 5.43550 0.26461 0.07611 0.00000 0.18964 0.27551 + 0.20257 0.12776 5.62221 0.27661 0.09027 0.00000 0.20262 0.28811 + 0.20679 0.12938 5.74298 0.28673 0.10224 0.01265 0.21358 0.29873 + 0.21142 0.13115 5.85700 0.29774 0.11530 0.02740 0.22551 0.31029 + 0.21616 0.13294 5.95498 0.30879 0.12846 0.04227 0.23753 0.32191 + 0.22037 0.13451 6.02685 0.31846 0.14002 0.05534 0.24804 0.33206 + 0.22453 0.13604 6.08406 0.32783 0.15128 0.06808 0.25826 0.34191 + 0.22792 0.13728 6.12065 0.33530 0.16031 0.07831 0.26644 0.34977 + 0.23196 0.13874 6.15263 0.34399 0.17087 0.09030 0.27597 0.35892 + 0.23546 0.13999 6.17045 0.35133 0.17984 0.10051 0.28405 0.36665 + 0.23861 0.14111 6.17873 0.35777 0.18777 0.10955 0.29115 0.37344 + 0.24253 0.14249 6.17896 0.36554 0.19741 0.12056 0.29976 0.38163 + 0.24613 0.14374 6.16957 0.37242 0.20604 0.13046 0.30742 0.38890 + 0.24943 0.14487 6.15303 0.37851 0.21376 0.13934 0.31423 0.39534 + 0.25267 0.14597 6.12963 0.38424 0.22110 0.14783 0.32068 0.40141 + 0.25577 0.14701 6.10063 0.38952 0.22795 0.15577 0.32665 0.40701 + 0.25865 0.14796 6.06809 0.39422 0.23411 0.16296 0.33200 0.41200 + 0.26130 0.14883 6.03332 0.39838 0.23965 0.16945 0.33677 0.41643 + 0.26392 0.14968 5.99463 0.40230 0.24495 0.17569 0.34130 0.42062 + 0.26644 0.15049 5.95326 0.40592 0.24991 0.18156 0.34551 0.42449 + 0.26879 0.15124 5.91114 0.40915 0.25440 0.18690 0.34929 0.42794 + 0.27098 0.15192 5.86895 0.41200 0.25845 0.19175 0.35266 0.43100 + 0.27314 0.15259 5.82433 0.41469 0.26234 0.19643 0.35588 0.43390 + 0.27523 0.15324 5.77839 0.41717 0.26599 0.20086 0.35887 0.43658 + 0.27719 0.15383 5.73298 0.41937 0.26931 0.20490 0.36156 0.43896 + 0.27902 0.15438 5.68857 0.42132 0.27231 0.20858 0.36396 0.44107 + 0.28083 0.15492 5.64245 0.42315 0.27519 0.21215 0.36624 0.44306 + 0.20626 0.13108 3.22298 0.16319 0.00000 0.00000 0.08984 0.17543 + 0.21021 0.13263 3.41340 0.17008 0.00000 0.00000 0.09746 0.18286 + 0.21620 0.13497 3.67174 0.18031 0.00000 0.00000 0.10881 0.19390 + 0.22066 0.13668 3.82927 0.18772 0.00858 0.00000 0.11705 0.20190 + 0.22538 0.13849 3.97810 0.19542 0.01818 0.00000 0.12563 0.21021 + 0.22947 0.14005 4.09377 0.20194 0.02636 0.00000 0.13293 0.21727 + 0.23339 0.14153 4.19402 0.20808 0.03410 0.00000 0.13982 0.22392 + 0.23754 0.14308 4.28935 0.21446 0.04217 0.00000 0.14698 0.23082 + 0.24112 0.14440 4.36333 0.21987 0.04907 0.00000 0.15308 0.23669 + 0.24454 0.14566 4.42721 0.22497 0.05560 0.00000 0.15884 0.24221 + 0.24723 0.14665 4.47272 0.22892 0.06068 0.00000 0.16332 0.24650 + 0.25289 0.14869 4.55561 0.23707 0.07122 0.00000 0.17257 0.25533 + 0.25765 0.15039 4.59521 0.24377 0.07997 0.00952 0.18021 0.26260 + 0.26283 0.15222 4.62384 0.25089 0.08935 0.02046 0.18836 0.27032 + 0.26805 0.15403 4.63895 0.25784 0.09863 0.03130 0.19637 0.27787 + 0.27263 0.15559 4.64094 0.26376 0.10662 0.04067 0.20323 0.28430 + 0.27710 0.15710 4.63276 0.26936 0.11428 0.04968 0.20975 0.29037 + 0.28070 0.15829 4.61895 0.27371 0.12032 0.05681 0.21487 0.29511 + 0.28493 0.15967 4.59446 0.27864 0.12727 0.06505 0.22070 0.30047 + 0.28855 0.16083 4.56647 0.28268 0.13308 0.07198 0.22553 0.30488 + 0.29177 0.16185 4.53609 0.28614 0.13814 0.07803 0.22969 0.30865 + 0.29573 0.16308 4.49175 0.29017 0.14417 0.08531 0.23461 0.31306 + 0.29932 0.16418 4.44486 0.29361 0.14948 0.09175 0.23887 0.31684 + 0.30257 0.16515 4.39691 0.29654 0.15413 0.09744 0.24256 0.32006 + 0.30572 0.16607 4.34558 0.29919 0.15848 0.10281 0.24595 0.32298 + 0.30869 0.16692 4.29247 0.30151 0.16246 0.10777 0.24899 0.32556 + 0.31141 0.16769 4.23992 0.30348 0.16597 0.11219 0.25163 0.32775 + 0.31389 0.16837 4.18867 0.30514 0.16907 0.11612 0.25391 0.32961 + 0.31630 0.16902 4.13568 0.30661 0.17198 0.11986 0.25600 0.33127 + 0.31860 0.16962 4.08233 0.30789 0.17465 0.12333 0.25787 0.33271 + 0.32072 0.17017 4.03064 0.30894 0.17702 0.12645 0.25949 0.33391 + 0.32266 0.17065 3.98100 0.30979 0.17911 0.12923 0.26087 0.33490 + 0.32455 0.17112 3.93034 0.31052 0.18108 0.13189 0.26212 0.33576 + 0.32637 0.17155 3.87984 0.31112 0.18288 0.13437 0.26323 0.33647 + 0.32804 0.17193 3.83132 0.31158 0.18448 0.13660 0.26417 0.33703 + 0.32959 0.17228 3.78503 0.31191 0.18589 0.13861 0.26496 0.33745 + 0.33110 0.17261 3.73802 0.31216 0.18722 0.14053 0.26566 0.33778 + 0.24550 0.14770 3.11039 0.15093 0.00000 0.00000 0.08468 0.16914 + 0.24996 0.14937 3.24140 0.15674 0.00000 0.00000 0.09130 0.17555 + 0.25669 0.15187 3.41307 0.16515 0.00000 0.00000 0.10096 0.18487 + 0.26165 0.15370 3.50987 0.17110 0.00737 0.00000 0.10783 0.19147 + 0.26687 0.15560 3.59673 0.17716 0.01550 0.00000 0.11486 0.19819 + 0.27136 0.15722 3.66067 0.18219 0.02234 0.00000 0.12074 0.20379 + 0.27563 0.15874 3.71295 0.18684 0.02873 0.00000 0.12620 0.20897 + 0.28011 0.16032 3.75925 0.19159 0.03532 0.00000 0.13181 0.21426 + 0.28395 0.16167 3.79222 0.19555 0.04088 0.00000 0.13651 0.21867 + 0.28760 0.16293 3.81802 0.19923 0.04609 0.00000 0.14089 0.22277 + 0.29045 0.16391 3.83444 0.20204 0.05011 0.00000 0.14426 0.22591 + 0.29638 0.16591 3.85844 0.20771 0.05836 0.00000 0.15111 0.23224 + 0.30132 0.16755 3.85355 0.21227 0.06509 0.00754 0.15665 0.23732 + 0.30662 0.16928 3.83667 0.21698 0.07220 0.01610 0.16245 0.24258 + 0.31189 0.17095 3.80896 0.22146 0.07913 0.02447 0.16802 0.24758 + 0.31645 0.17237 3.77599 0.22516 0.08500 0.03162 0.17269 0.25170 + 0.32084 0.17370 3.73615 0.22855 0.09055 0.03840 0.17703 0.25548 + 0.32433 0.17474 3.69873 0.23110 0.09486 0.04372 0.18036 0.25833 + 0.32838 0.17591 3.64875 0.23390 0.09975 0.04979 0.18407 0.26146 + 0.33181 0.17687 3.60091 0.23610 0.10378 0.05483 0.18706 0.26392 + 0.33481 0.17769 3.55448 0.23791 0.10723 0.05919 0.18958 0.26595 + 0.33846 0.17866 3.49260 0.23992 0.11130 0.06437 0.19247 0.26820 + 0.34171 0.17949 3.43191 0.24152 0.11480 0.06891 0.19488 0.27001 + 0.34461 0.18020 3.37326 0.24279 0.11782 0.07286 0.19689 0.27144 + 0.34736 0.18085 3.31328 0.24383 0.12060 0.07655 0.19867 0.27263 + 0.34993 0.18142 3.25355 0.24465 0.12308 0.07991 0.20018 0.27358 + 0.35224 0.18192 3.19633 0.24525 0.12523 0.08287 0.20143 0.27427 + 0.35432 0.18234 3.14198 0.24566 0.12710 0.08548 0.20245 0.27476 + 0.35631 0.18272 3.08710 0.24594 0.12881 0.08793 0.20331 0.27510 + 0.35817 0.18306 3.03300 0.24607 0.13034 0.09017 0.20402 0.27529 + 0.35985 0.18334 2.98157 0.24609 0.13167 0.09216 0.20458 0.27534 + 0.36136 0.18357 2.93298 0.24600 0.13281 0.09392 0.20499 0.27527 + 0.36282 0.18377 2.88413 0.24582 0.13385 0.09557 0.20531 0.27511 + 0.36419 0.18395 2.83612 0.24556 0.13478 0.09709 0.20553 0.27485 + 0.36543 0.18408 2.79057 0.24523 0.13558 0.09844 0.20565 0.27451 + 0.36655 0.18419 2.74762 0.24484 0.13626 0.09964 0.20570 0.27412 + 0.36762 0.18427 2.70447 0.24439 0.13687 0.10077 0.20567 0.27365 + 0.31575 0.17622 2.87346 0.13024 0.00000 0.00000 0.07635 0.16005 + 0.32066 0.17791 2.92594 0.13436 0.00000 0.00000 0.08137 0.16472 + 0.32798 0.18038 2.98621 0.14008 0.00000 0.00000 0.08843 0.17122 + 0.33329 0.18215 3.00748 0.14394 0.00561 0.00000 0.09328 0.17562 + 0.33881 0.18395 3.01923 0.14772 0.01165 0.00000 0.09809 0.17993 + 0.34347 0.18545 3.02197 0.15074 0.01663 0.00000 0.10199 0.18338 + 0.34784 0.18683 3.01871 0.15343 0.02120 0.00000 0.10552 0.18645 + 0.35236 0.18823 3.00948 0.15607 0.02581 0.00000 0.10904 0.18946 + 0.35617 0.18939 2.99706 0.15818 0.02964 0.00000 0.11191 0.19187 + 0.35974 0.19045 2.98155 0.16008 0.03316 0.00000 0.11452 0.19403 + 0.36249 0.19125 2.96697 0.16148 0.03584 0.00000 0.11648 0.19562 + 0.36809 0.19283 2.92993 0.16418 0.04123 0.00000 0.12033 0.19866 + 0.37262 0.19406 2.88140 0.16620 0.04552 0.00509 0.12332 0.20092 + 0.37735 0.19528 2.82179 0.16815 0.04993 0.01074 0.12631 0.20308 + 0.38190 0.19638 2.75587 0.16983 0.05412 0.01617 0.12904 0.20492 + 0.38570 0.19724 2.69341 0.17109 0.05757 0.02070 0.13120 0.20626 + 0.38924 0.19798 2.62850 0.17210 0.06074 0.02492 0.13309 0.20731 + 0.39196 0.19850 2.57362 0.17275 0.06315 0.02816 0.13446 0.20797 + 0.39501 0.19902 2.50627 0.17334 0.06581 0.03180 0.13587 0.20852 + 0.39748 0.19938 2.44631 0.17367 0.06794 0.03477 0.13692 0.20879 + 0.39957 0.19965 2.39124 0.17384 0.06971 0.03729 0.13772 0.20888 + 0.40198 0.19989 2.32156 0.17386 0.07174 0.04023 0.13852 0.20877 + 0.40403 0.20001 2.25651 0.17370 0.07342 0.04275 0.13907 0.20847 + 0.40576 0.20006 2.19617 0.17341 0.07481 0.04490 0.13943 0.20801 + 0.40730 0.20003 2.13661 0.17299 0.07603 0.04686 0.13963 0.20741 + 0.40865 0.19993 2.07916 0.17245 0.07708 0.04861 0.13969 0.20668 + 0.40978 0.19978 2.02566 0.17185 0.07795 0.05012 0.13964 0.20587 + 0.41071 0.19959 1.97608 0.17119 0.07865 0.05142 0.13949 0.20502 + 0.41153 0.19935 1.92714 0.17045 0.07926 0.05261 0.13925 0.20407 + 0.41222 0.19907 1.87988 0.16966 0.07977 0.05368 0.13893 0.20305 + 0.41278 0.19877 1.83581 0.16884 0.08017 0.05460 0.13857 0.20202 + 0.41322 0.19844 1.79488 0.16802 0.08049 0.05540 0.13816 0.20098 + 0.41357 0.19808 1.75438 0.16714 0.08074 0.05612 0.13769 0.19989 + 0.41384 0.19770 1.71519 0.16624 0.08093 0.05677 0.13718 0.19875 + 0.41402 0.19730 1.67853 0.16533 0.08106 0.05733 0.13665 0.19763 + 0.41413 0.19690 1.64440 0.16444 0.08114 0.05781 0.13610 0.19653 + 0.41418 0.19647 1.61053 0.16351 0.08118 0.05824 0.13552 0.19538 + 0.37659 0.19991 2.60936 0.11277 0.00000 0.00000 0.06930 0.15219 + 0.38140 0.20137 2.61342 0.11567 0.00000 0.00000 0.07305 0.15537 + 0.38844 0.20345 2.60732 0.11951 0.00000 0.00000 0.07817 0.15957 + 0.39345 0.20489 2.58571 0.12198 0.00433 0.00000 0.08157 0.16226 + 0.39857 0.20631 2.55628 0.12428 0.00892 0.00000 0.08483 0.16474 + 0.40282 0.20744 2.52658 0.12603 0.01264 0.00000 0.08740 0.16661 + 0.40674 0.20845 2.49484 0.12752 0.01599 0.00000 0.08965 0.16817 + 0.41071 0.20943 2.45810 0.12890 0.01933 0.00000 0.09183 0.16958 + 0.41398 0.21019 2.42396 0.12994 0.02205 0.00000 0.09355 0.17063 + 0.41699 0.21086 2.38936 0.13082 0.02453 0.00000 0.09506 0.17147 + 0.41926 0.21133 2.36092 0.13142 0.02639 0.00000 0.09617 0.17204 + 0.42375 0.21219 2.29786 0.13249 0.03007 0.00000 0.09825 0.17295 + 0.42724 0.21276 2.23297 0.13316 0.03293 0.00359 0.09976 0.17344 + 0.43073 0.21322 2.15899 0.13367 0.03581 0.00753 0.10117 0.17369 + 0.43389 0.21350 2.08194 0.13396 0.03848 0.01124 0.10235 0.17365 + 0.43637 0.21360 2.01244 0.13403 0.04062 0.01429 0.10317 0.17337 + 0.43852 0.21356 1.94309 0.13392 0.04255 0.01709 0.10380 0.17288 + 0.44005 0.21343 1.88635 0.13370 0.04397 0.01921 0.10417 0.17233 + 0.44161 0.21315 1.81877 0.13330 0.04550 0.02155 0.10445 0.17149 + 0.44275 0.21280 1.76024 0.13283 0.04669 0.02343 0.10456 0.17061 + 0.44358 0.21241 1.70771 0.13231 0.04766 0.02500 0.10455 0.16969 + 0.44439 0.21181 1.64276 0.13153 0.04871 0.02681 0.10440 0.16840 + 0.44490 0.21115 1.58349 0.13069 0.04955 0.02832 0.10413 0.16706 + 0.44517 0.21046 1.52960 0.12982 0.05022 0.02959 0.10378 0.16571 + 0.44524 0.20970 1.47735 0.12887 0.05077 0.03073 0.10333 0.16427 + 0.44514 0.20889 1.42781 0.12788 0.05120 0.03173 0.10280 0.16279 + 0.44489 0.20807 1.38237 0.12688 0.05153 0.03257 0.10224 0.16132 + 0.44452 0.20724 1.34082 0.12590 0.05177 0.03327 0.10165 0.15989 + 0.44403 0.20637 1.30033 0.12487 0.05195 0.03391 0.10101 0.15841 + 0.44343 0.20548 1.26171 0.12382 0.05206 0.03446 0.10034 0.15692 + 0.44276 0.20459 1.22608 0.12280 0.05212 0.03493 0.09966 0.15547 + 0.44204 0.20373 1.19333 0.12180 0.05214 0.03532 0.09899 0.15407 + 0.44123 0.20282 1.16123 0.12078 0.05212 0.03566 0.09828 0.15263 + 0.44034 0.20190 1.13046 0.11975 0.05206 0.03596 0.09756 0.15120 + 0.43943 0.20100 1.10192 0.11875 0.05197 0.03620 0.09684 0.14981 + 0.43850 0.20013 1.07556 0.11779 0.05186 0.03640 0.09615 0.14848 + 0.43750 0.19922 1.04960 0.11681 0.05173 0.03657 0.09543 0.14712 + 0.42899 0.21940 2.32960 0.09795 0.00000 0.00000 0.06296 0.14403 + 0.43325 0.22044 2.30344 0.09995 0.00000 0.00000 0.06570 0.14594 + 0.43936 0.22185 2.25740 0.10247 0.00000 0.00000 0.06932 0.14824 + 0.44362 0.22276 2.21146 0.10399 0.00336 0.00000 0.07163 0.14955 + 0.44785 0.22359 2.15965 0.10532 0.00687 0.00000 0.07377 0.15060 + 0.45128 0.22419 2.11309 0.10625 0.00968 0.00000 0.07539 0.15125 + 0.45435 0.22467 2.06717 0.10697 0.01217 0.00000 0.07676 0.15167 + 0.45737 0.22506 2.01741 0.10757 0.01462 0.00000 0.07802 0.15191 + 0.45979 0.22531 1.97357 0.10796 0.01660 0.00000 0.07897 0.15196 + 0.46192 0.22546 1.93092 0.10823 0.01837 0.00000 0.07976 0.15187 + 0.46347 0.22552 1.89699 0.10838 0.01968 0.00000 0.08031 0.15172 + 0.46638 0.22547 1.82460 0.10851 0.02224 0.00000 0.08126 0.15117 + 0.46845 0.22525 1.75589 0.10844 0.02420 0.00260 0.08187 0.15048 + 0.47028 0.22482 1.68008 0.10818 0.02613 0.00542 0.08233 0.14949 + 0.47169 0.22417 1.60342 0.10775 0.02787 0.00803 0.08259 0.14826 + 0.47255 0.22343 1.53604 0.10722 0.02924 0.01015 0.08266 0.14698 + 0.47304 0.22254 1.47028 0.10656 0.03044 0.01207 0.08258 0.14556 + 0.47319 0.22170 1.41749 0.10594 0.03130 0.01350 0.08241 0.14430 + 0.47306 0.22058 1.35571 0.10510 0.03221 0.01507 0.08210 0.14266 + 0.47269 0.21950 1.30310 0.10429 0.03289 0.01631 0.08173 0.14114 + 0.47215 0.21843 1.25656 0.10348 0.03342 0.01733 0.08132 0.13969 + 0.47121 0.21700 1.19986 0.10240 0.03398 0.01849 0.08072 0.13778 + 0.47008 0.21556 1.14888 0.10131 0.03439 0.01945 0.08007 0.13592 + 0.46881 0.21415 1.10315 0.10025 0.03469 0.02023 0.07940 0.13414 + 0.46737 0.21268 1.05934 0.09915 0.03492 0.02093 0.07868 0.13231 + 0.46579 0.21119 1.01827 0.09803 0.03507 0.02152 0.07792 0.13050 + 0.46415 0.20974 0.98100 0.09695 0.03516 0.02201 0.07717 0.12875 + 0.46248 0.20833 0.94724 0.09590 0.03520 0.02242 0.07643 0.12710 + 0.46070 0.20688 0.91463 0.09484 0.03520 0.02277 0.07566 0.12542 + 0.45884 0.20543 0.88379 0.09377 0.03516 0.02307 0.07488 0.12375 + 0.45698 0.20402 0.85556 0.09275 0.03509 0.02332 0.07412 0.12217 + 0.45514 0.20266 0.82980 0.09177 0.03500 0.02351 0.07339 0.12066 + 0.45322 0.20128 0.80472 0.09078 0.03488 0.02368 0.07264 0.11914 + 0.45125 0.19989 0.78084 0.08979 0.03474 0.02381 0.07188 0.11764 + 0.44931 0.19855 0.75882 0.08884 0.03459 0.02392 0.07116 0.11620 + 0.44742 0.19727 0.73860 0.08794 0.03444 0.02400 0.07046 0.11485 + 0.44546 0.19596 0.71880 0.08703 0.03427 0.02406 0.06975 0.11347 + 0.48358 0.23832 1.97927 0.08278 0.00000 0.00000 0.05575 0.13278 + 0.48671 0.23865 1.93200 0.08399 0.00000 0.00000 0.05751 0.13337 + 0.49101 0.23896 1.85956 0.08538 0.00000 0.00000 0.05972 0.13377 + 0.49385 0.23902 1.79920 0.08612 0.00245 0.00000 0.06103 0.13374 + 0.49651 0.23893 1.73520 0.08666 0.00497 0.00000 0.06217 0.13342 + 0.49851 0.23872 1.68030 0.08696 0.00695 0.00000 0.06296 0.13295 + 0.50018 0.23840 1.62812 0.08710 0.00869 0.00000 0.06357 0.13233 + 0.50165 0.23793 1.57345 0.08713 0.01037 0.00000 0.06407 0.13152 + 0.50268 0.23743 1.52665 0.08705 0.01170 0.00000 0.06439 0.13071 + 0.50346 0.23685 1.48221 0.08689 0.01288 0.00000 0.06460 0.12983 + 0.50392 0.23633 1.44756 0.08672 0.01374 0.00000 0.06471 0.12907 + 0.50446 0.23504 1.37545 0.08622 0.01540 0.00000 0.06479 0.12732 + 0.50444 0.23376 1.31044 0.08566 0.01663 0.00177 0.06471 0.12568 + 0.50394 0.23215 1.24048 0.08493 0.01782 0.00366 0.06448 0.12374 + 0.50291 0.23030 1.17136 0.08407 0.01887 0.00539 0.06410 0.12162 + 0.50157 0.22849 1.11186 0.08320 0.01967 0.00677 0.06365 0.11964 + 0.49985 0.22654 1.05488 0.08226 0.02034 0.00801 0.06312 0.11758 + 0.49818 0.22485 1.00986 0.08144 0.02081 0.00892 0.06261 0.11585 + 0.49586 0.22271 0.95798 0.08040 0.02128 0.00990 0.06194 0.11372 + 0.49358 0.22075 0.91445 0.07944 0.02162 0.01066 0.06130 0.11182 + 0.49131 0.21890 0.87643 0.07854 0.02187 0.01128 0.06067 0.11006 + 0.48819 0.21650 0.83071 0.07736 0.02211 0.01198 0.05983 0.10782 + 0.48506 0.21418 0.79016 0.07622 0.02227 0.01254 0.05901 0.10571 + 0.48195 0.21196 0.75421 0.07514 0.02236 0.01299 0.05821 0.10373 + 0.47869 0.20971 0.72016 0.07403 0.02241 0.01338 0.05738 0.10176 + 0.47536 0.20747 0.68857 0.07295 0.02241 0.01371 0.05655 0.09984 + 0.47210 0.20534 0.66018 0.07191 0.02238 0.01397 0.05576 0.09803 + 0.46893 0.20330 0.63469 0.07092 0.02232 0.01418 0.05500 0.09633 + 0.46567 0.20124 0.61026 0.06993 0.02224 0.01436 0.05422 0.09464 + 0.46237 0.19920 0.58734 0.06895 0.02214 0.01451 0.05346 0.09299 + 0.45918 0.19725 0.56651 0.06802 0.02202 0.01462 0.05273 0.09143 + 0.45610 0.19540 0.54764 0.06714 0.02190 0.01470 0.05203 0.08997 + 0.45295 0.19352 0.52937 0.06626 0.02176 0.01477 0.05133 0.08851 + 0.44978 0.19166 0.51208 0.06538 0.02162 0.01482 0.05064 0.08708 + 0.44673 0.18989 0.49623 0.06455 0.02147 0.01485 0.04998 0.08573 + 0.44380 0.18820 0.48175 0.06377 0.02132 0.01487 0.04935 0.08446 + 0.44080 0.18649 0.46764 0.06298 0.02116 0.01487 0.04871 0.08319 + 0.52690 0.25158 1.64716 0.07091 0.00000 0.00000 0.04920 0.12032 + 0.52855 0.25107 1.59099 0.07158 0.00000 0.00000 0.05023 0.11990 + 0.53053 0.25009 1.50883 0.07223 0.00000 0.00000 0.05141 0.11888 + 0.53160 0.24918 1.44497 0.07246 0.00178 0.00000 0.05202 0.11787 + 0.53234 0.24806 1.37924 0.07253 0.00358 0.00000 0.05247 0.11660 + 0.53266 0.24696 1.32422 0.07244 0.00498 0.00000 0.05271 0.11535 + 0.53266 0.24578 1.27298 0.07225 0.00619 0.00000 0.05283 0.11404 + 0.53236 0.24440 1.22030 0.07195 0.00735 0.00000 0.05283 0.11255 + 0.53182 0.24310 1.17598 0.07161 0.00826 0.00000 0.05276 0.11118 + 0.53108 0.24176 1.13450 0.07123 0.00905 0.00000 0.05262 0.10981 + 0.53033 0.24065 1.10256 0.07089 0.00962 0.00000 0.05247 0.10869 + 0.52829 0.23811 1.03716 0.07008 0.01070 0.00000 0.05205 0.10624 + 0.52608 0.23578 0.98001 0.06930 0.01149 0.00122 0.05159 0.10408 + 0.52313 0.23302 0.91955 0.06836 0.01223 0.00251 0.05099 0.10163 + 0.51961 0.23003 0.86081 0.06732 0.01286 0.00368 0.05028 0.09908 + 0.51605 0.22722 0.81100 0.06633 0.01333 0.00460 0.04959 0.09677 + 0.51214 0.22430 0.76394 0.06530 0.01372 0.00541 0.04885 0.09446 + 0.50869 0.22183 0.72720 0.06443 0.01397 0.00600 0.04821 0.09255 + 0.50427 0.21879 0.68534 0.06335 0.01422 0.00663 0.04740 0.09026 + 0.50017 0.21606 0.65060 0.06238 0.01438 0.00712 0.04666 0.08826 + 0.49627 0.21353 0.62055 0.06148 0.01450 0.00751 0.04598 0.08644 + 0.49115 0.21030 0.58476 0.06033 0.01459 0.00794 0.04509 0.08417 + 0.48618 0.20724 0.55335 0.05924 0.01463 0.00828 0.04424 0.08206 + 0.48140 0.20436 0.52575 0.05822 0.01463 0.00855 0.04344 0.08012 + 0.47652 0.20147 0.49982 0.05719 0.01461 0.00878 0.04263 0.07821 + 0.47166 0.19864 0.47596 0.05619 0.01456 0.00897 0.04184 0.07637 + 0.46698 0.19596 0.45467 0.05524 0.01449 0.00912 0.04110 0.07466 + 0.46251 0.19343 0.43568 0.05436 0.01441 0.00923 0.04039 0.07307 + 0.45797 0.19090 0.41759 0.05347 0.01432 0.00933 0.03969 0.07150 + 0.45347 0.18841 0.40072 0.05260 0.01421 0.00940 0.03900 0.06998 + 0.44915 0.18606 0.38546 0.05178 0.01410 0.00945 0.03834 0.06856 + 0.44504 0.18383 0.37171 0.05100 0.01399 0.00949 0.03773 0.06724 + 0.44087 0.18160 0.35846 0.05023 0.01387 0.00951 0.03711 0.06592 + 0.43674 0.17940 0.34598 0.04948 0.01375 0.00952 0.03651 0.06465 + 0.43278 0.17731 0.33458 0.04876 0.01362 0.00953 0.03594 0.06345 + 0.42901 0.17534 0.32421 0.04809 0.01350 0.00952 0.03540 0.06234 + 0.42518 0.17335 0.31413 0.04741 0.01337 0.00951 0.03487 0.06122 + 0.55983 0.25963 1.34564 0.06180 0.00000 0.00000 0.04323 0.10700 + 0.55977 0.25822 1.28828 0.06208 0.00000 0.00000 0.04372 0.10586 + 0.55913 0.25587 1.20657 0.06222 0.00000 0.00000 0.04417 0.10386 + 0.55823 0.25396 1.14554 0.06212 0.00128 0.00000 0.04430 0.10219 + 0.55686 0.25178 1.08393 0.06187 0.00257 0.00000 0.04429 0.10029 + 0.55533 0.24977 1.03320 0.06155 0.00356 0.00000 0.04416 0.09855 + 0.55356 0.24772 0.98662 0.06115 0.00440 0.00000 0.04396 0.09682 + 0.55137 0.24544 0.93936 0.06066 0.00520 0.00000 0.04366 0.09493 + 0.54920 0.24337 0.90009 0.06018 0.00581 0.00000 0.04335 0.09325 + 0.54689 0.24130 0.86373 0.05967 0.00635 0.00000 0.04300 0.09162 + 0.54490 0.23962 0.83598 0.05924 0.00673 0.00000 0.04271 0.09031 + 0.54026 0.23590 0.77982 0.05827 0.00743 0.00000 0.04200 0.08753 + 0.53584 0.23259 0.73182 0.05738 0.00794 0.00085 0.04135 0.08514 + 0.53051 0.22880 0.68171 0.05635 0.00840 0.00174 0.04057 0.08251 + 0.52458 0.22478 0.63364 0.05524 0.00879 0.00254 0.03972 0.07984 + 0.51892 0.22110 0.59335 0.05422 0.00907 0.00316 0.03893 0.07747 + 0.51296 0.21735 0.55569 0.05318 0.00929 0.00370 0.03812 0.07513 + 0.50787 0.21422 0.52657 0.05231 0.00943 0.00410 0.03745 0.07324 + 0.50153 0.21042 0.49367 0.05125 0.00956 0.00451 0.03662 0.07100 + 0.49579 0.20706 0.46661 0.05032 0.00963 0.00483 0.03588 0.06907 + 0.49044 0.20399 0.44338 0.04946 0.00968 0.00508 0.03521 0.06734 + 0.48356 0.20010 0.41592 0.04837 0.00970 0.00536 0.03436 0.06520 + 0.47699 0.19646 0.39201 0.04735 0.00969 0.00557 0.03356 0.06324 + 0.47078 0.19306 0.37115 0.04641 0.00967 0.00574 0.03282 0.06145 + 0.46452 0.18969 0.35168 0.04547 0.00962 0.00588 0.03208 0.05971 + 0.45837 0.18642 0.33387 0.04455 0.00956 0.00600 0.03137 0.05805 + 0.45251 0.18334 0.31807 0.04370 0.00949 0.00608 0.03070 0.05652 + 0.44698 0.18047 0.30404 0.04290 0.00942 0.00615 0.03008 0.05511 + 0.44142 0.17760 0.29075 0.04211 0.00933 0.00620 0.02947 0.05373 + 0.43594 0.17481 0.27840 0.04134 0.00924 0.00624 0.02887 0.05240 + 0.43073 0.17217 0.26728 0.04061 0.00915 0.00626 0.02830 0.05117 + 0.42581 0.16970 0.25729 0.03993 0.00906 0.00628 0.02778 0.05003 + 0.42085 0.16723 0.24770 0.03926 0.00897 0.00628 0.02726 0.04890 + 0.41596 0.16482 0.23869 0.03860 0.00887 0.00628 0.02675 0.04781 + 0.41131 0.16253 0.23049 0.03797 0.00877 0.00628 0.02627 0.04679 + 0.40690 0.16038 0.22304 0.03739 0.00868 0.00626 0.02582 0.04584 + 0.40246 0.15823 0.21583 0.03681 0.00858 0.00625 0.02537 0.04491 + 0.58321 0.26294 1.08077 0.05486 0.00000 0.00000 0.03781 0.09333 + 0.58131 0.26062 1.02685 0.05486 0.00000 0.00000 0.03791 0.09172 + 0.57788 0.25692 0.95148 0.05461 0.00000 0.00000 0.03785 0.08910 + 0.57491 0.25403 0.89669 0.05428 0.00092 0.00000 0.03765 0.08705 + 0.57135 0.25082 0.84218 0.05381 0.00184 0.00000 0.03733 0.08480 + 0.56794 0.24794 0.79785 0.05332 0.00253 0.00000 0.03698 0.08281 + 0.56438 0.24508 0.75758 0.05279 0.00311 0.00000 0.03658 0.08087 + 0.56029 0.24196 0.71716 0.05217 0.00366 0.00000 0.03611 0.07881 + 0.55650 0.23917 0.68389 0.05160 0.00408 0.00000 0.03566 0.07701 + 0.55264 0.23643 0.65333 0.05101 0.00444 0.00000 0.03520 0.07528 + 0.54945 0.23423 0.63019 0.05053 0.00469 0.00000 0.03482 0.07392 + 0.54230 0.22947 0.58378 0.04947 0.00515 0.00000 0.03399 0.07107 + 0.53579 0.22530 0.54476 0.04852 0.00548 0.00060 0.03325 0.06867 + 0.52822 0.22062 0.50445 0.04745 0.00577 0.00122 0.03240 0.06607 + 0.52007 0.21574 0.46618 0.04632 0.00601 0.00177 0.03152 0.06347 + 0.51249 0.21133 0.43442 0.04530 0.00618 0.00220 0.03072 0.06121 + 0.50470 0.20690 0.40498 0.04427 0.00630 0.00257 0.02992 0.05901 + 0.49816 0.20326 0.38238 0.04342 0.00638 0.00284 0.02926 0.05724 + 0.49014 0.19887 0.35704 0.04240 0.00644 0.00312 0.02847 0.05518 + 0.48299 0.19503 0.33634 0.04150 0.00647 0.00333 0.02779 0.05342 + 0.47641 0.19154 0.31867 0.04069 0.00648 0.00350 0.02716 0.05186 + 0.46803 0.18717 0.29791 0.03966 0.00648 0.00368 0.02639 0.04994 + 0.46015 0.18311 0.27995 0.03871 0.00646 0.00382 0.02567 0.04821 + 0.45276 0.17936 0.26436 0.03784 0.00642 0.00393 0.02501 0.04664 + 0.44540 0.17566 0.24989 0.03697 0.00638 0.00402 0.02436 0.04513 + 0.43821 0.17209 0.23671 0.03614 0.00632 0.00409 0.02374 0.04369 + 0.43143 0.16876 0.22507 0.03536 0.00626 0.00414 0.02316 0.04238 + 0.42507 0.16567 0.21477 0.03464 0.00620 0.00418 0.02262 0.04118 + 0.41872 0.16260 0.20504 0.03393 0.00613 0.00421 0.02210 0.04001 + 0.41250 0.15962 0.19603 0.03324 0.00606 0.00423 0.02159 0.03889 + 0.40663 0.15683 0.18795 0.03259 0.00599 0.00424 0.02112 0.03785 + 0.40110 0.15422 0.18070 0.03199 0.00593 0.00425 0.02067 0.03690 + 0.39557 0.15162 0.17376 0.03139 0.00585 0.00425 0.02024 0.03596 + 0.39014 0.14910 0.16725 0.03081 0.00578 0.00424 0.01982 0.03506 + 0.38500 0.14671 0.16135 0.03026 0.00571 0.00424 0.01942 0.03423 + 0.38015 0.14448 0.15599 0.02975 0.00564 0.00422 0.01905 0.03345 + 0.37528 0.14225 0.15081 0.02924 0.00557 0.00421 0.01868 0.03268 + 0.59783 0.26202 0.85425 0.04954 0.00000 0.00000 0.03288 0.07981 + 0.59405 0.25884 0.80631 0.04930 0.00000 0.00000 0.03272 0.07795 + 0.58779 0.25385 0.74027 0.04875 0.00000 0.00000 0.03232 0.07503 + 0.58274 0.25004 0.69324 0.04824 0.00066 0.00000 0.03191 0.07281 + 0.57701 0.24589 0.64699 0.04760 0.00130 0.00000 0.03141 0.07043 + 0.57175 0.24222 0.60975 0.04699 0.00178 0.00000 0.03092 0.06837 + 0.56643 0.23863 0.57623 0.04635 0.00219 0.00000 0.03041 0.06639 + 0.56052 0.23475 0.54287 0.04564 0.00256 0.00000 0.02984 0.06432 + 0.55518 0.23134 0.51561 0.04500 0.00285 0.00000 0.02933 0.06253 + 0.54986 0.22802 0.49076 0.04436 0.00309 0.00000 0.02882 0.06084 + 0.54553 0.22538 0.47205 0.04384 0.00326 0.00000 0.02842 0.05952 + 0.53605 0.21972 0.43480 0.04271 0.00356 0.00000 0.02754 0.05678 + 0.52763 0.21485 0.40390 0.04173 0.00377 0.00042 0.02678 0.05451 + 0.51804 0.20944 0.37224 0.04064 0.00396 0.00086 0.02593 0.05209 + 0.50793 0.20388 0.34244 0.03950 0.00410 0.00125 0.02508 0.04970 + 0.49868 0.19891 0.31790 0.03849 0.00420 0.00155 0.02431 0.04765 + 0.48931 0.19398 0.29531 0.03747 0.00427 0.00181 0.02356 0.04567 + 0.48153 0.18995 0.27808 0.03665 0.00431 0.00199 0.02295 0.04410 + 0.47211 0.18514 0.25886 0.03566 0.00434 0.00219 0.02223 0.04229 + 0.46380 0.18097 0.24324 0.03480 0.00436 0.00233 0.02161 0.04075 + 0.45621 0.17721 0.22998 0.03403 0.00436 0.00245 0.02105 0.03940 + 0.44665 0.17252 0.21448 0.03306 0.00434 0.00257 0.02037 0.03775 + 0.43772 0.16820 0.20112 0.03217 0.00432 0.00266 0.01974 0.03628 + 0.42943 0.16424 0.18958 0.03136 0.00428 0.00274 0.01916 0.03495 + 0.42121 0.16035 0.17890 0.03056 0.00425 0.00280 0.01860 0.03368 + 0.41326 0.15662 0.16921 0.02979 0.00420 0.00284 0.01807 0.03248 + 0.40580 0.15316 0.16067 0.02908 0.00415 0.00288 0.01758 0.03139 + 0.39884 0.14996 0.15314 0.02842 0.00411 0.00290 0.01713 0.03040 + 0.39192 0.14680 0.14605 0.02777 0.00406 0.00292 0.01668 0.02944 + 0.38519 0.14375 0.13949 0.02715 0.00400 0.00293 0.01626 0.02852 + 0.37886 0.14090 0.13361 0.02656 0.00395 0.00294 0.01586 0.02768 + 0.37294 0.13825 0.12836 0.02602 0.00390 0.00294 0.01550 0.02691 + 0.36702 0.13562 0.12333 0.02549 0.00385 0.00294 0.01514 0.02615 + 0.36125 0.13307 0.11863 0.02497 0.00380 0.00294 0.01479 0.02543 + 0.35580 0.13068 0.11436 0.02448 0.00375 0.00293 0.01447 0.02476 + 0.35068 0.12844 0.11049 0.02403 0.00370 0.00292 0.01417 0.02414 + 0.34556 0.12621 0.10676 0.02357 0.00365 0.00291 0.01387 0.02353 + 0.60446 0.25738 0.66493 0.04531 0.00000 0.00000 0.02844 0.06690 + 0.59882 0.25341 0.62406 0.04487 0.00000 0.00000 0.02811 0.06495 + 0.58979 0.24727 0.56845 0.04408 0.00000 0.00000 0.02749 0.06197 + 0.58273 0.24264 0.52948 0.04341 0.00046 0.00000 0.02696 0.05976 + 0.57492 0.23766 0.49153 0.04264 0.00091 0.00000 0.02635 0.05742 + 0.56790 0.23330 0.46124 0.04192 0.00125 0.00000 0.02579 0.05542 + 0.56093 0.22908 0.43417 0.04120 0.00153 0.00000 0.02523 0.05353 + 0.55332 0.22457 0.40742 0.04042 0.00178 0.00000 0.02463 0.05156 + 0.54655 0.22063 0.38571 0.03972 0.00197 0.00000 0.02410 0.04989 + 0.53989 0.21684 0.36603 0.03903 0.00214 0.00000 0.02358 0.04831 + 0.53454 0.21384 0.35128 0.03848 0.00225 0.00000 0.02317 0.04710 + 0.52296 0.20747 0.32212 0.03731 0.00245 0.00000 0.02230 0.04459 + 0.51286 0.20205 0.29816 0.03631 0.00259 0.00030 0.02157 0.04255 + 0.50152 0.19610 0.27380 0.03520 0.00270 0.00062 0.02077 0.04039 + 0.48973 0.19005 0.25102 0.03406 0.00280 0.00090 0.01997 0.03829 + 0.47908 0.18469 0.23238 0.03306 0.00286 0.00111 0.01927 0.03649 + 0.46841 0.17941 0.21532 0.03206 0.00290 0.00129 0.01859 0.03479 + 0.45963 0.17514 0.20236 0.03126 0.00292 0.00142 0.01804 0.03344 + 0.44909 0.17007 0.18798 0.03030 0.00293 0.00156 0.01740 0.03190 + 0.43987 0.16570 0.17634 0.02948 0.00293 0.00166 0.01685 0.03061 + 0.43151 0.16179 0.16649 0.02875 0.00293 0.00174 0.01636 0.02948 + 0.42105 0.15694 0.15501 0.02783 0.00291 0.00183 0.01576 0.02811 + 0.41136 0.15251 0.14516 0.02700 0.00289 0.00190 0.01522 0.02689 + 0.40242 0.14845 0.13667 0.02624 0.00287 0.00195 0.01473 0.02580 + 0.39361 0.14451 0.12884 0.02549 0.00283 0.00199 0.01426 0.02477 + 0.38512 0.14074 0.12175 0.02478 0.00280 0.00202 0.01381 0.02380 + 0.37722 0.13725 0.11551 0.02413 0.00277 0.00205 0.01339 0.02292 + 0.36987 0.13405 0.11002 0.02353 0.00273 0.00206 0.01302 0.02213 + 0.36261 0.13089 0.10485 0.02294 0.00269 0.00207 0.01265 0.02136 + 0.35557 0.12786 0.10008 0.02237 0.00266 0.00208 0.01230 0.02063 + 0.34897 0.12504 0.09581 0.02184 0.00262 0.00209 0.01197 0.01997 + 0.34282 0.12242 0.09199 0.02135 0.00258 0.00209 0.01167 0.01936 + 0.33671 0.11984 0.08835 0.02087 0.00255 0.00209 0.01138 0.01877 + 0.33075 0.11734 0.08494 0.02041 0.00251 0.00208 0.01109 0.01820 + 0.32516 0.11500 0.08184 0.01997 0.00247 0.00208 0.01083 0.01768 + 0.31992 0.11282 0.07904 0.01957 0.00244 0.00207 0.01058 0.01720 + 0.31469 0.11065 0.07634 0.01916 0.00241 0.00206 0.01034 0.01673 + 0.60391 0.24956 0.50976 0.04178 0.00000 0.00000 0.02445 0.05492 + 0.59648 0.24490 0.47613 0.04118 0.00000 0.00000 0.02401 0.05303 + 0.58482 0.23777 0.43085 0.04017 0.00000 0.00000 0.02327 0.05018 + 0.57587 0.23244 0.39953 0.03937 0.00032 0.00000 0.02268 0.04809 + 0.56613 0.22677 0.36929 0.03847 0.00064 0.00000 0.02202 0.04592 + 0.55748 0.22185 0.34533 0.03767 0.00087 0.00000 0.02144 0.04407 + 0.54901 0.21711 0.32406 0.03689 0.00106 0.00000 0.02088 0.04234 + 0.53986 0.21209 0.30316 0.03604 0.00123 0.00000 0.02028 0.04056 + 0.53180 0.20775 0.28629 0.03529 0.00136 0.00000 0.01975 0.03906 + 0.52396 0.20359 0.27107 0.03457 0.00147 0.00000 0.01925 0.03766 + 0.51771 0.20032 0.25971 0.03400 0.00155 0.00000 0.01886 0.03658 + 0.50433 0.19343 0.23736 0.03280 0.00168 0.00000 0.01804 0.03439 + 0.49279 0.18763 0.21915 0.03177 0.00177 0.00022 0.01736 0.03261 + 0.47998 0.18131 0.20073 0.03066 0.00184 0.00045 0.01663 0.03076 + 0.46682 0.17494 0.18361 0.02953 0.00190 0.00065 0.01590 0.02897 + 0.45505 0.16935 0.16966 0.02854 0.00194 0.00081 0.01527 0.02746 + 0.44336 0.16389 0.15695 0.02757 0.00196 0.00094 0.01466 0.02604 + 0.43382 0.15949 0.14733 0.02679 0.00197 0.00104 0.01418 0.02492 + 0.42245 0.15431 0.13668 0.02587 0.00198 0.00114 0.01362 0.02366 + 0.41257 0.14987 0.12810 0.02509 0.00198 0.00121 0.01315 0.02260 + 0.40367 0.14591 0.12085 0.02439 0.00197 0.00127 0.01273 0.02168 + 0.39259 0.14104 0.11242 0.02353 0.00196 0.00134 0.01222 0.02058 + 0.38240 0.13661 0.10520 0.02274 0.00194 0.00138 0.01176 0.01961 + 0.37304 0.13259 0.09899 0.02203 0.00192 0.00142 0.01134 0.01874 + 0.36387 0.12868 0.09326 0.02134 0.00190 0.00145 0.01094 0.01792 + 0.35509 0.12497 0.08809 0.02069 0.00187 0.00147 0.01057 0.01716 + 0.34694 0.12155 0.08354 0.02009 0.00185 0.00149 0.01022 0.01647 + 0.33940 0.11842 0.07954 0.01954 0.00182 0.00150 0.00991 0.01585 + 0.33197 0.11535 0.07577 0.01900 0.00180 0.00151 0.00961 0.01525 + 0.32480 0.11241 0.07230 0.01849 0.00177 0.00152 0.00932 0.01469 + 0.31811 0.10969 0.06920 0.01801 0.00175 0.00152 0.00905 0.01418 + 0.31189 0.10717 0.06642 0.01757 0.00172 0.00152 0.00881 0.01371 + 0.30572 0.10468 0.06377 0.01714 0.00169 0.00152 0.00857 0.01326 + 0.29974 0.10229 0.06128 0.01672 0.00167 0.00151 0.00834 0.01283 + 0.29414 0.10006 0.05903 0.01633 0.00164 0.00151 0.00813 0.01243 + 0.28890 0.09798 0.05700 0.01597 0.00162 0.00150 0.00793 0.01207 + 0.28369 0.09593 0.05503 0.01561 0.00160 0.00150 0.00773 0.01171 + 0.59691 0.23909 0.38497 0.03862 0.00000 0.00000 0.02088 0.04414 + 0.58781 0.23385 0.35816 0.03788 0.00000 0.00000 0.02039 0.04240 + 0.57372 0.22590 0.32238 0.03669 0.00000 0.00000 0.01959 0.03980 + 0.56306 0.22002 0.29791 0.03578 0.00022 0.00000 0.01899 0.03792 + 0.55156 0.21380 0.27445 0.03479 0.00044 0.00000 0.01833 0.03598 + 0.54146 0.20844 0.25598 0.03392 0.00060 0.00000 0.01776 0.03435 + 0.53166 0.20332 0.23966 0.03308 0.00073 0.00000 0.01721 0.03283 + 0.52117 0.19794 0.22371 0.03218 0.00085 0.00000 0.01664 0.03128 + 0.51201 0.19330 0.21090 0.03140 0.00093 0.00000 0.01614 0.02999 + 0.50316 0.18889 0.19938 0.03066 0.00101 0.00000 0.01567 0.02878 + 0.49615 0.18543 0.19081 0.03007 0.00106 0.00000 0.01531 0.02786 + 0.48126 0.17821 0.17402 0.02885 0.00114 0.00000 0.01456 0.02601 + 0.46856 0.17218 0.16042 0.02782 0.00120 0.00017 0.01394 0.02452 + 0.45459 0.16566 0.14672 0.02671 0.00125 0.00034 0.01328 0.02298 + 0.44036 0.15914 0.13403 0.02560 0.00129 0.00049 0.01263 0.02151 + 0.42776 0.15346 0.12374 0.02463 0.00131 0.00061 0.01208 0.02027 + 0.41534 0.14796 0.11438 0.02370 0.00133 0.00071 0.01155 0.01912 + 0.40526 0.14355 0.10731 0.02295 0.00133 0.00078 0.01114 0.01823 + 0.39332 0.13839 0.09951 0.02207 0.00134 0.00085 0.01065 0.01722 + 0.38302 0.13399 0.09322 0.02133 0.00133 0.00091 0.01025 0.01638 + 0.37379 0.13009 0.08792 0.02067 0.00133 0.00095 0.00989 0.01566 + 0.36236 0.12531 0.08177 0.01986 0.00132 0.00100 0.00946 0.01480 + 0.35190 0.12098 0.07650 0.01913 0.00131 0.00104 0.00907 0.01404 + 0.34235 0.11707 0.07197 0.01848 0.00129 0.00106 0.00873 0.01337 + 0.33304 0.11329 0.06780 0.01784 0.00127 0.00109 0.00840 0.01274 + 0.32415 0.10972 0.06403 0.01724 0.00126 0.00110 0.00808 0.01216 + 0.31594 0.10644 0.06072 0.01669 0.00124 0.00112 0.00780 0.01163 + 0.30838 0.10345 0.05780 0.01619 0.00122 0.00113 0.00755 0.01116 + 0.30095 0.10053 0.05506 0.01571 0.00120 0.00113 0.00730 0.01071 + 0.29381 0.09774 0.05252 0.01524 0.00119 0.00114 0.00706 0.01029 + 0.28717 0.09516 0.05026 0.01481 0.00117 0.00114 0.00685 0.00990 + 0.28101 0.09278 0.04823 0.01442 0.00115 0.00114 0.00665 0.00955 + 0.27492 0.09045 0.04629 0.01403 0.00113 0.00114 0.00645 0.00921 + 0.26904 0.08820 0.04448 0.01366 0.00111 0.00113 0.00627 0.00889 + 0.26354 0.08611 0.04284 0.01332 0.00110 0.00113 0.00610 0.00860 + 0.25841 0.08418 0.04135 0.01300 0.00108 0.00112 0.00594 0.00833 + 0.25332 0.08226 0.03991 0.01268 0.00106 0.00112 0.00579 0.00807 + 0.58420 0.22645 0.28636 0.03561 0.00000 0.00000 0.01771 0.03471 + 0.57360 0.22077 0.26561 0.03476 0.00000 0.00000 0.01720 0.03317 + 0.55733 0.21221 0.23814 0.03343 0.00000 0.00000 0.01640 0.03090 + 0.54514 0.20592 0.21952 0.03244 0.00015 0.00000 0.01581 0.02927 + 0.53212 0.19931 0.20178 0.03138 0.00030 0.00000 0.01518 0.02760 + 0.52077 0.19365 0.18788 0.03045 0.00041 0.00000 0.01464 0.02621 + 0.50984 0.18827 0.17566 0.02957 0.00050 0.00000 0.01412 0.02493 + 0.49822 0.18264 0.16376 0.02865 0.00058 0.00000 0.01359 0.02363 + 0.48814 0.17783 0.15423 0.02785 0.00064 0.00000 0.01314 0.02255 + 0.47846 0.17327 0.14569 0.02709 0.00069 0.00000 0.01271 0.02155 + 0.47084 0.16972 0.13936 0.02650 0.00072 0.00000 0.01238 0.02079 + 0.45477 0.16234 0.12697 0.02528 0.00078 0.00000 0.01170 0.01927 + 0.44118 0.15622 0.11698 0.02426 0.00082 0.00013 0.01115 0.01806 + 0.42634 0.14966 0.10694 0.02317 0.00085 0.00026 0.01057 0.01682 + 0.41137 0.14315 0.09767 0.02209 0.00087 0.00038 0.01001 0.01564 + 0.39821 0.13751 0.09016 0.02116 0.00089 0.00046 0.00953 0.01467 + 0.38532 0.13208 0.08334 0.02027 0.00090 0.00054 0.00908 0.01377 + 0.37493 0.12776 0.07820 0.01956 0.00090 0.00060 0.00872 0.01307 + 0.36269 0.12273 0.07252 0.01873 0.00090 0.00066 0.00831 0.01229 + 0.35218 0.11846 0.06795 0.01804 0.00090 0.00070 0.00797 0.01164 + 0.34281 0.11469 0.06410 0.01742 0.00090 0.00073 0.00767 0.01109 + 0.33127 0.11010 0.05962 0.01668 0.00089 0.00077 0.00731 0.01043 + 0.32077 0.10597 0.05579 0.01601 0.00088 0.00080 0.00699 0.00986 + 0.31122 0.10224 0.05249 0.01541 0.00087 0.00082 0.00670 0.00936 + 0.30194 0.09866 0.04946 0.01483 0.00086 0.00084 0.00643 0.00888 + 0.29313 0.09529 0.04671 0.01429 0.00085 0.00085 0.00617 0.00845 + 0.28502 0.09220 0.04429 0.01379 0.00083 0.00086 0.00594 0.00806 + 0.27758 0.08940 0.04216 0.01334 0.00082 0.00087 0.00573 0.00771 + 0.27029 0.08667 0.04016 0.01291 0.00081 0.00087 0.00553 0.00738 + 0.26331 0.08407 0.03831 0.01249 0.00080 0.00087 0.00534 0.00707 + 0.25683 0.08167 0.03665 0.01211 0.00078 0.00087 0.00517 0.00679 + 0.25085 0.07947 0.03517 0.01176 0.00077 0.00087 0.00501 0.00653 + 0.24495 0.07732 0.03375 0.01142 0.00076 0.00087 0.00485 0.00629 + 0.23926 0.07525 0.03242 0.01109 0.00075 0.00087 0.00471 0.00605 + 0.23396 0.07333 0.03121 0.01079 0.00073 0.00087 0.00457 0.00584 + 0.22903 0.07155 0.03012 0.01051 0.00072 0.00086 0.00444 0.00565 + 0.22415 0.06980 0.02906 0.01024 0.00071 0.00086 0.00432 0.00546 + 0.56651 0.21215 0.20976 0.03262 0.00000 0.00000 0.01491 0.02666 + 0.55458 0.20615 0.19417 0.03169 0.00000 0.00000 0.01441 0.02535 + 0.53644 0.19717 0.17367 0.03027 0.00000 0.00000 0.01364 0.02344 + 0.52295 0.19062 0.15989 0.02921 0.00010 0.00000 0.01308 0.02208 + 0.50863 0.18377 0.14681 0.02810 0.00020 0.00000 0.01249 0.02070 + 0.49625 0.17794 0.13661 0.02716 0.00028 0.00000 0.01200 0.01956 + 0.48439 0.17243 0.12767 0.02626 0.00034 0.00000 0.01153 0.01851 + 0.47187 0.16669 0.11898 0.02532 0.00039 0.00000 0.01104 0.01745 + 0.46108 0.16181 0.11205 0.02452 0.00043 0.00000 0.01063 0.01658 + 0.45076 0.15720 0.10585 0.02377 0.00046 0.00000 0.01025 0.01578 + 0.44268 0.15363 0.10125 0.02318 0.00049 0.00000 0.00996 0.01517 + 0.42574 0.14626 0.09228 0.02198 0.00053 0.00000 0.00937 0.01396 + 0.41153 0.14018 0.08505 0.02099 0.00055 0.00010 0.00888 0.01301 + 0.39613 0.13371 0.07779 0.01994 0.00057 0.00020 0.00838 0.01204 + 0.38071 0.12734 0.07109 0.01891 0.00059 0.00030 0.00790 0.01113 + 0.36724 0.12186 0.06567 0.01803 0.00060 0.00037 0.00749 0.01039 + 0.35414 0.11661 0.06075 0.01719 0.00061 0.00043 0.00710 0.00970 + 0.34363 0.11246 0.05703 0.01653 0.00061 0.00047 0.00680 0.00917 + 0.33132 0.10764 0.05292 0.01576 0.00061 0.00052 0.00646 0.00858 + 0.32082 0.10358 0.04962 0.01512 0.00061 0.00055 0.00617 0.00810 + 0.31148 0.10001 0.04683 0.01456 0.00060 0.00058 0.00592 0.00769 + 0.30004 0.09568 0.04358 0.01388 0.00060 0.00061 0.00562 0.00720 + 0.28968 0.09180 0.04080 0.01327 0.00059 0.00063 0.00536 0.00678 + 0.28030 0.08832 0.03840 0.01273 0.00059 0.00065 0.00513 0.00641 + 0.27122 0.08498 0.03619 0.01221 0.00058 0.00066 0.00490 0.00607 + 0.26264 0.08185 0.03418 0.01173 0.00057 0.00067 0.00470 0.00575 + 0.25476 0.07900 0.03242 0.01129 0.00056 0.00068 0.00451 0.00547 + 0.24756 0.07641 0.03086 0.01089 0.00055 0.00069 0.00434 0.00522 + 0.24053 0.07391 0.02939 0.01050 0.00054 0.00069 0.00418 0.00498 + 0.23382 0.07153 0.02803 0.01014 0.00054 0.00069 0.00403 0.00476 + 0.22761 0.06934 0.02681 0.00981 0.00053 0.00069 0.00389 0.00456 + 0.22189 0.06734 0.02572 0.00950 0.00052 0.00069 0.00376 0.00438 + 0.21626 0.06538 0.02468 0.00921 0.00051 0.00069 0.00364 0.00421 + 0.21085 0.06351 0.02370 0.00892 0.00050 0.00069 0.00352 0.00404 + 0.20582 0.06177 0.02281 0.00866 0.00049 0.00068 0.00341 0.00389 + 0.20115 0.06017 0.02200 0.00842 0.00049 0.00068 0.00331 0.00376 + 0.19654 0.05860 0.02122 0.00818 0.00048 0.00068 0.00322 0.00362 + 0.54452 0.19663 0.15124 0.02959 0.00000 0.00000 0.01245 0.01998 + 0.53148 0.19045 0.13989 0.02860 0.00000 0.00000 0.01198 0.01891 + 0.51177 0.18125 0.12505 0.02713 0.00000 0.00000 0.01127 0.01736 + 0.49722 0.17457 0.11512 0.02605 0.00007 0.00000 0.01075 0.01626 + 0.48188 0.16764 0.10573 0.02492 0.00014 0.00000 0.01022 0.01516 + 0.46869 0.16175 0.09843 0.02397 0.00019 0.00000 0.00977 0.01425 + 0.45612 0.15622 0.09204 0.02308 0.00023 0.00000 0.00935 0.01342 + 0.44293 0.15050 0.08585 0.02215 0.00026 0.00000 0.00892 0.01259 + 0.43162 0.14565 0.08091 0.02136 0.00029 0.00000 0.00856 0.01190 + 0.42086 0.14109 0.07649 0.02063 0.00031 0.00000 0.00822 0.01128 + 0.41246 0.13757 0.07322 0.02006 0.00033 0.00000 0.00797 0.01081 + 0.39497 0.13034 0.06683 0.01891 0.00035 0.00000 0.00745 0.00988 + 0.38040 0.12443 0.06167 0.01796 0.00037 0.00008 0.00704 0.00916 + 0.36472 0.11817 0.05649 0.01697 0.00039 0.00017 0.00661 0.00842 + 0.34913 0.11204 0.05171 0.01601 0.00040 0.00024 0.00619 0.00774 + 0.33560 0.10682 0.04782 0.01519 0.00040 0.00030 0.00585 0.00718 + 0.32252 0.10183 0.04429 0.01442 0.00041 0.00035 0.00553 0.00668 + 0.31208 0.09791 0.04162 0.01381 0.00041 0.00039 0.00527 0.00629 + 0.29992 0.09338 0.03866 0.01311 0.00041 0.00042 0.00499 0.00586 + 0.28958 0.08959 0.03628 0.01253 0.00041 0.00045 0.00475 0.00551 + 0.28044 0.08626 0.03426 0.01203 0.00041 0.00047 0.00455 0.00521 + 0.26928 0.08224 0.03191 0.01142 0.00040 0.00050 0.00431 0.00486 + 0.25922 0.07866 0.02988 0.01088 0.00040 0.00051 0.00409 0.00456 + 0.25015 0.07546 0.02814 0.01040 0.00040 0.00053 0.00390 0.00430 + 0.24141 0.07240 0.02652 0.00994 0.00039 0.00054 0.00372 0.00406 + 0.23318 0.06954 0.02506 0.00951 0.00039 0.00055 0.00355 0.00383 + 0.22565 0.06695 0.02376 0.00913 0.00038 0.00055 0.00341 0.00364 + 0.21878 0.06461 0.02262 0.00878 0.00037 0.00056 0.00327 0.00346 + 0.21211 0.06234 0.02154 0.00845 0.00037 0.00056 0.00314 0.00329 + 0.20574 0.06020 0.02054 0.00814 0.00036 0.00056 0.00302 0.00314 + 0.19988 0.05824 0.01964 0.00785 0.00036 0.00056 0.00291 0.00300 + 0.19449 0.05644 0.01884 0.00759 0.00035 0.00056 0.00281 0.00288 + 0.18920 0.05469 0.01807 0.00733 0.00035 0.00056 0.00271 0.00276 + 0.18413 0.05302 0.01734 0.00709 0.00034 0.00056 0.00262 0.00264 + 0.17942 0.05148 0.01668 0.00687 0.00033 0.00055 0.00254 0.00254 + 0.17507 0.05006 0.01609 0.00666 0.00033 0.00055 0.00246 0.00245 + 0.17077 0.04867 0.01551 0.00646 0.00032 0.00055 0.00238 0.00236 + 0.51892 0.18032 0.10730 0.02649 0.00000 0.00000 0.01031 0.01459 + 0.50499 0.17409 0.09931 0.02549 0.00000 0.00000 0.00987 0.01374 + 0.48405 0.16485 0.08891 0.02401 0.00000 0.00000 0.00923 0.01253 + 0.46869 0.15818 0.08197 0.02293 0.00005 0.00000 0.00876 0.01167 + 0.45259 0.15129 0.07542 0.02183 0.00009 0.00000 0.00829 0.01082 + 0.43881 0.14547 0.07033 0.02089 0.00013 0.00000 0.00789 0.01012 + 0.42576 0.14003 0.06588 0.02002 0.00015 0.00000 0.00752 0.00948 + 0.41212 0.13442 0.06157 0.01913 0.00018 0.00000 0.00715 0.00885 + 0.40049 0.12969 0.05812 0.01838 0.00020 0.00000 0.00684 0.00833 + 0.38947 0.12526 0.05504 0.01768 0.00021 0.00000 0.00655 0.00786 + 0.38091 0.12185 0.05275 0.01714 0.00022 0.00000 0.00633 0.00751 + 0.36316 0.11489 0.04827 0.01605 0.00024 0.00000 0.00589 0.00682 + 0.34848 0.10923 0.04464 0.01517 0.00025 0.00007 0.00553 0.00628 + 0.33279 0.10328 0.04099 0.01425 0.00026 0.00014 0.00517 0.00575 + 0.31728 0.09750 0.03759 0.01337 0.00027 0.00020 0.00483 0.00525 + 0.30391 0.09259 0.03483 0.01263 0.00027 0.00025 0.00454 0.00485 + 0.29105 0.08794 0.03231 0.01193 0.00028 0.00029 0.00427 0.00448 + 0.28084 0.08429 0.03040 0.01138 0.00028 0.00032 0.00406 0.00421 + 0.26900 0.08011 0.02828 0.01076 0.00028 0.00035 0.00383 0.00390 + 0.25899 0.07662 0.02656 0.01024 0.00028 0.00038 0.00364 0.00366 + 0.25017 0.07357 0.02510 0.00980 0.00028 0.00040 0.00347 0.00345 + 0.23946 0.06990 0.02339 0.00926 0.00027 0.00042 0.00328 0.00321 + 0.22983 0.06665 0.02192 0.00879 0.00027 0.00043 0.00310 0.00300 + 0.22119 0.06375 0.02064 0.00837 0.00027 0.00044 0.00295 0.00282 + 0.21290 0.06100 0.01946 0.00798 0.00026 0.00045 0.00281 0.00265 + 0.20511 0.05843 0.01839 0.00761 0.00026 0.00045 0.00267 0.00250 + 0.19802 0.05611 0.01743 0.00728 0.00026 0.00046 0.00255 0.00236 + 0.19157 0.05402 0.01659 0.00699 0.00025 0.00046 0.00245 0.00224 + 0.18531 0.05200 0.01580 0.00670 0.00025 0.00046 0.00235 0.00213 + 0.17937 0.05010 0.01506 0.00644 0.00025 0.00046 0.00225 0.00203 + 0.17391 0.04836 0.01439 0.00619 0.00024 0.00046 0.00216 0.00193 + 0.16890 0.04678 0.01380 0.00597 0.00024 0.00046 0.00209 0.00185 + 0.16400 0.04524 0.01322 0.00576 0.00023 0.00046 0.00201 0.00177 + 0.15931 0.04377 0.01269 0.00556 0.00023 0.00046 0.00194 0.00169 + 0.15497 0.04242 0.01220 0.00537 0.00023 0.00046 0.00187 0.00163 + 0.15096 0.04118 0.01175 0.00520 0.00022 0.00045 0.00181 0.00156 + 0.14702 0.03996 0.01132 0.00503 0.00022 0.00045 0.00175 0.00150 + 0.49034 0.16360 0.07487 0.02337 0.00000 0.00000 0.00846 0.01035 + 0.47575 0.15743 0.06946 0.02238 0.00000 0.00000 0.00806 0.00971 + 0.45393 0.14833 0.06245 0.02093 0.00000 0.00000 0.00749 0.00879 + 0.43802 0.14179 0.05776 0.01990 0.00003 0.00000 0.00708 0.00815 + 0.42141 0.13506 0.05333 0.01883 0.00006 0.00000 0.00667 0.00751 + 0.40729 0.12941 0.04989 0.01794 0.00008 0.00000 0.00632 0.00699 + 0.39396 0.12415 0.04687 0.01712 0.00010 0.00000 0.00601 0.00652 + 0.38010 0.11874 0.04394 0.01628 0.00012 0.00000 0.00568 0.00605 + 0.36833 0.11421 0.04159 0.01557 0.00013 0.00000 0.00542 0.00568 + 0.35724 0.10998 0.03947 0.01492 0.00014 0.00000 0.00517 0.00533 + 0.34864 0.10674 0.03790 0.01443 0.00015 0.00000 0.00498 0.00508 + 0.33093 0.10015 0.03481 0.01342 0.00016 0.00000 0.00461 0.00458 + 0.31636 0.09482 0.03229 0.01262 0.00017 0.00006 0.00432 0.00420 + 0.30089 0.08926 0.02973 0.01179 0.00018 0.00012 0.00401 0.00382 + 0.28570 0.08389 0.02734 0.01100 0.00018 0.00018 0.00373 0.00347 + 0.27268 0.07935 0.02539 0.01033 0.00018 0.00022 0.00349 0.00319 + 0.26023 0.07508 0.02359 0.00971 0.00019 0.00025 0.00327 0.00293 + 0.25039 0.07174 0.02222 0.00923 0.00019 0.00028 0.00311 0.00274 + 0.23903 0.06794 0.02070 0.00869 0.00019 0.00030 0.00292 0.00254 + 0.22947 0.06477 0.01945 0.00824 0.00019 0.00032 0.00276 0.00237 + 0.22109 0.06202 0.01840 0.00786 0.00019 0.00034 0.00263 0.00223 + 0.21094 0.05873 0.01715 0.00740 0.00019 0.00035 0.00247 0.00206 + 0.20186 0.05582 0.01608 0.00699 0.00018 0.00037 0.00233 0.00192 + 0.19374 0.05324 0.01515 0.00664 0.00018 0.00037 0.00221 0.00180 + 0.18599 0.05079 0.01428 0.00630 0.00018 0.00038 0.00210 0.00169 + 0.17872 0.04852 0.01349 0.00599 0.00018 0.00039 0.00199 0.00159 + 0.17212 0.04648 0.01278 0.00572 0.00018 0.00039 0.00190 0.00150 + 0.16615 0.04464 0.01216 0.00547 0.00017 0.00039 0.00182 0.00142 + 0.16037 0.04287 0.01157 0.00523 0.00017 0.00039 0.00174 0.00135 + 0.15489 0.04121 0.01102 0.00501 0.00017 0.00039 0.00166 0.00128 + 0.14987 0.03970 0.01053 0.00481 0.00016 0.00039 0.00160 0.00122 + 0.14528 0.03832 0.01009 0.00463 0.00016 0.00039 0.00154 0.00116 + 0.14080 0.03698 0.00966 0.00445 0.00016 0.00039 0.00148 0.00111 + 0.13652 0.03572 0.00926 0.00428 0.00016 0.00038 0.00142 0.00106 + 0.13257 0.03455 0.00890 0.00413 0.00015 0.00038 0.00137 0.00102 + 0.12893 0.03348 0.00857 0.00399 0.00015 0.00038 0.00132 0.00098 + 0.12535 0.03244 0.00825 0.00386 0.00015 0.00037 0.00128 0.00094 + 0.45943 0.14682 0.05133 0.02027 0.00000 0.00000 0.00686 0.00712 + 0.44440 0.14082 0.04785 0.01933 0.00000 0.00000 0.00652 0.00665 + 0.42205 0.13201 0.04333 0.01796 0.00000 0.00000 0.00602 0.00598 + 0.40583 0.12571 0.04029 0.01698 0.00002 0.00000 0.00567 0.00552 + 0.38899 0.11926 0.03741 0.01598 0.00004 0.00000 0.00531 0.00506 + 0.37473 0.11386 0.03515 0.01516 0.00006 0.00000 0.00502 0.00468 + 0.36134 0.10885 0.03316 0.01440 0.00007 0.00000 0.00475 0.00435 + 0.34747 0.10373 0.03122 0.01362 0.00008 0.00000 0.00448 0.00402 + 0.33575 0.09945 0.02965 0.01298 0.00009 0.00000 0.00425 0.00375 + 0.32474 0.09548 0.02823 0.01239 0.00009 0.00000 0.00405 0.00351 + 0.31625 0.09245 0.02717 0.01194 0.00010 0.00000 0.00389 0.00334 + 0.29882 0.08631 0.02507 0.01104 0.00011 0.00000 0.00358 0.00299 + 0.28458 0.08138 0.02333 0.01032 0.00011 0.00005 0.00334 0.00273 + 0.26955 0.07625 0.02155 0.00959 0.00012 0.00011 0.00309 0.00246 + 0.25488 0.07134 0.01988 0.00889 0.00012 0.00015 0.00285 0.00223 + 0.24237 0.06721 0.01850 0.00831 0.00012 0.00019 0.00266 0.00204 + 0.23048 0.06335 0.01722 0.00778 0.00013 0.00022 0.00249 0.00187 + 0.22113 0.06035 0.01624 0.00736 0.00013 0.00024 0.00235 0.00174 + 0.21039 0.05694 0.01514 0.00690 0.00013 0.00026 0.00220 0.00161 + 0.20138 0.05411 0.01424 0.00652 0.00013 0.00028 0.00208 0.00150 + 0.19351 0.05167 0.01347 0.00619 0.00013 0.00029 0.00197 0.00140 + 0.18403 0.04876 0.01257 0.00581 0.00013 0.00031 0.00185 0.00130 + 0.17558 0.04619 0.01178 0.00547 0.00013 0.00032 0.00174 0.00120 + 0.16806 0.04393 0.01110 0.00517 0.00012 0.00032 0.00164 0.00113 + 0.16089 0.04179 0.01046 0.00489 0.00012 0.00033 0.00155 0.00105 + 0.15421 0.03981 0.00987 0.00464 0.00012 0.00033 0.00147 0.00099 + 0.14816 0.03804 0.00935 0.00441 0.00012 0.00033 0.00140 0.00093 + 0.14269 0.03644 0.00889 0.00421 0.00012 0.00033 0.00134 0.00088 + 0.13742 0.03492 0.00845 0.00401 0.00012 0.00033 0.00128 0.00084 + 0.13244 0.03349 0.00805 0.00383 0.00011 0.00033 0.00122 0.00079 + 0.12788 0.03219 0.00768 0.00367 0.00011 0.00033 0.00117 0.00075 + 0.12373 0.03101 0.00735 0.00352 0.00011 0.00033 0.00112 0.00072 + 0.11969 0.02987 0.00703 0.00338 0.00011 0.00033 0.00107 0.00069 + 0.11583 0.02879 0.00674 0.00325 0.00011 0.00032 0.00103 0.00065 + 0.11228 0.02780 0.00647 0.00313 0.00010 0.00032 0.00099 0.00063 + 0.10902 0.02689 0.00622 0.00301 0.00010 0.00032 0.00096 0.00060 + 0.10582 0.02601 0.00598 0.00291 0.00010 0.00032 0.00092 0.00058 + 0.42675 0.13028 0.03459 0.01726 0.00000 0.00000 0.00551 0.00474 + 0.41152 0.12455 0.03249 0.01639 0.00000 0.00000 0.00522 0.00441 + 0.38897 0.11616 0.02975 0.01512 0.00000 0.00000 0.00479 0.00394 + 0.37269 0.11018 0.02787 0.01423 0.00001 0.00000 0.00449 0.00362 + 0.35587 0.10409 0.02608 0.01332 0.00003 0.00000 0.00419 0.00330 + 0.34169 0.09902 0.02466 0.01257 0.00004 0.00000 0.00394 0.00304 + 0.32842 0.09433 0.02339 0.01189 0.00005 0.00000 0.00372 0.00282 + 0.31475 0.08956 0.02213 0.01119 0.00005 0.00000 0.00349 0.00259 + 0.30323 0.08559 0.02111 0.01062 0.00006 0.00000 0.00330 0.00241 + 0.29247 0.08192 0.02018 0.01010 0.00006 0.00000 0.00313 0.00225 + 0.28419 0.07912 0.01947 0.00970 0.00007 0.00000 0.00300 0.00213 + 0.26728 0.07349 0.01806 0.00891 0.00007 0.00000 0.00275 0.00190 + 0.25355 0.06899 0.01686 0.00829 0.00008 0.00005 0.00255 0.00172 + 0.23914 0.06434 0.01563 0.00765 0.00008 0.00010 0.00235 0.00155 + 0.22516 0.05992 0.01446 0.00706 0.00008 0.00014 0.00216 0.00139 + 0.21332 0.05623 0.01348 0.00656 0.00008 0.00017 0.00201 0.00127 + 0.20212 0.05278 0.01257 0.00611 0.00009 0.00020 0.00187 0.00116 + 0.19335 0.05012 0.01187 0.00576 0.00009 0.00021 0.00176 0.00108 + 0.18332 0.04712 0.01107 0.00538 0.00009 0.00023 0.00164 0.00099 + 0.17495 0.04464 0.01042 0.00506 0.00009 0.00025 0.00154 0.00092 + 0.16767 0.04250 0.00986 0.00479 0.00009 0.00026 0.00146 0.00086 + 0.15892 0.03996 0.00919 0.00447 0.00009 0.00027 0.00137 0.00080 + 0.15117 0.03774 0.00861 0.00419 0.00009 0.00028 0.00128 0.00074 + 0.14428 0.03578 0.00811 0.00395 0.00008 0.00028 0.00121 0.00069 + 0.13775 0.03394 0.00764 0.00373 0.00008 0.00028 0.00114 0.00065 + 0.13168 0.03224 0.00720 0.00352 0.00008 0.00029 0.00108 0.00061 + 0.12620 0.03073 0.00682 0.00334 0.00008 0.00029 0.00102 0.00057 + 0.12127 0.02937 0.00648 0.00318 0.00008 0.00029 0.00097 0.00054 + 0.11652 0.02807 0.00615 0.00302 0.00008 0.00029 0.00093 0.00051 + 0.11205 0.02686 0.00585 0.00288 0.00008 0.00029 0.00088 0.00048 + 0.10797 0.02576 0.00558 0.00275 0.00008 0.00028 0.00084 0.00046 + 0.10427 0.02477 0.00533 0.00263 0.00008 0.00028 0.00081 0.00044 + 0.10066 0.02381 0.00510 0.00252 0.00007 0.00028 0.00077 0.00042 + 0.09724 0.02290 0.00488 0.00242 0.00007 0.00028 0.00074 0.00040 + 0.09409 0.02207 0.00468 0.00232 0.00007 0.00027 0.00071 0.00038 + 0.09120 0.02131 0.00449 0.00223 0.00007 0.00027 0.00069 0.00037 + 0.08837 0.02058 0.00432 0.00215 0.00007 0.00027 0.00066 0.00035 + 0.39287 0.11426 0.02289 0.01442 0.00000 0.00000 0.00437 0.00305 + 0.37768 0.10886 0.02175 0.01363 0.00000 0.00000 0.00412 0.00282 + 0.35526 0.10100 0.02022 0.01249 0.00000 0.00000 0.00377 0.00251 + 0.33916 0.09543 0.01914 0.01169 0.00001 0.00000 0.00352 0.00229 + 0.32258 0.08977 0.01808 0.01089 0.00002 0.00000 0.00327 0.00208 + 0.30867 0.08508 0.01723 0.01023 0.00002 0.00000 0.00306 0.00191 + 0.29571 0.08076 0.01645 0.00963 0.00003 0.00000 0.00287 0.00176 + 0.28241 0.07638 0.01567 0.00902 0.00004 0.00000 0.00269 0.00162 + 0.27126 0.07275 0.01501 0.00852 0.00004 0.00000 0.00253 0.00150 + 0.26087 0.06941 0.01441 0.00807 0.00004 0.00000 0.00240 0.00139 + 0.25291 0.06687 0.01395 0.00773 0.00004 0.00000 0.00229 0.00132 + 0.23673 0.06178 0.01300 0.00705 0.00005 0.00000 0.00209 0.00117 + 0.22367 0.05775 0.01219 0.00652 0.00005 0.00004 0.00193 0.00106 + 0.21004 0.05360 0.01133 0.00599 0.00005 0.00009 0.00177 0.00095 + 0.19690 0.04968 0.01051 0.00549 0.00006 0.00012 0.00162 0.00085 + 0.18583 0.04642 0.00982 0.00508 0.00006 0.00015 0.00150 0.00077 + 0.17542 0.04341 0.00916 0.00470 0.00006 0.00018 0.00139 0.00071 + 0.16730 0.04109 0.00865 0.00442 0.00006 0.00019 0.00130 0.00066 + 0.15806 0.03847 0.00808 0.00410 0.00006 0.00021 0.00121 0.00060 + 0.15039 0.03633 0.00760 0.00385 0.00006 0.00022 0.00113 0.00056 + 0.14373 0.03449 0.00719 0.00363 0.00006 0.00023 0.00107 0.00052 + 0.13577 0.03232 0.00670 0.00337 0.00006 0.00024 0.00100 0.00048 + 0.12875 0.03041 0.00627 0.00315 0.00006 0.00024 0.00093 0.00045 + 0.12253 0.02875 0.00590 0.00296 0.00006 0.00025 0.00088 0.00042 + 0.11666 0.02719 0.00555 0.00278 0.00006 0.00025 0.00082 0.00039 + 0.11122 0.02576 0.00523 0.00262 0.00006 0.00025 0.00078 0.00037 + 0.10632 0.02448 0.00494 0.00248 0.00006 0.00025 0.00074 0.00034 + 0.10193 0.02334 0.00469 0.00235 0.00006 0.00025 0.00070 0.00033 + 0.09771 0.02226 0.00445 0.00223 0.00005 0.00025 0.00066 0.00031 + 0.09375 0.02125 0.00422 0.00212 0.00005 0.00025 0.00063 0.00029 + 0.09015 0.02033 0.00402 0.00202 0.00005 0.00024 0.00060 0.00028 + 0.08688 0.01951 0.00384 0.00193 0.00005 0.00024 0.00058 0.00027 + 0.08372 0.01871 0.00367 0.00184 0.00005 0.00024 0.00055 0.00025 + 0.08071 0.01796 0.00350 0.00176 0.00005 0.00024 0.00053 0.00024 + 0.07796 0.01728 0.00335 0.00169 0.00005 0.00023 0.00051 0.00023 + 0.07543 0.01666 0.00322 0.00162 0.00005 0.00023 0.00049 0.00022 + 0.07297 0.01605 0.00309 0.00156 0.00005 0.00023 0.00047 0.00021 + 0.35835 0.09897 0.01487 0.01179 0.00000 0.00000 0.00342 0.00189 + 0.34339 0.09398 0.01435 0.01110 0.00000 0.00000 0.00322 0.00174 + 0.32142 0.08673 0.01362 0.01010 0.00000 0.00000 0.00292 0.00154 + 0.30570 0.08162 0.01307 0.00941 0.00001 0.00000 0.00272 0.00141 + 0.28960 0.07645 0.01249 0.00872 0.00001 0.00000 0.00251 0.00127 + 0.27614 0.07218 0.01201 0.00815 0.00002 0.00000 0.00234 0.00117 + 0.26365 0.06826 0.01155 0.00763 0.00002 0.00000 0.00219 0.00107 + 0.25089 0.06430 0.01108 0.00712 0.00002 0.00000 0.00204 0.00098 + 0.24024 0.06104 0.01067 0.00670 0.00003 0.00000 0.00192 0.00091 + 0.23034 0.05804 0.01028 0.00631 0.00003 0.00000 0.00181 0.00084 + 0.22279 0.05578 0.00998 0.00603 0.00003 0.00000 0.00173 0.00079 + 0.20751 0.05126 0.00935 0.00546 0.00003 0.00000 0.00156 0.00070 + 0.19525 0.04769 0.00880 0.00502 0.00004 0.00004 0.00144 0.00063 + 0.18252 0.04405 0.00821 0.00458 0.00004 0.00008 0.00131 0.00057 + 0.17033 0.04062 0.00762 0.00418 0.00004 0.00011 0.00119 0.00051 + 0.16013 0.03780 0.00713 0.00384 0.00004 0.00014 0.00110 0.00046 + 0.15057 0.03520 0.00666 0.00354 0.00004 0.00016 0.00101 0.00042 + 0.14316 0.03320 0.00629 0.00332 0.00004 0.00017 0.00095 0.00039 + 0.13476 0.03097 0.00587 0.00306 0.00004 0.00018 0.00088 0.00036 + 0.12782 0.02915 0.00552 0.00286 0.00004 0.00019 0.00082 0.00034 + 0.12182 0.02759 0.00521 0.00269 0.00004 0.00020 0.00077 0.00031 + 0.11468 0.02575 0.00485 0.00249 0.00004 0.00021 0.00072 0.00029 + 0.10839 0.02416 0.00454 0.00232 0.00004 0.00021 0.00067 0.00027 + 0.10286 0.02277 0.00426 0.00217 0.00004 0.00021 0.00063 0.00025 + 0.09765 0.02147 0.00400 0.00203 0.00004 0.00022 0.00059 0.00024 + 0.09284 0.02028 0.00377 0.00191 0.00004 0.00022 0.00055 0.00022 + 0.08853 0.01922 0.00355 0.00180 0.00004 0.00022 0.00052 0.00021 + 0.08466 0.01828 0.00337 0.00170 0.00004 0.00022 0.00049 0.00020 + 0.08097 0.01739 0.00319 0.00161 0.00004 0.00021 0.00047 0.00019 + 0.07751 0.01656 0.00302 0.00152 0.00004 0.00021 0.00045 0.00018 + 0.07437 0.01581 0.00287 0.00145 0.00004 0.00021 0.00042 0.00017 + 0.07153 0.01513 0.00274 0.00138 0.00004 0.00021 0.00040 0.00016 + 0.06879 0.01449 0.00261 0.00131 0.00004 0.00021 0.00039 0.00016 + 0.06619 0.01388 0.00249 0.00125 0.00004 0.00020 0.00037 0.00015 + 0.06381 0.01332 0.00238 0.00120 0.00003 0.00020 0.00035 0.00014 + 0.06164 0.01282 0.00228 0.00115 0.00003 0.00020 0.00034 0.00014 + 0.05952 0.01233 0.00219 0.00110 0.00003 0.00019 0.00033 0.00013 + 0.32365 0.08459 0.00950 0.00942 0.00000 0.00000 0.00264 0.00113 + 0.30912 0.08005 0.00937 0.00883 0.00000 0.00000 0.00247 0.00104 + 0.28788 0.07348 0.00913 0.00799 0.00000 0.00000 0.00223 0.00092 + 0.27275 0.06886 0.00890 0.00740 0.00000 0.00000 0.00207 0.00084 + 0.25732 0.06421 0.00862 0.00682 0.00001 0.00000 0.00190 0.00076 + 0.24447 0.06039 0.00837 0.00634 0.00001 0.00000 0.00177 0.00069 + 0.23260 0.05689 0.00812 0.00591 0.00001 0.00000 0.00165 0.00064 + 0.22052 0.05338 0.00784 0.00549 0.00002 0.00000 0.00153 0.00058 + 0.21047 0.05049 0.00759 0.00514 0.00002 0.00000 0.00143 0.00054 + 0.20118 0.04785 0.00734 0.00483 0.00002 0.00000 0.00135 0.00050 + 0.19410 0.04586 0.00715 0.00459 0.00002 0.00000 0.00128 0.00047 + 0.17986 0.04191 0.00673 0.00413 0.00002 0.00000 0.00115 0.00042 + 0.16851 0.03881 0.00635 0.00378 0.00002 0.00004 0.00105 0.00038 + 0.15679 0.03566 0.00593 0.00343 0.00003 0.00007 0.00096 0.00034 + 0.14564 0.03272 0.00552 0.00310 0.00003 0.00010 0.00087 0.00031 + 0.13635 0.03031 0.00516 0.00284 0.00003 0.00012 0.00080 0.00028 + 0.12771 0.02810 0.00482 0.00261 0.00003 0.00014 0.00073 0.00025 + 0.12103 0.02642 0.00455 0.00243 0.00003 0.00015 0.00068 0.00024 + 0.11350 0.02455 0.00424 0.00223 0.00003 0.00016 0.00063 0.00022 + 0.10731 0.02302 0.00398 0.00208 0.00003 0.00017 0.00059 0.00020 + 0.10198 0.02173 0.00376 0.00195 0.00003 0.00018 0.00055 0.00019 + 0.09565 0.02020 0.00349 0.00179 0.00003 0.00018 0.00051 0.00018 + 0.09012 0.01889 0.00326 0.00166 0.00003 0.00019 0.00047 0.00017 + 0.08526 0.01774 0.00306 0.00155 0.00003 0.00019 0.00044 0.00015 + 0.08070 0.01668 0.00286 0.00145 0.00003 0.00019 0.00041 0.00015 + 0.07651 0.01570 0.00269 0.00135 0.00003 0.00019 0.00039 0.00014 + 0.07276 0.01484 0.00253 0.00127 0.00003 0.00019 0.00037 0.00013 + 0.06942 0.01408 0.00239 0.00120 0.00003 0.00019 0.00035 0.00012 + 0.06623 0.01336 0.00226 0.00113 0.00003 0.00018 0.00033 0.00012 + 0.06325 0.01269 0.00214 0.00107 0.00003 0.00018 0.00031 0.00011 + 0.06056 0.01209 0.00203 0.00101 0.00003 0.00018 0.00029 0.00011 + 0.05812 0.01155 0.00194 0.00096 0.00003 0.00018 0.00028 0.00010 + 0.05578 0.01103 0.00184 0.00092 0.00003 0.00018 0.00027 0.00010 + 0.05356 0.01055 0.00175 0.00087 0.00003 0.00017 0.00026 0.00009 + 0.05154 0.01011 0.00167 0.00083 0.00003 0.00017 0.00024 0.00009 + 0.04969 0.00970 0.00160 0.00080 0.00002 0.00017 0.00023 0.00009 + 0.04790 0.00932 0.00153 0.00076 0.00002 0.00017 0.00022 0.00008 + 0.28925 0.07128 0.00597 0.00735 0.00000 0.00000 0.00200 0.00066 + 0.27534 0.06721 0.00605 0.00686 0.00000 0.00000 0.00187 0.00061 + 0.25509 0.06135 0.00610 0.00616 0.00000 0.00000 0.00168 0.00054 + 0.24073 0.05726 0.00605 0.00568 0.00000 0.00000 0.00155 0.00049 + 0.22614 0.05315 0.00595 0.00521 0.00001 0.00000 0.00142 0.00045 + 0.21404 0.04978 0.00584 0.00482 0.00001 0.00000 0.00131 0.00041 + 0.20291 0.04671 0.00570 0.00447 0.00001 0.00000 0.00122 0.00038 + 0.19162 0.04365 0.00555 0.00413 0.00001 0.00000 0.00113 0.00035 + 0.18227 0.04113 0.00539 0.00385 0.00001 0.00000 0.00105 0.00032 + 0.17366 0.03884 0.00524 0.00360 0.00001 0.00000 0.00098 0.00030 + 0.16713 0.03712 0.00511 0.00341 0.00001 0.00000 0.00093 0.00028 + 0.15404 0.03373 0.00483 0.00305 0.00002 0.00000 0.00084 0.00025 + 0.14367 0.03108 0.00456 0.00277 0.00002 0.00003 0.00076 0.00023 + 0.13303 0.02841 0.00427 0.00250 0.00002 0.00007 0.00069 0.00021 + 0.12297 0.02593 0.00397 0.00225 0.00002 0.00009 0.00062 0.00019 + 0.11464 0.02391 0.00371 0.00205 0.00002 0.00011 0.00057 0.00017 + 0.10692 0.02207 0.00346 0.00187 0.00002 0.00013 0.00052 0.00016 + 0.10100 0.02068 0.00326 0.00173 0.00002 0.00014 0.00048 0.00015 + 0.09435 0.01913 0.00304 0.00159 0.00002 0.00015 0.00044 0.00014 + 0.08890 0.01788 0.00285 0.00147 0.00002 0.00015 0.00041 0.00013 + 0.08423 0.01682 0.00268 0.00137 0.00002 0.00016 0.00038 0.00012 + 0.07872 0.01558 0.00249 0.00126 0.00002 0.00016 0.00035 0.00011 + 0.07391 0.01451 0.00232 0.00116 0.00002 0.00016 0.00033 0.00011 + 0.06971 0.01358 0.00217 0.00108 0.00002 0.00016 0.00031 0.00010 + 0.06578 0.01273 0.00203 0.00101 0.00002 0.00016 0.00029 0.00009 + 0.06218 0.01195 0.00190 0.00094 0.00002 0.00016 0.00027 0.00009 + 0.05897 0.01126 0.00178 0.00088 0.00002 0.00016 0.00025 0.00008 + 0.05612 0.01066 0.00168 0.00083 0.00002 0.00016 0.00024 0.00008 + 0.05341 0.01008 0.00159 0.00078 0.00002 0.00016 0.00022 0.00008 + 0.05088 0.00956 0.00150 0.00073 0.00002 0.00016 0.00021 0.00007 + 0.04860 0.00908 0.00142 0.00069 0.00002 0.00015 0.00020 0.00007 + 0.04655 0.00866 0.00135 0.00066 0.00002 0.00015 0.00019 0.00007 + 0.04458 0.00825 0.00128 0.00062 0.00002 0.00015 0.00018 0.00007 + 0.04272 0.00787 0.00122 0.00059 0.00002 0.00015 0.00017 0.00006 + 0.04102 0.00752 0.00116 0.00056 0.00002 0.00014 0.00017 0.00006 + 0.03948 0.00721 0.00111 0.00054 0.00002 0.00014 0.00016 0.00006 + 0.03799 0.00691 0.00106 0.00052 0.00002 0.00014 0.00015 0.00006 + 0.25559 0.05913 0.00369 0.00558 0.00000 0.00000 0.00149 0.00039 + 0.24246 0.05556 0.00388 0.00519 0.00000 0.00000 0.00139 0.00036 + 0.22342 0.05043 0.00406 0.00463 0.00000 0.00000 0.00124 0.00032 + 0.20998 0.04686 0.00411 0.00425 0.00000 0.00000 0.00114 0.00030 + 0.19637 0.04329 0.00411 0.00387 0.00000 0.00000 0.00104 0.00027 + 0.18514 0.04038 0.00407 0.00357 0.00000 0.00000 0.00096 0.00025 + 0.17485 0.03774 0.00401 0.00329 0.00001 0.00000 0.00089 0.00023 + 0.16445 0.03510 0.00392 0.00302 0.00001 0.00000 0.00081 0.00021 + 0.15588 0.03295 0.00382 0.00281 0.00001 0.00000 0.00076 0.00020 + 0.14802 0.03101 0.00372 0.00261 0.00001 0.00000 0.00071 0.00019 + 0.14207 0.02955 0.00364 0.00247 0.00001 0.00000 0.00067 0.00018 + 0.13021 0.02668 0.00344 0.00219 0.00001 0.00000 0.00059 0.00016 + 0.12087 0.02446 0.00326 0.00198 0.00001 0.00003 0.00054 0.00015 + 0.11135 0.02224 0.00305 0.00177 0.00001 0.00006 0.00048 0.00013 + 0.10240 0.02018 0.00283 0.00158 0.00001 0.00008 0.00043 0.00012 + 0.09504 0.01852 0.00264 0.00144 0.00001 0.00010 0.00039 0.00011 + 0.08826 0.01702 0.00246 0.00130 0.00001 0.00011 0.00036 0.00010 + 0.08309 0.01588 0.00232 0.00120 0.00001 0.00012 0.00033 0.00010 + 0.07730 0.01463 0.00215 0.00110 0.00001 0.00013 0.00030 0.00009 + 0.07258 0.01362 0.00201 0.00101 0.00001 0.00013 0.00028 0.00009 + 0.06855 0.01277 0.00189 0.00094 0.00001 0.00014 0.00026 0.00008 + 0.06382 0.01178 0.00175 0.00086 0.00001 0.00014 0.00024 0.00008 + 0.05971 0.01093 0.00162 0.00079 0.00001 0.00014 0.00022 0.00007 + 0.05614 0.01020 0.00151 0.00073 0.00001 0.00014 0.00021 0.00007 + 0.05280 0.00953 0.00141 0.00068 0.00001 0.00014 0.00019 0.00006 + 0.04976 0.00892 0.00132 0.00063 0.00001 0.00014 0.00018 0.00006 + 0.04706 0.00838 0.00124 0.00059 0.00001 0.00014 0.00017 0.00006 + 0.04467 0.00791 0.00116 0.00055 0.00001 0.00014 0.00016 0.00006 + 0.04240 0.00746 0.00110 0.00052 0.00001 0.00013 0.00015 0.00005 + 0.04029 0.00705 0.00103 0.00049 0.00001 0.00013 0.00014 0.00005 + 0.03840 0.00668 0.00098 0.00046 0.00001 0.00013 0.00014 0.00005 + 0.03669 0.00636 0.00093 0.00044 0.00001 0.00013 0.00013 0.00005 + 0.03506 0.00604 0.00088 0.00041 0.00001 0.00013 0.00012 0.00005 + 0.03352 0.00575 0.00083 0.00039 0.00001 0.00012 0.00012 0.00004 + 0.03213 0.00549 0.00079 0.00037 0.00001 0.00012 0.00011 0.00004 + 0.03086 0.00525 0.00076 0.00036 0.00001 0.00012 0.00011 0.00004 + 0.02964 0.00502 0.00072 0.00034 0.00001 0.00012 0.00010 0.00004 + 0.19195 0.03857 0.00137 0.00294 0.00000 0.00000 0.00078 0.00017 + 0.18077 0.03596 0.00159 0.00271 0.00000 0.00000 0.00072 0.00016 + 0.16468 0.03226 0.00181 0.00239 0.00000 0.00000 0.00063 0.00014 + 0.15342 0.02970 0.00191 0.00217 0.00000 0.00000 0.00058 0.00013 + 0.14213 0.02716 0.00196 0.00195 0.00000 0.00000 0.00052 0.00012 + 0.13288 0.02511 0.00197 0.00178 0.00000 0.00000 0.00048 0.00012 + 0.12447 0.02326 0.00196 0.00163 0.00000 0.00000 0.00044 0.00011 + 0.11605 0.02144 0.00193 0.00148 0.00000 0.00000 0.00040 0.00010 + 0.10917 0.01996 0.00189 0.00136 0.00000 0.00000 0.00037 0.00010 + 0.10290 0.01863 0.00185 0.00126 0.00000 0.00000 0.00034 0.00009 + 0.09820 0.01765 0.00181 0.00118 0.00000 0.00000 0.00032 0.00009 + 0.08891 0.01573 0.00171 0.00103 0.00001 0.00000 0.00028 0.00008 + 0.08170 0.01426 0.00162 0.00092 0.00001 0.00002 0.00025 0.00007 + 0.07443 0.01281 0.00150 0.00081 0.00001 0.00005 0.00022 0.00007 + 0.06770 0.01149 0.00139 0.00072 0.00001 0.00006 0.00020 0.00006 + 0.06223 0.01043 0.00129 0.00064 0.00001 0.00008 0.00018 0.00006 + 0.05725 0.00949 0.00119 0.00058 0.00001 0.00009 0.00016 0.00005 + 0.05349 0.00879 0.00112 0.00053 0.00001 0.00009 0.00015 0.00005 + 0.04933 0.00802 0.00103 0.00048 0.00001 0.00010 0.00014 0.00005 + 0.04597 0.00741 0.00096 0.00044 0.00001 0.00010 0.00013 0.00005 + 0.04313 0.00690 0.00090 0.00040 0.00001 0.00010 0.00012 0.00004 + 0.03982 0.00631 0.00082 0.00037 0.00001 0.00010 0.00011 0.00004 + 0.03698 0.00581 0.00076 0.00033 0.00001 0.00010 0.00010 0.00004 + 0.03452 0.00538 0.00070 0.00031 0.00001 0.00010 0.00009 0.00004 + 0.03226 0.00499 0.00065 0.00028 0.00001 0.00010 0.00008 0.00004 + 0.03020 0.00464 0.00060 0.00026 0.00001 0.00010 0.00008 0.00003 + 0.02839 0.00433 0.00056 0.00024 0.00001 0.00010 0.00007 0.00003 + 0.02679 0.00406 0.00053 0.00023 0.00001 0.00010 0.00007 0.00003 + 0.02529 0.00381 0.00049 0.00021 0.00001 0.00009 0.00007 0.00003 + 0.02391 0.00358 0.00046 0.00020 0.00001 0.00009 0.00006 0.00003 + 0.02267 0.00338 0.00044 0.00019 0.00001 0.00009 0.00006 0.00003 + 0.02156 0.00320 0.00041 0.00018 0.00001 0.00009 0.00006 0.00003 + 0.02050 0.00302 0.00039 0.00017 0.00001 0.00009 0.00005 0.00003 + 0.01951 0.00287 0.00037 0.00016 0.00001 0.00009 0.00005 0.00003 + 0.01862 0.00272 0.00035 0.00015 0.00001 0.00008 0.00005 0.00003 + 0.01781 0.00259 0.00033 0.00014 0.00001 0.00008 0.00005 0.00003 + 0.01704 0.00247 0.00031 0.00014 0.00001 0.00008 0.00005 0.00003 + 0.13540 0.02305 0.00051 0.00135 0.00000 0.00000 0.00036 0.00011 + 0.12650 0.02132 0.00066 0.00123 0.00000 0.00000 0.00033 0.00010 + 0.11381 0.01888 0.00081 0.00107 0.00000 0.00000 0.00029 0.00009 + 0.10501 0.01721 0.00087 0.00096 0.00000 0.00000 0.00026 0.00009 + 0.09626 0.01557 0.00091 0.00085 0.00000 0.00000 0.00023 0.00008 + 0.08916 0.01425 0.00093 0.00077 0.00000 0.00000 0.00021 0.00007 + 0.08276 0.01308 0.00093 0.00070 0.00000 0.00000 0.00019 0.00007 + 0.07641 0.01192 0.00091 0.00063 0.00000 0.00000 0.00017 0.00006 + 0.07126 0.01100 0.00089 0.00057 0.00000 0.00000 0.00016 0.00006 + 0.06661 0.01018 0.00087 0.00052 0.00000 0.00000 0.00015 0.00006 + 0.06315 0.00957 0.00085 0.00049 0.00000 0.00000 0.00014 0.00005 + 0.05640 0.00840 0.00080 0.00042 0.00000 0.00000 0.00012 0.00005 + 0.05122 0.00753 0.00075 0.00037 0.00000 0.00002 0.00011 0.00005 + 0.04608 0.00667 0.00069 0.00032 0.00000 0.00004 0.00009 0.00004 + 0.04138 0.00590 0.00063 0.00028 0.00000 0.00005 0.00008 0.00004 + 0.03762 0.00530 0.00058 0.00025 0.00000 0.00006 0.00007 0.00004 + 0.03425 0.00476 0.00053 0.00022 0.00000 0.00006 0.00007 0.00003 + 0.03173 0.00437 0.00049 0.00020 0.00001 0.00007 0.00006 0.00003 + 0.02897 0.00395 0.00045 0.00018 0.00001 0.00007 0.00006 0.00003 + 0.02677 0.00361 0.00042 0.00016 0.00001 0.00007 0.00005 0.00003 + 0.02493 0.00334 0.00039 0.00015 0.00001 0.00007 0.00005 0.00003 + 0.02281 0.00302 0.00035 0.00014 0.00001 0.00007 0.00004 0.00003 + 0.02100 0.00276 0.00032 0.00012 0.00001 0.00007 0.00004 0.00002 + 0.01945 0.00254 0.00029 0.00011 0.00001 0.00007 0.00004 0.00002 + 0.01804 0.00233 0.00027 0.00010 0.00001 0.00007 0.00004 0.00002 + 0.01677 0.00215 0.00025 0.00010 0.00001 0.00007 0.00003 0.00002 + 0.01566 0.00200 0.00023 0.00009 0.00001 0.00007 0.00003 0.00002 + 0.01468 0.00186 0.00022 0.00008 0.00001 0.00007 0.00003 0.00002 + 0.01378 0.00173 0.00020 0.00008 0.00001 0.00006 0.00003 0.00002 + 0.01294 0.00162 0.00019 0.00007 0.00001 0.00006 0.00003 0.00002 + 0.01220 0.00152 0.00018 0.00007 0.00001 0.00006 0.00003 0.00002 + 0.01155 0.00143 0.00016 0.00007 0.00001 0.00006 0.00003 0.00002 + 0.01092 0.00135 0.00015 0.00006 0.00001 0.00006 0.00003 0.00002 + 0.01034 0.00127 0.00015 0.00006 0.00001 0.00006 0.00002 0.00002 + 0.00982 0.00120 0.00014 0.00006 0.00001 0.00006 0.00002 0.00002 + 0.00935 0.00114 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.00891 0.00108 0.00012 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.08793 0.01227 0.00019 0.00051 0.00000 0.00000 0.00015 0.00007 + 0.08143 0.01125 0.00027 0.00047 0.00000 0.00000 0.00013 0.00007 + 0.07223 0.00981 0.00035 0.00040 0.00000 0.00000 0.00012 0.00006 + 0.06593 0.00885 0.00038 0.00035 0.00000 0.00000 0.00010 0.00006 + 0.05972 0.00790 0.00040 0.00031 0.00000 0.00000 0.00009 0.00005 + 0.05472 0.00716 0.00040 0.00028 0.00000 0.00000 0.00008 0.00005 + 0.05026 0.00650 0.00040 0.00025 0.00000 0.00000 0.00007 0.00004 + 0.04588 0.00585 0.00039 0.00022 0.00000 0.00000 0.00007 0.00004 + 0.04236 0.00534 0.00038 0.00020 0.00000 0.00000 0.00006 0.00004 + 0.03922 0.00489 0.00037 0.00018 0.00000 0.00000 0.00006 0.00003 + 0.03690 0.00456 0.00036 0.00017 0.00000 0.00000 0.00005 0.00003 + 0.03242 0.00394 0.00033 0.00014 0.00000 0.00000 0.00004 0.00003 + 0.02904 0.00348 0.00031 0.00012 0.00000 0.00001 0.00004 0.00003 + 0.02574 0.00303 0.00028 0.00011 0.00000 0.00003 0.00003 0.00002 + 0.02278 0.00264 0.00025 0.00009 0.00000 0.00003 0.00003 0.00002 + 0.02045 0.00234 0.00023 0.00008 0.00000 0.00004 0.00003 0.00002 + 0.01838 0.00207 0.00021 0.00007 0.00000 0.00004 0.00003 0.00002 + 0.01686 0.00188 0.00019 0.00007 0.00000 0.00004 0.00002 0.00002 + 0.01522 0.00168 0.00017 0.00006 0.00001 0.00005 0.00002 0.00002 + 0.01393 0.00152 0.00016 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.01286 0.00139 0.00014 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.01164 0.00125 0.00013 0.00005 0.00001 0.00005 0.00002 0.00002 + 0.01061 0.00113 0.00012 0.00004 0.00001 0.00005 0.00002 0.00002 + 0.00974 0.00103 0.00011 0.00004 0.00001 0.00005 0.00002 0.00002 + 0.00895 0.00094 0.00010 0.00004 0.00001 0.00004 0.00002 0.00002 + 0.00825 0.00086 0.00009 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00765 0.00079 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00712 0.00073 0.00008 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00663 0.00068 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00619 0.00063 0.00007 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00580 0.00058 0.00006 0.00003 0.00001 0.00004 0.00002 0.00001 + 0.00545 0.00055 0.00006 0.00003 0.00001 0.00004 0.00002 0.00002 + 0.00513 0.00051 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 + 0.00483 0.00048 0.00005 0.00003 0.00001 0.00004 0.00002 0.00002 + 0.00456 0.00045 0.00005 0.00002 0.00001 0.00004 0.00002 0.00002 + 0.00432 0.00042 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 + 0.00409 0.00040 0.00004 0.00002 0.00001 0.00004 0.00002 0.00002 + 0.05080 0.00554 0.00007 0.00015 0.00000 0.00000 0.00005 0.00004 + 0.04656 0.00502 0.00010 0.00014 0.00000 0.00000 0.00004 0.00004 + 0.04063 0.00431 0.00013 0.00012 0.00000 0.00000 0.00004 0.00003 + 0.03661 0.00384 0.00014 0.00010 0.00000 0.00000 0.00003 0.00003 + 0.03270 0.00338 0.00014 0.00009 0.00000 0.00000 0.00003 0.00003 + 0.02959 0.00302 0.00014 0.00008 0.00000 0.00000 0.00003 0.00002 + 0.02684 0.00271 0.00014 0.00007 0.00000 0.00000 0.00002 0.00002 + 0.02417 0.00240 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 + 0.02205 0.00217 0.00013 0.00006 0.00000 0.00000 0.00002 0.00002 + 0.02018 0.00196 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 + 0.01881 0.00181 0.00012 0.00005 0.00000 0.00000 0.00002 0.00002 + 0.01620 0.00153 0.00011 0.00004 0.00000 0.00000 0.00002 0.00001 + 0.01427 0.00133 0.00010 0.00003 0.00000 0.00001 0.00001 0.00001 + 0.01242 0.00114 0.00009 0.00003 0.00000 0.00002 0.00001 0.00001 + 0.01079 0.00097 0.00008 0.00003 0.00000 0.00002 0.00001 0.00001 + 0.00954 0.00084 0.00007 0.00002 0.00000 0.00002 0.00001 0.00001 + 0.00844 0.00074 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00765 0.00066 0.00006 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00681 0.00058 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00616 0.00052 0.00005 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00563 0.00047 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00503 0.00042 0.00004 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00453 0.00037 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00411 0.00033 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00374 0.00030 0.00003 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00342 0.00027 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00314 0.00025 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00290 0.00023 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00267 0.00021 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00248 0.00019 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00230 0.00018 0.00002 0.00002 0.00001 0.00003 0.00001 0.00001 + 0.00215 0.00017 0.00002 0.00002 0.00001 0.00003 0.00002 0.00001 + 0.00201 0.00015 0.00002 0.00002 0.00001 0.00003 0.00002 0.00002 + 0.00188 0.00014 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 + 0.00176 0.00013 0.00001 0.00002 0.00001 0.00003 0.00002 0.00002 + 0.00166 0.00013 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 + 0.00156 0.00012 0.00001 0.00002 0.00002 0.00003 0.00002 0.00002 + 0.00849 0.00042 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00755 0.00037 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00628 0.00031 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00546 0.00026 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00468 0.00022 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00408 0.00019 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00357 0.00016 0.00000 0.00001 0.00000 0.00000 0.00000 0.00000 + 0.00309 0.00014 0.00000 0.00001 0.00000 0.00000 0.00000 0.00001 + 0.00272 0.00012 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 + 0.00240 0.00011 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 + 0.00217 0.00010 0.00000 0.00001 0.00000 0.00000 0.00001 0.00001 + 0.00176 0.00008 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 + 0.00147 0.00006 0.00000 0.00001 0.00001 0.00000 0.00001 0.00001 + 0.00121 0.00005 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00099 0.00004 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00083 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00070 0.00003 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00061 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00052 0.00002 0.00000 0.00001 0.00001 0.00001 0.00001 0.00001 + 0.00045 0.00002 0.00000 0.00002 0.00001 0.00001 0.00002 0.00002 + 0.00040 0.00002 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00034 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00030 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00026 0.00001 0.00000 0.00002 0.00002 0.00002 0.00002 0.00002 + 0.00023 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00020 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00018 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00016 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00015 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00013 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00012 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00011 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00010 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00009 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00008 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 + 0.00007 0.00001 0.00000 0.00003 0.00003 0.00003 0.00003 0.00003 +'End:' diff --git a/LHAPDF/PDFsets/PDFsets.index b/LHAPDF/PDFsets/PDFsets.index index f455df47985..4f4f34600e4 100644 --- a/LHAPDF/PDFsets/PDFsets.index +++ b/LHAPDF/PDFsets/PDFsets.index @@ -1,4016 +1,4016 @@ - 211 2 1 1 OWPI.LHgrid 1 4. 2000. 0.005 0.9998 OW-P(LO) - 212 2 1 2 OWPI.LHgrid 2 4. 2000. 0.005 0.9998 OW-P(LO) - 231 2 3 1 SMRSPI.LHgrid 1 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) - 232 2 3 2 SMRSPI.LHgrid 2 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) - 233 2 3 3 SMRSPI.LHgrid 3 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) - 251 2 5 1 GRVPI1.LHgrid 1 0.3 1000000. 1.E-05 0.9998 GRV-P(NLO) - 252 2 5 2 GRVPI0.LHgrid 2 0.25 1000000. 1.E-05 0.9998 GRV-P(LO) - 261 2 6 1 ABFKWPI.LHgrid 1 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) - 262 2 6 2 ABFKWPI.LHgrid 2 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) - 263 2 6 3 ABFKWPI.LHgrid 3 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) - 311 3 1 1 DOG0.LHgrid 1 10. 10000. 1.E-05 0.9 DO-G(LO) - 312 3 1 2 DOG1.LHgrid 1 10. 10000. 1.E-05 0.9 DO-G(NLO) - 321 3 2 1 DGG.LHgrid 1 1. 10000. 1.E-05 0.9998 DG-G(LO) - 322 3 2 2 DGG.LHgrid 2 1. 50. 1.E-05 0.9998 DG-G(LO) - 323 3 2 3 DGG.LHgrid 3 20. 500. 1.E-05 0.9998 DG-G(LO) - 324 3 2 4 DGG.LHgrid 4 200. 10000. 1.E-05 0.9998 DG-G(LO) - 331 3 3 1 LACG.LHgrid 1 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) - 332 3 3 2 LACG.LHgrid 2 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) - 333 3 3 3 LACG.LHgrid 3 1. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) - 334 3 3 4 LACG.LHgrid 4 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) - 341 3 4 1 GSG1.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G(NLO) - 342 3 4 2 GSG0.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G(LO) - 342 3 4 3 GSG0.LHgrid 2 5.3 100000000. 0.0005 0.9998 GS-G(LO) - 344 3 4 4 GSG961.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G-96(NLO) - 345 3 4 5 GSG960.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G-96(LO) - 351 3 5 1 GRVG1.LHgrid 1 0.3 1000000. 1.E-05 0.9998 GRV-G(NLO) - 352 3 5 2 GRVG1.LHgrid 2 0.3 1000000. 1.E-05 0.9998 GRV-G(NLO) - 353 3 5 3 GRVG0.LHgrid 1 0.25 1000000. 1.E-05 0.9998 GRV-G/GRS-G(LO) - 354 3 5 4 GRVG0.LHgrid 2 0.6 50000. 1.E-05 0.9998 GRV-G/GRS-G(LO) - 361 3 6 1 ACFGPG.LHgrid 1 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) - 362 3 6 2 ACFGPG.LHgrid 2 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) - 363 3 6 3 ACFGPG.LHgrid 3 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) - 381 3 8 1 WHITG.LHgrid 1 4. 2500. 0.001 0.9998 WHIT-G(LO) - 382 3 8 2 WHITG.LHgrid 2 4. 2500. 0.001 0.9998 WHIT-G(LO) - 383 3 8 3 WHITG.LHgrid 3 4. 2500. 0.001 0.9998 WHIT-G(LO) - 384 3 8 4 WHITG.LHgrid 4 4. 2500. 0.001 0.9998 WHIT-G(LO) - 385 3 8 5 WHITG.LHgrid 5 4. 2500. 0.001 0.9998 WHIT-G(LO) - 386 3 8 6 WHITG.LHgrid 6 4. 2500. 0.001 0.9998 WHIT-G(LO) - 391 3 9 1 SASG.LHgrid 1 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 392 3 9 2 SASG.LHgrid 2 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 393 3 9 3 SASG.LHgrid 3 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 394 3 9 4 SASG.LHgrid 4 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 395 3 9 5 SASG.LHgrid 5 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 396 3 9 6 SASG.LHgrid 6 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 397 3 9 7 SASG.LHgrid 7 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 398 3 9 8 SASG.LHgrid 8 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) - 10000 1 0 0 cteq6m.LHpdf 0 1.69 100000000. 1.E-06 1. CTEQ6(Standard_MSbar) - 10001 1 0 0 cteq6.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6 - 10002 1 0 0 cteq6.LHpdf 2 1.69 100000000. 1.E-06 1. CTEQ6 - 10003 1 0 0 cteq6.LHpdf 3 1.69 100000000. 1.E-06 1. CTEQ6 - 10004 1 0 0 cteq6.LHpdf 4 1.69 100000000. 1.E-06 1. CTEQ6 - 10005 1 0 0 cteq6.LHpdf 5 1.69 100000000. 1.E-06 1. CTEQ6 - 10006 1 0 0 cteq6.LHpdf 6 1.69 100000000. 1.E-06 1. CTEQ6 - 10007 1 0 0 cteq6.LHpdf 7 1.69 100000000. 1.E-06 1. CTEQ6 - 10008 1 0 0 cteq6.LHpdf 8 1.69 100000000. 1.E-06 1. CTEQ6 - 10009 1 0 0 cteq6.LHpdf 9 1.69 100000000. 1.E-06 1. CTEQ6 - 10010 1 0 0 cteq6.LHpdf 10 1.69 100000000. 1.E-06 1. CTEQ6 - 10011 1 0 0 cteq6.LHpdf 11 1.69 100000000. 1.E-06 1. CTEQ6 - 10012 1 0 0 cteq6.LHpdf 12 1.69 100000000. 1.E-06 1. CTEQ6 - 10013 1 0 0 cteq6.LHpdf 13 1.69 100000000. 1.E-06 1. CTEQ6 - 10014 1 0 0 cteq6.LHpdf 14 1.69 100000000. 1.E-06 1. CTEQ6 - 10015 1 0 0 cteq6.LHpdf 15 1.69 100000000. 1.E-06 1. CTEQ6 - 10016 1 0 0 cteq6.LHpdf 16 1.69 100000000. 1.E-06 1. CTEQ6 - 10017 1 0 0 cteq6.LHpdf 17 1.69 100000000. 1.E-06 1. CTEQ6 - 10018 1 0 0 cteq6.LHpdf 18 1.69 100000000. 1.E-06 1. CTEQ6 - 10019 1 0 0 cteq6.LHpdf 19 1.69 100000000. 1.E-06 1. CTEQ6 - 10020 1 0 0 cteq6.LHpdf 20 1.69 100000000. 1.E-06 1. CTEQ6 - 10021 1 0 0 cteq6.LHpdf 21 1.69 100000000. 1.E-06 1. CTEQ6 - 10022 1 0 0 cteq6.LHpdf 22 1.69 100000000. 1.E-06 1. CTEQ6 - 10023 1 0 0 cteq6.LHpdf 23 1.69 100000000. 1.E-06 1. CTEQ6 - 10024 1 0 0 cteq6.LHpdf 24 1.69 100000000. 1.E-06 1. CTEQ6 - 10025 1 0 0 cteq6.LHpdf 25 1.69 100000000. 1.E-06 1. CTEQ6 - 10026 1 0 0 cteq6.LHpdf 26 1.69 100000000. 1.E-06 1. CTEQ6 - 10027 1 0 0 cteq6.LHpdf 27 1.69 100000000. 1.E-06 1. CTEQ6 - 10028 1 0 0 cteq6.LHpdf 28 1.69 100000000. 1.E-06 1. CTEQ6 - 10029 1 0 0 cteq6.LHpdf 29 1.69 100000000. 1.E-06 1. CTEQ6 - 10030 1 0 0 cteq6.LHpdf 30 1.69 100000000. 1.E-06 1. CTEQ6 - 10031 1 0 0 cteq6.LHpdf 31 1.69 100000000. 1.E-06 1. CTEQ6 - 10032 1 0 0 cteq6.LHpdf 32 1.69 100000000. 1.E-06 1. CTEQ6 - 10033 1 0 0 cteq6.LHpdf 33 1.69 100000000. 1.E-06 1. CTEQ6 - 10034 1 0 0 cteq6.LHpdf 34 1.69 100000000. 1.E-06 1. CTEQ6 - 10035 1 0 0 cteq6.LHpdf 35 1.69 100000000. 1.E-06 1. CTEQ6 - 10036 1 0 0 cteq6.LHpdf 36 1.69 100000000. 1.E-06 1. CTEQ6 - 10037 1 0 0 cteq6.LHpdf 37 1.69 100000000. 1.E-06 1. CTEQ6 - 10038 1 0 0 cteq6.LHpdf 38 1.69 100000000. 1.E-06 1. CTEQ6 - 10039 1 0 0 cteq6.LHpdf 39 1.69 100000000. 1.E-06 1. CTEQ6 - 10040 1 0 0 cteq6.LHpdf 40 1.69 100000000. 1.E-06 1. CTEQ6 - 10041 1 0 0 cteq6l.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6(LO_fit,with_NLOrder_alpha_S) - 10042 1 0 0 cteq6ll.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6(LO fit,with_LOrder_alpha_S) - 10050 1 0 0 cteq6mE.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ6(Standard_MSbar) - 10051 1 0 0 cteq6mE.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ6 - 10052 1 0 0 cteq6mE.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ6 - 10053 1 0 0 cteq6mE.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ6 - 10054 1 0 0 cteq6mE.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ6 - 10055 1 0 0 cteq6mE.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ6 - 10056 1 0 0 cteq6mE.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ6 - 10057 1 0 0 cteq6mE.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ6 - 10058 1 0 0 cteq6mE.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ6 - 10059 1 0 0 cteq6mE.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ6 - 10060 1 0 0 cteq6mE.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ6 - 10061 1 0 0 cteq6mE.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ6 - 10062 1 0 0 cteq6mE.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ6 - 10063 1 0 0 cteq6mE.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ6 - 10064 1 0 0 cteq6mE.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ6 - 10065 1 0 0 cteq6mE.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ6 - 10066 1 0 0 cteq6mE.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ6 - 10067 1 0 0 cteq6mE.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ6 - 10068 1 0 0 cteq6mE.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ6 - 10069 1 0 0 cteq6mE.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ6 - 10070 1 0 0 cteq6mE.LHgrid 20 1.69 100000000. 1.E-06 1. CTEQ6 - 10071 1 0 0 cteq6mE.LHgrid 21 1.69 100000000. 1.E-06 1. CTEQ6 - 10072 1 0 0 cteq6mE.LHgrid 22 1.69 100000000. 1.E-06 1. CTEQ6 - 10073 1 0 0 cteq6mE.LHgrid 23 1.69 100000000. 1.E-06 1. CTEQ6 - 10074 1 0 0 cteq6mE.LHgrid 24 1.69 100000000. 1.E-06 1. CTEQ6 - 10075 1 0 0 cteq6mE.LHgrid 25 1.69 100000000. 1.E-06 1. CTEQ6 - 10076 1 0 0 cteq6mE.LHgrid 26 1.69 100000000. 1.E-06 1. CTEQ6 - 10077 1 0 0 cteq6mE.LHgrid 27 1.69 100000000. 1.E-06 1. CTEQ6 - 10078 1 0 0 cteq6mE.LHgrid 28 1.69 100000000. 1.E-06 1. CTEQ6 - 10079 1 0 0 cteq6mE.LHgrid 29 1.69 100000000. 1.E-06 1. CTEQ6 - 10080 1 0 0 cteq6mE.LHgrid 30 1.69 100000000. 1.E-06 1. CTEQ6 - 10081 1 0 0 cteq6mE.LHgrid 31 1.69 100000000. 1.E-06 1. CTEQ6 - 10082 1 0 0 cteq6mE.LHgrid 32 1.69 100000000. 1.E-06 1. CTEQ6 - 10083 1 0 0 cteq6mE.LHgrid 33 1.69 100000000. 1.E-06 1. CTEQ6 - 10084 1 0 0 cteq6mE.LHgrid 34 1.69 100000000. 1.E-06 1. CTEQ6 - 10085 1 0 0 cteq6mE.LHgrid 35 1.69 100000000. 1.E-06 1. CTEQ6 - 10086 1 0 0 cteq6mE.LHgrid 36 1.69 100000000. 1.E-06 1. CTEQ6 - 10087 1 0 0 cteq6mE.LHgrid 37 1.69 100000000. 1.E-06 1. CTEQ6 - 10088 1 0 0 cteq6mE.LHgrid 38 1.69 100000000. 1.E-06 1. CTEQ6 - 10089 1 0 0 cteq6mE.LHgrid 39 1.69 100000000. 1.E-06 1. CTEQ6 - 10090 1 0 0 cteq6mE.LHgrid 40 1.69 100000000. 1.E-06 1. CTEQ6 - 10100 1 0 0 cteq61.LHpdf 0 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10101 1 0 0 cteq61.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10102 1 0 0 cteq61.LHpdf 2 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10103 1 0 0 cteq61.LHpdf 3 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10104 1 0 0 cteq61.LHpdf 4 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10105 1 0 0 cteq61.LHpdf 5 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10106 1 0 0 cteq61.LHpdf 6 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10107 1 0 0 cteq61.LHpdf 7 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10108 1 0 0 cteq61.LHpdf 8 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10109 1 0 0 cteq61.LHpdf 9 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10110 1 0 0 cteq61.LHpdf 10 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10111 1 0 0 cteq61.LHpdf 11 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10112 1 0 0 cteq61.LHpdf 12 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10113 1 0 0 cteq61.LHpdf 13 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10114 1 0 0 cteq61.LHpdf 14 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10115 1 0 0 cteq61.LHpdf 15 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10116 1 0 0 cteq61.LHpdf 16 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10117 1 0 0 cteq61.LHpdf 17 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10118 1 0 0 cteq61.LHpdf 18 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10119 1 0 0 cteq61.LHpdf 19 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10120 1 0 0 cteq61.LHpdf 20 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10121 1 0 0 cteq61.LHpdf 21 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10122 1 0 0 cteq61.LHpdf 22 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10123 1 0 0 cteq61.LHpdf 23 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10124 1 0 0 cteq61.LHpdf 24 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10125 1 0 0 cteq61.LHpdf 25 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10126 1 0 0 cteq61.LHpdf 26 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10127 1 0 0 cteq61.LHpdf 27 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10128 1 0 0 cteq61.LHpdf 28 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10129 1 0 0 cteq61.LHpdf 29 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10130 1 0 0 cteq61.LHpdf 30 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10131 1 0 0 cteq61.LHpdf 31 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10132 1 0 0 cteq61.LHpdf 32 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10133 1 0 0 cteq61.LHpdf 33 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10134 1 0 0 cteq61.LHpdf 34 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10135 1 0 0 cteq61.LHpdf 35 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10136 1 0 0 cteq61.LHpdf 36 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10137 1 0 0 cteq61.LHpdf 37 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10138 1 0 0 cteq61.LHpdf 38 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10139 1 0 0 cteq61.LHpdf 39 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10140 1 0 0 cteq61.LHpdf 40 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10150 1 0 0 cteq61.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10151 1 0 0 cteq61.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10152 1 0 0 cteq61.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10153 1 0 0 cteq61.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10154 1 0 0 cteq61.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10155 1 0 0 cteq61.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10156 1 0 0 cteq61.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10157 1 0 0 cteq61.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10158 1 0 0 cteq61.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10159 1 0 0 cteq61.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10160 1 0 0 cteq61.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10161 1 0 0 cteq61.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10162 1 0 0 cteq61.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10163 1 0 0 cteq61.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10164 1 0 0 cteq61.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10165 1 0 0 cteq61.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10166 1 0 0 cteq61.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10167 1 0 0 cteq61.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10168 1 0 0 cteq61.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10169 1 0 0 cteq61.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10170 1 0 0 cteq61.LHgrid 20 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10171 1 0 0 cteq61.LHgrid 21 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10172 1 0 0 cteq61.LHgrid 22 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10173 1 0 0 cteq61.LHgrid 23 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10174 1 0 0 cteq61.LHgrid 24 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10175 1 0 0 cteq61.LHgrid 25 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10176 1 0 0 cteq61.LHgrid 26 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10177 1 0 0 cteq61.LHgrid 27 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10178 1 0 0 cteq61.LHgrid 28 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10179 1 0 0 cteq61.LHgrid 29 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10180 1 0 0 cteq61.LHgrid 30 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10181 1 0 0 cteq61.LHgrid 31 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10182 1 0 0 cteq61.LHgrid 32 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10183 1 0 0 cteq61.LHgrid 33 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10184 1 0 0 cteq61.LHgrid 34 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10185 1 0 0 cteq61.LHgrid 35 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10186 1 0 0 cteq61.LHgrid 36 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10187 1 0 0 cteq61.LHgrid 37 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10188 1 0 0 cteq61.LHgrid 38 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10189 1 0 0 cteq61.LHgrid 39 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10190 1 0 0 cteq61.LHgrid 40 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) - 10250 1 0 0 cteq6AB.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10251 1 0 0 cteq6AB.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10252 1 0 0 cteq6AB.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10253 1 0 0 cteq6AB.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10254 1 0 0 cteq6AB.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10255 1 0 0 cteq6AB.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10256 1 0 0 cteq6AB.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10257 1 0 0 cteq6AB.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) - 10258 1 0 0 cteq6AB.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10259 1 0 0 cteq6AB.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10260 1 0 0 cteq6AB.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10261 1 0 0 cteq6AB.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10262 1 0 0 cteq6AB.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10263 1 0 0 cteq6AB.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10264 1 0 0 cteq6AB.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10265 1 0 0 cteq6AB.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10266 1 0 0 cteq6AB.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10267 1 0 0 cteq6AB.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10268 1 0 0 cteq6AB.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10269 1 0 0 cteq6AB.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas - 10350 1 0 0 cteq65.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10351 1 0 0 cteq65.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10352 1 0 0 cteq65.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10353 1 0 0 cteq65.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10354 1 0 0 cteq65.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10355 1 0 0 cteq65.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10356 1 0 0 cteq65.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10357 1 0 0 cteq65.LHgrid 7 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10358 1 0 0 cteq65.LHgrid 8 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10359 1 0 0 cteq65.LHgrid 9 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10360 1 0 0 cteq65.LHgrid 10 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10361 1 0 0 cteq65.LHgrid 11 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10362 1 0 0 cteq65.LHgrid 12 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10363 1 0 0 cteq65.LHgrid 13 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10364 1 0 0 cteq65.LHgrid 14 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10365 1 0 0 cteq65.LHgrid 15 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10366 1 0 0 cteq65.LHgrid 16 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10367 1 0 0 cteq65.LHgrid 17 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10368 1 0 0 cteq65.LHgrid 18 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10369 1 0 0 cteq65.LHgrid 19 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10370 1 0 0 cteq65.LHgrid 20 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10371 1 0 0 cteq65.LHgrid 21 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10372 1 0 0 cteq65.LHgrid 22 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10373 1 0 0 cteq65.LHgrid 23 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10374 1 0 0 cteq65.LHgrid 24 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10375 1 0 0 cteq65.LHgrid 25 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10376 1 0 0 cteq65.LHgrid 26 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10377 1 0 0 cteq65.LHgrid 27 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10378 1 0 0 cteq65.LHgrid 28 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10379 1 0 0 cteq65.LHgrid 29 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10380 1 0 0 cteq65.LHgrid 30 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10381 1 0 0 cteq65.LHgrid 31 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10382 1 0 0 cteq65.LHgrid 32 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10383 1 0 0 cteq65.LHgrid 33 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10384 1 0 0 cteq65.LHgrid 34 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10385 1 0 0 cteq65.LHgrid 35 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10386 1 0 0 cteq65.LHgrid 36 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10387 1 0 0 cteq65.LHgrid 37 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10388 1 0 0 cteq65.LHgrid 38 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10389 1 0 0 cteq65.LHgrid 39 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10390 1 0 0 cteq65.LHgrid 40 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) - 10450 1 0 0 cteq65c.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+centralfit/nocharm) - 10451 1 0 0 cteq65c.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+BHPSmodel) - 10452 1 0 0 cteq65c.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+BHPSmodel) - 10453 1 0 0 cteq65c.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+MesonCloud) - 10454 1 0 0 cteq65c.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+MesonCloud) - 10455 1 0 0 cteq65c.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+Sea-like) - 10456 1 0 0 cteq65c.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+Sea-like) - 10460 1 0 0 cteq65s.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10461 1 0 0 cteq65s.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10462 1 0 0 cteq65s.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10463 1 0 0 cteq65s.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10464 1 0 0 cteq65s.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10465 1 0 0 cteq65s.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10466 1 0 0 cteq65s.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10467 1 0 0 cteq65s.LHgrid 7 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) - 10550 1 0 0 cteq66.LHgrid 0 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m) - 10551 1 0 0 cteq66.LHgrid 1 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10552 1 0 0 cteq66.LHgrid 2 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10553 1 0 0 cteq66.LHgrid 3 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10554 1 0 0 cteq66.LHgrid 4 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10555 1 0 0 cteq66.LHgrid 5 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10556 1 0 0 cteq66.LHgrid 6 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10557 1 0 0 cteq66.LHgrid 7 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10558 1 0 0 cteq66.LHgrid 8 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10559 1 0 0 cteq66.LHgrid 9 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10560 1 0 0 cteq66.LHgrid 10 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10561 1 0 0 cteq66.LHgrid 11 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10562 1 0 0 cteq66.LHgrid 12 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10563 1 0 0 cteq66.LHgrid 13 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10564 1 0 0 cteq66.LHgrid 14 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10565 1 0 0 cteq66.LHgrid 15 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10566 1 0 0 cteq66.LHgrid 16 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10567 1 0 0 cteq66.LHgrid 17 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10568 1 0 0 cteq66.LHgrid 18 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10569 1 0 0 cteq66.LHgrid 19 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10570 1 0 0 cteq66.LHgrid 20 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10571 1 0 0 cteq66.LHgrid 21 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10572 1 0 0 cteq66.LHgrid 22 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10573 1 0 0 cteq66.LHgrid 23 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10574 1 0 0 cteq66.LHgrid 24 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10575 1 0 0 cteq66.LHgrid 25 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10576 1 0 0 cteq66.LHgrid 26 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10577 1 0 0 cteq66.LHgrid 27 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10578 1 0 0 cteq66.LHgrid 28 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10579 1 0 0 cteq66.LHgrid 29 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10580 1 0 0 cteq66.LHgrid 30 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10581 1 0 0 cteq66.LHgrid 31 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10582 1 0 0 cteq66.LHgrid 32 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10583 1 0 0 cteq66.LHgrid 33 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10584 1 0 0 cteq66.LHgrid 34 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10585 1 0 0 cteq66.LHgrid 35 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10586 1 0 0 cteq66.LHgrid 36 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10587 1 0 0 cteq66.LHgrid 37 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10588 1 0 0 cteq66.LHgrid 38 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10589 1 0 0 cteq66.LHgrid 39 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10590 1 0 0 cteq66.LHgrid 40 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10591 1 0 0 cteq66.LHgrid 41 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10592 1 0 0 cteq66.LHgrid 42 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10593 1 0 0 cteq66.LHgrid 43 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10594 1 0 0 cteq66.LHgrid 44 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) - 10650 1 0 0 cteq66c.LHgrid 0 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) - 10651 1 0 0 cteq66c.LHgrid 1 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) - 10652 1 0 0 cteq66c.LHgrid 2 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) - 10653 1 0 0 cteq66c.LHgrid 3 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) - 10660 1 0 0 cteq66a.LHgrid 0 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) - 10661 1 0 0 cteq66a.LHgrid 1 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) - 10662 1 0 0 cteq66a.LHgrid 2 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) - 10663 1 0 0 cteq66a.LHgrid 3 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) - 10670 1 0 0 cteq6lg.LHgrid 0 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-15GeV) - 10671 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-25GeV) - 10672 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-35GeV) - 10673 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-50GeV) - 10674 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-90GeV) - 10675 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-100GeV) - 10676 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-200GeV) - 10677 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-infinite) - 19050 1 4 48 cteq5m.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5m(Standard_MSbar) - 19051 1 4 53 cteq5m1.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5m1(updated) - 19053 1 4 51 cteq5f3.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5f3(3lavour) - 19054 1 4 52 cteq5f4.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5f4(4flavour) - 19060 1 4 47 cteq5d.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5d(Standard_DIS) - 19070 1 4 46 cteq5l.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5l(Leading_Order) - 19150 1 4 34 cteq4m.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4m(Standard_MSbar) - 19160 1 4 33 cteq4d.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4d(Standard_DIS) - 19170 1 4 32 cteq4l.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4l(Leading_Order) - 20001 1 0 0 MRST2001nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20002 1 0 0 MRST2001nlo.LHpdf 2 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20003 1 0 0 MRST2001nlo.LHpdf 3 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20004 1 0 0 MRST2001nlo.LHpdf 4 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20051 1 0 0 MRST2001nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20052 1 0 0 MRST2001nlo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20053 1 0 0 MRST2001nlo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20054 1 0 0 MRST2001nlo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST2001(NLO) - 20060 1 0 0 MRST2001lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(LO) - 20070 1 0 0 MRST2001nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(NNLO) - 20100 1 0 0 MRST2001E.LHpdf 0 1.25 10000000. 1.E-05 1. MRST2001E - 20101 1 0 0 MRST2001E.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2001E - 20102 1 0 0 MRST2001E.LHpdf 2 1.25 10000000. 1.E-05 1. MRST2001E - 20103 1 0 0 MRST2001E.LHpdf 3 1.25 10000000. 1.E-05 1. MRST2001E - 20104 1 0 0 MRST2001E.LHpdf 4 1.25 10000000. 1.E-05 1. MRST2001E - 20105 1 0 0 MRST2001E.LHpdf 5 1.25 10000000. 1.E-05 1. MRST2001E - 20106 1 0 0 MRST2001E.LHpdf 6 1.25 10000000. 1.E-05 1. MRST2001E - 20107 1 0 0 MRST2001E.LHpdf 7 1.25 10000000. 1.E-05 1. MRST2001E - 20108 1 0 0 MRST2001E.LHpdf 8 1.25 10000000. 1.E-05 1. MRST2001E - 20109 1 0 0 MRST2001E.LHpdf 9 1.25 10000000. 1.E-05 1. MRST2001E - 20110 1 0 0 MRST2001E.LHpdf 10 1.25 10000000. 1.E-05 1. MRST2001E - 20111 1 0 0 MRST2001E.LHpdf 11 1.25 10000000. 1.E-05 1. MRST2001E - 20112 1 0 0 MRST2001E.LHpdf 12 1.25 10000000. 1.E-05 1. MRST2001E - 20113 1 0 0 MRST2001E.LHpdf 13 1.25 10000000. 1.E-05 1. MRST2001E - 20114 1 0 0 MRST2001E.LHpdf 14 1.25 10000000. 1.E-05 1. MRST2001E - 20115 1 0 0 MRST2001E.LHpdf 15 1.25 10000000. 1.E-05 1. MRST2001E - 20116 1 0 0 MRST2001E.LHpdf 16 1.25 10000000. 1.E-05 1. MRST2001E - 20117 1 0 0 MRST2001E.LHpdf 17 1.25 10000000. 1.E-05 1. MRST2001E - 20118 1 0 0 MRST2001E.LHpdf 18 1.25 10000000. 1.E-05 1. MRST2001E - 20119 1 0 0 MRST2001E.LHpdf 19 1.25 10000000. 1.E-05 1. MRST2001E - 20120 1 0 0 MRST2001E.LHpdf 20 1.25 10000000. 1.E-05 1. MRST2001E - 20121 1 0 0 MRST2001E.LHpdf 21 1.25 10000000. 1.E-05 1. MRST2001E - 20122 1 0 0 MRST2001E.LHpdf 22 1.25 10000000. 1.E-05 1. MRST2001E - 20123 1 0 0 MRST2001E.LHpdf 23 1.25 10000000. 1.E-05 1. MRST2001E - 20124 1 0 0 MRST2001E.LHpdf 24 1.25 10000000. 1.E-05 1. MRST2001E - 20125 1 0 0 MRST2001E.LHpdf 25 1.25 10000000. 1.E-05 1. MRST2001E - 20126 1 0 0 MRST2001E.LHpdf 26 1.25 10000000. 1.E-05 1. MRST2001E - 20127 1 0 0 MRST2001E.LHpdf 27 1.25 10000000. 1.E-05 1. MRST2001E - 20128 1 0 0 MRST2001E.LHpdf 28 1.25 10000000. 1.E-05 1. MRST2001E - 20129 1 0 0 MRST2001E.LHpdf 29 1.25 10000000. 1.E-05 1. MRST2001E - 20130 1 0 0 MRST2001E.LHpdf 30 1.25 10000000. 1.E-05 1. MRST2001E - 20150 1 0 0 MRST2001E.LHgrid 0 1.25 10000000. 1.E-05 1. MRST2001ECentralValue - 20151 1 0 0 MRST2001E.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001Errors - 20152 1 0 0 MRST2001E.LHgrid 2 1.25 10000000. 1.E-05 1. MRST2001Errors - 20153 1 0 0 MRST2001E.LHgrid 3 1.25 10000000. 1.E-05 1. MRST2001Errors - 20154 1 0 0 MRST2001E.LHgrid 4 1.25 10000000. 1.E-05 1. MRST2001Errors - 20155 1 0 0 MRST2001E.LHgrid 5 1.25 10000000. 1.E-05 1. MRST2001Errors - 20156 1 0 0 MRST2001E.LHgrid 6 1.25 10000000. 1.E-05 1. MRST2001Errors - 20157 1 0 0 MRST2001E.LHgrid 7 1.25 10000000. 1.E-05 1. MRST2001Errors - 20158 1 0 0 MRST2001E.LHgrid 8 1.25 10000000. 1.E-05 1. MRST2001Errors - 20159 1 0 0 MRST2001E.LHgrid 9 1.25 10000000. 1.E-05 1. MRST2001Errors - 20160 1 0 0 MRST2001E.LHgrid 10 1.25 10000000. 1.E-05 1. MRST2001Errors - 20161 1 0 0 MRST2001E.LHgrid 11 1.25 10000000. 1.E-05 1. MRST2001Errors - 20162 1 0 0 MRST2001E.LHgrid 12 1.25 10000000. 1.E-05 1. MRST2001Errors - 20163 1 0 0 MRST2001E.LHgrid 13 1.25 10000000. 1.E-05 1. MRST2001Errors - 20164 1 0 0 MRST2001E.LHgrid 14 1.25 10000000. 1.E-05 1. MRST2001Errors - 20165 1 0 0 MRST2001E.LHgrid 15 1.25 10000000. 1.E-05 1. MRST2001Errors - 20166 1 0 0 MRST2001E.LHgrid 16 1.25 10000000. 1.E-05 1. MRST2001Errors - 20167 1 0 0 MRST2001E.LHgrid 17 1.25 10000000. 1.E-05 1. MRST2001Errors - 20168 1 0 0 MRST2001E.LHgrid 18 1.25 10000000. 1.E-05 1. MRST2001Errors - 20169 1 0 0 MRST2001E.LHgrid 19 1.25 10000000. 1.E-05 1. MRST2001Errors - 20170 1 0 0 MRST2001E.LHgrid 20 1.25 10000000. 1.E-05 1. MRST2001Errors - 20171 1 0 0 MRST2001E.LHgrid 21 1.25 10000000. 1.E-05 1. MRST2001Errors - 20172 1 0 0 MRST2001E.LHgrid 22 1.25 10000000. 1.E-05 1. MRST2001Errors - 20173 1 0 0 MRST2001E.LHgrid 23 1.25 10000000. 1.E-05 1. MRST2001Errors - 20174 1 0 0 MRST2001E.LHgrid 24 1.25 10000000. 1.E-05 1. MRST2001Errors - 20175 1 0 0 MRST2001E.LHgrid 25 1.25 10000000. 1.E-05 1. MRST2001Errors - 20176 1 0 0 MRST2001E.LHgrid 26 1.25 10000000. 1.E-05 1. MRST2001Errors - 20177 1 0 0 MRST2001E.LHgrid 27 1.25 10000000. 1.E-05 1. MRST2001Errors - 20178 1 0 0 MRST2001E.LHgrid 28 1.25 10000000. 1.E-05 1. MRST2001Errors - 20179 1 0 0 MRST2001E.LHgrid 29 1.25 10000000. 1.E-05 1. MRST2001Errors - 20180 1 0 0 MRST2001E.LHgrid 30 1.25 10000000. 1.E-05 1. MRST2001Errors - 20200 1 0 0 MRST2002nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2002(NLO) - 20250 1 0 0 MRST2002nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2002(NLO) - 20270 1 0 0 MRST2002nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2002NNLO) - 20300 1 0 0 MRST2003cnlo.LHpdf 1 10. 10000000. 0.001 1. MRST2003c(NLO)restricted_range - 20350 1 0 0 MRST2003cnlo.LHgrid 1 10. 10000000. 0.001 1. MRST2003c(NLO)restricted_range - 20370 1 0 0 MRST2003cnnlo.LHgrid 1 7. 10000000. 0.001 1. MRST2003c(NNLO)restricted_range - 20400 1 0 0 MRST2004nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO) - 20406 1 0 0 MRST2004FF3nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour3 - 20408 1 0 0 MRST2004FF4nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour4 - 20450 1 0 0 MRST2004nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO) - 20452 1 0 0 MRST2004FF3lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(LO)FixedFlavour3 - 20454 1 0 0 MRST2004FF4lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(LO)FixedFlavour4 - 20456 1 0 0 MRST2004FF3nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour3 - 20458 1 0 0 MRST2004FF4nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour4 - 20460 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED(proton) - 20461 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED(proton) - 20462 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED(neutron) - 20470 1 0 0 MRST2004nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004 (NNLO) - 20550 1 0 0 MRST2006nnlo.LHgrid 0 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)CentralValue - 20551 1 0 0 MRST2006nnlo.LHgrid 1 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20552 1 0 0 MRST2006nnlo.LHgrid 2 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20553 1 0 0 MRST2006nnlo.LHgrid 3 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20554 1 0 0 MRST2006nnlo.LHgrid 4 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20555 1 0 0 MRST2006nnlo.LHgrid 5 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20556 1 0 0 MRST2006nnlo.LHgrid 6 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20557 1 0 0 MRST2006nnlo.LHgrid 7 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20558 1 0 0 MRST2006nnlo.LHgrid 8 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20559 1 0 0 MRST2006nnlo.LHgrid 9 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20560 1 0 0 MRST2006nnlo.LHgrid 10 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20561 1 0 0 MRST2006nnlo.LHgrid 11 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20562 1 0 0 MRST2006nnlo.LHgrid 12 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20563 1 0 0 MRST2006nnlo.LHgrid 13 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20564 1 0 0 MRST2006nnlo.LHgrid 14 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20565 1 0 0 MRST2006nnlo.LHgrid 15 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20566 1 0 0 MRST2006nnlo.LHgrid 16 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20567 1 0 0 MRST2006nnlo.LHgrid 17 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20568 1 0 0 MRST2006nnlo.LHgrid 18 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20569 1 0 0 MRST2006nnlo.LHgrid 19 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20570 1 0 0 MRST2006nnlo.LHgrid 20 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20571 1 0 0 MRST2006nnlo.LHgrid 21 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20572 1 0 0 MRST2006nnlo.LHgrid 22 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20573 1 0 0 MRST2006nnlo.LHgrid 23 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20574 1 0 0 MRST2006nnlo.LHgrid 24 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20575 1 0 0 MRST2006nnlo.LHgrid 25 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20576 1 0 0 MRST2006nnlo.LHgrid 26 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20577 1 0 0 MRST2006nnlo.LHgrid 27 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20578 1 0 0 MRST2006nnlo.LHgrid 28 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20579 1 0 0 MRST2006nnlo.LHgrid 29 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20580 1 0 0 MRST2006nnlo.LHgrid 30 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors - 20650 1 0 0 MRST2007lomod.LHgrid 0 1.25 10000000. 1.E-05 1. MRST2007LO*(sets for MC use) - 20651 1 0 0 MRSTMCal.LHgrid 0 1.25 10000000. 1.E-05 1. MRSTLOMC(sets for MC use) - 29000 1 3 68 MRST98.LHpdf 0 1.25 10000000. 1.E-05 1. MRST98 - 29001 1 3 67 MRST98.LHpdf 1 1.25 10000000. 1.E-05 1. MRST98 - 29003 1 3 69 MRST98.LHpdf 3 1.25 10000000. 1.E-05 1. MRST98 - 29041 1 3 72 MRST98lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(LO) - 29042 1 3 73 MRST98lo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(LO) - 29043 1 3 74 MRST98lo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(LO) - 29044 1 3 75 MRST98lo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(LO) - 29045 1 3 76 MRST98lo.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(LO) - 29051 1 3 67 MRST98nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(NLO) - 29052 1 3 68 MRST98nlo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(NLO) - 29053 1 3 69 MRST98nlo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(NLO) - 29054 1 3 70 MRST98nlo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(NLO) - 29055 1 3 71 MRST98nlo.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(NLO) - 29061 1 3 62 MRST98dis.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(DIS) - 29062 1 3 63 MRST98dis.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(DIS) - 29063 1 3 64 MRST98dis.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(DIS) - 29064 1 3 65 MRST98dis.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(DIS) - 29065 1 3 66 MRST98dis.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(DIS) - 29070 1 1 77 MRST98ht.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(HT) - 30100 1 0 0 Fermi2002_100.LHpdf 0 1. 1.E+10 1.E-06 1. Fermi02 - 30101 1 0 0 Fermi2002_100.LHpdf 1 1. 1.E+10 1.E-06 1. Fermi02 - 30102 1 0 0 Fermi2002_100.LHpdf 2 1. 1.E+10 1.E-06 1. Fermi02 - 30103 1 0 0 Fermi2002_100.LHpdf 3 1. 1.E+10 1.E-06 1. Fermi02 - 30104 1 0 0 Fermi2002_100.LHpdf 4 1. 1.E+10 1.E-06 1. Fermi02 - 30105 1 0 0 Fermi2002_100.LHpdf 5 1. 1.E+10 1.E-06 1. Fermi02 - 30106 1 0 0 Fermi2002_100.LHpdf 6 1. 1.E+10 1.E-06 1. Fermi02 - 30107 1 0 0 Fermi2002_100.LHpdf 7 1. 1.E+10 1.E-06 1. Fermi02 - 30108 1 0 0 Fermi2002_100.LHpdf 8 1. 1.E+10 1.E-06 1. Fermi02 - 30109 1 0 0 Fermi2002_100.LHpdf 9 1. 1.E+10 1.E-06 1. Fermi02 - 30110 1 0 0 Fermi2002_100.LHpdf 10 1. 1.E+10 1.E-06 1. Fermi02 - 30111 1 0 0 Fermi2002_100.LHpdf 11 1. 1.E+10 1.E-06 1. Fermi02 - 30112 1 0 0 Fermi2002_100.LHpdf 12 1. 1.E+10 1.E-06 1. Fermi02 - 30113 1 0 0 Fermi2002_100.LHpdf 13 1. 1.E+10 1.E-06 1. Fermi02 - 30114 1 0 0 Fermi2002_100.LHpdf 14 1. 1.E+10 1.E-06 1. Fermi02 - 30115 1 0 0 Fermi2002_100.LHpdf 15 1. 1.E+10 1.E-06 1. Fermi02 - 30116 1 0 0 Fermi2002_100.LHpdf 16 1. 1.E+10 1.E-06 1. Fermi02 - 30117 1 0 0 Fermi2002_100.LHpdf 17 1. 1.E+10 1.E-06 1. Fermi02 - 30118 1 0 0 Fermi2002_100.LHpdf 18 1. 1.E+10 1.E-06 1. Fermi02 - 30119 1 0 0 Fermi2002_100.LHpdf 19 1. 1.E+10 1.E-06 1. Fermi02 - 30120 1 0 0 Fermi2002_100.LHpdf 20 1. 1.E+10 1.E-06 1. Fermi02 - 30121 1 0 0 Fermi2002_100.LHpdf 21 1. 1.E+10 1.E-06 1. Fermi02 - 30122 1 0 0 Fermi2002_100.LHpdf 22 1. 1.E+10 1.E-06 1. Fermi02 - 30123 1 0 0 Fermi2002_100.LHpdf 23 1. 1.E+10 1.E-06 1. Fermi02 - 30124 1 0 0 Fermi2002_100.LHpdf 24 1. 1.E+10 1.E-06 1. Fermi02 - 30125 1 0 0 Fermi2002_100.LHpdf 25 1. 1.E+10 1.E-06 1. Fermi02 - 30126 1 0 0 Fermi2002_100.LHpdf 26 1. 1.E+10 1.E-06 1. Fermi02 - 30127 1 0 0 Fermi2002_100.LHpdf 27 1. 1.E+10 1.E-06 1. Fermi02 - 30128 1 0 0 Fermi2002_100.LHpdf 28 1. 1.E+10 1.E-06 1. Fermi02 - 30129 1 0 0 Fermi2002_100.LHpdf 29 1. 1.E+10 1.E-06 1. Fermi02 - 30130 1 0 0 Fermi2002_100.LHpdf 30 1. 1.E+10 1.E-06 1. Fermi02 - 30131 1 0 0 Fermi2002_100.LHpdf 31 1. 1.E+10 1.E-06 1. Fermi02 - 30132 1 0 0 Fermi2002_100.LHpdf 32 1. 1.E+10 1.E-06 1. Fermi02 - 30133 1 0 0 Fermi2002_100.LHpdf 33 1. 1.E+10 1.E-06 1. Fermi02 - 30134 1 0 0 Fermi2002_100.LHpdf 34 1. 1.E+10 1.E-06 1. Fermi02 - 30135 1 0 0 Fermi2002_100.LHpdf 35 1. 1.E+10 1.E-06 1. Fermi02 - 30136 1 0 0 Fermi2002_100.LHpdf 36 1. 1.E+10 1.E-06 1. Fermi02 - 30137 1 0 0 Fermi2002_100.LHpdf 37 1. 1.E+10 1.E-06 1. Fermi02 - 30138 1 0 0 Fermi2002_100.LHpdf 38 1. 1.E+10 1.E-06 1. Fermi02 - 30139 1 0 0 Fermi2002_100.LHpdf 39 1. 1.E+10 1.E-06 1. Fermi02 - 30140 1 0 0 Fermi2002_100.LHpdf 40 1. 1.E+10 1.E-06 1. Fermi02 - 30141 1 0 0 Fermi2002_100.LHpdf 41 1. 1.E+10 1.E-06 1. Fermi02 - 30142 1 0 0 Fermi2002_100.LHpdf 42 1. 1.E+10 1.E-06 1. Fermi02 - 30143 1 0 0 Fermi2002_100.LHpdf 43 1. 1.E+10 1.E-06 1. Fermi02 - 30144 1 0 0 Fermi2002_100.LHpdf 44 1. 1.E+10 1.E-06 1. Fermi02 - 30145 1 0 0 Fermi2002_100.LHpdf 45 1. 1.E+10 1.E-06 1. Fermi02 - 30146 1 0 0 Fermi2002_100.LHpdf 46 1. 1.E+10 1.E-06 1. Fermi02 - 30147 1 0 0 Fermi2002_100.LHpdf 47 1. 1.E+10 1.E-06 1. Fermi02 - 30148 1 0 0 Fermi2002_100.LHpdf 48 1. 1.E+10 1.E-06 1. Fermi02 - 30149 1 0 0 Fermi2002_100.LHpdf 49 1. 1.E+10 1.E-06 1. Fermi02 - 30150 1 0 0 Fermi2002_100.LHpdf 50 1. 1.E+10 1.E-06 1. Fermi02 - 30151 1 0 0 Fermi2002_100.LHpdf 51 1. 1.E+10 1.E-06 1. Fermi02 - 30152 1 0 0 Fermi2002_100.LHpdf 52 1. 1.E+10 1.E-06 1. Fermi02 - 30153 1 0 0 Fermi2002_100.LHpdf 53 1. 1.E+10 1.E-06 1. Fermi02 - 30154 1 0 0 Fermi2002_100.LHpdf 54 1. 1.E+10 1.E-06 1. Fermi02 - 30155 1 0 0 Fermi2002_100.LHpdf 55 1. 1.E+10 1.E-06 1. Fermi02 - 30156 1 0 0 Fermi2002_100.LHpdf 56 1. 1.E+10 1.E-06 1. Fermi02 - 30157 1 0 0 Fermi2002_100.LHpdf 57 1. 1.E+10 1.E-06 1. Fermi02 - 30158 1 0 0 Fermi2002_100.LHpdf 58 1. 1.E+10 1.E-06 1. Fermi02 - 30159 1 0 0 Fermi2002_100.LHpdf 59 1. 1.E+10 1.E-06 1. Fermi02 - 30160 1 0 0 Fermi2002_100.LHpdf 60 1. 1.E+10 1.E-06 1. Fermi02 - 30161 1 0 0 Fermi2002_100.LHpdf 61 1. 1.E+10 1.E-06 1. Fermi02 - 30162 1 0 0 Fermi2002_100.LHpdf 62 1. 1.E+10 1.E-06 1. Fermi02 - 30163 1 0 0 Fermi2002_100.LHpdf 63 1. 1.E+10 1.E-06 1. Fermi02 - 30164 1 0 0 Fermi2002_100.LHpdf 64 1. 1.E+10 1.E-06 1. Fermi02 - 30165 1 0 0 Fermi2002_100.LHpdf 65 1. 1.E+10 1.E-06 1. Fermi02 - 30166 1 0 0 Fermi2002_100.LHpdf 66 1. 1.E+10 1.E-06 1. Fermi02 - 30167 1 0 0 Fermi2002_100.LHpdf 67 1. 1.E+10 1.E-06 1. Fermi02 - 30168 1 0 0 Fermi2002_100.LHpdf 68 1. 1.E+10 1.E-06 1. Fermi02 - 30169 1 0 0 Fermi2002_100.LHpdf 69 1. 1.E+10 1.E-06 1. Fermi02 - 30170 1 0 0 Fermi2002_100.LHpdf 70 1. 1.E+10 1.E-06 1. Fermi02 - 30171 1 0 0 Fermi2002_100.LHpdf 71 1. 1.E+10 1.E-06 1. Fermi02 - 30172 1 0 0 Fermi2002_100.LHpdf 72 1. 1.E+10 1.E-06 1. Fermi02 - 30173 1 0 0 Fermi2002_100.LHpdf 73 1. 1.E+10 1.E-06 1. Fermi02 - 30174 1 0 0 Fermi2002_100.LHpdf 74 1. 1.E+10 1.E-06 1. Fermi02 - 30175 1 0 0 Fermi2002_100.LHpdf 75 1. 1.E+10 1.E-06 1. Fermi02 - 30176 1 0 0 Fermi2002_100.LHpdf 76 1. 1.E+10 1.E-06 1. Fermi02 - 30177 1 0 0 Fermi2002_100.LHpdf 77 1. 1.E+10 1.E-06 1. Fermi02 - 30178 1 0 0 Fermi2002_100.LHpdf 78 1. 1.E+10 1.E-06 1. Fermi02 - 30179 1 0 0 Fermi2002_100.LHpdf 79 1. 1.E+10 1.E-06 1. Fermi02 - 30180 1 0 0 Fermi2002_100.LHpdf 80 1. 1.E+10 1.E-06 1. Fermi02 - 30181 1 0 0 Fermi2002_100.LHpdf 81 1. 1.E+10 1.E-06 1. Fermi02 - 30182 1 0 0 Fermi2002_100.LHpdf 82 1. 1.E+10 1.E-06 1. Fermi02 - 30183 1 0 0 Fermi2002_100.LHpdf 83 1. 1.E+10 1.E-06 1. Fermi02 - 30184 1 0 0 Fermi2002_100.LHpdf 84 1. 1.E+10 1.E-06 1. Fermi02 - 30185 1 0 0 Fermi2002_100.LHpdf 85 1. 1.E+10 1.E-06 1. Fermi02 - 30186 1 0 0 Fermi2002_100.LHpdf 86 1. 1.E+10 1.E-06 1. Fermi02 - 30187 1 0 0 Fermi2002_100.LHpdf 87 1. 1.E+10 1.E-06 1. Fermi02 - 30188 1 0 0 Fermi2002_100.LHpdf 88 1. 1.E+10 1.E-06 1. Fermi02 - 30189 1 0 0 Fermi2002_100.LHpdf 89 1. 1.E+10 1.E-06 1. Fermi02 - 30190 1 0 0 Fermi2002_100.LHpdf 90 1. 1.E+10 1.E-06 1. Fermi02 - 30191 1 0 0 Fermi2002_100.LHpdf 91 1. 1.E+10 1.E-06 1. Fermi02 - 30192 1 0 0 Fermi2002_100.LHpdf 92 1. 1.E+10 1.E-06 1. Fermi02 - 30193 1 0 0 Fermi2002_100.LHpdf 93 1. 1.E+10 1.E-06 1. Fermi02 - 30194 1 0 0 Fermi2002_100.LHpdf 94 1. 1.E+10 1.E-06 1. Fermi02 - 30195 1 0 0 Fermi2002_100.LHpdf 95 1. 1.E+10 1.E-06 1. Fermi02 - 30196 1 0 0 Fermi2002_100.LHpdf 96 1. 1.E+10 1.E-06 1. Fermi02 - 30197 1 0 0 Fermi2002_100.LHpdf 97 1. 1.E+10 1.E-06 1. Fermi02 - 30198 1 0 0 Fermi2002_100.LHpdf 98 1. 1.E+10 1.E-06 1. Fermi02 - 30199 1 0 0 Fermi2002_100.LHpdf 99 1. 1.E+10 1.E-06 1. Fermi02 - 30200 1 0 0 Fermi2002_100.LHpdf 100 1. 1.E+10 1.E-06 1. Fermi02 - 31000 1 0 0 Fermi2002_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Fermi02 - 31001 1 0 0 Fermi2002_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Fermi02 - 31002 1 0 0 Fermi2002_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Fermi02 - 31003 1 0 0 Fermi2002_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Fermi02 - 31004 1 0 0 Fermi2002_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Fermi02 - 31005 1 0 0 Fermi2002_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Fermi02 - 31006 1 0 0 Fermi2002_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Fermi02 - 31007 1 0 0 Fermi2002_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Fermi02 - 31008 1 0 0 Fermi2002_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Fermi02 - 31009 1 0 0 Fermi2002_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Fermi02 - 31010 1 0 0 Fermi2002_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Fermi02 - 31011 1 0 0 Fermi2002_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Fermi02 - 31012 1 0 0 Fermi2002_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Fermi02 - 31013 1 0 0 Fermi2002_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Fermi02 - 31014 1 0 0 Fermi2002_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Fermi02 - 31015 1 0 0 Fermi2002_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Fermi02 - 31016 1 0 0 Fermi2002_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Fermi02 - 31017 1 0 0 Fermi2002_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Fermi02 - 31018 1 0 0 Fermi2002_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Fermi02 - 31019 1 0 0 Fermi2002_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Fermi02 - 31020 1 0 0 Fermi2002_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Fermi02 - 31021 1 0 0 Fermi2002_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Fermi02 - 31022 1 0 0 Fermi2002_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Fermi02 - 31023 1 0 0 Fermi2002_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Fermi02 - 31024 1 0 0 Fermi2002_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Fermi02 - 31025 1 0 0 Fermi2002_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Fermi02 - 31026 1 0 0 Fermi2002_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Fermi02 - 31027 1 0 0 Fermi2002_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Fermi02 - 31028 1 0 0 Fermi2002_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Fermi02 - 31029 1 0 0 Fermi2002_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Fermi02 - 31030 1 0 0 Fermi2002_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Fermi02 - 31031 1 0 0 Fermi2002_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Fermi02 - 31032 1 0 0 Fermi2002_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Fermi02 - 31033 1 0 0 Fermi2002_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Fermi02 - 31034 1 0 0 Fermi2002_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Fermi02 - 31035 1 0 0 Fermi2002_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Fermi02 - 31036 1 0 0 Fermi2002_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Fermi02 - 31037 1 0 0 Fermi2002_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Fermi02 - 31038 1 0 0 Fermi2002_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Fermi02 - 31039 1 0 0 Fermi2002_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Fermi02 - 31040 1 0 0 Fermi2002_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Fermi02 - 31041 1 0 0 Fermi2002_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Fermi02 - 31042 1 0 0 Fermi2002_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Fermi02 - 31043 1 0 0 Fermi2002_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Fermi02 - 31044 1 0 0 Fermi2002_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Fermi02 - 31045 1 0 0 Fermi2002_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Fermi02 - 31046 1 0 0 Fermi2002_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Fermi02 - 31047 1 0 0 Fermi2002_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Fermi02 - 31048 1 0 0 Fermi2002_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Fermi02 - 31049 1 0 0 Fermi2002_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Fermi02 - 31050 1 0 0 Fermi2002_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Fermi02 - 31051 1 0 0 Fermi2002_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Fermi02 - 31052 1 0 0 Fermi2002_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Fermi02 - 31053 1 0 0 Fermi2002_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Fermi02 - 31054 1 0 0 Fermi2002_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Fermi02 - 31055 1 0 0 Fermi2002_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Fermi02 - 31056 1 0 0 Fermi2002_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Fermi02 - 31057 1 0 0 Fermi2002_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Fermi02 - 31058 1 0 0 Fermi2002_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Fermi02 - 31059 1 0 0 Fermi2002_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Fermi02 - 31060 1 0 0 Fermi2002_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Fermi02 - 31061 1 0 0 Fermi2002_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Fermi02 - 31062 1 0 0 Fermi2002_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Fermi02 - 31063 1 0 0 Fermi2002_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Fermi02 - 31064 1 0 0 Fermi2002_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Fermi02 - 31065 1 0 0 Fermi2002_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Fermi02 - 31066 1 0 0 Fermi2002_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Fermi02 - 31067 1 0 0 Fermi2002_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Fermi02 - 31068 1 0 0 Fermi2002_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Fermi02 - 31069 1 0 0 Fermi2002_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Fermi02 - 31070 1 0 0 Fermi2002_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Fermi02 - 31071 1 0 0 Fermi2002_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Fermi02 - 31072 1 0 0 Fermi2002_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Fermi02 - 31073 1 0 0 Fermi2002_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Fermi02 - 31074 1 0 0 Fermi2002_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Fermi02 - 31075 1 0 0 Fermi2002_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Fermi02 - 31076 1 0 0 Fermi2002_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Fermi02 - 31077 1 0 0 Fermi2002_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Fermi02 - 31078 1 0 0 Fermi2002_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Fermi02 - 31079 1 0 0 Fermi2002_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Fermi02 - 31080 1 0 0 Fermi2002_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Fermi02 - 31081 1 0 0 Fermi2002_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Fermi02 - 31082 1 0 0 Fermi2002_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Fermi02 - 31083 1 0 0 Fermi2002_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Fermi02 - 31084 1 0 0 Fermi2002_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Fermi02 - 31085 1 0 0 Fermi2002_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Fermi02 - 31086 1 0 0 Fermi2002_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Fermi02 - 31087 1 0 0 Fermi2002_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Fermi02 - 31088 1 0 0 Fermi2002_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Fermi02 - 31089 1 0 0 Fermi2002_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Fermi02 - 31090 1 0 0 Fermi2002_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Fermi02 - 31091 1 0 0 Fermi2002_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Fermi02 - 31092 1 0 0 Fermi2002_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Fermi02 - 31093 1 0 0 Fermi2002_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Fermi02 - 31094 1 0 0 Fermi2002_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Fermi02 - 31095 1 0 0 Fermi2002_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Fermi02 - 31096 1 0 0 Fermi2002_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Fermi02 - 31097 1 0 0 Fermi2002_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Fermi02 - 31098 1 0 0 Fermi2002_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Fermi02 - 31099 1 0 0 Fermi2002_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Fermi02 - 31100 1 0 0 Fermi2002_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Fermi02 - 31101 1 0 0 Fermi2002_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Fermi02 - 31102 1 0 0 Fermi2002_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Fermi02 - 31103 1 0 0 Fermi2002_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Fermi02 - 31104 1 0 0 Fermi2002_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Fermi02 - 31105 1 0 0 Fermi2002_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Fermi02 - 31106 1 0 0 Fermi2002_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Fermi02 - 31107 1 0 0 Fermi2002_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Fermi02 - 31108 1 0 0 Fermi2002_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Fermi02 - 31109 1 0 0 Fermi2002_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Fermi02 - 31110 1 0 0 Fermi2002_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Fermi02 - 31111 1 0 0 Fermi2002_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Fermi02 - 31112 1 0 0 Fermi2002_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Fermi02 - 31113 1 0 0 Fermi2002_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Fermi02 - 31114 1 0 0 Fermi2002_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Fermi02 - 31115 1 0 0 Fermi2002_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Fermi02 - 31116 1 0 0 Fermi2002_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Fermi02 - 31117 1 0 0 Fermi2002_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Fermi02 - 31118 1 0 0 Fermi2002_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Fermi02 - 31119 1 0 0 Fermi2002_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Fermi02 - 31120 1 0 0 Fermi2002_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Fermi02 - 31121 1 0 0 Fermi2002_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Fermi02 - 31122 1 0 0 Fermi2002_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Fermi02 - 31123 1 0 0 Fermi2002_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Fermi02 - 31124 1 0 0 Fermi2002_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Fermi02 - 31125 1 0 0 Fermi2002_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Fermi02 - 31126 1 0 0 Fermi2002_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Fermi02 - 31127 1 0 0 Fermi2002_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Fermi02 - 31128 1 0 0 Fermi2002_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Fermi02 - 31129 1 0 0 Fermi2002_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Fermi02 - 31130 1 0 0 Fermi2002_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Fermi02 - 31131 1 0 0 Fermi2002_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Fermi02 - 31132 1 0 0 Fermi2002_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Fermi02 - 31133 1 0 0 Fermi2002_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Fermi02 - 31134 1 0 0 Fermi2002_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Fermi02 - 31135 1 0 0 Fermi2002_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Fermi02 - 31136 1 0 0 Fermi2002_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Fermi02 - 31137 1 0 0 Fermi2002_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Fermi02 - 31138 1 0 0 Fermi2002_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Fermi02 - 31139 1 0 0 Fermi2002_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Fermi02 - 31140 1 0 0 Fermi2002_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Fermi02 - 31141 1 0 0 Fermi2002_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Fermi02 - 31142 1 0 0 Fermi2002_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Fermi02 - 31143 1 0 0 Fermi2002_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Fermi02 - 31144 1 0 0 Fermi2002_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Fermi02 - 31145 1 0 0 Fermi2002_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Fermi02 - 31146 1 0 0 Fermi2002_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Fermi02 - 31147 1 0 0 Fermi2002_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Fermi02 - 31148 1 0 0 Fermi2002_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Fermi02 - 31149 1 0 0 Fermi2002_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Fermi02 - 31150 1 0 0 Fermi2002_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Fermi02 - 31151 1 0 0 Fermi2002_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Fermi02 - 31152 1 0 0 Fermi2002_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Fermi02 - 31153 1 0 0 Fermi2002_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Fermi02 - 31154 1 0 0 Fermi2002_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Fermi02 - 31155 1 0 0 Fermi2002_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Fermi02 - 31156 1 0 0 Fermi2002_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Fermi02 - 31157 1 0 0 Fermi2002_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Fermi02 - 31158 1 0 0 Fermi2002_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Fermi02 - 31159 1 0 0 Fermi2002_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Fermi02 - 31160 1 0 0 Fermi2002_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Fermi02 - 31161 1 0 0 Fermi2002_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Fermi02 - 31162 1 0 0 Fermi2002_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Fermi02 - 31163 1 0 0 Fermi2002_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Fermi02 - 31164 1 0 0 Fermi2002_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Fermi02 - 31165 1 0 0 Fermi2002_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Fermi02 - 31166 1 0 0 Fermi2002_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Fermi02 - 31167 1 0 0 Fermi2002_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Fermi02 - 31168 1 0 0 Fermi2002_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Fermi02 - 31169 1 0 0 Fermi2002_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Fermi02 - 31170 1 0 0 Fermi2002_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Fermi02 - 31171 1 0 0 Fermi2002_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Fermi02 - 31172 1 0 0 Fermi2002_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Fermi02 - 31173 1 0 0 Fermi2002_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Fermi02 - 31174 1 0 0 Fermi2002_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Fermi02 - 31175 1 0 0 Fermi2002_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Fermi02 - 31176 1 0 0 Fermi2002_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Fermi02 - 31177 1 0 0 Fermi2002_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Fermi02 - 31178 1 0 0 Fermi2002_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Fermi02 - 31179 1 0 0 Fermi2002_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Fermi02 - 31180 1 0 0 Fermi2002_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Fermi02 - 31181 1 0 0 Fermi2002_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Fermi02 - 31182 1 0 0 Fermi2002_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Fermi02 - 31183 1 0 0 Fermi2002_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Fermi02 - 31184 1 0 0 Fermi2002_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Fermi02 - 31185 1 0 0 Fermi2002_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Fermi02 - 31186 1 0 0 Fermi2002_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Fermi02 - 31187 1 0 0 Fermi2002_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Fermi02 - 31188 1 0 0 Fermi2002_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Fermi02 - 31189 1 0 0 Fermi2002_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Fermi02 - 31190 1 0 0 Fermi2002_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Fermi02 - 31191 1 0 0 Fermi2002_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Fermi02 - 31192 1 0 0 Fermi2002_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Fermi02 - 31193 1 0 0 Fermi2002_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Fermi02 - 31194 1 0 0 Fermi2002_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Fermi02 - 31195 1 0 0 Fermi2002_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Fermi02 - 31196 1 0 0 Fermi2002_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Fermi02 - 31197 1 0 0 Fermi2002_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Fermi02 - 31198 1 0 0 Fermi2002_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Fermi02 - 31199 1 0 0 Fermi2002_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Fermi02 - 31200 1 0 0 Fermi2002_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Fermi02 - 31201 1 0 0 Fermi2002_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Fermi02 - 31202 1 0 0 Fermi2002_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Fermi02 - 31203 1 0 0 Fermi2002_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Fermi02 - 31204 1 0 0 Fermi2002_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Fermi02 - 31205 1 0 0 Fermi2002_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Fermi02 - 31206 1 0 0 Fermi2002_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Fermi02 - 31207 1 0 0 Fermi2002_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Fermi02 - 31208 1 0 0 Fermi2002_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Fermi02 - 31209 1 0 0 Fermi2002_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Fermi02 - 31210 1 0 0 Fermi2002_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Fermi02 - 31211 1 0 0 Fermi2002_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Fermi02 - 31212 1 0 0 Fermi2002_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Fermi02 - 31213 1 0 0 Fermi2002_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Fermi02 - 31214 1 0 0 Fermi2002_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Fermi02 - 31215 1 0 0 Fermi2002_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Fermi02 - 31216 1 0 0 Fermi2002_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Fermi02 - 31217 1 0 0 Fermi2002_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Fermi02 - 31218 1 0 0 Fermi2002_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Fermi02 - 31219 1 0 0 Fermi2002_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Fermi02 - 31220 1 0 0 Fermi2002_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Fermi02 - 31221 1 0 0 Fermi2002_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Fermi02 - 31222 1 0 0 Fermi2002_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Fermi02 - 31223 1 0 0 Fermi2002_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Fermi02 - 31224 1 0 0 Fermi2002_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Fermi02 - 31225 1 0 0 Fermi2002_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Fermi02 - 31226 1 0 0 Fermi2002_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Fermi02 - 31227 1 0 0 Fermi2002_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Fermi02 - 31228 1 0 0 Fermi2002_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Fermi02 - 31229 1 0 0 Fermi2002_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Fermi02 - 31230 1 0 0 Fermi2002_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Fermi02 - 31231 1 0 0 Fermi2002_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Fermi02 - 31232 1 0 0 Fermi2002_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Fermi02 - 31233 1 0 0 Fermi2002_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Fermi02 - 31234 1 0 0 Fermi2002_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Fermi02 - 31235 1 0 0 Fermi2002_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Fermi02 - 31236 1 0 0 Fermi2002_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Fermi02 - 31237 1 0 0 Fermi2002_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Fermi02 - 31238 1 0 0 Fermi2002_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Fermi02 - 31239 1 0 0 Fermi2002_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Fermi02 - 31240 1 0 0 Fermi2002_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Fermi02 - 31241 1 0 0 Fermi2002_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Fermi02 - 31242 1 0 0 Fermi2002_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Fermi02 - 31243 1 0 0 Fermi2002_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Fermi02 - 31244 1 0 0 Fermi2002_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Fermi02 - 31245 1 0 0 Fermi2002_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Fermi02 - 31246 1 0 0 Fermi2002_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Fermi02 - 31247 1 0 0 Fermi2002_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Fermi02 - 31248 1 0 0 Fermi2002_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Fermi02 - 31249 1 0 0 Fermi2002_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Fermi02 - 31250 1 0 0 Fermi2002_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Fermi02 - 31251 1 0 0 Fermi2002_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Fermi02 - 31252 1 0 0 Fermi2002_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Fermi02 - 31253 1 0 0 Fermi2002_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Fermi02 - 31254 1 0 0 Fermi2002_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Fermi02 - 31255 1 0 0 Fermi2002_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Fermi02 - 31256 1 0 0 Fermi2002_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Fermi02 - 31257 1 0 0 Fermi2002_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Fermi02 - 31258 1 0 0 Fermi2002_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Fermi02 - 31259 1 0 0 Fermi2002_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Fermi02 - 31260 1 0 0 Fermi2002_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Fermi02 - 31261 1 0 0 Fermi2002_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Fermi02 - 31262 1 0 0 Fermi2002_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Fermi02 - 31263 1 0 0 Fermi2002_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Fermi02 - 31264 1 0 0 Fermi2002_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Fermi02 - 31265 1 0 0 Fermi2002_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Fermi02 - 31266 1 0 0 Fermi2002_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Fermi02 - 31267 1 0 0 Fermi2002_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Fermi02 - 31268 1 0 0 Fermi2002_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Fermi02 - 31269 1 0 0 Fermi2002_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Fermi02 - 31270 1 0 0 Fermi2002_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Fermi02 - 31271 1 0 0 Fermi2002_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Fermi02 - 31272 1 0 0 Fermi2002_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Fermi02 - 31273 1 0 0 Fermi2002_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Fermi02 - 31274 1 0 0 Fermi2002_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Fermi02 - 31275 1 0 0 Fermi2002_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Fermi02 - 31276 1 0 0 Fermi2002_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Fermi02 - 31277 1 0 0 Fermi2002_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Fermi02 - 31278 1 0 0 Fermi2002_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Fermi02 - 31279 1 0 0 Fermi2002_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Fermi02 - 31280 1 0 0 Fermi2002_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Fermi02 - 31281 1 0 0 Fermi2002_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Fermi02 - 31282 1 0 0 Fermi2002_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Fermi02 - 31283 1 0 0 Fermi2002_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Fermi02 - 31284 1 0 0 Fermi2002_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Fermi02 - 31285 1 0 0 Fermi2002_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Fermi02 - 31286 1 0 0 Fermi2002_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Fermi02 - 31287 1 0 0 Fermi2002_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Fermi02 - 31288 1 0 0 Fermi2002_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Fermi02 - 31289 1 0 0 Fermi2002_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Fermi02 - 31290 1 0 0 Fermi2002_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Fermi02 - 31291 1 0 0 Fermi2002_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Fermi02 - 31292 1 0 0 Fermi2002_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Fermi02 - 31293 1 0 0 Fermi2002_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Fermi02 - 31294 1 0 0 Fermi2002_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Fermi02 - 31295 1 0 0 Fermi2002_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Fermi02 - 31296 1 0 0 Fermi2002_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Fermi02 - 31297 1 0 0 Fermi2002_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Fermi02 - 31298 1 0 0 Fermi2002_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Fermi02 - 31299 1 0 0 Fermi2002_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Fermi02 - 31300 1 0 0 Fermi2002_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Fermi02 - 31301 1 0 0 Fermi2002_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Fermi02 - 31302 1 0 0 Fermi2002_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Fermi02 - 31303 1 0 0 Fermi2002_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Fermi02 - 31304 1 0 0 Fermi2002_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Fermi02 - 31305 1 0 0 Fermi2002_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Fermi02 - 31306 1 0 0 Fermi2002_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Fermi02 - 31307 1 0 0 Fermi2002_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Fermi02 - 31308 1 0 0 Fermi2002_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Fermi02 - 31309 1 0 0 Fermi2002_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Fermi02 - 31310 1 0 0 Fermi2002_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Fermi02 - 31311 1 0 0 Fermi2002_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Fermi02 - 31312 1 0 0 Fermi2002_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Fermi02 - 31313 1 0 0 Fermi2002_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Fermi02 - 31314 1 0 0 Fermi2002_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Fermi02 - 31315 1 0 0 Fermi2002_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Fermi02 - 31316 1 0 0 Fermi2002_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Fermi02 - 31317 1 0 0 Fermi2002_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Fermi02 - 31318 1 0 0 Fermi2002_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Fermi02 - 31319 1 0 0 Fermi2002_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Fermi02 - 31320 1 0 0 Fermi2002_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Fermi02 - 31321 1 0 0 Fermi2002_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Fermi02 - 31322 1 0 0 Fermi2002_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Fermi02 - 31323 1 0 0 Fermi2002_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Fermi02 - 31324 1 0 0 Fermi2002_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Fermi02 - 31325 1 0 0 Fermi2002_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Fermi02 - 31326 1 0 0 Fermi2002_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Fermi02 - 31327 1 0 0 Fermi2002_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Fermi02 - 31328 1 0 0 Fermi2002_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Fermi02 - 31329 1 0 0 Fermi2002_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Fermi02 - 31330 1 0 0 Fermi2002_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Fermi02 - 31331 1 0 0 Fermi2002_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Fermi02 - 31332 1 0 0 Fermi2002_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Fermi02 - 31333 1 0 0 Fermi2002_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Fermi02 - 31334 1 0 0 Fermi2002_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Fermi02 - 31335 1 0 0 Fermi2002_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Fermi02 - 31336 1 0 0 Fermi2002_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Fermi02 - 31337 1 0 0 Fermi2002_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Fermi02 - 31338 1 0 0 Fermi2002_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Fermi02 - 31339 1 0 0 Fermi2002_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Fermi02 - 31340 1 0 0 Fermi2002_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Fermi02 - 31341 1 0 0 Fermi2002_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Fermi02 - 31342 1 0 0 Fermi2002_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Fermi02 - 31343 1 0 0 Fermi2002_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Fermi02 - 31344 1 0 0 Fermi2002_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Fermi02 - 31345 1 0 0 Fermi2002_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Fermi02 - 31346 1 0 0 Fermi2002_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Fermi02 - 31347 1 0 0 Fermi2002_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Fermi02 - 31348 1 0 0 Fermi2002_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Fermi02 - 31349 1 0 0 Fermi2002_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Fermi02 - 31350 1 0 0 Fermi2002_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Fermi02 - 31351 1 0 0 Fermi2002_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Fermi02 - 31352 1 0 0 Fermi2002_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Fermi02 - 31353 1 0 0 Fermi2002_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Fermi02 - 31354 1 0 0 Fermi2002_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Fermi02 - 31355 1 0 0 Fermi2002_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Fermi02 - 31356 1 0 0 Fermi2002_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Fermi02 - 31357 1 0 0 Fermi2002_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Fermi02 - 31358 1 0 0 Fermi2002_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Fermi02 - 31359 1 0 0 Fermi2002_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Fermi02 - 31360 1 0 0 Fermi2002_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Fermi02 - 31361 1 0 0 Fermi2002_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Fermi02 - 31362 1 0 0 Fermi2002_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Fermi02 - 31363 1 0 0 Fermi2002_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Fermi02 - 31364 1 0 0 Fermi2002_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Fermi02 - 31365 1 0 0 Fermi2002_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Fermi02 - 31366 1 0 0 Fermi2002_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Fermi02 - 31367 1 0 0 Fermi2002_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Fermi02 - 31368 1 0 0 Fermi2002_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Fermi02 - 31369 1 0 0 Fermi2002_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Fermi02 - 31370 1 0 0 Fermi2002_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Fermi02 - 31371 1 0 0 Fermi2002_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Fermi02 - 31372 1 0 0 Fermi2002_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Fermi02 - 31373 1 0 0 Fermi2002_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Fermi02 - 31374 1 0 0 Fermi2002_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Fermi02 - 31375 1 0 0 Fermi2002_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Fermi02 - 31376 1 0 0 Fermi2002_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Fermi02 - 31377 1 0 0 Fermi2002_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Fermi02 - 31378 1 0 0 Fermi2002_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Fermi02 - 31379 1 0 0 Fermi2002_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Fermi02 - 31380 1 0 0 Fermi2002_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Fermi02 - 31381 1 0 0 Fermi2002_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Fermi02 - 31382 1 0 0 Fermi2002_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Fermi02 - 31383 1 0 0 Fermi2002_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Fermi02 - 31384 1 0 0 Fermi2002_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Fermi02 - 31385 1 0 0 Fermi2002_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Fermi02 - 31386 1 0 0 Fermi2002_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Fermi02 - 31387 1 0 0 Fermi2002_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Fermi02 - 31388 1 0 0 Fermi2002_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Fermi02 - 31389 1 0 0 Fermi2002_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Fermi02 - 31390 1 0 0 Fermi2002_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Fermi02 - 31391 1 0 0 Fermi2002_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Fermi02 - 31392 1 0 0 Fermi2002_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Fermi02 - 31393 1 0 0 Fermi2002_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Fermi02 - 31394 1 0 0 Fermi2002_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Fermi02 - 31395 1 0 0 Fermi2002_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Fermi02 - 31396 1 0 0 Fermi2002_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Fermi02 - 31397 1 0 0 Fermi2002_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Fermi02 - 31398 1 0 0 Fermi2002_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Fermi02 - 31399 1 0 0 Fermi2002_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Fermi02 - 31400 1 0 0 Fermi2002_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Fermi02 - 31401 1 0 0 Fermi2002_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Fermi02 - 31402 1 0 0 Fermi2002_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Fermi02 - 31403 1 0 0 Fermi2002_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Fermi02 - 31404 1 0 0 Fermi2002_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Fermi02 - 31405 1 0 0 Fermi2002_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Fermi02 - 31406 1 0 0 Fermi2002_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Fermi02 - 31407 1 0 0 Fermi2002_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Fermi02 - 31408 1 0 0 Fermi2002_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Fermi02 - 31409 1 0 0 Fermi2002_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Fermi02 - 31410 1 0 0 Fermi2002_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Fermi02 - 31411 1 0 0 Fermi2002_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Fermi02 - 31412 1 0 0 Fermi2002_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Fermi02 - 31413 1 0 0 Fermi2002_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Fermi02 - 31414 1 0 0 Fermi2002_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Fermi02 - 31415 1 0 0 Fermi2002_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Fermi02 - 31416 1 0 0 Fermi2002_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Fermi02 - 31417 1 0 0 Fermi2002_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Fermi02 - 31418 1 0 0 Fermi2002_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Fermi02 - 31419 1 0 0 Fermi2002_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Fermi02 - 31420 1 0 0 Fermi2002_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Fermi02 - 31421 1 0 0 Fermi2002_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Fermi02 - 31422 1 0 0 Fermi2002_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Fermi02 - 31423 1 0 0 Fermi2002_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Fermi02 - 31424 1 0 0 Fermi2002_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Fermi02 - 31425 1 0 0 Fermi2002_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Fermi02 - 31426 1 0 0 Fermi2002_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Fermi02 - 31427 1 0 0 Fermi2002_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Fermi02 - 31428 1 0 0 Fermi2002_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Fermi02 - 31429 1 0 0 Fermi2002_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Fermi02 - 31430 1 0 0 Fermi2002_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Fermi02 - 31431 1 0 0 Fermi2002_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Fermi02 - 31432 1 0 0 Fermi2002_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Fermi02 - 31433 1 0 0 Fermi2002_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Fermi02 - 31434 1 0 0 Fermi2002_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Fermi02 - 31435 1 0 0 Fermi2002_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Fermi02 - 31436 1 0 0 Fermi2002_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Fermi02 - 31437 1 0 0 Fermi2002_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Fermi02 - 31438 1 0 0 Fermi2002_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Fermi02 - 31439 1 0 0 Fermi2002_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Fermi02 - 31440 1 0 0 Fermi2002_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Fermi02 - 31441 1 0 0 Fermi2002_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Fermi02 - 31442 1 0 0 Fermi2002_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Fermi02 - 31443 1 0 0 Fermi2002_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Fermi02 - 31444 1 0 0 Fermi2002_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Fermi02 - 31445 1 0 0 Fermi2002_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Fermi02 - 31446 1 0 0 Fermi2002_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Fermi02 - 31447 1 0 0 Fermi2002_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Fermi02 - 31448 1 0 0 Fermi2002_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Fermi02 - 31449 1 0 0 Fermi2002_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Fermi02 - 31450 1 0 0 Fermi2002_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Fermi02 - 31451 1 0 0 Fermi2002_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Fermi02 - 31452 1 0 0 Fermi2002_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Fermi02 - 31453 1 0 0 Fermi2002_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Fermi02 - 31454 1 0 0 Fermi2002_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Fermi02 - 31455 1 0 0 Fermi2002_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Fermi02 - 31456 1 0 0 Fermi2002_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Fermi02 - 31457 1 0 0 Fermi2002_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Fermi02 - 31458 1 0 0 Fermi2002_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Fermi02 - 31459 1 0 0 Fermi2002_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Fermi02 - 31460 1 0 0 Fermi2002_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Fermi02 - 31461 1 0 0 Fermi2002_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Fermi02 - 31462 1 0 0 Fermi2002_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Fermi02 - 31463 1 0 0 Fermi2002_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Fermi02 - 31464 1 0 0 Fermi2002_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Fermi02 - 31465 1 0 0 Fermi2002_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Fermi02 - 31466 1 0 0 Fermi2002_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Fermi02 - 31467 1 0 0 Fermi2002_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Fermi02 - 31468 1 0 0 Fermi2002_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Fermi02 - 31469 1 0 0 Fermi2002_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Fermi02 - 31470 1 0 0 Fermi2002_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Fermi02 - 31471 1 0 0 Fermi2002_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Fermi02 - 31472 1 0 0 Fermi2002_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Fermi02 - 31473 1 0 0 Fermi2002_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Fermi02 - 31474 1 0 0 Fermi2002_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Fermi02 - 31475 1 0 0 Fermi2002_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Fermi02 - 31476 1 0 0 Fermi2002_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Fermi02 - 31477 1 0 0 Fermi2002_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Fermi02 - 31478 1 0 0 Fermi2002_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Fermi02 - 31479 1 0 0 Fermi2002_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Fermi02 - 31480 1 0 0 Fermi2002_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Fermi02 - 31481 1 0 0 Fermi2002_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Fermi02 - 31482 1 0 0 Fermi2002_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Fermi02 - 31483 1 0 0 Fermi2002_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Fermi02 - 31484 1 0 0 Fermi2002_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Fermi02 - 31485 1 0 0 Fermi2002_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Fermi02 - 31486 1 0 0 Fermi2002_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Fermi02 - 31487 1 0 0 Fermi2002_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Fermi02 - 31488 1 0 0 Fermi2002_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Fermi02 - 31489 1 0 0 Fermi2002_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Fermi02 - 31490 1 0 0 Fermi2002_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Fermi02 - 31491 1 0 0 Fermi2002_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Fermi02 - 31492 1 0 0 Fermi2002_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Fermi02 - 31493 1 0 0 Fermi2002_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Fermi02 - 31494 1 0 0 Fermi2002_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Fermi02 - 31495 1 0 0 Fermi2002_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Fermi02 - 31496 1 0 0 Fermi2002_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Fermi02 - 31497 1 0 0 Fermi2002_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Fermi02 - 31498 1 0 0 Fermi2002_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Fermi02 - 31499 1 0 0 Fermi2002_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Fermi02 - 31500 1 0 0 Fermi2002_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Fermi02 - 31501 1 0 0 Fermi2002_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Fermi02 - 31502 1 0 0 Fermi2002_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Fermi02 - 31503 1 0 0 Fermi2002_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Fermi02 - 31504 1 0 0 Fermi2002_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Fermi02 - 31505 1 0 0 Fermi2002_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Fermi02 - 31506 1 0 0 Fermi2002_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Fermi02 - 31507 1 0 0 Fermi2002_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Fermi02 - 31508 1 0 0 Fermi2002_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Fermi02 - 31509 1 0 0 Fermi2002_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Fermi02 - 31510 1 0 0 Fermi2002_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Fermi02 - 31511 1 0 0 Fermi2002_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Fermi02 - 31512 1 0 0 Fermi2002_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Fermi02 - 31513 1 0 0 Fermi2002_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Fermi02 - 31514 1 0 0 Fermi2002_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Fermi02 - 31515 1 0 0 Fermi2002_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Fermi02 - 31516 1 0 0 Fermi2002_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Fermi02 - 31517 1 0 0 Fermi2002_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Fermi02 - 31518 1 0 0 Fermi2002_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Fermi02 - 31519 1 0 0 Fermi2002_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Fermi02 - 31520 1 0 0 Fermi2002_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Fermi02 - 31521 1 0 0 Fermi2002_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Fermi02 - 31522 1 0 0 Fermi2002_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Fermi02 - 31523 1 0 0 Fermi2002_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Fermi02 - 31524 1 0 0 Fermi2002_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Fermi02 - 31525 1 0 0 Fermi2002_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Fermi02 - 31526 1 0 0 Fermi2002_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Fermi02 - 31527 1 0 0 Fermi2002_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Fermi02 - 31528 1 0 0 Fermi2002_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Fermi02 - 31529 1 0 0 Fermi2002_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Fermi02 - 31530 1 0 0 Fermi2002_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Fermi02 - 31531 1 0 0 Fermi2002_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Fermi02 - 31532 1 0 0 Fermi2002_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Fermi02 - 31533 1 0 0 Fermi2002_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Fermi02 - 31534 1 0 0 Fermi2002_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Fermi02 - 31535 1 0 0 Fermi2002_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Fermi02 - 31536 1 0 0 Fermi2002_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Fermi02 - 31537 1 0 0 Fermi2002_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Fermi02 - 31538 1 0 0 Fermi2002_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Fermi02 - 31539 1 0 0 Fermi2002_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Fermi02 - 31540 1 0 0 Fermi2002_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Fermi02 - 31541 1 0 0 Fermi2002_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Fermi02 - 31542 1 0 0 Fermi2002_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Fermi02 - 31543 1 0 0 Fermi2002_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Fermi02 - 31544 1 0 0 Fermi2002_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Fermi02 - 31545 1 0 0 Fermi2002_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Fermi02 - 31546 1 0 0 Fermi2002_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Fermi02 - 31547 1 0 0 Fermi2002_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Fermi02 - 31548 1 0 0 Fermi2002_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Fermi02 - 31549 1 0 0 Fermi2002_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Fermi02 - 31550 1 0 0 Fermi2002_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Fermi02 - 31551 1 0 0 Fermi2002_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Fermi02 - 31552 1 0 0 Fermi2002_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Fermi02 - 31553 1 0 0 Fermi2002_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Fermi02 - 31554 1 0 0 Fermi2002_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Fermi02 - 31555 1 0 0 Fermi2002_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Fermi02 - 31556 1 0 0 Fermi2002_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Fermi02 - 31557 1 0 0 Fermi2002_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Fermi02 - 31558 1 0 0 Fermi2002_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Fermi02 - 31559 1 0 0 Fermi2002_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Fermi02 - 31560 1 0 0 Fermi2002_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Fermi02 - 31561 1 0 0 Fermi2002_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Fermi02 - 31562 1 0 0 Fermi2002_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Fermi02 - 31563 1 0 0 Fermi2002_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Fermi02 - 31564 1 0 0 Fermi2002_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Fermi02 - 31565 1 0 0 Fermi2002_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Fermi02 - 31566 1 0 0 Fermi2002_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Fermi02 - 31567 1 0 0 Fermi2002_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Fermi02 - 31568 1 0 0 Fermi2002_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Fermi02 - 31569 1 0 0 Fermi2002_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Fermi02 - 31570 1 0 0 Fermi2002_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Fermi02 - 31571 1 0 0 Fermi2002_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Fermi02 - 31572 1 0 0 Fermi2002_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Fermi02 - 31573 1 0 0 Fermi2002_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Fermi02 - 31574 1 0 0 Fermi2002_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Fermi02 - 31575 1 0 0 Fermi2002_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Fermi02 - 31576 1 0 0 Fermi2002_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Fermi02 - 31577 1 0 0 Fermi2002_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Fermi02 - 31578 1 0 0 Fermi2002_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Fermi02 - 31579 1 0 0 Fermi2002_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Fermi02 - 31580 1 0 0 Fermi2002_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Fermi02 - 31581 1 0 0 Fermi2002_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Fermi02 - 31582 1 0 0 Fermi2002_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Fermi02 - 31583 1 0 0 Fermi2002_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Fermi02 - 31584 1 0 0 Fermi2002_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Fermi02 - 31585 1 0 0 Fermi2002_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Fermi02 - 31586 1 0 0 Fermi2002_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Fermi02 - 31587 1 0 0 Fermi2002_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Fermi02 - 31588 1 0 0 Fermi2002_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Fermi02 - 31589 1 0 0 Fermi2002_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Fermi02 - 31590 1 0 0 Fermi2002_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Fermi02 - 31591 1 0 0 Fermi2002_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Fermi02 - 31592 1 0 0 Fermi2002_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Fermi02 - 31593 1 0 0 Fermi2002_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Fermi02 - 31594 1 0 0 Fermi2002_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Fermi02 - 31595 1 0 0 Fermi2002_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Fermi02 - 31596 1 0 0 Fermi2002_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Fermi02 - 31597 1 0 0 Fermi2002_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Fermi02 - 31598 1 0 0 Fermi2002_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Fermi02 - 31599 1 0 0 Fermi2002_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Fermi02 - 31600 1 0 0 Fermi2002_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Fermi02 - 31601 1 0 0 Fermi2002_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Fermi02 - 31602 1 0 0 Fermi2002_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Fermi02 - 31603 1 0 0 Fermi2002_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Fermi02 - 31604 1 0 0 Fermi2002_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Fermi02 - 31605 1 0 0 Fermi2002_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Fermi02 - 31606 1 0 0 Fermi2002_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Fermi02 - 31607 1 0 0 Fermi2002_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Fermi02 - 31608 1 0 0 Fermi2002_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Fermi02 - 31609 1 0 0 Fermi2002_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Fermi02 - 31610 1 0 0 Fermi2002_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Fermi02 - 31611 1 0 0 Fermi2002_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Fermi02 - 31612 1 0 0 Fermi2002_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Fermi02 - 31613 1 0 0 Fermi2002_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Fermi02 - 31614 1 0 0 Fermi2002_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Fermi02 - 31615 1 0 0 Fermi2002_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Fermi02 - 31616 1 0 0 Fermi2002_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Fermi02 - 31617 1 0 0 Fermi2002_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Fermi02 - 31618 1 0 0 Fermi2002_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Fermi02 - 31619 1 0 0 Fermi2002_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Fermi02 - 31620 1 0 0 Fermi2002_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Fermi02 - 31621 1 0 0 Fermi2002_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Fermi02 - 31622 1 0 0 Fermi2002_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Fermi02 - 31623 1 0 0 Fermi2002_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Fermi02 - 31624 1 0 0 Fermi2002_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Fermi02 - 31625 1 0 0 Fermi2002_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Fermi02 - 31626 1 0 0 Fermi2002_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Fermi02 - 31627 1 0 0 Fermi2002_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Fermi02 - 31628 1 0 0 Fermi2002_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Fermi02 - 31629 1 0 0 Fermi2002_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Fermi02 - 31630 1 0 0 Fermi2002_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Fermi02 - 31631 1 0 0 Fermi2002_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Fermi02 - 31632 1 0 0 Fermi2002_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Fermi02 - 31633 1 0 0 Fermi2002_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Fermi02 - 31634 1 0 0 Fermi2002_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Fermi02 - 31635 1 0 0 Fermi2002_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Fermi02 - 31636 1 0 0 Fermi2002_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Fermi02 - 31637 1 0 0 Fermi2002_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Fermi02 - 31638 1 0 0 Fermi2002_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Fermi02 - 31639 1 0 0 Fermi2002_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Fermi02 - 31640 1 0 0 Fermi2002_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Fermi02 - 31641 1 0 0 Fermi2002_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Fermi02 - 31642 1 0 0 Fermi2002_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Fermi02 - 31643 1 0 0 Fermi2002_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Fermi02 - 31644 1 0 0 Fermi2002_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Fermi02 - 31645 1 0 0 Fermi2002_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Fermi02 - 31646 1 0 0 Fermi2002_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Fermi02 - 31647 1 0 0 Fermi2002_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Fermi02 - 31648 1 0 0 Fermi2002_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Fermi02 - 31649 1 0 0 Fermi2002_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Fermi02 - 31650 1 0 0 Fermi2002_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Fermi02 - 31651 1 0 0 Fermi2002_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Fermi02 - 31652 1 0 0 Fermi2002_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Fermi02 - 31653 1 0 0 Fermi2002_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Fermi02 - 31654 1 0 0 Fermi2002_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Fermi02 - 31655 1 0 0 Fermi2002_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Fermi02 - 31656 1 0 0 Fermi2002_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Fermi02 - 31657 1 0 0 Fermi2002_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Fermi02 - 31658 1 0 0 Fermi2002_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Fermi02 - 31659 1 0 0 Fermi2002_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Fermi02 - 31660 1 0 0 Fermi2002_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Fermi02 - 31661 1 0 0 Fermi2002_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Fermi02 - 31662 1 0 0 Fermi2002_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Fermi02 - 31663 1 0 0 Fermi2002_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Fermi02 - 31664 1 0 0 Fermi2002_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Fermi02 - 31665 1 0 0 Fermi2002_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Fermi02 - 31666 1 0 0 Fermi2002_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Fermi02 - 31667 1 0 0 Fermi2002_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Fermi02 - 31668 1 0 0 Fermi2002_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Fermi02 - 31669 1 0 0 Fermi2002_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Fermi02 - 31670 1 0 0 Fermi2002_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Fermi02 - 31671 1 0 0 Fermi2002_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Fermi02 - 31672 1 0 0 Fermi2002_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Fermi02 - 31673 1 0 0 Fermi2002_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Fermi02 - 31674 1 0 0 Fermi2002_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Fermi02 - 31675 1 0 0 Fermi2002_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Fermi02 - 31676 1 0 0 Fermi2002_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Fermi02 - 31677 1 0 0 Fermi2002_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Fermi02 - 31678 1 0 0 Fermi2002_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Fermi02 - 31679 1 0 0 Fermi2002_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Fermi02 - 31680 1 0 0 Fermi2002_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Fermi02 - 31681 1 0 0 Fermi2002_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Fermi02 - 31682 1 0 0 Fermi2002_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Fermi02 - 31683 1 0 0 Fermi2002_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Fermi02 - 31684 1 0 0 Fermi2002_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Fermi02 - 31685 1 0 0 Fermi2002_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Fermi02 - 31686 1 0 0 Fermi2002_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Fermi02 - 31687 1 0 0 Fermi2002_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Fermi02 - 31688 1 0 0 Fermi2002_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Fermi02 - 31689 1 0 0 Fermi2002_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Fermi02 - 31690 1 0 0 Fermi2002_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Fermi02 - 31691 1 0 0 Fermi2002_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Fermi02 - 31692 1 0 0 Fermi2002_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Fermi02 - 31693 1 0 0 Fermi2002_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Fermi02 - 31694 1 0 0 Fermi2002_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Fermi02 - 31695 1 0 0 Fermi2002_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Fermi02 - 31696 1 0 0 Fermi2002_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Fermi02 - 31697 1 0 0 Fermi2002_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Fermi02 - 31698 1 0 0 Fermi2002_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Fermi02 - 31699 1 0 0 Fermi2002_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Fermi02 - 31700 1 0 0 Fermi2002_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Fermi02 - 31701 1 0 0 Fermi2002_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Fermi02 - 31702 1 0 0 Fermi2002_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Fermi02 - 31703 1 0 0 Fermi2002_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Fermi02 - 31704 1 0 0 Fermi2002_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Fermi02 - 31705 1 0 0 Fermi2002_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Fermi02 - 31706 1 0 0 Fermi2002_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Fermi02 - 31707 1 0 0 Fermi2002_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Fermi02 - 31708 1 0 0 Fermi2002_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Fermi02 - 31709 1 0 0 Fermi2002_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Fermi02 - 31710 1 0 0 Fermi2002_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Fermi02 - 31711 1 0 0 Fermi2002_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Fermi02 - 31712 1 0 0 Fermi2002_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Fermi02 - 31713 1 0 0 Fermi2002_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Fermi02 - 31714 1 0 0 Fermi2002_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Fermi02 - 31715 1 0 0 Fermi2002_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Fermi02 - 31716 1 0 0 Fermi2002_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Fermi02 - 31717 1 0 0 Fermi2002_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Fermi02 - 31718 1 0 0 Fermi2002_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Fermi02 - 31719 1 0 0 Fermi2002_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Fermi02 - 31720 1 0 0 Fermi2002_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Fermi02 - 31721 1 0 0 Fermi2002_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Fermi02 - 31722 1 0 0 Fermi2002_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Fermi02 - 31723 1 0 0 Fermi2002_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Fermi02 - 31724 1 0 0 Fermi2002_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Fermi02 - 31725 1 0 0 Fermi2002_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Fermi02 - 31726 1 0 0 Fermi2002_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Fermi02 - 31727 1 0 0 Fermi2002_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Fermi02 - 31728 1 0 0 Fermi2002_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Fermi02 - 31729 1 0 0 Fermi2002_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Fermi02 - 31730 1 0 0 Fermi2002_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Fermi02 - 31731 1 0 0 Fermi2002_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Fermi02 - 31732 1 0 0 Fermi2002_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Fermi02 - 31733 1 0 0 Fermi2002_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Fermi02 - 31734 1 0 0 Fermi2002_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Fermi02 - 31735 1 0 0 Fermi2002_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Fermi02 - 31736 1 0 0 Fermi2002_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Fermi02 - 31737 1 0 0 Fermi2002_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Fermi02 - 31738 1 0 0 Fermi2002_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Fermi02 - 31739 1 0 0 Fermi2002_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Fermi02 - 31740 1 0 0 Fermi2002_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Fermi02 - 31741 1 0 0 Fermi2002_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Fermi02 - 31742 1 0 0 Fermi2002_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Fermi02 - 31743 1 0 0 Fermi2002_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Fermi02 - 31744 1 0 0 Fermi2002_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Fermi02 - 31745 1 0 0 Fermi2002_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Fermi02 - 31746 1 0 0 Fermi2002_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Fermi02 - 31747 1 0 0 Fermi2002_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Fermi02 - 31748 1 0 0 Fermi2002_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Fermi02 - 31749 1 0 0 Fermi2002_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Fermi02 - 31750 1 0 0 Fermi2002_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Fermi02 - 31751 1 0 0 Fermi2002_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Fermi02 - 31752 1 0 0 Fermi2002_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Fermi02 - 31753 1 0 0 Fermi2002_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Fermi02 - 31754 1 0 0 Fermi2002_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Fermi02 - 31755 1 0 0 Fermi2002_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Fermi02 - 31756 1 0 0 Fermi2002_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Fermi02 - 31757 1 0 0 Fermi2002_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Fermi02 - 31758 1 0 0 Fermi2002_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Fermi02 - 31759 1 0 0 Fermi2002_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Fermi02 - 31760 1 0 0 Fermi2002_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Fermi02 - 31761 1 0 0 Fermi2002_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Fermi02 - 31762 1 0 0 Fermi2002_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Fermi02 - 31763 1 0 0 Fermi2002_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Fermi02 - 31764 1 0 0 Fermi2002_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Fermi02 - 31765 1 0 0 Fermi2002_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Fermi02 - 31766 1 0 0 Fermi2002_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Fermi02 - 31767 1 0 0 Fermi2002_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Fermi02 - 31768 1 0 0 Fermi2002_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Fermi02 - 31769 1 0 0 Fermi2002_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Fermi02 - 31770 1 0 0 Fermi2002_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Fermi02 - 31771 1 0 0 Fermi2002_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Fermi02 - 31772 1 0 0 Fermi2002_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Fermi02 - 31773 1 0 0 Fermi2002_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Fermi02 - 31774 1 0 0 Fermi2002_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Fermi02 - 31775 1 0 0 Fermi2002_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Fermi02 - 31776 1 0 0 Fermi2002_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Fermi02 - 31777 1 0 0 Fermi2002_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Fermi02 - 31778 1 0 0 Fermi2002_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Fermi02 - 31779 1 0 0 Fermi2002_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Fermi02 - 31780 1 0 0 Fermi2002_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Fermi02 - 31781 1 0 0 Fermi2002_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Fermi02 - 31782 1 0 0 Fermi2002_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Fermi02 - 31783 1 0 0 Fermi2002_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Fermi02 - 31784 1 0 0 Fermi2002_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Fermi02 - 31785 1 0 0 Fermi2002_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Fermi02 - 31786 1 0 0 Fermi2002_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Fermi02 - 31787 1 0 0 Fermi2002_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Fermi02 - 31788 1 0 0 Fermi2002_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Fermi02 - 31789 1 0 0 Fermi2002_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Fermi02 - 31790 1 0 0 Fermi2002_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Fermi02 - 31791 1 0 0 Fermi2002_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Fermi02 - 31792 1 0 0 Fermi2002_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Fermi02 - 31793 1 0 0 Fermi2002_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Fermi02 - 31794 1 0 0 Fermi2002_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Fermi02 - 31795 1 0 0 Fermi2002_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Fermi02 - 31796 1 0 0 Fermi2002_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Fermi02 - 31797 1 0 0 Fermi2002_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Fermi02 - 31798 1 0 0 Fermi2002_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Fermi02 - 31799 1 0 0 Fermi2002_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Fermi02 - 31800 1 0 0 Fermi2002_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Fermi02 - 31801 1 0 0 Fermi2002_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Fermi02 - 31802 1 0 0 Fermi2002_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Fermi02 - 31803 1 0 0 Fermi2002_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Fermi02 - 31804 1 0 0 Fermi2002_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Fermi02 - 31805 1 0 0 Fermi2002_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Fermi02 - 31806 1 0 0 Fermi2002_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Fermi02 - 31807 1 0 0 Fermi2002_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Fermi02 - 31808 1 0 0 Fermi2002_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Fermi02 - 31809 1 0 0 Fermi2002_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Fermi02 - 31810 1 0 0 Fermi2002_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Fermi02 - 31811 1 0 0 Fermi2002_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Fermi02 - 31812 1 0 0 Fermi2002_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Fermi02 - 31813 1 0 0 Fermi2002_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Fermi02 - 31814 1 0 0 Fermi2002_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Fermi02 - 31815 1 0 0 Fermi2002_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Fermi02 - 31816 1 0 0 Fermi2002_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Fermi02 - 31817 1 0 0 Fermi2002_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Fermi02 - 31818 1 0 0 Fermi2002_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Fermi02 - 31819 1 0 0 Fermi2002_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Fermi02 - 31820 1 0 0 Fermi2002_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Fermi02 - 31821 1 0 0 Fermi2002_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Fermi02 - 31822 1 0 0 Fermi2002_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Fermi02 - 31823 1 0 0 Fermi2002_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Fermi02 - 31824 1 0 0 Fermi2002_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Fermi02 - 31825 1 0 0 Fermi2002_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Fermi02 - 31826 1 0 0 Fermi2002_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Fermi02 - 31827 1 0 0 Fermi2002_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Fermi02 - 31828 1 0 0 Fermi2002_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Fermi02 - 31829 1 0 0 Fermi2002_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Fermi02 - 31830 1 0 0 Fermi2002_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Fermi02 - 31831 1 0 0 Fermi2002_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Fermi02 - 31832 1 0 0 Fermi2002_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Fermi02 - 31833 1 0 0 Fermi2002_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Fermi02 - 31834 1 0 0 Fermi2002_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Fermi02 - 31835 1 0 0 Fermi2002_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Fermi02 - 31836 1 0 0 Fermi2002_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Fermi02 - 31837 1 0 0 Fermi2002_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Fermi02 - 31838 1 0 0 Fermi2002_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Fermi02 - 31839 1 0 0 Fermi2002_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Fermi02 - 31840 1 0 0 Fermi2002_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Fermi02 - 31841 1 0 0 Fermi2002_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Fermi02 - 31842 1 0 0 Fermi2002_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Fermi02 - 31843 1 0 0 Fermi2002_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Fermi02 - 31844 1 0 0 Fermi2002_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Fermi02 - 31845 1 0 0 Fermi2002_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Fermi02 - 31846 1 0 0 Fermi2002_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Fermi02 - 31847 1 0 0 Fermi2002_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Fermi02 - 31848 1 0 0 Fermi2002_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Fermi02 - 31849 1 0 0 Fermi2002_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Fermi02 - 31850 1 0 0 Fermi2002_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Fermi02 - 31851 1 0 0 Fermi2002_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Fermi02 - 31852 1 0 0 Fermi2002_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Fermi02 - 31853 1 0 0 Fermi2002_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Fermi02 - 31854 1 0 0 Fermi2002_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Fermi02 - 31855 1 0 0 Fermi2002_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Fermi02 - 31856 1 0 0 Fermi2002_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Fermi02 - 31857 1 0 0 Fermi2002_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Fermi02 - 31858 1 0 0 Fermi2002_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Fermi02 - 31859 1 0 0 Fermi2002_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Fermi02 - 31860 1 0 0 Fermi2002_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Fermi02 - 31861 1 0 0 Fermi2002_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Fermi02 - 31862 1 0 0 Fermi2002_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Fermi02 - 31863 1 0 0 Fermi2002_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Fermi02 - 31864 1 0 0 Fermi2002_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Fermi02 - 31865 1 0 0 Fermi2002_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Fermi02 - 31866 1 0 0 Fermi2002_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Fermi02 - 31867 1 0 0 Fermi2002_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Fermi02 - 31868 1 0 0 Fermi2002_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Fermi02 - 31869 1 0 0 Fermi2002_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Fermi02 - 31870 1 0 0 Fermi2002_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Fermi02 - 31871 1 0 0 Fermi2002_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Fermi02 - 31872 1 0 0 Fermi2002_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Fermi02 - 31873 1 0 0 Fermi2002_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Fermi02 - 31874 1 0 0 Fermi2002_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Fermi02 - 31875 1 0 0 Fermi2002_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Fermi02 - 31876 1 0 0 Fermi2002_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Fermi02 - 31877 1 0 0 Fermi2002_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Fermi02 - 31878 1 0 0 Fermi2002_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Fermi02 - 31879 1 0 0 Fermi2002_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Fermi02 - 31880 1 0 0 Fermi2002_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Fermi02 - 31881 1 0 0 Fermi2002_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Fermi02 - 31882 1 0 0 Fermi2002_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Fermi02 - 31883 1 0 0 Fermi2002_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Fermi02 - 31884 1 0 0 Fermi2002_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Fermi02 - 31885 1 0 0 Fermi2002_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Fermi02 - 31886 1 0 0 Fermi2002_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Fermi02 - 31887 1 0 0 Fermi2002_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Fermi02 - 31888 1 0 0 Fermi2002_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Fermi02 - 31889 1 0 0 Fermi2002_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Fermi02 - 31890 1 0 0 Fermi2002_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Fermi02 - 31891 1 0 0 Fermi2002_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Fermi02 - 31892 1 0 0 Fermi2002_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Fermi02 - 31893 1 0 0 Fermi2002_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Fermi02 - 31894 1 0 0 Fermi2002_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Fermi02 - 31895 1 0 0 Fermi2002_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Fermi02 - 31896 1 0 0 Fermi2002_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Fermi02 - 31897 1 0 0 Fermi2002_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Fermi02 - 31898 1 0 0 Fermi2002_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Fermi02 - 31899 1 0 0 Fermi2002_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Fermi02 - 31900 1 0 0 Fermi2002_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Fermi02 - 31901 1 0 0 Fermi2002_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Fermi02 - 31902 1 0 0 Fermi2002_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Fermi02 - 31903 1 0 0 Fermi2002_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Fermi02 - 31904 1 0 0 Fermi2002_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Fermi02 - 31905 1 0 0 Fermi2002_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Fermi02 - 31906 1 0 0 Fermi2002_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Fermi02 - 31907 1 0 0 Fermi2002_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Fermi02 - 31908 1 0 0 Fermi2002_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Fermi02 - 31909 1 0 0 Fermi2002_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Fermi02 - 31910 1 0 0 Fermi2002_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Fermi02 - 31911 1 0 0 Fermi2002_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Fermi02 - 31912 1 0 0 Fermi2002_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Fermi02 - 31913 1 0 0 Fermi2002_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Fermi02 - 31914 1 0 0 Fermi2002_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Fermi02 - 31915 1 0 0 Fermi2002_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Fermi02 - 31916 1 0 0 Fermi2002_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Fermi02 - 31917 1 0 0 Fermi2002_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Fermi02 - 31918 1 0 0 Fermi2002_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Fermi02 - 31919 1 0 0 Fermi2002_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Fermi02 - 31920 1 0 0 Fermi2002_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Fermi02 - 31921 1 0 0 Fermi2002_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Fermi02 - 31922 1 0 0 Fermi2002_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Fermi02 - 31923 1 0 0 Fermi2002_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Fermi02 - 31924 1 0 0 Fermi2002_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Fermi02 - 31925 1 0 0 Fermi2002_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Fermi02 - 31926 1 0 0 Fermi2002_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Fermi02 - 31927 1 0 0 Fermi2002_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Fermi02 - 31928 1 0 0 Fermi2002_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Fermi02 - 31929 1 0 0 Fermi2002_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Fermi02 - 31930 1 0 0 Fermi2002_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Fermi02 - 31931 1 0 0 Fermi2002_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Fermi02 - 31932 1 0 0 Fermi2002_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Fermi02 - 31933 1 0 0 Fermi2002_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Fermi02 - 31934 1 0 0 Fermi2002_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Fermi02 - 31935 1 0 0 Fermi2002_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Fermi02 - 31936 1 0 0 Fermi2002_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Fermi02 - 31937 1 0 0 Fermi2002_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Fermi02 - 31938 1 0 0 Fermi2002_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Fermi02 - 31939 1 0 0 Fermi2002_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Fermi02 - 31940 1 0 0 Fermi2002_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Fermi02 - 31941 1 0 0 Fermi2002_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Fermi02 - 31942 1 0 0 Fermi2002_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Fermi02 - 31943 1 0 0 Fermi2002_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Fermi02 - 31944 1 0 0 Fermi2002_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Fermi02 - 31945 1 0 0 Fermi2002_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Fermi02 - 31946 1 0 0 Fermi2002_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Fermi02 - 31947 1 0 0 Fermi2002_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Fermi02 - 31948 1 0 0 Fermi2002_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Fermi02 - 31949 1 0 0 Fermi2002_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Fermi02 - 31950 1 0 0 Fermi2002_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Fermi02 - 31951 1 0 0 Fermi2002_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Fermi02 - 31952 1 0 0 Fermi2002_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Fermi02 - 31953 1 0 0 Fermi2002_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Fermi02 - 31954 1 0 0 Fermi2002_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Fermi02 - 31955 1 0 0 Fermi2002_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Fermi02 - 31956 1 0 0 Fermi2002_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Fermi02 - 31957 1 0 0 Fermi2002_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Fermi02 - 31958 1 0 0 Fermi2002_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Fermi02 - 31959 1 0 0 Fermi2002_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Fermi02 - 31960 1 0 0 Fermi2002_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Fermi02 - 31961 1 0 0 Fermi2002_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Fermi02 - 31962 1 0 0 Fermi2002_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Fermi02 - 31963 1 0 0 Fermi2002_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Fermi02 - 31964 1 0 0 Fermi2002_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Fermi02 - 31965 1 0 0 Fermi2002_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Fermi02 - 31966 1 0 0 Fermi2002_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Fermi02 - 31967 1 0 0 Fermi2002_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Fermi02 - 31968 1 0 0 Fermi2002_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Fermi02 - 31969 1 0 0 Fermi2002_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Fermi02 - 31970 1 0 0 Fermi2002_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Fermi02 - 31971 1 0 0 Fermi2002_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Fermi02 - 31972 1 0 0 Fermi2002_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Fermi02 - 31973 1 0 0 Fermi2002_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Fermi02 - 31974 1 0 0 Fermi2002_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Fermi02 - 31975 1 0 0 Fermi2002_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Fermi02 - 31976 1 0 0 Fermi2002_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Fermi02 - 31977 1 0 0 Fermi2002_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Fermi02 - 31978 1 0 0 Fermi2002_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Fermi02 - 31979 1 0 0 Fermi2002_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Fermi02 - 31980 1 0 0 Fermi2002_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Fermi02 - 31981 1 0 0 Fermi2002_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Fermi02 - 31982 1 0 0 Fermi2002_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Fermi02 - 31983 1 0 0 Fermi2002_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Fermi02 - 31984 1 0 0 Fermi2002_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Fermi02 - 31985 1 0 0 Fermi2002_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Fermi02 - 31986 1 0 0 Fermi2002_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Fermi02 - 31987 1 0 0 Fermi2002_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Fermi02 - 31988 1 0 0 Fermi2002_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Fermi02 - 31989 1 0 0 Fermi2002_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Fermi02 - 31990 1 0 0 Fermi2002_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Fermi02 - 31991 1 0 0 Fermi2002_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Fermi02 - 31992 1 0 0 Fermi2002_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Fermi02 - 31993 1 0 0 Fermi2002_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Fermi02 - 31994 1 0 0 Fermi2002_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Fermi02 - 31995 1 0 0 Fermi2002_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Fermi02 - 31996 1 0 0 Fermi2002_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Fermi02 - 31997 1 0 0 Fermi2002_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Fermi02 - 31998 1 0 0 Fermi2002_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Fermi02 - 31999 1 0 0 Fermi2002_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Fermi02 - 32000 1 0 0 Fermi2002_1000.LHpdf 1000 1. 1.E+10 1.E-06 1. Fermi02 - 40100 1 0 0 Alekhin_100.LHpdf 0 1. 1.E+10 1.E-06 1. Alekhin00 - 40101 1 0 0 Alekhin_100.LHpdf 1 1. 1.E+10 1.E-06 1. Alekhin00 - 40102 1 0 0 Alekhin_100.LHpdf 2 1. 1.E+10 1.E-06 1. Alekhin00 - 40103 1 0 0 Alekhin_100.LHpdf 3 1. 1.E+10 1.E-06 1. Alekhin00 - 40104 1 0 0 Alekhin_100.LHpdf 4 1. 1.E+10 1.E-06 1. Alekhin00 - 40105 1 0 0 Alekhin_100.LHpdf 5 1. 1.E+10 1.E-06 1. Alekhin00 - 40106 1 0 0 Alekhin_100.LHpdf 6 1. 1.E+10 1.E-06 1. Alekhin00 - 40107 1 0 0 Alekhin_100.LHpdf 7 1. 1.E+10 1.E-06 1. Alekhin00 - 40108 1 0 0 Alekhin_100.LHpdf 8 1. 1.E+10 1.E-06 1. Alekhin00 - 40109 1 0 0 Alekhin_100.LHpdf 9 1. 1.E+10 1.E-06 1. Alekhin00 - 40110 1 0 0 Alekhin_100.LHpdf 10 1. 1.E+10 1.E-06 1. Alekhin00 - 40111 1 0 0 Alekhin_100.LHpdf 11 1. 1.E+10 1.E-06 1. Alekhin00 - 40112 1 0 0 Alekhin_100.LHpdf 12 1. 1.E+10 1.E-06 1. Alekhin00 - 40113 1 0 0 Alekhin_100.LHpdf 13 1. 1.E+10 1.E-06 1. Alekhin00 - 40114 1 0 0 Alekhin_100.LHpdf 14 1. 1.E+10 1.E-06 1. Alekhin00 - 40115 1 0 0 Alekhin_100.LHpdf 15 1. 1.E+10 1.E-06 1. Alekhin00 - 40116 1 0 0 Alekhin_100.LHpdf 16 1. 1.E+10 1.E-06 1. Alekhin00 - 40117 1 0 0 Alekhin_100.LHpdf 17 1. 1.E+10 1.E-06 1. Alekhin00 - 40118 1 0 0 Alekhin_100.LHpdf 18 1. 1.E+10 1.E-06 1. Alekhin00 - 40119 1 0 0 Alekhin_100.LHpdf 19 1. 1.E+10 1.E-06 1. Alekhin00 - 40120 1 0 0 Alekhin_100.LHpdf 20 1. 1.E+10 1.E-06 1. Alekhin00 - 40121 1 0 0 Alekhin_100.LHpdf 21 1. 1.E+10 1.E-06 1. Alekhin00 - 40122 1 0 0 Alekhin_100.LHpdf 22 1. 1.E+10 1.E-06 1. Alekhin00 - 40123 1 0 0 Alekhin_100.LHpdf 23 1. 1.E+10 1.E-06 1. Alekhin00 - 40124 1 0 0 Alekhin_100.LHpdf 24 1. 1.E+10 1.E-06 1. Alekhin00 - 40125 1 0 0 Alekhin_100.LHpdf 25 1. 1.E+10 1.E-06 1. Alekhin00 - 40126 1 0 0 Alekhin_100.LHpdf 26 1. 1.E+10 1.E-06 1. Alekhin00 - 40127 1 0 0 Alekhin_100.LHpdf 27 1. 1.E+10 1.E-06 1. Alekhin00 - 40128 1 0 0 Alekhin_100.LHpdf 28 1. 1.E+10 1.E-06 1. Alekhin00 - 40129 1 0 0 Alekhin_100.LHpdf 29 1. 1.E+10 1.E-06 1. Alekhin00 - 40130 1 0 0 Alekhin_100.LHpdf 30 1. 1.E+10 1.E-06 1. Alekhin00 - 40131 1 0 0 Alekhin_100.LHpdf 31 1. 1.E+10 1.E-06 1. Alekhin00 - 40132 1 0 0 Alekhin_100.LHpdf 32 1. 1.E+10 1.E-06 1. Alekhin00 - 40133 1 0 0 Alekhin_100.LHpdf 33 1. 1.E+10 1.E-06 1. Alekhin00 - 40134 1 0 0 Alekhin_100.LHpdf 34 1. 1.E+10 1.E-06 1. Alekhin00 - 40135 1 0 0 Alekhin_100.LHpdf 35 1. 1.E+10 1.E-06 1. Alekhin00 - 40136 1 0 0 Alekhin_100.LHpdf 36 1. 1.E+10 1.E-06 1. Alekhin00 - 40137 1 0 0 Alekhin_100.LHpdf 37 1. 1.E+10 1.E-06 1. Alekhin00 - 40138 1 0 0 Alekhin_100.LHpdf 38 1. 1.E+10 1.E-06 1. Alekhin00 - 40139 1 0 0 Alekhin_100.LHpdf 39 1. 1.E+10 1.E-06 1. Alekhin00 - 40140 1 0 0 Alekhin_100.LHpdf 40 1. 1.E+10 1.E-06 1. Alekhin00 - 40141 1 0 0 Alekhin_100.LHpdf 41 1. 1.E+10 1.E-06 1. Alekhin00 - 40142 1 0 0 Alekhin_100.LHpdf 42 1. 1.E+10 1.E-06 1. Alekhin00 - 40143 1 0 0 Alekhin_100.LHpdf 43 1. 1.E+10 1.E-06 1. Alekhin00 - 40144 1 0 0 Alekhin_100.LHpdf 44 1. 1.E+10 1.E-06 1. Alekhin00 - 40145 1 0 0 Alekhin_100.LHpdf 45 1. 1.E+10 1.E-06 1. Alekhin00 - 40146 1 0 0 Alekhin_100.LHpdf 46 1. 1.E+10 1.E-06 1. Alekhin00 - 40147 1 0 0 Alekhin_100.LHpdf 47 1. 1.E+10 1.E-06 1. Alekhin00 - 40148 1 0 0 Alekhin_100.LHpdf 48 1. 1.E+10 1.E-06 1. Alekhin00 - 40149 1 0 0 Alekhin_100.LHpdf 49 1. 1.E+10 1.E-06 1. Alekhin00 - 40150 1 0 0 Alekhin_100.LHpdf 50 1. 1.E+10 1.E-06 1. Alekhin00 - 40151 1 0 0 Alekhin_100.LHpdf 51 1. 1.E+10 1.E-06 1. Alekhin00 - 40152 1 0 0 Alekhin_100.LHpdf 52 1. 1.E+10 1.E-06 1. Alekhin00 - 40153 1 0 0 Alekhin_100.LHpdf 53 1. 1.E+10 1.E-06 1. Alekhin00 - 40154 1 0 0 Alekhin_100.LHpdf 54 1. 1.E+10 1.E-06 1. Alekhin00 - 40155 1 0 0 Alekhin_100.LHpdf 55 1. 1.E+10 1.E-06 1. Alekhin00 - 40156 1 0 0 Alekhin_100.LHpdf 56 1. 1.E+10 1.E-06 1. Alekhin00 - 40157 1 0 0 Alekhin_100.LHpdf 57 1. 1.E+10 1.E-06 1. Alekhin00 - 40158 1 0 0 Alekhin_100.LHpdf 58 1. 1.E+10 1.E-06 1. Alekhin00 - 40159 1 0 0 Alekhin_100.LHpdf 59 1. 1.E+10 1.E-06 1. Alekhin00 - 40160 1 0 0 Alekhin_100.LHpdf 60 1. 1.E+10 1.E-06 1. Alekhin00 - 40161 1 0 0 Alekhin_100.LHpdf 61 1. 1.E+10 1.E-06 1. Alekhin00 - 40162 1 0 0 Alekhin_100.LHpdf 62 1. 1.E+10 1.E-06 1. Alekhin00 - 40163 1 0 0 Alekhin_100.LHpdf 63 1. 1.E+10 1.E-06 1. Alekhin00 - 40164 1 0 0 Alekhin_100.LHpdf 64 1. 1.E+10 1.E-06 1. Alekhin00 - 40165 1 0 0 Alekhin_100.LHpdf 65 1. 1.E+10 1.E-06 1. Alekhin00 - 40166 1 0 0 Alekhin_100.LHpdf 66 1. 1.E+10 1.E-06 1. Alekhin00 - 40167 1 0 0 Alekhin_100.LHpdf 67 1. 1.E+10 1.E-06 1. Alekhin00 - 40168 1 0 0 Alekhin_100.LHpdf 68 1. 1.E+10 1.E-06 1. Alekhin00 - 40169 1 0 0 Alekhin_100.LHpdf 69 1. 1.E+10 1.E-06 1. Alekhin00 - 40170 1 0 0 Alekhin_100.LHpdf 70 1. 1.E+10 1.E-06 1. Alekhin00 - 40171 1 0 0 Alekhin_100.LHpdf 71 1. 1.E+10 1.E-06 1. Alekhin00 - 40172 1 0 0 Alekhin_100.LHpdf 72 1. 1.E+10 1.E-06 1. Alekhin00 - 40173 1 0 0 Alekhin_100.LHpdf 73 1. 1.E+10 1.E-06 1. Alekhin00 - 40174 1 0 0 Alekhin_100.LHpdf 74 1. 1.E+10 1.E-06 1. Alekhin00 - 40175 1 0 0 Alekhin_100.LHpdf 75 1. 1.E+10 1.E-06 1. Alekhin00 - 40176 1 0 0 Alekhin_100.LHpdf 76 1. 1.E+10 1.E-06 1. Alekhin00 - 40177 1 0 0 Alekhin_100.LHpdf 77 1. 1.E+10 1.E-06 1. Alekhin00 - 40178 1 0 0 Alekhin_100.LHpdf 78 1. 1.E+10 1.E-06 1. Alekhin00 - 40179 1 0 0 Alekhin_100.LHpdf 79 1. 1.E+10 1.E-06 1. Alekhin00 - 40180 1 0 0 Alekhin_100.LHpdf 80 1. 1.E+10 1.E-06 1. Alekhin00 - 40181 1 0 0 Alekhin_100.LHpdf 81 1. 1.E+10 1.E-06 1. Alekhin00 - 40182 1 0 0 Alekhin_100.LHpdf 82 1. 1.E+10 1.E-06 1. Alekhin00 - 40183 1 0 0 Alekhin_100.LHpdf 83 1. 1.E+10 1.E-06 1. Alekhin00 - 40184 1 0 0 Alekhin_100.LHpdf 84 1. 1.E+10 1.E-06 1. Alekhin00 - 40185 1 0 0 Alekhin_100.LHpdf 85 1. 1.E+10 1.E-06 1. Alekhin00 - 40186 1 0 0 Alekhin_100.LHpdf 86 1. 1.E+10 1.E-06 1. Alekhin00 - 40187 1 0 0 Alekhin_100.LHpdf 87 1. 1.E+10 1.E-06 1. Alekhin00 - 40188 1 0 0 Alekhin_100.LHpdf 88 1. 1.E+10 1.E-06 1. Alekhin00 - 40189 1 0 0 Alekhin_100.LHpdf 89 1. 1.E+10 1.E-06 1. Alekhin00 - 40190 1 0 0 Alekhin_100.LHpdf 90 1. 1.E+10 1.E-06 1. Alekhin00 - 40191 1 0 0 Alekhin_100.LHpdf 91 1. 1.E+10 1.E-06 1. Alekhin00 - 40192 1 0 0 Alekhin_100.LHpdf 92 1. 1.E+10 1.E-06 1. Alekhin00 - 40193 1 0 0 Alekhin_100.LHpdf 93 1. 1.E+10 1.E-06 1. Alekhin00 - 40194 1 0 0 Alekhin_100.LHpdf 94 1. 1.E+10 1.E-06 1. Alekhin00 - 40195 1 0 0 Alekhin_100.LHpdf 95 1. 1.E+10 1.E-06 1. Alekhin00 - 40196 1 0 0 Alekhin_100.LHpdf 96 1. 1.E+10 1.E-06 1. Alekhin00 - 40197 1 0 0 Alekhin_100.LHpdf 97 1. 1.E+10 1.E-06 1. Alekhin00 - 40198 1 0 0 Alekhin_100.LHpdf 98 1. 1.E+10 1.E-06 1. Alekhin00 - 40199 1 0 0 Alekhin_100.LHpdf 99 1. 1.E+10 1.E-06 1. Alekhin00 - 40200 1 0 0 Alekhin_100.LHpdf 100 1. 1.E+10 1.E-06 1. Alekhin00. - 40350 1 0 0 a02m_lo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40351 1 0 0 a02m_lo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40352 1 0 0 a02m_lo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40353 1 0 0 a02m_lo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40354 1 0 0 a02m_lo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40355 1 0 0 a02m_lo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40356 1 0 0 a02m_lo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40357 1 0 0 a02m_lo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40358 1 0 0 a02m_lo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40359 1 0 0 a02m_lo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40360 1 0 0 a02m_lo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40361 1 0 0 a02m_lo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40362 1 0 0 a02m_lo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40363 1 0 0 a02m_lo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40364 1 0 0 a02m_lo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40365 1 0 0 a02m_lo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40366 1 0 0 a02m_lo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40367 1 0 0 a02m_lo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(LO) - 40450 1 0 0 a02m_nlo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40451 1 0 0 a02m_nlo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40452 1 0 0 a02m_nlo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40453 1 0 0 a02m_nlo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40454 1 0 0 a02m_nlo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40455 1 0 0 a02m_nlo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40456 1 0 0 a02m_nlo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40457 1 0 0 a02m_nlo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40458 1 0 0 a02m_nlo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40459 1 0 0 a02m_nlo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40460 1 0 0 a02m_nlo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40461 1 0 0 a02m_nlo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40462 1 0 0 a02m_nlo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40463 1 0 0 a02m_nlo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40464 1 0 0 a02m_nlo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40465 1 0 0 a02m_nlo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40466 1 0 0 a02m_nlo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40467 1 0 0 a02m_nlo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(NLO) - 40550 1 0 0 a02m_nnlo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40551 1 0 0 a02m_nnlo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40552 1 0 0 a02m_nnlo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40553 1 0 0 a02m_nnlo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40554 1 0 0 a02m_nnlo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40555 1 0 0 a02m_nnlo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40556 1 0 0 a02m_nnlo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40557 1 0 0 a02m_nnlo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40558 1 0 0 a02m_nnlo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40559 1 0 0 a02m_nnlo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40560 1 0 0 a02m_nnlo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40561 1 0 0 a02m_nnlo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40562 1 0 0 a02m_nnlo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40563 1 0 0 a02m_nnlo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40564 1 0 0 a02m_nnlo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40565 1 0 0 a02m_nnlo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40566 1 0 0 a02m_nnlo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 40567 1 0 0 a02m_nnlo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) - 41000 1 0 0 Alekhin_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Alekhin00 - 41001 1 0 0 Alekhin_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Alekhin00 - 41002 1 0 0 Alekhin_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Alekhin00 - 41003 1 0 0 Alekhin_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Alekhin00 - 41004 1 0 0 Alekhin_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Alekhin00 - 41005 1 0 0 Alekhin_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Alekhin00 - 41006 1 0 0 Alekhin_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Alekhin00 - 41007 1 0 0 Alekhin_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Alekhin00 - 41008 1 0 0 Alekhin_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Alekhin00 - 41009 1 0 0 Alekhin_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Alekhin00 - 41010 1 0 0 Alekhin_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Alekhin00 - 41011 1 0 0 Alekhin_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Alekhin00 - 41012 1 0 0 Alekhin_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Alekhin00 - 41013 1 0 0 Alekhin_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Alekhin00 - 41014 1 0 0 Alekhin_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Alekhin00 - 41015 1 0 0 Alekhin_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Alekhin00 - 41016 1 0 0 Alekhin_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Alekhin00 - 41017 1 0 0 Alekhin_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Alekhin00 - 41018 1 0 0 Alekhin_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Alekhin00 - 41019 1 0 0 Alekhin_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Alekhin00 - 41020 1 0 0 Alekhin_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Alekhin00 - 41021 1 0 0 Alekhin_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Alekhin00 - 41022 1 0 0 Alekhin_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Alekhin00 - 41023 1 0 0 Alekhin_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Alekhin00 - 41024 1 0 0 Alekhin_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Alekhin00 - 41025 1 0 0 Alekhin_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Alekhin00 - 41026 1 0 0 Alekhin_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Alekhin00 - 41027 1 0 0 Alekhin_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Alekhin00 - 41028 1 0 0 Alekhin_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Alekhin00 - 41029 1 0 0 Alekhin_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Alekhin00 - 41030 1 0 0 Alekhin_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Alekhin00 - 41031 1 0 0 Alekhin_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Alekhin00 - 41032 1 0 0 Alekhin_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Alekhin00 - 41033 1 0 0 Alekhin_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Alekhin00 - 41034 1 0 0 Alekhin_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Alekhin00 - 41035 1 0 0 Alekhin_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Alekhin00 - 41036 1 0 0 Alekhin_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Alekhin00 - 41037 1 0 0 Alekhin_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Alekhin00 - 41038 1 0 0 Alekhin_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Alekhin00 - 41039 1 0 0 Alekhin_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Alekhin00 - 41040 1 0 0 Alekhin_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Alekhin00 - 41041 1 0 0 Alekhin_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Alekhin00 - 41042 1 0 0 Alekhin_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Alekhin00 - 41043 1 0 0 Alekhin_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Alekhin00 - 41044 1 0 0 Alekhin_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Alekhin00 - 41045 1 0 0 Alekhin_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Alekhin00 - 41046 1 0 0 Alekhin_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Alekhin00 - 41047 1 0 0 Alekhin_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Alekhin00 - 41048 1 0 0 Alekhin_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Alekhin00 - 41049 1 0 0 Alekhin_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Alekhin00 - 41050 1 0 0 Alekhin_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Alekhin00 - 41051 1 0 0 Alekhin_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Alekhin00 - 41052 1 0 0 Alekhin_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Alekhin00 - 41053 1 0 0 Alekhin_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Alekhin00 - 41054 1 0 0 Alekhin_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Alekhin00 - 41055 1 0 0 Alekhin_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Alekhin00 - 41056 1 0 0 Alekhin_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Alekhin00 - 41057 1 0 0 Alekhin_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Alekhin00 - 41058 1 0 0 Alekhin_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Alekhin00 - 41059 1 0 0 Alekhin_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Alekhin00 - 41060 1 0 0 Alekhin_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Alekhin00 - 41061 1 0 0 Alekhin_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Alekhin00 - 41062 1 0 0 Alekhin_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Alekhin00 - 41063 1 0 0 Alekhin_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Alekhin00 - 41064 1 0 0 Alekhin_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Alekhin00 - 41065 1 0 0 Alekhin_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Alekhin00 - 41066 1 0 0 Alekhin_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Alekhin00 - 41067 1 0 0 Alekhin_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Alekhin00 - 41068 1 0 0 Alekhin_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Alekhin00 - 41069 1 0 0 Alekhin_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Alekhin00 - 41070 1 0 0 Alekhin_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Alekhin00 - 41071 1 0 0 Alekhin_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Alekhin00 - 41072 1 0 0 Alekhin_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Alekhin00 - 41073 1 0 0 Alekhin_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Alekhin00 - 41074 1 0 0 Alekhin_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Alekhin00 - 41075 1 0 0 Alekhin_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Alekhin00 - 41076 1 0 0 Alekhin_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Alekhin00 - 41077 1 0 0 Alekhin_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Alekhin00 - 41078 1 0 0 Alekhin_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Alekhin00 - 41079 1 0 0 Alekhin_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Alekhin00 - 41080 1 0 0 Alekhin_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Alekhin00 - 41081 1 0 0 Alekhin_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Alekhin00 - 41082 1 0 0 Alekhin_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Alekhin00 - 41083 1 0 0 Alekhin_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Alekhin00 - 41084 1 0 0 Alekhin_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Alekhin00 - 41085 1 0 0 Alekhin_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Alekhin00 - 41086 1 0 0 Alekhin_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Alekhin00 - 41087 1 0 0 Alekhin_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Alekhin00 - 41088 1 0 0 Alekhin_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Alekhin00 - 41089 1 0 0 Alekhin_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Alekhin00 - 41090 1 0 0 Alekhin_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Alekhin00 - 41091 1 0 0 Alekhin_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Alekhin00 - 41092 1 0 0 Alekhin_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Alekhin00 - 41093 1 0 0 Alekhin_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Alekhin00 - 41094 1 0 0 Alekhin_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Alekhin00 - 41095 1 0 0 Alekhin_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Alekhin00 - 41096 1 0 0 Alekhin_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Alekhin00 - 41097 1 0 0 Alekhin_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Alekhin00 - 41098 1 0 0 Alekhin_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Alekhin00 - 41099 1 0 0 Alekhin_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Alekhin00 - 41100 1 0 0 Alekhin_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Alekhin00 - 41101 1 0 0 Alekhin_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Alekhin00 - 41102 1 0 0 Alekhin_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Alekhin00 - 41103 1 0 0 Alekhin_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Alekhin00 - 41104 1 0 0 Alekhin_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Alekhin00 - 41105 1 0 0 Alekhin_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Alekhin00 - 41106 1 0 0 Alekhin_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Alekhin00 - 41107 1 0 0 Alekhin_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Alekhin00 - 41108 1 0 0 Alekhin_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Alekhin00 - 41109 1 0 0 Alekhin_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Alekhin00 - 41110 1 0 0 Alekhin_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Alekhin00 - 41111 1 0 0 Alekhin_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Alekhin00 - 41112 1 0 0 Alekhin_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Alekhin00 - 41113 1 0 0 Alekhin_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Alekhin00 - 41114 1 0 0 Alekhin_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Alekhin00 - 41115 1 0 0 Alekhin_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Alekhin00 - 41116 1 0 0 Alekhin_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Alekhin00 - 41117 1 0 0 Alekhin_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Alekhin00 - 41118 1 0 0 Alekhin_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Alekhin00 - 41119 1 0 0 Alekhin_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Alekhin00 - 41120 1 0 0 Alekhin_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Alekhin00 - 41121 1 0 0 Alekhin_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Alekhin00 - 41122 1 0 0 Alekhin_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Alekhin00 - 41123 1 0 0 Alekhin_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Alekhin00 - 41124 1 0 0 Alekhin_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Alekhin00 - 41125 1 0 0 Alekhin_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Alekhin00 - 41126 1 0 0 Alekhin_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Alekhin00 - 41127 1 0 0 Alekhin_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Alekhin00 - 41128 1 0 0 Alekhin_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Alekhin00 - 41129 1 0 0 Alekhin_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Alekhin00 - 41130 1 0 0 Alekhin_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Alekhin00 - 41131 1 0 0 Alekhin_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Alekhin00 - 41132 1 0 0 Alekhin_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Alekhin00 - 41133 1 0 0 Alekhin_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Alekhin00 - 41134 1 0 0 Alekhin_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Alekhin00 - 41135 1 0 0 Alekhin_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Alekhin00 - 41136 1 0 0 Alekhin_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Alekhin00 - 41137 1 0 0 Alekhin_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Alekhin00 - 41138 1 0 0 Alekhin_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Alekhin00 - 41139 1 0 0 Alekhin_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Alekhin00 - 41140 1 0 0 Alekhin_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Alekhin00 - 41141 1 0 0 Alekhin_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Alekhin00 - 41142 1 0 0 Alekhin_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Alekhin00 - 41143 1 0 0 Alekhin_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Alekhin00 - 41144 1 0 0 Alekhin_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Alekhin00 - 41145 1 0 0 Alekhin_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Alekhin00 - 41146 1 0 0 Alekhin_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Alekhin00 - 41147 1 0 0 Alekhin_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Alekhin00 - 41148 1 0 0 Alekhin_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Alekhin00 - 41149 1 0 0 Alekhin_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Alekhin00 - 41150 1 0 0 Alekhin_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Alekhin00 - 41151 1 0 0 Alekhin_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Alekhin00 - 41152 1 0 0 Alekhin_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Alekhin00 - 41153 1 0 0 Alekhin_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Alekhin00 - 41154 1 0 0 Alekhin_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Alekhin00 - 41155 1 0 0 Alekhin_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Alekhin00 - 41156 1 0 0 Alekhin_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Alekhin00 - 41157 1 0 0 Alekhin_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Alekhin00 - 41158 1 0 0 Alekhin_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Alekhin00 - 41159 1 0 0 Alekhin_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Alekhin00 - 41160 1 0 0 Alekhin_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Alekhin00 - 41161 1 0 0 Alekhin_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Alekhin00 - 41162 1 0 0 Alekhin_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Alekhin00 - 41163 1 0 0 Alekhin_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Alekhin00 - 41164 1 0 0 Alekhin_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Alekhin00 - 41165 1 0 0 Alekhin_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Alekhin00 - 41166 1 0 0 Alekhin_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Alekhin00 - 41167 1 0 0 Alekhin_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Alekhin00 - 41168 1 0 0 Alekhin_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Alekhin00 - 41169 1 0 0 Alekhin_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Alekhin00 - 41170 1 0 0 Alekhin_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Alekhin00 - 41171 1 0 0 Alekhin_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Alekhin00 - 41172 1 0 0 Alekhin_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Alekhin00 - 41173 1 0 0 Alekhin_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Alekhin00 - 41174 1 0 0 Alekhin_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Alekhin00 - 41175 1 0 0 Alekhin_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Alekhin00 - 41176 1 0 0 Alekhin_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Alekhin00 - 41177 1 0 0 Alekhin_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Alekhin00 - 41178 1 0 0 Alekhin_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Alekhin00 - 41179 1 0 0 Alekhin_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Alekhin00 - 41180 1 0 0 Alekhin_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Alekhin00 - 41181 1 0 0 Alekhin_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Alekhin00 - 41182 1 0 0 Alekhin_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Alekhin00 - 41183 1 0 0 Alekhin_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Alekhin00 - 41184 1 0 0 Alekhin_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Alekhin00 - 41185 1 0 0 Alekhin_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Alekhin00 - 41186 1 0 0 Alekhin_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Alekhin00 - 41187 1 0 0 Alekhin_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Alekhin00 - 41188 1 0 0 Alekhin_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Alekhin00 - 41189 1 0 0 Alekhin_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Alekhin00 - 41190 1 0 0 Alekhin_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Alekhin00 - 41191 1 0 0 Alekhin_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Alekhin00 - 41192 1 0 0 Alekhin_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Alekhin00 - 41193 1 0 0 Alekhin_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Alekhin00 - 41194 1 0 0 Alekhin_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Alekhin00 - 41195 1 0 0 Alekhin_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Alekhin00 - 41196 1 0 0 Alekhin_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Alekhin00 - 41197 1 0 0 Alekhin_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Alekhin00 - 41198 1 0 0 Alekhin_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Alekhin00 - 41199 1 0 0 Alekhin_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Alekhin00 - 41200 1 0 0 Alekhin_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Alekhin00 - 41201 1 0 0 Alekhin_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Alekhin00 - 41202 1 0 0 Alekhin_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Alekhin00 - 41203 1 0 0 Alekhin_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Alekhin00 - 41204 1 0 0 Alekhin_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Alekhin00 - 41205 1 0 0 Alekhin_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Alekhin00 - 41206 1 0 0 Alekhin_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Alekhin00 - 41207 1 0 0 Alekhin_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Alekhin00 - 41208 1 0 0 Alekhin_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Alekhin00 - 41209 1 0 0 Alekhin_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Alekhin00 - 41210 1 0 0 Alekhin_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Alekhin00 - 41211 1 0 0 Alekhin_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Alekhin00 - 41212 1 0 0 Alekhin_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Alekhin00 - 41213 1 0 0 Alekhin_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Alekhin00 - 41214 1 0 0 Alekhin_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Alekhin00 - 41215 1 0 0 Alekhin_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Alekhin00 - 41216 1 0 0 Alekhin_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Alekhin00 - 41217 1 0 0 Alekhin_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Alekhin00 - 41218 1 0 0 Alekhin_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Alekhin00 - 41219 1 0 0 Alekhin_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Alekhin00 - 41220 1 0 0 Alekhin_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Alekhin00 - 41221 1 0 0 Alekhin_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Alekhin00 - 41222 1 0 0 Alekhin_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Alekhin00 - 41223 1 0 0 Alekhin_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Alekhin00 - 41224 1 0 0 Alekhin_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Alekhin00 - 41225 1 0 0 Alekhin_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Alekhin00 - 41226 1 0 0 Alekhin_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Alekhin00 - 41227 1 0 0 Alekhin_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Alekhin00 - 41228 1 0 0 Alekhin_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Alekhin00 - 41229 1 0 0 Alekhin_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Alekhin00 - 41230 1 0 0 Alekhin_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Alekhin00 - 41231 1 0 0 Alekhin_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Alekhin00 - 41232 1 0 0 Alekhin_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Alekhin00 - 41233 1 0 0 Alekhin_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Alekhin00 - 41234 1 0 0 Alekhin_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Alekhin00 - 41235 1 0 0 Alekhin_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Alekhin00 - 41236 1 0 0 Alekhin_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Alekhin00 - 41237 1 0 0 Alekhin_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Alekhin00 - 41238 1 0 0 Alekhin_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Alekhin00 - 41239 1 0 0 Alekhin_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Alekhin00 - 41240 1 0 0 Alekhin_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Alekhin00 - 41241 1 0 0 Alekhin_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Alekhin00 - 41242 1 0 0 Alekhin_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Alekhin00 - 41243 1 0 0 Alekhin_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Alekhin00 - 41244 1 0 0 Alekhin_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Alekhin00 - 41245 1 0 0 Alekhin_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Alekhin00 - 41246 1 0 0 Alekhin_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Alekhin00 - 41247 1 0 0 Alekhin_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Alekhin00 - 41248 1 0 0 Alekhin_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Alekhin00 - 41249 1 0 0 Alekhin_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Alekhin00 - 41250 1 0 0 Alekhin_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Alekhin00 - 41251 1 0 0 Alekhin_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Alekhin00 - 41252 1 0 0 Alekhin_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Alekhin00 - 41253 1 0 0 Alekhin_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Alekhin00 - 41254 1 0 0 Alekhin_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Alekhin00 - 41255 1 0 0 Alekhin_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Alekhin00 - 41256 1 0 0 Alekhin_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Alekhin00 - 41257 1 0 0 Alekhin_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Alekhin00 - 41258 1 0 0 Alekhin_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Alekhin00 - 41259 1 0 0 Alekhin_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Alekhin00 - 41260 1 0 0 Alekhin_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Alekhin00 - 41261 1 0 0 Alekhin_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Alekhin00 - 41262 1 0 0 Alekhin_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Alekhin00 - 41263 1 0 0 Alekhin_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Alekhin00 - 41264 1 0 0 Alekhin_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Alekhin00 - 41265 1 0 0 Alekhin_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Alekhin00 - 41266 1 0 0 Alekhin_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Alekhin00 - 41267 1 0 0 Alekhin_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Alekhin00 - 41268 1 0 0 Alekhin_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Alekhin00 - 41269 1 0 0 Alekhin_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Alekhin00 - 41270 1 0 0 Alekhin_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Alekhin00 - 41271 1 0 0 Alekhin_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Alekhin00 - 41272 1 0 0 Alekhin_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Alekhin00 - 41273 1 0 0 Alekhin_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Alekhin00 - 41274 1 0 0 Alekhin_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Alekhin00 - 41275 1 0 0 Alekhin_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Alekhin00 - 41276 1 0 0 Alekhin_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Alekhin00 - 41277 1 0 0 Alekhin_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Alekhin00 - 41278 1 0 0 Alekhin_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Alekhin00 - 41279 1 0 0 Alekhin_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Alekhin00 - 41280 1 0 0 Alekhin_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Alekhin00 - 41281 1 0 0 Alekhin_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Alekhin00 - 41282 1 0 0 Alekhin_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Alekhin00 - 41283 1 0 0 Alekhin_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Alekhin00 - 41284 1 0 0 Alekhin_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Alekhin00 - 41285 1 0 0 Alekhin_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Alekhin00 - 41286 1 0 0 Alekhin_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Alekhin00 - 41287 1 0 0 Alekhin_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Alekhin00 - 41288 1 0 0 Alekhin_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Alekhin00 - 41289 1 0 0 Alekhin_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Alekhin00 - 41290 1 0 0 Alekhin_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Alekhin00 - 41291 1 0 0 Alekhin_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Alekhin00 - 41292 1 0 0 Alekhin_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Alekhin00 - 41293 1 0 0 Alekhin_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Alekhin00 - 41294 1 0 0 Alekhin_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Alekhin00 - 41295 1 0 0 Alekhin_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Alekhin00 - 41296 1 0 0 Alekhin_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Alekhin00 - 41297 1 0 0 Alekhin_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Alekhin00 - 41298 1 0 0 Alekhin_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Alekhin00 - 41299 1 0 0 Alekhin_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Alekhin00 - 41300 1 0 0 Alekhin_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Alekhin00 - 41301 1 0 0 Alekhin_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Alekhin00 - 41302 1 0 0 Alekhin_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Alekhin00 - 41303 1 0 0 Alekhin_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Alekhin00 - 41304 1 0 0 Alekhin_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Alekhin00 - 41305 1 0 0 Alekhin_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Alekhin00 - 41306 1 0 0 Alekhin_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Alekhin00 - 41307 1 0 0 Alekhin_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Alekhin00 - 41308 1 0 0 Alekhin_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Alekhin00 - 41309 1 0 0 Alekhin_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Alekhin00 - 41310 1 0 0 Alekhin_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Alekhin00 - 41311 1 0 0 Alekhin_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Alekhin00 - 41312 1 0 0 Alekhin_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Alekhin00 - 41313 1 0 0 Alekhin_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Alekhin00 - 41314 1 0 0 Alekhin_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Alekhin00 - 41315 1 0 0 Alekhin_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Alekhin00 - 41316 1 0 0 Alekhin_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Alekhin00 - 41317 1 0 0 Alekhin_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Alekhin00 - 41318 1 0 0 Alekhin_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Alekhin00 - 41319 1 0 0 Alekhin_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Alekhin00 - 41320 1 0 0 Alekhin_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Alekhin00 - 41321 1 0 0 Alekhin_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Alekhin00 - 41322 1 0 0 Alekhin_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Alekhin00 - 41323 1 0 0 Alekhin_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Alekhin00 - 41324 1 0 0 Alekhin_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Alekhin00 - 41325 1 0 0 Alekhin_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Alekhin00 - 41326 1 0 0 Alekhin_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Alekhin00 - 41327 1 0 0 Alekhin_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Alekhin00 - 41328 1 0 0 Alekhin_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Alekhin00 - 41329 1 0 0 Alekhin_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Alekhin00 - 41330 1 0 0 Alekhin_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Alekhin00 - 41331 1 0 0 Alekhin_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Alekhin00 - 41332 1 0 0 Alekhin_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Alekhin00 - 41333 1 0 0 Alekhin_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Alekhin00 - 41334 1 0 0 Alekhin_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Alekhin00 - 41335 1 0 0 Alekhin_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Alekhin00 - 41336 1 0 0 Alekhin_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Alekhin00 - 41337 1 0 0 Alekhin_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Alekhin00 - 41338 1 0 0 Alekhin_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Alekhin00 - 41339 1 0 0 Alekhin_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Alekhin00 - 41340 1 0 0 Alekhin_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Alekhin00 - 41341 1 0 0 Alekhin_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Alekhin00 - 41342 1 0 0 Alekhin_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Alekhin00 - 41343 1 0 0 Alekhin_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Alekhin00 - 41344 1 0 0 Alekhin_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Alekhin00 - 41345 1 0 0 Alekhin_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Alekhin00 - 41346 1 0 0 Alekhin_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Alekhin00 - 41347 1 0 0 Alekhin_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Alekhin00 - 41348 1 0 0 Alekhin_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Alekhin00 - 41349 1 0 0 Alekhin_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Alekhin00 - 41350 1 0 0 Alekhin_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Alekhin00 - 41351 1 0 0 Alekhin_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Alekhin00 - 41352 1 0 0 Alekhin_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Alekhin00 - 41353 1 0 0 Alekhin_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Alekhin00 - 41354 1 0 0 Alekhin_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Alekhin00 - 41355 1 0 0 Alekhin_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Alekhin00 - 41356 1 0 0 Alekhin_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Alekhin00 - 41357 1 0 0 Alekhin_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Alekhin00 - 41358 1 0 0 Alekhin_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Alekhin00 - 41359 1 0 0 Alekhin_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Alekhin00 - 41360 1 0 0 Alekhin_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Alekhin00 - 41361 1 0 0 Alekhin_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Alekhin00 - 41362 1 0 0 Alekhin_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Alekhin00 - 41363 1 0 0 Alekhin_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Alekhin00 - 41364 1 0 0 Alekhin_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Alekhin00 - 41365 1 0 0 Alekhin_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Alekhin00 - 41366 1 0 0 Alekhin_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Alekhin00 - 41367 1 0 0 Alekhin_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Alekhin00 - 41368 1 0 0 Alekhin_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Alekhin00 - 41369 1 0 0 Alekhin_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Alekhin00 - 41370 1 0 0 Alekhin_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Alekhin00 - 41371 1 0 0 Alekhin_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Alekhin00 - 41372 1 0 0 Alekhin_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Alekhin00 - 41373 1 0 0 Alekhin_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Alekhin00 - 41374 1 0 0 Alekhin_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Alekhin00 - 41375 1 0 0 Alekhin_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Alekhin00 - 41376 1 0 0 Alekhin_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Alekhin00 - 41377 1 0 0 Alekhin_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Alekhin00 - 41378 1 0 0 Alekhin_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Alekhin00 - 41379 1 0 0 Alekhin_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Alekhin00 - 41380 1 0 0 Alekhin_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Alekhin00 - 41381 1 0 0 Alekhin_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Alekhin00 - 41382 1 0 0 Alekhin_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Alekhin00 - 41383 1 0 0 Alekhin_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Alekhin00 - 41384 1 0 0 Alekhin_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Alekhin00 - 41385 1 0 0 Alekhin_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Alekhin00 - 41386 1 0 0 Alekhin_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Alekhin00 - 41387 1 0 0 Alekhin_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Alekhin00 - 41388 1 0 0 Alekhin_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Alekhin00 - 41389 1 0 0 Alekhin_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Alekhin00 - 41390 1 0 0 Alekhin_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Alekhin00 - 41391 1 0 0 Alekhin_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Alekhin00 - 41392 1 0 0 Alekhin_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Alekhin00 - 41393 1 0 0 Alekhin_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Alekhin00 - 41394 1 0 0 Alekhin_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Alekhin00 - 41395 1 0 0 Alekhin_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Alekhin00 - 41396 1 0 0 Alekhin_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Alekhin00 - 41397 1 0 0 Alekhin_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Alekhin00 - 41398 1 0 0 Alekhin_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Alekhin00 - 41399 1 0 0 Alekhin_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Alekhin00 - 41400 1 0 0 Alekhin_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Alekhin00 - 41401 1 0 0 Alekhin_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Alekhin00 - 41402 1 0 0 Alekhin_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Alekhin00 - 41403 1 0 0 Alekhin_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Alekhin00 - 41404 1 0 0 Alekhin_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Alekhin00 - 41405 1 0 0 Alekhin_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Alekhin00 - 41406 1 0 0 Alekhin_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Alekhin00 - 41407 1 0 0 Alekhin_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Alekhin00 - 41408 1 0 0 Alekhin_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Alekhin00 - 41409 1 0 0 Alekhin_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Alekhin00 - 41410 1 0 0 Alekhin_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Alekhin00 - 41411 1 0 0 Alekhin_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Alekhin00 - 41412 1 0 0 Alekhin_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Alekhin00 - 41413 1 0 0 Alekhin_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Alekhin00 - 41414 1 0 0 Alekhin_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Alekhin00 - 41415 1 0 0 Alekhin_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Alekhin00 - 41416 1 0 0 Alekhin_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Alekhin00 - 41417 1 0 0 Alekhin_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Alekhin00 - 41418 1 0 0 Alekhin_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Alekhin00 - 41419 1 0 0 Alekhin_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Alekhin00 - 41420 1 0 0 Alekhin_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Alekhin00 - 41421 1 0 0 Alekhin_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Alekhin00 - 41422 1 0 0 Alekhin_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Alekhin00 - 41423 1 0 0 Alekhin_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Alekhin00 - 41424 1 0 0 Alekhin_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Alekhin00 - 41425 1 0 0 Alekhin_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Alekhin00 - 41426 1 0 0 Alekhin_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Alekhin00 - 41427 1 0 0 Alekhin_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Alekhin00 - 41428 1 0 0 Alekhin_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Alekhin00 - 41429 1 0 0 Alekhin_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Alekhin00 - 41430 1 0 0 Alekhin_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Alekhin00 - 41431 1 0 0 Alekhin_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Alekhin00 - 41432 1 0 0 Alekhin_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Alekhin00 - 41433 1 0 0 Alekhin_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Alekhin00 - 41434 1 0 0 Alekhin_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Alekhin00 - 41435 1 0 0 Alekhin_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Alekhin00 - 41436 1 0 0 Alekhin_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Alekhin00 - 41437 1 0 0 Alekhin_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Alekhin00 - 41438 1 0 0 Alekhin_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Alekhin00 - 41439 1 0 0 Alekhin_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Alekhin00 - 41440 1 0 0 Alekhin_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Alekhin00 - 41441 1 0 0 Alekhin_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Alekhin00 - 41442 1 0 0 Alekhin_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Alekhin00 - 41443 1 0 0 Alekhin_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Alekhin00 - 41444 1 0 0 Alekhin_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Alekhin00 - 41445 1 0 0 Alekhin_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Alekhin00 - 41446 1 0 0 Alekhin_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Alekhin00 - 41447 1 0 0 Alekhin_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Alekhin00 - 41448 1 0 0 Alekhin_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Alekhin00 - 41449 1 0 0 Alekhin_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Alekhin00 - 41450 1 0 0 Alekhin_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Alekhin00 - 41451 1 0 0 Alekhin_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Alekhin00 - 41452 1 0 0 Alekhin_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Alekhin00 - 41453 1 0 0 Alekhin_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Alekhin00 - 41454 1 0 0 Alekhin_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Alekhin00 - 41455 1 0 0 Alekhin_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Alekhin00 - 41456 1 0 0 Alekhin_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Alekhin00 - 41457 1 0 0 Alekhin_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Alekhin00 - 41458 1 0 0 Alekhin_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Alekhin00 - 41459 1 0 0 Alekhin_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Alekhin00 - 41460 1 0 0 Alekhin_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Alekhin00 - 41461 1 0 0 Alekhin_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Alekhin00 - 41462 1 0 0 Alekhin_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Alekhin00 - 41463 1 0 0 Alekhin_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Alekhin00 - 41464 1 0 0 Alekhin_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Alekhin00 - 41465 1 0 0 Alekhin_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Alekhin00 - 41466 1 0 0 Alekhin_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Alekhin00 - 41467 1 0 0 Alekhin_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Alekhin00 - 41468 1 0 0 Alekhin_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Alekhin00 - 41469 1 0 0 Alekhin_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Alekhin00 - 41470 1 0 0 Alekhin_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Alekhin00 - 41471 1 0 0 Alekhin_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Alekhin00 - 41472 1 0 0 Alekhin_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Alekhin00 - 41473 1 0 0 Alekhin_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Alekhin00 - 41474 1 0 0 Alekhin_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Alekhin00 - 41475 1 0 0 Alekhin_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Alekhin00 - 41476 1 0 0 Alekhin_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Alekhin00 - 41477 1 0 0 Alekhin_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Alekhin00 - 41478 1 0 0 Alekhin_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Alekhin00 - 41479 1 0 0 Alekhin_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Alekhin00 - 41480 1 0 0 Alekhin_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Alekhin00 - 41481 1 0 0 Alekhin_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Alekhin00 - 41482 1 0 0 Alekhin_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Alekhin00 - 41483 1 0 0 Alekhin_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Alekhin00 - 41484 1 0 0 Alekhin_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Alekhin00 - 41485 1 0 0 Alekhin_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Alekhin00 - 41486 1 0 0 Alekhin_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Alekhin00 - 41487 1 0 0 Alekhin_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Alekhin00 - 41488 1 0 0 Alekhin_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Alekhin00 - 41489 1 0 0 Alekhin_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Alekhin00 - 41490 1 0 0 Alekhin_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Alekhin00 - 41491 1 0 0 Alekhin_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Alekhin00 - 41492 1 0 0 Alekhin_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Alekhin00 - 41493 1 0 0 Alekhin_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Alekhin00 - 41494 1 0 0 Alekhin_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Alekhin00 - 41495 1 0 0 Alekhin_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Alekhin00 - 41496 1 0 0 Alekhin_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Alekhin00 - 41497 1 0 0 Alekhin_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Alekhin00 - 41498 1 0 0 Alekhin_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Alekhin00 - 41499 1 0 0 Alekhin_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Alekhin00 - 41500 1 0 0 Alekhin_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Alekhin00 - 41501 1 0 0 Alekhin_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Alekhin00 - 41502 1 0 0 Alekhin_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Alekhin00 - 41503 1 0 0 Alekhin_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Alekhin00 - 41504 1 0 0 Alekhin_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Alekhin00 - 41505 1 0 0 Alekhin_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Alekhin00 - 41506 1 0 0 Alekhin_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Alekhin00 - 41507 1 0 0 Alekhin_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Alekhin00 - 41508 1 0 0 Alekhin_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Alekhin00 - 41509 1 0 0 Alekhin_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Alekhin00 - 41510 1 0 0 Alekhin_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Alekhin00 - 41511 1 0 0 Alekhin_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Alekhin00 - 41512 1 0 0 Alekhin_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Alekhin00 - 41513 1 0 0 Alekhin_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Alekhin00 - 41514 1 0 0 Alekhin_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Alekhin00 - 41515 1 0 0 Alekhin_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Alekhin00 - 41516 1 0 0 Alekhin_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Alekhin00 - 41517 1 0 0 Alekhin_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Alekhin00 - 41518 1 0 0 Alekhin_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Alekhin00 - 41519 1 0 0 Alekhin_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Alekhin00 - 41520 1 0 0 Alekhin_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Alekhin00 - 41521 1 0 0 Alekhin_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Alekhin00 - 41522 1 0 0 Alekhin_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Alekhin00 - 41523 1 0 0 Alekhin_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Alekhin00 - 41524 1 0 0 Alekhin_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Alekhin00 - 41525 1 0 0 Alekhin_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Alekhin00 - 41526 1 0 0 Alekhin_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Alekhin00 - 41527 1 0 0 Alekhin_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Alekhin00 - 41528 1 0 0 Alekhin_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Alekhin00 - 41529 1 0 0 Alekhin_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Alekhin00 - 41530 1 0 0 Alekhin_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Alekhin00 - 41531 1 0 0 Alekhin_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Alekhin00 - 41532 1 0 0 Alekhin_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Alekhin00 - 41533 1 0 0 Alekhin_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Alekhin00 - 41534 1 0 0 Alekhin_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Alekhin00 - 41535 1 0 0 Alekhin_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Alekhin00 - 41536 1 0 0 Alekhin_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Alekhin00 - 41537 1 0 0 Alekhin_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Alekhin00 - 41538 1 0 0 Alekhin_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Alekhin00 - 41539 1 0 0 Alekhin_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Alekhin00 - 41540 1 0 0 Alekhin_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Alekhin00 - 41541 1 0 0 Alekhin_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Alekhin00 - 41542 1 0 0 Alekhin_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Alekhin00 - 41543 1 0 0 Alekhin_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Alekhin00 - 41544 1 0 0 Alekhin_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Alekhin00 - 41545 1 0 0 Alekhin_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Alekhin00 - 41546 1 0 0 Alekhin_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Alekhin00 - 41547 1 0 0 Alekhin_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Alekhin00 - 41548 1 0 0 Alekhin_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Alekhin00 - 41549 1 0 0 Alekhin_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Alekhin00 - 41550 1 0 0 Alekhin_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Alekhin00 - 41551 1 0 0 Alekhin_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Alekhin00 - 41552 1 0 0 Alekhin_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Alekhin00 - 41553 1 0 0 Alekhin_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Alekhin00 - 41554 1 0 0 Alekhin_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Alekhin00 - 41555 1 0 0 Alekhin_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Alekhin00 - 41556 1 0 0 Alekhin_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Alekhin00 - 41557 1 0 0 Alekhin_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Alekhin00 - 41558 1 0 0 Alekhin_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Alekhin00 - 41559 1 0 0 Alekhin_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Alekhin00 - 41560 1 0 0 Alekhin_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Alekhin00 - 41561 1 0 0 Alekhin_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Alekhin00 - 41562 1 0 0 Alekhin_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Alekhin00 - 41563 1 0 0 Alekhin_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Alekhin00 - 41564 1 0 0 Alekhin_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Alekhin00 - 41565 1 0 0 Alekhin_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Alekhin00 - 41566 1 0 0 Alekhin_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Alekhin00 - 41567 1 0 0 Alekhin_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Alekhin00 - 41568 1 0 0 Alekhin_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Alekhin00 - 41569 1 0 0 Alekhin_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Alekhin00 - 41570 1 0 0 Alekhin_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Alekhin00 - 41571 1 0 0 Alekhin_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Alekhin00 - 41572 1 0 0 Alekhin_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Alekhin00 - 41573 1 0 0 Alekhin_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Alekhin00 - 41574 1 0 0 Alekhin_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Alekhin00 - 41575 1 0 0 Alekhin_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Alekhin00 - 41576 1 0 0 Alekhin_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Alekhin00 - 41577 1 0 0 Alekhin_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Alekhin00 - 41578 1 0 0 Alekhin_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Alekhin00 - 41579 1 0 0 Alekhin_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Alekhin00 - 41580 1 0 0 Alekhin_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Alekhin00 - 41581 1 0 0 Alekhin_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Alekhin00 - 41582 1 0 0 Alekhin_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Alekhin00 - 41583 1 0 0 Alekhin_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Alekhin00 - 41584 1 0 0 Alekhin_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Alekhin00 - 41585 1 0 0 Alekhin_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Alekhin00 - 41586 1 0 0 Alekhin_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Alekhin00 - 41587 1 0 0 Alekhin_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Alekhin00 - 41588 1 0 0 Alekhin_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Alekhin00 - 41589 1 0 0 Alekhin_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Alekhin00 - 41590 1 0 0 Alekhin_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Alekhin00 - 41591 1 0 0 Alekhin_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Alekhin00 - 41592 1 0 0 Alekhin_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Alekhin00 - 41593 1 0 0 Alekhin_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Alekhin00 - 41594 1 0 0 Alekhin_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Alekhin00 - 41595 1 0 0 Alekhin_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Alekhin00 - 41596 1 0 0 Alekhin_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Alekhin00 - 41597 1 0 0 Alekhin_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Alekhin00 - 41598 1 0 0 Alekhin_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Alekhin00 - 41599 1 0 0 Alekhin_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Alekhin00 - 41600 1 0 0 Alekhin_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Alekhin00 - 41601 1 0 0 Alekhin_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Alekhin00 - 41602 1 0 0 Alekhin_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Alekhin00 - 41603 1 0 0 Alekhin_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Alekhin00 - 41604 1 0 0 Alekhin_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Alekhin00 - 41605 1 0 0 Alekhin_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Alekhin00 - 41606 1 0 0 Alekhin_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Alekhin00 - 41607 1 0 0 Alekhin_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Alekhin00 - 41608 1 0 0 Alekhin_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Alekhin00 - 41609 1 0 0 Alekhin_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Alekhin00 - 41610 1 0 0 Alekhin_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Alekhin00 - 41611 1 0 0 Alekhin_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Alekhin00 - 41612 1 0 0 Alekhin_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Alekhin00 - 41613 1 0 0 Alekhin_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Alekhin00 - 41614 1 0 0 Alekhin_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Alekhin00 - 41615 1 0 0 Alekhin_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Alekhin00 - 41616 1 0 0 Alekhin_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Alekhin00 - 41617 1 0 0 Alekhin_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Alekhin00 - 41618 1 0 0 Alekhin_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Alekhin00 - 41619 1 0 0 Alekhin_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Alekhin00 - 41620 1 0 0 Alekhin_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Alekhin00 - 41621 1 0 0 Alekhin_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Alekhin00 - 41622 1 0 0 Alekhin_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Alekhin00 - 41623 1 0 0 Alekhin_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Alekhin00 - 41624 1 0 0 Alekhin_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Alekhin00 - 41625 1 0 0 Alekhin_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Alekhin00 - 41626 1 0 0 Alekhin_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Alekhin00 - 41627 1 0 0 Alekhin_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Alekhin00 - 41628 1 0 0 Alekhin_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Alekhin00 - 41629 1 0 0 Alekhin_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Alekhin00 - 41630 1 0 0 Alekhin_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Alekhin00 - 41631 1 0 0 Alekhin_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Alekhin00 - 41632 1 0 0 Alekhin_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Alekhin00 - 41633 1 0 0 Alekhin_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Alekhin00 - 41634 1 0 0 Alekhin_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Alekhin00 - 41635 1 0 0 Alekhin_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Alekhin00 - 41636 1 0 0 Alekhin_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Alekhin00 - 41637 1 0 0 Alekhin_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Alekhin00 - 41638 1 0 0 Alekhin_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Alekhin00 - 41639 1 0 0 Alekhin_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Alekhin00 - 41640 1 0 0 Alekhin_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Alekhin00 - 41641 1 0 0 Alekhin_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Alekhin00 - 41642 1 0 0 Alekhin_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Alekhin00 - 41643 1 0 0 Alekhin_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Alekhin00 - 41644 1 0 0 Alekhin_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Alekhin00 - 41645 1 0 0 Alekhin_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Alekhin00 - 41646 1 0 0 Alekhin_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Alekhin00 - 41647 1 0 0 Alekhin_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Alekhin00 - 41648 1 0 0 Alekhin_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Alekhin00 - 41649 1 0 0 Alekhin_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Alekhin00 - 41650 1 0 0 Alekhin_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Alekhin00 - 41651 1 0 0 Alekhin_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Alekhin00 - 41652 1 0 0 Alekhin_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Alekhin00 - 41653 1 0 0 Alekhin_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Alekhin00 - 41654 1 0 0 Alekhin_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Alekhin00 - 41655 1 0 0 Alekhin_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Alekhin00 - 41656 1 0 0 Alekhin_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Alekhin00 - 41657 1 0 0 Alekhin_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Alekhin00 - 41658 1 0 0 Alekhin_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Alekhin00 - 41659 1 0 0 Alekhin_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Alekhin00 - 41660 1 0 0 Alekhin_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Alekhin00 - 41661 1 0 0 Alekhin_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Alekhin00 - 41662 1 0 0 Alekhin_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Alekhin00 - 41663 1 0 0 Alekhin_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Alekhin00 - 41664 1 0 0 Alekhin_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Alekhin00 - 41665 1 0 0 Alekhin_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Alekhin00 - 41666 1 0 0 Alekhin_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Alekhin00 - 41667 1 0 0 Alekhin_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Alekhin00 - 41668 1 0 0 Alekhin_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Alekhin00 - 41669 1 0 0 Alekhin_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Alekhin00 - 41670 1 0 0 Alekhin_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Alekhin00 - 41671 1 0 0 Alekhin_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Alekhin00 - 41672 1 0 0 Alekhin_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Alekhin00 - 41673 1 0 0 Alekhin_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Alekhin00 - 41674 1 0 0 Alekhin_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Alekhin00 - 41675 1 0 0 Alekhin_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Alekhin00 - 41676 1 0 0 Alekhin_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Alekhin00 - 41677 1 0 0 Alekhin_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Alekhin00 - 41678 1 0 0 Alekhin_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Alekhin00 - 41679 1 0 0 Alekhin_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Alekhin00 - 41680 1 0 0 Alekhin_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Alekhin00 - 41681 1 0 0 Alekhin_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Alekhin00 - 41682 1 0 0 Alekhin_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Alekhin00 - 41683 1 0 0 Alekhin_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Alekhin00 - 41684 1 0 0 Alekhin_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Alekhin00 - 41685 1 0 0 Alekhin_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Alekhin00 - 41686 1 0 0 Alekhin_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Alekhin00 - 41687 1 0 0 Alekhin_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Alekhin00 - 41688 1 0 0 Alekhin_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Alekhin00 - 41689 1 0 0 Alekhin_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Alekhin00 - 41690 1 0 0 Alekhin_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Alekhin00 - 41691 1 0 0 Alekhin_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Alekhin00 - 41692 1 0 0 Alekhin_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Alekhin00 - 41693 1 0 0 Alekhin_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Alekhin00 - 41694 1 0 0 Alekhin_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Alekhin00 - 41695 1 0 0 Alekhin_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Alekhin00 - 41696 1 0 0 Alekhin_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Alekhin00 - 41697 1 0 0 Alekhin_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Alekhin00 - 41698 1 0 0 Alekhin_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Alekhin00 - 41699 1 0 0 Alekhin_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Alekhin00 - 41700 1 0 0 Alekhin_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Alekhin00 - 41701 1 0 0 Alekhin_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Alekhin00 - 41702 1 0 0 Alekhin_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Alekhin00 - 41703 1 0 0 Alekhin_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Alekhin00 - 41704 1 0 0 Alekhin_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Alekhin00 - 41705 1 0 0 Alekhin_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Alekhin00 - 41706 1 0 0 Alekhin_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Alekhin00 - 41707 1 0 0 Alekhin_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Alekhin00 - 41708 1 0 0 Alekhin_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Alekhin00 - 41709 1 0 0 Alekhin_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Alekhin00 - 41710 1 0 0 Alekhin_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Alekhin00 - 41711 1 0 0 Alekhin_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Alekhin00 - 41712 1 0 0 Alekhin_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Alekhin00 - 41713 1 0 0 Alekhin_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Alekhin00 - 41714 1 0 0 Alekhin_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Alekhin00 - 41715 1 0 0 Alekhin_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Alekhin00 - 41716 1 0 0 Alekhin_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Alekhin00 - 41717 1 0 0 Alekhin_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Alekhin00 - 41718 1 0 0 Alekhin_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Alekhin00 - 41719 1 0 0 Alekhin_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Alekhin00 - 41720 1 0 0 Alekhin_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Alekhin00 - 41721 1 0 0 Alekhin_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Alekhin00 - 41722 1 0 0 Alekhin_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Alekhin00 - 41723 1 0 0 Alekhin_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Alekhin00 - 41724 1 0 0 Alekhin_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Alekhin00 - 41725 1 0 0 Alekhin_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Alekhin00 - 41726 1 0 0 Alekhin_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Alekhin00 - 41727 1 0 0 Alekhin_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Alekhin00 - 41728 1 0 0 Alekhin_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Alekhin00 - 41729 1 0 0 Alekhin_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Alekhin00 - 41730 1 0 0 Alekhin_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Alekhin00 - 41731 1 0 0 Alekhin_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Alekhin00 - 41732 1 0 0 Alekhin_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Alekhin00 - 41733 1 0 0 Alekhin_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Alekhin00 - 41734 1 0 0 Alekhin_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Alekhin00 - 41735 1 0 0 Alekhin_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Alekhin00 - 41736 1 0 0 Alekhin_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Alekhin00 - 41737 1 0 0 Alekhin_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Alekhin00 - 41738 1 0 0 Alekhin_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Alekhin00 - 41739 1 0 0 Alekhin_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Alekhin00 - 41740 1 0 0 Alekhin_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Alekhin00 - 41741 1 0 0 Alekhin_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Alekhin00 - 41742 1 0 0 Alekhin_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Alekhin00 - 41743 1 0 0 Alekhin_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Alekhin00 - 41744 1 0 0 Alekhin_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Alekhin00 - 41745 1 0 0 Alekhin_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Alekhin00 - 41746 1 0 0 Alekhin_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Alekhin00 - 41747 1 0 0 Alekhin_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Alekhin00 - 41748 1 0 0 Alekhin_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Alekhin00 - 41749 1 0 0 Alekhin_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Alekhin00 - 41750 1 0 0 Alekhin_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Alekhin00 - 41751 1 0 0 Alekhin_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Alekhin00 - 41752 1 0 0 Alekhin_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Alekhin00 - 41753 1 0 0 Alekhin_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Alekhin00 - 41754 1 0 0 Alekhin_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Alekhin00 - 41755 1 0 0 Alekhin_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Alekhin00 - 41756 1 0 0 Alekhin_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Alekhin00 - 41757 1 0 0 Alekhin_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Alekhin00 - 41758 1 0 0 Alekhin_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Alekhin00 - 41759 1 0 0 Alekhin_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Alekhin00 - 41760 1 0 0 Alekhin_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Alekhin00 - 41761 1 0 0 Alekhin_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Alekhin00 - 41762 1 0 0 Alekhin_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Alekhin00 - 41763 1 0 0 Alekhin_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Alekhin00 - 41764 1 0 0 Alekhin_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Alekhin00 - 41765 1 0 0 Alekhin_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Alekhin00 - 41766 1 0 0 Alekhin_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Alekhin00 - 41767 1 0 0 Alekhin_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Alekhin00 - 41768 1 0 0 Alekhin_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Alekhin00 - 41769 1 0 0 Alekhin_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Alekhin00 - 41770 1 0 0 Alekhin_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Alekhin00 - 41771 1 0 0 Alekhin_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Alekhin00 - 41772 1 0 0 Alekhin_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Alekhin00 - 41773 1 0 0 Alekhin_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Alekhin00 - 41774 1 0 0 Alekhin_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Alekhin00 - 41775 1 0 0 Alekhin_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Alekhin00 - 41776 1 0 0 Alekhin_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Alekhin00 - 41777 1 0 0 Alekhin_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Alekhin00 - 41778 1 0 0 Alekhin_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Alekhin00 - 41779 1 0 0 Alekhin_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Alekhin00 - 41780 1 0 0 Alekhin_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Alekhin00 - 41781 1 0 0 Alekhin_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Alekhin00 - 41782 1 0 0 Alekhin_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Alekhin00 - 41783 1 0 0 Alekhin_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Alekhin00 - 41784 1 0 0 Alekhin_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Alekhin00 - 41785 1 0 0 Alekhin_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Alekhin00 - 41786 1 0 0 Alekhin_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Alekhin00 - 41787 1 0 0 Alekhin_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Alekhin00 - 41788 1 0 0 Alekhin_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Alekhin00 - 41789 1 0 0 Alekhin_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Alekhin00 - 41790 1 0 0 Alekhin_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Alekhin00 - 41791 1 0 0 Alekhin_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Alekhin00 - 41792 1 0 0 Alekhin_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Alekhin00 - 41793 1 0 0 Alekhin_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Alekhin00 - 41794 1 0 0 Alekhin_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Alekhin00 - 41795 1 0 0 Alekhin_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Alekhin00 - 41796 1 0 0 Alekhin_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Alekhin00 - 41797 1 0 0 Alekhin_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Alekhin00 - 41798 1 0 0 Alekhin_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Alekhin00 - 41799 1 0 0 Alekhin_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Alekhin00 - 41800 1 0 0 Alekhin_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Alekhin00 - 41801 1 0 0 Alekhin_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Alekhin00 - 41802 1 0 0 Alekhin_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Alekhin00 - 41803 1 0 0 Alekhin_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Alekhin00 - 41804 1 0 0 Alekhin_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Alekhin00 - 41805 1 0 0 Alekhin_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Alekhin00 - 41806 1 0 0 Alekhin_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Alekhin00 - 41807 1 0 0 Alekhin_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Alekhin00 - 41808 1 0 0 Alekhin_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Alekhin00 - 41809 1 0 0 Alekhin_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Alekhin00 - 41810 1 0 0 Alekhin_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Alekhin00 - 41811 1 0 0 Alekhin_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Alekhin00 - 41812 1 0 0 Alekhin_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Alekhin00 - 41813 1 0 0 Alekhin_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Alekhin00 - 41814 1 0 0 Alekhin_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Alekhin00 - 41815 1 0 0 Alekhin_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Alekhin00 - 41816 1 0 0 Alekhin_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Alekhin00 - 41817 1 0 0 Alekhin_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Alekhin00 - 41818 1 0 0 Alekhin_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Alekhin00 - 41819 1 0 0 Alekhin_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Alekhin00 - 41820 1 0 0 Alekhin_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Alekhin00 - 41821 1 0 0 Alekhin_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Alekhin00 - 41822 1 0 0 Alekhin_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Alekhin00 - 41823 1 0 0 Alekhin_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Alekhin00 - 41824 1 0 0 Alekhin_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Alekhin00 - 41825 1 0 0 Alekhin_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Alekhin00 - 41826 1 0 0 Alekhin_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Alekhin00 - 41827 1 0 0 Alekhin_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Alekhin00 - 41828 1 0 0 Alekhin_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Alekhin00 - 41829 1 0 0 Alekhin_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Alekhin00 - 41830 1 0 0 Alekhin_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Alekhin00 - 41831 1 0 0 Alekhin_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Alekhin00 - 41832 1 0 0 Alekhin_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Alekhin00 - 41833 1 0 0 Alekhin_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Alekhin00 - 41834 1 0 0 Alekhin_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Alekhin00 - 41835 1 0 0 Alekhin_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Alekhin00 - 41836 1 0 0 Alekhin_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Alekhin00 - 41837 1 0 0 Alekhin_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Alekhin00 - 41838 1 0 0 Alekhin_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Alekhin00 - 41839 1 0 0 Alekhin_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Alekhin00 - 41840 1 0 0 Alekhin_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Alekhin00 - 41841 1 0 0 Alekhin_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Alekhin00 - 41842 1 0 0 Alekhin_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Alekhin00 - 41843 1 0 0 Alekhin_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Alekhin00 - 41844 1 0 0 Alekhin_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Alekhin00 - 41845 1 0 0 Alekhin_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Alekhin00 - 41846 1 0 0 Alekhin_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Alekhin00 - 41847 1 0 0 Alekhin_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Alekhin00 - 41848 1 0 0 Alekhin_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Alekhin00 - 41849 1 0 0 Alekhin_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Alekhin00 - 41850 1 0 0 Alekhin_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Alekhin00 - 41851 1 0 0 Alekhin_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Alekhin00 - 41852 1 0 0 Alekhin_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Alekhin00 - 41853 1 0 0 Alekhin_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Alekhin00 - 41854 1 0 0 Alekhin_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Alekhin00 - 41855 1 0 0 Alekhin_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Alekhin00 - 41856 1 0 0 Alekhin_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Alekhin00 - 41857 1 0 0 Alekhin_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Alekhin00 - 41858 1 0 0 Alekhin_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Alekhin00 - 41859 1 0 0 Alekhin_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Alekhin00 - 41860 1 0 0 Alekhin_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Alekhin00 - 41861 1 0 0 Alekhin_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Alekhin00 - 41862 1 0 0 Alekhin_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Alekhin00 - 41863 1 0 0 Alekhin_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Alekhin00 - 41864 1 0 0 Alekhin_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Alekhin00 - 41865 1 0 0 Alekhin_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Alekhin00 - 41866 1 0 0 Alekhin_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Alekhin00 - 41867 1 0 0 Alekhin_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Alekhin00 - 41868 1 0 0 Alekhin_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Alekhin00 - 41869 1 0 0 Alekhin_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Alekhin00 - 41870 1 0 0 Alekhin_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Alekhin00 - 41871 1 0 0 Alekhin_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Alekhin00 - 41872 1 0 0 Alekhin_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Alekhin00 - 41873 1 0 0 Alekhin_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Alekhin00 - 41874 1 0 0 Alekhin_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Alekhin00 - 41875 1 0 0 Alekhin_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Alekhin00 - 41876 1 0 0 Alekhin_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Alekhin00 - 41877 1 0 0 Alekhin_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Alekhin00 - 41878 1 0 0 Alekhin_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Alekhin00 - 41879 1 0 0 Alekhin_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Alekhin00 - 41880 1 0 0 Alekhin_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Alekhin00 - 41881 1 0 0 Alekhin_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Alekhin00 - 41882 1 0 0 Alekhin_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Alekhin00 - 41883 1 0 0 Alekhin_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Alekhin00 - 41884 1 0 0 Alekhin_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Alekhin00 - 41885 1 0 0 Alekhin_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Alekhin00 - 41886 1 0 0 Alekhin_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Alekhin00 - 41887 1 0 0 Alekhin_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Alekhin00 - 41888 1 0 0 Alekhin_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Alekhin00 - 41889 1 0 0 Alekhin_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Alekhin00 - 41890 1 0 0 Alekhin_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Alekhin00 - 41891 1 0 0 Alekhin_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Alekhin00 - 41892 1 0 0 Alekhin_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Alekhin00 - 41893 1 0 0 Alekhin_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Alekhin00 - 41894 1 0 0 Alekhin_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Alekhin00 - 41895 1 0 0 Alekhin_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Alekhin00 - 41896 1 0 0 Alekhin_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Alekhin00 - 41897 1 0 0 Alekhin_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Alekhin00 - 41898 1 0 0 Alekhin_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Alekhin00 - 41899 1 0 0 Alekhin_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Alekhin00 - 41900 1 0 0 Alekhin_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Alekhin00 - 41901 1 0 0 Alekhin_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Alekhin00 - 41902 1 0 0 Alekhin_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Alekhin00 - 41903 1 0 0 Alekhin_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Alekhin00 - 41904 1 0 0 Alekhin_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Alekhin00 - 41905 1 0 0 Alekhin_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Alekhin00 - 41906 1 0 0 Alekhin_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Alekhin00 - 41907 1 0 0 Alekhin_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Alekhin00 - 41908 1 0 0 Alekhin_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Alekhin00 - 41909 1 0 0 Alekhin_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Alekhin00 - 41910 1 0 0 Alekhin_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Alekhin00 - 41911 1 0 0 Alekhin_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Alekhin00 - 41912 1 0 0 Alekhin_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Alekhin00 - 41913 1 0 0 Alekhin_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Alekhin00 - 41914 1 0 0 Alekhin_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Alekhin00 - 41915 1 0 0 Alekhin_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Alekhin00 - 41916 1 0 0 Alekhin_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Alekhin00 - 41917 1 0 0 Alekhin_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Alekhin00 - 41918 1 0 0 Alekhin_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Alekhin00 - 41919 1 0 0 Alekhin_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Alekhin00 - 41920 1 0 0 Alekhin_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Alekhin00 - 41921 1 0 0 Alekhin_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Alekhin00 - 41922 1 0 0 Alekhin_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Alekhin00 - 41923 1 0 0 Alekhin_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Alekhin00 - 41924 1 0 0 Alekhin_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Alekhin00 - 41925 1 0 0 Alekhin_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Alekhin00 - 41926 1 0 0 Alekhin_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Alekhin00 - 41927 1 0 0 Alekhin_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Alekhin00 - 41928 1 0 0 Alekhin_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Alekhin00 - 41929 1 0 0 Alekhin_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Alekhin00 - 41930 1 0 0 Alekhin_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Alekhin00 - 41931 1 0 0 Alekhin_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Alekhin00 - 41932 1 0 0 Alekhin_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Alekhin00 - 41933 1 0 0 Alekhin_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Alekhin00 - 41934 1 0 0 Alekhin_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Alekhin00 - 41935 1 0 0 Alekhin_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Alekhin00 - 41936 1 0 0 Alekhin_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Alekhin00 - 41937 1 0 0 Alekhin_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Alekhin00 - 41938 1 0 0 Alekhin_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Alekhin00 - 41939 1 0 0 Alekhin_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Alekhin00 - 41940 1 0 0 Alekhin_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Alekhin00 - 41941 1 0 0 Alekhin_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Alekhin00 - 41942 1 0 0 Alekhin_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Alekhin00 - 41943 1 0 0 Alekhin_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Alekhin00 - 41944 1 0 0 Alekhin_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Alekhin00 - 41945 1 0 0 Alekhin_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Alekhin00 - 41946 1 0 0 Alekhin_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Alekhin00 - 41947 1 0 0 Alekhin_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Alekhin00 - 41948 1 0 0 Alekhin_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Alekhin00 - 41949 1 0 0 Alekhin_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Alekhin00 - 41950 1 0 0 Alekhin_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Alekhin00 - 41951 1 0 0 Alekhin_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Alekhin00 - 41952 1 0 0 Alekhin_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Alekhin00 - 41953 1 0 0 Alekhin_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Alekhin00 - 41954 1 0 0 Alekhin_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Alekhin00 - 41955 1 0 0 Alekhin_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Alekhin00 - 41956 1 0 0 Alekhin_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Alekhin00 - 41957 1 0 0 Alekhin_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Alekhin00 - 41958 1 0 0 Alekhin_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Alekhin00 - 41959 1 0 0 Alekhin_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Alekhin00 - 41960 1 0 0 Alekhin_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Alekhin00 - 41961 1 0 0 Alekhin_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Alekhin00 - 41962 1 0 0 Alekhin_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Alekhin00 - 41963 1 0 0 Alekhin_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Alekhin00 - 41964 1 0 0 Alekhin_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Alekhin00 - 41965 1 0 0 Alekhin_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Alekhin00 - 41966 1 0 0 Alekhin_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Alekhin00 - 41967 1 0 0 Alekhin_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Alekhin00 - 41968 1 0 0 Alekhin_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Alekhin00 - 41969 1 0 0 Alekhin_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Alekhin00 - 41970 1 0 0 Alekhin_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Alekhin00 - 41971 1 0 0 Alekhin_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Alekhin00 - 41972 1 0 0 Alekhin_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Alekhin00 - 41973 1 0 0 Alekhin_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Alekhin00 - 41974 1 0 0 Alekhin_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Alekhin00 - 41975 1 0 0 Alekhin_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Alekhin00 - 41976 1 0 0 Alekhin_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Alekhin00 - 41977 1 0 0 Alekhin_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Alekhin00 - 41978 1 0 0 Alekhin_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Alekhin00 - 41979 1 0 0 Alekhin_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Alekhin00 - 41980 1 0 0 Alekhin_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Alekhin00 - 41981 1 0 0 Alekhin_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Alekhin00 - 41982 1 0 0 Alekhin_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Alekhin00 - 41983 1 0 0 Alekhin_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Alekhin00 - 41984 1 0 0 Alekhin_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Alekhin00 - 41985 1 0 0 Alekhin_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Alekhin00 - 41986 1 0 0 Alekhin_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Alekhin00 - 41987 1 0 0 Alekhin_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Alekhin00 - 41988 1 0 0 Alekhin_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Alekhin00 - 41989 1 0 0 Alekhin_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Alekhin00 - 41990 1 0 0 Alekhin_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Alekhin00 - 41991 1 0 0 Alekhin_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Alekhin00 - 41992 1 0 0 Alekhin_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Alekhin00 - 41993 1 0 0 Alekhin_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Alekhin00 - 41994 1 0 0 Alekhin_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Alekhin00 - 41995 1 0 0 Alekhin_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Alekhin00 - 41996 1 0 0 Alekhin_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Alekhin00 - 41997 1 0 0 Alekhin_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Alekhin00 - 41998 1 0 0 Alekhin_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Alekhin00 - 41999 1 0 0 Alekhin_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Alekhin00 - 50100 1 0 0 Botje_100.LHpdf 0 1. 1.E+10 1.E-06 1. Botje99 - 50101 1 0 0 Botje_100.LHpdf 1 1. 1.E+10 1.E-06 1. Botje99 - 50102 1 0 0 Botje_100.LHpdf 2 1. 1.E+10 1.E-06 1. Botje99 - 50103 1 0 0 Botje_100.LHpdf 3 1. 1.E+10 1.E-06 1. Botje99 - 50104 1 0 0 Botje_100.LHpdf 4 1. 1.E+10 1.E-06 1. Botje99 - 50105 1 0 0 Botje_100.LHpdf 5 1. 1.E+10 1.E-06 1. Botje99 - 50106 1 0 0 Botje_100.LHpdf 6 1. 1.E+10 1.E-06 1. Botje99 - 50107 1 0 0 Botje_100.LHpdf 7 1. 1.E+10 1.E-06 1. Botje99 - 50108 1 0 0 Botje_100.LHpdf 8 1. 1.E+10 1.E-06 1. Botje99 - 50109 1 0 0 Botje_100.LHpdf 9 1. 1.E+10 1.E-06 1. Botje99 - 50110 1 0 0 Botje_100.LHpdf 10 1. 1.E+10 1.E-06 1. Botje99 - 50111 1 0 0 Botje_100.LHpdf 11 1. 1.E+10 1.E-06 1. Botje99 - 50112 1 0 0 Botje_100.LHpdf 12 1. 1.E+10 1.E-06 1. Botje99 - 50113 1 0 0 Botje_100.LHpdf 13 1. 1.E+10 1.E-06 1. Botje99 - 50114 1 0 0 Botje_100.LHpdf 14 1. 1.E+10 1.E-06 1. Botje99 - 50115 1 0 0 Botje_100.LHpdf 15 1. 1.E+10 1.E-06 1. Botje99 - 50116 1 0 0 Botje_100.LHpdf 16 1. 1.E+10 1.E-06 1. Botje99 - 50117 1 0 0 Botje_100.LHpdf 17 1. 1.E+10 1.E-06 1. Botje99 - 50118 1 0 0 Botje_100.LHpdf 18 1. 1.E+10 1.E-06 1. Botje99 - 50119 1 0 0 Botje_100.LHpdf 19 1. 1.E+10 1.E-06 1. Botje99 - 50120 1 0 0 Botje_100.LHpdf 20 1. 1.E+10 1.E-06 1. Botje99 - 50121 1 0 0 Botje_100.LHpdf 21 1. 1.E+10 1.E-06 1. Botje99 - 50122 1 0 0 Botje_100.LHpdf 22 1. 1.E+10 1.E-06 1. Botje99 - 50123 1 0 0 Botje_100.LHpdf 23 1. 1.E+10 1.E-06 1. Botje99 - 50124 1 0 0 Botje_100.LHpdf 24 1. 1.E+10 1.E-06 1. Botje99 - 50125 1 0 0 Botje_100.LHpdf 25 1. 1.E+10 1.E-06 1. Botje99 - 50126 1 0 0 Botje_100.LHpdf 26 1. 1.E+10 1.E-06 1. Botje99 - 50127 1 0 0 Botje_100.LHpdf 27 1. 1.E+10 1.E-06 1. Botje99 - 50128 1 0 0 Botje_100.LHpdf 28 1. 1.E+10 1.E-06 1. Botje99 - 50129 1 0 0 Botje_100.LHpdf 29 1. 1.E+10 1.E-06 1. Botje99 - 50130 1 0 0 Botje_100.LHpdf 30 1. 1.E+10 1.E-06 1. Botje99 - 50131 1 0 0 Botje_100.LHpdf 31 1. 1.E+10 1.E-06 1. Botje99 - 50132 1 0 0 Botje_100.LHpdf 32 1. 1.E+10 1.E-06 1. Botje99 - 50133 1 0 0 Botje_100.LHpdf 33 1. 1.E+10 1.E-06 1. Botje99 - 50134 1 0 0 Botje_100.LHpdf 34 1. 1.E+10 1.E-06 1. Botje99 - 50135 1 0 0 Botje_100.LHpdf 35 1. 1.E+10 1.E-06 1. Botje99 - 50136 1 0 0 Botje_100.LHpdf 36 1. 1.E+10 1.E-06 1. Botje99 - 50137 1 0 0 Botje_100.LHpdf 37 1. 1.E+10 1.E-06 1. Botje99 - 50138 1 0 0 Botje_100.LHpdf 38 1. 1.E+10 1.E-06 1. Botje99 - 50139 1 0 0 Botje_100.LHpdf 39 1. 1.E+10 1.E-06 1. Botje99 - 50140 1 0 0 Botje_100.LHpdf 40 1. 1.E+10 1.E-06 1. Botje99 - 50141 1 0 0 Botje_100.LHpdf 41 1. 1.E+10 1.E-06 1. Botje99 - 50142 1 0 0 Botje_100.LHpdf 42 1. 1.E+10 1.E-06 1. Botje99 - 50143 1 0 0 Botje_100.LHpdf 43 1. 1.E+10 1.E-06 1. Botje99 - 50144 1 0 0 Botje_100.LHpdf 44 1. 1.E+10 1.E-06 1. Botje99 - 50145 1 0 0 Botje_100.LHpdf 45 1. 1.E+10 1.E-06 1. Botje99 - 50146 1 0 0 Botje_100.LHpdf 46 1. 1.E+10 1.E-06 1. Botje99 - 50147 1 0 0 Botje_100.LHpdf 47 1. 1.E+10 1.E-06 1. Botje99 - 50148 1 0 0 Botje_100.LHpdf 48 1. 1.E+10 1.E-06 1. Botje99 - 50149 1 0 0 Botje_100.LHpdf 49 1. 1.E+10 1.E-06 1. Botje99 - 50150 1 0 0 Botje_100.LHpdf 50 1. 1.E+10 1.E-06 1. Botje99 - 50151 1 0 0 Botje_100.LHpdf 51 1. 1.E+10 1.E-06 1. Botje99 - 50152 1 0 0 Botje_100.LHpdf 52 1. 1.E+10 1.E-06 1. Botje99 - 50153 1 0 0 Botje_100.LHpdf 53 1. 1.E+10 1.E-06 1. Botje99 - 50154 1 0 0 Botje_100.LHpdf 54 1. 1.E+10 1.E-06 1. Botje99 - 50155 1 0 0 Botje_100.LHpdf 55 1. 1.E+10 1.E-06 1. Botje99 - 50156 1 0 0 Botje_100.LHpdf 56 1. 1.E+10 1.E-06 1. Botje99 - 50157 1 0 0 Botje_100.LHpdf 57 1. 1.E+10 1.E-06 1. Botje99 - 50158 1 0 0 Botje_100.LHpdf 58 1. 1.E+10 1.E-06 1. Botje99 - 50159 1 0 0 Botje_100.LHpdf 59 1. 1.E+10 1.E-06 1. Botje99 - 50160 1 0 0 Botje_100.LHpdf 60 1. 1.E+10 1.E-06 1. Botje99 - 50161 1 0 0 Botje_100.LHpdf 61 1. 1.E+10 1.E-06 1. Botje99 - 50162 1 0 0 Botje_100.LHpdf 62 1. 1.E+10 1.E-06 1. Botje99 - 50163 1 0 0 Botje_100.LHpdf 63 1. 1.E+10 1.E-06 1. Botje99 - 50164 1 0 0 Botje_100.LHpdf 64 1. 1.E+10 1.E-06 1. Botje99 - 50165 1 0 0 Botje_100.LHpdf 65 1. 1.E+10 1.E-06 1. Botje99 - 50166 1 0 0 Botje_100.LHpdf 66 1. 1.E+10 1.E-06 1. Botje99 - 50167 1 0 0 Botje_100.LHpdf 67 1. 1.E+10 1.E-06 1. Botje99 - 50168 1 0 0 Botje_100.LHpdf 68 1. 1.E+10 1.E-06 1. Botje99 - 50169 1 0 0 Botje_100.LHpdf 69 1. 1.E+10 1.E-06 1. Botje99 - 50170 1 0 0 Botje_100.LHpdf 70 1. 1.E+10 1.E-06 1. Botje99 - 50171 1 0 0 Botje_100.LHpdf 71 1. 1.E+10 1.E-06 1. Botje99 - 50172 1 0 0 Botje_100.LHpdf 72 1. 1.E+10 1.E-06 1. Botje99 - 50173 1 0 0 Botje_100.LHpdf 73 1. 1.E+10 1.E-06 1. Botje99 - 50174 1 0 0 Botje_100.LHpdf 74 1. 1.E+10 1.E-06 1. Botje99 - 50175 1 0 0 Botje_100.LHpdf 75 1. 1.E+10 1.E-06 1. Botje99 - 50176 1 0 0 Botje_100.LHpdf 76 1. 1.E+10 1.E-06 1. Botje99 - 50177 1 0 0 Botje_100.LHpdf 77 1. 1.E+10 1.E-06 1. Botje99 - 50178 1 0 0 Botje_100.LHpdf 78 1. 1.E+10 1.E-06 1. Botje99 - 50179 1 0 0 Botje_100.LHpdf 79 1. 1.E+10 1.E-06 1. Botje99 - 50180 1 0 0 Botje_100.LHpdf 80 1. 1.E+10 1.E-06 1. Botje99 - 50181 1 0 0 Botje_100.LHpdf 81 1. 1.E+10 1.E-06 1. Botje99 - 50182 1 0 0 Botje_100.LHpdf 82 1. 1.E+10 1.E-06 1. Botje99 - 50183 1 0 0 Botje_100.LHpdf 83 1. 1.E+10 1.E-06 1. Botje99 - 50184 1 0 0 Botje_100.LHpdf 84 1. 1.E+10 1.E-06 1. Botje99 - 50185 1 0 0 Botje_100.LHpdf 85 1. 1.E+10 1.E-06 1. Botje99 - 50186 1 0 0 Botje_100.LHpdf 86 1. 1.E+10 1.E-06 1. Botje99 - 50187 1 0 0 Botje_100.LHpdf 87 1. 1.E+10 1.E-06 1. Botje99 - 50188 1 0 0 Botje_100.LHpdf 88 1. 1.E+10 1.E-06 1. Botje99 - 50189 1 0 0 Botje_100.LHpdf 89 1. 1.E+10 1.E-06 1. Botje99 - 50190 1 0 0 Botje_100.LHpdf 90 1. 1.E+10 1.E-06 1. Botje99 - 50191 1 0 0 Botje_100.LHpdf 91 1. 1.E+10 1.E-06 1. Botje99 - 50192 1 0 0 Botje_100.LHpdf 92 1. 1.E+10 1.E-06 1. Botje99 - 50193 1 0 0 Botje_100.LHpdf 93 1. 1.E+10 1.E-06 1. Botje99 - 50194 1 0 0 Botje_100.LHpdf 94 1. 1.E+10 1.E-06 1. Botje99 - 50195 1 0 0 Botje_100.LHpdf 95 1. 1.E+10 1.E-06 1. Botje99 - 50196 1 0 0 Botje_100.LHpdf 96 1. 1.E+10 1.E-06 1. Botje99 - 50197 1 0 0 Botje_100.LHpdf 97 1. 1.E+10 1.E-06 1. Botje99 - 50198 1 0 0 Botje_100.LHpdf 98 1. 1.E+10 1.E-06 1. Botje99 - 50199 1 0 0 Botje_100.LHpdf 99 1. 1.E+10 1.E-06 1. Botje99 - 50200 1 0 0 Botje_100.LHpdf 100 1. 1.E+10 1.E-06 1. Botje99 - 51000 1 0 0 Botje_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Botje99 - 51001 1 0 0 Botje_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Botje99 - 51002 1 0 0 Botje_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Botje99 - 51003 1 0 0 Botje_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Botje99 - 51004 1 0 0 Botje_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Botje99 - 51005 1 0 0 Botje_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Botje99 - 51006 1 0 0 Botje_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Botje99 - 51007 1 0 0 Botje_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Botje99 - 51008 1 0 0 Botje_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Botje99 - 51009 1 0 0 Botje_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Botje99 - 51010 1 0 0 Botje_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Botje99 - 51011 1 0 0 Botje_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Botje99 - 51012 1 0 0 Botje_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Botje99 - 51013 1 0 0 Botje_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Botje99 - 51014 1 0 0 Botje_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Botje99 - 51015 1 0 0 Botje_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Botje99 - 51016 1 0 0 Botje_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Botje99 - 51017 1 0 0 Botje_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Botje99 - 51018 1 0 0 Botje_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Botje99 - 51019 1 0 0 Botje_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Botje99 - 51020 1 0 0 Botje_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Botje99 - 51021 1 0 0 Botje_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Botje99 - 51022 1 0 0 Botje_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Botje99 - 51023 1 0 0 Botje_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Botje99 - 51024 1 0 0 Botje_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Botje99 - 51025 1 0 0 Botje_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Botje99 - 51026 1 0 0 Botje_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Botje99 - 51027 1 0 0 Botje_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Botje99 - 51028 1 0 0 Botje_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Botje99 - 51029 1 0 0 Botje_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Botje99 - 51030 1 0 0 Botje_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Botje99 - 51031 1 0 0 Botje_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Botje99 - 51032 1 0 0 Botje_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Botje99 - 51033 1 0 0 Botje_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Botje99 - 51034 1 0 0 Botje_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Botje99 - 51035 1 0 0 Botje_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Botje99 - 51036 1 0 0 Botje_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Botje99 - 51037 1 0 0 Botje_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Botje99 - 51038 1 0 0 Botje_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Botje99 - 51039 1 0 0 Botje_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Botje99 - 51040 1 0 0 Botje_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Botje99 - 51041 1 0 0 Botje_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Botje99 - 51042 1 0 0 Botje_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Botje99 - 51043 1 0 0 Botje_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Botje99 - 51044 1 0 0 Botje_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Botje99 - 51045 1 0 0 Botje_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Botje99 - 51046 1 0 0 Botje_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Botje99 - 51047 1 0 0 Botje_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Botje99 - 51048 1 0 0 Botje_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Botje99 - 51049 1 0 0 Botje_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Botje99 - 51050 1 0 0 Botje_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Botje99 - 51051 1 0 0 Botje_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Botje99 - 51052 1 0 0 Botje_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Botje99 - 51053 1 0 0 Botje_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Botje99 - 51054 1 0 0 Botje_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Botje99 - 51055 1 0 0 Botje_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Botje99 - 51056 1 0 0 Botje_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Botje99 - 51057 1 0 0 Botje_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Botje99 - 51058 1 0 0 Botje_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Botje99 - 51059 1 0 0 Botje_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Botje99 - 51060 1 0 0 Botje_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Botje99 - 51061 1 0 0 Botje_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Botje99 - 51062 1 0 0 Botje_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Botje99 - 51063 1 0 0 Botje_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Botje99 - 51064 1 0 0 Botje_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Botje99 - 51065 1 0 0 Botje_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Botje99 - 51066 1 0 0 Botje_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Botje99 - 51067 1 0 0 Botje_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Botje99 - 51068 1 0 0 Botje_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Botje99 - 51069 1 0 0 Botje_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Botje99 - 51070 1 0 0 Botje_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Botje99 - 51071 1 0 0 Botje_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Botje99 - 51072 1 0 0 Botje_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Botje99 - 51073 1 0 0 Botje_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Botje99 - 51074 1 0 0 Botje_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Botje99 - 51075 1 0 0 Botje_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Botje99 - 51076 1 0 0 Botje_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Botje99 - 51077 1 0 0 Botje_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Botje99 - 51078 1 0 0 Botje_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Botje99 - 51079 1 0 0 Botje_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Botje99 - 51080 1 0 0 Botje_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Botje99 - 51081 1 0 0 Botje_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Botje99 - 51082 1 0 0 Botje_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Botje99 - 51083 1 0 0 Botje_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Botje99 - 51084 1 0 0 Botje_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Botje99 - 51085 1 0 0 Botje_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Botje99 - 51086 1 0 0 Botje_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Botje99 - 51087 1 0 0 Botje_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Botje99 - 51088 1 0 0 Botje_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Botje99 - 51089 1 0 0 Botje_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Botje99 - 51090 1 0 0 Botje_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Botje99 - 51091 1 0 0 Botje_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Botje99 - 51092 1 0 0 Botje_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Botje99 - 51093 1 0 0 Botje_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Botje99 - 51094 1 0 0 Botje_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Botje99 - 51095 1 0 0 Botje_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Botje99 - 51096 1 0 0 Botje_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Botje99 - 51097 1 0 0 Botje_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Botje99 - 51098 1 0 0 Botje_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Botje99 - 51099 1 0 0 Botje_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Botje99 - 51100 1 0 0 Botje_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Botje99 - 51101 1 0 0 Botje_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Botje99 - 51102 1 0 0 Botje_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Botje99 - 51103 1 0 0 Botje_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Botje99 - 51104 1 0 0 Botje_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Botje99 - 51105 1 0 0 Botje_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Botje99 - 51106 1 0 0 Botje_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Botje99 - 51107 1 0 0 Botje_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Botje99 - 51108 1 0 0 Botje_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Botje99 - 51109 1 0 0 Botje_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Botje99 - 51110 1 0 0 Botje_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Botje99 - 51111 1 0 0 Botje_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Botje99 - 51112 1 0 0 Botje_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Botje99 - 51113 1 0 0 Botje_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Botje99 - 51114 1 0 0 Botje_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Botje99 - 51115 1 0 0 Botje_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Botje99 - 51116 1 0 0 Botje_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Botje99 - 51117 1 0 0 Botje_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Botje99 - 51118 1 0 0 Botje_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Botje99 - 51119 1 0 0 Botje_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Botje99 - 51120 1 0 0 Botje_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Botje99 - 51121 1 0 0 Botje_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Botje99 - 51122 1 0 0 Botje_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Botje99 - 51123 1 0 0 Botje_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Botje99 - 51124 1 0 0 Botje_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Botje99 - 51125 1 0 0 Botje_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Botje99 - 51126 1 0 0 Botje_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Botje99 - 51127 1 0 0 Botje_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Botje99 - 51128 1 0 0 Botje_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Botje99 - 51129 1 0 0 Botje_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Botje99 - 51130 1 0 0 Botje_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Botje99 - 51131 1 0 0 Botje_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Botje99 - 51132 1 0 0 Botje_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Botje99 - 51133 1 0 0 Botje_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Botje99 - 51134 1 0 0 Botje_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Botje99 - 51135 1 0 0 Botje_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Botje99 - 51136 1 0 0 Botje_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Botje99 - 51137 1 0 0 Botje_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Botje99 - 51138 1 0 0 Botje_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Botje99 - 51139 1 0 0 Botje_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Botje99 - 51140 1 0 0 Botje_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Botje99 - 51141 1 0 0 Botje_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Botje99 - 51142 1 0 0 Botje_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Botje99 - 51143 1 0 0 Botje_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Botje99 - 51144 1 0 0 Botje_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Botje99 - 51145 1 0 0 Botje_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Botje99 - 51146 1 0 0 Botje_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Botje99 - 51147 1 0 0 Botje_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Botje99 - 51148 1 0 0 Botje_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Botje99 - 51149 1 0 0 Botje_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Botje99 - 51150 1 0 0 Botje_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Botje99 - 51151 1 0 0 Botje_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Botje99 - 51152 1 0 0 Botje_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Botje99 - 51153 1 0 0 Botje_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Botje99 - 51154 1 0 0 Botje_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Botje99 - 51155 1 0 0 Botje_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Botje99 - 51156 1 0 0 Botje_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Botje99 - 51157 1 0 0 Botje_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Botje99 - 51158 1 0 0 Botje_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Botje99 - 51159 1 0 0 Botje_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Botje99 - 51160 1 0 0 Botje_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Botje99 - 51161 1 0 0 Botje_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Botje99 - 51162 1 0 0 Botje_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Botje99 - 51163 1 0 0 Botje_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Botje99 - 51164 1 0 0 Botje_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Botje99 - 51165 1 0 0 Botje_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Botje99 - 51166 1 0 0 Botje_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Botje99 - 51167 1 0 0 Botje_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Botje99 - 51168 1 0 0 Botje_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Botje99 - 51169 1 0 0 Botje_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Botje99 - 51170 1 0 0 Botje_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Botje99 - 51171 1 0 0 Botje_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Botje99 - 51172 1 0 0 Botje_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Botje99 - 51173 1 0 0 Botje_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Botje99 - 51174 1 0 0 Botje_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Botje99 - 51175 1 0 0 Botje_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Botje99 - 51176 1 0 0 Botje_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Botje99 - 51177 1 0 0 Botje_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Botje99 - 51178 1 0 0 Botje_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Botje99 - 51179 1 0 0 Botje_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Botje99 - 51180 1 0 0 Botje_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Botje99 - 51181 1 0 0 Botje_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Botje99 - 51182 1 0 0 Botje_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Botje99 - 51183 1 0 0 Botje_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Botje99 - 51184 1 0 0 Botje_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Botje99 - 51185 1 0 0 Botje_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Botje99 - 51186 1 0 0 Botje_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Botje99 - 51187 1 0 0 Botje_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Botje99 - 51188 1 0 0 Botje_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Botje99 - 51189 1 0 0 Botje_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Botje99 - 51190 1 0 0 Botje_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Botje99 - 51191 1 0 0 Botje_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Botje99 - 51192 1 0 0 Botje_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Botje99 - 51193 1 0 0 Botje_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Botje99 - 51194 1 0 0 Botje_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Botje99 - 51195 1 0 0 Botje_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Botje99 - 51196 1 0 0 Botje_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Botje99 - 51197 1 0 0 Botje_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Botje99 - 51198 1 0 0 Botje_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Botje99 - 51199 1 0 0 Botje_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Botje99 - 51200 1 0 0 Botje_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Botje99 - 51201 1 0 0 Botje_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Botje99 - 51202 1 0 0 Botje_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Botje99 - 51203 1 0 0 Botje_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Botje99 - 51204 1 0 0 Botje_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Botje99 - 51205 1 0 0 Botje_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Botje99 - 51206 1 0 0 Botje_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Botje99 - 51207 1 0 0 Botje_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Botje99 - 51208 1 0 0 Botje_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Botje99 - 51209 1 0 0 Botje_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Botje99 - 51210 1 0 0 Botje_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Botje99 - 51211 1 0 0 Botje_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Botje99 - 51212 1 0 0 Botje_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Botje99 - 51213 1 0 0 Botje_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Botje99 - 51214 1 0 0 Botje_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Botje99 - 51215 1 0 0 Botje_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Botje99 - 51216 1 0 0 Botje_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Botje99 - 51217 1 0 0 Botje_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Botje99 - 51218 1 0 0 Botje_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Botje99 - 51219 1 0 0 Botje_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Botje99 - 51220 1 0 0 Botje_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Botje99 - 51221 1 0 0 Botje_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Botje99 - 51222 1 0 0 Botje_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Botje99 - 51223 1 0 0 Botje_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Botje99 - 51224 1 0 0 Botje_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Botje99 - 51225 1 0 0 Botje_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Botje99 - 51226 1 0 0 Botje_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Botje99 - 51227 1 0 0 Botje_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Botje99 - 51228 1 0 0 Botje_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Botje99 - 51229 1 0 0 Botje_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Botje99 - 51230 1 0 0 Botje_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Botje99 - 51231 1 0 0 Botje_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Botje99 - 51232 1 0 0 Botje_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Botje99 - 51233 1 0 0 Botje_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Botje99 - 51234 1 0 0 Botje_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Botje99 - 51235 1 0 0 Botje_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Botje99 - 51236 1 0 0 Botje_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Botje99 - 51237 1 0 0 Botje_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Botje99 - 51238 1 0 0 Botje_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Botje99 - 51239 1 0 0 Botje_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Botje99 - 51240 1 0 0 Botje_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Botje99 - 51241 1 0 0 Botje_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Botje99 - 51242 1 0 0 Botje_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Botje99 - 51243 1 0 0 Botje_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Botje99 - 51244 1 0 0 Botje_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Botje99 - 51245 1 0 0 Botje_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Botje99 - 51246 1 0 0 Botje_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Botje99 - 51247 1 0 0 Botje_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Botje99 - 51248 1 0 0 Botje_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Botje99 - 51249 1 0 0 Botje_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Botje99 - 51250 1 0 0 Botje_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Botje99 - 51251 1 0 0 Botje_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Botje99 - 51252 1 0 0 Botje_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Botje99 - 51253 1 0 0 Botje_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Botje99 - 51254 1 0 0 Botje_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Botje99 - 51255 1 0 0 Botje_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Botje99 - 51256 1 0 0 Botje_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Botje99 - 51257 1 0 0 Botje_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Botje99 - 51258 1 0 0 Botje_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Botje99 - 51259 1 0 0 Botje_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Botje99 - 51260 1 0 0 Botje_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Botje99 - 51261 1 0 0 Botje_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Botje99 - 51262 1 0 0 Botje_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Botje99 - 51263 1 0 0 Botje_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Botje99 - 51264 1 0 0 Botje_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Botje99 - 51265 1 0 0 Botje_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Botje99 - 51266 1 0 0 Botje_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Botje99 - 51267 1 0 0 Botje_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Botje99 - 51268 1 0 0 Botje_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Botje99 - 51269 1 0 0 Botje_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Botje99 - 51270 1 0 0 Botje_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Botje99 - 51271 1 0 0 Botje_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Botje99 - 51272 1 0 0 Botje_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Botje99 - 51273 1 0 0 Botje_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Botje99 - 51274 1 0 0 Botje_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Botje99 - 51275 1 0 0 Botje_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Botje99 - 51276 1 0 0 Botje_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Botje99 - 51277 1 0 0 Botje_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Botje99 - 51278 1 0 0 Botje_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Botje99 - 51279 1 0 0 Botje_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Botje99 - 51280 1 0 0 Botje_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Botje99 - 51281 1 0 0 Botje_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Botje99 - 51282 1 0 0 Botje_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Botje99 - 51283 1 0 0 Botje_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Botje99 - 51284 1 0 0 Botje_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Botje99 - 51285 1 0 0 Botje_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Botje99 - 51286 1 0 0 Botje_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Botje99 - 51287 1 0 0 Botje_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Botje99 - 51288 1 0 0 Botje_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Botje99 - 51289 1 0 0 Botje_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Botje99 - 51290 1 0 0 Botje_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Botje99 - 51291 1 0 0 Botje_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Botje99 - 51292 1 0 0 Botje_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Botje99 - 51293 1 0 0 Botje_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Botje99 - 51294 1 0 0 Botje_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Botje99 - 51295 1 0 0 Botje_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Botje99 - 51296 1 0 0 Botje_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Botje99 - 51297 1 0 0 Botje_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Botje99 - 51298 1 0 0 Botje_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Botje99 - 51299 1 0 0 Botje_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Botje99 - 51300 1 0 0 Botje_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Botje99 - 51301 1 0 0 Botje_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Botje99 - 51302 1 0 0 Botje_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Botje99 - 51303 1 0 0 Botje_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Botje99 - 51304 1 0 0 Botje_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Botje99 - 51305 1 0 0 Botje_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Botje99 - 51306 1 0 0 Botje_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Botje99 - 51307 1 0 0 Botje_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Botje99 - 51308 1 0 0 Botje_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Botje99 - 51309 1 0 0 Botje_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Botje99 - 51310 1 0 0 Botje_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Botje99 - 51311 1 0 0 Botje_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Botje99 - 51312 1 0 0 Botje_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Botje99 - 51313 1 0 0 Botje_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Botje99 - 51314 1 0 0 Botje_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Botje99 - 51315 1 0 0 Botje_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Botje99 - 51316 1 0 0 Botje_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Botje99 - 51317 1 0 0 Botje_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Botje99 - 51318 1 0 0 Botje_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Botje99 - 51319 1 0 0 Botje_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Botje99 - 51320 1 0 0 Botje_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Botje99 - 51321 1 0 0 Botje_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Botje99 - 51322 1 0 0 Botje_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Botje99 - 51323 1 0 0 Botje_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Botje99 - 51324 1 0 0 Botje_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Botje99 - 51325 1 0 0 Botje_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Botje99 - 51326 1 0 0 Botje_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Botje99 - 51327 1 0 0 Botje_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Botje99 - 51328 1 0 0 Botje_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Botje99 - 51329 1 0 0 Botje_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Botje99 - 51330 1 0 0 Botje_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Botje99 - 51331 1 0 0 Botje_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Botje99 - 51332 1 0 0 Botje_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Botje99 - 51333 1 0 0 Botje_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Botje99 - 51334 1 0 0 Botje_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Botje99 - 51335 1 0 0 Botje_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Botje99 - 51336 1 0 0 Botje_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Botje99 - 51337 1 0 0 Botje_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Botje99 - 51338 1 0 0 Botje_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Botje99 - 51339 1 0 0 Botje_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Botje99 - 51340 1 0 0 Botje_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Botje99 - 51341 1 0 0 Botje_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Botje99 - 51342 1 0 0 Botje_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Botje99 - 51343 1 0 0 Botje_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Botje99 - 51344 1 0 0 Botje_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Botje99 - 51345 1 0 0 Botje_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Botje99 - 51346 1 0 0 Botje_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Botje99 - 51347 1 0 0 Botje_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Botje99 - 51348 1 0 0 Botje_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Botje99 - 51349 1 0 0 Botje_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Botje99 - 51350 1 0 0 Botje_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Botje99 - 51351 1 0 0 Botje_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Botje99 - 51352 1 0 0 Botje_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Botje99 - 51353 1 0 0 Botje_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Botje99 - 51354 1 0 0 Botje_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Botje99 - 51355 1 0 0 Botje_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Botje99 - 51356 1 0 0 Botje_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Botje99 - 51357 1 0 0 Botje_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Botje99 - 51358 1 0 0 Botje_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Botje99 - 51359 1 0 0 Botje_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Botje99 - 51360 1 0 0 Botje_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Botje99 - 51361 1 0 0 Botje_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Botje99 - 51362 1 0 0 Botje_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Botje99 - 51363 1 0 0 Botje_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Botje99 - 51364 1 0 0 Botje_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Botje99 - 51365 1 0 0 Botje_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Botje99 - 51366 1 0 0 Botje_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Botje99 - 51367 1 0 0 Botje_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Botje99 - 51368 1 0 0 Botje_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Botje99 - 51369 1 0 0 Botje_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Botje99 - 51370 1 0 0 Botje_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Botje99 - 51371 1 0 0 Botje_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Botje99 - 51372 1 0 0 Botje_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Botje99 - 51373 1 0 0 Botje_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Botje99 - 51374 1 0 0 Botje_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Botje99 - 51375 1 0 0 Botje_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Botje99 - 51376 1 0 0 Botje_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Botje99 - 51377 1 0 0 Botje_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Botje99 - 51378 1 0 0 Botje_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Botje99 - 51379 1 0 0 Botje_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Botje99 - 51380 1 0 0 Botje_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Botje99 - 51381 1 0 0 Botje_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Botje99 - 51382 1 0 0 Botje_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Botje99 - 51383 1 0 0 Botje_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Botje99 - 51384 1 0 0 Botje_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Botje99 - 51385 1 0 0 Botje_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Botje99 - 51386 1 0 0 Botje_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Botje99 - 51387 1 0 0 Botje_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Botje99 - 51388 1 0 0 Botje_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Botje99 - 51389 1 0 0 Botje_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Botje99 - 51390 1 0 0 Botje_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Botje99 - 51391 1 0 0 Botje_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Botje99 - 51392 1 0 0 Botje_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Botje99 - 51393 1 0 0 Botje_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Botje99 - 51394 1 0 0 Botje_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Botje99 - 51395 1 0 0 Botje_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Botje99 - 51396 1 0 0 Botje_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Botje99 - 51397 1 0 0 Botje_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Botje99 - 51398 1 0 0 Botje_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Botje99 - 51399 1 0 0 Botje_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Botje99 - 51400 1 0 0 Botje_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Botje99 - 51401 1 0 0 Botje_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Botje99 - 51402 1 0 0 Botje_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Botje99 - 51403 1 0 0 Botje_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Botje99 - 51404 1 0 0 Botje_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Botje99 - 51405 1 0 0 Botje_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Botje99 - 51406 1 0 0 Botje_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Botje99 - 51407 1 0 0 Botje_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Botje99 - 51408 1 0 0 Botje_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Botje99 - 51409 1 0 0 Botje_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Botje99 - 51410 1 0 0 Botje_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Botje99 - 51411 1 0 0 Botje_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Botje99 - 51412 1 0 0 Botje_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Botje99 - 51413 1 0 0 Botje_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Botje99 - 51414 1 0 0 Botje_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Botje99 - 51415 1 0 0 Botje_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Botje99 - 51416 1 0 0 Botje_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Botje99 - 51417 1 0 0 Botje_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Botje99 - 51418 1 0 0 Botje_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Botje99 - 51419 1 0 0 Botje_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Botje99 - 51420 1 0 0 Botje_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Botje99 - 51421 1 0 0 Botje_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Botje99 - 51422 1 0 0 Botje_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Botje99 - 51423 1 0 0 Botje_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Botje99 - 51424 1 0 0 Botje_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Botje99 - 51425 1 0 0 Botje_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Botje99 - 51426 1 0 0 Botje_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Botje99 - 51427 1 0 0 Botje_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Botje99 - 51428 1 0 0 Botje_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Botje99 - 51429 1 0 0 Botje_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Botje99 - 51430 1 0 0 Botje_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Botje99 - 51431 1 0 0 Botje_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Botje99 - 51432 1 0 0 Botje_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Botje99 - 51433 1 0 0 Botje_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Botje99 - 51434 1 0 0 Botje_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Botje99 - 51435 1 0 0 Botje_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Botje99 - 51436 1 0 0 Botje_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Botje99 - 51437 1 0 0 Botje_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Botje99 - 51438 1 0 0 Botje_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Botje99 - 51439 1 0 0 Botje_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Botje99 - 51440 1 0 0 Botje_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Botje99 - 51441 1 0 0 Botje_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Botje99 - 51442 1 0 0 Botje_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Botje99 - 51443 1 0 0 Botje_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Botje99 - 51444 1 0 0 Botje_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Botje99 - 51445 1 0 0 Botje_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Botje99 - 51446 1 0 0 Botje_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Botje99 - 51447 1 0 0 Botje_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Botje99 - 51448 1 0 0 Botje_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Botje99 - 51449 1 0 0 Botje_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Botje99 - 51450 1 0 0 Botje_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Botje99 - 51451 1 0 0 Botje_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Botje99 - 51452 1 0 0 Botje_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Botje99 - 51453 1 0 0 Botje_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Botje99 - 51454 1 0 0 Botje_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Botje99 - 51455 1 0 0 Botje_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Botje99 - 51456 1 0 0 Botje_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Botje99 - 51457 1 0 0 Botje_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Botje99 - 51458 1 0 0 Botje_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Botje99 - 51459 1 0 0 Botje_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Botje99 - 51460 1 0 0 Botje_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Botje99 - 51461 1 0 0 Botje_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Botje99 - 51462 1 0 0 Botje_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Botje99 - 51463 1 0 0 Botje_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Botje99 - 51464 1 0 0 Botje_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Botje99 - 51465 1 0 0 Botje_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Botje99 - 51466 1 0 0 Botje_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Botje99 - 51467 1 0 0 Botje_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Botje99 - 51468 1 0 0 Botje_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Botje99 - 51469 1 0 0 Botje_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Botje99 - 51470 1 0 0 Botje_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Botje99 - 51471 1 0 0 Botje_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Botje99 - 51472 1 0 0 Botje_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Botje99 - 51473 1 0 0 Botje_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Botje99 - 51474 1 0 0 Botje_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Botje99 - 51475 1 0 0 Botje_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Botje99 - 51476 1 0 0 Botje_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Botje99 - 51477 1 0 0 Botje_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Botje99 - 51478 1 0 0 Botje_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Botje99 - 51479 1 0 0 Botje_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Botje99 - 51480 1 0 0 Botje_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Botje99 - 51481 1 0 0 Botje_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Botje99 - 51482 1 0 0 Botje_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Botje99 - 51483 1 0 0 Botje_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Botje99 - 51484 1 0 0 Botje_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Botje99 - 51485 1 0 0 Botje_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Botje99 - 51486 1 0 0 Botje_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Botje99 - 51487 1 0 0 Botje_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Botje99 - 51488 1 0 0 Botje_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Botje99 - 51489 1 0 0 Botje_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Botje99 - 51490 1 0 0 Botje_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Botje99 - 51491 1 0 0 Botje_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Botje99 - 51492 1 0 0 Botje_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Botje99 - 51493 1 0 0 Botje_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Botje99 - 51494 1 0 0 Botje_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Botje99 - 51495 1 0 0 Botje_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Botje99 - 51496 1 0 0 Botje_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Botje99 - 51497 1 0 0 Botje_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Botje99 - 51498 1 0 0 Botje_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Botje99 - 51499 1 0 0 Botje_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Botje99 - 51500 1 0 0 Botje_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Botje99 - 51501 1 0 0 Botje_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Botje99 - 51502 1 0 0 Botje_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Botje99 - 51503 1 0 0 Botje_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Botje99 - 51504 1 0 0 Botje_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Botje99 - 51505 1 0 0 Botje_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Botje99 - 51506 1 0 0 Botje_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Botje99 - 51507 1 0 0 Botje_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Botje99 - 51508 1 0 0 Botje_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Botje99 - 51509 1 0 0 Botje_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Botje99 - 51510 1 0 0 Botje_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Botje99 - 51511 1 0 0 Botje_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Botje99 - 51512 1 0 0 Botje_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Botje99 - 51513 1 0 0 Botje_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Botje99 - 51514 1 0 0 Botje_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Botje99 - 51515 1 0 0 Botje_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Botje99 - 51516 1 0 0 Botje_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Botje99 - 51517 1 0 0 Botje_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Botje99 - 51518 1 0 0 Botje_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Botje99 - 51519 1 0 0 Botje_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Botje99 - 51520 1 0 0 Botje_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Botje99 - 51521 1 0 0 Botje_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Botje99 - 51522 1 0 0 Botje_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Botje99 - 51523 1 0 0 Botje_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Botje99 - 51524 1 0 0 Botje_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Botje99 - 51525 1 0 0 Botje_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Botje99 - 51526 1 0 0 Botje_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Botje99 - 51527 1 0 0 Botje_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Botje99 - 51528 1 0 0 Botje_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Botje99 - 51529 1 0 0 Botje_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Botje99 - 51530 1 0 0 Botje_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Botje99 - 51531 1 0 0 Botje_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Botje99 - 51532 1 0 0 Botje_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Botje99 - 51533 1 0 0 Botje_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Botje99 - 51534 1 0 0 Botje_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Botje99 - 51535 1 0 0 Botje_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Botje99 - 51536 1 0 0 Botje_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Botje99 - 51537 1 0 0 Botje_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Botje99 - 51538 1 0 0 Botje_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Botje99 - 51539 1 0 0 Botje_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Botje99 - 51540 1 0 0 Botje_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Botje99 - 51541 1 0 0 Botje_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Botje99 - 51542 1 0 0 Botje_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Botje99 - 51543 1 0 0 Botje_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Botje99 - 51544 1 0 0 Botje_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Botje99 - 51545 1 0 0 Botje_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Botje99 - 51546 1 0 0 Botje_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Botje99 - 51547 1 0 0 Botje_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Botje99 - 51548 1 0 0 Botje_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Botje99 - 51549 1 0 0 Botje_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Botje99 - 51550 1 0 0 Botje_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Botje99 - 51551 1 0 0 Botje_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Botje99 - 51552 1 0 0 Botje_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Botje99 - 51553 1 0 0 Botje_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Botje99 - 51554 1 0 0 Botje_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Botje99 - 51555 1 0 0 Botje_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Botje99 - 51556 1 0 0 Botje_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Botje99 - 51557 1 0 0 Botje_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Botje99 - 51558 1 0 0 Botje_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Botje99 - 51559 1 0 0 Botje_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Botje99 - 51560 1 0 0 Botje_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Botje99 - 51561 1 0 0 Botje_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Botje99 - 51562 1 0 0 Botje_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Botje99 - 51563 1 0 0 Botje_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Botje99 - 51564 1 0 0 Botje_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Botje99 - 51565 1 0 0 Botje_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Botje99 - 51566 1 0 0 Botje_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Botje99 - 51567 1 0 0 Botje_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Botje99 - 51568 1 0 0 Botje_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Botje99 - 51569 1 0 0 Botje_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Botje99 - 51570 1 0 0 Botje_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Botje99 - 51571 1 0 0 Botje_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Botje99 - 51572 1 0 0 Botje_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Botje99 - 51573 1 0 0 Botje_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Botje99 - 51574 1 0 0 Botje_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Botje99 - 51575 1 0 0 Botje_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Botje99 - 51576 1 0 0 Botje_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Botje99 - 51577 1 0 0 Botje_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Botje99 - 51578 1 0 0 Botje_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Botje99 - 51579 1 0 0 Botje_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Botje99 - 51580 1 0 0 Botje_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Botje99 - 51581 1 0 0 Botje_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Botje99 - 51582 1 0 0 Botje_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Botje99 - 51583 1 0 0 Botje_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Botje99 - 51584 1 0 0 Botje_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Botje99 - 51585 1 0 0 Botje_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Botje99 - 51586 1 0 0 Botje_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Botje99 - 51587 1 0 0 Botje_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Botje99 - 51588 1 0 0 Botje_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Botje99 - 51589 1 0 0 Botje_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Botje99 - 51590 1 0 0 Botje_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Botje99 - 51591 1 0 0 Botje_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Botje99 - 51592 1 0 0 Botje_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Botje99 - 51593 1 0 0 Botje_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Botje99 - 51594 1 0 0 Botje_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Botje99 - 51595 1 0 0 Botje_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Botje99 - 51596 1 0 0 Botje_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Botje99 - 51597 1 0 0 Botje_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Botje99 - 51598 1 0 0 Botje_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Botje99 - 51599 1 0 0 Botje_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Botje99 - 51600 1 0 0 Botje_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Botje99 - 51601 1 0 0 Botje_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Botje99 - 51602 1 0 0 Botje_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Botje99 - 51603 1 0 0 Botje_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Botje99 - 51604 1 0 0 Botje_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Botje99 - 51605 1 0 0 Botje_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Botje99 - 51606 1 0 0 Botje_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Botje99 - 51607 1 0 0 Botje_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Botje99 - 51608 1 0 0 Botje_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Botje99 - 51609 1 0 0 Botje_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Botje99 - 51610 1 0 0 Botje_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Botje99 - 51611 1 0 0 Botje_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Botje99 - 51612 1 0 0 Botje_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Botje99 - 51613 1 0 0 Botje_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Botje99 - 51614 1 0 0 Botje_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Botje99 - 51615 1 0 0 Botje_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Botje99 - 51616 1 0 0 Botje_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Botje99 - 51617 1 0 0 Botje_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Botje99 - 51618 1 0 0 Botje_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Botje99 - 51619 1 0 0 Botje_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Botje99 - 51620 1 0 0 Botje_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Botje99 - 51621 1 0 0 Botje_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Botje99 - 51622 1 0 0 Botje_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Botje99 - 51623 1 0 0 Botje_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Botje99 - 51624 1 0 0 Botje_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Botje99 - 51625 1 0 0 Botje_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Botje99 - 51626 1 0 0 Botje_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Botje99 - 51627 1 0 0 Botje_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Botje99 - 51628 1 0 0 Botje_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Botje99 - 51629 1 0 0 Botje_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Botje99 - 51630 1 0 0 Botje_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Botje99 - 51631 1 0 0 Botje_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Botje99 - 51632 1 0 0 Botje_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Botje99 - 51633 1 0 0 Botje_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Botje99 - 51634 1 0 0 Botje_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Botje99 - 51635 1 0 0 Botje_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Botje99 - 51636 1 0 0 Botje_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Botje99 - 51637 1 0 0 Botje_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Botje99 - 51638 1 0 0 Botje_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Botje99 - 51639 1 0 0 Botje_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Botje99 - 51640 1 0 0 Botje_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Botje99 - 51641 1 0 0 Botje_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Botje99 - 51642 1 0 0 Botje_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Botje99 - 51643 1 0 0 Botje_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Botje99 - 51644 1 0 0 Botje_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Botje99 - 51645 1 0 0 Botje_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Botje99 - 51646 1 0 0 Botje_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Botje99 - 51647 1 0 0 Botje_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Botje99 - 51648 1 0 0 Botje_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Botje99 - 51649 1 0 0 Botje_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Botje99 - 51650 1 0 0 Botje_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Botje99 - 51651 1 0 0 Botje_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Botje99 - 51652 1 0 0 Botje_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Botje99 - 51653 1 0 0 Botje_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Botje99 - 51654 1 0 0 Botje_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Botje99 - 51655 1 0 0 Botje_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Botje99 - 51656 1 0 0 Botje_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Botje99 - 51657 1 0 0 Botje_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Botje99 - 51658 1 0 0 Botje_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Botje99 - 51659 1 0 0 Botje_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Botje99 - 51660 1 0 0 Botje_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Botje99 - 51661 1 0 0 Botje_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Botje99 - 51662 1 0 0 Botje_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Botje99 - 51663 1 0 0 Botje_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Botje99 - 51664 1 0 0 Botje_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Botje99 - 51665 1 0 0 Botje_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Botje99 - 51666 1 0 0 Botje_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Botje99 - 51667 1 0 0 Botje_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Botje99 - 51668 1 0 0 Botje_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Botje99 - 51669 1 0 0 Botje_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Botje99 - 51670 1 0 0 Botje_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Botje99 - 51671 1 0 0 Botje_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Botje99 - 51672 1 0 0 Botje_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Botje99 - 51673 1 0 0 Botje_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Botje99 - 51674 1 0 0 Botje_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Botje99 - 51675 1 0 0 Botje_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Botje99 - 51676 1 0 0 Botje_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Botje99 - 51677 1 0 0 Botje_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Botje99 - 51678 1 0 0 Botje_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Botje99 - 51679 1 0 0 Botje_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Botje99 - 51680 1 0 0 Botje_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Botje99 - 51681 1 0 0 Botje_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Botje99 - 51682 1 0 0 Botje_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Botje99 - 51683 1 0 0 Botje_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Botje99 - 51684 1 0 0 Botje_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Botje99 - 51685 1 0 0 Botje_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Botje99 - 51686 1 0 0 Botje_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Botje99 - 51687 1 0 0 Botje_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Botje99 - 51688 1 0 0 Botje_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Botje99 - 51689 1 0 0 Botje_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Botje99 - 51690 1 0 0 Botje_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Botje99 - 51691 1 0 0 Botje_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Botje99 - 51692 1 0 0 Botje_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Botje99 - 51693 1 0 0 Botje_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Botje99 - 51694 1 0 0 Botje_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Botje99 - 51695 1 0 0 Botje_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Botje99 - 51696 1 0 0 Botje_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Botje99 - 51697 1 0 0 Botje_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Botje99 - 51698 1 0 0 Botje_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Botje99 - 51699 1 0 0 Botje_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Botje99 - 51700 1 0 0 Botje_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Botje99 - 51701 1 0 0 Botje_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Botje99 - 51702 1 0 0 Botje_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Botje99 - 51703 1 0 0 Botje_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Botje99 - 51704 1 0 0 Botje_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Botje99 - 51705 1 0 0 Botje_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Botje99 - 51706 1 0 0 Botje_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Botje99 - 51707 1 0 0 Botje_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Botje99 - 51708 1 0 0 Botje_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Botje99 - 51709 1 0 0 Botje_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Botje99 - 51710 1 0 0 Botje_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Botje99 - 51711 1 0 0 Botje_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Botje99 - 51712 1 0 0 Botje_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Botje99 - 51713 1 0 0 Botje_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Botje99 - 51714 1 0 0 Botje_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Botje99 - 51715 1 0 0 Botje_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Botje99 - 51716 1 0 0 Botje_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Botje99 - 51717 1 0 0 Botje_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Botje99 - 51718 1 0 0 Botje_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Botje99 - 51719 1 0 0 Botje_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Botje99 - 51720 1 0 0 Botje_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Botje99 - 51721 1 0 0 Botje_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Botje99 - 51722 1 0 0 Botje_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Botje99 - 51723 1 0 0 Botje_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Botje99 - 51724 1 0 0 Botje_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Botje99 - 51725 1 0 0 Botje_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Botje99 - 51726 1 0 0 Botje_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Botje99 - 51727 1 0 0 Botje_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Botje99 - 51728 1 0 0 Botje_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Botje99 - 51729 1 0 0 Botje_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Botje99 - 51730 1 0 0 Botje_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Botje99 - 51731 1 0 0 Botje_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Botje99 - 51732 1 0 0 Botje_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Botje99 - 51733 1 0 0 Botje_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Botje99 - 51734 1 0 0 Botje_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Botje99 - 51735 1 0 0 Botje_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Botje99 - 51736 1 0 0 Botje_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Botje99 - 51737 1 0 0 Botje_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Botje99 - 51738 1 0 0 Botje_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Botje99 - 51739 1 0 0 Botje_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Botje99 - 51740 1 0 0 Botje_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Botje99 - 51741 1 0 0 Botje_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Botje99 - 51742 1 0 0 Botje_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Botje99 - 51743 1 0 0 Botje_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Botje99 - 51744 1 0 0 Botje_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Botje99 - 51745 1 0 0 Botje_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Botje99 - 51746 1 0 0 Botje_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Botje99 - 51747 1 0 0 Botje_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Botje99 - 51748 1 0 0 Botje_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Botje99 - 51749 1 0 0 Botje_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Botje99 - 51750 1 0 0 Botje_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Botje99 - 51751 1 0 0 Botje_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Botje99 - 51752 1 0 0 Botje_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Botje99 - 51753 1 0 0 Botje_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Botje99 - 51754 1 0 0 Botje_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Botje99 - 51755 1 0 0 Botje_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Botje99 - 51756 1 0 0 Botje_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Botje99 - 51757 1 0 0 Botje_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Botje99 - 51758 1 0 0 Botje_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Botje99 - 51759 1 0 0 Botje_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Botje99 - 51760 1 0 0 Botje_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Botje99 - 51761 1 0 0 Botje_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Botje99 - 51762 1 0 0 Botje_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Botje99 - 51763 1 0 0 Botje_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Botje99 - 51764 1 0 0 Botje_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Botje99 - 51765 1 0 0 Botje_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Botje99 - 51766 1 0 0 Botje_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Botje99 - 51767 1 0 0 Botje_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Botje99 - 51768 1 0 0 Botje_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Botje99 - 51769 1 0 0 Botje_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Botje99 - 51770 1 0 0 Botje_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Botje99 - 51771 1 0 0 Botje_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Botje99 - 51772 1 0 0 Botje_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Botje99 - 51773 1 0 0 Botje_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Botje99 - 51774 1 0 0 Botje_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Botje99 - 51775 1 0 0 Botje_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Botje99 - 51776 1 0 0 Botje_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Botje99 - 51777 1 0 0 Botje_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Botje99 - 51778 1 0 0 Botje_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Botje99 - 51779 1 0 0 Botje_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Botje99 - 51780 1 0 0 Botje_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Botje99 - 51781 1 0 0 Botje_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Botje99 - 51782 1 0 0 Botje_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Botje99 - 51783 1 0 0 Botje_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Botje99 - 51784 1 0 0 Botje_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Botje99 - 51785 1 0 0 Botje_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Botje99 - 51786 1 0 0 Botje_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Botje99 - 51787 1 0 0 Botje_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Botje99 - 51788 1 0 0 Botje_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Botje99 - 51789 1 0 0 Botje_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Botje99 - 51790 1 0 0 Botje_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Botje99 - 51791 1 0 0 Botje_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Botje99 - 51792 1 0 0 Botje_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Botje99 - 51793 1 0 0 Botje_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Botje99 - 51794 1 0 0 Botje_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Botje99 - 51795 1 0 0 Botje_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Botje99 - 51796 1 0 0 Botje_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Botje99 - 51797 1 0 0 Botje_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Botje99 - 51798 1 0 0 Botje_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Botje99 - 51799 1 0 0 Botje_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Botje99 - 51800 1 0 0 Botje_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Botje99 - 51801 1 0 0 Botje_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Botje99 - 51802 1 0 0 Botje_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Botje99 - 51803 1 0 0 Botje_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Botje99 - 51804 1 0 0 Botje_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Botje99 - 51805 1 0 0 Botje_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Botje99 - 51806 1 0 0 Botje_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Botje99 - 51807 1 0 0 Botje_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Botje99 - 51808 1 0 0 Botje_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Botje99 - 51809 1 0 0 Botje_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Botje99 - 51810 1 0 0 Botje_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Botje99 - 51811 1 0 0 Botje_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Botje99 - 51812 1 0 0 Botje_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Botje99 - 51813 1 0 0 Botje_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Botje99 - 51814 1 0 0 Botje_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Botje99 - 51815 1 0 0 Botje_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Botje99 - 51816 1 0 0 Botje_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Botje99 - 51817 1 0 0 Botje_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Botje99 - 51818 1 0 0 Botje_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Botje99 - 51819 1 0 0 Botje_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Botje99 - 51820 1 0 0 Botje_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Botje99 - 51821 1 0 0 Botje_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Botje99 - 51822 1 0 0 Botje_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Botje99 - 51823 1 0 0 Botje_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Botje99 - 51824 1 0 0 Botje_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Botje99 - 51825 1 0 0 Botje_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Botje99 - 51826 1 0 0 Botje_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Botje99 - 51827 1 0 0 Botje_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Botje99 - 51828 1 0 0 Botje_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Botje99 - 51829 1 0 0 Botje_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Botje99 - 51830 1 0 0 Botje_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Botje99 - 51831 1 0 0 Botje_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Botje99 - 51832 1 0 0 Botje_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Botje99 - 51833 1 0 0 Botje_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Botje99 - 51834 1 0 0 Botje_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Botje99 - 51835 1 0 0 Botje_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Botje99 - 51836 1 0 0 Botje_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Botje99 - 51837 1 0 0 Botje_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Botje99 - 51838 1 0 0 Botje_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Botje99 - 51839 1 0 0 Botje_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Botje99 - 51840 1 0 0 Botje_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Botje99 - 51841 1 0 0 Botje_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Botje99 - 51842 1 0 0 Botje_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Botje99 - 51843 1 0 0 Botje_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Botje99 - 51844 1 0 0 Botje_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Botje99 - 51845 1 0 0 Botje_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Botje99 - 51846 1 0 0 Botje_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Botje99 - 51847 1 0 0 Botje_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Botje99 - 51848 1 0 0 Botje_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Botje99 - 51849 1 0 0 Botje_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Botje99 - 51850 1 0 0 Botje_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Botje99 - 51851 1 0 0 Botje_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Botje99 - 51852 1 0 0 Botje_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Botje99 - 51853 1 0 0 Botje_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Botje99 - 51854 1 0 0 Botje_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Botje99 - 51855 1 0 0 Botje_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Botje99 - 51856 1 0 0 Botje_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Botje99 - 51857 1 0 0 Botje_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Botje99 - 51858 1 0 0 Botje_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Botje99 - 51859 1 0 0 Botje_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Botje99 - 51860 1 0 0 Botje_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Botje99 - 51861 1 0 0 Botje_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Botje99 - 51862 1 0 0 Botje_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Botje99 - 51863 1 0 0 Botje_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Botje99 - 51864 1 0 0 Botje_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Botje99 - 51865 1 0 0 Botje_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Botje99 - 51866 1 0 0 Botje_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Botje99 - 51867 1 0 0 Botje_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Botje99 - 51868 1 0 0 Botje_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Botje99 - 51869 1 0 0 Botje_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Botje99 - 51870 1 0 0 Botje_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Botje99 - 51871 1 0 0 Botje_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Botje99 - 51872 1 0 0 Botje_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Botje99 - 51873 1 0 0 Botje_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Botje99 - 51874 1 0 0 Botje_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Botje99 - 51875 1 0 0 Botje_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Botje99 - 51876 1 0 0 Botje_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Botje99 - 51877 1 0 0 Botje_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Botje99 - 51878 1 0 0 Botje_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Botje99 - 51879 1 0 0 Botje_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Botje99 - 51880 1 0 0 Botje_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Botje99 - 51881 1 0 0 Botje_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Botje99 - 51882 1 0 0 Botje_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Botje99 - 51883 1 0 0 Botje_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Botje99 - 51884 1 0 0 Botje_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Botje99 - 51885 1 0 0 Botje_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Botje99 - 51886 1 0 0 Botje_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Botje99 - 51887 1 0 0 Botje_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Botje99 - 51888 1 0 0 Botje_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Botje99 - 51889 1 0 0 Botje_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Botje99 - 51890 1 0 0 Botje_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Botje99 - 51891 1 0 0 Botje_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Botje99 - 51892 1 0 0 Botje_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Botje99 - 51893 1 0 0 Botje_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Botje99 - 51894 1 0 0 Botje_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Botje99 - 51895 1 0 0 Botje_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Botje99 - 51896 1 0 0 Botje_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Botje99 - 51897 1 0 0 Botje_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Botje99 - 51898 1 0 0 Botje_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Botje99 - 51899 1 0 0 Botje_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Botje99 - 51900 1 0 0 Botje_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Botje99 - 51901 1 0 0 Botje_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Botje99 - 51902 1 0 0 Botje_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Botje99 - 51903 1 0 0 Botje_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Botje99 - 51904 1 0 0 Botje_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Botje99 - 51905 1 0 0 Botje_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Botje99 - 51906 1 0 0 Botje_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Botje99 - 51907 1 0 0 Botje_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Botje99 - 51908 1 0 0 Botje_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Botje99 - 51909 1 0 0 Botje_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Botje99 - 51910 1 0 0 Botje_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Botje99 - 51911 1 0 0 Botje_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Botje99 - 51912 1 0 0 Botje_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Botje99 - 51913 1 0 0 Botje_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Botje99 - 51914 1 0 0 Botje_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Botje99 - 51915 1 0 0 Botje_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Botje99 - 51916 1 0 0 Botje_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Botje99 - 51917 1 0 0 Botje_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Botje99 - 51918 1 0 0 Botje_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Botje99 - 51919 1 0 0 Botje_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Botje99 - 51920 1 0 0 Botje_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Botje99 - 51921 1 0 0 Botje_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Botje99 - 51922 1 0 0 Botje_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Botje99 - 51923 1 0 0 Botje_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Botje99 - 51924 1 0 0 Botje_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Botje99 - 51925 1 0 0 Botje_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Botje99 - 51926 1 0 0 Botje_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Botje99 - 51927 1 0 0 Botje_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Botje99 - 51928 1 0 0 Botje_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Botje99 - 51929 1 0 0 Botje_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Botje99 - 51930 1 0 0 Botje_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Botje99 - 51931 1 0 0 Botje_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Botje99 - 51932 1 0 0 Botje_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Botje99 - 51933 1 0 0 Botje_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Botje99 - 51934 1 0 0 Botje_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Botje99 - 51935 1 0 0 Botje_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Botje99 - 51936 1 0 0 Botje_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Botje99 - 51937 1 0 0 Botje_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Botje99 - 51938 1 0 0 Botje_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Botje99 - 51939 1 0 0 Botje_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Botje99 - 51940 1 0 0 Botje_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Botje99 - 51941 1 0 0 Botje_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Botje99 - 51942 1 0 0 Botje_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Botje99 - 51943 1 0 0 Botje_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Botje99 - 51944 1 0 0 Botje_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Botje99 - 51945 1 0 0 Botje_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Botje99 - 51946 1 0 0 Botje_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Botje99 - 51947 1 0 0 Botje_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Botje99 - 51948 1 0 0 Botje_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Botje99 - 51949 1 0 0 Botje_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Botje99 - 51950 1 0 0 Botje_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Botje99 - 51951 1 0 0 Botje_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Botje99 - 51952 1 0 0 Botje_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Botje99 - 51953 1 0 0 Botje_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Botje99 - 51954 1 0 0 Botje_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Botje99 - 51955 1 0 0 Botje_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Botje99 - 51956 1 0 0 Botje_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Botje99 - 51957 1 0 0 Botje_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Botje99 - 51958 1 0 0 Botje_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Botje99 - 51959 1 0 0 Botje_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Botje99 - 51960 1 0 0 Botje_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Botje99 - 51961 1 0 0 Botje_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Botje99 - 51962 1 0 0 Botje_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Botje99 - 51963 1 0 0 Botje_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Botje99 - 51964 1 0 0 Botje_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Botje99 - 51965 1 0 0 Botje_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Botje99 - 51966 1 0 0 Botje_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Botje99 - 51967 1 0 0 Botje_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Botje99 - 51968 1 0 0 Botje_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Botje99 - 51969 1 0 0 Botje_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Botje99 - 51970 1 0 0 Botje_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Botje99 - 51971 1 0 0 Botje_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Botje99 - 51972 1 0 0 Botje_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Botje99 - 51973 1 0 0 Botje_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Botje99 - 51974 1 0 0 Botje_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Botje99 - 51975 1 0 0 Botje_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Botje99 - 51976 1 0 0 Botje_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Botje99 - 51977 1 0 0 Botje_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Botje99 - 51978 1 0 0 Botje_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Botje99 - 51979 1 0 0 Botje_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Botje99 - 51980 1 0 0 Botje_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Botje99 - 51981 1 0 0 Botje_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Botje99 - 51982 1 0 0 Botje_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Botje99 - 51983 1 0 0 Botje_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Botje99 - 51984 1 0 0 Botje_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Botje99 - 51985 1 0 0 Botje_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Botje99 - 51986 1 0 0 Botje_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Botje99 - 51987 1 0 0 Botje_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Botje99 - 51988 1 0 0 Botje_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Botje99 - 51989 1 0 0 Botje_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Botje99 - 51990 1 0 0 Botje_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Botje99 - 51991 1 0 0 Botje_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Botje99 - 51992 1 0 0 Botje_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Botje99 - 51993 1 0 0 Botje_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Botje99 - 51994 1 0 0 Botje_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Botje99 - 51995 1 0 0 Botje_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Botje99 - 51996 1 0 0 Botje_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Botje99 - 51997 1 0 0 Botje_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Botje99 - 51998 1 0 0 Botje_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Botje99 - 51999 1 0 0 Botje_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Botje99 - 60000 1 0 0 ZEUS2002_TR.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60001 1 0 0 ZEUS2002_TR.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60002 1 0 0 ZEUS2002_TR.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60003 1 0 0 ZEUS2002_TR.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60004 1 0 0 ZEUS2002_TR.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60005 1 0 0 ZEUS2002_TR.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60006 1 0 0 ZEUS2002_TR.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60007 1 0 0 ZEUS2002_TR.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60008 1 0 0 ZEUS2002_TR.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60009 1 0 0 ZEUS2002_TR.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60010 1 0 0 ZEUS2002_TR.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60011 1 0 0 ZEUS2002_TR.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60012 1 0 0 ZEUS2002_TR.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60013 1 0 0 ZEUS2002_TR.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60014 1 0 0 ZEUS2002_TR.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60015 1 0 0 ZEUS2002_TR.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60016 1 0 0 ZEUS2002_TR.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60017 1 0 0 ZEUS2002_TR.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60018 1 0 0 ZEUS2002_TR.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60019 1 0 0 ZEUS2002_TR.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60020 1 0 0 ZEUS2002_TR.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60021 1 0 0 ZEUS2002_TR.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60022 1 0 0 ZEUS2002_TR.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme - 60100 1 0 0 ZEUS2002_ZM.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60101 1 0 0 ZEUS2002_ZM.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60102 1 0 0 ZEUS2002_ZM.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60103 1 0 0 ZEUS2002_ZM.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60104 1 0 0 ZEUS2002_ZM.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60105 1 0 0 ZEUS2002_ZM.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60106 1 0 0 ZEUS2002_ZM.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60107 1 0 0 ZEUS2002_ZM.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60108 1 0 0 ZEUS2002_ZM.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60109 1 0 0 ZEUS2002_ZM.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60110 1 0 0 ZEUS2002_ZM.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60111 1 0 0 ZEUS2002_ZM.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60112 1 0 0 ZEUS2002_ZM.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60113 1 0 0 ZEUS2002_ZM.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60114 1 0 0 ZEUS2002_ZM.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60115 1 0 0 ZEUS2002_ZM.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60116 1 0 0 ZEUS2002_ZM.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60117 1 0 0 ZEUS2002_ZM.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme - 60118 1 0 0 ZEUS2002_ZM.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme - 60119 1 0 0 ZEUS2002_ZM.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme - 60120 1 0 0 ZEUS2002_ZM.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme - 60121 1 0 0 ZEUS2002_ZM.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme - 60122 1 0 0 ZEUS2002_ZM.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-Scheme - 60200 1 0 0 ZEUS2002_FF.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60201 1 0 0 ZEUS2002_FF.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60202 1 0 0 ZEUS2002_FF.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60203 1 0 0 ZEUS2002_FF.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60204 1 0 0 ZEUS2002_FF.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60205 1 0 0 ZEUS2002_FF.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60206 1 0 0 ZEUS2002_FF.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60207 1 0 0 ZEUS2002_FF.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60208 1 0 0 ZEUS2002_FF.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60209 1 0 0 ZEUS2002_FF.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60210 1 0 0 ZEUS2002_FF.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60211 1 0 0 ZEUS2002_FF.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60212 1 0 0 ZEUS2002_FF.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60213 1 0 0 ZEUS2002_FF.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60214 1 0 0 ZEUS2002_FF.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60215 1 0 0 ZEUS2002_FF.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60216 1 0 0 ZEUS2002_FF.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60217 1 0 0 ZEUS2002_FF.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60218 1 0 0 ZEUS2002_FF.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60219 1 0 0 ZEUS2002_FF.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60220 1 0 0 ZEUS2002_FF.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60221 1 0 0 ZEUS2002_FF.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60222 1 0 0 ZEUS2002_FF.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme - 60300 1 0 0 ZEUS2005_ZJ.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60301 1 0 0 ZEUS2005_ZJ.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60302 1 0 0 ZEUS2005_ZJ.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60303 1 0 0 ZEUS2005_ZJ.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60304 1 0 0 ZEUS2005_ZJ.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60305 1 0 0 ZEUS2005_ZJ.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60306 1 0 0 ZEUS2005_ZJ.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60307 1 0 0 ZEUS2005_ZJ.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60308 1 0 0 ZEUS2005_ZJ.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60309 1 0 0 ZEUS2005_ZJ.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60310 1 0 0 ZEUS2005_ZJ.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60311 1 0 0 ZEUS2005_ZJ.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60312 1 0 0 ZEUS2005_ZJ.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60313 1 0 0 ZEUS2005_ZJ.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60314 1 0 0 ZEUS2005_ZJ.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60315 1 0 0 ZEUS2005_ZJ.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60316 1 0 0 ZEUS2005_ZJ.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60317 1 0 0 ZEUS2005_ZJ.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60318 1 0 0 ZEUS2005_ZJ.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60319 1 0 0 ZEUS2005_ZJ.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60320 1 0 0 ZEUS2005_ZJ.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60321 1 0 0 ZEUS2005_ZJ.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 60322 1 0 0 ZEUS2005_ZJ.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) - 70050 1 0 0 H12000ms.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70051 1 0 0 H12000msE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70052 1 0 0 H12000msE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70053 1 0 0 H12000msE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70054 1 0 0 H12000msE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70055 1 0 0 H12000msE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70056 1 0 0 H12000msE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70057 1 0 0 H12000msE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70058 1 0 0 H12000msE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70059 1 0 0 H12000msE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70060 1 0 0 H12000msE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70061 1 0 0 H12000msE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70062 1 0 0 H12000msE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70063 1 0 0 H12000msE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70064 1 0 0 H12000msE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70065 1 0 0 H12000msE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70066 1 0 0 H12000msE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70067 1 0 0 H12000msE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70068 1 0 0 H12000msE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70069 1 0 0 H12000msE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70070 1 0 0 H12000msE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(NLO)msbar - 70150 1 0 0 H12000dis.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70151 1 0 0 H12000disE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70152 1 0 0 H12000disE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70153 1 0 0 H12000disE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70154 1 0 0 H12000disE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70155 1 0 0 H12000disE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70156 1 0 0 H12000disE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70157 1 0 0 H12000disE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70158 1 0 0 H12000disE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70159 1 0 0 H12000disE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70160 1 0 0 H12000disE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70161 1 0 0 H12000disE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70162 1 0 0 H12000disE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70163 1 0 0 H12000disE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70164 1 0 0 H12000disE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70165 1 0 0 H12000disE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70166 1 0 0 H12000disE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70167 1 0 0 H12000disE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70168 1 0 0 H12000disE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70169 1 0 0 H12000disE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70170 1 0 0 H12000disE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(NLO)dis - 70250 1 0 0 H12000lo.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(LO) - 70251 1 0 0 H12000loE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(LO) - 70252 1 0 0 H12000loE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(LO) - 70253 1 0 0 H12000loE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(LO) - 70254 1 0 0 H12000loE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(LO) - 70255 1 0 0 H12000loE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(LO) - 70256 1 0 0 H12000loE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(LO) - 70257 1 0 0 H12000loE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(LO) - 70258 1 0 0 H12000loE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(LO) - 70259 1 0 0 H12000loE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(LO) - 70260 1 0 0 H12000loE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(LO) - 70261 1 0 0 H12000loE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(LO) - 70262 1 0 0 H12000loE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(LO) - 70263 1 0 0 H12000loE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(LO) - 70264 1 0 0 H12000loE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(LO) - 70265 1 0 0 H12000loE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(LO) - 70266 1 0 0 H12000loE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(LO) - 70267 1 0 0 H12000loE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(LO) - 70268 1 0 0 H12000loE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(LO) - 70269 1 0 0 H12000loE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(LO) - 70270 1 0 0 H12000loE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(LO) - 80050 1 5 13 GRV98nlo.LHgrid 0 0.8 2000000. 1.E-09 1. GRV98(NLO) - 80051 1 5 14 GRV98nlo.LHgrid 1 0.8 2000000. 1.E-09 1. GRV98(NLO) - 80060 1 5 12 GRV98lo.LHgrid 0 0.8 2000000. 1.E-09 1. GRV98(LO) + 211 2 1 1 OWPI.LHgrid 1 4. 2000. 0.005 0.9998 OW-P(LO) + 212 2 1 2 OWPI.LHgrid 2 4. 2000. 0.005 0.9998 OW-P(LO) + 231 2 3 1 SMRSPI.LHgrid 1 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) + 232 2 3 2 SMRSPI.LHgrid 2 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) + 233 2 3 3 SMRSPI.LHgrid 3 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) + 251 2 5 1 GRVPI1.LHgrid 1 0.3 1000000. 1.E-05 0.9998 GRV-P(NLO) + 252 2 5 2 GRVPI0.LHgrid 2 0.25 1000000. 1.E-05 0.9998 GRV-P(LO) + 261 2 6 1 ABFKWPI.LHgrid 1 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) + 262 2 6 2 ABFKWPI.LHgrid 2 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) + 263 2 6 3 ABFKWPI.LHgrid 3 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) + 311 3 1 1 DOG0.LHgrid 1 10. 10000. 1.E-05 0.9 DO-G(LO) + 312 3 1 2 DOG1.LHgrid 1 10. 10000. 1.E-05 0.9 DO-G(NLO) + 321 3 2 1 DGG.LHgrid 1 1. 10000. 1.E-05 0.9998 DG-G(LO) + 322 3 2 2 DGG.LHgrid 2 1. 50. 1.E-05 0.9998 DG-G(LO) + 323 3 2 3 DGG.LHgrid 3 20. 500. 1.E-05 0.9998 DG-G(LO) + 324 3 2 4 DGG.LHgrid 4 200. 10000. 1.E-05 0.9998 DG-G(LO) + 331 3 3 1 LACG.LHgrid 1 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) + 332 3 3 2 LACG.LHgrid 2 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) + 333 3 3 3 LACG.LHgrid 3 1. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) + 334 3 3 4 LACG.LHgrid 4 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) + 341 3 4 1 GSG1.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G(NLO) + 342 3 4 2 GSG0.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G(LO) + 342 3 4 3 GSG0.LHgrid 2 5.3 100000000. 0.0005 0.9998 GS-G(LO) + 344 3 4 4 GSG961.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G-96(NLO) + 345 3 4 5 GSG960.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G-96(LO) + 351 3 5 1 GRVG1.LHgrid 1 0.3 1000000. 1.E-05 0.9998 GRV-G(NLO) + 352 3 5 2 GRVG1.LHgrid 2 0.3 1000000. 1.E-05 0.9998 GRV-G(NLO) + 353 3 5 3 GRVG0.LHgrid 1 0.25 1000000. 1.E-05 0.9998 GRV-G/GRS-G(LO) + 354 3 5 4 GRVG0.LHgrid 2 0.6 50000. 1.E-05 0.9998 GRV-G/GRS-G(LO) + 361 3 6 1 ACFGPG.LHgrid 1 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) + 362 3 6 2 ACFGPG.LHgrid 2 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) + 363 3 6 3 ACFGPG.LHgrid 3 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) + 381 3 8 1 WHITG.LHgrid 1 4. 2500. 0.001 0.9998 WHIT-G(LO) + 382 3 8 2 WHITG.LHgrid 2 4. 2500. 0.001 0.9998 WHIT-G(LO) + 383 3 8 3 WHITG.LHgrid 3 4. 2500. 0.001 0.9998 WHIT-G(LO) + 384 3 8 4 WHITG.LHgrid 4 4. 2500. 0.001 0.9998 WHIT-G(LO) + 385 3 8 5 WHITG.LHgrid 5 4. 2500. 0.001 0.9998 WHIT-G(LO) + 386 3 8 6 WHITG.LHgrid 6 4. 2500. 0.001 0.9998 WHIT-G(LO) + 391 3 9 1 SASG.LHgrid 1 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 392 3 9 2 SASG.LHgrid 2 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 393 3 9 3 SASG.LHgrid 3 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 394 3 9 4 SASG.LHgrid 4 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 395 3 9 5 SASG.LHgrid 5 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 396 3 9 6 SASG.LHgrid 6 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 397 3 9 7 SASG.LHgrid 7 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 398 3 9 8 SASG.LHgrid 8 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) + 10000 1 0 0 cteq6m.LHpdf 0 1.69 100000000. 1.E-06 1. CTEQ6(Standard_MSbar) + 10001 1 0 0 cteq6.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6 + 10002 1 0 0 cteq6.LHpdf 2 1.69 100000000. 1.E-06 1. CTEQ6 + 10003 1 0 0 cteq6.LHpdf 3 1.69 100000000. 1.E-06 1. CTEQ6 + 10004 1 0 0 cteq6.LHpdf 4 1.69 100000000. 1.E-06 1. CTEQ6 + 10005 1 0 0 cteq6.LHpdf 5 1.69 100000000. 1.E-06 1. CTEQ6 + 10006 1 0 0 cteq6.LHpdf 6 1.69 100000000. 1.E-06 1. CTEQ6 + 10007 1 0 0 cteq6.LHpdf 7 1.69 100000000. 1.E-06 1. CTEQ6 + 10008 1 0 0 cteq6.LHpdf 8 1.69 100000000. 1.E-06 1. CTEQ6 + 10009 1 0 0 cteq6.LHpdf 9 1.69 100000000. 1.E-06 1. CTEQ6 + 10010 1 0 0 cteq6.LHpdf 10 1.69 100000000. 1.E-06 1. CTEQ6 + 10011 1 0 0 cteq6.LHpdf 11 1.69 100000000. 1.E-06 1. CTEQ6 + 10012 1 0 0 cteq6.LHpdf 12 1.69 100000000. 1.E-06 1. CTEQ6 + 10013 1 0 0 cteq6.LHpdf 13 1.69 100000000. 1.E-06 1. CTEQ6 + 10014 1 0 0 cteq6.LHpdf 14 1.69 100000000. 1.E-06 1. CTEQ6 + 10015 1 0 0 cteq6.LHpdf 15 1.69 100000000. 1.E-06 1. CTEQ6 + 10016 1 0 0 cteq6.LHpdf 16 1.69 100000000. 1.E-06 1. CTEQ6 + 10017 1 0 0 cteq6.LHpdf 17 1.69 100000000. 1.E-06 1. CTEQ6 + 10018 1 0 0 cteq6.LHpdf 18 1.69 100000000. 1.E-06 1. CTEQ6 + 10019 1 0 0 cteq6.LHpdf 19 1.69 100000000. 1.E-06 1. CTEQ6 + 10020 1 0 0 cteq6.LHpdf 20 1.69 100000000. 1.E-06 1. CTEQ6 + 10021 1 0 0 cteq6.LHpdf 21 1.69 100000000. 1.E-06 1. CTEQ6 + 10022 1 0 0 cteq6.LHpdf 22 1.69 100000000. 1.E-06 1. CTEQ6 + 10023 1 0 0 cteq6.LHpdf 23 1.69 100000000. 1.E-06 1. CTEQ6 + 10024 1 0 0 cteq6.LHpdf 24 1.69 100000000. 1.E-06 1. CTEQ6 + 10025 1 0 0 cteq6.LHpdf 25 1.69 100000000. 1.E-06 1. CTEQ6 + 10026 1 0 0 cteq6.LHpdf 26 1.69 100000000. 1.E-06 1. CTEQ6 + 10027 1 0 0 cteq6.LHpdf 27 1.69 100000000. 1.E-06 1. CTEQ6 + 10028 1 0 0 cteq6.LHpdf 28 1.69 100000000. 1.E-06 1. CTEQ6 + 10029 1 0 0 cteq6.LHpdf 29 1.69 100000000. 1.E-06 1. CTEQ6 + 10030 1 0 0 cteq6.LHpdf 30 1.69 100000000. 1.E-06 1. CTEQ6 + 10031 1 0 0 cteq6.LHpdf 31 1.69 100000000. 1.E-06 1. CTEQ6 + 10032 1 0 0 cteq6.LHpdf 32 1.69 100000000. 1.E-06 1. CTEQ6 + 10033 1 0 0 cteq6.LHpdf 33 1.69 100000000. 1.E-06 1. CTEQ6 + 10034 1 0 0 cteq6.LHpdf 34 1.69 100000000. 1.E-06 1. CTEQ6 + 10035 1 0 0 cteq6.LHpdf 35 1.69 100000000. 1.E-06 1. CTEQ6 + 10036 1 0 0 cteq6.LHpdf 36 1.69 100000000. 1.E-06 1. CTEQ6 + 10037 1 0 0 cteq6.LHpdf 37 1.69 100000000. 1.E-06 1. CTEQ6 + 10038 1 0 0 cteq6.LHpdf 38 1.69 100000000. 1.E-06 1. CTEQ6 + 10039 1 0 0 cteq6.LHpdf 39 1.69 100000000. 1.E-06 1. CTEQ6 + 10040 1 0 0 cteq6.LHpdf 40 1.69 100000000. 1.E-06 1. CTEQ6 + 10041 1 0 0 cteq6l.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6(LO_fit,with_NLOrder_alpha_S) + 10042 1 0 0 cteq6ll.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6(LO fit,with_LOrder_alpha_S) + 10050 1 0 0 cteq6mE.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ6(Standard_MSbar) + 10051 1 0 0 cteq6mE.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ6 + 10052 1 0 0 cteq6mE.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ6 + 10053 1 0 0 cteq6mE.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ6 + 10054 1 0 0 cteq6mE.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ6 + 10055 1 0 0 cteq6mE.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ6 + 10056 1 0 0 cteq6mE.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ6 + 10057 1 0 0 cteq6mE.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ6 + 10058 1 0 0 cteq6mE.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ6 + 10059 1 0 0 cteq6mE.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ6 + 10060 1 0 0 cteq6mE.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ6 + 10061 1 0 0 cteq6mE.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ6 + 10062 1 0 0 cteq6mE.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ6 + 10063 1 0 0 cteq6mE.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ6 + 10064 1 0 0 cteq6mE.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ6 + 10065 1 0 0 cteq6mE.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ6 + 10066 1 0 0 cteq6mE.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ6 + 10067 1 0 0 cteq6mE.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ6 + 10068 1 0 0 cteq6mE.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ6 + 10069 1 0 0 cteq6mE.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ6 + 10070 1 0 0 cteq6mE.LHgrid 20 1.69 100000000. 1.E-06 1. CTEQ6 + 10071 1 0 0 cteq6mE.LHgrid 21 1.69 100000000. 1.E-06 1. CTEQ6 + 10072 1 0 0 cteq6mE.LHgrid 22 1.69 100000000. 1.E-06 1. CTEQ6 + 10073 1 0 0 cteq6mE.LHgrid 23 1.69 100000000. 1.E-06 1. CTEQ6 + 10074 1 0 0 cteq6mE.LHgrid 24 1.69 100000000. 1.E-06 1. CTEQ6 + 10075 1 0 0 cteq6mE.LHgrid 25 1.69 100000000. 1.E-06 1. CTEQ6 + 10076 1 0 0 cteq6mE.LHgrid 26 1.69 100000000. 1.E-06 1. CTEQ6 + 10077 1 0 0 cteq6mE.LHgrid 27 1.69 100000000. 1.E-06 1. CTEQ6 + 10078 1 0 0 cteq6mE.LHgrid 28 1.69 100000000. 1.E-06 1. CTEQ6 + 10079 1 0 0 cteq6mE.LHgrid 29 1.69 100000000. 1.E-06 1. CTEQ6 + 10080 1 0 0 cteq6mE.LHgrid 30 1.69 100000000. 1.E-06 1. CTEQ6 + 10081 1 0 0 cteq6mE.LHgrid 31 1.69 100000000. 1.E-06 1. CTEQ6 + 10082 1 0 0 cteq6mE.LHgrid 32 1.69 100000000. 1.E-06 1. CTEQ6 + 10083 1 0 0 cteq6mE.LHgrid 33 1.69 100000000. 1.E-06 1. CTEQ6 + 10084 1 0 0 cteq6mE.LHgrid 34 1.69 100000000. 1.E-06 1. CTEQ6 + 10085 1 0 0 cteq6mE.LHgrid 35 1.69 100000000. 1.E-06 1. CTEQ6 + 10086 1 0 0 cteq6mE.LHgrid 36 1.69 100000000. 1.E-06 1. CTEQ6 + 10087 1 0 0 cteq6mE.LHgrid 37 1.69 100000000. 1.E-06 1. CTEQ6 + 10088 1 0 0 cteq6mE.LHgrid 38 1.69 100000000. 1.E-06 1. CTEQ6 + 10089 1 0 0 cteq6mE.LHgrid 39 1.69 100000000. 1.E-06 1. CTEQ6 + 10090 1 0 0 cteq6mE.LHgrid 40 1.69 100000000. 1.E-06 1. CTEQ6 + 10100 1 0 0 cteq61.LHpdf 0 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10101 1 0 0 cteq61.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10102 1 0 0 cteq61.LHpdf 2 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10103 1 0 0 cteq61.LHpdf 3 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10104 1 0 0 cteq61.LHpdf 4 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10105 1 0 0 cteq61.LHpdf 5 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10106 1 0 0 cteq61.LHpdf 6 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10107 1 0 0 cteq61.LHpdf 7 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10108 1 0 0 cteq61.LHpdf 8 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10109 1 0 0 cteq61.LHpdf 9 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10110 1 0 0 cteq61.LHpdf 10 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10111 1 0 0 cteq61.LHpdf 11 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10112 1 0 0 cteq61.LHpdf 12 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10113 1 0 0 cteq61.LHpdf 13 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10114 1 0 0 cteq61.LHpdf 14 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10115 1 0 0 cteq61.LHpdf 15 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10116 1 0 0 cteq61.LHpdf 16 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10117 1 0 0 cteq61.LHpdf 17 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10118 1 0 0 cteq61.LHpdf 18 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10119 1 0 0 cteq61.LHpdf 19 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10120 1 0 0 cteq61.LHpdf 20 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10121 1 0 0 cteq61.LHpdf 21 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10122 1 0 0 cteq61.LHpdf 22 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10123 1 0 0 cteq61.LHpdf 23 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10124 1 0 0 cteq61.LHpdf 24 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10125 1 0 0 cteq61.LHpdf 25 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10126 1 0 0 cteq61.LHpdf 26 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10127 1 0 0 cteq61.LHpdf 27 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10128 1 0 0 cteq61.LHpdf 28 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10129 1 0 0 cteq61.LHpdf 29 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10130 1 0 0 cteq61.LHpdf 30 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10131 1 0 0 cteq61.LHpdf 31 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10132 1 0 0 cteq61.LHpdf 32 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10133 1 0 0 cteq61.LHpdf 33 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10134 1 0 0 cteq61.LHpdf 34 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10135 1 0 0 cteq61.LHpdf 35 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10136 1 0 0 cteq61.LHpdf 36 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10137 1 0 0 cteq61.LHpdf 37 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10138 1 0 0 cteq61.LHpdf 38 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10139 1 0 0 cteq61.LHpdf 39 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10140 1 0 0 cteq61.LHpdf 40 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10150 1 0 0 cteq61.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10151 1 0 0 cteq61.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10152 1 0 0 cteq61.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10153 1 0 0 cteq61.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10154 1 0 0 cteq61.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10155 1 0 0 cteq61.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10156 1 0 0 cteq61.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10157 1 0 0 cteq61.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10158 1 0 0 cteq61.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10159 1 0 0 cteq61.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10160 1 0 0 cteq61.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10161 1 0 0 cteq61.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10162 1 0 0 cteq61.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10163 1 0 0 cteq61.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10164 1 0 0 cteq61.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10165 1 0 0 cteq61.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10166 1 0 0 cteq61.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10167 1 0 0 cteq61.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10168 1 0 0 cteq61.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10169 1 0 0 cteq61.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10170 1 0 0 cteq61.LHgrid 20 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10171 1 0 0 cteq61.LHgrid 21 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10172 1 0 0 cteq61.LHgrid 22 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10173 1 0 0 cteq61.LHgrid 23 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10174 1 0 0 cteq61.LHgrid 24 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10175 1 0 0 cteq61.LHgrid 25 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10176 1 0 0 cteq61.LHgrid 26 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10177 1 0 0 cteq61.LHgrid 27 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10178 1 0 0 cteq61.LHgrid 28 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10179 1 0 0 cteq61.LHgrid 29 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10180 1 0 0 cteq61.LHgrid 30 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10181 1 0 0 cteq61.LHgrid 31 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10182 1 0 0 cteq61.LHgrid 32 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10183 1 0 0 cteq61.LHgrid 33 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10184 1 0 0 cteq61.LHgrid 34 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10185 1 0 0 cteq61.LHgrid 35 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10186 1 0 0 cteq61.LHgrid 36 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10187 1 0 0 cteq61.LHgrid 37 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10188 1 0 0 cteq61.LHgrid 38 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10189 1 0 0 cteq61.LHgrid 39 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10190 1 0 0 cteq61.LHgrid 40 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) + 10250 1 0 0 cteq6AB.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10251 1 0 0 cteq6AB.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10252 1 0 0 cteq6AB.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10253 1 0 0 cteq6AB.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10254 1 0 0 cteq6AB.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10255 1 0 0 cteq6AB.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10256 1 0 0 cteq6AB.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10257 1 0 0 cteq6AB.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) + 10258 1 0 0 cteq6AB.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10259 1 0 0 cteq6AB.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10260 1 0 0 cteq6AB.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10261 1 0 0 cteq6AB.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10262 1 0 0 cteq6AB.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10263 1 0 0 cteq6AB.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10264 1 0 0 cteq6AB.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10265 1 0 0 cteq6AB.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10266 1 0 0 cteq6AB.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10267 1 0 0 cteq6AB.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10268 1 0 0 cteq6AB.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10269 1 0 0 cteq6AB.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas + 10350 1 0 0 cteq65.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10351 1 0 0 cteq65.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10352 1 0 0 cteq65.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10353 1 0 0 cteq65.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10354 1 0 0 cteq65.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10355 1 0 0 cteq65.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10356 1 0 0 cteq65.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10357 1 0 0 cteq65.LHgrid 7 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10358 1 0 0 cteq65.LHgrid 8 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10359 1 0 0 cteq65.LHgrid 9 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10360 1 0 0 cteq65.LHgrid 10 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10361 1 0 0 cteq65.LHgrid 11 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10362 1 0 0 cteq65.LHgrid 12 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10363 1 0 0 cteq65.LHgrid 13 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10364 1 0 0 cteq65.LHgrid 14 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10365 1 0 0 cteq65.LHgrid 15 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10366 1 0 0 cteq65.LHgrid 16 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10367 1 0 0 cteq65.LHgrid 17 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10368 1 0 0 cteq65.LHgrid 18 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10369 1 0 0 cteq65.LHgrid 19 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10370 1 0 0 cteq65.LHgrid 20 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10371 1 0 0 cteq65.LHgrid 21 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10372 1 0 0 cteq65.LHgrid 22 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10373 1 0 0 cteq65.LHgrid 23 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10374 1 0 0 cteq65.LHgrid 24 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10375 1 0 0 cteq65.LHgrid 25 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10376 1 0 0 cteq65.LHgrid 26 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10377 1 0 0 cteq65.LHgrid 27 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10378 1 0 0 cteq65.LHgrid 28 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10379 1 0 0 cteq65.LHgrid 29 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10380 1 0 0 cteq65.LHgrid 30 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10381 1 0 0 cteq65.LHgrid 31 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10382 1 0 0 cteq65.LHgrid 32 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10383 1 0 0 cteq65.LHgrid 33 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10384 1 0 0 cteq65.LHgrid 34 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10385 1 0 0 cteq65.LHgrid 35 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10386 1 0 0 cteq65.LHgrid 36 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10387 1 0 0 cteq65.LHgrid 37 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10388 1 0 0 cteq65.LHgrid 38 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10389 1 0 0 cteq65.LHgrid 39 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10390 1 0 0 cteq65.LHgrid 40 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) + 10450 1 0 0 cteq65c.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+centralfit/nocharm) + 10451 1 0 0 cteq65c.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+BHPSmodel) + 10452 1 0 0 cteq65c.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+BHPSmodel) + 10453 1 0 0 cteq65c.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+MesonCloud) + 10454 1 0 0 cteq65c.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+MesonCloud) + 10455 1 0 0 cteq65c.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+Sea-like) + 10456 1 0 0 cteq65c.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+Sea-like) + 10460 1 0 0 cteq65s.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10461 1 0 0 cteq65s.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10462 1 0 0 cteq65s.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10463 1 0 0 cteq65s.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10464 1 0 0 cteq65s.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10465 1 0 0 cteq65s.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10466 1 0 0 cteq65s.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10467 1 0 0 cteq65s.LHgrid 7 1.69 10000000000. 1.E-07 1. CTEQ65s(cteq65s+strange) + 10550 1 0 0 cteq66.LHgrid 0 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m) + 10551 1 0 0 cteq66.LHgrid 1 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10552 1 0 0 cteq66.LHgrid 2 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10553 1 0 0 cteq66.LHgrid 3 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10554 1 0 0 cteq66.LHgrid 4 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10555 1 0 0 cteq66.LHgrid 5 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10556 1 0 0 cteq66.LHgrid 6 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10557 1 0 0 cteq66.LHgrid 7 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10558 1 0 0 cteq66.LHgrid 8 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10559 1 0 0 cteq66.LHgrid 9 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10560 1 0 0 cteq66.LHgrid 10 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10561 1 0 0 cteq66.LHgrid 11 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10562 1 0 0 cteq66.LHgrid 12 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10563 1 0 0 cteq66.LHgrid 13 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10564 1 0 0 cteq66.LHgrid 14 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10565 1 0 0 cteq66.LHgrid 15 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10566 1 0 0 cteq66.LHgrid 16 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10567 1 0 0 cteq66.LHgrid 17 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10568 1 0 0 cteq66.LHgrid 18 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10569 1 0 0 cteq66.LHgrid 19 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10570 1 0 0 cteq66.LHgrid 20 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10571 1 0 0 cteq66.LHgrid 21 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10572 1 0 0 cteq66.LHgrid 22 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10573 1 0 0 cteq66.LHgrid 23 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10574 1 0 0 cteq66.LHgrid 24 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10575 1 0 0 cteq66.LHgrid 25 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10576 1 0 0 cteq66.LHgrid 26 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10577 1 0 0 cteq66.LHgrid 27 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10578 1 0 0 cteq66.LHgrid 28 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10579 1 0 0 cteq66.LHgrid 29 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10580 1 0 0 cteq66.LHgrid 30 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10581 1 0 0 cteq66.LHgrid 31 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10582 1 0 0 cteq66.LHgrid 32 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10583 1 0 0 cteq66.LHgrid 33 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10584 1 0 0 cteq66.LHgrid 34 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10585 1 0 0 cteq66.LHgrid 35 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10586 1 0 0 cteq66.LHgrid 36 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10587 1 0 0 cteq66.LHgrid 37 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10588 1 0 0 cteq66.LHgrid 38 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10589 1 0 0 cteq66.LHgrid 39 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10590 1 0 0 cteq66.LHgrid 40 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10591 1 0 0 cteq66.LHgrid 41 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10592 1 0 0 cteq66.LHgrid 42 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10593 1 0 0 cteq66.LHgrid 43 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10594 1 0 0 cteq66.LHgrid 44 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66m+errors) + 10650 1 0 0 cteq66c.LHgrid 0 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) + 10651 1 0 0 cteq66c.LHgrid 1 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) + 10652 1 0 0 cteq66c.LHgrid 2 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) + 10653 1 0 0 cteq66c.LHgrid 3 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-int-charm) + 10660 1 0 0 cteq66a.LHgrid 0 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) + 10661 1 0 0 cteq66a.LHgrid 1 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) + 10662 1 0 0 cteq66a.LHgrid 2 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) + 10663 1 0 0 cteq66a.LHgrid 3 1.69 10000000000. 1.E-08 1. CTEQ66(cteq66-alt-alphas) + 10670 1 0 0 cteq6lg.LHgrid 0 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-15GeV) + 10671 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-25GeV) + 10672 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-35GeV) + 10673 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-50GeV) + 10674 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-90GeV) + 10675 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-100GeV) + 10676 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-200GeV) + 10677 1 0 0 cteq6lg.LHgrid 1 1.69 1000000. 1.E-05 1. CTEQ6LG(cteq6-light-gluon-mass-infinite) + 19050 1 4 48 cteq5m.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5m(Standard_MSbar) + 19051 1 4 53 cteq5m1.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5m1(updated) + 19053 1 4 51 cteq5f3.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5f3(3lavour) + 19054 1 4 52 cteq5f4.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5f4(4flavour) + 19060 1 4 47 cteq5d.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5d(Standard_DIS) + 19070 1 4 46 cteq5l.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5l(Leading_Order) + 19150 1 4 34 cteq4m.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4m(Standard_MSbar) + 19160 1 4 33 cteq4d.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4d(Standard_DIS) + 19170 1 4 32 cteq4l.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4l(Leading_Order) + 20001 1 0 0 MRST2001nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20002 1 0 0 MRST2001nlo.LHpdf 2 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20003 1 0 0 MRST2001nlo.LHpdf 3 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20004 1 0 0 MRST2001nlo.LHpdf 4 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20051 1 0 0 MRST2001nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20052 1 0 0 MRST2001nlo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20053 1 0 0 MRST2001nlo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20054 1 0 0 MRST2001nlo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST2001(NLO) + 20060 1 0 0 MRST2001lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(LO) + 20070 1 0 0 MRST2001nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(NNLO) + 20100 1 0 0 MRST2001E.LHpdf 0 1.25 10000000. 1.E-05 1. MRST2001E + 20101 1 0 0 MRST2001E.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2001E + 20102 1 0 0 MRST2001E.LHpdf 2 1.25 10000000. 1.E-05 1. MRST2001E + 20103 1 0 0 MRST2001E.LHpdf 3 1.25 10000000. 1.E-05 1. MRST2001E + 20104 1 0 0 MRST2001E.LHpdf 4 1.25 10000000. 1.E-05 1. MRST2001E + 20105 1 0 0 MRST2001E.LHpdf 5 1.25 10000000. 1.E-05 1. MRST2001E + 20106 1 0 0 MRST2001E.LHpdf 6 1.25 10000000. 1.E-05 1. MRST2001E + 20107 1 0 0 MRST2001E.LHpdf 7 1.25 10000000. 1.E-05 1. MRST2001E + 20108 1 0 0 MRST2001E.LHpdf 8 1.25 10000000. 1.E-05 1. MRST2001E + 20109 1 0 0 MRST2001E.LHpdf 9 1.25 10000000. 1.E-05 1. MRST2001E + 20110 1 0 0 MRST2001E.LHpdf 10 1.25 10000000. 1.E-05 1. MRST2001E + 20111 1 0 0 MRST2001E.LHpdf 11 1.25 10000000. 1.E-05 1. MRST2001E + 20112 1 0 0 MRST2001E.LHpdf 12 1.25 10000000. 1.E-05 1. MRST2001E + 20113 1 0 0 MRST2001E.LHpdf 13 1.25 10000000. 1.E-05 1. MRST2001E + 20114 1 0 0 MRST2001E.LHpdf 14 1.25 10000000. 1.E-05 1. MRST2001E + 20115 1 0 0 MRST2001E.LHpdf 15 1.25 10000000. 1.E-05 1. MRST2001E + 20116 1 0 0 MRST2001E.LHpdf 16 1.25 10000000. 1.E-05 1. MRST2001E + 20117 1 0 0 MRST2001E.LHpdf 17 1.25 10000000. 1.E-05 1. MRST2001E + 20118 1 0 0 MRST2001E.LHpdf 18 1.25 10000000. 1.E-05 1. MRST2001E + 20119 1 0 0 MRST2001E.LHpdf 19 1.25 10000000. 1.E-05 1. MRST2001E + 20120 1 0 0 MRST2001E.LHpdf 20 1.25 10000000. 1.E-05 1. MRST2001E + 20121 1 0 0 MRST2001E.LHpdf 21 1.25 10000000. 1.E-05 1. MRST2001E + 20122 1 0 0 MRST2001E.LHpdf 22 1.25 10000000. 1.E-05 1. MRST2001E + 20123 1 0 0 MRST2001E.LHpdf 23 1.25 10000000. 1.E-05 1. MRST2001E + 20124 1 0 0 MRST2001E.LHpdf 24 1.25 10000000. 1.E-05 1. MRST2001E + 20125 1 0 0 MRST2001E.LHpdf 25 1.25 10000000. 1.E-05 1. MRST2001E + 20126 1 0 0 MRST2001E.LHpdf 26 1.25 10000000. 1.E-05 1. MRST2001E + 20127 1 0 0 MRST2001E.LHpdf 27 1.25 10000000. 1.E-05 1. MRST2001E + 20128 1 0 0 MRST2001E.LHpdf 28 1.25 10000000. 1.E-05 1. MRST2001E + 20129 1 0 0 MRST2001E.LHpdf 29 1.25 10000000. 1.E-05 1. MRST2001E + 20130 1 0 0 MRST2001E.LHpdf 30 1.25 10000000. 1.E-05 1. MRST2001E + 20150 1 0 0 MRST2001E.LHgrid 0 1.25 10000000. 1.E-05 1. MRST2001ECentralValue + 20151 1 0 0 MRST2001E.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001Errors + 20152 1 0 0 MRST2001E.LHgrid 2 1.25 10000000. 1.E-05 1. MRST2001Errors + 20153 1 0 0 MRST2001E.LHgrid 3 1.25 10000000. 1.E-05 1. MRST2001Errors + 20154 1 0 0 MRST2001E.LHgrid 4 1.25 10000000. 1.E-05 1. MRST2001Errors + 20155 1 0 0 MRST2001E.LHgrid 5 1.25 10000000. 1.E-05 1. MRST2001Errors + 20156 1 0 0 MRST2001E.LHgrid 6 1.25 10000000. 1.E-05 1. MRST2001Errors + 20157 1 0 0 MRST2001E.LHgrid 7 1.25 10000000. 1.E-05 1. MRST2001Errors + 20158 1 0 0 MRST2001E.LHgrid 8 1.25 10000000. 1.E-05 1. MRST2001Errors + 20159 1 0 0 MRST2001E.LHgrid 9 1.25 10000000. 1.E-05 1. MRST2001Errors + 20160 1 0 0 MRST2001E.LHgrid 10 1.25 10000000. 1.E-05 1. MRST2001Errors + 20161 1 0 0 MRST2001E.LHgrid 11 1.25 10000000. 1.E-05 1. MRST2001Errors + 20162 1 0 0 MRST2001E.LHgrid 12 1.25 10000000. 1.E-05 1. MRST2001Errors + 20163 1 0 0 MRST2001E.LHgrid 13 1.25 10000000. 1.E-05 1. MRST2001Errors + 20164 1 0 0 MRST2001E.LHgrid 14 1.25 10000000. 1.E-05 1. MRST2001Errors + 20165 1 0 0 MRST2001E.LHgrid 15 1.25 10000000. 1.E-05 1. MRST2001Errors + 20166 1 0 0 MRST2001E.LHgrid 16 1.25 10000000. 1.E-05 1. MRST2001Errors + 20167 1 0 0 MRST2001E.LHgrid 17 1.25 10000000. 1.E-05 1. MRST2001Errors + 20168 1 0 0 MRST2001E.LHgrid 18 1.25 10000000. 1.E-05 1. MRST2001Errors + 20169 1 0 0 MRST2001E.LHgrid 19 1.25 10000000. 1.E-05 1. MRST2001Errors + 20170 1 0 0 MRST2001E.LHgrid 20 1.25 10000000. 1.E-05 1. MRST2001Errors + 20171 1 0 0 MRST2001E.LHgrid 21 1.25 10000000. 1.E-05 1. MRST2001Errors + 20172 1 0 0 MRST2001E.LHgrid 22 1.25 10000000. 1.E-05 1. MRST2001Errors + 20173 1 0 0 MRST2001E.LHgrid 23 1.25 10000000. 1.E-05 1. MRST2001Errors + 20174 1 0 0 MRST2001E.LHgrid 24 1.25 10000000. 1.E-05 1. MRST2001Errors + 20175 1 0 0 MRST2001E.LHgrid 25 1.25 10000000. 1.E-05 1. MRST2001Errors + 20176 1 0 0 MRST2001E.LHgrid 26 1.25 10000000. 1.E-05 1. MRST2001Errors + 20177 1 0 0 MRST2001E.LHgrid 27 1.25 10000000. 1.E-05 1. MRST2001Errors + 20178 1 0 0 MRST2001E.LHgrid 28 1.25 10000000. 1.E-05 1. MRST2001Errors + 20179 1 0 0 MRST2001E.LHgrid 29 1.25 10000000. 1.E-05 1. MRST2001Errors + 20180 1 0 0 MRST2001E.LHgrid 30 1.25 10000000. 1.E-05 1. MRST2001Errors + 20200 1 0 0 MRST2002nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2002(NLO) + 20250 1 0 0 MRST2002nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2002(NLO) + 20270 1 0 0 MRST2002nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2002NNLO) + 20300 1 0 0 MRST2003cnlo.LHpdf 1 10. 10000000. 0.001 1. MRST2003c(NLO)restricted_range + 20350 1 0 0 MRST2003cnlo.LHgrid 1 10. 10000000. 0.001 1. MRST2003c(NLO)restricted_range + 20370 1 0 0 MRST2003cnnlo.LHgrid 1 7. 10000000. 0.001 1. MRST2003c(NNLO)restricted_range + 20400 1 0 0 MRST2004nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO) + 20406 1 0 0 MRST2004FF3nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour3 + 20408 1 0 0 MRST2004FF4nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour4 + 20450 1 0 0 MRST2004nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO) + 20452 1 0 0 MRST2004FF3lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(LO)FixedFlavour3 + 20454 1 0 0 MRST2004FF4lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(LO)FixedFlavour4 + 20456 1 0 0 MRST2004FF3nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour3 + 20458 1 0 0 MRST2004FF4nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour4 + 20460 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED(proton) + 20461 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED(proton) + 20462 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED(neutron) + 20470 1 0 0 MRST2004nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004 (NNLO) + 20550 1 0 0 MRST2006nnlo.LHgrid 0 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)CentralValue + 20551 1 0 0 MRST2006nnlo.LHgrid 1 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20552 1 0 0 MRST2006nnlo.LHgrid 2 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20553 1 0 0 MRST2006nnlo.LHgrid 3 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20554 1 0 0 MRST2006nnlo.LHgrid 4 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20555 1 0 0 MRST2006nnlo.LHgrid 5 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20556 1 0 0 MRST2006nnlo.LHgrid 6 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20557 1 0 0 MRST2006nnlo.LHgrid 7 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20558 1 0 0 MRST2006nnlo.LHgrid 8 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20559 1 0 0 MRST2006nnlo.LHgrid 9 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20560 1 0 0 MRST2006nnlo.LHgrid 10 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20561 1 0 0 MRST2006nnlo.LHgrid 11 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20562 1 0 0 MRST2006nnlo.LHgrid 12 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20563 1 0 0 MRST2006nnlo.LHgrid 13 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20564 1 0 0 MRST2006nnlo.LHgrid 14 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20565 1 0 0 MRST2006nnlo.LHgrid 15 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20566 1 0 0 MRST2006nnlo.LHgrid 16 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20567 1 0 0 MRST2006nnlo.LHgrid 17 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20568 1 0 0 MRST2006nnlo.LHgrid 18 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20569 1 0 0 MRST2006nnlo.LHgrid 19 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20570 1 0 0 MRST2006nnlo.LHgrid 20 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20571 1 0 0 MRST2006nnlo.LHgrid 21 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20572 1 0 0 MRST2006nnlo.LHgrid 22 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20573 1 0 0 MRST2006nnlo.LHgrid 23 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20574 1 0 0 MRST2006nnlo.LHgrid 24 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20575 1 0 0 MRST2006nnlo.LHgrid 25 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20576 1 0 0 MRST2006nnlo.LHgrid 26 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20577 1 0 0 MRST2006nnlo.LHgrid 27 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20578 1 0 0 MRST2006nnlo.LHgrid 28 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20579 1 0 0 MRST2006nnlo.LHgrid 29 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20580 1 0 0 MRST2006nnlo.LHgrid 30 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors + 20650 1 0 0 MRST2007lomod.LHgrid 0 1.25 10000000. 1.E-05 1. MRST2007LO*(sets for MC use) + 20651 1 0 0 MRSTMCal.LHgrid 0 1.25 10000000. 1.E-05 1. MRSTLOMC(sets for MC use) + 29000 1 3 68 MRST98.LHpdf 0 1.25 10000000. 1.E-05 1. MRST98 + 29001 1 3 67 MRST98.LHpdf 1 1.25 10000000. 1.E-05 1. MRST98 + 29003 1 3 69 MRST98.LHpdf 3 1.25 10000000. 1.E-05 1. MRST98 + 29041 1 3 72 MRST98lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(LO) + 29042 1 3 73 MRST98lo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(LO) + 29043 1 3 74 MRST98lo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(LO) + 29044 1 3 75 MRST98lo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(LO) + 29045 1 3 76 MRST98lo.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(LO) + 29051 1 3 67 MRST98nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(NLO) + 29052 1 3 68 MRST98nlo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(NLO) + 29053 1 3 69 MRST98nlo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(NLO) + 29054 1 3 70 MRST98nlo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(NLO) + 29055 1 3 71 MRST98nlo.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(NLO) + 29061 1 3 62 MRST98dis.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(DIS) + 29062 1 3 63 MRST98dis.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(DIS) + 29063 1 3 64 MRST98dis.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(DIS) + 29064 1 3 65 MRST98dis.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(DIS) + 29065 1 3 66 MRST98dis.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(DIS) + 29070 1 1 77 MRST98ht.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(HT) + 30100 1 0 0 Fermi2002_100.LHpdf 0 1. 1.E+10 1.E-06 1. Fermi02 + 30101 1 0 0 Fermi2002_100.LHpdf 1 1. 1.E+10 1.E-06 1. Fermi02 + 30102 1 0 0 Fermi2002_100.LHpdf 2 1. 1.E+10 1.E-06 1. Fermi02 + 30103 1 0 0 Fermi2002_100.LHpdf 3 1. 1.E+10 1.E-06 1. Fermi02 + 30104 1 0 0 Fermi2002_100.LHpdf 4 1. 1.E+10 1.E-06 1. Fermi02 + 30105 1 0 0 Fermi2002_100.LHpdf 5 1. 1.E+10 1.E-06 1. Fermi02 + 30106 1 0 0 Fermi2002_100.LHpdf 6 1. 1.E+10 1.E-06 1. Fermi02 + 30107 1 0 0 Fermi2002_100.LHpdf 7 1. 1.E+10 1.E-06 1. Fermi02 + 30108 1 0 0 Fermi2002_100.LHpdf 8 1. 1.E+10 1.E-06 1. Fermi02 + 30109 1 0 0 Fermi2002_100.LHpdf 9 1. 1.E+10 1.E-06 1. Fermi02 + 30110 1 0 0 Fermi2002_100.LHpdf 10 1. 1.E+10 1.E-06 1. Fermi02 + 30111 1 0 0 Fermi2002_100.LHpdf 11 1. 1.E+10 1.E-06 1. Fermi02 + 30112 1 0 0 Fermi2002_100.LHpdf 12 1. 1.E+10 1.E-06 1. Fermi02 + 30113 1 0 0 Fermi2002_100.LHpdf 13 1. 1.E+10 1.E-06 1. Fermi02 + 30114 1 0 0 Fermi2002_100.LHpdf 14 1. 1.E+10 1.E-06 1. Fermi02 + 30115 1 0 0 Fermi2002_100.LHpdf 15 1. 1.E+10 1.E-06 1. Fermi02 + 30116 1 0 0 Fermi2002_100.LHpdf 16 1. 1.E+10 1.E-06 1. Fermi02 + 30117 1 0 0 Fermi2002_100.LHpdf 17 1. 1.E+10 1.E-06 1. Fermi02 + 30118 1 0 0 Fermi2002_100.LHpdf 18 1. 1.E+10 1.E-06 1. Fermi02 + 30119 1 0 0 Fermi2002_100.LHpdf 19 1. 1.E+10 1.E-06 1. Fermi02 + 30120 1 0 0 Fermi2002_100.LHpdf 20 1. 1.E+10 1.E-06 1. Fermi02 + 30121 1 0 0 Fermi2002_100.LHpdf 21 1. 1.E+10 1.E-06 1. Fermi02 + 30122 1 0 0 Fermi2002_100.LHpdf 22 1. 1.E+10 1.E-06 1. Fermi02 + 30123 1 0 0 Fermi2002_100.LHpdf 23 1. 1.E+10 1.E-06 1. Fermi02 + 30124 1 0 0 Fermi2002_100.LHpdf 24 1. 1.E+10 1.E-06 1. Fermi02 + 30125 1 0 0 Fermi2002_100.LHpdf 25 1. 1.E+10 1.E-06 1. Fermi02 + 30126 1 0 0 Fermi2002_100.LHpdf 26 1. 1.E+10 1.E-06 1. Fermi02 + 30127 1 0 0 Fermi2002_100.LHpdf 27 1. 1.E+10 1.E-06 1. Fermi02 + 30128 1 0 0 Fermi2002_100.LHpdf 28 1. 1.E+10 1.E-06 1. Fermi02 + 30129 1 0 0 Fermi2002_100.LHpdf 29 1. 1.E+10 1.E-06 1. Fermi02 + 30130 1 0 0 Fermi2002_100.LHpdf 30 1. 1.E+10 1.E-06 1. Fermi02 + 30131 1 0 0 Fermi2002_100.LHpdf 31 1. 1.E+10 1.E-06 1. Fermi02 + 30132 1 0 0 Fermi2002_100.LHpdf 32 1. 1.E+10 1.E-06 1. Fermi02 + 30133 1 0 0 Fermi2002_100.LHpdf 33 1. 1.E+10 1.E-06 1. Fermi02 + 30134 1 0 0 Fermi2002_100.LHpdf 34 1. 1.E+10 1.E-06 1. Fermi02 + 30135 1 0 0 Fermi2002_100.LHpdf 35 1. 1.E+10 1.E-06 1. Fermi02 + 30136 1 0 0 Fermi2002_100.LHpdf 36 1. 1.E+10 1.E-06 1. Fermi02 + 30137 1 0 0 Fermi2002_100.LHpdf 37 1. 1.E+10 1.E-06 1. Fermi02 + 30138 1 0 0 Fermi2002_100.LHpdf 38 1. 1.E+10 1.E-06 1. Fermi02 + 30139 1 0 0 Fermi2002_100.LHpdf 39 1. 1.E+10 1.E-06 1. Fermi02 + 30140 1 0 0 Fermi2002_100.LHpdf 40 1. 1.E+10 1.E-06 1. Fermi02 + 30141 1 0 0 Fermi2002_100.LHpdf 41 1. 1.E+10 1.E-06 1. Fermi02 + 30142 1 0 0 Fermi2002_100.LHpdf 42 1. 1.E+10 1.E-06 1. Fermi02 + 30143 1 0 0 Fermi2002_100.LHpdf 43 1. 1.E+10 1.E-06 1. Fermi02 + 30144 1 0 0 Fermi2002_100.LHpdf 44 1. 1.E+10 1.E-06 1. Fermi02 + 30145 1 0 0 Fermi2002_100.LHpdf 45 1. 1.E+10 1.E-06 1. Fermi02 + 30146 1 0 0 Fermi2002_100.LHpdf 46 1. 1.E+10 1.E-06 1. Fermi02 + 30147 1 0 0 Fermi2002_100.LHpdf 47 1. 1.E+10 1.E-06 1. Fermi02 + 30148 1 0 0 Fermi2002_100.LHpdf 48 1. 1.E+10 1.E-06 1. Fermi02 + 30149 1 0 0 Fermi2002_100.LHpdf 49 1. 1.E+10 1.E-06 1. Fermi02 + 30150 1 0 0 Fermi2002_100.LHpdf 50 1. 1.E+10 1.E-06 1. Fermi02 + 30151 1 0 0 Fermi2002_100.LHpdf 51 1. 1.E+10 1.E-06 1. Fermi02 + 30152 1 0 0 Fermi2002_100.LHpdf 52 1. 1.E+10 1.E-06 1. Fermi02 + 30153 1 0 0 Fermi2002_100.LHpdf 53 1. 1.E+10 1.E-06 1. Fermi02 + 30154 1 0 0 Fermi2002_100.LHpdf 54 1. 1.E+10 1.E-06 1. Fermi02 + 30155 1 0 0 Fermi2002_100.LHpdf 55 1. 1.E+10 1.E-06 1. Fermi02 + 30156 1 0 0 Fermi2002_100.LHpdf 56 1. 1.E+10 1.E-06 1. Fermi02 + 30157 1 0 0 Fermi2002_100.LHpdf 57 1. 1.E+10 1.E-06 1. Fermi02 + 30158 1 0 0 Fermi2002_100.LHpdf 58 1. 1.E+10 1.E-06 1. Fermi02 + 30159 1 0 0 Fermi2002_100.LHpdf 59 1. 1.E+10 1.E-06 1. Fermi02 + 30160 1 0 0 Fermi2002_100.LHpdf 60 1. 1.E+10 1.E-06 1. Fermi02 + 30161 1 0 0 Fermi2002_100.LHpdf 61 1. 1.E+10 1.E-06 1. Fermi02 + 30162 1 0 0 Fermi2002_100.LHpdf 62 1. 1.E+10 1.E-06 1. Fermi02 + 30163 1 0 0 Fermi2002_100.LHpdf 63 1. 1.E+10 1.E-06 1. Fermi02 + 30164 1 0 0 Fermi2002_100.LHpdf 64 1. 1.E+10 1.E-06 1. Fermi02 + 30165 1 0 0 Fermi2002_100.LHpdf 65 1. 1.E+10 1.E-06 1. Fermi02 + 30166 1 0 0 Fermi2002_100.LHpdf 66 1. 1.E+10 1.E-06 1. Fermi02 + 30167 1 0 0 Fermi2002_100.LHpdf 67 1. 1.E+10 1.E-06 1. Fermi02 + 30168 1 0 0 Fermi2002_100.LHpdf 68 1. 1.E+10 1.E-06 1. Fermi02 + 30169 1 0 0 Fermi2002_100.LHpdf 69 1. 1.E+10 1.E-06 1. Fermi02 + 30170 1 0 0 Fermi2002_100.LHpdf 70 1. 1.E+10 1.E-06 1. Fermi02 + 30171 1 0 0 Fermi2002_100.LHpdf 71 1. 1.E+10 1.E-06 1. Fermi02 + 30172 1 0 0 Fermi2002_100.LHpdf 72 1. 1.E+10 1.E-06 1. Fermi02 + 30173 1 0 0 Fermi2002_100.LHpdf 73 1. 1.E+10 1.E-06 1. Fermi02 + 30174 1 0 0 Fermi2002_100.LHpdf 74 1. 1.E+10 1.E-06 1. Fermi02 + 30175 1 0 0 Fermi2002_100.LHpdf 75 1. 1.E+10 1.E-06 1. Fermi02 + 30176 1 0 0 Fermi2002_100.LHpdf 76 1. 1.E+10 1.E-06 1. Fermi02 + 30177 1 0 0 Fermi2002_100.LHpdf 77 1. 1.E+10 1.E-06 1. Fermi02 + 30178 1 0 0 Fermi2002_100.LHpdf 78 1. 1.E+10 1.E-06 1. Fermi02 + 30179 1 0 0 Fermi2002_100.LHpdf 79 1. 1.E+10 1.E-06 1. Fermi02 + 30180 1 0 0 Fermi2002_100.LHpdf 80 1. 1.E+10 1.E-06 1. Fermi02 + 30181 1 0 0 Fermi2002_100.LHpdf 81 1. 1.E+10 1.E-06 1. Fermi02 + 30182 1 0 0 Fermi2002_100.LHpdf 82 1. 1.E+10 1.E-06 1. Fermi02 + 30183 1 0 0 Fermi2002_100.LHpdf 83 1. 1.E+10 1.E-06 1. Fermi02 + 30184 1 0 0 Fermi2002_100.LHpdf 84 1. 1.E+10 1.E-06 1. Fermi02 + 30185 1 0 0 Fermi2002_100.LHpdf 85 1. 1.E+10 1.E-06 1. Fermi02 + 30186 1 0 0 Fermi2002_100.LHpdf 86 1. 1.E+10 1.E-06 1. Fermi02 + 30187 1 0 0 Fermi2002_100.LHpdf 87 1. 1.E+10 1.E-06 1. Fermi02 + 30188 1 0 0 Fermi2002_100.LHpdf 88 1. 1.E+10 1.E-06 1. Fermi02 + 30189 1 0 0 Fermi2002_100.LHpdf 89 1. 1.E+10 1.E-06 1. Fermi02 + 30190 1 0 0 Fermi2002_100.LHpdf 90 1. 1.E+10 1.E-06 1. Fermi02 + 30191 1 0 0 Fermi2002_100.LHpdf 91 1. 1.E+10 1.E-06 1. Fermi02 + 30192 1 0 0 Fermi2002_100.LHpdf 92 1. 1.E+10 1.E-06 1. Fermi02 + 30193 1 0 0 Fermi2002_100.LHpdf 93 1. 1.E+10 1.E-06 1. Fermi02 + 30194 1 0 0 Fermi2002_100.LHpdf 94 1. 1.E+10 1.E-06 1. Fermi02 + 30195 1 0 0 Fermi2002_100.LHpdf 95 1. 1.E+10 1.E-06 1. Fermi02 + 30196 1 0 0 Fermi2002_100.LHpdf 96 1. 1.E+10 1.E-06 1. Fermi02 + 30197 1 0 0 Fermi2002_100.LHpdf 97 1. 1.E+10 1.E-06 1. Fermi02 + 30198 1 0 0 Fermi2002_100.LHpdf 98 1. 1.E+10 1.E-06 1. Fermi02 + 30199 1 0 0 Fermi2002_100.LHpdf 99 1. 1.E+10 1.E-06 1. Fermi02 + 30200 1 0 0 Fermi2002_100.LHpdf 100 1. 1.E+10 1.E-06 1. Fermi02 + 31000 1 0 0 Fermi2002_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Fermi02 + 31001 1 0 0 Fermi2002_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Fermi02 + 31002 1 0 0 Fermi2002_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Fermi02 + 31003 1 0 0 Fermi2002_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Fermi02 + 31004 1 0 0 Fermi2002_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Fermi02 + 31005 1 0 0 Fermi2002_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Fermi02 + 31006 1 0 0 Fermi2002_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Fermi02 + 31007 1 0 0 Fermi2002_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Fermi02 + 31008 1 0 0 Fermi2002_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Fermi02 + 31009 1 0 0 Fermi2002_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Fermi02 + 31010 1 0 0 Fermi2002_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Fermi02 + 31011 1 0 0 Fermi2002_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Fermi02 + 31012 1 0 0 Fermi2002_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Fermi02 + 31013 1 0 0 Fermi2002_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Fermi02 + 31014 1 0 0 Fermi2002_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Fermi02 + 31015 1 0 0 Fermi2002_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Fermi02 + 31016 1 0 0 Fermi2002_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Fermi02 + 31017 1 0 0 Fermi2002_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Fermi02 + 31018 1 0 0 Fermi2002_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Fermi02 + 31019 1 0 0 Fermi2002_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Fermi02 + 31020 1 0 0 Fermi2002_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Fermi02 + 31021 1 0 0 Fermi2002_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Fermi02 + 31022 1 0 0 Fermi2002_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Fermi02 + 31023 1 0 0 Fermi2002_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Fermi02 + 31024 1 0 0 Fermi2002_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Fermi02 + 31025 1 0 0 Fermi2002_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Fermi02 + 31026 1 0 0 Fermi2002_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Fermi02 + 31027 1 0 0 Fermi2002_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Fermi02 + 31028 1 0 0 Fermi2002_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Fermi02 + 31029 1 0 0 Fermi2002_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Fermi02 + 31030 1 0 0 Fermi2002_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Fermi02 + 31031 1 0 0 Fermi2002_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Fermi02 + 31032 1 0 0 Fermi2002_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Fermi02 + 31033 1 0 0 Fermi2002_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Fermi02 + 31034 1 0 0 Fermi2002_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Fermi02 + 31035 1 0 0 Fermi2002_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Fermi02 + 31036 1 0 0 Fermi2002_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Fermi02 + 31037 1 0 0 Fermi2002_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Fermi02 + 31038 1 0 0 Fermi2002_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Fermi02 + 31039 1 0 0 Fermi2002_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Fermi02 + 31040 1 0 0 Fermi2002_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Fermi02 + 31041 1 0 0 Fermi2002_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Fermi02 + 31042 1 0 0 Fermi2002_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Fermi02 + 31043 1 0 0 Fermi2002_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Fermi02 + 31044 1 0 0 Fermi2002_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Fermi02 + 31045 1 0 0 Fermi2002_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Fermi02 + 31046 1 0 0 Fermi2002_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Fermi02 + 31047 1 0 0 Fermi2002_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Fermi02 + 31048 1 0 0 Fermi2002_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Fermi02 + 31049 1 0 0 Fermi2002_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Fermi02 + 31050 1 0 0 Fermi2002_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Fermi02 + 31051 1 0 0 Fermi2002_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Fermi02 + 31052 1 0 0 Fermi2002_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Fermi02 + 31053 1 0 0 Fermi2002_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Fermi02 + 31054 1 0 0 Fermi2002_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Fermi02 + 31055 1 0 0 Fermi2002_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Fermi02 + 31056 1 0 0 Fermi2002_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Fermi02 + 31057 1 0 0 Fermi2002_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Fermi02 + 31058 1 0 0 Fermi2002_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Fermi02 + 31059 1 0 0 Fermi2002_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Fermi02 + 31060 1 0 0 Fermi2002_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Fermi02 + 31061 1 0 0 Fermi2002_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Fermi02 + 31062 1 0 0 Fermi2002_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Fermi02 + 31063 1 0 0 Fermi2002_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Fermi02 + 31064 1 0 0 Fermi2002_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Fermi02 + 31065 1 0 0 Fermi2002_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Fermi02 + 31066 1 0 0 Fermi2002_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Fermi02 + 31067 1 0 0 Fermi2002_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Fermi02 + 31068 1 0 0 Fermi2002_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Fermi02 + 31069 1 0 0 Fermi2002_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Fermi02 + 31070 1 0 0 Fermi2002_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Fermi02 + 31071 1 0 0 Fermi2002_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Fermi02 + 31072 1 0 0 Fermi2002_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Fermi02 + 31073 1 0 0 Fermi2002_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Fermi02 + 31074 1 0 0 Fermi2002_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Fermi02 + 31075 1 0 0 Fermi2002_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Fermi02 + 31076 1 0 0 Fermi2002_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Fermi02 + 31077 1 0 0 Fermi2002_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Fermi02 + 31078 1 0 0 Fermi2002_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Fermi02 + 31079 1 0 0 Fermi2002_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Fermi02 + 31080 1 0 0 Fermi2002_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Fermi02 + 31081 1 0 0 Fermi2002_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Fermi02 + 31082 1 0 0 Fermi2002_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Fermi02 + 31083 1 0 0 Fermi2002_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Fermi02 + 31084 1 0 0 Fermi2002_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Fermi02 + 31085 1 0 0 Fermi2002_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Fermi02 + 31086 1 0 0 Fermi2002_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Fermi02 + 31087 1 0 0 Fermi2002_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Fermi02 + 31088 1 0 0 Fermi2002_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Fermi02 + 31089 1 0 0 Fermi2002_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Fermi02 + 31090 1 0 0 Fermi2002_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Fermi02 + 31091 1 0 0 Fermi2002_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Fermi02 + 31092 1 0 0 Fermi2002_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Fermi02 + 31093 1 0 0 Fermi2002_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Fermi02 + 31094 1 0 0 Fermi2002_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Fermi02 + 31095 1 0 0 Fermi2002_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Fermi02 + 31096 1 0 0 Fermi2002_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Fermi02 + 31097 1 0 0 Fermi2002_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Fermi02 + 31098 1 0 0 Fermi2002_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Fermi02 + 31099 1 0 0 Fermi2002_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Fermi02 + 31100 1 0 0 Fermi2002_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Fermi02 + 31101 1 0 0 Fermi2002_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Fermi02 + 31102 1 0 0 Fermi2002_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Fermi02 + 31103 1 0 0 Fermi2002_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Fermi02 + 31104 1 0 0 Fermi2002_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Fermi02 + 31105 1 0 0 Fermi2002_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Fermi02 + 31106 1 0 0 Fermi2002_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Fermi02 + 31107 1 0 0 Fermi2002_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Fermi02 + 31108 1 0 0 Fermi2002_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Fermi02 + 31109 1 0 0 Fermi2002_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Fermi02 + 31110 1 0 0 Fermi2002_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Fermi02 + 31111 1 0 0 Fermi2002_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Fermi02 + 31112 1 0 0 Fermi2002_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Fermi02 + 31113 1 0 0 Fermi2002_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Fermi02 + 31114 1 0 0 Fermi2002_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Fermi02 + 31115 1 0 0 Fermi2002_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Fermi02 + 31116 1 0 0 Fermi2002_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Fermi02 + 31117 1 0 0 Fermi2002_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Fermi02 + 31118 1 0 0 Fermi2002_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Fermi02 + 31119 1 0 0 Fermi2002_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Fermi02 + 31120 1 0 0 Fermi2002_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Fermi02 + 31121 1 0 0 Fermi2002_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Fermi02 + 31122 1 0 0 Fermi2002_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Fermi02 + 31123 1 0 0 Fermi2002_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Fermi02 + 31124 1 0 0 Fermi2002_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Fermi02 + 31125 1 0 0 Fermi2002_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Fermi02 + 31126 1 0 0 Fermi2002_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Fermi02 + 31127 1 0 0 Fermi2002_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Fermi02 + 31128 1 0 0 Fermi2002_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Fermi02 + 31129 1 0 0 Fermi2002_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Fermi02 + 31130 1 0 0 Fermi2002_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Fermi02 + 31131 1 0 0 Fermi2002_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Fermi02 + 31132 1 0 0 Fermi2002_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Fermi02 + 31133 1 0 0 Fermi2002_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Fermi02 + 31134 1 0 0 Fermi2002_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Fermi02 + 31135 1 0 0 Fermi2002_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Fermi02 + 31136 1 0 0 Fermi2002_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Fermi02 + 31137 1 0 0 Fermi2002_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Fermi02 + 31138 1 0 0 Fermi2002_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Fermi02 + 31139 1 0 0 Fermi2002_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Fermi02 + 31140 1 0 0 Fermi2002_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Fermi02 + 31141 1 0 0 Fermi2002_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Fermi02 + 31142 1 0 0 Fermi2002_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Fermi02 + 31143 1 0 0 Fermi2002_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Fermi02 + 31144 1 0 0 Fermi2002_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Fermi02 + 31145 1 0 0 Fermi2002_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Fermi02 + 31146 1 0 0 Fermi2002_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Fermi02 + 31147 1 0 0 Fermi2002_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Fermi02 + 31148 1 0 0 Fermi2002_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Fermi02 + 31149 1 0 0 Fermi2002_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Fermi02 + 31150 1 0 0 Fermi2002_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Fermi02 + 31151 1 0 0 Fermi2002_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Fermi02 + 31152 1 0 0 Fermi2002_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Fermi02 + 31153 1 0 0 Fermi2002_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Fermi02 + 31154 1 0 0 Fermi2002_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Fermi02 + 31155 1 0 0 Fermi2002_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Fermi02 + 31156 1 0 0 Fermi2002_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Fermi02 + 31157 1 0 0 Fermi2002_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Fermi02 + 31158 1 0 0 Fermi2002_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Fermi02 + 31159 1 0 0 Fermi2002_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Fermi02 + 31160 1 0 0 Fermi2002_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Fermi02 + 31161 1 0 0 Fermi2002_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Fermi02 + 31162 1 0 0 Fermi2002_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Fermi02 + 31163 1 0 0 Fermi2002_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Fermi02 + 31164 1 0 0 Fermi2002_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Fermi02 + 31165 1 0 0 Fermi2002_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Fermi02 + 31166 1 0 0 Fermi2002_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Fermi02 + 31167 1 0 0 Fermi2002_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Fermi02 + 31168 1 0 0 Fermi2002_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Fermi02 + 31169 1 0 0 Fermi2002_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Fermi02 + 31170 1 0 0 Fermi2002_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Fermi02 + 31171 1 0 0 Fermi2002_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Fermi02 + 31172 1 0 0 Fermi2002_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Fermi02 + 31173 1 0 0 Fermi2002_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Fermi02 + 31174 1 0 0 Fermi2002_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Fermi02 + 31175 1 0 0 Fermi2002_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Fermi02 + 31176 1 0 0 Fermi2002_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Fermi02 + 31177 1 0 0 Fermi2002_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Fermi02 + 31178 1 0 0 Fermi2002_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Fermi02 + 31179 1 0 0 Fermi2002_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Fermi02 + 31180 1 0 0 Fermi2002_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Fermi02 + 31181 1 0 0 Fermi2002_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Fermi02 + 31182 1 0 0 Fermi2002_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Fermi02 + 31183 1 0 0 Fermi2002_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Fermi02 + 31184 1 0 0 Fermi2002_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Fermi02 + 31185 1 0 0 Fermi2002_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Fermi02 + 31186 1 0 0 Fermi2002_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Fermi02 + 31187 1 0 0 Fermi2002_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Fermi02 + 31188 1 0 0 Fermi2002_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Fermi02 + 31189 1 0 0 Fermi2002_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Fermi02 + 31190 1 0 0 Fermi2002_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Fermi02 + 31191 1 0 0 Fermi2002_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Fermi02 + 31192 1 0 0 Fermi2002_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Fermi02 + 31193 1 0 0 Fermi2002_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Fermi02 + 31194 1 0 0 Fermi2002_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Fermi02 + 31195 1 0 0 Fermi2002_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Fermi02 + 31196 1 0 0 Fermi2002_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Fermi02 + 31197 1 0 0 Fermi2002_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Fermi02 + 31198 1 0 0 Fermi2002_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Fermi02 + 31199 1 0 0 Fermi2002_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Fermi02 + 31200 1 0 0 Fermi2002_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Fermi02 + 31201 1 0 0 Fermi2002_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Fermi02 + 31202 1 0 0 Fermi2002_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Fermi02 + 31203 1 0 0 Fermi2002_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Fermi02 + 31204 1 0 0 Fermi2002_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Fermi02 + 31205 1 0 0 Fermi2002_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Fermi02 + 31206 1 0 0 Fermi2002_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Fermi02 + 31207 1 0 0 Fermi2002_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Fermi02 + 31208 1 0 0 Fermi2002_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Fermi02 + 31209 1 0 0 Fermi2002_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Fermi02 + 31210 1 0 0 Fermi2002_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Fermi02 + 31211 1 0 0 Fermi2002_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Fermi02 + 31212 1 0 0 Fermi2002_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Fermi02 + 31213 1 0 0 Fermi2002_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Fermi02 + 31214 1 0 0 Fermi2002_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Fermi02 + 31215 1 0 0 Fermi2002_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Fermi02 + 31216 1 0 0 Fermi2002_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Fermi02 + 31217 1 0 0 Fermi2002_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Fermi02 + 31218 1 0 0 Fermi2002_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Fermi02 + 31219 1 0 0 Fermi2002_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Fermi02 + 31220 1 0 0 Fermi2002_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Fermi02 + 31221 1 0 0 Fermi2002_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Fermi02 + 31222 1 0 0 Fermi2002_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Fermi02 + 31223 1 0 0 Fermi2002_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Fermi02 + 31224 1 0 0 Fermi2002_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Fermi02 + 31225 1 0 0 Fermi2002_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Fermi02 + 31226 1 0 0 Fermi2002_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Fermi02 + 31227 1 0 0 Fermi2002_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Fermi02 + 31228 1 0 0 Fermi2002_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Fermi02 + 31229 1 0 0 Fermi2002_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Fermi02 + 31230 1 0 0 Fermi2002_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Fermi02 + 31231 1 0 0 Fermi2002_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Fermi02 + 31232 1 0 0 Fermi2002_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Fermi02 + 31233 1 0 0 Fermi2002_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Fermi02 + 31234 1 0 0 Fermi2002_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Fermi02 + 31235 1 0 0 Fermi2002_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Fermi02 + 31236 1 0 0 Fermi2002_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Fermi02 + 31237 1 0 0 Fermi2002_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Fermi02 + 31238 1 0 0 Fermi2002_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Fermi02 + 31239 1 0 0 Fermi2002_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Fermi02 + 31240 1 0 0 Fermi2002_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Fermi02 + 31241 1 0 0 Fermi2002_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Fermi02 + 31242 1 0 0 Fermi2002_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Fermi02 + 31243 1 0 0 Fermi2002_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Fermi02 + 31244 1 0 0 Fermi2002_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Fermi02 + 31245 1 0 0 Fermi2002_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Fermi02 + 31246 1 0 0 Fermi2002_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Fermi02 + 31247 1 0 0 Fermi2002_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Fermi02 + 31248 1 0 0 Fermi2002_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Fermi02 + 31249 1 0 0 Fermi2002_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Fermi02 + 31250 1 0 0 Fermi2002_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Fermi02 + 31251 1 0 0 Fermi2002_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Fermi02 + 31252 1 0 0 Fermi2002_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Fermi02 + 31253 1 0 0 Fermi2002_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Fermi02 + 31254 1 0 0 Fermi2002_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Fermi02 + 31255 1 0 0 Fermi2002_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Fermi02 + 31256 1 0 0 Fermi2002_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Fermi02 + 31257 1 0 0 Fermi2002_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Fermi02 + 31258 1 0 0 Fermi2002_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Fermi02 + 31259 1 0 0 Fermi2002_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Fermi02 + 31260 1 0 0 Fermi2002_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Fermi02 + 31261 1 0 0 Fermi2002_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Fermi02 + 31262 1 0 0 Fermi2002_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Fermi02 + 31263 1 0 0 Fermi2002_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Fermi02 + 31264 1 0 0 Fermi2002_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Fermi02 + 31265 1 0 0 Fermi2002_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Fermi02 + 31266 1 0 0 Fermi2002_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Fermi02 + 31267 1 0 0 Fermi2002_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Fermi02 + 31268 1 0 0 Fermi2002_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Fermi02 + 31269 1 0 0 Fermi2002_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Fermi02 + 31270 1 0 0 Fermi2002_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Fermi02 + 31271 1 0 0 Fermi2002_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Fermi02 + 31272 1 0 0 Fermi2002_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Fermi02 + 31273 1 0 0 Fermi2002_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Fermi02 + 31274 1 0 0 Fermi2002_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Fermi02 + 31275 1 0 0 Fermi2002_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Fermi02 + 31276 1 0 0 Fermi2002_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Fermi02 + 31277 1 0 0 Fermi2002_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Fermi02 + 31278 1 0 0 Fermi2002_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Fermi02 + 31279 1 0 0 Fermi2002_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Fermi02 + 31280 1 0 0 Fermi2002_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Fermi02 + 31281 1 0 0 Fermi2002_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Fermi02 + 31282 1 0 0 Fermi2002_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Fermi02 + 31283 1 0 0 Fermi2002_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Fermi02 + 31284 1 0 0 Fermi2002_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Fermi02 + 31285 1 0 0 Fermi2002_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Fermi02 + 31286 1 0 0 Fermi2002_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Fermi02 + 31287 1 0 0 Fermi2002_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Fermi02 + 31288 1 0 0 Fermi2002_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Fermi02 + 31289 1 0 0 Fermi2002_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Fermi02 + 31290 1 0 0 Fermi2002_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Fermi02 + 31291 1 0 0 Fermi2002_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Fermi02 + 31292 1 0 0 Fermi2002_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Fermi02 + 31293 1 0 0 Fermi2002_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Fermi02 + 31294 1 0 0 Fermi2002_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Fermi02 + 31295 1 0 0 Fermi2002_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Fermi02 + 31296 1 0 0 Fermi2002_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Fermi02 + 31297 1 0 0 Fermi2002_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Fermi02 + 31298 1 0 0 Fermi2002_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Fermi02 + 31299 1 0 0 Fermi2002_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Fermi02 + 31300 1 0 0 Fermi2002_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Fermi02 + 31301 1 0 0 Fermi2002_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Fermi02 + 31302 1 0 0 Fermi2002_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Fermi02 + 31303 1 0 0 Fermi2002_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Fermi02 + 31304 1 0 0 Fermi2002_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Fermi02 + 31305 1 0 0 Fermi2002_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Fermi02 + 31306 1 0 0 Fermi2002_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Fermi02 + 31307 1 0 0 Fermi2002_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Fermi02 + 31308 1 0 0 Fermi2002_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Fermi02 + 31309 1 0 0 Fermi2002_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Fermi02 + 31310 1 0 0 Fermi2002_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Fermi02 + 31311 1 0 0 Fermi2002_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Fermi02 + 31312 1 0 0 Fermi2002_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Fermi02 + 31313 1 0 0 Fermi2002_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Fermi02 + 31314 1 0 0 Fermi2002_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Fermi02 + 31315 1 0 0 Fermi2002_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Fermi02 + 31316 1 0 0 Fermi2002_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Fermi02 + 31317 1 0 0 Fermi2002_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Fermi02 + 31318 1 0 0 Fermi2002_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Fermi02 + 31319 1 0 0 Fermi2002_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Fermi02 + 31320 1 0 0 Fermi2002_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Fermi02 + 31321 1 0 0 Fermi2002_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Fermi02 + 31322 1 0 0 Fermi2002_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Fermi02 + 31323 1 0 0 Fermi2002_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Fermi02 + 31324 1 0 0 Fermi2002_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Fermi02 + 31325 1 0 0 Fermi2002_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Fermi02 + 31326 1 0 0 Fermi2002_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Fermi02 + 31327 1 0 0 Fermi2002_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Fermi02 + 31328 1 0 0 Fermi2002_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Fermi02 + 31329 1 0 0 Fermi2002_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Fermi02 + 31330 1 0 0 Fermi2002_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Fermi02 + 31331 1 0 0 Fermi2002_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Fermi02 + 31332 1 0 0 Fermi2002_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Fermi02 + 31333 1 0 0 Fermi2002_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Fermi02 + 31334 1 0 0 Fermi2002_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Fermi02 + 31335 1 0 0 Fermi2002_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Fermi02 + 31336 1 0 0 Fermi2002_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Fermi02 + 31337 1 0 0 Fermi2002_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Fermi02 + 31338 1 0 0 Fermi2002_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Fermi02 + 31339 1 0 0 Fermi2002_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Fermi02 + 31340 1 0 0 Fermi2002_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Fermi02 + 31341 1 0 0 Fermi2002_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Fermi02 + 31342 1 0 0 Fermi2002_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Fermi02 + 31343 1 0 0 Fermi2002_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Fermi02 + 31344 1 0 0 Fermi2002_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Fermi02 + 31345 1 0 0 Fermi2002_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Fermi02 + 31346 1 0 0 Fermi2002_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Fermi02 + 31347 1 0 0 Fermi2002_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Fermi02 + 31348 1 0 0 Fermi2002_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Fermi02 + 31349 1 0 0 Fermi2002_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Fermi02 + 31350 1 0 0 Fermi2002_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Fermi02 + 31351 1 0 0 Fermi2002_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Fermi02 + 31352 1 0 0 Fermi2002_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Fermi02 + 31353 1 0 0 Fermi2002_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Fermi02 + 31354 1 0 0 Fermi2002_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Fermi02 + 31355 1 0 0 Fermi2002_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Fermi02 + 31356 1 0 0 Fermi2002_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Fermi02 + 31357 1 0 0 Fermi2002_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Fermi02 + 31358 1 0 0 Fermi2002_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Fermi02 + 31359 1 0 0 Fermi2002_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Fermi02 + 31360 1 0 0 Fermi2002_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Fermi02 + 31361 1 0 0 Fermi2002_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Fermi02 + 31362 1 0 0 Fermi2002_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Fermi02 + 31363 1 0 0 Fermi2002_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Fermi02 + 31364 1 0 0 Fermi2002_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Fermi02 + 31365 1 0 0 Fermi2002_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Fermi02 + 31366 1 0 0 Fermi2002_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Fermi02 + 31367 1 0 0 Fermi2002_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Fermi02 + 31368 1 0 0 Fermi2002_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Fermi02 + 31369 1 0 0 Fermi2002_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Fermi02 + 31370 1 0 0 Fermi2002_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Fermi02 + 31371 1 0 0 Fermi2002_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Fermi02 + 31372 1 0 0 Fermi2002_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Fermi02 + 31373 1 0 0 Fermi2002_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Fermi02 + 31374 1 0 0 Fermi2002_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Fermi02 + 31375 1 0 0 Fermi2002_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Fermi02 + 31376 1 0 0 Fermi2002_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Fermi02 + 31377 1 0 0 Fermi2002_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Fermi02 + 31378 1 0 0 Fermi2002_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Fermi02 + 31379 1 0 0 Fermi2002_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Fermi02 + 31380 1 0 0 Fermi2002_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Fermi02 + 31381 1 0 0 Fermi2002_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Fermi02 + 31382 1 0 0 Fermi2002_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Fermi02 + 31383 1 0 0 Fermi2002_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Fermi02 + 31384 1 0 0 Fermi2002_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Fermi02 + 31385 1 0 0 Fermi2002_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Fermi02 + 31386 1 0 0 Fermi2002_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Fermi02 + 31387 1 0 0 Fermi2002_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Fermi02 + 31388 1 0 0 Fermi2002_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Fermi02 + 31389 1 0 0 Fermi2002_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Fermi02 + 31390 1 0 0 Fermi2002_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Fermi02 + 31391 1 0 0 Fermi2002_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Fermi02 + 31392 1 0 0 Fermi2002_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Fermi02 + 31393 1 0 0 Fermi2002_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Fermi02 + 31394 1 0 0 Fermi2002_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Fermi02 + 31395 1 0 0 Fermi2002_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Fermi02 + 31396 1 0 0 Fermi2002_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Fermi02 + 31397 1 0 0 Fermi2002_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Fermi02 + 31398 1 0 0 Fermi2002_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Fermi02 + 31399 1 0 0 Fermi2002_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Fermi02 + 31400 1 0 0 Fermi2002_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Fermi02 + 31401 1 0 0 Fermi2002_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Fermi02 + 31402 1 0 0 Fermi2002_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Fermi02 + 31403 1 0 0 Fermi2002_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Fermi02 + 31404 1 0 0 Fermi2002_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Fermi02 + 31405 1 0 0 Fermi2002_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Fermi02 + 31406 1 0 0 Fermi2002_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Fermi02 + 31407 1 0 0 Fermi2002_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Fermi02 + 31408 1 0 0 Fermi2002_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Fermi02 + 31409 1 0 0 Fermi2002_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Fermi02 + 31410 1 0 0 Fermi2002_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Fermi02 + 31411 1 0 0 Fermi2002_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Fermi02 + 31412 1 0 0 Fermi2002_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Fermi02 + 31413 1 0 0 Fermi2002_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Fermi02 + 31414 1 0 0 Fermi2002_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Fermi02 + 31415 1 0 0 Fermi2002_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Fermi02 + 31416 1 0 0 Fermi2002_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Fermi02 + 31417 1 0 0 Fermi2002_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Fermi02 + 31418 1 0 0 Fermi2002_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Fermi02 + 31419 1 0 0 Fermi2002_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Fermi02 + 31420 1 0 0 Fermi2002_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Fermi02 + 31421 1 0 0 Fermi2002_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Fermi02 + 31422 1 0 0 Fermi2002_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Fermi02 + 31423 1 0 0 Fermi2002_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Fermi02 + 31424 1 0 0 Fermi2002_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Fermi02 + 31425 1 0 0 Fermi2002_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Fermi02 + 31426 1 0 0 Fermi2002_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Fermi02 + 31427 1 0 0 Fermi2002_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Fermi02 + 31428 1 0 0 Fermi2002_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Fermi02 + 31429 1 0 0 Fermi2002_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Fermi02 + 31430 1 0 0 Fermi2002_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Fermi02 + 31431 1 0 0 Fermi2002_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Fermi02 + 31432 1 0 0 Fermi2002_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Fermi02 + 31433 1 0 0 Fermi2002_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Fermi02 + 31434 1 0 0 Fermi2002_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Fermi02 + 31435 1 0 0 Fermi2002_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Fermi02 + 31436 1 0 0 Fermi2002_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Fermi02 + 31437 1 0 0 Fermi2002_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Fermi02 + 31438 1 0 0 Fermi2002_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Fermi02 + 31439 1 0 0 Fermi2002_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Fermi02 + 31440 1 0 0 Fermi2002_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Fermi02 + 31441 1 0 0 Fermi2002_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Fermi02 + 31442 1 0 0 Fermi2002_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Fermi02 + 31443 1 0 0 Fermi2002_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Fermi02 + 31444 1 0 0 Fermi2002_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Fermi02 + 31445 1 0 0 Fermi2002_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Fermi02 + 31446 1 0 0 Fermi2002_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Fermi02 + 31447 1 0 0 Fermi2002_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Fermi02 + 31448 1 0 0 Fermi2002_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Fermi02 + 31449 1 0 0 Fermi2002_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Fermi02 + 31450 1 0 0 Fermi2002_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Fermi02 + 31451 1 0 0 Fermi2002_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Fermi02 + 31452 1 0 0 Fermi2002_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Fermi02 + 31453 1 0 0 Fermi2002_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Fermi02 + 31454 1 0 0 Fermi2002_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Fermi02 + 31455 1 0 0 Fermi2002_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Fermi02 + 31456 1 0 0 Fermi2002_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Fermi02 + 31457 1 0 0 Fermi2002_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Fermi02 + 31458 1 0 0 Fermi2002_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Fermi02 + 31459 1 0 0 Fermi2002_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Fermi02 + 31460 1 0 0 Fermi2002_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Fermi02 + 31461 1 0 0 Fermi2002_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Fermi02 + 31462 1 0 0 Fermi2002_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Fermi02 + 31463 1 0 0 Fermi2002_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Fermi02 + 31464 1 0 0 Fermi2002_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Fermi02 + 31465 1 0 0 Fermi2002_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Fermi02 + 31466 1 0 0 Fermi2002_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Fermi02 + 31467 1 0 0 Fermi2002_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Fermi02 + 31468 1 0 0 Fermi2002_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Fermi02 + 31469 1 0 0 Fermi2002_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Fermi02 + 31470 1 0 0 Fermi2002_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Fermi02 + 31471 1 0 0 Fermi2002_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Fermi02 + 31472 1 0 0 Fermi2002_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Fermi02 + 31473 1 0 0 Fermi2002_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Fermi02 + 31474 1 0 0 Fermi2002_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Fermi02 + 31475 1 0 0 Fermi2002_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Fermi02 + 31476 1 0 0 Fermi2002_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Fermi02 + 31477 1 0 0 Fermi2002_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Fermi02 + 31478 1 0 0 Fermi2002_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Fermi02 + 31479 1 0 0 Fermi2002_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Fermi02 + 31480 1 0 0 Fermi2002_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Fermi02 + 31481 1 0 0 Fermi2002_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Fermi02 + 31482 1 0 0 Fermi2002_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Fermi02 + 31483 1 0 0 Fermi2002_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Fermi02 + 31484 1 0 0 Fermi2002_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Fermi02 + 31485 1 0 0 Fermi2002_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Fermi02 + 31486 1 0 0 Fermi2002_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Fermi02 + 31487 1 0 0 Fermi2002_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Fermi02 + 31488 1 0 0 Fermi2002_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Fermi02 + 31489 1 0 0 Fermi2002_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Fermi02 + 31490 1 0 0 Fermi2002_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Fermi02 + 31491 1 0 0 Fermi2002_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Fermi02 + 31492 1 0 0 Fermi2002_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Fermi02 + 31493 1 0 0 Fermi2002_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Fermi02 + 31494 1 0 0 Fermi2002_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Fermi02 + 31495 1 0 0 Fermi2002_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Fermi02 + 31496 1 0 0 Fermi2002_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Fermi02 + 31497 1 0 0 Fermi2002_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Fermi02 + 31498 1 0 0 Fermi2002_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Fermi02 + 31499 1 0 0 Fermi2002_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Fermi02 + 31500 1 0 0 Fermi2002_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Fermi02 + 31501 1 0 0 Fermi2002_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Fermi02 + 31502 1 0 0 Fermi2002_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Fermi02 + 31503 1 0 0 Fermi2002_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Fermi02 + 31504 1 0 0 Fermi2002_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Fermi02 + 31505 1 0 0 Fermi2002_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Fermi02 + 31506 1 0 0 Fermi2002_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Fermi02 + 31507 1 0 0 Fermi2002_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Fermi02 + 31508 1 0 0 Fermi2002_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Fermi02 + 31509 1 0 0 Fermi2002_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Fermi02 + 31510 1 0 0 Fermi2002_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Fermi02 + 31511 1 0 0 Fermi2002_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Fermi02 + 31512 1 0 0 Fermi2002_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Fermi02 + 31513 1 0 0 Fermi2002_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Fermi02 + 31514 1 0 0 Fermi2002_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Fermi02 + 31515 1 0 0 Fermi2002_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Fermi02 + 31516 1 0 0 Fermi2002_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Fermi02 + 31517 1 0 0 Fermi2002_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Fermi02 + 31518 1 0 0 Fermi2002_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Fermi02 + 31519 1 0 0 Fermi2002_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Fermi02 + 31520 1 0 0 Fermi2002_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Fermi02 + 31521 1 0 0 Fermi2002_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Fermi02 + 31522 1 0 0 Fermi2002_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Fermi02 + 31523 1 0 0 Fermi2002_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Fermi02 + 31524 1 0 0 Fermi2002_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Fermi02 + 31525 1 0 0 Fermi2002_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Fermi02 + 31526 1 0 0 Fermi2002_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Fermi02 + 31527 1 0 0 Fermi2002_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Fermi02 + 31528 1 0 0 Fermi2002_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Fermi02 + 31529 1 0 0 Fermi2002_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Fermi02 + 31530 1 0 0 Fermi2002_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Fermi02 + 31531 1 0 0 Fermi2002_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Fermi02 + 31532 1 0 0 Fermi2002_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Fermi02 + 31533 1 0 0 Fermi2002_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Fermi02 + 31534 1 0 0 Fermi2002_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Fermi02 + 31535 1 0 0 Fermi2002_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Fermi02 + 31536 1 0 0 Fermi2002_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Fermi02 + 31537 1 0 0 Fermi2002_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Fermi02 + 31538 1 0 0 Fermi2002_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Fermi02 + 31539 1 0 0 Fermi2002_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Fermi02 + 31540 1 0 0 Fermi2002_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Fermi02 + 31541 1 0 0 Fermi2002_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Fermi02 + 31542 1 0 0 Fermi2002_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Fermi02 + 31543 1 0 0 Fermi2002_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Fermi02 + 31544 1 0 0 Fermi2002_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Fermi02 + 31545 1 0 0 Fermi2002_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Fermi02 + 31546 1 0 0 Fermi2002_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Fermi02 + 31547 1 0 0 Fermi2002_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Fermi02 + 31548 1 0 0 Fermi2002_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Fermi02 + 31549 1 0 0 Fermi2002_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Fermi02 + 31550 1 0 0 Fermi2002_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Fermi02 + 31551 1 0 0 Fermi2002_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Fermi02 + 31552 1 0 0 Fermi2002_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Fermi02 + 31553 1 0 0 Fermi2002_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Fermi02 + 31554 1 0 0 Fermi2002_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Fermi02 + 31555 1 0 0 Fermi2002_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Fermi02 + 31556 1 0 0 Fermi2002_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Fermi02 + 31557 1 0 0 Fermi2002_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Fermi02 + 31558 1 0 0 Fermi2002_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Fermi02 + 31559 1 0 0 Fermi2002_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Fermi02 + 31560 1 0 0 Fermi2002_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Fermi02 + 31561 1 0 0 Fermi2002_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Fermi02 + 31562 1 0 0 Fermi2002_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Fermi02 + 31563 1 0 0 Fermi2002_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Fermi02 + 31564 1 0 0 Fermi2002_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Fermi02 + 31565 1 0 0 Fermi2002_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Fermi02 + 31566 1 0 0 Fermi2002_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Fermi02 + 31567 1 0 0 Fermi2002_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Fermi02 + 31568 1 0 0 Fermi2002_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Fermi02 + 31569 1 0 0 Fermi2002_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Fermi02 + 31570 1 0 0 Fermi2002_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Fermi02 + 31571 1 0 0 Fermi2002_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Fermi02 + 31572 1 0 0 Fermi2002_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Fermi02 + 31573 1 0 0 Fermi2002_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Fermi02 + 31574 1 0 0 Fermi2002_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Fermi02 + 31575 1 0 0 Fermi2002_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Fermi02 + 31576 1 0 0 Fermi2002_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Fermi02 + 31577 1 0 0 Fermi2002_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Fermi02 + 31578 1 0 0 Fermi2002_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Fermi02 + 31579 1 0 0 Fermi2002_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Fermi02 + 31580 1 0 0 Fermi2002_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Fermi02 + 31581 1 0 0 Fermi2002_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Fermi02 + 31582 1 0 0 Fermi2002_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Fermi02 + 31583 1 0 0 Fermi2002_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Fermi02 + 31584 1 0 0 Fermi2002_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Fermi02 + 31585 1 0 0 Fermi2002_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Fermi02 + 31586 1 0 0 Fermi2002_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Fermi02 + 31587 1 0 0 Fermi2002_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Fermi02 + 31588 1 0 0 Fermi2002_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Fermi02 + 31589 1 0 0 Fermi2002_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Fermi02 + 31590 1 0 0 Fermi2002_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Fermi02 + 31591 1 0 0 Fermi2002_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Fermi02 + 31592 1 0 0 Fermi2002_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Fermi02 + 31593 1 0 0 Fermi2002_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Fermi02 + 31594 1 0 0 Fermi2002_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Fermi02 + 31595 1 0 0 Fermi2002_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Fermi02 + 31596 1 0 0 Fermi2002_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Fermi02 + 31597 1 0 0 Fermi2002_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Fermi02 + 31598 1 0 0 Fermi2002_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Fermi02 + 31599 1 0 0 Fermi2002_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Fermi02 + 31600 1 0 0 Fermi2002_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Fermi02 + 31601 1 0 0 Fermi2002_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Fermi02 + 31602 1 0 0 Fermi2002_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Fermi02 + 31603 1 0 0 Fermi2002_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Fermi02 + 31604 1 0 0 Fermi2002_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Fermi02 + 31605 1 0 0 Fermi2002_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Fermi02 + 31606 1 0 0 Fermi2002_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Fermi02 + 31607 1 0 0 Fermi2002_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Fermi02 + 31608 1 0 0 Fermi2002_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Fermi02 + 31609 1 0 0 Fermi2002_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Fermi02 + 31610 1 0 0 Fermi2002_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Fermi02 + 31611 1 0 0 Fermi2002_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Fermi02 + 31612 1 0 0 Fermi2002_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Fermi02 + 31613 1 0 0 Fermi2002_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Fermi02 + 31614 1 0 0 Fermi2002_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Fermi02 + 31615 1 0 0 Fermi2002_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Fermi02 + 31616 1 0 0 Fermi2002_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Fermi02 + 31617 1 0 0 Fermi2002_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Fermi02 + 31618 1 0 0 Fermi2002_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Fermi02 + 31619 1 0 0 Fermi2002_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Fermi02 + 31620 1 0 0 Fermi2002_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Fermi02 + 31621 1 0 0 Fermi2002_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Fermi02 + 31622 1 0 0 Fermi2002_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Fermi02 + 31623 1 0 0 Fermi2002_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Fermi02 + 31624 1 0 0 Fermi2002_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Fermi02 + 31625 1 0 0 Fermi2002_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Fermi02 + 31626 1 0 0 Fermi2002_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Fermi02 + 31627 1 0 0 Fermi2002_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Fermi02 + 31628 1 0 0 Fermi2002_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Fermi02 + 31629 1 0 0 Fermi2002_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Fermi02 + 31630 1 0 0 Fermi2002_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Fermi02 + 31631 1 0 0 Fermi2002_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Fermi02 + 31632 1 0 0 Fermi2002_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Fermi02 + 31633 1 0 0 Fermi2002_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Fermi02 + 31634 1 0 0 Fermi2002_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Fermi02 + 31635 1 0 0 Fermi2002_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Fermi02 + 31636 1 0 0 Fermi2002_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Fermi02 + 31637 1 0 0 Fermi2002_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Fermi02 + 31638 1 0 0 Fermi2002_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Fermi02 + 31639 1 0 0 Fermi2002_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Fermi02 + 31640 1 0 0 Fermi2002_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Fermi02 + 31641 1 0 0 Fermi2002_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Fermi02 + 31642 1 0 0 Fermi2002_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Fermi02 + 31643 1 0 0 Fermi2002_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Fermi02 + 31644 1 0 0 Fermi2002_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Fermi02 + 31645 1 0 0 Fermi2002_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Fermi02 + 31646 1 0 0 Fermi2002_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Fermi02 + 31647 1 0 0 Fermi2002_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Fermi02 + 31648 1 0 0 Fermi2002_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Fermi02 + 31649 1 0 0 Fermi2002_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Fermi02 + 31650 1 0 0 Fermi2002_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Fermi02 + 31651 1 0 0 Fermi2002_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Fermi02 + 31652 1 0 0 Fermi2002_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Fermi02 + 31653 1 0 0 Fermi2002_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Fermi02 + 31654 1 0 0 Fermi2002_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Fermi02 + 31655 1 0 0 Fermi2002_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Fermi02 + 31656 1 0 0 Fermi2002_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Fermi02 + 31657 1 0 0 Fermi2002_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Fermi02 + 31658 1 0 0 Fermi2002_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Fermi02 + 31659 1 0 0 Fermi2002_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Fermi02 + 31660 1 0 0 Fermi2002_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Fermi02 + 31661 1 0 0 Fermi2002_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Fermi02 + 31662 1 0 0 Fermi2002_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Fermi02 + 31663 1 0 0 Fermi2002_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Fermi02 + 31664 1 0 0 Fermi2002_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Fermi02 + 31665 1 0 0 Fermi2002_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Fermi02 + 31666 1 0 0 Fermi2002_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Fermi02 + 31667 1 0 0 Fermi2002_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Fermi02 + 31668 1 0 0 Fermi2002_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Fermi02 + 31669 1 0 0 Fermi2002_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Fermi02 + 31670 1 0 0 Fermi2002_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Fermi02 + 31671 1 0 0 Fermi2002_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Fermi02 + 31672 1 0 0 Fermi2002_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Fermi02 + 31673 1 0 0 Fermi2002_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Fermi02 + 31674 1 0 0 Fermi2002_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Fermi02 + 31675 1 0 0 Fermi2002_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Fermi02 + 31676 1 0 0 Fermi2002_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Fermi02 + 31677 1 0 0 Fermi2002_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Fermi02 + 31678 1 0 0 Fermi2002_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Fermi02 + 31679 1 0 0 Fermi2002_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Fermi02 + 31680 1 0 0 Fermi2002_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Fermi02 + 31681 1 0 0 Fermi2002_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Fermi02 + 31682 1 0 0 Fermi2002_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Fermi02 + 31683 1 0 0 Fermi2002_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Fermi02 + 31684 1 0 0 Fermi2002_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Fermi02 + 31685 1 0 0 Fermi2002_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Fermi02 + 31686 1 0 0 Fermi2002_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Fermi02 + 31687 1 0 0 Fermi2002_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Fermi02 + 31688 1 0 0 Fermi2002_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Fermi02 + 31689 1 0 0 Fermi2002_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Fermi02 + 31690 1 0 0 Fermi2002_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Fermi02 + 31691 1 0 0 Fermi2002_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Fermi02 + 31692 1 0 0 Fermi2002_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Fermi02 + 31693 1 0 0 Fermi2002_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Fermi02 + 31694 1 0 0 Fermi2002_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Fermi02 + 31695 1 0 0 Fermi2002_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Fermi02 + 31696 1 0 0 Fermi2002_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Fermi02 + 31697 1 0 0 Fermi2002_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Fermi02 + 31698 1 0 0 Fermi2002_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Fermi02 + 31699 1 0 0 Fermi2002_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Fermi02 + 31700 1 0 0 Fermi2002_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Fermi02 + 31701 1 0 0 Fermi2002_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Fermi02 + 31702 1 0 0 Fermi2002_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Fermi02 + 31703 1 0 0 Fermi2002_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Fermi02 + 31704 1 0 0 Fermi2002_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Fermi02 + 31705 1 0 0 Fermi2002_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Fermi02 + 31706 1 0 0 Fermi2002_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Fermi02 + 31707 1 0 0 Fermi2002_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Fermi02 + 31708 1 0 0 Fermi2002_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Fermi02 + 31709 1 0 0 Fermi2002_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Fermi02 + 31710 1 0 0 Fermi2002_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Fermi02 + 31711 1 0 0 Fermi2002_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Fermi02 + 31712 1 0 0 Fermi2002_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Fermi02 + 31713 1 0 0 Fermi2002_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Fermi02 + 31714 1 0 0 Fermi2002_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Fermi02 + 31715 1 0 0 Fermi2002_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Fermi02 + 31716 1 0 0 Fermi2002_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Fermi02 + 31717 1 0 0 Fermi2002_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Fermi02 + 31718 1 0 0 Fermi2002_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Fermi02 + 31719 1 0 0 Fermi2002_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Fermi02 + 31720 1 0 0 Fermi2002_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Fermi02 + 31721 1 0 0 Fermi2002_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Fermi02 + 31722 1 0 0 Fermi2002_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Fermi02 + 31723 1 0 0 Fermi2002_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Fermi02 + 31724 1 0 0 Fermi2002_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Fermi02 + 31725 1 0 0 Fermi2002_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Fermi02 + 31726 1 0 0 Fermi2002_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Fermi02 + 31727 1 0 0 Fermi2002_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Fermi02 + 31728 1 0 0 Fermi2002_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Fermi02 + 31729 1 0 0 Fermi2002_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Fermi02 + 31730 1 0 0 Fermi2002_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Fermi02 + 31731 1 0 0 Fermi2002_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Fermi02 + 31732 1 0 0 Fermi2002_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Fermi02 + 31733 1 0 0 Fermi2002_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Fermi02 + 31734 1 0 0 Fermi2002_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Fermi02 + 31735 1 0 0 Fermi2002_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Fermi02 + 31736 1 0 0 Fermi2002_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Fermi02 + 31737 1 0 0 Fermi2002_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Fermi02 + 31738 1 0 0 Fermi2002_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Fermi02 + 31739 1 0 0 Fermi2002_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Fermi02 + 31740 1 0 0 Fermi2002_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Fermi02 + 31741 1 0 0 Fermi2002_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Fermi02 + 31742 1 0 0 Fermi2002_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Fermi02 + 31743 1 0 0 Fermi2002_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Fermi02 + 31744 1 0 0 Fermi2002_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Fermi02 + 31745 1 0 0 Fermi2002_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Fermi02 + 31746 1 0 0 Fermi2002_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Fermi02 + 31747 1 0 0 Fermi2002_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Fermi02 + 31748 1 0 0 Fermi2002_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Fermi02 + 31749 1 0 0 Fermi2002_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Fermi02 + 31750 1 0 0 Fermi2002_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Fermi02 + 31751 1 0 0 Fermi2002_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Fermi02 + 31752 1 0 0 Fermi2002_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Fermi02 + 31753 1 0 0 Fermi2002_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Fermi02 + 31754 1 0 0 Fermi2002_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Fermi02 + 31755 1 0 0 Fermi2002_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Fermi02 + 31756 1 0 0 Fermi2002_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Fermi02 + 31757 1 0 0 Fermi2002_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Fermi02 + 31758 1 0 0 Fermi2002_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Fermi02 + 31759 1 0 0 Fermi2002_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Fermi02 + 31760 1 0 0 Fermi2002_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Fermi02 + 31761 1 0 0 Fermi2002_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Fermi02 + 31762 1 0 0 Fermi2002_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Fermi02 + 31763 1 0 0 Fermi2002_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Fermi02 + 31764 1 0 0 Fermi2002_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Fermi02 + 31765 1 0 0 Fermi2002_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Fermi02 + 31766 1 0 0 Fermi2002_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Fermi02 + 31767 1 0 0 Fermi2002_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Fermi02 + 31768 1 0 0 Fermi2002_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Fermi02 + 31769 1 0 0 Fermi2002_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Fermi02 + 31770 1 0 0 Fermi2002_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Fermi02 + 31771 1 0 0 Fermi2002_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Fermi02 + 31772 1 0 0 Fermi2002_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Fermi02 + 31773 1 0 0 Fermi2002_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Fermi02 + 31774 1 0 0 Fermi2002_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Fermi02 + 31775 1 0 0 Fermi2002_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Fermi02 + 31776 1 0 0 Fermi2002_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Fermi02 + 31777 1 0 0 Fermi2002_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Fermi02 + 31778 1 0 0 Fermi2002_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Fermi02 + 31779 1 0 0 Fermi2002_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Fermi02 + 31780 1 0 0 Fermi2002_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Fermi02 + 31781 1 0 0 Fermi2002_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Fermi02 + 31782 1 0 0 Fermi2002_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Fermi02 + 31783 1 0 0 Fermi2002_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Fermi02 + 31784 1 0 0 Fermi2002_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Fermi02 + 31785 1 0 0 Fermi2002_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Fermi02 + 31786 1 0 0 Fermi2002_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Fermi02 + 31787 1 0 0 Fermi2002_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Fermi02 + 31788 1 0 0 Fermi2002_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Fermi02 + 31789 1 0 0 Fermi2002_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Fermi02 + 31790 1 0 0 Fermi2002_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Fermi02 + 31791 1 0 0 Fermi2002_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Fermi02 + 31792 1 0 0 Fermi2002_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Fermi02 + 31793 1 0 0 Fermi2002_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Fermi02 + 31794 1 0 0 Fermi2002_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Fermi02 + 31795 1 0 0 Fermi2002_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Fermi02 + 31796 1 0 0 Fermi2002_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Fermi02 + 31797 1 0 0 Fermi2002_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Fermi02 + 31798 1 0 0 Fermi2002_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Fermi02 + 31799 1 0 0 Fermi2002_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Fermi02 + 31800 1 0 0 Fermi2002_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Fermi02 + 31801 1 0 0 Fermi2002_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Fermi02 + 31802 1 0 0 Fermi2002_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Fermi02 + 31803 1 0 0 Fermi2002_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Fermi02 + 31804 1 0 0 Fermi2002_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Fermi02 + 31805 1 0 0 Fermi2002_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Fermi02 + 31806 1 0 0 Fermi2002_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Fermi02 + 31807 1 0 0 Fermi2002_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Fermi02 + 31808 1 0 0 Fermi2002_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Fermi02 + 31809 1 0 0 Fermi2002_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Fermi02 + 31810 1 0 0 Fermi2002_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Fermi02 + 31811 1 0 0 Fermi2002_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Fermi02 + 31812 1 0 0 Fermi2002_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Fermi02 + 31813 1 0 0 Fermi2002_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Fermi02 + 31814 1 0 0 Fermi2002_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Fermi02 + 31815 1 0 0 Fermi2002_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Fermi02 + 31816 1 0 0 Fermi2002_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Fermi02 + 31817 1 0 0 Fermi2002_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Fermi02 + 31818 1 0 0 Fermi2002_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Fermi02 + 31819 1 0 0 Fermi2002_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Fermi02 + 31820 1 0 0 Fermi2002_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Fermi02 + 31821 1 0 0 Fermi2002_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Fermi02 + 31822 1 0 0 Fermi2002_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Fermi02 + 31823 1 0 0 Fermi2002_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Fermi02 + 31824 1 0 0 Fermi2002_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Fermi02 + 31825 1 0 0 Fermi2002_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Fermi02 + 31826 1 0 0 Fermi2002_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Fermi02 + 31827 1 0 0 Fermi2002_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Fermi02 + 31828 1 0 0 Fermi2002_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Fermi02 + 31829 1 0 0 Fermi2002_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Fermi02 + 31830 1 0 0 Fermi2002_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Fermi02 + 31831 1 0 0 Fermi2002_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Fermi02 + 31832 1 0 0 Fermi2002_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Fermi02 + 31833 1 0 0 Fermi2002_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Fermi02 + 31834 1 0 0 Fermi2002_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Fermi02 + 31835 1 0 0 Fermi2002_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Fermi02 + 31836 1 0 0 Fermi2002_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Fermi02 + 31837 1 0 0 Fermi2002_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Fermi02 + 31838 1 0 0 Fermi2002_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Fermi02 + 31839 1 0 0 Fermi2002_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Fermi02 + 31840 1 0 0 Fermi2002_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Fermi02 + 31841 1 0 0 Fermi2002_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Fermi02 + 31842 1 0 0 Fermi2002_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Fermi02 + 31843 1 0 0 Fermi2002_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Fermi02 + 31844 1 0 0 Fermi2002_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Fermi02 + 31845 1 0 0 Fermi2002_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Fermi02 + 31846 1 0 0 Fermi2002_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Fermi02 + 31847 1 0 0 Fermi2002_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Fermi02 + 31848 1 0 0 Fermi2002_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Fermi02 + 31849 1 0 0 Fermi2002_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Fermi02 + 31850 1 0 0 Fermi2002_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Fermi02 + 31851 1 0 0 Fermi2002_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Fermi02 + 31852 1 0 0 Fermi2002_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Fermi02 + 31853 1 0 0 Fermi2002_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Fermi02 + 31854 1 0 0 Fermi2002_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Fermi02 + 31855 1 0 0 Fermi2002_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Fermi02 + 31856 1 0 0 Fermi2002_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Fermi02 + 31857 1 0 0 Fermi2002_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Fermi02 + 31858 1 0 0 Fermi2002_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Fermi02 + 31859 1 0 0 Fermi2002_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Fermi02 + 31860 1 0 0 Fermi2002_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Fermi02 + 31861 1 0 0 Fermi2002_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Fermi02 + 31862 1 0 0 Fermi2002_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Fermi02 + 31863 1 0 0 Fermi2002_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Fermi02 + 31864 1 0 0 Fermi2002_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Fermi02 + 31865 1 0 0 Fermi2002_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Fermi02 + 31866 1 0 0 Fermi2002_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Fermi02 + 31867 1 0 0 Fermi2002_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Fermi02 + 31868 1 0 0 Fermi2002_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Fermi02 + 31869 1 0 0 Fermi2002_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Fermi02 + 31870 1 0 0 Fermi2002_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Fermi02 + 31871 1 0 0 Fermi2002_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Fermi02 + 31872 1 0 0 Fermi2002_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Fermi02 + 31873 1 0 0 Fermi2002_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Fermi02 + 31874 1 0 0 Fermi2002_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Fermi02 + 31875 1 0 0 Fermi2002_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Fermi02 + 31876 1 0 0 Fermi2002_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Fermi02 + 31877 1 0 0 Fermi2002_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Fermi02 + 31878 1 0 0 Fermi2002_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Fermi02 + 31879 1 0 0 Fermi2002_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Fermi02 + 31880 1 0 0 Fermi2002_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Fermi02 + 31881 1 0 0 Fermi2002_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Fermi02 + 31882 1 0 0 Fermi2002_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Fermi02 + 31883 1 0 0 Fermi2002_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Fermi02 + 31884 1 0 0 Fermi2002_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Fermi02 + 31885 1 0 0 Fermi2002_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Fermi02 + 31886 1 0 0 Fermi2002_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Fermi02 + 31887 1 0 0 Fermi2002_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Fermi02 + 31888 1 0 0 Fermi2002_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Fermi02 + 31889 1 0 0 Fermi2002_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Fermi02 + 31890 1 0 0 Fermi2002_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Fermi02 + 31891 1 0 0 Fermi2002_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Fermi02 + 31892 1 0 0 Fermi2002_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Fermi02 + 31893 1 0 0 Fermi2002_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Fermi02 + 31894 1 0 0 Fermi2002_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Fermi02 + 31895 1 0 0 Fermi2002_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Fermi02 + 31896 1 0 0 Fermi2002_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Fermi02 + 31897 1 0 0 Fermi2002_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Fermi02 + 31898 1 0 0 Fermi2002_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Fermi02 + 31899 1 0 0 Fermi2002_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Fermi02 + 31900 1 0 0 Fermi2002_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Fermi02 + 31901 1 0 0 Fermi2002_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Fermi02 + 31902 1 0 0 Fermi2002_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Fermi02 + 31903 1 0 0 Fermi2002_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Fermi02 + 31904 1 0 0 Fermi2002_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Fermi02 + 31905 1 0 0 Fermi2002_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Fermi02 + 31906 1 0 0 Fermi2002_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Fermi02 + 31907 1 0 0 Fermi2002_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Fermi02 + 31908 1 0 0 Fermi2002_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Fermi02 + 31909 1 0 0 Fermi2002_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Fermi02 + 31910 1 0 0 Fermi2002_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Fermi02 + 31911 1 0 0 Fermi2002_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Fermi02 + 31912 1 0 0 Fermi2002_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Fermi02 + 31913 1 0 0 Fermi2002_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Fermi02 + 31914 1 0 0 Fermi2002_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Fermi02 + 31915 1 0 0 Fermi2002_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Fermi02 + 31916 1 0 0 Fermi2002_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Fermi02 + 31917 1 0 0 Fermi2002_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Fermi02 + 31918 1 0 0 Fermi2002_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Fermi02 + 31919 1 0 0 Fermi2002_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Fermi02 + 31920 1 0 0 Fermi2002_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Fermi02 + 31921 1 0 0 Fermi2002_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Fermi02 + 31922 1 0 0 Fermi2002_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Fermi02 + 31923 1 0 0 Fermi2002_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Fermi02 + 31924 1 0 0 Fermi2002_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Fermi02 + 31925 1 0 0 Fermi2002_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Fermi02 + 31926 1 0 0 Fermi2002_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Fermi02 + 31927 1 0 0 Fermi2002_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Fermi02 + 31928 1 0 0 Fermi2002_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Fermi02 + 31929 1 0 0 Fermi2002_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Fermi02 + 31930 1 0 0 Fermi2002_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Fermi02 + 31931 1 0 0 Fermi2002_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Fermi02 + 31932 1 0 0 Fermi2002_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Fermi02 + 31933 1 0 0 Fermi2002_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Fermi02 + 31934 1 0 0 Fermi2002_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Fermi02 + 31935 1 0 0 Fermi2002_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Fermi02 + 31936 1 0 0 Fermi2002_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Fermi02 + 31937 1 0 0 Fermi2002_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Fermi02 + 31938 1 0 0 Fermi2002_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Fermi02 + 31939 1 0 0 Fermi2002_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Fermi02 + 31940 1 0 0 Fermi2002_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Fermi02 + 31941 1 0 0 Fermi2002_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Fermi02 + 31942 1 0 0 Fermi2002_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Fermi02 + 31943 1 0 0 Fermi2002_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Fermi02 + 31944 1 0 0 Fermi2002_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Fermi02 + 31945 1 0 0 Fermi2002_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Fermi02 + 31946 1 0 0 Fermi2002_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Fermi02 + 31947 1 0 0 Fermi2002_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Fermi02 + 31948 1 0 0 Fermi2002_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Fermi02 + 31949 1 0 0 Fermi2002_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Fermi02 + 31950 1 0 0 Fermi2002_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Fermi02 + 31951 1 0 0 Fermi2002_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Fermi02 + 31952 1 0 0 Fermi2002_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Fermi02 + 31953 1 0 0 Fermi2002_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Fermi02 + 31954 1 0 0 Fermi2002_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Fermi02 + 31955 1 0 0 Fermi2002_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Fermi02 + 31956 1 0 0 Fermi2002_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Fermi02 + 31957 1 0 0 Fermi2002_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Fermi02 + 31958 1 0 0 Fermi2002_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Fermi02 + 31959 1 0 0 Fermi2002_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Fermi02 + 31960 1 0 0 Fermi2002_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Fermi02 + 31961 1 0 0 Fermi2002_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Fermi02 + 31962 1 0 0 Fermi2002_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Fermi02 + 31963 1 0 0 Fermi2002_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Fermi02 + 31964 1 0 0 Fermi2002_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Fermi02 + 31965 1 0 0 Fermi2002_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Fermi02 + 31966 1 0 0 Fermi2002_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Fermi02 + 31967 1 0 0 Fermi2002_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Fermi02 + 31968 1 0 0 Fermi2002_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Fermi02 + 31969 1 0 0 Fermi2002_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Fermi02 + 31970 1 0 0 Fermi2002_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Fermi02 + 31971 1 0 0 Fermi2002_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Fermi02 + 31972 1 0 0 Fermi2002_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Fermi02 + 31973 1 0 0 Fermi2002_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Fermi02 + 31974 1 0 0 Fermi2002_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Fermi02 + 31975 1 0 0 Fermi2002_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Fermi02 + 31976 1 0 0 Fermi2002_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Fermi02 + 31977 1 0 0 Fermi2002_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Fermi02 + 31978 1 0 0 Fermi2002_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Fermi02 + 31979 1 0 0 Fermi2002_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Fermi02 + 31980 1 0 0 Fermi2002_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Fermi02 + 31981 1 0 0 Fermi2002_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Fermi02 + 31982 1 0 0 Fermi2002_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Fermi02 + 31983 1 0 0 Fermi2002_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Fermi02 + 31984 1 0 0 Fermi2002_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Fermi02 + 31985 1 0 0 Fermi2002_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Fermi02 + 31986 1 0 0 Fermi2002_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Fermi02 + 31987 1 0 0 Fermi2002_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Fermi02 + 31988 1 0 0 Fermi2002_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Fermi02 + 31989 1 0 0 Fermi2002_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Fermi02 + 31990 1 0 0 Fermi2002_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Fermi02 + 31991 1 0 0 Fermi2002_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Fermi02 + 31992 1 0 0 Fermi2002_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Fermi02 + 31993 1 0 0 Fermi2002_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Fermi02 + 31994 1 0 0 Fermi2002_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Fermi02 + 31995 1 0 0 Fermi2002_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Fermi02 + 31996 1 0 0 Fermi2002_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Fermi02 + 31997 1 0 0 Fermi2002_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Fermi02 + 31998 1 0 0 Fermi2002_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Fermi02 + 31999 1 0 0 Fermi2002_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Fermi02 + 32000 1 0 0 Fermi2002_1000.LHpdf 1000 1. 1.E+10 1.E-06 1. Fermi02 + 40100 1 0 0 Alekhin_100.LHpdf 0 1. 1.E+10 1.E-06 1. Alekhin00 + 40101 1 0 0 Alekhin_100.LHpdf 1 1. 1.E+10 1.E-06 1. Alekhin00 + 40102 1 0 0 Alekhin_100.LHpdf 2 1. 1.E+10 1.E-06 1. Alekhin00 + 40103 1 0 0 Alekhin_100.LHpdf 3 1. 1.E+10 1.E-06 1. Alekhin00 + 40104 1 0 0 Alekhin_100.LHpdf 4 1. 1.E+10 1.E-06 1. Alekhin00 + 40105 1 0 0 Alekhin_100.LHpdf 5 1. 1.E+10 1.E-06 1. Alekhin00 + 40106 1 0 0 Alekhin_100.LHpdf 6 1. 1.E+10 1.E-06 1. Alekhin00 + 40107 1 0 0 Alekhin_100.LHpdf 7 1. 1.E+10 1.E-06 1. Alekhin00 + 40108 1 0 0 Alekhin_100.LHpdf 8 1. 1.E+10 1.E-06 1. Alekhin00 + 40109 1 0 0 Alekhin_100.LHpdf 9 1. 1.E+10 1.E-06 1. Alekhin00 + 40110 1 0 0 Alekhin_100.LHpdf 10 1. 1.E+10 1.E-06 1. Alekhin00 + 40111 1 0 0 Alekhin_100.LHpdf 11 1. 1.E+10 1.E-06 1. Alekhin00 + 40112 1 0 0 Alekhin_100.LHpdf 12 1. 1.E+10 1.E-06 1. Alekhin00 + 40113 1 0 0 Alekhin_100.LHpdf 13 1. 1.E+10 1.E-06 1. Alekhin00 + 40114 1 0 0 Alekhin_100.LHpdf 14 1. 1.E+10 1.E-06 1. Alekhin00 + 40115 1 0 0 Alekhin_100.LHpdf 15 1. 1.E+10 1.E-06 1. Alekhin00 + 40116 1 0 0 Alekhin_100.LHpdf 16 1. 1.E+10 1.E-06 1. Alekhin00 + 40117 1 0 0 Alekhin_100.LHpdf 17 1. 1.E+10 1.E-06 1. Alekhin00 + 40118 1 0 0 Alekhin_100.LHpdf 18 1. 1.E+10 1.E-06 1. Alekhin00 + 40119 1 0 0 Alekhin_100.LHpdf 19 1. 1.E+10 1.E-06 1. Alekhin00 + 40120 1 0 0 Alekhin_100.LHpdf 20 1. 1.E+10 1.E-06 1. Alekhin00 + 40121 1 0 0 Alekhin_100.LHpdf 21 1. 1.E+10 1.E-06 1. Alekhin00 + 40122 1 0 0 Alekhin_100.LHpdf 22 1. 1.E+10 1.E-06 1. Alekhin00 + 40123 1 0 0 Alekhin_100.LHpdf 23 1. 1.E+10 1.E-06 1. Alekhin00 + 40124 1 0 0 Alekhin_100.LHpdf 24 1. 1.E+10 1.E-06 1. Alekhin00 + 40125 1 0 0 Alekhin_100.LHpdf 25 1. 1.E+10 1.E-06 1. Alekhin00 + 40126 1 0 0 Alekhin_100.LHpdf 26 1. 1.E+10 1.E-06 1. Alekhin00 + 40127 1 0 0 Alekhin_100.LHpdf 27 1. 1.E+10 1.E-06 1. Alekhin00 + 40128 1 0 0 Alekhin_100.LHpdf 28 1. 1.E+10 1.E-06 1. Alekhin00 + 40129 1 0 0 Alekhin_100.LHpdf 29 1. 1.E+10 1.E-06 1. Alekhin00 + 40130 1 0 0 Alekhin_100.LHpdf 30 1. 1.E+10 1.E-06 1. Alekhin00 + 40131 1 0 0 Alekhin_100.LHpdf 31 1. 1.E+10 1.E-06 1. Alekhin00 + 40132 1 0 0 Alekhin_100.LHpdf 32 1. 1.E+10 1.E-06 1. Alekhin00 + 40133 1 0 0 Alekhin_100.LHpdf 33 1. 1.E+10 1.E-06 1. Alekhin00 + 40134 1 0 0 Alekhin_100.LHpdf 34 1. 1.E+10 1.E-06 1. Alekhin00 + 40135 1 0 0 Alekhin_100.LHpdf 35 1. 1.E+10 1.E-06 1. Alekhin00 + 40136 1 0 0 Alekhin_100.LHpdf 36 1. 1.E+10 1.E-06 1. Alekhin00 + 40137 1 0 0 Alekhin_100.LHpdf 37 1. 1.E+10 1.E-06 1. Alekhin00 + 40138 1 0 0 Alekhin_100.LHpdf 38 1. 1.E+10 1.E-06 1. Alekhin00 + 40139 1 0 0 Alekhin_100.LHpdf 39 1. 1.E+10 1.E-06 1. Alekhin00 + 40140 1 0 0 Alekhin_100.LHpdf 40 1. 1.E+10 1.E-06 1. Alekhin00 + 40141 1 0 0 Alekhin_100.LHpdf 41 1. 1.E+10 1.E-06 1. Alekhin00 + 40142 1 0 0 Alekhin_100.LHpdf 42 1. 1.E+10 1.E-06 1. Alekhin00 + 40143 1 0 0 Alekhin_100.LHpdf 43 1. 1.E+10 1.E-06 1. Alekhin00 + 40144 1 0 0 Alekhin_100.LHpdf 44 1. 1.E+10 1.E-06 1. Alekhin00 + 40145 1 0 0 Alekhin_100.LHpdf 45 1. 1.E+10 1.E-06 1. Alekhin00 + 40146 1 0 0 Alekhin_100.LHpdf 46 1. 1.E+10 1.E-06 1. Alekhin00 + 40147 1 0 0 Alekhin_100.LHpdf 47 1. 1.E+10 1.E-06 1. Alekhin00 + 40148 1 0 0 Alekhin_100.LHpdf 48 1. 1.E+10 1.E-06 1. Alekhin00 + 40149 1 0 0 Alekhin_100.LHpdf 49 1. 1.E+10 1.E-06 1. Alekhin00 + 40150 1 0 0 Alekhin_100.LHpdf 50 1. 1.E+10 1.E-06 1. Alekhin00 + 40151 1 0 0 Alekhin_100.LHpdf 51 1. 1.E+10 1.E-06 1. Alekhin00 + 40152 1 0 0 Alekhin_100.LHpdf 52 1. 1.E+10 1.E-06 1. Alekhin00 + 40153 1 0 0 Alekhin_100.LHpdf 53 1. 1.E+10 1.E-06 1. Alekhin00 + 40154 1 0 0 Alekhin_100.LHpdf 54 1. 1.E+10 1.E-06 1. Alekhin00 + 40155 1 0 0 Alekhin_100.LHpdf 55 1. 1.E+10 1.E-06 1. Alekhin00 + 40156 1 0 0 Alekhin_100.LHpdf 56 1. 1.E+10 1.E-06 1. Alekhin00 + 40157 1 0 0 Alekhin_100.LHpdf 57 1. 1.E+10 1.E-06 1. Alekhin00 + 40158 1 0 0 Alekhin_100.LHpdf 58 1. 1.E+10 1.E-06 1. Alekhin00 + 40159 1 0 0 Alekhin_100.LHpdf 59 1. 1.E+10 1.E-06 1. Alekhin00 + 40160 1 0 0 Alekhin_100.LHpdf 60 1. 1.E+10 1.E-06 1. Alekhin00 + 40161 1 0 0 Alekhin_100.LHpdf 61 1. 1.E+10 1.E-06 1. Alekhin00 + 40162 1 0 0 Alekhin_100.LHpdf 62 1. 1.E+10 1.E-06 1. Alekhin00 + 40163 1 0 0 Alekhin_100.LHpdf 63 1. 1.E+10 1.E-06 1. Alekhin00 + 40164 1 0 0 Alekhin_100.LHpdf 64 1. 1.E+10 1.E-06 1. Alekhin00 + 40165 1 0 0 Alekhin_100.LHpdf 65 1. 1.E+10 1.E-06 1. Alekhin00 + 40166 1 0 0 Alekhin_100.LHpdf 66 1. 1.E+10 1.E-06 1. Alekhin00 + 40167 1 0 0 Alekhin_100.LHpdf 67 1. 1.E+10 1.E-06 1. Alekhin00 + 40168 1 0 0 Alekhin_100.LHpdf 68 1. 1.E+10 1.E-06 1. Alekhin00 + 40169 1 0 0 Alekhin_100.LHpdf 69 1. 1.E+10 1.E-06 1. Alekhin00 + 40170 1 0 0 Alekhin_100.LHpdf 70 1. 1.E+10 1.E-06 1. Alekhin00 + 40171 1 0 0 Alekhin_100.LHpdf 71 1. 1.E+10 1.E-06 1. Alekhin00 + 40172 1 0 0 Alekhin_100.LHpdf 72 1. 1.E+10 1.E-06 1. Alekhin00 + 40173 1 0 0 Alekhin_100.LHpdf 73 1. 1.E+10 1.E-06 1. Alekhin00 + 40174 1 0 0 Alekhin_100.LHpdf 74 1. 1.E+10 1.E-06 1. Alekhin00 + 40175 1 0 0 Alekhin_100.LHpdf 75 1. 1.E+10 1.E-06 1. Alekhin00 + 40176 1 0 0 Alekhin_100.LHpdf 76 1. 1.E+10 1.E-06 1. Alekhin00 + 40177 1 0 0 Alekhin_100.LHpdf 77 1. 1.E+10 1.E-06 1. Alekhin00 + 40178 1 0 0 Alekhin_100.LHpdf 78 1. 1.E+10 1.E-06 1. Alekhin00 + 40179 1 0 0 Alekhin_100.LHpdf 79 1. 1.E+10 1.E-06 1. Alekhin00 + 40180 1 0 0 Alekhin_100.LHpdf 80 1. 1.E+10 1.E-06 1. Alekhin00 + 40181 1 0 0 Alekhin_100.LHpdf 81 1. 1.E+10 1.E-06 1. Alekhin00 + 40182 1 0 0 Alekhin_100.LHpdf 82 1. 1.E+10 1.E-06 1. Alekhin00 + 40183 1 0 0 Alekhin_100.LHpdf 83 1. 1.E+10 1.E-06 1. Alekhin00 + 40184 1 0 0 Alekhin_100.LHpdf 84 1. 1.E+10 1.E-06 1. Alekhin00 + 40185 1 0 0 Alekhin_100.LHpdf 85 1. 1.E+10 1.E-06 1. Alekhin00 + 40186 1 0 0 Alekhin_100.LHpdf 86 1. 1.E+10 1.E-06 1. Alekhin00 + 40187 1 0 0 Alekhin_100.LHpdf 87 1. 1.E+10 1.E-06 1. Alekhin00 + 40188 1 0 0 Alekhin_100.LHpdf 88 1. 1.E+10 1.E-06 1. Alekhin00 + 40189 1 0 0 Alekhin_100.LHpdf 89 1. 1.E+10 1.E-06 1. Alekhin00 + 40190 1 0 0 Alekhin_100.LHpdf 90 1. 1.E+10 1.E-06 1. Alekhin00 + 40191 1 0 0 Alekhin_100.LHpdf 91 1. 1.E+10 1.E-06 1. Alekhin00 + 40192 1 0 0 Alekhin_100.LHpdf 92 1. 1.E+10 1.E-06 1. Alekhin00 + 40193 1 0 0 Alekhin_100.LHpdf 93 1. 1.E+10 1.E-06 1. Alekhin00 + 40194 1 0 0 Alekhin_100.LHpdf 94 1. 1.E+10 1.E-06 1. Alekhin00 + 40195 1 0 0 Alekhin_100.LHpdf 95 1. 1.E+10 1.E-06 1. Alekhin00 + 40196 1 0 0 Alekhin_100.LHpdf 96 1. 1.E+10 1.E-06 1. Alekhin00 + 40197 1 0 0 Alekhin_100.LHpdf 97 1. 1.E+10 1.E-06 1. Alekhin00 + 40198 1 0 0 Alekhin_100.LHpdf 98 1. 1.E+10 1.E-06 1. Alekhin00 + 40199 1 0 0 Alekhin_100.LHpdf 99 1. 1.E+10 1.E-06 1. Alekhin00 + 40200 1 0 0 Alekhin_100.LHpdf 100 1. 1.E+10 1.E-06 1. Alekhin00. + 40350 1 0 0 a02m_lo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40351 1 0 0 a02m_lo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40352 1 0 0 a02m_lo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40353 1 0 0 a02m_lo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40354 1 0 0 a02m_lo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40355 1 0 0 a02m_lo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40356 1 0 0 a02m_lo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40357 1 0 0 a02m_lo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40358 1 0 0 a02m_lo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40359 1 0 0 a02m_lo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40360 1 0 0 a02m_lo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40361 1 0 0 a02m_lo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40362 1 0 0 a02m_lo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40363 1 0 0 a02m_lo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40364 1 0 0 a02m_lo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40365 1 0 0 a02m_lo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40366 1 0 0 a02m_lo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40367 1 0 0 a02m_lo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(LO) + 40450 1 0 0 a02m_nlo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40451 1 0 0 a02m_nlo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40452 1 0 0 a02m_nlo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40453 1 0 0 a02m_nlo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40454 1 0 0 a02m_nlo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40455 1 0 0 a02m_nlo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40456 1 0 0 a02m_nlo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40457 1 0 0 a02m_nlo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40458 1 0 0 a02m_nlo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40459 1 0 0 a02m_nlo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40460 1 0 0 a02m_nlo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40461 1 0 0 a02m_nlo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40462 1 0 0 a02m_nlo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40463 1 0 0 a02m_nlo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40464 1 0 0 a02m_nlo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40465 1 0 0 a02m_nlo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40466 1 0 0 a02m_nlo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40467 1 0 0 a02m_nlo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(NLO) + 40550 1 0 0 a02m_nnlo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40551 1 0 0 a02m_nnlo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40552 1 0 0 a02m_nnlo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40553 1 0 0 a02m_nnlo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40554 1 0 0 a02m_nnlo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40555 1 0 0 a02m_nnlo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40556 1 0 0 a02m_nnlo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40557 1 0 0 a02m_nnlo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40558 1 0 0 a02m_nnlo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40559 1 0 0 a02m_nnlo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40560 1 0 0 a02m_nnlo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40561 1 0 0 a02m_nnlo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40562 1 0 0 a02m_nnlo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40563 1 0 0 a02m_nnlo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40564 1 0 0 a02m_nnlo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40565 1 0 0 a02m_nnlo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40566 1 0 0 a02m_nnlo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 40567 1 0 0 a02m_nnlo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) + 41000 1 0 0 Alekhin_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Alekhin00 + 41001 1 0 0 Alekhin_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Alekhin00 + 41002 1 0 0 Alekhin_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Alekhin00 + 41003 1 0 0 Alekhin_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Alekhin00 + 41004 1 0 0 Alekhin_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Alekhin00 + 41005 1 0 0 Alekhin_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Alekhin00 + 41006 1 0 0 Alekhin_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Alekhin00 + 41007 1 0 0 Alekhin_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Alekhin00 + 41008 1 0 0 Alekhin_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Alekhin00 + 41009 1 0 0 Alekhin_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Alekhin00 + 41010 1 0 0 Alekhin_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Alekhin00 + 41011 1 0 0 Alekhin_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Alekhin00 + 41012 1 0 0 Alekhin_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Alekhin00 + 41013 1 0 0 Alekhin_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Alekhin00 + 41014 1 0 0 Alekhin_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Alekhin00 + 41015 1 0 0 Alekhin_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Alekhin00 + 41016 1 0 0 Alekhin_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Alekhin00 + 41017 1 0 0 Alekhin_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Alekhin00 + 41018 1 0 0 Alekhin_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Alekhin00 + 41019 1 0 0 Alekhin_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Alekhin00 + 41020 1 0 0 Alekhin_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Alekhin00 + 41021 1 0 0 Alekhin_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Alekhin00 + 41022 1 0 0 Alekhin_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Alekhin00 + 41023 1 0 0 Alekhin_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Alekhin00 + 41024 1 0 0 Alekhin_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Alekhin00 + 41025 1 0 0 Alekhin_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Alekhin00 + 41026 1 0 0 Alekhin_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Alekhin00 + 41027 1 0 0 Alekhin_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Alekhin00 + 41028 1 0 0 Alekhin_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Alekhin00 + 41029 1 0 0 Alekhin_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Alekhin00 + 41030 1 0 0 Alekhin_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Alekhin00 + 41031 1 0 0 Alekhin_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Alekhin00 + 41032 1 0 0 Alekhin_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Alekhin00 + 41033 1 0 0 Alekhin_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Alekhin00 + 41034 1 0 0 Alekhin_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Alekhin00 + 41035 1 0 0 Alekhin_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Alekhin00 + 41036 1 0 0 Alekhin_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Alekhin00 + 41037 1 0 0 Alekhin_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Alekhin00 + 41038 1 0 0 Alekhin_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Alekhin00 + 41039 1 0 0 Alekhin_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Alekhin00 + 41040 1 0 0 Alekhin_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Alekhin00 + 41041 1 0 0 Alekhin_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Alekhin00 + 41042 1 0 0 Alekhin_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Alekhin00 + 41043 1 0 0 Alekhin_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Alekhin00 + 41044 1 0 0 Alekhin_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Alekhin00 + 41045 1 0 0 Alekhin_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Alekhin00 + 41046 1 0 0 Alekhin_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Alekhin00 + 41047 1 0 0 Alekhin_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Alekhin00 + 41048 1 0 0 Alekhin_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Alekhin00 + 41049 1 0 0 Alekhin_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Alekhin00 + 41050 1 0 0 Alekhin_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Alekhin00 + 41051 1 0 0 Alekhin_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Alekhin00 + 41052 1 0 0 Alekhin_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Alekhin00 + 41053 1 0 0 Alekhin_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Alekhin00 + 41054 1 0 0 Alekhin_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Alekhin00 + 41055 1 0 0 Alekhin_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Alekhin00 + 41056 1 0 0 Alekhin_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Alekhin00 + 41057 1 0 0 Alekhin_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Alekhin00 + 41058 1 0 0 Alekhin_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Alekhin00 + 41059 1 0 0 Alekhin_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Alekhin00 + 41060 1 0 0 Alekhin_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Alekhin00 + 41061 1 0 0 Alekhin_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Alekhin00 + 41062 1 0 0 Alekhin_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Alekhin00 + 41063 1 0 0 Alekhin_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Alekhin00 + 41064 1 0 0 Alekhin_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Alekhin00 + 41065 1 0 0 Alekhin_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Alekhin00 + 41066 1 0 0 Alekhin_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Alekhin00 + 41067 1 0 0 Alekhin_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Alekhin00 + 41068 1 0 0 Alekhin_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Alekhin00 + 41069 1 0 0 Alekhin_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Alekhin00 + 41070 1 0 0 Alekhin_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Alekhin00 + 41071 1 0 0 Alekhin_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Alekhin00 + 41072 1 0 0 Alekhin_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Alekhin00 + 41073 1 0 0 Alekhin_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Alekhin00 + 41074 1 0 0 Alekhin_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Alekhin00 + 41075 1 0 0 Alekhin_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Alekhin00 + 41076 1 0 0 Alekhin_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Alekhin00 + 41077 1 0 0 Alekhin_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Alekhin00 + 41078 1 0 0 Alekhin_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Alekhin00 + 41079 1 0 0 Alekhin_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Alekhin00 + 41080 1 0 0 Alekhin_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Alekhin00 + 41081 1 0 0 Alekhin_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Alekhin00 + 41082 1 0 0 Alekhin_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Alekhin00 + 41083 1 0 0 Alekhin_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Alekhin00 + 41084 1 0 0 Alekhin_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Alekhin00 + 41085 1 0 0 Alekhin_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Alekhin00 + 41086 1 0 0 Alekhin_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Alekhin00 + 41087 1 0 0 Alekhin_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Alekhin00 + 41088 1 0 0 Alekhin_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Alekhin00 + 41089 1 0 0 Alekhin_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Alekhin00 + 41090 1 0 0 Alekhin_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Alekhin00 + 41091 1 0 0 Alekhin_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Alekhin00 + 41092 1 0 0 Alekhin_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Alekhin00 + 41093 1 0 0 Alekhin_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Alekhin00 + 41094 1 0 0 Alekhin_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Alekhin00 + 41095 1 0 0 Alekhin_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Alekhin00 + 41096 1 0 0 Alekhin_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Alekhin00 + 41097 1 0 0 Alekhin_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Alekhin00 + 41098 1 0 0 Alekhin_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Alekhin00 + 41099 1 0 0 Alekhin_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Alekhin00 + 41100 1 0 0 Alekhin_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Alekhin00 + 41101 1 0 0 Alekhin_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Alekhin00 + 41102 1 0 0 Alekhin_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Alekhin00 + 41103 1 0 0 Alekhin_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Alekhin00 + 41104 1 0 0 Alekhin_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Alekhin00 + 41105 1 0 0 Alekhin_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Alekhin00 + 41106 1 0 0 Alekhin_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Alekhin00 + 41107 1 0 0 Alekhin_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Alekhin00 + 41108 1 0 0 Alekhin_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Alekhin00 + 41109 1 0 0 Alekhin_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Alekhin00 + 41110 1 0 0 Alekhin_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Alekhin00 + 41111 1 0 0 Alekhin_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Alekhin00 + 41112 1 0 0 Alekhin_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Alekhin00 + 41113 1 0 0 Alekhin_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Alekhin00 + 41114 1 0 0 Alekhin_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Alekhin00 + 41115 1 0 0 Alekhin_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Alekhin00 + 41116 1 0 0 Alekhin_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Alekhin00 + 41117 1 0 0 Alekhin_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Alekhin00 + 41118 1 0 0 Alekhin_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Alekhin00 + 41119 1 0 0 Alekhin_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Alekhin00 + 41120 1 0 0 Alekhin_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Alekhin00 + 41121 1 0 0 Alekhin_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Alekhin00 + 41122 1 0 0 Alekhin_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Alekhin00 + 41123 1 0 0 Alekhin_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Alekhin00 + 41124 1 0 0 Alekhin_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Alekhin00 + 41125 1 0 0 Alekhin_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Alekhin00 + 41126 1 0 0 Alekhin_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Alekhin00 + 41127 1 0 0 Alekhin_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Alekhin00 + 41128 1 0 0 Alekhin_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Alekhin00 + 41129 1 0 0 Alekhin_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Alekhin00 + 41130 1 0 0 Alekhin_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Alekhin00 + 41131 1 0 0 Alekhin_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Alekhin00 + 41132 1 0 0 Alekhin_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Alekhin00 + 41133 1 0 0 Alekhin_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Alekhin00 + 41134 1 0 0 Alekhin_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Alekhin00 + 41135 1 0 0 Alekhin_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Alekhin00 + 41136 1 0 0 Alekhin_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Alekhin00 + 41137 1 0 0 Alekhin_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Alekhin00 + 41138 1 0 0 Alekhin_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Alekhin00 + 41139 1 0 0 Alekhin_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Alekhin00 + 41140 1 0 0 Alekhin_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Alekhin00 + 41141 1 0 0 Alekhin_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Alekhin00 + 41142 1 0 0 Alekhin_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Alekhin00 + 41143 1 0 0 Alekhin_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Alekhin00 + 41144 1 0 0 Alekhin_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Alekhin00 + 41145 1 0 0 Alekhin_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Alekhin00 + 41146 1 0 0 Alekhin_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Alekhin00 + 41147 1 0 0 Alekhin_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Alekhin00 + 41148 1 0 0 Alekhin_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Alekhin00 + 41149 1 0 0 Alekhin_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Alekhin00 + 41150 1 0 0 Alekhin_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Alekhin00 + 41151 1 0 0 Alekhin_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Alekhin00 + 41152 1 0 0 Alekhin_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Alekhin00 + 41153 1 0 0 Alekhin_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Alekhin00 + 41154 1 0 0 Alekhin_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Alekhin00 + 41155 1 0 0 Alekhin_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Alekhin00 + 41156 1 0 0 Alekhin_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Alekhin00 + 41157 1 0 0 Alekhin_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Alekhin00 + 41158 1 0 0 Alekhin_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Alekhin00 + 41159 1 0 0 Alekhin_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Alekhin00 + 41160 1 0 0 Alekhin_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Alekhin00 + 41161 1 0 0 Alekhin_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Alekhin00 + 41162 1 0 0 Alekhin_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Alekhin00 + 41163 1 0 0 Alekhin_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Alekhin00 + 41164 1 0 0 Alekhin_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Alekhin00 + 41165 1 0 0 Alekhin_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Alekhin00 + 41166 1 0 0 Alekhin_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Alekhin00 + 41167 1 0 0 Alekhin_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Alekhin00 + 41168 1 0 0 Alekhin_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Alekhin00 + 41169 1 0 0 Alekhin_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Alekhin00 + 41170 1 0 0 Alekhin_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Alekhin00 + 41171 1 0 0 Alekhin_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Alekhin00 + 41172 1 0 0 Alekhin_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Alekhin00 + 41173 1 0 0 Alekhin_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Alekhin00 + 41174 1 0 0 Alekhin_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Alekhin00 + 41175 1 0 0 Alekhin_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Alekhin00 + 41176 1 0 0 Alekhin_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Alekhin00 + 41177 1 0 0 Alekhin_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Alekhin00 + 41178 1 0 0 Alekhin_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Alekhin00 + 41179 1 0 0 Alekhin_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Alekhin00 + 41180 1 0 0 Alekhin_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Alekhin00 + 41181 1 0 0 Alekhin_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Alekhin00 + 41182 1 0 0 Alekhin_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Alekhin00 + 41183 1 0 0 Alekhin_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Alekhin00 + 41184 1 0 0 Alekhin_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Alekhin00 + 41185 1 0 0 Alekhin_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Alekhin00 + 41186 1 0 0 Alekhin_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Alekhin00 + 41187 1 0 0 Alekhin_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Alekhin00 + 41188 1 0 0 Alekhin_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Alekhin00 + 41189 1 0 0 Alekhin_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Alekhin00 + 41190 1 0 0 Alekhin_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Alekhin00 + 41191 1 0 0 Alekhin_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Alekhin00 + 41192 1 0 0 Alekhin_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Alekhin00 + 41193 1 0 0 Alekhin_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Alekhin00 + 41194 1 0 0 Alekhin_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Alekhin00 + 41195 1 0 0 Alekhin_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Alekhin00 + 41196 1 0 0 Alekhin_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Alekhin00 + 41197 1 0 0 Alekhin_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Alekhin00 + 41198 1 0 0 Alekhin_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Alekhin00 + 41199 1 0 0 Alekhin_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Alekhin00 + 41200 1 0 0 Alekhin_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Alekhin00 + 41201 1 0 0 Alekhin_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Alekhin00 + 41202 1 0 0 Alekhin_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Alekhin00 + 41203 1 0 0 Alekhin_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Alekhin00 + 41204 1 0 0 Alekhin_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Alekhin00 + 41205 1 0 0 Alekhin_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Alekhin00 + 41206 1 0 0 Alekhin_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Alekhin00 + 41207 1 0 0 Alekhin_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Alekhin00 + 41208 1 0 0 Alekhin_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Alekhin00 + 41209 1 0 0 Alekhin_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Alekhin00 + 41210 1 0 0 Alekhin_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Alekhin00 + 41211 1 0 0 Alekhin_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Alekhin00 + 41212 1 0 0 Alekhin_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Alekhin00 + 41213 1 0 0 Alekhin_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Alekhin00 + 41214 1 0 0 Alekhin_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Alekhin00 + 41215 1 0 0 Alekhin_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Alekhin00 + 41216 1 0 0 Alekhin_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Alekhin00 + 41217 1 0 0 Alekhin_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Alekhin00 + 41218 1 0 0 Alekhin_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Alekhin00 + 41219 1 0 0 Alekhin_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Alekhin00 + 41220 1 0 0 Alekhin_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Alekhin00 + 41221 1 0 0 Alekhin_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Alekhin00 + 41222 1 0 0 Alekhin_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Alekhin00 + 41223 1 0 0 Alekhin_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Alekhin00 + 41224 1 0 0 Alekhin_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Alekhin00 + 41225 1 0 0 Alekhin_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Alekhin00 + 41226 1 0 0 Alekhin_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Alekhin00 + 41227 1 0 0 Alekhin_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Alekhin00 + 41228 1 0 0 Alekhin_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Alekhin00 + 41229 1 0 0 Alekhin_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Alekhin00 + 41230 1 0 0 Alekhin_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Alekhin00 + 41231 1 0 0 Alekhin_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Alekhin00 + 41232 1 0 0 Alekhin_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Alekhin00 + 41233 1 0 0 Alekhin_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Alekhin00 + 41234 1 0 0 Alekhin_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Alekhin00 + 41235 1 0 0 Alekhin_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Alekhin00 + 41236 1 0 0 Alekhin_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Alekhin00 + 41237 1 0 0 Alekhin_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Alekhin00 + 41238 1 0 0 Alekhin_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Alekhin00 + 41239 1 0 0 Alekhin_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Alekhin00 + 41240 1 0 0 Alekhin_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Alekhin00 + 41241 1 0 0 Alekhin_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Alekhin00 + 41242 1 0 0 Alekhin_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Alekhin00 + 41243 1 0 0 Alekhin_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Alekhin00 + 41244 1 0 0 Alekhin_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Alekhin00 + 41245 1 0 0 Alekhin_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Alekhin00 + 41246 1 0 0 Alekhin_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Alekhin00 + 41247 1 0 0 Alekhin_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Alekhin00 + 41248 1 0 0 Alekhin_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Alekhin00 + 41249 1 0 0 Alekhin_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Alekhin00 + 41250 1 0 0 Alekhin_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Alekhin00 + 41251 1 0 0 Alekhin_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Alekhin00 + 41252 1 0 0 Alekhin_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Alekhin00 + 41253 1 0 0 Alekhin_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Alekhin00 + 41254 1 0 0 Alekhin_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Alekhin00 + 41255 1 0 0 Alekhin_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Alekhin00 + 41256 1 0 0 Alekhin_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Alekhin00 + 41257 1 0 0 Alekhin_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Alekhin00 + 41258 1 0 0 Alekhin_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Alekhin00 + 41259 1 0 0 Alekhin_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Alekhin00 + 41260 1 0 0 Alekhin_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Alekhin00 + 41261 1 0 0 Alekhin_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Alekhin00 + 41262 1 0 0 Alekhin_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Alekhin00 + 41263 1 0 0 Alekhin_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Alekhin00 + 41264 1 0 0 Alekhin_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Alekhin00 + 41265 1 0 0 Alekhin_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Alekhin00 + 41266 1 0 0 Alekhin_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Alekhin00 + 41267 1 0 0 Alekhin_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Alekhin00 + 41268 1 0 0 Alekhin_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Alekhin00 + 41269 1 0 0 Alekhin_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Alekhin00 + 41270 1 0 0 Alekhin_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Alekhin00 + 41271 1 0 0 Alekhin_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Alekhin00 + 41272 1 0 0 Alekhin_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Alekhin00 + 41273 1 0 0 Alekhin_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Alekhin00 + 41274 1 0 0 Alekhin_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Alekhin00 + 41275 1 0 0 Alekhin_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Alekhin00 + 41276 1 0 0 Alekhin_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Alekhin00 + 41277 1 0 0 Alekhin_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Alekhin00 + 41278 1 0 0 Alekhin_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Alekhin00 + 41279 1 0 0 Alekhin_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Alekhin00 + 41280 1 0 0 Alekhin_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Alekhin00 + 41281 1 0 0 Alekhin_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Alekhin00 + 41282 1 0 0 Alekhin_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Alekhin00 + 41283 1 0 0 Alekhin_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Alekhin00 + 41284 1 0 0 Alekhin_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Alekhin00 + 41285 1 0 0 Alekhin_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Alekhin00 + 41286 1 0 0 Alekhin_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Alekhin00 + 41287 1 0 0 Alekhin_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Alekhin00 + 41288 1 0 0 Alekhin_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Alekhin00 + 41289 1 0 0 Alekhin_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Alekhin00 + 41290 1 0 0 Alekhin_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Alekhin00 + 41291 1 0 0 Alekhin_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Alekhin00 + 41292 1 0 0 Alekhin_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Alekhin00 + 41293 1 0 0 Alekhin_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Alekhin00 + 41294 1 0 0 Alekhin_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Alekhin00 + 41295 1 0 0 Alekhin_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Alekhin00 + 41296 1 0 0 Alekhin_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Alekhin00 + 41297 1 0 0 Alekhin_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Alekhin00 + 41298 1 0 0 Alekhin_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Alekhin00 + 41299 1 0 0 Alekhin_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Alekhin00 + 41300 1 0 0 Alekhin_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Alekhin00 + 41301 1 0 0 Alekhin_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Alekhin00 + 41302 1 0 0 Alekhin_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Alekhin00 + 41303 1 0 0 Alekhin_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Alekhin00 + 41304 1 0 0 Alekhin_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Alekhin00 + 41305 1 0 0 Alekhin_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Alekhin00 + 41306 1 0 0 Alekhin_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Alekhin00 + 41307 1 0 0 Alekhin_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Alekhin00 + 41308 1 0 0 Alekhin_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Alekhin00 + 41309 1 0 0 Alekhin_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Alekhin00 + 41310 1 0 0 Alekhin_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Alekhin00 + 41311 1 0 0 Alekhin_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Alekhin00 + 41312 1 0 0 Alekhin_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Alekhin00 + 41313 1 0 0 Alekhin_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Alekhin00 + 41314 1 0 0 Alekhin_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Alekhin00 + 41315 1 0 0 Alekhin_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Alekhin00 + 41316 1 0 0 Alekhin_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Alekhin00 + 41317 1 0 0 Alekhin_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Alekhin00 + 41318 1 0 0 Alekhin_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Alekhin00 + 41319 1 0 0 Alekhin_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Alekhin00 + 41320 1 0 0 Alekhin_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Alekhin00 + 41321 1 0 0 Alekhin_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Alekhin00 + 41322 1 0 0 Alekhin_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Alekhin00 + 41323 1 0 0 Alekhin_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Alekhin00 + 41324 1 0 0 Alekhin_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Alekhin00 + 41325 1 0 0 Alekhin_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Alekhin00 + 41326 1 0 0 Alekhin_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Alekhin00 + 41327 1 0 0 Alekhin_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Alekhin00 + 41328 1 0 0 Alekhin_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Alekhin00 + 41329 1 0 0 Alekhin_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Alekhin00 + 41330 1 0 0 Alekhin_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Alekhin00 + 41331 1 0 0 Alekhin_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Alekhin00 + 41332 1 0 0 Alekhin_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Alekhin00 + 41333 1 0 0 Alekhin_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Alekhin00 + 41334 1 0 0 Alekhin_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Alekhin00 + 41335 1 0 0 Alekhin_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Alekhin00 + 41336 1 0 0 Alekhin_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Alekhin00 + 41337 1 0 0 Alekhin_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Alekhin00 + 41338 1 0 0 Alekhin_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Alekhin00 + 41339 1 0 0 Alekhin_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Alekhin00 + 41340 1 0 0 Alekhin_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Alekhin00 + 41341 1 0 0 Alekhin_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Alekhin00 + 41342 1 0 0 Alekhin_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Alekhin00 + 41343 1 0 0 Alekhin_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Alekhin00 + 41344 1 0 0 Alekhin_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Alekhin00 + 41345 1 0 0 Alekhin_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Alekhin00 + 41346 1 0 0 Alekhin_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Alekhin00 + 41347 1 0 0 Alekhin_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Alekhin00 + 41348 1 0 0 Alekhin_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Alekhin00 + 41349 1 0 0 Alekhin_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Alekhin00 + 41350 1 0 0 Alekhin_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Alekhin00 + 41351 1 0 0 Alekhin_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Alekhin00 + 41352 1 0 0 Alekhin_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Alekhin00 + 41353 1 0 0 Alekhin_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Alekhin00 + 41354 1 0 0 Alekhin_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Alekhin00 + 41355 1 0 0 Alekhin_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Alekhin00 + 41356 1 0 0 Alekhin_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Alekhin00 + 41357 1 0 0 Alekhin_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Alekhin00 + 41358 1 0 0 Alekhin_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Alekhin00 + 41359 1 0 0 Alekhin_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Alekhin00 + 41360 1 0 0 Alekhin_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Alekhin00 + 41361 1 0 0 Alekhin_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Alekhin00 + 41362 1 0 0 Alekhin_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Alekhin00 + 41363 1 0 0 Alekhin_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Alekhin00 + 41364 1 0 0 Alekhin_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Alekhin00 + 41365 1 0 0 Alekhin_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Alekhin00 + 41366 1 0 0 Alekhin_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Alekhin00 + 41367 1 0 0 Alekhin_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Alekhin00 + 41368 1 0 0 Alekhin_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Alekhin00 + 41369 1 0 0 Alekhin_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Alekhin00 + 41370 1 0 0 Alekhin_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Alekhin00 + 41371 1 0 0 Alekhin_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Alekhin00 + 41372 1 0 0 Alekhin_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Alekhin00 + 41373 1 0 0 Alekhin_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Alekhin00 + 41374 1 0 0 Alekhin_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Alekhin00 + 41375 1 0 0 Alekhin_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Alekhin00 + 41376 1 0 0 Alekhin_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Alekhin00 + 41377 1 0 0 Alekhin_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Alekhin00 + 41378 1 0 0 Alekhin_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Alekhin00 + 41379 1 0 0 Alekhin_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Alekhin00 + 41380 1 0 0 Alekhin_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Alekhin00 + 41381 1 0 0 Alekhin_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Alekhin00 + 41382 1 0 0 Alekhin_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Alekhin00 + 41383 1 0 0 Alekhin_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Alekhin00 + 41384 1 0 0 Alekhin_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Alekhin00 + 41385 1 0 0 Alekhin_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Alekhin00 + 41386 1 0 0 Alekhin_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Alekhin00 + 41387 1 0 0 Alekhin_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Alekhin00 + 41388 1 0 0 Alekhin_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Alekhin00 + 41389 1 0 0 Alekhin_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Alekhin00 + 41390 1 0 0 Alekhin_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Alekhin00 + 41391 1 0 0 Alekhin_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Alekhin00 + 41392 1 0 0 Alekhin_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Alekhin00 + 41393 1 0 0 Alekhin_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Alekhin00 + 41394 1 0 0 Alekhin_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Alekhin00 + 41395 1 0 0 Alekhin_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Alekhin00 + 41396 1 0 0 Alekhin_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Alekhin00 + 41397 1 0 0 Alekhin_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Alekhin00 + 41398 1 0 0 Alekhin_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Alekhin00 + 41399 1 0 0 Alekhin_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Alekhin00 + 41400 1 0 0 Alekhin_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Alekhin00 + 41401 1 0 0 Alekhin_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Alekhin00 + 41402 1 0 0 Alekhin_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Alekhin00 + 41403 1 0 0 Alekhin_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Alekhin00 + 41404 1 0 0 Alekhin_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Alekhin00 + 41405 1 0 0 Alekhin_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Alekhin00 + 41406 1 0 0 Alekhin_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Alekhin00 + 41407 1 0 0 Alekhin_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Alekhin00 + 41408 1 0 0 Alekhin_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Alekhin00 + 41409 1 0 0 Alekhin_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Alekhin00 + 41410 1 0 0 Alekhin_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Alekhin00 + 41411 1 0 0 Alekhin_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Alekhin00 + 41412 1 0 0 Alekhin_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Alekhin00 + 41413 1 0 0 Alekhin_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Alekhin00 + 41414 1 0 0 Alekhin_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Alekhin00 + 41415 1 0 0 Alekhin_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Alekhin00 + 41416 1 0 0 Alekhin_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Alekhin00 + 41417 1 0 0 Alekhin_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Alekhin00 + 41418 1 0 0 Alekhin_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Alekhin00 + 41419 1 0 0 Alekhin_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Alekhin00 + 41420 1 0 0 Alekhin_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Alekhin00 + 41421 1 0 0 Alekhin_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Alekhin00 + 41422 1 0 0 Alekhin_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Alekhin00 + 41423 1 0 0 Alekhin_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Alekhin00 + 41424 1 0 0 Alekhin_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Alekhin00 + 41425 1 0 0 Alekhin_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Alekhin00 + 41426 1 0 0 Alekhin_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Alekhin00 + 41427 1 0 0 Alekhin_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Alekhin00 + 41428 1 0 0 Alekhin_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Alekhin00 + 41429 1 0 0 Alekhin_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Alekhin00 + 41430 1 0 0 Alekhin_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Alekhin00 + 41431 1 0 0 Alekhin_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Alekhin00 + 41432 1 0 0 Alekhin_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Alekhin00 + 41433 1 0 0 Alekhin_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Alekhin00 + 41434 1 0 0 Alekhin_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Alekhin00 + 41435 1 0 0 Alekhin_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Alekhin00 + 41436 1 0 0 Alekhin_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Alekhin00 + 41437 1 0 0 Alekhin_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Alekhin00 + 41438 1 0 0 Alekhin_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Alekhin00 + 41439 1 0 0 Alekhin_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Alekhin00 + 41440 1 0 0 Alekhin_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Alekhin00 + 41441 1 0 0 Alekhin_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Alekhin00 + 41442 1 0 0 Alekhin_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Alekhin00 + 41443 1 0 0 Alekhin_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Alekhin00 + 41444 1 0 0 Alekhin_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Alekhin00 + 41445 1 0 0 Alekhin_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Alekhin00 + 41446 1 0 0 Alekhin_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Alekhin00 + 41447 1 0 0 Alekhin_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Alekhin00 + 41448 1 0 0 Alekhin_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Alekhin00 + 41449 1 0 0 Alekhin_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Alekhin00 + 41450 1 0 0 Alekhin_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Alekhin00 + 41451 1 0 0 Alekhin_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Alekhin00 + 41452 1 0 0 Alekhin_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Alekhin00 + 41453 1 0 0 Alekhin_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Alekhin00 + 41454 1 0 0 Alekhin_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Alekhin00 + 41455 1 0 0 Alekhin_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Alekhin00 + 41456 1 0 0 Alekhin_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Alekhin00 + 41457 1 0 0 Alekhin_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Alekhin00 + 41458 1 0 0 Alekhin_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Alekhin00 + 41459 1 0 0 Alekhin_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Alekhin00 + 41460 1 0 0 Alekhin_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Alekhin00 + 41461 1 0 0 Alekhin_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Alekhin00 + 41462 1 0 0 Alekhin_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Alekhin00 + 41463 1 0 0 Alekhin_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Alekhin00 + 41464 1 0 0 Alekhin_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Alekhin00 + 41465 1 0 0 Alekhin_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Alekhin00 + 41466 1 0 0 Alekhin_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Alekhin00 + 41467 1 0 0 Alekhin_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Alekhin00 + 41468 1 0 0 Alekhin_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Alekhin00 + 41469 1 0 0 Alekhin_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Alekhin00 + 41470 1 0 0 Alekhin_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Alekhin00 + 41471 1 0 0 Alekhin_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Alekhin00 + 41472 1 0 0 Alekhin_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Alekhin00 + 41473 1 0 0 Alekhin_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Alekhin00 + 41474 1 0 0 Alekhin_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Alekhin00 + 41475 1 0 0 Alekhin_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Alekhin00 + 41476 1 0 0 Alekhin_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Alekhin00 + 41477 1 0 0 Alekhin_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Alekhin00 + 41478 1 0 0 Alekhin_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Alekhin00 + 41479 1 0 0 Alekhin_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Alekhin00 + 41480 1 0 0 Alekhin_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Alekhin00 + 41481 1 0 0 Alekhin_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Alekhin00 + 41482 1 0 0 Alekhin_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Alekhin00 + 41483 1 0 0 Alekhin_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Alekhin00 + 41484 1 0 0 Alekhin_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Alekhin00 + 41485 1 0 0 Alekhin_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Alekhin00 + 41486 1 0 0 Alekhin_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Alekhin00 + 41487 1 0 0 Alekhin_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Alekhin00 + 41488 1 0 0 Alekhin_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Alekhin00 + 41489 1 0 0 Alekhin_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Alekhin00 + 41490 1 0 0 Alekhin_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Alekhin00 + 41491 1 0 0 Alekhin_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Alekhin00 + 41492 1 0 0 Alekhin_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Alekhin00 + 41493 1 0 0 Alekhin_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Alekhin00 + 41494 1 0 0 Alekhin_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Alekhin00 + 41495 1 0 0 Alekhin_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Alekhin00 + 41496 1 0 0 Alekhin_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Alekhin00 + 41497 1 0 0 Alekhin_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Alekhin00 + 41498 1 0 0 Alekhin_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Alekhin00 + 41499 1 0 0 Alekhin_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Alekhin00 + 41500 1 0 0 Alekhin_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Alekhin00 + 41501 1 0 0 Alekhin_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Alekhin00 + 41502 1 0 0 Alekhin_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Alekhin00 + 41503 1 0 0 Alekhin_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Alekhin00 + 41504 1 0 0 Alekhin_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Alekhin00 + 41505 1 0 0 Alekhin_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Alekhin00 + 41506 1 0 0 Alekhin_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Alekhin00 + 41507 1 0 0 Alekhin_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Alekhin00 + 41508 1 0 0 Alekhin_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Alekhin00 + 41509 1 0 0 Alekhin_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Alekhin00 + 41510 1 0 0 Alekhin_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Alekhin00 + 41511 1 0 0 Alekhin_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Alekhin00 + 41512 1 0 0 Alekhin_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Alekhin00 + 41513 1 0 0 Alekhin_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Alekhin00 + 41514 1 0 0 Alekhin_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Alekhin00 + 41515 1 0 0 Alekhin_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Alekhin00 + 41516 1 0 0 Alekhin_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Alekhin00 + 41517 1 0 0 Alekhin_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Alekhin00 + 41518 1 0 0 Alekhin_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Alekhin00 + 41519 1 0 0 Alekhin_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Alekhin00 + 41520 1 0 0 Alekhin_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Alekhin00 + 41521 1 0 0 Alekhin_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Alekhin00 + 41522 1 0 0 Alekhin_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Alekhin00 + 41523 1 0 0 Alekhin_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Alekhin00 + 41524 1 0 0 Alekhin_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Alekhin00 + 41525 1 0 0 Alekhin_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Alekhin00 + 41526 1 0 0 Alekhin_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Alekhin00 + 41527 1 0 0 Alekhin_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Alekhin00 + 41528 1 0 0 Alekhin_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Alekhin00 + 41529 1 0 0 Alekhin_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Alekhin00 + 41530 1 0 0 Alekhin_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Alekhin00 + 41531 1 0 0 Alekhin_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Alekhin00 + 41532 1 0 0 Alekhin_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Alekhin00 + 41533 1 0 0 Alekhin_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Alekhin00 + 41534 1 0 0 Alekhin_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Alekhin00 + 41535 1 0 0 Alekhin_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Alekhin00 + 41536 1 0 0 Alekhin_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Alekhin00 + 41537 1 0 0 Alekhin_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Alekhin00 + 41538 1 0 0 Alekhin_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Alekhin00 + 41539 1 0 0 Alekhin_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Alekhin00 + 41540 1 0 0 Alekhin_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Alekhin00 + 41541 1 0 0 Alekhin_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Alekhin00 + 41542 1 0 0 Alekhin_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Alekhin00 + 41543 1 0 0 Alekhin_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Alekhin00 + 41544 1 0 0 Alekhin_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Alekhin00 + 41545 1 0 0 Alekhin_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Alekhin00 + 41546 1 0 0 Alekhin_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Alekhin00 + 41547 1 0 0 Alekhin_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Alekhin00 + 41548 1 0 0 Alekhin_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Alekhin00 + 41549 1 0 0 Alekhin_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Alekhin00 + 41550 1 0 0 Alekhin_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Alekhin00 + 41551 1 0 0 Alekhin_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Alekhin00 + 41552 1 0 0 Alekhin_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Alekhin00 + 41553 1 0 0 Alekhin_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Alekhin00 + 41554 1 0 0 Alekhin_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Alekhin00 + 41555 1 0 0 Alekhin_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Alekhin00 + 41556 1 0 0 Alekhin_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Alekhin00 + 41557 1 0 0 Alekhin_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Alekhin00 + 41558 1 0 0 Alekhin_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Alekhin00 + 41559 1 0 0 Alekhin_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Alekhin00 + 41560 1 0 0 Alekhin_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Alekhin00 + 41561 1 0 0 Alekhin_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Alekhin00 + 41562 1 0 0 Alekhin_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Alekhin00 + 41563 1 0 0 Alekhin_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Alekhin00 + 41564 1 0 0 Alekhin_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Alekhin00 + 41565 1 0 0 Alekhin_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Alekhin00 + 41566 1 0 0 Alekhin_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Alekhin00 + 41567 1 0 0 Alekhin_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Alekhin00 + 41568 1 0 0 Alekhin_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Alekhin00 + 41569 1 0 0 Alekhin_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Alekhin00 + 41570 1 0 0 Alekhin_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Alekhin00 + 41571 1 0 0 Alekhin_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Alekhin00 + 41572 1 0 0 Alekhin_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Alekhin00 + 41573 1 0 0 Alekhin_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Alekhin00 + 41574 1 0 0 Alekhin_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Alekhin00 + 41575 1 0 0 Alekhin_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Alekhin00 + 41576 1 0 0 Alekhin_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Alekhin00 + 41577 1 0 0 Alekhin_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Alekhin00 + 41578 1 0 0 Alekhin_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Alekhin00 + 41579 1 0 0 Alekhin_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Alekhin00 + 41580 1 0 0 Alekhin_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Alekhin00 + 41581 1 0 0 Alekhin_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Alekhin00 + 41582 1 0 0 Alekhin_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Alekhin00 + 41583 1 0 0 Alekhin_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Alekhin00 + 41584 1 0 0 Alekhin_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Alekhin00 + 41585 1 0 0 Alekhin_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Alekhin00 + 41586 1 0 0 Alekhin_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Alekhin00 + 41587 1 0 0 Alekhin_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Alekhin00 + 41588 1 0 0 Alekhin_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Alekhin00 + 41589 1 0 0 Alekhin_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Alekhin00 + 41590 1 0 0 Alekhin_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Alekhin00 + 41591 1 0 0 Alekhin_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Alekhin00 + 41592 1 0 0 Alekhin_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Alekhin00 + 41593 1 0 0 Alekhin_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Alekhin00 + 41594 1 0 0 Alekhin_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Alekhin00 + 41595 1 0 0 Alekhin_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Alekhin00 + 41596 1 0 0 Alekhin_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Alekhin00 + 41597 1 0 0 Alekhin_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Alekhin00 + 41598 1 0 0 Alekhin_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Alekhin00 + 41599 1 0 0 Alekhin_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Alekhin00 + 41600 1 0 0 Alekhin_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Alekhin00 + 41601 1 0 0 Alekhin_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Alekhin00 + 41602 1 0 0 Alekhin_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Alekhin00 + 41603 1 0 0 Alekhin_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Alekhin00 + 41604 1 0 0 Alekhin_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Alekhin00 + 41605 1 0 0 Alekhin_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Alekhin00 + 41606 1 0 0 Alekhin_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Alekhin00 + 41607 1 0 0 Alekhin_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Alekhin00 + 41608 1 0 0 Alekhin_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Alekhin00 + 41609 1 0 0 Alekhin_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Alekhin00 + 41610 1 0 0 Alekhin_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Alekhin00 + 41611 1 0 0 Alekhin_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Alekhin00 + 41612 1 0 0 Alekhin_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Alekhin00 + 41613 1 0 0 Alekhin_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Alekhin00 + 41614 1 0 0 Alekhin_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Alekhin00 + 41615 1 0 0 Alekhin_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Alekhin00 + 41616 1 0 0 Alekhin_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Alekhin00 + 41617 1 0 0 Alekhin_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Alekhin00 + 41618 1 0 0 Alekhin_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Alekhin00 + 41619 1 0 0 Alekhin_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Alekhin00 + 41620 1 0 0 Alekhin_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Alekhin00 + 41621 1 0 0 Alekhin_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Alekhin00 + 41622 1 0 0 Alekhin_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Alekhin00 + 41623 1 0 0 Alekhin_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Alekhin00 + 41624 1 0 0 Alekhin_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Alekhin00 + 41625 1 0 0 Alekhin_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Alekhin00 + 41626 1 0 0 Alekhin_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Alekhin00 + 41627 1 0 0 Alekhin_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Alekhin00 + 41628 1 0 0 Alekhin_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Alekhin00 + 41629 1 0 0 Alekhin_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Alekhin00 + 41630 1 0 0 Alekhin_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Alekhin00 + 41631 1 0 0 Alekhin_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Alekhin00 + 41632 1 0 0 Alekhin_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Alekhin00 + 41633 1 0 0 Alekhin_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Alekhin00 + 41634 1 0 0 Alekhin_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Alekhin00 + 41635 1 0 0 Alekhin_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Alekhin00 + 41636 1 0 0 Alekhin_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Alekhin00 + 41637 1 0 0 Alekhin_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Alekhin00 + 41638 1 0 0 Alekhin_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Alekhin00 + 41639 1 0 0 Alekhin_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Alekhin00 + 41640 1 0 0 Alekhin_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Alekhin00 + 41641 1 0 0 Alekhin_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Alekhin00 + 41642 1 0 0 Alekhin_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Alekhin00 + 41643 1 0 0 Alekhin_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Alekhin00 + 41644 1 0 0 Alekhin_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Alekhin00 + 41645 1 0 0 Alekhin_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Alekhin00 + 41646 1 0 0 Alekhin_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Alekhin00 + 41647 1 0 0 Alekhin_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Alekhin00 + 41648 1 0 0 Alekhin_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Alekhin00 + 41649 1 0 0 Alekhin_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Alekhin00 + 41650 1 0 0 Alekhin_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Alekhin00 + 41651 1 0 0 Alekhin_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Alekhin00 + 41652 1 0 0 Alekhin_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Alekhin00 + 41653 1 0 0 Alekhin_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Alekhin00 + 41654 1 0 0 Alekhin_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Alekhin00 + 41655 1 0 0 Alekhin_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Alekhin00 + 41656 1 0 0 Alekhin_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Alekhin00 + 41657 1 0 0 Alekhin_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Alekhin00 + 41658 1 0 0 Alekhin_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Alekhin00 + 41659 1 0 0 Alekhin_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Alekhin00 + 41660 1 0 0 Alekhin_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Alekhin00 + 41661 1 0 0 Alekhin_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Alekhin00 + 41662 1 0 0 Alekhin_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Alekhin00 + 41663 1 0 0 Alekhin_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Alekhin00 + 41664 1 0 0 Alekhin_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Alekhin00 + 41665 1 0 0 Alekhin_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Alekhin00 + 41666 1 0 0 Alekhin_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Alekhin00 + 41667 1 0 0 Alekhin_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Alekhin00 + 41668 1 0 0 Alekhin_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Alekhin00 + 41669 1 0 0 Alekhin_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Alekhin00 + 41670 1 0 0 Alekhin_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Alekhin00 + 41671 1 0 0 Alekhin_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Alekhin00 + 41672 1 0 0 Alekhin_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Alekhin00 + 41673 1 0 0 Alekhin_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Alekhin00 + 41674 1 0 0 Alekhin_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Alekhin00 + 41675 1 0 0 Alekhin_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Alekhin00 + 41676 1 0 0 Alekhin_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Alekhin00 + 41677 1 0 0 Alekhin_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Alekhin00 + 41678 1 0 0 Alekhin_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Alekhin00 + 41679 1 0 0 Alekhin_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Alekhin00 + 41680 1 0 0 Alekhin_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Alekhin00 + 41681 1 0 0 Alekhin_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Alekhin00 + 41682 1 0 0 Alekhin_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Alekhin00 + 41683 1 0 0 Alekhin_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Alekhin00 + 41684 1 0 0 Alekhin_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Alekhin00 + 41685 1 0 0 Alekhin_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Alekhin00 + 41686 1 0 0 Alekhin_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Alekhin00 + 41687 1 0 0 Alekhin_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Alekhin00 + 41688 1 0 0 Alekhin_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Alekhin00 + 41689 1 0 0 Alekhin_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Alekhin00 + 41690 1 0 0 Alekhin_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Alekhin00 + 41691 1 0 0 Alekhin_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Alekhin00 + 41692 1 0 0 Alekhin_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Alekhin00 + 41693 1 0 0 Alekhin_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Alekhin00 + 41694 1 0 0 Alekhin_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Alekhin00 + 41695 1 0 0 Alekhin_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Alekhin00 + 41696 1 0 0 Alekhin_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Alekhin00 + 41697 1 0 0 Alekhin_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Alekhin00 + 41698 1 0 0 Alekhin_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Alekhin00 + 41699 1 0 0 Alekhin_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Alekhin00 + 41700 1 0 0 Alekhin_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Alekhin00 + 41701 1 0 0 Alekhin_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Alekhin00 + 41702 1 0 0 Alekhin_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Alekhin00 + 41703 1 0 0 Alekhin_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Alekhin00 + 41704 1 0 0 Alekhin_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Alekhin00 + 41705 1 0 0 Alekhin_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Alekhin00 + 41706 1 0 0 Alekhin_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Alekhin00 + 41707 1 0 0 Alekhin_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Alekhin00 + 41708 1 0 0 Alekhin_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Alekhin00 + 41709 1 0 0 Alekhin_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Alekhin00 + 41710 1 0 0 Alekhin_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Alekhin00 + 41711 1 0 0 Alekhin_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Alekhin00 + 41712 1 0 0 Alekhin_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Alekhin00 + 41713 1 0 0 Alekhin_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Alekhin00 + 41714 1 0 0 Alekhin_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Alekhin00 + 41715 1 0 0 Alekhin_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Alekhin00 + 41716 1 0 0 Alekhin_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Alekhin00 + 41717 1 0 0 Alekhin_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Alekhin00 + 41718 1 0 0 Alekhin_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Alekhin00 + 41719 1 0 0 Alekhin_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Alekhin00 + 41720 1 0 0 Alekhin_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Alekhin00 + 41721 1 0 0 Alekhin_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Alekhin00 + 41722 1 0 0 Alekhin_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Alekhin00 + 41723 1 0 0 Alekhin_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Alekhin00 + 41724 1 0 0 Alekhin_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Alekhin00 + 41725 1 0 0 Alekhin_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Alekhin00 + 41726 1 0 0 Alekhin_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Alekhin00 + 41727 1 0 0 Alekhin_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Alekhin00 + 41728 1 0 0 Alekhin_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Alekhin00 + 41729 1 0 0 Alekhin_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Alekhin00 + 41730 1 0 0 Alekhin_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Alekhin00 + 41731 1 0 0 Alekhin_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Alekhin00 + 41732 1 0 0 Alekhin_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Alekhin00 + 41733 1 0 0 Alekhin_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Alekhin00 + 41734 1 0 0 Alekhin_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Alekhin00 + 41735 1 0 0 Alekhin_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Alekhin00 + 41736 1 0 0 Alekhin_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Alekhin00 + 41737 1 0 0 Alekhin_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Alekhin00 + 41738 1 0 0 Alekhin_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Alekhin00 + 41739 1 0 0 Alekhin_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Alekhin00 + 41740 1 0 0 Alekhin_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Alekhin00 + 41741 1 0 0 Alekhin_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Alekhin00 + 41742 1 0 0 Alekhin_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Alekhin00 + 41743 1 0 0 Alekhin_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Alekhin00 + 41744 1 0 0 Alekhin_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Alekhin00 + 41745 1 0 0 Alekhin_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Alekhin00 + 41746 1 0 0 Alekhin_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Alekhin00 + 41747 1 0 0 Alekhin_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Alekhin00 + 41748 1 0 0 Alekhin_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Alekhin00 + 41749 1 0 0 Alekhin_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Alekhin00 + 41750 1 0 0 Alekhin_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Alekhin00 + 41751 1 0 0 Alekhin_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Alekhin00 + 41752 1 0 0 Alekhin_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Alekhin00 + 41753 1 0 0 Alekhin_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Alekhin00 + 41754 1 0 0 Alekhin_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Alekhin00 + 41755 1 0 0 Alekhin_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Alekhin00 + 41756 1 0 0 Alekhin_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Alekhin00 + 41757 1 0 0 Alekhin_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Alekhin00 + 41758 1 0 0 Alekhin_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Alekhin00 + 41759 1 0 0 Alekhin_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Alekhin00 + 41760 1 0 0 Alekhin_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Alekhin00 + 41761 1 0 0 Alekhin_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Alekhin00 + 41762 1 0 0 Alekhin_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Alekhin00 + 41763 1 0 0 Alekhin_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Alekhin00 + 41764 1 0 0 Alekhin_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Alekhin00 + 41765 1 0 0 Alekhin_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Alekhin00 + 41766 1 0 0 Alekhin_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Alekhin00 + 41767 1 0 0 Alekhin_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Alekhin00 + 41768 1 0 0 Alekhin_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Alekhin00 + 41769 1 0 0 Alekhin_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Alekhin00 + 41770 1 0 0 Alekhin_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Alekhin00 + 41771 1 0 0 Alekhin_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Alekhin00 + 41772 1 0 0 Alekhin_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Alekhin00 + 41773 1 0 0 Alekhin_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Alekhin00 + 41774 1 0 0 Alekhin_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Alekhin00 + 41775 1 0 0 Alekhin_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Alekhin00 + 41776 1 0 0 Alekhin_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Alekhin00 + 41777 1 0 0 Alekhin_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Alekhin00 + 41778 1 0 0 Alekhin_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Alekhin00 + 41779 1 0 0 Alekhin_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Alekhin00 + 41780 1 0 0 Alekhin_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Alekhin00 + 41781 1 0 0 Alekhin_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Alekhin00 + 41782 1 0 0 Alekhin_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Alekhin00 + 41783 1 0 0 Alekhin_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Alekhin00 + 41784 1 0 0 Alekhin_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Alekhin00 + 41785 1 0 0 Alekhin_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Alekhin00 + 41786 1 0 0 Alekhin_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Alekhin00 + 41787 1 0 0 Alekhin_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Alekhin00 + 41788 1 0 0 Alekhin_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Alekhin00 + 41789 1 0 0 Alekhin_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Alekhin00 + 41790 1 0 0 Alekhin_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Alekhin00 + 41791 1 0 0 Alekhin_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Alekhin00 + 41792 1 0 0 Alekhin_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Alekhin00 + 41793 1 0 0 Alekhin_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Alekhin00 + 41794 1 0 0 Alekhin_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Alekhin00 + 41795 1 0 0 Alekhin_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Alekhin00 + 41796 1 0 0 Alekhin_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Alekhin00 + 41797 1 0 0 Alekhin_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Alekhin00 + 41798 1 0 0 Alekhin_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Alekhin00 + 41799 1 0 0 Alekhin_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Alekhin00 + 41800 1 0 0 Alekhin_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Alekhin00 + 41801 1 0 0 Alekhin_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Alekhin00 + 41802 1 0 0 Alekhin_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Alekhin00 + 41803 1 0 0 Alekhin_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Alekhin00 + 41804 1 0 0 Alekhin_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Alekhin00 + 41805 1 0 0 Alekhin_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Alekhin00 + 41806 1 0 0 Alekhin_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Alekhin00 + 41807 1 0 0 Alekhin_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Alekhin00 + 41808 1 0 0 Alekhin_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Alekhin00 + 41809 1 0 0 Alekhin_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Alekhin00 + 41810 1 0 0 Alekhin_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Alekhin00 + 41811 1 0 0 Alekhin_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Alekhin00 + 41812 1 0 0 Alekhin_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Alekhin00 + 41813 1 0 0 Alekhin_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Alekhin00 + 41814 1 0 0 Alekhin_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Alekhin00 + 41815 1 0 0 Alekhin_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Alekhin00 + 41816 1 0 0 Alekhin_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Alekhin00 + 41817 1 0 0 Alekhin_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Alekhin00 + 41818 1 0 0 Alekhin_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Alekhin00 + 41819 1 0 0 Alekhin_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Alekhin00 + 41820 1 0 0 Alekhin_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Alekhin00 + 41821 1 0 0 Alekhin_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Alekhin00 + 41822 1 0 0 Alekhin_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Alekhin00 + 41823 1 0 0 Alekhin_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Alekhin00 + 41824 1 0 0 Alekhin_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Alekhin00 + 41825 1 0 0 Alekhin_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Alekhin00 + 41826 1 0 0 Alekhin_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Alekhin00 + 41827 1 0 0 Alekhin_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Alekhin00 + 41828 1 0 0 Alekhin_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Alekhin00 + 41829 1 0 0 Alekhin_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Alekhin00 + 41830 1 0 0 Alekhin_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Alekhin00 + 41831 1 0 0 Alekhin_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Alekhin00 + 41832 1 0 0 Alekhin_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Alekhin00 + 41833 1 0 0 Alekhin_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Alekhin00 + 41834 1 0 0 Alekhin_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Alekhin00 + 41835 1 0 0 Alekhin_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Alekhin00 + 41836 1 0 0 Alekhin_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Alekhin00 + 41837 1 0 0 Alekhin_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Alekhin00 + 41838 1 0 0 Alekhin_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Alekhin00 + 41839 1 0 0 Alekhin_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Alekhin00 + 41840 1 0 0 Alekhin_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Alekhin00 + 41841 1 0 0 Alekhin_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Alekhin00 + 41842 1 0 0 Alekhin_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Alekhin00 + 41843 1 0 0 Alekhin_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Alekhin00 + 41844 1 0 0 Alekhin_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Alekhin00 + 41845 1 0 0 Alekhin_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Alekhin00 + 41846 1 0 0 Alekhin_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Alekhin00 + 41847 1 0 0 Alekhin_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Alekhin00 + 41848 1 0 0 Alekhin_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Alekhin00 + 41849 1 0 0 Alekhin_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Alekhin00 + 41850 1 0 0 Alekhin_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Alekhin00 + 41851 1 0 0 Alekhin_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Alekhin00 + 41852 1 0 0 Alekhin_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Alekhin00 + 41853 1 0 0 Alekhin_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Alekhin00 + 41854 1 0 0 Alekhin_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Alekhin00 + 41855 1 0 0 Alekhin_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Alekhin00 + 41856 1 0 0 Alekhin_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Alekhin00 + 41857 1 0 0 Alekhin_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Alekhin00 + 41858 1 0 0 Alekhin_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Alekhin00 + 41859 1 0 0 Alekhin_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Alekhin00 + 41860 1 0 0 Alekhin_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Alekhin00 + 41861 1 0 0 Alekhin_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Alekhin00 + 41862 1 0 0 Alekhin_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Alekhin00 + 41863 1 0 0 Alekhin_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Alekhin00 + 41864 1 0 0 Alekhin_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Alekhin00 + 41865 1 0 0 Alekhin_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Alekhin00 + 41866 1 0 0 Alekhin_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Alekhin00 + 41867 1 0 0 Alekhin_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Alekhin00 + 41868 1 0 0 Alekhin_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Alekhin00 + 41869 1 0 0 Alekhin_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Alekhin00 + 41870 1 0 0 Alekhin_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Alekhin00 + 41871 1 0 0 Alekhin_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Alekhin00 + 41872 1 0 0 Alekhin_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Alekhin00 + 41873 1 0 0 Alekhin_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Alekhin00 + 41874 1 0 0 Alekhin_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Alekhin00 + 41875 1 0 0 Alekhin_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Alekhin00 + 41876 1 0 0 Alekhin_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Alekhin00 + 41877 1 0 0 Alekhin_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Alekhin00 + 41878 1 0 0 Alekhin_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Alekhin00 + 41879 1 0 0 Alekhin_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Alekhin00 + 41880 1 0 0 Alekhin_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Alekhin00 + 41881 1 0 0 Alekhin_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Alekhin00 + 41882 1 0 0 Alekhin_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Alekhin00 + 41883 1 0 0 Alekhin_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Alekhin00 + 41884 1 0 0 Alekhin_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Alekhin00 + 41885 1 0 0 Alekhin_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Alekhin00 + 41886 1 0 0 Alekhin_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Alekhin00 + 41887 1 0 0 Alekhin_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Alekhin00 + 41888 1 0 0 Alekhin_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Alekhin00 + 41889 1 0 0 Alekhin_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Alekhin00 + 41890 1 0 0 Alekhin_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Alekhin00 + 41891 1 0 0 Alekhin_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Alekhin00 + 41892 1 0 0 Alekhin_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Alekhin00 + 41893 1 0 0 Alekhin_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Alekhin00 + 41894 1 0 0 Alekhin_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Alekhin00 + 41895 1 0 0 Alekhin_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Alekhin00 + 41896 1 0 0 Alekhin_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Alekhin00 + 41897 1 0 0 Alekhin_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Alekhin00 + 41898 1 0 0 Alekhin_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Alekhin00 + 41899 1 0 0 Alekhin_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Alekhin00 + 41900 1 0 0 Alekhin_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Alekhin00 + 41901 1 0 0 Alekhin_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Alekhin00 + 41902 1 0 0 Alekhin_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Alekhin00 + 41903 1 0 0 Alekhin_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Alekhin00 + 41904 1 0 0 Alekhin_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Alekhin00 + 41905 1 0 0 Alekhin_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Alekhin00 + 41906 1 0 0 Alekhin_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Alekhin00 + 41907 1 0 0 Alekhin_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Alekhin00 + 41908 1 0 0 Alekhin_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Alekhin00 + 41909 1 0 0 Alekhin_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Alekhin00 + 41910 1 0 0 Alekhin_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Alekhin00 + 41911 1 0 0 Alekhin_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Alekhin00 + 41912 1 0 0 Alekhin_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Alekhin00 + 41913 1 0 0 Alekhin_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Alekhin00 + 41914 1 0 0 Alekhin_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Alekhin00 + 41915 1 0 0 Alekhin_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Alekhin00 + 41916 1 0 0 Alekhin_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Alekhin00 + 41917 1 0 0 Alekhin_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Alekhin00 + 41918 1 0 0 Alekhin_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Alekhin00 + 41919 1 0 0 Alekhin_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Alekhin00 + 41920 1 0 0 Alekhin_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Alekhin00 + 41921 1 0 0 Alekhin_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Alekhin00 + 41922 1 0 0 Alekhin_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Alekhin00 + 41923 1 0 0 Alekhin_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Alekhin00 + 41924 1 0 0 Alekhin_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Alekhin00 + 41925 1 0 0 Alekhin_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Alekhin00 + 41926 1 0 0 Alekhin_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Alekhin00 + 41927 1 0 0 Alekhin_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Alekhin00 + 41928 1 0 0 Alekhin_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Alekhin00 + 41929 1 0 0 Alekhin_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Alekhin00 + 41930 1 0 0 Alekhin_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Alekhin00 + 41931 1 0 0 Alekhin_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Alekhin00 + 41932 1 0 0 Alekhin_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Alekhin00 + 41933 1 0 0 Alekhin_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Alekhin00 + 41934 1 0 0 Alekhin_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Alekhin00 + 41935 1 0 0 Alekhin_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Alekhin00 + 41936 1 0 0 Alekhin_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Alekhin00 + 41937 1 0 0 Alekhin_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Alekhin00 + 41938 1 0 0 Alekhin_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Alekhin00 + 41939 1 0 0 Alekhin_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Alekhin00 + 41940 1 0 0 Alekhin_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Alekhin00 + 41941 1 0 0 Alekhin_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Alekhin00 + 41942 1 0 0 Alekhin_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Alekhin00 + 41943 1 0 0 Alekhin_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Alekhin00 + 41944 1 0 0 Alekhin_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Alekhin00 + 41945 1 0 0 Alekhin_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Alekhin00 + 41946 1 0 0 Alekhin_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Alekhin00 + 41947 1 0 0 Alekhin_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Alekhin00 + 41948 1 0 0 Alekhin_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Alekhin00 + 41949 1 0 0 Alekhin_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Alekhin00 + 41950 1 0 0 Alekhin_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Alekhin00 + 41951 1 0 0 Alekhin_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Alekhin00 + 41952 1 0 0 Alekhin_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Alekhin00 + 41953 1 0 0 Alekhin_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Alekhin00 + 41954 1 0 0 Alekhin_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Alekhin00 + 41955 1 0 0 Alekhin_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Alekhin00 + 41956 1 0 0 Alekhin_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Alekhin00 + 41957 1 0 0 Alekhin_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Alekhin00 + 41958 1 0 0 Alekhin_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Alekhin00 + 41959 1 0 0 Alekhin_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Alekhin00 + 41960 1 0 0 Alekhin_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Alekhin00 + 41961 1 0 0 Alekhin_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Alekhin00 + 41962 1 0 0 Alekhin_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Alekhin00 + 41963 1 0 0 Alekhin_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Alekhin00 + 41964 1 0 0 Alekhin_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Alekhin00 + 41965 1 0 0 Alekhin_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Alekhin00 + 41966 1 0 0 Alekhin_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Alekhin00 + 41967 1 0 0 Alekhin_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Alekhin00 + 41968 1 0 0 Alekhin_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Alekhin00 + 41969 1 0 0 Alekhin_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Alekhin00 + 41970 1 0 0 Alekhin_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Alekhin00 + 41971 1 0 0 Alekhin_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Alekhin00 + 41972 1 0 0 Alekhin_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Alekhin00 + 41973 1 0 0 Alekhin_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Alekhin00 + 41974 1 0 0 Alekhin_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Alekhin00 + 41975 1 0 0 Alekhin_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Alekhin00 + 41976 1 0 0 Alekhin_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Alekhin00 + 41977 1 0 0 Alekhin_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Alekhin00 + 41978 1 0 0 Alekhin_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Alekhin00 + 41979 1 0 0 Alekhin_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Alekhin00 + 41980 1 0 0 Alekhin_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Alekhin00 + 41981 1 0 0 Alekhin_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Alekhin00 + 41982 1 0 0 Alekhin_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Alekhin00 + 41983 1 0 0 Alekhin_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Alekhin00 + 41984 1 0 0 Alekhin_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Alekhin00 + 41985 1 0 0 Alekhin_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Alekhin00 + 41986 1 0 0 Alekhin_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Alekhin00 + 41987 1 0 0 Alekhin_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Alekhin00 + 41988 1 0 0 Alekhin_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Alekhin00 + 41989 1 0 0 Alekhin_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Alekhin00 + 41990 1 0 0 Alekhin_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Alekhin00 + 41991 1 0 0 Alekhin_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Alekhin00 + 41992 1 0 0 Alekhin_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Alekhin00 + 41993 1 0 0 Alekhin_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Alekhin00 + 41994 1 0 0 Alekhin_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Alekhin00 + 41995 1 0 0 Alekhin_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Alekhin00 + 41996 1 0 0 Alekhin_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Alekhin00 + 41997 1 0 0 Alekhin_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Alekhin00 + 41998 1 0 0 Alekhin_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Alekhin00 + 41999 1 0 0 Alekhin_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Alekhin00 + 50100 1 0 0 Botje_100.LHpdf 0 1. 1.E+10 1.E-06 1. Botje99 + 50101 1 0 0 Botje_100.LHpdf 1 1. 1.E+10 1.E-06 1. Botje99 + 50102 1 0 0 Botje_100.LHpdf 2 1. 1.E+10 1.E-06 1. Botje99 + 50103 1 0 0 Botje_100.LHpdf 3 1. 1.E+10 1.E-06 1. Botje99 + 50104 1 0 0 Botje_100.LHpdf 4 1. 1.E+10 1.E-06 1. Botje99 + 50105 1 0 0 Botje_100.LHpdf 5 1. 1.E+10 1.E-06 1. Botje99 + 50106 1 0 0 Botje_100.LHpdf 6 1. 1.E+10 1.E-06 1. Botje99 + 50107 1 0 0 Botje_100.LHpdf 7 1. 1.E+10 1.E-06 1. Botje99 + 50108 1 0 0 Botje_100.LHpdf 8 1. 1.E+10 1.E-06 1. Botje99 + 50109 1 0 0 Botje_100.LHpdf 9 1. 1.E+10 1.E-06 1. Botje99 + 50110 1 0 0 Botje_100.LHpdf 10 1. 1.E+10 1.E-06 1. Botje99 + 50111 1 0 0 Botje_100.LHpdf 11 1. 1.E+10 1.E-06 1. Botje99 + 50112 1 0 0 Botje_100.LHpdf 12 1. 1.E+10 1.E-06 1. Botje99 + 50113 1 0 0 Botje_100.LHpdf 13 1. 1.E+10 1.E-06 1. Botje99 + 50114 1 0 0 Botje_100.LHpdf 14 1. 1.E+10 1.E-06 1. Botje99 + 50115 1 0 0 Botje_100.LHpdf 15 1. 1.E+10 1.E-06 1. Botje99 + 50116 1 0 0 Botje_100.LHpdf 16 1. 1.E+10 1.E-06 1. Botje99 + 50117 1 0 0 Botje_100.LHpdf 17 1. 1.E+10 1.E-06 1. Botje99 + 50118 1 0 0 Botje_100.LHpdf 18 1. 1.E+10 1.E-06 1. Botje99 + 50119 1 0 0 Botje_100.LHpdf 19 1. 1.E+10 1.E-06 1. Botje99 + 50120 1 0 0 Botje_100.LHpdf 20 1. 1.E+10 1.E-06 1. Botje99 + 50121 1 0 0 Botje_100.LHpdf 21 1. 1.E+10 1.E-06 1. Botje99 + 50122 1 0 0 Botje_100.LHpdf 22 1. 1.E+10 1.E-06 1. Botje99 + 50123 1 0 0 Botje_100.LHpdf 23 1. 1.E+10 1.E-06 1. Botje99 + 50124 1 0 0 Botje_100.LHpdf 24 1. 1.E+10 1.E-06 1. Botje99 + 50125 1 0 0 Botje_100.LHpdf 25 1. 1.E+10 1.E-06 1. Botje99 + 50126 1 0 0 Botje_100.LHpdf 26 1. 1.E+10 1.E-06 1. Botje99 + 50127 1 0 0 Botje_100.LHpdf 27 1. 1.E+10 1.E-06 1. Botje99 + 50128 1 0 0 Botje_100.LHpdf 28 1. 1.E+10 1.E-06 1. Botje99 + 50129 1 0 0 Botje_100.LHpdf 29 1. 1.E+10 1.E-06 1. Botje99 + 50130 1 0 0 Botje_100.LHpdf 30 1. 1.E+10 1.E-06 1. Botje99 + 50131 1 0 0 Botje_100.LHpdf 31 1. 1.E+10 1.E-06 1. Botje99 + 50132 1 0 0 Botje_100.LHpdf 32 1. 1.E+10 1.E-06 1. Botje99 + 50133 1 0 0 Botje_100.LHpdf 33 1. 1.E+10 1.E-06 1. Botje99 + 50134 1 0 0 Botje_100.LHpdf 34 1. 1.E+10 1.E-06 1. Botje99 + 50135 1 0 0 Botje_100.LHpdf 35 1. 1.E+10 1.E-06 1. Botje99 + 50136 1 0 0 Botje_100.LHpdf 36 1. 1.E+10 1.E-06 1. Botje99 + 50137 1 0 0 Botje_100.LHpdf 37 1. 1.E+10 1.E-06 1. Botje99 + 50138 1 0 0 Botje_100.LHpdf 38 1. 1.E+10 1.E-06 1. Botje99 + 50139 1 0 0 Botje_100.LHpdf 39 1. 1.E+10 1.E-06 1. Botje99 + 50140 1 0 0 Botje_100.LHpdf 40 1. 1.E+10 1.E-06 1. Botje99 + 50141 1 0 0 Botje_100.LHpdf 41 1. 1.E+10 1.E-06 1. Botje99 + 50142 1 0 0 Botje_100.LHpdf 42 1. 1.E+10 1.E-06 1. Botje99 + 50143 1 0 0 Botje_100.LHpdf 43 1. 1.E+10 1.E-06 1. Botje99 + 50144 1 0 0 Botje_100.LHpdf 44 1. 1.E+10 1.E-06 1. Botje99 + 50145 1 0 0 Botje_100.LHpdf 45 1. 1.E+10 1.E-06 1. Botje99 + 50146 1 0 0 Botje_100.LHpdf 46 1. 1.E+10 1.E-06 1. Botje99 + 50147 1 0 0 Botje_100.LHpdf 47 1. 1.E+10 1.E-06 1. Botje99 + 50148 1 0 0 Botje_100.LHpdf 48 1. 1.E+10 1.E-06 1. Botje99 + 50149 1 0 0 Botje_100.LHpdf 49 1. 1.E+10 1.E-06 1. Botje99 + 50150 1 0 0 Botje_100.LHpdf 50 1. 1.E+10 1.E-06 1. Botje99 + 50151 1 0 0 Botje_100.LHpdf 51 1. 1.E+10 1.E-06 1. Botje99 + 50152 1 0 0 Botje_100.LHpdf 52 1. 1.E+10 1.E-06 1. Botje99 + 50153 1 0 0 Botje_100.LHpdf 53 1. 1.E+10 1.E-06 1. Botje99 + 50154 1 0 0 Botje_100.LHpdf 54 1. 1.E+10 1.E-06 1. Botje99 + 50155 1 0 0 Botje_100.LHpdf 55 1. 1.E+10 1.E-06 1. Botje99 + 50156 1 0 0 Botje_100.LHpdf 56 1. 1.E+10 1.E-06 1. Botje99 + 50157 1 0 0 Botje_100.LHpdf 57 1. 1.E+10 1.E-06 1. Botje99 + 50158 1 0 0 Botje_100.LHpdf 58 1. 1.E+10 1.E-06 1. Botje99 + 50159 1 0 0 Botje_100.LHpdf 59 1. 1.E+10 1.E-06 1. Botje99 + 50160 1 0 0 Botje_100.LHpdf 60 1. 1.E+10 1.E-06 1. Botje99 + 50161 1 0 0 Botje_100.LHpdf 61 1. 1.E+10 1.E-06 1. Botje99 + 50162 1 0 0 Botje_100.LHpdf 62 1. 1.E+10 1.E-06 1. Botje99 + 50163 1 0 0 Botje_100.LHpdf 63 1. 1.E+10 1.E-06 1. Botje99 + 50164 1 0 0 Botje_100.LHpdf 64 1. 1.E+10 1.E-06 1. Botje99 + 50165 1 0 0 Botje_100.LHpdf 65 1. 1.E+10 1.E-06 1. Botje99 + 50166 1 0 0 Botje_100.LHpdf 66 1. 1.E+10 1.E-06 1. Botje99 + 50167 1 0 0 Botje_100.LHpdf 67 1. 1.E+10 1.E-06 1. Botje99 + 50168 1 0 0 Botje_100.LHpdf 68 1. 1.E+10 1.E-06 1. Botje99 + 50169 1 0 0 Botje_100.LHpdf 69 1. 1.E+10 1.E-06 1. Botje99 + 50170 1 0 0 Botje_100.LHpdf 70 1. 1.E+10 1.E-06 1. Botje99 + 50171 1 0 0 Botje_100.LHpdf 71 1. 1.E+10 1.E-06 1. Botje99 + 50172 1 0 0 Botje_100.LHpdf 72 1. 1.E+10 1.E-06 1. Botje99 + 50173 1 0 0 Botje_100.LHpdf 73 1. 1.E+10 1.E-06 1. Botje99 + 50174 1 0 0 Botje_100.LHpdf 74 1. 1.E+10 1.E-06 1. Botje99 + 50175 1 0 0 Botje_100.LHpdf 75 1. 1.E+10 1.E-06 1. Botje99 + 50176 1 0 0 Botje_100.LHpdf 76 1. 1.E+10 1.E-06 1. Botje99 + 50177 1 0 0 Botje_100.LHpdf 77 1. 1.E+10 1.E-06 1. Botje99 + 50178 1 0 0 Botje_100.LHpdf 78 1. 1.E+10 1.E-06 1. Botje99 + 50179 1 0 0 Botje_100.LHpdf 79 1. 1.E+10 1.E-06 1. Botje99 + 50180 1 0 0 Botje_100.LHpdf 80 1. 1.E+10 1.E-06 1. Botje99 + 50181 1 0 0 Botje_100.LHpdf 81 1. 1.E+10 1.E-06 1. Botje99 + 50182 1 0 0 Botje_100.LHpdf 82 1. 1.E+10 1.E-06 1. Botje99 + 50183 1 0 0 Botje_100.LHpdf 83 1. 1.E+10 1.E-06 1. Botje99 + 50184 1 0 0 Botje_100.LHpdf 84 1. 1.E+10 1.E-06 1. Botje99 + 50185 1 0 0 Botje_100.LHpdf 85 1. 1.E+10 1.E-06 1. Botje99 + 50186 1 0 0 Botje_100.LHpdf 86 1. 1.E+10 1.E-06 1. Botje99 + 50187 1 0 0 Botje_100.LHpdf 87 1. 1.E+10 1.E-06 1. Botje99 + 50188 1 0 0 Botje_100.LHpdf 88 1. 1.E+10 1.E-06 1. Botje99 + 50189 1 0 0 Botje_100.LHpdf 89 1. 1.E+10 1.E-06 1. Botje99 + 50190 1 0 0 Botje_100.LHpdf 90 1. 1.E+10 1.E-06 1. Botje99 + 50191 1 0 0 Botje_100.LHpdf 91 1. 1.E+10 1.E-06 1. Botje99 + 50192 1 0 0 Botje_100.LHpdf 92 1. 1.E+10 1.E-06 1. Botje99 + 50193 1 0 0 Botje_100.LHpdf 93 1. 1.E+10 1.E-06 1. Botje99 + 50194 1 0 0 Botje_100.LHpdf 94 1. 1.E+10 1.E-06 1. Botje99 + 50195 1 0 0 Botje_100.LHpdf 95 1. 1.E+10 1.E-06 1. Botje99 + 50196 1 0 0 Botje_100.LHpdf 96 1. 1.E+10 1.E-06 1. Botje99 + 50197 1 0 0 Botje_100.LHpdf 97 1. 1.E+10 1.E-06 1. Botje99 + 50198 1 0 0 Botje_100.LHpdf 98 1. 1.E+10 1.E-06 1. Botje99 + 50199 1 0 0 Botje_100.LHpdf 99 1. 1.E+10 1.E-06 1. Botje99 + 50200 1 0 0 Botje_100.LHpdf 100 1. 1.E+10 1.E-06 1. Botje99 + 51000 1 0 0 Botje_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Botje99 + 51001 1 0 0 Botje_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Botje99 + 51002 1 0 0 Botje_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Botje99 + 51003 1 0 0 Botje_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Botje99 + 51004 1 0 0 Botje_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Botje99 + 51005 1 0 0 Botje_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Botje99 + 51006 1 0 0 Botje_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Botje99 + 51007 1 0 0 Botje_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Botje99 + 51008 1 0 0 Botje_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Botje99 + 51009 1 0 0 Botje_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Botje99 + 51010 1 0 0 Botje_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Botje99 + 51011 1 0 0 Botje_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Botje99 + 51012 1 0 0 Botje_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Botje99 + 51013 1 0 0 Botje_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Botje99 + 51014 1 0 0 Botje_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Botje99 + 51015 1 0 0 Botje_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Botje99 + 51016 1 0 0 Botje_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Botje99 + 51017 1 0 0 Botje_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Botje99 + 51018 1 0 0 Botje_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Botje99 + 51019 1 0 0 Botje_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Botje99 + 51020 1 0 0 Botje_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Botje99 + 51021 1 0 0 Botje_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Botje99 + 51022 1 0 0 Botje_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Botje99 + 51023 1 0 0 Botje_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Botje99 + 51024 1 0 0 Botje_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Botje99 + 51025 1 0 0 Botje_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Botje99 + 51026 1 0 0 Botje_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Botje99 + 51027 1 0 0 Botje_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Botje99 + 51028 1 0 0 Botje_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Botje99 + 51029 1 0 0 Botje_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Botje99 + 51030 1 0 0 Botje_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Botje99 + 51031 1 0 0 Botje_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Botje99 + 51032 1 0 0 Botje_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Botje99 + 51033 1 0 0 Botje_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Botje99 + 51034 1 0 0 Botje_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Botje99 + 51035 1 0 0 Botje_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Botje99 + 51036 1 0 0 Botje_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Botje99 + 51037 1 0 0 Botje_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Botje99 + 51038 1 0 0 Botje_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Botje99 + 51039 1 0 0 Botje_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Botje99 + 51040 1 0 0 Botje_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Botje99 + 51041 1 0 0 Botje_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Botje99 + 51042 1 0 0 Botje_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Botje99 + 51043 1 0 0 Botje_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Botje99 + 51044 1 0 0 Botje_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Botje99 + 51045 1 0 0 Botje_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Botje99 + 51046 1 0 0 Botje_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Botje99 + 51047 1 0 0 Botje_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Botje99 + 51048 1 0 0 Botje_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Botje99 + 51049 1 0 0 Botje_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Botje99 + 51050 1 0 0 Botje_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Botje99 + 51051 1 0 0 Botje_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Botje99 + 51052 1 0 0 Botje_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Botje99 + 51053 1 0 0 Botje_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Botje99 + 51054 1 0 0 Botje_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Botje99 + 51055 1 0 0 Botje_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Botje99 + 51056 1 0 0 Botje_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Botje99 + 51057 1 0 0 Botje_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Botje99 + 51058 1 0 0 Botje_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Botje99 + 51059 1 0 0 Botje_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Botje99 + 51060 1 0 0 Botje_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Botje99 + 51061 1 0 0 Botje_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Botje99 + 51062 1 0 0 Botje_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Botje99 + 51063 1 0 0 Botje_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Botje99 + 51064 1 0 0 Botje_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Botje99 + 51065 1 0 0 Botje_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Botje99 + 51066 1 0 0 Botje_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Botje99 + 51067 1 0 0 Botje_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Botje99 + 51068 1 0 0 Botje_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Botje99 + 51069 1 0 0 Botje_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Botje99 + 51070 1 0 0 Botje_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Botje99 + 51071 1 0 0 Botje_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Botje99 + 51072 1 0 0 Botje_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Botje99 + 51073 1 0 0 Botje_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Botje99 + 51074 1 0 0 Botje_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Botje99 + 51075 1 0 0 Botje_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Botje99 + 51076 1 0 0 Botje_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Botje99 + 51077 1 0 0 Botje_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Botje99 + 51078 1 0 0 Botje_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Botje99 + 51079 1 0 0 Botje_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Botje99 + 51080 1 0 0 Botje_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Botje99 + 51081 1 0 0 Botje_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Botje99 + 51082 1 0 0 Botje_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Botje99 + 51083 1 0 0 Botje_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Botje99 + 51084 1 0 0 Botje_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Botje99 + 51085 1 0 0 Botje_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Botje99 + 51086 1 0 0 Botje_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Botje99 + 51087 1 0 0 Botje_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Botje99 + 51088 1 0 0 Botje_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Botje99 + 51089 1 0 0 Botje_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Botje99 + 51090 1 0 0 Botje_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Botje99 + 51091 1 0 0 Botje_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Botje99 + 51092 1 0 0 Botje_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Botje99 + 51093 1 0 0 Botje_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Botje99 + 51094 1 0 0 Botje_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Botje99 + 51095 1 0 0 Botje_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Botje99 + 51096 1 0 0 Botje_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Botje99 + 51097 1 0 0 Botje_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Botje99 + 51098 1 0 0 Botje_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Botje99 + 51099 1 0 0 Botje_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Botje99 + 51100 1 0 0 Botje_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Botje99 + 51101 1 0 0 Botje_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Botje99 + 51102 1 0 0 Botje_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Botje99 + 51103 1 0 0 Botje_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Botje99 + 51104 1 0 0 Botje_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Botje99 + 51105 1 0 0 Botje_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Botje99 + 51106 1 0 0 Botje_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Botje99 + 51107 1 0 0 Botje_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Botje99 + 51108 1 0 0 Botje_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Botje99 + 51109 1 0 0 Botje_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Botje99 + 51110 1 0 0 Botje_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Botje99 + 51111 1 0 0 Botje_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Botje99 + 51112 1 0 0 Botje_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Botje99 + 51113 1 0 0 Botje_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Botje99 + 51114 1 0 0 Botje_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Botje99 + 51115 1 0 0 Botje_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Botje99 + 51116 1 0 0 Botje_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Botje99 + 51117 1 0 0 Botje_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Botje99 + 51118 1 0 0 Botje_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Botje99 + 51119 1 0 0 Botje_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Botje99 + 51120 1 0 0 Botje_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Botje99 + 51121 1 0 0 Botje_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Botje99 + 51122 1 0 0 Botje_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Botje99 + 51123 1 0 0 Botje_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Botje99 + 51124 1 0 0 Botje_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Botje99 + 51125 1 0 0 Botje_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Botje99 + 51126 1 0 0 Botje_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Botje99 + 51127 1 0 0 Botje_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Botje99 + 51128 1 0 0 Botje_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Botje99 + 51129 1 0 0 Botje_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Botje99 + 51130 1 0 0 Botje_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Botje99 + 51131 1 0 0 Botje_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Botje99 + 51132 1 0 0 Botje_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Botje99 + 51133 1 0 0 Botje_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Botje99 + 51134 1 0 0 Botje_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Botje99 + 51135 1 0 0 Botje_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Botje99 + 51136 1 0 0 Botje_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Botje99 + 51137 1 0 0 Botje_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Botje99 + 51138 1 0 0 Botje_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Botje99 + 51139 1 0 0 Botje_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Botje99 + 51140 1 0 0 Botje_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Botje99 + 51141 1 0 0 Botje_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Botje99 + 51142 1 0 0 Botje_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Botje99 + 51143 1 0 0 Botje_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Botje99 + 51144 1 0 0 Botje_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Botje99 + 51145 1 0 0 Botje_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Botje99 + 51146 1 0 0 Botje_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Botje99 + 51147 1 0 0 Botje_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Botje99 + 51148 1 0 0 Botje_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Botje99 + 51149 1 0 0 Botje_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Botje99 + 51150 1 0 0 Botje_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Botje99 + 51151 1 0 0 Botje_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Botje99 + 51152 1 0 0 Botje_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Botje99 + 51153 1 0 0 Botje_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Botje99 + 51154 1 0 0 Botje_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Botje99 + 51155 1 0 0 Botje_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Botje99 + 51156 1 0 0 Botje_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Botje99 + 51157 1 0 0 Botje_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Botje99 + 51158 1 0 0 Botje_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Botje99 + 51159 1 0 0 Botje_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Botje99 + 51160 1 0 0 Botje_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Botje99 + 51161 1 0 0 Botje_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Botje99 + 51162 1 0 0 Botje_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Botje99 + 51163 1 0 0 Botje_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Botje99 + 51164 1 0 0 Botje_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Botje99 + 51165 1 0 0 Botje_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Botje99 + 51166 1 0 0 Botje_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Botje99 + 51167 1 0 0 Botje_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Botje99 + 51168 1 0 0 Botje_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Botje99 + 51169 1 0 0 Botje_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Botje99 + 51170 1 0 0 Botje_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Botje99 + 51171 1 0 0 Botje_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Botje99 + 51172 1 0 0 Botje_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Botje99 + 51173 1 0 0 Botje_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Botje99 + 51174 1 0 0 Botje_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Botje99 + 51175 1 0 0 Botje_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Botje99 + 51176 1 0 0 Botje_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Botje99 + 51177 1 0 0 Botje_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Botje99 + 51178 1 0 0 Botje_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Botje99 + 51179 1 0 0 Botje_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Botje99 + 51180 1 0 0 Botje_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Botje99 + 51181 1 0 0 Botje_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Botje99 + 51182 1 0 0 Botje_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Botje99 + 51183 1 0 0 Botje_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Botje99 + 51184 1 0 0 Botje_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Botje99 + 51185 1 0 0 Botje_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Botje99 + 51186 1 0 0 Botje_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Botje99 + 51187 1 0 0 Botje_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Botje99 + 51188 1 0 0 Botje_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Botje99 + 51189 1 0 0 Botje_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Botje99 + 51190 1 0 0 Botje_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Botje99 + 51191 1 0 0 Botje_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Botje99 + 51192 1 0 0 Botje_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Botje99 + 51193 1 0 0 Botje_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Botje99 + 51194 1 0 0 Botje_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Botje99 + 51195 1 0 0 Botje_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Botje99 + 51196 1 0 0 Botje_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Botje99 + 51197 1 0 0 Botje_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Botje99 + 51198 1 0 0 Botje_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Botje99 + 51199 1 0 0 Botje_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Botje99 + 51200 1 0 0 Botje_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Botje99 + 51201 1 0 0 Botje_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Botje99 + 51202 1 0 0 Botje_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Botje99 + 51203 1 0 0 Botje_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Botje99 + 51204 1 0 0 Botje_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Botje99 + 51205 1 0 0 Botje_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Botje99 + 51206 1 0 0 Botje_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Botje99 + 51207 1 0 0 Botje_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Botje99 + 51208 1 0 0 Botje_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Botje99 + 51209 1 0 0 Botje_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Botje99 + 51210 1 0 0 Botje_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Botje99 + 51211 1 0 0 Botje_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Botje99 + 51212 1 0 0 Botje_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Botje99 + 51213 1 0 0 Botje_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Botje99 + 51214 1 0 0 Botje_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Botje99 + 51215 1 0 0 Botje_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Botje99 + 51216 1 0 0 Botje_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Botje99 + 51217 1 0 0 Botje_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Botje99 + 51218 1 0 0 Botje_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Botje99 + 51219 1 0 0 Botje_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Botje99 + 51220 1 0 0 Botje_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Botje99 + 51221 1 0 0 Botje_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Botje99 + 51222 1 0 0 Botje_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Botje99 + 51223 1 0 0 Botje_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Botje99 + 51224 1 0 0 Botje_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Botje99 + 51225 1 0 0 Botje_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Botje99 + 51226 1 0 0 Botje_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Botje99 + 51227 1 0 0 Botje_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Botje99 + 51228 1 0 0 Botje_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Botje99 + 51229 1 0 0 Botje_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Botje99 + 51230 1 0 0 Botje_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Botje99 + 51231 1 0 0 Botje_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Botje99 + 51232 1 0 0 Botje_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Botje99 + 51233 1 0 0 Botje_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Botje99 + 51234 1 0 0 Botje_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Botje99 + 51235 1 0 0 Botje_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Botje99 + 51236 1 0 0 Botje_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Botje99 + 51237 1 0 0 Botje_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Botje99 + 51238 1 0 0 Botje_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Botje99 + 51239 1 0 0 Botje_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Botje99 + 51240 1 0 0 Botje_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Botje99 + 51241 1 0 0 Botje_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Botje99 + 51242 1 0 0 Botje_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Botje99 + 51243 1 0 0 Botje_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Botje99 + 51244 1 0 0 Botje_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Botje99 + 51245 1 0 0 Botje_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Botje99 + 51246 1 0 0 Botje_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Botje99 + 51247 1 0 0 Botje_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Botje99 + 51248 1 0 0 Botje_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Botje99 + 51249 1 0 0 Botje_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Botje99 + 51250 1 0 0 Botje_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Botje99 + 51251 1 0 0 Botje_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Botje99 + 51252 1 0 0 Botje_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Botje99 + 51253 1 0 0 Botje_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Botje99 + 51254 1 0 0 Botje_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Botje99 + 51255 1 0 0 Botje_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Botje99 + 51256 1 0 0 Botje_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Botje99 + 51257 1 0 0 Botje_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Botje99 + 51258 1 0 0 Botje_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Botje99 + 51259 1 0 0 Botje_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Botje99 + 51260 1 0 0 Botje_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Botje99 + 51261 1 0 0 Botje_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Botje99 + 51262 1 0 0 Botje_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Botje99 + 51263 1 0 0 Botje_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Botje99 + 51264 1 0 0 Botje_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Botje99 + 51265 1 0 0 Botje_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Botje99 + 51266 1 0 0 Botje_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Botje99 + 51267 1 0 0 Botje_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Botje99 + 51268 1 0 0 Botje_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Botje99 + 51269 1 0 0 Botje_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Botje99 + 51270 1 0 0 Botje_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Botje99 + 51271 1 0 0 Botje_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Botje99 + 51272 1 0 0 Botje_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Botje99 + 51273 1 0 0 Botje_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Botje99 + 51274 1 0 0 Botje_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Botje99 + 51275 1 0 0 Botje_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Botje99 + 51276 1 0 0 Botje_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Botje99 + 51277 1 0 0 Botje_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Botje99 + 51278 1 0 0 Botje_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Botje99 + 51279 1 0 0 Botje_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Botje99 + 51280 1 0 0 Botje_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Botje99 + 51281 1 0 0 Botje_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Botje99 + 51282 1 0 0 Botje_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Botje99 + 51283 1 0 0 Botje_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Botje99 + 51284 1 0 0 Botje_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Botje99 + 51285 1 0 0 Botje_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Botje99 + 51286 1 0 0 Botje_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Botje99 + 51287 1 0 0 Botje_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Botje99 + 51288 1 0 0 Botje_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Botje99 + 51289 1 0 0 Botje_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Botje99 + 51290 1 0 0 Botje_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Botje99 + 51291 1 0 0 Botje_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Botje99 + 51292 1 0 0 Botje_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Botje99 + 51293 1 0 0 Botje_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Botje99 + 51294 1 0 0 Botje_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Botje99 + 51295 1 0 0 Botje_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Botje99 + 51296 1 0 0 Botje_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Botje99 + 51297 1 0 0 Botje_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Botje99 + 51298 1 0 0 Botje_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Botje99 + 51299 1 0 0 Botje_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Botje99 + 51300 1 0 0 Botje_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Botje99 + 51301 1 0 0 Botje_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Botje99 + 51302 1 0 0 Botje_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Botje99 + 51303 1 0 0 Botje_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Botje99 + 51304 1 0 0 Botje_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Botje99 + 51305 1 0 0 Botje_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Botje99 + 51306 1 0 0 Botje_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Botje99 + 51307 1 0 0 Botje_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Botje99 + 51308 1 0 0 Botje_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Botje99 + 51309 1 0 0 Botje_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Botje99 + 51310 1 0 0 Botje_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Botje99 + 51311 1 0 0 Botje_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Botje99 + 51312 1 0 0 Botje_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Botje99 + 51313 1 0 0 Botje_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Botje99 + 51314 1 0 0 Botje_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Botje99 + 51315 1 0 0 Botje_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Botje99 + 51316 1 0 0 Botje_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Botje99 + 51317 1 0 0 Botje_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Botje99 + 51318 1 0 0 Botje_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Botje99 + 51319 1 0 0 Botje_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Botje99 + 51320 1 0 0 Botje_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Botje99 + 51321 1 0 0 Botje_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Botje99 + 51322 1 0 0 Botje_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Botje99 + 51323 1 0 0 Botje_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Botje99 + 51324 1 0 0 Botje_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Botje99 + 51325 1 0 0 Botje_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Botje99 + 51326 1 0 0 Botje_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Botje99 + 51327 1 0 0 Botje_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Botje99 + 51328 1 0 0 Botje_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Botje99 + 51329 1 0 0 Botje_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Botje99 + 51330 1 0 0 Botje_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Botje99 + 51331 1 0 0 Botje_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Botje99 + 51332 1 0 0 Botje_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Botje99 + 51333 1 0 0 Botje_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Botje99 + 51334 1 0 0 Botje_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Botje99 + 51335 1 0 0 Botje_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Botje99 + 51336 1 0 0 Botje_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Botje99 + 51337 1 0 0 Botje_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Botje99 + 51338 1 0 0 Botje_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Botje99 + 51339 1 0 0 Botje_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Botje99 + 51340 1 0 0 Botje_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Botje99 + 51341 1 0 0 Botje_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Botje99 + 51342 1 0 0 Botje_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Botje99 + 51343 1 0 0 Botje_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Botje99 + 51344 1 0 0 Botje_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Botje99 + 51345 1 0 0 Botje_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Botje99 + 51346 1 0 0 Botje_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Botje99 + 51347 1 0 0 Botje_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Botje99 + 51348 1 0 0 Botje_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Botje99 + 51349 1 0 0 Botje_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Botje99 + 51350 1 0 0 Botje_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Botje99 + 51351 1 0 0 Botje_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Botje99 + 51352 1 0 0 Botje_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Botje99 + 51353 1 0 0 Botje_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Botje99 + 51354 1 0 0 Botje_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Botje99 + 51355 1 0 0 Botje_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Botje99 + 51356 1 0 0 Botje_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Botje99 + 51357 1 0 0 Botje_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Botje99 + 51358 1 0 0 Botje_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Botje99 + 51359 1 0 0 Botje_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Botje99 + 51360 1 0 0 Botje_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Botje99 + 51361 1 0 0 Botje_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Botje99 + 51362 1 0 0 Botje_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Botje99 + 51363 1 0 0 Botje_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Botje99 + 51364 1 0 0 Botje_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Botje99 + 51365 1 0 0 Botje_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Botje99 + 51366 1 0 0 Botje_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Botje99 + 51367 1 0 0 Botje_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Botje99 + 51368 1 0 0 Botje_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Botje99 + 51369 1 0 0 Botje_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Botje99 + 51370 1 0 0 Botje_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Botje99 + 51371 1 0 0 Botje_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Botje99 + 51372 1 0 0 Botje_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Botje99 + 51373 1 0 0 Botje_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Botje99 + 51374 1 0 0 Botje_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Botje99 + 51375 1 0 0 Botje_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Botje99 + 51376 1 0 0 Botje_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Botje99 + 51377 1 0 0 Botje_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Botje99 + 51378 1 0 0 Botje_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Botje99 + 51379 1 0 0 Botje_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Botje99 + 51380 1 0 0 Botje_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Botje99 + 51381 1 0 0 Botje_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Botje99 + 51382 1 0 0 Botje_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Botje99 + 51383 1 0 0 Botje_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Botje99 + 51384 1 0 0 Botje_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Botje99 + 51385 1 0 0 Botje_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Botje99 + 51386 1 0 0 Botje_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Botje99 + 51387 1 0 0 Botje_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Botje99 + 51388 1 0 0 Botje_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Botje99 + 51389 1 0 0 Botje_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Botje99 + 51390 1 0 0 Botje_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Botje99 + 51391 1 0 0 Botje_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Botje99 + 51392 1 0 0 Botje_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Botje99 + 51393 1 0 0 Botje_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Botje99 + 51394 1 0 0 Botje_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Botje99 + 51395 1 0 0 Botje_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Botje99 + 51396 1 0 0 Botje_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Botje99 + 51397 1 0 0 Botje_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Botje99 + 51398 1 0 0 Botje_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Botje99 + 51399 1 0 0 Botje_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Botje99 + 51400 1 0 0 Botje_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Botje99 + 51401 1 0 0 Botje_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Botje99 + 51402 1 0 0 Botje_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Botje99 + 51403 1 0 0 Botje_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Botje99 + 51404 1 0 0 Botje_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Botje99 + 51405 1 0 0 Botje_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Botje99 + 51406 1 0 0 Botje_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Botje99 + 51407 1 0 0 Botje_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Botje99 + 51408 1 0 0 Botje_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Botje99 + 51409 1 0 0 Botje_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Botje99 + 51410 1 0 0 Botje_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Botje99 + 51411 1 0 0 Botje_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Botje99 + 51412 1 0 0 Botje_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Botje99 + 51413 1 0 0 Botje_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Botje99 + 51414 1 0 0 Botje_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Botje99 + 51415 1 0 0 Botje_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Botje99 + 51416 1 0 0 Botje_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Botje99 + 51417 1 0 0 Botje_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Botje99 + 51418 1 0 0 Botje_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Botje99 + 51419 1 0 0 Botje_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Botje99 + 51420 1 0 0 Botje_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Botje99 + 51421 1 0 0 Botje_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Botje99 + 51422 1 0 0 Botje_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Botje99 + 51423 1 0 0 Botje_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Botje99 + 51424 1 0 0 Botje_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Botje99 + 51425 1 0 0 Botje_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Botje99 + 51426 1 0 0 Botje_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Botje99 + 51427 1 0 0 Botje_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Botje99 + 51428 1 0 0 Botje_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Botje99 + 51429 1 0 0 Botje_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Botje99 + 51430 1 0 0 Botje_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Botje99 + 51431 1 0 0 Botje_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Botje99 + 51432 1 0 0 Botje_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Botje99 + 51433 1 0 0 Botje_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Botje99 + 51434 1 0 0 Botje_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Botje99 + 51435 1 0 0 Botje_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Botje99 + 51436 1 0 0 Botje_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Botje99 + 51437 1 0 0 Botje_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Botje99 + 51438 1 0 0 Botje_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Botje99 + 51439 1 0 0 Botje_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Botje99 + 51440 1 0 0 Botje_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Botje99 + 51441 1 0 0 Botje_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Botje99 + 51442 1 0 0 Botje_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Botje99 + 51443 1 0 0 Botje_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Botje99 + 51444 1 0 0 Botje_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Botje99 + 51445 1 0 0 Botje_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Botje99 + 51446 1 0 0 Botje_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Botje99 + 51447 1 0 0 Botje_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Botje99 + 51448 1 0 0 Botje_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Botje99 + 51449 1 0 0 Botje_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Botje99 + 51450 1 0 0 Botje_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Botje99 + 51451 1 0 0 Botje_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Botje99 + 51452 1 0 0 Botje_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Botje99 + 51453 1 0 0 Botje_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Botje99 + 51454 1 0 0 Botje_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Botje99 + 51455 1 0 0 Botje_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Botje99 + 51456 1 0 0 Botje_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Botje99 + 51457 1 0 0 Botje_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Botje99 + 51458 1 0 0 Botje_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Botje99 + 51459 1 0 0 Botje_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Botje99 + 51460 1 0 0 Botje_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Botje99 + 51461 1 0 0 Botje_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Botje99 + 51462 1 0 0 Botje_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Botje99 + 51463 1 0 0 Botje_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Botje99 + 51464 1 0 0 Botje_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Botje99 + 51465 1 0 0 Botje_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Botje99 + 51466 1 0 0 Botje_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Botje99 + 51467 1 0 0 Botje_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Botje99 + 51468 1 0 0 Botje_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Botje99 + 51469 1 0 0 Botje_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Botje99 + 51470 1 0 0 Botje_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Botje99 + 51471 1 0 0 Botje_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Botje99 + 51472 1 0 0 Botje_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Botje99 + 51473 1 0 0 Botje_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Botje99 + 51474 1 0 0 Botje_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Botje99 + 51475 1 0 0 Botje_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Botje99 + 51476 1 0 0 Botje_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Botje99 + 51477 1 0 0 Botje_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Botje99 + 51478 1 0 0 Botje_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Botje99 + 51479 1 0 0 Botje_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Botje99 + 51480 1 0 0 Botje_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Botje99 + 51481 1 0 0 Botje_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Botje99 + 51482 1 0 0 Botje_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Botje99 + 51483 1 0 0 Botje_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Botje99 + 51484 1 0 0 Botje_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Botje99 + 51485 1 0 0 Botje_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Botje99 + 51486 1 0 0 Botje_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Botje99 + 51487 1 0 0 Botje_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Botje99 + 51488 1 0 0 Botje_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Botje99 + 51489 1 0 0 Botje_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Botje99 + 51490 1 0 0 Botje_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Botje99 + 51491 1 0 0 Botje_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Botje99 + 51492 1 0 0 Botje_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Botje99 + 51493 1 0 0 Botje_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Botje99 + 51494 1 0 0 Botje_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Botje99 + 51495 1 0 0 Botje_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Botje99 + 51496 1 0 0 Botje_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Botje99 + 51497 1 0 0 Botje_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Botje99 + 51498 1 0 0 Botje_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Botje99 + 51499 1 0 0 Botje_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Botje99 + 51500 1 0 0 Botje_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Botje99 + 51501 1 0 0 Botje_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Botje99 + 51502 1 0 0 Botje_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Botje99 + 51503 1 0 0 Botje_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Botje99 + 51504 1 0 0 Botje_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Botje99 + 51505 1 0 0 Botje_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Botje99 + 51506 1 0 0 Botje_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Botje99 + 51507 1 0 0 Botje_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Botje99 + 51508 1 0 0 Botje_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Botje99 + 51509 1 0 0 Botje_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Botje99 + 51510 1 0 0 Botje_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Botje99 + 51511 1 0 0 Botje_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Botje99 + 51512 1 0 0 Botje_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Botje99 + 51513 1 0 0 Botje_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Botje99 + 51514 1 0 0 Botje_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Botje99 + 51515 1 0 0 Botje_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Botje99 + 51516 1 0 0 Botje_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Botje99 + 51517 1 0 0 Botje_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Botje99 + 51518 1 0 0 Botje_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Botje99 + 51519 1 0 0 Botje_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Botje99 + 51520 1 0 0 Botje_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Botje99 + 51521 1 0 0 Botje_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Botje99 + 51522 1 0 0 Botje_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Botje99 + 51523 1 0 0 Botje_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Botje99 + 51524 1 0 0 Botje_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Botje99 + 51525 1 0 0 Botje_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Botje99 + 51526 1 0 0 Botje_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Botje99 + 51527 1 0 0 Botje_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Botje99 + 51528 1 0 0 Botje_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Botje99 + 51529 1 0 0 Botje_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Botje99 + 51530 1 0 0 Botje_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Botje99 + 51531 1 0 0 Botje_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Botje99 + 51532 1 0 0 Botje_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Botje99 + 51533 1 0 0 Botje_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Botje99 + 51534 1 0 0 Botje_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Botje99 + 51535 1 0 0 Botje_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Botje99 + 51536 1 0 0 Botje_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Botje99 + 51537 1 0 0 Botje_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Botje99 + 51538 1 0 0 Botje_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Botje99 + 51539 1 0 0 Botje_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Botje99 + 51540 1 0 0 Botje_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Botje99 + 51541 1 0 0 Botje_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Botje99 + 51542 1 0 0 Botje_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Botje99 + 51543 1 0 0 Botje_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Botje99 + 51544 1 0 0 Botje_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Botje99 + 51545 1 0 0 Botje_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Botje99 + 51546 1 0 0 Botje_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Botje99 + 51547 1 0 0 Botje_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Botje99 + 51548 1 0 0 Botje_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Botje99 + 51549 1 0 0 Botje_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Botje99 + 51550 1 0 0 Botje_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Botje99 + 51551 1 0 0 Botje_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Botje99 + 51552 1 0 0 Botje_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Botje99 + 51553 1 0 0 Botje_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Botje99 + 51554 1 0 0 Botje_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Botje99 + 51555 1 0 0 Botje_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Botje99 + 51556 1 0 0 Botje_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Botje99 + 51557 1 0 0 Botje_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Botje99 + 51558 1 0 0 Botje_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Botje99 + 51559 1 0 0 Botje_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Botje99 + 51560 1 0 0 Botje_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Botje99 + 51561 1 0 0 Botje_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Botje99 + 51562 1 0 0 Botje_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Botje99 + 51563 1 0 0 Botje_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Botje99 + 51564 1 0 0 Botje_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Botje99 + 51565 1 0 0 Botje_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Botje99 + 51566 1 0 0 Botje_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Botje99 + 51567 1 0 0 Botje_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Botje99 + 51568 1 0 0 Botje_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Botje99 + 51569 1 0 0 Botje_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Botje99 + 51570 1 0 0 Botje_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Botje99 + 51571 1 0 0 Botje_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Botje99 + 51572 1 0 0 Botje_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Botje99 + 51573 1 0 0 Botje_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Botje99 + 51574 1 0 0 Botje_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Botje99 + 51575 1 0 0 Botje_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Botje99 + 51576 1 0 0 Botje_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Botje99 + 51577 1 0 0 Botje_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Botje99 + 51578 1 0 0 Botje_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Botje99 + 51579 1 0 0 Botje_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Botje99 + 51580 1 0 0 Botje_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Botje99 + 51581 1 0 0 Botje_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Botje99 + 51582 1 0 0 Botje_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Botje99 + 51583 1 0 0 Botje_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Botje99 + 51584 1 0 0 Botje_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Botje99 + 51585 1 0 0 Botje_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Botje99 + 51586 1 0 0 Botje_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Botje99 + 51587 1 0 0 Botje_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Botje99 + 51588 1 0 0 Botje_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Botje99 + 51589 1 0 0 Botje_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Botje99 + 51590 1 0 0 Botje_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Botje99 + 51591 1 0 0 Botje_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Botje99 + 51592 1 0 0 Botje_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Botje99 + 51593 1 0 0 Botje_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Botje99 + 51594 1 0 0 Botje_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Botje99 + 51595 1 0 0 Botje_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Botje99 + 51596 1 0 0 Botje_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Botje99 + 51597 1 0 0 Botje_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Botje99 + 51598 1 0 0 Botje_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Botje99 + 51599 1 0 0 Botje_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Botje99 + 51600 1 0 0 Botje_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Botje99 + 51601 1 0 0 Botje_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Botje99 + 51602 1 0 0 Botje_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Botje99 + 51603 1 0 0 Botje_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Botje99 + 51604 1 0 0 Botje_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Botje99 + 51605 1 0 0 Botje_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Botje99 + 51606 1 0 0 Botje_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Botje99 + 51607 1 0 0 Botje_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Botje99 + 51608 1 0 0 Botje_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Botje99 + 51609 1 0 0 Botje_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Botje99 + 51610 1 0 0 Botje_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Botje99 + 51611 1 0 0 Botje_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Botje99 + 51612 1 0 0 Botje_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Botje99 + 51613 1 0 0 Botje_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Botje99 + 51614 1 0 0 Botje_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Botje99 + 51615 1 0 0 Botje_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Botje99 + 51616 1 0 0 Botje_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Botje99 + 51617 1 0 0 Botje_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Botje99 + 51618 1 0 0 Botje_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Botje99 + 51619 1 0 0 Botje_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Botje99 + 51620 1 0 0 Botje_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Botje99 + 51621 1 0 0 Botje_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Botje99 + 51622 1 0 0 Botje_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Botje99 + 51623 1 0 0 Botje_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Botje99 + 51624 1 0 0 Botje_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Botje99 + 51625 1 0 0 Botje_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Botje99 + 51626 1 0 0 Botje_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Botje99 + 51627 1 0 0 Botje_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Botje99 + 51628 1 0 0 Botje_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Botje99 + 51629 1 0 0 Botje_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Botje99 + 51630 1 0 0 Botje_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Botje99 + 51631 1 0 0 Botje_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Botje99 + 51632 1 0 0 Botje_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Botje99 + 51633 1 0 0 Botje_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Botje99 + 51634 1 0 0 Botje_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Botje99 + 51635 1 0 0 Botje_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Botje99 + 51636 1 0 0 Botje_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Botje99 + 51637 1 0 0 Botje_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Botje99 + 51638 1 0 0 Botje_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Botje99 + 51639 1 0 0 Botje_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Botje99 + 51640 1 0 0 Botje_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Botje99 + 51641 1 0 0 Botje_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Botje99 + 51642 1 0 0 Botje_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Botje99 + 51643 1 0 0 Botje_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Botje99 + 51644 1 0 0 Botje_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Botje99 + 51645 1 0 0 Botje_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Botje99 + 51646 1 0 0 Botje_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Botje99 + 51647 1 0 0 Botje_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Botje99 + 51648 1 0 0 Botje_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Botje99 + 51649 1 0 0 Botje_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Botje99 + 51650 1 0 0 Botje_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Botje99 + 51651 1 0 0 Botje_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Botje99 + 51652 1 0 0 Botje_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Botje99 + 51653 1 0 0 Botje_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Botje99 + 51654 1 0 0 Botje_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Botje99 + 51655 1 0 0 Botje_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Botje99 + 51656 1 0 0 Botje_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Botje99 + 51657 1 0 0 Botje_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Botje99 + 51658 1 0 0 Botje_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Botje99 + 51659 1 0 0 Botje_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Botje99 + 51660 1 0 0 Botje_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Botje99 + 51661 1 0 0 Botje_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Botje99 + 51662 1 0 0 Botje_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Botje99 + 51663 1 0 0 Botje_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Botje99 + 51664 1 0 0 Botje_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Botje99 + 51665 1 0 0 Botje_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Botje99 + 51666 1 0 0 Botje_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Botje99 + 51667 1 0 0 Botje_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Botje99 + 51668 1 0 0 Botje_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Botje99 + 51669 1 0 0 Botje_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Botje99 + 51670 1 0 0 Botje_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Botje99 + 51671 1 0 0 Botje_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Botje99 + 51672 1 0 0 Botje_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Botje99 + 51673 1 0 0 Botje_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Botje99 + 51674 1 0 0 Botje_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Botje99 + 51675 1 0 0 Botje_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Botje99 + 51676 1 0 0 Botje_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Botje99 + 51677 1 0 0 Botje_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Botje99 + 51678 1 0 0 Botje_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Botje99 + 51679 1 0 0 Botje_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Botje99 + 51680 1 0 0 Botje_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Botje99 + 51681 1 0 0 Botje_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Botje99 + 51682 1 0 0 Botje_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Botje99 + 51683 1 0 0 Botje_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Botje99 + 51684 1 0 0 Botje_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Botje99 + 51685 1 0 0 Botje_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Botje99 + 51686 1 0 0 Botje_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Botje99 + 51687 1 0 0 Botje_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Botje99 + 51688 1 0 0 Botje_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Botje99 + 51689 1 0 0 Botje_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Botje99 + 51690 1 0 0 Botje_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Botje99 + 51691 1 0 0 Botje_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Botje99 + 51692 1 0 0 Botje_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Botje99 + 51693 1 0 0 Botje_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Botje99 + 51694 1 0 0 Botje_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Botje99 + 51695 1 0 0 Botje_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Botje99 + 51696 1 0 0 Botje_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Botje99 + 51697 1 0 0 Botje_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Botje99 + 51698 1 0 0 Botje_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Botje99 + 51699 1 0 0 Botje_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Botje99 + 51700 1 0 0 Botje_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Botje99 + 51701 1 0 0 Botje_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Botje99 + 51702 1 0 0 Botje_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Botje99 + 51703 1 0 0 Botje_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Botje99 + 51704 1 0 0 Botje_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Botje99 + 51705 1 0 0 Botje_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Botje99 + 51706 1 0 0 Botje_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Botje99 + 51707 1 0 0 Botje_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Botje99 + 51708 1 0 0 Botje_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Botje99 + 51709 1 0 0 Botje_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Botje99 + 51710 1 0 0 Botje_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Botje99 + 51711 1 0 0 Botje_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Botje99 + 51712 1 0 0 Botje_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Botje99 + 51713 1 0 0 Botje_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Botje99 + 51714 1 0 0 Botje_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Botje99 + 51715 1 0 0 Botje_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Botje99 + 51716 1 0 0 Botje_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Botje99 + 51717 1 0 0 Botje_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Botje99 + 51718 1 0 0 Botje_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Botje99 + 51719 1 0 0 Botje_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Botje99 + 51720 1 0 0 Botje_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Botje99 + 51721 1 0 0 Botje_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Botje99 + 51722 1 0 0 Botje_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Botje99 + 51723 1 0 0 Botje_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Botje99 + 51724 1 0 0 Botje_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Botje99 + 51725 1 0 0 Botje_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Botje99 + 51726 1 0 0 Botje_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Botje99 + 51727 1 0 0 Botje_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Botje99 + 51728 1 0 0 Botje_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Botje99 + 51729 1 0 0 Botje_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Botje99 + 51730 1 0 0 Botje_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Botje99 + 51731 1 0 0 Botje_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Botje99 + 51732 1 0 0 Botje_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Botje99 + 51733 1 0 0 Botje_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Botje99 + 51734 1 0 0 Botje_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Botje99 + 51735 1 0 0 Botje_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Botje99 + 51736 1 0 0 Botje_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Botje99 + 51737 1 0 0 Botje_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Botje99 + 51738 1 0 0 Botje_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Botje99 + 51739 1 0 0 Botje_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Botje99 + 51740 1 0 0 Botje_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Botje99 + 51741 1 0 0 Botje_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Botje99 + 51742 1 0 0 Botje_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Botje99 + 51743 1 0 0 Botje_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Botje99 + 51744 1 0 0 Botje_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Botje99 + 51745 1 0 0 Botje_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Botje99 + 51746 1 0 0 Botje_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Botje99 + 51747 1 0 0 Botje_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Botje99 + 51748 1 0 0 Botje_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Botje99 + 51749 1 0 0 Botje_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Botje99 + 51750 1 0 0 Botje_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Botje99 + 51751 1 0 0 Botje_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Botje99 + 51752 1 0 0 Botje_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Botje99 + 51753 1 0 0 Botje_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Botje99 + 51754 1 0 0 Botje_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Botje99 + 51755 1 0 0 Botje_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Botje99 + 51756 1 0 0 Botje_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Botje99 + 51757 1 0 0 Botje_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Botje99 + 51758 1 0 0 Botje_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Botje99 + 51759 1 0 0 Botje_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Botje99 + 51760 1 0 0 Botje_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Botje99 + 51761 1 0 0 Botje_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Botje99 + 51762 1 0 0 Botje_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Botje99 + 51763 1 0 0 Botje_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Botje99 + 51764 1 0 0 Botje_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Botje99 + 51765 1 0 0 Botje_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Botje99 + 51766 1 0 0 Botje_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Botje99 + 51767 1 0 0 Botje_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Botje99 + 51768 1 0 0 Botje_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Botje99 + 51769 1 0 0 Botje_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Botje99 + 51770 1 0 0 Botje_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Botje99 + 51771 1 0 0 Botje_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Botje99 + 51772 1 0 0 Botje_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Botje99 + 51773 1 0 0 Botje_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Botje99 + 51774 1 0 0 Botje_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Botje99 + 51775 1 0 0 Botje_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Botje99 + 51776 1 0 0 Botje_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Botje99 + 51777 1 0 0 Botje_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Botje99 + 51778 1 0 0 Botje_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Botje99 + 51779 1 0 0 Botje_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Botje99 + 51780 1 0 0 Botje_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Botje99 + 51781 1 0 0 Botje_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Botje99 + 51782 1 0 0 Botje_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Botje99 + 51783 1 0 0 Botje_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Botje99 + 51784 1 0 0 Botje_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Botje99 + 51785 1 0 0 Botje_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Botje99 + 51786 1 0 0 Botje_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Botje99 + 51787 1 0 0 Botje_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Botje99 + 51788 1 0 0 Botje_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Botje99 + 51789 1 0 0 Botje_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Botje99 + 51790 1 0 0 Botje_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Botje99 + 51791 1 0 0 Botje_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Botje99 + 51792 1 0 0 Botje_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Botje99 + 51793 1 0 0 Botje_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Botje99 + 51794 1 0 0 Botje_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Botje99 + 51795 1 0 0 Botje_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Botje99 + 51796 1 0 0 Botje_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Botje99 + 51797 1 0 0 Botje_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Botje99 + 51798 1 0 0 Botje_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Botje99 + 51799 1 0 0 Botje_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Botje99 + 51800 1 0 0 Botje_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Botje99 + 51801 1 0 0 Botje_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Botje99 + 51802 1 0 0 Botje_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Botje99 + 51803 1 0 0 Botje_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Botje99 + 51804 1 0 0 Botje_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Botje99 + 51805 1 0 0 Botje_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Botje99 + 51806 1 0 0 Botje_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Botje99 + 51807 1 0 0 Botje_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Botje99 + 51808 1 0 0 Botje_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Botje99 + 51809 1 0 0 Botje_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Botje99 + 51810 1 0 0 Botje_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Botje99 + 51811 1 0 0 Botje_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Botje99 + 51812 1 0 0 Botje_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Botje99 + 51813 1 0 0 Botje_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Botje99 + 51814 1 0 0 Botje_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Botje99 + 51815 1 0 0 Botje_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Botje99 + 51816 1 0 0 Botje_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Botje99 + 51817 1 0 0 Botje_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Botje99 + 51818 1 0 0 Botje_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Botje99 + 51819 1 0 0 Botje_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Botje99 + 51820 1 0 0 Botje_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Botje99 + 51821 1 0 0 Botje_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Botje99 + 51822 1 0 0 Botje_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Botje99 + 51823 1 0 0 Botje_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Botje99 + 51824 1 0 0 Botje_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Botje99 + 51825 1 0 0 Botje_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Botje99 + 51826 1 0 0 Botje_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Botje99 + 51827 1 0 0 Botje_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Botje99 + 51828 1 0 0 Botje_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Botje99 + 51829 1 0 0 Botje_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Botje99 + 51830 1 0 0 Botje_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Botje99 + 51831 1 0 0 Botje_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Botje99 + 51832 1 0 0 Botje_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Botje99 + 51833 1 0 0 Botje_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Botje99 + 51834 1 0 0 Botje_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Botje99 + 51835 1 0 0 Botje_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Botje99 + 51836 1 0 0 Botje_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Botje99 + 51837 1 0 0 Botje_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Botje99 + 51838 1 0 0 Botje_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Botje99 + 51839 1 0 0 Botje_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Botje99 + 51840 1 0 0 Botje_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Botje99 + 51841 1 0 0 Botje_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Botje99 + 51842 1 0 0 Botje_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Botje99 + 51843 1 0 0 Botje_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Botje99 + 51844 1 0 0 Botje_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Botje99 + 51845 1 0 0 Botje_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Botje99 + 51846 1 0 0 Botje_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Botje99 + 51847 1 0 0 Botje_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Botje99 + 51848 1 0 0 Botje_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Botje99 + 51849 1 0 0 Botje_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Botje99 + 51850 1 0 0 Botje_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Botje99 + 51851 1 0 0 Botje_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Botje99 + 51852 1 0 0 Botje_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Botje99 + 51853 1 0 0 Botje_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Botje99 + 51854 1 0 0 Botje_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Botje99 + 51855 1 0 0 Botje_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Botje99 + 51856 1 0 0 Botje_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Botje99 + 51857 1 0 0 Botje_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Botje99 + 51858 1 0 0 Botje_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Botje99 + 51859 1 0 0 Botje_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Botje99 + 51860 1 0 0 Botje_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Botje99 + 51861 1 0 0 Botje_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Botje99 + 51862 1 0 0 Botje_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Botje99 + 51863 1 0 0 Botje_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Botje99 + 51864 1 0 0 Botje_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Botje99 + 51865 1 0 0 Botje_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Botje99 + 51866 1 0 0 Botje_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Botje99 + 51867 1 0 0 Botje_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Botje99 + 51868 1 0 0 Botje_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Botje99 + 51869 1 0 0 Botje_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Botje99 + 51870 1 0 0 Botje_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Botje99 + 51871 1 0 0 Botje_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Botje99 + 51872 1 0 0 Botje_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Botje99 + 51873 1 0 0 Botje_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Botje99 + 51874 1 0 0 Botje_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Botje99 + 51875 1 0 0 Botje_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Botje99 + 51876 1 0 0 Botje_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Botje99 + 51877 1 0 0 Botje_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Botje99 + 51878 1 0 0 Botje_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Botje99 + 51879 1 0 0 Botje_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Botje99 + 51880 1 0 0 Botje_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Botje99 + 51881 1 0 0 Botje_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Botje99 + 51882 1 0 0 Botje_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Botje99 + 51883 1 0 0 Botje_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Botje99 + 51884 1 0 0 Botje_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Botje99 + 51885 1 0 0 Botje_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Botje99 + 51886 1 0 0 Botje_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Botje99 + 51887 1 0 0 Botje_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Botje99 + 51888 1 0 0 Botje_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Botje99 + 51889 1 0 0 Botje_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Botje99 + 51890 1 0 0 Botje_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Botje99 + 51891 1 0 0 Botje_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Botje99 + 51892 1 0 0 Botje_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Botje99 + 51893 1 0 0 Botje_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Botje99 + 51894 1 0 0 Botje_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Botje99 + 51895 1 0 0 Botje_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Botje99 + 51896 1 0 0 Botje_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Botje99 + 51897 1 0 0 Botje_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Botje99 + 51898 1 0 0 Botje_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Botje99 + 51899 1 0 0 Botje_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Botje99 + 51900 1 0 0 Botje_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Botje99 + 51901 1 0 0 Botje_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Botje99 + 51902 1 0 0 Botje_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Botje99 + 51903 1 0 0 Botje_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Botje99 + 51904 1 0 0 Botje_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Botje99 + 51905 1 0 0 Botje_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Botje99 + 51906 1 0 0 Botje_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Botje99 + 51907 1 0 0 Botje_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Botje99 + 51908 1 0 0 Botje_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Botje99 + 51909 1 0 0 Botje_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Botje99 + 51910 1 0 0 Botje_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Botje99 + 51911 1 0 0 Botje_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Botje99 + 51912 1 0 0 Botje_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Botje99 + 51913 1 0 0 Botje_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Botje99 + 51914 1 0 0 Botje_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Botje99 + 51915 1 0 0 Botje_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Botje99 + 51916 1 0 0 Botje_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Botje99 + 51917 1 0 0 Botje_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Botje99 + 51918 1 0 0 Botje_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Botje99 + 51919 1 0 0 Botje_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Botje99 + 51920 1 0 0 Botje_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Botje99 + 51921 1 0 0 Botje_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Botje99 + 51922 1 0 0 Botje_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Botje99 + 51923 1 0 0 Botje_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Botje99 + 51924 1 0 0 Botje_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Botje99 + 51925 1 0 0 Botje_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Botje99 + 51926 1 0 0 Botje_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Botje99 + 51927 1 0 0 Botje_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Botje99 + 51928 1 0 0 Botje_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Botje99 + 51929 1 0 0 Botje_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Botje99 + 51930 1 0 0 Botje_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Botje99 + 51931 1 0 0 Botje_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Botje99 + 51932 1 0 0 Botje_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Botje99 + 51933 1 0 0 Botje_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Botje99 + 51934 1 0 0 Botje_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Botje99 + 51935 1 0 0 Botje_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Botje99 + 51936 1 0 0 Botje_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Botje99 + 51937 1 0 0 Botje_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Botje99 + 51938 1 0 0 Botje_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Botje99 + 51939 1 0 0 Botje_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Botje99 + 51940 1 0 0 Botje_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Botje99 + 51941 1 0 0 Botje_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Botje99 + 51942 1 0 0 Botje_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Botje99 + 51943 1 0 0 Botje_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Botje99 + 51944 1 0 0 Botje_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Botje99 + 51945 1 0 0 Botje_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Botje99 + 51946 1 0 0 Botje_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Botje99 + 51947 1 0 0 Botje_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Botje99 + 51948 1 0 0 Botje_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Botje99 + 51949 1 0 0 Botje_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Botje99 + 51950 1 0 0 Botje_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Botje99 + 51951 1 0 0 Botje_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Botje99 + 51952 1 0 0 Botje_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Botje99 + 51953 1 0 0 Botje_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Botje99 + 51954 1 0 0 Botje_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Botje99 + 51955 1 0 0 Botje_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Botje99 + 51956 1 0 0 Botje_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Botje99 + 51957 1 0 0 Botje_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Botje99 + 51958 1 0 0 Botje_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Botje99 + 51959 1 0 0 Botje_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Botje99 + 51960 1 0 0 Botje_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Botje99 + 51961 1 0 0 Botje_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Botje99 + 51962 1 0 0 Botje_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Botje99 + 51963 1 0 0 Botje_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Botje99 + 51964 1 0 0 Botje_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Botje99 + 51965 1 0 0 Botje_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Botje99 + 51966 1 0 0 Botje_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Botje99 + 51967 1 0 0 Botje_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Botje99 + 51968 1 0 0 Botje_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Botje99 + 51969 1 0 0 Botje_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Botje99 + 51970 1 0 0 Botje_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Botje99 + 51971 1 0 0 Botje_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Botje99 + 51972 1 0 0 Botje_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Botje99 + 51973 1 0 0 Botje_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Botje99 + 51974 1 0 0 Botje_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Botje99 + 51975 1 0 0 Botje_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Botje99 + 51976 1 0 0 Botje_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Botje99 + 51977 1 0 0 Botje_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Botje99 + 51978 1 0 0 Botje_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Botje99 + 51979 1 0 0 Botje_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Botje99 + 51980 1 0 0 Botje_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Botje99 + 51981 1 0 0 Botje_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Botje99 + 51982 1 0 0 Botje_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Botje99 + 51983 1 0 0 Botje_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Botje99 + 51984 1 0 0 Botje_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Botje99 + 51985 1 0 0 Botje_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Botje99 + 51986 1 0 0 Botje_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Botje99 + 51987 1 0 0 Botje_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Botje99 + 51988 1 0 0 Botje_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Botje99 + 51989 1 0 0 Botje_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Botje99 + 51990 1 0 0 Botje_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Botje99 + 51991 1 0 0 Botje_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Botje99 + 51992 1 0 0 Botje_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Botje99 + 51993 1 0 0 Botje_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Botje99 + 51994 1 0 0 Botje_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Botje99 + 51995 1 0 0 Botje_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Botje99 + 51996 1 0 0 Botje_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Botje99 + 51997 1 0 0 Botje_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Botje99 + 51998 1 0 0 Botje_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Botje99 + 51999 1 0 0 Botje_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Botje99 + 60000 1 0 0 ZEUS2002_TR.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60001 1 0 0 ZEUS2002_TR.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60002 1 0 0 ZEUS2002_TR.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60003 1 0 0 ZEUS2002_TR.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60004 1 0 0 ZEUS2002_TR.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60005 1 0 0 ZEUS2002_TR.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60006 1 0 0 ZEUS2002_TR.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60007 1 0 0 ZEUS2002_TR.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60008 1 0 0 ZEUS2002_TR.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60009 1 0 0 ZEUS2002_TR.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60010 1 0 0 ZEUS2002_TR.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60011 1 0 0 ZEUS2002_TR.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60012 1 0 0 ZEUS2002_TR.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60013 1 0 0 ZEUS2002_TR.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60014 1 0 0 ZEUS2002_TR.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60015 1 0 0 ZEUS2002_TR.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60016 1 0 0 ZEUS2002_TR.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60017 1 0 0 ZEUS2002_TR.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60018 1 0 0 ZEUS2002_TR.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60019 1 0 0 ZEUS2002_TR.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60020 1 0 0 ZEUS2002_TR.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60021 1 0 0 ZEUS2002_TR.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60022 1 0 0 ZEUS2002_TR.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme + 60100 1 0 0 ZEUS2002_ZM.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60101 1 0 0 ZEUS2002_ZM.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60102 1 0 0 ZEUS2002_ZM.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60103 1 0 0 ZEUS2002_ZM.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60104 1 0 0 ZEUS2002_ZM.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60105 1 0 0 ZEUS2002_ZM.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60106 1 0 0 ZEUS2002_ZM.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60107 1 0 0 ZEUS2002_ZM.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60108 1 0 0 ZEUS2002_ZM.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60109 1 0 0 ZEUS2002_ZM.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60110 1 0 0 ZEUS2002_ZM.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60111 1 0 0 ZEUS2002_ZM.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60112 1 0 0 ZEUS2002_ZM.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60113 1 0 0 ZEUS2002_ZM.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60114 1 0 0 ZEUS2002_ZM.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60115 1 0 0 ZEUS2002_ZM.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60116 1 0 0 ZEUS2002_ZM.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60117 1 0 0 ZEUS2002_ZM.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme + 60118 1 0 0 ZEUS2002_ZM.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme + 60119 1 0 0 ZEUS2002_ZM.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme + 60120 1 0 0 ZEUS2002_ZM.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme + 60121 1 0 0 ZEUS2002_ZM.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme + 60122 1 0 0 ZEUS2002_ZM.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-Scheme + 60200 1 0 0 ZEUS2002_FF.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60201 1 0 0 ZEUS2002_FF.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60202 1 0 0 ZEUS2002_FF.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60203 1 0 0 ZEUS2002_FF.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60204 1 0 0 ZEUS2002_FF.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60205 1 0 0 ZEUS2002_FF.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60206 1 0 0 ZEUS2002_FF.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60207 1 0 0 ZEUS2002_FF.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60208 1 0 0 ZEUS2002_FF.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60209 1 0 0 ZEUS2002_FF.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60210 1 0 0 ZEUS2002_FF.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60211 1 0 0 ZEUS2002_FF.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60212 1 0 0 ZEUS2002_FF.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60213 1 0 0 ZEUS2002_FF.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60214 1 0 0 ZEUS2002_FF.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60215 1 0 0 ZEUS2002_FF.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60216 1 0 0 ZEUS2002_FF.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60217 1 0 0 ZEUS2002_FF.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60218 1 0 0 ZEUS2002_FF.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60219 1 0 0 ZEUS2002_FF.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60220 1 0 0 ZEUS2002_FF.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60221 1 0 0 ZEUS2002_FF.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60222 1 0 0 ZEUS2002_FF.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme + 60300 1 0 0 ZEUS2005_ZJ.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60301 1 0 0 ZEUS2005_ZJ.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60302 1 0 0 ZEUS2005_ZJ.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60303 1 0 0 ZEUS2005_ZJ.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60304 1 0 0 ZEUS2005_ZJ.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60305 1 0 0 ZEUS2005_ZJ.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60306 1 0 0 ZEUS2005_ZJ.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60307 1 0 0 ZEUS2005_ZJ.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60308 1 0 0 ZEUS2005_ZJ.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60309 1 0 0 ZEUS2005_ZJ.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60310 1 0 0 ZEUS2005_ZJ.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60311 1 0 0 ZEUS2005_ZJ.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60312 1 0 0 ZEUS2005_ZJ.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60313 1 0 0 ZEUS2005_ZJ.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60314 1 0 0 ZEUS2005_ZJ.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60315 1 0 0 ZEUS2005_ZJ.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60316 1 0 0 ZEUS2005_ZJ.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60317 1 0 0 ZEUS2005_ZJ.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60318 1 0 0 ZEUS2005_ZJ.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60319 1 0 0 ZEUS2005_ZJ.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60320 1 0 0 ZEUS2005_ZJ.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60321 1 0 0 ZEUS2005_ZJ.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 60322 1 0 0 ZEUS2005_ZJ.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) + 70050 1 0 0 H12000ms.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70051 1 0 0 H12000msE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70052 1 0 0 H12000msE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70053 1 0 0 H12000msE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70054 1 0 0 H12000msE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70055 1 0 0 H12000msE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70056 1 0 0 H12000msE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70057 1 0 0 H12000msE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70058 1 0 0 H12000msE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70059 1 0 0 H12000msE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70060 1 0 0 H12000msE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70061 1 0 0 H12000msE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70062 1 0 0 H12000msE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70063 1 0 0 H12000msE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70064 1 0 0 H12000msE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70065 1 0 0 H12000msE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70066 1 0 0 H12000msE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70067 1 0 0 H12000msE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70068 1 0 0 H12000msE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70069 1 0 0 H12000msE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70070 1 0 0 H12000msE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(NLO)msbar + 70150 1 0 0 H12000dis.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70151 1 0 0 H12000disE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70152 1 0 0 H12000disE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70153 1 0 0 H12000disE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70154 1 0 0 H12000disE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70155 1 0 0 H12000disE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70156 1 0 0 H12000disE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70157 1 0 0 H12000disE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70158 1 0 0 H12000disE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70159 1 0 0 H12000disE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70160 1 0 0 H12000disE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70161 1 0 0 H12000disE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70162 1 0 0 H12000disE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70163 1 0 0 H12000disE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70164 1 0 0 H12000disE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70165 1 0 0 H12000disE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70166 1 0 0 H12000disE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70167 1 0 0 H12000disE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70168 1 0 0 H12000disE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70169 1 0 0 H12000disE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70170 1 0 0 H12000disE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(NLO)dis + 70250 1 0 0 H12000lo.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(LO) + 70251 1 0 0 H12000loE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(LO) + 70252 1 0 0 H12000loE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(LO) + 70253 1 0 0 H12000loE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(LO) + 70254 1 0 0 H12000loE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(LO) + 70255 1 0 0 H12000loE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(LO) + 70256 1 0 0 H12000loE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(LO) + 70257 1 0 0 H12000loE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(LO) + 70258 1 0 0 H12000loE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(LO) + 70259 1 0 0 H12000loE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(LO) + 70260 1 0 0 H12000loE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(LO) + 70261 1 0 0 H12000loE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(LO) + 70262 1 0 0 H12000loE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(LO) + 70263 1 0 0 H12000loE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(LO) + 70264 1 0 0 H12000loE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(LO) + 70265 1 0 0 H12000loE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(LO) + 70266 1 0 0 H12000loE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(LO) + 70267 1 0 0 H12000loE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(LO) + 70268 1 0 0 H12000loE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(LO) + 70269 1 0 0 H12000loE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(LO) + 70270 1 0 0 H12000loE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(LO) + 80050 1 5 13 GRV98nlo.LHgrid 0 0.8 2000000. 1.E-09 1. GRV98(NLO) + 80051 1 5 14 GRV98nlo.LHgrid 1 0.8 2000000. 1.E-09 1. GRV98(NLO) + 80060 1 5 12 GRV98lo.LHgrid 0 0.8 2000000. 1.E-09 1. GRV98(LO) diff --git a/LHAPDF/lhapdf5.5.1/src/eps09.f b/LHAPDF/lhapdf5.5.1/src/eps09.f index eadc639f248..eba1cd2da1d 100644 --- a/LHAPDF/lhapdf5.5.1/src/eps09.f +++ b/LHAPDF/lhapdf5.5.1/src/eps09.f @@ -1,364 +1,364 @@ -!**************************************************************************** -! -! EPS09.f -! -! An interface for the scale dependent nuclear modifications -! R_f^A(x,Q) = f_A(x,Q)/f_p(x,Q) -! where f_A is the distribution of the parton flavour f for a PROTON in a -! nucleus A, and f_p is the corresponding parton distribution in the -! free proton. -! -! When using this interface, please refer to: -! -! K.J. Eskola, H. Paukkunen and C.A. Salgado, -! "EPS09 - a New Generation of NLO and LO Nuclear Parton Distribution Functions," -! Published as JHEP04(2009) 065. -! Eprint: arXiv:0902.4154 [hep-ph]. -! -! Questions & comments to: -! hannu.paukkunen@phys.jyu.fi -! kari.eskola@phys.jyu.fi -! carlos.salgado@usc.es -! -! *************************************************************************** -! Instructions: -! -! For given input values of -! -! order: 1=LO, 2=NLO ; integer -! pset : 1...31 ; integer -! 1 = central fit -! 2,3 = error sets S{+1}, S{-1} -! 4,5 = error sets S{+2}, S{-2} -! ... ... -! 30,31 = error sets {S+15}, {S-15} -! A : atomic number ; integer -! x : Bjorken-x ; double precision -! Q : scale in GeV ; double precision -! -! the command -! -! Call EPS09(order, pset, A, x, Q, ruv, rdv, ru, rd, rs, rc, rb, rg) -! -! returns the bound proton nuclear corrections R_f^A(x,Q) -! (in double precision) for -! -! ruv = up valence -! rdv = down valence -! ru = up sea -! rd = down sea -! rs = strange -! rc = charm -! rb = bottom -! rg = gluons -! -! The nuclear corrections for bound neutrons can be obtained -! by the isospin symmetry, e.g. the total up quark distribution -! per nucleon in a nucleus A with Z protons is -! -! u_A(x,Q) = Z/A * [ruv*uV_p(x,Q) + ru*uSea_p(x,Q)] + -! (A-Z)/A * [rdv*dV_p(x,Q) + rd*dSea_p(x,Q)] -! -! Note that the parametrization should only be applied at the -! kinematical domain -! -! 1e-6 <= x <= 1 -! 1.3 <= Q <= 1000 GeV. -! -! No warning message is displayed if these limits are -! exceeded, and outside these boundaries the modifications -! are frozen to the boundary values, i.e -! -! for Q > 1000, the modifications at Q=1000 are returned, -! for Q < 1.3, the modifications at Q=1.3 are returned, -! for x > 1, the modifications at x=1 are returned -! for x < 1e-6, the modifications at x=1e-6 are returned, -! -! The data used by the program for required order -! and atomic number A, are stored in separate files -! -! LO : EPS09LOR_A -! NLO: EPS09NLOR_A -! -! which must be located in the working directory. -! -! The error bands for absolute cross-sections and for -! their nuclear ratios should be computed as explained -! in Secs. 2.5 and 4 of arXiv:0902.4154 [hep-ph]. For -! the absolute cross sections, both the errors in the -! free-proton PDFs f_p(x,Q) and the errors in -! the modifications R_f^A(x,Q) should be accounted for. -! For the nuclear ratios, it is sufficient to account only -! for the errors in the modifications R_f^A(x,Q). -! -! ********************************************************* -! ********************************************************* - - - - Subroutine EPS09(order, pset, AAA, xxx, QQQ,ruv, rdv, ru, rd, rs, rc, rb, rg) - - Implicit none - Double precision :: ruv, rdv, ru, rd, rs, rc, rb, rg, QQQ, xxx - Double precision :: LSTEP, x, Q, Q2, allvalues(1:31,1:8,0:50,0:50) - Double precision :: x_i=0.000001, arg(4), fu(4), res, fg(3) - Double precision :: result(9), dummy - Double precision :: realQ, Q2min=1.69, Q2max=1000000.0, Qsteps=50.0 - Double precision :: n_x, zero=0.0 - - Character (Len=50) filenimi - - Integer :: xlinsteps=25, xlogsteps=25, startline, lineno - Integer :: k, p, t, Qpoint, xpoint, pset, iovar - Integer :: setnumber,j, A, openchannel, order, AAA - Integer :: psetlast = -10, Alast = -10, orderlast = -10 - - character*512 dirpath,setpath - - save Alast - save psetlast - save orderlast - save allvalues - -! ********************************************* -! Stop if the set specifications are wrong ones -! ********************************************* - - If (order .NE. 1 .and. order .NE. 2) then - Write(*,*) 'Wrong order!' - Write(*,*) 'LO : order = 1' - Write(*,*) 'NLO: order = 2' - Stop - End If - - If (pset .LT. 1 .or. pset .GT. 31) then - Write(*,*) 'Wrong set!' - Write(*,*) 'Central set: pset = 1' - Write(*,*) 'Error sets : pset = 2...31' - Stop - End If - -! ******************************** -! Make sure not to change any -! specifications given by the user -! ******************************** - - A = AAA - x = xxx - Q = QQQ - Q2 = Q*Q - -! ******************************* -! Freeze x if it's < 10E-6 or > 1 -! ******************************* - - If (x .LT. x_i) Then - x = x_i - End If - If (x .GT. 1) Then - x = 1.0 - End If - -! ************************************ -! Freeze Q^2 if it's < 1.69 or > 10E+6 -! ************************************ - - If (Q2 .LT. Q2min) Then - Q2 = Q2min - End If - If (Q2 .GT. Q2max) Then - Q2 = Q2max - End If - -! If the set specifications have been changed, read the tables again - - If (A .NE. Alast .or. order .NE. orderlast) Then - -! Write(*,*) 'Set changed!' - -! Read the table1 - - If (order .EQ. 1) then - - If (A < 10) Then - Write(filenimi,'("EPS09LOR_", I1)'), A - Else If (A < 100) Then - Write(filenimi,'("EPS09LOR_", I2)'), A - Else If (A < 1000) Then - Write(filenimi,'("EPS09LOR_", I3)'), A - End If - - Else - - If (A < 10) Then - Write(filenimi,'("EPS09NLOR_", I1)'), A - Else If (A < 100) Then - Write(filenimi,'("EPS09NLOR_", I2)'), A - Else If (A < 1000) Then - Write(filenimi,'("EPS09NLOR_", I3)'), A - End If - - End If - - call getdirpath(dirpath) - setpath=dirpath(:LEN_TRIM(dirpath))//"/"//filenimi(:LEN_TRIM(filenimi))//".LHgrid" - print *,setpath(:LEN_TRIM(setpath)) - OPEN (11, file = setpath(:LEN_TRIM(setpath)), status='OLD', IOSTAT=iovar) - - If (iovar .NE. 0) Then - Write(*,*) 'Missing file: ',filenimi - stop - End If - - Do setnumber = 1, 31 - - Do k = 0,50 - - Read(11,*) dummy - - Do t = 0,50 - - Read(11,*) (allvalues(setnumber,p,k,t), p=1,8) - - End Do - End Do - - End Do - - Close(11) - - psetlast = pset - Alast = A - orderlast = order - - End If - -! Find out the position in the loglog Q^2-grid - - realQ = Qsteps * (log(log(Q2)/log(Q2min)))/(log(log(Q2max)/log(Q2min))) - Qpoint = Aint(realQ) - - If (Qpoint .LE. 0) Then - Qpoint = 1 - End If - If (Qpoint .GE. Anint(Qsteps)-1) Then - Qpoint = Anint(Qsteps)-1 - End If - - LSTEP = (1.0/(xlogsteps)) * LOG(0.1/x_i) - -! ********************* -! Interpolate the grids -! ********************* - - Do t=1,8 - -! Find the position in the x-grid - - If (x .LE. 0.1) then - n_x = ((1.0/LSTEP) * Log(x/x_i)) - xpoint = Aint(n_x) - Else - n_x = ((x-0.1)*xlinsteps/(1.0-0.1) + xlogsteps) - xpoint = Aint(n_x) - End If - - If (xpoint .LE. 0) Then - xpoint = 1 - End If - - If (t .EQ. 1 .or. t .EQ. 2) Then - If (xpoint .GE. (xlinsteps+xlogsteps)-4) Then - xpoint = (xlinsteps+xlogsteps)-4 - End If - End If - - If (t .EQ. 3 .or. t .EQ. 4 .or. t .EQ. 5 .or. t .EQ. 6 .or. t .EQ. 7) Then - If (xpoint .GE. (xlinsteps+xlogsteps)-7) Then - xpoint = (xlinsteps+xlogsteps)-7 - End If - End If - - If (t .EQ. 8) Then - If (xpoint .GE. (xlinsteps+xlogsteps)-4) Then - xpoint = (xlinsteps+xlogsteps)-4 - End If - End If - - Do k = 1, 4 - If (xpoint-2+k .LT. xlogsteps) Then - arg(k) = (x_i) * exp(LSTEP * (xpoint-2+k)) - Else - arg(k) = 0.1 + (xpoint-2+k-xlogsteps) * (1-0.1)/xlinsteps - End If - End Do - - Do j=1,3 - - fu(1) = allvalues(pset,t,Qpoint-2+j,xpoint-1) - fu(2) = allvalues(pset,t,Qpoint-2+j,xpoint) - fu(3) = allvalues(pset,t,Qpoint-2+j,xpoint+1) - fu(4) = allvalues(pset,t,Qpoint-2+j,xpoint+2) - Call luovi(fu,arg,4,x,res) - fg(j) = res - -! ***************************************** -! ***************************************** - - End Do - - arg(1) = Qpoint-1 - arg(2) = Qpoint - arg(3) = Qpoint+1 - - Call luovi(fg,arg,3,realQ,res) - - result(t) = res - - End Do - - ruv = max(result(1),zero) - rdv = max(result(2),zero) - ru = max(result(3),zero) - rd = max(result(4),zero) - rs = max(result(5),zero) - rc = max(result(6),zero) - rb = max(result(7),zero) - rg = max(result(8),zero) - -200 Continue - - End Subroutine EPS09 - -! ******************************** -! Modified version of Cern Library -! interpolation routine E100 -! ******************************** - - SUBROUTINE luovi(F,ARG,MMM,Z,SUM) - - Implicit none - INTEGER :: MMM - Double precision :: F(MMM), ARG(MMM), COF(MMM), SUM, Z - INTEGER :: M, MM, I, J, JNDEX, INDEX - - MM = MIN(MMM, 20) - M = MM - 1 - DO 1780 I= 1, MM - COF(I) = F(I) - 1780 Continue - DO 1800 I= 1, M - DO 1790 J= I, M - JNDEX = MM - J - INDEX = JNDEX + I - COF(INDEX) = (COF(INDEX)-COF(INDEX-1))/(ARG(INDEX)-ARG(JNDEX)) - 1790 CONTINUE - 1800 CONTINUE - SUM = COF(MM) - DO 1810 I= 1, M - INDEX = MM - I - SUM = (Z-ARG(INDEX))*SUM + COF(INDEX) - 1810 CONTINUE - - End SUBROUTINE luovi - +!**************************************************************************** +! +! EPS09.f +! +! An interface for the scale dependent nuclear modifications +! R_f^A(x,Q) = f_A(x,Q)/f_p(x,Q) +! where f_A is the distribution of the parton flavour f for a PROTON in a +! nucleus A, and f_p is the corresponding parton distribution in the +! free proton. +! +! When using this interface, please refer to: +! +! K.J. Eskola, H. Paukkunen and C.A. Salgado, +! "EPS09 - a New Generation of NLO and LO Nuclear Parton Distribution Functions," +! Published as JHEP04(2009) 065. +! Eprint: arXiv:0902.4154 [hep-ph]. +! +! Questions & comments to: +! hannu.paukkunen@phys.jyu.fi +! kari.eskola@phys.jyu.fi +! carlos.salgado@usc.es +! +! *************************************************************************** +! Instructions: +! +! For given input values of +! +! order: 1=LO, 2=NLO ; integer +! pset : 1...31 ; integer +! 1 = central fit +! 2,3 = error sets S{+1}, S{-1} +! 4,5 = error sets S{+2}, S{-2} +! ... ... +! 30,31 = error sets {S+15}, {S-15} +! A : atomic number ; integer +! x : Bjorken-x ; double precision +! Q : scale in GeV ; double precision +! +! the command +! +! Call EPS09(order, pset, A, x, Q, ruv, rdv, ru, rd, rs, rc, rb, rg) +! +! returns the bound proton nuclear corrections R_f^A(x,Q) +! (in double precision) for +! +! ruv = up valence +! rdv = down valence +! ru = up sea +! rd = down sea +! rs = strange +! rc = charm +! rb = bottom +! rg = gluons +! +! The nuclear corrections for bound neutrons can be obtained +! by the isospin symmetry, e.g. the total up quark distribution +! per nucleon in a nucleus A with Z protons is +! +! u_A(x,Q) = Z/A * [ruv*uV_p(x,Q) + ru*uSea_p(x,Q)] + +! (A-Z)/A * [rdv*dV_p(x,Q) + rd*dSea_p(x,Q)] +! +! Note that the parametrization should only be applied at the +! kinematical domain +! +! 1e-6 <= x <= 1 +! 1.3 <= Q <= 1000 GeV. +! +! No warning message is displayed if these limits are +! exceeded, and outside these boundaries the modifications +! are frozen to the boundary values, i.e +! +! for Q > 1000, the modifications at Q=1000 are returned, +! for Q < 1.3, the modifications at Q=1.3 are returned, +! for x > 1, the modifications at x=1 are returned +! for x < 1e-6, the modifications at x=1e-6 are returned, +! +! The data used by the program for required order +! and atomic number A, are stored in separate files +! +! LO : EPS09LOR_A +! NLO: EPS09NLOR_A +! +! which must be located in the working directory. +! +! The error bands for absolute cross-sections and for +! their nuclear ratios should be computed as explained +! in Secs. 2.5 and 4 of arXiv:0902.4154 [hep-ph]. For +! the absolute cross sections, both the errors in the +! free-proton PDFs f_p(x,Q) and the errors in +! the modifications R_f^A(x,Q) should be accounted for. +! For the nuclear ratios, it is sufficient to account only +! for the errors in the modifications R_f^A(x,Q). +! +! ********************************************************* +! ********************************************************* + + + + Subroutine EPS09(order, pset, AAA, xxx, QQQ,ruv, rdv, ru, rd, rs, rc, rb, rg) + + Implicit none + Double precision :: ruv, rdv, ru, rd, rs, rc, rb, rg, QQQ, xxx + Double precision :: LSTEP, x, Q, Q2, allvalues(1:31,1:8,0:50,0:50) + Double precision :: x_i=0.000001, arg(4), fu(4), res, fg(3) + Double precision :: result(9), dummy + Double precision :: realQ, Q2min=1.69, Q2max=1000000.0, Qsteps=50.0 + Double precision :: n_x, zero=0.0 + + Character (Len=50) filenimi + + Integer :: xlinsteps=25, xlogsteps=25, startline, lineno + Integer :: k, p, t, Qpoint, xpoint, pset, iovar + Integer :: setnumber,j, A, openchannel, order, AAA + Integer :: psetlast = -10, Alast = -10, orderlast = -10 + + character*512 dirpath,setpath + + save Alast + save psetlast + save orderlast + save allvalues + +! ********************************************* +! Stop if the set specifications are wrong ones +! ********************************************* + + If (order .NE. 1 .and. order .NE. 2) then + Write(*,*) 'Wrong order!' + Write(*,*) 'LO : order = 1' + Write(*,*) 'NLO: order = 2' + Stop + End If + + If (pset .LT. 1 .or. pset .GT. 31) then + Write(*,*) 'Wrong set!' + Write(*,*) 'Central set: pset = 1' + Write(*,*) 'Error sets : pset = 2...31' + Stop + End If + +! ******************************** +! Make sure not to change any +! specifications given by the user +! ******************************** + + A = AAA + x = xxx + Q = QQQ + Q2 = Q*Q + +! ******************************* +! Freeze x if it's < 10E-6 or > 1 +! ******************************* + + If (x .LT. x_i) Then + x = x_i + End If + If (x .GT. 1) Then + x = 1.0 + End If + +! ************************************ +! Freeze Q^2 if it's < 1.69 or > 10E+6 +! ************************************ + + If (Q2 .LT. Q2min) Then + Q2 = Q2min + End If + If (Q2 .GT. Q2max) Then + Q2 = Q2max + End If + +! If the set specifications have been changed, read the tables again + + If (A .NE. Alast .or. order .NE. orderlast) Then + +! Write(*,*) 'Set changed!' + +! Read the table1 + + If (order .EQ. 1) then + + If (A < 10) Then + Write(filenimi,'("EPS09LOR_", I1)'), A + Else If (A < 100) Then + Write(filenimi,'("EPS09LOR_", I2)'), A + Else If (A < 1000) Then + Write(filenimi,'("EPS09LOR_", I3)'), A + End If + + Else + + If (A < 10) Then + Write(filenimi,'("EPS09NLOR_", I1)'), A + Else If (A < 100) Then + Write(filenimi,'("EPS09NLOR_", I2)'), A + Else If (A < 1000) Then + Write(filenimi,'("EPS09NLOR_", I3)'), A + End If + + End If + + call getdirpath(dirpath) + setpath=dirpath(:LEN_TRIM(dirpath))//"/"//filenimi(:LEN_TRIM(filenimi))//".LHgrid" + print *,setpath(:LEN_TRIM(setpath)) + OPEN (11, file = setpath(:LEN_TRIM(setpath)), status='OLD', IOSTAT=iovar) + + If (iovar .NE. 0) Then + Write(*,*) 'Missing file: ',filenimi + stop + End If + + Do setnumber = 1, 31 + + Do k = 0,50 + + Read(11,*) dummy + + Do t = 0,50 + + Read(11,*) (allvalues(setnumber,p,k,t), p=1,8) + + End Do + End Do + + End Do + + Close(11) + + psetlast = pset + Alast = A + orderlast = order + + End If + +! Find out the position in the loglog Q^2-grid + + realQ = Qsteps * (log(log(Q2)/log(Q2min)))/(log(log(Q2max)/log(Q2min))) + Qpoint = Aint(realQ) + + If (Qpoint .LE. 0) Then + Qpoint = 1 + End If + If (Qpoint .GE. Anint(Qsteps)-1) Then + Qpoint = Anint(Qsteps)-1 + End If + + LSTEP = (1.0/(xlogsteps)) * LOG(0.1/x_i) + +! ********************* +! Interpolate the grids +! ********************* + + Do t=1,8 + +! Find the position in the x-grid + + If (x .LE. 0.1) then + n_x = ((1.0/LSTEP) * Log(x/x_i)) + xpoint = Aint(n_x) + Else + n_x = ((x-0.1)*xlinsteps/(1.0-0.1) + xlogsteps) + xpoint = Aint(n_x) + End If + + If (xpoint .LE. 0) Then + xpoint = 1 + End If + + If (t .EQ. 1 .or. t .EQ. 2) Then + If (xpoint .GE. (xlinsteps+xlogsteps)-4) Then + xpoint = (xlinsteps+xlogsteps)-4 + End If + End If + + If (t .EQ. 3 .or. t .EQ. 4 .or. t .EQ. 5 .or. t .EQ. 6 .or. t .EQ. 7) Then + If (xpoint .GE. (xlinsteps+xlogsteps)-7) Then + xpoint = (xlinsteps+xlogsteps)-7 + End If + End If + + If (t .EQ. 8) Then + If (xpoint .GE. (xlinsteps+xlogsteps)-4) Then + xpoint = (xlinsteps+xlogsteps)-4 + End If + End If + + Do k = 1, 4 + If (xpoint-2+k .LT. xlogsteps) Then + arg(k) = (x_i) * exp(LSTEP * (xpoint-2+k)) + Else + arg(k) = 0.1 + (xpoint-2+k-xlogsteps) * (1-0.1)/xlinsteps + End If + End Do + + Do j=1,3 + + fu(1) = allvalues(pset,t,Qpoint-2+j,xpoint-1) + fu(2) = allvalues(pset,t,Qpoint-2+j,xpoint) + fu(3) = allvalues(pset,t,Qpoint-2+j,xpoint+1) + fu(4) = allvalues(pset,t,Qpoint-2+j,xpoint+2) + Call luovi(fu,arg,4,x,res) + fg(j) = res + +! ***************************************** +! ***************************************** + + End Do + + arg(1) = Qpoint-1 + arg(2) = Qpoint + arg(3) = Qpoint+1 + + Call luovi(fg,arg,3,realQ,res) + + result(t) = res + + End Do + + ruv = max(result(1),zero) + rdv = max(result(2),zero) + ru = max(result(3),zero) + rd = max(result(4),zero) + rs = max(result(5),zero) + rc = max(result(6),zero) + rb = max(result(7),zero) + rg = max(result(8),zero) + +200 Continue + + End Subroutine EPS09 + +! ******************************** +! Modified version of Cern Library +! interpolation routine E100 +! ******************************** + + SUBROUTINE luovi(F,ARG,MMM,Z,SUM) + + Implicit none + INTEGER :: MMM + Double precision :: F(MMM), ARG(MMM), COF(MMM), SUM, Z + INTEGER :: M, MM, I, J, JNDEX, INDEX + + MM = MIN(MMM, 20) + M = MM - 1 + DO 1780 I= 1, MM + COF(I) = F(I) + 1780 Continue + DO 1800 I= 1, M + DO 1790 J= I, M + JNDEX = MM - J + INDEX = JNDEX + I + COF(INDEX) = (COF(INDEX)-COF(INDEX-1))/(ARG(INDEX)-ARG(JNDEX)) + 1790 CONTINUE + 1800 CONTINUE + SUM = COF(MM) + DO 1810 I= 1, M + INDEX = MM - I + SUM = (Z-ARG(INDEX))*SUM + COF(INDEX) + 1810 CONTINUE + + End SUBROUTINE luovi + diff --git a/MFT/runReconstruction.C b/MFT/runReconstruction.C index 7bf7f3da2ca..1645733daba 100644 --- a/MFT/runReconstruction.C +++ b/MFT/runReconstruction.C @@ -1,56 +1,56 @@ -void runReconstruction(Int_t seed, const Char_t *recOptions) { - - gRandom->SetSeed(seed); - - AliReconstruction *reco = new AliReconstruction("galice.root"); - - // switch off cleanESD - reco->SetCleanESD(kFALSE); - - // GRP from local OCDB - reco->SetSpecificStorage("GRP/GRP/Data",Form("local://%s",gSystem->pwd())); - - reco->SetDefaultStorage("alien://folder=/alice/data/2011/OCDB"); - - reco->SetSpecificStorage("MUON/Align/Data", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/Capacitances", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/Config", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/Gain", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/GlobalTriggerBoardMasks", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/GlobalTriggerCrateConfig", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/HV", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/LocalTriggerBoardMasks", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/MappingData", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/MappingRunData", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/Neighbours", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/OccupancyMap", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/Pedestals", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/RegionalTriggerBoardMasks", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/RegionalTriggerConfig", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/RejectList", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/TriggerDCS", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/TriggerEfficiency", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - reco->SetSpecificStorage("MUON/Calib/TriggerLut", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); - - reco->SetSpecificStorage("MUON/Calib/RecoParam", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); - reco->SetSpecificStorage("MFT/Align/Data", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); - reco->SetSpecificStorage("MFT/Calib/RecoParam", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); - - reco->SetRunReconstruction("MUON MFT"); - reco->SetRunLocalReconstruction("MUON MFT"); - reco->SetOption("MUON MFT",recOptions); - // reco->SetRunQA("DetectorList:ActionList"); - // reco->SetQAWriteExpert(AliQAv1::kMUON); - - reco->SetWriteESDfriend(kFALSE); - reco->SetStopOnError(kFALSE); - - TStopwatch timer; - timer.Start(); - reco->Run(); - timer.Stop(); - timer.Print(); - - delete reco; - -} +void runReconstruction(Int_t seed, const Char_t *recOptions) { + + gRandom->SetSeed(seed); + + AliReconstruction *reco = new AliReconstruction("galice.root"); + + // switch off cleanESD + reco->SetCleanESD(kFALSE); + + // GRP from local OCDB + reco->SetSpecificStorage("GRP/GRP/Data",Form("local://%s",gSystem->pwd())); + + reco->SetDefaultStorage("alien://folder=/alice/data/2011/OCDB"); + + reco->SetSpecificStorage("MUON/Align/Data", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/Capacitances", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/Config", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/Gain", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/GlobalTriggerBoardMasks", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/GlobalTriggerCrateConfig", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/HV", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/LocalTriggerBoardMasks", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/MappingData", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/MappingRunData", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/Neighbours", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/OccupancyMap", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/Pedestals", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/RegionalTriggerBoardMasks", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/RegionalTriggerConfig", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/RejectList", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/TriggerDCS", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/TriggerEfficiency", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + reco->SetSpecificStorage("MUON/Calib/TriggerLut", "alien://folder=/alice/simulation/2008/v4-15-Release/Residual"); + + reco->SetSpecificStorage("MUON/Calib/RecoParam", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); + reco->SetSpecificStorage("MFT/Align/Data", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); + reco->SetSpecificStorage("MFT/Calib/RecoParam", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); + + reco->SetRunReconstruction("MUON MFT"); + reco->SetRunLocalReconstruction("MUON MFT"); + reco->SetOption("MUON MFT",recOptions); + // reco->SetRunQA("DetectorList:ActionList"); + // reco->SetQAWriteExpert(AliQAv1::kMUON); + + reco->SetWriteESDfriend(kFALSE); + reco->SetStopOnError(kFALSE); + + TStopwatch timer; + timer.Start(); + reco->Run(); + timer.Stop(); + timer.Print(); + + delete reco; + +} diff --git a/MFT/runSimulation.C b/MFT/runSimulation.C index ee092ecf03c..f77a4c7c29f 100644 --- a/MFT/runSimulation.C +++ b/MFT/runSimulation.C @@ -1,28 +1,28 @@ -void runSimulation(Int_t seed, - Int_t nevents, - const Char_t *config, - Int_t runNumber) { - - AliSimulation *simulator = new AliSimulation(config); - - simulator->SetSeed(seed); - simulator->SetRunNumber(runNumber); - simulator->SetTriggerConfig("MUON"); - simulator->SetMakeDigits("MUON MFT"); - simulator->SetMakeSDigits("MUON MFT"); - simulator->SetRunQA("DetectorList:ActionList"); - simulator->SetRunHLT(""); - - // MUON Tracker -> local:///$OCDB should reflect the content of alien://folder=/alice - simulator->SetDefaultStorage("alien://folder=/alice/simulation/2008/v4-15-Release/Ideal"); - simulator->SetSpecificStorage("MUON/Align/Data", "alien://folder=/alice/simulation/2008/v4-15-Release/Ideal"); - simulator->SetSpecificStorage("MFT/Align/Data", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); - - // The rest - TStopwatch timer; - timer.Start(); - simulator->Run(nevents); - timer.Stop(); - timer.Print(); - -} +void runSimulation(Int_t seed, + Int_t nevents, + const Char_t *config, + Int_t runNumber) { + + AliSimulation *simulator = new AliSimulation(config); + + simulator->SetSeed(seed); + simulator->SetRunNumber(runNumber); + simulator->SetTriggerConfig("MUON"); + simulator->SetMakeDigits("MUON MFT"); + simulator->SetMakeSDigits("MUON MFT"); + simulator->SetRunQA("DetectorList:ActionList"); + simulator->SetRunHLT(""); + + // MUON Tracker -> local:///$OCDB should reflect the content of alien://folder=/alice + simulator->SetDefaultStorage("alien://folder=/alice/simulation/2008/v4-15-Release/Ideal"); + simulator->SetSpecificStorage("MUON/Align/Data", "alien://folder=/alice/simulation/2008/v4-15-Release/Ideal"); + simulator->SetSpecificStorage("MFT/Align/Data", "alien://folder=/alice/cern.ch/user/a/auras/OCDB/"); + + // The rest + TStopwatch timer; + timer.Start(); + simulator->Run(nevents); + timer.Stop(); + timer.Print(); + +} diff --git a/OADB/AliOADBCentrality.cxx b/OADB/AliOADBCentrality.cxx index a75c2a11d14..28255a3878a 100644 --- a/OADB/AliOADBCentrality.cxx +++ b/OADB/AliOADBCentrality.cxx @@ -1,91 +1,91 @@ -/************************************************************************** - * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id$ */ - -//------------------------------------------------------------------------- -// OADB class for run dependent centrality scaling and -// data for centrality determination -// Author: Andreas Morsch, CERN -//------------------------------------------------------------------------- - -#include "AliOADBCentrality.h" -ClassImp(AliOADBCentrality); - -//______________________________________________________________________________ -AliOADBCentrality::AliOADBCentrality() : - TNamed(), - fV0MScaleFactor(1.), - fSPDScaleFactor(1.), - fTPCScaleFactor(1.), - fV0MScaleFactorMC(1.), - fV0MSPDOutlierPar0(1.), - fV0MSPDOutlierPar1(1.), - fV0MTPCOutlierPar0(1.), - fV0MTPCOutlierPar1(1.), - fV0MSPDSigmaOutlierPar0(1.), - fV0MSPDSigmaOutlierPar1(1.), - fV0MSPDSigmaOutlierPar2(1.), - fV0MTPCSigmaOutlierPar0(1.), - fV0MTPCSigmaOutlierPar1(1.), - fV0MTPCSigmaOutlierPar2(1.), - fV0MZDCOutlierPar0(1.), - fV0MZDCOutlierPar1(1.), - fV0MZDCEcalOutlierPar0(1.), - fV0MZDCEcalOutlierPar1(1.), - fZVCut(10.), - fOutliersCut(6.), - fUseScaling(kFALSE), - fUseCleaning(kTRUE), - f1DHistos(), - f2DHistos() -{ - // Default constructor -} -//______________________________________________________________________________ -AliOADBCentrality::AliOADBCentrality(char* name) : - TNamed(name, "Centrality Scaling"), - fV0MScaleFactor(1.), - fSPDScaleFactor(1.), - fTPCScaleFactor(1.), - fV0MScaleFactorMC(1.), - fV0MSPDOutlierPar0(1.), - fV0MSPDOutlierPar1(1.), - fV0MTPCOutlierPar0(1.), - fV0MTPCOutlierPar1(1.), - fV0MSPDSigmaOutlierPar0(1.), - fV0MSPDSigmaOutlierPar1(1.), - fV0MSPDSigmaOutlierPar2(1.), - fV0MTPCSigmaOutlierPar0(1.), - fV0MTPCSigmaOutlierPar1(1.), - fV0MTPCSigmaOutlierPar2(1.), - fV0MZDCOutlierPar0(1.), - fV0MZDCOutlierPar1(1.), - fV0MZDCEcalOutlierPar0(1.), - fV0MZDCEcalOutlierPar1(1.), - fZVCut(10.), - fOutliersCut(6.), - fUseScaling(kFALSE), - fUseCleaning(kTRUE), - f1DHistos(), - f2DHistos() -{ - // Constructor -} -//______________________________________________________________________________ -AliOADBCentrality::~AliOADBCentrality() -{ - // destructor -} +/************************************************************************** + * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id$ */ + +//------------------------------------------------------------------------- +// OADB class for run dependent centrality scaling and +// data for centrality determination +// Author: Andreas Morsch, CERN +//------------------------------------------------------------------------- + +#include "AliOADBCentrality.h" +ClassImp(AliOADBCentrality); + +//______________________________________________________________________________ +AliOADBCentrality::AliOADBCentrality() : + TNamed(), + fV0MScaleFactor(1.), + fSPDScaleFactor(1.), + fTPCScaleFactor(1.), + fV0MScaleFactorMC(1.), + fV0MSPDOutlierPar0(1.), + fV0MSPDOutlierPar1(1.), + fV0MTPCOutlierPar0(1.), + fV0MTPCOutlierPar1(1.), + fV0MSPDSigmaOutlierPar0(1.), + fV0MSPDSigmaOutlierPar1(1.), + fV0MSPDSigmaOutlierPar2(1.), + fV0MTPCSigmaOutlierPar0(1.), + fV0MTPCSigmaOutlierPar1(1.), + fV0MTPCSigmaOutlierPar2(1.), + fV0MZDCOutlierPar0(1.), + fV0MZDCOutlierPar1(1.), + fV0MZDCEcalOutlierPar0(1.), + fV0MZDCEcalOutlierPar1(1.), + fZVCut(10.), + fOutliersCut(6.), + fUseScaling(kFALSE), + fUseCleaning(kTRUE), + f1DHistos(), + f2DHistos() +{ + // Default constructor +} +//______________________________________________________________________________ +AliOADBCentrality::AliOADBCentrality(char* name) : + TNamed(name, "Centrality Scaling"), + fV0MScaleFactor(1.), + fSPDScaleFactor(1.), + fTPCScaleFactor(1.), + fV0MScaleFactorMC(1.), + fV0MSPDOutlierPar0(1.), + fV0MSPDOutlierPar1(1.), + fV0MTPCOutlierPar0(1.), + fV0MTPCOutlierPar1(1.), + fV0MSPDSigmaOutlierPar0(1.), + fV0MSPDSigmaOutlierPar1(1.), + fV0MSPDSigmaOutlierPar2(1.), + fV0MTPCSigmaOutlierPar0(1.), + fV0MTPCSigmaOutlierPar1(1.), + fV0MTPCSigmaOutlierPar2(1.), + fV0MZDCOutlierPar0(1.), + fV0MZDCOutlierPar1(1.), + fV0MZDCEcalOutlierPar0(1.), + fV0MZDCEcalOutlierPar1(1.), + fZVCut(10.), + fOutliersCut(6.), + fUseScaling(kFALSE), + fUseCleaning(kTRUE), + f1DHistos(), + f2DHistos() +{ + // Constructor +} +//______________________________________________________________________________ +AliOADBCentrality::~AliOADBCentrality() +{ + // destructor +} diff --git a/PHOS/PHOSPEDda.cxx b/PHOS/PHOSPEDda.cxx index bb0974f6222..e2de729ae3b 100644 --- a/PHOS/PHOSPEDda.cxx +++ b/PHOS/PHOSPEDda.cxx @@ -1,470 +1,470 @@ -/* -contact: Boris.Polishchuk@cern.ch -reference run: /alice/data/2010/LHC10a_PHOS/000112189/raw/10000112189003.10.root -run type: PEDESTAL -DA type: MON -number of events needed: 200 -input files: Mod0RCU0.data Mod0RCU1.data Mod0RCU2.data Mod0RCU3.data Mod1RCU0.data Mod1RCU1.data Mod1RCU2.data Mod1RCU3.data Mod2RCU0.data Mod2RCU1.data Mod2RCU2.data Mod2RCU3.data Mod3RCU0.data Mod3RCU1.data Mod3RCU2.data Mod3RCU3.data Mod4RCU0.data Mod4RCU1.data Mod4RCU2.data Mod4RCU3.data -Output files: PHOS_PED.root -Trigger types used: -*/ - -#include "event.h" -#include "monitor.h" - -extern "C" { -#include "daqDA.h" -} - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include "AliRawReader.h" -#include "AliRawReaderDate.h" -#include "AliCaloAltroMapping.h" -#include "AliCaloRawStreamV3.h" -#include "AliLog.h" - -int main(int argc, char **argv) -{ - // Read raw data, decode it to samples, - // calculate pedestals from presamples, - // evaluate the signal amplitude as a maximum sample, - // and fill histograms with pedestals and amplitudes - - gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo", - "*", - "TStreamerInfo", - "RIO", - "TStreamerInfo()"); - - AliLog::SetGlobalDebugLevel(0) ; - AliLog::SetGlobalLogLevel(AliLog::kFatal); - - int status; - - if (argc!=2) { - printf("Wrong number of arguments\n"); - return -1; - } - - /* Retrieve mapping files from DAQ DB */ - const char* mapFiles[20] = { - "Mod0RCU0.data", - "Mod0RCU1.data", - "Mod0RCU2.data", - "Mod0RCU3.data", - "Mod1RCU0.data", - "Mod1RCU1.data", - "Mod1RCU2.data", - "Mod1RCU3.data", - "Mod2RCU0.data", - "Mod2RCU1.data", - "Mod2RCU2.data", - "Mod2RCU3.data", - "Mod3RCU0.data", - "Mod3RCU1.data", - "Mod3RCU2.data", - "Mod3RCU3.data", - "Mod4RCU0.data", - "Mod4RCU1.data", - "Mod4RCU2.data", - "Mod4RCU3.data" - }; - - for(Int_t iFile=0; iFile<20; iFile++) { - int failed = daqDA_DB_getFile(mapFiles[iFile], mapFiles[iFile]); - if(failed) { - printf("Cannot retrieve file %s from DAQ DB. Exit.\n",mapFiles[iFile]); - return -1; - } - } - - /* Open mapping files */ - AliAltroMapping *mapping[20]; - TString path = "./"; - - path += "Mod"; - TString path2; - TString path3; - Int_t iMap = 0; - - for(Int_t iMod = 0; iMod < 5; iMod++) { - path2 = path; - path2 += iMod; - path2 += "RCU"; - - for(Int_t iRCU=0; iRCU<4; iRCU++) { - path3 = path2; - path3 += iRCU; - path3 += ".data"; - mapping[iMap] = new AliCaloAltroMapping(path3.Data()); - iMap++; - } - } - - /* define data source : this is argument 1 */ - status=monitorSetDataSource( argv[1] ); - if (status!=0) { - printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status)); - return -1; - } - - /* declare monitoring program */ - status=monitorDeclareMp( __FILE__ ); - if (status!=0) { - printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status)); - return -1; - } - - /* define wait event timeout - 1s max */ - monitorSetNowait(); - monitorSetNoWaitNetworkTimeout(1000); - - /* init some counters */ - int nevents_physics=0; - int nevents_total=0; - - AliRawReader * reader = NULL; - AliCaloRawStreamV3* stream = NULL; - - TString baseNamePed ="hPed"; - TString baseTitlePed="Ped in cell ("; - const char* sgain[3]={"LG","HG", "TRU"}; - - const Int_t caloFlagMax=3,modMax=5,cellXMax=64,cellZMax=56; - TH1F *hPed[5][3][64][56] = {}; - - TH1F *hPedHiMean1m2 = new TH1F("hPedHiMean1m2","Mean pedestals in module 2, high gain" ,100,0.,100.); - TH1F *hPedHiRMS1m2 = new TH1F("hPedHiRMS1m2" ,"RMS pedestals in module 2, high gain" ,100,0.,50.); - TH1F *hPedLoMean1m2 = new TH1F("hPedLoMean1m2","Mean pedestals in module 2, low gain" ,100,0.,100.); - TH1F *hPedLoRMS1m2 = new TH1F("hPedLoRMS1m2" ,"RMS pedestals in module 2, low gain" ,100,0.,50.); - TH1F *hPedTRUMean1m2 = new TH1F("hPedTRUMean1m2","Mean pedestals in module 2, TRU" ,1000,0.,1000.); - TH1F *hPedTRURMS1m2 = new TH1F("hPedTRURMS1m2" ,"RMS pedestals in module 2, TRU" ,100,0.,50.); - - TH1F *hPedHiMean1m3 = new TH1F("hPedHiMean1m3","Mean pedestals in module 3, high gain" ,100,0.,100.); - TH1F *hPedHiRMS1m3 = new TH1F("hPedHiRMS1m3" ,"RMS pedestals in module 3, high gain" ,100,0.,50.); - TH1F *hPedLoMean1m3 = new TH1F("hPedLoMean1m3","Mean pedestals in module 3, low gain" ,100,0.,100.); - TH1F *hPedLoRMS1m3 = new TH1F("hPedLoRMS1m3" ,"RMS pedestals in module 3, low gain" ,100,0.,50.); - TH1F *hPedTRUMean1m3 = new TH1F("hPedTRUMean1m3","Mean pedestals in module 3, TRU" ,1000,0.,1000.); - TH1F *hPedTRURMS1m3 = new TH1F("hPedTRURMS1m3" ,"RMS pedestals in module 3, TRU" ,100,0.,50.); - - TH1F *hPedHiMean1m4 = new TH1F("hPedHiMean1m4","Mean pedestals in module 4, high gain" ,100,0.,100.); - TH1F *hPedHiRMS1m4 = new TH1F("hPedHiRMS1m4" ,"RMS pedestals in module 4, high gain" ,100,0.,50.); - TH1F *hPedLoMean1m4 = new TH1F("hPedLoMean1m4","Mean pedestals in module 4, low gain" ,100,0.,100.); - TH1F *hPedLoRMS1m4 = new TH1F("hPedLoRMS1m4" ,"RMS pedestals in module 4, low gain" ,100,0.,50.); - TH1F *hPedTRUMean1m4 = new TH1F("hPedTRUMean1m4","Mean pedestals in module 4, TRU" ,1000,0.,1000.); - TH1F *hPedTRURMS1m4 = new TH1F("hPedTRURMS1m4" ,"RMS pedestals in module 4, TRU" ,100,0.,50.); - - hPedHiMean1m2->Sumw2(); - hPedHiRMS1m2 ->Sumw2(); - hPedLoMean1m2->Sumw2(); - hPedLoRMS1m2 ->Sumw2(); - hPedTRUMean1m2->Sumw2(); - hPedTRURMS1m2 ->Sumw2(); - hPedHiMean1m3->Sumw2(); - hPedHiRMS1m3 ->Sumw2(); - hPedLoMean1m3->Sumw2(); - hPedLoRMS1m3 ->Sumw2(); - hPedTRUMean1m3->Sumw2(); - hPedTRURMS1m3 ->Sumw2(); - hPedHiMean1m4->Sumw2(); - hPedHiRMS1m4 ->Sumw2(); - hPedLoMean1m4->Sumw2(); - hPedLoRMS1m4 ->Sumw2(); - hPedTRUMean1m4->Sumw2(); - hPedTRURMS1m4 ->Sumw2(); - - TH2F *hPedHiMeanm2 = new TH2F("hPedHiMeanm2","Mean pedestals in module 2, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedHiRMSm2 = new TH2F("hPedHiRMSm2" ,"R.M.S. of pedestals in module 2, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedHiNumm2 = new TH2F("hPedHiNumm2" ,"Number of pedestals in module 2, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoMeanm2 = new TH2F("hPedLoMeanm2","Mean pedestals in module 2, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoRMSm2 = new TH2F("hPedLoRMSm2" ,"R.M.S. of pedestals in module 2, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoNumm2 = new TH2F("hPedLoNumm2" ,"Number of pedestals in module 2, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - - TH2F *hPedHiMeanm3 = new TH2F("hPedHiMeanm3","Mean pedestals in module 3, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedHiRMSm3 = new TH2F("hPedHiRMSm3" ,"R.M.S. of pedestals in module 3, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedHiNumm3 = new TH2F("hPedHiNumm3" ,"Number of pedestals in module 3, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoMeanm3 = new TH2F("hPedLoMeanm3","Mean pedestals in module 3, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoRMSm3 = new TH2F("hPedLoRMSm3" ,"R.M.S. of pedestals in module 3, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoNumm3 = new TH2F("hPedLoNumm3" ,"Number of pedestals in module 3, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - - TH2F *hPedHiMeanm4 = new TH2F("hPedHiMeanm4","Mean pedestals in module 4, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedHiRMSm4 = new TH2F("hPedHiRMSm4" ,"R.M.S. of pedestals in module 4, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedHiNumm4 = new TH2F("hPedHiNumm4" ,"Number of pedestals in module 4, high gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoMeanm4 = new TH2F("hPedLoMeanm4","Mean pedestals in module 4, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoRMSm4 = new TH2F("hPedLoRMSm4" ,"R.M.S. of pedestals in module 4, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - TH2F *hPedLoNumm4 = new TH2F("hPedLoNumm4" ,"Number of pedestals in module 4, low gain", - cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); - - TH1I *hNBunches = new TH1I("hNBunches","Number of bunches",10,0,10); - TH2I *hHWaddr = new TH2I("hHWaddr","DDL is vs HW addr",216,0,216,4096,0,4096); - TH1I *hModule = new TH1I("hModule" ,"Module number", 5,0.,5); - - Int_t runNum=0; - Int_t module,cellX,cellZ,caloFlag; - - /* main loop (infinite) */ - for(;;) { - struct eventHeaderStruct *event; - eventTypeType eventT; - - /* check shutdown condition */ - if (daqDA_checkShutdown()) {break;} - - /* get next event (blocking call until timeout) */ - status=monitorGetEventDynamic((void **)&event); - if (status==MON_ERR_EOF) { - printf ("End of File detected\n"); - break; /* end of monitoring file has been reached */ - } - - if (status!=0) { - printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status)); - break; - } - - /* retry if got no event */ - if (event==NULL) { - continue; - } - - /* use event - here, just write event id to result file */ - eventT=event->eventType; - - if (eventT==PHYSICS_EVENT) { - - reader = new AliRawReaderDate((void*)event); - stream = new AliCaloRawStreamV3(reader,"PHOS",mapping); - - runNum = reader->GetRunNumber(); - while (stream->NextDDL()) { - while (stream->NextChannel()) { - module = stream->GetModule(); - cellX = stream->GetCellX(); - cellZ = stream->GetCellZ(); - caloFlag = stream->GetCaloFlag(); - if (caloFlag!=0 && caloFlag!=1) continue; - - hHWaddr->Fill(stream->GetDDLNumber(),stream->GetHWAddress()); - hModule->Fill(module); - if (!hPed[module][caloFlag][cellX][cellZ]) { - TString name = baseNamePed; - TString title = baseTitlePed; - name +="_g"; name +=caloFlag; - name +="_m"; name +=module; - name +="_x"; name +=cellX; - name +="_z"; name +=cellZ; - - title +=module; title +=","; - title +=cellX; title +=","; - title +=cellZ; title +="), "; - title +=sgain[caloFlag]; - - hPed[module][caloFlag][cellX][cellZ] = new TH1F(name,title,100,0.,100.); - hPed[module][caloFlag][cellX][cellZ]->Sumw2(); - hPed[module][caloFlag][cellX][cellZ]->SetMarkerStyle(20); - hPed[module][caloFlag][cellX][cellZ]->SetOption("eph"); - } - - Int_t nBunches = 0; - while (stream->NextBunch()) { - nBunches++; - const UShort_t *sig = stream->GetSignals(); - Int_t sigLength = stream->GetBunchLength(); - for (Int_t i = 0; i < sigLength; i++) { - hPed[module][caloFlag][cellX][cellZ]->Fill(sig[i]); - } - } - hNBunches->Fill(nBunches); - } // end of NextChannel() - } // end of NextDDL() - - delete reader; - delete stream; - nevents_physics++; - } // end of if(eventT==PHYSICS_EVENT) - - nevents_total++; - - /* free resources */ - free(event); - - /* exit when last event received, no need to wait for TERM signal */ - if (eventT==END_OF_RUN) { - printf("EOR event detected\n"); - break; - } - - } // end of inf. loop over events - - for(Int_t i = 0; i < 20; i++) delete mapping[i]; - - // Fill 2-dim histograms for mean, rms and n pedestals - - for (Int_t mod=2; mod<=4; mod++) { - for (Int_t caloFlag=0; caloFlag<2; caloFlag++) { - for (Int_t cellX=0; cellXFill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedLoRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedLoMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedLoRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedLoNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); - } - else if (mod==3) { - hPedLoMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedLoRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedLoMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedLoRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedLoNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); - } - else if (mod==4) { - hPedLoMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedLoRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedLoMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedLoRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedLoNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); - } - } - else if (caloFlag == 1) { - if (mod==2) { - hPedHiMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedHiRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); - hPedHiMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedHiRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedHiNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); - } - if (mod==3) { - hPedHiMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedHiRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); - hPedHiMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedHiRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedHiNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); - } - if (mod==4) { - hPedHiMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedHiRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedHiMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedHiRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); - hPedHiNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); - } - } - else if (caloFlag == 2) { - if (mod==2) { - hPedTRUMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedTRURMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); - } - if (mod==3) { - hPedTRUMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedTRURMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); - } - if (mod==4) { - hPedTRUMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); - hPedTRURMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); - } - } - } - } - } - } - } - - // Write existing histograms to a root file - - TString fileName = "PHOS_PED.root"; - TFile *file = new TFile(fileName,"RECREATE"); - - for (Int_t mod=2; mod<=3; mod++) { - for (Int_t caloFlag=0; caloFlagWrite(); - } - } - } - } - } - - hPedHiMean1m2->Write(); - hPedHiRMS1m2 ->Write(); - hPedLoMean1m2->Write(); - hPedLoRMS1m2 ->Write(); - hPedHiMeanm2 ->Write(); - hPedHiRMSm2 ->Write(); - hPedHiNumm2 ->Write(); - hPedLoMeanm2 ->Write(); - hPedLoRMSm2 ->Write(); - hPedLoNumm2 ->Write(); - hPedTRUMean1m2->Write(); - hPedTRURMS1m2 ->Write(); - - hPedHiMean1m3->Write(); - hPedHiRMS1m3 ->Write(); - hPedLoMean1m3->Write(); - hPedLoRMS1m3 ->Write(); - hPedHiMeanm3 ->Write(); - hPedHiRMSm3 ->Write(); - hPedHiNumm3 ->Write(); - hPedLoMeanm3 ->Write(); - hPedLoRMSm3 ->Write(); - hPedLoNumm3 ->Write(); - hPedTRUMean1m3->Write(); - hPedTRURMS1m3 ->Write(); - - hPedHiMean1m4->Write(); - hPedHiRMS1m4 ->Write(); - hPedLoMean1m4->Write(); - hPedLoRMS1m4 ->Write(); - hPedHiMeanm4 ->Write(); - hPedHiRMSm4 ->Write(); - hPedHiNumm4 ->Write(); - hPedLoMeanm4 ->Write(); - hPedLoRMSm4 ->Write(); - hPedLoNumm4 ->Write(); - hPedTRUMean1m4->Write(); - hPedTRURMS1m4 ->Write(); - - hNBunches ->Write(); - hHWaddr ->Write(); - hModule ->Write(); - - file->Close(); - - /* Store output files to the File Exchange Server */ - daqDA_FES_storeFile(fileName.Data(),"PED"); - - printf("%d physics events of %d total processed.\n",nevents_physics,nevents_total); - return status; -} +/* +contact: Boris.Polishchuk@cern.ch +reference run: /alice/data/2010/LHC10a_PHOS/000112189/raw/10000112189003.10.root +run type: PEDESTAL +DA type: MON +number of events needed: 200 +input files: Mod0RCU0.data Mod0RCU1.data Mod0RCU2.data Mod0RCU3.data Mod1RCU0.data Mod1RCU1.data Mod1RCU2.data Mod1RCU3.data Mod2RCU0.data Mod2RCU1.data Mod2RCU2.data Mod2RCU3.data Mod3RCU0.data Mod3RCU1.data Mod3RCU2.data Mod3RCU3.data Mod4RCU0.data Mod4RCU1.data Mod4RCU2.data Mod4RCU3.data +Output files: PHOS_PED.root +Trigger types used: +*/ + +#include "event.h" +#include "monitor.h" + +extern "C" { +#include "daqDA.h" +} + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include "AliRawReader.h" +#include "AliRawReaderDate.h" +#include "AliCaloAltroMapping.h" +#include "AliCaloRawStreamV3.h" +#include "AliLog.h" + +int main(int argc, char **argv) +{ + // Read raw data, decode it to samples, + // calculate pedestals from presamples, + // evaluate the signal amplitude as a maximum sample, + // and fill histograms with pedestals and amplitudes + + gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo", + "*", + "TStreamerInfo", + "RIO", + "TStreamerInfo()"); + + AliLog::SetGlobalDebugLevel(0) ; + AliLog::SetGlobalLogLevel(AliLog::kFatal); + + int status; + + if (argc!=2) { + printf("Wrong number of arguments\n"); + return -1; + } + + /* Retrieve mapping files from DAQ DB */ + const char* mapFiles[20] = { + "Mod0RCU0.data", + "Mod0RCU1.data", + "Mod0RCU2.data", + "Mod0RCU3.data", + "Mod1RCU0.data", + "Mod1RCU1.data", + "Mod1RCU2.data", + "Mod1RCU3.data", + "Mod2RCU0.data", + "Mod2RCU1.data", + "Mod2RCU2.data", + "Mod2RCU3.data", + "Mod3RCU0.data", + "Mod3RCU1.data", + "Mod3RCU2.data", + "Mod3RCU3.data", + "Mod4RCU0.data", + "Mod4RCU1.data", + "Mod4RCU2.data", + "Mod4RCU3.data" + }; + + for(Int_t iFile=0; iFile<20; iFile++) { + int failed = daqDA_DB_getFile(mapFiles[iFile], mapFiles[iFile]); + if(failed) { + printf("Cannot retrieve file %s from DAQ DB. Exit.\n",mapFiles[iFile]); + return -1; + } + } + + /* Open mapping files */ + AliAltroMapping *mapping[20]; + TString path = "./"; + + path += "Mod"; + TString path2; + TString path3; + Int_t iMap = 0; + + for(Int_t iMod = 0; iMod < 5; iMod++) { + path2 = path; + path2 += iMod; + path2 += "RCU"; + + for(Int_t iRCU=0; iRCU<4; iRCU++) { + path3 = path2; + path3 += iRCU; + path3 += ".data"; + mapping[iMap] = new AliCaloAltroMapping(path3.Data()); + iMap++; + } + } + + /* define data source : this is argument 1 */ + status=monitorSetDataSource( argv[1] ); + if (status!=0) { + printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status)); + return -1; + } + + /* declare monitoring program */ + status=monitorDeclareMp( __FILE__ ); + if (status!=0) { + printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status)); + return -1; + } + + /* define wait event timeout - 1s max */ + monitorSetNowait(); + monitorSetNoWaitNetworkTimeout(1000); + + /* init some counters */ + int nevents_physics=0; + int nevents_total=0; + + AliRawReader * reader = NULL; + AliCaloRawStreamV3* stream = NULL; + + TString baseNamePed ="hPed"; + TString baseTitlePed="Ped in cell ("; + const char* sgain[3]={"LG","HG", "TRU"}; + + const Int_t caloFlagMax=3,modMax=5,cellXMax=64,cellZMax=56; + TH1F *hPed[5][3][64][56] = {}; + + TH1F *hPedHiMean1m2 = new TH1F("hPedHiMean1m2","Mean pedestals in module 2, high gain" ,100,0.,100.); + TH1F *hPedHiRMS1m2 = new TH1F("hPedHiRMS1m2" ,"RMS pedestals in module 2, high gain" ,100,0.,50.); + TH1F *hPedLoMean1m2 = new TH1F("hPedLoMean1m2","Mean pedestals in module 2, low gain" ,100,0.,100.); + TH1F *hPedLoRMS1m2 = new TH1F("hPedLoRMS1m2" ,"RMS pedestals in module 2, low gain" ,100,0.,50.); + TH1F *hPedTRUMean1m2 = new TH1F("hPedTRUMean1m2","Mean pedestals in module 2, TRU" ,1000,0.,1000.); + TH1F *hPedTRURMS1m2 = new TH1F("hPedTRURMS1m2" ,"RMS pedestals in module 2, TRU" ,100,0.,50.); + + TH1F *hPedHiMean1m3 = new TH1F("hPedHiMean1m3","Mean pedestals in module 3, high gain" ,100,0.,100.); + TH1F *hPedHiRMS1m3 = new TH1F("hPedHiRMS1m3" ,"RMS pedestals in module 3, high gain" ,100,0.,50.); + TH1F *hPedLoMean1m3 = new TH1F("hPedLoMean1m3","Mean pedestals in module 3, low gain" ,100,0.,100.); + TH1F *hPedLoRMS1m3 = new TH1F("hPedLoRMS1m3" ,"RMS pedestals in module 3, low gain" ,100,0.,50.); + TH1F *hPedTRUMean1m3 = new TH1F("hPedTRUMean1m3","Mean pedestals in module 3, TRU" ,1000,0.,1000.); + TH1F *hPedTRURMS1m3 = new TH1F("hPedTRURMS1m3" ,"RMS pedestals in module 3, TRU" ,100,0.,50.); + + TH1F *hPedHiMean1m4 = new TH1F("hPedHiMean1m4","Mean pedestals in module 4, high gain" ,100,0.,100.); + TH1F *hPedHiRMS1m4 = new TH1F("hPedHiRMS1m4" ,"RMS pedestals in module 4, high gain" ,100,0.,50.); + TH1F *hPedLoMean1m4 = new TH1F("hPedLoMean1m4","Mean pedestals in module 4, low gain" ,100,0.,100.); + TH1F *hPedLoRMS1m4 = new TH1F("hPedLoRMS1m4" ,"RMS pedestals in module 4, low gain" ,100,0.,50.); + TH1F *hPedTRUMean1m4 = new TH1F("hPedTRUMean1m4","Mean pedestals in module 4, TRU" ,1000,0.,1000.); + TH1F *hPedTRURMS1m4 = new TH1F("hPedTRURMS1m4" ,"RMS pedestals in module 4, TRU" ,100,0.,50.); + + hPedHiMean1m2->Sumw2(); + hPedHiRMS1m2 ->Sumw2(); + hPedLoMean1m2->Sumw2(); + hPedLoRMS1m2 ->Sumw2(); + hPedTRUMean1m2->Sumw2(); + hPedTRURMS1m2 ->Sumw2(); + hPedHiMean1m3->Sumw2(); + hPedHiRMS1m3 ->Sumw2(); + hPedLoMean1m3->Sumw2(); + hPedLoRMS1m3 ->Sumw2(); + hPedTRUMean1m3->Sumw2(); + hPedTRURMS1m3 ->Sumw2(); + hPedHiMean1m4->Sumw2(); + hPedHiRMS1m4 ->Sumw2(); + hPedLoMean1m4->Sumw2(); + hPedLoRMS1m4 ->Sumw2(); + hPedTRUMean1m4->Sumw2(); + hPedTRURMS1m4 ->Sumw2(); + + TH2F *hPedHiMeanm2 = new TH2F("hPedHiMeanm2","Mean pedestals in module 2, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedHiRMSm2 = new TH2F("hPedHiRMSm2" ,"R.M.S. of pedestals in module 2, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedHiNumm2 = new TH2F("hPedHiNumm2" ,"Number of pedestals in module 2, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoMeanm2 = new TH2F("hPedLoMeanm2","Mean pedestals in module 2, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoRMSm2 = new TH2F("hPedLoRMSm2" ,"R.M.S. of pedestals in module 2, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoNumm2 = new TH2F("hPedLoNumm2" ,"Number of pedestals in module 2, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + + TH2F *hPedHiMeanm3 = new TH2F("hPedHiMeanm3","Mean pedestals in module 3, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedHiRMSm3 = new TH2F("hPedHiRMSm3" ,"R.M.S. of pedestals in module 3, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedHiNumm3 = new TH2F("hPedHiNumm3" ,"Number of pedestals in module 3, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoMeanm3 = new TH2F("hPedLoMeanm3","Mean pedestals in module 3, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoRMSm3 = new TH2F("hPedLoRMSm3" ,"R.M.S. of pedestals in module 3, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoNumm3 = new TH2F("hPedLoNumm3" ,"Number of pedestals in module 3, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + + TH2F *hPedHiMeanm4 = new TH2F("hPedHiMeanm4","Mean pedestals in module 4, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedHiRMSm4 = new TH2F("hPedHiRMSm4" ,"R.M.S. of pedestals in module 4, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedHiNumm4 = new TH2F("hPedHiNumm4" ,"Number of pedestals in module 4, high gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoMeanm4 = new TH2F("hPedLoMeanm4","Mean pedestals in module 4, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoRMSm4 = new TH2F("hPedLoRMSm4" ,"R.M.S. of pedestals in module 4, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + TH2F *hPedLoNumm4 = new TH2F("hPedLoNumm4" ,"Number of pedestals in module 4, low gain", + cellXMax,0.,cellXMax, cellZMax,0.,cellZMax); + + TH1I *hNBunches = new TH1I("hNBunches","Number of bunches",10,0,10); + TH2I *hHWaddr = new TH2I("hHWaddr","DDL is vs HW addr",216,0,216,4096,0,4096); + TH1I *hModule = new TH1I("hModule" ,"Module number", 5,0.,5); + + Int_t runNum=0; + Int_t module,cellX,cellZ,caloFlag; + + /* main loop (infinite) */ + for(;;) { + struct eventHeaderStruct *event; + eventTypeType eventT; + + /* check shutdown condition */ + if (daqDA_checkShutdown()) {break;} + + /* get next event (blocking call until timeout) */ + status=monitorGetEventDynamic((void **)&event); + if (status==MON_ERR_EOF) { + printf ("End of File detected\n"); + break; /* end of monitoring file has been reached */ + } + + if (status!=0) { + printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status)); + break; + } + + /* retry if got no event */ + if (event==NULL) { + continue; + } + + /* use event - here, just write event id to result file */ + eventT=event->eventType; + + if (eventT==PHYSICS_EVENT) { + + reader = new AliRawReaderDate((void*)event); + stream = new AliCaloRawStreamV3(reader,"PHOS",mapping); + + runNum = reader->GetRunNumber(); + while (stream->NextDDL()) { + while (stream->NextChannel()) { + module = stream->GetModule(); + cellX = stream->GetCellX(); + cellZ = stream->GetCellZ(); + caloFlag = stream->GetCaloFlag(); + if (caloFlag!=0 && caloFlag!=1) continue; + + hHWaddr->Fill(stream->GetDDLNumber(),stream->GetHWAddress()); + hModule->Fill(module); + if (!hPed[module][caloFlag][cellX][cellZ]) { + TString name = baseNamePed; + TString title = baseTitlePed; + name +="_g"; name +=caloFlag; + name +="_m"; name +=module; + name +="_x"; name +=cellX; + name +="_z"; name +=cellZ; + + title +=module; title +=","; + title +=cellX; title +=","; + title +=cellZ; title +="), "; + title +=sgain[caloFlag]; + + hPed[module][caloFlag][cellX][cellZ] = new TH1F(name,title,100,0.,100.); + hPed[module][caloFlag][cellX][cellZ]->Sumw2(); + hPed[module][caloFlag][cellX][cellZ]->SetMarkerStyle(20); + hPed[module][caloFlag][cellX][cellZ]->SetOption("eph"); + } + + Int_t nBunches = 0; + while (stream->NextBunch()) { + nBunches++; + const UShort_t *sig = stream->GetSignals(); + Int_t sigLength = stream->GetBunchLength(); + for (Int_t i = 0; i < sigLength; i++) { + hPed[module][caloFlag][cellX][cellZ]->Fill(sig[i]); + } + } + hNBunches->Fill(nBunches); + } // end of NextChannel() + } // end of NextDDL() + + delete reader; + delete stream; + nevents_physics++; + } // end of if(eventT==PHYSICS_EVENT) + + nevents_total++; + + /* free resources */ + free(event); + + /* exit when last event received, no need to wait for TERM signal */ + if (eventT==END_OF_RUN) { + printf("EOR event detected\n"); + break; + } + + } // end of inf. loop over events + + for(Int_t i = 0; i < 20; i++) delete mapping[i]; + + // Fill 2-dim histograms for mean, rms and n pedestals + + for (Int_t mod=2; mod<=4; mod++) { + for (Int_t caloFlag=0; caloFlag<2; caloFlag++) { + for (Int_t cellX=0; cellXFill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedLoRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedLoMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedLoRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedLoNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); + } + else if (mod==3) { + hPedLoMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedLoRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedLoMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedLoRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedLoNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); + } + else if (mod==4) { + hPedLoMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedLoRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedLoMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedLoRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedLoNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); + } + } + else if (caloFlag == 1) { + if (mod==2) { + hPedHiMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedHiRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); + hPedHiMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedHiRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedHiNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); + } + if (mod==3) { + hPedHiMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedHiRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); + hPedHiMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedHiRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedHiNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); + } + if (mod==4) { + hPedHiMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedHiRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedHiMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedHiRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS()); + hPedHiNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries()); + } + } + else if (caloFlag == 2) { + if (mod==2) { + hPedTRUMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedTRURMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); + } + if (mod==3) { + hPedTRUMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedTRURMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); + } + if (mod==4) { + hPedTRUMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean()); + hPedTRURMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() ); + } + } + } + } + } + } + } + + // Write existing histograms to a root file + + TString fileName = "PHOS_PED.root"; + TFile *file = new TFile(fileName,"RECREATE"); + + for (Int_t mod=2; mod<=3; mod++) { + for (Int_t caloFlag=0; caloFlagWrite(); + } + } + } + } + } + + hPedHiMean1m2->Write(); + hPedHiRMS1m2 ->Write(); + hPedLoMean1m2->Write(); + hPedLoRMS1m2 ->Write(); + hPedHiMeanm2 ->Write(); + hPedHiRMSm2 ->Write(); + hPedHiNumm2 ->Write(); + hPedLoMeanm2 ->Write(); + hPedLoRMSm2 ->Write(); + hPedLoNumm2 ->Write(); + hPedTRUMean1m2->Write(); + hPedTRURMS1m2 ->Write(); + + hPedHiMean1m3->Write(); + hPedHiRMS1m3 ->Write(); + hPedLoMean1m3->Write(); + hPedLoRMS1m3 ->Write(); + hPedHiMeanm3 ->Write(); + hPedHiRMSm3 ->Write(); + hPedHiNumm3 ->Write(); + hPedLoMeanm3 ->Write(); + hPedLoRMSm3 ->Write(); + hPedLoNumm3 ->Write(); + hPedTRUMean1m3->Write(); + hPedTRURMS1m3 ->Write(); + + hPedHiMean1m4->Write(); + hPedHiRMS1m4 ->Write(); + hPedLoMean1m4->Write(); + hPedLoRMS1m4 ->Write(); + hPedHiMeanm4 ->Write(); + hPedHiRMSm4 ->Write(); + hPedHiNumm4 ->Write(); + hPedLoMeanm4 ->Write(); + hPedLoRMSm4 ->Write(); + hPedLoNumm4 ->Write(); + hPedTRUMean1m4->Write(); + hPedTRURMS1m4 ->Write(); + + hNBunches ->Write(); + hHWaddr ->Write(); + hModule ->Write(); + + file->Close(); + + /* Store output files to the File Exchange Server */ + daqDA_FES_storeFile(fileName.Data(),"PED"); + + printf("%d physics events of %d total processed.\n",nevents_physics,nevents_total); + return status; +} diff --git a/PHOS/data/Survey_1053236_PHOS.txt b/PHOS/data/Survey_1053236_PHOS.txt index afaaae77da3..913fa426fef 100644 --- a/PHOS/data/Survey_1053236_PHOS.txt +++ b/PHOS/data/Survey_1053236_PHOS.txt @@ -1,1375 +1,1375 @@ -> Title: -PHOS, MEASUREMENT OF MODULES AFTER FINAL ALIGNMENT -> Date: -18/08/2009 -> Subdetector: -PHOS -> Report URL: -https://edms.cern.ch/document/1053236 -> Version: -1 -> General Observations: -Point Types: M(easured),T(ransformed), R(eference) -> Coordinate System: -ALICEPH -> Units: -mm -> Nr Columns: -7 -> Column Names: -Point Name,XLOCAL,YLOCAL,ZLOCAL,Point Type,Target Used,Precision(mm) -> Data: -25000 -751.65 -4405.44 -795.00 M Y 1.0 -25001 740.57 -4409.22 -790.85 M Y 1.0 -25002 736.77 -4409.70 791.69 M Y 1.0 -25003 -756.99 -4407.02 790.75 M Y 1.0 -35000 795.64 -4397.64 -788.18 M Y 1.0 -35001 2197.09 -3896.11 -787.64 M Y 1.0 -35002 2195.46 -3893.99 795.18 M Y 1.0 -35003 792.02 -4398.43 795.84 M Y 1.0 -45001 3388.89 -2923.81 -790.80 M Y 1.0 -45002 3396.04 -2914.45 790.62 M Y 1.0 -45003 2246.14 -3868.59 786.93 M Y 1.0 -210000 -719.00 -4596.22 -626.40 T Y 2.0 -210001 -718.56 -4596.16 -580.96 T Y 2.0 -210002 -719.08 -4596.46 -535.53 T Y 2.0 -210003 -718.94 -4596.26 -489.79 T Y 2.0 -210004 -718.92 -4596.44 -444.67 T Y 2.0 -210005 -719.17 -4596.07 -399.77 T Y 2.0 -210006 -719.62 -4596.52 -355.17 T Y 2.0 -210007 -719.60 -4596.21 -308.87 T Y 2.0 -210008 -720.38 -4596.33 -263.47 T Y 2.0 -210009 -720.76 -4596.62 -217.60 T Y 2.0 -210010 -719.60 -4596.41 -172.68 T Y 2.0 -210011 -720.87 -4596.68 -126.60 T Y 2.0 -210012 -720.34 -4596.66 -81.39 T Y 2.0 -210013 -720.94 -4596.72 -36.29 T Y 2.0 -210014 -720.65 -4596.86 8.96 T Y 2.0 -210015 -720.83 -4596.76 54.90 T Y 2.0 -210016 -721.68 -4596.93 99.90 T Y 2.0 -210017 -721.85 -4596.93 145.28 T Y 2.0 -210018 -721.36 -4596.31 190.97 T Y 2.0 -210019 -722.56 -4597.06 235.91 T Y 2.0 -210020 -722.62 -4597.22 281.74 T Y 2.0 -210021 -721.54 -4597.25 326.70 T Y 2.0 -210022 -722.53 -4597.34 372.48 T Y 2.0 -210023 -723.28 -4597.18 417.81 T Y 2.0 -210024 -722.76 -4596.09 463.78 T Y 2.0 -210025 -723.10 -4597.29 508.69 T Y 2.0 -210026 -723.04 -4596.24 554.96 T Y 2.0 -210027 -723.40 -4597.07 599.79 T Y 2.0 -211000 -560.92 -4597.01 -603.69 T Y 2.0 -211001 -560.89 -4597.15 -558.93 T Y 2.0 -211002 -561.63 -4597.27 -513.47 T Y 2.0 -211003 -561.29 -4596.97 -468.14 T Y 2.0 -211004 -561.27 -4596.96 -422.65 T Y 2.0 -211005 -560.96 -4596.89 -377.34 T Y 2.0 -211006 -561.53 -4597.25 -332.13 T Y 2.0 -211007 -561.69 -4596.86 -286.40 T Y 2.0 -211008 -562.56 -4597.33 -240.60 T Y 2.0 -211009 -562.47 -4597.18 -195.43 T Y 2.0 -211010 -562.39 -4597.17 -150.54 T Y 2.0 -211011 -562.37 -4597.29 -105.22 T Y 2.0 -211012 -562.69 -4597.39 -59.33 T Y 2.0 -211013 -562.81 -4597.41 -14.20 T Y 2.0 -211014 -562.73 -4597.40 31.53 T Y 2.0 -211015 -563.15 -4597.26 76.71 T Y 2.0 -211016 -563.03 -4597.00 122.34 T Y 2.0 -211017 -564.19 -4597.74 167.92 T Y 2.0 -211018 -563.88 -4596.99 212.88 T Y 2.0 -211019 -564.77 -4597.14 258.29 T Y 2.0 -211020 -564.33 -4597.43 304.26 T Y 2.0 -211021 -564.39 -4597.38 349.14 T Y 2.0 -211022 -563.75 -4597.64 394.78 T Y 2.0 -211023 -565.58 -4597.46 439.93 T Y 2.0 -211024 -564.57 -4597.53 485.70 T Y 2.0 -211025 -564.85 -4597.11 531.18 T Y 2.0 -211026 -564.96 -4597.75 576.94 T Y 2.0 -211027 -565.24 -4597.47 622.25 T Y 2.0 -212000 -537.51 -4597.04 -624.61 T Y 2.0 -212001 -538.60 -4596.88 -578.79 T Y 2.0 -212002 -538.43 -4597.22 -533.01 T Y 2.0 -212003 -538.42 -4597.22 -487.81 T Y 2.0 -212004 -538.28 -4597.07 -442.18 T Y 2.0 -212005 -538.50 -4597.09 -397.12 T Y 2.0 -212006 -539.01 -4597.14 -352.44 T Y 2.0 -212007 -538.93 -4597.21 -306.10 T Y 2.0 -212008 -539.67 -4597.59 -260.76 T Y 2.0 -212009 -539.43 -4597.10 -215.33 T Y 2.0 -212010 -539.68 -4597.15 -170.57 T Y 2.0 -212011 -539.72 -4597.01 -124.84 T Y 2.0 -212012 -539.74 -4597.32 -79.79 T Y 2.0 -212013 -539.55 -4596.95 -34.47 T Y 2.0 -212014 -540.49 -4596.85 10.96 T Y 2.0 -212015 -540.55 -4597.42 56.29 T Y 2.0 -212016 -540.48 -4597.24 101.67 T Y 2.0 -212017 -540.41 -4596.65 146.82 T Y 2.0 -212018 -541.31 -4597.48 192.53 T Y 2.0 -212019 -541.61 -4597.37 237.69 T Y 2.0 -212020 -540.97 -4597.15 283.78 T Y 2.0 -212021 -541.43 -4597.69 329.32 T Y 2.0 -212022 -541.34 -4597.80 375.03 T Y 2.0 -212023 -541.92 -4597.72 419.74 T Y 2.0 -212024 -541.98 -4597.64 465.57 T Y 2.0 -212025 -542.30 -4597.62 510.66 T Y 2.0 -212026 -542.30 -4597.61 556.69 T Y 2.0 -212027 -542.24 -4597.56 601.36 T Y 2.0 -213000 -380.06 -4597.62 -601.91 T Y 2.0 -213001 -379.93 -4597.68 -556.81 T Y 2.0 -213002 -380.35 -4598.01 -511.41 T Y 2.0 -213003 -380.59 -4598.07 -465.68 T Y 2.0 -213004 -380.60 -4598.02 -420.75 T Y 2.0 -213005 -380.61 -4597.59 -375.57 T Y 2.0 -213006 -380.45 -4598.09 -330.23 T Y 2.0 -213007 -381.10 -4597.91 -284.43 T Y 2.0 -213008 -381.13 -4597.47 -239.04 T Y 2.0 -213009 -381.93 -4597.64 -193.44 T Y 2.0 -213010 -381.71 -4597.11 -147.86 T Y 2.0 -213011 -381.78 -4598.03 -102.68 T Y 2.0 -213012 -382.40 -4597.37 -58.07 T Y 2.0 -213013 -381.57 -4597.83 -12.25 T Y 2.0 -213014 -382.17 -4597.08 33.11 T Y 2.0 -213015 -382.19 -4597.65 77.72 T Y 2.0 -213016 -382.24 -4597.93 123.73 T Y 2.0 -213017 -382.61 -4597.88 168.98 T Y 2.0 -213018 -382.92 -4597.64 214.77 T Y 2.0 -213019 -383.45 -4598.17 259.74 T Y 2.0 -213020 -383.99 -4597.60 305.89 T Y 2.0 -213021 -384.13 -4597.83 351.55 T Y 2.0 -213022 -383.53 -4597.97 397.28 T Y 2.0 -213023 -384.61 -4597.63 442.38 T Y 2.0 -213024 -384.34 -4597.45 487.77 T Y 2.0 -213025 -384.79 -4597.71 533.57 T Y 2.0 -213026 -383.88 -4598.00 578.92 T Y 2.0 -213027 -384.50 -4597.78 624.92 T Y 2.0 -214000 -357.06 -4597.56 -624.72 T Y 2.0 -214001 -357.34 -4597.84 -579.02 T Y 2.0 -214002 -357.59 -4597.55 -534.16 T Y 2.0 -214003 -357.94 -4597.87 -488.69 T Y 2.0 -214004 -357.82 -4597.87 -443.06 T Y 2.0 -214005 -357.63 -4597.98 -397.82 T Y 2.0 -214006 -358.30 -4597.54 -352.61 T Y 2.0 -214007 -358.58 -4597.70 -307.24 T Y 2.0 -214008 -359.16 -4597.52 -262.13 T Y 2.0 -214009 -359.22 -4597.88 -216.46 T Y 2.0 -214010 -358.97 -4597.17 -171.17 T Y 2.0 -214011 -359.59 -4597.25 -125.85 T Y 2.0 -214012 -359.83 -4597.71 -80.55 T Y 2.0 -214013 -359.02 -4598.02 -35.18 T Y 2.0 -214014 -359.73 -4597.60 10.33 T Y 2.0 -214015 -359.97 -4597.96 55.44 T Y 2.0 -214016 -359.46 -4597.71 101.03 T Y 2.0 -214017 -360.09 -4597.79 146.67 T Y 2.0 -214018 -359.88 -4597.96 192.54 T Y 2.0 -214019 -360.67 -4597.80 238.37 T Y 2.0 -214020 -361.42 -4597.78 283.49 T Y 2.0 -214021 -360.70 -4597.96 329.22 T Y 2.0 -214022 -360.57 -4597.43 374.44 T Y 2.0 -214023 -361.11 -4598.15 420.06 T Y 2.0 -214024 -361.05 -4597.26 465.58 T Y 2.0 -214025 -360.90 -4597.75 510.73 T Y 2.0 -214026 -361.03 -4598.24 556.18 T Y 2.0 -214027 -361.52 -4598.18 601.57 T Y 2.0 -215000 -199.59 -4598.20 -602.78 T Y 2.0 -215001 -199.93 -4598.60 -557.24 T Y 2.0 -215002 -199.82 -4598.20 -511.90 T Y 2.0 -215003 -199.49 -4597.88 -466.31 T Y 2.0 -215004 -199.55 -4597.85 -421.22 T Y 2.0 -215005 -200.18 -4597.91 -375.87 T Y 2.0 -215006 -199.85 -4598.24 -330.29 T Y 2.0 -215007 -200.60 -4598.06 -285.38 T Y 2.0 -215008 -200.82 -4597.36 -239.73 T Y 2.0 -215009 -201.33 -4597.99 -194.16 T Y 2.0 -215010 -201.50 -4597.75 -148.99 T Y 2.0 -215011 -202.01 -4598.22 -103.49 T Y 2.0 -215012 -202.17 -4598.05 -58.26 T Y 2.0 -215013 -200.72 -4597.83 -12.50 T Y 2.0 -215014 -201.52 -4597.84 32.90 T Y 2.0 -215015 -202.07 -4597.97 77.82 T Y 2.0 -215016 -201.54 -4598.15 123.47 T Y 2.0 -215017 -202.88 -4598.37 169.24 T Y 2.0 -215018 -202.27 -4598.01 214.70 T Y 2.0 -215019 -202.27 -4598.39 260.07 T Y 2.0 -215020 -203.47 -4598.70 305.98 T Y 2.0 -215021 -202.22 -4598.56 351.55 T Y 2.0 -215022 -203.66 -4598.31 396.56 T Y 2.0 -215023 -204.07 -4598.93 442.81 T Y 2.0 -215024 -203.04 -4598.69 488.28 T Y 2.0 -215025 -203.26 -4598.60 533.39 T Y 2.0 -215026 -203.27 -4598.87 579.41 T Y 2.0 -215027 -203.42 -4598.79 624.62 T Y 2.0 -216000 -176.38 -4598.34 -624.94 T Y 2.0 -216001 -177.14 -4598.28 -579.79 T Y 2.0 -216002 -176.71 -4598.00 -534.60 T Y 2.0 -216003 -177.19 -4598.55 -488.85 T Y 2.0 -216004 -177.05 -4598.24 -442.85 T Y 2.0 -216005 -177.08 -4598.28 -397.65 T Y 2.0 -216006 -177.20 -4597.33 -351.99 T Y 2.0 -216007 -177.50 -4598.23 -306.83 T Y 2.0 -216008 -177.74 -4598.19 -261.39 T Y 2.0 -216009 -178.40 -4598.42 -216.24 T Y 2.0 -216010 -178.27 -4598.46 -170.69 T Y 2.0 -216011 -178.28 -4598.20 -125.21 T Y 2.0 -216012 -179.33 -4598.39 -79.58 T Y 2.0 -216013 -177.86 -4598.22 -34.15 T Y 2.0 -216014 -178.41 -4598.53 11.66 T Y 2.0 -216015 -179.08 -4597.95 56.91 T Y 2.0 -216016 -179.04 -4598.48 102.12 T Y 2.0 -216017 -180.01 -4598.41 147.44 T Y 2.0 -216018 -178.49 -4598.34 193.11 T Y 2.0 -216019 -179.54 -4597.70 238.74 T Y 2.0 -216020 -179.61 -4598.39 284.43 T Y 2.0 -216021 -179.66 -4598.58 329.46 T Y 2.0 -216022 -181.01 -4598.20 374.77 T Y 2.0 -216023 -181.10 -4598.13 420.17 T Y 2.0 -216024 -179.80 -4598.56 465.30 T Y 2.0 -216025 -180.05 -4598.55 511.03 T Y 2.0 -216026 -180.55 -4598.53 556.95 T Y 2.0 -216027 -180.55 -4598.74 601.96 T Y 2.0 -217000 -19.11 -4598.58 -602.89 T Y 2.0 -217001 -20.04 -4598.68 -557.04 T Y 2.0 -217002 -18.76 -4597.95 -511.74 T Y 2.0 -217003 -19.57 -4598.29 -466.29 T Y 2.0 -217004 -19.24 -4598.84 -420.07 T Y 2.0 -217005 -18.89 -4599.02 -374.76 T Y 2.0 -217006 -19.49 -4598.74 -329.77 T Y 2.0 -217007 -19.75 -4598.77 -283.48 T Y 2.0 -217008 -19.72 -4598.69 -238.80 T Y 2.0 -217009 -20.05 -4598.64 -193.64 T Y 2.0 -217010 -20.97 -4598.78 -148.29 T Y 2.0 -217011 -20.39 -4598.57 -102.07 T Y 2.0 -217012 -21.48 -4599.11 -56.39 T Y 2.0 -217013 -20.18 -4598.82 -11.06 T Y 2.0 -217014 -20.68 -4598.05 34.24 T Y 2.0 -217015 -20.78 -4598.65 79.39 T Y 2.0 -217016 -20.79 -4599.03 124.82 T Y 2.0 -217017 -22.09 -4598.48 170.02 T Y 2.0 -217018 -20.93 -4598.72 215.75 T Y 2.0 -217019 -21.30 -4598.94 261.36 T Y 2.0 -217020 -21.36 -4598.92 306.58 T Y 2.0 -217021 -21.74 -4598.99 351.73 T Y 2.0 -217022 -22.47 -4599.10 397.42 T Y 2.0 -217023 -24.19 -4598.60 443.01 T Y 2.0 -217024 -21.68 -4599.49 488.85 T Y 2.0 -217025 -22.44 -4599.28 534.11 T Y 2.0 -217026 -22.89 -4599.21 579.34 T Y 2.0 -217027 -22.65 -4599.23 624.39 T Y 2.0 -218000 3.76 -4598.82 -624.94 T Y 2.0 -218001 2.99 -4598.79 -579.85 T Y 2.0 -218002 3.94 -4598.76 -534.88 T Y 2.0 -218003 3.35 -4599.03 -488.63 T Y 2.0 -218004 4.22 -4598.90 -443.72 T Y 2.0 -218005 3.72 -4598.83 -397.92 T Y 2.0 -218006 4.72 -4598.32 -352.56 T Y 2.0 -218007 2.68 -4598.84 -307.54 T Y 2.0 -218008 3.69 -4598.91 -261.75 T Y 2.0 -218009 2.85 -4599.23 -216.39 T Y 2.0 -218010 4.05 -4598.73 -171.14 T Y 2.0 -218011 2.88 -4598.77 -125.75 T Y 2.0 -218012 2.08 -4599.03 -80.09 T Y 2.0 -218013 2.46 -4599.07 -35.11 T Y 2.0 -218014 1.89 -4598.72 10.39 T Y 2.0 -218015 2.12 -4598.52 55.31 T Y 2.0 -218016 2.09 -4598.96 101.17 T Y 2.0 -218017 1.75 -4598.61 146.18 T Y 2.0 -218018 1.54 -4597.81 191.78 T Y 2.0 -218019 1.87 -4598.62 237.26 T Y 2.0 -218020 1.29 -4599.05 281.92 T Y 2.0 -218021 0.98 -4598.44 328.01 T Y 2.0 -218022 0.55 -4599.25 373.58 T Y 2.0 -218023 1.63 -4599.04 418.91 T Y 2.0 -218024 0.80 -4598.73 464.61 T Y 2.0 -218025 -0.13 -4598.65 509.65 T Y 2.0 -218026 -0.07 -4599.20 556.35 T Y 2.0 -218027 0.60 -4599.18 601.71 T Y 2.0 -219000 161.35 -4598.45 -602.38 T Y 2.0 -219001 160.29 -4598.88 -557.26 T Y 2.0 -219002 161.37 -4598.95 -512.32 T Y 2.0 -219003 160.55 -4598.68 -466.34 T Y 2.0 -219004 162.09 -4599.16 -420.89 T Y 2.0 -219005 161.30 -4599.06 -374.83 T Y 2.0 -219006 161.72 -4598.79 -329.64 T Y 2.0 -219007 159.96 -4599.12 -284.36 T Y 2.0 -219008 160.86 -4598.92 -238.82 T Y 2.0 -219009 160.94 -4598.78 -193.75 T Y 2.0 -219010 -719.00 -4596.22 -626.40 T Y 2.0 -219011 160.48 -4598.97 -102.41 T Y 2.0 -219012 159.89 -4599.29 -57.39 T Y 2.0 -219013 159.74 -4599.25 -12.18 T Y 2.0 -219014 159.47 -4598.82 32.97 T Y 2.0 -219015 159.12 -4598.84 78.91 T Y 2.0 -219016 159.56 -4598.76 124.23 T Y 2.0 -219017 159.47 -4598.62 169.24 T Y 2.0 -219018 159.25 -4599.07 214.76 T Y 2.0 -219019 159.17 -4599.31 259.90 T Y 2.0 -219020 158.85 -4598.48 304.90 T Y 2.0 -219021 158.78 -4599.29 350.81 T Y 2.0 -219022 158.81 -4599.32 396.60 T Y 2.0 -219023 159.03 -4599.40 440.94 T Y 2.0 -219024 158.37 -4599.39 486.93 T Y 2.0 -219025 157.99 -4598.66 532.80 T Y 2.0 -219026 157.48 -4599.63 579.23 T Y 2.0 -219027 157.84 -4599.78 624.90 T Y 2.0 -220000 185.18 -4598.22 -624.82 T Y 2.0 -220001 183.44 -4598.92 -579.81 T Y 2.0 -220002 184.45 -4599.26 -534.68 T Y 2.0 -220003 183.60 -4598.86 -488.73 T Y 2.0 -220004 185.26 -4599.06 -443.57 T Y 2.0 -220005 185.15 -4598.97 -398.50 T Y 2.0 -220006 184.57 -4599.04 -353.03 T Y 2.0 -220007 183.37 -4599.05 -307.51 T Y 2.0 -220008 183.98 -4599.05 -261.19 T Y 2.0 -220009 183.77 -4598.96 -215.78 T Y 2.0 -220010 183.87 -4598.93 -170.03 T Y 2.0 -220011 183.61 -4599.00 -125.08 T Y 2.0 -220012 183.08 -4598.89 -79.73 T Y 2.0 -220013 183.04 -4599.13 -34.65 T Y 2.0 -220014 183.36 -4597.39 11.48 T Y 2.0 -220015 182.42 -4599.21 56.40 T Y 2.0 -220016 182.96 -4599.22 102.35 T Y 2.0 -220017 182.23 -4599.32 147.75 T Y 2.0 -220018 182.29 -4599.32 192.73 T Y 2.0 -220019 182.51 -4599.33 238.56 T Y 2.0 -220020 182.07 -4599.47 284.33 T Y 2.0 -220021 181.63 -4599.27 329.49 T Y 2.0 -220022 181.37 -4598.97 374.86 T Y 2.0 -220023 181.96 -4599.27 419.92 T Y 2.0 -220024 181.48 -4599.62 465.91 T Y 2.0 -220025 180.64 -4598.95 511.11 T Y 2.0 -220026 180.29 -4599.49 556.89 T Y 2.0 -220027 180.61 -4599.66 601.59 T Y 2.0 -221000 343.14 -4599.49 -602.55 T Y 2.0 -221001 341.16 -4599.16 -556.80 T Y 2.0 -221002 342.92 -4599.09 -511.36 T Y 2.0 -221003 341.09 -4599.40 -466.37 T Y 2.0 -221004 342.99 -4599.40 -420.13 T Y 2.0 -221005 342.11 -4599.64 -374.88 T Y 2.0 -221006 342.65 -4599.58 -329.78 T Y 2.0 -221007 340.73 -4599.25 -284.19 T Y 2.0 -221008 341.81 -4599.47 -238.45 T Y 2.0 -221009 342.22 -4599.74 -193.22 T Y 2.0 -221010 341.45 -4599.58 -148.28 T Y 2.0 -221011 341.39 -4599.18 -102.78 T Y 2.0 -221012 341.66 -4598.86 -57.25 T Y 2.0 -221013 340.76 -4599.67 -11.35 T Y 2.0 -221014 341.64 -4599.55 33.85 T Y 2.0 -221015 340.30 -4599.11 78.84 T Y 2.0 -221016 341.35 -4599.21 124.87 T Y 2.0 -221017 340.45 -4599.58 170.16 T Y 2.0 -221018 340.30 -4599.84 215.64 T Y 2.0 -221019 339.46 -4599.66 261.13 T Y 2.0 -221020 339.47 -4599.63 306.52 T Y 2.0 -221021 339.48 -4599.01 351.65 T Y 2.0 -221022 339.69 -4599.86 396.93 T Y 2.0 -221023 339.60 -4599.42 442.54 T Y 2.0 -221024 339.90 -4599.92 488.18 T Y 2.0 -221025 338.19 -4599.82 533.49 T Y 2.0 -221026 338.69 -4600.07 578.92 T Y 2.0 -221027 338.94 -4600.13 624.54 T Y 2.0 -222000 366.31 -4599.22 -624.54 T Y 2.0 -222001 364.03 -4599.37 -579.38 T Y 2.0 -222002 365.67 -4599.45 -534.02 T Y 2.0 -222003 364.10 -4599.60 -488.26 T Y 2.0 -222004 365.55 -4599.38 -442.71 T Y 2.0 -222005 364.96 -4599.39 -396.64 T Y 2.0 -222006 365.56 -4599.40 -351.70 T Y 2.0 -222007 365.54 -4599.04 -306.03 T Y 2.0 -222008 364.23 -4598.99 -260.66 T Y 2.0 -222009 364.85 -4599.43 -215.72 T Y 2.0 -222010 364.46 -4599.63 -169.41 T Y 2.0 -222011 364.97 -4599.34 -124.61 T Y 2.0 -222012 365.03 -4599.34 -79.25 T Y 2.0 -222013 363.63 -4599.69 -33.90 T Y 2.0 -222014 364.77 -4599.45 11.59 T Y 2.0 -222015 364.47 -4599.72 57.68 T Y 2.0 -222016 364.34 -4599.68 102.89 T Y 2.0 -222017 363.70 -4599.72 148.25 T Y 2.0 -222018 363.31 -4599.35 193.64 T Y 2.0 -222019 362.09 -4599.52 239.39 T Y 2.0 -222020 362.87 -4599.45 284.48 T Y 2.0 -222021 362.62 -4599.61 329.82 T Y 2.0 -222022 362.57 -4599.65 375.42 T Y 2.0 -222023 362.59 -4599.69 420.68 T Y 2.0 -222024 362.24 -4599.69 466.02 T Y 2.0 -222025 360.40 -4599.94 511.65 T Y 2.0 -222026 362.13 -4599.80 556.88 T Y 2.0 -222027 362.01 -4599.29 602.13 T Y 2.0 -223000 523.88 -4600.10 -602.32 T Y 2.0 -223001 521.63 -4597.81 -556.26 T Y 2.0 -223002 523.70 -4599.94 -511.03 T Y 2.0 -223003 523.24 -4599.92 -465.54 T Y 2.0 -223004 523.27 -4599.61 -419.53 T Y 2.0 -223005 523.58 -4600.08 -373.91 T Y 2.0 -223006 523.44 -4599.94 -328.72 T Y 2.0 -223007 523.76 -4599.48 -283.20 T Y 2.0 -223008 523.45 -4599.66 -237.97 T Y 2.0 -223009 523.02 -4600.15 -192.50 T Y 2.0 -223010 522.86 -4599.71 -147.42 T Y 2.0 -223011 522.30 -4599.77 -102.04 T Y 2.0 -223012 522.75 -4600.21 -56.55 T Y 2.0 -223013 521.91 -4599.74 -11.35 T Y 2.0 -223014 522.30 -4600.32 34.12 T Y 2.0 -223015 523.02 -4599.88 80.57 T Y 2.0 -223016 522.41 -4599.82 126.21 T Y 2.0 -223017 522.13 -4599.50 171.07 T Y 2.0 -223018 521.26 -4600.27 216.86 T Y 2.0 -223019 519.33 -4598.79 262.24 T Y 2.0 -223020 521.37 -4599.40 307.36 T Y 2.0 -223021 519.97 -4600.09 353.11 T Y 2.0 -223022 521.13 -4600.62 398.32 T Y 2.0 -223023 521.17 -4600.28 443.39 T Y 2.0 -223024 520.67 -4600.11 488.99 T Y 2.0 -223025 518.37 -4598.90 534.64 T Y 2.0 -223026 519.86 -4600.41 579.85 T Y 2.0 -223027 520.05 -4600.13 625.20 T Y 2.0 -224000 547.08 -4600.02 -624.92 T Y 2.0 -224001 545.29 -4599.99 -579.87 T Y 2.0 -224002 546.24 -4600.09 -533.42 T Y 2.0 -224003 546.23 -4600.01 -488.21 T Y 2.0 -224004 545.89 -4599.64 -442.73 T Y 2.0 -224005 546.20 -4600.12 -397.48 T Y 2.0 -224006 546.78 -4599.57 -351.90 T Y 2.0 -224007 546.82 -4599.34 -305.79 T Y 2.0 -224008 545.54 -4600.20 -260.50 T Y 2.0 -224009 546.33 -4599.63 -215.14 T Y 2.0 -224010 546.27 -4599.86 -169.73 T Y 2.0 -224011 546.01 -4599.18 -123.43 T Y 2.0 -224012 545.34 -4600.29 -78.58 T Y 2.0 -224013 545.33 -4600.12 -33.33 T Y 2.0 -224014 545.18 -4600.26 11.70 T Y 2.0 -224015 545.31 -4600.00 57.05 T Y 2.0 -224016 545.27 -4600.10 102.88 T Y 2.0 -224017 545.65 -4599.75 148.99 T Y 2.0 -224018 544.44 -4600.26 194.54 T Y 2.0 -224019 542.58 -4600.18 239.87 T Y 2.0 -224020 544.02 -4600.22 284.76 T Y 2.0 -224021 542.57 -4600.01 330.29 T Y 2.0 -224022 544.22 -4600.00 375.31 T Y 2.0 -224023 544.30 -4600.42 420.69 T Y 2.0 -224024 543.47 -4600.22 466.01 T Y 2.0 -224025 542.73 -4600.04 511.46 T Y 2.0 -224026 543.29 -4600.28 556.70 T Y 2.0 -224027 543.08 -4600.41 602.45 T Y 2.0 -225000 705.16 -4600.21 -601.76 T Y 2.0 -225001 703.97 -4599.93 -557.05 T Y 2.0 -225002 704.89 -4600.22 -510.74 T Y 2.0 -225003 704.81 -4600.09 -464.99 T Y 2.0 -225004 704.64 -4600.40 -419.35 T Y 2.0 -225005 704.76 -4600.78 -374.02 T Y 2.0 -225006 704.43 -4600.64 -328.29 T Y 2.0 -225007 705.13 -4600.18 -282.98 T Y 2.0 -225008 704.40 -4600.67 -237.15 T Y 2.0 -225009 704.66 -4599.61 -192.26 T Y 2.0 -225010 704.76 -4600.75 -146.86 T Y 2.0 -225011 704.06 -4600.91 -101.08 T Y 2.0 -225012 703.80 -4600.43 -56.04 T Y 2.0 -225013 703.52 -4600.83 -10.30 T Y 2.0 -225014 703.03 -4601.11 35.19 T Y 2.0 -225015 703.72 -4600.54 80.35 T Y 2.0 -225016 703.67 -4600.67 125.91 T Y 2.0 -225017 703.63 -4600.59 171.31 T Y 2.0 -225018 702.49 -4601.06 217.03 T Y 2.0 -225019 701.34 -4600.80 262.46 T Y 2.0 -225020 702.26 -4600.45 307.58 T Y 2.0 -225021 700.73 -4600.84 353.51 T Y 2.0 -225022 702.99 -4601.17 398.75 T Y 2.0 -225023 702.65 -4601.06 443.55 T Y 2.0 -225024 702.38 -4600.14 489.40 T Y 2.0 -225025 701.24 -4600.91 534.79 T Y 2.0 -225026 701.54 -4600.75 579.87 T Y 2.0 -225027 701.46 -4600.97 625.56 T Y 2.0 -310000 888.16 -4567.42 -623.71 T Y 2.0 -310001 889.10 -4567.12 -578.16 T Y 2.0 -310002 889.19 -4567.26 -532.98 T Y 2.0 -310003 889.29 -4566.51 -487.85 T Y 2.0 -310004 889.25 -4566.42 -442.17 T Y 2.0 -310005 889.02 -4566.77 -396.92 T Y 2.0 -310006 888.57 -4567.50 -351.20 T Y 2.0 -310007 889.01 -4567.00 -305.78 T Y 2.0 -310008 888.97 -4567.02 -261.10 T Y 2.0 -310009 889.26 -4566.76 -215.17 T Y 2.0 -310010 888.93 -4566.63 -170.30 T Y 2.0 -310011 888.85 -4566.72 -125.13 T Y 2.0 -310012 889.41 -4566.67 -79.80 T Y 2.0 -310013 889.12 -4566.94 -33.05 T Y 2.0 -310014 888.33 -4566.11 12.10 T Y 2.0 -310015 888.82 -4566.51 57.89 T Y 2.0 -310016 888.93 -4566.67 103.55 T Y 2.0 -310017 890.03 -4565.98 148.73 T Y 2.0 -310018 888.59 -4566.74 194.57 T Y 2.0 -310019 888.66 -4566.40 239.82 T Y 2.0 -310020 889.24 -4566.06 285.35 T Y 2.0 -310021 888.77 -4566.46 330.53 T Y 2.0 -310022 888.74 -4566.32 375.31 T Y 2.0 -310023 889.10 -4566.13 420.78 T Y 2.0 -310024 889.14 -4566.21 466.17 T Y 2.0 -310025 889.09 -4566.08 511.77 T Y 2.0 -310026 889.93 -4565.99 557.47 T Y 2.0 -310027 889.90 -4565.66 602.59 T Y 2.0 -311000 1038.15 -4513.74 -602.08 T Y 2.0 -311001 1038.70 -4513.50 -556.38 T Y 2.0 -311002 1037.11 -4513.56 -510.88 T Y 2.0 -311003 1038.31 -4513.15 -465.87 T Y 2.0 -311004 1037.99 -4513.53 -374.52 T Y 2.0 -311005 1038.02 -4513.52 -420.11 T Y 2.0 -311006 1037.25 -4513.54 -329.45 T Y 2.0 -311007 1037.74 -4513.40 -284.24 T Y 2.0 -311008 1038.08 -4513.43 -238.74 T Y 2.0 -311009 1037.95 -4513.29 -193.58 T Y 2.0 -311010 1038.13 -4513.43 -148.37 T Y 2.0 -311011 1037.83 -4513.01 -103.02 T Y 2.0 -311012 1037.91 -4512.74 -57.82 T Y 2.0 -311013 1037.48 -4513.16 -11.47 T Y 2.0 -311014 1038.14 -4512.83 33.94 T Y 2.0 -311015 1037.85 -4512.59 79.64 T Y 2.0 -311016 1038.39 -4512.96 124.91 T Y 2.0 -311017 1038.20 -4512.29 170.27 T Y 2.0 -311018 1038.23 -4512.78 215.83 T Y 2.0 -311019 1038.09 -4512.89 261.28 T Y 2.0 -311020 1038.26 -4512.88 307.14 T Y 2.0 -311021 1038.60 -4512.77 352.60 T Y 2.0 -311022 1038.28 -4512.43 397.77 T Y 2.0 -311023 1037.95 -4512.47 442.58 T Y 2.0 -311024 1038.27 -4512.43 488.11 T Y 2.0 -311025 1038.51 -4512.39 533.24 T Y 2.0 -311026 1037.86 -4512.44 578.53 T Y 2.0 -311027 1038.47 -4512.81 624.02 T Y 2.0 -312000 1059.42 -4506.01 -624.30 T Y 2.0 -312001 1059.51 -4505.78 -578.16 T Y 2.0 -312002 1058.77 -4506.29 -533.05 T Y 2.0 -312003 1060.13 -4505.44 -488.20 T Y 2.0 -312004 1059.47 -4505.76 -442.08 T Y 2.0 -312005 1059.83 -4505.58 -395.75 T Y 2.0 -312006 1059.34 -4505.61 -350.39 T Y 2.0 -312007 1059.21 -4505.45 -305.27 T Y 2.0 -312008 1059.30 -4505.71 -260.05 T Y 2.0 -312009 1059.14 -4505.66 -214.84 T Y 2.0 -312010 1059.89 -4505.18 -169.10 T Y 2.0 -312011 1059.70 -4505.27 -124.19 T Y 2.0 -312012 1059.23 -4505.22 -78.90 T Y 2.0 -312013 1058.90 -4505.06 -33.56 T Y 2.0 -312014 1058.98 -4505.26 11.83 T Y 2.0 -312015 1059.21 -4505.23 57.07 T Y 2.0 -312016 1059.86 -4504.94 102.62 T Y 2.0 -312017 1059.76 -4505.30 148.48 T Y 2.0 -312018 1059.65 -4505.00 195.21 T Y 2.0 -312019 1060.02 -4504.25 240.39 T Y 2.0 -312020 1059.69 -4505.02 285.83 T Y 2.0 -312021 1059.92 -4504.86 330.86 T Y 2.0 -312022 1060.26 -4504.79 375.62 T Y 2.0 -312023 1059.90 -4504.99 421.57 T Y 2.0 -312024 1060.21 -4504.76 466.84 T Y 2.0 -312025 1059.60 -4505.15 512.35 T Y 2.0 -312026 1059.99 -4504.89 557.38 T Y 2.0 -312027 1059.58 -4504.86 604.01 T Y 2.0 -313000 1208.45 -4452.74 -603.71 T Y 2.0 -313001 1208.50 -4452.58 -556.89 T Y 2.0 -313002 1208.12 -4452.06 -512.09 T Y 2.0 -313003 1208.59 -4452.26 -465.38 T Y 2.0 -313004 1208.75 -4452.36 -420.00 T Y 2.0 -313005 1208.53 -4452.27 -374.86 T Y 2.0 -313006 1208.14 -4452.29 -329.34 T Y 2.0 -313007 1208.20 -4452.08 -283.70 T Y 2.0 -313008 1208.67 -4451.58 -238.92 T Y 2.0 -313009 1207.91 -4452.24 -193.42 T Y 2.0 -313010 1208.59 -4451.86 -148.79 T Y 2.0 -313011 1207.95 -4452.21 -103.04 T Y 2.0 -313012 1207.99 -4451.90 -57.18 T Y 2.0 -313013 1208.52 -4451.84 -11.89 T Y 2.0 -313014 1208.29 -4451.85 33.18 T Y 2.0 -313015 1208.32 -4451.91 78.86 T Y 2.0 -313016 1208.67 -4451.72 124.30 T Y 2.0 -313017 1208.18 -4451.79 169.31 T Y 2.0 -313018 1208.44 -4451.91 216.08 T Y 2.0 -313019 1208.60 -4451.56 260.98 T Y 2.0 -313020 1208.64 -4451.90 306.08 T Y 2.0 -313021 1208.72 -4451.67 351.78 T Y 2.0 -313022 1208.76 -4451.73 396.90 T Y 2.0 -313023 1207.97 -4451.82 442.67 T Y 2.0 -313024 1208.98 -4451.60 488.28 T Y 2.0 -313025 1208.84 -4451.52 533.40 T Y 2.0 -313026 1208.65 -4450.97 578.68 T Y 2.0 -313027 1208.71 -4451.07 625.78 T Y 2.0 -314000 1229.85 -4445.10 -625.83 T Y 2.0 -314001 1229.55 -4444.97 -580.42 T Y 2.0 -314002 1229.89 -4444.22 -534.65 T Y 2.0 -314003 1229.84 -4444.45 -489.11 T Y 2.0 -314004 1229.73 -4444.84 -443.93 T Y 2.0 -314005 1230.18 -4444.58 -397.67 T Y 2.0 -314006 1229.18 -4444.83 -351.51 T Y 2.0 -314007 1229.53 -4443.93 -306.21 T Y 2.0 -314008 1229.73 -4444.26 -261.09 T Y 2.0 -314009 1229.54 -4444.53 -216.25 T Y 2.0 -314010 1229.87 -4444.27 -170.64 T Y 2.0 -314011 1229.48 -4444.71 -125.25 T Y 2.0 -314012 1229.84 -4444.44 -80.47 T Y 2.0 -314013 1229.46 -4444.52 -34.33 T Y 2.0 -314014 1229.47 -4444.51 11.48 T Y 2.0 -314015 1229.71 -4444.21 57.02 T Y 2.0 -314016 1229.61 -4444.36 102.50 T Y 2.0 -314017 1229.48 -4444.51 147.71 T Y 2.0 -314018 1229.82 -4444.11 192.88 T Y 2.0 -314019 1229.99 -4444.08 238.66 T Y 2.0 -314020 1229.70 -4443.91 283.63 T Y 2.0 -314021 1229.92 -4443.77 328.87 T Y 2.0 -314022 1229.80 -4444.10 374.83 T Y 2.0 -314023 1229.33 -4444.51 420.28 T Y 2.0 -314024 1229.93 -4444.27 466.06 T Y 2.0 -314025 1229.96 -4443.38 510.76 T Y 2.0 -314026 1229.99 -4444.37 557.42 T Y 2.0 -314027 1230.30 -4444.07 603.20 T Y 2.0 -315000 1378.39 -4391.94 -604.21 T Y 2.0 -315001 1378.41 -4391.49 -558.25 T Y 2.0 -315002 1378.99 -4391.19 -513.64 T Y 2.0 -315003 1378.67 -4391.38 -467.59 T Y 2.0 -315004 1378.97 -4391.07 -422.10 T Y 2.0 -315005 1378.69 -4391.44 -376.35 T Y 2.0 -315006 1378.11 -4391.23 -330.76 T Y 2.0 -315007 1378.69 -4390.99 -285.54 T Y 2.0 -315008 1378.44 -4391.27 -240.05 T Y 2.0 -315009 1378.93 -4391.22 -194.32 T Y 2.0 -315010 1378.75 -4390.93 -149.02 T Y 2.0 -315011 1379.04 -4391.11 -104.25 T Y 2.0 -315012 1379.01 -4390.91 -58.61 T Y 2.0 -315013 1378.41 -4390.83 -12.50 T Y 2.0 -315014 1378.55 -4390.92 33.71 T Y 2.0 -315015 1378.82 -4391.07 79.61 T Y 2.0 -315016 1379.40 -4390.91 124.38 T Y 2.0 -315017 1378.59 -4390.92 169.37 T Y 2.0 -315018 1378.50 -4390.60 214.63 T Y 2.0 -315019 1379.44 -4390.49 259.95 T Y 2.0 -315020 1379.11 -4390.76 305.76 T Y 2.0 -315021 1379.13 -4390.62 350.72 T Y 2.0 -315022 1378.91 -4390.48 396.03 T Y 2.0 -315023 1378.92 -4390.97 441.76 T Y 2.0 -315024 1378.61 -4390.41 486.85 T Y 2.0 -315025 1379.57 -4390.85 532.57 T Y 2.0 -315026 1378.71 -4390.99 578.67 T Y 2.0 -315027 1378.86 -4391.07 623.75 T Y 2.0 -316000 1400.84 -4383.66 -625.32 T Y 2.0 -316001 1400.40 -4383.87 -579.06 T Y 2.0 -316002 1400.21 -4383.64 -534.02 T Y 2.0 -316003 1400.43 -4383.66 -488.11 T Y 2.0 -316004 1400.48 -4383.47 -443.10 T Y 2.0 -316005 1400.53 -4383.55 -397.50 T Y 2.0 -316006 1399.68 -4383.80 -351.83 T Y 2.0 -316007 1400.19 -4383.41 -306.49 T Y 2.0 -316008 1400.45 -4383.09 -261.41 T Y 2.0 -316009 1400.14 -4383.67 -215.77 T Y 2.0 -316010 1400.11 -4383.32 -169.90 T Y 2.0 -316011 1400.05 -4383.46 -125.34 T Y 2.0 -316012 1399.78 -4382.94 -79.37 T Y 2.0 -316013 1400.13 -4383.46 -33.86 T Y 2.0 -316014 1399.83 -4383.43 11.34 T Y 2.0 -316015 1399.68 -4383.41 56.83 T Y 2.0 -316016 1400.23 -4383.39 102.57 T Y 2.0 -316017 1399.87 -4383.22 147.22 T Y 2.0 -316018 1400.58 -4383.14 192.66 T Y 2.0 -316019 1400.39 -4383.04 238.49 T Y 2.0 -316020 1400.53 -4383.07 284.11 T Y 2.0 -316021 1400.54 -4383.16 329.09 T Y 2.0 -316022 1399.90 -4383.50 374.33 T Y 2.0 -316023 1400.13 -4383.34 419.66 T Y 2.0 -316024 1400.40 -4383.16 465.67 T Y 2.0 -316025 1400.64 -4382.56 511.69 T Y 2.0 -316026 1400.54 -4382.90 557.10 T Y 2.0 -316027 1400.24 -4382.65 602.58 T Y 2.0 -317000 1549.72 -4330.61 -603.30 T Y 2.0 -317001 1549.19 -4330.48 -557.47 T Y 2.0 -317002 1549.01 -4330.27 -511.89 T Y 2.0 -317003 1549.03 -4330.29 -466.77 T Y 2.0 -317004 1548.87 -4330.22 -420.78 T Y 2.0 -317005 1550.16 -4330.18 -374.84 T Y 2.0 -317006 1549.24 -4330.41 -329.27 T Y 2.0 -317007 1549.20 -4330.12 -283.57 T Y 2.0 -317008 1548.75 -4330.25 -238.05 T Y 2.0 -317009 1548.94 -4329.78 -192.82 T Y 2.0 -317010 1548.98 -4330.09 -147.66 T Y 2.0 -317011 1549.31 -4329.88 -102.16 T Y 2.0 -317012 1549.07 -4329.76 -56.63 T Y 2.0 -317013 888.16 -4567.42 -623.71 T Y 2.0 -317014 1549.26 -4329.71 33.85 T Y 2.0 -317015 1548.76 -4329.45 78.97 T Y 2.0 -317016 1549.62 -4329.73 124.43 T Y 2.0 -317017 1548.92 -4329.96 169.63 T Y 2.0 -317018 1548.76 -4330.02 215.42 T Y 2.0 -317019 1549.22 -4330.28 260.57 T Y 2.0 -317020 1550.01 -4329.63 305.73 T Y 2.0 -317021 1549.59 -4330.02 350.99 T Y 2.0 -317022 1548.42 -4329.75 396.39 T Y 2.0 -317023 1548.83 -4330.00 441.58 T Y 2.0 -317024 1549.42 -4329.71 487.47 T Y 2.0 -317025 1549.78 -4329.83 532.68 T Y 2.0 -317026 1549.12 -4330.06 578.01 T Y 2.0 -317027 1549.75 -4329.87 623.84 T Y 2.0 -318000 1571.20 -4322.68 -626.09 T Y 2.0 -318001 1571.03 -4323.08 -580.42 T Y 2.0 -318002 1570.56 -4322.20 -534.39 T Y 2.0 -318003 1570.16 -4322.87 -489.34 T Y 2.0 -318004 1570.77 -4322.42 -443.25 T Y 2.0 -318005 1570.55 -4322.07 -397.89 T Y 2.0 -318006 1570.95 -4322.68 -352.11 T Y 2.0 -318007 1570.74 -4322.24 -307.04 T Y 2.0 -318008 1570.45 -4322.73 -261.06 T Y 2.0 -318009 1570.85 -4322.48 -215.96 T Y 2.0 -318010 1570.28 -4322.41 -170.52 T Y 2.0 -318011 1570.64 -4322.82 -124.96 T Y 2.0 -318012 1570.35 -4322.48 -79.39 T Y 2.0 -318013 1570.89 -4322.05 -33.77 T Y 2.0 -318014 1571.01 -4322.29 11.49 T Y 2.0 -318015 1570.44 -4322.19 56.76 T Y 2.0 -318016 1570.98 -4322.02 102.07 T Y 2.0 -318017 1570.94 -4322.24 147.12 T Y 2.0 -318018 1570.74 -4322.26 192.56 T Y 2.0 -318019 1570.52 -4322.14 238.05 T Y 2.0 -318020 1571.20 -4322.18 283.22 T Y 2.0 -318021 1570.77 -4322.36 328.80 T Y 2.0 -318022 1570.68 -4322.32 374.47 T Y 2.0 -318023 1570.20 -4322.49 418.90 T Y 2.0 -318024 1570.80 -4322.09 464.97 T Y 2.0 -318025 1570.47 -4322.52 509.81 T Y 2.0 -318026 1570.38 -4322.42 555.20 T Y 2.0 -318027 1570.45 -4322.00 602.54 T Y 2.0 -319000 1719.46 -4269.33 -604.24 T Y 2.0 -319001 1719.49 -4269.27 -558.50 T Y 2.0 -319002 1719.56 -4269.37 -512.97 T Y 2.0 -319003 1719.23 -4268.99 -467.00 T Y 2.0 -319004 1718.87 -4268.88 -419.25 T Y 2.0 -319005 1719.60 -4269.18 -373.96 T Y 2.0 -319006 1719.02 -4269.07 -329.05 T Y 2.0 -319007 1719.61 -4269.26 -284.20 T Y 2.0 -319008 1719.67 -4269.05 -238.69 T Y 2.0 -319009 1719.14 -4269.14 -193.38 T Y 2.0 -319010 1719.08 -4268.94 -148.26 T Y 2.0 -319011 1719.52 -4269.00 -103.25 T Y 2.0 -319012 1719.87 -4268.81 -56.99 T Y 2.0 -319013 1719.71 -4268.90 -11.62 T Y 2.0 -319014 1719.53 -4269.06 33.39 T Y 2.0 -319015 1719.54 -4269.10 78.60 T Y 2.0 -319016 1719.24 -4268.83 123.68 T Y 2.0 -319017 1720.34 -4268.64 169.14 T Y 2.0 -319018 1719.44 -4268.90 214.21 T Y 2.0 -319019 1719.04 -4268.92 259.79 T Y 2.0 -319020 1719.84 -4268.90 305.09 T Y 2.0 -319021 1719.13 -4269.14 350.39 T Y 2.0 -319022 1719.59 -4269.00 396.06 T Y 2.0 -319023 1719.33 -4268.98 441.28 T Y 2.0 -319024 1719.49 -4268.96 486.56 T Y 2.0 -319025 1719.50 -4269.04 532.15 T Y 2.0 -319026 1719.22 -4269.00 576.84 T Y 2.0 -319027 1719.67 -4269.02 624.99 T Y 2.0 -320000 1740.69 -4261.66 -625.46 T Y 2.0 -320001 1740.50 -4261.88 -579.37 T Y 2.0 -320002 1740.85 -4261.65 -533.84 T Y 2.0 -320003 1740.11 -4261.70 -488.53 T Y 2.0 -320004 1740.98 -4261.53 -443.05 T Y 2.0 -320005 1740.98 -4261.47 -397.68 T Y 2.0 -320006 1740.75 -4260.79 -352.28 T Y 2.0 -320007 1740.43 -4261.52 -307.18 T Y 2.0 -320008 1740.67 -4261.23 -261.41 T Y 2.0 -320009 1741.03 -4261.19 -215.84 T Y 2.0 -320010 1741.30 -4261.27 -170.13 T Y 2.0 -320011 1740.80 -4261.30 -125.02 T Y 2.0 -320012 1741.18 -4261.00 -79.53 T Y 2.0 -320013 1740.89 -4261.10 -34.33 T Y 2.0 -320014 1740.95 -4260.98 10.85 T Y 2.0 -320015 1740.83 -4261.25 56.27 T Y 2.0 -320016 1740.93 -4260.88 101.85 T Y 2.0 -320017 1741.18 -4260.56 146.97 T Y 2.0 -320018 1740.71 -4261.25 194.33 T Y 2.0 -320019 1741.00 -4260.88 239.42 T Y 2.0 -320020 1741.28 -4260.97 284.61 T Y 2.0 -320021 1740.74 -4261.20 329.75 T Y 2.0 -320022 1740.71 -4261.78 375.33 T Y 2.0 -320023 1740.75 -4261.11 420.36 T Y 2.0 -320024 1740.81 -4261.21 465.62 T Y 2.0 -320026 1740.62 -4261.47 556.76 T Y 2.0 -320027 1741.20 -4261.07 602.14 T Y 2.0 -321000 1889.62 -4208.37 -603.66 T Y 2.0 -321001 1889.89 -4208.33 -557.72 T Y 2.0 -321002 1889.54 -4208.22 -512.23 T Y 2.0 -321003 1889.46 -4208.33 -466.46 T Y 2.0 -321004 1889.74 -4208.10 -421.25 T Y 2.0 -321005 1890.13 -4208.25 -376.11 T Y 2.0 -321006 1890.10 -4208.08 -330.50 T Y 2.0 -321007 1889.72 -4207.86 -285.29 T Y 2.0 -321008 1890.18 -4207.12 -239.94 T Y 2.0 -321009 1889.71 -4207.82 -194.24 T Y 2.0 -321010 1890.03 -4207.87 -148.93 T Y 2.0 -321011 1889.86 -4207.91 -103.96 T Y 2.0 -321012 1890.56 -4207.51 -58.56 T Y 2.0 -321013 1889.38 -4208.13 -12.77 T Y 2.0 -321014 1890.19 -4208.22 32.53 T Y 2.0 -321015 1889.78 -4208.05 77.71 T Y 2.0 -321016 1890.22 -4207.76 123.08 T Y 2.0 -321017 1889.75 -4207.53 169.19 T Y 2.0 -321018 1889.86 -4208.10 215.96 T Y 2.0 -321019 1890.11 -4207.77 261.17 T Y 2.0 -321020 1889.77 -4207.95 305.91 T Y 2.0 -321021 1889.63 -4208.18 351.05 T Y 2.0 -321022 1889.51 -4208.42 397.04 T Y 2.0 -321023 1889.87 -4208.00 442.12 T Y 2.0 -321024 1889.57 -4208.07 487.21 T Y 2.0 -321025 1890.23 -4208.12 533.32 T Y 2.0 -321026 1889.30 -4208.39 578.82 T Y 2.0 -321027 1889.71 -4208.28 623.95 T Y 2.0 -322000 1910.69 -4200.23 -625.89 T Y 2.0 -322001 1911.41 -4200.45 -579.21 T Y 2.0 -322002 1910.75 -4200.86 -533.86 T Y 2.0 -322003 1911.19 -4199.77 -488.24 T Y 2.0 -322004 1910.90 -4200.30 -443.06 T Y 2.0 -322005 1911.47 -4200.24 -397.86 T Y 2.0 -322006 1911.17 -4200.15 -352.46 T Y 2.0 -322007 1911.48 -4200.15 -307.35 T Y 2.0 -322008 1911.24 -4200.31 -261.48 T Y 2.0 -322009 1911.66 -4200.20 -216.41 T Y 2.0 -322010 1911.84 -4199.95 -170.91 T Y 2.0 -322011 1911.80 -4199.86 -125.66 T Y 2.0 -322012 1912.33 -4199.69 -80.84 T Y 2.0 -322013 1911.23 -4200.31 -34.64 T Y 2.0 -322014 1912.03 -4200.14 10.75 T Y 2.0 -322015 1911.32 -4199.97 55.78 T Y 2.0 -322016 1911.24 -4200.06 102.07 T Y 2.0 -322017 1911.31 -4199.78 147.60 T Y 2.0 -322018 1911.10 -4199.90 192.72 T Y 2.0 -322019 1911.40 -4199.88 237.95 T Y 2.0 -322020 1911.19 -4200.32 283.20 T Y 2.0 -322021 1910.86 -4200.29 328.43 T Y 2.0 -322022 1911.73 -4200.26 373.55 T Y 2.0 -322023 1911.36 -4200.08 419.26 T Y 2.0 -322024 1911.40 -4200.23 464.11 T Y 2.0 -322025 1911.43 -4200.36 509.39 T Y 2.0 -322026 1910.78 -4199.80 555.30 T Y 2.0 -322027 1910.84 -4200.27 601.25 T Y 2.0 -323000 2060.20 -4146.69 -603.38 T Y 2.0 -323001 2060.02 -4147.03 -557.36 T Y 2.0 -323002 2059.91 -4146.88 -512.12 T Y 2.0 -323003 2059.84 -4147.06 -466.45 T Y 2.0 -323004 2060.07 -4146.84 -421.05 T Y 2.0 -323005 2060.38 -4146.56 -375.04 T Y 2.0 -323006 2060.28 -4147.08 -329.68 T Y 2.0 -323007 2059.98 -4147.18 -284.10 T Y 2.0 -323008 2059.93 -4147.05 -239.59 T Y 2.0 -323009 2060.60 -4147.04 -194.63 T Y 2.0 -323010 2061.24 -4145.96 -149.16 T Y 2.0 -323011 2060.40 -4146.89 -102.92 T Y 2.0 -323012 2060.64 -4146.50 -57.93 T Y 2.0 -323013 2060.45 -4146.69 -13.01 T Y 2.0 -323014 2060.76 -4145.87 32.50 T Y 2.0 -323015 2060.37 -4146.79 78.15 T Y 2.0 -323016 2060.52 -4146.86 124.39 T Y 2.0 -323017 2060.49 -4146.78 169.02 T Y 2.0 -323018 2059.88 -4147.09 214.58 T Y 2.0 -323019 2060.73 -4146.42 259.80 T Y 2.0 -323020 2059.99 -4147.28 304.93 T Y 2.0 -323021 2060.56 -4146.55 350.81 T Y 2.0 -323022 2060.16 -4146.88 396.33 T Y 2.0 -323023 2060.48 -4146.82 441.26 T Y 2.0 -323024 2059.79 -4146.92 487.11 T Y 2.0 -323025 2060.04 -4146.86 532.29 T Y 2.0 -323026 2060.41 -4146.93 578.45 T Y 2.0 -323027 2059.74 -4147.14 624.37 T Y 2.0 -324000 2081.51 -4139.60 -625.50 T Y 2.0 -324001 2081.80 -4139.05 -579.89 T Y 2.0 -324002 2081.39 -4139.29 -534.77 T Y 2.0 -324003 2081.40 -4139.30 -489.56 T Y 2.0 -324004 2081.60 -4139.41 -443.90 T Y 2.0 -324005 2082.19 -4138.93 -398.73 T Y 2.0 -324006 2082.28 -4139.42 -352.92 T Y 2.0 -324007 2082.43 -4139.06 -307.71 T Y 2.0 -324008 2081.30 -4138.84 -262.68 T Y 2.0 -324009 2082.37 -4138.91 -216.64 T Y 2.0 -324010 2082.51 -4138.24 -171.67 T Y 2.0 -324011 2082.17 -4138.93 -125.99 T Y 2.0 -324012 2083.08 -4138.83 -80.70 T Y 2.0 -324013 2082.73 -4138.99 -34.77 T Y 2.0 -324014 2082.87 -4138.69 10.26 T Y 2.0 -324015 2082.56 -4138.99 55.97 T Y 2.0 -324016 2082.38 -4139.00 100.63 T Y 2.0 -324017 2082.26 -4139.09 146.23 T Y 2.0 -324018 2082.30 -4139.04 192.06 T Y 2.0 -324019 2081.81 -4139.02 237.32 T Y 2.0 -324020 2082.69 -4139.29 282.73 T Y 2.0 -324021 2082.54 -4138.90 327.47 T Y 2.0 -324022 2082.41 -4138.81 373.45 T Y 2.0 -324023 2081.95 -4139.02 419.99 T Y 2.0 -324024 2081.75 -4139.23 464.74 T Y 2.0 -324025 2081.40 -4139.44 510.57 T Y 2.0 -324026 2081.94 -4139.00 556.65 T Y 2.0 -324027 2080.89 -4139.41 601.69 T Y 2.0 -325000 2229.89 -4086.48 -602.63 T Y 2.0 -325001 2230.37 -4085.78 -557.49 T Y 2.0 -325002 2229.66 -4086.15 -511.93 T Y 2.0 -325003 2230.70 -4085.99 -467.28 T Y 2.0 -325004 2229.78 -4086.40 -421.38 T Y 2.0 -325005 2231.43 -4085.81 -376.19 T Y 2.0 -325006 2230.58 -4086.09 -330.89 T Y 2.0 -325007 2230.67 -4085.83 -284.64 T Y 2.0 -325008 2230.04 -4085.97 -239.54 T Y 2.0 -325009 2231.49 -4086.00 -194.05 T Y 2.0 -325010 2232.09 -4085.65 -149.02 T Y 2.0 -325011 2230.59 -4085.75 -103.11 T Y 2.0 -325012 2231.66 -4085.92 -57.34 T Y 2.0 -325013 2231.96 -4086.09 -12.16 T Y 2.0 -325014 2231.73 -4086.09 33.40 T Y 2.0 -325015 2231.74 -4086.13 78.37 T Y 2.0 -325016 2231.72 -4085.83 123.16 T Y 2.0 -325017 2232.48 -4085.69 168.70 T Y 2.0 -325018 2231.17 -4085.93 214.22 T Y 2.0 -325019 2231.00 -4086.03 259.54 T Y 2.0 -325020 2232.02 -4086.23 304.96 T Y 2.0 -325021 2231.00 -4085.66 350.78 T Y 2.0 -325022 2230.82 -4086.21 396.67 T Y 2.0 -325023 2230.62 -4086.38 442.32 T Y 2.0 -325024 2231.06 -4085.87 487.77 T Y 2.0 -325025 2230.07 -4085.70 533.70 T Y 2.0 -325026 2230.27 -4086.09 579.56 T Y 2.0 -325027 2229.62 -4086.56 624.26 T Y 2.0 -410000 2404.61 -4009.94 -626.80 T Y 3.0 -410001 2404.33 -4010.55 -580.25 T Y 3.0 -410002 2405.35 -4009.52 -535.39 T Y 3.0 -410003 2404.67 -4010.24 -489.66 T Y 3.0 -410004 2404.80 -4008.88 -444.68 T Y 3.0 -410005 2405.54 -4009.63 -399.54 T Y 3.0 -410006 2404.79 -4009.76 -353.35 T Y 3.0 -410007 2405.84 -4009.02 -308.43 T Y 3.0 -410008 2405.78 -4009.48 -263.14 T Y 3.0 -410009 2405.25 -4009.00 -217.70 T Y 3.0 -410010 2405.81 -4008.84 -172.40 T Y 3.0 -410011 2405.33 -4009.28 -126.84 T Y 3.0 -410012 2405.80 -4008.69 -80.99 T Y 3.0 -410013 2405.06 -4009.28 -35.60 T Y 3.0 -410014 2406.14 -4008.80 9.74 T Y 3.0 -410015 2405.30 -4009.19 54.85 T Y 3.0 -410016 2404.85 -4008.65 100.68 T Y 3.0 -410017 2405.44 -4008.37 145.87 T Y 3.0 -410018 2406.56 -4008.43 191.15 T Y 3.0 -410019 2406.27 -4008.84 237.65 T Y 3.0 -410020 2405.71 -4008.99 282.92 T Y 3.0 -410021 2405.24 -4008.74 328.39 T Y 3.0 -410022 2406.25 -4008.99 373.80 T Y 3.0 -410023 2405.68 -4008.99 418.46 T Y 3.0 -410024 2406.94 -4007.57 465.30 T Y 3.0 -410025 2406.75 -4007.78 510.19 T Y 3.0 -410026 2407.06 -4007.77 556.66 T Y 3.0 -410027 2406.69 -4008.49 602.99 T Y 3.0 -411000 2526.76 -3908.89 -605.02 T Y 3.0 -411001 2526.72 -3909.20 -559.36 T Y 3.0 -411002 2527.31 -3907.61 -514.06 T Y 3.0 -411003 2526.91 -3908.33 -469.27 T Y 3.0 -411004 2527.17 -3907.77 -423.61 T Y 3.0 -411005 2527.01 -3908.81 -378.16 T Y 3.0 -411006 2527.18 -3908.29 -333.21 T Y 3.0 -411007 2527.47 -3907.74 -287.69 T Y 3.0 -411008 2527.41 -3906.96 -242.09 T Y 3.0 -411009 2526.63 -3906.88 -196.63 T Y 3.0 -411010 2527.49 -3907.65 -151.23 T Y 3.0 -411011 2526.96 -3908.04 -104.95 T Y 3.0 -411012 2527.73 -3907.59 -59.24 T Y 3.0 -411013 2526.98 -3907.76 -14.48 T Y 3.0 -411014 2527.10 -3907.36 30.99 T Y 3.0 -411015 2527.08 -3908.01 76.34 T Y 3.0 -411016 2527.83 -3907.54 122.00 T Y 3.0 -411017 2527.80 -3907.11 166.93 T Y 3.0 -411018 2528.31 -3906.33 212.65 T Y 3.0 -411019 2528.31 -3907.10 258.57 T Y 3.0 -411020 2527.79 -3907.47 303.97 T Y 3.0 -411021 2527.40 -3907.63 349.70 T Y 3.0 -411022 2527.98 -3907.33 394.56 T Y 3.0 -411023 2528.18 -3907.68 440.25 T Y 3.0 -411024 2528.25 -3907.21 486.25 T Y 3.0 -411025 2528.71 -3906.60 532.33 T Y 3.0 -411026 2528.21 -3907.10 577.87 T Y 3.0 -411027 2529.45 -3906.54 623.84 T Y 3.0 -412000 2544.09 -3894.43 -627.24 T Y 3.0 -412001 2543.78 -3895.00 -582.05 T Y 3.0 -412002 2544.62 -3893.67 -536.88 T Y 3.0 -412003 2544.88 -3893.39 -490.72 T Y 3.0 -412004 2544.37 -3893.65 -444.90 T Y 3.0 -412005 2543.88 -3893.53 -399.65 T Y 3.0 -412006 2545.31 -3892.85 -354.50 T Y 3.0 -412007 2545.01 -3893.19 -309.00 T Y 3.0 -412008 2545.10 -3893.25 -262.62 T Y 3.0 -412009 2544.99 -3892.95 -217.18 T Y 3.0 -412010 2544.81 -3892.98 -172.23 T Y 3.0 -412011 2544.24 -3893.39 -126.33 T Y 3.0 -412012 2544.98 -3893.50 -81.59 T Y 3.0 -412013 2544.79 -3893.86 -36.20 T Y 3.0 -412014 2544.87 -3893.27 9.39 T Y 3.0 -412015 2544.36 -3893.04 54.66 T Y 3.0 -412016 2545.46 -3892.96 100.24 T Y 3.0 -412017 2545.24 -3893.04 145.11 T Y 3.0 -412018 2546.12 -3892.60 190.30 T Y 3.0 -412019 2545.39 -3893.06 235.70 T Y 3.0 -412020 2545.14 -3893.08 280.85 T Y 3.0 -412021 2544.22 -3892.60 327.50 T Y 3.0 -412022 2545.65 -3892.00 373.19 T Y 3.0 -412023 2545.00 -3893.22 418.10 T Y 3.0 -412024 2545.74 -3892.85 464.01 T Y 3.0 -412025 2545.74 -3892.66 509.65 T Y 3.0 -412026 2545.79 -3893.01 555.15 T Y 3.0 -412027 2546.13 -3891.94 600.70 T Y 3.0 -413000 2666.15 -3793.70 -605.24 T Y 3.0 -413001 2666.25 -3793.27 -559.70 T Y 3.0 -413002 2666.60 -3792.37 -514.36 T Y 3.0 -413003 2666.56 -3792.75 -468.57 T Y 3.0 -413004 2666.16 -3793.45 -423.29 T Y 3.0 -413005 2665.86 -3792.17 -377.90 T Y 3.0 -413006 2667.42 -3791.98 -332.21 T Y 3.0 -413007 2666.65 -3792.95 -286.65 T Y 3.0 -413008 2666.79 -3792.26 -241.00 T Y 3.0 -413009 2666.27 -3792.80 -195.56 T Y 3.0 -413010 2666.68 -3792.46 -150.63 T Y 3.0 -413011 2665.89 -3792.55 -104.95 T Y 3.0 -413012 2666.94 -3792.42 -59.63 T Y 3.0 -413013 2667.25 -3792.06 -14.51 T Y 3.0 -413014 2666.88 -3792.39 30.65 T Y 3.0 -413015 2666.78 -3792.06 75.79 T Y 3.0 -413016 2667.09 -3791.33 121.09 T Y 3.0 -413017 2666.83 -3792.26 166.99 T Y 3.0 -413018 2667.82 -3791.60 212.27 T Y 3.0 -413019 2667.50 -3791.97 258.01 T Y 3.0 -413020 2667.68 -3792.25 303.52 T Y 3.0 -413021 2667.28 -3791.86 348.48 T Y 3.0 -413022 2667.81 -3791.97 395.05 T Y 3.0 -413023 2666.99 -3792.02 439.92 T Y 3.0 -413024 2666.88 -3792.66 485.87 T Y 3.0 -413025 2667.88 -3791.80 531.06 T Y 3.0 -413026 2667.74 -3792.14 576.77 T Y 3.0 -413027 2667.58 -3791.61 622.42 T Y 3.0 -414000 2682.99 -3778.57 -628.38 T Y 3.0 -414001 2683.37 -3779.21 -582.93 T Y 3.0 -414002 2684.28 -3778.63 -537.46 T Y 3.0 -414003 2683.83 -3778.74 -490.82 T Y 3.0 -414004 2683.35 -3779.44 -445.25 T Y 3.0 -414005 2684.02 -3778.47 -399.81 T Y 3.0 -414006 2684.87 -3778.18 -354.46 T Y 3.0 -414007 2683.73 -3778.46 -308.99 T Y 3.0 -414008 2684.49 -3777.96 -263.08 T Y 3.0 -414009 2683.96 -3778.40 -217.98 T Y 3.0 -414010 2684.39 -3778.27 -172.67 T Y 3.0 -414011 2684.76 -3777.96 -127.51 T Y 3.0 -414012 2685.21 -3777.68 -81.93 T Y 3.0 -414013 2684.94 -3777.56 -36.61 T Y 3.0 -414014 2684.52 -3777.66 8.74 T Y 3.0 -414015 2684.17 -3777.93 54.63 T Y 3.0 -414016 2684.57 -3777.55 100.32 T Y 3.0 -414017 2684.99 -3777.14 145.41 T Y 3.0 -414018 2685.28 -3777.19 191.37 T Y 3.0 -414019 2684.46 -3776.66 236.53 T Y 3.0 -414020 2685.06 -3777.40 282.47 T Y 3.0 -414021 2684.40 -3777.59 327.58 T Y 3.0 -414022 2685.05 -3777.44 373.07 T Y 3.0 -414023 2685.01 -3777.09 418.68 T Y 3.0 -414024 2685.16 -3777.50 464.74 T Y 3.0 -414025 2684.92 -3777.63 509.79 T Y 3.0 -414026 2685.53 -3776.94 555.73 T Y 3.0 -414027 2684.75 -3776.63 601.01 T Y 3.0 -415000 2806.04 -3678.50 -607.89 T Y 3.0 -415001 2805.27 -3678.82 -562.13 T Y 3.0 -415002 2806.24 -3677.80 -517.26 T Y 3.0 -415003 2805.20 -3678.15 -469.50 T Y 3.0 -415004 2805.48 -3678.57 -424.40 T Y 3.0 -415005 2806.30 -3677.43 -379.05 T Y 3.0 -415006 2806.27 -3677.83 -333.23 T Y 3.0 -415007 2805.96 -3677.29 -287.92 T Y 3.0 -415008 2806.56 -3677.08 -242.56 T Y 3.0 -415009 2806.10 -3677.59 -196.84 T Y 3.0 -415010 2806.50 -3676.84 -151.57 T Y 3.0 -415011 2806.96 -3676.67 -105.64 T Y 3.0 -415012 2806.98 -3676.85 -59.91 T Y 3.0 -415013 2806.50 -3677.10 -15.37 T Y 3.0 -415014 2806.72 -3676.64 30.10 T Y 3.0 -415015 2806.51 -3676.97 75.54 T Y 3.0 -415016 2807.10 -3676.17 121.42 T Y 3.0 -415017 2806.70 -3676.63 166.99 T Y 3.0 -415018 2806.50 -3676.63 212.57 T Y 3.0 -415019 2806.89 -3676.35 257.71 T Y 3.0 -415020 2807.06 -3676.56 303.14 T Y 3.0 -415021 2806.26 -3676.51 348.58 T Y 3.0 -415022 2806.91 -3676.38 394.17 T Y 3.0 -415023 2807.18 -3676.51 439.23 T Y 3.0 -415024 2806.44 -3676.95 485.12 T Y 3.0 -415025 2806.88 -3677.02 532.39 T Y 3.0 -415026 2807.64 -3676.65 577.17 T Y 3.0 -415027 2807.15 -3675.58 623.05 T Y 3.0 -416000 2823.42 -3664.01 -628.43 T Y 3.0 -416001 2823.32 -3664.26 -583.30 T Y 3.0 -416002 2823.58 -3663.65 -537.01 T Y 3.0 -416003 2823.71 -3663.57 -491.98 T Y 3.0 -416004 2823.29 -3663.52 -446.62 T Y 3.0 -416005 2823.49 -3663.28 -401.06 T Y 3.0 -416006 2824.03 -3663.05 -355.43 T Y 3.0 -416007 2822.99 -3663.66 -310.25 T Y 3.0 -416008 2823.61 -3663.11 -263.85 T Y 3.0 -416009 2823.90 -3662.97 -218.36 T Y 3.0 -416010 2823.28 -3662.71 -173.51 T Y 3.0 -416011 2824.39 -3662.37 -128.23 T Y 3.0 -416012 2824.58 -3662.29 -82.63 T Y 3.0 -416013 2823.81 -3662.53 -37.22 T Y 3.0 -416014 2823.72 -3662.36 8.39 T Y 3.0 -416015 2824.09 -3662.33 53.46 T Y 3.0 -416016 2824.55 -3662.05 98.86 T Y 3.0 -416017 2824.01 -3662.52 143.69 T Y 3.0 -416018 2823.97 -3662.21 189.36 T Y 3.0 -416019 2824.07 -3662.18 234.86 T Y 3.0 -416020 2823.93 -3662.08 280.89 T Y 3.0 -416021 2823.61 -3662.42 326.31 T Y 3.0 -416022 2823.71 -3662.03 371.75 T Y 3.0 -416023 2824.78 -3661.76 417.56 T Y 3.0 -416024 2823.89 -3662.50 462.86 T Y 3.0 -416025 2824.10 -3662.63 508.27 T Y 3.0 -416026 2824.83 -3661.66 553.77 T Y 3.0 -416027 2825.16 -3661.36 600.30 T Y 3.0 -417000 2945.02 -3562.50 -607.57 T Y 3.0 -417001 2945.19 -3562.86 -562.49 T Y 3.0 -417002 2945.73 -3562.88 -516.97 T Y 3.0 -417003 2946.01 -3562.20 -471.07 T Y 3.0 -417004 2945.76 -3562.51 -425.48 T Y 3.0 -417005 2945.24 -3562.47 -379.92 T Y 3.0 -417006 2945.96 -3562.20 -334.27 T Y 3.0 -417007 2945.01 -3562.45 -289.28 T Y 3.0 -417008 2945.65 -3561.88 -243.43 T Y 3.0 -417009 2945.15 -3561.38 -198.24 T Y 3.0 -417010 2945.77 -3561.97 -152.85 T Y 3.0 -417011 2946.30 -3561.27 -107.93 T Y 3.0 -417012 2946.04 -3561.57 -61.96 T Y 3.0 -417013 2946.29 -3561.15 -16.35 T Y 3.0 -417014 2945.50 -3561.23 29.29 T Y 3.0 -417015 2945.82 -3561.14 74.29 T Y 3.0 -417016 2946.83 -3560.87 119.83 T Y 3.0 -417017 2946.03 -3561.29 165.58 T Y 3.0 -417018 2945.70 -3561.65 210.30 T Y 3.0 -417019 2945.49 -3561.23 256.95 T Y 3.0 -417020 2946.27 -3561.41 302.36 T Y 3.0 -417021 2946.60 -3561.51 348.09 T Y 3.0 -417022 2946.14 -3561.76 393.73 T Y 3.0 -417023 2946.81 -3561.23 439.16 T Y 3.0 -417024 2945.74 -3561.51 484.90 T Y 3.0 -417025 2946.35 -3561.46 530.30 T Y 3.0 -417026 2945.89 -3561.16 576.05 T Y 3.0 -417027 2947.37 -3560.95 622.28 T Y 3.0 -418000 2962.87 -3549.38 -629.33 T Y 3.0 -418001 2962.87 -3548.34 -583.39 T Y 3.0 -418002 2963.20 -3548.36 -537.98 T Y 3.0 -418003 2963.33 -3548.15 -492.35 T Y 3.0 -418004 2962.84 -3547.75 -446.92 T Y 3.0 -418005 2962.85 -3548.25 -401.37 T Y 3.0 -418006 2963.07 -3547.71 -356.47 T Y 3.0 -418007 2962.04 -3547.02 -310.20 T Y 3.0 -418008 2962.82 -3547.58 -264.71 T Y 3.0 -418009 2963.08 -3547.43 -219.99 T Y 3.0 -418010 2962.61 -3547.81 -174.73 T Y 3.0 -418011 2962.89 -3547.17 -128.16 T Y 3.0 -418012 2962.70 -3547.28 -82.72 T Y 3.0 -418013 2964.28 -3546.62 -37.20 T Y 3.0 -418014 2962.16 -3546.78 7.97 T Y 3.0 -418015 2963.66 -3546.83 53.04 T Y 3.0 -418016 2963.77 -3546.63 99.15 T Y 3.0 -418017 2963.38 -3547.42 143.93 T Y 3.0 -418018 2963.78 -3546.55 189.28 T Y 3.0 -418019 2962.98 -3547.59 234.62 T Y 3.0 -418020 2963.63 -3546.59 280.09 T Y 3.0 -418021 2963.78 -3546.48 325.86 T Y 3.0 -418022 2963.36 -3546.85 370.84 T Y 3.0 -418023 2963.66 -3546.92 416.35 T Y 3.0 -418024 2963.51 -3547.15 462.18 T Y 3.0 -418025 2964.60 -3546.29 507.90 T Y 3.0 -418026 2963.06 -3546.82 553.41 T Y 3.0 -418027 2964.27 -3546.36 600.00 T Y 3.0 -419000 3084.26 -3448.42 -608.70 T Y 3.0 -419001 3084.27 -3448.30 -562.70 T Y 3.0 -419002 3085.11 -3447.15 -517.01 T Y 3.0 -419003 3084.79 -3447.19 -471.54 T Y 3.0 -419004 3085.28 -3447.01 -426.22 T Y 3.0 -419005 3085.17 -3447.14 -380.84 T Y 3.0 -419006 3085.22 -3446.82 -335.48 T Y 3.0 -419007 3084.96 -3447.01 -290.10 T Y 3.0 -419008 3085.16 -3446.52 -244.75 T Y 3.0 -419009 3085.34 -3446.42 -199.06 T Y 3.0 -419010 3084.43 -3446.87 -153.38 T Y 3.0 -419011 3084.70 -3447.26 -108.16 T Y 3.0 -419012 3084.81 -3446.59 -62.55 T Y 3.0 -419013 3085.18 -3444.87 -17.25 T Y 3.0 -419014 3085.04 -3446.32 28.53 T Y 3.0 -419015 3085.89 -3445.95 73.98 T Y 3.0 -419016 3085.67 -3445.75 119.74 T Y 3.0 -419017 3085.59 -3446.20 164.79 T Y 3.0 -419018 3085.74 -3445.27 209.78 T Y 3.0 -419019 3084.85 -3446.06 255.87 T Y 3.0 -419020 3085.50 -3445.99 301.68 T Y 3.0 -419021 3085.73 -3445.81 346.98 T Y 3.0 -419022 3085.57 -3445.86 392.49 T Y 3.0 -419023 3085.32 -3446.38 437.61 T Y 3.0 -419024 3084.83 -3446.37 482.95 T Y 3.0 -419025 3085.62 -3445.84 529.24 T Y 3.0 -419026 3084.54 -3446.22 575.09 T Y 3.0 -419027 3086.14 -3445.38 620.87 T Y 3.0 -420000 3101.65 -3434.08 -631.38 T Y 3.0 -420001 3101.97 -3434.13 -584.96 T Y 3.0 -420002 3102.27 -3433.58 -539.35 T Y 3.0 -420003 3102.00 -3433.24 -494.39 T Y 3.0 -420004 3102.80 -3432.82 -448.82 T Y 3.0 -420005 3102.59 -3432.94 -402.21 T Y 3.0 -420006 3102.25 -3432.47 -356.94 T Y 3.0 -420007 3102.43 -3432.51 -310.78 T Y 3.0 -420008 3102.19 -3432.63 -266.01 T Y 3.0 -420009 3102.65 -3432.46 -220.85 T Y 3.0 -420010 3101.99 -3432.83 -175.39 T Y 3.0 -420011 3101.97 -3432.11 -130.58 T Y 3.0 -420012 3102.94 -3431.74 -84.96 T Y 3.0 -420013 3103.00 -3431.81 -39.59 T Y 3.0 -420014 3102.18 -3431.75 6.52 T Y 3.0 -420015 3103.00 -3431.80 51.70 T Y 3.0 -420016 3103.20 -3431.63 97.81 T Y 3.0 -420017 3103.03 -3431.64 142.71 T Y 3.0 -420018 3103.43 -3431.36 188.17 T Y 3.0 -420019 3102.14 -3432.14 233.86 T Y 3.0 -420020 3102.87 -3431.50 278.98 T Y 3.0 -420021 3102.47 -3431.80 324.40 T Y 3.0 -420022 3102.81 -3431.56 370.30 T Y 3.0 -420023 3103.39 -3431.17 415.58 T Y 3.0 -420024 3101.74 -3432.23 461.00 T Y 3.0 -420025 3102.81 -3431.25 507.25 T Y 3.0 -420026 3102.52 -3432.39 552.89 T Y 3.0 -420027 3103.40 -3430.87 600.47 T Y 3.0 -421000 3223.60 -3333.73 -609.39 T Y 3.0 -421001 3223.93 -3333.30 -563.43 T Y 3.0 -421002 3224.48 -3332.54 -518.23 T Y 3.0 -421003 3224.11 -3332.65 -472.97 T Y 3.0 -421004 3225.07 -3331.69 -427.56 T Y 3.0 -421005 3224.37 -3332.01 -381.25 T Y 3.0 -421006 3224.51 -3331.61 -335.53 T Y 3.0 -421007 3224.49 -3331.81 -290.28 T Y 3.0 -421008 3224.65 -3331.93 -245.38 T Y 3.0 -421009 3224.79 -3331.55 -199.66 T Y 3.0 -421010 3224.12 -3331.73 -154.55 T Y 3.0 -421011 3223.57 -3332.16 -109.08 T Y 3.0 -421012 3224.89 -3331.12 -63.87 T Y 3.0 -421013 3224.59 -3330.88 -18.04 T Y 3.0 -421014 3224.72 -3330.86 27.36 T Y 3.0 -421015 3224.80 -3331.11 72.60 T Y 3.0 -421016 3225.23 -3331.07 118.48 T Y 3.0 -421017 3225.05 -3330.77 163.82 T Y 3.0 -421018 3225.63 -3330.29 209.44 T Y 3.0 -421019 3224.29 -3330.51 254.61 T Y 3.0 -421020 3224.83 -3330.66 300.16 T Y 3.0 -421021 3224.65 -3330.72 345.22 T Y 3.0 -421022 3225.03 -3330.62 391.84 T Y 3.0 -421023 3224.95 -3330.74 437.24 T Y 3.0 -421024 3224.61 -3330.98 483.01 T Y 3.0 -421025 3224.29 -3331.46 528.26 T Y 3.0 -421026 3224.60 -3330.93 573.51 T Y 3.0 -421027 3225.42 -3330.35 621.16 T Y 3.0 -422000 3241.06 -3319.16 -631.73 T Y 3.0 -422001 3241.13 -3319.34 -586.77 T Y 3.0 -422002 3242.30 -3318.36 -541.35 T Y 3.0 -422003 3242.09 -3318.47 -496.02 T Y 3.0 -422004 3242.38 -3317.83 -449.91 T Y 3.0 -422005 3241.37 -3318.02 -404.77 T Y 3.0 -422006 3242.48 -3317.36 -359.12 T Y 3.0 -422007 3241.79 -3317.38 -313.77 T Y 3.0 -422008 3242.10 -3317.51 -267.92 T Y 3.0 -422009 3242.14 -3317.18 -222.72 T Y 3.0 -422010 3242.08 -3317.60 -177.34 T Y 3.0 -422011 3242.83 -3316.63 -131.24 T Y 3.0 -422012 3242.72 -3316.58 -86.14 T Y 3.0 -422013 3242.06 -3316.81 -40.91 T Y 3.0 -422014 3242.40 -3317.03 4.70 T Y 3.0 -422015 3242.72 -3316.93 51.10 T Y 3.0 -422016 3242.50 -3316.56 96.60 T Y 3.0 -422017 3242.42 -3316.61 141.91 T Y 3.0 -422018 3242.55 -3316.06 187.15 T Y 3.0 -422019 3242.36 -3316.34 232.68 T Y 3.0 -422020 3242.49 -3315.53 277.93 T Y 3.0 -422021 3242.23 -3316.50 324.08 T Y 3.0 -422022 3242.64 -3316.12 369.48 T Y 3.0 -422023 3242.24 -3316.53 415.41 T Y 3.0 -422024 3241.89 -3316.62 460.52 T Y 3.0 -422025 3241.65 -3316.88 506.00 T Y 3.0 -422026 3241.88 -3317.05 551.82 T Y 3.0 -422027 3242.12 -3316.32 598.19 T Y 3.0 -423000 3363.17 -3218.45 -611.29 T Y 3.0 -423001 3363.51 -3217.71 -566.27 T Y 3.0 -423002 3364.08 -3217.51 -520.66 T Y 3.0 -423003 3363.49 -3216.32 -474.54 T Y 3.0 -423004 3363.95 -3216.94 -429.04 T Y 3.0 -423005 3363.39 -3217.69 -383.36 T Y 3.0 -423006 3363.43 -3217.01 -337.82 T Y 3.0 -423007 3364.48 -3216.38 -292.05 T Y 3.0 -423008 3364.30 -3216.59 -246.83 T Y 3.0 -423009 3364.03 -3216.23 -201.60 T Y 3.0 -423010 3363.55 -3215.37 -156.34 T Y 3.0 -423011 3365.09 -3215.74 -110.92 T Y 3.0 -423012 3364.17 -3215.92 -65.46 T Y 3.0 -423013 3364.06 -3216.38 -19.92 T Y 3.0 -423014 3363.79 -3216.32 25.78 T Y 3.0 -423015 3364.44 -3215.81 72.68 T Y 3.0 -423016 3364.21 -3215.90 118.04 T Y 3.0 -423017 3363.96 -3215.33 163.50 T Y 3.0 -423018 3364.44 -3215.15 209.06 T Y 3.0 -423019 3364.39 -3215.54 254.68 T Y 3.0 -423020 3364.50 -3215.43 300.44 T Y 3.0 -423021 3364.10 -3215.22 345.77 T Y 3.0 -423022 3363.97 -3215.58 390.66 T Y 3.0 -423023 3363.65 -3215.43 436.24 T Y 3.0 -423024 3364.16 -3215.84 481.71 T Y 3.0 -423025 3363.68 -3216.15 527.34 T Y 3.0 -423026 3363.86 -3215.93 572.84 T Y 3.0 -423027 3364.07 -3215.65 619.20 T Y 3.0 -424000 3380.48 -3204.04 -629.64 T Y 3.0 -424001 3381.01 -3203.44 -584.34 T Y 3.0 -424002 3381.30 -3203.13 -538.68 T Y 3.0 -424003 3381.33 -3202.59 -492.67 T Y 3.0 -424004 3381.14 -3202.62 -447.27 T Y 3.0 -424005 3380.21 -3202.86 -402.08 T Y 3.0 -424006 3380.98 -3202.60 -356.21 T Y 3.0 -424007 3381.98 -3201.95 -310.96 T Y 3.0 -424008 3380.58 -3201.85 -265.81 T Y 3.0 -424009 3381.32 -3202.26 -220.63 T Y 3.0 -424010 3381.70 -3201.81 -175.13 T Y 3.0 -424011 3381.89 -3201.43 -129.28 T Y 3.0 -424012 3381.83 -3201.47 -84.20 T Y 3.0 -424013 3381.76 -3201.75 -39.04 T Y 3.0 -424014 3381.04 -3202.14 6.81 T Y 3.0 -424015 3382.25 -3200.92 52.28 T Y 3.0 -424016 3381.36 -3201.47 97.55 T Y 3.0 -424017 3381.89 -3200.69 142.94 T Y 3.0 -424018 3382.27 -3200.56 187.63 T Y 3.0 -424019 3381.53 -3200.89 233.88 T Y 3.0 -424020 3381.57 -3200.96 279.49 T Y 3.0 -424021 3381.56 -3200.89 324.33 T Y 3.0 -424022 3381.24 -3200.74 369.89 T Y 3.0 -424023 3380.96 -3201.37 416.25 T Y 3.0 -424024 3381.21 -3201.17 461.50 T Y 3.0 -424025 3380.65 -3201.20 506.76 T Y 3.0 -424026 3381.34 -3200.88 552.04 T Y 3.0 -424027 3381.41 -3200.82 597.79 T Y 3.0 -425000 3502.57 -3103.24 -609.19 T Y 3.0 -425001 3504.68 -3101.72 -564.29 T Y 3.0 -425002 3503.17 -3102.83 -517.36 T Y 3.0 -425003 3503.34 -3101.99 -471.93 T Y 3.0 -425004 3504.24 -3101.77 -426.50 T Y 3.0 -425005 3503.07 -3102.21 -381.23 T Y 3.0 -425006 3503.54 -3101.49 -336.36 T Y 3.0 -425007 3504.52 -3100.63 -290.91 T Y 3.0 -425008 3504.09 -3101.68 -244.93 T Y 3.0 -425009 3503.74 -3100.93 -199.49 T Y 3.0 -425010 3504.39 -3100.78 -154.30 T Y 3.0 -425011 3505.05 -3100.19 -108.79 T Y 3.0 -425012 3503.88 -3101.06 -63.40 T Y 3.0 -425013 3503.86 -3101.16 -18.78 T Y 3.0 -425014 3502.67 -3100.66 27.06 T Y 3.0 -425015 3504.57 -3099.73 72.85 T Y 3.0 -425016 3504.15 -3100.95 117.76 T Y 3.0 -425017 3504.23 -3100.11 163.89 T Y 3.0 -425018 3504.50 -3098.82 208.74 T Y 3.0 -425019 3503.59 -3100.22 255.02 T Y 3.0 -425020 3504.16 -3099.69 300.95 T Y 3.0 -425021 3504.45 -3099.65 346.00 T Y 3.0 -425022 3503.54 -3100.29 390.91 T Y 3.0 -425023 3503.61 -3100.13 436.49 T Y 3.0 -425024 3503.58 -3099.83 481.33 T Y 3.0 -425025 3503.60 -3100.36 526.71 T Y 3.0 -425026 3503.88 -3099.94 572.50 T Y 3.0 -425027 3503.56 -3100.25 618.47 T Y 3.0 +> Title: +PHOS, MEASUREMENT OF MODULES AFTER FINAL ALIGNMENT +> Date: +18/08/2009 +> Subdetector: +PHOS +> Report URL: +https://edms.cern.ch/document/1053236 +> Version: +1 +> General Observations: +Point Types: M(easured),T(ransformed), R(eference) +> Coordinate System: +ALICEPH +> Units: +mm +> Nr Columns: +7 +> Column Names: +Point Name,XLOCAL,YLOCAL,ZLOCAL,Point Type,Target Used,Precision(mm) +> Data: +25000 -751.65 -4405.44 -795.00 M Y 1.0 +25001 740.57 -4409.22 -790.85 M Y 1.0 +25002 736.77 -4409.70 791.69 M Y 1.0 +25003 -756.99 -4407.02 790.75 M Y 1.0 +35000 795.64 -4397.64 -788.18 M Y 1.0 +35001 2197.09 -3896.11 -787.64 M Y 1.0 +35002 2195.46 -3893.99 795.18 M Y 1.0 +35003 792.02 -4398.43 795.84 M Y 1.0 +45001 3388.89 -2923.81 -790.80 M Y 1.0 +45002 3396.04 -2914.45 790.62 M Y 1.0 +45003 2246.14 -3868.59 786.93 M Y 1.0 +210000 -719.00 -4596.22 -626.40 T Y 2.0 +210001 -718.56 -4596.16 -580.96 T Y 2.0 +210002 -719.08 -4596.46 -535.53 T Y 2.0 +210003 -718.94 -4596.26 -489.79 T Y 2.0 +210004 -718.92 -4596.44 -444.67 T Y 2.0 +210005 -719.17 -4596.07 -399.77 T Y 2.0 +210006 -719.62 -4596.52 -355.17 T Y 2.0 +210007 -719.60 -4596.21 -308.87 T Y 2.0 +210008 -720.38 -4596.33 -263.47 T Y 2.0 +210009 -720.76 -4596.62 -217.60 T Y 2.0 +210010 -719.60 -4596.41 -172.68 T Y 2.0 +210011 -720.87 -4596.68 -126.60 T Y 2.0 +210012 -720.34 -4596.66 -81.39 T Y 2.0 +210013 -720.94 -4596.72 -36.29 T Y 2.0 +210014 -720.65 -4596.86 8.96 T Y 2.0 +210015 -720.83 -4596.76 54.90 T Y 2.0 +210016 -721.68 -4596.93 99.90 T Y 2.0 +210017 -721.85 -4596.93 145.28 T Y 2.0 +210018 -721.36 -4596.31 190.97 T Y 2.0 +210019 -722.56 -4597.06 235.91 T Y 2.0 +210020 -722.62 -4597.22 281.74 T Y 2.0 +210021 -721.54 -4597.25 326.70 T Y 2.0 +210022 -722.53 -4597.34 372.48 T Y 2.0 +210023 -723.28 -4597.18 417.81 T Y 2.0 +210024 -722.76 -4596.09 463.78 T Y 2.0 +210025 -723.10 -4597.29 508.69 T Y 2.0 +210026 -723.04 -4596.24 554.96 T Y 2.0 +210027 -723.40 -4597.07 599.79 T Y 2.0 +211000 -560.92 -4597.01 -603.69 T Y 2.0 +211001 -560.89 -4597.15 -558.93 T Y 2.0 +211002 -561.63 -4597.27 -513.47 T Y 2.0 +211003 -561.29 -4596.97 -468.14 T Y 2.0 +211004 -561.27 -4596.96 -422.65 T Y 2.0 +211005 -560.96 -4596.89 -377.34 T Y 2.0 +211006 -561.53 -4597.25 -332.13 T Y 2.0 +211007 -561.69 -4596.86 -286.40 T Y 2.0 +211008 -562.56 -4597.33 -240.60 T Y 2.0 +211009 -562.47 -4597.18 -195.43 T Y 2.0 +211010 -562.39 -4597.17 -150.54 T Y 2.0 +211011 -562.37 -4597.29 -105.22 T Y 2.0 +211012 -562.69 -4597.39 -59.33 T Y 2.0 +211013 -562.81 -4597.41 -14.20 T Y 2.0 +211014 -562.73 -4597.40 31.53 T Y 2.0 +211015 -563.15 -4597.26 76.71 T Y 2.0 +211016 -563.03 -4597.00 122.34 T Y 2.0 +211017 -564.19 -4597.74 167.92 T Y 2.0 +211018 -563.88 -4596.99 212.88 T Y 2.0 +211019 -564.77 -4597.14 258.29 T Y 2.0 +211020 -564.33 -4597.43 304.26 T Y 2.0 +211021 -564.39 -4597.38 349.14 T Y 2.0 +211022 -563.75 -4597.64 394.78 T Y 2.0 +211023 -565.58 -4597.46 439.93 T Y 2.0 +211024 -564.57 -4597.53 485.70 T Y 2.0 +211025 -564.85 -4597.11 531.18 T Y 2.0 +211026 -564.96 -4597.75 576.94 T Y 2.0 +211027 -565.24 -4597.47 622.25 T Y 2.0 +212000 -537.51 -4597.04 -624.61 T Y 2.0 +212001 -538.60 -4596.88 -578.79 T Y 2.0 +212002 -538.43 -4597.22 -533.01 T Y 2.0 +212003 -538.42 -4597.22 -487.81 T Y 2.0 +212004 -538.28 -4597.07 -442.18 T Y 2.0 +212005 -538.50 -4597.09 -397.12 T Y 2.0 +212006 -539.01 -4597.14 -352.44 T Y 2.0 +212007 -538.93 -4597.21 -306.10 T Y 2.0 +212008 -539.67 -4597.59 -260.76 T Y 2.0 +212009 -539.43 -4597.10 -215.33 T Y 2.0 +212010 -539.68 -4597.15 -170.57 T Y 2.0 +212011 -539.72 -4597.01 -124.84 T Y 2.0 +212012 -539.74 -4597.32 -79.79 T Y 2.0 +212013 -539.55 -4596.95 -34.47 T Y 2.0 +212014 -540.49 -4596.85 10.96 T Y 2.0 +212015 -540.55 -4597.42 56.29 T Y 2.0 +212016 -540.48 -4597.24 101.67 T Y 2.0 +212017 -540.41 -4596.65 146.82 T Y 2.0 +212018 -541.31 -4597.48 192.53 T Y 2.0 +212019 -541.61 -4597.37 237.69 T Y 2.0 +212020 -540.97 -4597.15 283.78 T Y 2.0 +212021 -541.43 -4597.69 329.32 T Y 2.0 +212022 -541.34 -4597.80 375.03 T Y 2.0 +212023 -541.92 -4597.72 419.74 T Y 2.0 +212024 -541.98 -4597.64 465.57 T Y 2.0 +212025 -542.30 -4597.62 510.66 T Y 2.0 +212026 -542.30 -4597.61 556.69 T Y 2.0 +212027 -542.24 -4597.56 601.36 T Y 2.0 +213000 -380.06 -4597.62 -601.91 T Y 2.0 +213001 -379.93 -4597.68 -556.81 T Y 2.0 +213002 -380.35 -4598.01 -511.41 T Y 2.0 +213003 -380.59 -4598.07 -465.68 T Y 2.0 +213004 -380.60 -4598.02 -420.75 T Y 2.0 +213005 -380.61 -4597.59 -375.57 T Y 2.0 +213006 -380.45 -4598.09 -330.23 T Y 2.0 +213007 -381.10 -4597.91 -284.43 T Y 2.0 +213008 -381.13 -4597.47 -239.04 T Y 2.0 +213009 -381.93 -4597.64 -193.44 T Y 2.0 +213010 -381.71 -4597.11 -147.86 T Y 2.0 +213011 -381.78 -4598.03 -102.68 T Y 2.0 +213012 -382.40 -4597.37 -58.07 T Y 2.0 +213013 -381.57 -4597.83 -12.25 T Y 2.0 +213014 -382.17 -4597.08 33.11 T Y 2.0 +213015 -382.19 -4597.65 77.72 T Y 2.0 +213016 -382.24 -4597.93 123.73 T Y 2.0 +213017 -382.61 -4597.88 168.98 T Y 2.0 +213018 -382.92 -4597.64 214.77 T Y 2.0 +213019 -383.45 -4598.17 259.74 T Y 2.0 +213020 -383.99 -4597.60 305.89 T Y 2.0 +213021 -384.13 -4597.83 351.55 T Y 2.0 +213022 -383.53 -4597.97 397.28 T Y 2.0 +213023 -384.61 -4597.63 442.38 T Y 2.0 +213024 -384.34 -4597.45 487.77 T Y 2.0 +213025 -384.79 -4597.71 533.57 T Y 2.0 +213026 -383.88 -4598.00 578.92 T Y 2.0 +213027 -384.50 -4597.78 624.92 T Y 2.0 +214000 -357.06 -4597.56 -624.72 T Y 2.0 +214001 -357.34 -4597.84 -579.02 T Y 2.0 +214002 -357.59 -4597.55 -534.16 T Y 2.0 +214003 -357.94 -4597.87 -488.69 T Y 2.0 +214004 -357.82 -4597.87 -443.06 T Y 2.0 +214005 -357.63 -4597.98 -397.82 T Y 2.0 +214006 -358.30 -4597.54 -352.61 T Y 2.0 +214007 -358.58 -4597.70 -307.24 T Y 2.0 +214008 -359.16 -4597.52 -262.13 T Y 2.0 +214009 -359.22 -4597.88 -216.46 T Y 2.0 +214010 -358.97 -4597.17 -171.17 T Y 2.0 +214011 -359.59 -4597.25 -125.85 T Y 2.0 +214012 -359.83 -4597.71 -80.55 T Y 2.0 +214013 -359.02 -4598.02 -35.18 T Y 2.0 +214014 -359.73 -4597.60 10.33 T Y 2.0 +214015 -359.97 -4597.96 55.44 T Y 2.0 +214016 -359.46 -4597.71 101.03 T Y 2.0 +214017 -360.09 -4597.79 146.67 T Y 2.0 +214018 -359.88 -4597.96 192.54 T Y 2.0 +214019 -360.67 -4597.80 238.37 T Y 2.0 +214020 -361.42 -4597.78 283.49 T Y 2.0 +214021 -360.70 -4597.96 329.22 T Y 2.0 +214022 -360.57 -4597.43 374.44 T Y 2.0 +214023 -361.11 -4598.15 420.06 T Y 2.0 +214024 -361.05 -4597.26 465.58 T Y 2.0 +214025 -360.90 -4597.75 510.73 T Y 2.0 +214026 -361.03 -4598.24 556.18 T Y 2.0 +214027 -361.52 -4598.18 601.57 T Y 2.0 +215000 -199.59 -4598.20 -602.78 T Y 2.0 +215001 -199.93 -4598.60 -557.24 T Y 2.0 +215002 -199.82 -4598.20 -511.90 T Y 2.0 +215003 -199.49 -4597.88 -466.31 T Y 2.0 +215004 -199.55 -4597.85 -421.22 T Y 2.0 +215005 -200.18 -4597.91 -375.87 T Y 2.0 +215006 -199.85 -4598.24 -330.29 T Y 2.0 +215007 -200.60 -4598.06 -285.38 T Y 2.0 +215008 -200.82 -4597.36 -239.73 T Y 2.0 +215009 -201.33 -4597.99 -194.16 T Y 2.0 +215010 -201.50 -4597.75 -148.99 T Y 2.0 +215011 -202.01 -4598.22 -103.49 T Y 2.0 +215012 -202.17 -4598.05 -58.26 T Y 2.0 +215013 -200.72 -4597.83 -12.50 T Y 2.0 +215014 -201.52 -4597.84 32.90 T Y 2.0 +215015 -202.07 -4597.97 77.82 T Y 2.0 +215016 -201.54 -4598.15 123.47 T Y 2.0 +215017 -202.88 -4598.37 169.24 T Y 2.0 +215018 -202.27 -4598.01 214.70 T Y 2.0 +215019 -202.27 -4598.39 260.07 T Y 2.0 +215020 -203.47 -4598.70 305.98 T Y 2.0 +215021 -202.22 -4598.56 351.55 T Y 2.0 +215022 -203.66 -4598.31 396.56 T Y 2.0 +215023 -204.07 -4598.93 442.81 T Y 2.0 +215024 -203.04 -4598.69 488.28 T Y 2.0 +215025 -203.26 -4598.60 533.39 T Y 2.0 +215026 -203.27 -4598.87 579.41 T Y 2.0 +215027 -203.42 -4598.79 624.62 T Y 2.0 +216000 -176.38 -4598.34 -624.94 T Y 2.0 +216001 -177.14 -4598.28 -579.79 T Y 2.0 +216002 -176.71 -4598.00 -534.60 T Y 2.0 +216003 -177.19 -4598.55 -488.85 T Y 2.0 +216004 -177.05 -4598.24 -442.85 T Y 2.0 +216005 -177.08 -4598.28 -397.65 T Y 2.0 +216006 -177.20 -4597.33 -351.99 T Y 2.0 +216007 -177.50 -4598.23 -306.83 T Y 2.0 +216008 -177.74 -4598.19 -261.39 T Y 2.0 +216009 -178.40 -4598.42 -216.24 T Y 2.0 +216010 -178.27 -4598.46 -170.69 T Y 2.0 +216011 -178.28 -4598.20 -125.21 T Y 2.0 +216012 -179.33 -4598.39 -79.58 T Y 2.0 +216013 -177.86 -4598.22 -34.15 T Y 2.0 +216014 -178.41 -4598.53 11.66 T Y 2.0 +216015 -179.08 -4597.95 56.91 T Y 2.0 +216016 -179.04 -4598.48 102.12 T Y 2.0 +216017 -180.01 -4598.41 147.44 T Y 2.0 +216018 -178.49 -4598.34 193.11 T Y 2.0 +216019 -179.54 -4597.70 238.74 T Y 2.0 +216020 -179.61 -4598.39 284.43 T Y 2.0 +216021 -179.66 -4598.58 329.46 T Y 2.0 +216022 -181.01 -4598.20 374.77 T Y 2.0 +216023 -181.10 -4598.13 420.17 T Y 2.0 +216024 -179.80 -4598.56 465.30 T Y 2.0 +216025 -180.05 -4598.55 511.03 T Y 2.0 +216026 -180.55 -4598.53 556.95 T Y 2.0 +216027 -180.55 -4598.74 601.96 T Y 2.0 +217000 -19.11 -4598.58 -602.89 T Y 2.0 +217001 -20.04 -4598.68 -557.04 T Y 2.0 +217002 -18.76 -4597.95 -511.74 T Y 2.0 +217003 -19.57 -4598.29 -466.29 T Y 2.0 +217004 -19.24 -4598.84 -420.07 T Y 2.0 +217005 -18.89 -4599.02 -374.76 T Y 2.0 +217006 -19.49 -4598.74 -329.77 T Y 2.0 +217007 -19.75 -4598.77 -283.48 T Y 2.0 +217008 -19.72 -4598.69 -238.80 T Y 2.0 +217009 -20.05 -4598.64 -193.64 T Y 2.0 +217010 -20.97 -4598.78 -148.29 T Y 2.0 +217011 -20.39 -4598.57 -102.07 T Y 2.0 +217012 -21.48 -4599.11 -56.39 T Y 2.0 +217013 -20.18 -4598.82 -11.06 T Y 2.0 +217014 -20.68 -4598.05 34.24 T Y 2.0 +217015 -20.78 -4598.65 79.39 T Y 2.0 +217016 -20.79 -4599.03 124.82 T Y 2.0 +217017 -22.09 -4598.48 170.02 T Y 2.0 +217018 -20.93 -4598.72 215.75 T Y 2.0 +217019 -21.30 -4598.94 261.36 T Y 2.0 +217020 -21.36 -4598.92 306.58 T Y 2.0 +217021 -21.74 -4598.99 351.73 T Y 2.0 +217022 -22.47 -4599.10 397.42 T Y 2.0 +217023 -24.19 -4598.60 443.01 T Y 2.0 +217024 -21.68 -4599.49 488.85 T Y 2.0 +217025 -22.44 -4599.28 534.11 T Y 2.0 +217026 -22.89 -4599.21 579.34 T Y 2.0 +217027 -22.65 -4599.23 624.39 T Y 2.0 +218000 3.76 -4598.82 -624.94 T Y 2.0 +218001 2.99 -4598.79 -579.85 T Y 2.0 +218002 3.94 -4598.76 -534.88 T Y 2.0 +218003 3.35 -4599.03 -488.63 T Y 2.0 +218004 4.22 -4598.90 -443.72 T Y 2.0 +218005 3.72 -4598.83 -397.92 T Y 2.0 +218006 4.72 -4598.32 -352.56 T Y 2.0 +218007 2.68 -4598.84 -307.54 T Y 2.0 +218008 3.69 -4598.91 -261.75 T Y 2.0 +218009 2.85 -4599.23 -216.39 T Y 2.0 +218010 4.05 -4598.73 -171.14 T Y 2.0 +218011 2.88 -4598.77 -125.75 T Y 2.0 +218012 2.08 -4599.03 -80.09 T Y 2.0 +218013 2.46 -4599.07 -35.11 T Y 2.0 +218014 1.89 -4598.72 10.39 T Y 2.0 +218015 2.12 -4598.52 55.31 T Y 2.0 +218016 2.09 -4598.96 101.17 T Y 2.0 +218017 1.75 -4598.61 146.18 T Y 2.0 +218018 1.54 -4597.81 191.78 T Y 2.0 +218019 1.87 -4598.62 237.26 T Y 2.0 +218020 1.29 -4599.05 281.92 T Y 2.0 +218021 0.98 -4598.44 328.01 T Y 2.0 +218022 0.55 -4599.25 373.58 T Y 2.0 +218023 1.63 -4599.04 418.91 T Y 2.0 +218024 0.80 -4598.73 464.61 T Y 2.0 +218025 -0.13 -4598.65 509.65 T Y 2.0 +218026 -0.07 -4599.20 556.35 T Y 2.0 +218027 0.60 -4599.18 601.71 T Y 2.0 +219000 161.35 -4598.45 -602.38 T Y 2.0 +219001 160.29 -4598.88 -557.26 T Y 2.0 +219002 161.37 -4598.95 -512.32 T Y 2.0 +219003 160.55 -4598.68 -466.34 T Y 2.0 +219004 162.09 -4599.16 -420.89 T Y 2.0 +219005 161.30 -4599.06 -374.83 T Y 2.0 +219006 161.72 -4598.79 -329.64 T Y 2.0 +219007 159.96 -4599.12 -284.36 T Y 2.0 +219008 160.86 -4598.92 -238.82 T Y 2.0 +219009 160.94 -4598.78 -193.75 T Y 2.0 +219010 -719.00 -4596.22 -626.40 T Y 2.0 +219011 160.48 -4598.97 -102.41 T Y 2.0 +219012 159.89 -4599.29 -57.39 T Y 2.0 +219013 159.74 -4599.25 -12.18 T Y 2.0 +219014 159.47 -4598.82 32.97 T Y 2.0 +219015 159.12 -4598.84 78.91 T Y 2.0 +219016 159.56 -4598.76 124.23 T Y 2.0 +219017 159.47 -4598.62 169.24 T Y 2.0 +219018 159.25 -4599.07 214.76 T Y 2.0 +219019 159.17 -4599.31 259.90 T Y 2.0 +219020 158.85 -4598.48 304.90 T Y 2.0 +219021 158.78 -4599.29 350.81 T Y 2.0 +219022 158.81 -4599.32 396.60 T Y 2.0 +219023 159.03 -4599.40 440.94 T Y 2.0 +219024 158.37 -4599.39 486.93 T Y 2.0 +219025 157.99 -4598.66 532.80 T Y 2.0 +219026 157.48 -4599.63 579.23 T Y 2.0 +219027 157.84 -4599.78 624.90 T Y 2.0 +220000 185.18 -4598.22 -624.82 T Y 2.0 +220001 183.44 -4598.92 -579.81 T Y 2.0 +220002 184.45 -4599.26 -534.68 T Y 2.0 +220003 183.60 -4598.86 -488.73 T Y 2.0 +220004 185.26 -4599.06 -443.57 T Y 2.0 +220005 185.15 -4598.97 -398.50 T Y 2.0 +220006 184.57 -4599.04 -353.03 T Y 2.0 +220007 183.37 -4599.05 -307.51 T Y 2.0 +220008 183.98 -4599.05 -261.19 T Y 2.0 +220009 183.77 -4598.96 -215.78 T Y 2.0 +220010 183.87 -4598.93 -170.03 T Y 2.0 +220011 183.61 -4599.00 -125.08 T Y 2.0 +220012 183.08 -4598.89 -79.73 T Y 2.0 +220013 183.04 -4599.13 -34.65 T Y 2.0 +220014 183.36 -4597.39 11.48 T Y 2.0 +220015 182.42 -4599.21 56.40 T Y 2.0 +220016 182.96 -4599.22 102.35 T Y 2.0 +220017 182.23 -4599.32 147.75 T Y 2.0 +220018 182.29 -4599.32 192.73 T Y 2.0 +220019 182.51 -4599.33 238.56 T Y 2.0 +220020 182.07 -4599.47 284.33 T Y 2.0 +220021 181.63 -4599.27 329.49 T Y 2.0 +220022 181.37 -4598.97 374.86 T Y 2.0 +220023 181.96 -4599.27 419.92 T Y 2.0 +220024 181.48 -4599.62 465.91 T Y 2.0 +220025 180.64 -4598.95 511.11 T Y 2.0 +220026 180.29 -4599.49 556.89 T Y 2.0 +220027 180.61 -4599.66 601.59 T Y 2.0 +221000 343.14 -4599.49 -602.55 T Y 2.0 +221001 341.16 -4599.16 -556.80 T Y 2.0 +221002 342.92 -4599.09 -511.36 T Y 2.0 +221003 341.09 -4599.40 -466.37 T Y 2.0 +221004 342.99 -4599.40 -420.13 T Y 2.0 +221005 342.11 -4599.64 -374.88 T Y 2.0 +221006 342.65 -4599.58 -329.78 T Y 2.0 +221007 340.73 -4599.25 -284.19 T Y 2.0 +221008 341.81 -4599.47 -238.45 T Y 2.0 +221009 342.22 -4599.74 -193.22 T Y 2.0 +221010 341.45 -4599.58 -148.28 T Y 2.0 +221011 341.39 -4599.18 -102.78 T Y 2.0 +221012 341.66 -4598.86 -57.25 T Y 2.0 +221013 340.76 -4599.67 -11.35 T Y 2.0 +221014 341.64 -4599.55 33.85 T Y 2.0 +221015 340.30 -4599.11 78.84 T Y 2.0 +221016 341.35 -4599.21 124.87 T Y 2.0 +221017 340.45 -4599.58 170.16 T Y 2.0 +221018 340.30 -4599.84 215.64 T Y 2.0 +221019 339.46 -4599.66 261.13 T Y 2.0 +221020 339.47 -4599.63 306.52 T Y 2.0 +221021 339.48 -4599.01 351.65 T Y 2.0 +221022 339.69 -4599.86 396.93 T Y 2.0 +221023 339.60 -4599.42 442.54 T Y 2.0 +221024 339.90 -4599.92 488.18 T Y 2.0 +221025 338.19 -4599.82 533.49 T Y 2.0 +221026 338.69 -4600.07 578.92 T Y 2.0 +221027 338.94 -4600.13 624.54 T Y 2.0 +222000 366.31 -4599.22 -624.54 T Y 2.0 +222001 364.03 -4599.37 -579.38 T Y 2.0 +222002 365.67 -4599.45 -534.02 T Y 2.0 +222003 364.10 -4599.60 -488.26 T Y 2.0 +222004 365.55 -4599.38 -442.71 T Y 2.0 +222005 364.96 -4599.39 -396.64 T Y 2.0 +222006 365.56 -4599.40 -351.70 T Y 2.0 +222007 365.54 -4599.04 -306.03 T Y 2.0 +222008 364.23 -4598.99 -260.66 T Y 2.0 +222009 364.85 -4599.43 -215.72 T Y 2.0 +222010 364.46 -4599.63 -169.41 T Y 2.0 +222011 364.97 -4599.34 -124.61 T Y 2.0 +222012 365.03 -4599.34 -79.25 T Y 2.0 +222013 363.63 -4599.69 -33.90 T Y 2.0 +222014 364.77 -4599.45 11.59 T Y 2.0 +222015 364.47 -4599.72 57.68 T Y 2.0 +222016 364.34 -4599.68 102.89 T Y 2.0 +222017 363.70 -4599.72 148.25 T Y 2.0 +222018 363.31 -4599.35 193.64 T Y 2.0 +222019 362.09 -4599.52 239.39 T Y 2.0 +222020 362.87 -4599.45 284.48 T Y 2.0 +222021 362.62 -4599.61 329.82 T Y 2.0 +222022 362.57 -4599.65 375.42 T Y 2.0 +222023 362.59 -4599.69 420.68 T Y 2.0 +222024 362.24 -4599.69 466.02 T Y 2.0 +222025 360.40 -4599.94 511.65 T Y 2.0 +222026 362.13 -4599.80 556.88 T Y 2.0 +222027 362.01 -4599.29 602.13 T Y 2.0 +223000 523.88 -4600.10 -602.32 T Y 2.0 +223001 521.63 -4597.81 -556.26 T Y 2.0 +223002 523.70 -4599.94 -511.03 T Y 2.0 +223003 523.24 -4599.92 -465.54 T Y 2.0 +223004 523.27 -4599.61 -419.53 T Y 2.0 +223005 523.58 -4600.08 -373.91 T Y 2.0 +223006 523.44 -4599.94 -328.72 T Y 2.0 +223007 523.76 -4599.48 -283.20 T Y 2.0 +223008 523.45 -4599.66 -237.97 T Y 2.0 +223009 523.02 -4600.15 -192.50 T Y 2.0 +223010 522.86 -4599.71 -147.42 T Y 2.0 +223011 522.30 -4599.77 -102.04 T Y 2.0 +223012 522.75 -4600.21 -56.55 T Y 2.0 +223013 521.91 -4599.74 -11.35 T Y 2.0 +223014 522.30 -4600.32 34.12 T Y 2.0 +223015 523.02 -4599.88 80.57 T Y 2.0 +223016 522.41 -4599.82 126.21 T Y 2.0 +223017 522.13 -4599.50 171.07 T Y 2.0 +223018 521.26 -4600.27 216.86 T Y 2.0 +223019 519.33 -4598.79 262.24 T Y 2.0 +223020 521.37 -4599.40 307.36 T Y 2.0 +223021 519.97 -4600.09 353.11 T Y 2.0 +223022 521.13 -4600.62 398.32 T Y 2.0 +223023 521.17 -4600.28 443.39 T Y 2.0 +223024 520.67 -4600.11 488.99 T Y 2.0 +223025 518.37 -4598.90 534.64 T Y 2.0 +223026 519.86 -4600.41 579.85 T Y 2.0 +223027 520.05 -4600.13 625.20 T Y 2.0 +224000 547.08 -4600.02 -624.92 T Y 2.0 +224001 545.29 -4599.99 -579.87 T Y 2.0 +224002 546.24 -4600.09 -533.42 T Y 2.0 +224003 546.23 -4600.01 -488.21 T Y 2.0 +224004 545.89 -4599.64 -442.73 T Y 2.0 +224005 546.20 -4600.12 -397.48 T Y 2.0 +224006 546.78 -4599.57 -351.90 T Y 2.0 +224007 546.82 -4599.34 -305.79 T Y 2.0 +224008 545.54 -4600.20 -260.50 T Y 2.0 +224009 546.33 -4599.63 -215.14 T Y 2.0 +224010 546.27 -4599.86 -169.73 T Y 2.0 +224011 546.01 -4599.18 -123.43 T Y 2.0 +224012 545.34 -4600.29 -78.58 T Y 2.0 +224013 545.33 -4600.12 -33.33 T Y 2.0 +224014 545.18 -4600.26 11.70 T Y 2.0 +224015 545.31 -4600.00 57.05 T Y 2.0 +224016 545.27 -4600.10 102.88 T Y 2.0 +224017 545.65 -4599.75 148.99 T Y 2.0 +224018 544.44 -4600.26 194.54 T Y 2.0 +224019 542.58 -4600.18 239.87 T Y 2.0 +224020 544.02 -4600.22 284.76 T Y 2.0 +224021 542.57 -4600.01 330.29 T Y 2.0 +224022 544.22 -4600.00 375.31 T Y 2.0 +224023 544.30 -4600.42 420.69 T Y 2.0 +224024 543.47 -4600.22 466.01 T Y 2.0 +224025 542.73 -4600.04 511.46 T Y 2.0 +224026 543.29 -4600.28 556.70 T Y 2.0 +224027 543.08 -4600.41 602.45 T Y 2.0 +225000 705.16 -4600.21 -601.76 T Y 2.0 +225001 703.97 -4599.93 -557.05 T Y 2.0 +225002 704.89 -4600.22 -510.74 T Y 2.0 +225003 704.81 -4600.09 -464.99 T Y 2.0 +225004 704.64 -4600.40 -419.35 T Y 2.0 +225005 704.76 -4600.78 -374.02 T Y 2.0 +225006 704.43 -4600.64 -328.29 T Y 2.0 +225007 705.13 -4600.18 -282.98 T Y 2.0 +225008 704.40 -4600.67 -237.15 T Y 2.0 +225009 704.66 -4599.61 -192.26 T Y 2.0 +225010 704.76 -4600.75 -146.86 T Y 2.0 +225011 704.06 -4600.91 -101.08 T Y 2.0 +225012 703.80 -4600.43 -56.04 T Y 2.0 +225013 703.52 -4600.83 -10.30 T Y 2.0 +225014 703.03 -4601.11 35.19 T Y 2.0 +225015 703.72 -4600.54 80.35 T Y 2.0 +225016 703.67 -4600.67 125.91 T Y 2.0 +225017 703.63 -4600.59 171.31 T Y 2.0 +225018 702.49 -4601.06 217.03 T Y 2.0 +225019 701.34 -4600.80 262.46 T Y 2.0 +225020 702.26 -4600.45 307.58 T Y 2.0 +225021 700.73 -4600.84 353.51 T Y 2.0 +225022 702.99 -4601.17 398.75 T Y 2.0 +225023 702.65 -4601.06 443.55 T Y 2.0 +225024 702.38 -4600.14 489.40 T Y 2.0 +225025 701.24 -4600.91 534.79 T Y 2.0 +225026 701.54 -4600.75 579.87 T Y 2.0 +225027 701.46 -4600.97 625.56 T Y 2.0 +310000 888.16 -4567.42 -623.71 T Y 2.0 +310001 889.10 -4567.12 -578.16 T Y 2.0 +310002 889.19 -4567.26 -532.98 T Y 2.0 +310003 889.29 -4566.51 -487.85 T Y 2.0 +310004 889.25 -4566.42 -442.17 T Y 2.0 +310005 889.02 -4566.77 -396.92 T Y 2.0 +310006 888.57 -4567.50 -351.20 T Y 2.0 +310007 889.01 -4567.00 -305.78 T Y 2.0 +310008 888.97 -4567.02 -261.10 T Y 2.0 +310009 889.26 -4566.76 -215.17 T Y 2.0 +310010 888.93 -4566.63 -170.30 T Y 2.0 +310011 888.85 -4566.72 -125.13 T Y 2.0 +310012 889.41 -4566.67 -79.80 T Y 2.0 +310013 889.12 -4566.94 -33.05 T Y 2.0 +310014 888.33 -4566.11 12.10 T Y 2.0 +310015 888.82 -4566.51 57.89 T Y 2.0 +310016 888.93 -4566.67 103.55 T Y 2.0 +310017 890.03 -4565.98 148.73 T Y 2.0 +310018 888.59 -4566.74 194.57 T Y 2.0 +310019 888.66 -4566.40 239.82 T Y 2.0 +310020 889.24 -4566.06 285.35 T Y 2.0 +310021 888.77 -4566.46 330.53 T Y 2.0 +310022 888.74 -4566.32 375.31 T Y 2.0 +310023 889.10 -4566.13 420.78 T Y 2.0 +310024 889.14 -4566.21 466.17 T Y 2.0 +310025 889.09 -4566.08 511.77 T Y 2.0 +310026 889.93 -4565.99 557.47 T Y 2.0 +310027 889.90 -4565.66 602.59 T Y 2.0 +311000 1038.15 -4513.74 -602.08 T Y 2.0 +311001 1038.70 -4513.50 -556.38 T Y 2.0 +311002 1037.11 -4513.56 -510.88 T Y 2.0 +311003 1038.31 -4513.15 -465.87 T Y 2.0 +311004 1037.99 -4513.53 -374.52 T Y 2.0 +311005 1038.02 -4513.52 -420.11 T Y 2.0 +311006 1037.25 -4513.54 -329.45 T Y 2.0 +311007 1037.74 -4513.40 -284.24 T Y 2.0 +311008 1038.08 -4513.43 -238.74 T Y 2.0 +311009 1037.95 -4513.29 -193.58 T Y 2.0 +311010 1038.13 -4513.43 -148.37 T Y 2.0 +311011 1037.83 -4513.01 -103.02 T Y 2.0 +311012 1037.91 -4512.74 -57.82 T Y 2.0 +311013 1037.48 -4513.16 -11.47 T Y 2.0 +311014 1038.14 -4512.83 33.94 T Y 2.0 +311015 1037.85 -4512.59 79.64 T Y 2.0 +311016 1038.39 -4512.96 124.91 T Y 2.0 +311017 1038.20 -4512.29 170.27 T Y 2.0 +311018 1038.23 -4512.78 215.83 T Y 2.0 +311019 1038.09 -4512.89 261.28 T Y 2.0 +311020 1038.26 -4512.88 307.14 T Y 2.0 +311021 1038.60 -4512.77 352.60 T Y 2.0 +311022 1038.28 -4512.43 397.77 T Y 2.0 +311023 1037.95 -4512.47 442.58 T Y 2.0 +311024 1038.27 -4512.43 488.11 T Y 2.0 +311025 1038.51 -4512.39 533.24 T Y 2.0 +311026 1037.86 -4512.44 578.53 T Y 2.0 +311027 1038.47 -4512.81 624.02 T Y 2.0 +312000 1059.42 -4506.01 -624.30 T Y 2.0 +312001 1059.51 -4505.78 -578.16 T Y 2.0 +312002 1058.77 -4506.29 -533.05 T Y 2.0 +312003 1060.13 -4505.44 -488.20 T Y 2.0 +312004 1059.47 -4505.76 -442.08 T Y 2.0 +312005 1059.83 -4505.58 -395.75 T Y 2.0 +312006 1059.34 -4505.61 -350.39 T Y 2.0 +312007 1059.21 -4505.45 -305.27 T Y 2.0 +312008 1059.30 -4505.71 -260.05 T Y 2.0 +312009 1059.14 -4505.66 -214.84 T Y 2.0 +312010 1059.89 -4505.18 -169.10 T Y 2.0 +312011 1059.70 -4505.27 -124.19 T Y 2.0 +312012 1059.23 -4505.22 -78.90 T Y 2.0 +312013 1058.90 -4505.06 -33.56 T Y 2.0 +312014 1058.98 -4505.26 11.83 T Y 2.0 +312015 1059.21 -4505.23 57.07 T Y 2.0 +312016 1059.86 -4504.94 102.62 T Y 2.0 +312017 1059.76 -4505.30 148.48 T Y 2.0 +312018 1059.65 -4505.00 195.21 T Y 2.0 +312019 1060.02 -4504.25 240.39 T Y 2.0 +312020 1059.69 -4505.02 285.83 T Y 2.0 +312021 1059.92 -4504.86 330.86 T Y 2.0 +312022 1060.26 -4504.79 375.62 T Y 2.0 +312023 1059.90 -4504.99 421.57 T Y 2.0 +312024 1060.21 -4504.76 466.84 T Y 2.0 +312025 1059.60 -4505.15 512.35 T Y 2.0 +312026 1059.99 -4504.89 557.38 T Y 2.0 +312027 1059.58 -4504.86 604.01 T Y 2.0 +313000 1208.45 -4452.74 -603.71 T Y 2.0 +313001 1208.50 -4452.58 -556.89 T Y 2.0 +313002 1208.12 -4452.06 -512.09 T Y 2.0 +313003 1208.59 -4452.26 -465.38 T Y 2.0 +313004 1208.75 -4452.36 -420.00 T Y 2.0 +313005 1208.53 -4452.27 -374.86 T Y 2.0 +313006 1208.14 -4452.29 -329.34 T Y 2.0 +313007 1208.20 -4452.08 -283.70 T Y 2.0 +313008 1208.67 -4451.58 -238.92 T Y 2.0 +313009 1207.91 -4452.24 -193.42 T Y 2.0 +313010 1208.59 -4451.86 -148.79 T Y 2.0 +313011 1207.95 -4452.21 -103.04 T Y 2.0 +313012 1207.99 -4451.90 -57.18 T Y 2.0 +313013 1208.52 -4451.84 -11.89 T Y 2.0 +313014 1208.29 -4451.85 33.18 T Y 2.0 +313015 1208.32 -4451.91 78.86 T Y 2.0 +313016 1208.67 -4451.72 124.30 T Y 2.0 +313017 1208.18 -4451.79 169.31 T Y 2.0 +313018 1208.44 -4451.91 216.08 T Y 2.0 +313019 1208.60 -4451.56 260.98 T Y 2.0 +313020 1208.64 -4451.90 306.08 T Y 2.0 +313021 1208.72 -4451.67 351.78 T Y 2.0 +313022 1208.76 -4451.73 396.90 T Y 2.0 +313023 1207.97 -4451.82 442.67 T Y 2.0 +313024 1208.98 -4451.60 488.28 T Y 2.0 +313025 1208.84 -4451.52 533.40 T Y 2.0 +313026 1208.65 -4450.97 578.68 T Y 2.0 +313027 1208.71 -4451.07 625.78 T Y 2.0 +314000 1229.85 -4445.10 -625.83 T Y 2.0 +314001 1229.55 -4444.97 -580.42 T Y 2.0 +314002 1229.89 -4444.22 -534.65 T Y 2.0 +314003 1229.84 -4444.45 -489.11 T Y 2.0 +314004 1229.73 -4444.84 -443.93 T Y 2.0 +314005 1230.18 -4444.58 -397.67 T Y 2.0 +314006 1229.18 -4444.83 -351.51 T Y 2.0 +314007 1229.53 -4443.93 -306.21 T Y 2.0 +314008 1229.73 -4444.26 -261.09 T Y 2.0 +314009 1229.54 -4444.53 -216.25 T Y 2.0 +314010 1229.87 -4444.27 -170.64 T Y 2.0 +314011 1229.48 -4444.71 -125.25 T Y 2.0 +314012 1229.84 -4444.44 -80.47 T Y 2.0 +314013 1229.46 -4444.52 -34.33 T Y 2.0 +314014 1229.47 -4444.51 11.48 T Y 2.0 +314015 1229.71 -4444.21 57.02 T Y 2.0 +314016 1229.61 -4444.36 102.50 T Y 2.0 +314017 1229.48 -4444.51 147.71 T Y 2.0 +314018 1229.82 -4444.11 192.88 T Y 2.0 +314019 1229.99 -4444.08 238.66 T Y 2.0 +314020 1229.70 -4443.91 283.63 T Y 2.0 +314021 1229.92 -4443.77 328.87 T Y 2.0 +314022 1229.80 -4444.10 374.83 T Y 2.0 +314023 1229.33 -4444.51 420.28 T Y 2.0 +314024 1229.93 -4444.27 466.06 T Y 2.0 +314025 1229.96 -4443.38 510.76 T Y 2.0 +314026 1229.99 -4444.37 557.42 T Y 2.0 +314027 1230.30 -4444.07 603.20 T Y 2.0 +315000 1378.39 -4391.94 -604.21 T Y 2.0 +315001 1378.41 -4391.49 -558.25 T Y 2.0 +315002 1378.99 -4391.19 -513.64 T Y 2.0 +315003 1378.67 -4391.38 -467.59 T Y 2.0 +315004 1378.97 -4391.07 -422.10 T Y 2.0 +315005 1378.69 -4391.44 -376.35 T Y 2.0 +315006 1378.11 -4391.23 -330.76 T Y 2.0 +315007 1378.69 -4390.99 -285.54 T Y 2.0 +315008 1378.44 -4391.27 -240.05 T Y 2.0 +315009 1378.93 -4391.22 -194.32 T Y 2.0 +315010 1378.75 -4390.93 -149.02 T Y 2.0 +315011 1379.04 -4391.11 -104.25 T Y 2.0 +315012 1379.01 -4390.91 -58.61 T Y 2.0 +315013 1378.41 -4390.83 -12.50 T Y 2.0 +315014 1378.55 -4390.92 33.71 T Y 2.0 +315015 1378.82 -4391.07 79.61 T Y 2.0 +315016 1379.40 -4390.91 124.38 T Y 2.0 +315017 1378.59 -4390.92 169.37 T Y 2.0 +315018 1378.50 -4390.60 214.63 T Y 2.0 +315019 1379.44 -4390.49 259.95 T Y 2.0 +315020 1379.11 -4390.76 305.76 T Y 2.0 +315021 1379.13 -4390.62 350.72 T Y 2.0 +315022 1378.91 -4390.48 396.03 T Y 2.0 +315023 1378.92 -4390.97 441.76 T Y 2.0 +315024 1378.61 -4390.41 486.85 T Y 2.0 +315025 1379.57 -4390.85 532.57 T Y 2.0 +315026 1378.71 -4390.99 578.67 T Y 2.0 +315027 1378.86 -4391.07 623.75 T Y 2.0 +316000 1400.84 -4383.66 -625.32 T Y 2.0 +316001 1400.40 -4383.87 -579.06 T Y 2.0 +316002 1400.21 -4383.64 -534.02 T Y 2.0 +316003 1400.43 -4383.66 -488.11 T Y 2.0 +316004 1400.48 -4383.47 -443.10 T Y 2.0 +316005 1400.53 -4383.55 -397.50 T Y 2.0 +316006 1399.68 -4383.80 -351.83 T Y 2.0 +316007 1400.19 -4383.41 -306.49 T Y 2.0 +316008 1400.45 -4383.09 -261.41 T Y 2.0 +316009 1400.14 -4383.67 -215.77 T Y 2.0 +316010 1400.11 -4383.32 -169.90 T Y 2.0 +316011 1400.05 -4383.46 -125.34 T Y 2.0 +316012 1399.78 -4382.94 -79.37 T Y 2.0 +316013 1400.13 -4383.46 -33.86 T Y 2.0 +316014 1399.83 -4383.43 11.34 T Y 2.0 +316015 1399.68 -4383.41 56.83 T Y 2.0 +316016 1400.23 -4383.39 102.57 T Y 2.0 +316017 1399.87 -4383.22 147.22 T Y 2.0 +316018 1400.58 -4383.14 192.66 T Y 2.0 +316019 1400.39 -4383.04 238.49 T Y 2.0 +316020 1400.53 -4383.07 284.11 T Y 2.0 +316021 1400.54 -4383.16 329.09 T Y 2.0 +316022 1399.90 -4383.50 374.33 T Y 2.0 +316023 1400.13 -4383.34 419.66 T Y 2.0 +316024 1400.40 -4383.16 465.67 T Y 2.0 +316025 1400.64 -4382.56 511.69 T Y 2.0 +316026 1400.54 -4382.90 557.10 T Y 2.0 +316027 1400.24 -4382.65 602.58 T Y 2.0 +317000 1549.72 -4330.61 -603.30 T Y 2.0 +317001 1549.19 -4330.48 -557.47 T Y 2.0 +317002 1549.01 -4330.27 -511.89 T Y 2.0 +317003 1549.03 -4330.29 -466.77 T Y 2.0 +317004 1548.87 -4330.22 -420.78 T Y 2.0 +317005 1550.16 -4330.18 -374.84 T Y 2.0 +317006 1549.24 -4330.41 -329.27 T Y 2.0 +317007 1549.20 -4330.12 -283.57 T Y 2.0 +317008 1548.75 -4330.25 -238.05 T Y 2.0 +317009 1548.94 -4329.78 -192.82 T Y 2.0 +317010 1548.98 -4330.09 -147.66 T Y 2.0 +317011 1549.31 -4329.88 -102.16 T Y 2.0 +317012 1549.07 -4329.76 -56.63 T Y 2.0 +317013 888.16 -4567.42 -623.71 T Y 2.0 +317014 1549.26 -4329.71 33.85 T Y 2.0 +317015 1548.76 -4329.45 78.97 T Y 2.0 +317016 1549.62 -4329.73 124.43 T Y 2.0 +317017 1548.92 -4329.96 169.63 T Y 2.0 +317018 1548.76 -4330.02 215.42 T Y 2.0 +317019 1549.22 -4330.28 260.57 T Y 2.0 +317020 1550.01 -4329.63 305.73 T Y 2.0 +317021 1549.59 -4330.02 350.99 T Y 2.0 +317022 1548.42 -4329.75 396.39 T Y 2.0 +317023 1548.83 -4330.00 441.58 T Y 2.0 +317024 1549.42 -4329.71 487.47 T Y 2.0 +317025 1549.78 -4329.83 532.68 T Y 2.0 +317026 1549.12 -4330.06 578.01 T Y 2.0 +317027 1549.75 -4329.87 623.84 T Y 2.0 +318000 1571.20 -4322.68 -626.09 T Y 2.0 +318001 1571.03 -4323.08 -580.42 T Y 2.0 +318002 1570.56 -4322.20 -534.39 T Y 2.0 +318003 1570.16 -4322.87 -489.34 T Y 2.0 +318004 1570.77 -4322.42 -443.25 T Y 2.0 +318005 1570.55 -4322.07 -397.89 T Y 2.0 +318006 1570.95 -4322.68 -352.11 T Y 2.0 +318007 1570.74 -4322.24 -307.04 T Y 2.0 +318008 1570.45 -4322.73 -261.06 T Y 2.0 +318009 1570.85 -4322.48 -215.96 T Y 2.0 +318010 1570.28 -4322.41 -170.52 T Y 2.0 +318011 1570.64 -4322.82 -124.96 T Y 2.0 +318012 1570.35 -4322.48 -79.39 T Y 2.0 +318013 1570.89 -4322.05 -33.77 T Y 2.0 +318014 1571.01 -4322.29 11.49 T Y 2.0 +318015 1570.44 -4322.19 56.76 T Y 2.0 +318016 1570.98 -4322.02 102.07 T Y 2.0 +318017 1570.94 -4322.24 147.12 T Y 2.0 +318018 1570.74 -4322.26 192.56 T Y 2.0 +318019 1570.52 -4322.14 238.05 T Y 2.0 +318020 1571.20 -4322.18 283.22 T Y 2.0 +318021 1570.77 -4322.36 328.80 T Y 2.0 +318022 1570.68 -4322.32 374.47 T Y 2.0 +318023 1570.20 -4322.49 418.90 T Y 2.0 +318024 1570.80 -4322.09 464.97 T Y 2.0 +318025 1570.47 -4322.52 509.81 T Y 2.0 +318026 1570.38 -4322.42 555.20 T Y 2.0 +318027 1570.45 -4322.00 602.54 T Y 2.0 +319000 1719.46 -4269.33 -604.24 T Y 2.0 +319001 1719.49 -4269.27 -558.50 T Y 2.0 +319002 1719.56 -4269.37 -512.97 T Y 2.0 +319003 1719.23 -4268.99 -467.00 T Y 2.0 +319004 1718.87 -4268.88 -419.25 T Y 2.0 +319005 1719.60 -4269.18 -373.96 T Y 2.0 +319006 1719.02 -4269.07 -329.05 T Y 2.0 +319007 1719.61 -4269.26 -284.20 T Y 2.0 +319008 1719.67 -4269.05 -238.69 T Y 2.0 +319009 1719.14 -4269.14 -193.38 T Y 2.0 +319010 1719.08 -4268.94 -148.26 T Y 2.0 +319011 1719.52 -4269.00 -103.25 T Y 2.0 +319012 1719.87 -4268.81 -56.99 T Y 2.0 +319013 1719.71 -4268.90 -11.62 T Y 2.0 +319014 1719.53 -4269.06 33.39 T Y 2.0 +319015 1719.54 -4269.10 78.60 T Y 2.0 +319016 1719.24 -4268.83 123.68 T Y 2.0 +319017 1720.34 -4268.64 169.14 T Y 2.0 +319018 1719.44 -4268.90 214.21 T Y 2.0 +319019 1719.04 -4268.92 259.79 T Y 2.0 +319020 1719.84 -4268.90 305.09 T Y 2.0 +319021 1719.13 -4269.14 350.39 T Y 2.0 +319022 1719.59 -4269.00 396.06 T Y 2.0 +319023 1719.33 -4268.98 441.28 T Y 2.0 +319024 1719.49 -4268.96 486.56 T Y 2.0 +319025 1719.50 -4269.04 532.15 T Y 2.0 +319026 1719.22 -4269.00 576.84 T Y 2.0 +319027 1719.67 -4269.02 624.99 T Y 2.0 +320000 1740.69 -4261.66 -625.46 T Y 2.0 +320001 1740.50 -4261.88 -579.37 T Y 2.0 +320002 1740.85 -4261.65 -533.84 T Y 2.0 +320003 1740.11 -4261.70 -488.53 T Y 2.0 +320004 1740.98 -4261.53 -443.05 T Y 2.0 +320005 1740.98 -4261.47 -397.68 T Y 2.0 +320006 1740.75 -4260.79 -352.28 T Y 2.0 +320007 1740.43 -4261.52 -307.18 T Y 2.0 +320008 1740.67 -4261.23 -261.41 T Y 2.0 +320009 1741.03 -4261.19 -215.84 T Y 2.0 +320010 1741.30 -4261.27 -170.13 T Y 2.0 +320011 1740.80 -4261.30 -125.02 T Y 2.0 +320012 1741.18 -4261.00 -79.53 T Y 2.0 +320013 1740.89 -4261.10 -34.33 T Y 2.0 +320014 1740.95 -4260.98 10.85 T Y 2.0 +320015 1740.83 -4261.25 56.27 T Y 2.0 +320016 1740.93 -4260.88 101.85 T Y 2.0 +320017 1741.18 -4260.56 146.97 T Y 2.0 +320018 1740.71 -4261.25 194.33 T Y 2.0 +320019 1741.00 -4260.88 239.42 T Y 2.0 +320020 1741.28 -4260.97 284.61 T Y 2.0 +320021 1740.74 -4261.20 329.75 T Y 2.0 +320022 1740.71 -4261.78 375.33 T Y 2.0 +320023 1740.75 -4261.11 420.36 T Y 2.0 +320024 1740.81 -4261.21 465.62 T Y 2.0 +320026 1740.62 -4261.47 556.76 T Y 2.0 +320027 1741.20 -4261.07 602.14 T Y 2.0 +321000 1889.62 -4208.37 -603.66 T Y 2.0 +321001 1889.89 -4208.33 -557.72 T Y 2.0 +321002 1889.54 -4208.22 -512.23 T Y 2.0 +321003 1889.46 -4208.33 -466.46 T Y 2.0 +321004 1889.74 -4208.10 -421.25 T Y 2.0 +321005 1890.13 -4208.25 -376.11 T Y 2.0 +321006 1890.10 -4208.08 -330.50 T Y 2.0 +321007 1889.72 -4207.86 -285.29 T Y 2.0 +321008 1890.18 -4207.12 -239.94 T Y 2.0 +321009 1889.71 -4207.82 -194.24 T Y 2.0 +321010 1890.03 -4207.87 -148.93 T Y 2.0 +321011 1889.86 -4207.91 -103.96 T Y 2.0 +321012 1890.56 -4207.51 -58.56 T Y 2.0 +321013 1889.38 -4208.13 -12.77 T Y 2.0 +321014 1890.19 -4208.22 32.53 T Y 2.0 +321015 1889.78 -4208.05 77.71 T Y 2.0 +321016 1890.22 -4207.76 123.08 T Y 2.0 +321017 1889.75 -4207.53 169.19 T Y 2.0 +321018 1889.86 -4208.10 215.96 T Y 2.0 +321019 1890.11 -4207.77 261.17 T Y 2.0 +321020 1889.77 -4207.95 305.91 T Y 2.0 +321021 1889.63 -4208.18 351.05 T Y 2.0 +321022 1889.51 -4208.42 397.04 T Y 2.0 +321023 1889.87 -4208.00 442.12 T Y 2.0 +321024 1889.57 -4208.07 487.21 T Y 2.0 +321025 1890.23 -4208.12 533.32 T Y 2.0 +321026 1889.30 -4208.39 578.82 T Y 2.0 +321027 1889.71 -4208.28 623.95 T Y 2.0 +322000 1910.69 -4200.23 -625.89 T Y 2.0 +322001 1911.41 -4200.45 -579.21 T Y 2.0 +322002 1910.75 -4200.86 -533.86 T Y 2.0 +322003 1911.19 -4199.77 -488.24 T Y 2.0 +322004 1910.90 -4200.30 -443.06 T Y 2.0 +322005 1911.47 -4200.24 -397.86 T Y 2.0 +322006 1911.17 -4200.15 -352.46 T Y 2.0 +322007 1911.48 -4200.15 -307.35 T Y 2.0 +322008 1911.24 -4200.31 -261.48 T Y 2.0 +322009 1911.66 -4200.20 -216.41 T Y 2.0 +322010 1911.84 -4199.95 -170.91 T Y 2.0 +322011 1911.80 -4199.86 -125.66 T Y 2.0 +322012 1912.33 -4199.69 -80.84 T Y 2.0 +322013 1911.23 -4200.31 -34.64 T Y 2.0 +322014 1912.03 -4200.14 10.75 T Y 2.0 +322015 1911.32 -4199.97 55.78 T Y 2.0 +322016 1911.24 -4200.06 102.07 T Y 2.0 +322017 1911.31 -4199.78 147.60 T Y 2.0 +322018 1911.10 -4199.90 192.72 T Y 2.0 +322019 1911.40 -4199.88 237.95 T Y 2.0 +322020 1911.19 -4200.32 283.20 T Y 2.0 +322021 1910.86 -4200.29 328.43 T Y 2.0 +322022 1911.73 -4200.26 373.55 T Y 2.0 +322023 1911.36 -4200.08 419.26 T Y 2.0 +322024 1911.40 -4200.23 464.11 T Y 2.0 +322025 1911.43 -4200.36 509.39 T Y 2.0 +322026 1910.78 -4199.80 555.30 T Y 2.0 +322027 1910.84 -4200.27 601.25 T Y 2.0 +323000 2060.20 -4146.69 -603.38 T Y 2.0 +323001 2060.02 -4147.03 -557.36 T Y 2.0 +323002 2059.91 -4146.88 -512.12 T Y 2.0 +323003 2059.84 -4147.06 -466.45 T Y 2.0 +323004 2060.07 -4146.84 -421.05 T Y 2.0 +323005 2060.38 -4146.56 -375.04 T Y 2.0 +323006 2060.28 -4147.08 -329.68 T Y 2.0 +323007 2059.98 -4147.18 -284.10 T Y 2.0 +323008 2059.93 -4147.05 -239.59 T Y 2.0 +323009 2060.60 -4147.04 -194.63 T Y 2.0 +323010 2061.24 -4145.96 -149.16 T Y 2.0 +323011 2060.40 -4146.89 -102.92 T Y 2.0 +323012 2060.64 -4146.50 -57.93 T Y 2.0 +323013 2060.45 -4146.69 -13.01 T Y 2.0 +323014 2060.76 -4145.87 32.50 T Y 2.0 +323015 2060.37 -4146.79 78.15 T Y 2.0 +323016 2060.52 -4146.86 124.39 T Y 2.0 +323017 2060.49 -4146.78 169.02 T Y 2.0 +323018 2059.88 -4147.09 214.58 T Y 2.0 +323019 2060.73 -4146.42 259.80 T Y 2.0 +323020 2059.99 -4147.28 304.93 T Y 2.0 +323021 2060.56 -4146.55 350.81 T Y 2.0 +323022 2060.16 -4146.88 396.33 T Y 2.0 +323023 2060.48 -4146.82 441.26 T Y 2.0 +323024 2059.79 -4146.92 487.11 T Y 2.0 +323025 2060.04 -4146.86 532.29 T Y 2.0 +323026 2060.41 -4146.93 578.45 T Y 2.0 +323027 2059.74 -4147.14 624.37 T Y 2.0 +324000 2081.51 -4139.60 -625.50 T Y 2.0 +324001 2081.80 -4139.05 -579.89 T Y 2.0 +324002 2081.39 -4139.29 -534.77 T Y 2.0 +324003 2081.40 -4139.30 -489.56 T Y 2.0 +324004 2081.60 -4139.41 -443.90 T Y 2.0 +324005 2082.19 -4138.93 -398.73 T Y 2.0 +324006 2082.28 -4139.42 -352.92 T Y 2.0 +324007 2082.43 -4139.06 -307.71 T Y 2.0 +324008 2081.30 -4138.84 -262.68 T Y 2.0 +324009 2082.37 -4138.91 -216.64 T Y 2.0 +324010 2082.51 -4138.24 -171.67 T Y 2.0 +324011 2082.17 -4138.93 -125.99 T Y 2.0 +324012 2083.08 -4138.83 -80.70 T Y 2.0 +324013 2082.73 -4138.99 -34.77 T Y 2.0 +324014 2082.87 -4138.69 10.26 T Y 2.0 +324015 2082.56 -4138.99 55.97 T Y 2.0 +324016 2082.38 -4139.00 100.63 T Y 2.0 +324017 2082.26 -4139.09 146.23 T Y 2.0 +324018 2082.30 -4139.04 192.06 T Y 2.0 +324019 2081.81 -4139.02 237.32 T Y 2.0 +324020 2082.69 -4139.29 282.73 T Y 2.0 +324021 2082.54 -4138.90 327.47 T Y 2.0 +324022 2082.41 -4138.81 373.45 T Y 2.0 +324023 2081.95 -4139.02 419.99 T Y 2.0 +324024 2081.75 -4139.23 464.74 T Y 2.0 +324025 2081.40 -4139.44 510.57 T Y 2.0 +324026 2081.94 -4139.00 556.65 T Y 2.0 +324027 2080.89 -4139.41 601.69 T Y 2.0 +325000 2229.89 -4086.48 -602.63 T Y 2.0 +325001 2230.37 -4085.78 -557.49 T Y 2.0 +325002 2229.66 -4086.15 -511.93 T Y 2.0 +325003 2230.70 -4085.99 -467.28 T Y 2.0 +325004 2229.78 -4086.40 -421.38 T Y 2.0 +325005 2231.43 -4085.81 -376.19 T Y 2.0 +325006 2230.58 -4086.09 -330.89 T Y 2.0 +325007 2230.67 -4085.83 -284.64 T Y 2.0 +325008 2230.04 -4085.97 -239.54 T Y 2.0 +325009 2231.49 -4086.00 -194.05 T Y 2.0 +325010 2232.09 -4085.65 -149.02 T Y 2.0 +325011 2230.59 -4085.75 -103.11 T Y 2.0 +325012 2231.66 -4085.92 -57.34 T Y 2.0 +325013 2231.96 -4086.09 -12.16 T Y 2.0 +325014 2231.73 -4086.09 33.40 T Y 2.0 +325015 2231.74 -4086.13 78.37 T Y 2.0 +325016 2231.72 -4085.83 123.16 T Y 2.0 +325017 2232.48 -4085.69 168.70 T Y 2.0 +325018 2231.17 -4085.93 214.22 T Y 2.0 +325019 2231.00 -4086.03 259.54 T Y 2.0 +325020 2232.02 -4086.23 304.96 T Y 2.0 +325021 2231.00 -4085.66 350.78 T Y 2.0 +325022 2230.82 -4086.21 396.67 T Y 2.0 +325023 2230.62 -4086.38 442.32 T Y 2.0 +325024 2231.06 -4085.87 487.77 T Y 2.0 +325025 2230.07 -4085.70 533.70 T Y 2.0 +325026 2230.27 -4086.09 579.56 T Y 2.0 +325027 2229.62 -4086.56 624.26 T Y 2.0 +410000 2404.61 -4009.94 -626.80 T Y 3.0 +410001 2404.33 -4010.55 -580.25 T Y 3.0 +410002 2405.35 -4009.52 -535.39 T Y 3.0 +410003 2404.67 -4010.24 -489.66 T Y 3.0 +410004 2404.80 -4008.88 -444.68 T Y 3.0 +410005 2405.54 -4009.63 -399.54 T Y 3.0 +410006 2404.79 -4009.76 -353.35 T Y 3.0 +410007 2405.84 -4009.02 -308.43 T Y 3.0 +410008 2405.78 -4009.48 -263.14 T Y 3.0 +410009 2405.25 -4009.00 -217.70 T Y 3.0 +410010 2405.81 -4008.84 -172.40 T Y 3.0 +410011 2405.33 -4009.28 -126.84 T Y 3.0 +410012 2405.80 -4008.69 -80.99 T Y 3.0 +410013 2405.06 -4009.28 -35.60 T Y 3.0 +410014 2406.14 -4008.80 9.74 T Y 3.0 +410015 2405.30 -4009.19 54.85 T Y 3.0 +410016 2404.85 -4008.65 100.68 T Y 3.0 +410017 2405.44 -4008.37 145.87 T Y 3.0 +410018 2406.56 -4008.43 191.15 T Y 3.0 +410019 2406.27 -4008.84 237.65 T Y 3.0 +410020 2405.71 -4008.99 282.92 T Y 3.0 +410021 2405.24 -4008.74 328.39 T Y 3.0 +410022 2406.25 -4008.99 373.80 T Y 3.0 +410023 2405.68 -4008.99 418.46 T Y 3.0 +410024 2406.94 -4007.57 465.30 T Y 3.0 +410025 2406.75 -4007.78 510.19 T Y 3.0 +410026 2407.06 -4007.77 556.66 T Y 3.0 +410027 2406.69 -4008.49 602.99 T Y 3.0 +411000 2526.76 -3908.89 -605.02 T Y 3.0 +411001 2526.72 -3909.20 -559.36 T Y 3.0 +411002 2527.31 -3907.61 -514.06 T Y 3.0 +411003 2526.91 -3908.33 -469.27 T Y 3.0 +411004 2527.17 -3907.77 -423.61 T Y 3.0 +411005 2527.01 -3908.81 -378.16 T Y 3.0 +411006 2527.18 -3908.29 -333.21 T Y 3.0 +411007 2527.47 -3907.74 -287.69 T Y 3.0 +411008 2527.41 -3906.96 -242.09 T Y 3.0 +411009 2526.63 -3906.88 -196.63 T Y 3.0 +411010 2527.49 -3907.65 -151.23 T Y 3.0 +411011 2526.96 -3908.04 -104.95 T Y 3.0 +411012 2527.73 -3907.59 -59.24 T Y 3.0 +411013 2526.98 -3907.76 -14.48 T Y 3.0 +411014 2527.10 -3907.36 30.99 T Y 3.0 +411015 2527.08 -3908.01 76.34 T Y 3.0 +411016 2527.83 -3907.54 122.00 T Y 3.0 +411017 2527.80 -3907.11 166.93 T Y 3.0 +411018 2528.31 -3906.33 212.65 T Y 3.0 +411019 2528.31 -3907.10 258.57 T Y 3.0 +411020 2527.79 -3907.47 303.97 T Y 3.0 +411021 2527.40 -3907.63 349.70 T Y 3.0 +411022 2527.98 -3907.33 394.56 T Y 3.0 +411023 2528.18 -3907.68 440.25 T Y 3.0 +411024 2528.25 -3907.21 486.25 T Y 3.0 +411025 2528.71 -3906.60 532.33 T Y 3.0 +411026 2528.21 -3907.10 577.87 T Y 3.0 +411027 2529.45 -3906.54 623.84 T Y 3.0 +412000 2544.09 -3894.43 -627.24 T Y 3.0 +412001 2543.78 -3895.00 -582.05 T Y 3.0 +412002 2544.62 -3893.67 -536.88 T Y 3.0 +412003 2544.88 -3893.39 -490.72 T Y 3.0 +412004 2544.37 -3893.65 -444.90 T Y 3.0 +412005 2543.88 -3893.53 -399.65 T Y 3.0 +412006 2545.31 -3892.85 -354.50 T Y 3.0 +412007 2545.01 -3893.19 -309.00 T Y 3.0 +412008 2545.10 -3893.25 -262.62 T Y 3.0 +412009 2544.99 -3892.95 -217.18 T Y 3.0 +412010 2544.81 -3892.98 -172.23 T Y 3.0 +412011 2544.24 -3893.39 -126.33 T Y 3.0 +412012 2544.98 -3893.50 -81.59 T Y 3.0 +412013 2544.79 -3893.86 -36.20 T Y 3.0 +412014 2544.87 -3893.27 9.39 T Y 3.0 +412015 2544.36 -3893.04 54.66 T Y 3.0 +412016 2545.46 -3892.96 100.24 T Y 3.0 +412017 2545.24 -3893.04 145.11 T Y 3.0 +412018 2546.12 -3892.60 190.30 T Y 3.0 +412019 2545.39 -3893.06 235.70 T Y 3.0 +412020 2545.14 -3893.08 280.85 T Y 3.0 +412021 2544.22 -3892.60 327.50 T Y 3.0 +412022 2545.65 -3892.00 373.19 T Y 3.0 +412023 2545.00 -3893.22 418.10 T Y 3.0 +412024 2545.74 -3892.85 464.01 T Y 3.0 +412025 2545.74 -3892.66 509.65 T Y 3.0 +412026 2545.79 -3893.01 555.15 T Y 3.0 +412027 2546.13 -3891.94 600.70 T Y 3.0 +413000 2666.15 -3793.70 -605.24 T Y 3.0 +413001 2666.25 -3793.27 -559.70 T Y 3.0 +413002 2666.60 -3792.37 -514.36 T Y 3.0 +413003 2666.56 -3792.75 -468.57 T Y 3.0 +413004 2666.16 -3793.45 -423.29 T Y 3.0 +413005 2665.86 -3792.17 -377.90 T Y 3.0 +413006 2667.42 -3791.98 -332.21 T Y 3.0 +413007 2666.65 -3792.95 -286.65 T Y 3.0 +413008 2666.79 -3792.26 -241.00 T Y 3.0 +413009 2666.27 -3792.80 -195.56 T Y 3.0 +413010 2666.68 -3792.46 -150.63 T Y 3.0 +413011 2665.89 -3792.55 -104.95 T Y 3.0 +413012 2666.94 -3792.42 -59.63 T Y 3.0 +413013 2667.25 -3792.06 -14.51 T Y 3.0 +413014 2666.88 -3792.39 30.65 T Y 3.0 +413015 2666.78 -3792.06 75.79 T Y 3.0 +413016 2667.09 -3791.33 121.09 T Y 3.0 +413017 2666.83 -3792.26 166.99 T Y 3.0 +413018 2667.82 -3791.60 212.27 T Y 3.0 +413019 2667.50 -3791.97 258.01 T Y 3.0 +413020 2667.68 -3792.25 303.52 T Y 3.0 +413021 2667.28 -3791.86 348.48 T Y 3.0 +413022 2667.81 -3791.97 395.05 T Y 3.0 +413023 2666.99 -3792.02 439.92 T Y 3.0 +413024 2666.88 -3792.66 485.87 T Y 3.0 +413025 2667.88 -3791.80 531.06 T Y 3.0 +413026 2667.74 -3792.14 576.77 T Y 3.0 +413027 2667.58 -3791.61 622.42 T Y 3.0 +414000 2682.99 -3778.57 -628.38 T Y 3.0 +414001 2683.37 -3779.21 -582.93 T Y 3.0 +414002 2684.28 -3778.63 -537.46 T Y 3.0 +414003 2683.83 -3778.74 -490.82 T Y 3.0 +414004 2683.35 -3779.44 -445.25 T Y 3.0 +414005 2684.02 -3778.47 -399.81 T Y 3.0 +414006 2684.87 -3778.18 -354.46 T Y 3.0 +414007 2683.73 -3778.46 -308.99 T Y 3.0 +414008 2684.49 -3777.96 -263.08 T Y 3.0 +414009 2683.96 -3778.40 -217.98 T Y 3.0 +414010 2684.39 -3778.27 -172.67 T Y 3.0 +414011 2684.76 -3777.96 -127.51 T Y 3.0 +414012 2685.21 -3777.68 -81.93 T Y 3.0 +414013 2684.94 -3777.56 -36.61 T Y 3.0 +414014 2684.52 -3777.66 8.74 T Y 3.0 +414015 2684.17 -3777.93 54.63 T Y 3.0 +414016 2684.57 -3777.55 100.32 T Y 3.0 +414017 2684.99 -3777.14 145.41 T Y 3.0 +414018 2685.28 -3777.19 191.37 T Y 3.0 +414019 2684.46 -3776.66 236.53 T Y 3.0 +414020 2685.06 -3777.40 282.47 T Y 3.0 +414021 2684.40 -3777.59 327.58 T Y 3.0 +414022 2685.05 -3777.44 373.07 T Y 3.0 +414023 2685.01 -3777.09 418.68 T Y 3.0 +414024 2685.16 -3777.50 464.74 T Y 3.0 +414025 2684.92 -3777.63 509.79 T Y 3.0 +414026 2685.53 -3776.94 555.73 T Y 3.0 +414027 2684.75 -3776.63 601.01 T Y 3.0 +415000 2806.04 -3678.50 -607.89 T Y 3.0 +415001 2805.27 -3678.82 -562.13 T Y 3.0 +415002 2806.24 -3677.80 -517.26 T Y 3.0 +415003 2805.20 -3678.15 -469.50 T Y 3.0 +415004 2805.48 -3678.57 -424.40 T Y 3.0 +415005 2806.30 -3677.43 -379.05 T Y 3.0 +415006 2806.27 -3677.83 -333.23 T Y 3.0 +415007 2805.96 -3677.29 -287.92 T Y 3.0 +415008 2806.56 -3677.08 -242.56 T Y 3.0 +415009 2806.10 -3677.59 -196.84 T Y 3.0 +415010 2806.50 -3676.84 -151.57 T Y 3.0 +415011 2806.96 -3676.67 -105.64 T Y 3.0 +415012 2806.98 -3676.85 -59.91 T Y 3.0 +415013 2806.50 -3677.10 -15.37 T Y 3.0 +415014 2806.72 -3676.64 30.10 T Y 3.0 +415015 2806.51 -3676.97 75.54 T Y 3.0 +415016 2807.10 -3676.17 121.42 T Y 3.0 +415017 2806.70 -3676.63 166.99 T Y 3.0 +415018 2806.50 -3676.63 212.57 T Y 3.0 +415019 2806.89 -3676.35 257.71 T Y 3.0 +415020 2807.06 -3676.56 303.14 T Y 3.0 +415021 2806.26 -3676.51 348.58 T Y 3.0 +415022 2806.91 -3676.38 394.17 T Y 3.0 +415023 2807.18 -3676.51 439.23 T Y 3.0 +415024 2806.44 -3676.95 485.12 T Y 3.0 +415025 2806.88 -3677.02 532.39 T Y 3.0 +415026 2807.64 -3676.65 577.17 T Y 3.0 +415027 2807.15 -3675.58 623.05 T Y 3.0 +416000 2823.42 -3664.01 -628.43 T Y 3.0 +416001 2823.32 -3664.26 -583.30 T Y 3.0 +416002 2823.58 -3663.65 -537.01 T Y 3.0 +416003 2823.71 -3663.57 -491.98 T Y 3.0 +416004 2823.29 -3663.52 -446.62 T Y 3.0 +416005 2823.49 -3663.28 -401.06 T Y 3.0 +416006 2824.03 -3663.05 -355.43 T Y 3.0 +416007 2822.99 -3663.66 -310.25 T Y 3.0 +416008 2823.61 -3663.11 -263.85 T Y 3.0 +416009 2823.90 -3662.97 -218.36 T Y 3.0 +416010 2823.28 -3662.71 -173.51 T Y 3.0 +416011 2824.39 -3662.37 -128.23 T Y 3.0 +416012 2824.58 -3662.29 -82.63 T Y 3.0 +416013 2823.81 -3662.53 -37.22 T Y 3.0 +416014 2823.72 -3662.36 8.39 T Y 3.0 +416015 2824.09 -3662.33 53.46 T Y 3.0 +416016 2824.55 -3662.05 98.86 T Y 3.0 +416017 2824.01 -3662.52 143.69 T Y 3.0 +416018 2823.97 -3662.21 189.36 T Y 3.0 +416019 2824.07 -3662.18 234.86 T Y 3.0 +416020 2823.93 -3662.08 280.89 T Y 3.0 +416021 2823.61 -3662.42 326.31 T Y 3.0 +416022 2823.71 -3662.03 371.75 T Y 3.0 +416023 2824.78 -3661.76 417.56 T Y 3.0 +416024 2823.89 -3662.50 462.86 T Y 3.0 +416025 2824.10 -3662.63 508.27 T Y 3.0 +416026 2824.83 -3661.66 553.77 T Y 3.0 +416027 2825.16 -3661.36 600.30 T Y 3.0 +417000 2945.02 -3562.50 -607.57 T Y 3.0 +417001 2945.19 -3562.86 -562.49 T Y 3.0 +417002 2945.73 -3562.88 -516.97 T Y 3.0 +417003 2946.01 -3562.20 -471.07 T Y 3.0 +417004 2945.76 -3562.51 -425.48 T Y 3.0 +417005 2945.24 -3562.47 -379.92 T Y 3.0 +417006 2945.96 -3562.20 -334.27 T Y 3.0 +417007 2945.01 -3562.45 -289.28 T Y 3.0 +417008 2945.65 -3561.88 -243.43 T Y 3.0 +417009 2945.15 -3561.38 -198.24 T Y 3.0 +417010 2945.77 -3561.97 -152.85 T Y 3.0 +417011 2946.30 -3561.27 -107.93 T Y 3.0 +417012 2946.04 -3561.57 -61.96 T Y 3.0 +417013 2946.29 -3561.15 -16.35 T Y 3.0 +417014 2945.50 -3561.23 29.29 T Y 3.0 +417015 2945.82 -3561.14 74.29 T Y 3.0 +417016 2946.83 -3560.87 119.83 T Y 3.0 +417017 2946.03 -3561.29 165.58 T Y 3.0 +417018 2945.70 -3561.65 210.30 T Y 3.0 +417019 2945.49 -3561.23 256.95 T Y 3.0 +417020 2946.27 -3561.41 302.36 T Y 3.0 +417021 2946.60 -3561.51 348.09 T Y 3.0 +417022 2946.14 -3561.76 393.73 T Y 3.0 +417023 2946.81 -3561.23 439.16 T Y 3.0 +417024 2945.74 -3561.51 484.90 T Y 3.0 +417025 2946.35 -3561.46 530.30 T Y 3.0 +417026 2945.89 -3561.16 576.05 T Y 3.0 +417027 2947.37 -3560.95 622.28 T Y 3.0 +418000 2962.87 -3549.38 -629.33 T Y 3.0 +418001 2962.87 -3548.34 -583.39 T Y 3.0 +418002 2963.20 -3548.36 -537.98 T Y 3.0 +418003 2963.33 -3548.15 -492.35 T Y 3.0 +418004 2962.84 -3547.75 -446.92 T Y 3.0 +418005 2962.85 -3548.25 -401.37 T Y 3.0 +418006 2963.07 -3547.71 -356.47 T Y 3.0 +418007 2962.04 -3547.02 -310.20 T Y 3.0 +418008 2962.82 -3547.58 -264.71 T Y 3.0 +418009 2963.08 -3547.43 -219.99 T Y 3.0 +418010 2962.61 -3547.81 -174.73 T Y 3.0 +418011 2962.89 -3547.17 -128.16 T Y 3.0 +418012 2962.70 -3547.28 -82.72 T Y 3.0 +418013 2964.28 -3546.62 -37.20 T Y 3.0 +418014 2962.16 -3546.78 7.97 T Y 3.0 +418015 2963.66 -3546.83 53.04 T Y 3.0 +418016 2963.77 -3546.63 99.15 T Y 3.0 +418017 2963.38 -3547.42 143.93 T Y 3.0 +418018 2963.78 -3546.55 189.28 T Y 3.0 +418019 2962.98 -3547.59 234.62 T Y 3.0 +418020 2963.63 -3546.59 280.09 T Y 3.0 +418021 2963.78 -3546.48 325.86 T Y 3.0 +418022 2963.36 -3546.85 370.84 T Y 3.0 +418023 2963.66 -3546.92 416.35 T Y 3.0 +418024 2963.51 -3547.15 462.18 T Y 3.0 +418025 2964.60 -3546.29 507.90 T Y 3.0 +418026 2963.06 -3546.82 553.41 T Y 3.0 +418027 2964.27 -3546.36 600.00 T Y 3.0 +419000 3084.26 -3448.42 -608.70 T Y 3.0 +419001 3084.27 -3448.30 -562.70 T Y 3.0 +419002 3085.11 -3447.15 -517.01 T Y 3.0 +419003 3084.79 -3447.19 -471.54 T Y 3.0 +419004 3085.28 -3447.01 -426.22 T Y 3.0 +419005 3085.17 -3447.14 -380.84 T Y 3.0 +419006 3085.22 -3446.82 -335.48 T Y 3.0 +419007 3084.96 -3447.01 -290.10 T Y 3.0 +419008 3085.16 -3446.52 -244.75 T Y 3.0 +419009 3085.34 -3446.42 -199.06 T Y 3.0 +419010 3084.43 -3446.87 -153.38 T Y 3.0 +419011 3084.70 -3447.26 -108.16 T Y 3.0 +419012 3084.81 -3446.59 -62.55 T Y 3.0 +419013 3085.18 -3444.87 -17.25 T Y 3.0 +419014 3085.04 -3446.32 28.53 T Y 3.0 +419015 3085.89 -3445.95 73.98 T Y 3.0 +419016 3085.67 -3445.75 119.74 T Y 3.0 +419017 3085.59 -3446.20 164.79 T Y 3.0 +419018 3085.74 -3445.27 209.78 T Y 3.0 +419019 3084.85 -3446.06 255.87 T Y 3.0 +419020 3085.50 -3445.99 301.68 T Y 3.0 +419021 3085.73 -3445.81 346.98 T Y 3.0 +419022 3085.57 -3445.86 392.49 T Y 3.0 +419023 3085.32 -3446.38 437.61 T Y 3.0 +419024 3084.83 -3446.37 482.95 T Y 3.0 +419025 3085.62 -3445.84 529.24 T Y 3.0 +419026 3084.54 -3446.22 575.09 T Y 3.0 +419027 3086.14 -3445.38 620.87 T Y 3.0 +420000 3101.65 -3434.08 -631.38 T Y 3.0 +420001 3101.97 -3434.13 -584.96 T Y 3.0 +420002 3102.27 -3433.58 -539.35 T Y 3.0 +420003 3102.00 -3433.24 -494.39 T Y 3.0 +420004 3102.80 -3432.82 -448.82 T Y 3.0 +420005 3102.59 -3432.94 -402.21 T Y 3.0 +420006 3102.25 -3432.47 -356.94 T Y 3.0 +420007 3102.43 -3432.51 -310.78 T Y 3.0 +420008 3102.19 -3432.63 -266.01 T Y 3.0 +420009 3102.65 -3432.46 -220.85 T Y 3.0 +420010 3101.99 -3432.83 -175.39 T Y 3.0 +420011 3101.97 -3432.11 -130.58 T Y 3.0 +420012 3102.94 -3431.74 -84.96 T Y 3.0 +420013 3103.00 -3431.81 -39.59 T Y 3.0 +420014 3102.18 -3431.75 6.52 T Y 3.0 +420015 3103.00 -3431.80 51.70 T Y 3.0 +420016 3103.20 -3431.63 97.81 T Y 3.0 +420017 3103.03 -3431.64 142.71 T Y 3.0 +420018 3103.43 -3431.36 188.17 T Y 3.0 +420019 3102.14 -3432.14 233.86 T Y 3.0 +420020 3102.87 -3431.50 278.98 T Y 3.0 +420021 3102.47 -3431.80 324.40 T Y 3.0 +420022 3102.81 -3431.56 370.30 T Y 3.0 +420023 3103.39 -3431.17 415.58 T Y 3.0 +420024 3101.74 -3432.23 461.00 T Y 3.0 +420025 3102.81 -3431.25 507.25 T Y 3.0 +420026 3102.52 -3432.39 552.89 T Y 3.0 +420027 3103.40 -3430.87 600.47 T Y 3.0 +421000 3223.60 -3333.73 -609.39 T Y 3.0 +421001 3223.93 -3333.30 -563.43 T Y 3.0 +421002 3224.48 -3332.54 -518.23 T Y 3.0 +421003 3224.11 -3332.65 -472.97 T Y 3.0 +421004 3225.07 -3331.69 -427.56 T Y 3.0 +421005 3224.37 -3332.01 -381.25 T Y 3.0 +421006 3224.51 -3331.61 -335.53 T Y 3.0 +421007 3224.49 -3331.81 -290.28 T Y 3.0 +421008 3224.65 -3331.93 -245.38 T Y 3.0 +421009 3224.79 -3331.55 -199.66 T Y 3.0 +421010 3224.12 -3331.73 -154.55 T Y 3.0 +421011 3223.57 -3332.16 -109.08 T Y 3.0 +421012 3224.89 -3331.12 -63.87 T Y 3.0 +421013 3224.59 -3330.88 -18.04 T Y 3.0 +421014 3224.72 -3330.86 27.36 T Y 3.0 +421015 3224.80 -3331.11 72.60 T Y 3.0 +421016 3225.23 -3331.07 118.48 T Y 3.0 +421017 3225.05 -3330.77 163.82 T Y 3.0 +421018 3225.63 -3330.29 209.44 T Y 3.0 +421019 3224.29 -3330.51 254.61 T Y 3.0 +421020 3224.83 -3330.66 300.16 T Y 3.0 +421021 3224.65 -3330.72 345.22 T Y 3.0 +421022 3225.03 -3330.62 391.84 T Y 3.0 +421023 3224.95 -3330.74 437.24 T Y 3.0 +421024 3224.61 -3330.98 483.01 T Y 3.0 +421025 3224.29 -3331.46 528.26 T Y 3.0 +421026 3224.60 -3330.93 573.51 T Y 3.0 +421027 3225.42 -3330.35 621.16 T Y 3.0 +422000 3241.06 -3319.16 -631.73 T Y 3.0 +422001 3241.13 -3319.34 -586.77 T Y 3.0 +422002 3242.30 -3318.36 -541.35 T Y 3.0 +422003 3242.09 -3318.47 -496.02 T Y 3.0 +422004 3242.38 -3317.83 -449.91 T Y 3.0 +422005 3241.37 -3318.02 -404.77 T Y 3.0 +422006 3242.48 -3317.36 -359.12 T Y 3.0 +422007 3241.79 -3317.38 -313.77 T Y 3.0 +422008 3242.10 -3317.51 -267.92 T Y 3.0 +422009 3242.14 -3317.18 -222.72 T Y 3.0 +422010 3242.08 -3317.60 -177.34 T Y 3.0 +422011 3242.83 -3316.63 -131.24 T Y 3.0 +422012 3242.72 -3316.58 -86.14 T Y 3.0 +422013 3242.06 -3316.81 -40.91 T Y 3.0 +422014 3242.40 -3317.03 4.70 T Y 3.0 +422015 3242.72 -3316.93 51.10 T Y 3.0 +422016 3242.50 -3316.56 96.60 T Y 3.0 +422017 3242.42 -3316.61 141.91 T Y 3.0 +422018 3242.55 -3316.06 187.15 T Y 3.0 +422019 3242.36 -3316.34 232.68 T Y 3.0 +422020 3242.49 -3315.53 277.93 T Y 3.0 +422021 3242.23 -3316.50 324.08 T Y 3.0 +422022 3242.64 -3316.12 369.48 T Y 3.0 +422023 3242.24 -3316.53 415.41 T Y 3.0 +422024 3241.89 -3316.62 460.52 T Y 3.0 +422025 3241.65 -3316.88 506.00 T Y 3.0 +422026 3241.88 -3317.05 551.82 T Y 3.0 +422027 3242.12 -3316.32 598.19 T Y 3.0 +423000 3363.17 -3218.45 -611.29 T Y 3.0 +423001 3363.51 -3217.71 -566.27 T Y 3.0 +423002 3364.08 -3217.51 -520.66 T Y 3.0 +423003 3363.49 -3216.32 -474.54 T Y 3.0 +423004 3363.95 -3216.94 -429.04 T Y 3.0 +423005 3363.39 -3217.69 -383.36 T Y 3.0 +423006 3363.43 -3217.01 -337.82 T Y 3.0 +423007 3364.48 -3216.38 -292.05 T Y 3.0 +423008 3364.30 -3216.59 -246.83 T Y 3.0 +423009 3364.03 -3216.23 -201.60 T Y 3.0 +423010 3363.55 -3215.37 -156.34 T Y 3.0 +423011 3365.09 -3215.74 -110.92 T Y 3.0 +423012 3364.17 -3215.92 -65.46 T Y 3.0 +423013 3364.06 -3216.38 -19.92 T Y 3.0 +423014 3363.79 -3216.32 25.78 T Y 3.0 +423015 3364.44 -3215.81 72.68 T Y 3.0 +423016 3364.21 -3215.90 118.04 T Y 3.0 +423017 3363.96 -3215.33 163.50 T Y 3.0 +423018 3364.44 -3215.15 209.06 T Y 3.0 +423019 3364.39 -3215.54 254.68 T Y 3.0 +423020 3364.50 -3215.43 300.44 T Y 3.0 +423021 3364.10 -3215.22 345.77 T Y 3.0 +423022 3363.97 -3215.58 390.66 T Y 3.0 +423023 3363.65 -3215.43 436.24 T Y 3.0 +423024 3364.16 -3215.84 481.71 T Y 3.0 +423025 3363.68 -3216.15 527.34 T Y 3.0 +423026 3363.86 -3215.93 572.84 T Y 3.0 +423027 3364.07 -3215.65 619.20 T Y 3.0 +424000 3380.48 -3204.04 -629.64 T Y 3.0 +424001 3381.01 -3203.44 -584.34 T Y 3.0 +424002 3381.30 -3203.13 -538.68 T Y 3.0 +424003 3381.33 -3202.59 -492.67 T Y 3.0 +424004 3381.14 -3202.62 -447.27 T Y 3.0 +424005 3380.21 -3202.86 -402.08 T Y 3.0 +424006 3380.98 -3202.60 -356.21 T Y 3.0 +424007 3381.98 -3201.95 -310.96 T Y 3.0 +424008 3380.58 -3201.85 -265.81 T Y 3.0 +424009 3381.32 -3202.26 -220.63 T Y 3.0 +424010 3381.70 -3201.81 -175.13 T Y 3.0 +424011 3381.89 -3201.43 -129.28 T Y 3.0 +424012 3381.83 -3201.47 -84.20 T Y 3.0 +424013 3381.76 -3201.75 -39.04 T Y 3.0 +424014 3381.04 -3202.14 6.81 T Y 3.0 +424015 3382.25 -3200.92 52.28 T Y 3.0 +424016 3381.36 -3201.47 97.55 T Y 3.0 +424017 3381.89 -3200.69 142.94 T Y 3.0 +424018 3382.27 -3200.56 187.63 T Y 3.0 +424019 3381.53 -3200.89 233.88 T Y 3.0 +424020 3381.57 -3200.96 279.49 T Y 3.0 +424021 3381.56 -3200.89 324.33 T Y 3.0 +424022 3381.24 -3200.74 369.89 T Y 3.0 +424023 3380.96 -3201.37 416.25 T Y 3.0 +424024 3381.21 -3201.17 461.50 T Y 3.0 +424025 3380.65 -3201.20 506.76 T Y 3.0 +424026 3381.34 -3200.88 552.04 T Y 3.0 +424027 3381.41 -3200.82 597.79 T Y 3.0 +425000 3502.57 -3103.24 -609.19 T Y 3.0 +425001 3504.68 -3101.72 -564.29 T Y 3.0 +425002 3503.17 -3102.83 -517.36 T Y 3.0 +425003 3503.34 -3101.99 -471.93 T Y 3.0 +425004 3504.24 -3101.77 -426.50 T Y 3.0 +425005 3503.07 -3102.21 -381.23 T Y 3.0 +425006 3503.54 -3101.49 -336.36 T Y 3.0 +425007 3504.52 -3100.63 -290.91 T Y 3.0 +425008 3504.09 -3101.68 -244.93 T Y 3.0 +425009 3503.74 -3100.93 -199.49 T Y 3.0 +425010 3504.39 -3100.78 -154.30 T Y 3.0 +425011 3505.05 -3100.19 -108.79 T Y 3.0 +425012 3503.88 -3101.06 -63.40 T Y 3.0 +425013 3503.86 -3101.16 -18.78 T Y 3.0 +425014 3502.67 -3100.66 27.06 T Y 3.0 +425015 3504.57 -3099.73 72.85 T Y 3.0 +425016 3504.15 -3100.95 117.76 T Y 3.0 +425017 3504.23 -3100.11 163.89 T Y 3.0 +425018 3504.50 -3098.82 208.74 T Y 3.0 +425019 3503.59 -3100.22 255.02 T Y 3.0 +425020 3504.16 -3099.69 300.95 T Y 3.0 +425021 3504.45 -3099.65 346.00 T Y 3.0 +425022 3503.54 -3100.29 390.91 T Y 3.0 +425023 3503.61 -3100.13 436.49 T Y 3.0 +425024 3503.58 -3099.83 481.33 T Y 3.0 +425025 3503.60 -3100.36 526.71 T Y 3.0 +425026 3503.88 -3099.94 572.50 T Y 3.0 +425027 3503.56 -3100.25 618.47 T Y 3.0 diff --git a/PHOS/data/Survey_922320_PHOS.txt b/PHOS/data/Survey_922320_PHOS.txt index d34894afa7e..ba13321bcdc 100644 --- a/PHOS/data/Survey_922320_PHOS.txt +++ b/PHOS/data/Survey_922320_PHOS.txt @@ -1,479 +1,479 @@ -> Title: -PHOS MODULE Position 2 (Production 2), MEASUREMENT AFTER FINAL INSTALLATION -> Date: -19/05/2008 -> Subdetector: -PHOS -> Report URL: -https://edms.cern.ch/document/922320 -> Version: -1 -> General Observations: -Measurement of 19/05/2008 is given with prefix T1_ -Transformed measurement results of 27/02/2008 is given with prefix T2_ -Point Types: M(easured),T(ransformed), R(eference) -> Coordinate System: -ALICEPH -> Units: -mm -> Nr Columns: -7 -> Column Names: -Point Name,XLOCAL,YLOCAL,ZLOCAL,Point Type,Target Used,Precision(mm) -> Data: -T1_5000 -678.5 -4314.8 -835.5 R Y 1.0 -T1_5001 721.8 -4309.6 -825.9 R Y 1.0 -T1_5002 712.4 -4312.4 804.9 R Y 1.0 -T1_5003 -688.3 -4313.4 804.6 R Y 1.0 -T2_5000 -677.9 -4314.1 -832.0 T Y 1.0 -T2_5001 719.7 -4310.4 -823.2 T Y 1.0 -T2_5002 712.4 -4311.7 803.9 T Y 1.0 -T2_5003 -686.7 -4314.2 799.3 T Y 1.0 -T2_10000 -697.5 -4472.6 -640.5 T Y 1.0 -T2_10027 -700.5 -4471.9 585.4 T Y 1.0 -T2_25000 727.2 -4469.2 -614.5 T Y 1.0 -T2_25027 722.6 -4470.3 612.4 T Y 1.0 -T2_10001 -697.5 -4472.3 -595.4 T Y 1.0 -T2_10002 -697.4 -4472.5 -550.0 T Y 1.0 -T2_10003 -697.1 -4472.2 -504.4 T Y 1.0 -T2_10004 -697.5 -4472.2 -458.8 T Y 1.0 -T2_10005 -698.3 -4472.3 -413.3 T Y 1.0 -T2_10006 -698.4 -4472.6 -367.9 T Y 1.0 -T2_10007 -697.8 -4472.3 -322.9 T Y 1.0 -T2_10008 -698.5 -4472.3 -277.7 T Y 1.0 -T2_10009 -698.5 -4472.2 -232.5 T Y 1.0 -T2_10010 -698.3 -4471.4 -186.7 T Y 1.0 -T2_10011 -698.5 -4472.1 -142.0 T Y 1.0 -T2_10012 -698.3 -4472.2 -97.0 T Y 1.0 -T2_10013 -699.3 -4472.4 -50.5 T Y 1.0 -T2_10014 -699.9 -4471.8 -5.2 T Y 1.0 -T2_10015 -700.4 -4471.1 40.9 T Y 1.0 -T2_10016 -700.2 -4472.2 86.1 T Y 1.0 -T2_10017 -698.4 -4471.8 131.7 T Y 1.0 -T2_10018 -700.9 -4471.6 177.5 T Y 1.0 -T2_10019 -701.4 -4472.0 223.1 T Y 1.0 -T2_10020 -700.5 -4471.8 268.6 T Y 1.0 -T2_10021 -700.5 -4472.0 313.4 T Y 1.0 -T2_10022 -701.2 -4471.9 358.9 T Y 1.0 -T2_10023 -700.8 -4471.8 404.0 T Y 1.0 -T2_10024 -700.0 -4471.5 449.4 T Y 1.0 -T2_10025 -700.2 -4471.3 494.5 T Y 1.0 -T2_10026 -700.3 -4471.5 540.9 T Y 1.0 -T2_11000 -539.0 -4472.2 -618.1 T Y 1.0 -T2_11001 -538.6 -4472.0 -572.7 T Y 1.0 -T2_11002 -539.4 -4471.8 -526.7 T Y 1.0 -T2_11003 -538.3 -4471.6 -482.1 T Y 1.0 -T2_11004 -539.1 -4471.8 -436.6 T Y 1.0 -T2_11005 -539.4 -4472.0 -391.1 T Y 1.0 -T2_11006 -539.9 -4471.8 -346.2 T Y 1.0 -T2_11007 -539.7 -4471.7 -300.4 T Y 1.0 -T2_11008 -539.9 -4471.2 -255.6 T Y 1.0 -T2_11009 -540.3 -4471.8 -209.6 T Y 1.0 -T2_11010 -540.3 -4471.8 -164.4 T Y 1.0 -T2_11011 -540.5 -4471.4 -119.7 T Y 1.0 -T2_11012 -540.7 -4471.4 -74.2 T Y 1.0 -T2_11013 -541.3 -4471.5 -27.9 T Y 1.0 -T2_11014 -540.6 -4471.6 17.5 T Y 1.0 -T2_11015 -540.9 -4471.0 62.7 T Y 1.0 -T2_11016 -541.0 -4471.7 108.0 T Y 1.0 -T2_11017 -541.2 -4471.5 154.1 T Y 1.0 -T2_11018 -542.1 -4471.5 199.4 T Y 1.0 -T2_11019 -543.1 -4471.4 245.1 T Y 1.0 -T2_11020 -542.0 -4471.4 290.8 T Y 1.0 -T2_11021 -541.4 -4471.2 336.3 T Y 1.0 -T2_11022 -542.1 -4471.4 381.3 T Y 1.0 -T2_11023 -542.3 -4471.4 426.2 T Y 1.0 -T2_11024 -542.2 -4471.4 471.4 T Y 1.0 -T2_11025 -542.3 -4471.5 517.0 T Y 1.0 -T2_11026 -543.0 -4471.6 562.4 T Y 1.0 -T2_11027 -542.7 -4471.9 607.2 T Y 1.0 -T2_12000 -515.6 -4472.0 -640.0 T Y 1.0 -T2_12001 -515.4 -4471.8 -594.5 T Y 1.0 -T2_12002 -517.0 -4472.0 -549.2 T Y 1.0 -T2_12003 -515.5 -4471.8 -504.7 T Y 1.0 -T2_12004 -516.2 -4471.9 -458.1 T Y 1.0 -T2_12005 -516.3 -4471.1 -411.6 T Y 1.0 -T2_12006 -517.3 -4471.5 -366.5 T Y 1.0 -T2_12007 -516.4 -4471.6 -320.4 T Y 1.0 -T2_12008 -517.0 -4472.0 -276.1 T Y 1.0 -T2_12009 -517.5 -4471.4 -230.5 T Y 1.0 -T2_12010 -516.9 -4471.0 -185.3 T Y 1.0 -T2_12011 -517.7 -4471.5 -140.0 T Y 1.0 -T2_12012 -517.8 -4471.4 -95.0 T Y 1.0 -T2_12013 -518.5 -4471.6 -49.6 T Y 1.0 -T2_12014 -518.3 -4471.3 -4.3 T Y 1.0 -T2_12015 -518.5 -4471.5 41.5 T Y 1.0 -T2_12016 -518.2 -4471.1 86.6 T Y 1.0 -T2_12017 -518.4 -4471.7 132.4 T Y 1.0 -T2_12018 -518.5 -4471.3 178.8 T Y 1.0 -T2_12019 -520.4 -4470.7 224.1 T Y 1.0 -T2_12020 -518.6 -4471.5 269.3 T Y 1.0 -T2_12021 -518.7 -4471.0 314.8 T Y 1.0 -T2_12022 -518.5 -4471.5 359.9 T Y 1.0 -T2_12023 -519.3 -4471.6 405.5 T Y 1.0 -T2_12024 -519.0 -4471.5 450.7 T Y 1.0 -T2_12025 -519.3 -4471.6 496.3 T Y 1.0 -T2_12026 -520.0 -4471.4 541.4 T Y 1.0 -T2_12027 -520.1 -4470.4 588.4 T Y 1.0 -T2_13000 -357.8 -4471.5 -619.3 T Y 1.0 -T2_13001 -357.8 -4470.4 -573.5 T Y 1.0 -T2_13002 -358.0 -4470.6 -528.3 T Y 1.0 -T2_13003 -357.9 -4471.0 -480.4 T Y 1.0 -T2_13004 -357.8 -4471.5 -435.6 T Y 1.0 -T2_13005 -358.2 -4471.4 -389.7 T Y 1.0 -T2_13006 -358.9 -4471.4 -344.9 T Y 1.0 -T2_13007 -358.8 -4470.9 -299.3 T Y 1.0 -T2_13008 -358.9 -4471.1 -253.9 T Y 1.0 -T2_13009 -359.2 -4471.3 -208.9 T Y 1.0 -T2_13010 -358.6 -4471.2 -164.1 T Y 1.0 -T2_13011 -360.2 -4471.3 -118.3 T Y 1.0 -T2_13012 -360.3 -4471.2 -72.8 T Y 1.0 -T2_13013 -359.8 -4471.2 -27.1 T Y 1.0 -T2_13014 -360.1 -4471.1 18.2 T Y 1.0 -T2_13015 -360.1 -4471.2 63.2 T Y 1.0 -T2_13016 -359.8 -4471.2 108.5 T Y 1.0 -T2_13017 -360.4 -4471.0 154.1 T Y 1.0 -T2_13018 -360.1 -4468.2 200.1 T Y 1.0 -T2_13019 -362.8 -4471.2 245.4 T Y 1.0 -T2_13020 -360.4 -4471.2 290.5 T Y 1.0 -T2_13021 -360.7 -4471.3 336.3 T Y 1.0 -T2_13022 -360.8 -4470.9 381.8 T Y 1.0 -T2_13023 -361.5 -4471.2 427.1 T Y 1.0 -T2_13024 -361.3 -4471.3 472.2 T Y 1.0 -T2_13025 -361.5 -4470.8 517.8 T Y 1.0 -T2_13026 -361.3 -4470.6 563.1 T Y 1.0 -T2_13027 -361.9 -4470.7 610.7 T Y 1.0 -T2_14000 -334.7 -4471.9 -641.1 T Y 1.0 -T2_14001 -335.2 -4471.5 -595.6 T Y 1.0 -T2_14002 -334.9 -4471.2 -550.2 T Y 1.0 -T2_14003 -335.4 -4471.8 -505.4 T Y 1.0 -T2_14004 -335.1 -4471.4 -459.5 T Y 1.0 -T2_14005 -335.6 -4470.9 -413.3 T Y 1.0 -T2_14006 -336.0 -4471.1 -367.3 T Y 1.0 -T2_14007 -336.0 -4471.1 -321.9 T Y 1.0 -T2_14008 -336.3 -4471.3 -277.0 T Y 1.0 -T2_14009 -336.3 -4471.2 -231.8 T Y 1.0 -T2_14010 -336.4 -4471.3 -186.3 T Y 1.0 -T2_14011 -337.1 -4471.5 -140.8 T Y 1.0 -T2_14012 -336.9 -4470.9 -96.2 T Y 1.0 -T2_14013 -336.9 -4469.9 -49.4 T Y 1.0 -T2_14014 -337.1 -4471.3 -3.9 T Y 1.0 -T2_14015 -337.6 -4471.2 41.4 T Y 1.0 -T2_14016 -337.6 -4471.2 87.3 T Y 1.0 -T2_14017 -337.9 -4471.4 132.5 T Y 1.0 -T2_14018 -337.7 -4471.1 177.7 T Y 1.0 -T2_14019 -337.7 -4470.5 222.7 T Y 1.0 -T2_14020 -338.0 -4471.0 268.0 T Y 1.0 -T2_14021 -338.1 -4471.1 313.1 T Y 1.0 -T2_14022 -338.4 -4471.1 359.8 T Y 1.0 -T2_14023 -339.0 -4470.8 405.1 T Y 1.0 -T2_14024 -338.9 -4471.4 450.3 T Y 1.0 -T2_14025 -338.9 -4470.2 496.2 T Y 1.0 -T2_14026 -338.7 -4471.6 541.7 T Y 1.0 -T2_14027 -338.8 -4470.7 588.3 T Y 1.0 -T2_15000 -176.8 -4471.7 -618.9 T Y 1.0 -T2_15001 -176.9 -4471.0 -573.4 T Y 1.0 -T2_15002 -177.2 -4470.4 -528.6 T Y 1.0 -T2_15003 -177.1 -4471.3 -482.6 T Y 1.0 -T2_15004 -177.1 -4471.3 -437.8 T Y 1.0 -T2_15005 -177.5 -4471.2 -391.7 T Y 1.0 -T2_15006 -178.4 -4470.3 -346.1 T Y 1.0 -T2_15007 -177.5 -4470.7 -300.8 T Y 1.0 -T2_15008 -177.8 -4471.2 -255.3 T Y 1.0 -T2_15009 -178.4 -4471.2 -209.8 T Y 1.0 -T2_15010 -178.4 -4470.5 -164.4 T Y 1.0 -T2_15011 -178.3 -4471.1 -119.1 T Y 1.0 -T2_15012 -178.6 -4471.1 -73.6 T Y 1.0 -T2_15013 -178.8 -4470.7 -27.3 T Y 1.0 -T2_15014 -179.2 -4470.2 18.5 T Y 1.0 -T2_15015 -179.3 -4470.9 64.2 T Y 1.0 -T2_15016 -179.1 -4470.7 108.7 T Y 1.0 -T2_15017 -179.6 -4470.9 154.0 T Y 1.0 -T2_15018 -179.3 -4471.1 199.1 T Y 1.0 -T2_15019 -179.7 -4470.5 244.5 T Y 1.0 -T2_15020 -179.8 -4471.2 289.8 T Y 1.0 -T2_15021 -179.8 -4470.3 335.4 T Y 1.0 -T2_15022 -180.3 -4470.9 381.6 T Y 1.0 -T2_15023 -180.0 -4471.1 426.9 T Y 1.0 -T2_15024 -180.5 -4470.7 472.5 T Y 1.0 -T2_15025 -180.6 -4471.3 517.7 T Y 1.0 -T2_15026 -181.0 -4471.1 563.6 T Y 1.0 -T2_15027 -180.9 -4471.3 609.5 T Y 1.0 -T2_16000 -153.3 -4471.8 -639.9 T Y 1.0 -T2_16001 -154.2 -4471.5 -594.7 T Y 1.0 -T2_16002 -153.5 -4471.3 -548.8 T Y 1.0 -T2_16003 -154.1 -4471.0 -503.2 T Y 1.0 -T2_16004 -154.6 -4471.1 -458.0 T Y 1.0 -T2_16005 -153.8 -4471.3 -412.6 T Y 1.0 -T2_16006 -155.0 -4471.0 -367.1 T Y 1.0 -T2_16007 -155.3 -4471.0 -321.9 T Y 1.0 -T2_16008 -154.7 -4470.3 -276.4 T Y 1.0 -T2_16009 -155.6 -4471.2 -230.1 T Y 1.0 -T2_16010 -155.4 -4470.8 -184.7 T Y 1.0 -T2_16011 -156.3 -4471.0 -139.1 T Y 1.0 -T2_16012 -156.6 -4470.5 -93.9 T Y 1.0 -T2_16013 -156.2 -4471.2 -48.4 T Y 1.0 -T2_16014 -156.0 -4470.8 -3.1 T Y 1.0 -T2_16015 -156.5 -4470.5 42.8 T Y 1.0 -T2_16016 -156.2 -4470.2 87.9 T Y 1.0 -T2_16017 -157.2 -4471.2 133.5 T Y 1.0 -T2_16018 -156.7 -4471.0 178.7 T Y 1.0 -T2_16019 -157.0 -4470.1 224.7 T Y 1.0 -T2_16020 -156.9 -4471.0 269.6 T Y 1.0 -T2_16021 -156.8 -4471.1 315.0 T Y 1.0 -T2_16022 -158.0 -4471.2 360.1 T Y 1.0 -T2_16023 -157.8 -4471.1 405.1 T Y 1.0 -T2_16024 -157.4 -4470.6 451.1 T Y 1.0 -T2_16025 -157.7 -4470.3 497.4 T Y 1.0 -T2_16026 -158.3 -4471.3 542.7 T Y 1.0 -T2_16027 -158.0 -4470.6 588.6 T Y 1.0 -T2_17000 4.5 -4471.4 -617.6 T Y 1.0 -T2_17001 3.7 -4471.2 -572.0 T Y 1.0 -T2_17002 4.0 -4470.7 -526.8 T Y 1.0 -T2_17003 3.3 -4470.7 -481.3 T Y 1.0 -T2_17004 3.4 -4471.1 -435.0 T Y 1.0 -T2_17005 4.2 -4471.2 -388.8 T Y 1.0 -T2_17006 3.1 -4471.1 -343.5 T Y 1.0 -T2_17007 3.3 -4470.7 -298.3 T Y 1.0 -T2_17008 2.4 -4470.8 -252.7 T Y 1.0 -T2_17009 2.6 -4470.7 -207.4 T Y 1.0 -T2_17010 2.1 -4470.7 -161.2 T Y 1.0 -T2_17011 2.4 -4471.0 -116.2 T Y 1.0 -T2_17012 2.0 -4470.8 -70.4 T Y 1.0 -T2_17013 2.7 -4470.8 -25.6 T Y 1.0 -T2_17014 1.9 -4470.6 20.4 T Y 1.0 -T2_17015 1.4 -4470.4 65.6 T Y 1.0 -T2_17016 2.3 -4470.5 110.3 T Y 1.0 -T2_17017 1.6 -4470.6 156.0 T Y 1.0 -T2_17018 0.8 -4470.8 201.5 T Y 1.0 -T2_17019 1.5 -4470.7 246.7 T Y 1.0 -T2_17020 1.6 -4471.0 292.1 T Y 1.0 -T2_17021 1.0 -4470.5 337.3 T Y 1.0 -T2_17022 -0.3 -4470.4 382.3 T Y 1.0 -T2_17023 0.0 -4470.9 427.7 T Y 1.0 -T2_17024 0.5 -4470.7 473.7 T Y 1.0 -T2_17025 0.1 -4471.3 519.2 T Y 1.0 -T2_17026 0.2 -4471.1 564.6 T Y 1.0 -T2_17027 -0.1 -4471.3 610.4 T Y 1.0 -T2_18000 27.5 -4470.4 -640.1 T Y 1.0 -T2_18001 27.1 -4471.3 -595.2 T Y 1.0 -T2_18002 26.4 -4470.8 -548.4 T Y 1.0 -T2_18003 26.4 -4470.9 -502.6 T Y 1.0 -T2_18004 25.9 -4470.7 -457.5 T Y 1.0 -T2_18005 26.9 -4470.3 -411.9 T Y 1.0 -T2_18006 26.2 -4471.0 -366.6 T Y 1.0 -T2_18007 25.7 -4470.4 -321.5 T Y 1.0 -T2_18008 25.8 -4471.1 -275.7 T Y 1.0 -T2_18009 25.3 -4470.9 -229.4 T Y 1.0 -T2_18010 24.9 -4470.6 -184.1 T Y 1.0 -T2_18011 25.0 -4471.1 -138.9 T Y 1.0 -T2_18012 24.9 -4470.7 -93.6 T Y 1.0 -T2_18013 -697.5 -4472.6 -640.5 T Y 1.0 -T2_18014 24.9 -4470.9 -2.9 T Y 1.0 -T2_18015 24.1 -4470.5 42.2 T Y 1.0 -T2_18016 24.5 -4470.8 87.5 T Y 1.0 -T2_18017 24.7 -4470.9 133.2 T Y 1.0 -T2_18018 23.9 -4470.8 178.4 T Y 1.0 -T2_18019 23.7 -4470.8 224.0 T Y 1.0 -T2_18020 24.7 -4471.0 269.0 T Y 1.0 -T2_18021 23.6 -4471.1 314.3 T Y 1.0 -T2_18022 23.6 -4470.6 359.7 T Y 1.0 -T2_18023 22.6 -4471.1 404.4 T Y 1.0 -T2_18024 23.5 -4471.1 450.3 T Y 1.0 -T2_18025 23.0 -4471.2 495.8 T Y 1.0 -T2_18026 22.9 -4471.1 540.8 T Y 1.0 -T2_18027 22.7 -4470.8 588.2 T Y 1.0 -T2_19000 185.4 -4470.7 -617.8 T Y 1.0 -T2_19001 185.1 -4470.7 -572.6 T Y 1.0 -T2_19002 185.0 -4470.7 -526.3 T Y 1.0 -T2_19003 184.4 -4470.8 -480.5 T Y 1.0 -T2_19004 183.7 -4470.5 -433.1 T Y 1.0 -T2_19005 184.5 -4470.0 -388.2 T Y 1.0 -T2_19006 184.6 -4470.3 -343.2 T Y 1.0 -T2_19007 183.6 -4470.7 -298.4 T Y 1.0 -T2_19008 183.6 -4470.6 -253.1 T Y 1.0 -T2_19009 182.9 -4470.5 -207.2 T Y 1.0 -T2_19010 183.5 -4470.4 -162.2 T Y 1.0 -T2_19011 183.7 -4470.1 -116.7 T Y 1.0 -T2_19012 183.6 -4470.2 -71.1 T Y 1.0 -T2_19013 183.2 -4470.2 -25.4 T Y 1.0 -T2_19014 183.1 -4470.7 19.7 T Y 1.0 -T2_19015 183.0 -4469.8 64.7 T Y 1.0 -T2_19016 182.5 -4470.3 110.1 T Y 1.0 -T2_19017 183.1 -4470.6 155.9 T Y 1.0 -T2_19018 181.7 -4470.5 200.7 T Y 1.0 -T2_19019 181.8 -4470.5 246.1 T Y 1.0 -T2_19020 182.3 -4470.8 291.1 T Y 1.0 -T2_19021 181.3 -4470.4 336.7 T Y 1.0 -T2_19022 181.5 -4470.8 381.9 T Y 1.0 -T2_19023 181.4 -4470.3 427.6 T Y 1.0 -T2_19024 181.1 -4470.7 472.5 T Y 1.0 -T2_19025 181.4 -4470.8 517.9 T Y 1.0 -T2_19026 180.0 -4471.0 563.3 T Y 1.0 -T2_19027 180.7 -4470.9 610.7 T Y 1.0 -T2_20000 208.3 -4470.6 -639.0 T Y 1.0 -T2_20001 208.2 -4469.6 -592.9 T Y 1.0 -T2_20002 207.6 -4470.4 -546.9 T Y 1.0 -T2_20003 206.7 -4470.5 -501.9 T Y 1.0 -T2_20004 207.0 -4470.3 -456.0 T Y 1.0 -T2_20005 207.7 -4470.6 -410.7 T Y 1.0 -T2_20006 206.9 -4469.9 -365.5 T Y 1.0 -T2_20007 206.6 -4470.4 -319.9 T Y 1.0 -T2_20008 206.6 -4470.3 -274.1 T Y 1.0 -T2_20009 206.3 -4470.3 -229.0 T Y 1.0 -T2_20010 206.3 -4470.3 -183.4 T Y 1.0 -T2_20011 206.4 -4469.7 -137.8 T Y 1.0 -T2_20012 206.3 -4470.0 -92.8 T Y 1.0 -T2_20013 205.8 -4470.2 -47.4 T Y 1.0 -T2_20014 205.8 -4470.4 -2.2 T Y 1.0 -T2_20015 206.0 -4470.2 43.5 T Y 1.0 -T2_20016 205.5 -4470.2 88.8 T Y 1.0 -T2_20017 205.7 -4470.4 134.5 T Y 1.0 -T2_20018 204.9 -4470.0 181.1 T Y 1.0 -T2_20019 205.0 -4469.6 226.3 T Y 1.0 -T2_20020 204.8 -4470.5 271.0 T Y 1.0 -T2_20021 204.6 -4470.5 316.8 T Y 1.0 -T2_20022 204.2 -4471.1 361.9 T Y 1.0 -T2_20023 204.0 -4470.5 407.4 T Y 1.0 -T2_20024 203.5 -4470.6 452.3 T Y 1.0 -T2_20025 204.0 -4470.6 498.3 T Y 1.0 -T2_20026 203.3 -4470.3 544.2 T Y 1.0 -T2_20027 203.8 -4470.7 588.7 T Y 1.0 -T2_21000 365.8 -4470.3 -616.8 T Y 1.0 -T2_21001 366.0 -4470.0 -570.2 T Y 1.0 -T2_21002 365.4 -4469.9 -524.6 T Y 1.0 -T2_21003 364.8 -4469.9 -479.1 T Y 1.0 -T2_21004 365.4 -4470.4 -433.8 T Y 1.0 -T2_21005 365.7 -4470.5 -388.5 T Y 1.0 -T2_21006 365.2 -4470.4 -343.3 T Y 1.0 -T2_21007 364.0 -4469.6 -297.6 T Y 1.0 -T2_21008 365.2 -4470.0 -252.3 T Y 1.0 -T2_21009 364.5 -4470.1 -207.1 T Y 1.0 -T2_21010 364.1 -4470.0 -161.2 T Y 1.0 -T2_21011 363.9 -4470.2 -116.4 T Y 1.0 -T2_21012 364.5 -4469.9 -70.7 T Y 1.0 -T2_21013 363.8 -4470.3 -25.3 T Y 1.0 -T2_21014 364.1 -4470.5 20.5 T Y 1.0 -T2_21015 363.8 -4470.3 65.4 T Y 1.0 -T2_21016 363.3 -4470.2 110.6 T Y 1.0 -T2_21017 363.1 -4469.7 156.3 T Y 1.0 -T2_21018 363.1 -4470.4 202.7 T Y 1.0 -T2_21019 363.2 -4470.2 248.2 T Y 1.0 -T2_21020 362.2 -4470.3 293.4 T Y 1.0 -T2_21021 362.4 -4470.3 338.5 T Y 1.0 -T2_21022 362.3 -4470.8 384.1 T Y 1.0 -T2_21023 362.3 -4470.3 428.9 T Y 1.0 -T2_21024 362.3 -4470.5 474.3 T Y 1.0 -T2_21025 362.3 -4470.7 520.5 T Y 1.0 -T2_21026 361.2 -4470.4 565.7 T Y 1.0 -T2_21027 361.7 -4470.5 610.7 T Y 1.0 -T2_22000 388.5 -4470.4 -639.0 T Y 1.0 -T2_22001 388.8 -4469.9 -592.6 T Y 1.0 -T2_22002 388.4 -4470.0 -547.2 T Y 1.0 -T2_22003 388.5 -4469.5 -501.9 T Y 1.0 -T2_22004 388.3 -4470.0 -456.0 T Y 1.0 -T2_22005 388.2 -4469.9 -410.6 T Y 1.0 -T2_22006 388.0 -4469.9 -365.1 T Y 1.0 -T2_22007 386.7 -4470.0 -319.7 T Y 1.0 -T2_22008 387.7 -4470.0 -274.2 T Y 1.0 -T2_22009 387.8 -4470.0 -229.0 T Y 1.0 -T2_22010 388.0 -4470.1 -183.6 T Y 1.0 -T2_22011 387.4 -4469.9 -138.4 T Y 1.0 -T2_22012 387.3 -4469.9 -92.9 T Y 1.0 -T2_22013 386.5 -4470.2 -47.3 T Y 1.0 -T2_22014 387.9 -4470.3 -2.5 T Y 1.0 -T2_22015 386.6 -4470.1 42.6 T Y 1.0 -T2_22016 386.3 -4469.9 89.6 T Y 1.0 -T2_22017 385.7 -4469.9 135.1 T Y 1.0 -T2_22018 386.0 -4469.8 179.8 T Y 1.0 -T2_22019 386.7 -4470.0 225.1 T Y 1.0 -T2_22020 385.5 -4470.3 270.3 T Y 1.0 -T2_22021 385.3 -4470.1 315.6 T Y 1.0 -T2_22022 385.5 -4470.5 360.9 T Y 1.0 -T2_22023 385.1 -4470.3 406.4 T Y 1.0 -T2_22024 384.7 -4470.0 451.4 T Y 1.0 -T2_22025 384.7 -4470.4 496.7 T Y 1.0 -T2_22026 384.2 -4470.3 542.8 T Y 1.0 -T2_22027 384.1 -4470.6 589.1 T Y 1.0 -T2_23000 547.0 -4469.7 -615.7 T Y 1.0 -T2_23001 546.5 -4469.8 -569.9 T Y 1.0 -T2_23002 546.6 -4469.4 -524.5 T Y 1.0 -T2_23003 546.2 -4468.5 -478.9 T Y 1.0 -T2_23004 546.8 -4470.1 -433.1 T Y 1.0 -T2_23005 546.2 -4469.8 -387.7 T Y 1.0 -T2_23006 546.1 -4469.9 -342.5 T Y 1.0 -T2_23007 544.6 -4470.0 -296.5 T Y 1.0 -T2_23008 545.7 -4469.9 -251.7 T Y 1.0 -T2_23009 545.5 -4470.1 -206.5 T Y 1.0 -T2_23010 546.1 -4469.6 -161.1 T Y 1.0 -T2_23011 545.6 -4469.8 -115.4 T Y 1.0 -T2_23012 545.1 -4469.5 -70.3 T Y 1.0 -T2_23013 545.2 -4469.9 -25.1 T Y 1.0 -T2_23014 546.8 -4469.5 20.0 T Y 1.0 -T2_23015 545.0 -4469.9 65.8 T Y 1.0 -T2_23016 544.5 -4469.9 112.2 T Y 1.0 -T2_23017 544.7 -4469.9 157.2 T Y 1.0 -T2_23018 544.0 -4469.9 202.1 T Y 1.0 -T2_23019 545.0 -4469.5 247.6 T Y 1.0 -T2_23020 543.7 -4470.3 293.4 T Y 1.0 -T2_23021 543.3 -4469.9 338.5 T Y 1.0 -T2_23022 542.8 -4469.3 383.8 T Y 1.0 -T2_23023 543.2 -4470.1 429.2 T Y 1.0 -T2_23024 542.7 -4470.1 474.7 T Y 1.0 -T2_23025 542.9 -4470.1 520.0 T Y 1.0 -T2_23026 542.8 -4470.2 566.1 T Y 1.0 -T2_23027 541.6 -4470.3 612.1 T Y 1.0 -T2_24000 569.8 -4469.5 -637.1 T Y 1.0 -T2_24001 569.9 -4469.7 -591.9 T Y 1.0 -T2_24002 569.2 -4469.4 -547.3 T Y 1.0 -T2_24003 569.3 -4469.7 -501.7 T Y 1.0 -T2_24004 569.3 -4469.7 -455.7 T Y 1.0 -T2_24005 569.8 -4469.2 -410.6 T Y 1.0 -T2_24006 568.9 -4470.1 -364.8 T Y 1.0 -T2_24007 567.5 -4469.7 -319.8 T Y 1.0 -T2_24008 569.2 -4469.2 -274.6 T Y 1.0 -T2_24009 568.6 -4469.7 -229.0 T Y 1.0 -T2_24010 569.6 -4469.5 -183.3 T Y 1.0 -T2_24011 568.5 -4469.8 -138.2 T Y 1.0 -T2_24012 569.2 -4469.9 -92.8 T Y 1.0 -T2_24013 569.1 -4470.0 -46.5 T Y 1.0 -T2_24014 569.3 -4469.8 -1.5 T Y 1.0 -T2_24015 568.2 -4469.9 44.0 T Y 1.0 -T2_24016 568.1 -4469.8 89.1 T Y 1.0 -T2_24017 567.8 -4469.8 135.1 T Y 1.0 -T2_24018 567.8 -4469.9 180.0 T Y 1.0 -T2_24019 568.4 -4469.0 225.1 T Y 1.0 -T2_24020 567.6 -4467.7 270.8 T Y 1.0 -T2_24021 566.7 -4470.1 316.0 T Y 1.0 -T2_24022 566.2 -4469.8 361.7 T Y 1.0 -T2_24023 566.3 -4470.1 407.5 T Y 1.0 -T2_24024 565.6 -4470.0 452.1 T Y 1.0 -T2_24025 566.3 -4469.7 497.8 T Y 1.0 -T2_24026 565.6 -4469.9 543.7 T Y 1.0 -T2_24027 564.6 -4470.1 589.2 T Y 1.0 -T2_25001 727.5 -4469.5 -569.0 T Y 1.0 -T2_25002 726.7 -4469.5 -523.7 T Y 1.0 -T2_25003 727.5 -4469.8 -478.8 T Y 1.0 -T2_25004 727.0 -4469.5 -432.8 T Y 1.0 -T2_25005 727.2 -4469.4 -387.4 T Y 1.0 -T2_25006 726.7 -4469.7 -342.3 T Y 1.0 -T2_25007 724.4 -4469.5 -296.6 T Y 1.0 -T2_25008 726.9 -4469.5 -250.9 T Y 1.0 -T2_25009 726.8 -4469.1 -205.7 T Y 1.0 -T2_25010 727.7 -4470.1 -159.9 T Y 1.0 -T2_25011 726.2 -4469.4 -114.2 T Y 1.0 -T2_25012 726.5 -4470.0 -69.1 T Y 1.0 -T2_25013 726.9 -4470.2 -23.8 T Y 1.0 -T2_25014 726.3 -4469.9 21.5 T Y 1.0 -T2_25015 726.2 -4470.3 66.8 T Y 1.0 -T2_25016 726.0 -4469.7 110.3 T Y 1.0 -T2_25017 726.6 -4470.0 158.1 T Y 1.0 -T2_25018 725.2 -4469.3 203.0 T Y 1.0 -T2_25019 726.2 -4469.4 248.6 T Y 1.0 -T2_25020 726.2 -4469.5 293.7 T Y 1.0 -T2_25021 724.6 -4469.2 339.8 T Y 1.0 -T2_25022 723.6 -4470.1 385.0 T Y 1.0 -T2_25023 723.7 -4469.7 430.6 T Y 1.0 -T2_25024 723.9 -4469.6 476.0 T Y 1.0 -T2_25025 723.2 -4468.7 522.0 T Y 1.0 +> Title: +PHOS MODULE Position 2 (Production 2), MEASUREMENT AFTER FINAL INSTALLATION +> Date: +19/05/2008 +> Subdetector: +PHOS +> Report URL: +https://edms.cern.ch/document/922320 +> Version: +1 +> General Observations: +Measurement of 19/05/2008 is given with prefix T1_ +Transformed measurement results of 27/02/2008 is given with prefix T2_ +Point Types: M(easured),T(ransformed), R(eference) +> Coordinate System: +ALICEPH +> Units: +mm +> Nr Columns: +7 +> Column Names: +Point Name,XLOCAL,YLOCAL,ZLOCAL,Point Type,Target Used,Precision(mm) +> Data: +T1_5000 -678.5 -4314.8 -835.5 R Y 1.0 +T1_5001 721.8 -4309.6 -825.9 R Y 1.0 +T1_5002 712.4 -4312.4 804.9 R Y 1.0 +T1_5003 -688.3 -4313.4 804.6 R Y 1.0 +T2_5000 -677.9 -4314.1 -832.0 T Y 1.0 +T2_5001 719.7 -4310.4 -823.2 T Y 1.0 +T2_5002 712.4 -4311.7 803.9 T Y 1.0 +T2_5003 -686.7 -4314.2 799.3 T Y 1.0 +T2_10000 -697.5 -4472.6 -640.5 T Y 1.0 +T2_10027 -700.5 -4471.9 585.4 T Y 1.0 +T2_25000 727.2 -4469.2 -614.5 T Y 1.0 +T2_25027 722.6 -4470.3 612.4 T Y 1.0 +T2_10001 -697.5 -4472.3 -595.4 T Y 1.0 +T2_10002 -697.4 -4472.5 -550.0 T Y 1.0 +T2_10003 -697.1 -4472.2 -504.4 T Y 1.0 +T2_10004 -697.5 -4472.2 -458.8 T Y 1.0 +T2_10005 -698.3 -4472.3 -413.3 T Y 1.0 +T2_10006 -698.4 -4472.6 -367.9 T Y 1.0 +T2_10007 -697.8 -4472.3 -322.9 T Y 1.0 +T2_10008 -698.5 -4472.3 -277.7 T Y 1.0 +T2_10009 -698.5 -4472.2 -232.5 T Y 1.0 +T2_10010 -698.3 -4471.4 -186.7 T Y 1.0 +T2_10011 -698.5 -4472.1 -142.0 T Y 1.0 +T2_10012 -698.3 -4472.2 -97.0 T Y 1.0 +T2_10013 -699.3 -4472.4 -50.5 T Y 1.0 +T2_10014 -699.9 -4471.8 -5.2 T Y 1.0 +T2_10015 -700.4 -4471.1 40.9 T Y 1.0 +T2_10016 -700.2 -4472.2 86.1 T Y 1.0 +T2_10017 -698.4 -4471.8 131.7 T Y 1.0 +T2_10018 -700.9 -4471.6 177.5 T Y 1.0 +T2_10019 -701.4 -4472.0 223.1 T Y 1.0 +T2_10020 -700.5 -4471.8 268.6 T Y 1.0 +T2_10021 -700.5 -4472.0 313.4 T Y 1.0 +T2_10022 -701.2 -4471.9 358.9 T Y 1.0 +T2_10023 -700.8 -4471.8 404.0 T Y 1.0 +T2_10024 -700.0 -4471.5 449.4 T Y 1.0 +T2_10025 -700.2 -4471.3 494.5 T Y 1.0 +T2_10026 -700.3 -4471.5 540.9 T Y 1.0 +T2_11000 -539.0 -4472.2 -618.1 T Y 1.0 +T2_11001 -538.6 -4472.0 -572.7 T Y 1.0 +T2_11002 -539.4 -4471.8 -526.7 T Y 1.0 +T2_11003 -538.3 -4471.6 -482.1 T Y 1.0 +T2_11004 -539.1 -4471.8 -436.6 T Y 1.0 +T2_11005 -539.4 -4472.0 -391.1 T Y 1.0 +T2_11006 -539.9 -4471.8 -346.2 T Y 1.0 +T2_11007 -539.7 -4471.7 -300.4 T Y 1.0 +T2_11008 -539.9 -4471.2 -255.6 T Y 1.0 +T2_11009 -540.3 -4471.8 -209.6 T Y 1.0 +T2_11010 -540.3 -4471.8 -164.4 T Y 1.0 +T2_11011 -540.5 -4471.4 -119.7 T Y 1.0 +T2_11012 -540.7 -4471.4 -74.2 T Y 1.0 +T2_11013 -541.3 -4471.5 -27.9 T Y 1.0 +T2_11014 -540.6 -4471.6 17.5 T Y 1.0 +T2_11015 -540.9 -4471.0 62.7 T Y 1.0 +T2_11016 -541.0 -4471.7 108.0 T Y 1.0 +T2_11017 -541.2 -4471.5 154.1 T Y 1.0 +T2_11018 -542.1 -4471.5 199.4 T Y 1.0 +T2_11019 -543.1 -4471.4 245.1 T Y 1.0 +T2_11020 -542.0 -4471.4 290.8 T Y 1.0 +T2_11021 -541.4 -4471.2 336.3 T Y 1.0 +T2_11022 -542.1 -4471.4 381.3 T Y 1.0 +T2_11023 -542.3 -4471.4 426.2 T Y 1.0 +T2_11024 -542.2 -4471.4 471.4 T Y 1.0 +T2_11025 -542.3 -4471.5 517.0 T Y 1.0 +T2_11026 -543.0 -4471.6 562.4 T Y 1.0 +T2_11027 -542.7 -4471.9 607.2 T Y 1.0 +T2_12000 -515.6 -4472.0 -640.0 T Y 1.0 +T2_12001 -515.4 -4471.8 -594.5 T Y 1.0 +T2_12002 -517.0 -4472.0 -549.2 T Y 1.0 +T2_12003 -515.5 -4471.8 -504.7 T Y 1.0 +T2_12004 -516.2 -4471.9 -458.1 T Y 1.0 +T2_12005 -516.3 -4471.1 -411.6 T Y 1.0 +T2_12006 -517.3 -4471.5 -366.5 T Y 1.0 +T2_12007 -516.4 -4471.6 -320.4 T Y 1.0 +T2_12008 -517.0 -4472.0 -276.1 T Y 1.0 +T2_12009 -517.5 -4471.4 -230.5 T Y 1.0 +T2_12010 -516.9 -4471.0 -185.3 T Y 1.0 +T2_12011 -517.7 -4471.5 -140.0 T Y 1.0 +T2_12012 -517.8 -4471.4 -95.0 T Y 1.0 +T2_12013 -518.5 -4471.6 -49.6 T Y 1.0 +T2_12014 -518.3 -4471.3 -4.3 T Y 1.0 +T2_12015 -518.5 -4471.5 41.5 T Y 1.0 +T2_12016 -518.2 -4471.1 86.6 T Y 1.0 +T2_12017 -518.4 -4471.7 132.4 T Y 1.0 +T2_12018 -518.5 -4471.3 178.8 T Y 1.0 +T2_12019 -520.4 -4470.7 224.1 T Y 1.0 +T2_12020 -518.6 -4471.5 269.3 T Y 1.0 +T2_12021 -518.7 -4471.0 314.8 T Y 1.0 +T2_12022 -518.5 -4471.5 359.9 T Y 1.0 +T2_12023 -519.3 -4471.6 405.5 T Y 1.0 +T2_12024 -519.0 -4471.5 450.7 T Y 1.0 +T2_12025 -519.3 -4471.6 496.3 T Y 1.0 +T2_12026 -520.0 -4471.4 541.4 T Y 1.0 +T2_12027 -520.1 -4470.4 588.4 T Y 1.0 +T2_13000 -357.8 -4471.5 -619.3 T Y 1.0 +T2_13001 -357.8 -4470.4 -573.5 T Y 1.0 +T2_13002 -358.0 -4470.6 -528.3 T Y 1.0 +T2_13003 -357.9 -4471.0 -480.4 T Y 1.0 +T2_13004 -357.8 -4471.5 -435.6 T Y 1.0 +T2_13005 -358.2 -4471.4 -389.7 T Y 1.0 +T2_13006 -358.9 -4471.4 -344.9 T Y 1.0 +T2_13007 -358.8 -4470.9 -299.3 T Y 1.0 +T2_13008 -358.9 -4471.1 -253.9 T Y 1.0 +T2_13009 -359.2 -4471.3 -208.9 T Y 1.0 +T2_13010 -358.6 -4471.2 -164.1 T Y 1.0 +T2_13011 -360.2 -4471.3 -118.3 T Y 1.0 +T2_13012 -360.3 -4471.2 -72.8 T Y 1.0 +T2_13013 -359.8 -4471.2 -27.1 T Y 1.0 +T2_13014 -360.1 -4471.1 18.2 T Y 1.0 +T2_13015 -360.1 -4471.2 63.2 T Y 1.0 +T2_13016 -359.8 -4471.2 108.5 T Y 1.0 +T2_13017 -360.4 -4471.0 154.1 T Y 1.0 +T2_13018 -360.1 -4468.2 200.1 T Y 1.0 +T2_13019 -362.8 -4471.2 245.4 T Y 1.0 +T2_13020 -360.4 -4471.2 290.5 T Y 1.0 +T2_13021 -360.7 -4471.3 336.3 T Y 1.0 +T2_13022 -360.8 -4470.9 381.8 T Y 1.0 +T2_13023 -361.5 -4471.2 427.1 T Y 1.0 +T2_13024 -361.3 -4471.3 472.2 T Y 1.0 +T2_13025 -361.5 -4470.8 517.8 T Y 1.0 +T2_13026 -361.3 -4470.6 563.1 T Y 1.0 +T2_13027 -361.9 -4470.7 610.7 T Y 1.0 +T2_14000 -334.7 -4471.9 -641.1 T Y 1.0 +T2_14001 -335.2 -4471.5 -595.6 T Y 1.0 +T2_14002 -334.9 -4471.2 -550.2 T Y 1.0 +T2_14003 -335.4 -4471.8 -505.4 T Y 1.0 +T2_14004 -335.1 -4471.4 -459.5 T Y 1.0 +T2_14005 -335.6 -4470.9 -413.3 T Y 1.0 +T2_14006 -336.0 -4471.1 -367.3 T Y 1.0 +T2_14007 -336.0 -4471.1 -321.9 T Y 1.0 +T2_14008 -336.3 -4471.3 -277.0 T Y 1.0 +T2_14009 -336.3 -4471.2 -231.8 T Y 1.0 +T2_14010 -336.4 -4471.3 -186.3 T Y 1.0 +T2_14011 -337.1 -4471.5 -140.8 T Y 1.0 +T2_14012 -336.9 -4470.9 -96.2 T Y 1.0 +T2_14013 -336.9 -4469.9 -49.4 T Y 1.0 +T2_14014 -337.1 -4471.3 -3.9 T Y 1.0 +T2_14015 -337.6 -4471.2 41.4 T Y 1.0 +T2_14016 -337.6 -4471.2 87.3 T Y 1.0 +T2_14017 -337.9 -4471.4 132.5 T Y 1.0 +T2_14018 -337.7 -4471.1 177.7 T Y 1.0 +T2_14019 -337.7 -4470.5 222.7 T Y 1.0 +T2_14020 -338.0 -4471.0 268.0 T Y 1.0 +T2_14021 -338.1 -4471.1 313.1 T Y 1.0 +T2_14022 -338.4 -4471.1 359.8 T Y 1.0 +T2_14023 -339.0 -4470.8 405.1 T Y 1.0 +T2_14024 -338.9 -4471.4 450.3 T Y 1.0 +T2_14025 -338.9 -4470.2 496.2 T Y 1.0 +T2_14026 -338.7 -4471.6 541.7 T Y 1.0 +T2_14027 -338.8 -4470.7 588.3 T Y 1.0 +T2_15000 -176.8 -4471.7 -618.9 T Y 1.0 +T2_15001 -176.9 -4471.0 -573.4 T Y 1.0 +T2_15002 -177.2 -4470.4 -528.6 T Y 1.0 +T2_15003 -177.1 -4471.3 -482.6 T Y 1.0 +T2_15004 -177.1 -4471.3 -437.8 T Y 1.0 +T2_15005 -177.5 -4471.2 -391.7 T Y 1.0 +T2_15006 -178.4 -4470.3 -346.1 T Y 1.0 +T2_15007 -177.5 -4470.7 -300.8 T Y 1.0 +T2_15008 -177.8 -4471.2 -255.3 T Y 1.0 +T2_15009 -178.4 -4471.2 -209.8 T Y 1.0 +T2_15010 -178.4 -4470.5 -164.4 T Y 1.0 +T2_15011 -178.3 -4471.1 -119.1 T Y 1.0 +T2_15012 -178.6 -4471.1 -73.6 T Y 1.0 +T2_15013 -178.8 -4470.7 -27.3 T Y 1.0 +T2_15014 -179.2 -4470.2 18.5 T Y 1.0 +T2_15015 -179.3 -4470.9 64.2 T Y 1.0 +T2_15016 -179.1 -4470.7 108.7 T Y 1.0 +T2_15017 -179.6 -4470.9 154.0 T Y 1.0 +T2_15018 -179.3 -4471.1 199.1 T Y 1.0 +T2_15019 -179.7 -4470.5 244.5 T Y 1.0 +T2_15020 -179.8 -4471.2 289.8 T Y 1.0 +T2_15021 -179.8 -4470.3 335.4 T Y 1.0 +T2_15022 -180.3 -4470.9 381.6 T Y 1.0 +T2_15023 -180.0 -4471.1 426.9 T Y 1.0 +T2_15024 -180.5 -4470.7 472.5 T Y 1.0 +T2_15025 -180.6 -4471.3 517.7 T Y 1.0 +T2_15026 -181.0 -4471.1 563.6 T Y 1.0 +T2_15027 -180.9 -4471.3 609.5 T Y 1.0 +T2_16000 -153.3 -4471.8 -639.9 T Y 1.0 +T2_16001 -154.2 -4471.5 -594.7 T Y 1.0 +T2_16002 -153.5 -4471.3 -548.8 T Y 1.0 +T2_16003 -154.1 -4471.0 -503.2 T Y 1.0 +T2_16004 -154.6 -4471.1 -458.0 T Y 1.0 +T2_16005 -153.8 -4471.3 -412.6 T Y 1.0 +T2_16006 -155.0 -4471.0 -367.1 T Y 1.0 +T2_16007 -155.3 -4471.0 -321.9 T Y 1.0 +T2_16008 -154.7 -4470.3 -276.4 T Y 1.0 +T2_16009 -155.6 -4471.2 -230.1 T Y 1.0 +T2_16010 -155.4 -4470.8 -184.7 T Y 1.0 +T2_16011 -156.3 -4471.0 -139.1 T Y 1.0 +T2_16012 -156.6 -4470.5 -93.9 T Y 1.0 +T2_16013 -156.2 -4471.2 -48.4 T Y 1.0 +T2_16014 -156.0 -4470.8 -3.1 T Y 1.0 +T2_16015 -156.5 -4470.5 42.8 T Y 1.0 +T2_16016 -156.2 -4470.2 87.9 T Y 1.0 +T2_16017 -157.2 -4471.2 133.5 T Y 1.0 +T2_16018 -156.7 -4471.0 178.7 T Y 1.0 +T2_16019 -157.0 -4470.1 224.7 T Y 1.0 +T2_16020 -156.9 -4471.0 269.6 T Y 1.0 +T2_16021 -156.8 -4471.1 315.0 T Y 1.0 +T2_16022 -158.0 -4471.2 360.1 T Y 1.0 +T2_16023 -157.8 -4471.1 405.1 T Y 1.0 +T2_16024 -157.4 -4470.6 451.1 T Y 1.0 +T2_16025 -157.7 -4470.3 497.4 T Y 1.0 +T2_16026 -158.3 -4471.3 542.7 T Y 1.0 +T2_16027 -158.0 -4470.6 588.6 T Y 1.0 +T2_17000 4.5 -4471.4 -617.6 T Y 1.0 +T2_17001 3.7 -4471.2 -572.0 T Y 1.0 +T2_17002 4.0 -4470.7 -526.8 T Y 1.0 +T2_17003 3.3 -4470.7 -481.3 T Y 1.0 +T2_17004 3.4 -4471.1 -435.0 T Y 1.0 +T2_17005 4.2 -4471.2 -388.8 T Y 1.0 +T2_17006 3.1 -4471.1 -343.5 T Y 1.0 +T2_17007 3.3 -4470.7 -298.3 T Y 1.0 +T2_17008 2.4 -4470.8 -252.7 T Y 1.0 +T2_17009 2.6 -4470.7 -207.4 T Y 1.0 +T2_17010 2.1 -4470.7 -161.2 T Y 1.0 +T2_17011 2.4 -4471.0 -116.2 T Y 1.0 +T2_17012 2.0 -4470.8 -70.4 T Y 1.0 +T2_17013 2.7 -4470.8 -25.6 T Y 1.0 +T2_17014 1.9 -4470.6 20.4 T Y 1.0 +T2_17015 1.4 -4470.4 65.6 T Y 1.0 +T2_17016 2.3 -4470.5 110.3 T Y 1.0 +T2_17017 1.6 -4470.6 156.0 T Y 1.0 +T2_17018 0.8 -4470.8 201.5 T Y 1.0 +T2_17019 1.5 -4470.7 246.7 T Y 1.0 +T2_17020 1.6 -4471.0 292.1 T Y 1.0 +T2_17021 1.0 -4470.5 337.3 T Y 1.0 +T2_17022 -0.3 -4470.4 382.3 T Y 1.0 +T2_17023 0.0 -4470.9 427.7 T Y 1.0 +T2_17024 0.5 -4470.7 473.7 T Y 1.0 +T2_17025 0.1 -4471.3 519.2 T Y 1.0 +T2_17026 0.2 -4471.1 564.6 T Y 1.0 +T2_17027 -0.1 -4471.3 610.4 T Y 1.0 +T2_18000 27.5 -4470.4 -640.1 T Y 1.0 +T2_18001 27.1 -4471.3 -595.2 T Y 1.0 +T2_18002 26.4 -4470.8 -548.4 T Y 1.0 +T2_18003 26.4 -4470.9 -502.6 T Y 1.0 +T2_18004 25.9 -4470.7 -457.5 T Y 1.0 +T2_18005 26.9 -4470.3 -411.9 T Y 1.0 +T2_18006 26.2 -4471.0 -366.6 T Y 1.0 +T2_18007 25.7 -4470.4 -321.5 T Y 1.0 +T2_18008 25.8 -4471.1 -275.7 T Y 1.0 +T2_18009 25.3 -4470.9 -229.4 T Y 1.0 +T2_18010 24.9 -4470.6 -184.1 T Y 1.0 +T2_18011 25.0 -4471.1 -138.9 T Y 1.0 +T2_18012 24.9 -4470.7 -93.6 T Y 1.0 +T2_18013 -697.5 -4472.6 -640.5 T Y 1.0 +T2_18014 24.9 -4470.9 -2.9 T Y 1.0 +T2_18015 24.1 -4470.5 42.2 T Y 1.0 +T2_18016 24.5 -4470.8 87.5 T Y 1.0 +T2_18017 24.7 -4470.9 133.2 T Y 1.0 +T2_18018 23.9 -4470.8 178.4 T Y 1.0 +T2_18019 23.7 -4470.8 224.0 T Y 1.0 +T2_18020 24.7 -4471.0 269.0 T Y 1.0 +T2_18021 23.6 -4471.1 314.3 T Y 1.0 +T2_18022 23.6 -4470.6 359.7 T Y 1.0 +T2_18023 22.6 -4471.1 404.4 T Y 1.0 +T2_18024 23.5 -4471.1 450.3 T Y 1.0 +T2_18025 23.0 -4471.2 495.8 T Y 1.0 +T2_18026 22.9 -4471.1 540.8 T Y 1.0 +T2_18027 22.7 -4470.8 588.2 T Y 1.0 +T2_19000 185.4 -4470.7 -617.8 T Y 1.0 +T2_19001 185.1 -4470.7 -572.6 T Y 1.0 +T2_19002 185.0 -4470.7 -526.3 T Y 1.0 +T2_19003 184.4 -4470.8 -480.5 T Y 1.0 +T2_19004 183.7 -4470.5 -433.1 T Y 1.0 +T2_19005 184.5 -4470.0 -388.2 T Y 1.0 +T2_19006 184.6 -4470.3 -343.2 T Y 1.0 +T2_19007 183.6 -4470.7 -298.4 T Y 1.0 +T2_19008 183.6 -4470.6 -253.1 T Y 1.0 +T2_19009 182.9 -4470.5 -207.2 T Y 1.0 +T2_19010 183.5 -4470.4 -162.2 T Y 1.0 +T2_19011 183.7 -4470.1 -116.7 T Y 1.0 +T2_19012 183.6 -4470.2 -71.1 T Y 1.0 +T2_19013 183.2 -4470.2 -25.4 T Y 1.0 +T2_19014 183.1 -4470.7 19.7 T Y 1.0 +T2_19015 183.0 -4469.8 64.7 T Y 1.0 +T2_19016 182.5 -4470.3 110.1 T Y 1.0 +T2_19017 183.1 -4470.6 155.9 T Y 1.0 +T2_19018 181.7 -4470.5 200.7 T Y 1.0 +T2_19019 181.8 -4470.5 246.1 T Y 1.0 +T2_19020 182.3 -4470.8 291.1 T Y 1.0 +T2_19021 181.3 -4470.4 336.7 T Y 1.0 +T2_19022 181.5 -4470.8 381.9 T Y 1.0 +T2_19023 181.4 -4470.3 427.6 T Y 1.0 +T2_19024 181.1 -4470.7 472.5 T Y 1.0 +T2_19025 181.4 -4470.8 517.9 T Y 1.0 +T2_19026 180.0 -4471.0 563.3 T Y 1.0 +T2_19027 180.7 -4470.9 610.7 T Y 1.0 +T2_20000 208.3 -4470.6 -639.0 T Y 1.0 +T2_20001 208.2 -4469.6 -592.9 T Y 1.0 +T2_20002 207.6 -4470.4 -546.9 T Y 1.0 +T2_20003 206.7 -4470.5 -501.9 T Y 1.0 +T2_20004 207.0 -4470.3 -456.0 T Y 1.0 +T2_20005 207.7 -4470.6 -410.7 T Y 1.0 +T2_20006 206.9 -4469.9 -365.5 T Y 1.0 +T2_20007 206.6 -4470.4 -319.9 T Y 1.0 +T2_20008 206.6 -4470.3 -274.1 T Y 1.0 +T2_20009 206.3 -4470.3 -229.0 T Y 1.0 +T2_20010 206.3 -4470.3 -183.4 T Y 1.0 +T2_20011 206.4 -4469.7 -137.8 T Y 1.0 +T2_20012 206.3 -4470.0 -92.8 T Y 1.0 +T2_20013 205.8 -4470.2 -47.4 T Y 1.0 +T2_20014 205.8 -4470.4 -2.2 T Y 1.0 +T2_20015 206.0 -4470.2 43.5 T Y 1.0 +T2_20016 205.5 -4470.2 88.8 T Y 1.0 +T2_20017 205.7 -4470.4 134.5 T Y 1.0 +T2_20018 204.9 -4470.0 181.1 T Y 1.0 +T2_20019 205.0 -4469.6 226.3 T Y 1.0 +T2_20020 204.8 -4470.5 271.0 T Y 1.0 +T2_20021 204.6 -4470.5 316.8 T Y 1.0 +T2_20022 204.2 -4471.1 361.9 T Y 1.0 +T2_20023 204.0 -4470.5 407.4 T Y 1.0 +T2_20024 203.5 -4470.6 452.3 T Y 1.0 +T2_20025 204.0 -4470.6 498.3 T Y 1.0 +T2_20026 203.3 -4470.3 544.2 T Y 1.0 +T2_20027 203.8 -4470.7 588.7 T Y 1.0 +T2_21000 365.8 -4470.3 -616.8 T Y 1.0 +T2_21001 366.0 -4470.0 -570.2 T Y 1.0 +T2_21002 365.4 -4469.9 -524.6 T Y 1.0 +T2_21003 364.8 -4469.9 -479.1 T Y 1.0 +T2_21004 365.4 -4470.4 -433.8 T Y 1.0 +T2_21005 365.7 -4470.5 -388.5 T Y 1.0 +T2_21006 365.2 -4470.4 -343.3 T Y 1.0 +T2_21007 364.0 -4469.6 -297.6 T Y 1.0 +T2_21008 365.2 -4470.0 -252.3 T Y 1.0 +T2_21009 364.5 -4470.1 -207.1 T Y 1.0 +T2_21010 364.1 -4470.0 -161.2 T Y 1.0 +T2_21011 363.9 -4470.2 -116.4 T Y 1.0 +T2_21012 364.5 -4469.9 -70.7 T Y 1.0 +T2_21013 363.8 -4470.3 -25.3 T Y 1.0 +T2_21014 364.1 -4470.5 20.5 T Y 1.0 +T2_21015 363.8 -4470.3 65.4 T Y 1.0 +T2_21016 363.3 -4470.2 110.6 T Y 1.0 +T2_21017 363.1 -4469.7 156.3 T Y 1.0 +T2_21018 363.1 -4470.4 202.7 T Y 1.0 +T2_21019 363.2 -4470.2 248.2 T Y 1.0 +T2_21020 362.2 -4470.3 293.4 T Y 1.0 +T2_21021 362.4 -4470.3 338.5 T Y 1.0 +T2_21022 362.3 -4470.8 384.1 T Y 1.0 +T2_21023 362.3 -4470.3 428.9 T Y 1.0 +T2_21024 362.3 -4470.5 474.3 T Y 1.0 +T2_21025 362.3 -4470.7 520.5 T Y 1.0 +T2_21026 361.2 -4470.4 565.7 T Y 1.0 +T2_21027 361.7 -4470.5 610.7 T Y 1.0 +T2_22000 388.5 -4470.4 -639.0 T Y 1.0 +T2_22001 388.8 -4469.9 -592.6 T Y 1.0 +T2_22002 388.4 -4470.0 -547.2 T Y 1.0 +T2_22003 388.5 -4469.5 -501.9 T Y 1.0 +T2_22004 388.3 -4470.0 -456.0 T Y 1.0 +T2_22005 388.2 -4469.9 -410.6 T Y 1.0 +T2_22006 388.0 -4469.9 -365.1 T Y 1.0 +T2_22007 386.7 -4470.0 -319.7 T Y 1.0 +T2_22008 387.7 -4470.0 -274.2 T Y 1.0 +T2_22009 387.8 -4470.0 -229.0 T Y 1.0 +T2_22010 388.0 -4470.1 -183.6 T Y 1.0 +T2_22011 387.4 -4469.9 -138.4 T Y 1.0 +T2_22012 387.3 -4469.9 -92.9 T Y 1.0 +T2_22013 386.5 -4470.2 -47.3 T Y 1.0 +T2_22014 387.9 -4470.3 -2.5 T Y 1.0 +T2_22015 386.6 -4470.1 42.6 T Y 1.0 +T2_22016 386.3 -4469.9 89.6 T Y 1.0 +T2_22017 385.7 -4469.9 135.1 T Y 1.0 +T2_22018 386.0 -4469.8 179.8 T Y 1.0 +T2_22019 386.7 -4470.0 225.1 T Y 1.0 +T2_22020 385.5 -4470.3 270.3 T Y 1.0 +T2_22021 385.3 -4470.1 315.6 T Y 1.0 +T2_22022 385.5 -4470.5 360.9 T Y 1.0 +T2_22023 385.1 -4470.3 406.4 T Y 1.0 +T2_22024 384.7 -4470.0 451.4 T Y 1.0 +T2_22025 384.7 -4470.4 496.7 T Y 1.0 +T2_22026 384.2 -4470.3 542.8 T Y 1.0 +T2_22027 384.1 -4470.6 589.1 T Y 1.0 +T2_23000 547.0 -4469.7 -615.7 T Y 1.0 +T2_23001 546.5 -4469.8 -569.9 T Y 1.0 +T2_23002 546.6 -4469.4 -524.5 T Y 1.0 +T2_23003 546.2 -4468.5 -478.9 T Y 1.0 +T2_23004 546.8 -4470.1 -433.1 T Y 1.0 +T2_23005 546.2 -4469.8 -387.7 T Y 1.0 +T2_23006 546.1 -4469.9 -342.5 T Y 1.0 +T2_23007 544.6 -4470.0 -296.5 T Y 1.0 +T2_23008 545.7 -4469.9 -251.7 T Y 1.0 +T2_23009 545.5 -4470.1 -206.5 T Y 1.0 +T2_23010 546.1 -4469.6 -161.1 T Y 1.0 +T2_23011 545.6 -4469.8 -115.4 T Y 1.0 +T2_23012 545.1 -4469.5 -70.3 T Y 1.0 +T2_23013 545.2 -4469.9 -25.1 T Y 1.0 +T2_23014 546.8 -4469.5 20.0 T Y 1.0 +T2_23015 545.0 -4469.9 65.8 T Y 1.0 +T2_23016 544.5 -4469.9 112.2 T Y 1.0 +T2_23017 544.7 -4469.9 157.2 T Y 1.0 +T2_23018 544.0 -4469.9 202.1 T Y 1.0 +T2_23019 545.0 -4469.5 247.6 T Y 1.0 +T2_23020 543.7 -4470.3 293.4 T Y 1.0 +T2_23021 543.3 -4469.9 338.5 T Y 1.0 +T2_23022 542.8 -4469.3 383.8 T Y 1.0 +T2_23023 543.2 -4470.1 429.2 T Y 1.0 +T2_23024 542.7 -4470.1 474.7 T Y 1.0 +T2_23025 542.9 -4470.1 520.0 T Y 1.0 +T2_23026 542.8 -4470.2 566.1 T Y 1.0 +T2_23027 541.6 -4470.3 612.1 T Y 1.0 +T2_24000 569.8 -4469.5 -637.1 T Y 1.0 +T2_24001 569.9 -4469.7 -591.9 T Y 1.0 +T2_24002 569.2 -4469.4 -547.3 T Y 1.0 +T2_24003 569.3 -4469.7 -501.7 T Y 1.0 +T2_24004 569.3 -4469.7 -455.7 T Y 1.0 +T2_24005 569.8 -4469.2 -410.6 T Y 1.0 +T2_24006 568.9 -4470.1 -364.8 T Y 1.0 +T2_24007 567.5 -4469.7 -319.8 T Y 1.0 +T2_24008 569.2 -4469.2 -274.6 T Y 1.0 +T2_24009 568.6 -4469.7 -229.0 T Y 1.0 +T2_24010 569.6 -4469.5 -183.3 T Y 1.0 +T2_24011 568.5 -4469.8 -138.2 T Y 1.0 +T2_24012 569.2 -4469.9 -92.8 T Y 1.0 +T2_24013 569.1 -4470.0 -46.5 T Y 1.0 +T2_24014 569.3 -4469.8 -1.5 T Y 1.0 +T2_24015 568.2 -4469.9 44.0 T Y 1.0 +T2_24016 568.1 -4469.8 89.1 T Y 1.0 +T2_24017 567.8 -4469.8 135.1 T Y 1.0 +T2_24018 567.8 -4469.9 180.0 T Y 1.0 +T2_24019 568.4 -4469.0 225.1 T Y 1.0 +T2_24020 567.6 -4467.7 270.8 T Y 1.0 +T2_24021 566.7 -4470.1 316.0 T Y 1.0 +T2_24022 566.2 -4469.8 361.7 T Y 1.0 +T2_24023 566.3 -4470.1 407.5 T Y 1.0 +T2_24024 565.6 -4470.0 452.1 T Y 1.0 +T2_24025 566.3 -4469.7 497.8 T Y 1.0 +T2_24026 565.6 -4469.9 543.7 T Y 1.0 +T2_24027 564.6 -4470.1 589.2 T Y 1.0 +T2_25001 727.5 -4469.5 -569.0 T Y 1.0 +T2_25002 726.7 -4469.5 -523.7 T Y 1.0 +T2_25003 727.5 -4469.8 -478.8 T Y 1.0 +T2_25004 727.0 -4469.5 -432.8 T Y 1.0 +T2_25005 727.2 -4469.4 -387.4 T Y 1.0 +T2_25006 726.7 -4469.7 -342.3 T Y 1.0 +T2_25007 724.4 -4469.5 -296.6 T Y 1.0 +T2_25008 726.9 -4469.5 -250.9 T Y 1.0 +T2_25009 726.8 -4469.1 -205.7 T Y 1.0 +T2_25010 727.7 -4470.1 -159.9 T Y 1.0 +T2_25011 726.2 -4469.4 -114.2 T Y 1.0 +T2_25012 726.5 -4470.0 -69.1 T Y 1.0 +T2_25013 726.9 -4470.2 -23.8 T Y 1.0 +T2_25014 726.3 -4469.9 21.5 T Y 1.0 +T2_25015 726.2 -4470.3 66.8 T Y 1.0 +T2_25016 726.0 -4469.7 110.3 T Y 1.0 +T2_25017 726.6 -4470.0 158.1 T Y 1.0 +T2_25018 725.2 -4469.3 203.0 T Y 1.0 +T2_25019 726.2 -4469.4 248.6 T Y 1.0 +T2_25020 726.2 -4469.5 293.7 T Y 1.0 +T2_25021 724.6 -4469.2 339.8 T Y 1.0 +T2_25022 723.6 -4470.1 385.0 T Y 1.0 +T2_25023 723.7 -4469.7 430.6 T Y 1.0 +T2_25024 723.9 -4469.6 476.0 T Y 1.0 +T2_25025 723.2 -4468.7 522.0 T Y 1.0 T2_25026 722.7 -4470.0 567.7 T Y 1.0 \ No newline at end of file diff --git a/PHOS/macros/AlignmentDB/MakePHOSAlignmentModule2.C b/PHOS/macros/AlignmentDB/MakePHOSAlignmentModule2.C index 1436e93cf58..6b386865a1a 100644 --- a/PHOS/macros/AlignmentDB/MakePHOSAlignmentModule2.C +++ b/PHOS/macros/AlignmentDB/MakePHOSAlignmentModule2.C @@ -1,154 +1,154 @@ -void MakePHOSAlignmentModule2() -{ - // Create misalignment object for PHOS module 2 - // from the survey measurements on P2 in May 2008. - // To store alignment in OCDB, define the evnironment variables: - // TOCDB=kTRUE - // STORAGE="local://$ALICE_ROOT/OCDB" - // Author: Timur Pocheptsov, 19.06.2008 - - const char * macroName = "MakePHOS2Alignment"; - - const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP"); - if (!phosGeom) { - Error(macroName, "Cannot obtain AliPHOSGeometry singleton.\n"); - return; - } - - //Activate CDB storage and load geometry from CDB - //I need valid gGeoManager to create local transformations. - - //[Part of code, taken from ITS version of MakexxxFullMisalignment - AliCDBManager * cdb = AliCDBManager::Instance(); - if (!cdb->IsDefaultStorageSet()) - cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - cdb->SetRun(0); - - if (TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")) { - const TString storageENV(gSystem->Getenv("STORAGE")); - if (!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) { - Error(macroName, "STORAGE variable set to %s is not valid.\n", storageENV.Data()); - return; - } - - AliCDBStorage * storage = cdb->GetStorage(storageENV.Data()); - if (!storage) { - Error(macroName, "Unable to open storage %s.\n", storageENV.Data()); - return; - } - - AliCDBPath path("GRP","Geometry","Data"); - AliCDBEntry * entry = storage->Get(path.GetPath(), cdb->GetRun()); - if (!entry) { - Error(macroName,"Could not get the specified CDB entry!"); - return; - } - - entry->SetOwner(0); - AliGeomManager::SetGeometry((TGeoManager*) entry->GetObject()); - }else{ - AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage - } - //end of code taken from ITS version of MakexxxFullMisalignment] - - AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry(); - TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() * emca->GetNStripZ()); - - const Double_t dpsi = 0., dtheta = 0., dphi = 0.; - const Double_t displacement = 10.; - Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT - const AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; - UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, iIndex); - Int_t i = 0; - - // Alignment for 5 PHOS modules - - new(alobj[i++]) AliAlignObjParams("PHOS/Module1", - volid, 0., 0., 0., 0., 0., 0., kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Module2", - volid, 0., 0., 0., 0., 0., 0., kTRUE); - - Double_t rotMatrix[9] = {0.999992695, -0.00295322, -0.0024267, - 0.002955489, 0.999995199, 0.00093165, - 0.002423942, -0.000938811, 0.99999662}; - TGeoRotation rotation; - rotation.SetMatrix(rotMatrix); - Double_t dX=1.25474126, dY=-1.4088643, dZ=-12.856; - AliAlignObjParams * mod3 = - new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, dX, dY, dZ, 0., 0., 0., kFALSE); - mod3->SetRotation(rotation); - - new(alobj[i++]) AliAlignObjParams("PHOS/Module4", - volid, 0., 0., 0., 0., 0., 0., kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Module5", - volid, 0., 0., 0., 0., 0., 0., kTRUE); - - const Double_t dx = 0., dy = 0., dz = 0. ; - // Alignment of CPV modules - new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV", - volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV", - volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV", - volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV", - volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV", - volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); - - // Alignment for PHOS cradle - new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0", - volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1", - volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); - - // Alignment for cradle wheels - new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0", - volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1", - volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2", - volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); - new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3", - volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); - - // ************************* 2nd step *************** - if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) { - // save on file - const char * fileName = "PHOSfullMisalignment.root"; - TFile f(fileName,"RECREATE"); - if (!f) { - Error(macroName, "cannot open file for output\n"); - return; - } - - Info(macroName,"Saving alignment objects to the file %s", fileName); - f.cd(); - f.WriteObject(&alobj,"PHOSAlignObjs","kSingleKey"); - f.Close(); - }else{ - // save in CDB storage - TString storageENV = gSystem->Getenv("STORAGE"); - if(!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) { - Error(macroName,"STORAGE variable set to %s is not valid. Exiting\n", storageENV.Data()); - return; - } - - Info(macroName,"Saving alignment objects in CDB storage %s", storageENV.Data()); - AliCDBManager * cdb = AliCDBManager::Instance(); - AliCDBStorage * storage = cdb->GetStorage(storageENV.Data()); - if (!storage) { - Error(macroName, "Unable to open storage %s\n", storageENV.Data()); - return; - } - - AliCDBMetaData md; - md.SetResponsible("Timur Pocheptsov"); - md.SetComment("Alignment objects for PHOS module 2; survey in May 2008"); - md.SetAliRootVersion(gSystem->Getenv("ARVERSION")); - AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity()); - storage->Put(&alobj, id, &md); - } - - alobj.Delete(); -} +void MakePHOSAlignmentModule2() +{ + // Create misalignment object for PHOS module 2 + // from the survey measurements on P2 in May 2008. + // To store alignment in OCDB, define the evnironment variables: + // TOCDB=kTRUE + // STORAGE="local://$ALICE_ROOT/OCDB" + // Author: Timur Pocheptsov, 19.06.2008 + + const char * macroName = "MakePHOS2Alignment"; + + const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP"); + if (!phosGeom) { + Error(macroName, "Cannot obtain AliPHOSGeometry singleton.\n"); + return; + } + + //Activate CDB storage and load geometry from CDB + //I need valid gGeoManager to create local transformations. + + //[Part of code, taken from ITS version of MakexxxFullMisalignment + AliCDBManager * cdb = AliCDBManager::Instance(); + if (!cdb->IsDefaultStorageSet()) + cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + cdb->SetRun(0); + + if (TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")) { + const TString storageENV(gSystem->Getenv("STORAGE")); + if (!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) { + Error(macroName, "STORAGE variable set to %s is not valid.\n", storageENV.Data()); + return; + } + + AliCDBStorage * storage = cdb->GetStorage(storageENV.Data()); + if (!storage) { + Error(macroName, "Unable to open storage %s.\n", storageENV.Data()); + return; + } + + AliCDBPath path("GRP","Geometry","Data"); + AliCDBEntry * entry = storage->Get(path.GetPath(), cdb->GetRun()); + if (!entry) { + Error(macroName,"Could not get the specified CDB entry!"); + return; + } + + entry->SetOwner(0); + AliGeomManager::SetGeometry((TGeoManager*) entry->GetObject()); + }else{ + AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage + } + //end of code taken from ITS version of MakexxxFullMisalignment] + + AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry(); + TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() * emca->GetNStripZ()); + + const Double_t dpsi = 0., dtheta = 0., dphi = 0.; + const Double_t displacement = 10.; + Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT + const AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer; + UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, iIndex); + Int_t i = 0; + + // Alignment for 5 PHOS modules + + new(alobj[i++]) AliAlignObjParams("PHOS/Module1", + volid, 0., 0., 0., 0., 0., 0., kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Module2", + volid, 0., 0., 0., 0., 0., 0., kTRUE); + + Double_t rotMatrix[9] = {0.999992695, -0.00295322, -0.0024267, + 0.002955489, 0.999995199, 0.00093165, + 0.002423942, -0.000938811, 0.99999662}; + TGeoRotation rotation; + rotation.SetMatrix(rotMatrix); + Double_t dX=1.25474126, dY=-1.4088643, dZ=-12.856; + AliAlignObjParams * mod3 = + new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, dX, dY, dZ, 0., 0., 0., kFALSE); + mod3->SetRotation(rotation); + + new(alobj[i++]) AliAlignObjParams("PHOS/Module4", + volid, 0., 0., 0., 0., 0., 0., kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Module5", + volid, 0., 0., 0., 0., 0., 0., kTRUE); + + const Double_t dx = 0., dy = 0., dz = 0. ; + // Alignment of CPV modules + new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV", + volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV", + volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV", + volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV", + volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV", + volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE); + + // Alignment for PHOS cradle + new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0", + volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1", + volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); + + // Alignment for cradle wheels + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0", + volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1", + volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2", + volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); + new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3", + volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE); + + // ************************* 2nd step *************** + if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) { + // save on file + const char * fileName = "PHOSfullMisalignment.root"; + TFile f(fileName,"RECREATE"); + if (!f) { + Error(macroName, "cannot open file for output\n"); + return; + } + + Info(macroName,"Saving alignment objects to the file %s", fileName); + f.cd(); + f.WriteObject(&alobj,"PHOSAlignObjs","kSingleKey"); + f.Close(); + }else{ + // save in CDB storage + TString storageENV = gSystem->Getenv("STORAGE"); + if(!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) { + Error(macroName,"STORAGE variable set to %s is not valid. Exiting\n", storageENV.Data()); + return; + } + + Info(macroName,"Saving alignment objects in CDB storage %s", storageENV.Data()); + AliCDBManager * cdb = AliCDBManager::Instance(); + AliCDBStorage * storage = cdb->GetStorage(storageENV.Data()); + if (!storage) { + Error(macroName, "Unable to open storage %s\n", storageENV.Data()); + return; + } + + AliCDBMetaData md; + md.SetResponsible("Timur Pocheptsov"); + md.SetComment("Alignment objects for PHOS module 2; survey in May 2008"); + md.SetAliRootVersion(gSystem->Getenv("ARVERSION")); + AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity()); + storage->Put(&alobj, id, &md); + } + + alobj.Delete(); +} diff --git a/PMD/AliPMDOfflineCalibTask.h b/PMD/AliPMDOfflineCalibTask.h index 52770bbbe0c..4a196416f58 100644 --- a/PMD/AliPMDOfflineCalibTask.h +++ b/PMD/AliPMDOfflineCalibTask.h @@ -1,55 +1,55 @@ -#ifndef AliPMDOfflineCalibTask_cxx -#define AliPMDOfflineCalibTask_cxx - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/************************************ - * - * Satyajit Jena, IIT Bombay - * sjena@cern.ch - * Fri Feb 12 13:30:19 IST 2010 - * - ************************************/ - -class TH1F; -class TList; -class TObjArray; - -#include "TObjString.h" -#include "AliAnalysisTaskSE.h" - -class AliPMDOfflineCalibTask : public AliAnalysisTaskSE { - public: - AliPMDOfflineCalibTask(const char *name = "AliPMDOfflineCalibTask"); - virtual ~AliPMDOfflineCalibTask() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void AddSelectedTriggerClass(const char*name) {fSelectedTrigger->Add(new TObjString(name));}; - void SetReject(Bool_t rejected) {fRejected = rejected;}; - - private: - - TList *fListOfHistos; - - TH1F *fPmdCalibAdcP; - TH1F *fPmdCalibAdcC; - TH1F *fPmdCalibEntP; - TH1F *fPmdCalibEntC; - - TH1I *fNEvents; - - TObjArray *fSelectedTrigger; - Bool_t fRejected; - - AliPMDOfflineCalibTask(const AliPMDOfflineCalibTask&); - AliPMDOfflineCalibTask& operator=(const AliPMDOfflineCalibTask&); - - ClassDef(AliPMDOfflineCalibTask, 1); -}; - -#endif - +#ifndef AliPMDOfflineCalibTask_cxx +#define AliPMDOfflineCalibTask_cxx + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/************************************ + * + * Satyajit Jena, IIT Bombay + * sjena@cern.ch + * Fri Feb 12 13:30:19 IST 2010 + * + ************************************/ + +class TH1F; +class TList; +class TObjArray; + +#include "TObjString.h" +#include "AliAnalysisTaskSE.h" + +class AliPMDOfflineCalibTask : public AliAnalysisTaskSE { + public: + AliPMDOfflineCalibTask(const char *name = "AliPMDOfflineCalibTask"); + virtual ~AliPMDOfflineCalibTask() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + void AddSelectedTriggerClass(const char*name) {fSelectedTrigger->Add(new TObjString(name));}; + void SetReject(Bool_t rejected) {fRejected = rejected;}; + + private: + + TList *fListOfHistos; + + TH1F *fPmdCalibAdcP; + TH1F *fPmdCalibAdcC; + TH1F *fPmdCalibEntP; + TH1F *fPmdCalibEntC; + + TH1I *fNEvents; + + TObjArray *fSelectedTrigger; + Bool_t fRejected; + + AliPMDOfflineCalibTask(const AliPMDOfflineCalibTask&); + AliPMDOfflineCalibTask& operator=(const AliPMDOfflineCalibTask&); + + ClassDef(AliPMDOfflineCalibTask, 1); +}; + +#endif + diff --git a/PWG/muondep/AccEffTemplates/CheckESD.C b/PWG/muondep/AccEffTemplates/CheckESD.C index 8eac0b62641..acd6504650a 100644 --- a/PWG/muondep/AccEffTemplates/CheckESD.C +++ b/PWG/muondep/AccEffTemplates/CheckESD.C @@ -1,49 +1,49 @@ -Bool_t CheckESD(const char* esdFileName = "AliESDs.root") -{ -//nb (commented) - //AliCDBManager *cdb = AliCDBManager::Instance(); - //cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - - // open the ESD file - TFile* esdFile = TFile::Open(esdFileName); - if (!esdFile || !esdFile->IsOpen()) { - Error("CheckESD", "opening ESD file %s failed", esdFileName); - return kFALSE; - } - AliESDEvent * esd = new AliESDEvent; - TTree* tree = (TTree*) esdFile->Get("esdTree"); - if (!tree) { - Error("CheckESD", "no ESD tree found"); - return kFALSE; - } - esd->ReadFromTree(tree); - - // loop over events - for (Int_t iEvent = 0; iEvent < tree->GetEntries(); iEvent++) { - - // get the event summary data - tree->GetEvent(iEvent); - if (!esd) { - Error("CheckESD", "no ESD object found for event %d", iEvent); - return kFALSE; - } - - Int_t nTracks = esd->GetNumberOfMuonTracks(); - for(Int_t iTracks = 0; iTracks < nTracks; iTracks++) { - AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTracks); - if (muonTrack->ContainTrackerData()) { - } - } - - } - - delete esd; - esdFile->Close(); - delete esdFile; - - // result of check - Info("CheckESD", "check of ESD was successfull"); - return kTRUE; - -} - +Bool_t CheckESD(const char* esdFileName = "AliESDs.root") +{ +//nb (commented) + //AliCDBManager *cdb = AliCDBManager::Instance(); + //cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + + // open the ESD file + TFile* esdFile = TFile::Open(esdFileName); + if (!esdFile || !esdFile->IsOpen()) { + Error("CheckESD", "opening ESD file %s failed", esdFileName); + return kFALSE; + } + AliESDEvent * esd = new AliESDEvent; + TTree* tree = (TTree*) esdFile->Get("esdTree"); + if (!tree) { + Error("CheckESD", "no ESD tree found"); + return kFALSE; + } + esd->ReadFromTree(tree); + + // loop over events + for (Int_t iEvent = 0; iEvent < tree->GetEntries(); iEvent++) { + + // get the event summary data + tree->GetEvent(iEvent); + if (!esd) { + Error("CheckESD", "no ESD object found for event %d", iEvent); + return kFALSE; + } + + Int_t nTracks = esd->GetNumberOfMuonTracks(); + for(Int_t iTracks = 0; iTracks < nTracks; iTracks++) { + AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTracks); + if (muonTrack->ContainTrackerData()) { + } + } + + } + + delete esd; + esdFile->Close(); + delete esdFile; + + // result of check + Info("CheckESD", "check of ESD was successfull"); + return kTRUE; + +} + diff --git a/PWG/muondep/AccEffTemplates/simrun.C b/PWG/muondep/AccEffTemplates/simrun.C index c04a8256903..430209c5ff7 100644 --- a/PWG/muondep/AccEffTemplates/simrun.C +++ b/PWG/muondep/AccEffTemplates/simrun.C @@ -1,115 +1,115 @@ -// #define VERBOSEARGS -// simrun.C -{ -// set job and simulation variables as : -// root.exe -b -q simrun.C --run --chunk --event - - int nrun = 0; - int nchunk = 0; - int nevent = 0; - int seed = 0; - Bool_t snapshot(kFALSE); - - char sseed[1024]; - char srun[1024]; - char schunk[1024]; - - sprintf(srun,""); - sprintf(schunk,""); - - for (int i=0; i< gApplication->Argc();i++){ -#ifdef VERBOSEARGS - printf("Arg %d: %s\n",i,gApplication->Argv(i)); -#endif - if (!(strcmp(gApplication->Argv(i),"--run"))) - nrun = atoi(gApplication->Argv(i+1)); - sprintf(srun,"%d",nrun); - - if (!(strcmp(gApplication->Argv(i),"--chunk"))) - nchunk = atoi(gApplication->Argv(i+1)); - sprintf(schunk,"%d",nchunk); - - if (!(strcmp(gApplication->Argv(i),"--event"))) - nevent = atoi(gApplication->Argv(i+1)); - - if (!(strcmp(gApplication->Argv(i),"--snapshot"))) - snapshot = kTRUE; - } - - seed = nrun * 10000 + nchunk; - sprintf(sseed,"%d",seed); - - if (seed==0) { - fprintf(stderr,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - fprintf(stderr,"!!!! WARNING! Seeding variable for MC is 0 !!!!\n"); - fprintf(stderr,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - } else { - fprintf(stdout,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - fprintf(stdout,"!!! MC Seed is %d \n",seed); - fprintf(stdout,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - } - -// set the seed environment variable - gSystem->Setenv("CONFIG_SEED",sseed); - gSystem->Setenv("DC_RUN",srun); // used in AliSimulation.cxx - gSystem->Setenv("DC_EVENT",schunk); // Not used in Config.C (used for setting seed) - -// Needed to produce simulated RAW data - gSystem->Setenv("ALIMDC_RAWDB1","./mdc1"); - gSystem->Setenv("ALIMDC_RAWDB2","./mdc2"); - gSystem->Setenv("ALIMDC_TAGDB","./mdc1/tag"); - gSystem->Setenv("ALIMDC_RUNDB","./mdc1/meta"); - cout<< "SIMRUN:: Run " << gSystem->Getenv("DC_RUN") - << " Chunk " << gSystem->Getenv("DC_EVENT") - << endl; - - cout<<">>>>> SIMULATION <<<<<"<Setenv("OCDB_SNAPSHOT_CREATE","kTRUE"); - gSystem->Setenv("OCDB_SNAPSHOT_FILENAME","OCDB_sim.root"); - } - - gSystem->Exec(Form("aliroot -b -q sim.C\\(%d\\) > sim.log 2>&1",nevent)); - gSystem->Exec("mv syswatch.log simwatch.log"); - - if ( snapshot ) - { - gSystem->Setenv("OCDB_SNAPSHOT_FILENAME","OCDB_rec.root"); - } - - cout<<">>>>> RECONSTRUCTION <<<<<"<Exec("aliroot -b -q rec.C\\(1\\) > rec.log 2>&1"); - } - else - { - gSystem->Exec("aliroot -b -q rec.C > rec.log 2>&1"); - } - - gSystem->Exec("mv syswatch.log recwatch.log"); - - if ( snapshot ) - { - gSystem->Exec(Form("mkdir -p OCDB/%s",srun)); - gSystem->Exec(Form("mv OCDB_*.root OCDB/%s/",srun)); - } - else - { - // cout<<">>>>> TAG <<<<<"<Exec("aliroot -b -q tag.C > tag.log 2>&1"); - - cout<<">>>>> CHECK ESD <<<<<"<Exec("aliroot -b -q CheckESD.C > checkesd.log 2>&1"); - cout<<">>>>> MAKE AOD <<<<<"<Exec("aliroot -b -q AODtrain.C > aod.log 2>&1"); - cout<<">>>>> CHECK AOD <<<<<"<Exec("aliroot -b -q CheckAOD.C > checkaod.log 2>&1"); - } - - return 0; -} +// #define VERBOSEARGS +// simrun.C +{ +// set job and simulation variables as : +// root.exe -b -q simrun.C --run --chunk --event + + int nrun = 0; + int nchunk = 0; + int nevent = 0; + int seed = 0; + Bool_t snapshot(kFALSE); + + char sseed[1024]; + char srun[1024]; + char schunk[1024]; + + sprintf(srun,""); + sprintf(schunk,""); + + for (int i=0; i< gApplication->Argc();i++){ +#ifdef VERBOSEARGS + printf("Arg %d: %s\n",i,gApplication->Argv(i)); +#endif + if (!(strcmp(gApplication->Argv(i),"--run"))) + nrun = atoi(gApplication->Argv(i+1)); + sprintf(srun,"%d",nrun); + + if (!(strcmp(gApplication->Argv(i),"--chunk"))) + nchunk = atoi(gApplication->Argv(i+1)); + sprintf(schunk,"%d",nchunk); + + if (!(strcmp(gApplication->Argv(i),"--event"))) + nevent = atoi(gApplication->Argv(i+1)); + + if (!(strcmp(gApplication->Argv(i),"--snapshot"))) + snapshot = kTRUE; + } + + seed = nrun * 10000 + nchunk; + sprintf(sseed,"%d",seed); + + if (seed==0) { + fprintf(stderr,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + fprintf(stderr,"!!!! WARNING! Seeding variable for MC is 0 !!!!\n"); + fprintf(stderr,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + } else { + fprintf(stdout,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + fprintf(stdout,"!!! MC Seed is %d \n",seed); + fprintf(stdout,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + } + +// set the seed environment variable + gSystem->Setenv("CONFIG_SEED",sseed); + gSystem->Setenv("DC_RUN",srun); // used in AliSimulation.cxx + gSystem->Setenv("DC_EVENT",schunk); // Not used in Config.C (used for setting seed) + +// Needed to produce simulated RAW data + gSystem->Setenv("ALIMDC_RAWDB1","./mdc1"); + gSystem->Setenv("ALIMDC_RAWDB2","./mdc2"); + gSystem->Setenv("ALIMDC_TAGDB","./mdc1/tag"); + gSystem->Setenv("ALIMDC_RUNDB","./mdc1/meta"); + cout<< "SIMRUN:: Run " << gSystem->Getenv("DC_RUN") + << " Chunk " << gSystem->Getenv("DC_EVENT") + << endl; + + cout<<">>>>> SIMULATION <<<<<"<Setenv("OCDB_SNAPSHOT_CREATE","kTRUE"); + gSystem->Setenv("OCDB_SNAPSHOT_FILENAME","OCDB_sim.root"); + } + + gSystem->Exec(Form("aliroot -b -q sim.C\\(%d\\) > sim.log 2>&1",nevent)); + gSystem->Exec("mv syswatch.log simwatch.log"); + + if ( snapshot ) + { + gSystem->Setenv("OCDB_SNAPSHOT_FILENAME","OCDB_rec.root"); + } + + cout<<">>>>> RECONSTRUCTION <<<<<"<Exec("aliroot -b -q rec.C\\(1\\) > rec.log 2>&1"); + } + else + { + gSystem->Exec("aliroot -b -q rec.C > rec.log 2>&1"); + } + + gSystem->Exec("mv syswatch.log recwatch.log"); + + if ( snapshot ) + { + gSystem->Exec(Form("mkdir -p OCDB/%s",srun)); + gSystem->Exec(Form("mv OCDB_*.root OCDB/%s/",srun)); + } + else + { + // cout<<">>>>> TAG <<<<<"<Exec("aliroot -b -q tag.C > tag.log 2>&1"); + + cout<<">>>>> CHECK ESD <<<<<"<Exec("aliroot -b -q CheckESD.C > checkesd.log 2>&1"); + cout<<">>>>> MAKE AOD <<<<<"<Exec("aliroot -b -q AODtrain.C > aod.log 2>&1"); + cout<<">>>>> CHECK AOD <<<<<"<Exec("aliroot -b -q CheckAOD.C > checkaod.log 2>&1"); + } + + return 0; +} diff --git a/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx b/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx index 18cfbb13760..b3174553534 100644 --- a/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx +++ b/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx @@ -1,193 +1,193 @@ -/************************************************************************** - * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -//----------------------------------------------------------------- -// AliAnalysisTaskContMC class -//----------------------------------------------------------------- - -#include "TChain.h" -#include "TTree.h" -#include "TLegend.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TH3F.h" -#include "TCanvas.h" -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliVTrack.h" -#include "AliAODMCParticle.h" -#include "AliVParticle.h" -#include "AliAODEvent.h" -#include "AliAODInputHandler.h" -#include "AliAnalysisTaskContMC.h" -#include "AliAnalysisTaskESDfilter.h" -#include "AliAnalysisDataContainer.h" -#include "AliHelperPID.h" -#include "AliCentrality.h" -#include "TProof.h" -#include "AliPID.h" -#include "AliVEvent.h" -#include "AliPIDResponse.h" -#include "AliStack.h" -#include - -#include - -using namespace std; - -ClassImp(AliAnalysisTaskContMC) - -//________________________________________________________________________ -AliAnalysisTaskContMC::AliAnalysisTaskContMC(const char *name) : AliAnalysisTaskSE(name), fAOD(0), fNSigmaPID(0), fIsMC(0), fOutput(0), fHistID(0) -{ - // Default constructor - - - DefineInput(0, TChain::Class()); - //DefineOutput(1, AliHelperPID::Class()); - DefineOutput(1, TList::Class()); - -} -//________________________________________________________________________ -//________________________________________________________________________ -void AliAnalysisTaskContMC::UserCreateOutputObjects() -{ - Printf("\n\n\n\n\n\n In CreateOutput Object:"); - - //create output objects - Printf("NSigma: %.1f",fNSigmaPID->GetNSigmaCut()); - Printf("IsMC: %d",fNSigmaPID->GetisMC()); - fOutput = new TList(); - fOutput->SetOwner(); - fOutput->SetName("list"); - - fHistID = new TH3F("fHistID","fHistID",6,-1.5,4.5,4,-1.5,2.5,38,0.2,4); - fOutput->Add(fHistID); - - if(!fNSigmaPID)AliFatal("PID object should be set in the steering macro"); - fOutput->Add(fNSigmaPID); - - //PostData(1, fNSigmaPID ); - PostData(1, fOutput ); - -} - -//________________________________________________________________________ -void AliAnalysisTaskContMC::UserExec(Option_t *) -{ - const Int_t npart=4; - const Int_t pdgcode[npart+2]={-1,211,321,2212,11,13}; - const Int_t partid[npart+2]={-1,0,1,2,3,4}; - // main event loop - fAOD = dynamic_cast(fInputEvent); - if (!fAOD) { - AliWarning("ERROR: AliAODEvent not available \n"); - return; - } - - if (strcmp(fAOD->ClassName(), "AliAODEvent")) - { - AliFatal("Not processing AODs"); - } - //MC Loop - TClonesArray *arrayMC = 0; - Printf("fIsMC: %d",fIsMC); - if (fIsMC) - { - arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName()); - if (!arrayMC) { - AliFatal("Error: MC particles branch not found!\n"); - } - } - Double_t centrality = 0; - - AliCentrality *centralityObj = fAOD->GetHeader()->GetCentralityP(); - if (centralityObj) - { - centrality = centralityObj->GetCentralityPercentileUnchecked("V0M"); - AliInfo(Form("Centrality is %f", centrality)); - } - else - { - Printf("WARNING: Centrality object is 0"); - centrality = -1; - } - if (centrality < 0) - return; - - - //vertex selection - Int_t nVertex = ((AliAODEvent*)fAOD)->GetNumberOfVertices(); - if( nVertex > 0 ) { - AliAODVertex* vertex = (AliAODVertex*)((AliAODEvent*)fAOD)->GetPrimaryVertex(); - //Int_t nTracksPrim = vertex->GetNContributors(); - Double_t zVertex = vertex->GetZ(); - //10 cm cut - if(TMath::Abs(zVertex)>10) return; - //AliInfo(Form(" Vertex in = %f with %d particles by %s data ...",zVertex,nTracksPrim,vertex->GetName())); - // Reject TPC only vertex - TString name(vertex->GetName()); - if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return; - } - - //Int_t count=0; - //track loop - for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) { - AliAODTrack* track = fAOD->GetTrack(iTracks); - if(!(track->TestFilterBit(32)))continue; - if (TMath::Abs(track->Eta()) > .8 || track->Pt() < .2) continue; - - Int_t pdg=-999; - Int_t isph=-999; - if (fIsMC && arrayMC) { - AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel())); - if (!partMC) { - AliError("Cannot get MC particle"); - continue; - } - pdg=TMath::Abs(partMC->GetPdgCode()); - isph=partMC->IsPhysicalPrimary(); - } - if(!isph)continue; - //step 1, TOF Matching - UInt_t status; - status=track->GetStatus(); - if((status&AliVTrack::kTOFout)==0 || (status&AliVTrack::kTIME)==0)continue; - - //step 2, combined PID - Int_t IDTPCTOF=fNSigmaPID->GetParticleSpecies(track,1); - if(IDTPCTOF==999)IDTPCTOF=-1; - Int_t IDMC=-1; - for(Int_t ipart=0;ipartFill(IDMC,IDTPCTOF,track->Pt()); - } // end loop on tracks - - PostData(1,fOutput); - -} - -//_________________________________________________________________ -void AliAnalysisTaskContMC::Terminate(Option_t *) -{ - // Terminate analysis - // - fOutput = dynamic_cast(GetOutputData(1)); - if (!fOutput) { - printf("ERROR: fOutput not available\n"); - return; - } - fHistID = dynamic_cast(fOutput->FindObject("fHistID")); - fNSigmaPID = dynamic_cast(fOutput->FindObject("fNSigmaPID")); -} +/************************************************************************** + * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +//----------------------------------------------------------------- +// AliAnalysisTaskContMC class +//----------------------------------------------------------------- + +#include "TChain.h" +#include "TTree.h" +#include "TLegend.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TH3F.h" +#include "TCanvas.h" +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliVTrack.h" +#include "AliAODMCParticle.h" +#include "AliVParticle.h" +#include "AliAODEvent.h" +#include "AliAODInputHandler.h" +#include "AliAnalysisTaskContMC.h" +#include "AliAnalysisTaskESDfilter.h" +#include "AliAnalysisDataContainer.h" +#include "AliHelperPID.h" +#include "AliCentrality.h" +#include "TProof.h" +#include "AliPID.h" +#include "AliVEvent.h" +#include "AliPIDResponse.h" +#include "AliStack.h" +#include + +#include + +using namespace std; + +ClassImp(AliAnalysisTaskContMC) + +//________________________________________________________________________ +AliAnalysisTaskContMC::AliAnalysisTaskContMC(const char *name) : AliAnalysisTaskSE(name), fAOD(0), fNSigmaPID(0), fIsMC(0), fOutput(0), fHistID(0) +{ + // Default constructor + + + DefineInput(0, TChain::Class()); + //DefineOutput(1, AliHelperPID::Class()); + DefineOutput(1, TList::Class()); + +} +//________________________________________________________________________ +//________________________________________________________________________ +void AliAnalysisTaskContMC::UserCreateOutputObjects() +{ + Printf("\n\n\n\n\n\n In CreateOutput Object:"); + + //create output objects + Printf("NSigma: %.1f",fNSigmaPID->GetNSigmaCut()); + Printf("IsMC: %d",fNSigmaPID->GetisMC()); + fOutput = new TList(); + fOutput->SetOwner(); + fOutput->SetName("list"); + + fHistID = new TH3F("fHistID","fHistID",6,-1.5,4.5,4,-1.5,2.5,38,0.2,4); + fOutput->Add(fHistID); + + if(!fNSigmaPID)AliFatal("PID object should be set in the steering macro"); + fOutput->Add(fNSigmaPID); + + //PostData(1, fNSigmaPID ); + PostData(1, fOutput ); + +} + +//________________________________________________________________________ +void AliAnalysisTaskContMC::UserExec(Option_t *) +{ + const Int_t npart=4; + const Int_t pdgcode[npart+2]={-1,211,321,2212,11,13}; + const Int_t partid[npart+2]={-1,0,1,2,3,4}; + // main event loop + fAOD = dynamic_cast(fInputEvent); + if (!fAOD) { + AliWarning("ERROR: AliAODEvent not available \n"); + return; + } + + if (strcmp(fAOD->ClassName(), "AliAODEvent")) + { + AliFatal("Not processing AODs"); + } + //MC Loop + TClonesArray *arrayMC = 0; + Printf("fIsMC: %d",fIsMC); + if (fIsMC) + { + arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName()); + if (!arrayMC) { + AliFatal("Error: MC particles branch not found!\n"); + } + } + Double_t centrality = 0; + + AliCentrality *centralityObj = fAOD->GetHeader()->GetCentralityP(); + if (centralityObj) + { + centrality = centralityObj->GetCentralityPercentileUnchecked("V0M"); + AliInfo(Form("Centrality is %f", centrality)); + } + else + { + Printf("WARNING: Centrality object is 0"); + centrality = -1; + } + if (centrality < 0) + return; + + + //vertex selection + Int_t nVertex = ((AliAODEvent*)fAOD)->GetNumberOfVertices(); + if( nVertex > 0 ) { + AliAODVertex* vertex = (AliAODVertex*)((AliAODEvent*)fAOD)->GetPrimaryVertex(); + //Int_t nTracksPrim = vertex->GetNContributors(); + Double_t zVertex = vertex->GetZ(); + //10 cm cut + if(TMath::Abs(zVertex)>10) return; + //AliInfo(Form(" Vertex in = %f with %d particles by %s data ...",zVertex,nTracksPrim,vertex->GetName())); + // Reject TPC only vertex + TString name(vertex->GetName()); + if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return; + } + + //Int_t count=0; + //track loop + for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) { + AliAODTrack* track = fAOD->GetTrack(iTracks); + if(!(track->TestFilterBit(32)))continue; + if (TMath::Abs(track->Eta()) > .8 || track->Pt() < .2) continue; + + Int_t pdg=-999; + Int_t isph=-999; + if (fIsMC && arrayMC) { + AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel())); + if (!partMC) { + AliError("Cannot get MC particle"); + continue; + } + pdg=TMath::Abs(partMC->GetPdgCode()); + isph=partMC->IsPhysicalPrimary(); + } + if(!isph)continue; + //step 1, TOF Matching + UInt_t status; + status=track->GetStatus(); + if((status&AliVTrack::kTOFout)==0 || (status&AliVTrack::kTIME)==0)continue; + + //step 2, combined PID + Int_t IDTPCTOF=fNSigmaPID->GetParticleSpecies(track,1); + if(IDTPCTOF==999)IDTPCTOF=-1; + Int_t IDMC=-1; + for(Int_t ipart=0;ipartFill(IDMC,IDTPCTOF,track->Pt()); + } // end loop on tracks + + PostData(1,fOutput); + +} + +//_________________________________________________________________ +void AliAnalysisTaskContMC::Terminate(Option_t *) +{ + // Terminate analysis + // + fOutput = dynamic_cast(GetOutputData(1)); + if (!fOutput) { + printf("ERROR: fOutput not available\n"); + return; + } + fHistID = dynamic_cast(fOutput->FindObject("fHistID")); + fNSigmaPID = dynamic_cast(fOutput->FindObject("fNSigmaPID")); +} diff --git a/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.h b/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.h index 89710ed13fd..a9cba73c22d 100644 --- a/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.h +++ b/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.h @@ -1,47 +1,47 @@ -#ifndef ALIANALYSISTASKCONTMC_H -#define ALIANALYSISTASKCONTMC_H - -class TH1F; -class TH2F; -class TH3F; -class AliAODEvent; -class AliHelperPID; - -#include "AliAnalysisTaskSE.h" -#include "AliHelperPID.h" - -class AliAnalysisTaskContMC : public AliAnalysisTaskSE -{ - public: - - // constructors - AliAnalysisTaskContMC() : AliAnalysisTaskSE(), fAOD(0), fNSigmaPID(0), fIsMC(0), fOutput(0), fHistID(0) - {} - AliAnalysisTaskContMC(const char *name); - virtual ~AliAnalysisTaskContMC() {} - - AliHelperPID * GetPID() { return fNSigmaPID; } - void SetPID (AliHelperPID * pid) { fNSigmaPID = pid;} - - void SetIsMC(Bool_t isMC = kFALSE) {fIsMC = isMC; } - Bool_t GetIsMC() const { return fIsMC;} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - private: - - AliAODEvent *fAOD; //! AOD object - AliHelperPID *fNSigmaPID; // NSigmaPID object - Bool_t fIsMC;// true if processing MC - TList *fOutput; //! tlist with output - TH3F *fHistID; //! histo - - AliAnalysisTaskContMC(const AliAnalysisTaskContMC&); - AliAnalysisTaskContMC& operator=(const AliAnalysisTaskContMC&); - - ClassDef(AliAnalysisTaskContMC, 1); -}; - -#endif +#ifndef ALIANALYSISTASKCONTMC_H +#define ALIANALYSISTASKCONTMC_H + +class TH1F; +class TH2F; +class TH3F; +class AliAODEvent; +class AliHelperPID; + +#include "AliAnalysisTaskSE.h" +#include "AliHelperPID.h" + +class AliAnalysisTaskContMC : public AliAnalysisTaskSE +{ + public: + + // constructors + AliAnalysisTaskContMC() : AliAnalysisTaskSE(), fAOD(0), fNSigmaPID(0), fIsMC(0), fOutput(0), fHistID(0) + {} + AliAnalysisTaskContMC(const char *name); + virtual ~AliAnalysisTaskContMC() {} + + AliHelperPID * GetPID() { return fNSigmaPID; } + void SetPID (AliHelperPID * pid) { fNSigmaPID = pid;} + + void SetIsMC(Bool_t isMC = kFALSE) {fIsMC = isMC; } + Bool_t GetIsMC() const { return fIsMC;} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + private: + + AliAODEvent *fAOD; //! AOD object + AliHelperPID *fNSigmaPID; // NSigmaPID object + Bool_t fIsMC;// true if processing MC + TList *fOutput; //! tlist with output + TH3F *fHistID; //! histo + + AliAnalysisTaskContMC(const AliAnalysisTaskContMC&); + AliAnalysisTaskContMC& operator=(const AliAnalysisTaskContMC&); + + ClassDef(AliAnalysisTaskContMC, 1); +}; + +#endif diff --git a/PWGCF/Correlations/JCORRAN/AliJBaseTrack.cxx b/PWGCF/Correlations/JCORRAN/AliJBaseTrack.cxx index 148f542f4b9..dd764652a24 100755 --- a/PWGCF/Correlations/JCORRAN/AliJBaseTrack.cxx +++ b/PWGCF/Correlations/JCORRAN/AliJBaseTrack.cxx @@ -1,91 +1,91 @@ -// $Id: AliJBaseTrack.cxx,v 1.5 2008/05/08 15:19:52 djkim Exp $ -//////////////////////////////////////////////////// -/*! - \file AliJBaseTrack.cxx - \brief - \author J. Rak, D.J.Kim, R.Diaz (University of Jyvaskyla) - \email: djkim@jyu.fi - \version $Revision: 1.5 $ - \date $Date: 2008/05/08 15:19:52 $ - */ -//////////////////////////////////////////////////// - -#include -#include -#include "AliJBaseTrack.h" - -//______________________________________________________________________________ -AliJBaseTrack::AliJBaseTrack(): - fID(-1), - fLabel(-1), - fParticleType(-1), - fCharge(0), - fStatus(0), - fFlags(0) -{ - // constructor -} - -//_____________________________________________________________ -AliJBaseTrack::AliJBaseTrack(float px,float py, float pz, float e, Int_t id, Short_t ptype, Char_t charge): - TLorentzVector( px, py, pz, e ), - fID(id), - fLabel(-1), - fParticleType(ptype), - fCharge(charge), - fStatus(0), - fFlags(0) -{ - // constructor -} - -//_____________________________________________________________ -AliJBaseTrack::AliJBaseTrack(const AliJBaseTrack& a): - TLorentzVector (a), - fID (a.fID), - fLabel (a.fLabel), - fParticleType ( a.fParticleType ), - fCharge ( a.fCharge ), - fStatus ( a.fStatus ), - fFlags ( a.fFlags ) -{ - //copy constructor -} - -//_____________________________________________________________ -AliJBaseTrack::AliJBaseTrack(const TLorentzVector& a): - TLorentzVector (a), - fID ( -1 ), - fLabel ( -1 ), - fParticleType ( -1 ), - fCharge ( 0 ), - fStatus ( 0 ), - fFlags ( 0 ) -{ - //copy constructor -} -//_____________________________________________________________ -AliJBaseTrack& AliJBaseTrack::operator=(const AliJBaseTrack& trk){ - //operator = - if(this != &trk){ - TLorentzVector::operator=(trk); - fID = trk.fID; - fLabel = trk.fLabel; - fParticleType = trk.fParticleType; - fCharge = trk.fCharge; - fStatus = trk.fStatus; - fFlags = trk.fFlags; - } - return *this; -} - -//_____________________________________________________________ -void AliJBaseTrack::Print(Option_t* option = "" ) const{ - //object print out - std::cout< +#include +#include "AliJBaseTrack.h" + +//______________________________________________________________________________ +AliJBaseTrack::AliJBaseTrack(): + fID(-1), + fLabel(-1), + fParticleType(-1), + fCharge(0), + fStatus(0), + fFlags(0) +{ + // constructor +} + +//_____________________________________________________________ +AliJBaseTrack::AliJBaseTrack(float px,float py, float pz, float e, Int_t id, Short_t ptype, Char_t charge): + TLorentzVector( px, py, pz, e ), + fID(id), + fLabel(-1), + fParticleType(ptype), + fCharge(charge), + fStatus(0), + fFlags(0) +{ + // constructor +} + +//_____________________________________________________________ +AliJBaseTrack::AliJBaseTrack(const AliJBaseTrack& a): + TLorentzVector (a), + fID (a.fID), + fLabel (a.fLabel), + fParticleType ( a.fParticleType ), + fCharge ( a.fCharge ), + fStatus ( a.fStatus ), + fFlags ( a.fFlags ) +{ + //copy constructor +} + +//_____________________________________________________________ +AliJBaseTrack::AliJBaseTrack(const TLorentzVector& a): + TLorentzVector (a), + fID ( -1 ), + fLabel ( -1 ), + fParticleType ( -1 ), + fCharge ( 0 ), + fStatus ( 0 ), + fFlags ( 0 ) +{ + //copy constructor +} +//_____________________________________________________________ +AliJBaseTrack& AliJBaseTrack::operator=(const AliJBaseTrack& trk){ + //operator = + if(this != &trk){ + TLorentzVector::operator=(trk); + fID = trk.fID; + fLabel = trk.fLabel; + fParticleType = trk.fParticleType; + fCharge = trk.fCharge; + fStatus = trk.fStatus; + fFlags = trk.fFlags; + } + return *this; +} + +//_____________________________________________________________ +void AliJBaseTrack::Print(Option_t* option = "" ) const{ + //object print out + std::cout<SetCuts(MinimumClustersTPC,MinClusterRatio,MaxTPCchi2,MinimumClustersITS, EtaCut,TriggerEtaCut,NearPhiCut,XECut,MaxDCA,MaxDCAXY,MaxDCAZ, DCAMethod, TPCRefit,ITSRefit,SPDCut,MinimumPt,MaximumPt,ZVertexCut,NumberOfTriggerIDs,TriggerIDArray); - task->SetOptions(RunOnAOD,EfficiencyCorrection,DEBUG,MakeMCHistos); - task->SetBins(nBinPhi,nBinEta,nBinsPhiEtaPhi,nBinsPhiEtaEta,nBinsPhiPhi,nBinsEtaEta,PhiPlotMin,PhiPlotMax,NTriggerPtBins,NEventsToMix,NCentralityBins,PercentageCentralityBins,NAssociatedPtBins,N3ParticleAssociatedPtBins,NZVertexBinsForMixing,NXEBins,TriggerPtBins,AssociatedPtBins,AssociatedPtBins31,AssociatedPtBins32,CentralityBins1,CentralityBins2,XEBins); - task->SetEfficiencies(EffFitPtCut,EfficiencyFitLow,EfficiencyFitHigh,NParamFitLow,NParamFitHigh,FitLowParam,FitHighParam); - task->SetFlow(V2FitPtCut,V3FitPtCut,V4FitPtCut,V2FitLow,V2FitHigh,V3FitLow,V3FitHigh,V4FitLow,V4FitHigh,NParamV2FitLow,NParamV2FitHigh,NParamV3FitLow,NParamV3FitHigh,NParamV4FitLow,NParamV4FitHigh,FitLowParamV2,FitHighParamV2,FitLowParamV3,FitHighParamV3,FitLowParamV4,FitHighParamV4); - -// physics selection -Int_t isMC=0;//1 for MC 0 for DATA -//gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); -//AliPhysicsSelectionTask *PhysicsTask=AddTaskPhysicsSelection(isMC, 0); //isMC is true when processing monte carlo, the second 0 disables the cluster vs tracklets - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); - //AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(isMC,0); - task->SelectCollisionCandidates(AliVEvent::kMB); - //AliCentralitySelectionTask *centSelTask = AliCentralitySelectionTask("CentralitySelection"); - - mgr->AddTask(task); - - - //================================================ - // data containers - //================================================ - // find input container - //below the trunk version - // AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer(); - //this is the old way!!! - AliAnalysisDataContainer *cinput = (AliAnalysisDataContainer*)mgr->GetContainers()->FindObject("cAUTO_INPUT"); - - // define output containers, please use 'username'_'somename' - AliAnalysisDataContainer *coutput1 = - mgr->CreateContainer("julery_DiHadron", TList::Class(), - AliAnalysisManager::kOutputContainer,"julery_DiHadron.root"); - - // connect containers - mgr->ConnectInput (task, 0, cinput ); - mgr->ConnectOutput (task, 0, coutput1); - - return task; - -} +//#include "exception.h" +//For running on PbPb data 0-50% most central +AliAnalysisTask *AddTask_DiHadron(Int_t IncludeLowPtBins=0){ + + //get the current analysis manager + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + Error("AddTask_sma_PriVtx", "No analysis manager found."); + return 0; + } + + + //========= SetInitial Parameters ===== + //Int_t IncludeLowPtBins=0;//Set to 1 to include low pt triggers + + //Track Quality Cuts + Int_t MinimumClustersTPC=70; + Float_t MinClusterRatio=0.51;//Must have at least this ratio not shared + Float_t MaxTPCchi2=4; + Int_t MinimumClustersITS=0; + Float_t EtaCut=0.9;//Tracks in +/- Eta are used + Float_t TriggerEtaCut=0.5;//Trigger particle restriction so flat area in acceptanc can be created + Float_t NearPhiCut=1.5;//Cut used to seperate near and away side for delta eta plots + Float_t XECut=NearPhiCut;//For XE distribution near and away seperation + Float_t MaxDCA=3;//Total DCA Cut + Float_t MaxDCAXY=2.4; + Float_t MaxDCAZ=3.2; + Int_t DCAMethod=1;//0 MaxDCA used, 1 MaxDCAXY and MaxDCAZ used 2 pT dependent DCA cut + Int_t TPCRefit=1; + Int_t ITSRefit=0;//1 for all particles, 2 for particles above 5 GeV/c + Int_t SPDCut=0;//check for a point in 1 of first 2 layers of the its + Float_t MinimumPt=0.25;//Minimum Pt considered by the code + Float_t MaximumPt=50; + Float_t ZVertexCut=10;//in cm + + //Options + Int_t RunOnAOD=1; + Int_t EfficiencyCorrection=1;//do efficiency corrections in this code + Int_t MakeMCHistos=0;//if 0 MC histograms are not made (will be empty if 1 and ran on real data) + Int_t DEBUG=0;//for debugging + + + + //Binning + Int_t nBinPhi=60;//Number of bins for #Delta#phi histograms + Int_t nBinEta=54;//Number of bins for #Delta#eta histograms + Int_t nBinsPhiEtaPhi=20;//Number of bins for #Delta#phi-#Delta#eta in #Delta#phi + Int_t nBinsPhiEtaEta=18;//Number of bins for #Delta#phi-#Delta#eta in #Delta#phi + Int_t nBinsPhiPhi=30;//Number of bins for #Delta#phi-#Delta#phi + Int_t nBinsEtaEta=27;//Number of bins for #Delta#eta-#Delta#eta + const Float_t fPi=3.1415926535898; + Float_t PhiPlotMin=-fPi/3;//Min bin edge in #Delta#phi + Float_t PhiPlotMax=2*fPi+PhiPlotMin;//Max bin edge + + //Size of some arrays change array contents below + const Int_t NTriggerPtBins2=11;//max20 + const Int_t NTriggerPtBins1=8;//max=20 + Int_t NTriggerPtBins=NTriggerPtBins1; + if(IncludeLowPtBins)NTriggerPtBins=NTriggerPtBins2; + const Int_t NEventsToMix=10;//max=100 + const Int_t NCentralityBins=7;//max=10 //6 + const Int_t PercentageCentralityBins=1;//0 or 1 + const Int_t NAssociatedPtBins=25;//max=50 + const Int_t N3ParticleAssociatedPtBins=4;//max=50 + const Int_t NZVertexBinsForMixing=1;//max=20 + const Int_t NXEBins=1;//max=20 + const Int_t NumberOfTriggerIDs=1; + Float_t EffFitPtCut=3; + + TF1 *EfficiencyFitLow=new TF1("EfficiencyFitLow","[0]/[1]*exp(-0.5*pow(x/[1],2))+[2]+[3]*x+[4]*x**2+[5]*x**3",MinimumPt,EffFitPtCut); + TF1 *EfficiencyFitHigh=new TF1("EfficiencyFitHigh","[0]+[1]*(x-3)",EffFitPtCut,MaximumPt); + const Int_t NParamFitLow=6; + const Int_t NParamFitHigh=2; + + //Not high enough occupancy to worry about the centrality in pp + //For overlapping centrality bins efficiencies from first bin are used + //For 1% bins from pass2 +Float_t FitLowParam[NCentralityBins*NParamFitLow]={ + -0.0227546, 0.21379, 0.916013, 0.0586031, -0.0429047, 0.0064962, + -0.0224257, 0.215105, 0.916696, 0.0593096, -0.0429726, 0.00650312, + -0.0220935, 0.208194, 0.915207, 0.0613371, -0.0416018, 0.00576639, + -0.0229694, 0.208645, 0.919995, 0.0527738, -0.0344433, 0.00430404, + -0.0235676, 0.206099, 0.922875, 0.0476261, -0.0298983, 0.0032692, + -0.0238139, 0.206366, 0.925183, 0.0430703, -0.0264516, 0.00250388, + -0.024815, 0.204409, 0.928448, 0.03423, -0.019894, 0.00121746 +}; + Float_t FitHighParam[NCentralityBins*NParamFitHigh]={ + 0.881078, 0.00158217, + 0.883456, 0.00144851, + 0.880495, 0.00369636, + 0.884535, 0.00297087, + 0.884937, 0.00166201, + 0.883934, 0.00290625, + 0.884964, -0.000784607 + }; + + Float_t V2FitPtCut=2.75; + Float_t V3FitPtCut=2.75; + Float_t V4FitPtCut=2.75; + TF1 *V2FitLow=new TF1("V2FitLow","[0]*(x+[1]*x**2+[2]*x**3+[3]*x**4)",MinimumPt,V2FitPtCut); + TF1 *V2FitHigh=new TF1("V2FitHigh","[0]*exp(-0.5*((x-[1])/[2])**2)+[3]",V2FitPtCut,MaximumPt); + TF1 *V3FitLow=new TF1("V3FitLow","[0]*(x+[1]*x**2+[2]*x**3+[3]*x**4)",MinimumPt,V2FitPtCut); + TF1 *V3FitHigh=new TF1("V3FitHigh","[0]*exp(-0.5*((x-[1])/[2])**2)+[3]",V2FitPtCut,MaximumPt); + TF1 *V4FitLow=new TF1("V4FitLow","[0]*(x+[1]*x**2+[2]*x**3+[3]*x**4)",MinimumPt,V2FitPtCut); + TF1 *V4FitHigh=new TF1("V4FitHigh","[0]*exp(-0.5*((x-[1])/[2])**2)+[3]",V2FitPtCut,MaximumPt); + + const Int_t NParamV2FitLow=4; + const Int_t NParamV2FitHigh=4; + const Int_t NParamV3FitLow=4; + const Int_t NParamV3FitHigh=4; + const Int_t NParamV4FitLow=4; + const Int_t NParamV4FitHigh=4; + + //From FlowScale2 macro +Float_t FitLowParamV2[NCentralityBins*NParamV2FitLow]={ +0.046931, -0.504895, 0.186345, -0.030504, +0.060953, -0.503882, 0.197361, -0.030849, +0.088939, -0.396433, 0.127467, -0.016969, +0.122602, -0.347615, 0.098626, -0.012576, +0.155403, -0.296297, 0.065681, -0.007492, +0.177546, -0.271958, 0.049388, -0.005644, +0.187634, -0.223967, 0.011281, 0.001462}; +Float_t FitHighParamV2[NCentralityBins*NParamV2FitHigh]={ +0.000000, 4.478095, 0.500000, 0.049007, +0.012659, 3.603740, 0.656049, 0.071827, +0.043836, 3.623140, 1.414293, 0.089569, +0.071277, 3.490653, 1.454361, 0.112755, +0.082163, 3.324474, 1.429585, 0.145809, +0.085348, 3.194132, 1.562318, 0.163847, +0.061056, 2.994950, 1.442946, 0.194451}; +Float_t FitLowParamV3[NCentralityBins*NParamV3FitLow]={ +0.019078, 0.793599, -0.436079, 0.075946, +0.025818, 0.088555, 0.070194, -0.026702, +0.028562, 0.297268, -0.112696, 0.013257, +0.034723, 0.137282, -0.008578, -0.009524, +0.041567, -0.002427, 0.093642, -0.032998, +0.045574, 0.059023, 0.029342, -0.019022, +0.052432, -0.067332, 0.087218, -0.028239}; +Float_t FitHighParamV3[NCentralityBins*NParamV3FitHigh]={ +0.079111, 3.802577, 3.182298, 0.000000, +0.105446, 4.216029, 2.377002, 0.000000, +0.106553, 4.500000, 2.825647, 0.009652, +0.099684, 3.875928, 1.968600, 0.022106, +0.103187, 3.597519, 1.980556, 0.022403, +0.123473, 3.773586, 2.099909, 0.011130, +0.140945, 3.618698, 1.852780, 0.000000}; +Float_t FitLowParamV4[NCentralityBins*NParamV4FitLow]={ +0.005289, 1.000000, 0.398581, -0.095251, +0.018611, -1.000000, 0.837275, -0.163058, +0.022107, -1.000000, 0.847701, -0.168469, +0.025434, -1.000000, 0.854238, -0.176690, +0.030768, -1.000000, 0.811683, -0.164335, +0.037000, -1.000000, 0.781250, -0.158122, +0.043484, -1.000000, 0.752546, -0.153147}; + Float_t FitHighParamV4[NCentralityBins*NParamV4FitHigh]={ +0.061365, 3.669890, 1.724126, 0.014456, +0.086516, 4.194769, 1.723464, 0.000000, +0.030263, 4.008413, 0.563914, 0.067831, +0.073456, 4.255665, 1.551659, 0.025494, +0.058771, 4.102898, 1.191926, 0.048796, +0.054682, 4.221963, 1.119594, 0.064515, +0.094564, 4.500000, 1.568750, 0.038027}; + + + + if(IncludeLowPtBins){ Float_t TriggerPtBins[(NTriggerPtBins2+1)]={0.75,1,2,2.5,3,4,6,8,10,15,20,25};} + else{ Float_t TriggerPtBins[(NTriggerPtBins1+1)]={2.5,3,4,6,8,10,15,20,25};} + + Float_t AssociatedPtBins[(NAssociatedPtBins+1)]={0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,12,15,20,25,30,40,50,70,100}; + + Float_t AssociatedPtBins31[N3ParticleAssociatedPtBins]={0.5,0.75,1,2}; + Float_t AssociatedPtBins32[N3ParticleAssociatedPtBins]={0.75,1,2,3}; + + Int_t CentralityBins1[NCentralityBins]={0,0,5,10,20,30,40}; + Int_t CentralityBins2[NCentralityBins]={2,5,10,20,30,40,50}; + + Float_t XEBins[(NXEBins+1)]={0,0.01}; + //char *TriggerIDArray="CINT1B";//seperate multiple with , + //char *TriggerIDArray="CSH1-B";//seperate multiple with , + char *TriggerIDArray="C";//PbPb test, using SelectCollisionsCanidates instead + + //////////////////////// + //Add the task + //////////////////////// + AliAnalysisTaskDiHadron *task = new AliAnalysisTaskDiHadron("julery_DiHadron"); + task->SetCuts(MinimumClustersTPC,MinClusterRatio,MaxTPCchi2,MinimumClustersITS, EtaCut,TriggerEtaCut,NearPhiCut,XECut,MaxDCA,MaxDCAXY,MaxDCAZ, DCAMethod, TPCRefit,ITSRefit,SPDCut,MinimumPt,MaximumPt,ZVertexCut,NumberOfTriggerIDs,TriggerIDArray); + task->SetOptions(RunOnAOD,EfficiencyCorrection,DEBUG,MakeMCHistos); + task->SetBins(nBinPhi,nBinEta,nBinsPhiEtaPhi,nBinsPhiEtaEta,nBinsPhiPhi,nBinsEtaEta,PhiPlotMin,PhiPlotMax,NTriggerPtBins,NEventsToMix,NCentralityBins,PercentageCentralityBins,NAssociatedPtBins,N3ParticleAssociatedPtBins,NZVertexBinsForMixing,NXEBins,TriggerPtBins,AssociatedPtBins,AssociatedPtBins31,AssociatedPtBins32,CentralityBins1,CentralityBins2,XEBins); + task->SetEfficiencies(EffFitPtCut,EfficiencyFitLow,EfficiencyFitHigh,NParamFitLow,NParamFitHigh,FitLowParam,FitHighParam); + task->SetFlow(V2FitPtCut,V3FitPtCut,V4FitPtCut,V2FitLow,V2FitHigh,V3FitLow,V3FitHigh,V4FitLow,V4FitHigh,NParamV2FitLow,NParamV2FitHigh,NParamV3FitLow,NParamV3FitHigh,NParamV4FitLow,NParamV4FitHigh,FitLowParamV2,FitHighParamV2,FitLowParamV3,FitHighParamV3,FitLowParamV4,FitHighParamV4); + +// physics selection +Int_t isMC=0;//1 for MC 0 for DATA +//gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); +//AliPhysicsSelectionTask *PhysicsTask=AddTaskPhysicsSelection(isMC, 0); //isMC is true when processing monte carlo, the second 0 disables the cluster vs tracklets + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + //AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(isMC,0); + task->SelectCollisionCandidates(AliVEvent::kMB); + //AliCentralitySelectionTask *centSelTask = AliCentralitySelectionTask("CentralitySelection"); + + mgr->AddTask(task); + + + //================================================ + // data containers + //================================================ + // find input container + //below the trunk version + // AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer(); + //this is the old way!!! + AliAnalysisDataContainer *cinput = (AliAnalysisDataContainer*)mgr->GetContainers()->FindObject("cAUTO_INPUT"); + + // define output containers, please use 'username'_'somename' + AliAnalysisDataContainer *coutput1 = + mgr->CreateContainer("julery_DiHadron", TList::Class(), + AliAnalysisManager::kOutputContainer,"julery_DiHadron.root"); + + // connect containers + mgr->ConnectInput (task, 0, cinput ); + mgr->ConnectOutput (task, 0, coutput1); + + return task; + +} diff --git a/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelations.C b/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelations.C index 2d9b6eff8fe..7e15d0e8897 100644 --- a/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelations.C +++ b/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelations.C @@ -1,104 +1,104 @@ -AliAnalysisTaskPhiCorrelations *AddTaskPhiCorrelations(Int_t analysisMode = 0, Bool_t ppRun = kFALSE, const char* outputFileName = 0, Bool_t eventMixing = kTRUE, Int_t zVtxAxis = 0, const char* containerName = "histosPhiCorrelations", const char* folderName = "PWG4_PhiCorrelations") -{ - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskPhiCorrelations", "No analysis manager to connect to."); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - AliAnalysisTaskPhiCorrelations* ana = new AliAnalysisTaskPhiCorrelations(containerName); - ana->SetMode(analysisMode);// data or corrections mode - -// if (analysisMode == 0) // data -// ana->SelectCollisionCandidates(AliVEvent::kMB); - - // common config, - ana->SetDebugLevel(0); - // ana->SetFilterBit(16); - //ana->SetFilterBit(64+32); - -// Int_t bit = 1; - Int_t bit = 128; -// Int_t bit = 256; -// Int_t bit = 512; -// Int_t bit = 1024; - ana->SetFilterBit(bit); - - Printf("AddTaskPhiCorrelations:\n\n\n++++++++++ Using bit %d ++++++++++++\n\n\n", bit); - - ana->SetTrackEtaCut(0.9); - - ana->SetPtMin(0.5); - - //ana->SetEventSelectionBit(AliAnalysisHelperJetTasks::kIsPileUp); - ana->SetReduceMemoryFootprint(kTRUE); - //ana->SetSelectCharge(2); - - ana->SetEventMixing(eventMixing); - ana->SetUseVtxAxis(zVtxAxis); - - ana->SetZVertex(10); - -// ana->SetSkipTrigger(kTRUE); -// ana->SetTriggerRestrictEta(0.5); -// ana->SetEtaOrdering(kTRUE); - -// ana->SetPairCuts(kTRUE, kTRUE); - -// ana->SetCompareCentralities(kTRUE); -// ana->SetTwoTrackEfficiencyCut(kTRUE); - -// ana->SetFillpT(kTRUE); - -// ana->SetInjectedSignals(kTRUE); -// ana->SetRejectCentralityOutliers(); - - //pA -/* ana->SetEventSelectionBit(AliVEvent::kCINT5); - ana->SetTwoTrackEfficiencyCut(); - ana->SetStepsFillSkip(kFALSE, kTRUE);*/ -// ana->SetCentralityMethod("ZNA_MANUAL"); -// ana->SetCentralityMethod("TRACKS_MANUAL"); -// ana->SetCourseCentralityBinning(kTRUE); -// ana->SetMixingTracks(1); - - if (0) - { - Printf("AddTaskPhiCorrelations:\n\n\n++++++++++ Using SPD centrality selection ++++++++++++\n\n\n"); - ana->SetCentralityMethod("CL1"); - } - - if (0) - { - Printf("AddTaskPhiCorrelations:\n\n\n++++++++++ Using ZDC centrality selection ++++++++++++\n\n\n"); - ana->SetCentralityMethod("ZEMvsZDC"); - } - - - if (ppRun) - { - Printf("AddTaskPhiCorrelations:\n\n\n+++++++++++++++ Configuring for p+p! +++++++++++++++++\n\n\n"); - ana->SetCentralityMethod(""); // only for pp - } - -// gSystem->Sleep(3000); - - mgr->AddTask(ana); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - if (!outputFileName) - outputFileName = AliAnalysisManager::GetCommonFileName(); - - AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(containerName, TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:%s", outputFileName, folderName)); - - mgr->ConnectInput (ana, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (ana, 0, coutput1 ); - - return ana; -} +AliAnalysisTaskPhiCorrelations *AddTaskPhiCorrelations(Int_t analysisMode = 0, Bool_t ppRun = kFALSE, const char* outputFileName = 0, Bool_t eventMixing = kTRUE, Int_t zVtxAxis = 0, const char* containerName = "histosPhiCorrelations", const char* folderName = "PWG4_PhiCorrelations") +{ + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskPhiCorrelations", "No analysis manager to connect to."); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + AliAnalysisTaskPhiCorrelations* ana = new AliAnalysisTaskPhiCorrelations(containerName); + ana->SetMode(analysisMode);// data or corrections mode + +// if (analysisMode == 0) // data +// ana->SelectCollisionCandidates(AliVEvent::kMB); + + // common config, + ana->SetDebugLevel(0); + // ana->SetFilterBit(16); + //ana->SetFilterBit(64+32); + +// Int_t bit = 1; + Int_t bit = 128; +// Int_t bit = 256; +// Int_t bit = 512; +// Int_t bit = 1024; + ana->SetFilterBit(bit); + + Printf("AddTaskPhiCorrelations:\n\n\n++++++++++ Using bit %d ++++++++++++\n\n\n", bit); + + ana->SetTrackEtaCut(0.9); + + ana->SetPtMin(0.5); + + //ana->SetEventSelectionBit(AliAnalysisHelperJetTasks::kIsPileUp); + ana->SetReduceMemoryFootprint(kTRUE); + //ana->SetSelectCharge(2); + + ana->SetEventMixing(eventMixing); + ana->SetUseVtxAxis(zVtxAxis); + + ana->SetZVertex(10); + +// ana->SetSkipTrigger(kTRUE); +// ana->SetTriggerRestrictEta(0.5); +// ana->SetEtaOrdering(kTRUE); + +// ana->SetPairCuts(kTRUE, kTRUE); + +// ana->SetCompareCentralities(kTRUE); +// ana->SetTwoTrackEfficiencyCut(kTRUE); + +// ana->SetFillpT(kTRUE); + +// ana->SetInjectedSignals(kTRUE); +// ana->SetRejectCentralityOutliers(); + + //pA +/* ana->SetEventSelectionBit(AliVEvent::kCINT5); + ana->SetTwoTrackEfficiencyCut(); + ana->SetStepsFillSkip(kFALSE, kTRUE);*/ +// ana->SetCentralityMethod("ZNA_MANUAL"); +// ana->SetCentralityMethod("TRACKS_MANUAL"); +// ana->SetCourseCentralityBinning(kTRUE); +// ana->SetMixingTracks(1); + + if (0) + { + Printf("AddTaskPhiCorrelations:\n\n\n++++++++++ Using SPD centrality selection ++++++++++++\n\n\n"); + ana->SetCentralityMethod("CL1"); + } + + if (0) + { + Printf("AddTaskPhiCorrelations:\n\n\n++++++++++ Using ZDC centrality selection ++++++++++++\n\n\n"); + ana->SetCentralityMethod("ZEMvsZDC"); + } + + + if (ppRun) + { + Printf("AddTaskPhiCorrelations:\n\n\n+++++++++++++++ Configuring for p+p! +++++++++++++++++\n\n\n"); + ana->SetCentralityMethod(""); // only for pp + } + +// gSystem->Sleep(3000); + + mgr->AddTask(ana); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + if (!outputFileName) + outputFileName = AliAnalysisManager::GetCommonFileName(); + + AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(containerName, TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:%s", outputFileName, folderName)); + + mgr->ConnectInput (ana, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (ana, 0, coutput1 ); + + return ana; +} diff --git a/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelationsQA.C b/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelationsQA.C index 625f328b638..3a65424484f 100644 --- a/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelationsQA.C +++ b/PWGCF/Correlations/macros/dphicorrelations/AddTaskPhiCorrelationsQA.C @@ -1,32 +1,32 @@ -AliPhiCorrelationsQATask *AddTaskPhiCorrelationsQA() -{ - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskPhiCorrelations", "No analysis manager to connect to."); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - AliPhiCorrelationsQATask* ana = new AliPhiCorrelationsQATask(""); - - ana->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kUserDefined); - - Bool_t isMC = (mgr->GetMCtruthEventHandler() != NULL); - if (isMC) - ana->SetUseUncheckedCentrality(); - - mgr->AddTask(ana); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("histosPhiCorrelationsQA", TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s", AliAnalysisManager::GetCommonFileName())); - - mgr->ConnectInput (ana, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (ana, 1, coutput1 ); - - return ana; -} +AliPhiCorrelationsQATask *AddTaskPhiCorrelationsQA() +{ + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskPhiCorrelations", "No analysis manager to connect to."); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + AliPhiCorrelationsQATask* ana = new AliPhiCorrelationsQATask(""); + + ana->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kUserDefined); + + Bool_t isMC = (mgr->GetMCtruthEventHandler() != NULL); + if (isMC) + ana->SetUseUncheckedCentrality(); + + mgr->AddTask(ana); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("histosPhiCorrelationsQA", TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s", AliAnalysisManager::GetCommonFileName())); + + mgr->ConnectInput (ana, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (ana, 1, coutput1 ); + + return ana; +} diff --git a/PWGCF/Correlations/macros/underlyingevent/AddTaskLeadingTrackUE.C b/PWGCF/Correlations/macros/underlyingevent/AddTaskLeadingTrackUE.C index 774d14317d7..330bed5e2c8 100644 --- a/PWGCF/Correlations/macros/underlyingevent/AddTaskLeadingTrackUE.C +++ b/PWGCF/Correlations/macros/underlyingevent/AddTaskLeadingTrackUE.C @@ -1,62 +1,62 @@ - - -void ConfigTaskUE(AliAnalysisTaskLeadingTrackUE * ueana ); // common config, extend with different cases - -AliAnalysisTaskLeadingTrackUE *AddTaskLeadingTrackUE(Int_t analysisMode = 0) -{ -// Creates a jet fider task, configures it and adds it to the analysis manager. - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskLeadingTrackUE", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskLeadingTrackUE", "This task requires an input event handler"); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - - AliAnalysisTaskLeadingTrackUE* ueana = new AliAnalysisTaskLeadingTrackUE("UEAnalysis_LeadingTrack"); - ueana->SetMode(analysisMode);// data or corrections mode - ConfigTaskUE(ueana); - - mgr->AddTask(ueana); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - AliAnalysisDataContainer *coutput1_UE = 0; - coutput1_UE = mgr->CreateContainer("histosLeadingTrackUE", TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWG4_LeadingTrackUE",AliAnalysisManager::GetCommonFileName())); - - mgr->ConnectInput (ueana, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (ueana, 0, coutput1_UE ); - - return ueana; -} - -void ConfigTaskUE(AliAnalysisTaskLeadingTrackUE * ueana){ - // common config, - ueana->SetDebugLevel(0); - ueana->SetPtRangeInHist(100, 0., 100.); - // ueana->SetFilterBit(16); - ueana->SetFilterBit(64+32); - ueana->SetTrackEtaCut(0.8); - ueana->SetLeadingTrackEtaCut(0.8); - ueana->SetEventSelectionBit(AliAnalysisHelperJetTasks::kIsPileUp); - ueana->SetReduceMemoryFootprint(kTRUE); - - if (1) - { - file = TFile::Open("$ALICE_ROOT/PWG4/JetTasks/inputFiles/ue_trackingefficiency.root"); - trackingEff = (TH1D*) file->Get("trackingefficiency"); - ueana->SetTrackingEfficiency(trackingEff); - } -} + + +void ConfigTaskUE(AliAnalysisTaskLeadingTrackUE * ueana ); // common config, extend with different cases + +AliAnalysisTaskLeadingTrackUE *AddTaskLeadingTrackUE(Int_t analysisMode = 0) +{ +// Creates a jet fider task, configures it and adds it to the analysis manager. + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskLeadingTrackUE", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskLeadingTrackUE", "This task requires an input event handler"); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + + AliAnalysisTaskLeadingTrackUE* ueana = new AliAnalysisTaskLeadingTrackUE("UEAnalysis_LeadingTrack"); + ueana->SetMode(analysisMode);// data or corrections mode + ConfigTaskUE(ueana); + + mgr->AddTask(ueana); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + AliAnalysisDataContainer *coutput1_UE = 0; + coutput1_UE = mgr->CreateContainer("histosLeadingTrackUE", TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWG4_LeadingTrackUE",AliAnalysisManager::GetCommonFileName())); + + mgr->ConnectInput (ueana, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (ueana, 0, coutput1_UE ); + + return ueana; +} + +void ConfigTaskUE(AliAnalysisTaskLeadingTrackUE * ueana){ + // common config, + ueana->SetDebugLevel(0); + ueana->SetPtRangeInHist(100, 0., 100.); + // ueana->SetFilterBit(16); + ueana->SetFilterBit(64+32); + ueana->SetTrackEtaCut(0.8); + ueana->SetLeadingTrackEtaCut(0.8); + ueana->SetEventSelectionBit(AliAnalysisHelperJetTasks::kIsPileUp); + ueana->SetReduceMemoryFootprint(kTRUE); + + if (1) + { + file = TFile::Open("$ALICE_ROOT/PWG4/JetTasks/inputFiles/ue_trackingefficiency.root"); + trackingEff = (TH1D*) file->Get("trackingefficiency"); + ueana->SetTrackingEfficiency(trackingEff); + } +} diff --git a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskEventMixingBF.h b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskEventMixingBF.h index 0755f0dae73..f806fbd69e3 100755 --- a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskEventMixingBF.h +++ b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskEventMixingBF.h @@ -1,243 +1,243 @@ -#ifndef ALIANALYSISTASKEVENTMIXINGBF_CXX -#define ALIANALYSISTASKEVENTMIXINGBF_CXX - -// Analysis task for the EventMixingBF code -// Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch - -class TList; -class TH1F; -class TH2F; -class TF1; - -class AliMixInputEventHandler; -class AliBalanceEventMixing; -class AliESDtrackCuts; - -#include "AliAnalysisTaskSE.h" -#include "AliBalanceEventMixing.h" - -#include "AliPID.h" -#include "AliPIDResponse.h" -#include "AliPIDCombined.h" - - -class AliAnalysisTaskEventMixingBF : public AliAnalysisTaskSE { - public: - AliAnalysisTaskEventMixingBF(const char *name = "AliAnalysisTaskEventMixingBF"); - virtual ~AliAnalysisTaskEventMixingBF(); - - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void UserExecMix(Option_t*); - virtual void FinishTaskOutput(); - virtual void Terminate(Option_t *); - - void SetAnalysisObject(AliBalanceEventMixing *const analysis) { - fBalance = analysis; - } - void SetShufflingObject(AliBalanceEventMixing *const analysisShuffled) { - fRunShuffling = kTRUE; - fShuffledBalance = analysisShuffled; - } - void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { - fESDtrackCuts = trackCuts;} - void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { - fVxMax = vx; - fVyMax = vy; - fVzMax = vz; - } - - //==============AOD analysis==============// - void SetAODtrackCutBit(Int_t bit){ - nAODtrackCutBit = bit; - } - - void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){ - fPtMin = ptmin; fPtMax = ptmax; - fEtaMin = etamin; fEtaMax = etamax; - - } - - void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){ - fDCAxyCut = DCAxy; - fDCAzCut = DCAz; - } - - void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){ - fTPCchi2Cut = maxTPCchi2; - fNClustersTPCCut = minNClustersTPC; - } - - //==============MC analysis==============// - void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax, - Double_t etamin, Double_t etamax){ - fPtMin = ptmin; fPtMax = ptmax; - fEtaMin = etamin; fEtaMax = etamax; - } - void UseFlowAfterBurner(TF1 *gDifferentialV2) { - fDifferentialV2 = gDifferentialV2; - fUseFlowAfterBurner = kTRUE; - } - void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;} - - void SetPDGCode(Int_t gPdgCode) { - fUseMCPdgCode = kTRUE; - fPDGCodeToBeAnalyzed = gPdgCode; - } - - //Centrality - void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;} - const char* GetCentralityEstimator(void) const {return fCentralityEstimator;} - void SetCentralityPercentileRange(Double_t min, Double_t max) { - fUseCentrality = kTRUE; - fCentralityPercentileMin=min; - fCentralityPercentileMax=max; - } - void SetImpactParameterRange(Double_t min, Double_t max) { - fUseCentrality = kTRUE; - fImpactParameterMin=min; - fImpactParameterMax=max; - } - - //multiplicity - void SetMultiplicityRange(Int_t min, Int_t max) { - fUseMultiplicity = kTRUE; - fNumberOfAcceptedTracksMin = min; - fNumberOfAcceptedTracksMax = max;} - - void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;} - - //Acceptance filter - void SetAcceptanceParameterization(TF1 *parameterization) { - fAcceptanceParameterization = parameterization;} - - //pid - enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid) - enum kParticleOfInterest { kMuon, kElectron, kPion, kKaon, kProton }; - - void SetUseBayesianPID(Double_t gMinProbabilityValue) { - fUsePID = kTRUE; fUsePIDnSigma = kFALSE; fUsePIDPropabilities = kTRUE; - fMinAcceptedPIDProbability = gMinProbabilityValue; } - - void SetUseNSigmaPID(Double_t gMaxNSigma) { - fUsePID = kTRUE; fUsePIDPropabilities = kFALSE; fUsePIDnSigma = kTRUE; - fPIDNSigma = gMaxNSigma; } - - void SetParticleOfInterest(kParticleOfInterest poi) { - fParticleOfInterest = poi;} - void SetDetectorUsedForPID(kDetectorUsedForPID detConfig) { - fPidDetectorConfig = detConfig;} - - private: - AliBalanceEventMixing *fBalance; //EventMixingBF object - Bool_t fRunShuffling;//run shuffling or not - AliBalanceEventMixing *fShuffledBalance; //EventMixingBF object (shuffled) - TList *fList; //fList object - TList *fListEventMixingBF; //fList object - TList *fListEventMixingBFS; //fList object - TList *fHistListPIDQA; //! list of histograms - - TH1F *fHistEventStats; //event stats - TH2F *fHistCentStats; //centrality stats - TH1F *fHistTriggerStats; //trigger stats - TH1F *fHistTrackStats; //Track filter bit stats - TH1F *fHistVx; //x coordinate of the primary vertex - TH1F *fHistVy; //y coordinate of the primary vertex - TH1F *fHistVz; //z coordinate of the primary vertex - - TH2F *fHistClus;//number of clusters (QA histogram) - TH2F *fHistDCA;//DCA (QA histogram) - TH1F *fHistChi2;//track chi2 (QA histogram) - TH1F *fHistPt;//transverse momentum (QA histogram) - TH1F *fHistEta;//pseudorapidity (QA histogram) - TH1F *fHistPhi;//phi (QA histogram) - TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram) - TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram) - TH2F *fHistV0M;//V0 multiplicities (QA histogram) - TH2F *fHistRefTracks;//reference track multiplicities (QA histogram) - - //============PID============// - TH2D *fHistdEdxVsPTPCbeforePID;//TPC dEdx vs momentum before PID cuts (QA histogram) - TH2D *fHistBetavsPTOFbeforePID;//beta vs momentum before PID cuts (QA histogram) - TH2D *fHistProbTPCvsPtbeforePID; //TPC probability vs pT before PID cuts (QA histogram) - TH2D *fHistProbTOFvsPtbeforePID;//TOF probability vs pT before PID cuts (QA histogram) - TH2D *fHistProbTPCTOFvsPtbeforePID;//TOF/TPC probability vs pT before PID cuts (QA histogram) - TH2D *fHistNSigmaTPCvsPtbeforePID;//TPC nsigma vs pT before PID cuts (QA histogram) - TH2D *fHistNSigmaTOFvsPtbeforePID;//TOF nsigma vs pT before PID cuts (QA histogram) - TH2D *fHistdEdxVsPTPCafterPID;//TPC dEdx vs momentum after PID cuts (QA histogram) - TH2D *fHistBetavsPTOFafterPID;//beta vs momentum after PID cuts (QA histogram) - TH2D *fHistProbTPCvsPtafterPID; //TPC probability vs pT after PID cuts (QA histogram) - TH2D *fHistProbTOFvsPtafterPID;//TOF probability vs pT after PID cuts (QA histogram) - TH2D *fHistProbTPCTOFvsPtafterPID;//TOF/TPC probability vs pT after PID cuts (QA histogram) - TH2D *fHistNSigmaTPCvsPtafterPID;//TPC nsigma vs pT after PID cuts (QA histogram) - TH2D *fHistNSigmaTOFvsPtafterPID;//TOF nsigma vs pT after PID cuts (QA histogram) - - AliPIDResponse *fPIDResponse; //! PID response object - AliPIDCombined *fPIDCombined; //! combined PID object - - kParticleOfInterest fParticleOfInterest;//analyzed particle - kDetectorUsedForPID fPidDetectorConfig;//used detector for PID - - Bool_t fUsePID; //flag to use PID - Bool_t fUsePIDnSigma;//flag to use nsigma method for PID - Bool_t fUsePIDPropabilities;//flag to use probability method for PID - Double_t fPIDNSigma;//nsigma cut for PID - Double_t fMinAcceptedPIDProbability;//probability cut for PID - //============PID============// - - AliESDtrackCuts *fESDtrackCuts; //ESD track cuts - - TString fCentralityEstimator; //"V0M","TRK","TKL","ZDC","FMD" - Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp) - Double_t fCentralityPercentileMin;//centrality percentile min - Double_t fCentralityPercentileMax;//centrality percentile max - Double_t fImpactParameterMin;//impact parameter min (used for MC) - Double_t fImpactParameterMax;//impact parameter max (used for MC) - - Bool_t fUseMultiplicity;//use the multiplicity cuts - Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp) - Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp) - TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks - - Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection - - Double_t fVxMax;//vxmax - Double_t fVyMax;//vymax - Double_t fVzMax;//vzmax - - Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs) - - Double_t fPtMin;//only used for AODs - Double_t fPtMax;//only used for AODs - Double_t fEtaMin;//only used for AODs - Double_t fEtaMax;//only used for AODs - - Double_t fDCAxyCut;//only used for AODs - Double_t fDCAzCut;//only used for AODs - - Double_t fTPCchi2Cut;//only used for AODs - Int_t fNClustersTPCCut;//only used for AODs - - TF1 *fAcceptanceParameterization;//acceptance filter used for MC - - TF1 *fDifferentialV2;//pt-differential v2 (from real data) - Bool_t fUseFlowAfterBurner;//Usage of a flow after burner - - Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis - Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC - Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC - - // Event Mixing - AliVEvent *fMainEvent;//main event in the event mixing loop - AliVEvent *fMixEvent;//second event in the event mixing loop - - AliMixInputEventHandler *SetupEventsForMixing(); - - AliAnalysisTaskEventMixingBF(const AliAnalysisTaskEventMixingBF&); // not implemented - AliAnalysisTaskEventMixingBF& operator=(const AliAnalysisTaskEventMixingBF&); // not implemented - - ClassDef(AliAnalysisTaskEventMixingBF, 1); // example of analysis -}; - -#endif +#ifndef ALIANALYSISTASKEVENTMIXINGBF_CXX +#define ALIANALYSISTASKEVENTMIXINGBF_CXX + +// Analysis task for the EventMixingBF code +// Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch + +class TList; +class TH1F; +class TH2F; +class TF1; + +class AliMixInputEventHandler; +class AliBalanceEventMixing; +class AliESDtrackCuts; + +#include "AliAnalysisTaskSE.h" +#include "AliBalanceEventMixing.h" + +#include "AliPID.h" +#include "AliPIDResponse.h" +#include "AliPIDCombined.h" + + +class AliAnalysisTaskEventMixingBF : public AliAnalysisTaskSE { + public: + AliAnalysisTaskEventMixingBF(const char *name = "AliAnalysisTaskEventMixingBF"); + virtual ~AliAnalysisTaskEventMixingBF(); + + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void UserExecMix(Option_t*); + virtual void FinishTaskOutput(); + virtual void Terminate(Option_t *); + + void SetAnalysisObject(AliBalanceEventMixing *const analysis) { + fBalance = analysis; + } + void SetShufflingObject(AliBalanceEventMixing *const analysisShuffled) { + fRunShuffling = kTRUE; + fShuffledBalance = analysisShuffled; + } + void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { + fESDtrackCuts = trackCuts;} + void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { + fVxMax = vx; + fVyMax = vy; + fVzMax = vz; + } + + //==============AOD analysis==============// + void SetAODtrackCutBit(Int_t bit){ + nAODtrackCutBit = bit; + } + + void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){ + fPtMin = ptmin; fPtMax = ptmax; + fEtaMin = etamin; fEtaMax = etamax; + + } + + void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){ + fDCAxyCut = DCAxy; + fDCAzCut = DCAz; + } + + void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){ + fTPCchi2Cut = maxTPCchi2; + fNClustersTPCCut = minNClustersTPC; + } + + //==============MC analysis==============// + void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax, + Double_t etamin, Double_t etamax){ + fPtMin = ptmin; fPtMax = ptmax; + fEtaMin = etamin; fEtaMax = etamax; + } + void UseFlowAfterBurner(TF1 *gDifferentialV2) { + fDifferentialV2 = gDifferentialV2; + fUseFlowAfterBurner = kTRUE; + } + void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;} + + void SetPDGCode(Int_t gPdgCode) { + fUseMCPdgCode = kTRUE; + fPDGCodeToBeAnalyzed = gPdgCode; + } + + //Centrality + void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;} + const char* GetCentralityEstimator(void) const {return fCentralityEstimator;} + void SetCentralityPercentileRange(Double_t min, Double_t max) { + fUseCentrality = kTRUE; + fCentralityPercentileMin=min; + fCentralityPercentileMax=max; + } + void SetImpactParameterRange(Double_t min, Double_t max) { + fUseCentrality = kTRUE; + fImpactParameterMin=min; + fImpactParameterMax=max; + } + + //multiplicity + void SetMultiplicityRange(Int_t min, Int_t max) { + fUseMultiplicity = kTRUE; + fNumberOfAcceptedTracksMin = min; + fNumberOfAcceptedTracksMax = max;} + + void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;} + + //Acceptance filter + void SetAcceptanceParameterization(TF1 *parameterization) { + fAcceptanceParameterization = parameterization;} + + //pid + enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid) + enum kParticleOfInterest { kMuon, kElectron, kPion, kKaon, kProton }; + + void SetUseBayesianPID(Double_t gMinProbabilityValue) { + fUsePID = kTRUE; fUsePIDnSigma = kFALSE; fUsePIDPropabilities = kTRUE; + fMinAcceptedPIDProbability = gMinProbabilityValue; } + + void SetUseNSigmaPID(Double_t gMaxNSigma) { + fUsePID = kTRUE; fUsePIDPropabilities = kFALSE; fUsePIDnSigma = kTRUE; + fPIDNSigma = gMaxNSigma; } + + void SetParticleOfInterest(kParticleOfInterest poi) { + fParticleOfInterest = poi;} + void SetDetectorUsedForPID(kDetectorUsedForPID detConfig) { + fPidDetectorConfig = detConfig;} + + private: + AliBalanceEventMixing *fBalance; //EventMixingBF object + Bool_t fRunShuffling;//run shuffling or not + AliBalanceEventMixing *fShuffledBalance; //EventMixingBF object (shuffled) + TList *fList; //fList object + TList *fListEventMixingBF; //fList object + TList *fListEventMixingBFS; //fList object + TList *fHistListPIDQA; //! list of histograms + + TH1F *fHistEventStats; //event stats + TH2F *fHistCentStats; //centrality stats + TH1F *fHistTriggerStats; //trigger stats + TH1F *fHistTrackStats; //Track filter bit stats + TH1F *fHistVx; //x coordinate of the primary vertex + TH1F *fHistVy; //y coordinate of the primary vertex + TH1F *fHistVz; //z coordinate of the primary vertex + + TH2F *fHistClus;//number of clusters (QA histogram) + TH2F *fHistDCA;//DCA (QA histogram) + TH1F *fHistChi2;//track chi2 (QA histogram) + TH1F *fHistPt;//transverse momentum (QA histogram) + TH1F *fHistEta;//pseudorapidity (QA histogram) + TH1F *fHistPhi;//phi (QA histogram) + TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram) + TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram) + TH2F *fHistV0M;//V0 multiplicities (QA histogram) + TH2F *fHistRefTracks;//reference track multiplicities (QA histogram) + + //============PID============// + TH2D *fHistdEdxVsPTPCbeforePID;//TPC dEdx vs momentum before PID cuts (QA histogram) + TH2D *fHistBetavsPTOFbeforePID;//beta vs momentum before PID cuts (QA histogram) + TH2D *fHistProbTPCvsPtbeforePID; //TPC probability vs pT before PID cuts (QA histogram) + TH2D *fHistProbTOFvsPtbeforePID;//TOF probability vs pT before PID cuts (QA histogram) + TH2D *fHistProbTPCTOFvsPtbeforePID;//TOF/TPC probability vs pT before PID cuts (QA histogram) + TH2D *fHistNSigmaTPCvsPtbeforePID;//TPC nsigma vs pT before PID cuts (QA histogram) + TH2D *fHistNSigmaTOFvsPtbeforePID;//TOF nsigma vs pT before PID cuts (QA histogram) + TH2D *fHistdEdxVsPTPCafterPID;//TPC dEdx vs momentum after PID cuts (QA histogram) + TH2D *fHistBetavsPTOFafterPID;//beta vs momentum after PID cuts (QA histogram) + TH2D *fHistProbTPCvsPtafterPID; //TPC probability vs pT after PID cuts (QA histogram) + TH2D *fHistProbTOFvsPtafterPID;//TOF probability vs pT after PID cuts (QA histogram) + TH2D *fHistProbTPCTOFvsPtafterPID;//TOF/TPC probability vs pT after PID cuts (QA histogram) + TH2D *fHistNSigmaTPCvsPtafterPID;//TPC nsigma vs pT after PID cuts (QA histogram) + TH2D *fHistNSigmaTOFvsPtafterPID;//TOF nsigma vs pT after PID cuts (QA histogram) + + AliPIDResponse *fPIDResponse; //! PID response object + AliPIDCombined *fPIDCombined; //! combined PID object + + kParticleOfInterest fParticleOfInterest;//analyzed particle + kDetectorUsedForPID fPidDetectorConfig;//used detector for PID + + Bool_t fUsePID; //flag to use PID + Bool_t fUsePIDnSigma;//flag to use nsigma method for PID + Bool_t fUsePIDPropabilities;//flag to use probability method for PID + Double_t fPIDNSigma;//nsigma cut for PID + Double_t fMinAcceptedPIDProbability;//probability cut for PID + //============PID============// + + AliESDtrackCuts *fESDtrackCuts; //ESD track cuts + + TString fCentralityEstimator; //"V0M","TRK","TKL","ZDC","FMD" + Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp) + Double_t fCentralityPercentileMin;//centrality percentile min + Double_t fCentralityPercentileMax;//centrality percentile max + Double_t fImpactParameterMin;//impact parameter min (used for MC) + Double_t fImpactParameterMax;//impact parameter max (used for MC) + + Bool_t fUseMultiplicity;//use the multiplicity cuts + Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp) + Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp) + TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks + + Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection + + Double_t fVxMax;//vxmax + Double_t fVyMax;//vymax + Double_t fVzMax;//vzmax + + Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs) + + Double_t fPtMin;//only used for AODs + Double_t fPtMax;//only used for AODs + Double_t fEtaMin;//only used for AODs + Double_t fEtaMax;//only used for AODs + + Double_t fDCAxyCut;//only used for AODs + Double_t fDCAzCut;//only used for AODs + + Double_t fTPCchi2Cut;//only used for AODs + Int_t fNClustersTPCCut;//only used for AODs + + TF1 *fAcceptanceParameterization;//acceptance filter used for MC + + TF1 *fDifferentialV2;//pt-differential v2 (from real data) + Bool_t fUseFlowAfterBurner;//Usage of a flow after burner + + Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis + Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC + Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC + + // Event Mixing + AliVEvent *fMainEvent;//main event in the event mixing loop + AliVEvent *fMixEvent;//second event in the event mixing loop + + AliMixInputEventHandler *SetupEventsForMixing(); + + AliAnalysisTaskEventMixingBF(const AliAnalysisTaskEventMixingBF&); // not implemented + AliAnalysisTaskEventMixingBF& operator=(const AliAnalysisTaskEventMixingBF&); // not implemented + + ClassDef(AliAnalysisTaskEventMixingBF, 1); // example of analysis +}; + +#endif diff --git a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.cxx b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.cxx index 99ba00c7a06..8985f573d1e 100755 --- a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.cxx +++ b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.cxx @@ -1,1170 +1,1170 @@ -#include "TChain.h" -#include "TList.h" -#include "TCanvas.h" -#include "TParticle.h" -#include "TLorentzVector.h" -#include "TGraphErrors.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TArrayF.h" -#include "TF1.h" -#include "TRandom.h" -#include "TFile.h" - -#include "AliAnalysisManager.h" -#include "AliLog.h" - -#include "AliEventPoolManager.h" - -#include "AliAnalysisTaskToyModel.h" -#include "AliBalance.h" -#include "AliBalancePsi.h" -#include "AliAnalysisTaskTriggeredBF.h" - - -// Analysis task for the toy model analysis -// Authors: Panos.Christakoglou@nikhef.nl - -using std::cout; -using std::endl; - -ClassImp(AliAnalysisTaskToyModel) - -//________________________________________________________________________ -AliAnalysisTaskToyModel::AliAnalysisTaskToyModel() -: TObject(), - fUseDebug(kFALSE), - fBalance(0), - fRunShuffling(kFALSE), fShuffledBalance(0), - fRunMixing(kFALSE), fMixedBalance(0), fPoolMgr(0), - fList(0), fListBF(0), fListBFS(0), fListBFM(0), - fHistEventStats(0), - fHistNumberOfAcceptedParticles(0), - fHistReactionPlane(0), - fHistEtaTotal(0), fHistEta(0), - fHistEtaPhiPos(0), fHistEtaPhiNeg(0), - fHistRapidity(0), - fHistRapidityPions(0), fHistRapidityKaons(0), fHistRapidityProtons(0), - fHistPhi(0), - fHistPhiPions(0), fHistPhiKaons(0), fHistPhiProtons(0), - fHistPt(0), - fHistPtPions(0), fHistPtKaons(0), fHistPtProtons(0), - fTotalMultiplicityMean(100.), fTotalMultiplicitySigma(0.0), - fNetChargeMean(0.0), fNetChargeSigma(0.0), - fPtMin(0.0), fPtMax(100.0), - fEtaMin(-1.0), fEtaMax(1.0), - fUseAcceptanceParameterization(kFALSE), fAcceptanceParameterization(0), - fSimulateDetectorEffects(kFALSE), - fNumberOfInefficientSectors(0), - fInefficiencyFactorInPhi(1.0), - fNumberOfDeadSectors(0), - fEfficiencyDropNearEtaEdges(kFALSE), - fEfficiencyMatrix(0), - fUseAllCharges(kFALSE), fParticleMass(0.0), - fPtSpectraAllCharges(0), fTemperatureAllCharges(100.), - fReactionPlane(0.0), - fAzimuthalAngleAllCharges(0), fDirectedFlowAllCharges(0.0), - fEllipticFlowAllCharges(0.0), fTriangularFlowAllCharges(0.0), - fQuandrangularFlowAllCharges(0.0), fPentangularFlowAllCharges(0.0), - fPionPercentage(0.8), fPionMass(0.0), - fPtSpectraPions(0), fTemperaturePions(100.), - fAzimuthalAnglePions(0), fDirectedFlowPions(0.0), - fEllipticFlowPions(0.0), fTriangularFlowPions(0.0), - fQuandrangularFlowPions(0.0), fPentangularFlowPions(0.0), - fKaonPercentage(0.8), fKaonMass(0.0), - fPtSpectraKaons(0), fTemperatureKaons(100.), - fAzimuthalAngleKaons(0), fDirectedFlowKaons(0.0), - fEllipticFlowKaons(0.0), fTriangularFlowKaons(0.0), - fQuandrangularFlowKaons(0.0), fPentangularFlowKaons(0.0), - fProtonPercentage(0.8), fProtonMass(0.0), - fPtSpectraProtons(0), fTemperatureProtons(100.), - fAzimuthalAngleProtons(0), fDirectedFlowProtons(0.0), - fEllipticFlowProtons(0.0), fTriangularFlowProtons(0.0), - fQuandrangularFlowProtons(0.0), fPentangularFlowProtons(0.0), - fUseDynamicalCorrelations(kFALSE), fDynamicalCorrelationsPercentage(0.1), - fUseJets(kFALSE), fPtAssoc(0) { - // Constructor -} - -//________________________________________________________________________ -AliAnalysisTaskToyModel::~AliAnalysisTaskToyModel() { - //Destructor - if(fUseAllCharges) { - delete fPtSpectraAllCharges; - delete fAzimuthalAngleAllCharges; - } - else { - delete fPtSpectraPions; - delete fAzimuthalAnglePions; - delete fPtSpectraKaons; - delete fAzimuthalAngleKaons; - delete fPtSpectraProtons; - delete fAzimuthalAngleProtons; - } - if(fUseJets) delete fPtAssoc; -} - -//________________________________________________________________________ -void AliAnalysisTaskToyModel::Init() { - //Initialize objects - //==============gRandom Seed=======================// - gRandom->SetSeed(0); //seed is set to a random value (depending on machine clock) - //==============gRandom Seed=======================// - - //==============Particles and spectra==============// - TParticle *pion = new TParticle(); - pion->SetPdgCode(211); - fPionMass = pion->GetMass(); - - TParticle *kaon = new TParticle(); - kaon->SetPdgCode(321); - fKaonMass = kaon->GetMass(); - - TParticle *proton = new TParticle(); - proton->SetPdgCode(2212); - fProtonMass = proton->GetMass(); - - if(fUseAllCharges) { - fParticleMass = fPionMass; - fPtSpectraAllCharges = new TF1("fPtSpectraAllCharges","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); - fPtSpectraAllCharges->SetParName(0,"Mass"); - fPtSpectraAllCharges->SetParName(1,"Temperature"); - //fPtSpectraAllCharges = new TF1("fPtSpectraAllCharges","(x^2/TMath::Sqrt(TMath::Power(x,2) + TMath::Power(0.139,2)))*TMath::Power((1. + x/[0]),-[1])",0.,20.); - //fPtSpectraAllCharges->SetParName(0,"pt0"); - //fPtSpectraAllCharges->SetParName(1,"b"); - } - else { - fPtSpectraPions = new TF1("fPtSpectraPions","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); - fPtSpectraPions->SetParName(0,"Mass"); - fPtSpectraPions->SetParName(1,"Temperature"); - - fPtSpectraKaons = new TF1("fPtSpectraKaons","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); - fPtSpectraKaons->SetParName(0,"Mass"); - fPtSpectraKaons->SetParName(1,"Temperature"); - - fPtSpectraProtons = new TF1("fPtSpectraProtons","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); - fPtSpectraProtons->SetParName(0,"Mass"); - fPtSpectraProtons->SetParName(1,"Temperature"); - } - //==============Particles and spectra==============// - - //==============Flow values==============// - if(fUseAllCharges) { - if(fUseDebug) { - Printf("Directed flow: %lf",fDirectedFlowAllCharges); - Printf("Elliptic flow: %lf",fEllipticFlowAllCharges); - Printf("Triangular flow: %lf",fTriangularFlowAllCharges); - Printf("Quandrangular flow: %lf",fQuandrangularFlowAllCharges); - Printf("Pentangular flow: %lf",fPentangularFlowAllCharges); - } - - fAzimuthalAngleAllCharges = new TF1("fAzimuthalAngleAllCharges","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); - fAzimuthalAngleAllCharges->SetParName(0,"Reaction Plane"); - fAzimuthalAngleAllCharges->SetParName(1,"Directed flow"); - fAzimuthalAngleAllCharges->SetParName(2,"Elliptic flow"); - fAzimuthalAngleAllCharges->SetParName(3,"Triangular flow"); - fAzimuthalAngleAllCharges->SetParName(4,"Quandrangular flow"); - fAzimuthalAngleAllCharges->SetParName(5,"Pentangular flow"); - } - else { - fAzimuthalAnglePions = new TF1("fAzimuthalAnglePions","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); - fAzimuthalAnglePions->SetParName(0,"Reaction Plane"); - fAzimuthalAnglePions->SetParName(1,"Directed flow"); - fAzimuthalAnglePions->SetParName(2,"Elliptic flow"); - fAzimuthalAnglePions->SetParName(3,"Triangular flow"); - fAzimuthalAnglePions->SetParName(4,"Quandrangular flow"); - fAzimuthalAnglePions->SetParName(5,"Pentangular flow"); - - fAzimuthalAngleKaons = new TF1("fAzimuthalAngleKaons","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); - fAzimuthalAngleKaons->SetParName(0,"Reaction Plane"); - fAzimuthalAngleKaons->SetParName(1,"Directed flow"); - fAzimuthalAngleKaons->SetParName(2,"Elliptic flow"); - fAzimuthalAngleKaons->SetParName(3,"Triangular flow"); - fAzimuthalAngleKaons->SetParName(4,"Quandrangular flow"); - fAzimuthalAngleKaons->SetParName(5,"Pentangular flow"); - - fAzimuthalAngleProtons = new TF1("fAzimuthalAngleProtons","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); - fAzimuthalAngleProtons->SetParName(0,"Reaction Plane"); - fAzimuthalAngleProtons->SetParName(1,"Directed flow"); - fAzimuthalAngleProtons->SetParName(2,"Elliptic flow"); - fAzimuthalAngleProtons->SetParName(3,"Triangular flow"); - fAzimuthalAngleProtons->SetParName(4,"Quandrangular flow"); - fAzimuthalAngleProtons->SetParName(5,"Pentangular flow"); - } - //==============Flow values==============// - - //===================Jets===================// - if(fUseJets) { - fPtAssoc = new TF1("fPtAssoc","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,20.); - fPtAssoc->SetParName(0,"pt0"); - fPtAssoc->SetParName(1,"b"); - fPtAssoc->SetParameter(0,0.139); - fPtAssoc->SetParameter(1,0.5); - fPtAssoc->SetLineColor(1); - } - - //===================Jets===================// - - //==============Efficiency matrix==============// - if(fSimulateDetectorEffects) SetupEfficiencyMatrix(); - //==============Efficiency matrix==============// -} - -//________________________________________________________________________ -void AliAnalysisTaskToyModel::SetupEfficiencyMatrix() { - //Setup the efficiency matrix - TH1F *hPt = new TH1F("hPt","",200,0.1,20.1); - TH1F *hEta = new TH1F("hEta","",20,-0.95,0.95); - TH1F *hPhi = new TH1F("hPhi","",72,0.,2.*TMath::Pi()); - fEfficiencyMatrix = new TH3F("fEfficiencyMatrix","", - hEta->GetNbinsX(), - hEta->GetXaxis()->GetXmin(), - hEta->GetXaxis()->GetXmax(), - hPt->GetNbinsX(), - hPt->GetXaxis()->GetXmin(), - hPt->GetXaxis()->GetXmax(), - hPhi->GetNbinsX(), - hPhi->GetXaxis()->GetXmin(), - hPhi->GetXaxis()->GetXmax()); - - //Efficiency in pt - Double_t epsilon[20] = {0.3,0.6,0.77,0.79,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80}; - for(Int_t i=1;i<=20;i++) { - hPt->SetBinContent(i,epsilon[i-1]); - hPt->SetBinError(i,0.01); - } - for(Int_t i=21;i<=200;i++) { - hPt->SetBinContent(i,epsilon[19]); - hPt->SetBinError(i,0.01); - } - - //Efficiency in eta - for(Int_t i=1;i<=hEta->GetNbinsX();i++) { - hEta->SetBinContent(i,1.0); - hEta->SetBinError(i,0.01); - } - if(fEfficiencyDropNearEtaEdges) { - hEta->SetBinContent(1,0.7); hEta->SetBinContent(2,0.8); - hEta->SetBinContent(3,0.9); - hEta->SetBinContent(18,0.9); hEta->SetBinContent(19,0.8); - hEta->SetBinContent(20,0.7); - } - - //Efficiency in phi - for(Int_t i=1;i<=hPhi->GetNbinsX();i++) { - hPhi->SetBinContent(i,1.0); - hPhi->SetBinError(i,0.01); - } - for(Int_t i=1;i<=fNumberOfInefficientSectors;i++) - hPhi->SetBinContent(hPhi->FindBin(hPhi->GetRandom()),fInefficiencyFactorInPhi); - for(Int_t i=1;i<=fNumberOfDeadSectors;i++) - hPhi->SetBinContent(hPhi->FindBin(hPhi->GetRandom()),0.0); - - //Fill the 3D efficiency map - for(Int_t iBinX = 1; iBinX<=fEfficiencyMatrix->GetXaxis()->GetNbins();iBinX++) { - //cout<<"==================================="<GetYaxis()->GetNbins();iBinY++) { - //cout<<"==================================="<GetZaxis()->GetNbins();iBinZ++) { - fEfficiencyMatrix->SetBinContent(iBinX,iBinY,iBinZ,hEta->GetBinContent(iBinX)*hPt->GetBinContent(iBinY)*hPhi->GetBinContent(iBinZ)); - //cout<<"Eta: "<GetBinCenter(iBinX)<<" - Pt: "<GetBinCenter(iBinY)<<" - Phi: "<GetBinCenter(iBinZ)<<" - "<GetBinContent(iBinX)<<" , "<GetBinContent(iBinY)<<" , "<GetBinContent(iBinZ)<<" - Efficiency: "<GetBinContent(iBinX)*hPt->GetBinContent(iBinY)*hPhi->GetBinContent(iBinZ)<SetDeltaEtaMax(2.0); - } - if(fRunShuffling) { - if(!fShuffledBalance) { - fShuffledBalance = new AliBalancePsi(); - fShuffledBalance->SetDeltaEtaMax(2.0); - } - } - if(fRunMixing) { - if(!fMixedBalance) { - fMixedBalance = new AliBalancePsi(); - fMixedBalance->SetDeltaEtaMax(2.0); - } - } - - //QA list - fList = new TList(); - fList->SetName("listQA"); - fList->SetOwner(); - - //Balance Function list - fListBF = new TList(); - fListBF->SetName("listBF"); - fListBF->SetOwner(); - - if(fRunShuffling) { - fListBFS = new TList(); - fListBFS->SetName("listBFShuffled"); - fListBFS->SetOwner(); - } - - if(fRunMixing) { - fListBFM = new TList(); - fListBFM->SetName("listBFMixed"); - fListBFM->SetOwner(); - } - - //==============QA================// - //Event stats. - TString gCutName[4] = {"Total","Offline trigger", - "Vertex","Analyzed"}; - fHistEventStats = new TH1F("fHistEventStats", - "Event statistics;;N_{events}", - 4,0.5,4.5); - for(Int_t i = 1; i <= 4; i++) - fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); - fList->Add(fHistEventStats); - - fHistNumberOfAcceptedParticles = new TH1F("fHistNumberOfAcceptedParticles",";N_{acc.};Entries",10000,0,10000); - fList->Add(fHistNumberOfAcceptedParticles); - - fHistReactionPlane = new TH1F("fHistReactionPlane","Reaction plane angle;#Psi [rad];Entries",1000,0.,2.*TMath::Pi()); - fList->Add(fHistReactionPlane); - - //Pseudo-rapidity - fHistEtaTotal = new TH1F("fHistEtaTotal","Pseudo-rapidity (full phase space);#eta;Entries",1000,-15.,15.); - fList->Add(fHistEtaTotal); - - fHistEta = new TH1F("fHistEta","Pseudo-rapidity (acceptance);#eta;Entries",1000,-1.5,1.5); - fList->Add(fHistEta); - - fHistEtaPhiPos = new TH2F("fHistEtaPhiPos","#eta-#phi distribution (+);#eta;#varphi (rad)",80,-2.,2.,72,-TMath::Pi()/2.,3.*TMath::Pi()/2.); - fList->Add(fHistEtaPhiPos); - fHistEtaPhiNeg = new TH2F("fHistEtaPhiNeg","#eta-#phi distribution (-);#eta;#varphi (rad)",80,-2.,2.,72,-TMath::Pi()/2.,3.*TMath::Pi()/2.); - fList->Add(fHistEtaPhiNeg); - - //Rapidity - fHistRapidity = new TH1F("fHistRapidity","Rapidity (acceptance);y;Entries",1000,-1.5,1.5); - fList->Add(fHistRapidity); - fHistRapidityPions = new TH1F("fHistRapidityPions","Rapidity (acceptance - pions);y;Entries",1000,-1.5,1.5); - fList->Add(fHistRapidityPions); - fHistRapidityKaons = new TH1F("fHistRapidityKaons","Rapidity (acceptance - kaons);y;Entries",1000,-1.5,1.5); - fList->Add(fHistRapidityKaons); - fHistRapidityProtons = new TH1F("fHistRapidityProtons","Rapidity (acceptance - protons);y;Entries",1000,-1.5,1.5); - fList->Add(fHistRapidityProtons); - - //Phi - fHistPhi = new TH1F("fHistPhi","Phi (acceptance);#phi (rad);Entries",1000,0.,2*TMath::Pi()); - fList->Add(fHistPhi); - - fHistPhiPions = new TH1F("fHistPhiPions","Phi (acceptance - pions);#phi (rad);Entries",1000,0.,2*TMath::Pi()); - fList->Add(fHistPhiPions); - fHistPhiKaons = new TH1F("fHistPhiKaons","Phi (acceptance - kaons);#phi (rad);Entries",1000,0.,2*TMath::Pi()); - fList->Add(fHistPhiKaons); - fHistPhiProtons = new TH1F("fHistPhiProtons","Phi (acceptance - protons);#phi (rad);Entries",1000,0.,2*TMath::Pi()); - fList->Add(fHistPhiProtons); - - //Pt - fHistPt = new TH1F("fHistPt","Pt (acceptance);p_{t} (GeV/c);Entries",1000,0.,10.); - fList->Add(fHistPt); - - fHistPtPions = new TH1F("fHistPtPions","Pt (acceptance - pions);p_{t} (GeV/c);Entries",1000,0.,10.); - fList->Add(fHistPtPions); - fHistPtKaons = new TH1F("fHistPtKaons","Pt (acceptance - kaons);p_{t} (GeV/c);Entries",1000,0.,10.); - fList->Add(fHistPtKaons); - fHistPtProtons = new TH1F("fHistPtProtons","Pt (acceptance - protons);p_{t} (GeV/c);Entries",1000,0.,10.); - fList->Add(fHistPtProtons); - - if(fEfficiencyMatrix) fList->Add(fEfficiencyMatrix); - - //==============Balance function histograms================// - // Initialize histograms if not done yet - if(!fBalance->GetHistNp()){ - AliWarning("Histograms not yet initialized! --> Will be done now"); - AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); - fBalance->InitHistograms(); - } - - if(fRunShuffling) { - if(!fShuffledBalance->GetHistNp()) { - AliWarning("Histograms (shuffling) not yet initialized! --> Will be done now"); - AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); - fShuffledBalance->InitHistograms(); - } - } - - fListBF->Add(fBalance->GetHistNp()); - fListBF->Add(fBalance->GetHistNn()); - fListBF->Add(fBalance->GetHistNpn()); - fListBF->Add(fBalance->GetHistNnn()); - fListBF->Add(fBalance->GetHistNpp()); - fListBF->Add(fBalance->GetHistNnp()); - - if(fRunShuffling) { - fListBFS->Add(fShuffledBalance->GetHistNp()); - fListBFS->Add(fShuffledBalance->GetHistNn()); - fListBFS->Add(fShuffledBalance->GetHistNpn()); - fListBFS->Add(fShuffledBalance->GetHistNnn()); - fListBFS->Add(fShuffledBalance->GetHistNpp()); - fListBFS->Add(fShuffledBalance->GetHistNnp()); - } - - if(fRunMixing) { - fListBFM->Add(fMixedBalance->GetHistNp()); - fListBFM->Add(fMixedBalance->GetHistNn()); - fListBFM->Add(fMixedBalance->GetHistNpn()); - fListBFM->Add(fMixedBalance->GetHistNnn()); - fListBFM->Add(fMixedBalance->GetHistNpp()); - fListBFM->Add(fMixedBalance->GetHistNnp()); - } - - // Event Mixing - if(fRunMixing){ - Int_t fMixingTracks = 2000; - Int_t trackDepth = fMixingTracks; - Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager - - // centrality bins - // Double_t centralityBins[] = {0.,1.,2.,3.,4.,5.,7.,10.,20.,30.,40.,50.,60.,70.,80.,100.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! - // Double_t* centbins = centralityBins; - // Int_t nCentralityBins = sizeof(centralityBins) / sizeof(Double_t) - 1; - - // multiplicity bins - Double_t multiplicityBins[] = {0,10,20,30,40,50,60,70,80,100,100000}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! - Double_t* multbins = multiplicityBins; - Int_t nMultiplicityBins = sizeof(multiplicityBins) / sizeof(Double_t) - 1; - - // Zvtx bins - Double_t vertexBins[] = {-10., -7., -5., -3., -1., 1., 3., 5., 7., 10.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! - Double_t* vtxbins = vertexBins; - Int_t nVertexBins = sizeof(vertexBins) / sizeof(Double_t) - 1; - - // Event plane angle (Psi) bins - // Double_t psiBins[] = {0.,45.,135.,215.,305.,360.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! - // Double_t* psibins = psiBins; - // Int_t nPsiBins = sizeof(psiBins) / sizeof(Double_t) - 1; - - // // run the event mixing also in bins of event plane (statistics!) - // if(fRunMixingEventPlane){ - // if(fEventClass=="Multiplicity"){ - // fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nMultiplicityBins, multbins, nVertexBins, vtxbins, nPsiBins, psibins); - // } - // else{ - // fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centbins, nVertexBins, vtxbins, nPsiBins, psibins); - // } - // } - // else{ - //if(fEventClass=="Multiplicity"){ - fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nMultiplicityBins, multbins, nVertexBins, vtxbins); - //} - //else{ - //fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centbins, nVertexBins, vtxbins); - //} - } - - TH1::AddDirectory(oldStatus); -} - -//________________________________________________________________________ -void AliAnalysisTaskToyModel::Run(Int_t nEvents) { - // Main loop - // Called for each event - Short_t vCharge = 0; - Float_t vY = 0.0; - Float_t vEta = 0.0; - Float_t vPhi = 0.0; - Float_t vP[3] = {0.,0.,0.}; - Float_t vPt = 0.0; - Float_t vE = 0.0; - Bool_t isPion = kFALSE, isKaon = kFALSE, isProton = kFALSE; - - Double_t gDecideCharge = 0.; - - if(fUseAllCharges) { - //fPtSpectraAllCharges->SetParameter(0,fParticleMass); - fPtSpectraAllCharges->SetParameter(0,1.05); - fPtSpectraAllCharges->SetParameter(1,fTemperatureAllCharges); - - fAzimuthalAngleAllCharges->SetParameter(1,fDirectedFlowAllCharges); - fAzimuthalAngleAllCharges->SetParameter(2,fEllipticFlowAllCharges); - fAzimuthalAngleAllCharges->SetParameter(3,fTriangularFlowAllCharges); - fAzimuthalAngleAllCharges->SetParameter(4,fQuandrangularFlowAllCharges); - fAzimuthalAngleAllCharges->SetParameter(5,fPentangularFlowAllCharges); - } - else { - fPtSpectraPions->SetParameter(0,fPionMass); - fPtSpectraPions->SetParameter(1,fTemperaturePions); - fPtSpectraKaons->SetParameter(0,fKaonMass); - fPtSpectraKaons->SetParameter(1,fTemperatureKaons); - fPtSpectraProtons->SetParameter(0,fProtonMass); - fPtSpectraProtons->SetParameter(1,fTemperatureProtons); - - fAzimuthalAnglePions->SetParameter(1,fDirectedFlowPions); - fAzimuthalAnglePions->SetParameter(2,fEllipticFlowPions); - fAzimuthalAnglePions->SetParameter(3,fTriangularFlowPions); - fAzimuthalAnglePions->SetParameter(4,fQuandrangularFlowPions); - fAzimuthalAnglePions->SetParameter(5,fPentangularFlowPions); - - fAzimuthalAngleKaons->SetParameter(1,fDirectedFlowKaons); - fAzimuthalAngleKaons->SetParameter(2,fEllipticFlowKaons); - fAzimuthalAngleKaons->SetParameter(3,fTriangularFlowKaons); - fAzimuthalAngleKaons->SetParameter(4,fQuandrangularFlowKaons); - fAzimuthalAngleKaons->SetParameter(5,fPentangularFlowKaons); - - fAzimuthalAngleProtons->SetParameter(1,fDirectedFlowProtons); - fAzimuthalAngleProtons->SetParameter(2,fEllipticFlowProtons); - fAzimuthalAngleProtons->SetParameter(3,fTriangularFlowProtons); - fAzimuthalAngleProtons->SetParameter(4,fQuandrangularFlowProtons); - fAzimuthalAngleProtons->SetParameter(5,fPentangularFlowProtons); - } - - - for(Int_t iEvent = 0; iEvent < nEvents; iEvent++) { - // vector holding the charges/kinematics of all tracks (charge,y,eta,phi,p0,p1,p2,pt,E) - //vector *chargeVectorShuffle[9]; // this will be shuffled - //vector *chargeVector[9]; // original charge - //for(Int_t i = 0; i < 9; i++){ - //chargeVectorShuffle[i] = new vector; - //chargeVector[i] = new vector; - //} - - // TObjArray for the accepted particles - // (has to be done here, otherwise mxing with event pool does not work, overwriting pointers!) - TObjArray *tracksMain = new TObjArray(); - tracksMain->SetOwner(kTRUE); - TObjArray *tracksMixing = 0x0; - if(fRunMixing) { - tracksMixing = new TObjArray(); - tracksMixing->SetOwner(kTRUE); - } - - tracksMain->Clear(); - if(fRunMixing) tracksMixing->Clear(); - - fHistEventStats->Fill(1); - fHistEventStats->Fill(2); - fHistEventStats->Fill(3); - - if((iEvent%1000) == 0) - cout<<"Event: "<Gaus(fTotalMultiplicityMean,fTotalMultiplicitySigma)); - Int_t nNetCharge = (Int_t)(gRandom->Gaus(fNetChargeMean,fNetChargeSigma)); - - Int_t nGeneratedPositive = (Int_t)((nMultiplicity/2) + nNetCharge); - Int_t nGeneratedNegative = nMultiplicity - nGeneratedPositive; - if(fUseDebug) - Printf("Total multiplicity: %d - Generated positive: %d - Generated negative: %d",nMultiplicity,nGeneratedPositive,nGeneratedNegative); - - //Randomization of the reaction plane - fReactionPlane = 2.0*TMath::Pi()*gRandom->Rndm(); - //fReactionPlane = 0.0; - if(fUseAllCharges) - fAzimuthalAngleAllCharges->SetParameter(0,fReactionPlane); - else { - fAzimuthalAnglePions->SetParameter(0,fReactionPlane); - fAzimuthalAngleKaons->SetParameter(0,fReactionPlane); - fAzimuthalAngleProtons->SetParameter(0,fReactionPlane); - } - - Int_t gNumberOfAcceptedParticles = 0; - Int_t gNumberOfAcceptedPositiveParticles = 0; - Int_t gNumberOfAcceptedNegativeParticles = 0; - Int_t nGeneratedPions = 0, nGeneratedKaons = 0, nGeneratedProtons = 0; - - //Generate particles - for(Int_t iParticleCount = 0; iParticleCount < nMultiplicity; iParticleCount++) { - isPion = kFALSE; isKaon = kFALSE; isProton = kFALSE; - if(fUseDebug) - Printf("Generating positive: %d(%d)",iParticleCount+1,nGeneratedPositive); - - //Pseudo-rapidity sampled from a Gaussian centered @ 0 - vEta = gRandom->Gaus(0.0,4.0); - - //Fill QA histograms (full phase space) - fHistEtaTotal->Fill(vEta); - - //Decide the charge - gDecideCharge = gRandom->Rndm(); - if(gDecideCharge <= 1.*nGeneratedPositive/nMultiplicity) - vCharge = 1; - else - vCharge = -1; - - //Acceptance - if((vEta < fEtaMin) || (vEta > fEtaMax)) continue; - - if(!fUseAllCharges) { - //Decide the specie - Double_t randomNumberSpecies = gRandom->Rndm(); - if((randomNumberSpecies >= 0.0)&&(randomNumberSpecies < fPionPercentage)) { - nGeneratedPions += 1; - vPt = fPtSpectraPions->GetRandom(); - vPhi = fAzimuthalAnglePions->GetRandom(); - fParticleMass = fPionMass; - isPion = kTRUE; - } - else if((randomNumberSpecies >= fPionPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage)) { - nGeneratedKaons += 1; - vPt = fPtSpectraKaons->GetRandom(); - vPhi = fAzimuthalAngleKaons->GetRandom(); - fParticleMass = fKaonMass; - isKaon = kTRUE; - } - else if((randomNumberSpecies >= fPionPercentage + fKaonPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage + fProtonPercentage)) { - nGeneratedProtons += 1; - vPt = fPtSpectraProtons->GetRandom(); - vPhi = fAzimuthalAngleProtons->GetRandom(); - fParticleMass = fProtonMass; - isProton = kTRUE; - } - } - else { - vPt = fPtSpectraAllCharges->GetRandom(); - vPhi = fAzimuthalAngleAllCharges->GetRandom(); - } - - vP[0] = vPt*TMath::Cos(vPhi); - vP[1] = vPt*TMath::Sin(vPhi); - vP[2] = vPt*TMath::SinH(vEta); - vE = TMath::Sqrt(TMath::Power(fParticleMass,2) + - TMath::Power(vP[0],2) + - TMath::Power(vP[1],2) + - TMath::Power(vP[2],2)); - - vY = 0.5*TMath::Log((vE + vP[2])/(vE - vP[2])); - - //pt coverage - if((vPt < fPtMin) || (vPt > fPtMax)) continue; - //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); - - //acceptance filter - if(fUseAcceptanceParameterization) { - Double_t gRandomNumberForAcceptance = gRandom->Rndm(); - if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(vPt)) - continue; - } - - //Detector effects - if(fSimulateDetectorEffects) { - Double_t randomNumber = gRandom->Rndm(); - if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(vEta,vPt,vPhi))) - continue; - } - - //Fill QA histograms (acceptance); - if(vCharge > 0) { - gNumberOfAcceptedPositiveParticles += 1; - if(vPhi > 3.*TMath::Pi()/2.) - fHistEtaPhiPos->Fill(vEta,vPhi-2.*TMath::Pi()); - else - fHistEtaPhiPos->Fill(vEta,vPhi); - } - else { - gNumberOfAcceptedNegativeParticles += 1; - if(vPhi > 3.*TMath::Pi()/2.) - fHistEtaPhiNeg->Fill(vEta,vPhi-2.*TMath::Pi()); - else - fHistEtaPhiNeg->Fill(vEta,vPhi); - } - - fHistEta->Fill(vEta); - fHistRapidity->Fill(vY); - fHistPhi->Fill(vPhi); - fHistPt->Fill(vPt); - if(isPion) { - fHistRapidityPions->Fill(vY); - fHistPhiPions->Fill(vPhi); - fHistPtPions->Fill(vPt); - } - else if(isKaon) { - fHistRapidityKaons->Fill(vY); - fHistPhiKaons->Fill(vPhi); - fHistPtKaons->Fill(vPt); - } - else if(isProton) { - fHistRapidityProtons->Fill(vY); - fHistPhiProtons->Fill(vPhi); - fHistPtProtons->Fill(vPt); - } - gNumberOfAcceptedParticles += 1; - - // add the track to the TObjArray - tracksMain->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge, 1.0)); - if(fRunMixing) - tracksMixing->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge, 1.0)); - }//generated positive particle loop - - //Jets - if(fUseJets) { - const Int_t nAssociated = 3; - - Double_t gPtTrig1 = 0., gPtTrig2 = 0., gPtAssoc = 0.; - Double_t gPhiTrig1 = 0., gPhiTrig2 = 0., gPhiAssoc = 0.; - Double_t gEtaTrig1 = 0., gEtaTrig2 = 0., gEtaAssoc = 0.; - Short_t gChargeTrig1 = 0, gChargeTrig2 = 0, gChargeAssoc = 0; - - Double_t gJetCone = 0.2; - - //First leading particle - gPtTrig1 = gRandom->Uniform(3.,5.); - gEtaTrig1 = gRandom->Uniform(-0.8,0.8); - gPhiTrig1 = gRandom->Uniform(0.,TMath::TwoPi()); - - //Decide the charge - gDecideCharge = gRandom->Rndm(); - if(gDecideCharge <= 0.5) - gChargeTrig1 = 1; - else - gChargeTrig1 = -1; - - //Acceptance - if((gEtaTrig1 < fEtaMin) || (gEtaTrig1 > fEtaMax)) continue; - //pt coverage - if((gPtTrig1 < fPtMin) || (gPtTrig1 > fPtMax)) continue; - //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); - - //acceptance filter - if(fUseAcceptanceParameterization) { - Double_t gRandomNumberForAcceptance = gRandom->Rndm(); - if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtTrig1)) - continue; - } - - //Detector effects - if(fSimulateDetectorEffects) { - Double_t randomNumber = gRandom->Rndm(); - if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaTrig1,gPtTrig1,gPhiTrig1))) - continue; - } - - gNumberOfAcceptedParticles += 1; - - // add the track to the TObjArray - tracksMain->Add(new AliBFBasicParticle(gEtaTrig1, gPhiTrig1, gPtTrig1, gChargeTrig1, 1.0)); - if(fRunMixing) - tracksMixing->Add(new AliBFBasicParticle(gEtaTrig1, gPhiTrig1, gPtTrig1, gChargeTrig1, 1.0)); - - Int_t iAssociated = 0; - while(iAssociated < nAssociated) { - gPtAssoc = fPtAssoc->GetRandom(); - if(gPtAssoc < gPtTrig1) { - gEtaAssoc = gRandom->Uniform(gEtaTrig1 - gJetCone/2.,gEtaTrig1 + gJetCone/2.); - gPhiAssoc = gRandom->Uniform(gPhiTrig1 - gJetCone/2.,gPhiTrig1 + gJetCone/2.); - if(gPhiAssoc < 0.) gPhiAssoc += TMath::TwoPi(); - else if(gPhiAssoc > TMath::TwoPi()) gPhiAssoc -= TMath::TwoPi(); - - iAssociated += 1; - - gDecideCharge = gRandom->Rndm(); - if(gDecideCharge <= 0.5) - gChargeAssoc = 1; - else - gChargeAssoc = -1; - - //Acceptance - if((gEtaAssoc < fEtaMin) || (gEtaAssoc > fEtaMax)) continue; - //pt coverage - if((gPtAssoc < fPtMin) || (gPtAssoc > fPtMax)) continue; - //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); - - //acceptance filter - if(fUseAcceptanceParameterization) { - Double_t gRandomNumberForAcceptance = gRandom->Rndm(); - if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtAssoc)) - continue; - } - - //Detector effects - if(fSimulateDetectorEffects) { - Double_t randomNumber = gRandom->Rndm(); - if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaAssoc,gPtAssoc,gPhiAssoc))) - continue; - } - - gNumberOfAcceptedParticles += 1; - - // add the track to the TObjArray - tracksMain->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); - if(fRunMixing) - tracksMixing->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); - }//pt,assoc < pt,trig - }//associated - - //back2back - gPtTrig2 = gPtTrig1; - gEtaTrig2 = -gEtaTrig1; - gPhiTrig2 = TMath::Pi() + gPhiTrig1; - if(gPhiTrig2 < 0.) gPhiTrig2 += TMath::TwoPi(); - else if(gPhiTrig2 > TMath::TwoPi()) gPhiTrig2 -= TMath::TwoPi(); - - //Decide the charge - gDecideCharge = gRandom->Rndm(); - if(gDecideCharge <= 0.5) - gChargeTrig2 = 1; - else - gChargeTrig2 = -1; - - //Acceptance - if((gEtaTrig2 < fEtaMin) || (gEtaTrig2 > fEtaMax)) continue; - //pt coverage - if((gPtTrig2 < fPtMin) || (gPtTrig2 > fPtMax)) continue; - //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); - - //acceptance filter - if(fUseAcceptanceParameterization) { - Double_t gRandomNumberForAcceptance = gRandom->Rndm(); - if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtTrig2)) - continue; - } - - //Detector effects - if(fSimulateDetectorEffects) { - Double_t randomNumber = gRandom->Rndm(); - if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaTrig2,gPtTrig2,gPhiTrig2))) - continue; - } - - gNumberOfAcceptedParticles += 1; - - // add the track to the TObjArray - tracksMain->Add(new AliBFBasicParticle(gEtaTrig2, gPhiTrig2, gPtTrig2, gChargeTrig2, 1.0)); - if(fRunMixing) - tracksMixing->Add(new AliBFBasicParticle(gEtaTrig2, gPhiTrig2, gPtTrig2, gChargeTrig2, 1.0)); - - iAssociated = 0; - while(iAssociated < nAssociated) { - gPtAssoc = fPtAssoc->GetRandom(); - if(gPtAssoc < gPtTrig2) { - gEtaAssoc = gRandom->Uniform(gEtaTrig2 - gJetCone/2.,gEtaTrig2 + gJetCone/2.); - gPhiAssoc = gRandom->Uniform(gPhiTrig2 - gJetCone/2.,gPhiTrig2 + gJetCone/2.); - if(gPhiAssoc < 0.) gPhiAssoc += TMath::TwoPi(); - else if(gPhiAssoc > TMath::TwoPi()) gPhiAssoc -= TMath::TwoPi(); - - iAssociated += 1; - - gDecideCharge = gRandom->Rndm(); - if(gDecideCharge <= 0.5) - gChargeAssoc = 1; - else - gChargeAssoc = -1; - - //Acceptance - if((gEtaAssoc < fEtaMin) || (gEtaAssoc > fEtaMax)) continue; - //pt coverage - if((gPtAssoc < fPtMin) || (gPtAssoc > fPtMax)) continue; - //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); - - //acceptance filter - if(fUseAcceptanceParameterization) { - Double_t gRandomNumberForAcceptance = gRandom->Rndm(); - if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtAssoc)) - continue; - } - - //Detector effects - if(fSimulateDetectorEffects) { - Double_t randomNumber = gRandom->Rndm(); - if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaAssoc,gPtAssoc,gPhiAssoc))) - continue; - } - - gNumberOfAcceptedParticles += 1; - - // add the track to the TObjArray - tracksMain->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); - if(fRunMixing) - tracksMixing->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); - }//pt,assoc < pt,trig - }//associated - }//Jet usage - - - - - - - - - - //Dynamical correlations - Int_t nGeneratedPositiveDynamicalCorrelations = 0; - Int_t nGeneratedNegativeDynamicalCorrelations = 0; - /*Double_t vChargePrime = 0; - Double_t vYPrime = 0.0; - Double_t vEtaPrime = 0.0; - Double_t vPhiPrime = 0.0; - Double_t vPPrime[3] = {0.,0.,0.}; - Double_t vPtPrime = 0.0; - Double_t vEPrime = 0.0; - //Generate "correlated" particles - if(fUseDynamicalCorrelations) { - Int_t gNumberOfDynamicalCorrelations = (Int_t)(0.5*gNumberOfAcceptedParticles*fDynamicalCorrelationsPercentage); - for(Int_t iDynamicalCorrelations = 0; iDynamicalCorrelations < gNumberOfDynamicalCorrelations; iDynamicalCorrelations++) { - isPion = kFALSE; isKaon = kFALSE; isProton = kFALSE; - - //Pseudo-rapidity sampled from a Gaussian centered @ 0 - vEta = gRandom->Gaus(0.0,0.1); - vCharge = 1.0; - nGeneratedPositiveDynamicalCorrelations += 1; - - vEtaPrime = -vEta; - vChargePrime = -1.0; - nGeneratedNegativeDynamicalCorrelations += 1; - - //Acceptance - if((vEta < fEtaMin) || (vEta > fEtaMax)) continue; - if((vEtaPrime < fEtaMin) || (vEtaPrime > fEtaMax)) continue; - - if(!fUseAllCharges) { - //Decide the specie - Double_t randomNumberSpecies = gRandom->Rndm(); - if((randomNumberSpecies >= 0.0)&&(randomNumberSpecies < fPionPercentage)) { - nGeneratedPions += 1; - vPt = fPtSpectraPions->GetRandom(); - vPhi = fAzimuthalAnglePions->GetRandom(); - fParticleMass = fPionMass; - isPion = kTRUE; - } - else if((randomNumberSpecies >= fPionPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage)) { - nGeneratedKaons += 1; - vPt = fPtSpectraKaons->GetRandom(); - vPhi = fAzimuthalAngleKaons->GetRandom(); - fParticleMass = fKaonMass; - isKaon = kTRUE; - } - else if((randomNumberSpecies >= fPionPercentage + fKaonPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage + fProtonPercentage)) { - nGeneratedProtons += 1; - vPt = fPtSpectraProtons->GetRandom(); - vPtPrime = vPt; - vPhi = fAzimuthalAngleProtons->GetRandom(); - fParticleMass = fProtonMass; - isProton = kTRUE; - } - } - else { - vPt = fPtSpectraAllCharges->GetRandom(); - vPhi = fAzimuthalAngleAllCharges->GetRandom(); - } - vPtPrime = vPt; - vPhiPrime = vPhi; - - vP[0] = vPt*TMath::Cos(vPhi); - vP[1] = vPt*TMath::Sin(vPhi); - vP[2] = vPt*TMath::SinH(vEta); - vE = TMath::Sqrt(TMath::Power(fParticleMass,2) + - TMath::Power(vP[0],2) + - TMath::Power(vP[1],2) + - TMath::Power(vP[2],2)); - - vY = 0.5*TMath::Log((vE + vP[2])/(vE - vP[2])); - - vPPrime[0] = vPtPrime*TMath::Cos(vPhiPrime); - vPPrime[1] = vPtPrime*TMath::Sin(vPhiPrime); - vPPrime[2] = vPtPrime*TMath::SinH(vEtaPrime); - vEPrime = TMath::Sqrt(TMath::Power(fParticleMass,2) + - TMath::Power(vPPrime[0],2) + - TMath::Power(vPPrime[1],2) + - TMath::Power(vPPrime[2],2)); - - vYPrime = 0.5*TMath::Log((vEPrime + vPPrime[2])/(vEPrime - vPPrime[2])); - - //pt coverage - if((vPt < fPtMin) || (vPt > fPtMax)) continue; - if((vPtPrime < fPtMin) || (vPtPrime > fPtMax)) continue; - - //acceptance filter - if(fUseAcceptanceParameterization) { - Double_t gRandomNumberForAcceptance = gRandom->Rndm(); - if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(vPt)) - continue; - - Double_t gRandomNumberForAcceptancePrime = gRandom->Rndm(); - if(gRandomNumberForAcceptancePrime > fAcceptanceParameterization->Eval(vPtPrime)) - continue; - } - - // fill charge vector (positive) - chargeVector[0]->push_back(vCharge); - chargeVector[1]->push_back(vY); - chargeVector[2]->push_back(vEta); - chargeVector[3]->push_back(vPhi); - chargeVector[4]->push_back(vP[0]); - chargeVector[5]->push_back(vP[1]); - chargeVector[6]->push_back(vP[2]); - chargeVector[7]->push_back(vPt); - chargeVector[8]->push_back(vE); - - if(fRunShuffling) { - chargeVectorShuffle[0]->push_back(vCharge); - chargeVectorShuffle[1]->push_back(vY); - chargeVectorShuffle[2]->push_back(vEta); - chargeVectorShuffle[3]->push_back(vPhi); - chargeVectorShuffle[4]->push_back(vP[0]); - chargeVectorShuffle[5]->push_back(vP[1]); - chargeVectorShuffle[6]->push_back(vP[2]); - chargeVectorShuffle[7]->push_back(vPt); - chargeVectorShuffle[8]->push_back(vE); - } - - // fill charge vector (negative) - chargeVector[0]->push_back(vChargePrime); - chargeVector[1]->push_back(vYPrime); - chargeVector[2]->push_back(vEtaPrime); - chargeVector[3]->push_back(vPhiPrime); - chargeVector[4]->push_back(vPPrime[0]); - chargeVector[5]->push_back(vPPrime[1]); - chargeVector[6]->push_back(vPPrime[2]); - chargeVector[7]->push_back(vPtPrime); - chargeVector[8]->push_back(vEPrime); - - if(fRunShuffling) { - chargeVectorShuffle[0]->push_back(vChargePrime); - chargeVectorShuffle[1]->push_back(vYPrime); - chargeVectorShuffle[2]->push_back(vEtaPrime); - chargeVectorShuffle[3]->push_back(vPhiPrime); - chargeVectorShuffle[4]->push_back(vPPrime[0]); - chargeVectorShuffle[5]->push_back(vPPrime[1]); - chargeVectorShuffle[6]->push_back(vPPrime[2]); - chargeVectorShuffle[7]->push_back(vPtPrime); - chargeVectorShuffle[8]->push_back(vEPrime); - } - - gNumberOfAcceptedParticles += 2; - }//loop over the dynamical correlations - }*/// usage of dynamical correlations - - if(fUseDebug) { - Printf("======================================================="); - Printf("Total: %d - Total positive: %d - Total negative: %d",nMultiplicity,nGeneratedPositive,nGeneratedNegative); - Printf("Accepted positive: %d - Accepted negative: %d",gNumberOfAcceptedPositiveParticles,gNumberOfAcceptedNegativeParticles); - Printf("Correlations: %d - Correlations positive: %d - Correlations negative: %d",nGeneratedPositiveDynamicalCorrelations+nGeneratedNegativeDynamicalCorrelations,nGeneratedPositiveDynamicalCorrelations,nGeneratedNegativeDynamicalCorrelations); - Printf("Number of accepted particles: %d",gNumberOfAcceptedParticles); - if(!fUseAllCharges) - Printf("Pions: %lf - Kaons: %lf - Protons: %lf",1.*nGeneratedPions/nMultiplicity,1.*nGeneratedKaons/nMultiplicity,1.*nGeneratedProtons/nMultiplicity); - //Printf("Calculating the balance function for %d particles",chargeVector[0]->size()); - } - - fHistEventStats->Fill(4); - fHistNumberOfAcceptedParticles->Fill(gNumberOfAcceptedParticles); - fHistReactionPlane->Fill(fReactionPlane); - - // Event mixing - if (fRunMixing) - { - // 1. First get an event pool corresponding in mult (cent) and - // zvertex to the current event. Once initialized, the pool - // should contain nMix (reduced) events. This routine does not - // pre-scan the chain. The first several events of every chain - // will be skipped until the needed pools are filled to the - // specified depth. If the pool categories are not too rare, this - // should not be a problem. If they are rare, you could lose` - // statistics. - - // 2. Collect the whole pool's content of tracks into one TObjArray - // (bgTracks), which is effectively a single background super-event. - - // 3. The reduced and bgTracks arrays must both be passed into - // FillCorrelations(). Also nMix should be passed in, so a weight - // of 1./nMix can be applied. - - AliEventPool* pool = fPoolMgr->GetEventPool(1., 0.,fReactionPlane); - - if (!pool){ - AliFatal(Form("No pool found for centrality = %f, zVtx = %f, psi = %f", 1., 0.,fReactionPlane)); - } - else{ - - //pool->SetDebug(1); - - if (pool->IsReady() || pool->NTracksInPool() > 50000 / 10 || pool->GetCurrentNEvents() >= 5){ - - - Int_t nMix = pool->GetCurrentNEvents(); - //cout << "nMix = " << nMix << " tracks in pool = " << pool->NTracksInPool() << ", tracks in this event = "<Fill(2); - //((TH2F*) fListOfHistos->FindObject("mixedDist"))->Fill(centrality, pool->NTracksInPool()); - //if (pool->IsReady()) - //((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(3); - - // Fill mixed-event histos here - for (Int_t jMix=0; jMixGetEvent(jMix); - fMixedBalance->CalculateBalance(fReactionPlane,tracksMain,tracksMixed,1,1.,0.); - } - } - - // Update the Event pool - pool->UpdatePool(tracksMain); - //pool->PrintInfo(); - - }//pool NULL check - }//run mixing - - //Calculate the balance function - fBalance->CalculateBalance(fReactionPlane,tracksMain,NULL,1,1.,0.); - //if(fRunMixing) - // fMixedBalance->CalculateBalance(fReactionPlane,tracksMixing,NULL,1,1.,0.); - - }//event loop -} - -//________________________________________________________________________ -void AliAnalysisTaskToyModel::FinishOutput() { - //Printf("END BF"); - - TFile *gOutput = TFile::Open("outputToyModel.root","recreate"); - TDirectoryFile *dir = new TDirectoryFile("PWGCFEbyE.outputBalanceFunctionPsiAnalysis","PWGCFEbyE.outputBalanceFunctionPsiAnalysis"); - - fList->SetName("listQA"); - fList->SetOwner(kTRUE); - dir->Add(fList); - //fList->Write("listQA",TObject::kSingleKey); - - if (!fBalance) { - AliError("ERROR: fBalance not available"); - return; - } - fListBF->SetName("listBF"); - fListBF->SetOwner(kTRUE); - dir->Add(fListBF); - //fListBF->Write("listBF",TObject::kSingleKey); - - if(fRunShuffling) { - if (!fShuffledBalance) { - AliError("ERROR: fShuffledBalance not available"); - return; - } - fListBFS->SetName("listBFShuffled"); - fListBFS->SetOwner(kTRUE); - dir->Add(fListBFS); - //fListBFS->Write("listBFShuffled",TObject::kSingleKey); - } - - if(fRunMixing) { - if (!fMixedBalance) { - AliError("ERROR: fMixedBalance not available"); - return; - } - fListBFM->SetName("listBFMixed"); - fListBFM->SetOwner(kTRUE); - dir->Add(fListBFM); - //fListBFM->Write("listBFMixed",TObject::kSingleKey); - } - - dir->Write(dir->GetName(),TObject::kSingleKey); - gOutput->Close(); -} - +#include "TChain.h" +#include "TList.h" +#include "TCanvas.h" +#include "TParticle.h" +#include "TLorentzVector.h" +#include "TGraphErrors.h" +#include "TH1.h" +#include "TH2.h" +#include "TH3.h" +#include "TArrayF.h" +#include "TF1.h" +#include "TRandom.h" +#include "TFile.h" + +#include "AliAnalysisManager.h" +#include "AliLog.h" + +#include "AliEventPoolManager.h" + +#include "AliAnalysisTaskToyModel.h" +#include "AliBalance.h" +#include "AliBalancePsi.h" +#include "AliAnalysisTaskTriggeredBF.h" + + +// Analysis task for the toy model analysis +// Authors: Panos.Christakoglou@nikhef.nl + +using std::cout; +using std::endl; + +ClassImp(AliAnalysisTaskToyModel) + +//________________________________________________________________________ +AliAnalysisTaskToyModel::AliAnalysisTaskToyModel() +: TObject(), + fUseDebug(kFALSE), + fBalance(0), + fRunShuffling(kFALSE), fShuffledBalance(0), + fRunMixing(kFALSE), fMixedBalance(0), fPoolMgr(0), + fList(0), fListBF(0), fListBFS(0), fListBFM(0), + fHistEventStats(0), + fHistNumberOfAcceptedParticles(0), + fHistReactionPlane(0), + fHistEtaTotal(0), fHistEta(0), + fHistEtaPhiPos(0), fHistEtaPhiNeg(0), + fHistRapidity(0), + fHistRapidityPions(0), fHistRapidityKaons(0), fHistRapidityProtons(0), + fHistPhi(0), + fHistPhiPions(0), fHistPhiKaons(0), fHistPhiProtons(0), + fHistPt(0), + fHistPtPions(0), fHistPtKaons(0), fHistPtProtons(0), + fTotalMultiplicityMean(100.), fTotalMultiplicitySigma(0.0), + fNetChargeMean(0.0), fNetChargeSigma(0.0), + fPtMin(0.0), fPtMax(100.0), + fEtaMin(-1.0), fEtaMax(1.0), + fUseAcceptanceParameterization(kFALSE), fAcceptanceParameterization(0), + fSimulateDetectorEffects(kFALSE), + fNumberOfInefficientSectors(0), + fInefficiencyFactorInPhi(1.0), + fNumberOfDeadSectors(0), + fEfficiencyDropNearEtaEdges(kFALSE), + fEfficiencyMatrix(0), + fUseAllCharges(kFALSE), fParticleMass(0.0), + fPtSpectraAllCharges(0), fTemperatureAllCharges(100.), + fReactionPlane(0.0), + fAzimuthalAngleAllCharges(0), fDirectedFlowAllCharges(0.0), + fEllipticFlowAllCharges(0.0), fTriangularFlowAllCharges(0.0), + fQuandrangularFlowAllCharges(0.0), fPentangularFlowAllCharges(0.0), + fPionPercentage(0.8), fPionMass(0.0), + fPtSpectraPions(0), fTemperaturePions(100.), + fAzimuthalAnglePions(0), fDirectedFlowPions(0.0), + fEllipticFlowPions(0.0), fTriangularFlowPions(0.0), + fQuandrangularFlowPions(0.0), fPentangularFlowPions(0.0), + fKaonPercentage(0.8), fKaonMass(0.0), + fPtSpectraKaons(0), fTemperatureKaons(100.), + fAzimuthalAngleKaons(0), fDirectedFlowKaons(0.0), + fEllipticFlowKaons(0.0), fTriangularFlowKaons(0.0), + fQuandrangularFlowKaons(0.0), fPentangularFlowKaons(0.0), + fProtonPercentage(0.8), fProtonMass(0.0), + fPtSpectraProtons(0), fTemperatureProtons(100.), + fAzimuthalAngleProtons(0), fDirectedFlowProtons(0.0), + fEllipticFlowProtons(0.0), fTriangularFlowProtons(0.0), + fQuandrangularFlowProtons(0.0), fPentangularFlowProtons(0.0), + fUseDynamicalCorrelations(kFALSE), fDynamicalCorrelationsPercentage(0.1), + fUseJets(kFALSE), fPtAssoc(0) { + // Constructor +} + +//________________________________________________________________________ +AliAnalysisTaskToyModel::~AliAnalysisTaskToyModel() { + //Destructor + if(fUseAllCharges) { + delete fPtSpectraAllCharges; + delete fAzimuthalAngleAllCharges; + } + else { + delete fPtSpectraPions; + delete fAzimuthalAnglePions; + delete fPtSpectraKaons; + delete fAzimuthalAngleKaons; + delete fPtSpectraProtons; + delete fAzimuthalAngleProtons; + } + if(fUseJets) delete fPtAssoc; +} + +//________________________________________________________________________ +void AliAnalysisTaskToyModel::Init() { + //Initialize objects + //==============gRandom Seed=======================// + gRandom->SetSeed(0); //seed is set to a random value (depending on machine clock) + //==============gRandom Seed=======================// + + //==============Particles and spectra==============// + TParticle *pion = new TParticle(); + pion->SetPdgCode(211); + fPionMass = pion->GetMass(); + + TParticle *kaon = new TParticle(); + kaon->SetPdgCode(321); + fKaonMass = kaon->GetMass(); + + TParticle *proton = new TParticle(); + proton->SetPdgCode(2212); + fProtonMass = proton->GetMass(); + + if(fUseAllCharges) { + fParticleMass = fPionMass; + fPtSpectraAllCharges = new TF1("fPtSpectraAllCharges","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); + fPtSpectraAllCharges->SetParName(0,"Mass"); + fPtSpectraAllCharges->SetParName(1,"Temperature"); + //fPtSpectraAllCharges = new TF1("fPtSpectraAllCharges","(x^2/TMath::Sqrt(TMath::Power(x,2) + TMath::Power(0.139,2)))*TMath::Power((1. + x/[0]),-[1])",0.,20.); + //fPtSpectraAllCharges->SetParName(0,"pt0"); + //fPtSpectraAllCharges->SetParName(1,"b"); + } + else { + fPtSpectraPions = new TF1("fPtSpectraPions","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); + fPtSpectraPions->SetParName(0,"Mass"); + fPtSpectraPions->SetParName(1,"Temperature"); + + fPtSpectraKaons = new TF1("fPtSpectraKaons","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); + fPtSpectraKaons->SetParName(0,"Mass"); + fPtSpectraKaons->SetParName(1,"Temperature"); + + fPtSpectraProtons = new TF1("fPtSpectraProtons","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,5.); + fPtSpectraProtons->SetParName(0,"Mass"); + fPtSpectraProtons->SetParName(1,"Temperature"); + } + //==============Particles and spectra==============// + + //==============Flow values==============// + if(fUseAllCharges) { + if(fUseDebug) { + Printf("Directed flow: %lf",fDirectedFlowAllCharges); + Printf("Elliptic flow: %lf",fEllipticFlowAllCharges); + Printf("Triangular flow: %lf",fTriangularFlowAllCharges); + Printf("Quandrangular flow: %lf",fQuandrangularFlowAllCharges); + Printf("Pentangular flow: %lf",fPentangularFlowAllCharges); + } + + fAzimuthalAngleAllCharges = new TF1("fAzimuthalAngleAllCharges","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); + fAzimuthalAngleAllCharges->SetParName(0,"Reaction Plane"); + fAzimuthalAngleAllCharges->SetParName(1,"Directed flow"); + fAzimuthalAngleAllCharges->SetParName(2,"Elliptic flow"); + fAzimuthalAngleAllCharges->SetParName(3,"Triangular flow"); + fAzimuthalAngleAllCharges->SetParName(4,"Quandrangular flow"); + fAzimuthalAngleAllCharges->SetParName(5,"Pentangular flow"); + } + else { + fAzimuthalAnglePions = new TF1("fAzimuthalAnglePions","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); + fAzimuthalAnglePions->SetParName(0,"Reaction Plane"); + fAzimuthalAnglePions->SetParName(1,"Directed flow"); + fAzimuthalAnglePions->SetParName(2,"Elliptic flow"); + fAzimuthalAnglePions->SetParName(3,"Triangular flow"); + fAzimuthalAnglePions->SetParName(4,"Quandrangular flow"); + fAzimuthalAnglePions->SetParName(5,"Pentangular flow"); + + fAzimuthalAngleKaons = new TF1("fAzimuthalAngleKaons","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); + fAzimuthalAngleKaons->SetParName(0,"Reaction Plane"); + fAzimuthalAngleKaons->SetParName(1,"Directed flow"); + fAzimuthalAngleKaons->SetParName(2,"Elliptic flow"); + fAzimuthalAngleKaons->SetParName(3,"Triangular flow"); + fAzimuthalAngleKaons->SetParName(4,"Quandrangular flow"); + fAzimuthalAngleKaons->SetParName(5,"Pentangular flow"); + + fAzimuthalAngleProtons = new TF1("fAzimuthalAngleProtons","1+2.*[1]*TMath::Cos(x-[0])+2.*[2]*TMath::Cos(2*(x-[0]))+2.*[3]*TMath::Cos(3*(x-[0]))+2.*[4]*TMath::Cos(4*(x-[0]))+2.*[5]*TMath::Cos(5*(x-[0]))",0.,2.*TMath::Pi()); + fAzimuthalAngleProtons->SetParName(0,"Reaction Plane"); + fAzimuthalAngleProtons->SetParName(1,"Directed flow"); + fAzimuthalAngleProtons->SetParName(2,"Elliptic flow"); + fAzimuthalAngleProtons->SetParName(3,"Triangular flow"); + fAzimuthalAngleProtons->SetParName(4,"Quandrangular flow"); + fAzimuthalAngleProtons->SetParName(5,"Pentangular flow"); + } + //==============Flow values==============// + + //===================Jets===================// + if(fUseJets) { + fPtAssoc = new TF1("fPtAssoc","x*TMath::Exp(-TMath::Power([0]*[0]+x*x,0.5)/[1])",0.,20.); + fPtAssoc->SetParName(0,"pt0"); + fPtAssoc->SetParName(1,"b"); + fPtAssoc->SetParameter(0,0.139); + fPtAssoc->SetParameter(1,0.5); + fPtAssoc->SetLineColor(1); + } + + //===================Jets===================// + + //==============Efficiency matrix==============// + if(fSimulateDetectorEffects) SetupEfficiencyMatrix(); + //==============Efficiency matrix==============// +} + +//________________________________________________________________________ +void AliAnalysisTaskToyModel::SetupEfficiencyMatrix() { + //Setup the efficiency matrix + TH1F *hPt = new TH1F("hPt","",200,0.1,20.1); + TH1F *hEta = new TH1F("hEta","",20,-0.95,0.95); + TH1F *hPhi = new TH1F("hPhi","",72,0.,2.*TMath::Pi()); + fEfficiencyMatrix = new TH3F("fEfficiencyMatrix","", + hEta->GetNbinsX(), + hEta->GetXaxis()->GetXmin(), + hEta->GetXaxis()->GetXmax(), + hPt->GetNbinsX(), + hPt->GetXaxis()->GetXmin(), + hPt->GetXaxis()->GetXmax(), + hPhi->GetNbinsX(), + hPhi->GetXaxis()->GetXmin(), + hPhi->GetXaxis()->GetXmax()); + + //Efficiency in pt + Double_t epsilon[20] = {0.3,0.6,0.77,0.79,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80,0.80}; + for(Int_t i=1;i<=20;i++) { + hPt->SetBinContent(i,epsilon[i-1]); + hPt->SetBinError(i,0.01); + } + for(Int_t i=21;i<=200;i++) { + hPt->SetBinContent(i,epsilon[19]); + hPt->SetBinError(i,0.01); + } + + //Efficiency in eta + for(Int_t i=1;i<=hEta->GetNbinsX();i++) { + hEta->SetBinContent(i,1.0); + hEta->SetBinError(i,0.01); + } + if(fEfficiencyDropNearEtaEdges) { + hEta->SetBinContent(1,0.7); hEta->SetBinContent(2,0.8); + hEta->SetBinContent(3,0.9); + hEta->SetBinContent(18,0.9); hEta->SetBinContent(19,0.8); + hEta->SetBinContent(20,0.7); + } + + //Efficiency in phi + for(Int_t i=1;i<=hPhi->GetNbinsX();i++) { + hPhi->SetBinContent(i,1.0); + hPhi->SetBinError(i,0.01); + } + for(Int_t i=1;i<=fNumberOfInefficientSectors;i++) + hPhi->SetBinContent(hPhi->FindBin(hPhi->GetRandom()),fInefficiencyFactorInPhi); + for(Int_t i=1;i<=fNumberOfDeadSectors;i++) + hPhi->SetBinContent(hPhi->FindBin(hPhi->GetRandom()),0.0); + + //Fill the 3D efficiency map + for(Int_t iBinX = 1; iBinX<=fEfficiencyMatrix->GetXaxis()->GetNbins();iBinX++) { + //cout<<"==================================="<GetYaxis()->GetNbins();iBinY++) { + //cout<<"==================================="<GetZaxis()->GetNbins();iBinZ++) { + fEfficiencyMatrix->SetBinContent(iBinX,iBinY,iBinZ,hEta->GetBinContent(iBinX)*hPt->GetBinContent(iBinY)*hPhi->GetBinContent(iBinZ)); + //cout<<"Eta: "<GetBinCenter(iBinX)<<" - Pt: "<GetBinCenter(iBinY)<<" - Phi: "<GetBinCenter(iBinZ)<<" - "<GetBinContent(iBinX)<<" , "<GetBinContent(iBinY)<<" , "<GetBinContent(iBinZ)<<" - Efficiency: "<GetBinContent(iBinX)*hPt->GetBinContent(iBinY)*hPhi->GetBinContent(iBinZ)<SetDeltaEtaMax(2.0); + } + if(fRunShuffling) { + if(!fShuffledBalance) { + fShuffledBalance = new AliBalancePsi(); + fShuffledBalance->SetDeltaEtaMax(2.0); + } + } + if(fRunMixing) { + if(!fMixedBalance) { + fMixedBalance = new AliBalancePsi(); + fMixedBalance->SetDeltaEtaMax(2.0); + } + } + + //QA list + fList = new TList(); + fList->SetName("listQA"); + fList->SetOwner(); + + //Balance Function list + fListBF = new TList(); + fListBF->SetName("listBF"); + fListBF->SetOwner(); + + if(fRunShuffling) { + fListBFS = new TList(); + fListBFS->SetName("listBFShuffled"); + fListBFS->SetOwner(); + } + + if(fRunMixing) { + fListBFM = new TList(); + fListBFM->SetName("listBFMixed"); + fListBFM->SetOwner(); + } + + //==============QA================// + //Event stats. + TString gCutName[4] = {"Total","Offline trigger", + "Vertex","Analyzed"}; + fHistEventStats = new TH1F("fHistEventStats", + "Event statistics;;N_{events}", + 4,0.5,4.5); + for(Int_t i = 1; i <= 4; i++) + fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); + fList->Add(fHistEventStats); + + fHistNumberOfAcceptedParticles = new TH1F("fHistNumberOfAcceptedParticles",";N_{acc.};Entries",10000,0,10000); + fList->Add(fHistNumberOfAcceptedParticles); + + fHistReactionPlane = new TH1F("fHistReactionPlane","Reaction plane angle;#Psi [rad];Entries",1000,0.,2.*TMath::Pi()); + fList->Add(fHistReactionPlane); + + //Pseudo-rapidity + fHistEtaTotal = new TH1F("fHistEtaTotal","Pseudo-rapidity (full phase space);#eta;Entries",1000,-15.,15.); + fList->Add(fHistEtaTotal); + + fHistEta = new TH1F("fHistEta","Pseudo-rapidity (acceptance);#eta;Entries",1000,-1.5,1.5); + fList->Add(fHistEta); + + fHistEtaPhiPos = new TH2F("fHistEtaPhiPos","#eta-#phi distribution (+);#eta;#varphi (rad)",80,-2.,2.,72,-TMath::Pi()/2.,3.*TMath::Pi()/2.); + fList->Add(fHistEtaPhiPos); + fHistEtaPhiNeg = new TH2F("fHistEtaPhiNeg","#eta-#phi distribution (-);#eta;#varphi (rad)",80,-2.,2.,72,-TMath::Pi()/2.,3.*TMath::Pi()/2.); + fList->Add(fHistEtaPhiNeg); + + //Rapidity + fHistRapidity = new TH1F("fHistRapidity","Rapidity (acceptance);y;Entries",1000,-1.5,1.5); + fList->Add(fHistRapidity); + fHistRapidityPions = new TH1F("fHistRapidityPions","Rapidity (acceptance - pions);y;Entries",1000,-1.5,1.5); + fList->Add(fHistRapidityPions); + fHistRapidityKaons = new TH1F("fHistRapidityKaons","Rapidity (acceptance - kaons);y;Entries",1000,-1.5,1.5); + fList->Add(fHistRapidityKaons); + fHistRapidityProtons = new TH1F("fHistRapidityProtons","Rapidity (acceptance - protons);y;Entries",1000,-1.5,1.5); + fList->Add(fHistRapidityProtons); + + //Phi + fHistPhi = new TH1F("fHistPhi","Phi (acceptance);#phi (rad);Entries",1000,0.,2*TMath::Pi()); + fList->Add(fHistPhi); + + fHistPhiPions = new TH1F("fHistPhiPions","Phi (acceptance - pions);#phi (rad);Entries",1000,0.,2*TMath::Pi()); + fList->Add(fHistPhiPions); + fHistPhiKaons = new TH1F("fHistPhiKaons","Phi (acceptance - kaons);#phi (rad);Entries",1000,0.,2*TMath::Pi()); + fList->Add(fHistPhiKaons); + fHistPhiProtons = new TH1F("fHistPhiProtons","Phi (acceptance - protons);#phi (rad);Entries",1000,0.,2*TMath::Pi()); + fList->Add(fHistPhiProtons); + + //Pt + fHistPt = new TH1F("fHistPt","Pt (acceptance);p_{t} (GeV/c);Entries",1000,0.,10.); + fList->Add(fHistPt); + + fHistPtPions = new TH1F("fHistPtPions","Pt (acceptance - pions);p_{t} (GeV/c);Entries",1000,0.,10.); + fList->Add(fHistPtPions); + fHistPtKaons = new TH1F("fHistPtKaons","Pt (acceptance - kaons);p_{t} (GeV/c);Entries",1000,0.,10.); + fList->Add(fHistPtKaons); + fHistPtProtons = new TH1F("fHistPtProtons","Pt (acceptance - protons);p_{t} (GeV/c);Entries",1000,0.,10.); + fList->Add(fHistPtProtons); + + if(fEfficiencyMatrix) fList->Add(fEfficiencyMatrix); + + //==============Balance function histograms================// + // Initialize histograms if not done yet + if(!fBalance->GetHistNp()){ + AliWarning("Histograms not yet initialized! --> Will be done now"); + AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); + fBalance->InitHistograms(); + } + + if(fRunShuffling) { + if(!fShuffledBalance->GetHistNp()) { + AliWarning("Histograms (shuffling) not yet initialized! --> Will be done now"); + AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); + fShuffledBalance->InitHistograms(); + } + } + + fListBF->Add(fBalance->GetHistNp()); + fListBF->Add(fBalance->GetHistNn()); + fListBF->Add(fBalance->GetHistNpn()); + fListBF->Add(fBalance->GetHistNnn()); + fListBF->Add(fBalance->GetHistNpp()); + fListBF->Add(fBalance->GetHistNnp()); + + if(fRunShuffling) { + fListBFS->Add(fShuffledBalance->GetHistNp()); + fListBFS->Add(fShuffledBalance->GetHistNn()); + fListBFS->Add(fShuffledBalance->GetHistNpn()); + fListBFS->Add(fShuffledBalance->GetHistNnn()); + fListBFS->Add(fShuffledBalance->GetHistNpp()); + fListBFS->Add(fShuffledBalance->GetHistNnp()); + } + + if(fRunMixing) { + fListBFM->Add(fMixedBalance->GetHistNp()); + fListBFM->Add(fMixedBalance->GetHistNn()); + fListBFM->Add(fMixedBalance->GetHistNpn()); + fListBFM->Add(fMixedBalance->GetHistNnn()); + fListBFM->Add(fMixedBalance->GetHistNpp()); + fListBFM->Add(fMixedBalance->GetHistNnp()); + } + + // Event Mixing + if(fRunMixing){ + Int_t fMixingTracks = 2000; + Int_t trackDepth = fMixingTracks; + Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager + + // centrality bins + // Double_t centralityBins[] = {0.,1.,2.,3.,4.,5.,7.,10.,20.,30.,40.,50.,60.,70.,80.,100.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! + // Double_t* centbins = centralityBins; + // Int_t nCentralityBins = sizeof(centralityBins) / sizeof(Double_t) - 1; + + // multiplicity bins + Double_t multiplicityBins[] = {0,10,20,30,40,50,60,70,80,100,100000}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! + Double_t* multbins = multiplicityBins; + Int_t nMultiplicityBins = sizeof(multiplicityBins) / sizeof(Double_t) - 1; + + // Zvtx bins + Double_t vertexBins[] = {-10., -7., -5., -3., -1., 1., 3., 5., 7., 10.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! + Double_t* vtxbins = vertexBins; + Int_t nVertexBins = sizeof(vertexBins) / sizeof(Double_t) - 1; + + // Event plane angle (Psi) bins + // Double_t psiBins[] = {0.,45.,135.,215.,305.,360.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! + // Double_t* psibins = psiBins; + // Int_t nPsiBins = sizeof(psiBins) / sizeof(Double_t) - 1; + + // // run the event mixing also in bins of event plane (statistics!) + // if(fRunMixingEventPlane){ + // if(fEventClass=="Multiplicity"){ + // fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nMultiplicityBins, multbins, nVertexBins, vtxbins, nPsiBins, psibins); + // } + // else{ + // fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centbins, nVertexBins, vtxbins, nPsiBins, psibins); + // } + // } + // else{ + //if(fEventClass=="Multiplicity"){ + fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nMultiplicityBins, multbins, nVertexBins, vtxbins); + //} + //else{ + //fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centbins, nVertexBins, vtxbins); + //} + } + + TH1::AddDirectory(oldStatus); +} + +//________________________________________________________________________ +void AliAnalysisTaskToyModel::Run(Int_t nEvents) { + // Main loop + // Called for each event + Short_t vCharge = 0; + Float_t vY = 0.0; + Float_t vEta = 0.0; + Float_t vPhi = 0.0; + Float_t vP[3] = {0.,0.,0.}; + Float_t vPt = 0.0; + Float_t vE = 0.0; + Bool_t isPion = kFALSE, isKaon = kFALSE, isProton = kFALSE; + + Double_t gDecideCharge = 0.; + + if(fUseAllCharges) { + //fPtSpectraAllCharges->SetParameter(0,fParticleMass); + fPtSpectraAllCharges->SetParameter(0,1.05); + fPtSpectraAllCharges->SetParameter(1,fTemperatureAllCharges); + + fAzimuthalAngleAllCharges->SetParameter(1,fDirectedFlowAllCharges); + fAzimuthalAngleAllCharges->SetParameter(2,fEllipticFlowAllCharges); + fAzimuthalAngleAllCharges->SetParameter(3,fTriangularFlowAllCharges); + fAzimuthalAngleAllCharges->SetParameter(4,fQuandrangularFlowAllCharges); + fAzimuthalAngleAllCharges->SetParameter(5,fPentangularFlowAllCharges); + } + else { + fPtSpectraPions->SetParameter(0,fPionMass); + fPtSpectraPions->SetParameter(1,fTemperaturePions); + fPtSpectraKaons->SetParameter(0,fKaonMass); + fPtSpectraKaons->SetParameter(1,fTemperatureKaons); + fPtSpectraProtons->SetParameter(0,fProtonMass); + fPtSpectraProtons->SetParameter(1,fTemperatureProtons); + + fAzimuthalAnglePions->SetParameter(1,fDirectedFlowPions); + fAzimuthalAnglePions->SetParameter(2,fEllipticFlowPions); + fAzimuthalAnglePions->SetParameter(3,fTriangularFlowPions); + fAzimuthalAnglePions->SetParameter(4,fQuandrangularFlowPions); + fAzimuthalAnglePions->SetParameter(5,fPentangularFlowPions); + + fAzimuthalAngleKaons->SetParameter(1,fDirectedFlowKaons); + fAzimuthalAngleKaons->SetParameter(2,fEllipticFlowKaons); + fAzimuthalAngleKaons->SetParameter(3,fTriangularFlowKaons); + fAzimuthalAngleKaons->SetParameter(4,fQuandrangularFlowKaons); + fAzimuthalAngleKaons->SetParameter(5,fPentangularFlowKaons); + + fAzimuthalAngleProtons->SetParameter(1,fDirectedFlowProtons); + fAzimuthalAngleProtons->SetParameter(2,fEllipticFlowProtons); + fAzimuthalAngleProtons->SetParameter(3,fTriangularFlowProtons); + fAzimuthalAngleProtons->SetParameter(4,fQuandrangularFlowProtons); + fAzimuthalAngleProtons->SetParameter(5,fPentangularFlowProtons); + } + + + for(Int_t iEvent = 0; iEvent < nEvents; iEvent++) { + // vector holding the charges/kinematics of all tracks (charge,y,eta,phi,p0,p1,p2,pt,E) + //vector *chargeVectorShuffle[9]; // this will be shuffled + //vector *chargeVector[9]; // original charge + //for(Int_t i = 0; i < 9; i++){ + //chargeVectorShuffle[i] = new vector; + //chargeVector[i] = new vector; + //} + + // TObjArray for the accepted particles + // (has to be done here, otherwise mxing with event pool does not work, overwriting pointers!) + TObjArray *tracksMain = new TObjArray(); + tracksMain->SetOwner(kTRUE); + TObjArray *tracksMixing = 0x0; + if(fRunMixing) { + tracksMixing = new TObjArray(); + tracksMixing->SetOwner(kTRUE); + } + + tracksMain->Clear(); + if(fRunMixing) tracksMixing->Clear(); + + fHistEventStats->Fill(1); + fHistEventStats->Fill(2); + fHistEventStats->Fill(3); + + if((iEvent%1000) == 0) + cout<<"Event: "<Gaus(fTotalMultiplicityMean,fTotalMultiplicitySigma)); + Int_t nNetCharge = (Int_t)(gRandom->Gaus(fNetChargeMean,fNetChargeSigma)); + + Int_t nGeneratedPositive = (Int_t)((nMultiplicity/2) + nNetCharge); + Int_t nGeneratedNegative = nMultiplicity - nGeneratedPositive; + if(fUseDebug) + Printf("Total multiplicity: %d - Generated positive: %d - Generated negative: %d",nMultiplicity,nGeneratedPositive,nGeneratedNegative); + + //Randomization of the reaction plane + fReactionPlane = 2.0*TMath::Pi()*gRandom->Rndm(); + //fReactionPlane = 0.0; + if(fUseAllCharges) + fAzimuthalAngleAllCharges->SetParameter(0,fReactionPlane); + else { + fAzimuthalAnglePions->SetParameter(0,fReactionPlane); + fAzimuthalAngleKaons->SetParameter(0,fReactionPlane); + fAzimuthalAngleProtons->SetParameter(0,fReactionPlane); + } + + Int_t gNumberOfAcceptedParticles = 0; + Int_t gNumberOfAcceptedPositiveParticles = 0; + Int_t gNumberOfAcceptedNegativeParticles = 0; + Int_t nGeneratedPions = 0, nGeneratedKaons = 0, nGeneratedProtons = 0; + + //Generate particles + for(Int_t iParticleCount = 0; iParticleCount < nMultiplicity; iParticleCount++) { + isPion = kFALSE; isKaon = kFALSE; isProton = kFALSE; + if(fUseDebug) + Printf("Generating positive: %d(%d)",iParticleCount+1,nGeneratedPositive); + + //Pseudo-rapidity sampled from a Gaussian centered @ 0 + vEta = gRandom->Gaus(0.0,4.0); + + //Fill QA histograms (full phase space) + fHistEtaTotal->Fill(vEta); + + //Decide the charge + gDecideCharge = gRandom->Rndm(); + if(gDecideCharge <= 1.*nGeneratedPositive/nMultiplicity) + vCharge = 1; + else + vCharge = -1; + + //Acceptance + if((vEta < fEtaMin) || (vEta > fEtaMax)) continue; + + if(!fUseAllCharges) { + //Decide the specie + Double_t randomNumberSpecies = gRandom->Rndm(); + if((randomNumberSpecies >= 0.0)&&(randomNumberSpecies < fPionPercentage)) { + nGeneratedPions += 1; + vPt = fPtSpectraPions->GetRandom(); + vPhi = fAzimuthalAnglePions->GetRandom(); + fParticleMass = fPionMass; + isPion = kTRUE; + } + else if((randomNumberSpecies >= fPionPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage)) { + nGeneratedKaons += 1; + vPt = fPtSpectraKaons->GetRandom(); + vPhi = fAzimuthalAngleKaons->GetRandom(); + fParticleMass = fKaonMass; + isKaon = kTRUE; + } + else if((randomNumberSpecies >= fPionPercentage + fKaonPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage + fProtonPercentage)) { + nGeneratedProtons += 1; + vPt = fPtSpectraProtons->GetRandom(); + vPhi = fAzimuthalAngleProtons->GetRandom(); + fParticleMass = fProtonMass; + isProton = kTRUE; + } + } + else { + vPt = fPtSpectraAllCharges->GetRandom(); + vPhi = fAzimuthalAngleAllCharges->GetRandom(); + } + + vP[0] = vPt*TMath::Cos(vPhi); + vP[1] = vPt*TMath::Sin(vPhi); + vP[2] = vPt*TMath::SinH(vEta); + vE = TMath::Sqrt(TMath::Power(fParticleMass,2) + + TMath::Power(vP[0],2) + + TMath::Power(vP[1],2) + + TMath::Power(vP[2],2)); + + vY = 0.5*TMath::Log((vE + vP[2])/(vE - vP[2])); + + //pt coverage + if((vPt < fPtMin) || (vPt > fPtMax)) continue; + //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); + + //acceptance filter + if(fUseAcceptanceParameterization) { + Double_t gRandomNumberForAcceptance = gRandom->Rndm(); + if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(vPt)) + continue; + } + + //Detector effects + if(fSimulateDetectorEffects) { + Double_t randomNumber = gRandom->Rndm(); + if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(vEta,vPt,vPhi))) + continue; + } + + //Fill QA histograms (acceptance); + if(vCharge > 0) { + gNumberOfAcceptedPositiveParticles += 1; + if(vPhi > 3.*TMath::Pi()/2.) + fHistEtaPhiPos->Fill(vEta,vPhi-2.*TMath::Pi()); + else + fHistEtaPhiPos->Fill(vEta,vPhi); + } + else { + gNumberOfAcceptedNegativeParticles += 1; + if(vPhi > 3.*TMath::Pi()/2.) + fHistEtaPhiNeg->Fill(vEta,vPhi-2.*TMath::Pi()); + else + fHistEtaPhiNeg->Fill(vEta,vPhi); + } + + fHistEta->Fill(vEta); + fHistRapidity->Fill(vY); + fHistPhi->Fill(vPhi); + fHistPt->Fill(vPt); + if(isPion) { + fHistRapidityPions->Fill(vY); + fHistPhiPions->Fill(vPhi); + fHistPtPions->Fill(vPt); + } + else if(isKaon) { + fHistRapidityKaons->Fill(vY); + fHistPhiKaons->Fill(vPhi); + fHistPtKaons->Fill(vPt); + } + else if(isProton) { + fHistRapidityProtons->Fill(vY); + fHistPhiProtons->Fill(vPhi); + fHistPtProtons->Fill(vPt); + } + gNumberOfAcceptedParticles += 1; + + // add the track to the TObjArray + tracksMain->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge, 1.0)); + if(fRunMixing) + tracksMixing->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge, 1.0)); + }//generated positive particle loop + + //Jets + if(fUseJets) { + const Int_t nAssociated = 3; + + Double_t gPtTrig1 = 0., gPtTrig2 = 0., gPtAssoc = 0.; + Double_t gPhiTrig1 = 0., gPhiTrig2 = 0., gPhiAssoc = 0.; + Double_t gEtaTrig1 = 0., gEtaTrig2 = 0., gEtaAssoc = 0.; + Short_t gChargeTrig1 = 0, gChargeTrig2 = 0, gChargeAssoc = 0; + + Double_t gJetCone = 0.2; + + //First leading particle + gPtTrig1 = gRandom->Uniform(3.,5.); + gEtaTrig1 = gRandom->Uniform(-0.8,0.8); + gPhiTrig1 = gRandom->Uniform(0.,TMath::TwoPi()); + + //Decide the charge + gDecideCharge = gRandom->Rndm(); + if(gDecideCharge <= 0.5) + gChargeTrig1 = 1; + else + gChargeTrig1 = -1; + + //Acceptance + if((gEtaTrig1 < fEtaMin) || (gEtaTrig1 > fEtaMax)) continue; + //pt coverage + if((gPtTrig1 < fPtMin) || (gPtTrig1 > fPtMax)) continue; + //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); + + //acceptance filter + if(fUseAcceptanceParameterization) { + Double_t gRandomNumberForAcceptance = gRandom->Rndm(); + if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtTrig1)) + continue; + } + + //Detector effects + if(fSimulateDetectorEffects) { + Double_t randomNumber = gRandom->Rndm(); + if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaTrig1,gPtTrig1,gPhiTrig1))) + continue; + } + + gNumberOfAcceptedParticles += 1; + + // add the track to the TObjArray + tracksMain->Add(new AliBFBasicParticle(gEtaTrig1, gPhiTrig1, gPtTrig1, gChargeTrig1, 1.0)); + if(fRunMixing) + tracksMixing->Add(new AliBFBasicParticle(gEtaTrig1, gPhiTrig1, gPtTrig1, gChargeTrig1, 1.0)); + + Int_t iAssociated = 0; + while(iAssociated < nAssociated) { + gPtAssoc = fPtAssoc->GetRandom(); + if(gPtAssoc < gPtTrig1) { + gEtaAssoc = gRandom->Uniform(gEtaTrig1 - gJetCone/2.,gEtaTrig1 + gJetCone/2.); + gPhiAssoc = gRandom->Uniform(gPhiTrig1 - gJetCone/2.,gPhiTrig1 + gJetCone/2.); + if(gPhiAssoc < 0.) gPhiAssoc += TMath::TwoPi(); + else if(gPhiAssoc > TMath::TwoPi()) gPhiAssoc -= TMath::TwoPi(); + + iAssociated += 1; + + gDecideCharge = gRandom->Rndm(); + if(gDecideCharge <= 0.5) + gChargeAssoc = 1; + else + gChargeAssoc = -1; + + //Acceptance + if((gEtaAssoc < fEtaMin) || (gEtaAssoc > fEtaMax)) continue; + //pt coverage + if((gPtAssoc < fPtMin) || (gPtAssoc > fPtMax)) continue; + //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); + + //acceptance filter + if(fUseAcceptanceParameterization) { + Double_t gRandomNumberForAcceptance = gRandom->Rndm(); + if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtAssoc)) + continue; + } + + //Detector effects + if(fSimulateDetectorEffects) { + Double_t randomNumber = gRandom->Rndm(); + if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaAssoc,gPtAssoc,gPhiAssoc))) + continue; + } + + gNumberOfAcceptedParticles += 1; + + // add the track to the TObjArray + tracksMain->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); + if(fRunMixing) + tracksMixing->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); + }//pt,assoc < pt,trig + }//associated + + //back2back + gPtTrig2 = gPtTrig1; + gEtaTrig2 = -gEtaTrig1; + gPhiTrig2 = TMath::Pi() + gPhiTrig1; + if(gPhiTrig2 < 0.) gPhiTrig2 += TMath::TwoPi(); + else if(gPhiTrig2 > TMath::TwoPi()) gPhiTrig2 -= TMath::TwoPi(); + + //Decide the charge + gDecideCharge = gRandom->Rndm(); + if(gDecideCharge <= 0.5) + gChargeTrig2 = 1; + else + gChargeTrig2 = -1; + + //Acceptance + if((gEtaTrig2 < fEtaMin) || (gEtaTrig2 > fEtaMax)) continue; + //pt coverage + if((gPtTrig2 < fPtMin) || (gPtTrig2 > fPtMax)) continue; + //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); + + //acceptance filter + if(fUseAcceptanceParameterization) { + Double_t gRandomNumberForAcceptance = gRandom->Rndm(); + if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtTrig2)) + continue; + } + + //Detector effects + if(fSimulateDetectorEffects) { + Double_t randomNumber = gRandom->Rndm(); + if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaTrig2,gPtTrig2,gPhiTrig2))) + continue; + } + + gNumberOfAcceptedParticles += 1; + + // add the track to the TObjArray + tracksMain->Add(new AliBFBasicParticle(gEtaTrig2, gPhiTrig2, gPtTrig2, gChargeTrig2, 1.0)); + if(fRunMixing) + tracksMixing->Add(new AliBFBasicParticle(gEtaTrig2, gPhiTrig2, gPtTrig2, gChargeTrig2, 1.0)); + + iAssociated = 0; + while(iAssociated < nAssociated) { + gPtAssoc = fPtAssoc->GetRandom(); + if(gPtAssoc < gPtTrig2) { + gEtaAssoc = gRandom->Uniform(gEtaTrig2 - gJetCone/2.,gEtaTrig2 + gJetCone/2.); + gPhiAssoc = gRandom->Uniform(gPhiTrig2 - gJetCone/2.,gPhiTrig2 + gJetCone/2.); + if(gPhiAssoc < 0.) gPhiAssoc += TMath::TwoPi(); + else if(gPhiAssoc > TMath::TwoPi()) gPhiAssoc -= TMath::TwoPi(); + + iAssociated += 1; + + gDecideCharge = gRandom->Rndm(); + if(gDecideCharge <= 0.5) + gChargeAssoc = 1; + else + gChargeAssoc = -1; + + //Acceptance + if((gEtaAssoc < fEtaMin) || (gEtaAssoc > fEtaMax)) continue; + //pt coverage + if((gPtAssoc < fPtMin) || (gPtAssoc > fPtMax)) continue; + //Printf("pt: %lf - mins: %lf - max: %lf",vPt,fPtMin,fPtMax); + + //acceptance filter + if(fUseAcceptanceParameterization) { + Double_t gRandomNumberForAcceptance = gRandom->Rndm(); + if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(gPtAssoc)) + continue; + } + + //Detector effects + if(fSimulateDetectorEffects) { + Double_t randomNumber = gRandom->Rndm(); + if(randomNumber > fEfficiencyMatrix->GetBinContent(fEfficiencyMatrix->FindBin(gEtaAssoc,gPtAssoc,gPhiAssoc))) + continue; + } + + gNumberOfAcceptedParticles += 1; + + // add the track to the TObjArray + tracksMain->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); + if(fRunMixing) + tracksMixing->Add(new AliBFBasicParticle(gEtaAssoc, gPhiAssoc, gPtAssoc, gChargeAssoc, 1.0)); + }//pt,assoc < pt,trig + }//associated + }//Jet usage + + + + + + + + + + //Dynamical correlations + Int_t nGeneratedPositiveDynamicalCorrelations = 0; + Int_t nGeneratedNegativeDynamicalCorrelations = 0; + /*Double_t vChargePrime = 0; + Double_t vYPrime = 0.0; + Double_t vEtaPrime = 0.0; + Double_t vPhiPrime = 0.0; + Double_t vPPrime[3] = {0.,0.,0.}; + Double_t vPtPrime = 0.0; + Double_t vEPrime = 0.0; + //Generate "correlated" particles + if(fUseDynamicalCorrelations) { + Int_t gNumberOfDynamicalCorrelations = (Int_t)(0.5*gNumberOfAcceptedParticles*fDynamicalCorrelationsPercentage); + for(Int_t iDynamicalCorrelations = 0; iDynamicalCorrelations < gNumberOfDynamicalCorrelations; iDynamicalCorrelations++) { + isPion = kFALSE; isKaon = kFALSE; isProton = kFALSE; + + //Pseudo-rapidity sampled from a Gaussian centered @ 0 + vEta = gRandom->Gaus(0.0,0.1); + vCharge = 1.0; + nGeneratedPositiveDynamicalCorrelations += 1; + + vEtaPrime = -vEta; + vChargePrime = -1.0; + nGeneratedNegativeDynamicalCorrelations += 1; + + //Acceptance + if((vEta < fEtaMin) || (vEta > fEtaMax)) continue; + if((vEtaPrime < fEtaMin) || (vEtaPrime > fEtaMax)) continue; + + if(!fUseAllCharges) { + //Decide the specie + Double_t randomNumberSpecies = gRandom->Rndm(); + if((randomNumberSpecies >= 0.0)&&(randomNumberSpecies < fPionPercentage)) { + nGeneratedPions += 1; + vPt = fPtSpectraPions->GetRandom(); + vPhi = fAzimuthalAnglePions->GetRandom(); + fParticleMass = fPionMass; + isPion = kTRUE; + } + else if((randomNumberSpecies >= fPionPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage)) { + nGeneratedKaons += 1; + vPt = fPtSpectraKaons->GetRandom(); + vPhi = fAzimuthalAngleKaons->GetRandom(); + fParticleMass = fKaonMass; + isKaon = kTRUE; + } + else if((randomNumberSpecies >= fPionPercentage + fKaonPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage + fProtonPercentage)) { + nGeneratedProtons += 1; + vPt = fPtSpectraProtons->GetRandom(); + vPtPrime = vPt; + vPhi = fAzimuthalAngleProtons->GetRandom(); + fParticleMass = fProtonMass; + isProton = kTRUE; + } + } + else { + vPt = fPtSpectraAllCharges->GetRandom(); + vPhi = fAzimuthalAngleAllCharges->GetRandom(); + } + vPtPrime = vPt; + vPhiPrime = vPhi; + + vP[0] = vPt*TMath::Cos(vPhi); + vP[1] = vPt*TMath::Sin(vPhi); + vP[2] = vPt*TMath::SinH(vEta); + vE = TMath::Sqrt(TMath::Power(fParticleMass,2) + + TMath::Power(vP[0],2) + + TMath::Power(vP[1],2) + + TMath::Power(vP[2],2)); + + vY = 0.5*TMath::Log((vE + vP[2])/(vE - vP[2])); + + vPPrime[0] = vPtPrime*TMath::Cos(vPhiPrime); + vPPrime[1] = vPtPrime*TMath::Sin(vPhiPrime); + vPPrime[2] = vPtPrime*TMath::SinH(vEtaPrime); + vEPrime = TMath::Sqrt(TMath::Power(fParticleMass,2) + + TMath::Power(vPPrime[0],2) + + TMath::Power(vPPrime[1],2) + + TMath::Power(vPPrime[2],2)); + + vYPrime = 0.5*TMath::Log((vEPrime + vPPrime[2])/(vEPrime - vPPrime[2])); + + //pt coverage + if((vPt < fPtMin) || (vPt > fPtMax)) continue; + if((vPtPrime < fPtMin) || (vPtPrime > fPtMax)) continue; + + //acceptance filter + if(fUseAcceptanceParameterization) { + Double_t gRandomNumberForAcceptance = gRandom->Rndm(); + if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(vPt)) + continue; + + Double_t gRandomNumberForAcceptancePrime = gRandom->Rndm(); + if(gRandomNumberForAcceptancePrime > fAcceptanceParameterization->Eval(vPtPrime)) + continue; + } + + // fill charge vector (positive) + chargeVector[0]->push_back(vCharge); + chargeVector[1]->push_back(vY); + chargeVector[2]->push_back(vEta); + chargeVector[3]->push_back(vPhi); + chargeVector[4]->push_back(vP[0]); + chargeVector[5]->push_back(vP[1]); + chargeVector[6]->push_back(vP[2]); + chargeVector[7]->push_back(vPt); + chargeVector[8]->push_back(vE); + + if(fRunShuffling) { + chargeVectorShuffle[0]->push_back(vCharge); + chargeVectorShuffle[1]->push_back(vY); + chargeVectorShuffle[2]->push_back(vEta); + chargeVectorShuffle[3]->push_back(vPhi); + chargeVectorShuffle[4]->push_back(vP[0]); + chargeVectorShuffle[5]->push_back(vP[1]); + chargeVectorShuffle[6]->push_back(vP[2]); + chargeVectorShuffle[7]->push_back(vPt); + chargeVectorShuffle[8]->push_back(vE); + } + + // fill charge vector (negative) + chargeVector[0]->push_back(vChargePrime); + chargeVector[1]->push_back(vYPrime); + chargeVector[2]->push_back(vEtaPrime); + chargeVector[3]->push_back(vPhiPrime); + chargeVector[4]->push_back(vPPrime[0]); + chargeVector[5]->push_back(vPPrime[1]); + chargeVector[6]->push_back(vPPrime[2]); + chargeVector[7]->push_back(vPtPrime); + chargeVector[8]->push_back(vEPrime); + + if(fRunShuffling) { + chargeVectorShuffle[0]->push_back(vChargePrime); + chargeVectorShuffle[1]->push_back(vYPrime); + chargeVectorShuffle[2]->push_back(vEtaPrime); + chargeVectorShuffle[3]->push_back(vPhiPrime); + chargeVectorShuffle[4]->push_back(vPPrime[0]); + chargeVectorShuffle[5]->push_back(vPPrime[1]); + chargeVectorShuffle[6]->push_back(vPPrime[2]); + chargeVectorShuffle[7]->push_back(vPtPrime); + chargeVectorShuffle[8]->push_back(vEPrime); + } + + gNumberOfAcceptedParticles += 2; + }//loop over the dynamical correlations + }*/// usage of dynamical correlations + + if(fUseDebug) { + Printf("======================================================="); + Printf("Total: %d - Total positive: %d - Total negative: %d",nMultiplicity,nGeneratedPositive,nGeneratedNegative); + Printf("Accepted positive: %d - Accepted negative: %d",gNumberOfAcceptedPositiveParticles,gNumberOfAcceptedNegativeParticles); + Printf("Correlations: %d - Correlations positive: %d - Correlations negative: %d",nGeneratedPositiveDynamicalCorrelations+nGeneratedNegativeDynamicalCorrelations,nGeneratedPositiveDynamicalCorrelations,nGeneratedNegativeDynamicalCorrelations); + Printf("Number of accepted particles: %d",gNumberOfAcceptedParticles); + if(!fUseAllCharges) + Printf("Pions: %lf - Kaons: %lf - Protons: %lf",1.*nGeneratedPions/nMultiplicity,1.*nGeneratedKaons/nMultiplicity,1.*nGeneratedProtons/nMultiplicity); + //Printf("Calculating the balance function for %d particles",chargeVector[0]->size()); + } + + fHistEventStats->Fill(4); + fHistNumberOfAcceptedParticles->Fill(gNumberOfAcceptedParticles); + fHistReactionPlane->Fill(fReactionPlane); + + // Event mixing + if (fRunMixing) + { + // 1. First get an event pool corresponding in mult (cent) and + // zvertex to the current event. Once initialized, the pool + // should contain nMix (reduced) events. This routine does not + // pre-scan the chain. The first several events of every chain + // will be skipped until the needed pools are filled to the + // specified depth. If the pool categories are not too rare, this + // should not be a problem. If they are rare, you could lose` + // statistics. + + // 2. Collect the whole pool's content of tracks into one TObjArray + // (bgTracks), which is effectively a single background super-event. + + // 3. The reduced and bgTracks arrays must both be passed into + // FillCorrelations(). Also nMix should be passed in, so a weight + // of 1./nMix can be applied. + + AliEventPool* pool = fPoolMgr->GetEventPool(1., 0.,fReactionPlane); + + if (!pool){ + AliFatal(Form("No pool found for centrality = %f, zVtx = %f, psi = %f", 1., 0.,fReactionPlane)); + } + else{ + + //pool->SetDebug(1); + + if (pool->IsReady() || pool->NTracksInPool() > 50000 / 10 || pool->GetCurrentNEvents() >= 5){ + + + Int_t nMix = pool->GetCurrentNEvents(); + //cout << "nMix = " << nMix << " tracks in pool = " << pool->NTracksInPool() << ", tracks in this event = "<Fill(2); + //((TH2F*) fListOfHistos->FindObject("mixedDist"))->Fill(centrality, pool->NTracksInPool()); + //if (pool->IsReady()) + //((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(3); + + // Fill mixed-event histos here + for (Int_t jMix=0; jMixGetEvent(jMix); + fMixedBalance->CalculateBalance(fReactionPlane,tracksMain,tracksMixed,1,1.,0.); + } + } + + // Update the Event pool + pool->UpdatePool(tracksMain); + //pool->PrintInfo(); + + }//pool NULL check + }//run mixing + + //Calculate the balance function + fBalance->CalculateBalance(fReactionPlane,tracksMain,NULL,1,1.,0.); + //if(fRunMixing) + // fMixedBalance->CalculateBalance(fReactionPlane,tracksMixing,NULL,1,1.,0.); + + }//event loop +} + +//________________________________________________________________________ +void AliAnalysisTaskToyModel::FinishOutput() { + //Printf("END BF"); + + TFile *gOutput = TFile::Open("outputToyModel.root","recreate"); + TDirectoryFile *dir = new TDirectoryFile("PWGCFEbyE.outputBalanceFunctionPsiAnalysis","PWGCFEbyE.outputBalanceFunctionPsiAnalysis"); + + fList->SetName("listQA"); + fList->SetOwner(kTRUE); + dir->Add(fList); + //fList->Write("listQA",TObject::kSingleKey); + + if (!fBalance) { + AliError("ERROR: fBalance not available"); + return; + } + fListBF->SetName("listBF"); + fListBF->SetOwner(kTRUE); + dir->Add(fListBF); + //fListBF->Write("listBF",TObject::kSingleKey); + + if(fRunShuffling) { + if (!fShuffledBalance) { + AliError("ERROR: fShuffledBalance not available"); + return; + } + fListBFS->SetName("listBFShuffled"); + fListBFS->SetOwner(kTRUE); + dir->Add(fListBFS); + //fListBFS->Write("listBFShuffled",TObject::kSingleKey); + } + + if(fRunMixing) { + if (!fMixedBalance) { + AliError("ERROR: fMixedBalance not available"); + return; + } + fListBFM->SetName("listBFMixed"); + fListBFM->SetOwner(kTRUE); + dir->Add(fListBFM); + //fListBFM->Write("listBFMixed",TObject::kSingleKey); + } + + dir->Write(dir->GetName(),TObject::kSingleKey); + gOutput->Close(); +} + diff --git a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.h b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.h index 0d7054b423b..8e808a57b38 100755 --- a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.h +++ b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskToyModel.h @@ -1,267 +1,267 @@ -#ifndef ALIANALYSISTASKTOYMODEL_CXX -#define ALIANALYSISTASKTOYMODEL_CXX - -// Analysis task for a simple toy model, currently used for the -// balance function -// Authors: Panos Christakoglou@nikhef.nl - -class TList; -class TH1F; -class TH2F; -class TH3F; -class TF1; - -class AliBalancePsi; -class AliEventPoolManager; - -class AliAnalysisTaskToyModel : public TObject { - public: - AliAnalysisTaskToyModel(); - virtual ~AliAnalysisTaskToyModel(); - - virtual void Init(); - virtual void CreateOutputObjects(); - virtual void Run(Int_t nEvents); - virtual void FinishOutput(); - - void SetDebugFlag() {fUseDebug = kTRUE;} - - void SetAnalysisObject(AliBalancePsi *const analysis) { - fBalance = analysis; - } - void SetShufflingObject(AliBalancePsi *const analysisShuffled) { - fRunShuffling = kTRUE; - fShuffledBalance = analysisShuffled; - } - void SetMixingObject(AliBalancePsi *const analysisMixed) { - fRunMixing = kTRUE; - fMixedBalance = analysisMixed; - } - - //============Toy model: List of setters============// - void SetTotalMultiplicity(Double_t mean, Double_t sigma) { - fTotalMultiplicityMean = mean; - fTotalMultiplicitySigma = sigma;} - void SetNetCharge(Double_t mean, Double_t sigma) { - fNetChargeMean = mean; - fNetChargeSigma = sigma;} - - //Acceptance - void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax, - Double_t etamin, Double_t etamax){ - fPtMin = ptmin; fPtMax = ptmax; - fEtaMin = etamin; fEtaMax = etamax; - } - - //Acceptance filter - void SetAcceptanceParameterization(TF1 *parameterization) { - fUseAcceptanceParameterization = kTRUE; - fAcceptanceParameterization = parameterization;} - - //Acceptance - simulate detector effects/inefficiencies - void SimulateDetectorEffects() {fSimulateDetectorEffects = kTRUE;} - void SetNumberOfInefficientSectorsInPhi(Int_t numberOfInefficientSectors) { - fNumberOfInefficientSectors = numberOfInefficientSectors; - fInefficiencyFactorInPhi = 0.5;} - void SetInefficiencyFactor(Double_t gInefficiencyFactorInPhi) { - fInefficiencyFactorInPhi = gInefficiencyFactorInPhi;} - void SetNumberOfDeadSectorsInPhi(Int_t numberOfDeadSectors) { - fNumberOfDeadSectors = numberOfDeadSectors;} - void EnableEfficiencyDropNearEtaEdges() { - fEfficiencyDropNearEtaEdges = kTRUE;} - - //All charges - void SetSpectraTemperatureForAllCharges(Double_t temperature) { - fUseAllCharges = kTRUE; - fTemperatureAllCharges = temperature;} - void SetDirectedFlowForAllCharges(Double_t v1) { - fUseAllCharges = kTRUE; - fDirectedFlowAllCharges = v1;} - void SetEllipticFlowForAllCharges(Double_t v2) { - fUseAllCharges = kTRUE; - fEllipticFlowAllCharges = v2;} - void SetTriangularFlowForAllCharges(Double_t v3) { - fUseAllCharges = kTRUE; - fTriangularFlowAllCharges = v3;} - void SetQuandrangularFlowForAllCharges(Double_t v4) { - fUseAllCharges = kTRUE; - fQuandrangularFlowAllCharges = v4;} - void SetPentangularFlowForAllCharges(Double_t v5) { - fUseAllCharges = kTRUE; - fPentangularFlowAllCharges = v5;} - - //Pions - void SetPionPercentage(Double_t percentage) { - fPionPercentage = percentage;} - void SetSpectraTemperatureForPions(Double_t temperature) { - fTemperaturePions = temperature;} - void SetDirectedFlowForPions(Double_t v1) { - fDirectedFlowPions = v1;} - void SetEllipticFlowForPions(Double_t v2) { - fEllipticFlowPions = v2;} - void SetTriangularFlowForPions(Double_t v3) { - fTriangularFlowPions = v3;} - void SetQuandrangularFlowForPions(Double_t v4) { - fQuandrangularFlowPions = v4;} - void SetPentangularFlowForPions(Double_t v5) { - fPentangularFlowPions = v5;} - - //Kaons - void SetKaonPercentage(Double_t percentage) { - fKaonPercentage = percentage;} - void SetSpectraTemperatureForKaons(Double_t temperature) { - fTemperatureKaons = temperature;} - void SetDirectedFlowForKaons(Double_t v1) { - fDirectedFlowKaons = v1;} - void SetEllipticFlowForKaons(Double_t v2) { - fEllipticFlowKaons = v2;} - void SetTriangularFlowForKaons(Double_t v3) { - fTriangularFlowKaons = v3;} - void SetQuandrangularFlowForKaons(Double_t v4) { - fQuandrangularFlowKaons = v4;} - void SetPentangularFlowForKaons(Double_t v5) { - fPentangularFlowKaons = v5;} - - //Protons - void SetProtonPercentage(Double_t percentage) { - fProtonPercentage = percentage;} - void SetSpectraTemperatureForProtons(Double_t temperature) { - fTemperatureProtons = temperature;} - void SetDirectedFlowForProtons(Double_t v1) { - fDirectedFlowProtons = v1;} - void SetEllipticFlowForProtons(Double_t v2) { - fEllipticFlowProtons = v2;} - void SetTriangularFlowForProtons(Double_t v3) { - fTriangularFlowProtons = v3;} - void SetQuandrangularFlowForProtons(Double_t v4) { - fQuandrangularFlowProtons = v4;} - void SetPentangularFlowForProtons(Double_t v5) { - fPentangularFlowProtons = v5;} - - //Dynamical correlations - void SetCorrelationPercentage(Double_t percentage) { - fUseDynamicalCorrelations = kTRUE; - fDynamicalCorrelationsPercentage = percentage; - } - - //Jet-like structures - void SetUseJets() {fUseJets = kTRUE;} - //============Toy model: List of setters============// - - private: - void SetupEfficiencyMatrix(); - - Bool_t fUseDebug; //Debug flag - - AliBalancePsi *fBalance; //BF object - Bool_t fRunShuffling;//run shuffling or not - AliBalancePsi *fShuffledBalance; //BF object (shuffled) - Bool_t fRunMixing;//run mixing or not - AliBalancePsi *fMixedBalance; //BF object (mixed) - AliEventPoolManager* fPoolMgr; //! event pool manager - TList *fList; //fList object - TList *fListBF; //fList object - TList *fListBFS; //fList object (shuffling) - TList *fListBFM; //fList object (mixing) - - TH1F *fHistEventStats; //event stats - TH1F *fHistNumberOfAcceptedParticles; //number of accepted particles - TH1F *fHistReactionPlane; //reaction plane angle - TH1F *fHistEtaTotal; //pseudo-rapidity (full phase space) - TH1F *fHistEta; //pseudo-rapidity (acceptance) - TH2F *fHistEtaPhiPos; //eta-phi pos - TH2F *fHistEtaPhiNeg; //eta-phi neg - TH1F *fHistRapidity; //rapidity (acceptance) - TH1F *fHistRapidityPions; //rapidity (acceptance) - TH1F *fHistRapidityKaons; //rapidity (acceptance) - TH1F *fHistRapidityProtons; //rapidity (acceptance) - TH1F *fHistPhi; //phi (acceptance) - TH1F *fHistPhiPions; //phi (acceptance) - TH1F *fHistPhiKaons; //phi (acceptance) - TH1F *fHistPhiProtons; //phi (acceptance) - TH1F *fHistPt; //pt (acceptance) - TH1F *fHistPtPions; //pt (acceptance) - TH1F *fHistPtKaons; //pt (acceptance) - TH1F *fHistPtProtons; //pt (acceptance) - - //Toy model input - Double_t fTotalMultiplicityMean; //mean for the total multiplicity - Double_t fTotalMultiplicitySigma; //sigma for the total multiplicity - Double_t fNetChargeMean; //mean for the net charge - Double_t fNetChargeSigma; //sigma for the net charge - Double_t fPtMin; //pt min for acceptance - Double_t fPtMax; //pt max for acceptance - Double_t fEtaMin; //eta min for acceptance - Double_t fEtaMax; //eta max for acceptance - - //Acceptance parameterization - Bool_t fUseAcceptanceParameterization; //flag acceptance parameterization - TF1 *fAcceptanceParameterization; //acceptance parameterization - - //Simulate detector effects - Bool_t fSimulateDetectorEffects;//simulate detector effects in pT - Int_t fNumberOfInefficientSectors;//inefficient secotrs in phi - Double_t fInefficiencyFactorInPhi;//efficiency factor < 1 - Int_t fNumberOfDeadSectors;//number of dead sectors - Bool_t fEfficiencyDropNearEtaEdges;//efficiency drop in eta edges - TH3F *fEfficiencyMatrix; //efficiency matrix in eta-pt-phi - - //Kinematics - Bool_t fUseAllCharges; //use all charges - Double_t fParticleMass; //particle mass - TF1 *fPtSpectraAllCharges; //spectra for all charges - Double_t fTemperatureAllCharges; //temperature for pt spectra - Double_t fReactionPlane; //reaction plane angle - TF1 *fAzimuthalAngleAllCharges; //azimuthal angle - Double_t fDirectedFlowAllCharges; //directed flow value - Double_t fEllipticFlowAllCharges; //elliptic flow value - Double_t fTriangularFlowAllCharges; //triangular flow value - Double_t fQuandrangularFlowAllCharges; //quadrangular flow value - Double_t fPentangularFlowAllCharges; //pentangular flow value - - Double_t fPionPercentage; //percentage of pions - Double_t fPionMass; //pion mass - TF1 *fPtSpectraPions; //spectra for pions - Double_t fTemperaturePions; //temperature for pt spectra - TF1 *fAzimuthalAnglePions; //azimuthal angle for pions - Double_t fDirectedFlowPions; //directed flow value - Double_t fEllipticFlowPions; //elliptic flow value - Double_t fTriangularFlowPions; //triangular flow value - Double_t fQuandrangularFlowPions; //quadrangular flow value - Double_t fPentangularFlowPions; //pentangular flow value - - Double_t fKaonPercentage; //percentage of kaons - Double_t fKaonMass; //kaon mass - TF1 *fPtSpectraKaons; //spectra for kaons - Double_t fTemperatureKaons; //temperature for pt spectra - TF1 *fAzimuthalAngleKaons; //azimuthal angle for kaons - Double_t fDirectedFlowKaons; //directed flow value - Double_t fEllipticFlowKaons; //elliptic flow value - Double_t fTriangularFlowKaons; //triangular flow value - Double_t fQuandrangularFlowKaons; //quadrangular flow value - Double_t fPentangularFlowKaons; //pentangular flow value - - Double_t fProtonPercentage; //percentage of protons - Double_t fProtonMass; //proton mass - TF1 *fPtSpectraProtons; //spectra for protons - Double_t fTemperatureProtons; //temperature for pt spectra - TF1 *fAzimuthalAngleProtons; //azimuthal angle for protons - Double_t fDirectedFlowProtons; //directed flow value - Double_t fEllipticFlowProtons; //elliptic flow value - Double_t fTriangularFlowProtons; //triangular flow value - Double_t fQuandrangularFlowProtons; //quadrangular flow value - Double_t fPentangularFlowProtons; //pentangular flow value - - Bool_t fUseDynamicalCorrelations; //Usage of dynamical correlations - Double_t fDynamicalCorrelationsPercentage; //Percentage of correlations - - Bool_t fUseJets;//Usage of jet-like structures - TF1 *fPtAssoc;//pt of associated - - AliAnalysisTaskToyModel(const AliAnalysisTaskToyModel&); // not implemented - AliAnalysisTaskToyModel& operator=(const AliAnalysisTaskToyModel&); // not implemented - - ClassDef(AliAnalysisTaskToyModel, 1); // example of analysis -}; - -#endif +#ifndef ALIANALYSISTASKTOYMODEL_CXX +#define ALIANALYSISTASKTOYMODEL_CXX + +// Analysis task for a simple toy model, currently used for the +// balance function +// Authors: Panos Christakoglou@nikhef.nl + +class TList; +class TH1F; +class TH2F; +class TH3F; +class TF1; + +class AliBalancePsi; +class AliEventPoolManager; + +class AliAnalysisTaskToyModel : public TObject { + public: + AliAnalysisTaskToyModel(); + virtual ~AliAnalysisTaskToyModel(); + + virtual void Init(); + virtual void CreateOutputObjects(); + virtual void Run(Int_t nEvents); + virtual void FinishOutput(); + + void SetDebugFlag() {fUseDebug = kTRUE;} + + void SetAnalysisObject(AliBalancePsi *const analysis) { + fBalance = analysis; + } + void SetShufflingObject(AliBalancePsi *const analysisShuffled) { + fRunShuffling = kTRUE; + fShuffledBalance = analysisShuffled; + } + void SetMixingObject(AliBalancePsi *const analysisMixed) { + fRunMixing = kTRUE; + fMixedBalance = analysisMixed; + } + + //============Toy model: List of setters============// + void SetTotalMultiplicity(Double_t mean, Double_t sigma) { + fTotalMultiplicityMean = mean; + fTotalMultiplicitySigma = sigma;} + void SetNetCharge(Double_t mean, Double_t sigma) { + fNetChargeMean = mean; + fNetChargeSigma = sigma;} + + //Acceptance + void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax, + Double_t etamin, Double_t etamax){ + fPtMin = ptmin; fPtMax = ptmax; + fEtaMin = etamin; fEtaMax = etamax; + } + + //Acceptance filter + void SetAcceptanceParameterization(TF1 *parameterization) { + fUseAcceptanceParameterization = kTRUE; + fAcceptanceParameterization = parameterization;} + + //Acceptance - simulate detector effects/inefficiencies + void SimulateDetectorEffects() {fSimulateDetectorEffects = kTRUE;} + void SetNumberOfInefficientSectorsInPhi(Int_t numberOfInefficientSectors) { + fNumberOfInefficientSectors = numberOfInefficientSectors; + fInefficiencyFactorInPhi = 0.5;} + void SetInefficiencyFactor(Double_t gInefficiencyFactorInPhi) { + fInefficiencyFactorInPhi = gInefficiencyFactorInPhi;} + void SetNumberOfDeadSectorsInPhi(Int_t numberOfDeadSectors) { + fNumberOfDeadSectors = numberOfDeadSectors;} + void EnableEfficiencyDropNearEtaEdges() { + fEfficiencyDropNearEtaEdges = kTRUE;} + + //All charges + void SetSpectraTemperatureForAllCharges(Double_t temperature) { + fUseAllCharges = kTRUE; + fTemperatureAllCharges = temperature;} + void SetDirectedFlowForAllCharges(Double_t v1) { + fUseAllCharges = kTRUE; + fDirectedFlowAllCharges = v1;} + void SetEllipticFlowForAllCharges(Double_t v2) { + fUseAllCharges = kTRUE; + fEllipticFlowAllCharges = v2;} + void SetTriangularFlowForAllCharges(Double_t v3) { + fUseAllCharges = kTRUE; + fTriangularFlowAllCharges = v3;} + void SetQuandrangularFlowForAllCharges(Double_t v4) { + fUseAllCharges = kTRUE; + fQuandrangularFlowAllCharges = v4;} + void SetPentangularFlowForAllCharges(Double_t v5) { + fUseAllCharges = kTRUE; + fPentangularFlowAllCharges = v5;} + + //Pions + void SetPionPercentage(Double_t percentage) { + fPionPercentage = percentage;} + void SetSpectraTemperatureForPions(Double_t temperature) { + fTemperaturePions = temperature;} + void SetDirectedFlowForPions(Double_t v1) { + fDirectedFlowPions = v1;} + void SetEllipticFlowForPions(Double_t v2) { + fEllipticFlowPions = v2;} + void SetTriangularFlowForPions(Double_t v3) { + fTriangularFlowPions = v3;} + void SetQuandrangularFlowForPions(Double_t v4) { + fQuandrangularFlowPions = v4;} + void SetPentangularFlowForPions(Double_t v5) { + fPentangularFlowPions = v5;} + + //Kaons + void SetKaonPercentage(Double_t percentage) { + fKaonPercentage = percentage;} + void SetSpectraTemperatureForKaons(Double_t temperature) { + fTemperatureKaons = temperature;} + void SetDirectedFlowForKaons(Double_t v1) { + fDirectedFlowKaons = v1;} + void SetEllipticFlowForKaons(Double_t v2) { + fEllipticFlowKaons = v2;} + void SetTriangularFlowForKaons(Double_t v3) { + fTriangularFlowKaons = v3;} + void SetQuandrangularFlowForKaons(Double_t v4) { + fQuandrangularFlowKaons = v4;} + void SetPentangularFlowForKaons(Double_t v5) { + fPentangularFlowKaons = v5;} + + //Protons + void SetProtonPercentage(Double_t percentage) { + fProtonPercentage = percentage;} + void SetSpectraTemperatureForProtons(Double_t temperature) { + fTemperatureProtons = temperature;} + void SetDirectedFlowForProtons(Double_t v1) { + fDirectedFlowProtons = v1;} + void SetEllipticFlowForProtons(Double_t v2) { + fEllipticFlowProtons = v2;} + void SetTriangularFlowForProtons(Double_t v3) { + fTriangularFlowProtons = v3;} + void SetQuandrangularFlowForProtons(Double_t v4) { + fQuandrangularFlowProtons = v4;} + void SetPentangularFlowForProtons(Double_t v5) { + fPentangularFlowProtons = v5;} + + //Dynamical correlations + void SetCorrelationPercentage(Double_t percentage) { + fUseDynamicalCorrelations = kTRUE; + fDynamicalCorrelationsPercentage = percentage; + } + + //Jet-like structures + void SetUseJets() {fUseJets = kTRUE;} + //============Toy model: List of setters============// + + private: + void SetupEfficiencyMatrix(); + + Bool_t fUseDebug; //Debug flag + + AliBalancePsi *fBalance; //BF object + Bool_t fRunShuffling;//run shuffling or not + AliBalancePsi *fShuffledBalance; //BF object (shuffled) + Bool_t fRunMixing;//run mixing or not + AliBalancePsi *fMixedBalance; //BF object (mixed) + AliEventPoolManager* fPoolMgr; //! event pool manager + TList *fList; //fList object + TList *fListBF; //fList object + TList *fListBFS; //fList object (shuffling) + TList *fListBFM; //fList object (mixing) + + TH1F *fHistEventStats; //event stats + TH1F *fHistNumberOfAcceptedParticles; //number of accepted particles + TH1F *fHistReactionPlane; //reaction plane angle + TH1F *fHistEtaTotal; //pseudo-rapidity (full phase space) + TH1F *fHistEta; //pseudo-rapidity (acceptance) + TH2F *fHistEtaPhiPos; //eta-phi pos + TH2F *fHistEtaPhiNeg; //eta-phi neg + TH1F *fHistRapidity; //rapidity (acceptance) + TH1F *fHistRapidityPions; //rapidity (acceptance) + TH1F *fHistRapidityKaons; //rapidity (acceptance) + TH1F *fHistRapidityProtons; //rapidity (acceptance) + TH1F *fHistPhi; //phi (acceptance) + TH1F *fHistPhiPions; //phi (acceptance) + TH1F *fHistPhiKaons; //phi (acceptance) + TH1F *fHistPhiProtons; //phi (acceptance) + TH1F *fHistPt; //pt (acceptance) + TH1F *fHistPtPions; //pt (acceptance) + TH1F *fHistPtKaons; //pt (acceptance) + TH1F *fHistPtProtons; //pt (acceptance) + + //Toy model input + Double_t fTotalMultiplicityMean; //mean for the total multiplicity + Double_t fTotalMultiplicitySigma; //sigma for the total multiplicity + Double_t fNetChargeMean; //mean for the net charge + Double_t fNetChargeSigma; //sigma for the net charge + Double_t fPtMin; //pt min for acceptance + Double_t fPtMax; //pt max for acceptance + Double_t fEtaMin; //eta min for acceptance + Double_t fEtaMax; //eta max for acceptance + + //Acceptance parameterization + Bool_t fUseAcceptanceParameterization; //flag acceptance parameterization + TF1 *fAcceptanceParameterization; //acceptance parameterization + + //Simulate detector effects + Bool_t fSimulateDetectorEffects;//simulate detector effects in pT + Int_t fNumberOfInefficientSectors;//inefficient secotrs in phi + Double_t fInefficiencyFactorInPhi;//efficiency factor < 1 + Int_t fNumberOfDeadSectors;//number of dead sectors + Bool_t fEfficiencyDropNearEtaEdges;//efficiency drop in eta edges + TH3F *fEfficiencyMatrix; //efficiency matrix in eta-pt-phi + + //Kinematics + Bool_t fUseAllCharges; //use all charges + Double_t fParticleMass; //particle mass + TF1 *fPtSpectraAllCharges; //spectra for all charges + Double_t fTemperatureAllCharges; //temperature for pt spectra + Double_t fReactionPlane; //reaction plane angle + TF1 *fAzimuthalAngleAllCharges; //azimuthal angle + Double_t fDirectedFlowAllCharges; //directed flow value + Double_t fEllipticFlowAllCharges; //elliptic flow value + Double_t fTriangularFlowAllCharges; //triangular flow value + Double_t fQuandrangularFlowAllCharges; //quadrangular flow value + Double_t fPentangularFlowAllCharges; //pentangular flow value + + Double_t fPionPercentage; //percentage of pions + Double_t fPionMass; //pion mass + TF1 *fPtSpectraPions; //spectra for pions + Double_t fTemperaturePions; //temperature for pt spectra + TF1 *fAzimuthalAnglePions; //azimuthal angle for pions + Double_t fDirectedFlowPions; //directed flow value + Double_t fEllipticFlowPions; //elliptic flow value + Double_t fTriangularFlowPions; //triangular flow value + Double_t fQuandrangularFlowPions; //quadrangular flow value + Double_t fPentangularFlowPions; //pentangular flow value + + Double_t fKaonPercentage; //percentage of kaons + Double_t fKaonMass; //kaon mass + TF1 *fPtSpectraKaons; //spectra for kaons + Double_t fTemperatureKaons; //temperature for pt spectra + TF1 *fAzimuthalAngleKaons; //azimuthal angle for kaons + Double_t fDirectedFlowKaons; //directed flow value + Double_t fEllipticFlowKaons; //elliptic flow value + Double_t fTriangularFlowKaons; //triangular flow value + Double_t fQuandrangularFlowKaons; //quadrangular flow value + Double_t fPentangularFlowKaons; //pentangular flow value + + Double_t fProtonPercentage; //percentage of protons + Double_t fProtonMass; //proton mass + TF1 *fPtSpectraProtons; //spectra for protons + Double_t fTemperatureProtons; //temperature for pt spectra + TF1 *fAzimuthalAngleProtons; //azimuthal angle for protons + Double_t fDirectedFlowProtons; //directed flow value + Double_t fEllipticFlowProtons; //elliptic flow value + Double_t fTriangularFlowProtons; //triangular flow value + Double_t fQuandrangularFlowProtons; //quadrangular flow value + Double_t fPentangularFlowProtons; //pentangular flow value + + Bool_t fUseDynamicalCorrelations; //Usage of dynamical correlations + Double_t fDynamicalCorrelationsPercentage; //Percentage of correlations + + Bool_t fUseJets;//Usage of jet-like structures + TF1 *fPtAssoc;//pt of associated + + AliAnalysisTaskToyModel(const AliAnalysisTaskToyModel&); // not implemented + AliAnalysisTaskToyModel& operator=(const AliAnalysisTaskToyModel&); // not implemented + + ClassDef(AliAnalysisTaskToyModel, 1); // example of analysis +}; + +#endif diff --git a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.cxx b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.cxx index 261891ca976..603d085c73c 100755 --- a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.cxx +++ b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.cxx @@ -1,1114 +1,1114 @@ -#include -#include "TChain.h" -#include "TList.h" -#include "TCanvas.h" -#include "TLorentzVector.h" -#include "TGraphErrors.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TArrayF.h" -#include "TF1.h" -#include "TRandom.h" - -#include "AliLog.h" - -#include "AliAnalysisTaskSE.h" -#include "AliAnalysisManager.h" - -#include "AliESDVertex.h" -#include "AliESDEvent.h" -#include "AliESDInputHandler.h" -#include "AliAODEvent.h" -#include "AliAODTrack.h" -#include "AliAODInputHandler.h" -#include "AliGenEventHeader.h" -#include "AliGenHijingEventHeader.h" -#include "AliMCEventHandler.h" -#include "AliMCEvent.h" -#include "AliMixInputEventHandler.h" -#include "AliStack.h" - -#include "TH2D.h" -#include "AliTHn.h" - -#include "AliEventPoolManager.h" - -#include "AliAnalysisTaskTriggeredBF.h" -#include "AliBalanceTriggered.h" - - -// Analysis task for the TriggeredBF code -// Authors: Panos.Christakoglou@nikhef.nl, m.weber@cern.ch - -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// -// For the V0 part: -// --> AliAnalysisTaskExtractV0AOD (by david.chinellato@gmail.com) -// -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -using std::cout; -using std::endl; -using std::vector; - -ClassImp(AliAnalysisTaskTriggeredBF) - -//________________________________________________________________________ -AliAnalysisTaskTriggeredBF::AliAnalysisTaskTriggeredBF(const char *name) -: AliAnalysisTaskSE(name), - fBalance(0), - fRunShuffling(kFALSE), - fShuffledBalance(0), - fRunMixing(kFALSE), - fMixingTracks(50000), - fMixedBalance(0), - fPoolMgr(0), - fRunV0(kFALSE), - fPIDResponse(0), - fPIDCombined(0), - fList(0), - fListTriggeredBF(0), - fListTriggeredBFS(0), - fListTriggeredBFM(0), - fHistListPIDQA(0), - fHistListV0(0), - fHistEventStats(0), - fHistCentStats(0), - fHistTriggerStats(0), - fHistTrackStats(0), - fHistVx(0), - fHistVy(0), - fHistVz(0), - fHistClus(0), - fHistDCA(0), - fHistChi2(0), - fHistPt(0), - fHistEta(0), - fHistPhi(0), - fHistPhiBefore(0), - fHistPhiAfter(0), - fHistV0M(0), - fHistRefTracks(0), - fHistV0MultiplicityBeforeTrigSel(0), - fHistV0MultiplicityForTrigEvt(0), - fHistV0MultiplicityForSelEvt(0), - fHistV0MultiplicityForSelEvtNoTPCOnly(0), - fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0), - fHistMultiplicityBeforeTrigSel(0), - fHistMultiplicityForTrigEvt(0), - fHistMultiplicity(0), - fHistMultiplicityNoTPCOnly(0), - fHistMultiplicityNoTPCOnlyNoPileup(0), - fHistV0InvMassK0(0), - fHistV0InvMassLambda(0), - fHistV0InvMassAntiLambda(0), - fHistV0Armenteros(0), - fHistV0SelInvMassK0(0), - fHistV0SelInvMassLambda(0), - fHistV0SelInvMassAntiLambda(0), - fHistV0SelArmenteros(0), - fCentralityEstimator("V0M"), - fUseCentrality(kFALSE), - fCentralityPercentileMin(0.), - fCentralityPercentileMax(5.), - fImpactParameterMin(0.), - fImpactParameterMax(20.), - fUseMultiplicity(kFALSE), - fNumberOfAcceptedTracksMin(0), - fNumberOfAcceptedTracksMax(10000), - fHistNumberOfAcceptedTracks(0), - fUseOfflineTrigger(kFALSE), - fVxMax(0.3), - fVyMax(0.3), - fVzMax(10.), - nAODtrackCutBit(128), - fPtMin(0.3), - fPtMax(1.5), - fEtaMin(-0.8), - fEtaMax(-0.8), - fDCAxyCut(-1), - fDCAzCut(-1), - fTPCchi2Cut(-1), - fNClustersTPCCut(-1) -{ - // Constructor - // Define input and output slots here - // Input slot #0 works with a TChain - DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TH1 container - DefineOutput(1, TList::Class()); - DefineOutput(2, TList::Class()); - DefineOutput(3, TList::Class()); - DefineOutput(4, TList::Class()); - DefineOutput(5, TList::Class()); -} - -//________________________________________________________________________ -AliAnalysisTaskTriggeredBF::~AliAnalysisTaskTriggeredBF() { - - // Destructor - -} - -//________________________________________________________________________ -void AliAnalysisTaskTriggeredBF::UserCreateOutputObjects() { - // Create histograms - // Called once - - // global switch disabling the reference - // (to avoid "Replacing existing TH1" if several wagons are created in train) - Bool_t oldStatus = TH1::AddDirectoryStatus(); - TH1::AddDirectory(kFALSE); - - if(!fBalance) { - fBalance = new AliBalanceTriggered(); - fBalance->SetAnalysisLevel("AOD"); - } - if(fRunShuffling) { - if(!fShuffledBalance) { - fShuffledBalance = new AliBalanceTriggered(); - fShuffledBalance->SetAnalysisLevel("AOD"); - } - } - if(fRunMixing) { - if(!fMixedBalance) { - fMixedBalance = new AliBalanceTriggered(); - fMixedBalance->SetAnalysisLevel("AOD"); - } - } - - //QA list - fList = new TList(); - fList->SetName("listQA"); - fList->SetOwner(); - - //Balance Function list - fListTriggeredBF = new TList(); - fListTriggeredBF->SetName("listTriggeredBF"); - fListTriggeredBF->SetOwner(); - - if(fRunShuffling) { - fListTriggeredBFS = new TList(); - fListTriggeredBFS->SetName("listTriggeredBFShuffled"); - fListTriggeredBFS->SetOwner(); - } - if(fRunMixing) { - fListTriggeredBFM = new TList(); - fListTriggeredBFM->SetName("listTriggeredBFMixed"); - fListTriggeredBFM->SetOwner(); - } - - - //Event stats. - TString gCutName[4] = {"Total","Offline trigger", - "Vertex","Analyzed"}; - fHistEventStats = new TH1F("fHistEventStats", - "Event statistics;;N_{events}", - 4,0.5,4.5); - for(Int_t i = 1; i <= 4; i++) - fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); - fList->Add(fHistEventStats); - - TString gCentName[9] = {"V0M","FMD","TRK","TKL","CL0","CL1","V0MvsFMD","TKLvsV0M","ZEMvsZDC"}; - fHistCentStats = new TH2F("fHistCentStats", - "Centrality statistics;;Cent percentile", - 9,-0.5,8.5,220,-5,105); - for(Int_t i = 1; i <= 9; i++) - fHistCentStats->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data()); - fList->Add(fHistCentStats); - - fHistTriggerStats = new TH1F("fHistTriggerStats","Trigger statistics;TriggerBit;N_{events}",130,0,130); - fList->Add(fHistTriggerStats); - - fHistTrackStats = new TH1F("fHistTrackStats","Event statistics;TrackFilterBit;N_{events}",130,0,130); - fList->Add(fHistTrackStats); - - fHistNumberOfAcceptedTracks = new TH1F("fHistNumberOfAcceptedTracks",";N_{acc.};Entries",4001,-0.5,4000.5); - fList->Add(fHistNumberOfAcceptedTracks); - - // Vertex distributions - fHistVx = new TH1F("fHistVx","Primary vertex distribution - x coordinate;V_{x} (cm);Entries",100,-0.5,0.5); - fList->Add(fHistVx); - fHistVy = new TH1F("fHistVy","Primary vertex distribution - y coordinate;V_{y} (cm);Entries",100,-0.5,0.5); - fList->Add(fHistVy); - fHistVz = new TH1F("fHistVz","Primary vertex distribution - z coordinate;V_{z} (cm);Entries",100,-20.,20.); - fList->Add(fHistVz); - - // QA histograms - fHistClus = new TH2F("fHistClus","# Cluster (TPC vs. ITS)",10,0,10,200,0,200); - fList->Add(fHistClus); - fHistChi2 = new TH1F("fHistChi2","Chi2/NDF distribution",200,0,10); - fList->Add(fHistChi2); - fHistDCA = new TH2F("fHistDCA","DCA (xy vs. z)",400,-5,5,400,-5,5); - fList->Add(fHistDCA); - fHistPt = new TH1F("fHistPt","p_{T} distribution",200,0,10); - fList->Add(fHistPt); - fHistEta = new TH1F("fHistEta","#eta distribution",200,-2,2); - fList->Add(fHistEta); - fHistPhi = new TH1F("fHistPhi","#phi distribution",200,-20,380); - fList->Add(fHistPhi); - fHistPhiBefore = new TH1F("fHistPhiBefore","#phi distribution",200,0.,2*TMath::Pi()); - fList->Add(fHistPhiBefore); - fHistPhiAfter = new TH1F("fHistPhiAfter","#phi distribution",200,0.,2*TMath::Pi()); - fList->Add(fHistPhiAfter); - fHistV0M = new TH2F("fHistV0M","V0 Multiplicity C vs. A",500, 0, 20000, 500, 0, 20000); - fList->Add(fHistV0M); - TString gRefTrackName[6] = {"tracks","tracksPos","tracksNeg","tracksTPConly","clusITS0","clusITS1"}; - fHistRefTracks = new TH2F("fHistRefTracks","Nr of Ref tracks/event vs. ref track estimator;;Nr of tracks",6, 0, 6, 400, 0, 20000); - for(Int_t i = 1; i <= 6; i++) - fHistRefTracks->GetXaxis()->SetBinLabel(i,gRefTrackName[i-1].Data()); - fList->Add(fHistRefTracks); - - //------------------------------------------------ - // V0 Multiplicity Histograms - //------------------------------------------------ - if(fRunV0){ - fHistListV0 = new TList(); - fHistListV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner - - if(! fHistV0MultiplicityBeforeTrigSel) { - fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel", - "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events", - 25, 0, 25); - fHistListV0->Add(fHistV0MultiplicityBeforeTrigSel); - } - - if(! fHistV0MultiplicityForTrigEvt) { - fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt", - "V0s per event (for triggered evt);Nbr of V0s/Evt;Events", - 25, 0, 25); - fHistListV0->Add(fHistV0MultiplicityForTrigEvt); - } - - if(! fHistV0MultiplicityForSelEvt) { - fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt", - "V0s per event;Nbr of V0s/Evt;Events", - 25, 0, 25); - fHistListV0->Add(fHistV0MultiplicityForSelEvt); - } - - if(! fHistV0MultiplicityForSelEvtNoTPCOnly) { - fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly", - "V0s per event;Nbr of V0s/Evt;Events", - 25, 0, 25); - fHistListV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly); - } - - if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) { - fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup", - "V0s per event;Nbr of V0s/Evt;Events", - 25, 0, 25); - fHistListV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup); - } - - //------------------------------------------------ - // Track Multiplicity Histograms - //------------------------------------------------ - - if(! fHistMultiplicityBeforeTrigSel) { - fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel", - "Tracks per event;Nbr of Tracks;Events", - 200, 0, 200); - fHistListV0->Add(fHistMultiplicityBeforeTrigSel); - } - if(! fHistMultiplicityForTrigEvt) { - fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt", - "Tracks per event;Nbr of Tracks;Events", - 200, 0, 200); - fHistListV0->Add(fHistMultiplicityForTrigEvt); - } - if(! fHistMultiplicity) { - fHistMultiplicity = new TH1F("fHistMultiplicity", - "Tracks per event;Nbr of Tracks;Events", - 200, 0, 200); - fHistListV0->Add(fHistMultiplicity); - } - if(! fHistMultiplicityNoTPCOnly) { - fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly", - "Tracks per event;Nbr of Tracks;Events", - 200, 0, 200); - fHistListV0->Add(fHistMultiplicityNoTPCOnly); - } - if(! fHistMultiplicityNoTPCOnlyNoPileup) { - fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup", - "Tracks per event;Nbr of Tracks;Events", - 200, 0, 200); - fHistListV0->Add(fHistMultiplicityNoTPCOnlyNoPileup); - } - - //------------------------------------------------ - // V0 selection Histograms (before) - //------------------------------------------------ - if(!fHistV0InvMassK0) { - fHistV0InvMassK0 = new TH1F("fHistV0InvMassK0", - "Invariant Mass for K0;Mass (GeV/c^{2});Events", - 200,0,2); - fHistListV0->Add(fHistV0InvMassK0); - } - if(!fHistV0InvMassLambda) { - fHistV0InvMassLambda = new TH1F("fHistV0InvMassLambda", - "Invariant Mass for Lambda;Mass (GeV/c^{2});Events", - 200,0,2); - fHistListV0->Add(fHistV0InvMassLambda); - } - if(!fHistV0InvMassAntiLambda) { - fHistV0InvMassAntiLambda = new TH1F("fHistV0InvMassAntiLambda", - "Invariant Mass for AntiLambda;Mass (GeV/c^{2});Events", - 200,0,2); - fHistListV0->Add(fHistV0InvMassAntiLambda); - } - if(!fHistV0Armenteros) { - fHistV0Armenteros = new TH2F("fHistV0Armenteros", - "Armenteros plot;#alpha;q_{t}", - 200,-1,1,200,0,0.5); - fHistListV0->Add(fHistV0Armenteros); - } - - //------------------------------------------------ - // V0 selection Histograms (after) - //------------------------------------------------ - if(!fHistV0SelInvMassK0) { - fHistV0SelInvMassK0 = new TH1F("fHistV0SelInvMassK0", - "Invariant Mass for K0;Mass (GeV/c^{2});Events", - 200,0,2); - fHistListV0->Add(fHistV0SelInvMassK0); - } - if(!fHistV0SelInvMassLambda) { - fHistV0SelInvMassLambda = new TH1F("fHistV0SelInvMassLambda", - "Invariant Mass for Lambda;Mass (GeV/c^{2});Events", - 200,0,2); - fHistListV0->Add(fHistV0SelInvMassLambda); - } - if(!fHistV0SelInvMassAntiLambda) { - fHistV0SelInvMassAntiLambda = new TH1F("fHistV0SelInvMassAntiLambda", - "Invariant Mass for AntiLambda;Mass (GeV/c^{2});Events", - 200,0,2); - fHistListV0->Add(fHistV0SelInvMassAntiLambda); - } - if(!fHistV0SelArmenteros) { - fHistV0SelArmenteros = new TH2F("fHistV0SelArmenteros", - "Armenteros plot;#alpha;q_{t}", - 200,-1,1,200,0,0.5); - fHistListV0->Add(fHistV0SelArmenteros); - } - }//V0 - - // Balance function histograms - // Initialize histograms if not done yet - if(!fBalance->GetHistNp()){ - AliWarning("Histograms not yet initialized! --> Will be done now"); - AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); - fBalance->InitHistograms(); - } - - if(fRunShuffling) { - if(!fShuffledBalance->GetHistNp()) { - AliWarning("Histograms (shuffling) not yet initialized! --> Will be done now"); - AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); - fShuffledBalance->InitHistograms(); - } - } - - if(fRunMixing) { - if(!fMixedBalance->GetHistNp()) { - AliWarning("Histograms (mixing) not yet initialized! --> Will be done now"); - AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); - fMixedBalance->InitHistograms(); - } - } - - fListTriggeredBF->Add(fBalance->GetHistNp()); - fListTriggeredBF->Add(fBalance->GetHistNn()); - fListTriggeredBF->Add(fBalance->GetHistNpn()); - fListTriggeredBF->Add(fBalance->GetHistNnn()); - fListTriggeredBF->Add(fBalance->GetHistNpp()); - fListTriggeredBF->Add(fBalance->GetHistNnp()); - - if(fRunShuffling) { - fListTriggeredBFS->Add(fShuffledBalance->GetHistNp()); - fListTriggeredBFS->Add(fShuffledBalance->GetHistNn()); - fListTriggeredBFS->Add(fShuffledBalance->GetHistNpn()); - fListTriggeredBFS->Add(fShuffledBalance->GetHistNnn()); - fListTriggeredBFS->Add(fShuffledBalance->GetHistNpp()); - fListTriggeredBFS->Add(fShuffledBalance->GetHistNnp()); - } - - if(fRunMixing) { - fListTriggeredBFM->Add(fMixedBalance->GetHistNp()); - fListTriggeredBFM->Add(fMixedBalance->GetHistNn()); - fListTriggeredBFM->Add(fMixedBalance->GetHistNpn()); - fListTriggeredBFM->Add(fMixedBalance->GetHistNnn()); - fListTriggeredBFM->Add(fMixedBalance->GetHistNpp()); - fListTriggeredBFM->Add(fMixedBalance->GetHistNnp()); - } - - // PID Response task active? - if(fRunV0) { - fPIDResponse = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->GetPIDResponse(); - if (!fPIDResponse) AliFatal("This Task needs the PID response attached to the inputHandler"); - } - - // Event Mixing - Int_t trackDepth = fMixingTracks; - Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager - - Double_t centralityBins[] = {0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,15.,20.,25.,30.,35.,40.,45.,50.,55.,60.,65.,70.,75.,80.,90.,100.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! - Double_t* centbins = centralityBins; - Int_t nCentralityBins = sizeof(centralityBins) / sizeof(Double_t) - 1; - - // bins for second buffer are shifted by 100 cm - Double_t vertexBins[] = {-10., -7., -5., -3., -1., 1., 3., 5., 7., 10.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! - Double_t* vtxbins = vertexBins; - Int_t nVertexBins = sizeof(vertexBins) / sizeof(Double_t) - 1; - - fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centbins, nVertexBins, vtxbins); - - - // Post output data. - PostData(1, fList); - PostData(2, fListTriggeredBF); - if(fRunShuffling) PostData(3, fListTriggeredBFS); - if(fRunMixing) PostData(4, fListTriggeredBFM); - if(fRunV0) PostData(5,fHistListV0); - - TH1::AddDirectory(oldStatus); - -} - -//________________________________________________________________________ -void AliAnalysisTaskTriggeredBF::UserExec(Option_t *) { - // Main loop - // Called for each event - - TString gAnalysisLevel = fBalance->GetAnalysisLevel(); - Float_t fCentrality = -1.; - - // ------------------------------------------------------------- - // AOD analysis (vertex and track cuts also here!!!!) - if(gAnalysisLevel == "AOD") { - AliVEvent* eventMain = dynamic_cast(InputEvent()); - if(!eventMain) { - AliError("eventMain not available"); - return; - } - - // check event cuts and fill event histograms - if((fCentrality = IsEventAccepted(eventMain)) < 0){ - return; - } - - // get the accepted tracks in main event - TObjArray *tracksMain = NULL; - if(fRunV0) tracksMain = GetAcceptedV0s(eventMain); - else tracksMain = GetAcceptedTracks(eventMain); - - // store charges of all accepted tracks, shuffle and reassign (two extra loops!) - TObjArray* tracksShuffled = NULL; - if(fRunShuffling){ - tracksShuffled = GetShuffledTracks(tracksMain); - } - - // Event mixing --> UPDATE POOL IS MISSING!!! - if (fRunMixing) - { - // 1. First get an event pool corresponding in mult (cent) and - // zvertex to the current event. Once initialized, the pool - // should contain nMix (reduced) events. This routine does not - // pre-scan the chain. The first several events of every chain - // will be skipped until the needed pools are filled to the - // specified depth. If the pool categories are not too rare, this - // should not be a problem. If they are rare, you could lose` - // statistics. - - // 2. Collect the whole pool's content of tracks into one TObjArray - // (bgTracks), which is effectively a single background super-event. - - // 3. The reduced and bgTracks arrays must both be passed into - // FillCorrelations(). Also nMix should be passed in, so a weight - // of 1./nMix can be applied. - - AliEventPool* pool = fPoolMgr->GetEventPool(fCentrality, eventMain->GetPrimaryVertex()->GetZ()); - - if (!pool){ - AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality, eventMain->GetPrimaryVertex()->GetZ())); - } - else{ - - //pool->SetDebug(1); - - if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 10 || pool->GetCurrentNEvents() >= 5){ - - - Int_t nMix = pool->GetCurrentNEvents(); - //cout << "nMix = " << nMix << " tracks in pool = " << pool->NTracksInPool() << endl; - - //((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(2); - //((TH2F*) fListOfHistos->FindObject("mixedDist"))->Fill(centrality, pool->NTracksInPool()); - //if (pool->IsReady()) - //((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(3); - - // Fill mixed-event histos here - for (Int_t jMix=0; jMixGetEvent(jMix); - fMixedBalance->FillBalance(fCentrality,tracksMain,tracksMixed); - } - } - - // Update the Event pool - pool->UpdatePool(tracksMain); - //pool->PrintInfo(); - - }//pool NULL check - }//run mixing - - // calculate balance function - fBalance->FillBalance(fCentrality,tracksMain,NULL); - - // calculate shuffled balance function - if(fRunShuffling && tracksShuffled != NULL) { - fShuffledBalance->FillBalance(fCentrality,tracksShuffled,NULL); - } - - }//AOD analysis - else{ - AliError("Triggered Balance Function analysis only for AODs!"); - } -} - -//________________________________________________________________________ -Float_t AliAnalysisTaskTriggeredBF::IsEventAccepted(AliVEvent *event){ - // Checks the Event cuts - // Fills Event statistics histograms - - // event selection done in AliAnalysisTaskSE::Exec() --> this is not used - fHistEventStats->Fill(1); //all events - - Bool_t isSelectedMain = kTRUE; - Float_t fCentrality = -1.; - Int_t nV0s = event->GetNumberOfV0s(); - TString gAnalysisLevel = fBalance->GetAnalysisLevel(); - - if(fUseOfflineTrigger) - isSelectedMain = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected(); - - //V0 QA histograms (before trigger selection) - if(fRunV0){ - fHistMultiplicityBeforeTrigSel->Fill ( -1 ); - fHistV0MultiplicityBeforeTrigSel->Fill ( nV0s ); - } - - if(isSelectedMain) { - fHistEventStats->Fill(2); //triggered events - - //Centrality stuff - if(fUseCentrality) { - if(gAnalysisLevel == "AOD") { //centrality in AOD header - AliAODHeader *header = (AliAODHeader*) event->GetHeader(); - fCentrality = header->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data()); - - // QA for centrality estimators - fHistCentStats->Fill(0.,header->GetCentralityP()->GetCentralityPercentile("V0M")); - fHistCentStats->Fill(1.,header->GetCentralityP()->GetCentralityPercentile("FMD")); - fHistCentStats->Fill(2.,header->GetCentralityP()->GetCentralityPercentile("TRK")); - fHistCentStats->Fill(3.,header->GetCentralityP()->GetCentralityPercentile("TKL")); - fHistCentStats->Fill(4.,header->GetCentralityP()->GetCentralityPercentile("CL0")); - fHistCentStats->Fill(5.,header->GetCentralityP()->GetCentralityPercentile("CL1")); - fHistCentStats->Fill(6.,header->GetCentralityP()->GetCentralityPercentile("V0MvsFMD")); - fHistCentStats->Fill(7.,header->GetCentralityP()->GetCentralityPercentile("TKLvsV0M")); - fHistCentStats->Fill(8.,header->GetCentralityP()->GetCentralityPercentile("ZEMvsZDC")); - - // centrality QA (V0M) - fHistV0M->Fill(event->GetVZEROData()->GetMTotV0A(), event->GetVZEROData()->GetMTotV0C()); - - // centrality QA (reference tracks) - fHistRefTracks->Fill(0.,header->GetRefMultiplicity()); - fHistRefTracks->Fill(1.,header->GetRefMultiplicityPos()); - fHistRefTracks->Fill(2.,header->GetRefMultiplicityNeg()); - fHistRefTracks->Fill(3.,header->GetTPConlyRefMultiplicity()); - fHistRefTracks->Fill(4.,header->GetNumberOfITSClusters(0)); - fHistRefTracks->Fill(5.,header->GetNumberOfITSClusters(1)); - fHistRefTracks->Fill(6.,header->GetNumberOfITSClusters(2)); - fHistRefTracks->Fill(7.,header->GetNumberOfITSClusters(3)); - fHistRefTracks->Fill(8.,header->GetNumberOfITSClusters(4)); - - //V0 QA histograms (after trigger selection) - if(fRunV0){ - fHistMultiplicityForTrigEvt->Fill ( fCentrality ); - fHistV0MultiplicityForTrigEvt->Fill ( nV0s ); - } - } - } - - - const AliVVertex *vertex = event->GetPrimaryVertex(); - - if(vertex) { - Double32_t fCov[6]; - vertex->GetCovarianceMatrix(fCov); - if(vertex->GetNContributors() > 0) { - if(fCov[5] != 0) { - fHistEventStats->Fill(3); //events with a proper vertex - if(TMath::Abs(vertex->GetX()) < fVxMax) { - if(TMath::Abs(vertex->GetY()) < fVyMax) { - if(TMath::Abs(vertex->GetZ()) < fVzMax) { - fHistEventStats->Fill(4); //analyzed events - fHistVx->Fill(vertex->GetX()); - fHistVy->Fill(vertex->GetY()); - fHistVz->Fill(vertex->GetZ()); - - - - //V0 QA histograms (vertex Z check) - if(fRunV0){ - fHistV0MultiplicityForSelEvt ->Fill( nV0s ); - fHistMultiplicity->Fill(fCentrality); - - //V0 QA histograms (Only look at events with well-established PV) - const AliAODVertex *lPrimarySPDVtx = ((AliAODEvent*)event)->GetPrimaryVertexSPD(); - if(lPrimarySPDVtx){ - fHistMultiplicityNoTPCOnly->Fill ( fCentrality ); - fHistV0MultiplicityForSelEvtNoTPCOnly->Fill ( nV0s ); - - //V0 QA histograms (Pileup Rejection) - // FIXME : quality selection regarding pile-up rejection - fHistMultiplicityNoTPCOnlyNoPileup->Fill(fCentrality); - fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( nV0s ); - - } - else{ - return -1; - } - } - - - // take only events inside centrality class - if((fCentrality > fCentralityPercentileMin) && (fCentrality < fCentralityPercentileMax)){ - return fCentrality; - }//centrality class - }//Vz cut - }//Vy cut - }//Vx cut - }//proper vertex resolution - }//proper number of contributors - }//vertex object valid - }//triggered event - - // in all other cases return -1 (event not accepted) - return -1; -} - -//________________________________________________________________________ -TObjArray* AliAnalysisTaskTriggeredBF::GetAcceptedTracks(AliVEvent *event){ - // Returns TObjArray with tracks after all track cuts (only for AOD!) - // Fills QA histograms - - //output TObjArray holding all good tracks - TObjArray* tracksAccepted = new TObjArray; - tracksAccepted->SetOwner(kTRUE); - - Short_t vCharge = 0; - Double_t vEta = 0.; - Double_t vPhi = 0.; - Double_t vPt = 0.; - - // Loop over tracks in event - for (Int_t iTracks = 0; iTracks < event->GetNumberOfTracks(); iTracks++) { - AliAODTrack* aodTrack = dynamic_cast(event->GetTrack(iTracks)); - if (!aodTrack) { - AliError(Form("Could not receive track %d", iTracks)); - continue; - } - - // AOD track cuts - - // For ESD Filter Information: ANALYSIS/macros/AddTaskESDfilter.C - // take only TPC only tracks - fHistTrackStats->Fill(aodTrack->GetFilterMap()); - if(!aodTrack->TestFilterBit(nAODtrackCutBit)) continue; - - vCharge = aodTrack->Charge(); - vEta = aodTrack->Eta(); - vPhi = aodTrack->Phi() * TMath::RadToDeg(); - vPt = aodTrack->Pt(); - - Float_t dcaXY = aodTrack->DCA(); // this is the DCA from global track (not exactly what is cut on) - Float_t dcaZ = aodTrack->ZAtDCA(); // this is the DCA from global track (not exactly what is cut on) - - - // Kinematics cuts from ESD track cuts - if( vPt < fPtMin || vPt > fPtMax) continue; - if( vEta < fEtaMin || vEta > fEtaMax) continue; - - // Extra DCA cuts (for systematic studies [!= -1]) - if( fDCAxyCut != -1 && fDCAzCut != -1){ - if(TMath::Sqrt((dcaXY*dcaXY)/(fDCAxyCut*fDCAxyCut)+(dcaZ*dcaZ)/(fDCAzCut*fDCAzCut)) > 1 ){ - continue; // 2D cut - } - } - - // Extra TPC cuts (for systematic studies [!= -1]) - if( fTPCchi2Cut != -1 && aodTrack->Chi2perNDF() > fTPCchi2Cut){ - continue; - } - if( fNClustersTPCCut != -1 && aodTrack->GetTPCNcls() < fNClustersTPCCut){ - continue; - } - - // fill QA histograms - fHistClus->Fill(aodTrack->GetITSNcls(),aodTrack->GetTPCNcls()); - fHistDCA->Fill(dcaZ,dcaXY); - fHistChi2->Fill(aodTrack->Chi2perNDF()); - fHistPt->Fill(vPt); - fHistEta->Fill(vEta); - fHistPhi->Fill(vPhi); - - // add the track to the TObjArray - tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge,1.)); - } - - return tracksAccepted; -} - -//________________________________________________________________________ -TObjArray* AliAnalysisTaskTriggeredBF::GetAcceptedV0s(AliVEvent *event){ - // Returns TObjArray with tracks after all track cuts (only for AOD!) - // Fills QA histograms - - //output TObjArray holding all good tracks - TObjArray* tracksAccepted = new TObjArray; - tracksAccepted->SetOwner(kTRUE); - - Short_t vCharge = 0; - Double_t vEta = 0.; - Double_t vPhi = 0.; - Double_t vPt = 0.; - - //------------------------------------------------ - // MAIN LAMBDA LOOP STARTS HERE (basically a copy of AliAnalysisTaskExtractV0AOD) - //------------------------------------------------ - - // parameters (for the time being hard coded here) --> from David for EbyE Lambdas - Bool_t fkUseOnTheFly = kFALSE; - Double_t fRapidityBoundary = 0.5; - Double_t fCutDaughterEta = 0.8; - Double_t fCutV0Radius = 0.9; - Double_t fCutDCANegToPV = 0.1; - Double_t fCutDCAPosToPV = 0.1; - Double_t fCutDCAV0Daughters = 1.0; - Double_t fCutV0CosPA = 0.9995; - Double_t fMassLambda = 1.115683; - Double_t fCutMassLambda = 0.007; - Double_t fCutProperLifetime = 3*7.9; - Double_t fCutLeastNumberOfCrossedRows = 70; - Double_t fCutLeastNumberOfCrossedRowsOverFindable = 0.8; - Double_t fCutTPCPIDNSigmasProton = 3.0; - Double_t fCutTPCPIDNSigmasPion = 5.0; - - - //Variable definition - Int_t lOnFlyStatus = 0;// nv0sOn = 0, nv0sOff = 0; - Double_t lChi2V0 = 0; - Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0; - Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0; - Double_t lV0CosineOfPointingAngle = 0; - Double_t lV0Radius = 0, lPt = 0; - Double_t lEta = 0, lPhi = 0; - Double_t lRap = 0, lRapK0Short = 0, lRapLambda = 0; - Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0; - Double_t lAlphaV0 = 0, lPtArmV0 = 0; - - Double_t fMinV0Pt = 0; - Double_t fMaxV0Pt = 100; - - - - // some event observables - Int_t nv0s = event->GetNumberOfV0s(); - Double_t tPrimaryVtxPosition[3]; - const AliVVertex *primaryVtx = event->GetPrimaryVertex(); - tPrimaryVtxPosition[0] = primaryVtx->GetX(); - tPrimaryVtxPosition[1] = primaryVtx->GetY(); - tPrimaryVtxPosition[2] = primaryVtx->GetZ(); - - - //loop over V0s - for (Int_t iV0 = 0; iV0 < nv0s; iV0++) - {// This is the begining of the V0 loop - AliAODv0 *v0 = ((AliAODEvent*)event)->GetV0(iV0); - if (!v0) continue; - - //Obsolete at AOD level... - //---> Fix On-the-Fly candidates, count how many swapped - //if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){ - // fHistSwappedV0Counter -> Fill( 1 ); - //}else{ - // fHistSwappedV0Counter -> Fill( 0 ); - //} - //if ( fkUseOnTheFly ) CheckChargeV0(v0); - - Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0); - Double_t tV0mom[3]; - v0->GetPxPyPz( tV0mom ); - Double_t lV0TotalMomentum = TMath::Sqrt( - tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] ); - - lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]); - lPt = v0->Pt(); - lEta = v0->Eta(); - lPhi = v0->Phi()*TMath::RadToDeg(); - lRapK0Short = v0->RapK0Short(); - lRapLambda = v0->RapLambda(); - lRap = lRapLambda;//v0->Y(); //FIXME!!! - if ((lPtGetPosID()); - //UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetPosID()); - - Double_t lMomPos[3]; //v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]); - Double_t lMomNeg[3]; //v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]); - lMomPos[0] = v0->MomPosX(); - lMomPos[1] = v0->MomPosY(); - lMomPos[2] = v0->MomPosZ(); - lMomNeg[0] = v0->MomNegX(); - lMomNeg[1] = v0->MomNegY(); - lMomNeg[2] = v0->MomNegZ(); - - AliAODTrack *pTrack=(AliAODTrack *)v0->GetDaughter(0); //0->Positive Daughter - AliAODTrack *nTrack=(AliAODTrack *)v0->GetDaughter(1); //1->Negative Daughter - if (!pTrack || !nTrack) { - AliError("ERROR: Could not retreive one of the daughter track"); - continue; - } - - //Daughter Eta for Eta selection, afterwards - Double_t lNegEta = nTrack->Eta(); - Double_t lPosEta = pTrack->Eta(); - - // Filter like-sign V0 (next: add counter and distribution) - if ( pTrack->Charge() == nTrack->Charge()){ - continue; - } - - //Quick test this far! - - - //________________________________________________________________________ - // Track quality cuts - Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1); - Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1); - Float_t lLeastNbrCrossedRows = (lPosTrackCrossedRows>lNegTrackCrossedRows) ? lNegTrackCrossedRows : lPosTrackCrossedRows; - - // TPC refit condition (done during reconstruction for Offline but not for On-the-fly) - if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue; - if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue; - - if ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) ) continue; - - //Findable clusters > 0 condition - if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue; - - //Compute ratio Crossed Rows / Findable clusters - //Note: above test avoids division by zero! - Float_t lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF())); - Float_t lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF())); - Float_t lLeastNbrCrossedRowsOverFindable = (lPosTrackCrossedRowsOverFindable>lNegTrackCrossedRowsOverFindable) ? lNegTrackCrossedRowsOverFindable : lPosTrackCrossedRowsOverFindable; - - //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here - if ( lLeastNbrCrossedRowsOverFindable < 0.8) continue; - - //End track Quality Cuts - //________________________________________________________________________ - - - lDcaPosToPrimVertex = v0->DcaPosToPrimVertex(); - lDcaNegToPrimVertex = v0->DcaNegToPrimVertex(); - - lOnFlyStatus = v0->GetOnFlyStatus(); - lChi2V0 = v0->Chi2V0(); - lDcaV0Daughters = v0->DcaV0Daughters(); - lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex(); - lV0CosineOfPointingAngle = v0->CosPointingAngle(tPrimaryVtxPosition); - - // Distance over total momentum - Double_t lDistOverTotMom = TMath::Sqrt( - TMath::Power( tDecayVertexV0[0] - tPrimaryVtxPosition[0] , 2) + - TMath::Power( tDecayVertexV0[1] - tPrimaryVtxPosition[1] , 2) + - TMath::Power( tDecayVertexV0[2] - tPrimaryVtxPosition[2] , 2) - ); - lDistOverTotMom /= (lV0TotalMomentum+1e-10); //avoid division by zero, to be sure - - - // Getting invariant mass infos directly from ESD - lInvMassK0s = v0->MassK0Short(); - lInvMassLambda = v0->MassLambda(); - lInvMassAntiLambda = v0->MassAntiLambda(); - lAlphaV0 = v0->AlphaV0(); - lPtArmV0 = v0->PtArmV0(); - - //Official means of acquiring N-sigmas - Double_t lNSigmasPosProton = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kProton ); - Double_t lNSigmasPosPion = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kPion ); - Double_t lNSigmasNegProton = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kProton ); - Double_t lNSigmasNegPion = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion ); - - //V0 QA histograms (before V0 selection) - fHistV0InvMassK0->Fill(lInvMassK0s); - fHistV0InvMassLambda->Fill(lInvMassLambda); - fHistV0InvMassAntiLambda->Fill(lInvMassAntiLambda); - fHistV0Armenteros->Fill(lAlphaV0,lPtArmV0); - - - //First Selection: Reject OnFly - if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){ - - - //Second Selection: rough 20-sigma band, parametric. - //K0Short: Enough to parametrize peak broadening with linear function. - Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*lPt; - Double_t lLowerLimitK0Short = (4.30006e-01) - (1.10029e-02)*lPt; - - //Lambda: Linear (for higher pt) plus exponential (for low-pt broadening) - //[0]+[1]*x+[2]*TMath::Exp(-[3]*x) - Double_t lUpperLimitLambda = (1.13688e+00) + (5.27838e-03)*lPt + (8.42220e-02)*TMath::Exp(-(3.80595e+00)*lPt); - Double_t lLowerLimitLambda = (1.09501e+00) - (5.23272e-03)*lPt - (7.52690e-02)*TMath::Exp(-(3.46339e+00)*lPt); - - //Do Selection - if( (lInvMassLambda < lUpperLimitLambda && lInvMassLambda > lLowerLimitLambda ) || - (lInvMassAntiLambda < lUpperLimitLambda && lInvMassAntiLambda > lLowerLimitLambda ) || - (lInvMassK0s < lUpperLimitK0Short && lInvMassK0s > lLowerLimitK0Short ) ){ - - - // //Pre-selection in case this is AA... - // //if( fkIsNuclear == kFALSE ) fTree->Fill(); - // //if( fkIsNuclear == kTRUE){ - // //If this is a nuclear collision___________________ - // // ... pre-filter with TPC, daughter eta selection - - - if( (lInvMassLambda < lUpperLimitLambda && lInvMassLambda > lLowerLimitLambda - && TMath::Abs(lNSigmasPosProton) < 6.0 && TMath::Abs(lNSigmasNegPion) < 6.0 ) || - (lInvMassAntiLambda < lUpperLimitLambda && lInvMassAntiLambda > lLowerLimitLambda - && TMath::Abs(lNSigmasNegProton) < 6.0 && TMath::Abs(lNSigmasPosPion) < 6.0 ) || - (lInvMassK0s < lUpperLimitK0Short && lInvMassK0s > lLowerLimitK0Short - && TMath::Abs(lNSigmasNegPion) < 6.0 && TMath::Abs(lNSigmasPosPion) < 6.0 ) ){ - - //insane test - if ( TMath::Abs(lNegEta)<0.8 && TMath::Abs(lPosEta)<0.8 ){ - - // start the fine selection (usually done in post processing, but we don't have time to waste) --> Lambdas! - if( - TMath::Abs(lRap)= fCutV0Radius && - lDcaNegToPrimVertex >= fCutDCANegToPV && - lDcaPosToPrimVertex >= fCutDCAPosToPV && - lDcaV0Daughters <= fCutDCAV0Daughters && - lV0CosineOfPointingAngle >= fCutV0CosPA && - fMassLambda*lDistOverTotMom <= fCutProperLifetime && - lLeastNbrCrossedRows >= fCutLeastNumberOfCrossedRows && - lLeastNbrCrossedRowsOverFindable >= fCutLeastNumberOfCrossedRowsOverFindable && - lPtArmV0 * 5 < TMath::Abs(lAlphaV0) && - ((TMath::Abs(lNSigmasNegPion) <= fCutTPCPIDNSigmasPion && - TMath::Abs(lNSigmasPosProton) <= fCutTPCPIDNSigmasProton) || - (TMath::Abs(lNSigmasPosPion) <= fCutTPCPIDNSigmasPion && - TMath::Abs(lNSigmasNegProton) <= fCutTPCPIDNSigmasProton)) - ) - { - - //V0 QA histograms (after V0 selection) - fHistV0SelInvMassK0->Fill(lInvMassK0s); - fHistV0SelInvMassLambda->Fill(lInvMassLambda); - fHistV0SelInvMassAntiLambda->Fill(lInvMassAntiLambda); - - // this means a V0 candidate is found - if(TMath::Abs(lInvMassLambda-fMassLambda) < fCutMassLambda || - TMath::Abs(lInvMassAntiLambda-fMassLambda) < fCutMassLambda){ - - fHistV0SelArmenteros->Fill(lAlphaV0,lPtArmV0); - - vEta = lEta; - vPhi = lPhi; - vPt = lPt; - if(lAlphaV0 > 0) vCharge = 1; - if(lAlphaV0 < 0) vCharge = -1; - - // fill QA histograms - fHistPt->Fill(vPt); - fHistEta->Fill(vEta); - fHistPhi->Fill(vPhi); - - // add the track to the TObjArray - tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge,1.)); - } - } - } - } - //}//end nuclear_____________________________________ - } - } - }//V0 loop - - return tracksAccepted; -} - -//________________________________________________________________________ -TObjArray* AliAnalysisTaskTriggeredBF::GetShuffledTracks(TObjArray *tracks){ - // Clones TObjArray and returns it with tracks after shuffling the charges - - TObjArray* tracksShuffled = new TObjArray; - tracksShuffled->SetOwner(kTRUE); - - vector *chargeVector = new vector; //original charge of accepted tracks - - for (Int_t i=0; iGetEntriesFast(); i++) - { - AliVParticle* track = (AliVParticle*) tracks->At(i); - chargeVector->push_back(track->Charge()); - } - - random_shuffle(chargeVector->begin(), chargeVector->end()); - - for(Int_t i = 0; i < tracks->GetEntriesFast(); i++){ - AliVParticle* track = (AliVParticle*) tracks->At(i); - tracksShuffled->Add(new AliBFBasicParticle(track->Eta(), track->Phi(), track->Pt(),chargeVector->at(i),1.)); - } - - delete chargeVector; - - return tracksShuffled; -} - -//________________________________________________________________________ -void AliAnalysisTaskTriggeredBF::FinishTaskOutput(){ - //checks if Balance Function objects are there (needed to write the histograms) - if (!fBalance) { - AliError("fBalance not available"); - return; - } - if(fRunShuffling) { - if (!fShuffledBalance) { - AliError("fShuffledBalance not available"); - return; - } - } - -} - -//________________________________________________________________________ -void AliAnalysisTaskTriggeredBF::Terminate(Option_t *) { - // Called once at the end of the query - - // not implemented ... - -} - -void AliAnalysisTaskTriggeredBF::UserExecMix(Option_t *) -{ - - // not yet done for event mixing! - return; - -} - +#include +#include "TChain.h" +#include "TList.h" +#include "TCanvas.h" +#include "TLorentzVector.h" +#include "TGraphErrors.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TArrayF.h" +#include "TF1.h" +#include "TRandom.h" + +#include "AliLog.h" + +#include "AliAnalysisTaskSE.h" +#include "AliAnalysisManager.h" + +#include "AliESDVertex.h" +#include "AliESDEvent.h" +#include "AliESDInputHandler.h" +#include "AliAODEvent.h" +#include "AliAODTrack.h" +#include "AliAODInputHandler.h" +#include "AliGenEventHeader.h" +#include "AliGenHijingEventHeader.h" +#include "AliMCEventHandler.h" +#include "AliMCEvent.h" +#include "AliMixInputEventHandler.h" +#include "AliStack.h" + +#include "TH2D.h" +#include "AliTHn.h" + +#include "AliEventPoolManager.h" + +#include "AliAnalysisTaskTriggeredBF.h" +#include "AliBalanceTriggered.h" + + +// Analysis task for the TriggeredBF code +// Authors: Panos.Christakoglou@nikhef.nl, m.weber@cern.ch + +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// For the V0 part: +// --> AliAnalysisTaskExtractV0AOD (by david.chinellato@gmail.com) +// +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +using std::cout; +using std::endl; +using std::vector; + +ClassImp(AliAnalysisTaskTriggeredBF) + +//________________________________________________________________________ +AliAnalysisTaskTriggeredBF::AliAnalysisTaskTriggeredBF(const char *name) +: AliAnalysisTaskSE(name), + fBalance(0), + fRunShuffling(kFALSE), + fShuffledBalance(0), + fRunMixing(kFALSE), + fMixingTracks(50000), + fMixedBalance(0), + fPoolMgr(0), + fRunV0(kFALSE), + fPIDResponse(0), + fPIDCombined(0), + fList(0), + fListTriggeredBF(0), + fListTriggeredBFS(0), + fListTriggeredBFM(0), + fHistListPIDQA(0), + fHistListV0(0), + fHistEventStats(0), + fHistCentStats(0), + fHistTriggerStats(0), + fHistTrackStats(0), + fHistVx(0), + fHistVy(0), + fHistVz(0), + fHistClus(0), + fHistDCA(0), + fHistChi2(0), + fHistPt(0), + fHistEta(0), + fHistPhi(0), + fHistPhiBefore(0), + fHistPhiAfter(0), + fHistV0M(0), + fHistRefTracks(0), + fHistV0MultiplicityBeforeTrigSel(0), + fHistV0MultiplicityForTrigEvt(0), + fHistV0MultiplicityForSelEvt(0), + fHistV0MultiplicityForSelEvtNoTPCOnly(0), + fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0), + fHistMultiplicityBeforeTrigSel(0), + fHistMultiplicityForTrigEvt(0), + fHistMultiplicity(0), + fHistMultiplicityNoTPCOnly(0), + fHistMultiplicityNoTPCOnlyNoPileup(0), + fHistV0InvMassK0(0), + fHistV0InvMassLambda(0), + fHistV0InvMassAntiLambda(0), + fHistV0Armenteros(0), + fHistV0SelInvMassK0(0), + fHistV0SelInvMassLambda(0), + fHistV0SelInvMassAntiLambda(0), + fHistV0SelArmenteros(0), + fCentralityEstimator("V0M"), + fUseCentrality(kFALSE), + fCentralityPercentileMin(0.), + fCentralityPercentileMax(5.), + fImpactParameterMin(0.), + fImpactParameterMax(20.), + fUseMultiplicity(kFALSE), + fNumberOfAcceptedTracksMin(0), + fNumberOfAcceptedTracksMax(10000), + fHistNumberOfAcceptedTracks(0), + fUseOfflineTrigger(kFALSE), + fVxMax(0.3), + fVyMax(0.3), + fVzMax(10.), + nAODtrackCutBit(128), + fPtMin(0.3), + fPtMax(1.5), + fEtaMin(-0.8), + fEtaMax(-0.8), + fDCAxyCut(-1), + fDCAzCut(-1), + fTPCchi2Cut(-1), + fNClustersTPCCut(-1) +{ + // Constructor + // Define input and output slots here + // Input slot #0 works with a TChain + DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TH1 container + DefineOutput(1, TList::Class()); + DefineOutput(2, TList::Class()); + DefineOutput(3, TList::Class()); + DefineOutput(4, TList::Class()); + DefineOutput(5, TList::Class()); +} + +//________________________________________________________________________ +AliAnalysisTaskTriggeredBF::~AliAnalysisTaskTriggeredBF() { + + // Destructor + +} + +//________________________________________________________________________ +void AliAnalysisTaskTriggeredBF::UserCreateOutputObjects() { + // Create histograms + // Called once + + // global switch disabling the reference + // (to avoid "Replacing existing TH1" if several wagons are created in train) + Bool_t oldStatus = TH1::AddDirectoryStatus(); + TH1::AddDirectory(kFALSE); + + if(!fBalance) { + fBalance = new AliBalanceTriggered(); + fBalance->SetAnalysisLevel("AOD"); + } + if(fRunShuffling) { + if(!fShuffledBalance) { + fShuffledBalance = new AliBalanceTriggered(); + fShuffledBalance->SetAnalysisLevel("AOD"); + } + } + if(fRunMixing) { + if(!fMixedBalance) { + fMixedBalance = new AliBalanceTriggered(); + fMixedBalance->SetAnalysisLevel("AOD"); + } + } + + //QA list + fList = new TList(); + fList->SetName("listQA"); + fList->SetOwner(); + + //Balance Function list + fListTriggeredBF = new TList(); + fListTriggeredBF->SetName("listTriggeredBF"); + fListTriggeredBF->SetOwner(); + + if(fRunShuffling) { + fListTriggeredBFS = new TList(); + fListTriggeredBFS->SetName("listTriggeredBFShuffled"); + fListTriggeredBFS->SetOwner(); + } + if(fRunMixing) { + fListTriggeredBFM = new TList(); + fListTriggeredBFM->SetName("listTriggeredBFMixed"); + fListTriggeredBFM->SetOwner(); + } + + + //Event stats. + TString gCutName[4] = {"Total","Offline trigger", + "Vertex","Analyzed"}; + fHistEventStats = new TH1F("fHistEventStats", + "Event statistics;;N_{events}", + 4,0.5,4.5); + for(Int_t i = 1; i <= 4; i++) + fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); + fList->Add(fHistEventStats); + + TString gCentName[9] = {"V0M","FMD","TRK","TKL","CL0","CL1","V0MvsFMD","TKLvsV0M","ZEMvsZDC"}; + fHistCentStats = new TH2F("fHistCentStats", + "Centrality statistics;;Cent percentile", + 9,-0.5,8.5,220,-5,105); + for(Int_t i = 1; i <= 9; i++) + fHistCentStats->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data()); + fList->Add(fHistCentStats); + + fHistTriggerStats = new TH1F("fHistTriggerStats","Trigger statistics;TriggerBit;N_{events}",130,0,130); + fList->Add(fHistTriggerStats); + + fHistTrackStats = new TH1F("fHistTrackStats","Event statistics;TrackFilterBit;N_{events}",130,0,130); + fList->Add(fHistTrackStats); + + fHistNumberOfAcceptedTracks = new TH1F("fHistNumberOfAcceptedTracks",";N_{acc.};Entries",4001,-0.5,4000.5); + fList->Add(fHistNumberOfAcceptedTracks); + + // Vertex distributions + fHistVx = new TH1F("fHistVx","Primary vertex distribution - x coordinate;V_{x} (cm);Entries",100,-0.5,0.5); + fList->Add(fHistVx); + fHistVy = new TH1F("fHistVy","Primary vertex distribution - y coordinate;V_{y} (cm);Entries",100,-0.5,0.5); + fList->Add(fHistVy); + fHistVz = new TH1F("fHistVz","Primary vertex distribution - z coordinate;V_{z} (cm);Entries",100,-20.,20.); + fList->Add(fHistVz); + + // QA histograms + fHistClus = new TH2F("fHistClus","# Cluster (TPC vs. ITS)",10,0,10,200,0,200); + fList->Add(fHistClus); + fHistChi2 = new TH1F("fHistChi2","Chi2/NDF distribution",200,0,10); + fList->Add(fHistChi2); + fHistDCA = new TH2F("fHistDCA","DCA (xy vs. z)",400,-5,5,400,-5,5); + fList->Add(fHistDCA); + fHistPt = new TH1F("fHistPt","p_{T} distribution",200,0,10); + fList->Add(fHistPt); + fHistEta = new TH1F("fHistEta","#eta distribution",200,-2,2); + fList->Add(fHistEta); + fHistPhi = new TH1F("fHistPhi","#phi distribution",200,-20,380); + fList->Add(fHistPhi); + fHistPhiBefore = new TH1F("fHistPhiBefore","#phi distribution",200,0.,2*TMath::Pi()); + fList->Add(fHistPhiBefore); + fHistPhiAfter = new TH1F("fHistPhiAfter","#phi distribution",200,0.,2*TMath::Pi()); + fList->Add(fHistPhiAfter); + fHistV0M = new TH2F("fHistV0M","V0 Multiplicity C vs. A",500, 0, 20000, 500, 0, 20000); + fList->Add(fHistV0M); + TString gRefTrackName[6] = {"tracks","tracksPos","tracksNeg","tracksTPConly","clusITS0","clusITS1"}; + fHistRefTracks = new TH2F("fHistRefTracks","Nr of Ref tracks/event vs. ref track estimator;;Nr of tracks",6, 0, 6, 400, 0, 20000); + for(Int_t i = 1; i <= 6; i++) + fHistRefTracks->GetXaxis()->SetBinLabel(i,gRefTrackName[i-1].Data()); + fList->Add(fHistRefTracks); + + //------------------------------------------------ + // V0 Multiplicity Histograms + //------------------------------------------------ + if(fRunV0){ + fHistListV0 = new TList(); + fHistListV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner + + if(! fHistV0MultiplicityBeforeTrigSel) { + fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel", + "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events", + 25, 0, 25); + fHistListV0->Add(fHistV0MultiplicityBeforeTrigSel); + } + + if(! fHistV0MultiplicityForTrigEvt) { + fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt", + "V0s per event (for triggered evt);Nbr of V0s/Evt;Events", + 25, 0, 25); + fHistListV0->Add(fHistV0MultiplicityForTrigEvt); + } + + if(! fHistV0MultiplicityForSelEvt) { + fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt", + "V0s per event;Nbr of V0s/Evt;Events", + 25, 0, 25); + fHistListV0->Add(fHistV0MultiplicityForSelEvt); + } + + if(! fHistV0MultiplicityForSelEvtNoTPCOnly) { + fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly", + "V0s per event;Nbr of V0s/Evt;Events", + 25, 0, 25); + fHistListV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly); + } + + if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) { + fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup", + "V0s per event;Nbr of V0s/Evt;Events", + 25, 0, 25); + fHistListV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup); + } + + //------------------------------------------------ + // Track Multiplicity Histograms + //------------------------------------------------ + + if(! fHistMultiplicityBeforeTrigSel) { + fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel", + "Tracks per event;Nbr of Tracks;Events", + 200, 0, 200); + fHistListV0->Add(fHistMultiplicityBeforeTrigSel); + } + if(! fHistMultiplicityForTrigEvt) { + fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt", + "Tracks per event;Nbr of Tracks;Events", + 200, 0, 200); + fHistListV0->Add(fHistMultiplicityForTrigEvt); + } + if(! fHistMultiplicity) { + fHistMultiplicity = new TH1F("fHistMultiplicity", + "Tracks per event;Nbr of Tracks;Events", + 200, 0, 200); + fHistListV0->Add(fHistMultiplicity); + } + if(! fHistMultiplicityNoTPCOnly) { + fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly", + "Tracks per event;Nbr of Tracks;Events", + 200, 0, 200); + fHistListV0->Add(fHistMultiplicityNoTPCOnly); + } + if(! fHistMultiplicityNoTPCOnlyNoPileup) { + fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup", + "Tracks per event;Nbr of Tracks;Events", + 200, 0, 200); + fHistListV0->Add(fHistMultiplicityNoTPCOnlyNoPileup); + } + + //------------------------------------------------ + // V0 selection Histograms (before) + //------------------------------------------------ + if(!fHistV0InvMassK0) { + fHistV0InvMassK0 = new TH1F("fHistV0InvMassK0", + "Invariant Mass for K0;Mass (GeV/c^{2});Events", + 200,0,2); + fHistListV0->Add(fHistV0InvMassK0); + } + if(!fHistV0InvMassLambda) { + fHistV0InvMassLambda = new TH1F("fHistV0InvMassLambda", + "Invariant Mass for Lambda;Mass (GeV/c^{2});Events", + 200,0,2); + fHistListV0->Add(fHistV0InvMassLambda); + } + if(!fHistV0InvMassAntiLambda) { + fHistV0InvMassAntiLambda = new TH1F("fHistV0InvMassAntiLambda", + "Invariant Mass for AntiLambda;Mass (GeV/c^{2});Events", + 200,0,2); + fHistListV0->Add(fHistV0InvMassAntiLambda); + } + if(!fHistV0Armenteros) { + fHistV0Armenteros = new TH2F("fHistV0Armenteros", + "Armenteros plot;#alpha;q_{t}", + 200,-1,1,200,0,0.5); + fHistListV0->Add(fHistV0Armenteros); + } + + //------------------------------------------------ + // V0 selection Histograms (after) + //------------------------------------------------ + if(!fHistV0SelInvMassK0) { + fHistV0SelInvMassK0 = new TH1F("fHistV0SelInvMassK0", + "Invariant Mass for K0;Mass (GeV/c^{2});Events", + 200,0,2); + fHistListV0->Add(fHistV0SelInvMassK0); + } + if(!fHistV0SelInvMassLambda) { + fHistV0SelInvMassLambda = new TH1F("fHistV0SelInvMassLambda", + "Invariant Mass for Lambda;Mass (GeV/c^{2});Events", + 200,0,2); + fHistListV0->Add(fHistV0SelInvMassLambda); + } + if(!fHistV0SelInvMassAntiLambda) { + fHistV0SelInvMassAntiLambda = new TH1F("fHistV0SelInvMassAntiLambda", + "Invariant Mass for AntiLambda;Mass (GeV/c^{2});Events", + 200,0,2); + fHistListV0->Add(fHistV0SelInvMassAntiLambda); + } + if(!fHistV0SelArmenteros) { + fHistV0SelArmenteros = new TH2F("fHistV0SelArmenteros", + "Armenteros plot;#alpha;q_{t}", + 200,-1,1,200,0,0.5); + fHistListV0->Add(fHistV0SelArmenteros); + } + }//V0 + + // Balance function histograms + // Initialize histograms if not done yet + if(!fBalance->GetHistNp()){ + AliWarning("Histograms not yet initialized! --> Will be done now"); + AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); + fBalance->InitHistograms(); + } + + if(fRunShuffling) { + if(!fShuffledBalance->GetHistNp()) { + AliWarning("Histograms (shuffling) not yet initialized! --> Will be done now"); + AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); + fShuffledBalance->InitHistograms(); + } + } + + if(fRunMixing) { + if(!fMixedBalance->GetHistNp()) { + AliWarning("Histograms (mixing) not yet initialized! --> Will be done now"); + AliWarning("--> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); + fMixedBalance->InitHistograms(); + } + } + + fListTriggeredBF->Add(fBalance->GetHistNp()); + fListTriggeredBF->Add(fBalance->GetHistNn()); + fListTriggeredBF->Add(fBalance->GetHistNpn()); + fListTriggeredBF->Add(fBalance->GetHistNnn()); + fListTriggeredBF->Add(fBalance->GetHistNpp()); + fListTriggeredBF->Add(fBalance->GetHistNnp()); + + if(fRunShuffling) { + fListTriggeredBFS->Add(fShuffledBalance->GetHistNp()); + fListTriggeredBFS->Add(fShuffledBalance->GetHistNn()); + fListTriggeredBFS->Add(fShuffledBalance->GetHistNpn()); + fListTriggeredBFS->Add(fShuffledBalance->GetHistNnn()); + fListTriggeredBFS->Add(fShuffledBalance->GetHistNpp()); + fListTriggeredBFS->Add(fShuffledBalance->GetHistNnp()); + } + + if(fRunMixing) { + fListTriggeredBFM->Add(fMixedBalance->GetHistNp()); + fListTriggeredBFM->Add(fMixedBalance->GetHistNn()); + fListTriggeredBFM->Add(fMixedBalance->GetHistNpn()); + fListTriggeredBFM->Add(fMixedBalance->GetHistNnn()); + fListTriggeredBFM->Add(fMixedBalance->GetHistNpp()); + fListTriggeredBFM->Add(fMixedBalance->GetHistNnp()); + } + + // PID Response task active? + if(fRunV0) { + fPIDResponse = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->GetPIDResponse(); + if (!fPIDResponse) AliFatal("This Task needs the PID response attached to the inputHandler"); + } + + // Event Mixing + Int_t trackDepth = fMixingTracks; + Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager + + Double_t centralityBins[] = {0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,15.,20.,25.,30.,35.,40.,45.,50.,55.,60.,65.,70.,75.,80.,90.,100.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! + Double_t* centbins = centralityBins; + Int_t nCentralityBins = sizeof(centralityBins) / sizeof(Double_t) - 1; + + // bins for second buffer are shifted by 100 cm + Double_t vertexBins[] = {-10., -7., -5., -3., -1., 1., 3., 5., 7., 10.}; // SHOULD BE DEDUCED FROM CREATED ALITHN!!! + Double_t* vtxbins = vertexBins; + Int_t nVertexBins = sizeof(vertexBins) / sizeof(Double_t) - 1; + + fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centbins, nVertexBins, vtxbins); + + + // Post output data. + PostData(1, fList); + PostData(2, fListTriggeredBF); + if(fRunShuffling) PostData(3, fListTriggeredBFS); + if(fRunMixing) PostData(4, fListTriggeredBFM); + if(fRunV0) PostData(5,fHistListV0); + + TH1::AddDirectory(oldStatus); + +} + +//________________________________________________________________________ +void AliAnalysisTaskTriggeredBF::UserExec(Option_t *) { + // Main loop + // Called for each event + + TString gAnalysisLevel = fBalance->GetAnalysisLevel(); + Float_t fCentrality = -1.; + + // ------------------------------------------------------------- + // AOD analysis (vertex and track cuts also here!!!!) + if(gAnalysisLevel == "AOD") { + AliVEvent* eventMain = dynamic_cast(InputEvent()); + if(!eventMain) { + AliError("eventMain not available"); + return; + } + + // check event cuts and fill event histograms + if((fCentrality = IsEventAccepted(eventMain)) < 0){ + return; + } + + // get the accepted tracks in main event + TObjArray *tracksMain = NULL; + if(fRunV0) tracksMain = GetAcceptedV0s(eventMain); + else tracksMain = GetAcceptedTracks(eventMain); + + // store charges of all accepted tracks, shuffle and reassign (two extra loops!) + TObjArray* tracksShuffled = NULL; + if(fRunShuffling){ + tracksShuffled = GetShuffledTracks(tracksMain); + } + + // Event mixing --> UPDATE POOL IS MISSING!!! + if (fRunMixing) + { + // 1. First get an event pool corresponding in mult (cent) and + // zvertex to the current event. Once initialized, the pool + // should contain nMix (reduced) events. This routine does not + // pre-scan the chain. The first several events of every chain + // will be skipped until the needed pools are filled to the + // specified depth. If the pool categories are not too rare, this + // should not be a problem. If they are rare, you could lose` + // statistics. + + // 2. Collect the whole pool's content of tracks into one TObjArray + // (bgTracks), which is effectively a single background super-event. + + // 3. The reduced and bgTracks arrays must both be passed into + // FillCorrelations(). Also nMix should be passed in, so a weight + // of 1./nMix can be applied. + + AliEventPool* pool = fPoolMgr->GetEventPool(fCentrality, eventMain->GetPrimaryVertex()->GetZ()); + + if (!pool){ + AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality, eventMain->GetPrimaryVertex()->GetZ())); + } + else{ + + //pool->SetDebug(1); + + if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 10 || pool->GetCurrentNEvents() >= 5){ + + + Int_t nMix = pool->GetCurrentNEvents(); + //cout << "nMix = " << nMix << " tracks in pool = " << pool->NTracksInPool() << endl; + + //((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(2); + //((TH2F*) fListOfHistos->FindObject("mixedDist"))->Fill(centrality, pool->NTracksInPool()); + //if (pool->IsReady()) + //((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(3); + + // Fill mixed-event histos here + for (Int_t jMix=0; jMixGetEvent(jMix); + fMixedBalance->FillBalance(fCentrality,tracksMain,tracksMixed); + } + } + + // Update the Event pool + pool->UpdatePool(tracksMain); + //pool->PrintInfo(); + + }//pool NULL check + }//run mixing + + // calculate balance function + fBalance->FillBalance(fCentrality,tracksMain,NULL); + + // calculate shuffled balance function + if(fRunShuffling && tracksShuffled != NULL) { + fShuffledBalance->FillBalance(fCentrality,tracksShuffled,NULL); + } + + }//AOD analysis + else{ + AliError("Triggered Balance Function analysis only for AODs!"); + } +} + +//________________________________________________________________________ +Float_t AliAnalysisTaskTriggeredBF::IsEventAccepted(AliVEvent *event){ + // Checks the Event cuts + // Fills Event statistics histograms + + // event selection done in AliAnalysisTaskSE::Exec() --> this is not used + fHistEventStats->Fill(1); //all events + + Bool_t isSelectedMain = kTRUE; + Float_t fCentrality = -1.; + Int_t nV0s = event->GetNumberOfV0s(); + TString gAnalysisLevel = fBalance->GetAnalysisLevel(); + + if(fUseOfflineTrigger) + isSelectedMain = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected(); + + //V0 QA histograms (before trigger selection) + if(fRunV0){ + fHistMultiplicityBeforeTrigSel->Fill ( -1 ); + fHistV0MultiplicityBeforeTrigSel->Fill ( nV0s ); + } + + if(isSelectedMain) { + fHistEventStats->Fill(2); //triggered events + + //Centrality stuff + if(fUseCentrality) { + if(gAnalysisLevel == "AOD") { //centrality in AOD header + AliAODHeader *header = (AliAODHeader*) event->GetHeader(); + fCentrality = header->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data()); + + // QA for centrality estimators + fHistCentStats->Fill(0.,header->GetCentralityP()->GetCentralityPercentile("V0M")); + fHistCentStats->Fill(1.,header->GetCentralityP()->GetCentralityPercentile("FMD")); + fHistCentStats->Fill(2.,header->GetCentralityP()->GetCentralityPercentile("TRK")); + fHistCentStats->Fill(3.,header->GetCentralityP()->GetCentralityPercentile("TKL")); + fHistCentStats->Fill(4.,header->GetCentralityP()->GetCentralityPercentile("CL0")); + fHistCentStats->Fill(5.,header->GetCentralityP()->GetCentralityPercentile("CL1")); + fHistCentStats->Fill(6.,header->GetCentralityP()->GetCentralityPercentile("V0MvsFMD")); + fHistCentStats->Fill(7.,header->GetCentralityP()->GetCentralityPercentile("TKLvsV0M")); + fHistCentStats->Fill(8.,header->GetCentralityP()->GetCentralityPercentile("ZEMvsZDC")); + + // centrality QA (V0M) + fHistV0M->Fill(event->GetVZEROData()->GetMTotV0A(), event->GetVZEROData()->GetMTotV0C()); + + // centrality QA (reference tracks) + fHistRefTracks->Fill(0.,header->GetRefMultiplicity()); + fHistRefTracks->Fill(1.,header->GetRefMultiplicityPos()); + fHistRefTracks->Fill(2.,header->GetRefMultiplicityNeg()); + fHistRefTracks->Fill(3.,header->GetTPConlyRefMultiplicity()); + fHistRefTracks->Fill(4.,header->GetNumberOfITSClusters(0)); + fHistRefTracks->Fill(5.,header->GetNumberOfITSClusters(1)); + fHistRefTracks->Fill(6.,header->GetNumberOfITSClusters(2)); + fHistRefTracks->Fill(7.,header->GetNumberOfITSClusters(3)); + fHistRefTracks->Fill(8.,header->GetNumberOfITSClusters(4)); + + //V0 QA histograms (after trigger selection) + if(fRunV0){ + fHistMultiplicityForTrigEvt->Fill ( fCentrality ); + fHistV0MultiplicityForTrigEvt->Fill ( nV0s ); + } + } + } + + + const AliVVertex *vertex = event->GetPrimaryVertex(); + + if(vertex) { + Double32_t fCov[6]; + vertex->GetCovarianceMatrix(fCov); + if(vertex->GetNContributors() > 0) { + if(fCov[5] != 0) { + fHistEventStats->Fill(3); //events with a proper vertex + if(TMath::Abs(vertex->GetX()) < fVxMax) { + if(TMath::Abs(vertex->GetY()) < fVyMax) { + if(TMath::Abs(vertex->GetZ()) < fVzMax) { + fHistEventStats->Fill(4); //analyzed events + fHistVx->Fill(vertex->GetX()); + fHistVy->Fill(vertex->GetY()); + fHistVz->Fill(vertex->GetZ()); + + + + //V0 QA histograms (vertex Z check) + if(fRunV0){ + fHistV0MultiplicityForSelEvt ->Fill( nV0s ); + fHistMultiplicity->Fill(fCentrality); + + //V0 QA histograms (Only look at events with well-established PV) + const AliAODVertex *lPrimarySPDVtx = ((AliAODEvent*)event)->GetPrimaryVertexSPD(); + if(lPrimarySPDVtx){ + fHistMultiplicityNoTPCOnly->Fill ( fCentrality ); + fHistV0MultiplicityForSelEvtNoTPCOnly->Fill ( nV0s ); + + //V0 QA histograms (Pileup Rejection) + // FIXME : quality selection regarding pile-up rejection + fHistMultiplicityNoTPCOnlyNoPileup->Fill(fCentrality); + fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( nV0s ); + + } + else{ + return -1; + } + } + + + // take only events inside centrality class + if((fCentrality > fCentralityPercentileMin) && (fCentrality < fCentralityPercentileMax)){ + return fCentrality; + }//centrality class + }//Vz cut + }//Vy cut + }//Vx cut + }//proper vertex resolution + }//proper number of contributors + }//vertex object valid + }//triggered event + + // in all other cases return -1 (event not accepted) + return -1; +} + +//________________________________________________________________________ +TObjArray* AliAnalysisTaskTriggeredBF::GetAcceptedTracks(AliVEvent *event){ + // Returns TObjArray with tracks after all track cuts (only for AOD!) + // Fills QA histograms + + //output TObjArray holding all good tracks + TObjArray* tracksAccepted = new TObjArray; + tracksAccepted->SetOwner(kTRUE); + + Short_t vCharge = 0; + Double_t vEta = 0.; + Double_t vPhi = 0.; + Double_t vPt = 0.; + + // Loop over tracks in event + for (Int_t iTracks = 0; iTracks < event->GetNumberOfTracks(); iTracks++) { + AliAODTrack* aodTrack = dynamic_cast(event->GetTrack(iTracks)); + if (!aodTrack) { + AliError(Form("Could not receive track %d", iTracks)); + continue; + } + + // AOD track cuts + + // For ESD Filter Information: ANALYSIS/macros/AddTaskESDfilter.C + // take only TPC only tracks + fHistTrackStats->Fill(aodTrack->GetFilterMap()); + if(!aodTrack->TestFilterBit(nAODtrackCutBit)) continue; + + vCharge = aodTrack->Charge(); + vEta = aodTrack->Eta(); + vPhi = aodTrack->Phi() * TMath::RadToDeg(); + vPt = aodTrack->Pt(); + + Float_t dcaXY = aodTrack->DCA(); // this is the DCA from global track (not exactly what is cut on) + Float_t dcaZ = aodTrack->ZAtDCA(); // this is the DCA from global track (not exactly what is cut on) + + + // Kinematics cuts from ESD track cuts + if( vPt < fPtMin || vPt > fPtMax) continue; + if( vEta < fEtaMin || vEta > fEtaMax) continue; + + // Extra DCA cuts (for systematic studies [!= -1]) + if( fDCAxyCut != -1 && fDCAzCut != -1){ + if(TMath::Sqrt((dcaXY*dcaXY)/(fDCAxyCut*fDCAxyCut)+(dcaZ*dcaZ)/(fDCAzCut*fDCAzCut)) > 1 ){ + continue; // 2D cut + } + } + + // Extra TPC cuts (for systematic studies [!= -1]) + if( fTPCchi2Cut != -1 && aodTrack->Chi2perNDF() > fTPCchi2Cut){ + continue; + } + if( fNClustersTPCCut != -1 && aodTrack->GetTPCNcls() < fNClustersTPCCut){ + continue; + } + + // fill QA histograms + fHistClus->Fill(aodTrack->GetITSNcls(),aodTrack->GetTPCNcls()); + fHistDCA->Fill(dcaZ,dcaXY); + fHistChi2->Fill(aodTrack->Chi2perNDF()); + fHistPt->Fill(vPt); + fHistEta->Fill(vEta); + fHistPhi->Fill(vPhi); + + // add the track to the TObjArray + tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge,1.)); + } + + return tracksAccepted; +} + +//________________________________________________________________________ +TObjArray* AliAnalysisTaskTriggeredBF::GetAcceptedV0s(AliVEvent *event){ + // Returns TObjArray with tracks after all track cuts (only for AOD!) + // Fills QA histograms + + //output TObjArray holding all good tracks + TObjArray* tracksAccepted = new TObjArray; + tracksAccepted->SetOwner(kTRUE); + + Short_t vCharge = 0; + Double_t vEta = 0.; + Double_t vPhi = 0.; + Double_t vPt = 0.; + + //------------------------------------------------ + // MAIN LAMBDA LOOP STARTS HERE (basically a copy of AliAnalysisTaskExtractV0AOD) + //------------------------------------------------ + + // parameters (for the time being hard coded here) --> from David for EbyE Lambdas + Bool_t fkUseOnTheFly = kFALSE; + Double_t fRapidityBoundary = 0.5; + Double_t fCutDaughterEta = 0.8; + Double_t fCutV0Radius = 0.9; + Double_t fCutDCANegToPV = 0.1; + Double_t fCutDCAPosToPV = 0.1; + Double_t fCutDCAV0Daughters = 1.0; + Double_t fCutV0CosPA = 0.9995; + Double_t fMassLambda = 1.115683; + Double_t fCutMassLambda = 0.007; + Double_t fCutProperLifetime = 3*7.9; + Double_t fCutLeastNumberOfCrossedRows = 70; + Double_t fCutLeastNumberOfCrossedRowsOverFindable = 0.8; + Double_t fCutTPCPIDNSigmasProton = 3.0; + Double_t fCutTPCPIDNSigmasPion = 5.0; + + + //Variable definition + Int_t lOnFlyStatus = 0;// nv0sOn = 0, nv0sOff = 0; + Double_t lChi2V0 = 0; + Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0; + Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0; + Double_t lV0CosineOfPointingAngle = 0; + Double_t lV0Radius = 0, lPt = 0; + Double_t lEta = 0, lPhi = 0; + Double_t lRap = 0, lRapK0Short = 0, lRapLambda = 0; + Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0; + Double_t lAlphaV0 = 0, lPtArmV0 = 0; + + Double_t fMinV0Pt = 0; + Double_t fMaxV0Pt = 100; + + + + // some event observables + Int_t nv0s = event->GetNumberOfV0s(); + Double_t tPrimaryVtxPosition[3]; + const AliVVertex *primaryVtx = event->GetPrimaryVertex(); + tPrimaryVtxPosition[0] = primaryVtx->GetX(); + tPrimaryVtxPosition[1] = primaryVtx->GetY(); + tPrimaryVtxPosition[2] = primaryVtx->GetZ(); + + + //loop over V0s + for (Int_t iV0 = 0; iV0 < nv0s; iV0++) + {// This is the begining of the V0 loop + AliAODv0 *v0 = ((AliAODEvent*)event)->GetV0(iV0); + if (!v0) continue; + + //Obsolete at AOD level... + //---> Fix On-the-Fly candidates, count how many swapped + //if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){ + // fHistSwappedV0Counter -> Fill( 1 ); + //}else{ + // fHistSwappedV0Counter -> Fill( 0 ); + //} + //if ( fkUseOnTheFly ) CheckChargeV0(v0); + + Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0); + Double_t tV0mom[3]; + v0->GetPxPyPz( tV0mom ); + Double_t lV0TotalMomentum = TMath::Sqrt( + tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] ); + + lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]); + lPt = v0->Pt(); + lEta = v0->Eta(); + lPhi = v0->Phi()*TMath::RadToDeg(); + lRapK0Short = v0->RapK0Short(); + lRapLambda = v0->RapLambda(); + lRap = lRapLambda;//v0->Y(); //FIXME!!! + if ((lPtGetPosID()); + //UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetPosID()); + + Double_t lMomPos[3]; //v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]); + Double_t lMomNeg[3]; //v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]); + lMomPos[0] = v0->MomPosX(); + lMomPos[1] = v0->MomPosY(); + lMomPos[2] = v0->MomPosZ(); + lMomNeg[0] = v0->MomNegX(); + lMomNeg[1] = v0->MomNegY(); + lMomNeg[2] = v0->MomNegZ(); + + AliAODTrack *pTrack=(AliAODTrack *)v0->GetDaughter(0); //0->Positive Daughter + AliAODTrack *nTrack=(AliAODTrack *)v0->GetDaughter(1); //1->Negative Daughter + if (!pTrack || !nTrack) { + AliError("ERROR: Could not retreive one of the daughter track"); + continue; + } + + //Daughter Eta for Eta selection, afterwards + Double_t lNegEta = nTrack->Eta(); + Double_t lPosEta = pTrack->Eta(); + + // Filter like-sign V0 (next: add counter and distribution) + if ( pTrack->Charge() == nTrack->Charge()){ + continue; + } + + //Quick test this far! + + + //________________________________________________________________________ + // Track quality cuts + Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1); + Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1); + Float_t lLeastNbrCrossedRows = (lPosTrackCrossedRows>lNegTrackCrossedRows) ? lNegTrackCrossedRows : lPosTrackCrossedRows; + + // TPC refit condition (done during reconstruction for Offline but not for On-the-fly) + if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue; + if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue; + + if ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) ) continue; + + //Findable clusters > 0 condition + if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue; + + //Compute ratio Crossed Rows / Findable clusters + //Note: above test avoids division by zero! + Float_t lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF())); + Float_t lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF())); + Float_t lLeastNbrCrossedRowsOverFindable = (lPosTrackCrossedRowsOverFindable>lNegTrackCrossedRowsOverFindable) ? lNegTrackCrossedRowsOverFindable : lPosTrackCrossedRowsOverFindable; + + //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here + if ( lLeastNbrCrossedRowsOverFindable < 0.8) continue; + + //End track Quality Cuts + //________________________________________________________________________ + + + lDcaPosToPrimVertex = v0->DcaPosToPrimVertex(); + lDcaNegToPrimVertex = v0->DcaNegToPrimVertex(); + + lOnFlyStatus = v0->GetOnFlyStatus(); + lChi2V0 = v0->Chi2V0(); + lDcaV0Daughters = v0->DcaV0Daughters(); + lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex(); + lV0CosineOfPointingAngle = v0->CosPointingAngle(tPrimaryVtxPosition); + + // Distance over total momentum + Double_t lDistOverTotMom = TMath::Sqrt( + TMath::Power( tDecayVertexV0[0] - tPrimaryVtxPosition[0] , 2) + + TMath::Power( tDecayVertexV0[1] - tPrimaryVtxPosition[1] , 2) + + TMath::Power( tDecayVertexV0[2] - tPrimaryVtxPosition[2] , 2) + ); + lDistOverTotMom /= (lV0TotalMomentum+1e-10); //avoid division by zero, to be sure + + + // Getting invariant mass infos directly from ESD + lInvMassK0s = v0->MassK0Short(); + lInvMassLambda = v0->MassLambda(); + lInvMassAntiLambda = v0->MassAntiLambda(); + lAlphaV0 = v0->AlphaV0(); + lPtArmV0 = v0->PtArmV0(); + + //Official means of acquiring N-sigmas + Double_t lNSigmasPosProton = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kProton ); + Double_t lNSigmasPosPion = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kPion ); + Double_t lNSigmasNegProton = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kProton ); + Double_t lNSigmasNegPion = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion ); + + //V0 QA histograms (before V0 selection) + fHistV0InvMassK0->Fill(lInvMassK0s); + fHistV0InvMassLambda->Fill(lInvMassLambda); + fHistV0InvMassAntiLambda->Fill(lInvMassAntiLambda); + fHistV0Armenteros->Fill(lAlphaV0,lPtArmV0); + + + //First Selection: Reject OnFly + if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){ + + + //Second Selection: rough 20-sigma band, parametric. + //K0Short: Enough to parametrize peak broadening with linear function. + Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*lPt; + Double_t lLowerLimitK0Short = (4.30006e-01) - (1.10029e-02)*lPt; + + //Lambda: Linear (for higher pt) plus exponential (for low-pt broadening) + //[0]+[1]*x+[2]*TMath::Exp(-[3]*x) + Double_t lUpperLimitLambda = (1.13688e+00) + (5.27838e-03)*lPt + (8.42220e-02)*TMath::Exp(-(3.80595e+00)*lPt); + Double_t lLowerLimitLambda = (1.09501e+00) - (5.23272e-03)*lPt - (7.52690e-02)*TMath::Exp(-(3.46339e+00)*lPt); + + //Do Selection + if( (lInvMassLambda < lUpperLimitLambda && lInvMassLambda > lLowerLimitLambda ) || + (lInvMassAntiLambda < lUpperLimitLambda && lInvMassAntiLambda > lLowerLimitLambda ) || + (lInvMassK0s < lUpperLimitK0Short && lInvMassK0s > lLowerLimitK0Short ) ){ + + + // //Pre-selection in case this is AA... + // //if( fkIsNuclear == kFALSE ) fTree->Fill(); + // //if( fkIsNuclear == kTRUE){ + // //If this is a nuclear collision___________________ + // // ... pre-filter with TPC, daughter eta selection + + + if( (lInvMassLambda < lUpperLimitLambda && lInvMassLambda > lLowerLimitLambda + && TMath::Abs(lNSigmasPosProton) < 6.0 && TMath::Abs(lNSigmasNegPion) < 6.0 ) || + (lInvMassAntiLambda < lUpperLimitLambda && lInvMassAntiLambda > lLowerLimitLambda + && TMath::Abs(lNSigmasNegProton) < 6.0 && TMath::Abs(lNSigmasPosPion) < 6.0 ) || + (lInvMassK0s < lUpperLimitK0Short && lInvMassK0s > lLowerLimitK0Short + && TMath::Abs(lNSigmasNegPion) < 6.0 && TMath::Abs(lNSigmasPosPion) < 6.0 ) ){ + + //insane test + if ( TMath::Abs(lNegEta)<0.8 && TMath::Abs(lPosEta)<0.8 ){ + + // start the fine selection (usually done in post processing, but we don't have time to waste) --> Lambdas! + if( + TMath::Abs(lRap)= fCutV0Radius && + lDcaNegToPrimVertex >= fCutDCANegToPV && + lDcaPosToPrimVertex >= fCutDCAPosToPV && + lDcaV0Daughters <= fCutDCAV0Daughters && + lV0CosineOfPointingAngle >= fCutV0CosPA && + fMassLambda*lDistOverTotMom <= fCutProperLifetime && + lLeastNbrCrossedRows >= fCutLeastNumberOfCrossedRows && + lLeastNbrCrossedRowsOverFindable >= fCutLeastNumberOfCrossedRowsOverFindable && + lPtArmV0 * 5 < TMath::Abs(lAlphaV0) && + ((TMath::Abs(lNSigmasNegPion) <= fCutTPCPIDNSigmasPion && + TMath::Abs(lNSigmasPosProton) <= fCutTPCPIDNSigmasProton) || + (TMath::Abs(lNSigmasPosPion) <= fCutTPCPIDNSigmasPion && + TMath::Abs(lNSigmasNegProton) <= fCutTPCPIDNSigmasProton)) + ) + { + + //V0 QA histograms (after V0 selection) + fHistV0SelInvMassK0->Fill(lInvMassK0s); + fHistV0SelInvMassLambda->Fill(lInvMassLambda); + fHistV0SelInvMassAntiLambda->Fill(lInvMassAntiLambda); + + // this means a V0 candidate is found + if(TMath::Abs(lInvMassLambda-fMassLambda) < fCutMassLambda || + TMath::Abs(lInvMassAntiLambda-fMassLambda) < fCutMassLambda){ + + fHistV0SelArmenteros->Fill(lAlphaV0,lPtArmV0); + + vEta = lEta; + vPhi = lPhi; + vPt = lPt; + if(lAlphaV0 > 0) vCharge = 1; + if(lAlphaV0 < 0) vCharge = -1; + + // fill QA histograms + fHistPt->Fill(vPt); + fHistEta->Fill(vEta); + fHistPhi->Fill(vPhi); + + // add the track to the TObjArray + tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge,1.)); + } + } + } + } + //}//end nuclear_____________________________________ + } + } + }//V0 loop + + return tracksAccepted; +} + +//________________________________________________________________________ +TObjArray* AliAnalysisTaskTriggeredBF::GetShuffledTracks(TObjArray *tracks){ + // Clones TObjArray and returns it with tracks after shuffling the charges + + TObjArray* tracksShuffled = new TObjArray; + tracksShuffled->SetOwner(kTRUE); + + vector *chargeVector = new vector; //original charge of accepted tracks + + for (Int_t i=0; iGetEntriesFast(); i++) + { + AliVParticle* track = (AliVParticle*) tracks->At(i); + chargeVector->push_back(track->Charge()); + } + + random_shuffle(chargeVector->begin(), chargeVector->end()); + + for(Int_t i = 0; i < tracks->GetEntriesFast(); i++){ + AliVParticle* track = (AliVParticle*) tracks->At(i); + tracksShuffled->Add(new AliBFBasicParticle(track->Eta(), track->Phi(), track->Pt(),chargeVector->at(i),1.)); + } + + delete chargeVector; + + return tracksShuffled; +} + +//________________________________________________________________________ +void AliAnalysisTaskTriggeredBF::FinishTaskOutput(){ + //checks if Balance Function objects are there (needed to write the histograms) + if (!fBalance) { + AliError("fBalance not available"); + return; + } + if(fRunShuffling) { + if (!fShuffledBalance) { + AliError("fShuffledBalance not available"); + return; + } + } + +} + +//________________________________________________________________________ +void AliAnalysisTaskTriggeredBF::Terminate(Option_t *) { + // Called once at the end of the query + + // not implemented ... + +} + +void AliAnalysisTaskTriggeredBF::UserExecMix(Option_t *) +{ + + // not yet done for event mixing! + return; + +} + diff --git a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.h b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.h index 1cb244a3ff7..490362ffd69 100755 --- a/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.h +++ b/PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.h @@ -1,258 +1,258 @@ -#ifndef ALIANALYSISTASKTRIGGEREDBF_CXX -#define ALIANALYSISTASKTRIGGEREDBF_CXX - -// Analysis task for the TriggeredBF code -// Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch - -#include "AliLog.h" -#include "AliAnalysisTaskSE.h" -#include "AliBalanceTriggered.h" -#include "AliPIDResponse.h" -#include "AliPIDCombined.h" - -class TList; -class TH1F; -class TH2F; - -class AliBalanceTriggered; -class AliEventPoolManager; - - -class AliAnalysisTaskTriggeredBF : public AliAnalysisTaskSE { - public: - AliAnalysisTaskTriggeredBF(const char *name = "AliAnalysisTaskTriggeredBF"); - virtual ~AliAnalysisTaskTriggeredBF(); - - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void UserExecMix(Option_t*); - virtual void FinishTaskOutput(); - virtual void Terminate(Option_t *); - - void SetAnalysisObject(AliBalanceTriggered *const analysis) { - fBalance = analysis; - } - void SetShufflingObject(AliBalanceTriggered *const analysisShuffled) { - fRunShuffling = kTRUE; - fShuffledBalance = analysisShuffled; - } - void SetMixingObject(AliBalanceTriggered *const analysisMixed) { - fRunMixing = kTRUE; - fMixedBalance = analysisMixed; - } - void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; } - - void SetRunV0(Bool_t runV0 = kTRUE) { fRunV0 = runV0; } - - void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { - fVxMax = vx; - fVyMax = vy; - fVzMax = vz; - } - - //==============AOD analysis==============// - void SetAODtrackCutBit(Int_t bit){ - nAODtrackCutBit = bit; - } - - void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){ - fPtMin = ptmin; fPtMax = ptmax; - fEtaMin = etamin; fEtaMax = etamax; - - } - - void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){ - fDCAxyCut = DCAxy; - fDCAzCut = DCAz; - } - - void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){ - fTPCchi2Cut = maxTPCchi2; - fNClustersTPCCut = minNClustersTPC; - } - - //Centrality - void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;} - const char* GetCentralityEstimator(void) const {return fCentralityEstimator;} - void SetCentralityPercentileRange(Double_t min, Double_t max) { - fUseCentrality = kTRUE; - fCentralityPercentileMin=min; - fCentralityPercentileMax=max; - } - void SetImpactParameterRange(Double_t min, Double_t max) { - fUseCentrality = kTRUE; - fImpactParameterMin=min; - fImpactParameterMax=max; - } - - //multiplicity - void SetMultiplicityRange(Int_t min, Int_t max) { - fUseMultiplicity = kTRUE; - fNumberOfAcceptedTracksMin = min; - fNumberOfAcceptedTracksMax = max;} - - void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;} - - - private: - Float_t IsEventAccepted(AliVEvent* event); - TObjArray* GetAcceptedTracks(AliVEvent* event); - TObjArray* GetAcceptedV0s(AliVEvent* event); - TObjArray* GetShuffledTracks(TObjArray* tracks); - - AliBalanceTriggered *fBalance; //TriggeredBF object - Bool_t fRunShuffling;//run shuffling or not - AliBalanceTriggered *fShuffledBalance; //TriggeredBF object (shuffled) - Bool_t fRunMixing;//run mixing or not - Int_t fMixingTracks;//number of tracks to mix - AliBalanceTriggered *fMixedBalance; //TriggeredBF object (mixed) - AliEventPoolManager* fPoolMgr; //! event pool manager - Bool_t fRunV0; - - AliPIDResponse *fPIDResponse; //! PID response object - AliPIDCombined *fPIDCombined; //! combined PID object - - TList *fList; //fList object - TList *fListTriggeredBF; //fList object - TList *fListTriggeredBFS; //fList object (shuffling) - TList *fListTriggeredBFM; //fList object (mixing) - TList *fHistListPIDQA; //! list of histograms - TList *fHistListV0; // list of V0 histograms - - TH1F *fHistEventStats; //event stats - TH2F *fHistCentStats; //centrality stats - TH1F *fHistTriggerStats; //trigger stats - TH1F *fHistTrackStats; //Track filter bit stats - TH1F *fHistVx; //x coordinate of the primary vertex - TH1F *fHistVy; //y coordinate of the primary vertex - TH1F *fHistVz; //z coordinate of the primary vertex - - TH2F *fHistClus;//number of clusters (QA histogram) - TH2F *fHistDCA;//DCA (QA histogram) - TH1F *fHistChi2;//track chi2 (QA histogram) - TH1F *fHistPt;//transverse momentum (QA histogram) - TH1F *fHistEta;//pseudorapidity (QA histogram) - TH1F *fHistPhi;//phi (QA histogram) - TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram) - TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram) - TH2F *fHistV0M;//V0 multiplicities (QA histogram) - TH2F *fHistRefTracks;//reference track multiplicities (QA histogram) - - // V0 histograms - TH1F *fHistV0MultiplicityBeforeTrigSel; //! V0 multiplicity distribution - TH1F *fHistV0MultiplicityForTrigEvt; //! V0 multiplicity distribution - TH1F *fHistV0MultiplicityForSelEvt; //! V0 multiplicity distribution - TH1F *fHistV0MultiplicityForSelEvtNoTPCOnly; //! V0 multiplicity distribution - TH1F *fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup;//! V0 multiplicity distribution - - TH1F *fHistMultiplicityBeforeTrigSel; //! multiplicity distribution - TH1F *fHistMultiplicityForTrigEvt; //! multiplicity distribution - TH1F *fHistMultiplicity; //! multiplicity distribution - TH1F *fHistMultiplicityNoTPCOnly; //! multiplicity distribution - TH1F *fHistMultiplicityNoTPCOnlyNoPileup; //! multiplicity distribution - - //before selection - TH1F* fHistV0InvMassK0; // Invariant mass K0 - TH1F* fHistV0InvMassLambda; // Invariant mass Lambda - TH1F* fHistV0InvMassAntiLambda; // Invariant mass AntiLambda - TH2F* fHistV0Armenteros; // Armenteros plot - - //after selection - TH1F* fHistV0SelInvMassK0; // Invariant mass K0 - TH1F* fHistV0SelInvMassLambda; // Invariant mass Lambda - TH1F* fHistV0SelInvMassAntiLambda; // Invariant mass AntiLambda - TH2F* fHistV0SelArmenteros; // Armenteros plot - - TString fCentralityEstimator; //"V0M","TRK","TKL","ZDC","FMD" - Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp) - Double_t fCentralityPercentileMin;//centrality percentile min - Double_t fCentralityPercentileMax;//centrality percentile max - Double_t fImpactParameterMin;//impact parameter min (used for MC) - Double_t fImpactParameterMax;//impact parameter max (used for MC) - - Bool_t fUseMultiplicity;//use the multiplicity cuts - Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp) - Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp) - TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks - - Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection - - Double_t fVxMax;//vxmax - Double_t fVyMax;//vymax - Double_t fVzMax;//vzmax - - Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs) - - Double_t fPtMin;//only used for AODs - Double_t fPtMax;//only used for AODs - Double_t fEtaMin;//only used for AODs - Double_t fEtaMax;//only used for AODs - - Double_t fDCAxyCut;//only used for AODs - Double_t fDCAzCut;//only used for AODs - - Double_t fTPCchi2Cut;//only used for AODs - Int_t fNClustersTPCCut;//only used for AODs - - - AliAnalysisTaskTriggeredBF(const AliAnalysisTaskTriggeredBF&); // not implemented - AliAnalysisTaskTriggeredBF& operator=(const AliAnalysisTaskTriggeredBF&); // not implemented - - ClassDef(AliAnalysisTaskTriggeredBF, 1); // example of analysis -}; - -// class used for io with AliBalance (taken from AliAnalysisTaskPhiCorrelations) -class AliBFBasicParticle : public AliVParticle -{ - public: - AliBFBasicParticle(Float_t eta, Float_t phi, Float_t pt, Short_t charge, Double_t correction) - : fEta(eta), fPhi(phi), fpT(pt), fCharge(charge), fCorrection(correction) - { - } - ~AliBFBasicParticle() {} - - // kinematics - virtual Double_t Px() const { AliFatal("Not implemented"); return 0; } - virtual Double_t Py() const { AliFatal("Not implemented"); return 0; } - virtual Double_t Pz() const { AliFatal("Not implemented"); return 0; } - virtual Double_t Pt() const { return fpT; } - virtual Double_t P() const { AliFatal("Not implemented"); return 0; } - virtual Bool_t PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; } - - virtual Double_t Xv() const { AliFatal("Not implemented"); return 0; } - virtual Double_t Yv() const { AliFatal("Not implemented"); return 0; } - virtual Double_t Zv() const { AliFatal("Not implemented"); return 0; } - virtual Bool_t XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; } - - virtual Double_t OneOverPt() const { AliFatal("Not implemented"); return 0; } - virtual Double_t Phi() const { return fPhi; } - virtual Double_t Theta() const { AliFatal("Not implemented"); return 0; } - - - virtual Double_t E() const { AliFatal("Not implemented"); return 0; } - virtual Double_t M() const { AliFatal("Not implemented"); return 0; } - - virtual Double_t Eta() const { return fEta; } - virtual Double_t Y() const { AliFatal("Not implemented"); return 0; } - - virtual Short_t Charge() const { return fCharge; } - virtual Int_t GetLabel() const { AliFatal("Not implemented"); return 0; } - - virtual Double_t Correction() const { return fCorrection; } //=============================correction - - // PID - virtual Int_t PdgCode() const { AliFatal("Not implemented"); return 0; } - virtual const Double_t *PID() const { AliFatal("Not implemented"); return 0; } - - private: - Float_t fEta; // eta - Float_t fPhi; // phi - Float_t fpT; // pT - Short_t fCharge; // charge - Double_t fCorrection; //============================correction - - ClassDef( AliBFBasicParticle, 1); // class which contains only quantities requires for this analysis to reduce memory consumption for event mixing -}; - -#endif +#ifndef ALIANALYSISTASKTRIGGEREDBF_CXX +#define ALIANALYSISTASKTRIGGEREDBF_CXX + +// Analysis task for the TriggeredBF code +// Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch + +#include "AliLog.h" +#include "AliAnalysisTaskSE.h" +#include "AliBalanceTriggered.h" +#include "AliPIDResponse.h" +#include "AliPIDCombined.h" + +class TList; +class TH1F; +class TH2F; + +class AliBalanceTriggered; +class AliEventPoolManager; + + +class AliAnalysisTaskTriggeredBF : public AliAnalysisTaskSE { + public: + AliAnalysisTaskTriggeredBF(const char *name = "AliAnalysisTaskTriggeredBF"); + virtual ~AliAnalysisTaskTriggeredBF(); + + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void UserExecMix(Option_t*); + virtual void FinishTaskOutput(); + virtual void Terminate(Option_t *); + + void SetAnalysisObject(AliBalanceTriggered *const analysis) { + fBalance = analysis; + } + void SetShufflingObject(AliBalanceTriggered *const analysisShuffled) { + fRunShuffling = kTRUE; + fShuffledBalance = analysisShuffled; + } + void SetMixingObject(AliBalanceTriggered *const analysisMixed) { + fRunMixing = kTRUE; + fMixedBalance = analysisMixed; + } + void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; } + + void SetRunV0(Bool_t runV0 = kTRUE) { fRunV0 = runV0; } + + void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { + fVxMax = vx; + fVyMax = vy; + fVzMax = vz; + } + + //==============AOD analysis==============// + void SetAODtrackCutBit(Int_t bit){ + nAODtrackCutBit = bit; + } + + void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){ + fPtMin = ptmin; fPtMax = ptmax; + fEtaMin = etamin; fEtaMax = etamax; + + } + + void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){ + fDCAxyCut = DCAxy; + fDCAzCut = DCAz; + } + + void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){ + fTPCchi2Cut = maxTPCchi2; + fNClustersTPCCut = minNClustersTPC; + } + + //Centrality + void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;} + const char* GetCentralityEstimator(void) const {return fCentralityEstimator;} + void SetCentralityPercentileRange(Double_t min, Double_t max) { + fUseCentrality = kTRUE; + fCentralityPercentileMin=min; + fCentralityPercentileMax=max; + } + void SetImpactParameterRange(Double_t min, Double_t max) { + fUseCentrality = kTRUE; + fImpactParameterMin=min; + fImpactParameterMax=max; + } + + //multiplicity + void SetMultiplicityRange(Int_t min, Int_t max) { + fUseMultiplicity = kTRUE; + fNumberOfAcceptedTracksMin = min; + fNumberOfAcceptedTracksMax = max;} + + void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;} + + + private: + Float_t IsEventAccepted(AliVEvent* event); + TObjArray* GetAcceptedTracks(AliVEvent* event); + TObjArray* GetAcceptedV0s(AliVEvent* event); + TObjArray* GetShuffledTracks(TObjArray* tracks); + + AliBalanceTriggered *fBalance; //TriggeredBF object + Bool_t fRunShuffling;//run shuffling or not + AliBalanceTriggered *fShuffledBalance; //TriggeredBF object (shuffled) + Bool_t fRunMixing;//run mixing or not + Int_t fMixingTracks;//number of tracks to mix + AliBalanceTriggered *fMixedBalance; //TriggeredBF object (mixed) + AliEventPoolManager* fPoolMgr; //! event pool manager + Bool_t fRunV0; + + AliPIDResponse *fPIDResponse; //! PID response object + AliPIDCombined *fPIDCombined; //! combined PID object + + TList *fList; //fList object + TList *fListTriggeredBF; //fList object + TList *fListTriggeredBFS; //fList object (shuffling) + TList *fListTriggeredBFM; //fList object (mixing) + TList *fHistListPIDQA; //! list of histograms + TList *fHistListV0; // list of V0 histograms + + TH1F *fHistEventStats; //event stats + TH2F *fHistCentStats; //centrality stats + TH1F *fHistTriggerStats; //trigger stats + TH1F *fHistTrackStats; //Track filter bit stats + TH1F *fHistVx; //x coordinate of the primary vertex + TH1F *fHistVy; //y coordinate of the primary vertex + TH1F *fHistVz; //z coordinate of the primary vertex + + TH2F *fHistClus;//number of clusters (QA histogram) + TH2F *fHistDCA;//DCA (QA histogram) + TH1F *fHistChi2;//track chi2 (QA histogram) + TH1F *fHistPt;//transverse momentum (QA histogram) + TH1F *fHistEta;//pseudorapidity (QA histogram) + TH1F *fHistPhi;//phi (QA histogram) + TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram) + TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram) + TH2F *fHistV0M;//V0 multiplicities (QA histogram) + TH2F *fHistRefTracks;//reference track multiplicities (QA histogram) + + // V0 histograms + TH1F *fHistV0MultiplicityBeforeTrigSel; //! V0 multiplicity distribution + TH1F *fHistV0MultiplicityForTrigEvt; //! V0 multiplicity distribution + TH1F *fHistV0MultiplicityForSelEvt; //! V0 multiplicity distribution + TH1F *fHistV0MultiplicityForSelEvtNoTPCOnly; //! V0 multiplicity distribution + TH1F *fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup;//! V0 multiplicity distribution + + TH1F *fHistMultiplicityBeforeTrigSel; //! multiplicity distribution + TH1F *fHistMultiplicityForTrigEvt; //! multiplicity distribution + TH1F *fHistMultiplicity; //! multiplicity distribution + TH1F *fHistMultiplicityNoTPCOnly; //! multiplicity distribution + TH1F *fHistMultiplicityNoTPCOnlyNoPileup; //! multiplicity distribution + + //before selection + TH1F* fHistV0InvMassK0; // Invariant mass K0 + TH1F* fHistV0InvMassLambda; // Invariant mass Lambda + TH1F* fHistV0InvMassAntiLambda; // Invariant mass AntiLambda + TH2F* fHistV0Armenteros; // Armenteros plot + + //after selection + TH1F* fHistV0SelInvMassK0; // Invariant mass K0 + TH1F* fHistV0SelInvMassLambda; // Invariant mass Lambda + TH1F* fHistV0SelInvMassAntiLambda; // Invariant mass AntiLambda + TH2F* fHistV0SelArmenteros; // Armenteros plot + + TString fCentralityEstimator; //"V0M","TRK","TKL","ZDC","FMD" + Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp) + Double_t fCentralityPercentileMin;//centrality percentile min + Double_t fCentralityPercentileMax;//centrality percentile max + Double_t fImpactParameterMin;//impact parameter min (used for MC) + Double_t fImpactParameterMax;//impact parameter max (used for MC) + + Bool_t fUseMultiplicity;//use the multiplicity cuts + Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp) + Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp) + TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks + + Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection + + Double_t fVxMax;//vxmax + Double_t fVyMax;//vymax + Double_t fVzMax;//vzmax + + Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs) + + Double_t fPtMin;//only used for AODs + Double_t fPtMax;//only used for AODs + Double_t fEtaMin;//only used for AODs + Double_t fEtaMax;//only used for AODs + + Double_t fDCAxyCut;//only used for AODs + Double_t fDCAzCut;//only used for AODs + + Double_t fTPCchi2Cut;//only used for AODs + Int_t fNClustersTPCCut;//only used for AODs + + + AliAnalysisTaskTriggeredBF(const AliAnalysisTaskTriggeredBF&); // not implemented + AliAnalysisTaskTriggeredBF& operator=(const AliAnalysisTaskTriggeredBF&); // not implemented + + ClassDef(AliAnalysisTaskTriggeredBF, 1); // example of analysis +}; + +// class used for io with AliBalance (taken from AliAnalysisTaskPhiCorrelations) +class AliBFBasicParticle : public AliVParticle +{ + public: + AliBFBasicParticle(Float_t eta, Float_t phi, Float_t pt, Short_t charge, Double_t correction) + : fEta(eta), fPhi(phi), fpT(pt), fCharge(charge), fCorrection(correction) + { + } + ~AliBFBasicParticle() {} + + // kinematics + virtual Double_t Px() const { AliFatal("Not implemented"); return 0; } + virtual Double_t Py() const { AliFatal("Not implemented"); return 0; } + virtual Double_t Pz() const { AliFatal("Not implemented"); return 0; } + virtual Double_t Pt() const { return fpT; } + virtual Double_t P() const { AliFatal("Not implemented"); return 0; } + virtual Bool_t PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; } + + virtual Double_t Xv() const { AliFatal("Not implemented"); return 0; } + virtual Double_t Yv() const { AliFatal("Not implemented"); return 0; } + virtual Double_t Zv() const { AliFatal("Not implemented"); return 0; } + virtual Bool_t XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; } + + virtual Double_t OneOverPt() const { AliFatal("Not implemented"); return 0; } + virtual Double_t Phi() const { return fPhi; } + virtual Double_t Theta() const { AliFatal("Not implemented"); return 0; } + + + virtual Double_t E() const { AliFatal("Not implemented"); return 0; } + virtual Double_t M() const { AliFatal("Not implemented"); return 0; } + + virtual Double_t Eta() const { return fEta; } + virtual Double_t Y() const { AliFatal("Not implemented"); return 0; } + + virtual Short_t Charge() const { return fCharge; } + virtual Int_t GetLabel() const { AliFatal("Not implemented"); return 0; } + + virtual Double_t Correction() const { return fCorrection; } //=============================correction + + // PID + virtual Int_t PdgCode() const { AliFatal("Not implemented"); return 0; } + virtual const Double_t *PID() const { AliFatal("Not implemented"); return 0; } + + private: + Float_t fEta; // eta + Float_t fPhi; // phi + Float_t fpT; // pT + Short_t fCharge; // charge + Double_t fCorrection; //============================correction + + ClassDef( AliBFBasicParticle, 1); // class which contains only quantities requires for this analysis to reduce memory consumption for event mixing +}; + +#endif diff --git a/PWGCF/EBYE/Fluctuations/AliAnalysisTaskChargeFluctuations.h b/PWGCF/EBYE/Fluctuations/AliAnalysisTaskChargeFluctuations.h index 7bef58cf887..fd09a6a56a0 100755 --- a/PWGCF/EBYE/Fluctuations/AliAnalysisTaskChargeFluctuations.h +++ b/PWGCF/EBYE/Fluctuations/AliAnalysisTaskChargeFluctuations.h @@ -1,54 +1,54 @@ -#ifndef ALIANALYSISTASKCHARGEFLUCTUATIONS_CXX -#define ALIANALYSISTASKCHARGEFLUCTUATIONS_CXX - -// Analysis task for the charge fluctuations studies -// Authors: Panos Cristakoglou@cern.ch - -class TList; -class TH1F; - -class AliESDtrackCuts; - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskChargeFluctuations : public AliAnalysisTaskSE { - public: - AliAnalysisTaskChargeFluctuations(const char *name = "AliAnalysisTaskChargeFluctuations"); - virtual ~AliAnalysisTaskChargeFluctuations() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { - fESDtrackCuts = trackCuts;} - void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { - fVxMax = vx; - fVyMax = vy; - fVzMax = vz; - } - - void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;} - - private: - TList *fList; //fList object - TH1F *fHistEventStats; //event stats - TH1F *fHistVx; //x coordinate of the primary vertex - TH1F *fHistVy; //y coordinate of the primary vertex - TH1F *fHistVz; //z coordinate of the primary vertex - - AliESDtrackCuts *fESDtrackCuts; //ESD track cuts - - Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection - - Double_t fVxMax;//vxmax - Double_t fVyMax;//vymax - Double_t fVzMax;//vzmax - - AliAnalysisTaskChargeFluctuations(const AliAnalysisTaskChargeFluctuations&); // not implemented - AliAnalysisTaskChargeFluctuations& operator=(const AliAnalysisTaskChargeFluctuations&); // not implemented - - ClassDef(AliAnalysisTaskChargeFluctuations, 1); // example of analysis -}; - -#endif +#ifndef ALIANALYSISTASKCHARGEFLUCTUATIONS_CXX +#define ALIANALYSISTASKCHARGEFLUCTUATIONS_CXX + +// Analysis task for the charge fluctuations studies +// Authors: Panos Cristakoglou@cern.ch + +class TList; +class TH1F; + +class AliESDtrackCuts; + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskChargeFluctuations : public AliAnalysisTaskSE { + public: + AliAnalysisTaskChargeFluctuations(const char *name = "AliAnalysisTaskChargeFluctuations"); + virtual ~AliAnalysisTaskChargeFluctuations() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { + fESDtrackCuts = trackCuts;} + void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { + fVxMax = vx; + fVyMax = vy; + fVzMax = vz; + } + + void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;} + + private: + TList *fList; //fList object + TH1F *fHistEventStats; //event stats + TH1F *fHistVx; //x coordinate of the primary vertex + TH1F *fHistVy; //y coordinate of the primary vertex + TH1F *fHistVz; //z coordinate of the primary vertex + + AliESDtrackCuts *fESDtrackCuts; //ESD track cuts + + Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection + + Double_t fVxMax;//vxmax + Double_t fVyMax;//vymax + Double_t fVzMax;//vzmax + + AliAnalysisTaskChargeFluctuations(const AliAnalysisTaskChargeFluctuations&); // not implemented + AliAnalysisTaskChargeFluctuations& operator=(const AliAnalysisTaskChargeFluctuations&); // not implemented + + ClassDef(AliAnalysisTaskChargeFluctuations, 1); // example of analysis +}; + +#endif diff --git a/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTask.h b/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTask.h index f210283ebad..09710d36416 100644 --- a/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTask.h +++ b/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTask.h @@ -1,78 +1,78 @@ -#ifndef AliEbyEFluctuationAnalysisTask_cxx -#define AliEbyEFluctuationAnalysisTask_cxx - -// Event by event charge fluctuation analysis -// Authors: Satyajit Jena and Panos Cristakoglou - -class TH1F; -class TH2F; -class TString; -class AliESDEvent; -class AliESDtrackCuts; - -#include "AliAnalysisTaskSE.h" - -const Int_t nCentralityBins = 20; - -class AliEbyEFluctuationAnalysisTask : public AliAnalysisTaskSE { - public: - AliEbyEFluctuationAnalysisTask() : AliAnalysisTaskSE(), fESD(0), fOutputList(0), fHistEventStats(0), fHistCentrality(0), fHistNMultMC(0), fHistNPlusNMinusMC(0), fESDtrackCuts(0), fAnalysisType(0), fAnalysisMode(0), fCentralityEstimator("V0M"), fCentralityBins20(kFALSE), fVxMax(3.0),fVyMax(3.0), fVzMax(10.) { - for(Int_t iBin = 0; iBin < nCentralityBins; iBin++) { - fHistNMult[iBin] = NULL; - fHistNPlusNMinus[iBin] = NULL; - } - } - AliEbyEFluctuationAnalysisTask(const char *name); - virtual ~AliEbyEFluctuationAnalysisTask() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { - fESDtrackCuts = trackCuts;} - void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { - fVxMax = vx; - fVyMax = vy; - fVzMax = vz; - } - - //Centrality - void SetCentralityEstimator(const char* centralityEstimator) { - fCentralityEstimator = centralityEstimator;} - void SetCentralityBins20() {fCentralityBins20 = kTRUE;} - - void SetAnalysisType(const char* analysisType) { - fAnalysisType = analysisType;} - void SetAnalysisMode(const char* analysisMode) { - fAnalysisMode = analysisMode;} - - private: - AliESDEvent *fESD; //! ESD object - TList *fOutputList; //! Output list - TH1F *fHistEventStats; //!event stats - TH1F *fHistCentrality; //!centrality - TH1F *fHistNMult[nCentralityBins]; //! nmult - TH2F *fHistNPlusNMinus[nCentralityBins];//!nplus vs nminus correlation - TH1F *fHistNMultMC; //!nmult MC - TH2F *fHistNPlusNMinusMC;//!nplus vs nminus correlation - - AliESDtrackCuts *fESDtrackCuts; //ESD track cuts - - TString fAnalysisType;//"MC", "ESD", "AOD" - TString fAnalysisMode;//"TPC", "Global" - - TString fCentralityEstimator;//"V0M","TRK","TKL","ZDC","FMD" - Bool_t fCentralityBins20;//centrality bins of 5% width - - Double_t fVxMax;//vxmax - Double_t fVyMax;//vymax - Double_t fVzMax;//vzmax - - AliEbyEFluctuationAnalysisTask(const AliEbyEFluctuationAnalysisTask&); // not implemented - AliEbyEFluctuationAnalysisTask& operator=(const AliEbyEFluctuationAnalysisTask&); // not implemented - - ClassDef(AliEbyEFluctuationAnalysisTask, 1); // example of analysis -}; - -#endif +#ifndef AliEbyEFluctuationAnalysisTask_cxx +#define AliEbyEFluctuationAnalysisTask_cxx + +// Event by event charge fluctuation analysis +// Authors: Satyajit Jena and Panos Cristakoglou + +class TH1F; +class TH2F; +class TString; +class AliESDEvent; +class AliESDtrackCuts; + +#include "AliAnalysisTaskSE.h" + +const Int_t nCentralityBins = 20; + +class AliEbyEFluctuationAnalysisTask : public AliAnalysisTaskSE { + public: + AliEbyEFluctuationAnalysisTask() : AliAnalysisTaskSE(), fESD(0), fOutputList(0), fHistEventStats(0), fHistCentrality(0), fHistNMultMC(0), fHistNPlusNMinusMC(0), fESDtrackCuts(0), fAnalysisType(0), fAnalysisMode(0), fCentralityEstimator("V0M"), fCentralityBins20(kFALSE), fVxMax(3.0),fVyMax(3.0), fVzMax(10.) { + for(Int_t iBin = 0; iBin < nCentralityBins; iBin++) { + fHistNMult[iBin] = NULL; + fHistNPlusNMinus[iBin] = NULL; + } + } + AliEbyEFluctuationAnalysisTask(const char *name); + virtual ~AliEbyEFluctuationAnalysisTask() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { + fESDtrackCuts = trackCuts;} + void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { + fVxMax = vx; + fVyMax = vy; + fVzMax = vz; + } + + //Centrality + void SetCentralityEstimator(const char* centralityEstimator) { + fCentralityEstimator = centralityEstimator;} + void SetCentralityBins20() {fCentralityBins20 = kTRUE;} + + void SetAnalysisType(const char* analysisType) { + fAnalysisType = analysisType;} + void SetAnalysisMode(const char* analysisMode) { + fAnalysisMode = analysisMode;} + + private: + AliESDEvent *fESD; //! ESD object + TList *fOutputList; //! Output list + TH1F *fHistEventStats; //!event stats + TH1F *fHistCentrality; //!centrality + TH1F *fHistNMult[nCentralityBins]; //! nmult + TH2F *fHistNPlusNMinus[nCentralityBins];//!nplus vs nminus correlation + TH1F *fHistNMultMC; //!nmult MC + TH2F *fHistNPlusNMinusMC;//!nplus vs nminus correlation + + AliESDtrackCuts *fESDtrackCuts; //ESD track cuts + + TString fAnalysisType;//"MC", "ESD", "AOD" + TString fAnalysisMode;//"TPC", "Global" + + TString fCentralityEstimator;//"V0M","TRK","TKL","ZDC","FMD" + Bool_t fCentralityBins20;//centrality bins of 5% width + + Double_t fVxMax;//vxmax + Double_t fVyMax;//vymax + Double_t fVzMax;//vzmax + + AliEbyEFluctuationAnalysisTask(const AliEbyEFluctuationAnalysisTask&); // not implemented + AliEbyEFluctuationAnalysisTask& operator=(const AliEbyEFluctuationAnalysisTask&); // not implemented + + ClassDef(AliEbyEFluctuationAnalysisTask, 1); // example of analysis +}; + +#endif diff --git a/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.cxx b/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.cxx index 6ed5a924000..9a8a04fa245 100644 --- a/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.cxx +++ b/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.cxx @@ -1,265 +1,265 @@ -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TCanvas.h" -#include "TParticle.h" -#include "TObjArray.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" - -#include "AliStack.h" -#include "AliMCEvent.h" -#include "AliESDEvent.h" -#include "AliESDInputHandler.h" -//#include "AliESDtrackCuts.h" -#include "AliCentrality.h" - -#include "AliEbyEFluctuationAnalysisTaskTrain.h" - -// Event by event charge fluctuation analysis -// Authors: Satyajit Jena and Panos Cristakoglou -// - -ClassImp(AliEbyEFluctuationAnalysisTaskTrain) - -//________________________________________________________________________ -AliEbyEFluctuationAnalysisTaskTrain::AliEbyEFluctuationAnalysisTaskTrain(const char *name) - : AliAnalysisTaskSE(name), fESD(0), fOutputList(0), - fHistEventStats(0), fHistCentrality(0), - fHistNMult(0), fHistNPlusNMinus(0), - fHistNMultMC(0), fHistNPlusNMinusMC(0), - fAnalysisType("ESD"), fAnalysisMode("TPC"), - fCentralityEstimator("V0M"), - fCentralityPercentileMin(0.), fCentralityPercentileMax(5.), - fVxMax(3.), fVyMax(3.), fVzMax(10.), - fMinNumberOfTPCClusters(80), fMaxChi2PerTPCCluster(4.0), - fMaxDCAxy(3.0), fMaxDCAz(3.0) { - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - DefineInput(0, TChain::Class()); - // Output slot #0 id reserved by the base class for AOD - // Output slot #1 writes into a TH1 container - DefineOutput(1, TList::Class()); -} - -//________________________________________________________________________ -void AliEbyEFluctuationAnalysisTaskTrain::UserCreateOutputObjects() { - // Create histograms - // Called once - - fOutputList = new TList(); - fOutputList->SetOwner(); - - //Event stats. - TString gCutName[4] = {"Total","Offline trigger", - "Vertex","Analyzed"}; - fHistEventStats = new TH1F("fHistEventStats", - "Event statistics;;N_{events}", - 4,0.5,4.5); - for(Int_t i = 1; i <= 4; i++) - fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); - fOutputList->Add(fHistEventStats); - - //ESD analysis - if(fAnalysisType.CompareTo("ESD") == 0 ) { - fHistCentrality = new TH1F("fHistCentrality",";Centrality bin;Events", - 20,0.5,20.5); - fOutputList->Add(fHistCentrality); - - TString histName; - histName = "fHistNMult"; - fHistNMult = new TH1F(histName.Data(), - ";N_{mult.}", - 800,0,4000); - fOutputList->Add(fHistNMult); - - histName = "fHistNPlusNMinus"; - fHistNPlusNMinus = new TH2F(histName.Data(), - ";N_{+};N_{-}", - 2000,0.5,2000.5,2000,0.5,2000.5); - fOutputList->Add(fHistNPlusNMinus); - }//ESD analysis - else if(fAnalysisType.CompareTo("MC") == 0) { - TString histName = "fHistNMultMC"; - fHistNMultMC = new TH1F(histName.Data(), - ";N_{mult.}", - 800,0,8000); - fOutputList->Add(fHistNMultMC); - - histName = "fHistNPlusNMinusMC"; - fHistNPlusNMinusMC = new TH2F(histName.Data(), - ";N_{+};N_{-}", - 3000,0.5,3000.5,3000,0.5,3000.5); - fOutputList->Add(fHistNPlusNMinusMC); - }//MC analysis - - PostData(1, fOutputList); -} - -//________________________________________________________________________ -void AliEbyEFluctuationAnalysisTaskTrain::UserExec(Option_t *) { - // Main loop - // Called for each event - - Int_t nPlus = 0, nMinus = 0; - - // Post output data. - //ESD analysis - if(fAnalysisType.CompareTo("ESD") == 0) { - fESD = dynamic_cast(InputEvent()); - if (!fESD) { - printf("ERROR: fESD not available\n"); - return; - } - - fHistEventStats->Fill(1); //all events - - //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB); - //if(isSelected) { - fHistEventStats->Fill(2); //triggered + centrality - - - //Centrality stuff - AliCentrality *centrality = fESD->GetCentrality(); - Int_t nCentrality = 0; - - if(centrality->IsEventInCentralityClass(fCentralityPercentileMin, - fCentralityPercentileMax, - fCentralityEstimator.Data())) { - if(fAnalysisMode.CompareTo("TPC") == 0 ) { - const AliESDVertex *vertex = fESD->GetPrimaryVertexTPC(); - if(vertex) { - if(vertex->GetNContributors() > 0) { - if(vertex->GetZRes() != 0) { - fHistEventStats->Fill(3); //events with a proper vertex - if(TMath::Abs(vertex->GetXv()) < fVxMax) { - if(TMath::Abs(vertex->GetYv()) < fVyMax) { - if(TMath::Abs(vertex->GetZv()) < fVzMax) { - fHistEventStats->Fill(4); //analyzed events - - Printf("Centrality percentile: %lf - Centrality: %d - Total tracks: %d", - centrality->GetCentralityPercentile(fCentralityEstimator.Data()), - nCentrality,fESD->GetNumberOfTracks()); - - - Int_t nAcceptedTracks = 0; - - nAcceptedTracks = fESD->GetNumberOfTracks(); - AliESDtrack* track = 0; - - Float_t dcaXY = 0.0, dcaZ = 0.0; - - for (Int_t iTracks = 0; iTracks < nAcceptedTracks; iTracks++) - { - track = dynamic_cast(fESD->GetTrack(iTracks)); - if (!track) { - printf("ERROR: Could not receive track %d\n", iTracks); - continue; - } - - AliESDtrack *tpcOnlyTrack = new AliESDtrack(); - - if (!track->FillTPCOnlyTrack(*tpcOnlyTrack)) { - delete tpcOnlyTrack; - continue; - } - - tpcOnlyTrack->GetImpactParameters(dcaXY,dcaZ); - - Int_t nClustersITS = track->GetITSclusters(0x0); - Int_t nClustersTPC = track->GetTPCclusters(0x0); - - Float_t chi2PerClusterITS = -1; - if (nClustersITS!=0) - chi2PerClusterITS = track->GetITSchi2()/Float_t(nClustersITS); - Float_t chi2PerClusterTPC = -1; - if (nClustersTPC!=0) - chi2PerClusterTPC = track->GetTPCchi2()/Float_t(nClustersTPC); - - // - - if(nClustersTPC < fMinNumberOfTPCClusters) continue; - if(chi2PerClusterTPC > fMaxChi2PerTPCCluster) continue; - if(TMath::Abs(dcaXY) > fMaxDCAxy) continue; - if(TMath::Abs(dcaZ) > fMaxDCAz) continue; - - Short_t gCharge = tpcOnlyTrack->Charge(); - if(gCharge > 0) nPlus += 1; - if(gCharge < 0) nMinus += 1; - delete tpcOnlyTrack; - } // track loop - - if( nPlus == 0 && nMinus == 0) return; - - // cout<<"=========NPlus: "<Fill(nCentrality); - fHistNPlusNMinus->Fill(nPlus,nMinus); - fHistNMult->Fill(nPlus+nMinus); - - - }//Vz cut - }//Vy cut - }//Vx cut - }//Vz resolution - }//number of contributors - }//valid vertex - }//TPC analysis mode - }//centrality - //}//physics selection - }//ESD analysis level - - //MC analysis - if(fAnalysisType.CompareTo("MC") == 0 ) { - AliMCEvent* mcEvent = MCEvent(); - if (!mcEvent) { - Printf("ERROR: Could not retrieve MC event"); - return; - } - AliStack* stack = mcEvent->Stack(); - if (!stack) { - Printf("ERROR: Could not retrieve MC stack"); - return; - } - - fHistEventStats->Fill(1); - fHistEventStats->Fill(2); - fHistEventStats->Fill(3); - fHistEventStats->Fill(4); //analyzed events - for (Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) { - AliVParticle* track = mcEvent->GetTrack(iTracks); - if (!track) { - Printf("ERROR: Could not receive track %d (mc loop)", iTracks); - continue; - } - - if(!stack->IsPhysicalPrimary(iTracks)) continue; - if((track->Pt() < 0.3) && (track->Pt() > 1.5)) continue; - if(TMath::Abs(track->Eta()) > 0.8) continue; - - Short_t gCharge = track->Charge(); - if(gCharge > 0) nPlus += 1; - if(gCharge < 0) nMinus += 1; - }//particle loop - fHistNPlusNMinusMC->Fill(nPlus,nMinus); - fHistNMultMC->Fill(nPlus+nMinus); - - }//MC analysis level - - -} - -//________________________________________________________________________ -void AliEbyEFluctuationAnalysisTaskTrain::Terminate(Option_t *) { - // Draw result to the screen - // Called once at the end of the query - - fOutputList = dynamic_cast (GetOutputData(1)); - if (!fOutputList) { - printf("ERROR: Output list not available\n"); - return; - } -} +#include "TChain.h" +#include "TTree.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TCanvas.h" +#include "TParticle.h" +#include "TObjArray.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" + +#include "AliStack.h" +#include "AliMCEvent.h" +#include "AliESDEvent.h" +#include "AliESDInputHandler.h" +//#include "AliESDtrackCuts.h" +#include "AliCentrality.h" + +#include "AliEbyEFluctuationAnalysisTaskTrain.h" + +// Event by event charge fluctuation analysis +// Authors: Satyajit Jena and Panos Cristakoglou +// + +ClassImp(AliEbyEFluctuationAnalysisTaskTrain) + +//________________________________________________________________________ +AliEbyEFluctuationAnalysisTaskTrain::AliEbyEFluctuationAnalysisTaskTrain(const char *name) + : AliAnalysisTaskSE(name), fESD(0), fOutputList(0), + fHistEventStats(0), fHistCentrality(0), + fHistNMult(0), fHistNPlusNMinus(0), + fHistNMultMC(0), fHistNPlusNMinusMC(0), + fAnalysisType("ESD"), fAnalysisMode("TPC"), + fCentralityEstimator("V0M"), + fCentralityPercentileMin(0.), fCentralityPercentileMax(5.), + fVxMax(3.), fVyMax(3.), fVzMax(10.), + fMinNumberOfTPCClusters(80), fMaxChi2PerTPCCluster(4.0), + fMaxDCAxy(3.0), fMaxDCAz(3.0) { + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + DefineInput(0, TChain::Class()); + // Output slot #0 id reserved by the base class for AOD + // Output slot #1 writes into a TH1 container + DefineOutput(1, TList::Class()); +} + +//________________________________________________________________________ +void AliEbyEFluctuationAnalysisTaskTrain::UserCreateOutputObjects() { + // Create histograms + // Called once + + fOutputList = new TList(); + fOutputList->SetOwner(); + + //Event stats. + TString gCutName[4] = {"Total","Offline trigger", + "Vertex","Analyzed"}; + fHistEventStats = new TH1F("fHistEventStats", + "Event statistics;;N_{events}", + 4,0.5,4.5); + for(Int_t i = 1; i <= 4; i++) + fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data()); + fOutputList->Add(fHistEventStats); + + //ESD analysis + if(fAnalysisType.CompareTo("ESD") == 0 ) { + fHistCentrality = new TH1F("fHistCentrality",";Centrality bin;Events", + 20,0.5,20.5); + fOutputList->Add(fHistCentrality); + + TString histName; + histName = "fHistNMult"; + fHistNMult = new TH1F(histName.Data(), + ";N_{mult.}", + 800,0,4000); + fOutputList->Add(fHistNMult); + + histName = "fHistNPlusNMinus"; + fHistNPlusNMinus = new TH2F(histName.Data(), + ";N_{+};N_{-}", + 2000,0.5,2000.5,2000,0.5,2000.5); + fOutputList->Add(fHistNPlusNMinus); + }//ESD analysis + else if(fAnalysisType.CompareTo("MC") == 0) { + TString histName = "fHistNMultMC"; + fHistNMultMC = new TH1F(histName.Data(), + ";N_{mult.}", + 800,0,8000); + fOutputList->Add(fHistNMultMC); + + histName = "fHistNPlusNMinusMC"; + fHistNPlusNMinusMC = new TH2F(histName.Data(), + ";N_{+};N_{-}", + 3000,0.5,3000.5,3000,0.5,3000.5); + fOutputList->Add(fHistNPlusNMinusMC); + }//MC analysis + + PostData(1, fOutputList); +} + +//________________________________________________________________________ +void AliEbyEFluctuationAnalysisTaskTrain::UserExec(Option_t *) { + // Main loop + // Called for each event + + Int_t nPlus = 0, nMinus = 0; + + // Post output data. + //ESD analysis + if(fAnalysisType.CompareTo("ESD") == 0) { + fESD = dynamic_cast(InputEvent()); + if (!fESD) { + printf("ERROR: fESD not available\n"); + return; + } + + fHistEventStats->Fill(1); //all events + + //Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB); + //if(isSelected) { + fHistEventStats->Fill(2); //triggered + centrality + + + //Centrality stuff + AliCentrality *centrality = fESD->GetCentrality(); + Int_t nCentrality = 0; + + if(centrality->IsEventInCentralityClass(fCentralityPercentileMin, + fCentralityPercentileMax, + fCentralityEstimator.Data())) { + if(fAnalysisMode.CompareTo("TPC") == 0 ) { + const AliESDVertex *vertex = fESD->GetPrimaryVertexTPC(); + if(vertex) { + if(vertex->GetNContributors() > 0) { + if(vertex->GetZRes() != 0) { + fHistEventStats->Fill(3); //events with a proper vertex + if(TMath::Abs(vertex->GetXv()) < fVxMax) { + if(TMath::Abs(vertex->GetYv()) < fVyMax) { + if(TMath::Abs(vertex->GetZv()) < fVzMax) { + fHistEventStats->Fill(4); //analyzed events + + Printf("Centrality percentile: %lf - Centrality: %d - Total tracks: %d", + centrality->GetCentralityPercentile(fCentralityEstimator.Data()), + nCentrality,fESD->GetNumberOfTracks()); + + + Int_t nAcceptedTracks = 0; + + nAcceptedTracks = fESD->GetNumberOfTracks(); + AliESDtrack* track = 0; + + Float_t dcaXY = 0.0, dcaZ = 0.0; + + for (Int_t iTracks = 0; iTracks < nAcceptedTracks; iTracks++) + { + track = dynamic_cast(fESD->GetTrack(iTracks)); + if (!track) { + printf("ERROR: Could not receive track %d\n", iTracks); + continue; + } + + AliESDtrack *tpcOnlyTrack = new AliESDtrack(); + + if (!track->FillTPCOnlyTrack(*tpcOnlyTrack)) { + delete tpcOnlyTrack; + continue; + } + + tpcOnlyTrack->GetImpactParameters(dcaXY,dcaZ); + + Int_t nClustersITS = track->GetITSclusters(0x0); + Int_t nClustersTPC = track->GetTPCclusters(0x0); + + Float_t chi2PerClusterITS = -1; + if (nClustersITS!=0) + chi2PerClusterITS = track->GetITSchi2()/Float_t(nClustersITS); + Float_t chi2PerClusterTPC = -1; + if (nClustersTPC!=0) + chi2PerClusterTPC = track->GetTPCchi2()/Float_t(nClustersTPC); + + // + + if(nClustersTPC < fMinNumberOfTPCClusters) continue; + if(chi2PerClusterTPC > fMaxChi2PerTPCCluster) continue; + if(TMath::Abs(dcaXY) > fMaxDCAxy) continue; + if(TMath::Abs(dcaZ) > fMaxDCAz) continue; + + Short_t gCharge = tpcOnlyTrack->Charge(); + if(gCharge > 0) nPlus += 1; + if(gCharge < 0) nMinus += 1; + delete tpcOnlyTrack; + } // track loop + + if( nPlus == 0 && nMinus == 0) return; + + // cout<<"=========NPlus: "<Fill(nCentrality); + fHistNPlusNMinus->Fill(nPlus,nMinus); + fHistNMult->Fill(nPlus+nMinus); + + + }//Vz cut + }//Vy cut + }//Vx cut + }//Vz resolution + }//number of contributors + }//valid vertex + }//TPC analysis mode + }//centrality + //}//physics selection + }//ESD analysis level + + //MC analysis + if(fAnalysisType.CompareTo("MC") == 0 ) { + AliMCEvent* mcEvent = MCEvent(); + if (!mcEvent) { + Printf("ERROR: Could not retrieve MC event"); + return; + } + AliStack* stack = mcEvent->Stack(); + if (!stack) { + Printf("ERROR: Could not retrieve MC stack"); + return; + } + + fHistEventStats->Fill(1); + fHistEventStats->Fill(2); + fHistEventStats->Fill(3); + fHistEventStats->Fill(4); //analyzed events + for (Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) { + AliVParticle* track = mcEvent->GetTrack(iTracks); + if (!track) { + Printf("ERROR: Could not receive track %d (mc loop)", iTracks); + continue; + } + + if(!stack->IsPhysicalPrimary(iTracks)) continue; + if((track->Pt() < 0.3) && (track->Pt() > 1.5)) continue; + if(TMath::Abs(track->Eta()) > 0.8) continue; + + Short_t gCharge = track->Charge(); + if(gCharge > 0) nPlus += 1; + if(gCharge < 0) nMinus += 1; + }//particle loop + fHistNPlusNMinusMC->Fill(nPlus,nMinus); + fHistNMultMC->Fill(nPlus+nMinus); + + }//MC analysis level + + +} + +//________________________________________________________________________ +void AliEbyEFluctuationAnalysisTaskTrain::Terminate(Option_t *) { + // Draw result to the screen + // Called once at the end of the query + + fOutputList = dynamic_cast (GetOutputData(1)); + if (!fOutputList) { + printf("ERROR: Output list not available\n"); + return; + } +} diff --git a/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.h b/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.h index ec0cc18f4a2..09e459f11bb 100644 --- a/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.h +++ b/PWGCF/EBYE/Fluctuations/AliEbyEFluctuationAnalysisTaskTrain.h @@ -1,92 +1,92 @@ -#ifndef AliEbyEFluctuationAnalysisTaskTrain_cxx -#define AliEbyEFluctuationAnalysisTaskTrain_cxx - -// Event by event charge fluctuation analysis -// Authors: Satyajit Jena and Panos Cristakoglou - -class TH1F; -class TH2F; -class TString; -class AliESDEvent; -//class AliESDtrackCuts; - -#include "AliAnalysisTaskSE.h" - -//const Int_t nCentralityBins = 20; - -class AliEbyEFluctuationAnalysisTaskTrain : public AliAnalysisTaskSE { - public: - AliEbyEFluctuationAnalysisTaskTrain() : AliAnalysisTaskSE(), fESD(0), fOutputList(0), fHistEventStats(0), fHistCentrality(0), fHistNMult(0), fHistNPlusNMinus(0), fHistNMultMC(0), fHistNPlusNMinusMC(0), fAnalysisType(0), fAnalysisMode(0), fCentralityEstimator("V0M"), fCentralityPercentileMin(0.0), fCentralityPercentileMax(5.0), fVxMax(3.0),fVyMax(3.0), fVzMax(10.), fMinNumberOfTPCClusters(80), fMaxChi2PerTPCCluster(4.0), fMaxDCAxy(3.0), fMaxDCAz(3.0) {} - AliEbyEFluctuationAnalysisTaskTrain(const char *name); - virtual ~AliEbyEFluctuationAnalysisTaskTrain() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - //void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { - //fESDtrackCuts = trackCuts;} - void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { - fVxMax = vx; - fVyMax = vy; - fVzMax = vz; - } - - //Centrality - void SetCentralityEstimator(const char* centralityEstimator) { - fCentralityEstimator = centralityEstimator;} - //void SetCentralityBins20() {fCentralityBins20 = kTRUE;} - void SetCentralityPercentileRange(Float_t min, Float_t max) { - fCentralityPercentileMin=min; - fCentralityPercentileMax=max; - } - - void SetAnalysisType(const char* analysisType) { - fAnalysisType = analysisType;} - void SetAnalysisMode(const char* analysisMode) { - fAnalysisMode = analysisMode;} - - //Track cuts - void SetMinNumberOfTPCClusters(Double_t min) { - fMinNumberOfTPCClusters = min;} - void SetMaxChi2PerTPCCluster(Double_t max) { - fMaxChi2PerTPCCluster = max;} - void SetMaxDCAxy(Double_t max) { - fMaxDCAxy = max;} - void SetMaxDCAz(Double_t max) { - fMaxDCAz = max;} - - private: - AliESDEvent *fESD; //! ESD object - TList *fOutputList; //! Output list - TH1F *fHistEventStats; //!event stats - TH1F *fHistCentrality; //!centrality - TH1F *fHistNMult; //! nmult - TH2F *fHistNPlusNMinus;//!nplus vs nminus correlation - TH1F *fHistNMultMC; //!nmult MC - TH2F *fHistNPlusNMinusMC;//!nplus vs nminus correlation - - //AliESDtrackCuts *fESDtrackCuts; //ESD track cuts - - TString fAnalysisType;//"MC", "ESD", "AOD" - TString fAnalysisMode;//"TPC", "Global" - - TString fCentralityEstimator;//"V0M","TRK","TKL","ZDC","FMD" - //Bool_t fCentralityBins20;//centrality bins of 5% width - Float_t fCentralityPercentileMin, fCentralityPercentileMax; //min-max centrality percentile - - Double_t fVxMax;//vxmax - Double_t fVyMax;//vymax - Double_t fVzMax;//vzmax - - Double_t fMinNumberOfTPCClusters; // - Double_t fMaxChi2PerTPCCluster; // - Double_t fMaxDCAxy, fMaxDCAz;// - - AliEbyEFluctuationAnalysisTaskTrain(const AliEbyEFluctuationAnalysisTaskTrain&); // not implemented - AliEbyEFluctuationAnalysisTaskTrain& operator=(const AliEbyEFluctuationAnalysisTaskTrain&); // not implemented - - ClassDef(AliEbyEFluctuationAnalysisTaskTrain, 1); // example of analysis -}; - -#endif +#ifndef AliEbyEFluctuationAnalysisTaskTrain_cxx +#define AliEbyEFluctuationAnalysisTaskTrain_cxx + +// Event by event charge fluctuation analysis +// Authors: Satyajit Jena and Panos Cristakoglou + +class TH1F; +class TH2F; +class TString; +class AliESDEvent; +//class AliESDtrackCuts; + +#include "AliAnalysisTaskSE.h" + +//const Int_t nCentralityBins = 20; + +class AliEbyEFluctuationAnalysisTaskTrain : public AliAnalysisTaskSE { + public: + AliEbyEFluctuationAnalysisTaskTrain() : AliAnalysisTaskSE(), fESD(0), fOutputList(0), fHistEventStats(0), fHistCentrality(0), fHistNMult(0), fHistNPlusNMinus(0), fHistNMultMC(0), fHistNPlusNMinusMC(0), fAnalysisType(0), fAnalysisMode(0), fCentralityEstimator("V0M"), fCentralityPercentileMin(0.0), fCentralityPercentileMax(5.0), fVxMax(3.0),fVyMax(3.0), fVzMax(10.), fMinNumberOfTPCClusters(80), fMaxChi2PerTPCCluster(4.0), fMaxDCAxy(3.0), fMaxDCAz(3.0) {} + AliEbyEFluctuationAnalysisTaskTrain(const char *name); + virtual ~AliEbyEFluctuationAnalysisTaskTrain() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + //void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) { + //fESDtrackCuts = trackCuts;} + void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { + fVxMax = vx; + fVyMax = vy; + fVzMax = vz; + } + + //Centrality + void SetCentralityEstimator(const char* centralityEstimator) { + fCentralityEstimator = centralityEstimator;} + //void SetCentralityBins20() {fCentralityBins20 = kTRUE;} + void SetCentralityPercentileRange(Float_t min, Float_t max) { + fCentralityPercentileMin=min; + fCentralityPercentileMax=max; + } + + void SetAnalysisType(const char* analysisType) { + fAnalysisType = analysisType;} + void SetAnalysisMode(const char* analysisMode) { + fAnalysisMode = analysisMode;} + + //Track cuts + void SetMinNumberOfTPCClusters(Double_t min) { + fMinNumberOfTPCClusters = min;} + void SetMaxChi2PerTPCCluster(Double_t max) { + fMaxChi2PerTPCCluster = max;} + void SetMaxDCAxy(Double_t max) { + fMaxDCAxy = max;} + void SetMaxDCAz(Double_t max) { + fMaxDCAz = max;} + + private: + AliESDEvent *fESD; //! ESD object + TList *fOutputList; //! Output list + TH1F *fHistEventStats; //!event stats + TH1F *fHistCentrality; //!centrality + TH1F *fHistNMult; //! nmult + TH2F *fHistNPlusNMinus;//!nplus vs nminus correlation + TH1F *fHistNMultMC; //!nmult MC + TH2F *fHistNPlusNMinusMC;//!nplus vs nminus correlation + + //AliESDtrackCuts *fESDtrackCuts; //ESD track cuts + + TString fAnalysisType;//"MC", "ESD", "AOD" + TString fAnalysisMode;//"TPC", "Global" + + TString fCentralityEstimator;//"V0M","TRK","TKL","ZDC","FMD" + //Bool_t fCentralityBins20;//centrality bins of 5% width + Float_t fCentralityPercentileMin, fCentralityPercentileMax; //min-max centrality percentile + + Double_t fVxMax;//vxmax + Double_t fVyMax;//vymax + Double_t fVzMax;//vzmax + + Double_t fMinNumberOfTPCClusters; // + Double_t fMaxChi2PerTPCCluster; // + Double_t fMaxDCAxy, fMaxDCAz;// + + AliEbyEFluctuationAnalysisTaskTrain(const AliEbyEFluctuationAnalysisTaskTrain&); // not implemented + AliEbyEFluctuationAnalysisTaskTrain& operator=(const AliEbyEFluctuationAnalysisTaskTrain&); // not implemented + + ClassDef(AliEbyEFluctuationAnalysisTaskTrain, 1); // example of analysis +}; + +#endif diff --git a/PWGCF/EBYE/LRC/AliLRCBase.h b/PWGCF/EBYE/LRC/AliLRCBase.h index d0ab0fbe1e3..da8768673d7 100644 --- a/PWGCF/EBYE/LRC/AliLRCBase.h +++ b/PWGCF/EBYE/LRC/AliLRCBase.h @@ -1,106 +1,106 @@ -//------------------------------------------------------------------------- -// Description: -// This class is abstact (interface) base class for different classes -// used for track-by-track data analysis in AliAnalysisTaskLRC -// Origin: Andrey Ivanov (SPbSU-CERN) anivanov@cern.ch, -// Igor Altsybeev (SPbSU-CERN) -//------------------------------------------------------------------------- -/* See cxx source for full Copyright notice */ - -#ifndef ALILRCBASE_H -#define ALILRCBASE_H - -#include - - - -// Include -class TList; -class AliLRCBase: public TObject -{ -public: - /*enum LRCparticleType - { - kLRCany = -1, - kLRCother = 0, - kLRCelectron, - kLRCmuon, - kLRCpion, - kLRCkaon, - kLRCproton, - }; - - enum LRCpidFillCondition - { - kLRCpidIgnored, - kLRCpidForBackwardOnly, - kLRCpidForForwardOnly, - kLRCpidForBoth, - };*/ - - - // Constructors - AliLRCBase(): TObject() {}; // Constructor - - // Destructor - virtual ~AliLRCBase(){}; - - virtual Bool_t InitDataMembers() = 0; //Is to be called in CreateOutputObjects method - - // Setters - virtual void SetOutputSlotNumber(Int_t SlotNumber) = 0; // Sets number of output slot for LRCProcessor - // virtual void SetPrintInfo( Bool_t _flagPrintInfo ) = 0; // Print info flag - - // Getters - virtual void GetETAWindows(Double_t &_StartForwardETA,Double_t &_EndForwardETA,Double_t &_StartBakwardETA,Double_t &_EndBakwardETA) = 0; - virtual void GetPhiWindows(Double_t &_StartForwardPhi,Double_t &_EndForwardPhi,Double_t &_StartBakwardPhi,Double_t &_EndBakwardPhi) = 0; - virtual TList* CreateOutput() const = 0 ; // Creates output object - virtual TString GetShortDef() const = 0 ; // Returns fShortDef value - virtual Int_t GetOutputSlotNumber() const = 0 ; // Returns number of output slot for LRCProcessor - - // Track by track event import - virtual void StartEvent() = 0; // Open new Event for track by track event import - virtual void FinishEvent(Bool_t kDontCount = kFALSE) = 0; // Close opened event - - virtual void SetETAWindows( Double_t _StartForwardETA, Double_t _EndForwardETA, Double_t _StartBackwardETA, Double_t _EndBackwardETA ) = 0; // Sets both forward and backward - - virtual void AddTrackPtEta( Double_t Pt, Double_t Eta, Double_t Phi, Short_t Charge = 100, Int_t particleType = -1 ) = 0; // Imports track from the event - virtual void AddTrackForward( Double_t Pt, Double_t Eta, Double_t Phi, Short_t Charge, Int_t particleType ) = 0; // Imports track to the event directly to Forward window - virtual void AddTrackBackward( Double_t Pt, Double_t Eta, Double_t Phi, Short_t Charge, Int_t particleType ) = 0; // Imports track to the event directly to Backward window - virtual void AddTrackPtEtaMixing( Int_t winFB, Double_t Pt, Double_t Eta ,Double_t Phi, Short_t Charge, Int_t particleType = -1 ) = 0; - - virtual void SetEventCentrality(Double_t centrality) = 0; - virtual void SetEventPlane(Double_t eventPlane) = 0; - - virtual void SetParticleType( char* strForwardOrBackward, char* strPid ) = 0; - - virtual void SetForwardWindowPhi(Double_t StartForwardPhi,Double_t EndForwardPhi) = 0; - virtual void SetBackwardWindowPhi(Double_t StartBackwardPhi,Double_t EndBackwardPhi) = 0; - - virtual void SetHistPtRange(Double_t LoPt,Double_t HiPt,Int_t PtBins) = 0; // Sets range for Pt histos axis - - virtual void Terminate() = 0; //was done for yield study - - //virtual void SetPidFillCondition( LRCparticleType particleType, LRCpidFillCondition fillCond ) - // { fPidFillCondition = fillCond; - // fWhichParticleToProcess = particleType; } // how to fill bckwd and fwd hists by pid - - //void SetParticleTypeToFill( LRCparticleType particleType ) { fWhichParticleToProcess = particleType; } // which particle type in this processor is considered - -//protected: - //LRCparticleType fWhichParticleToProcess; // ! LRC processor sense only this type of particles (-1 by default) - //LRCpidFillCondition fPidFillCondition; -private: - - virtual void SetShortDef() =0; // Sets fShortDef according to window paramiters - - AliLRCBase(const AliLRCBase&); // not implemented - AliLRCBase& operator=(const AliLRCBase&); // not implemented - - - - ClassDef(AliLRCBase, 1); -}; - -#endif - +//------------------------------------------------------------------------- +// Description: +// This class is abstact (interface) base class for different classes +// used for track-by-track data analysis in AliAnalysisTaskLRC +// Origin: Andrey Ivanov (SPbSU-CERN) anivanov@cern.ch, +// Igor Altsybeev (SPbSU-CERN) +//------------------------------------------------------------------------- +/* See cxx source for full Copyright notice */ + +#ifndef ALILRCBASE_H +#define ALILRCBASE_H + +#include + + + +// Include +class TList; +class AliLRCBase: public TObject +{ +public: + /*enum LRCparticleType + { + kLRCany = -1, + kLRCother = 0, + kLRCelectron, + kLRCmuon, + kLRCpion, + kLRCkaon, + kLRCproton, + }; + + enum LRCpidFillCondition + { + kLRCpidIgnored, + kLRCpidForBackwardOnly, + kLRCpidForForwardOnly, + kLRCpidForBoth, + };*/ + + + // Constructors + AliLRCBase(): TObject() {}; // Constructor + + // Destructor + virtual ~AliLRCBase(){}; + + virtual Bool_t InitDataMembers() = 0; //Is to be called in CreateOutputObjects method + + // Setters + virtual void SetOutputSlotNumber(Int_t SlotNumber) = 0; // Sets number of output slot for LRCProcessor + // virtual void SetPrintInfo( Bool_t _flagPrintInfo ) = 0; // Print info flag + + // Getters + virtual void GetETAWindows(Double_t &_StartForwardETA,Double_t &_EndForwardETA,Double_t &_StartBakwardETA,Double_t &_EndBakwardETA) = 0; + virtual void GetPhiWindows(Double_t &_StartForwardPhi,Double_t &_EndForwardPhi,Double_t &_StartBakwardPhi,Double_t &_EndBakwardPhi) = 0; + virtual TList* CreateOutput() const = 0 ; // Creates output object + virtual TString GetShortDef() const = 0 ; // Returns fShortDef value + virtual Int_t GetOutputSlotNumber() const = 0 ; // Returns number of output slot for LRCProcessor + + // Track by track event import + virtual void StartEvent() = 0; // Open new Event for track by track event import + virtual void FinishEvent(Bool_t kDontCount = kFALSE) = 0; // Close opened event + + virtual void SetETAWindows( Double_t _StartForwardETA, Double_t _EndForwardETA, Double_t _StartBackwardETA, Double_t _EndBackwardETA ) = 0; // Sets both forward and backward + + virtual void AddTrackPtEta( Double_t Pt, Double_t Eta, Double_t Phi, Short_t Charge = 100, Int_t particleType = -1 ) = 0; // Imports track from the event + virtual void AddTrackForward( Double_t Pt, Double_t Eta, Double_t Phi, Short_t Charge, Int_t particleType ) = 0; // Imports track to the event directly to Forward window + virtual void AddTrackBackward( Double_t Pt, Double_t Eta, Double_t Phi, Short_t Charge, Int_t particleType ) = 0; // Imports track to the event directly to Backward window + virtual void AddTrackPtEtaMixing( Int_t winFB, Double_t Pt, Double_t Eta ,Double_t Phi, Short_t Charge, Int_t particleType = -1 ) = 0; + + virtual void SetEventCentrality(Double_t centrality) = 0; + virtual void SetEventPlane(Double_t eventPlane) = 0; + + virtual void SetParticleType( char* strForwardOrBackward, char* strPid ) = 0; + + virtual void SetForwardWindowPhi(Double_t StartForwardPhi,Double_t EndForwardPhi) = 0; + virtual void SetBackwardWindowPhi(Double_t StartBackwardPhi,Double_t EndBackwardPhi) = 0; + + virtual void SetHistPtRange(Double_t LoPt,Double_t HiPt,Int_t PtBins) = 0; // Sets range for Pt histos axis + + virtual void Terminate() = 0; //was done for yield study + + //virtual void SetPidFillCondition( LRCparticleType particleType, LRCpidFillCondition fillCond ) + // { fPidFillCondition = fillCond; + // fWhichParticleToProcess = particleType; } // how to fill bckwd and fwd hists by pid + + //void SetParticleTypeToFill( LRCparticleType particleType ) { fWhichParticleToProcess = particleType; } // which particle type in this processor is considered + +//protected: + //LRCparticleType fWhichParticleToProcess; // ! LRC processor sense only this type of particles (-1 by default) + //LRCpidFillCondition fPidFillCondition; +private: + + virtual void SetShortDef() =0; // Sets fShortDef according to window paramiters + + AliLRCBase(const AliLRCBase&); // not implemented + AliLRCBase& operator=(const AliLRCBase&); // not implemented + + + + ClassDef(AliLRCBase, 1); +}; + +#endif + diff --git a/PWGCF/EBYE/LRC/Test/TestNN.C b/PWGCF/EBYE/LRC/Test/TestNN.C index 065fae55c99..61f517df6a7 100755 --- a/PWGCF/EBYE/LRC/Test/TestNN.C +++ b/PWGCF/EBYE/LRC/Test/TestNN.C @@ -1,41 +1,41 @@ -{ - gSystem->Load("libPWG2LRC.so"); - TH1D *gaus = new TH1D("gaus","source hist",1000,-5,5); - gaus->FillRandom("gaus",10000); - TH2D *source = new TH2D("NN","NN Test",100,0,100,100,0,100); - Double_t x, y; - for (Int_t i=0;i<10000;i++) - { - x = 10 * (gaus->GetRandom() + 5); - y = 0.678 * (x + gaus->GetRandom() * 15); - //Create source 2D histogram with correlation coefficient 0.678 - source->Fill(x,y); - } - //Create TNN class encapsulated NN correlation algorithms - //2D histogram pass into TNN constructor - AliLRCNN final1("name", source); - - TCanvas *c1 = new TCanvas("c1","c1",800,1000); - c1->Divide(3); - c1->cd(1); - source->Draw(); - c1->cd(2); - final1.Draw_abs(); - c1->cd(3); - final1.Draw_rel(); - c1->cd(); - - AliLRCNN final2; - final2.MakeHistogramm("name", source); - - TCanvas *c2 = new TCanvas("c2","c2",800,1000); - c2->Divide(3); - c2->cd(1); - source->Draw(); - c2->cd(2); - final2.Draw_abs(); - c2->cd(3); - final2.Draw_rel(); - c2->cd(); - +{ + gSystem->Load("libPWG2LRC.so"); + TH1D *gaus = new TH1D("gaus","source hist",1000,-5,5); + gaus->FillRandom("gaus",10000); + TH2D *source = new TH2D("NN","NN Test",100,0,100,100,0,100); + Double_t x, y; + for (Int_t i=0;i<10000;i++) + { + x = 10 * (gaus->GetRandom() + 5); + y = 0.678 * (x + gaus->GetRandom() * 15); + //Create source 2D histogram with correlation coefficient 0.678 + source->Fill(x,y); + } + //Create TNN class encapsulated NN correlation algorithms + //2D histogram pass into TNN constructor + AliLRCNN final1("name", source); + + TCanvas *c1 = new TCanvas("c1","c1",800,1000); + c1->Divide(3); + c1->cd(1); + source->Draw(); + c1->cd(2); + final1.Draw_abs(); + c1->cd(3); + final1.Draw_rel(); + c1->cd(); + + AliLRCNN final2; + final2.MakeHistogramm("name", source); + + TCanvas *c2 = new TCanvas("c2","c2",800,1000); + c2->Divide(3); + c2->cd(1); + source->Draw(); + c2->cd(2); + final2.Draw_abs(); + c2->cd(3); + final2.Draw_rel(); + c2->cd(); + } \ No newline at end of file diff --git a/PWGCF/EBYE/LRC/Test/TestPtN.C b/PWGCF/EBYE/LRC/Test/TestPtN.C index 46e729583a1..4e4f194619b 100755 --- a/PWGCF/EBYE/LRC/Test/TestPtN.C +++ b/PWGCF/EBYE/LRC/Test/TestPtN.C @@ -1,43 +1,43 @@ -{ - gSystem->Load("libPWG2LRC.so"); - TH1D *gaus = new TH1D("source","source hist",1000,-5,5); - gaus->FillRandom("gaus",10000); - TH2D *source = new TH2D("PtN","PtN Test",100,0,100,100,0,5); - TH2D *err = new TH2D("err","errl hist",100,0,100,100,0,1); - Double_t x, y; - for (Int_t i=0;i<10000;i++) - { - x = 10 * (gaus->GetRandom() + 5); - y = 0.678 * (x/20.0 + gaus->GetRandom()); - //Create source 2D histogram with correlation coefficient 0.678 - source->Fill(x,y); - err->Fill(x,1/x); - } - //Create TNN class encapsulated NN correlation algorithms - //2D histogram pass into TNN constructor - AliLRCPtN final1("name", source, 0.35, err); - - TCanvas *c1 = new TCanvas("c1","c1",800,1000); - c1->Divide(3); - c1->cd(1); - source->Draw(); - c1->cd(2); - final1.Draw_abs(); - c1->cd(3); - final1.Draw_rel(); - c1->cd(); - - AliLRCPtN final2; - final2.MakeHistogramm("name", source, 0.35, err); - - TCanvas *c2 = new TCanvas("c2","c2",800,1000); - c2->Divide(3); - c2->cd(1); - source->Draw(); - c2->cd(2); - final2.Draw_abs(); - c2->cd(3); - final2.Draw_rel(); - c2->cd(); - +{ + gSystem->Load("libPWG2LRC.so"); + TH1D *gaus = new TH1D("source","source hist",1000,-5,5); + gaus->FillRandom("gaus",10000); + TH2D *source = new TH2D("PtN","PtN Test",100,0,100,100,0,5); + TH2D *err = new TH2D("err","errl hist",100,0,100,100,0,1); + Double_t x, y; + for (Int_t i=0;i<10000;i++) + { + x = 10 * (gaus->GetRandom() + 5); + y = 0.678 * (x/20.0 + gaus->GetRandom()); + //Create source 2D histogram with correlation coefficient 0.678 + source->Fill(x,y); + err->Fill(x,1/x); + } + //Create TNN class encapsulated NN correlation algorithms + //2D histogram pass into TNN constructor + AliLRCPtN final1("name", source, 0.35, err); + + TCanvas *c1 = new TCanvas("c1","c1",800,1000); + c1->Divide(3); + c1->cd(1); + source->Draw(); + c1->cd(2); + final1.Draw_abs(); + c1->cd(3); + final1.Draw_rel(); + c1->cd(); + + AliLRCPtN final2; + final2.MakeHistogramm("name", source, 0.35, err); + + TCanvas *c2 = new TCanvas("c2","c2",800,1000); + c2->Divide(3); + c2->cd(1); + source->Draw(); + c2->cd(2); + final2.Draw_abs(); + c2->cd(3); + final2.Draw_rel(); + c2->cd(); + } \ No newline at end of file diff --git a/PWGCF/EBYE/LRC/Test/TestPtPt.C b/PWGCF/EBYE/LRC/Test/TestPtPt.C index fef6ac4f61a..424ea62e489 100755 --- a/PWGCF/EBYE/LRC/Test/TestPtPt.C +++ b/PWGCF/EBYE/LRC/Test/TestPtPt.C @@ -1,47 +1,47 @@ -{ - gSystem->Load("libPWG2LRC.so"); -Int_t errybins = 20000; - Double_t errymin = 0.000025, - errymax = 1.000025; - - TH1D *gaus = new TH1D("source","source hist",1000,-5,5); - gaus->FillRandom("gaus",10000); - TH2D *source = new TH2D("PtN","PtN Test",100,0,5,100,0,5); - TH2D *err = new TH2D("err","errl hist",100,0,5,errybins,errymin,errymax); - Double_t x, y; - for (Int_t i=0;i<10000;i++) - { - x =(gaus->GetRandom()+5)/2.0; - y = 0.678 * (x + gaus->GetRandom()); - //Create source 2D histogram with correlation coefficient 0.678 - source->Fill(x,y); - err->Fill(x,1/((gaus->GetRandom()+5))); - } - //Create TNN class encapsulated NN correlation algorithms - //2D histogram pass into TNN constructor - AliLRCPtPt final1("name", source, 0.35, err); - - TCanvas *c1 = new TCanvas("c1","c1",800,1000); - c1->Divide(3); - c1->cd(1); - source->Draw(); - c1->cd(2); - final1.Draw_abs(); - c1->cd(3); - final1.Draw_rel(); - c1->cd(); - - AliLRCPtPt final2; - final2.MakeHistogramm("name", source, 0.35, err); - - TCanvas *c2 = new TCanvas("c2","c2",800,1000); - c2->Divide(3); - c2->cd(1); - source->Draw(); - c2->cd(2); - final2.Draw_abs(); - c2->cd(3); - final2.Draw_rel(); - c2->cd(); - +{ + gSystem->Load("libPWG2LRC.so"); +Int_t errybins = 20000; + Double_t errymin = 0.000025, + errymax = 1.000025; + + TH1D *gaus = new TH1D("source","source hist",1000,-5,5); + gaus->FillRandom("gaus",10000); + TH2D *source = new TH2D("PtN","PtN Test",100,0,5,100,0,5); + TH2D *err = new TH2D("err","errl hist",100,0,5,errybins,errymin,errymax); + Double_t x, y; + for (Int_t i=0;i<10000;i++) + { + x =(gaus->GetRandom()+5)/2.0; + y = 0.678 * (x + gaus->GetRandom()); + //Create source 2D histogram with correlation coefficient 0.678 + source->Fill(x,y); + err->Fill(x,1/((gaus->GetRandom()+5))); + } + //Create TNN class encapsulated NN correlation algorithms + //2D histogram pass into TNN constructor + AliLRCPtPt final1("name", source, 0.35, err); + + TCanvas *c1 = new TCanvas("c1","c1",800,1000); + c1->Divide(3); + c1->cd(1); + source->Draw(); + c1->cd(2); + final1.Draw_abs(); + c1->cd(3); + final1.Draw_rel(); + c1->cd(); + + AliLRCPtPt final2; + final2.MakeHistogramm("name", source, 0.35, err); + + TCanvas *c2 = new TCanvas("c2","c2",800,1000); + c2->Divide(3); + c2->cd(1); + source->Draw(); + c2->cd(2); + final2.Draw_abs(); + c2->cd(3); + final2.Draw_rel(); + c2->cd(); + } \ No newline at end of file diff --git a/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFluc.h b/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFluc.h index 446907d1c65..182d4181287 100755 --- a/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFluc.h +++ b/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFluc.h @@ -1,86 +1,86 @@ -#ifndef AliAnalysisTaskPtFluc_cxx -#define AliAnalysisTaskPtFluc_cxx - -// Analysis of Pt Fluctuations (pp) -// Author: Stefan Heckel -// Version of pp task: 11.4, 11.06.2012 - - -class TList; -class TH1F; -class TH2F; -class TRandom; - -class AliESDEvent; -class AliESDtrack; -class AliESDtrackCuts; - - -#include "AliAnalysisTaskSE.h" - - -class AliAnalysisTaskPtFluc : public AliAnalysisTaskSE { - public: - AliAnalysisTaskPtFluc(const char *name = "AliAnalysisTaskPtFluc"); - virtual ~AliAnalysisTaskPtFluc(); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetAliESDtrackCuts(AliESDtrackCuts* esdTrackCuts) {fESDTrackCuts = esdTrackCuts;} - void SetMaxVertexZ(Float_t vZ) {fMaxVertexZ = vZ;} - void SetMaxVertexZDiff1(Float_t vZDiff1) {fMaxVertexZDiff1 = vZDiff1;} - void SetNContributors(Int_t nCont) {fNContributors = nCont;} - void SetMC(Bool_t bMC) {fMC = bMC;} - void SetMCType(Int_t bMCType) {fMCType = bMCType;} - - - private: - AliESDEvent *fESD; // ESD object - AliMCEvent *fMCev; // MC object - TRandom *fRandom3; // Random generator - TList* fOutputList; // List where all the output files are stored - TH1F* fPtSpec; // Pt spectrum - data or MC truth - TH1F* fPtSpec2; // Pt spectrum 2 - MC ESD - TH1F* fMult; // Multiplicity distribution - TH1F* fEta; // Eta distribution - TH1F* fEtaPhiPlus; // Phi distribution for positive eta - TH1F* fEtaPhiMinus; // Phi distribution for negative eta - TH1F* fVtxZ; // Vertex Z distribution after physics selection before any further cuts - TH1F* fVtxZCut; // Vertex Z dist. after vertex Z cut - TH1F* fVtxZCont; // Vertex Z dist. after vertex cut on nContributors - TH1F* fVtxZCutDiff; // Vertex Z dist. after vertex cut on vtx Z Difference - TH1F* fVtxZPileup; // Vertex Z dist. after pileup rejection - TH1F* fVtxZTrackCuts; // Vertex Z dist. after all event and track cuts - TH1F* fVtxZDiff1; // Difference 1 between vertex Z distributions - TH1F* fVtxZDiff2; // Difference 2 between vertex Z distributions - TH1F* fVtxZDiff3; // Difference 3 between vertex Z distributions - TH1F* fVtxZDiff1b; // Difference 1 between vertex Z distributions after all cuts - TH1F* fVtxZDiff2b; // Difference 2 between vertex Z distributions after all cuts - TH1F* fVtxZDiff3b; // Difference 3 between vertex Z distributions after all cuts - TH1F* fEventMeanPt; // Event mean pT distribution - TH1F* fEventMeanPtSq; // Event mean pT squared dist. - TH2F* fEventMeanPtMult; // Event mean pT distribution vs. multiplicity (scatter plot) - TH1F* fMultEventMeanPt; // Event mean pT for multiplicity bins - TH1F* fMultEventMeanPtSq; // Event mean pT squared for mult. bins - TH1F* fTwoPartCorrEv; // Two-particle correlator for multiplicity bins - TH1F* fTwoPartCorrEvSq; // Two-part. corr. squared for mult. bins - TH1F* fTwoPartCorrEvSample; // Two-part. corr. for the whole sample - TH1F* fTwoPartCorrEvSampleSq; // Two-part. corr. squared for the whole sample - - AliESDtrackCuts* fESDTrackCuts; // Esd track cuts - Float_t fMaxVertexZ; // Maximum value for Vertex Z position - Float_t fMaxVertexZDiff1; // Maximum value for Vertex Z difference TPC - global - Int_t fNContributors; // Minimum contributors to the vertex - Bool_t fMC; // Check for MC - Int_t fMCType; // Set MC type: ESD, MC truth (generator level), mod. MC truth - - AliAnalysisTaskPtFluc(const AliAnalysisTaskPtFluc&); // not implemented - AliAnalysisTaskPtFluc& operator=(const AliAnalysisTaskPtFluc&); // not implemented - - ClassDef(AliAnalysisTaskPtFluc, 1); - -}; - -#endif +#ifndef AliAnalysisTaskPtFluc_cxx +#define AliAnalysisTaskPtFluc_cxx + +// Analysis of Pt Fluctuations (pp) +// Author: Stefan Heckel +// Version of pp task: 11.4, 11.06.2012 + + +class TList; +class TH1F; +class TH2F; +class TRandom; + +class AliESDEvent; +class AliESDtrack; +class AliESDtrackCuts; + + +#include "AliAnalysisTaskSE.h" + + +class AliAnalysisTaskPtFluc : public AliAnalysisTaskSE { + public: + AliAnalysisTaskPtFluc(const char *name = "AliAnalysisTaskPtFluc"); + virtual ~AliAnalysisTaskPtFluc(); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetAliESDtrackCuts(AliESDtrackCuts* esdTrackCuts) {fESDTrackCuts = esdTrackCuts;} + void SetMaxVertexZ(Float_t vZ) {fMaxVertexZ = vZ;} + void SetMaxVertexZDiff1(Float_t vZDiff1) {fMaxVertexZDiff1 = vZDiff1;} + void SetNContributors(Int_t nCont) {fNContributors = nCont;} + void SetMC(Bool_t bMC) {fMC = bMC;} + void SetMCType(Int_t bMCType) {fMCType = bMCType;} + + + private: + AliESDEvent *fESD; // ESD object + AliMCEvent *fMCev; // MC object + TRandom *fRandom3; // Random generator + TList* fOutputList; // List where all the output files are stored + TH1F* fPtSpec; // Pt spectrum - data or MC truth + TH1F* fPtSpec2; // Pt spectrum 2 - MC ESD + TH1F* fMult; // Multiplicity distribution + TH1F* fEta; // Eta distribution + TH1F* fEtaPhiPlus; // Phi distribution for positive eta + TH1F* fEtaPhiMinus; // Phi distribution for negative eta + TH1F* fVtxZ; // Vertex Z distribution after physics selection before any further cuts + TH1F* fVtxZCut; // Vertex Z dist. after vertex Z cut + TH1F* fVtxZCont; // Vertex Z dist. after vertex cut on nContributors + TH1F* fVtxZCutDiff; // Vertex Z dist. after vertex cut on vtx Z Difference + TH1F* fVtxZPileup; // Vertex Z dist. after pileup rejection + TH1F* fVtxZTrackCuts; // Vertex Z dist. after all event and track cuts + TH1F* fVtxZDiff1; // Difference 1 between vertex Z distributions + TH1F* fVtxZDiff2; // Difference 2 between vertex Z distributions + TH1F* fVtxZDiff3; // Difference 3 between vertex Z distributions + TH1F* fVtxZDiff1b; // Difference 1 between vertex Z distributions after all cuts + TH1F* fVtxZDiff2b; // Difference 2 between vertex Z distributions after all cuts + TH1F* fVtxZDiff3b; // Difference 3 between vertex Z distributions after all cuts + TH1F* fEventMeanPt; // Event mean pT distribution + TH1F* fEventMeanPtSq; // Event mean pT squared dist. + TH2F* fEventMeanPtMult; // Event mean pT distribution vs. multiplicity (scatter plot) + TH1F* fMultEventMeanPt; // Event mean pT for multiplicity bins + TH1F* fMultEventMeanPtSq; // Event mean pT squared for mult. bins + TH1F* fTwoPartCorrEv; // Two-particle correlator for multiplicity bins + TH1F* fTwoPartCorrEvSq; // Two-part. corr. squared for mult. bins + TH1F* fTwoPartCorrEvSample; // Two-part. corr. for the whole sample + TH1F* fTwoPartCorrEvSampleSq; // Two-part. corr. squared for the whole sample + + AliESDtrackCuts* fESDTrackCuts; // Esd track cuts + Float_t fMaxVertexZ; // Maximum value for Vertex Z position + Float_t fMaxVertexZDiff1; // Maximum value for Vertex Z difference TPC - global + Int_t fNContributors; // Minimum contributors to the vertex + Bool_t fMC; // Check for MC + Int_t fMCType; // Set MC type: ESD, MC truth (generator level), mod. MC truth + + AliAnalysisTaskPtFluc(const AliAnalysisTaskPtFluc&); // not implemented + AliAnalysisTaskPtFluc& operator=(const AliAnalysisTaskPtFluc&); // not implemented + + ClassDef(AliAnalysisTaskPtFluc, 1); + +}; + +#endif diff --git a/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFlucPbPb.h b/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFlucPbPb.h index ac126c3103a..0c0dcb965e2 100644 --- a/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFlucPbPb.h +++ b/PWGCF/EBYE/MeanPtFluctuations/AliAnalysisTaskPtFlucPbPb.h @@ -1,134 +1,134 @@ -#ifndef AliAnalysisTaskPtFlucPbPb_cxx -#define AliAnalysisTaskPtFlucPbPb_cxx - -// Analysis of Pt Fluctuations (PbPb) -// Author: Stefan Heckel -// Version of PbPb task: 9.2, 03.07.2012 - - -class TList; -class TH1F; -class TH2F; -class TRandom; - -class AliESDEvent; -class AliESDtrack; -class AliESDtrackCuts; - - -#include "AliAnalysisTaskSE.h" - - -class AliAnalysisTaskPtFlucPbPb : public AliAnalysisTaskSE { - public: - AliAnalysisTaskPtFlucPbPb(const char *name = "AliAnalysisTaskPtFlucPbPb"); - virtual ~AliAnalysisTaskPtFlucPbPb(); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetAliESDtrackCuts(AliESDtrackCuts* esdTrackCuts) {fESDTrackCuts = esdTrackCuts;} - void SetMaxVertexZ(Float_t vZ) {fMaxVertexZ = vZ;} - void SetMaxVertexZDiff1(Float_t vZDiff1) {fMaxVertexZDiff1 = vZDiff1;} - void SetNContributors(Int_t nCont) {fNContributors = nCont;} - void SetUseCentrality(Int_t cent) {fUseCentrality = cent;} - void SetMC(Bool_t bMC) {fMC = bMC;} - void SetMCType(Int_t bMCType) {fMCType = bMCType;} - void SetMCAMPT(Bool_t bMCAMPT) {fMCAMPT = bMCAMPT;} - - - private: - AliESDEvent *fESD; // ESD object - AliMCEvent *fMCev; // MC object - TRandom *fRandom3; // Random generator - TList* fOutputList; // List where all the output files are stored - TH1F* fPtSpec; // Pt spectrum - data or MC truth - TH1F* fPtSpec2; // Pt spectrum 2 - MC ESD - TH1F* fMult; // Multiplicity distribution - TH1F* fMultNbins; // Multiplicity distribution for single mult. bins - TH1F* fMultSum; // Sum of number of tracks of all events for each multiplicity bin - TH1F* fMultSumPt; // Sum of pTs for multiplicity bins - TH1F* fMultNrPairs; // Sum of number of pairs in mult. bins - TH1F* fMult1; // Multiplicity distribution (first bin divided in 4) - TH1F* fMultSum1; // Sum of number of tracks of all events for each multiplicity bin (first bin divided in 4) - TH1F* fMultSumPt1; // Sum of pTs for multiplicity bins (first bin divided in 4) - TH1F* fMultNrPairs1; // Sum of number of pairs in mult. bins (first bin divided in 4) - TH1F* fMult10; // Multiplicity distribution (five bins in 0 < Nacc < 50) - TH1F* fMultSum10; // Sum of number of tracks of all events for each multiplicity bin (five bins in 0 < Nacc < 50) - TH1F* fMultSumPt10; // Sum of pTs for multiplicity bins (five bins in 0 < Nacc < 50) - TH1F* fMultNrPairs10; // Sum of number of pairs in mult. bins (five bins in 0 < Nacc < 50) - TH1F* fMult80; // Multiplicity distribution -- (only for events with centrality < 80%) - TH1F* fMultSum80; // Sum of number of tracks of all events for each multiplicity bin -- ( " < 80%) - TH1F* fMultSumPt80; // Sum of pTs for multiplicity bins-- ( " < 80%) - TH1F* fMultNrPairs80; // Sum of number of pairs in mult. bins -- ( " < 80%) - TH1F* fMult801; // Multiplicity distribution (first bin divided in 4) -- (only for events with centrality < 80%) - TH1F* fMultSum801; // Sum of number of tracks of all events for each multiplicity bin (first bin divided in 4) -- ( " < 80%) - TH1F* fMultSumPt801; // Sum of pTs for multiplicity bins (first bin divided in 4) -- ( " < 80%) - TH1F* fMultNrPairs801; // Sum of number of pairs in mult. bins (first bin divided in 4) -- ( " < 80%) - TH1F* fMult810; // Multiplicity distribution (five bins in 0 < Nacc < 50) -- ( " < 80%) - TH1F* fMultSum810; // Sum of number of tracks of all events for each multiplicity bin (five bins in 0 < Nacc < 50)--( " < 80%) - TH1F* fMultSumPt810; // Sum of pTs for multiplicity bins (five bins in 0 < Nacc < 50) -- ( " < 80%) - TH1F* fMultNrPairs810; // Sum of number of pairs in mult. bins (five bins in 0 < Nacc < 50) -- ( " < 80%) - TH1F* fCent; // Centrality distribution - TH1F* fCentSum; // Sum of number of tracks of all events for each centrality bin - TH1F* fCentSumPt; // Sum of pTs for centrality bins - TH1F* fCentNrPairs; // Sum of number of pairs in cent. bins - TH1F* fEta; // Eta distribution - TH1F* fEtaPhiPlus; // Phi distribution for positive eta - TH1F* fEtaPhiMinus; // Phi distribution for negative eta - TH1F* fVtxZ; // Vertex Z distribution after physics selection before any further cuts - TH1F* fVtxZCut; // Vertex Z dist. after vertex Z cut - TH1F* fVtxZCont; // Vertex Z dist. after vertex cut on nContributors - TH1F* fVtxZCutDiff; // Vertex Z dist. after vertex cut on vtx Z Difference - TH1F* fVtxZTrackCuts; // Vertex Z dist. after all event and track cuts - TH1F* fVtxZDiff1; // Difference 1 between vertex Z distributions - TH1F* fVtxZDiff2; // Difference 2 between vertex Z distributions - TH1F* fVtxZDiff3; // Difference 3 between vertex Z distributions - TH1F* fVtxZDiff1b; // Difference 1 between vertex Z distributions after all cuts - TH1F* fVtxZDiff2b; // Difference 2 between vertex Z distributions after all cuts - TH1F* fVtxZDiff3b; // Difference 3 between vertex Z distributions after all cuts - TH1F* fEventMeanPt; // Event mean pT distribution - TH1F* fEventMeanPtSq; // Event mean pT squared dist. - TH2F* fEventMeanPtMult; // Event mean pT distribution vs. multiplicity (scatter plot) - TH1F* fMultEventMeanPt; // Event mean pT for multiplicity bins - TH1F* fMultEventMeanPtSq; // Event mean pT squared for mult. bins - TH1F* fMultEventMeanPtNbins; // Event mean pT for single mult. bins - TH1F* fMultEventMeanPtSqNbins;// Event mean pT squared for single mult. bins - TH1F* fCentEventMeanPt; // Event mean pT for centrality bins - TH1F* fCentEventMeanPtSq; // Event mean pT squared for cent. bins - TH1F* fEventMeanPtCent05; // Event mean pT distribution in cent bin 0-5% - TH1F* fEventMeanPtCent2030; // Event mean pT distribution in cent bin 20-30% - TH1F* fEventMeanPtCent7080; // Event mean pT distribution in cent bin 70-80% - TH1F* fTwoPartCorrEv; // Two-particle correlator for multiplicity bins - TH1F* fTwoPartCorrEvSq; // Two-part. corr. squared for mult. bins - TH1F* fTwoPartCorrEv1; // Two-particle correlator for multiplicity bins (first bin divided in 4) - TH1F* fTwoPartCorrEvSq1; // Two-part. corr. squared for mult. bins (first bin divided in 4) - TH1F* fTwoPartCorrEv10; // Two-particle correlator for multiplicity bins (five bins in 0 < Nacc < 50) - TH1F* fTwoPartCorrEvSq10; // Two-part. corr. squared for mult. bins (five bins in 0 < Nacc < 50) - TH1F* fTwoPartCorrEv80; // Two-particle correlator for multiplicity bins -- ( " < 80%) - TH1F* fTwoPartCorrEvSq80; // Two-part. corr. squared for mult. bins -- ( " < 80%) - TH1F* fTwoPartCorrEv801; // Two-particle correlator for multiplicity bins (first bin divided in 4) -- ( " < 80%) - TH1F* fTwoPartCorrEvSq801; // Two-part. corr. squared for mult. bins (first bin divided in 4) -- ( " < 80%) - TH1F* fTwoPartCorrEv810; // Two-particle correlator for multiplicity bins (five bins in 0 < Nacc < 50) -- ( " < 80%) - TH1F* fTwoPartCorrEvSq810; // Two-part. corr. squared for mult. bins (five bins in 0 < Nacc < 50) -- ( " < 80%) - TH1F* fTwoPartCorrEvCent; // Two-particle correlator for centrality bins - TH1F* fTwoPartCorrEvCentSq; // Two-part. corr. squared for cent. bins - - AliESDtrackCuts* fESDTrackCuts; // Esd track cuts - Float_t fMaxVertexZ; // Maximum value for Vertex Z position - Float_t fMaxVertexZDiff1; // Maximum value for Vertex Z difference TPC - global - Int_t fNContributors; // Minimum contributors to the vertex - Int_t fUseCentrality; // Use centrality (0=off, 1=VZERO, 2=SPD(not yet implemented)) - Bool_t fMC; // Check for MC - Int_t fMCType; // Set MC type: ESD, MC truth (generator level), mod. MC truth - Bool_t fMCAMPT; // Set MC = AMPT or other - - AliAnalysisTaskPtFlucPbPb(const AliAnalysisTaskPtFlucPbPb&); // not implemented - AliAnalysisTaskPtFlucPbPb& operator=(const AliAnalysisTaskPtFlucPbPb&); // not implemented - - ClassDef(AliAnalysisTaskPtFlucPbPb, 1); - -}; - -#endif +#ifndef AliAnalysisTaskPtFlucPbPb_cxx +#define AliAnalysisTaskPtFlucPbPb_cxx + +// Analysis of Pt Fluctuations (PbPb) +// Author: Stefan Heckel +// Version of PbPb task: 9.2, 03.07.2012 + + +class TList; +class TH1F; +class TH2F; +class TRandom; + +class AliESDEvent; +class AliESDtrack; +class AliESDtrackCuts; + + +#include "AliAnalysisTaskSE.h" + + +class AliAnalysisTaskPtFlucPbPb : public AliAnalysisTaskSE { + public: + AliAnalysisTaskPtFlucPbPb(const char *name = "AliAnalysisTaskPtFlucPbPb"); + virtual ~AliAnalysisTaskPtFlucPbPb(); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetAliESDtrackCuts(AliESDtrackCuts* esdTrackCuts) {fESDTrackCuts = esdTrackCuts;} + void SetMaxVertexZ(Float_t vZ) {fMaxVertexZ = vZ;} + void SetMaxVertexZDiff1(Float_t vZDiff1) {fMaxVertexZDiff1 = vZDiff1;} + void SetNContributors(Int_t nCont) {fNContributors = nCont;} + void SetUseCentrality(Int_t cent) {fUseCentrality = cent;} + void SetMC(Bool_t bMC) {fMC = bMC;} + void SetMCType(Int_t bMCType) {fMCType = bMCType;} + void SetMCAMPT(Bool_t bMCAMPT) {fMCAMPT = bMCAMPT;} + + + private: + AliESDEvent *fESD; // ESD object + AliMCEvent *fMCev; // MC object + TRandom *fRandom3; // Random generator + TList* fOutputList; // List where all the output files are stored + TH1F* fPtSpec; // Pt spectrum - data or MC truth + TH1F* fPtSpec2; // Pt spectrum 2 - MC ESD + TH1F* fMult; // Multiplicity distribution + TH1F* fMultNbins; // Multiplicity distribution for single mult. bins + TH1F* fMultSum; // Sum of number of tracks of all events for each multiplicity bin + TH1F* fMultSumPt; // Sum of pTs for multiplicity bins + TH1F* fMultNrPairs; // Sum of number of pairs in mult. bins + TH1F* fMult1; // Multiplicity distribution (first bin divided in 4) + TH1F* fMultSum1; // Sum of number of tracks of all events for each multiplicity bin (first bin divided in 4) + TH1F* fMultSumPt1; // Sum of pTs for multiplicity bins (first bin divided in 4) + TH1F* fMultNrPairs1; // Sum of number of pairs in mult. bins (first bin divided in 4) + TH1F* fMult10; // Multiplicity distribution (five bins in 0 < Nacc < 50) + TH1F* fMultSum10; // Sum of number of tracks of all events for each multiplicity bin (five bins in 0 < Nacc < 50) + TH1F* fMultSumPt10; // Sum of pTs for multiplicity bins (five bins in 0 < Nacc < 50) + TH1F* fMultNrPairs10; // Sum of number of pairs in mult. bins (five bins in 0 < Nacc < 50) + TH1F* fMult80; // Multiplicity distribution -- (only for events with centrality < 80%) + TH1F* fMultSum80; // Sum of number of tracks of all events for each multiplicity bin -- ( " < 80%) + TH1F* fMultSumPt80; // Sum of pTs for multiplicity bins-- ( " < 80%) + TH1F* fMultNrPairs80; // Sum of number of pairs in mult. bins -- ( " < 80%) + TH1F* fMult801; // Multiplicity distribution (first bin divided in 4) -- (only for events with centrality < 80%) + TH1F* fMultSum801; // Sum of number of tracks of all events for each multiplicity bin (first bin divided in 4) -- ( " < 80%) + TH1F* fMultSumPt801; // Sum of pTs for multiplicity bins (first bin divided in 4) -- ( " < 80%) + TH1F* fMultNrPairs801; // Sum of number of pairs in mult. bins (first bin divided in 4) -- ( " < 80%) + TH1F* fMult810; // Multiplicity distribution (five bins in 0 < Nacc < 50) -- ( " < 80%) + TH1F* fMultSum810; // Sum of number of tracks of all events for each multiplicity bin (five bins in 0 < Nacc < 50)--( " < 80%) + TH1F* fMultSumPt810; // Sum of pTs for multiplicity bins (five bins in 0 < Nacc < 50) -- ( " < 80%) + TH1F* fMultNrPairs810; // Sum of number of pairs in mult. bins (five bins in 0 < Nacc < 50) -- ( " < 80%) + TH1F* fCent; // Centrality distribution + TH1F* fCentSum; // Sum of number of tracks of all events for each centrality bin + TH1F* fCentSumPt; // Sum of pTs for centrality bins + TH1F* fCentNrPairs; // Sum of number of pairs in cent. bins + TH1F* fEta; // Eta distribution + TH1F* fEtaPhiPlus; // Phi distribution for positive eta + TH1F* fEtaPhiMinus; // Phi distribution for negative eta + TH1F* fVtxZ; // Vertex Z distribution after physics selection before any further cuts + TH1F* fVtxZCut; // Vertex Z dist. after vertex Z cut + TH1F* fVtxZCont; // Vertex Z dist. after vertex cut on nContributors + TH1F* fVtxZCutDiff; // Vertex Z dist. after vertex cut on vtx Z Difference + TH1F* fVtxZTrackCuts; // Vertex Z dist. after all event and track cuts + TH1F* fVtxZDiff1; // Difference 1 between vertex Z distributions + TH1F* fVtxZDiff2; // Difference 2 between vertex Z distributions + TH1F* fVtxZDiff3; // Difference 3 between vertex Z distributions + TH1F* fVtxZDiff1b; // Difference 1 between vertex Z distributions after all cuts + TH1F* fVtxZDiff2b; // Difference 2 between vertex Z distributions after all cuts + TH1F* fVtxZDiff3b; // Difference 3 between vertex Z distributions after all cuts + TH1F* fEventMeanPt; // Event mean pT distribution + TH1F* fEventMeanPtSq; // Event mean pT squared dist. + TH2F* fEventMeanPtMult; // Event mean pT distribution vs. multiplicity (scatter plot) + TH1F* fMultEventMeanPt; // Event mean pT for multiplicity bins + TH1F* fMultEventMeanPtSq; // Event mean pT squared for mult. bins + TH1F* fMultEventMeanPtNbins; // Event mean pT for single mult. bins + TH1F* fMultEventMeanPtSqNbins;// Event mean pT squared for single mult. bins + TH1F* fCentEventMeanPt; // Event mean pT for centrality bins + TH1F* fCentEventMeanPtSq; // Event mean pT squared for cent. bins + TH1F* fEventMeanPtCent05; // Event mean pT distribution in cent bin 0-5% + TH1F* fEventMeanPtCent2030; // Event mean pT distribution in cent bin 20-30% + TH1F* fEventMeanPtCent7080; // Event mean pT distribution in cent bin 70-80% + TH1F* fTwoPartCorrEv; // Two-particle correlator for multiplicity bins + TH1F* fTwoPartCorrEvSq; // Two-part. corr. squared for mult. bins + TH1F* fTwoPartCorrEv1; // Two-particle correlator for multiplicity bins (first bin divided in 4) + TH1F* fTwoPartCorrEvSq1; // Two-part. corr. squared for mult. bins (first bin divided in 4) + TH1F* fTwoPartCorrEv10; // Two-particle correlator for multiplicity bins (five bins in 0 < Nacc < 50) + TH1F* fTwoPartCorrEvSq10; // Two-part. corr. squared for mult. bins (five bins in 0 < Nacc < 50) + TH1F* fTwoPartCorrEv80; // Two-particle correlator for multiplicity bins -- ( " < 80%) + TH1F* fTwoPartCorrEvSq80; // Two-part. corr. squared for mult. bins -- ( " < 80%) + TH1F* fTwoPartCorrEv801; // Two-particle correlator for multiplicity bins (first bin divided in 4) -- ( " < 80%) + TH1F* fTwoPartCorrEvSq801; // Two-part. corr. squared for mult. bins (first bin divided in 4) -- ( " < 80%) + TH1F* fTwoPartCorrEv810; // Two-particle correlator for multiplicity bins (five bins in 0 < Nacc < 50) -- ( " < 80%) + TH1F* fTwoPartCorrEvSq810; // Two-part. corr. squared for mult. bins (five bins in 0 < Nacc < 50) -- ( " < 80%) + TH1F* fTwoPartCorrEvCent; // Two-particle correlator for centrality bins + TH1F* fTwoPartCorrEvCentSq; // Two-part. corr. squared for cent. bins + + AliESDtrackCuts* fESDTrackCuts; // Esd track cuts + Float_t fMaxVertexZ; // Maximum value for Vertex Z position + Float_t fMaxVertexZDiff1; // Maximum value for Vertex Z difference TPC - global + Int_t fNContributors; // Minimum contributors to the vertex + Int_t fUseCentrality; // Use centrality (0=off, 1=VZERO, 2=SPD(not yet implemented)) + Bool_t fMC; // Check for MC + Int_t fMCType; // Set MC type: ESD, MC truth (generator level), mod. MC truth + Bool_t fMCAMPT; // Set MC = AMPT or other + + AliAnalysisTaskPtFlucPbPb(const AliAnalysisTaskPtFlucPbPb&); // not implemented + AliAnalysisTaskPtFlucPbPb& operator=(const AliAnalysisTaskPtFlucPbPb&); // not implemented + + ClassDef(AliAnalysisTaskPtFlucPbPb, 1); + +}; + +#endif diff --git a/PWGCF/EBYE/PIDFluctuation/macros/AddAliEbyEParticleRatioFluctuationTask.C b/PWGCF/EBYE/PIDFluctuation/macros/AddAliEbyEParticleRatioFluctuationTask.C index 25f51d5f927..852d07460f5 100644 --- a/PWGCF/EBYE/PIDFluctuation/macros/AddAliEbyEParticleRatioFluctuationTask.C +++ b/PWGCF/EBYE/PIDFluctuation/macros/AddAliEbyEParticleRatioFluctuationTask.C @@ -1,134 +1,134 @@ -//=========================================================================// -// // -// Analysis AddTask for Particle Ratio Fluctuation Study // -// Author: Deepika Rathee || Satyajit Jenara // -// drathee@cern.ch || sjena@cern.ch // -// Fri Apr 11 13:31:07 CEST 2013 -// // -//=========================================================================// - -void AddAliEbyEParticleRatioFluctuationTask(Double_t vz=10,Double_t ptl=0.5, Double_t pth=5, Int_t AODfilterBit = 768, Int_t pidtype = 2, Int_t requestTofPid = 1, Double_t nSigmaCut = 3., Int_t ikey = 0, TString analdata = "AOD", TString analtype = "PbPb", TString centralityEstimator = "V0M", TString ctaskname = "2011") { - - Double_t vx = 3.; Double_t vy = 3.; - - TString taskname = "EbyECF_"; - taskname += ctaskname; - taskname += "_"; - taskname += analdata; - taskname += "_"; - taskname += analtype; - taskname += "_"; - taskname += centralityEstimator; - taskname += "_"; - taskname += Form("%d",AODfilterBit); - taskname += "_"; - taskname += Form("PT_%.1f_%.1f", ptl, pth); - taskname += "_"; - - Bool_t isMC = 0; - if(analdata == "AODMC" || analdata == "MC") - isMC = 1; - - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskFluctuations", "No analysis manager to connect to."); - return NULL; - } - - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskFluctuations", "This task requires an input event handler"); - return NULL; - } - TString type = mgr->GetInputEventHandler()->GetDataType(); - - - TString basefilename = AliAnalysisManager::GetCommonFileName(); - - - AliHelperPID* help = new AliHelperPID(); - help->SetNSigmaCut(nSigmaCut); - help->SetPIDType(pidtype); - help->SetfRequestTOFPID(requestTofPid); - help->SetfPtTOFPID(ptl); - help->SetisMC(isMC); - - if(ikey == 0 ) { - AliEbyEParticleRatioFluctuationTask *task[8]; - AliAnalysisDataContainer *cout[8]; - for(Int_t i = 0; i < 8 ; i ++) { - Double_t eta = 0.1 + 0.1*i; - TString taskname1 = taskname; - taskname1 += Form("ETA_%.2f",eta); - task[i] = new AliEbyEParticleRatioFluctuationTask(taskname1.Data()); - task[i]->SetVertexDiamond(vx,vy,vz); - task[i]->SetAODtrackCutBit(AODfilterBit); - task[i]->SetKinematicsCuts(ptl,pth,eta); - task[i]->SetHelperPID(help); - mgr->AddTask(task[i]); - - cout[i] = mgr->CreateContainer(Form("%s",taskname1.Data()),TList::Class(), - AliAnalysisManager::kOutputContainer, - Form("%s:CFEbyE_PR",basefilename.Data())); - mgr->ConnectInput(task[i], 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(task[i], 1, cout[i]); - - } - - AliEbyEParticleRatioFluctuationTask *taskqa; - taskqa = new AliEbyEParticleRatioFluctuationTask("QACFEbyEPR"); - // taskqa->SetPIDMethod(1); - taskqa->RunQA(); - // taskqa->Debug(); - taskqa->SetVertexDiamond(vx,vy,vz); - taskqa->SetAODtrackCutBit(AODfilterBit); - taskqa->SetKinematicsCuts(ptl,pth,0.8); - taskqa->SetHelperPID(help); - mgr->AddTask(taskqa); - - AliAnalysisDataContainer *coutqa - = mgr->CreateContainer(Form("QA_%s",taskname1.Data()),TList::Class(), - AliAnalysisManager::kOutputContainer, - Form("%s:CFEbyE_PR",basefilename.Data())); - mgr->ConnectInput(taskqa, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskqa, 1, coutqa); - } - else if(ikey > 0 && ikey < 9) { - Double_t eta = 0.1*ikey; - TString taskname1 = taskname; - taskname1 += Form("ETA_%.2f",eta); - AliEbyEParticleRatioFluctuationTask *task1 - = new AliEbyEParticleRatioFluctuationTask(taskname1.Data()); - task1->SetVertexDiamond(vx,vy,vz); - task1->SetAODtrackCutBit(AODfilterBit); - task1->SetKinematicsCuts(ptl,pth,eta); - task1->SetHelperPID(help); - mgr->AddTask(task1); - - AliAnalysisDataContainer *cout1 - = mgr->CreateContainer(Form("%s",taskname1.Data()),TList::Class(), - AliAnalysisManager::kOutputContainer, - Form("%s:CFEbyE_PR",basefilename.Data())); - mgr->ConnectInput(task1, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(task1, 1, cout1); - - - AliEbyEParticleRatioFluctuationTask *taskqa1; - taskqa1 = new AliEbyEParticleRatioFluctuationTask("QACFEbyEPR"); - taskqa1->RunQA(); - taskqa1->SetVertexDiamond(vx,vy,vz); - taskqa1->SetAODtrackCutBit(AODfilterBit); - taskqa1->SetKinematicsCuts(ptl,pth,eta); - taskqa1->SetHelperPID(help); - mgr->AddTask(taskqa1); - - AliAnalysisDataContainer *coutqa1 - = mgr->CreateContainer(Form("QA_%s",taskname1.Data()),TList::Class(), - AliAnalysisManager::kOutputContainer, - Form("%s:CFEbyE_PR",basefilename.Data())); - mgr->ConnectInput(taskqa1, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskqa1, 1, coutqa1); - - } else return; - - return; -} +//=========================================================================// +// // +// Analysis AddTask for Particle Ratio Fluctuation Study // +// Author: Deepika Rathee || Satyajit Jenara // +// drathee@cern.ch || sjena@cern.ch // +// Fri Apr 11 13:31:07 CEST 2013 +// // +//=========================================================================// + +void AddAliEbyEParticleRatioFluctuationTask(Double_t vz=10,Double_t ptl=0.5, Double_t pth=5, Int_t AODfilterBit = 768, Int_t pidtype = 2, Int_t requestTofPid = 1, Double_t nSigmaCut = 3., Int_t ikey = 0, TString analdata = "AOD", TString analtype = "PbPb", TString centralityEstimator = "V0M", TString ctaskname = "2011") { + + Double_t vx = 3.; Double_t vy = 3.; + + TString taskname = "EbyECF_"; + taskname += ctaskname; + taskname += "_"; + taskname += analdata; + taskname += "_"; + taskname += analtype; + taskname += "_"; + taskname += centralityEstimator; + taskname += "_"; + taskname += Form("%d",AODfilterBit); + taskname += "_"; + taskname += Form("PT_%.1f_%.1f", ptl, pth); + taskname += "_"; + + Bool_t isMC = 0; + if(analdata == "AODMC" || analdata == "MC") + isMC = 1; + + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskFluctuations", "No analysis manager to connect to."); + return NULL; + } + + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskFluctuations", "This task requires an input event handler"); + return NULL; + } + TString type = mgr->GetInputEventHandler()->GetDataType(); + + + TString basefilename = AliAnalysisManager::GetCommonFileName(); + + + AliHelperPID* help = new AliHelperPID(); + help->SetNSigmaCut(nSigmaCut); + help->SetPIDType(pidtype); + help->SetfRequestTOFPID(requestTofPid); + help->SetfPtTOFPID(ptl); + help->SetisMC(isMC); + + if(ikey == 0 ) { + AliEbyEParticleRatioFluctuationTask *task[8]; + AliAnalysisDataContainer *cout[8]; + for(Int_t i = 0; i < 8 ; i ++) { + Double_t eta = 0.1 + 0.1*i; + TString taskname1 = taskname; + taskname1 += Form("ETA_%.2f",eta); + task[i] = new AliEbyEParticleRatioFluctuationTask(taskname1.Data()); + task[i]->SetVertexDiamond(vx,vy,vz); + task[i]->SetAODtrackCutBit(AODfilterBit); + task[i]->SetKinematicsCuts(ptl,pth,eta); + task[i]->SetHelperPID(help); + mgr->AddTask(task[i]); + + cout[i] = mgr->CreateContainer(Form("%s",taskname1.Data()),TList::Class(), + AliAnalysisManager::kOutputContainer, + Form("%s:CFEbyE_PR",basefilename.Data())); + mgr->ConnectInput(task[i], 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(task[i], 1, cout[i]); + + } + + AliEbyEParticleRatioFluctuationTask *taskqa; + taskqa = new AliEbyEParticleRatioFluctuationTask("QACFEbyEPR"); + // taskqa->SetPIDMethod(1); + taskqa->RunQA(); + // taskqa->Debug(); + taskqa->SetVertexDiamond(vx,vy,vz); + taskqa->SetAODtrackCutBit(AODfilterBit); + taskqa->SetKinematicsCuts(ptl,pth,0.8); + taskqa->SetHelperPID(help); + mgr->AddTask(taskqa); + + AliAnalysisDataContainer *coutqa + = mgr->CreateContainer(Form("QA_%s",taskname1.Data()),TList::Class(), + AliAnalysisManager::kOutputContainer, + Form("%s:CFEbyE_PR",basefilename.Data())); + mgr->ConnectInput(taskqa, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskqa, 1, coutqa); + } + else if(ikey > 0 && ikey < 9) { + Double_t eta = 0.1*ikey; + TString taskname1 = taskname; + taskname1 += Form("ETA_%.2f",eta); + AliEbyEParticleRatioFluctuationTask *task1 + = new AliEbyEParticleRatioFluctuationTask(taskname1.Data()); + task1->SetVertexDiamond(vx,vy,vz); + task1->SetAODtrackCutBit(AODfilterBit); + task1->SetKinematicsCuts(ptl,pth,eta); + task1->SetHelperPID(help); + mgr->AddTask(task1); + + AliAnalysisDataContainer *cout1 + = mgr->CreateContainer(Form("%s",taskname1.Data()),TList::Class(), + AliAnalysisManager::kOutputContainer, + Form("%s:CFEbyE_PR",basefilename.Data())); + mgr->ConnectInput(task1, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(task1, 1, cout1); + + + AliEbyEParticleRatioFluctuationTask *taskqa1; + taskqa1 = new AliEbyEParticleRatioFluctuationTask("QACFEbyEPR"); + taskqa1->RunQA(); + taskqa1->SetVertexDiamond(vx,vy,vz); + taskqa1->SetAODtrackCutBit(AODfilterBit); + taskqa1->SetKinematicsCuts(ptl,pth,eta); + taskqa1->SetHelperPID(help); + mgr->AddTask(taskqa1); + + AliAnalysisDataContainer *coutqa1 + = mgr->CreateContainer(Form("QA_%s",taskname1.Data()),TList::Class(), + AliAnalysisManager::kOutputContainer, + Form("%s:CFEbyE_PR",basefilename.Data())); + mgr->ConnectInput(taskqa1, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskqa1, 1, coutqa1); + + } else return; + + return; +} diff --git a/PWGCF/EBYE/PIDFluctuation/task/AliAnalysisTaskPIDFluctuation.h b/PWGCF/EBYE/PIDFluctuation/task/AliAnalysisTaskPIDFluctuation.h index 4958473c000..9cf4792bd5d 100644 --- a/PWGCF/EBYE/PIDFluctuation/task/AliAnalysisTaskPIDFluctuation.h +++ b/PWGCF/EBYE/PIDFluctuation/task/AliAnalysisTaskPIDFluctuation.h @@ -1,138 +1,138 @@ -#ifndef ALIANALYSISTASKPIDFLUCTUATION_H -#define ALIANALYSISTASKPIDFLUCTUATION_H - -/* - * updated by Zubayer Ahammed to instruct CINT about streaming - * of data members. - * Event by event PID fluctuation analysis - * author: Roberto Preghenella (R+) - * email: preghenella@bo.infn.it - * - */ - -class TList; -class TH1F; -class TH2F; -class TH3F; -class AliVEvent; -class AliVTrack; -class AliESDtrackCuts; -class AliPIDResponse; - -#include "AliAnalysisTaskSE.h" -#include "AliPID.h" -#include "THnSparse.h" - -class AliAnalysisTaskPIDFluctuation : -public AliAnalysisTaskSE -{ - - public: - - AliAnalysisTaskPIDFluctuation(const Char_t *name = "PIDFluctuation"); // default constructor - virtual ~AliAnalysisTaskPIDFluctuation(); // default destructor - - void UserCreateOutputObjects(); - void UserExec(Option_t *option); - - /* setters */ - void SetPIDMethod(Int_t value) {fPIDMethod = value;}; // set PID method - void SetESDtrackCuts(AliESDtrackCuts *value) {fESDtrackCuts = value;}; // set ESD track cuts - void SetAODfilterBit(Int_t value) {fAODfilterBit = value;}; // set AOD filter bit - void SetEtaRange(Float_t etaMin, Float_t etaMax) {fEtaMin = etaMin; fEtaMax = etaMax;}; // set eta range - void SetPtRange(Float_t ptMin, Float_t ptMax) {fPtMin = ptMin; fPtMax = ptMax;}; // set pt range - - static const Int_t kNCentralityBins = 10; // N centrality bins - - enum EEventCounter_t { - kAllEvents, - kPhysicsSelection, - kPrimaryVertex, - kPrimaryVertexSPD, - kVertexAccepted, - kGoodCentrality, - kAcceptedEvents, - kNEventCounters - }; - - enum ESparseData_t { - kCent_V0M, - kCent_TRK, - kNch, - kNch_plus, - kNch_minus, - kNpi, - kNpi_plus, - kNpi_minus, - kNka, - kNka_plus, - kNka_minus, - kNpr, - kNpr_plus, - kNpr_minus, - kNSparseData - }; - - enum EPIDMethod_t { - kTPCTOF, - kTPConly, - kTOFonly, - kNPIDMethods - }; - - static void MeasureNuDyn(const Char_t *filename, Int_t i1, Int_t i2, Int_t centralityEstimator = kCent_V0M); - - private: - - AliAnalysisTaskPIDFluctuation(const AliAnalysisTaskPIDFluctuation &); // not implemented - AliAnalysisTaskPIDFluctuation &operator=(const AliAnalysisTaskPIDFluctuation &); // not implemented - - /*** event and track selection ***/ - Bool_t AcceptEvent(AliVEvent *event) const; // accept event - Bool_t AcceptTrack(AliVTrack *track) const; // accept track - - /*** PID functions ***/ - Bool_t HasTPCPID(AliVTrack *track) const; // has TPC PID - Bool_t HasTOFPID(AliVTrack *track) const; // has TOF PID - Double_t MakeTPCPID(AliVTrack *track, Double_t *nSigma) const; // make TPC PID - Double_t MakeTOFPID(AliVTrack *track, Double_t *nSigma) const; // make TOF PID - void MakePID(AliVTrack *track, Bool_t *pidFlag, Float_t centrality) const; // make PID - Bool_t InitPID(AliVEvent *event); // init PID - - /*** PID objects and flags ***/ - Int_t fPIDMethod; // PID method - AliESDtrackCuts *fESDtrackCuts; // ESD track cuts - Int_t fAODfilterBit; // AOD filter bit - Float_t fEtaMin; // eta min - Float_t fEtaMax; // eta max - Float_t fPtMin; // pt min - Float_t fPtMax; // pt max - AliPIDResponse *fPID; //! PID - - /*** PID histos ***/ - TList *fHistoList; //! histo list - TH1F *fHistoEventCounter; //! event counter - TH2F *fHistoAcceptedTracks; //! accepted tracks - TH2F *fHistoTOFMatchedTracks; //! TOF-matched tracks - TH3F *fHistoTPCdEdx; //! TPC dEdx - TH3F *fHistoTPCdEdx_inclusive; //! TPC dEdx - TH3F *fHistoTOFbeta; //! TOF beta - TH3F *fHistoTPCdEdx_selected[AliPID::kSPECIES]; //! TPC dEdx - TH3F *fHistoTOFbeta_selected[AliPID::kSPECIES]; //! TOF beta - TH3F *fHistoNSigmaTPC[AliPID::kSPECIES]; //! nsigma TPC - TH3F *fHistoNSigmaTOF[AliPID::kSPECIES]; //! nsigma TOF - - /*** correlation histos */ - THnSparseI *fHistoCorrelation; // correlation THnSparse - - /*** labels, names and titles ***/ - static const Char_t *fgkEventCounterName[kNEventCounters]; // event couter name - static const Char_t *fgkEventCounterTitle[kNEventCounters]; // event couter title - static const Char_t *fgkSparseDataName[kNSparseData]; // sparse data name - static const Char_t *fgkSparseDataTitle[kNSparseData]; // sparse data title - - - ClassDef(AliAnalysisTaskPIDFluctuation, 1); -}; - -#endif /* ALIANALYSISTASKPIDFLUCTUATION_H */ +#ifndef ALIANALYSISTASKPIDFLUCTUATION_H +#define ALIANALYSISTASKPIDFLUCTUATION_H + +/* + * updated by Zubayer Ahammed to instruct CINT about streaming + * of data members. + * Event by event PID fluctuation analysis + * author: Roberto Preghenella (R+) + * email: preghenella@bo.infn.it + * + */ + +class TList; +class TH1F; +class TH2F; +class TH3F; +class AliVEvent; +class AliVTrack; +class AliESDtrackCuts; +class AliPIDResponse; + +#include "AliAnalysisTaskSE.h" +#include "AliPID.h" +#include "THnSparse.h" + +class AliAnalysisTaskPIDFluctuation : +public AliAnalysisTaskSE +{ + + public: + + AliAnalysisTaskPIDFluctuation(const Char_t *name = "PIDFluctuation"); // default constructor + virtual ~AliAnalysisTaskPIDFluctuation(); // default destructor + + void UserCreateOutputObjects(); + void UserExec(Option_t *option); + + /* setters */ + void SetPIDMethod(Int_t value) {fPIDMethod = value;}; // set PID method + void SetESDtrackCuts(AliESDtrackCuts *value) {fESDtrackCuts = value;}; // set ESD track cuts + void SetAODfilterBit(Int_t value) {fAODfilterBit = value;}; // set AOD filter bit + void SetEtaRange(Float_t etaMin, Float_t etaMax) {fEtaMin = etaMin; fEtaMax = etaMax;}; // set eta range + void SetPtRange(Float_t ptMin, Float_t ptMax) {fPtMin = ptMin; fPtMax = ptMax;}; // set pt range + + static const Int_t kNCentralityBins = 10; // N centrality bins + + enum EEventCounter_t { + kAllEvents, + kPhysicsSelection, + kPrimaryVertex, + kPrimaryVertexSPD, + kVertexAccepted, + kGoodCentrality, + kAcceptedEvents, + kNEventCounters + }; + + enum ESparseData_t { + kCent_V0M, + kCent_TRK, + kNch, + kNch_plus, + kNch_minus, + kNpi, + kNpi_plus, + kNpi_minus, + kNka, + kNka_plus, + kNka_minus, + kNpr, + kNpr_plus, + kNpr_minus, + kNSparseData + }; + + enum EPIDMethod_t { + kTPCTOF, + kTPConly, + kTOFonly, + kNPIDMethods + }; + + static void MeasureNuDyn(const Char_t *filename, Int_t i1, Int_t i2, Int_t centralityEstimator = kCent_V0M); + + private: + + AliAnalysisTaskPIDFluctuation(const AliAnalysisTaskPIDFluctuation &); // not implemented + AliAnalysisTaskPIDFluctuation &operator=(const AliAnalysisTaskPIDFluctuation &); // not implemented + + /*** event and track selection ***/ + Bool_t AcceptEvent(AliVEvent *event) const; // accept event + Bool_t AcceptTrack(AliVTrack *track) const; // accept track + + /*** PID functions ***/ + Bool_t HasTPCPID(AliVTrack *track) const; // has TPC PID + Bool_t HasTOFPID(AliVTrack *track) const; // has TOF PID + Double_t MakeTPCPID(AliVTrack *track, Double_t *nSigma) const; // make TPC PID + Double_t MakeTOFPID(AliVTrack *track, Double_t *nSigma) const; // make TOF PID + void MakePID(AliVTrack *track, Bool_t *pidFlag, Float_t centrality) const; // make PID + Bool_t InitPID(AliVEvent *event); // init PID + + /*** PID objects and flags ***/ + Int_t fPIDMethod; // PID method + AliESDtrackCuts *fESDtrackCuts; // ESD track cuts + Int_t fAODfilterBit; // AOD filter bit + Float_t fEtaMin; // eta min + Float_t fEtaMax; // eta max + Float_t fPtMin; // pt min + Float_t fPtMax; // pt max + AliPIDResponse *fPID; //! PID + + /*** PID histos ***/ + TList *fHistoList; //! histo list + TH1F *fHistoEventCounter; //! event counter + TH2F *fHistoAcceptedTracks; //! accepted tracks + TH2F *fHistoTOFMatchedTracks; //! TOF-matched tracks + TH3F *fHistoTPCdEdx; //! TPC dEdx + TH3F *fHistoTPCdEdx_inclusive; //! TPC dEdx + TH3F *fHistoTOFbeta; //! TOF beta + TH3F *fHistoTPCdEdx_selected[AliPID::kSPECIES]; //! TPC dEdx + TH3F *fHistoTOFbeta_selected[AliPID::kSPECIES]; //! TOF beta + TH3F *fHistoNSigmaTPC[AliPID::kSPECIES]; //! nsigma TPC + TH3F *fHistoNSigmaTOF[AliPID::kSPECIES]; //! nsigma TOF + + /*** correlation histos */ + THnSparseI *fHistoCorrelation; // correlation THnSparse + + /*** labels, names and titles ***/ + static const Char_t *fgkEventCounterName[kNEventCounters]; // event couter name + static const Char_t *fgkEventCounterTitle[kNEventCounters]; // event couter title + static const Char_t *fgkSparseDataName[kNSparseData]; // sparse data name + static const Char_t *fgkSparseDataTitle[kNSparseData]; // sparse data title + + + ClassDef(AliAnalysisTaskPIDFluctuation, 1); +}; + +#endif /* ALIANALYSISTASKPIDFLUCTUATION_H */ diff --git a/PWGCF/EBYE/PIDFluctuation/task/AliEbyEParticleRatioFluctuationTask.h b/PWGCF/EBYE/PIDFluctuation/task/AliEbyEParticleRatioFluctuationTask.h index 33ea676a827..c9f047c01bb 100644 --- a/PWGCF/EBYE/PIDFluctuation/task/AliEbyEParticleRatioFluctuationTask.h +++ b/PWGCF/EBYE/PIDFluctuation/task/AliEbyEParticleRatioFluctuationTask.h @@ -1,88 +1,88 @@ -#ifndef AliEbyEParticleRatioFluctuationTask_cxx -#define AliEbyEParticleRatioFluctuationTask_cxx - -//=========================================================================// -// // -// AliEbyE Analysis for Particle Ratio Fluctuation // -// Author: Deepika Rathee || Satyajit Jena // -// drathee@cern.ch || sjena@cern.ch // -// // -//=========================================================================// - -class TH1D; -class TH2F; -class TH3F; -class TString; -class AliAODEvent; -class AliAODTrack; -class AliAODMCParticle; -class TList; -class AliESDtrackCuts; -class AliHelperPID; - -#include "AliAnalysisTaskSE.h" -#include "AliPID.h" -#include "THnSparse.h" - -class AliEbyEParticleRatioFluctuationTask: public AliAnalysisTaskSE { - public: - AliEbyEParticleRatioFluctuationTask( const char *name = "HigherMomentAnalysis"); - virtual ~AliEbyEParticleRatioFluctuationTask(); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - static const Int_t kNCentralityBins = 20; //! N centrality bins - static const Int_t kNSparseData = 14; //! N Sparse bins - - void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {fVxMax = vx;fVyMax = vy; fVzMax = vz;} - void SetKinematicsCuts(Double_t ptl, Double_t pth, Double_t eta) {fPtLowerLimit = ptl; fPtHigherLimit = pth; fEtaLowerLimit = -eta; fEtaHigherLimit = eta; } - void SetAODtrackCutBit(Int_t bit) {fAODtrackCutBit = bit; } - void SetDCA(Double_t xy, Double_t z) { fDCAxy = xy; fDCAz = z; } - void SetTPCNclus(Int_t nclus) { fTPCNClus = nclus;} - void SetCentralityEstimator(const char* cent) { fCentralityEstimator = cent;} - void SetAnalysisType(const char* analysisType) {fAnalysisType = analysisType;} - void SetAnalysisData(const char* analysisData) {fAnalysisData = analysisData;} - void RunQA() {isQA = kTRUE;} - void Debug() {fDebug = kTRUE;} - void SetHelperPID(AliHelperPID* pid){fHelperPID = pid;} - - private: - - Bool_t AcceptEvent(AliAODEvent *event, Int_t cent) const; //! accept eventc - Bool_t AcceptTrack(AliAODTrack *track, Int_t cent) const; //! accept track - Bool_t AcceptMCTrack(AliAODMCParticle *track, Int_t cent) const; //! accept track - TList *fThnList; - TString fAnalysisType; //! "AOD", "AODMC" - TString fAnalysisData; //! "PbPb", "pp", "pA" - TString fCentralityEstimator; //! "V0M","TRK","TKL","ZDC","FMD" - Double_t fVxMax; //! vxmax - Double_t fVyMax; //! vymax - Double_t fVzMax; //! vzmax - Double_t fDCAxy; //! DCA xy - Double_t fDCAz; //! DCA z - Double_t fPtLowerLimit; - Double_t fPtHigherLimit; - Double_t fEtaLowerLimit; - Double_t fEtaHigherLimit; - - Int_t fTPCNClus; - Int_t fAODtrackCutBit; - Bool_t isQA; - Bool_t fDebug; - AliHelperPID *fHelperPID; - TH1D *fEventCounter; - TH2F *fHistQA[14]; - THnSparseI *fHistoCorrelation; - - //________________________________ - AliEbyEParticleRatioFluctuationTask(const AliEbyEParticleRatioFluctuationTask&); - AliEbyEParticleRatioFluctuationTask& operator = (const AliEbyEParticleRatioFluctuationTask&); - ClassDef(AliEbyEParticleRatioFluctuationTask, 1); - -}; - -#endif - - +#ifndef AliEbyEParticleRatioFluctuationTask_cxx +#define AliEbyEParticleRatioFluctuationTask_cxx + +//=========================================================================// +// // +// AliEbyE Analysis for Particle Ratio Fluctuation // +// Author: Deepika Rathee || Satyajit Jena // +// drathee@cern.ch || sjena@cern.ch // +// // +//=========================================================================// + +class TH1D; +class TH2F; +class TH3F; +class TString; +class AliAODEvent; +class AliAODTrack; +class AliAODMCParticle; +class TList; +class AliESDtrackCuts; +class AliHelperPID; + +#include "AliAnalysisTaskSE.h" +#include "AliPID.h" +#include "THnSparse.h" + +class AliEbyEParticleRatioFluctuationTask: public AliAnalysisTaskSE { + public: + AliEbyEParticleRatioFluctuationTask( const char *name = "HigherMomentAnalysis"); + virtual ~AliEbyEParticleRatioFluctuationTask(); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + static const Int_t kNCentralityBins = 20; //! N centrality bins + static const Int_t kNSparseData = 14; //! N Sparse bins + + void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {fVxMax = vx;fVyMax = vy; fVzMax = vz;} + void SetKinematicsCuts(Double_t ptl, Double_t pth, Double_t eta) {fPtLowerLimit = ptl; fPtHigherLimit = pth; fEtaLowerLimit = -eta; fEtaHigherLimit = eta; } + void SetAODtrackCutBit(Int_t bit) {fAODtrackCutBit = bit; } + void SetDCA(Double_t xy, Double_t z) { fDCAxy = xy; fDCAz = z; } + void SetTPCNclus(Int_t nclus) { fTPCNClus = nclus;} + void SetCentralityEstimator(const char* cent) { fCentralityEstimator = cent;} + void SetAnalysisType(const char* analysisType) {fAnalysisType = analysisType;} + void SetAnalysisData(const char* analysisData) {fAnalysisData = analysisData;} + void RunQA() {isQA = kTRUE;} + void Debug() {fDebug = kTRUE;} + void SetHelperPID(AliHelperPID* pid){fHelperPID = pid;} + + private: + + Bool_t AcceptEvent(AliAODEvent *event, Int_t cent) const; //! accept eventc + Bool_t AcceptTrack(AliAODTrack *track, Int_t cent) const; //! accept track + Bool_t AcceptMCTrack(AliAODMCParticle *track, Int_t cent) const; //! accept track + TList *fThnList; + TString fAnalysisType; //! "AOD", "AODMC" + TString fAnalysisData; //! "PbPb", "pp", "pA" + TString fCentralityEstimator; //! "V0M","TRK","TKL","ZDC","FMD" + Double_t fVxMax; //! vxmax + Double_t fVyMax; //! vymax + Double_t fVzMax; //! vzmax + Double_t fDCAxy; //! DCA xy + Double_t fDCAz; //! DCA z + Double_t fPtLowerLimit; + Double_t fPtHigherLimit; + Double_t fEtaLowerLimit; + Double_t fEtaHigherLimit; + + Int_t fTPCNClus; + Int_t fAODtrackCutBit; + Bool_t isQA; + Bool_t fDebug; + AliHelperPID *fHelperPID; + TH1D *fEventCounter; + TH2F *fHistQA[14]; + THnSparseI *fHistoCorrelation; + + //________________________________ + AliEbyEParticleRatioFluctuationTask(const AliEbyEParticleRatioFluctuationTask&); + AliEbyEParticleRatioFluctuationTask& operator = (const AliEbyEParticleRatioFluctuationTask&); + ClassDef(AliEbyEParticleRatioFluctuationTask, 1); + +}; + +#endif + + diff --git a/PWGCF/EBYE/macros/AddTaskBalanceCentralityTrain.C b/PWGCF/EBYE/macros/AddTaskBalanceCentralityTrain.C index 8153f6186a4..8123af20e48 100644 --- a/PWGCF/EBYE/macros/AddTaskBalanceCentralityTrain.C +++ b/PWGCF/EBYE/macros/AddTaskBalanceCentralityTrain.C @@ -1,203 +1,203 @@ -// now in options -//=============================================// -//const char* centralityEstimator = "V0M"; -//const char* centralityEstimator = "CL1"; -//const char* centralityEstimator = "TRK"; -//=============================================// -//Bool_t gRunShuffling = kFALSE; -//Bool_t gRunShuffling = kTRUE; -//=============================================// - -//PID config -Bool_t kUseNSigmaPID = kTRUE; -Double_t nSigmaMax = 3.0; -Bool_t kUseBayesianPID = kFALSE; -Double_t gMinAcceptedProbability = 0.7; - -//_________________________________________________________// -AliAnalysisTaskBF *AddTaskBalanceCentralityTrain(TString analysisType = "ESD", - Double_t centrMin=0., - Double_t centrMax=80., //100. - Bool_t gRunShuffling=kFALSE, - TString centralityEstimator="V0M", - Double_t vertexZ=10., - Double_t DCAxy=-1, - Double_t DCAz=-1, - Double_t ptMin=0.3, - Double_t ptMax=1.5, - Double_t etaMin=-0.8, - Double_t etaMax=0.8, - Double_t maxTPCchi2 = -1, - Int_t minNClustersTPC = -1, - Bool_t kUsePID = kFALSE, - Int_t AODfilterBit = 128, - Bool_t bCentralTrigger = kFALSE, - Bool_t bHBTcut = kFALSE, - Bool_t bConversionCut = kFALSE, - TString fileNameBase="AnalysisResults") { - - // Creates a balance function analysis task and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - TString centralityName(""); - centralityName+=Form("%.0f",centrMin); - centralityName+="-"; - centralityName+=Form("%.0f",centrMax); - centralityName+="_"; - centralityName+=Form("%s",centralityEstimator.Data()); - centralityName+="_"; - centralityName+=Form("vZ%.1f",vertexZ); - centralityName+="_"; - centralityName+=Form("DCAxy%.1f",DCAxy); - centralityName+="_"; - centralityName+=Form("DCAz%.1f",DCAz); - centralityName+="_Pt"; - centralityName+=Form("%.1f",ptMin); - centralityName+="-"; - centralityName+=Form("%.1f",ptMax); - centralityName+="_Eta"; - centralityName+=Form("%.1f",etaMin); - centralityName+="-"; - centralityName+=Form("%.1f",etaMax); - centralityName+="_Chi"; - centralityName+=Form("%.1f",maxTPCchi2); - centralityName+="_nClus"; - centralityName+=Form("%d",minNClustersTPC); - centralityName+="_Bit"; - centralityName+=Form("%d",AODfilterBit); - if(bCentralTrigger) centralityName+="_withCentralTrigger"; - if(bHBTcut) centralityName+="_withHBTcut"; - if(bConversionCut) centralityName+="_withConversionCut"; - if(kUsePID) centralityName+="_PID"; - - - - - - TString outputFileName(fileNameBase); - outputFileName.Append(".root"); - - //=========================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskBF", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //=========================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskBF", "This task requires an input event handler"); - return NULL; - } - TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" or "MC" - if(dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "AOD"; - - - // for local changed BF configuration - //gROOT->LoadMacro("./configBalanceFunctionAnalysis.C"); - gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C"); - AliBalance *bf = 0; // Balance Function object - AliBalance *bfs = 0; // shuffled Balance function objects - - if (analysisType=="ESD"){ - bf = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); - if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); - } - else if (analysisType=="MCESD"){ - bf = GetBalanceFunctionObject("MCESD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); - if(gRunShuffling) bfs = GetBalanceFunctionObject("MCESD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); - } - else if (analysisType=="AOD"){ - bf = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); - if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); - } - else if (analysisType=="MC"){ - bf = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); - if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); - } - else{ - ::Error("AddTaskBF", "analysis type NOT known."); - return NULL; - } - - // Create the task, add it to manager and configure it. - //=========================================================================== - AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); - taskBF->SetAnalysisObject(bf); - if(gRunShuffling) taskBF->SetShufflingObject(bfs); - - taskBF->SetCentralityPercentileRange(centrMin,centrMax); - if((analysisType == "ESD")||(analysisType == "MCESD")) { - AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC); - taskBF->SetAnalysisCutObject(trackCuts); - if(kUsePID) { - if(kUseBayesianPID) - taskBF->SetUseBayesianPID(gMinAcceptedProbability); - else if(kUseNSigmaPID) - taskBF->SetUseNSigmaPID(nSigmaMax); - taskBF->SetParticleOfInterest(AliAnalysisTaskBF::kPion); - taskBF->SetDetectorUsedForPID(AliAnalysisTaskBF::kTPCpid); - } - } - else if(analysisType == "AOD") { - // pt and eta cut (pt_min, pt_max, eta_min, eta_max) - taskBF->SetAODtrackCutBit(AODfilterBit); - taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - - // set extra DCA cuts (-1 no extra cut) - taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); - - // PID - if(kUsePID) { - if(kUseBayesianPID) - taskBF->SetUseBayesianPID(gMinAcceptedProbability); - else if(kUseNSigmaPID) - taskBF->SetUseNSigmaPID(nSigmaMax); - taskBF->SetParticleOfInterest(AliAnalysisTaskBF::kPion); - taskBF->SetDetectorUsedForPID(AliAnalysisTaskBF::kTPCpid); - } - - // set extra TPC chi2 / nr of clusters cut - taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); - - } - else if(analysisType == "MC") { - taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - } - - // offline trigger selection (AliVEvent.h) - // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) - // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) - // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation - if(bCentralTrigger) taskBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral); - else taskBF->SelectCollisionCandidates(AliVEvent::kMB); - - // centrality estimator (default = V0M) - taskBF->SetCentralityEstimator(centralityEstimator); - - // vertex cut (x,y,z) - taskBF->SetVertexDiamond(.3,.3,vertexZ); - - - - //bf->PrintAnalysisSettings(); - mgr->AddTask(taskBF); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - TString outputFileName = AliAnalysisManager::GetCommonFileName(); - outputFileName += ":PWGCFEbyE.outputBalanceFunctionAnalysis"; - AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - AliAnalysisDataContainer *coutBF = mgr->CreateContainer(Form("listBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(gRunShuffling) AliAnalysisDataContainer *coutBFS = mgr->CreateContainer(Form("listBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(kUsePID) AliAnalysisDataContainer *coutQAPID = mgr->CreateContainer(Form("listQAPID_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - - mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskBF, 1, coutQA); - mgr->ConnectOutput(taskBF, 2, coutBF); - if(gRunShuffling) mgr->ConnectOutput(taskBF, 3, coutBFS); - if(kUsePID) mgr->ConnectOutput(taskBF, 4, coutQAPID); - - return taskBF; -} +// now in options +//=============================================// +//const char* centralityEstimator = "V0M"; +//const char* centralityEstimator = "CL1"; +//const char* centralityEstimator = "TRK"; +//=============================================// +//Bool_t gRunShuffling = kFALSE; +//Bool_t gRunShuffling = kTRUE; +//=============================================// + +//PID config +Bool_t kUseNSigmaPID = kTRUE; +Double_t nSigmaMax = 3.0; +Bool_t kUseBayesianPID = kFALSE; +Double_t gMinAcceptedProbability = 0.7; + +//_________________________________________________________// +AliAnalysisTaskBF *AddTaskBalanceCentralityTrain(TString analysisType = "ESD", + Double_t centrMin=0., + Double_t centrMax=80., //100. + Bool_t gRunShuffling=kFALSE, + TString centralityEstimator="V0M", + Double_t vertexZ=10., + Double_t DCAxy=-1, + Double_t DCAz=-1, + Double_t ptMin=0.3, + Double_t ptMax=1.5, + Double_t etaMin=-0.8, + Double_t etaMax=0.8, + Double_t maxTPCchi2 = -1, + Int_t minNClustersTPC = -1, + Bool_t kUsePID = kFALSE, + Int_t AODfilterBit = 128, + Bool_t bCentralTrigger = kFALSE, + Bool_t bHBTcut = kFALSE, + Bool_t bConversionCut = kFALSE, + TString fileNameBase="AnalysisResults") { + + // Creates a balance function analysis task and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + TString centralityName(""); + centralityName+=Form("%.0f",centrMin); + centralityName+="-"; + centralityName+=Form("%.0f",centrMax); + centralityName+="_"; + centralityName+=Form("%s",centralityEstimator.Data()); + centralityName+="_"; + centralityName+=Form("vZ%.1f",vertexZ); + centralityName+="_"; + centralityName+=Form("DCAxy%.1f",DCAxy); + centralityName+="_"; + centralityName+=Form("DCAz%.1f",DCAz); + centralityName+="_Pt"; + centralityName+=Form("%.1f",ptMin); + centralityName+="-"; + centralityName+=Form("%.1f",ptMax); + centralityName+="_Eta"; + centralityName+=Form("%.1f",etaMin); + centralityName+="-"; + centralityName+=Form("%.1f",etaMax); + centralityName+="_Chi"; + centralityName+=Form("%.1f",maxTPCchi2); + centralityName+="_nClus"; + centralityName+=Form("%d",minNClustersTPC); + centralityName+="_Bit"; + centralityName+=Form("%d",AODfilterBit); + if(bCentralTrigger) centralityName+="_withCentralTrigger"; + if(bHBTcut) centralityName+="_withHBTcut"; + if(bConversionCut) centralityName+="_withConversionCut"; + if(kUsePID) centralityName+="_PID"; + + + + + + TString outputFileName(fileNameBase); + outputFileName.Append(".root"); + + //=========================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskBF", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //=========================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskBF", "This task requires an input event handler"); + return NULL; + } + TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" or "MC" + if(dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "AOD"; + + + // for local changed BF configuration + //gROOT->LoadMacro("./configBalanceFunctionAnalysis.C"); + gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C"); + AliBalance *bf = 0; // Balance Function object + AliBalance *bfs = 0; // shuffled Balance function objects + + if (analysisType=="ESD"){ + bf = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); + if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); + } + else if (analysisType=="MCESD"){ + bf = GetBalanceFunctionObject("MCESD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); + if(gRunShuffling) bfs = GetBalanceFunctionObject("MCESD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); + } + else if (analysisType=="AOD"){ + bf = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); + if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); + } + else if (analysisType=="MC"){ + bf = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut,kUsePID); + if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut,kUsePID); + } + else{ + ::Error("AddTaskBF", "analysis type NOT known."); + return NULL; + } + + // Create the task, add it to manager and configure it. + //=========================================================================== + AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); + taskBF->SetAnalysisObject(bf); + if(gRunShuffling) taskBF->SetShufflingObject(bfs); + + taskBF->SetCentralityPercentileRange(centrMin,centrMax); + if((analysisType == "ESD")||(analysisType == "MCESD")) { + AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC); + taskBF->SetAnalysisCutObject(trackCuts); + if(kUsePID) { + if(kUseBayesianPID) + taskBF->SetUseBayesianPID(gMinAcceptedProbability); + else if(kUseNSigmaPID) + taskBF->SetUseNSigmaPID(nSigmaMax); + taskBF->SetParticleOfInterest(AliAnalysisTaskBF::kPion); + taskBF->SetDetectorUsedForPID(AliAnalysisTaskBF::kTPCpid); + } + } + else if(analysisType == "AOD") { + // pt and eta cut (pt_min, pt_max, eta_min, eta_max) + taskBF->SetAODtrackCutBit(AODfilterBit); + taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + + // set extra DCA cuts (-1 no extra cut) + taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); + + // PID + if(kUsePID) { + if(kUseBayesianPID) + taskBF->SetUseBayesianPID(gMinAcceptedProbability); + else if(kUseNSigmaPID) + taskBF->SetUseNSigmaPID(nSigmaMax); + taskBF->SetParticleOfInterest(AliAnalysisTaskBF::kPion); + taskBF->SetDetectorUsedForPID(AliAnalysisTaskBF::kTPCpid); + } + + // set extra TPC chi2 / nr of clusters cut + taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); + + } + else if(analysisType == "MC") { + taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + } + + // offline trigger selection (AliVEvent.h) + // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) + // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) + // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation + if(bCentralTrigger) taskBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral); + else taskBF->SelectCollisionCandidates(AliVEvent::kMB); + + // centrality estimator (default = V0M) + taskBF->SetCentralityEstimator(centralityEstimator); + + // vertex cut (x,y,z) + taskBF->SetVertexDiamond(.3,.3,vertexZ); + + + + //bf->PrintAnalysisSettings(); + mgr->AddTask(taskBF); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + TString outputFileName = AliAnalysisManager::GetCommonFileName(); + outputFileName += ":PWGCFEbyE.outputBalanceFunctionAnalysis"; + AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + AliAnalysisDataContainer *coutBF = mgr->CreateContainer(Form("listBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(gRunShuffling) AliAnalysisDataContainer *coutBFS = mgr->CreateContainer(Form("listBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(kUsePID) AliAnalysisDataContainer *coutQAPID = mgr->CreateContainer(Form("listQAPID_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + + mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskBF, 1, coutQA); + mgr->ConnectOutput(taskBF, 2, coutBF); + if(gRunShuffling) mgr->ConnectOutput(taskBF, 3, coutBFS); + if(kUsePID) mgr->ConnectOutput(taskBF, 4, coutQAPID); + + return taskBF; +} diff --git a/PWGCF/EBYE/macros/AddTaskBalanceEventMixing.C b/PWGCF/EBYE/macros/AddTaskBalanceEventMixing.C index af3620a468e..d6572cca24c 100644 --- a/PWGCF/EBYE/macros/AddTaskBalanceEventMixing.C +++ b/PWGCF/EBYE/macros/AddTaskBalanceEventMixing.C @@ -1,186 +1,186 @@ -// now in options -//=============================================// -//const char* centralityEstimator = "V0M"; -//const char* centralityEstimator = "CL1"; -//const char* centralityEstimator = "TRK"; -//=============================================// -//Bool_t gRunShuffling = kFALSE; -//Bool_t gRunShuffling = kTRUE; -//=============================================// - -//PID config -Bool_t kUseNSigmaPID = kFALSE; -Double_t nSigmaMax = 3.0; -Bool_t kUseBayesianPID = kTRUE; -Double_t gMinAcceptedProbability = 0.7; - -//_________________________________________________________// -AliAnalysisTaskEventMixingBF *AddTaskBalanceEventMixing(Double_t centrMin=0., - Double_t centrMax=100., - Bool_t gRunShuffling=kFALSE, - TString centralityEstimator="V0M", - Double_t vertexZ=10., - Double_t DCAxy=-1, - Double_t DCAz=-1, - Double_t ptMin=0.3, - Double_t ptMax=1.5, - Double_t etaMin=-0.8, - Double_t etaMax=0.8, - Double_t maxTPCchi2 = -1, - Int_t minNClustersTPC = -1, - Bool_t kUsePID = kFALSE, - Int_t AODfilterBit = 128, - Bool_t bCentralTrigger = kFALSE, - Bool_t bHBTcut = kFALSE, - Bool_t bConversionCut = kFALSE, - TString fileNameBase="AnalysisResults") { - - // Creates a balance function analysis task and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - TString centralityName(""); - centralityName+=Form("%.0f",centrMin); - centralityName+="-"; - centralityName+=Form("%.0f",centrMax); - centralityName+="_"; - centralityName+=Form("%s",centralityEstimator.Data()); - centralityName+="_"; - centralityName+=Form("vZ%.1f",vertexZ); - centralityName+="_"; - centralityName+=Form("DCAxy%.1f",DCAxy); - centralityName+="_"; - centralityName+=Form("DCAz%.1f",DCAz); - centralityName+="_Pt"; - centralityName+=Form("%.1f",ptMin); - centralityName+="-"; - centralityName+=Form("%.1f",ptMax); - centralityName+="_Eta"; - centralityName+=Form("%.1f",etaMin); - centralityName+="-"; - centralityName+=Form("%.1f",etaMax); - centralityName+="_Chi"; - centralityName+=Form("%.1f",maxTPCchi2); - centralityName+="_nClus"; - centralityName+=Form("%d",minNClustersTPC); - centralityName+="_Bit"; - centralityName+=Form("%d",AODfilterBit); - if(bCentralTrigger) centralityName+="_withCentralTrigger"; - if(bHBTcut) centralityName+="_withHBTcut"; - if(bConversionCut) centralityName+="_withConversionCut"; - - - - - - TString outputFileName(fileNameBase); - outputFileName.Append(".root"); - - //=========================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskEventMixingBF", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //=========================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskEventMixingBF", "This task requires an input event handler"); - return NULL; - } - TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - if(dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC"; - - // for local changed EventMixingBF configuration - //gROOT->LoadMacro("./configBalanceFunctionAnalysisEventMixing.C"); - gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysisEventMixing.C"); - AliBalanceEventMixing *bf = 0; // Balance Function object - AliBalanceEventMixing *bfs = 0; // shuffled Balance function object - - if (analysisType=="ESD"){ - bf = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut); - if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut); - } - else if (analysisType=="AOD"){ - bf = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut); - if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut); - } - else if (analysisType=="MC"){ - bf = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut); - if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut); - } - else{ - ::Error("AddTaskEventMixingBF", "analysis type NOT known."); - return NULL; - } - - // Create the task, add it to manager and configure it. - //=========================================================================== - AliAnalysisTaskEventMixingBF *taskEventMixingBF = new AliAnalysisTaskEventMixingBF("TaskEventMixingBF"); - taskEventMixingBF->SetAnalysisObject(bf); - if(gRunShuffling) taskEventMixingBF->SetShufflingObject(bfs); - - taskEventMixingBF->SetCentralityPercentileRange(centrMin,centrMax); - if(analysisType == "ESD") { - AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC); - taskEventMixingBF->SetAnalysisCutObject(trackCuts); - if(kUsePID) { - if(kUseBayesianPID) - taskEventMixingBF->SetUseBayesianPID(gMinAcceptedProbability); - else if(kUseNSigmaPID) - taskEventMixingBF->SetUseNSigmaPID(nSigmaMax); - taskEventMixingBF->SetParticleOfInterest(AliAnalysistaskEventMixingBF::kProton); - taskEventMixingBF->SetDetectorUsedForPID(AliAnalysisTaskEventMixingBF::kTOFpid); - } - } - else if(analysisType == "AOD") { - // pt and eta cut (pt_min, pt_max, eta_min, eta_max) - taskEventMixingBF->SetAODtrackCutBit(AODfilterBit); - taskEventMixingBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - - // set extra DCA cuts (-1 no extra cut) - taskEventMixingBF->SetExtraDCACutsAOD(DCAxy,DCAz); - - // set extra TPC chi2 / nr of clusters cut - taskEventMixingBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); - - } - else if(analysisType == "MC") { - taskEventMixingBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - } - - // offline trigger selection (AliVEvent.h) - // taskEventMixingBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) - // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) - // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation - if(bCentralTrigger) taskEventMixingBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral); - else taskEventMixingBF->SelectCollisionCandidates(AliVEvent::kMB); - - // centrality estimator (default = V0M) - taskEventMixingBF->SetCentralityEstimator(centralityEstimator); - - // vertex cut (x,y,z) - taskEventMixingBF->SetVertexDiamond(.3,.3,vertexZ); - - - - //bf->PrintAnalysisSettings(); - mgr->AddTask(taskEventMixingBF); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - TString outputFileName = AliAnalysisManager::GetCommonFileName(); - outputFileName += ":PWGCFEbyE.outputBalanceFunctionAnalysis"; - AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - AliAnalysisDataContainer *coutEventMixingBF = mgr->CreateContainer(Form("listEventMixingBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(gRunShuffling) AliAnalysisDataContainer *coutEventMixingBFS = mgr->CreateContainer(Form("listEventMixingBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(kUsePID) AliAnalysisDataContainer *coutQAPID = mgr->CreateContainer(Form("listQAPID_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - - mgr->ConnectInput(taskEventMixingBF, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskEventMixingBF, 1, coutQA); - mgr->ConnectOutput(taskEventMixingBF, 2, coutEventMixingBF); - if(gRunShuffling) mgr->ConnectOutput(taskEventMixingBF, 3, coutEventMixingBFS); - if(kUsePID && analysisType == "ESD") mgr->ConnectOutput(taskEventMixingBF, 4, coutQAPID); - - return taskEventMixingBF; -} +// now in options +//=============================================// +//const char* centralityEstimator = "V0M"; +//const char* centralityEstimator = "CL1"; +//const char* centralityEstimator = "TRK"; +//=============================================// +//Bool_t gRunShuffling = kFALSE; +//Bool_t gRunShuffling = kTRUE; +//=============================================// + +//PID config +Bool_t kUseNSigmaPID = kFALSE; +Double_t nSigmaMax = 3.0; +Bool_t kUseBayesianPID = kTRUE; +Double_t gMinAcceptedProbability = 0.7; + +//_________________________________________________________// +AliAnalysisTaskEventMixingBF *AddTaskBalanceEventMixing(Double_t centrMin=0., + Double_t centrMax=100., + Bool_t gRunShuffling=kFALSE, + TString centralityEstimator="V0M", + Double_t vertexZ=10., + Double_t DCAxy=-1, + Double_t DCAz=-1, + Double_t ptMin=0.3, + Double_t ptMax=1.5, + Double_t etaMin=-0.8, + Double_t etaMax=0.8, + Double_t maxTPCchi2 = -1, + Int_t minNClustersTPC = -1, + Bool_t kUsePID = kFALSE, + Int_t AODfilterBit = 128, + Bool_t bCentralTrigger = kFALSE, + Bool_t bHBTcut = kFALSE, + Bool_t bConversionCut = kFALSE, + TString fileNameBase="AnalysisResults") { + + // Creates a balance function analysis task and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + TString centralityName(""); + centralityName+=Form("%.0f",centrMin); + centralityName+="-"; + centralityName+=Form("%.0f",centrMax); + centralityName+="_"; + centralityName+=Form("%s",centralityEstimator.Data()); + centralityName+="_"; + centralityName+=Form("vZ%.1f",vertexZ); + centralityName+="_"; + centralityName+=Form("DCAxy%.1f",DCAxy); + centralityName+="_"; + centralityName+=Form("DCAz%.1f",DCAz); + centralityName+="_Pt"; + centralityName+=Form("%.1f",ptMin); + centralityName+="-"; + centralityName+=Form("%.1f",ptMax); + centralityName+="_Eta"; + centralityName+=Form("%.1f",etaMin); + centralityName+="-"; + centralityName+=Form("%.1f",etaMax); + centralityName+="_Chi"; + centralityName+=Form("%.1f",maxTPCchi2); + centralityName+="_nClus"; + centralityName+=Form("%d",minNClustersTPC); + centralityName+="_Bit"; + centralityName+=Form("%d",AODfilterBit); + if(bCentralTrigger) centralityName+="_withCentralTrigger"; + if(bHBTcut) centralityName+="_withHBTcut"; + if(bConversionCut) centralityName+="_withConversionCut"; + + + + + + TString outputFileName(fileNameBase); + outputFileName.Append(".root"); + + //=========================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskEventMixingBF", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //=========================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskEventMixingBF", "This task requires an input event handler"); + return NULL; + } + TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + if(dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC"; + + // for local changed EventMixingBF configuration + //gROOT->LoadMacro("./configBalanceFunctionAnalysisEventMixing.C"); + gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysisEventMixing.C"); + AliBalanceEventMixing *bf = 0; // Balance Function object + AliBalanceEventMixing *bfs = 0; // shuffled Balance function object + + if (analysisType=="ESD"){ + bf = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut); + if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut); + } + else if (analysisType=="AOD"){ + bf = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut); + if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut); + } + else if (analysisType=="MC"){ + bf = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut); + if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut); + } + else{ + ::Error("AddTaskEventMixingBF", "analysis type NOT known."); + return NULL; + } + + // Create the task, add it to manager and configure it. + //=========================================================================== + AliAnalysisTaskEventMixingBF *taskEventMixingBF = new AliAnalysisTaskEventMixingBF("TaskEventMixingBF"); + taskEventMixingBF->SetAnalysisObject(bf); + if(gRunShuffling) taskEventMixingBF->SetShufflingObject(bfs); + + taskEventMixingBF->SetCentralityPercentileRange(centrMin,centrMax); + if(analysisType == "ESD") { + AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC); + taskEventMixingBF->SetAnalysisCutObject(trackCuts); + if(kUsePID) { + if(kUseBayesianPID) + taskEventMixingBF->SetUseBayesianPID(gMinAcceptedProbability); + else if(kUseNSigmaPID) + taskEventMixingBF->SetUseNSigmaPID(nSigmaMax); + taskEventMixingBF->SetParticleOfInterest(AliAnalysistaskEventMixingBF::kProton); + taskEventMixingBF->SetDetectorUsedForPID(AliAnalysisTaskEventMixingBF::kTOFpid); + } + } + else if(analysisType == "AOD") { + // pt and eta cut (pt_min, pt_max, eta_min, eta_max) + taskEventMixingBF->SetAODtrackCutBit(AODfilterBit); + taskEventMixingBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + + // set extra DCA cuts (-1 no extra cut) + taskEventMixingBF->SetExtraDCACutsAOD(DCAxy,DCAz); + + // set extra TPC chi2 / nr of clusters cut + taskEventMixingBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); + + } + else if(analysisType == "MC") { + taskEventMixingBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + } + + // offline trigger selection (AliVEvent.h) + // taskEventMixingBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) + // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) + // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation + if(bCentralTrigger) taskEventMixingBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral); + else taskEventMixingBF->SelectCollisionCandidates(AliVEvent::kMB); + + // centrality estimator (default = V0M) + taskEventMixingBF->SetCentralityEstimator(centralityEstimator); + + // vertex cut (x,y,z) + taskEventMixingBF->SetVertexDiamond(.3,.3,vertexZ); + + + + //bf->PrintAnalysisSettings(); + mgr->AddTask(taskEventMixingBF); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + TString outputFileName = AliAnalysisManager::GetCommonFileName(); + outputFileName += ":PWGCFEbyE.outputBalanceFunctionAnalysis"; + AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + AliAnalysisDataContainer *coutEventMixingBF = mgr->CreateContainer(Form("listEventMixingBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(gRunShuffling) AliAnalysisDataContainer *coutEventMixingBFS = mgr->CreateContainer(Form("listEventMixingBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(kUsePID) AliAnalysisDataContainer *coutQAPID = mgr->CreateContainer(Form("listQAPID_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + + mgr->ConnectInput(taskEventMixingBF, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskEventMixingBF, 1, coutQA); + mgr->ConnectOutput(taskEventMixingBF, 2, coutEventMixingBF); + if(gRunShuffling) mgr->ConnectOutput(taskEventMixingBF, 3, coutEventMixingBFS); + if(kUsePID && analysisType == "ESD") mgr->ConnectOutput(taskEventMixingBF, 4, coutQAPID); + + return taskEventMixingBF; +} diff --git a/PWGCF/EBYE/macros/AddTaskBalanceFunctionInpp.C b/PWGCF/EBYE/macros/AddTaskBalanceFunctionInpp.C index f14eef9fb8a..c841f09d66e 100644 --- a/PWGCF/EBYE/macros/AddTaskBalanceFunctionInpp.C +++ b/PWGCF/EBYE/macros/AddTaskBalanceFunctionInpp.C @@ -1,85 +1,85 @@ -//_________________________________________________________// -AliAnalysisTaskBF *AddTaskBalanceFunctionInpp(Double_t vertexZ=10., - Double_t DCAxy=2.4, - Double_t DCAz=3.2, - Double_t ptMin=0.3, - Double_t ptMax=1.5, - Double_t etaMin=-0.8, - Double_t etaMax=0.8, - TString fileNameBase="AnalysisResults") { - // Creates a balance function analysis task and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - TString outputFileName(fileNameBase); - outputFileName.Append(".root"); - - //=========================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskBF", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //=========================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskBF", "This task requires an input event handler"); - return NULL; - } - TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - gROOT->LoadMacro("./configBalanceFunctionAnalysis.C"); - AliBalance *bf = 0; // Balance Function object - AliBalance *bfs = 0; // shuffled Balance function object - - if (analysisType=="ESD"){ - bf = GetBalanceFunctionObject("ESD"); - bfs = GetBalanceFunctionObject("ESD",kTRUE); - } - else if (analysisType=="AOD"){ - bf = GetBalanceFunctionObject("AOD"); - bfs = GetBalanceFunctionObject("AOD",kTRUE); - } - else{ - bf = GetBalanceFunctionObject("MC"); - bfs = GetBalanceFunctionObject("MC",kTRUE); - } - - // Create the task, add it to manager and configure it. - //=========================================================================== - AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); - taskBF->SetAnalysisObject(bf); - taskBF->SetShufflingObject(bfs); - if(analysisType == "ESD") { - AliESDtrackCuts *trackCuts = GetTrackCutsObject(); - taskBF->SetAnalysisCutObject(trackCuts); - - // offline trigger selection (AliVEvent.h) - // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) - // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) - taskBF->SelectCollisionCandidates(AliVEvent::kMB); - } - else if(analysisType == "AOD") { - // pt and eta cut (pt_min, pt_max, eta_min, eta_max) - taskBF->SetAODtrackCutBit(128); - taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); - } - - // vertex cut (x,y,z) - taskBF->SetVertexDiamond(.3,.3,vertexZ); - - //bf->PrintAnalysisSettings(); - mgr->AddTask(taskBF); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //====================================================================== - AliAnalysisDataContainer *coutQA = mgr->CreateContainer("listQA", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - AliAnalysisDataContainer *coutBF = mgr->CreateContainer("listBF", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - AliAnalysisDataContainer *coutBFS= mgr->CreateContainer("listBFshuffled", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskBF, 1, coutQA); - mgr->ConnectOutput(taskBF, 2, coutBF); - mgr->ConnectOutput(taskBF, 3, coutBFS); - - return taskBF; -} +//_________________________________________________________// +AliAnalysisTaskBF *AddTaskBalanceFunctionInpp(Double_t vertexZ=10., + Double_t DCAxy=2.4, + Double_t DCAz=3.2, + Double_t ptMin=0.3, + Double_t ptMax=1.5, + Double_t etaMin=-0.8, + Double_t etaMax=0.8, + TString fileNameBase="AnalysisResults") { + // Creates a balance function analysis task and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + TString outputFileName(fileNameBase); + outputFileName.Append(".root"); + + //=========================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskBF", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //=========================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskBF", "This task requires an input event handler"); + return NULL; + } + TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + gROOT->LoadMacro("./configBalanceFunctionAnalysis.C"); + AliBalance *bf = 0; // Balance Function object + AliBalance *bfs = 0; // shuffled Balance function object + + if (analysisType=="ESD"){ + bf = GetBalanceFunctionObject("ESD"); + bfs = GetBalanceFunctionObject("ESD",kTRUE); + } + else if (analysisType=="AOD"){ + bf = GetBalanceFunctionObject("AOD"); + bfs = GetBalanceFunctionObject("AOD",kTRUE); + } + else{ + bf = GetBalanceFunctionObject("MC"); + bfs = GetBalanceFunctionObject("MC",kTRUE); + } + + // Create the task, add it to manager and configure it. + //=========================================================================== + AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); + taskBF->SetAnalysisObject(bf); + taskBF->SetShufflingObject(bfs); + if(analysisType == "ESD") { + AliESDtrackCuts *trackCuts = GetTrackCutsObject(); + taskBF->SetAnalysisCutObject(trackCuts); + + // offline trigger selection (AliVEvent.h) + // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) + // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) + taskBF->SelectCollisionCandidates(AliVEvent::kMB); + } + else if(analysisType == "AOD") { + // pt and eta cut (pt_min, pt_max, eta_min, eta_max) + taskBF->SetAODtrackCutBit(128); + taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); + } + + // vertex cut (x,y,z) + taskBF->SetVertexDiamond(.3,.3,vertexZ); + + //bf->PrintAnalysisSettings(); + mgr->AddTask(taskBF); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //====================================================================== + AliAnalysisDataContainer *coutQA = mgr->CreateContainer("listQA", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + AliAnalysisDataContainer *coutBF = mgr->CreateContainer("listBF", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + AliAnalysisDataContainer *coutBFS= mgr->CreateContainer("listBFshuffled", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskBF, 1, coutQA); + mgr->ConnectOutput(taskBF, 2, coutBF); + mgr->ConnectOutput(taskBF, 3, coutBFS); + + return taskBF; +} diff --git a/PWGCF/EBYE/macros/AddTaskBalanceFunctionInppMultiplicityTrain.C b/PWGCF/EBYE/macros/AddTaskBalanceFunctionInppMultiplicityTrain.C index 113c6bbf638..e9129b4bd70 100644 --- a/PWGCF/EBYE/macros/AddTaskBalanceFunctionInppMultiplicityTrain.C +++ b/PWGCF/EBYE/macros/AddTaskBalanceFunctionInppMultiplicityTrain.C @@ -1,97 +1,97 @@ -//_________________________________________________________// -AliAnalysisTaskBF *AddTaskBalanceFunctionInppMultiplicityTrain(Int_t nMultMin = 0, - Int_t nMultMax = 100, - Double_t vertexZ=10., - Double_t DCAxy=-1, - Double_t DCAz=-1, - Double_t ptMin=0.3, - Double_t ptMax=1.5, - Double_t etaMin=-0.8, - Double_t etaMax=0.8, - TString fileNameBase="AnalysisResults") { - // Creates a balance function analysis task and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - TString outputFileName(fileNameBase); - outputFileName.Append(".root"); - - - //=========================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskBF", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //=========================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskBF", "This task requires an input event handler"); - return NULL; - } - TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C"); - AliBalance *bf = 0; // Balance Function object - AliBalance *bfs = 0; // shuffled Balance function object - - if (analysisType=="ESD"){ - bf = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax); - bfs = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax,kTRUE); - } - else if (analysisType=="AOD"){ - bf = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax); - bfs = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax,kTRUE); - } - else{ - bf = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax); - bfs = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax,kTRUE); - } - - // Create the task, add it to manager and configure it. - //=========================================================================== - AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); - taskBF->SetAnalysisObject(bf); - taskBF->SetShufflingObject(bfs); - if(analysisType == "ESD") { - AliESDtrackCuts *trackCuts = GetTrackCutsObject(); - taskBF->SetAnalysisCutObject(trackCuts); - - // offline trigger selection (AliVEvent.h) - // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) - // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) - taskBF->SelectCollisionCandidates(AliVEvent::kMB); - } - else if(analysisType == "AOD") { - // pt and eta cut (pt_min, pt_max, eta_min, eta_max) - taskBF->SetAODtrackCutBit(128); - taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - //taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); - taskBF->SetMultiplicityRange(nMultMin,nMultMax); - } - - // vertex cut (x,y,z) - taskBF->SetVertexDiamond(.3,.3,vertexZ); - - //bf->PrintAnalysisSettings(); - mgr->AddTask(taskBF); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //====================================================================== - TString listQAName = "listQA"; listQAName += (Int_t) (nMultMin); - listQAName += "-"; listQAName += (Int_t) (nMultMax); - AliAnalysisDataContainer *coutQA = mgr->CreateContainer(listQAName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - - TString listBFName = "listBF"; listBFName += (Int_t) (nMultMin); - listBFName += "-"; listBFName += (Int_t) (nMultMax); - AliAnalysisDataContainer *coutBF = mgr->CreateContainer(listBFName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - - TString listBFshuffledName = "listBFshuffled"; listBFshuffledName += (Int_t) (nMultMin); - listBFshuffledName += "-"; listBFshuffledName += (Int_t) (nMultMax); - AliAnalysisDataContainer *coutBFS= mgr->CreateContainer(listBFshuffledName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskBF, 1, coutQA); - mgr->ConnectOutput(taskBF, 2, coutBF); - mgr->ConnectOutput(taskBF, 3, coutBFS); - - return taskBF; -} +//_________________________________________________________// +AliAnalysisTaskBF *AddTaskBalanceFunctionInppMultiplicityTrain(Int_t nMultMin = 0, + Int_t nMultMax = 100, + Double_t vertexZ=10., + Double_t DCAxy=-1, + Double_t DCAz=-1, + Double_t ptMin=0.3, + Double_t ptMax=1.5, + Double_t etaMin=-0.8, + Double_t etaMax=0.8, + TString fileNameBase="AnalysisResults") { + // Creates a balance function analysis task and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + TString outputFileName(fileNameBase); + outputFileName.Append(".root"); + + + //=========================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskBF", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //=========================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskBF", "This task requires an input event handler"); + return NULL; + } + TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C"); + AliBalance *bf = 0; // Balance Function object + AliBalance *bfs = 0; // shuffled Balance function object + + if (analysisType=="ESD"){ + bf = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax); + bfs = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax,kTRUE); + } + else if (analysisType=="AOD"){ + bf = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax); + bfs = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax,kTRUE); + } + else{ + bf = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax); + bfs = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax,kTRUE); + } + + // Create the task, add it to manager and configure it. + //=========================================================================== + AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); + taskBF->SetAnalysisObject(bf); + taskBF->SetShufflingObject(bfs); + if(analysisType == "ESD") { + AliESDtrackCuts *trackCuts = GetTrackCutsObject(); + taskBF->SetAnalysisCutObject(trackCuts); + + // offline trigger selection (AliVEvent.h) + // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) + // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) + taskBF->SelectCollisionCandidates(AliVEvent::kMB); + } + else if(analysisType == "AOD") { + // pt and eta cut (pt_min, pt_max, eta_min, eta_max) + taskBF->SetAODtrackCutBit(128); + taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + //taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); + taskBF->SetMultiplicityRange(nMultMin,nMultMax); + } + + // vertex cut (x,y,z) + taskBF->SetVertexDiamond(.3,.3,vertexZ); + + //bf->PrintAnalysisSettings(); + mgr->AddTask(taskBF); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //====================================================================== + TString listQAName = "listQA"; listQAName += (Int_t) (nMultMin); + listQAName += "-"; listQAName += (Int_t) (nMultMax); + AliAnalysisDataContainer *coutQA = mgr->CreateContainer(listQAName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + + TString listBFName = "listBF"; listBFName += (Int_t) (nMultMin); + listBFName += "-"; listBFName += (Int_t) (nMultMax); + AliAnalysisDataContainer *coutBF = mgr->CreateContainer(listBFName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + + TString listBFshuffledName = "listBFshuffled"; listBFshuffledName += (Int_t) (nMultMin); + listBFshuffledName += "-"; listBFshuffledName += (Int_t) (nMultMax); + AliAnalysisDataContainer *coutBFS= mgr->CreateContainer(listBFshuffledName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskBF, 1, coutQA); + mgr->ConnectOutput(taskBF, 2, coutBF); + mgr->ConnectOutput(taskBF, 3, coutBFS); + + return taskBF; +} diff --git a/PWGCF/EBYE/macros/AddTaskBalanceMCCentralityTrain.C b/PWGCF/EBYE/macros/AddTaskBalanceMCCentralityTrain.C index 3865c5d98a3..e0586a2423a 100644 --- a/PWGCF/EBYE/macros/AddTaskBalanceMCCentralityTrain.C +++ b/PWGCF/EBYE/macros/AddTaskBalanceMCCentralityTrain.C @@ -1,141 +1,141 @@ -// now in options -//=============================================// -//const char* centralityEstimator = "V0M"; -//const char* centralityEstimator = "CL1"; -//const char* centralityEstimator = "TRK"; -//=============================================// -//Bool_t gRunShuffling = kFALSE; -//Bool_t gRunShuffling = kTRUE; -//=============================================// -//_________________________________________________________// -AliAnalysisTaskBF *AddTaskBalanceMCCentralityTrain(Double_t centrMin=0., - Double_t centrMax=100., - Double_t impactParameterMin=0., - Double_t impactParameterMax=20., - Bool_t gRunShuffling=kFALSE, - Double_t vertexZ=10., - Double_t ptMin=0.3, - Double_t ptMax=1.5, - Double_t etaMin=-0.8, - Double_t etaMax=0.8, - TF1* gAcceptanceParameterization = 0x0, - Int_t gPdgCode = -1, - TString fileNameBase="AnalysisResults") { - - // Creates a balance function analysis task and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - TString centralityName(""); - centralityName+=Form("%.0f",centrMin); - centralityName+="-"; - centralityName+=Form("%.0f",centrMax); - - TString outputFileName(fileNameBase); - outputFileName.Append(".root"); - - //=========================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskBF", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //=========================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskBF", "This task requires an input event handler"); - return NULL; - } - TString analysisType = "MC"; - - // for local changed BF configuration - gROOT->LoadMacro("./configBalanceFunctionAnalysis.C"); - //gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C"); - AliBalance *bf = 0; // Balance Function object - AliBalance *bfs = 0; // shuffled Balance function object - - if (analysisType=="ESD"){ - bf = GetBalanceFunctionObject("ESD",centralityName.Data()); - if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityName.Data(),kTRUE); - } - else if (analysisType=="AOD"){ - bf = GetBalanceFunctionObject("AOD",centralityName.Data()); - if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityName.Data(),kTRUE); - } - else if (analysisType=="MC"){ - bf = GetBalanceFunctionObject("MC",centralityName.Data()); - if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityName.Data(),kTRUE); - } - else{ - ::Error("AddTaskBF", "analysis type NOT known."); - return NULL; - } - - // Create the task, add it to manager and configure it. - //=========================================================================== - AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); - taskBF->SetAnalysisObject(bf); - if(gRunShuffling) taskBF->SetShufflingObject(bfs); - - if(analysisType == "ESD") { - AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC); - taskBF->SetAnalysisCutObject(trackCuts); - // centrality estimator (default = V0M) - taskBF->SetCentralityEstimator(centralityEstimator); - taskBF->SetCentralityPercentileRange(impactParameterMin, - impactParameterMax); - } - else if(analysisType == "AOD") { - // pt and eta cut (pt_min, pt_max, eta_min, eta_max) - taskBF->SetAODtrackCutBit(128); - taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - taskBF->SetCentralityEstimator(centralityEstimator); - taskBF->SetCentralityPercentileRange(impactParameterMin, - impactParameterMax); - - // set extra DCA cuts (-1 no extra cut) - taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); - - // set extra TPC chi2 / nr of clusters cut - taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); - taskBF->SetCentralityEstimator(centralityEstimator); - } - else if(analysisType == "MC") { - Printf("********************ANALYSIS TYPE MC********************************"); - if(gAcceptanceParameterization) - taskBF->SetAcceptanceParameterization(gAcceptanceParameterization); - if(gPdgCode != -1) - taskBF->SetPDGCode(gPdgCode); - taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - taskBF->SetImpactParameterRange(impactParameterMin, - impactParameterMax); - } - - // offline trigger selection (AliVEvent.h) - // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) - // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) - // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation - //taskBF->SelectCollisionCandidates(AliVEvent::kMB); - - // vertex cut (x,y,z) - taskBF->SetVertexDiamond(.3,.3,vertexZ); - - - - //bf->PrintAnalysisSettings(); - mgr->AddTask(taskBF); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - TString outputFileName = AliAnalysisManager::GetCommonFileName(); - outputFileName += ":PWGCFEbyE.outputBalanceFunctionAnalysis"; - AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - AliAnalysisDataContainer *coutBF = mgr->CreateContainer(Form("listBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(gRunShuffling) AliAnalysisDataContainer *coutBFS= mgr->CreateContainer(Form("listBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskBF, 1, coutQA); - mgr->ConnectOutput(taskBF, 2, coutBF); - if(gRunShuffling) mgr->ConnectOutput(taskBF, 3, coutBFS); - - return taskBF; -} +// now in options +//=============================================// +//const char* centralityEstimator = "V0M"; +//const char* centralityEstimator = "CL1"; +//const char* centralityEstimator = "TRK"; +//=============================================// +//Bool_t gRunShuffling = kFALSE; +//Bool_t gRunShuffling = kTRUE; +//=============================================// +//_________________________________________________________// +AliAnalysisTaskBF *AddTaskBalanceMCCentralityTrain(Double_t centrMin=0., + Double_t centrMax=100., + Double_t impactParameterMin=0., + Double_t impactParameterMax=20., + Bool_t gRunShuffling=kFALSE, + Double_t vertexZ=10., + Double_t ptMin=0.3, + Double_t ptMax=1.5, + Double_t etaMin=-0.8, + Double_t etaMax=0.8, + TF1* gAcceptanceParameterization = 0x0, + Int_t gPdgCode = -1, + TString fileNameBase="AnalysisResults") { + + // Creates a balance function analysis task and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + TString centralityName(""); + centralityName+=Form("%.0f",centrMin); + centralityName+="-"; + centralityName+=Form("%.0f",centrMax); + + TString outputFileName(fileNameBase); + outputFileName.Append(".root"); + + //=========================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskBF", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //=========================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskBF", "This task requires an input event handler"); + return NULL; + } + TString analysisType = "MC"; + + // for local changed BF configuration + gROOT->LoadMacro("./configBalanceFunctionAnalysis.C"); + //gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C"); + AliBalance *bf = 0; // Balance Function object + AliBalance *bfs = 0; // shuffled Balance function object + + if (analysisType=="ESD"){ + bf = GetBalanceFunctionObject("ESD",centralityName.Data()); + if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityName.Data(),kTRUE); + } + else if (analysisType=="AOD"){ + bf = GetBalanceFunctionObject("AOD",centralityName.Data()); + if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityName.Data(),kTRUE); + } + else if (analysisType=="MC"){ + bf = GetBalanceFunctionObject("MC",centralityName.Data()); + if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityName.Data(),kTRUE); + } + else{ + ::Error("AddTaskBF", "analysis type NOT known."); + return NULL; + } + + // Create the task, add it to manager and configure it. + //=========================================================================== + AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF"); + taskBF->SetAnalysisObject(bf); + if(gRunShuffling) taskBF->SetShufflingObject(bfs); + + if(analysisType == "ESD") { + AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC); + taskBF->SetAnalysisCutObject(trackCuts); + // centrality estimator (default = V0M) + taskBF->SetCentralityEstimator(centralityEstimator); + taskBF->SetCentralityPercentileRange(impactParameterMin, + impactParameterMax); + } + else if(analysisType == "AOD") { + // pt and eta cut (pt_min, pt_max, eta_min, eta_max) + taskBF->SetAODtrackCutBit(128); + taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + taskBF->SetCentralityEstimator(centralityEstimator); + taskBF->SetCentralityPercentileRange(impactParameterMin, + impactParameterMax); + + // set extra DCA cuts (-1 no extra cut) + taskBF->SetExtraDCACutsAOD(DCAxy,DCAz); + + // set extra TPC chi2 / nr of clusters cut + taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); + taskBF->SetCentralityEstimator(centralityEstimator); + } + else if(analysisType == "MC") { + Printf("********************ANALYSIS TYPE MC********************************"); + if(gAcceptanceParameterization) + taskBF->SetAcceptanceParameterization(gAcceptanceParameterization); + if(gPdgCode != -1) + taskBF->SetPDGCode(gPdgCode); + taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + taskBF->SetImpactParameterRange(impactParameterMin, + impactParameterMax); + } + + // offline trigger selection (AliVEvent.h) + // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) + // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) + // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation + //taskBF->SelectCollisionCandidates(AliVEvent::kMB); + + // vertex cut (x,y,z) + taskBF->SetVertexDiamond(.3,.3,vertexZ); + + + + //bf->PrintAnalysisSettings(); + mgr->AddTask(taskBF); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + TString outputFileName = AliAnalysisManager::GetCommonFileName(); + outputFileName += ":PWGCFEbyE.outputBalanceFunctionAnalysis"; + AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + AliAnalysisDataContainer *coutBF = mgr->CreateContainer(Form("listBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(gRunShuffling) AliAnalysisDataContainer *coutBFS= mgr->CreateContainer(Form("listBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskBF, 1, coutQA); + mgr->ConnectOutput(taskBF, 2, coutBF); + if(gRunShuffling) mgr->ConnectOutput(taskBF, 3, coutBFS); + + return taskBF; +} diff --git a/PWGCF/EBYE/macros/AddTaskBalanceTriggered.C b/PWGCF/EBYE/macros/AddTaskBalanceTriggered.C index 903f73c905b..0f5d13c89b0 100644 --- a/PWGCF/EBYE/macros/AddTaskBalanceTriggered.C +++ b/PWGCF/EBYE/macros/AddTaskBalanceTriggered.C @@ -1,171 +1,171 @@ -// now in options - -//PID config -Bool_t kUseNSigmaPID = kFALSE; -Double_t nSigmaMax = 3.0; -Bool_t kUseBayesianPID = kTRUE; -Double_t gMinAcceptedProbability = 0.7; - -//_________________________________________________________// -AliAnalysisTaskTriggeredBF *AddTaskBalanceTriggered(Double_t centrMin=0., - Double_t centrMax=80., - Bool_t gRunShuffling=kFALSE, - Bool_t gRunMixing=kFALSE, - Bool_t gRunV0=kFALSE, - TString centralityEstimator="V0M", - Double_t vertexZ=10., - Double_t DCAxy=-1, - Double_t DCAz=-1, - Double_t ptMin=0.15, - Double_t ptMax=20, - Double_t etaMin=-0.8, - Double_t etaMax=0.8, - Double_t maxTPCchi2 = -1, - Int_t minNClustersTPC = -1, - Bool_t kUsePID = kFALSE, - Int_t AODfilterBit = 128, - Bool_t bCentralTrigger = kFALSE, - TString fileNameBase="AnalysisResults") { - - // Creates a balance function analysis task and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - TString centralityName(""); - centralityName+=Form("%.0f",centrMin); - centralityName+="-"; - centralityName+=Form("%.0f",centrMax); - centralityName+="_"; - centralityName+=Form("%s",centralityEstimator.Data()); - centralityName+="_"; - centralityName+=Form("vZ%.1f",vertexZ); - centralityName+="_"; - centralityName+=Form("DCAxy%.1f",DCAxy); - centralityName+="_"; - centralityName+=Form("DCAz%.1f",DCAz); - centralityName+="_Pt"; - centralityName+=Form("%.1f",ptMin); - centralityName+="-"; - centralityName+=Form("%.1f",ptMax); - centralityName+="_Eta"; - centralityName+=Form("%.1f",etaMin); - centralityName+="-"; - centralityName+=Form("%.1f",etaMax); - centralityName+="_Chi"; - centralityName+=Form("%.1f",maxTPCchi2); - centralityName+="_nClus"; - centralityName+=Form("%d",minNClustersTPC); - centralityName+="_Bit"; - centralityName+=Form("%d",AODfilterBit); - if(bCentralTrigger) centralityName+="_withCentralTrigger"; - if(gRunV0) centralityName+="_V0"; - - - - TString outputFileName(fileNameBase); - outputFileName.Append(".root"); - - //=========================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskTriggeredBF", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //=========================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskTriggeredBF", "This task requires an input event handler"); - return NULL; - } - TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - if(dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC"; - - // setup the balance function objects - AliBalanceTriggered *bf = 0; // Balance Function object - AliBalanceTriggered *bfs = 0; // shuffled Balance function object - AliBalanceTriggered *bfm = 0; // mixing Balance function object - - if (analysisType=="AOD"){ - - bf = new AliBalanceTriggered(); - bf->SetAnalysisLevel(analysisType); - bf->InitHistograms(); - - if(gRunShuffling){ - bfs = new AliBalanceTriggered(); - bfs->SetAnalysisLevel(analysisType); - bfs->InitHistograms(); - } - if(gRunMixing){ - bfm = new AliBalanceTriggered(); - bfm->SetAnalysisLevel(analysisType); - bfm->InitHistograms(); - } - } - else{ - ::Error("AddTaskTriggeredBF", "analysis type NOT supported."); - return NULL; - } - - // Create the task, add it to manager and configure it. - //=========================================================================== - AliAnalysisTaskTriggeredBF *taskTriggeredBF = new AliAnalysisTaskTriggeredBF("TaskTriggeredBF"); - taskTriggeredBF->SetAnalysisObject(bf); - if(gRunShuffling) taskTriggeredBF->SetShufflingObject(bfs); - if(gRunMixing){ - taskTriggeredBF->SetMixingObject(bfm); - taskTriggeredBF->SetMixingTracks(50000); - } - if(gRunV0){ - taskTriggeredBF->SetRunV0(kTRUE); - } - - taskTriggeredBF->SetCentralityPercentileRange(centrMin,centrMax); - if(analysisType == "AOD") { - // pt and eta cut (pt_min, pt_max, eta_min, eta_max) - taskTriggeredBF->SetAODtrackCutBit(AODfilterBit); - taskTriggeredBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); - - // set extra DCA cuts (-1 no extra cut) - taskTriggeredBF->SetExtraDCACutsAOD(DCAxy,DCAz); - - // set extra TPC chi2 / nr of clusters cut - taskTriggeredBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); - - } - - // offline trigger selection (AliVEvent.h) - // taskTriggeredBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) - // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) - // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation - if(bCentralTrigger) taskTriggeredBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral); - else taskTriggeredBF->SelectCollisionCandidates(AliVEvent::kMB); - - // centrality estimator (default = V0M) - taskTriggeredBF->SetCentralityEstimator(centralityEstimator); - - // vertex cut (x,y,z) - taskTriggeredBF->SetVertexDiamond(.3,.3,vertexZ); - - //bf->PrintAnalysisSettings(); - mgr->AddTask(taskTriggeredBF); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - TString outputFileName = AliAnalysisManager::GetCommonFileName(); - outputFileName += ":PWGCFEbyE.outputBalanceFunctionTriggeredAnalysis"; - AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - AliAnalysisDataContainer *coutTriggeredBF = mgr->CreateContainer(Form("listTriggeredBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(gRunShuffling) AliAnalysisDataContainer *coutTriggeredBFS = mgr->CreateContainer(Form("listTriggeredBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(gRunMixing) AliAnalysisDataContainer *coutTriggeredBFM = mgr->CreateContainer(Form("listTriggeredBFMixed_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - if(gRunV0) AliAnalysisDataContainer *coutQAV0 = mgr->CreateContainer(Form("listQAV0_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); - - mgr->ConnectInput(taskTriggeredBF, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(taskTriggeredBF, 1, coutQA); - mgr->ConnectOutput(taskTriggeredBF, 2, coutTriggeredBF); - if(gRunShuffling) mgr->ConnectOutput(taskTriggeredBF, 3, coutTriggeredBFS); - if(gRunMixing) mgr->ConnectOutput(taskTriggeredBF, 4, coutTriggeredBFM); - if(gRunV0) mgr->ConnectOutput(taskTriggeredBF, 5, coutQAV0); - - return taskTriggeredBF; -} +// now in options + +//PID config +Bool_t kUseNSigmaPID = kFALSE; +Double_t nSigmaMax = 3.0; +Bool_t kUseBayesianPID = kTRUE; +Double_t gMinAcceptedProbability = 0.7; + +//_________________________________________________________// +AliAnalysisTaskTriggeredBF *AddTaskBalanceTriggered(Double_t centrMin=0., + Double_t centrMax=80., + Bool_t gRunShuffling=kFALSE, + Bool_t gRunMixing=kFALSE, + Bool_t gRunV0=kFALSE, + TString centralityEstimator="V0M", + Double_t vertexZ=10., + Double_t DCAxy=-1, + Double_t DCAz=-1, + Double_t ptMin=0.15, + Double_t ptMax=20, + Double_t etaMin=-0.8, + Double_t etaMax=0.8, + Double_t maxTPCchi2 = -1, + Int_t minNClustersTPC = -1, + Bool_t kUsePID = kFALSE, + Int_t AODfilterBit = 128, + Bool_t bCentralTrigger = kFALSE, + TString fileNameBase="AnalysisResults") { + + // Creates a balance function analysis task and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + TString centralityName(""); + centralityName+=Form("%.0f",centrMin); + centralityName+="-"; + centralityName+=Form("%.0f",centrMax); + centralityName+="_"; + centralityName+=Form("%s",centralityEstimator.Data()); + centralityName+="_"; + centralityName+=Form("vZ%.1f",vertexZ); + centralityName+="_"; + centralityName+=Form("DCAxy%.1f",DCAxy); + centralityName+="_"; + centralityName+=Form("DCAz%.1f",DCAz); + centralityName+="_Pt"; + centralityName+=Form("%.1f",ptMin); + centralityName+="-"; + centralityName+=Form("%.1f",ptMax); + centralityName+="_Eta"; + centralityName+=Form("%.1f",etaMin); + centralityName+="-"; + centralityName+=Form("%.1f",etaMax); + centralityName+="_Chi"; + centralityName+=Form("%.1f",maxTPCchi2); + centralityName+="_nClus"; + centralityName+=Form("%d",minNClustersTPC); + centralityName+="_Bit"; + centralityName+=Form("%d",AODfilterBit); + if(bCentralTrigger) centralityName+="_withCentralTrigger"; + if(gRunV0) centralityName+="_V0"; + + + + TString outputFileName(fileNameBase); + outputFileName.Append(".root"); + + //=========================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskTriggeredBF", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //=========================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskTriggeredBF", "This task requires an input event handler"); + return NULL; + } + TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + if(dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC"; + + // setup the balance function objects + AliBalanceTriggered *bf = 0; // Balance Function object + AliBalanceTriggered *bfs = 0; // shuffled Balance function object + AliBalanceTriggered *bfm = 0; // mixing Balance function object + + if (analysisType=="AOD"){ + + bf = new AliBalanceTriggered(); + bf->SetAnalysisLevel(analysisType); + bf->InitHistograms(); + + if(gRunShuffling){ + bfs = new AliBalanceTriggered(); + bfs->SetAnalysisLevel(analysisType); + bfs->InitHistograms(); + } + if(gRunMixing){ + bfm = new AliBalanceTriggered(); + bfm->SetAnalysisLevel(analysisType); + bfm->InitHistograms(); + } + } + else{ + ::Error("AddTaskTriggeredBF", "analysis type NOT supported."); + return NULL; + } + + // Create the task, add it to manager and configure it. + //=========================================================================== + AliAnalysisTaskTriggeredBF *taskTriggeredBF = new AliAnalysisTaskTriggeredBF("TaskTriggeredBF"); + taskTriggeredBF->SetAnalysisObject(bf); + if(gRunShuffling) taskTriggeredBF->SetShufflingObject(bfs); + if(gRunMixing){ + taskTriggeredBF->SetMixingObject(bfm); + taskTriggeredBF->SetMixingTracks(50000); + } + if(gRunV0){ + taskTriggeredBF->SetRunV0(kTRUE); + } + + taskTriggeredBF->SetCentralityPercentileRange(centrMin,centrMax); + if(analysisType == "AOD") { + // pt and eta cut (pt_min, pt_max, eta_min, eta_max) + taskTriggeredBF->SetAODtrackCutBit(AODfilterBit); + taskTriggeredBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); + + // set extra DCA cuts (-1 no extra cut) + taskTriggeredBF->SetExtraDCACutsAOD(DCAxy,DCAz); + + // set extra TPC chi2 / nr of clusters cut + taskTriggeredBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC); + + } + + // offline trigger selection (AliVEvent.h) + // taskTriggeredBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) + // with this only selected events are analyzed (first 2 bins in event QA histogram are the same)) + // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation + if(bCentralTrigger) taskTriggeredBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral); + else taskTriggeredBF->SelectCollisionCandidates(AliVEvent::kMB); + + // centrality estimator (default = V0M) + taskTriggeredBF->SetCentralityEstimator(centralityEstimator); + + // vertex cut (x,y,z) + taskTriggeredBF->SetVertexDiamond(.3,.3,vertexZ); + + //bf->PrintAnalysisSettings(); + mgr->AddTask(taskTriggeredBF); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + TString outputFileName = AliAnalysisManager::GetCommonFileName(); + outputFileName += ":PWGCFEbyE.outputBalanceFunctionTriggeredAnalysis"; + AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + AliAnalysisDataContainer *coutTriggeredBF = mgr->CreateContainer(Form("listTriggeredBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(gRunShuffling) AliAnalysisDataContainer *coutTriggeredBFS = mgr->CreateContainer(Form("listTriggeredBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(gRunMixing) AliAnalysisDataContainer *coutTriggeredBFM = mgr->CreateContainer(Form("listTriggeredBFMixed_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + if(gRunV0) AliAnalysisDataContainer *coutQAV0 = mgr->CreateContainer(Form("listQAV0_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data()); + + mgr->ConnectInput(taskTriggeredBF, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskTriggeredBF, 1, coutQA); + mgr->ConnectOutput(taskTriggeredBF, 2, coutTriggeredBF); + if(gRunShuffling) mgr->ConnectOutput(taskTriggeredBF, 3, coutTriggeredBFS); + if(gRunMixing) mgr->ConnectOutput(taskTriggeredBF, 4, coutTriggeredBFM); + if(gRunV0) mgr->ConnectOutput(taskTriggeredBF, 5, coutQAV0); + + return taskTriggeredBF; +} diff --git a/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C b/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C index 4dda80cf121..8a020aff840 100644 --- a/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C +++ b/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C @@ -1,68 +1,68 @@ -//__________________________________________________// -AliBalance *GetBalanceFunctionObject(const char* analysisLevel = "AOD", - const char* centralityName = 0x0, - Double_t centrMin = 0., - Double_t centrMax = 100., - Bool_t bShuffle = kFALSE, - Bool_t bHBTcut = kFALSE, - Bool_t bConversionCut = kFALSE, - Bool_t kUsePID = kTRUE) { - //Function to setup the AliBalance object and return it - AliBalance *gBalance = new AliBalance(); - gBalance->SetAnalysisLevel(analysisLevel); - gBalance->SetShuffle(bShuffle); - gBalance->SetHBTcut(bHBTcut); - gBalance->SetConversionCut(bConversionCut); - if(centralityName) gBalance->SetCentralityIdentifier(centralityName); - gBalance->SetCentralityInterval(centrMin,centrMax); - - //Set all analyses separately - //Rapidity - gBalance->SetInterval(AliBalance::kRapidity,-0.8,0.8,64,0.0,1.6); - //Eta - gBalance->SetInterval(AliBalance::kEta,-0.8,0.8,64,0.0,1.6); - //Qlong - gBalance->SetInterval(AliBalance::kQlong,-1,1,100,0.0,2.0); - //Qout - gBalance->SetInterval(AliBalance::kQout,-1,1,100,0.0,2.0); - //Qside - gBalance->SetInterval(AliBalance::kQside,-1,1,100,0.0,2.0); - //Qinv - gBalance->SetInterval(AliBalance::kQinv,-1,1,100,0.0,5.0); - //Phi - gBalance->SetInterval(AliBalance::kPhi,0.,360.,90,0.,180.0); - - //Init the histograms - gBalance->InitHistograms(); - - return gBalance; -} - -//__________________________________________________// -AliESDtrackCuts *GetTrackCutsObject(Double_t ptMin, Double_t ptMax, Double_t etaMin, Double_t etaMax, Double_t maxTPCchi2, Double_t maxDCAz, Double_t maxDCAxy, Int_t minNClustersTPC) { - - // only used for ESDs - // Function to setup the AliESDtrackCuts object and return it - AliESDtrackCuts *cuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); - cuts->SetRequireTPCStandAlone(kTRUE); // TPC only cuts! - - // extra TPC cuts (Syst studies) - if(minNClustersTPC != -1) cuts->SetMinNClustersTPC(minNClustersTPC); - else cuts->SetMinNClustersTPC(70); // standard for filter bit 128 - - if(maxTPCchi2 != -1) cuts->SetMaxChi2PerClusterTPC(maxTPCchi2); - - // extra DCA cuts (Syst studies) - if(maxDCAz!=-1 && maxDCAxy != -1){ - cuts->SetMaxDCAToVertexZ(maxDCAz); - cuts->SetMaxDCAToVertexXY(maxDCAxy); - } - - cuts->SetPtRange(ptMin,ptMax); - cuts->SetEtaRange(etaMin,etaMax); - cuts->DefineHistograms(1); - //cuts->SaveHistograms("trackCuts"); - - return cuts; -} - +//__________________________________________________// +AliBalance *GetBalanceFunctionObject(const char* analysisLevel = "AOD", + const char* centralityName = 0x0, + Double_t centrMin = 0., + Double_t centrMax = 100., + Bool_t bShuffle = kFALSE, + Bool_t bHBTcut = kFALSE, + Bool_t bConversionCut = kFALSE, + Bool_t kUsePID = kTRUE) { + //Function to setup the AliBalance object and return it + AliBalance *gBalance = new AliBalance(); + gBalance->SetAnalysisLevel(analysisLevel); + gBalance->SetShuffle(bShuffle); + gBalance->SetHBTcut(bHBTcut); + gBalance->SetConversionCut(bConversionCut); + if(centralityName) gBalance->SetCentralityIdentifier(centralityName); + gBalance->SetCentralityInterval(centrMin,centrMax); + + //Set all analyses separately + //Rapidity + gBalance->SetInterval(AliBalance::kRapidity,-0.8,0.8,64,0.0,1.6); + //Eta + gBalance->SetInterval(AliBalance::kEta,-0.8,0.8,64,0.0,1.6); + //Qlong + gBalance->SetInterval(AliBalance::kQlong,-1,1,100,0.0,2.0); + //Qout + gBalance->SetInterval(AliBalance::kQout,-1,1,100,0.0,2.0); + //Qside + gBalance->SetInterval(AliBalance::kQside,-1,1,100,0.0,2.0); + //Qinv + gBalance->SetInterval(AliBalance::kQinv,-1,1,100,0.0,5.0); + //Phi + gBalance->SetInterval(AliBalance::kPhi,0.,360.,90,0.,180.0); + + //Init the histograms + gBalance->InitHistograms(); + + return gBalance; +} + +//__________________________________________________// +AliESDtrackCuts *GetTrackCutsObject(Double_t ptMin, Double_t ptMax, Double_t etaMin, Double_t etaMax, Double_t maxTPCchi2, Double_t maxDCAz, Double_t maxDCAxy, Int_t minNClustersTPC) { + + // only used for ESDs + // Function to setup the AliESDtrackCuts object and return it + AliESDtrackCuts *cuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); + cuts->SetRequireTPCStandAlone(kTRUE); // TPC only cuts! + + // extra TPC cuts (Syst studies) + if(minNClustersTPC != -1) cuts->SetMinNClustersTPC(minNClustersTPC); + else cuts->SetMinNClustersTPC(70); // standard for filter bit 128 + + if(maxTPCchi2 != -1) cuts->SetMaxChi2PerClusterTPC(maxTPCchi2); + + // extra DCA cuts (Syst studies) + if(maxDCAz!=-1 && maxDCAxy != -1){ + cuts->SetMaxDCAToVertexZ(maxDCAz); + cuts->SetMaxDCAToVertexXY(maxDCAxy); + } + + cuts->SetPtRange(ptMin,ptMax); + cuts->SetEtaRange(etaMin,etaMax); + cuts->DefineHistograms(1); + //cuts->SaveHistograms("trackCuts"); + + return cuts; +} + diff --git a/PWGCF/EBYE/macros/configBalanceFunctionAnalysisEventMixing.C b/PWGCF/EBYE/macros/configBalanceFunctionAnalysisEventMixing.C index d443cc07ae2..ef1e598fc9c 100644 --- a/PWGCF/EBYE/macros/configBalanceFunctionAnalysisEventMixing.C +++ b/PWGCF/EBYE/macros/configBalanceFunctionAnalysisEventMixing.C @@ -1,67 +1,67 @@ -//__________________________________________________// -AliBalanceEventMixing *GetBalanceFunctionObject(const char* analysisLevel = "ESD", - const char* centralityName = 0x0, - Double_t centrMin = 0., - Double_t centrMax = 100., - Bool_t bShuffle = kFALSE, - Bool_t bHBTcut = kFALSE, - Bool_t bConversionCut = kFALSE) { - //Function to setup the AliBalanceEventMixing object and return it - AliBalanceEventMixing *gBalance = new AliBalanceEventMixing(); - gBalance->SetAnalysisLevel(analysisLevel); - gBalance->SetShuffle(bShuffle); - gBalance->SetHBTcut(bHBTcut); - gBalance->SetConversionCut(bConversionCut); - if(centralityName) gBalance->SetCentralityIdentifier(centralityName); - gBalance->SetCentralityInterval(centrMin,centrMax); - - //Set all analyses separately - //Rapidity - gBalance->SetInterval(AliBalanceEventMixing::kRapidity,-0.8,0.8,64,0.0,1.6); - //Eta - gBalance->SetInterval(AliBalanceEventMixing::kEta,-0.8,0.8,64,0.0,1.6); - //Qlong - gBalance->SetInterval(AliBalanceEventMixing::kQlong,-1,1,100,0.0,2.0); - //Qout - gBalance->SetInterval(AliBalanceEventMixing::kQout,-1,1,100,0.0,2.0); - //Qside - gBalance->SetInterval(AliBalanceEventMixing::kQside,-1,1,100,0.0,2.0); - //Qinv - gBalance->SetInterval(AliBalanceEventMixing::kQinv,-1,1,100,0.0,2.0); - //Phi - gBalance->SetInterval(AliBalanceEventMixing::kPhi,0.,360.,90,0.,180.0); - - //Init the histograms - gBalance->InitHistograms(); - - return gBalance; -} - -//__________________________________________________// -AliESDtrackCuts *GetTrackCutsObject(Double_t ptMin, Double_t ptMax, Double_t etaMin, Double_t etaMax, Double_t maxTPCchi2, Double_t maxDCAz, Double_t maxDCAxy, Int_t minNClustersTPC) { - - // only used for ESDs - // Function to setup the AliESDtrackCuts object and return it - AliESDtrackCuts *cuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); - cuts->SetRequireTPCStandAlone(kTRUE); // TPC only cuts! - - // extra TPC cuts (Syst studies) - if(minNClustersTPC != -1) cuts->SetMinNClustersTPC(minNClustersTPC); - else cuts->SetMinNClustersTPC(70); // standard for filter bit 128 - - if(maxTPCchi2 != -1) cuts->SetMaxChi2PerClusterTPC(maxTPCchi2); - - // extra DCA cuts (Syst studies) - if(maxDCAz!=-1 && maxDCAxy != -1){ - cuts->SetMaxDCAToVertexZ(maxDCAz); - cuts->SetMaxDCAToVertexXY(maxDCAxy); - } - - cuts->SetPtRange(ptMin,ptMax); - cuts->SetEtaRange(etaMin,etaMax); - cuts->DefineHistograms(1); - //cuts->SaveHistograms("trackCuts"); - - return cuts; -} - +//__________________________________________________// +AliBalanceEventMixing *GetBalanceFunctionObject(const char* analysisLevel = "ESD", + const char* centralityName = 0x0, + Double_t centrMin = 0., + Double_t centrMax = 100., + Bool_t bShuffle = kFALSE, + Bool_t bHBTcut = kFALSE, + Bool_t bConversionCut = kFALSE) { + //Function to setup the AliBalanceEventMixing object and return it + AliBalanceEventMixing *gBalance = new AliBalanceEventMixing(); + gBalance->SetAnalysisLevel(analysisLevel); + gBalance->SetShuffle(bShuffle); + gBalance->SetHBTcut(bHBTcut); + gBalance->SetConversionCut(bConversionCut); + if(centralityName) gBalance->SetCentralityIdentifier(centralityName); + gBalance->SetCentralityInterval(centrMin,centrMax); + + //Set all analyses separately + //Rapidity + gBalance->SetInterval(AliBalanceEventMixing::kRapidity,-0.8,0.8,64,0.0,1.6); + //Eta + gBalance->SetInterval(AliBalanceEventMixing::kEta,-0.8,0.8,64,0.0,1.6); + //Qlong + gBalance->SetInterval(AliBalanceEventMixing::kQlong,-1,1,100,0.0,2.0); + //Qout + gBalance->SetInterval(AliBalanceEventMixing::kQout,-1,1,100,0.0,2.0); + //Qside + gBalance->SetInterval(AliBalanceEventMixing::kQside,-1,1,100,0.0,2.0); + //Qinv + gBalance->SetInterval(AliBalanceEventMixing::kQinv,-1,1,100,0.0,2.0); + //Phi + gBalance->SetInterval(AliBalanceEventMixing::kPhi,0.,360.,90,0.,180.0); + + //Init the histograms + gBalance->InitHistograms(); + + return gBalance; +} + +//__________________________________________________// +AliESDtrackCuts *GetTrackCutsObject(Double_t ptMin, Double_t ptMax, Double_t etaMin, Double_t etaMax, Double_t maxTPCchi2, Double_t maxDCAz, Double_t maxDCAxy, Int_t minNClustersTPC) { + + // only used for ESDs + // Function to setup the AliESDtrackCuts object and return it + AliESDtrackCuts *cuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); + cuts->SetRequireTPCStandAlone(kTRUE); // TPC only cuts! + + // extra TPC cuts (Syst studies) + if(minNClustersTPC != -1) cuts->SetMinNClustersTPC(minNClustersTPC); + else cuts->SetMinNClustersTPC(70); // standard for filter bit 128 + + if(maxTPCchi2 != -1) cuts->SetMaxChi2PerClusterTPC(maxTPCchi2); + + // extra DCA cuts (Syst studies) + if(maxDCAz!=-1 && maxDCAxy != -1){ + cuts->SetMaxDCAToVertexZ(maxDCAz); + cuts->SetMaxDCAToVertexXY(maxDCAxy); + } + + cuts->SetPtRange(ptMin,ptMax); + cuts->SetEtaRange(etaMin,etaMax); + cuts->DefineHistograms(1); + //cuts->SaveHistograms("trackCuts"); + + return cuts; +} + diff --git a/PWGCF/EBYE/macros/runBalanceFunction.C b/PWGCF/EBYE/macros/runBalanceFunction.C index 0ad9ed264db..af1b4dfd07d 100644 --- a/PWGCF/EBYE/macros/runBalanceFunction.C +++ b/PWGCF/EBYE/macros/runBalanceFunction.C @@ -1,454 +1,454 @@ -// run.C -// -// Template run macro for AliBasicTask.cxx/.h with example layout of -// physics selections and options, in macro and task. -// -// Author: Arvinder Palaha -// -class AliAnalysisGrid; -class AliAnalysisTaskBF; -class AliBalance; - -//Centrality stuff -Int_t binfirst = 0; //where do we start numbering bins -Int_t binlast = 8; //where do we stop numbering bins -const Int_t numberOfCentralityBins = 9; -Float_t centralityArray[numberOfCentralityBins+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.}; // in centrality percentile - -//Systematic studies -const Int_t numberOfSyst = 13; -Float_t vZ[numberOfSyst] = {10.,12.,6.,8.,10.,10.,10.,10.,10.,10.,10.,10.,10.}; // global Vertex Z cut -Float_t DCAxy[numberOfSyst] = {-1.,2.4,2.4,2.4,2.2,2.0,1.8,2.4,2.4,2.4,2.4,2.4,2.4}; // DCA xy cut (afterburner, -1 = w/o additional cut) -Float_t DCAz[numberOfSyst] = {-1.,3.2,3.2,3.2,3.0,2.8,2.6,3.2,3.2,3.2,3.2,3.2,3.2}; // DCA z cut (afterburner, -1 = w/o additional cut) -Float_t ptMin[numberOfSyst] = {0.3,0.3,0.3,0.3,0.3,0.3,0.3,1.5,5.0,0.3,0.3,0.3,0.3}; // pt cuts -Float_t ptMax[numberOfSyst] = {1.5,1.5,1.5,1.5,1.5,1.5,1.5,5.0,10.0,10.0,1.5,1.5,1.5}; // pt cuts -Float_t etaMin[numberOfSyst] = {-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-1.0,-0.6,-0.4}; // eta cuts -Float_t etaMax[numberOfSyst] = {0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,1.0,0.6,0.4}; // eta cuts - -Bool_t kUsePID = kFALSE; - -//______________________________________________________________________________ -void runBalanceFunction( - const char* runtype = "local", // local, proof or grid - const char *gridmode = "test", // Set the run mode (can be "full", "test", "offline", "submit" or "terminate"). Full & Test work for proof - const Int_t bunchN = 0, - const bool bAOD = 1, // 1 = AOD ANALYSIS, 0 = ESD ANALYSIS - const bool bMCtruth = 0, // 1 = MCEvent handler is on (MC truth), 0 = MCEvent handler is off (MC reconstructed/real data) - const bool bMCphyssel = 0, // 1 = looking at MC truth or reconstructed, 0 = looking at real data - const Long64_t nentries = 50000, // for local and proof mode, ignored in grid mode. Set to 1234567890 for all events. - const Long64_t firstentry = 0, // for local and proof mode, ignored in grid mode - TString proofdataset = "bunchPROOF", // path to dataset on proof cluster, for proof analysis - const char *proofcluster = "miweber@alice-caf.cern.ch", // which proof cluster to use in proof mode - const char *taskname = "BF_Syst_Test" // sets name of grid generated macros - ) -{ - // check run type - if(runtype != "local" && runtype != "proof" && runtype != "grid"){ - Printf("\n\tIncorrect run option, check first argument of run macro"); - Printf("\tint runtype = local, proof or grid\n"); - return; - } - Printf("%s analysis chosen",runtype); - - // load libraries - gSystem->Load("libCore.so"); - gSystem->Load("libGeom.so"); - gSystem->Load("libVMC.so"); - gSystem->Load("libPhysics.so"); - gSystem->Load("libTree.so"); - gSystem->Load("libSTEERBase.so"); - gSystem->Load("libESD.so"); - gSystem->Load("libAOD.so"); - gSystem->Load("libANALYSIS.so"); - gSystem->Load("libANALYSISalice.so"); - gSystem->Load("libEventMixing.so"); - gSystem->Load("libPWGCFebye.so"); - - // additional - - // compile standalone stuff - //gROOT->LoadMacro("AliBalance.cxx++g"); - //gROOT->LoadMacro("AliAnalysisTaskBF.cxx++g"); - - // add aliroot indlude path - //gROOT->ProcessLine(".include $PWD/."); - //gROOT->ProcessLine(Form(".include %s/include",gSystem->ExpandPathName("$ALICE_ROOT"))); - - gROOT->SetStyle("Plain"); - - // analysis manager - AliAnalysisManager* mgr = new AliAnalysisManager(Form("%s%i",taskname,bunchN)); - - // create the alien handler and attach it to the manager - AliAnalysisGrid *plugin = CreateAlienHandler(bAOD,bunchN,Form("%s%i",taskname,bunchN), gridmode, proofcluster, Form("%s_%d.txt",proofdataset.Data(),bunchN)); - mgr->SetGridHandler(plugin); - - - // input handler (ESD or AOD) - AliVEventHandler* inputH = NULL; - if(!bAOD){ - inputH = new AliESDInputHandler(); - } - else{ - inputH = new AliAODInputHandler(); - } - mgr->SetInputEventHandler(inputH); - - // mc event handler - if(bMCtruth) { - AliMCEventHandler* mchandler = new AliMCEventHandler(); - // Not reading track references - mchandler->SetReadTR(kFALSE); - mgr->SetMCtruthEventHandler(mchandler); - } - - // AOD output handler - //AliAODHandler* aodoutHandler = new AliAODHandler(); - //aodoutHandler->SetOutputFileName("aod.root"); - //mgr->SetOutputEventHandler(aodoutHandler); - - // === Physics Selection Task === - // - // In SelectCollisionCandidate(), default is kMB, so the task UserExec() - // function is only called for these events. - // Options are: - // kMB Minimum Bias trigger - // kMBNoTRD Minimum bias trigger where the TRD is not read out - // kMUON Muon trigger - // kHighMult High-Multiplicity Trigger - // kUserDefined For manually defined trigger selection - // - // Multiple options possible with the standard AND/OR operators && and || - // These all have the usual offline SPD or V0 selections performed. - // - // With a pointer to the physics selection object using physSelTask->GetPhysicsSelection(), - // one can manually set the selected and background classes using: - // AddCollisionTriggerClass("+CINT1B-ABCE-NOPF-ALL") - // AddBGTriggerClass("+CINT1A-ABCE-NOPF-ALL"); - // - // One can also specify multiple classes at once, or require a class to NOT - // trigger, for e.g. - // AddBGTriggerClass("+CSMBA-ABCE-NOPF-ALL -CSMBB-ABCE-NOPF-ALL"); - // - // NOTE that manually setting the physics selection overrides the standard - // selection, so it must be done in completeness. - // - // ALTERNATIVELY, one can make the physics selection inside the task - // UserExec(). - // For this case, comment out the task->SelectCol.... line, - // and see AliBasicTask.cxx UserExec() function for details on this. - - //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); - //AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(bMCphyssel); - //if(!physSelTask) { Printf("no physSelTask"); return; } - //AliPhysicsSelection *physSel = physSelTask->GetPhysicsSelection(); - //physSel->AddCollisionTriggerClass("+CINT1B-ABCE-NOPF-ALL");// #3119 #769"); - - // create task - - //Add the centrality determination task and the physics selection - // (only on ESD level, in AODs centrality is already in header and events are selected) - if(!bAOD){ - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); - AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); - - // Add physics selection task (NOT needed for AODs) - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); - AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(bMCphyssel); - - //Add the PID response - if(kUsePID) { - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); - AddTaskPIDResponse(bMCphyssel); - } - } - - //Add the BF task (all centralities) - gROOT->LoadMacro("AddTaskBalanceCentralityTrain.C"); - AliAnalysisTaskBF *task = AddTaskBalanceCentralityTrain(0,100,0,"V0M",vZ[0],DCAxy[0],DCAz[0],ptMin[0],ptMax[0],etaMin[0],etaMax[0],-1,-1,kUsePID); - - // enable debug printouts - //mgr->SetDebugLevel(2); - //mgr->SetUseProgressBar(1,100); - if (!mgr->InitAnalysis()) return; - mgr->PrintStatus(); - - // start analysis - Printf("Starting Analysis...."); - mgr->StartAnalysis(runtype,nentries,firstentry); -} - -//______________________________________________________________________________ -AliAnalysisGrid* CreateAlienHandler(Bool_t bAOD, Int_t bunchN, const char *taskname, const char *gridmode, const char *proofcluster, const char *proofdataset) -{ - AliAnalysisAlien *plugin = new AliAnalysisAlien(); - // Set the run mode (can be "full", "test", "offline", "submit" or "terminate") - plugin->SetRunMode(gridmode); - - // Set versions of used packages - plugin->SetAPIVersion("V1.1x"); - plugin->SetROOTVersion("v5-28-00d"); - plugin->SetAliROOTVersion("v5-02-05-AN"); - - // Declare input data to be processed. - - // Method 1: Create automatically XML collections using alien 'find' command. - // Define production directory LFN - plugin->SetGridDataDir("/alice/data/2010/LHC10h/"); - // On real reconstructed data: - // plugin->SetGridDataDir("/alice/data/2009/LHC09d"); - - // Set data search pattern - //plugin->SetDataPattern("*ESDs.root"); // THIS CHOOSES ALL PASSES - // Data pattern for reconstructed data - if(!bAOD){ - plugin->SetDataPattern("*ESDs/pass2/*ESDs.root"); // CHECK LATEST PASS OF DATA SET IN ALIENSH - } - else{ - plugin->SetDataPattern("*ESDs/pass2/AOD049/*/AliAOD.root"); - } - - plugin->SetRunPrefix("000"); // real data - // ...then add run numbers to be considered - //plugin->SetRunRange(114917,115322); - - if(bunchN==0){ - plugin->AddRunNumber(137366); - } - - //bunch1 - else if(bunchN == 1){ - plugin->AddRunNumber(139510); - plugin->AddRunNumber(139507); - plugin->AddRunNumber(139505); - plugin->AddRunNumber(139503); - plugin->AddRunNumber(139465); - plugin->AddRunNumber(139438); - plugin->AddRunNumber(139437); - plugin->AddRunNumber(139360); - plugin->AddRunNumber(139329); - plugin->AddRunNumber(139328); - } - - //bunch2 - else if(bunchN == 2){ - plugin->AddRunNumber(139314); - plugin->AddRunNumber(139310); - plugin->AddRunNumber(139309); - plugin->AddRunNumber(139173); - plugin->AddRunNumber(139107); - plugin->AddRunNumber(139105); - plugin->AddRunNumber(139038); - plugin->AddRunNumber(139037); - plugin->AddRunNumber(139036); - plugin->AddRunNumber(139029); - plugin->AddRunNumber(139028); - plugin->AddRunNumber(138872); - plugin->AddRunNumber(138871); - plugin->AddRunNumber(138870); - plugin->AddRunNumber(138837); - plugin->AddRunNumber(138732); - plugin->AddRunNumber(138730); - plugin->AddRunNumber(138666); - plugin->AddRunNumber(138662); - plugin->AddRunNumber(138653); - } - - else if(bunchN == 3){ - plugin->AddRunNumber(138652); - plugin->AddRunNumber(138638); - plugin->AddRunNumber(138624); - plugin->AddRunNumber(138621); - plugin->AddRunNumber(138583); - plugin->AddRunNumber(138582); - plugin->AddRunNumber(138579); - plugin->AddRunNumber(138578); - plugin->AddRunNumber(138534); - plugin->AddRunNumber(138469); - } - - else if(bunchN == 4){ - - plugin->AddRunNumber(138442); - plugin->AddRunNumber(138439); - plugin->AddRunNumber(138438); - plugin->AddRunNumber(138396); - plugin->AddRunNumber(138364); - plugin->AddRunNumber(138275); - plugin->AddRunNumber(138225); - plugin->AddRunNumber(138201); - plugin->AddRunNumber(138197); - plugin->AddRunNumber(138192); - } - - else if(bunchN == 5){ - - plugin->AddRunNumber(138190); - plugin->AddRunNumber(137848); - plugin->AddRunNumber(137844); - plugin->AddRunNumber(137752); - plugin->AddRunNumber(137751); - plugin->AddRunNumber(137724); - plugin->AddRunNumber(137722); - plugin->AddRunNumber(137718); - plugin->AddRunNumber(137704); - plugin->AddRunNumber(137693); - } - - else if(bunchN == 6){ - - plugin->AddRunNumber(137692); - plugin->AddRunNumber(137691); - plugin->AddRunNumber(137686); - plugin->AddRunNumber(137685); - plugin->AddRunNumber(137639); - plugin->AddRunNumber(137638); - plugin->AddRunNumber(137608); - plugin->AddRunNumber(137595); - plugin->AddRunNumber(137549); - plugin->AddRunNumber(137546); - - } - - else if(bunchN == 7){ - - plugin->AddRunNumber(137544); - plugin->AddRunNumber(137541); - plugin->AddRunNumber(137539); - plugin->AddRunNumber(137531); - plugin->AddRunNumber(137530); - plugin->AddRunNumber(137443); - plugin->AddRunNumber(137441); - plugin->AddRunNumber(137440); - plugin->AddRunNumber(137439); - plugin->AddRunNumber(137434); - - } - - else if(bunchN == 8){ - - plugin->AddRunNumber(137432); - plugin->AddRunNumber(137431); - plugin->AddRunNumber(137430); - plugin->AddRunNumber(137366); - plugin->AddRunNumber(137243); - plugin->AddRunNumber(137236); - plugin->AddRunNumber(137235); - plugin->AddRunNumber(137232); - plugin->AddRunNumber(137231); - plugin->AddRunNumber(137162); - plugin->AddRunNumber(137161); - } - - else{ - - stderr<<"BUNCH NOT THERE"<AddRunList("139510, 139507, 139505, 139503, 139465, 139438, 139437, 139360, 139329, 139328, 139314, 139310, 139309, 139173, 139107, 139105, 139038, 139037, 139036, 139029, 139028, 138872, 138871, 138870, 138837, 138732, 138730, 138666, 138662, 138653, 138652, 138638, 138624, 138621, 138583, 138582, 138579, 138578, 138534, 138469, 138442, 138439, 138438, 138396, 138364, 138275, 138225, 138201, 138197, 138192, 138190, 137848, 137844, 137752, 137751, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137686, 137685, 137639, 137638, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137366, 137243, 137236, 137235, 137232, 137231, 137162, 137161"); - - - - - - plugin->SetNrunsPerMaster(1); - plugin->SetOutputToRunNo(); - // comment out the next line when using the "terminate" option, unless - // you want separate merged files for each run - plugin->SetMergeViaJDL(); - - // Method 2: Declare existing data files (raw collections, xml collections, root file) - // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir()) - // XML collections added via this method can be combined with the first method if - // the content is compatible (using or not tags) - // plugin->AddDataFile("tag.xml"); - // plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root"); - - // Define alien work directory where all files will be copied. Relative to alien $HOME. - plugin->SetGridWorkingDir(taskname); - - // Declare alien output directory. Relative to working directory. - plugin->SetGridOutputDir("out"); // In this case will be $HOME/taskname/out - - // Declare the analysis source files names separated by blancs. To be compiled runtime - // using ACLiC on the worker nodes. - plugin->SetAnalysisSource("AliBalance.cxx AliAnalysisTaskBF.cxx"); - - // Declare all libraries (other than the default ones for the framework. These will be - // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here. - //plugin->AddIncludePath("-I."); - //plugin->SetAdditionalLibs("libPWGCFebye.so"); - plugin->SetAdditionalLibs("AliBalance.cxx AliBalance.h AliAnalysisTaskBF.cxx AliAnalysisTaskBF.h"); - - // Declare the output file names separated by blancs. - // (can be like: file.root or file.root@ALICE::Niham::File) - // To only save certain files, use SetDefaultOutputs(kFALSE), and then - // SetOutputFiles("list.root other.filename") to choose which files to save - plugin->SetDefaultOutputs(); - //plugin->SetOutputFiles("list.root"); - - // Optionally set a name for the generated analysis macro (default MyAnalysis.C) - plugin->SetAnalysisMacro(Form("%s.C",taskname)); - - // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore) - plugin->SetSplitMaxInputFileNumber(100); - - // Optionally modify the executable name (default analysis.sh) - plugin->SetExecutable(Form("%s.sh",taskname)); - - // set number of test files to use in "test" mode - plugin->SetNtestFiles(1); - - // Optionally resubmit threshold. - plugin->SetMasterResubmitThreshold(90); - - // Optionally set time to live (default 30000 sec) - plugin->SetTTL(90000); - - // Optionally set input format (default xml-single) - plugin->SetInputFormat("xml-single"); - - // Optionally modify the name of the generated JDL (default analysis.jdl) - plugin->SetJDLName(Form("%s.jdl",taskname)); - - // Optionally modify job price (default 1) - plugin->SetPrice(1); - - // Optionally modify split mode (default 'se') - plugin->SetSplitMode("se"); - - //plugin->SetUseSubmitPolicy(); - //plugin->SetKeepLogs(); - - //---------------------------------------------------------- - //--- PROOF MODE SPECIFIC SETTINGS ------------ - //---------------------------------------------------------- - // Proof cluster - plugin->SetProofCluster(proofcluster); - // Dataset to be used - plugin->SetProofDataSet(proofdataset); - // May need to reset proof. Supported modes: 0-no reset, 1-soft, 2-hard - plugin->SetProofReset(0); - // May limit number of workers - plugin->SetNproofWorkers(0); - // May limit the number of workers per slave - plugin->SetNproofWorkersPerSlave(1); - // May use a specific version of root installed in proof - plugin->SetRootVersionForProof("current"); - // May set the aliroot mode. Check http://aaf.cern.ch/node/83 - plugin->SetAliRootMode("default"); // Loads AF libs by default - // May request ClearPackages (individual ClearPackage not supported) - plugin->SetClearPackages(kFALSE); - // Plugin test mode works only providing a file containing test file locations, used in "local" mode also - plugin->SetFileForTestMode("files.txt"); // file should contain path name to a local directory containg *ESDs.root etc - // Request connection to alien upon connection to grid - plugin->SetProofConnectGrid(kFALSE); - - plugin->Print(); - - return plugin; -} - +// run.C +// +// Template run macro for AliBasicTask.cxx/.h with example layout of +// physics selections and options, in macro and task. +// +// Author: Arvinder Palaha +// +class AliAnalysisGrid; +class AliAnalysisTaskBF; +class AliBalance; + +//Centrality stuff +Int_t binfirst = 0; //where do we start numbering bins +Int_t binlast = 8; //where do we stop numbering bins +const Int_t numberOfCentralityBins = 9; +Float_t centralityArray[numberOfCentralityBins+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.}; // in centrality percentile + +//Systematic studies +const Int_t numberOfSyst = 13; +Float_t vZ[numberOfSyst] = {10.,12.,6.,8.,10.,10.,10.,10.,10.,10.,10.,10.,10.}; // global Vertex Z cut +Float_t DCAxy[numberOfSyst] = {-1.,2.4,2.4,2.4,2.2,2.0,1.8,2.4,2.4,2.4,2.4,2.4,2.4}; // DCA xy cut (afterburner, -1 = w/o additional cut) +Float_t DCAz[numberOfSyst] = {-1.,3.2,3.2,3.2,3.0,2.8,2.6,3.2,3.2,3.2,3.2,3.2,3.2}; // DCA z cut (afterburner, -1 = w/o additional cut) +Float_t ptMin[numberOfSyst] = {0.3,0.3,0.3,0.3,0.3,0.3,0.3,1.5,5.0,0.3,0.3,0.3,0.3}; // pt cuts +Float_t ptMax[numberOfSyst] = {1.5,1.5,1.5,1.5,1.5,1.5,1.5,5.0,10.0,10.0,1.5,1.5,1.5}; // pt cuts +Float_t etaMin[numberOfSyst] = {-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-0.8,-1.0,-0.6,-0.4}; // eta cuts +Float_t etaMax[numberOfSyst] = {0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,1.0,0.6,0.4}; // eta cuts + +Bool_t kUsePID = kFALSE; + +//______________________________________________________________________________ +void runBalanceFunction( + const char* runtype = "local", // local, proof or grid + const char *gridmode = "test", // Set the run mode (can be "full", "test", "offline", "submit" or "terminate"). Full & Test work for proof + const Int_t bunchN = 0, + const bool bAOD = 1, // 1 = AOD ANALYSIS, 0 = ESD ANALYSIS + const bool bMCtruth = 0, // 1 = MCEvent handler is on (MC truth), 0 = MCEvent handler is off (MC reconstructed/real data) + const bool bMCphyssel = 0, // 1 = looking at MC truth or reconstructed, 0 = looking at real data + const Long64_t nentries = 50000, // for local and proof mode, ignored in grid mode. Set to 1234567890 for all events. + const Long64_t firstentry = 0, // for local and proof mode, ignored in grid mode + TString proofdataset = "bunchPROOF", // path to dataset on proof cluster, for proof analysis + const char *proofcluster = "miweber@alice-caf.cern.ch", // which proof cluster to use in proof mode + const char *taskname = "BF_Syst_Test" // sets name of grid generated macros + ) +{ + // check run type + if(runtype != "local" && runtype != "proof" && runtype != "grid"){ + Printf("\n\tIncorrect run option, check first argument of run macro"); + Printf("\tint runtype = local, proof or grid\n"); + return; + } + Printf("%s analysis chosen",runtype); + + // load libraries + gSystem->Load("libCore.so"); + gSystem->Load("libGeom.so"); + gSystem->Load("libVMC.so"); + gSystem->Load("libPhysics.so"); + gSystem->Load("libTree.so"); + gSystem->Load("libSTEERBase.so"); + gSystem->Load("libESD.so"); + gSystem->Load("libAOD.so"); + gSystem->Load("libANALYSIS.so"); + gSystem->Load("libANALYSISalice.so"); + gSystem->Load("libEventMixing.so"); + gSystem->Load("libPWGCFebye.so"); + + // additional + + // compile standalone stuff + //gROOT->LoadMacro("AliBalance.cxx++g"); + //gROOT->LoadMacro("AliAnalysisTaskBF.cxx++g"); + + // add aliroot indlude path + //gROOT->ProcessLine(".include $PWD/."); + //gROOT->ProcessLine(Form(".include %s/include",gSystem->ExpandPathName("$ALICE_ROOT"))); + + gROOT->SetStyle("Plain"); + + // analysis manager + AliAnalysisManager* mgr = new AliAnalysisManager(Form("%s%i",taskname,bunchN)); + + // create the alien handler and attach it to the manager + AliAnalysisGrid *plugin = CreateAlienHandler(bAOD,bunchN,Form("%s%i",taskname,bunchN), gridmode, proofcluster, Form("%s_%d.txt",proofdataset.Data(),bunchN)); + mgr->SetGridHandler(plugin); + + + // input handler (ESD or AOD) + AliVEventHandler* inputH = NULL; + if(!bAOD){ + inputH = new AliESDInputHandler(); + } + else{ + inputH = new AliAODInputHandler(); + } + mgr->SetInputEventHandler(inputH); + + // mc event handler + if(bMCtruth) { + AliMCEventHandler* mchandler = new AliMCEventHandler(); + // Not reading track references + mchandler->SetReadTR(kFALSE); + mgr->SetMCtruthEventHandler(mchandler); + } + + // AOD output handler + //AliAODHandler* aodoutHandler = new AliAODHandler(); + //aodoutHandler->SetOutputFileName("aod.root"); + //mgr->SetOutputEventHandler(aodoutHandler); + + // === Physics Selection Task === + // + // In SelectCollisionCandidate(), default is kMB, so the task UserExec() + // function is only called for these events. + // Options are: + // kMB Minimum Bias trigger + // kMBNoTRD Minimum bias trigger where the TRD is not read out + // kMUON Muon trigger + // kHighMult High-Multiplicity Trigger + // kUserDefined For manually defined trigger selection + // + // Multiple options possible with the standard AND/OR operators && and || + // These all have the usual offline SPD or V0 selections performed. + // + // With a pointer to the physics selection object using physSelTask->GetPhysicsSelection(), + // one can manually set the selected and background classes using: + // AddCollisionTriggerClass("+CINT1B-ABCE-NOPF-ALL") + // AddBGTriggerClass("+CINT1A-ABCE-NOPF-ALL"); + // + // One can also specify multiple classes at once, or require a class to NOT + // trigger, for e.g. + // AddBGTriggerClass("+CSMBA-ABCE-NOPF-ALL -CSMBB-ABCE-NOPF-ALL"); + // + // NOTE that manually setting the physics selection overrides the standard + // selection, so it must be done in completeness. + // + // ALTERNATIVELY, one can make the physics selection inside the task + // UserExec(). + // For this case, comment out the task->SelectCol.... line, + // and see AliBasicTask.cxx UserExec() function for details on this. + + //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + //AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(bMCphyssel); + //if(!physSelTask) { Printf("no physSelTask"); return; } + //AliPhysicsSelection *physSel = physSelTask->GetPhysicsSelection(); + //physSel->AddCollisionTriggerClass("+CINT1B-ABCE-NOPF-ALL");// #3119 #769"); + + // create task + + //Add the centrality determination task and the physics selection + // (only on ESD level, in AODs centrality is already in header and events are selected) + if(!bAOD){ + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); + AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); + + // Add physics selection task (NOT needed for AODs) + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(bMCphyssel); + + //Add the PID response + if(kUsePID) { + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); + AddTaskPIDResponse(bMCphyssel); + } + } + + //Add the BF task (all centralities) + gROOT->LoadMacro("AddTaskBalanceCentralityTrain.C"); + AliAnalysisTaskBF *task = AddTaskBalanceCentralityTrain(0,100,0,"V0M",vZ[0],DCAxy[0],DCAz[0],ptMin[0],ptMax[0],etaMin[0],etaMax[0],-1,-1,kUsePID); + + // enable debug printouts + //mgr->SetDebugLevel(2); + //mgr->SetUseProgressBar(1,100); + if (!mgr->InitAnalysis()) return; + mgr->PrintStatus(); + + // start analysis + Printf("Starting Analysis...."); + mgr->StartAnalysis(runtype,nentries,firstentry); +} + +//______________________________________________________________________________ +AliAnalysisGrid* CreateAlienHandler(Bool_t bAOD, Int_t bunchN, const char *taskname, const char *gridmode, const char *proofcluster, const char *proofdataset) +{ + AliAnalysisAlien *plugin = new AliAnalysisAlien(); + // Set the run mode (can be "full", "test", "offline", "submit" or "terminate") + plugin->SetRunMode(gridmode); + + // Set versions of used packages + plugin->SetAPIVersion("V1.1x"); + plugin->SetROOTVersion("v5-28-00d"); + plugin->SetAliROOTVersion("v5-02-05-AN"); + + // Declare input data to be processed. + + // Method 1: Create automatically XML collections using alien 'find' command. + // Define production directory LFN + plugin->SetGridDataDir("/alice/data/2010/LHC10h/"); + // On real reconstructed data: + // plugin->SetGridDataDir("/alice/data/2009/LHC09d"); + + // Set data search pattern + //plugin->SetDataPattern("*ESDs.root"); // THIS CHOOSES ALL PASSES + // Data pattern for reconstructed data + if(!bAOD){ + plugin->SetDataPattern("*ESDs/pass2/*ESDs.root"); // CHECK LATEST PASS OF DATA SET IN ALIENSH + } + else{ + plugin->SetDataPattern("*ESDs/pass2/AOD049/*/AliAOD.root"); + } + + plugin->SetRunPrefix("000"); // real data + // ...then add run numbers to be considered + //plugin->SetRunRange(114917,115322); + + if(bunchN==0){ + plugin->AddRunNumber(137366); + } + + //bunch1 + else if(bunchN == 1){ + plugin->AddRunNumber(139510); + plugin->AddRunNumber(139507); + plugin->AddRunNumber(139505); + plugin->AddRunNumber(139503); + plugin->AddRunNumber(139465); + plugin->AddRunNumber(139438); + plugin->AddRunNumber(139437); + plugin->AddRunNumber(139360); + plugin->AddRunNumber(139329); + plugin->AddRunNumber(139328); + } + + //bunch2 + else if(bunchN == 2){ + plugin->AddRunNumber(139314); + plugin->AddRunNumber(139310); + plugin->AddRunNumber(139309); + plugin->AddRunNumber(139173); + plugin->AddRunNumber(139107); + plugin->AddRunNumber(139105); + plugin->AddRunNumber(139038); + plugin->AddRunNumber(139037); + plugin->AddRunNumber(139036); + plugin->AddRunNumber(139029); + plugin->AddRunNumber(139028); + plugin->AddRunNumber(138872); + plugin->AddRunNumber(138871); + plugin->AddRunNumber(138870); + plugin->AddRunNumber(138837); + plugin->AddRunNumber(138732); + plugin->AddRunNumber(138730); + plugin->AddRunNumber(138666); + plugin->AddRunNumber(138662); + plugin->AddRunNumber(138653); + } + + else if(bunchN == 3){ + plugin->AddRunNumber(138652); + plugin->AddRunNumber(138638); + plugin->AddRunNumber(138624); + plugin->AddRunNumber(138621); + plugin->AddRunNumber(138583); + plugin->AddRunNumber(138582); + plugin->AddRunNumber(138579); + plugin->AddRunNumber(138578); + plugin->AddRunNumber(138534); + plugin->AddRunNumber(138469); + } + + else if(bunchN == 4){ + + plugin->AddRunNumber(138442); + plugin->AddRunNumber(138439); + plugin->AddRunNumber(138438); + plugin->AddRunNumber(138396); + plugin->AddRunNumber(138364); + plugin->AddRunNumber(138275); + plugin->AddRunNumber(138225); + plugin->AddRunNumber(138201); + plugin->AddRunNumber(138197); + plugin->AddRunNumber(138192); + } + + else if(bunchN == 5){ + + plugin->AddRunNumber(138190); + plugin->AddRunNumber(137848); + plugin->AddRunNumber(137844); + plugin->AddRunNumber(137752); + plugin->AddRunNumber(137751); + plugin->AddRunNumber(137724); + plugin->AddRunNumber(137722); + plugin->AddRunNumber(137718); + plugin->AddRunNumber(137704); + plugin->AddRunNumber(137693); + } + + else if(bunchN == 6){ + + plugin->AddRunNumber(137692); + plugin->AddRunNumber(137691); + plugin->AddRunNumber(137686); + plugin->AddRunNumber(137685); + plugin->AddRunNumber(137639); + plugin->AddRunNumber(137638); + plugin->AddRunNumber(137608); + plugin->AddRunNumber(137595); + plugin->AddRunNumber(137549); + plugin->AddRunNumber(137546); + + } + + else if(bunchN == 7){ + + plugin->AddRunNumber(137544); + plugin->AddRunNumber(137541); + plugin->AddRunNumber(137539); + plugin->AddRunNumber(137531); + plugin->AddRunNumber(137530); + plugin->AddRunNumber(137443); + plugin->AddRunNumber(137441); + plugin->AddRunNumber(137440); + plugin->AddRunNumber(137439); + plugin->AddRunNumber(137434); + + } + + else if(bunchN == 8){ + + plugin->AddRunNumber(137432); + plugin->AddRunNumber(137431); + plugin->AddRunNumber(137430); + plugin->AddRunNumber(137366); + plugin->AddRunNumber(137243); + plugin->AddRunNumber(137236); + plugin->AddRunNumber(137235); + plugin->AddRunNumber(137232); + plugin->AddRunNumber(137231); + plugin->AddRunNumber(137162); + plugin->AddRunNumber(137161); + } + + else{ + + stderr<<"BUNCH NOT THERE"<AddRunList("139510, 139507, 139505, 139503, 139465, 139438, 139437, 139360, 139329, 139328, 139314, 139310, 139309, 139173, 139107, 139105, 139038, 139037, 139036, 139029, 139028, 138872, 138871, 138870, 138837, 138732, 138730, 138666, 138662, 138653, 138652, 138638, 138624, 138621, 138583, 138582, 138579, 138578, 138534, 138469, 138442, 138439, 138438, 138396, 138364, 138275, 138225, 138201, 138197, 138192, 138190, 137848, 137844, 137752, 137751, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137686, 137685, 137639, 137638, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137366, 137243, 137236, 137235, 137232, 137231, 137162, 137161"); + + + + + + plugin->SetNrunsPerMaster(1); + plugin->SetOutputToRunNo(); + // comment out the next line when using the "terminate" option, unless + // you want separate merged files for each run + plugin->SetMergeViaJDL(); + + // Method 2: Declare existing data files (raw collections, xml collections, root file) + // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir()) + // XML collections added via this method can be combined with the first method if + // the content is compatible (using or not tags) + // plugin->AddDataFile("tag.xml"); + // plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root"); + + // Define alien work directory where all files will be copied. Relative to alien $HOME. + plugin->SetGridWorkingDir(taskname); + + // Declare alien output directory. Relative to working directory. + plugin->SetGridOutputDir("out"); // In this case will be $HOME/taskname/out + + // Declare the analysis source files names separated by blancs. To be compiled runtime + // using ACLiC on the worker nodes. + plugin->SetAnalysisSource("AliBalance.cxx AliAnalysisTaskBF.cxx"); + + // Declare all libraries (other than the default ones for the framework. These will be + // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here. + //plugin->AddIncludePath("-I."); + //plugin->SetAdditionalLibs("libPWGCFebye.so"); + plugin->SetAdditionalLibs("AliBalance.cxx AliBalance.h AliAnalysisTaskBF.cxx AliAnalysisTaskBF.h"); + + // Declare the output file names separated by blancs. + // (can be like: file.root or file.root@ALICE::Niham::File) + // To only save certain files, use SetDefaultOutputs(kFALSE), and then + // SetOutputFiles("list.root other.filename") to choose which files to save + plugin->SetDefaultOutputs(); + //plugin->SetOutputFiles("list.root"); + + // Optionally set a name for the generated analysis macro (default MyAnalysis.C) + plugin->SetAnalysisMacro(Form("%s.C",taskname)); + + // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore) + plugin->SetSplitMaxInputFileNumber(100); + + // Optionally modify the executable name (default analysis.sh) + plugin->SetExecutable(Form("%s.sh",taskname)); + + // set number of test files to use in "test" mode + plugin->SetNtestFiles(1); + + // Optionally resubmit threshold. + plugin->SetMasterResubmitThreshold(90); + + // Optionally set time to live (default 30000 sec) + plugin->SetTTL(90000); + + // Optionally set input format (default xml-single) + plugin->SetInputFormat("xml-single"); + + // Optionally modify the name of the generated JDL (default analysis.jdl) + plugin->SetJDLName(Form("%s.jdl",taskname)); + + // Optionally modify job price (default 1) + plugin->SetPrice(1); + + // Optionally modify split mode (default 'se') + plugin->SetSplitMode("se"); + + //plugin->SetUseSubmitPolicy(); + //plugin->SetKeepLogs(); + + //---------------------------------------------------------- + //--- PROOF MODE SPECIFIC SETTINGS ------------ + //---------------------------------------------------------- + // Proof cluster + plugin->SetProofCluster(proofcluster); + // Dataset to be used + plugin->SetProofDataSet(proofdataset); + // May need to reset proof. Supported modes: 0-no reset, 1-soft, 2-hard + plugin->SetProofReset(0); + // May limit number of workers + plugin->SetNproofWorkers(0); + // May limit the number of workers per slave + plugin->SetNproofWorkersPerSlave(1); + // May use a specific version of root installed in proof + plugin->SetRootVersionForProof("current"); + // May set the aliroot mode. Check http://aaf.cern.ch/node/83 + plugin->SetAliRootMode("default"); // Loads AF libs by default + // May request ClearPackages (individual ClearPackage not supported) + plugin->SetClearPackages(kFALSE); + // Plugin test mode works only providing a file containing test file locations, used in "local" mode also + plugin->SetFileForTestMode("files.txt"); // file should contain path name to a local directory containg *ESDs.root etc + // Request connection to alien upon connection to grid + plugin->SetProofConnectGrid(kFALSE); + + plugin->Print(); + + return plugin; +} + diff --git a/PWGCF/EBYE/macros/runBalanceFunctionInpp.C b/PWGCF/EBYE/macros/runBalanceFunctionInpp.C index 1aad94a765c..46dc7063434 100644 --- a/PWGCF/EBYE/macros/runBalanceFunctionInpp.C +++ b/PWGCF/EBYE/macros/runBalanceFunctionInpp.C @@ -1,224 +1,224 @@ -enum analysisModes {mLocal,mLocalPAR,mPROOF,mGrid,mGridPAR}; -enum analysisTypes {mESD,mAOD,mMC,mMCESD}; - -// -class AliAnalysisGrid; -class AliAnalysisTaskBF; -class AliBalance; - -//________________________________________________________________________// -void runBalanceFunctionInpp(Int_t mode = mLocal, - Int_t type = mAOD, - Bool_t DATA = kFALSE) { - // Time: - TStopwatch timer; - timer.Start(); - - //Check analysis mode - if((mode < 0) || (mode > 4)) { - Printf("Analysis mode not recognized!"); - Printf("You can select out of 0: local, 1: local with par files, 2: proof, 3: grid, 4: grid with par files"); - return; - } - - //Check analysis type - if((type < 0) || (type > 3)) { - Printf("Analysis type not recognized!"); - Printf("You can select out of 0: ESD, 1: AOD, 2: MC (stack), 3: MC (from the ESD)"); - return; - } - - // Load needed libraries: - LoadLibraries(mode); - - // Create and configure the AliEn plug-in: - if(mode == mGrid || mode == mGridPAR) { - gROOT->LoadMacro("CreateAlienHandler.C"); - AliAnalysisGrid *alienHandler = CreateAlienHandler(runListFileName); - if (!alienHandler) return; - } - // Chains: - if(mode == mLocal || mode == mLocalPAR) { - TChain* chain = 0x0; - if((type == mESD)||(type == mMCESD)) - chain = new TChain("esdTree"); - else if(type == mAOD) - chain = new TChain("aodTree"); - else if(type == mMC) - chain = new TChain("TE"); - - TString filename; - for(Int_t i = 1; i < 20; i++) { - filename = "/data/alice2/pchrist/pp/LHC10c/0.9TeV/Data/"; - filename += "Set"; filename += i; - if((type == mESD)||(type == mMCESD)) - filename += "/AliESDs.root"; - else if(type == mAOD) - filename += "/AliAOD.root"; - else if(type == mMC) - filename += "/galice.root"; - - chain->Add(filename.Data()); - } - } - //Proof - if(mode == mPROOF) { - gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName("$ALICE_ROOT"))); - } - - // analysis manager - AliAnalysisManager* mgr = new AliAnalysisManager("balanceFunctionManager"); - if(mode == mGrid || mode == mGridPAR) - mgr->SetGridHandler(alienHandler); - - // input handler (ESD or AOD) - AliVEventHandler* inputH = NULL; - if((type == mESD)||(type == mMCESD)) - inputH = new AliESDInputHandler(); - else if(type == mAOD) - inputH = new AliAODInputHandler(); - mgr->SetInputEventHandler(inputH); - - // mc event handler - if((type == mMC) || (type == mMCESD)) { - AliMCEventHandler* mchandler = new AliMCEventHandler(); - // Not reading track references - mchandler->SetReadTR(kFALSE); - mgr->SetMCtruthEventHandler(mchandler); - } - - if(type != mAOD){ - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); - AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(); - } - - //Add the BF task (all centralities) - gROOT->LoadMacro("AddTaskBalanceFunctionInpp.C"); - AddTaskBalanceFunctionInpp(); - - // enable debug printouts - mgr->SetDebugLevel(2); - mgr->SetUseProgressBar(1,100); - if (!mgr->InitAnalysis()) return; - mgr->PrintStatus(); - - // start analysis - if(mode == mLocal || mode == mLocalPAR) - mgr->StartAnalysis("local",chain); - else if(mode == mPROOF) - mgr->StartAnalysis("proof",dataDir,nRuns,offset); - else if(mode == mGrid || mode == mGridPAR) - mgr->StartAnalysis("grid"); - - // Print real and CPU time used for analysis: - timer.Stop(); - timer.Print(); -} - -//=============================================================// -void LoadLibraries(const analysisModes mode) { - //-------------------------------------- - // Load the needed libraries most of them already loaded by aliroot - //-------------------------------------- - gSystem->Load("libCore.so"); - gSystem->Load("libGeom.so"); - gSystem->Load("libVMC.so"); - gSystem->Load("libPhysics.so"); - gSystem->Load("libTree.so"); - - //---------------------------------------------------------- - // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< - //---------------------------------------------------------- - if (mode==mLocal || mode==mGrid || mode == mGridPAR) { - //-------------------------------------------------------- - // If you want to use already compiled libraries - // in the aliroot distribution - //-------------------------------------------------------- - gSystem->Load("libSTEERBase.so"); - gSystem->Load("libESD.so"); - gSystem->Load("libAOD.so"); - gSystem->Load("libANALYSIS.so"); - gSystem->Load("libANALYSISalice.so"); - gSystem->Load("libEventMixing.so"); - gSystem->Load("libPWGCFebye.so"); - // Use AliRoot includes to compile our task - gROOT->ProcessLine(".include $ALICE_ROOT/include"); - } - - else if (mode == mLocalPAR) { - //-------------------------------------------------------- - //If you want to use root and par files from aliroot - //-------------------------------------------------------- - SetupPar("STEERBase"); - SetupPar("ESD"); - SetupPar("AOD"); - SetupPar("ANALYSIS"); - SetupPar("ANALYSISalice"); - SetupPar("PWGCFebye"); -} - - //--------------------------------------------------------- - // <<<<<<<<<< PROOF mode >>>>>>>>>>>> - //--------------------------------------------------------- - else if (mode==mPROOF) { - // Connect to proof - printf("*** Connect to PROOF ***\n"); - gEnv->SetValue("XSec.GSI.DelegProxy","2"); - // Put appropriate username here - TProof::Open("alice-caf.cern.ch"); - //TProof::Open("skaf.saske.sk"); - //TProof::Open("prf000-iep-grid.saske.sk"); - - gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-12-AN"); - } - -} // end of void LoadLibraries(const anaModes mode) - -//======================================================================// -void SetupPar(char* pararchivename) { - //Load par files, create analysis libraries - //For testing, if par file already decompressed and modified - //classes then do not decompress. - - TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; - TString parpar(Form("%s.par", pararchivename)) ; - if ( gSystem->AccessPathName(parpar.Data()) ) { - gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ; - TString processline(Form(".! make %s", parpar.Data())) ; - gROOT->ProcessLine(processline.Data()) ; - gSystem->ChangeDirectory(cdir) ; - processline = Form(".! mv /tmp/%s .", parpar.Data()) ; - gROOT->ProcessLine(processline.Data()) ; - } - if ( gSystem->AccessPathName(pararchivename) ) { - TString processline = Form(".! tar xvzf %s",parpar.Data()) ; - gROOT->ProcessLine(processline.Data()); - } - - TString ocwd = gSystem->WorkingDirectory(); - gSystem->ChangeDirectory(pararchivename); - - // check for BUILD.sh and execute - if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { - printf("*******************************\n"); - printf("*** Building PAR archive ***\n"); - cout<Exec("PROOF-INF/BUILD.sh")) { - Error("runProcess","Cannot Build the PAR Archive! - Abort!"); - return -1; - } - } - // check for SETUP.C and execute - if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { - printf("*******************************\n"); - printf("*** Setup PAR archive ***\n"); - cout<Macro("PROOF-INF/SETUP.C"); - } - - gSystem->ChangeDirectory(ocwd.Data()); - printf("Current dir: %s\n", ocwd.Data()); - -} // end of void SetupPar(char* pararchivename) +enum analysisModes {mLocal,mLocalPAR,mPROOF,mGrid,mGridPAR}; +enum analysisTypes {mESD,mAOD,mMC,mMCESD}; + +// +class AliAnalysisGrid; +class AliAnalysisTaskBF; +class AliBalance; + +//________________________________________________________________________// +void runBalanceFunctionInpp(Int_t mode = mLocal, + Int_t type = mAOD, + Bool_t DATA = kFALSE) { + // Time: + TStopwatch timer; + timer.Start(); + + //Check analysis mode + if((mode < 0) || (mode > 4)) { + Printf("Analysis mode not recognized!"); + Printf("You can select out of 0: local, 1: local with par files, 2: proof, 3: grid, 4: grid with par files"); + return; + } + + //Check analysis type + if((type < 0) || (type > 3)) { + Printf("Analysis type not recognized!"); + Printf("You can select out of 0: ESD, 1: AOD, 2: MC (stack), 3: MC (from the ESD)"); + return; + } + + // Load needed libraries: + LoadLibraries(mode); + + // Create and configure the AliEn plug-in: + if(mode == mGrid || mode == mGridPAR) { + gROOT->LoadMacro("CreateAlienHandler.C"); + AliAnalysisGrid *alienHandler = CreateAlienHandler(runListFileName); + if (!alienHandler) return; + } + // Chains: + if(mode == mLocal || mode == mLocalPAR) { + TChain* chain = 0x0; + if((type == mESD)||(type == mMCESD)) + chain = new TChain("esdTree"); + else if(type == mAOD) + chain = new TChain("aodTree"); + else if(type == mMC) + chain = new TChain("TE"); + + TString filename; + for(Int_t i = 1; i < 20; i++) { + filename = "/data/alice2/pchrist/pp/LHC10c/0.9TeV/Data/"; + filename += "Set"; filename += i; + if((type == mESD)||(type == mMCESD)) + filename += "/AliESDs.root"; + else if(type == mAOD) + filename += "/AliAOD.root"; + else if(type == mMC) + filename += "/galice.root"; + + chain->Add(filename.Data()); + } + } + //Proof + if(mode == mPROOF) { + gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName("$ALICE_ROOT"))); + } + + // analysis manager + AliAnalysisManager* mgr = new AliAnalysisManager("balanceFunctionManager"); + if(mode == mGrid || mode == mGridPAR) + mgr->SetGridHandler(alienHandler); + + // input handler (ESD or AOD) + AliVEventHandler* inputH = NULL; + if((type == mESD)||(type == mMCESD)) + inputH = new AliESDInputHandler(); + else if(type == mAOD) + inputH = new AliAODInputHandler(); + mgr->SetInputEventHandler(inputH); + + // mc event handler + if((type == mMC) || (type == mMCESD)) { + AliMCEventHandler* mchandler = new AliMCEventHandler(); + // Not reading track references + mchandler->SetReadTR(kFALSE); + mgr->SetMCtruthEventHandler(mchandler); + } + + if(type != mAOD){ + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(); + } + + //Add the BF task (all centralities) + gROOT->LoadMacro("AddTaskBalanceFunctionInpp.C"); + AddTaskBalanceFunctionInpp(); + + // enable debug printouts + mgr->SetDebugLevel(2); + mgr->SetUseProgressBar(1,100); + if (!mgr->InitAnalysis()) return; + mgr->PrintStatus(); + + // start analysis + if(mode == mLocal || mode == mLocalPAR) + mgr->StartAnalysis("local",chain); + else if(mode == mPROOF) + mgr->StartAnalysis("proof",dataDir,nRuns,offset); + else if(mode == mGrid || mode == mGridPAR) + mgr->StartAnalysis("grid"); + + // Print real and CPU time used for analysis: + timer.Stop(); + timer.Print(); +} + +//=============================================================// +void LoadLibraries(const analysisModes mode) { + //-------------------------------------- + // Load the needed libraries most of them already loaded by aliroot + //-------------------------------------- + gSystem->Load("libCore.so"); + gSystem->Load("libGeom.so"); + gSystem->Load("libVMC.so"); + gSystem->Load("libPhysics.so"); + gSystem->Load("libTree.so"); + + //---------------------------------------------------------- + // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< + //---------------------------------------------------------- + if (mode==mLocal || mode==mGrid || mode == mGridPAR) { + //-------------------------------------------------------- + // If you want to use already compiled libraries + // in the aliroot distribution + //-------------------------------------------------------- + gSystem->Load("libSTEERBase.so"); + gSystem->Load("libESD.so"); + gSystem->Load("libAOD.so"); + gSystem->Load("libANALYSIS.so"); + gSystem->Load("libANALYSISalice.so"); + gSystem->Load("libEventMixing.so"); + gSystem->Load("libPWGCFebye.so"); + // Use AliRoot includes to compile our task + gROOT->ProcessLine(".include $ALICE_ROOT/include"); + } + + else if (mode == mLocalPAR) { + //-------------------------------------------------------- + //If you want to use root and par files from aliroot + //-------------------------------------------------------- + SetupPar("STEERBase"); + SetupPar("ESD"); + SetupPar("AOD"); + SetupPar("ANALYSIS"); + SetupPar("ANALYSISalice"); + SetupPar("PWGCFebye"); +} + + //--------------------------------------------------------- + // <<<<<<<<<< PROOF mode >>>>>>>>>>>> + //--------------------------------------------------------- + else if (mode==mPROOF) { + // Connect to proof + printf("*** Connect to PROOF ***\n"); + gEnv->SetValue("XSec.GSI.DelegProxy","2"); + // Put appropriate username here + TProof::Open("alice-caf.cern.ch"); + //TProof::Open("skaf.saske.sk"); + //TProof::Open("prf000-iep-grid.saske.sk"); + + gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-12-AN"); + } + +} // end of void LoadLibraries(const anaModes mode) + +//======================================================================// +void SetupPar(char* pararchivename) { + //Load par files, create analysis libraries + //For testing, if par file already decompressed and modified + //classes then do not decompress. + + TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; + TString parpar(Form("%s.par", pararchivename)) ; + if ( gSystem->AccessPathName(parpar.Data()) ) { + gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ; + TString processline(Form(".! make %s", parpar.Data())) ; + gROOT->ProcessLine(processline.Data()) ; + gSystem->ChangeDirectory(cdir) ; + processline = Form(".! mv /tmp/%s .", parpar.Data()) ; + gROOT->ProcessLine(processline.Data()) ; + } + if ( gSystem->AccessPathName(pararchivename) ) { + TString processline = Form(".! tar xvzf %s",parpar.Data()) ; + gROOT->ProcessLine(processline.Data()); + } + + TString ocwd = gSystem->WorkingDirectory(); + gSystem->ChangeDirectory(pararchivename); + + // check for BUILD.sh and execute + if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { + printf("*******************************\n"); + printf("*** Building PAR archive ***\n"); + cout<Exec("PROOF-INF/BUILD.sh")) { + Error("runProcess","Cannot Build the PAR Archive! - Abort!"); + return -1; + } + } + // check for SETUP.C and execute + if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { + printf("*******************************\n"); + printf("*** Setup PAR archive ***\n"); + cout<Macro("PROOF-INF/SETUP.C"); + } + + gSystem->ChangeDirectory(ocwd.Data()); + printf("Current dir: %s\n", ocwd.Data()); + +} // end of void SetupPar(char* pararchivename) diff --git a/PWGCF/EBYE/macros/runBalanceFunctionMC.C b/PWGCF/EBYE/macros/runBalanceFunctionMC.C index 0b6e5c5203b..9728deacc06 100644 --- a/PWGCF/EBYE/macros/runBalanceFunctionMC.C +++ b/PWGCF/EBYE/macros/runBalanceFunctionMC.C @@ -1,262 +1,262 @@ -enum analysisModes {mLocal,mLocalPAR,mPROOF,mGrid,mGridPAR}; -enum analysisTypes {mESD,mAOD,mMC,mMCESD}; - -// -class AliAnalysisGrid; -class AliAnalysisTaskBF; -class AliBalance; - -//Centrality stuff -Int_t binfirst = 0; //where do we start numbering bins -Int_t binlast = 8; //where do we stop numbering bins -const Int_t numberOfCentralityBins = 9; -Float_t centralityArray[numberOfCentralityBins+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.}; // in centrality percentile -Float_t impactParameterArray[numberOfCentralityBins+1] = {0.0,3.79,5.30,7.41,9.04,10.40,11.61,12.68,13.67,14.63}; // in fm (impact parametger taken from the MC header) - -//Acceptance parameterization -Bool_t kUseAcceptance = kTRUE; -const char *acceptanceFilename = "efficiencyALICE.root"; -TF1 *fParameterization[numberOfCentralityBins]; - -//Analyze a particle -Int_t gPdgCode = -1; - -//________________________________________________________________________// -void runBalanceFunctionMC(Int_t mode = mLocal, - Int_t type = mMC, - Bool_t DATA = kFALSE) { - // Time: - TStopwatch timer; - timer.Start(); - - //Check analysis mode - if((mode < 0) || (mode > 4)) { - Printf("Analysis mode not recognized!"); - Printf("You can select out of 0: local, 1: local with par files, 2: proof, 3: grid, 4: grid with par files"); - return; - } - - //Check analysis type - if((type < 0) || (type > 3)) { - Printf("Analysis type not recognized!"); - Printf("You can select out of 0: ESD, 1: AOD, 2: MC (stack), 3: MC (from the ESD)"); - return; - } - - // Load needed libraries: - LoadLibraries(mode); - - - // Create and configure the AliEn plug-in: - if(mode == mGrid || mode == mGridPAR) { - gROOT->LoadMacro("CreateAlienHandler.C"); - AliAnalysisGrid *alienHandler = CreateAlienHandler(runListFileName); - if (!alienHandler) return; - } - // Chains: - if(mode == mLocal || mode == mLocalPAR) { - TChain* chain = 0x0; - if((type == mESD)||(type == mMCESD)) - chain = new TChain("esdTree"); - else if(type == mAOD) - chain = new TChain("aodTree"); - else if(type == mMC) - chain = new TChain("TE"); - - TString filename = "galice.root"; - chain->Add(filename.Data()); - } - - //Proof - if(mode == mPROOF) { - gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName("$ALICE_ROOT"))); - } - - // analysis manager - AliAnalysisManager* mgr = new AliAnalysisManager("balanceFunctionManager"); - if(mode == mGrid || mode == mGridPAR) - mgr->SetGridHandler(alienHandler); - - // input handler (ESD or AOD) - AliVEventHandler* inputH = NULL; - if((type == mESD)||(type == mMCESD)||(type == mMC)) - inputH = new AliESDInputHandler(); - else if(type == mAOD) - inputH = new AliAODInputHandler(); - mgr->SetInputEventHandler(inputH); - - // mc event handler - if((type == mMC) || (type == mMCESD)) { - AliMCEventHandler* mchandler = new AliMCEventHandler(); - // Not reading track references - mchandler->SetReadTR(kFALSE); - mgr->SetMCtruthEventHandler(mchandler); - } - - if(mAOD){ - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); - AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); - - // Add physics selection task (NOT needed for AODs) - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); - AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(DATA); - } - - //Setup the parameterization - if(kUseAcceptance) { - TFile *gParamFile = TFile::Open(acceptanceFilename); - if((!gParamFile) || (!gParamFile->IsOpen())) { - Printf("File %s not found!!!",acceptanceFilename); - return; - } - - TString gParamName; - for(Int_t iCentrality = 0; iCentrality < numberOfCentralityBins; iCentrality++) { - gParamName = "gParamCentrality"; gParamName += iCentrality; - fParameterization[iCentrality] = dynamic_cast(gParamFile->Get(gParamName.Data())); - } - } - - //Add the BF task (all centralities) - gROOT->LoadMacro("AddTaskBalanceMCCentralityTrain.C"); - for (Int_t i=binfirst; iSetDebugLevel(2); - mgr->SetUseProgressBar(1,100); - if (!mgr->InitAnalysis()) return; - mgr->PrintStatus(); - - // start analysis - if(mode == mLocal || mode == mLocalPAR) - mgr->StartAnalysis("local",chain); - else if(mode == mPROOF) - mgr->StartAnalysis("proof",dataDir,nRuns,offset); - else if(mode == mGrid || mode == mGridPAR) - mgr->StartAnalysis("grid"); - - // Print real and CPU time used for analysis: - timer.Stop(); - timer.Print(); -} - -//=============================================================// -void LoadLibraries(const analysisModes mode) { - //-------------------------------------- - // Load the needed libraries most of them already loaded by aliroot - //-------------------------------------- - gSystem->Load("libCore.so"); - gSystem->Load("libGeom.so"); - gSystem->Load("libVMC.so"); - gSystem->Load("libPhysics.so"); - gSystem->Load("libTree.so"); - - //---------------------------------------------------------- - // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< - //---------------------------------------------------------- - if (mode==mLocal || mode==mGrid || mode == mGridPAR) { - //-------------------------------------------------------- - // If you want to use already compiled libraries - // in the aliroot distribution - //-------------------------------------------------------- - gSystem->Load("libSTEERBase.so"); - gSystem->Load("libESD.so"); - gSystem->Load("libAOD.so"); - gSystem->Load("libANALYSIS.so"); - gSystem->Load("libANALYSISalice.so"); - gSystem->Load("libEventMixing.so"); - gSystem->Load("libPWGCFebye.so"); - // Use AliRoot includes to compile our task - gROOT->ProcessLine(".include $ALICE_ROOT/include"); - } - - else if (mode == mLocalPAR) { - //-------------------------------------------------------- - //If you want to use root and par files from aliroot - //-------------------------------------------------------- - SetupPar("STEERBase"); - SetupPar("ESD"); - SetupPar("AOD"); - SetupPar("ANALYSIS"); - SetupPar("ANALYSISalice"); - SetupPar("PWGCFebye"); -} - - //--------------------------------------------------------- - // <<<<<<<<<< PROOF mode >>>>>>>>>>>> - //--------------------------------------------------------- - else if (mode==mPROOF) { - // Connect to proof - printf("*** Connect to PROOF ***\n"); - gEnv->SetValue("XSec.GSI.DelegProxy","2"); - // Put appropriate username here - TProof::Open("alice-caf.cern.ch"); - //TProof::Open("skaf.saske.sk"); - //TProof::Open("prf000-iep-grid.saske.sk"); - - gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-12-AN"); - } - -} // end of void LoadLibraries(const anaModes mode) - -//======================================================================// -void SetupPar(char* pararchivename) { - //Load par files, create analysis libraries - //For testing, if par file already decompressed and modified - //classes then do not decompress. - - TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; - TString parpar(Form("%s.par", pararchivename)) ; - if ( gSystem->AccessPathName(parpar.Data()) ) { - gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ; - TString processline(Form(".! make %s", parpar.Data())) ; - gROOT->ProcessLine(processline.Data()) ; - gSystem->ChangeDirectory(cdir) ; - processline = Form(".! mv /tmp/%s .", parpar.Data()) ; - gROOT->ProcessLine(processline.Data()) ; - } - if ( gSystem->AccessPathName(pararchivename) ) { - TString processline = Form(".! tar xvzf %s",parpar.Data()) ; - gROOT->ProcessLine(processline.Data()); - } - - TString ocwd = gSystem->WorkingDirectory(); - gSystem->ChangeDirectory(pararchivename); - - // check for BUILD.sh and execute - if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { - printf("*******************************\n"); - printf("*** Building PAR archive ***\n"); - cout<Exec("PROOF-INF/BUILD.sh")) { - Error("runProcess","Cannot Build the PAR Archive! - Abort!"); - return -1; - } - } - // check for SETUP.C and execute - if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { - printf("*******************************\n"); - printf("*** Setup PAR archive ***\n"); - cout<Macro("PROOF-INF/SETUP.C"); - } - - gSystem->ChangeDirectory(ocwd.Data()); - printf("Current dir: %s\n", ocwd.Data()); - -} // end of void SetupPar(char* pararchivename) - +enum analysisModes {mLocal,mLocalPAR,mPROOF,mGrid,mGridPAR}; +enum analysisTypes {mESD,mAOD,mMC,mMCESD}; + +// +class AliAnalysisGrid; +class AliAnalysisTaskBF; +class AliBalance; + +//Centrality stuff +Int_t binfirst = 0; //where do we start numbering bins +Int_t binlast = 8; //where do we stop numbering bins +const Int_t numberOfCentralityBins = 9; +Float_t centralityArray[numberOfCentralityBins+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.}; // in centrality percentile +Float_t impactParameterArray[numberOfCentralityBins+1] = {0.0,3.79,5.30,7.41,9.04,10.40,11.61,12.68,13.67,14.63}; // in fm (impact parametger taken from the MC header) + +//Acceptance parameterization +Bool_t kUseAcceptance = kTRUE; +const char *acceptanceFilename = "efficiencyALICE.root"; +TF1 *fParameterization[numberOfCentralityBins]; + +//Analyze a particle +Int_t gPdgCode = -1; + +//________________________________________________________________________// +void runBalanceFunctionMC(Int_t mode = mLocal, + Int_t type = mMC, + Bool_t DATA = kFALSE) { + // Time: + TStopwatch timer; + timer.Start(); + + //Check analysis mode + if((mode < 0) || (mode > 4)) { + Printf("Analysis mode not recognized!"); + Printf("You can select out of 0: local, 1: local with par files, 2: proof, 3: grid, 4: grid with par files"); + return; + } + + //Check analysis type + if((type < 0) || (type > 3)) { + Printf("Analysis type not recognized!"); + Printf("You can select out of 0: ESD, 1: AOD, 2: MC (stack), 3: MC (from the ESD)"); + return; + } + + // Load needed libraries: + LoadLibraries(mode); + + + // Create and configure the AliEn plug-in: + if(mode == mGrid || mode == mGridPAR) { + gROOT->LoadMacro("CreateAlienHandler.C"); + AliAnalysisGrid *alienHandler = CreateAlienHandler(runListFileName); + if (!alienHandler) return; + } + // Chains: + if(mode == mLocal || mode == mLocalPAR) { + TChain* chain = 0x0; + if((type == mESD)||(type == mMCESD)) + chain = new TChain("esdTree"); + else if(type == mAOD) + chain = new TChain("aodTree"); + else if(type == mMC) + chain = new TChain("TE"); + + TString filename = "galice.root"; + chain->Add(filename.Data()); + } + + //Proof + if(mode == mPROOF) { + gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName("$ALICE_ROOT"))); + } + + // analysis manager + AliAnalysisManager* mgr = new AliAnalysisManager("balanceFunctionManager"); + if(mode == mGrid || mode == mGridPAR) + mgr->SetGridHandler(alienHandler); + + // input handler (ESD or AOD) + AliVEventHandler* inputH = NULL; + if((type == mESD)||(type == mMCESD)||(type == mMC)) + inputH = new AliESDInputHandler(); + else if(type == mAOD) + inputH = new AliAODInputHandler(); + mgr->SetInputEventHandler(inputH); + + // mc event handler + if((type == mMC) || (type == mMCESD)) { + AliMCEventHandler* mchandler = new AliMCEventHandler(); + // Not reading track references + mchandler->SetReadTR(kFALSE); + mgr->SetMCtruthEventHandler(mchandler); + } + + if(mAOD){ + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); + AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); + + // Add physics selection task (NOT needed for AODs) + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(DATA); + } + + //Setup the parameterization + if(kUseAcceptance) { + TFile *gParamFile = TFile::Open(acceptanceFilename); + if((!gParamFile) || (!gParamFile->IsOpen())) { + Printf("File %s not found!!!",acceptanceFilename); + return; + } + + TString gParamName; + for(Int_t iCentrality = 0; iCentrality < numberOfCentralityBins; iCentrality++) { + gParamName = "gParamCentrality"; gParamName += iCentrality; + fParameterization[iCentrality] = dynamic_cast(gParamFile->Get(gParamName.Data())); + } + } + + //Add the BF task (all centralities) + gROOT->LoadMacro("AddTaskBalanceMCCentralityTrain.C"); + for (Int_t i=binfirst; iSetDebugLevel(2); + mgr->SetUseProgressBar(1,100); + if (!mgr->InitAnalysis()) return; + mgr->PrintStatus(); + + // start analysis + if(mode == mLocal || mode == mLocalPAR) + mgr->StartAnalysis("local",chain); + else if(mode == mPROOF) + mgr->StartAnalysis("proof",dataDir,nRuns,offset); + else if(mode == mGrid || mode == mGridPAR) + mgr->StartAnalysis("grid"); + + // Print real and CPU time used for analysis: + timer.Stop(); + timer.Print(); +} + +//=============================================================// +void LoadLibraries(const analysisModes mode) { + //-------------------------------------- + // Load the needed libraries most of them already loaded by aliroot + //-------------------------------------- + gSystem->Load("libCore.so"); + gSystem->Load("libGeom.so"); + gSystem->Load("libVMC.so"); + gSystem->Load("libPhysics.so"); + gSystem->Load("libTree.so"); + + //---------------------------------------------------------- + // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< + //---------------------------------------------------------- + if (mode==mLocal || mode==mGrid || mode == mGridPAR) { + //-------------------------------------------------------- + // If you want to use already compiled libraries + // in the aliroot distribution + //-------------------------------------------------------- + gSystem->Load("libSTEERBase.so"); + gSystem->Load("libESD.so"); + gSystem->Load("libAOD.so"); + gSystem->Load("libANALYSIS.so"); + gSystem->Load("libANALYSISalice.so"); + gSystem->Load("libEventMixing.so"); + gSystem->Load("libPWGCFebye.so"); + // Use AliRoot includes to compile our task + gROOT->ProcessLine(".include $ALICE_ROOT/include"); + } + + else if (mode == mLocalPAR) { + //-------------------------------------------------------- + //If you want to use root and par files from aliroot + //-------------------------------------------------------- + SetupPar("STEERBase"); + SetupPar("ESD"); + SetupPar("AOD"); + SetupPar("ANALYSIS"); + SetupPar("ANALYSISalice"); + SetupPar("PWGCFebye"); +} + + //--------------------------------------------------------- + // <<<<<<<<<< PROOF mode >>>>>>>>>>>> + //--------------------------------------------------------- + else if (mode==mPROOF) { + // Connect to proof + printf("*** Connect to PROOF ***\n"); + gEnv->SetValue("XSec.GSI.DelegProxy","2"); + // Put appropriate username here + TProof::Open("alice-caf.cern.ch"); + //TProof::Open("skaf.saske.sk"); + //TProof::Open("prf000-iep-grid.saske.sk"); + + gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-12-AN"); + } + +} // end of void LoadLibraries(const anaModes mode) + +//======================================================================// +void SetupPar(char* pararchivename) { + //Load par files, create analysis libraries + //For testing, if par file already decompressed and modified + //classes then do not decompress. + + TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; + TString parpar(Form("%s.par", pararchivename)) ; + if ( gSystem->AccessPathName(parpar.Data()) ) { + gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ; + TString processline(Form(".! make %s", parpar.Data())) ; + gROOT->ProcessLine(processline.Data()) ; + gSystem->ChangeDirectory(cdir) ; + processline = Form(".! mv /tmp/%s .", parpar.Data()) ; + gROOT->ProcessLine(processline.Data()) ; + } + if ( gSystem->AccessPathName(pararchivename) ) { + TString processline = Form(".! tar xvzf %s",parpar.Data()) ; + gROOT->ProcessLine(processline.Data()); + } + + TString ocwd = gSystem->WorkingDirectory(); + gSystem->ChangeDirectory(pararchivename); + + // check for BUILD.sh and execute + if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { + printf("*******************************\n"); + printf("*** Building PAR archive ***\n"); + cout<Exec("PROOF-INF/BUILD.sh")) { + Error("runProcess","Cannot Build the PAR Archive! - Abort!"); + return -1; + } + } + // check for SETUP.C and execute + if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { + printf("*******************************\n"); + printf("*** Setup PAR archive ***\n"); + cout<Macro("PROOF-INF/SETUP.C"); + } + + gSystem->ChangeDirectory(ocwd.Data()); + printf("Current dir: %s\n", ocwd.Data()); + +} // end of void SetupPar(char* pararchivename) + diff --git a/PWGCF/EBYE/macros/runBalanceFunctionToyModel.C b/PWGCF/EBYE/macros/runBalanceFunctionToyModel.C index d2ca8f57ac6..0042325eee6 100644 --- a/PWGCF/EBYE/macros/runBalanceFunctionToyModel.C +++ b/PWGCF/EBYE/macros/runBalanceFunctionToyModel.C @@ -1,199 +1,199 @@ -//=========Total multiplicity=========// -Double_t nTotalMultiplicityMean = 100.; -Double_t nTotalMultiplicitySigma = 10.; - -//=========Net charge=========// -Double_t nNetChargeMean = 0.0; -Double_t nNetChargeSigma = 3.0; - -//==============Particles and spectra==============// -//Double_t gAllChargesTemperature = 0.11; //in GeV -Double_t gAllChargesTemperature = 4.5; //not temperature==>modified hagedorn -Double_t gPionPercentage = 0.8; -Double_t gPionTemperature = 0.1; //in GeV -Double_t gKaonPercentage = 0.12; -Double_t gKaonTemperature = 0.12; //in GeV -Double_t gProtonPercentage = 0.08; -Double_t gProtonTemperature = 0.2; //in GeV -//==============Particles and spectra==============// - -//==============Flow values==============// -Double_t gDirectedFlow = 0.0; -Double_t gEllipticFlow = 0.2; -Double_t gTriangularFlow = 0.0; -Double_t gQuandrangularFlow = 0.0; -Double_t gPentangularFlow = 0.0; -//==============Flow values==============// - -//=========Acceptance definition=========// -Double_t gEtaMin = -1.0; -Double_t gEtaMax = 1.0; -Double_t gPtMin = 0.1; -Double_t gPtMax = 20.0; -//=========Acceptance definition=========// - -//=========Acceptance filter=========// -Bool_t kUseAcceptanceFilter = kFALSE; -const char *gAcceptanceFilterFile = "efficiencyALICE.root"; -//=========Acceptance filter=========// - -//=========Detector effects=========// -Bool_t kSimulateDetectorEffects = kTRUE; -Int_t fNumberOfInefficientSectors = 5;//inefficient secotrs in phi -Double_t fInefficiencyFactorInPhi = 0.65;//efficiency factor < 1 -Int_t fNumberOfDeadSectors = 3;//number of dead sectors -Bool_t fEfficiencyDropNearEtaEdges = kTRUE;//efficiency drop in eta edges -//=========Detector effects=========// - -//=========Jets=========// -Bool_t kUseJets = kFALSE; -//=========Jets=========// - -//=========Dynamical Correlations=========// -Bool_t kUseDynamicalCorrelations = kFALSE; -Double_t gDynamicalCorrelationsPercentage = 0.1; -//=========Dynamical Correlations=========// - -//=========bf object configuration=========// -Bool_t kRunShuffling = kFALSE; -Bool_t kRunMixing = kTRUE; -Bool_t bResonancesCut = kFALSE; -Bool_t bHBTcut = kFALSE; -Bool_t bConversionCut = kFALSE; -Bool_t bMomentumDifferenceCut = kFALSE; -TString fArgEventClass = "EventPlane"; -Double_t deltaEtaMax = TMath::Abs(gEtaMax-gEtaMin); -Bool_t bVertexBinning = kFALSE; -//=========bf object configuration=========// - -//=========Debug option=========// -Bool_t kUseDebug = kFALSE; -//=========Debug option=========// - -// Run macro used for the toy model analysis -// Author: Panos.Christakoglou@nikhef.nl - -//____________________________________________________________________ -void runBalanceFunctionToyModel(Int_t nEvents = 10, - Bool_t kUseAllCharges = kTRUE) { - TStopwatch timer; - timer.Start(); - - // load libraries - gSystem->Load("libCore.so"); - gSystem->Load("libGeom.so"); - gSystem->Load("libVMC.so"); - gSystem->Load("libPhysics.so"); - gSystem->Load("libTree.so"); - - gSystem->Load("libSTEERBase"); - gSystem->Load("libESD"); - gSystem->Load("libAOD"); - gSystem->Load("libANALYSIS"); - gSystem->Load("libANALYSISalice"); - gSystem->Load("libEventMixing.so"); - gSystem->Load("libCORRFW"); - gSystem->Load("libPWGTools"); - gSystem->Load("libPWGCFebye"); - - //configure the bf objects - gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionPsiAnalysis.C"); - AliBalancePsi *bf = GetBalanceFunctionObject("MC","",0,100,kRunShuffling,bResonancesCut,bHBTcut,bConversionCut,bMomentumDifferenceCut,fArgEventClass,deltaEtaMax,bVertexBinning); - AliBalancePsi *bfm = 0x0; - if(kRunMixing) - bfm = GetBalanceFunctionObject("MC","",0,100,kRunShuffling,bResonancesCut,bHBTcut,bConversionCut,bMomentumDifferenceCut,fArgEventClass,deltaEtaMax,bVertexBinning); - - //Configure the toy model object - AliAnalysisTaskToyModel *toyModelAnalysis = new AliAnalysisTaskToyModel(); - if(kUseDebug) toyModelAnalysis->SetDebugFlag(); - toyModelAnalysis->SetAnalysisObject(bf); - if(kRunMixing) - toyModelAnalysis->SetMixingObject(bfm); - toyModelAnalysis->SetTotalMultiplicity(nTotalMultiplicityMean,nTotalMultiplicitySigma); - toyModelAnalysis->SetNetCharge(nNetChargeMean,nNetChargeSigma); - toyModelAnalysis->SetKinematicsCutsMC(gPtMin,gPtMax,gEtaMin,gEtaMax); - - if(kUseAllCharges) { - toyModelAnalysis->SetSpectraTemperatureForAllCharges(gAllChargesTemperature); - toyModelAnalysis->SetDirectedFlowForAllCharges(gDirectedFlow); - toyModelAnalysis->SetEllipticFlowForAllCharges(gEllipticFlow); - toyModelAnalysis->SetTriangularFlowForAllCharges(gTriangularFlow); - toyModelAnalysis->SetQuandrangularFlowForAllCharges(gQuandrangularFlow); - toyModelAnalysis->SetPentangularFlowForAllCharges(gPentangularFlow); - } - else { - //Pions - toyModelAnalysis->SetPionPercentage(gPionPercentage); - toyModelAnalysis->SetSpectraTemperatureForPions(gPionTemperature); - toyModelAnalysis->SetDirectedFlowForPions(gDirectedFlow); - toyModelAnalysis->SetEllipticFlowForPions(gEllipticFlow); - toyModelAnalysis->SetTriangularFlowForPions(gTriangularFlow); - toyModelAnalysis->SetQuandrangularFlowForPions(gQuandrangularFlow); - toyModelAnalysis->SetPentangularFlowForPions(gPentangularFlow); - - //Kaons - toyModelAnalysis->SetKaonPercentage(gKaonPercentage); - toyModelAnalysis->SetSpectraTemperatureForKaons(gKaonTemperature); - toyModelAnalysis->SetDirectedFlowForKaons(gDirectedFlow); - toyModelAnalysis->SetEllipticFlowForKaons(gEllipticFlow); - toyModelAnalysis->SetTriangularFlowForKaons(gTriangularFlow); - toyModelAnalysis->SetQuandrangularFlowForKaons(gQuandrangularFlow); - toyModelAnalysis->SetPentangularFlowForKaons(gPentangularFlow); - - //Protons - toyModelAnalysis->SetProtonPercentage(gProtonPercentage); - toyModelAnalysis->SetSpectraTemperatureForProtons(gProtonTemperature); - toyModelAnalysis->SetDirectedFlowForProtons(gDirectedFlow); - toyModelAnalysis->SetEllipticFlowForProtons(gEllipticFlow); - toyModelAnalysis->SetTriangularFlowForProtons(gTriangularFlow); - toyModelAnalysis->SetQuandrangularFlowForProtons(gQuandrangularFlow); - toyModelAnalysis->SetPentangularFlowForProtons(gPentangularFlow); - } - - //Jets - if(kUseJets) - toyModelAnalysis->SetUseJets(); - - //Dynamical correlations - if(kUseDynamicalCorrelations) - toyModelAnalysis->SetCorrelationPercentage(gDynamicalCorrelationsPercentage); - - //Acceptance filter - if(kUseAcceptanceFilter) { - TFile *gParamFile = TFile::Open(gAcceptanceFilterFile); - if((!gParamFile) || (!gParamFile->IsOpen())) { - Printf("File %s not found!!!",acceptanceFilename); - return; - } - - TString gParamName; - for(Int_t iCentrality = 0; iCentrality < numberOfCentralityBins; iCentrality++) { - gParamName = "gParamCentrality0";//centrality 0-5% - TF1 *gParameterization = dynamic_cast(gParamFile->Get(gParamName.Data())); - } - toyModelAnalysis->SetAcceptanceParameterization(gParameterization); - } - - //Detector effects - if(kSimulateDetectorEffects) - toyModelAnalysis->SimulateDetectorEffects(); - if(fNumberOfInefficientSectors) { - toyModelAnalysis->SetNumberOfInefficientSectorsInPhi(fNumberOfInefficientSectors); - toyModelAnalysis->SetInefficiencyFactor(fInefficiencyFactorInPhi); - } - if(fNumberOfDeadSectors) - toyModelAnalysis->SetNumberOfDeadSectorsInPhi(fNumberOfDeadSectors); - if(fEfficiencyDropNearEtaEdges) - toyModelAnalysis->EnableEfficiencyDropNearEtaEdges(); - - //Initialize and run - toyModelAnalysis->Init(); - toyModelAnalysis->CreateOutputObjects(); - toyModelAnalysis->Run(nEvents); - toyModelAnalysis->FinishOutput(); - - // Print real and CPU time used for analysis: - timer.Stop(); - timer.Print(); -} - +//=========Total multiplicity=========// +Double_t nTotalMultiplicityMean = 100.; +Double_t nTotalMultiplicitySigma = 10.; + +//=========Net charge=========// +Double_t nNetChargeMean = 0.0; +Double_t nNetChargeSigma = 3.0; + +//==============Particles and spectra==============// +//Double_t gAllChargesTemperature = 0.11; //in GeV +Double_t gAllChargesTemperature = 4.5; //not temperature==>modified hagedorn +Double_t gPionPercentage = 0.8; +Double_t gPionTemperature = 0.1; //in GeV +Double_t gKaonPercentage = 0.12; +Double_t gKaonTemperature = 0.12; //in GeV +Double_t gProtonPercentage = 0.08; +Double_t gProtonTemperature = 0.2; //in GeV +//==============Particles and spectra==============// + +//==============Flow values==============// +Double_t gDirectedFlow = 0.0; +Double_t gEllipticFlow = 0.2; +Double_t gTriangularFlow = 0.0; +Double_t gQuandrangularFlow = 0.0; +Double_t gPentangularFlow = 0.0; +//==============Flow values==============// + +//=========Acceptance definition=========// +Double_t gEtaMin = -1.0; +Double_t gEtaMax = 1.0; +Double_t gPtMin = 0.1; +Double_t gPtMax = 20.0; +//=========Acceptance definition=========// + +//=========Acceptance filter=========// +Bool_t kUseAcceptanceFilter = kFALSE; +const char *gAcceptanceFilterFile = "efficiencyALICE.root"; +//=========Acceptance filter=========// + +//=========Detector effects=========// +Bool_t kSimulateDetectorEffects = kTRUE; +Int_t fNumberOfInefficientSectors = 5;//inefficient secotrs in phi +Double_t fInefficiencyFactorInPhi = 0.65;//efficiency factor < 1 +Int_t fNumberOfDeadSectors = 3;//number of dead sectors +Bool_t fEfficiencyDropNearEtaEdges = kTRUE;//efficiency drop in eta edges +//=========Detector effects=========// + +//=========Jets=========// +Bool_t kUseJets = kFALSE; +//=========Jets=========// + +//=========Dynamical Correlations=========// +Bool_t kUseDynamicalCorrelations = kFALSE; +Double_t gDynamicalCorrelationsPercentage = 0.1; +//=========Dynamical Correlations=========// + +//=========bf object configuration=========// +Bool_t kRunShuffling = kFALSE; +Bool_t kRunMixing = kTRUE; +Bool_t bResonancesCut = kFALSE; +Bool_t bHBTcut = kFALSE; +Bool_t bConversionCut = kFALSE; +Bool_t bMomentumDifferenceCut = kFALSE; +TString fArgEventClass = "EventPlane"; +Double_t deltaEtaMax = TMath::Abs(gEtaMax-gEtaMin); +Bool_t bVertexBinning = kFALSE; +//=========bf object configuration=========// + +//=========Debug option=========// +Bool_t kUseDebug = kFALSE; +//=========Debug option=========// + +// Run macro used for the toy model analysis +// Author: Panos.Christakoglou@nikhef.nl + +//____________________________________________________________________ +void runBalanceFunctionToyModel(Int_t nEvents = 10, + Bool_t kUseAllCharges = kTRUE) { + TStopwatch timer; + timer.Start(); + + // load libraries + gSystem->Load("libCore.so"); + gSystem->Load("libGeom.so"); + gSystem->Load("libVMC.so"); + gSystem->Load("libPhysics.so"); + gSystem->Load("libTree.so"); + + gSystem->Load("libSTEERBase"); + gSystem->Load("libESD"); + gSystem->Load("libAOD"); + gSystem->Load("libANALYSIS"); + gSystem->Load("libANALYSISalice"); + gSystem->Load("libEventMixing.so"); + gSystem->Load("libCORRFW"); + gSystem->Load("libPWGTools"); + gSystem->Load("libPWGCFebye"); + + //configure the bf objects + gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionPsiAnalysis.C"); + AliBalancePsi *bf = GetBalanceFunctionObject("MC","",0,100,kRunShuffling,bResonancesCut,bHBTcut,bConversionCut,bMomentumDifferenceCut,fArgEventClass,deltaEtaMax,bVertexBinning); + AliBalancePsi *bfm = 0x0; + if(kRunMixing) + bfm = GetBalanceFunctionObject("MC","",0,100,kRunShuffling,bResonancesCut,bHBTcut,bConversionCut,bMomentumDifferenceCut,fArgEventClass,deltaEtaMax,bVertexBinning); + + //Configure the toy model object + AliAnalysisTaskToyModel *toyModelAnalysis = new AliAnalysisTaskToyModel(); + if(kUseDebug) toyModelAnalysis->SetDebugFlag(); + toyModelAnalysis->SetAnalysisObject(bf); + if(kRunMixing) + toyModelAnalysis->SetMixingObject(bfm); + toyModelAnalysis->SetTotalMultiplicity(nTotalMultiplicityMean,nTotalMultiplicitySigma); + toyModelAnalysis->SetNetCharge(nNetChargeMean,nNetChargeSigma); + toyModelAnalysis->SetKinematicsCutsMC(gPtMin,gPtMax,gEtaMin,gEtaMax); + + if(kUseAllCharges) { + toyModelAnalysis->SetSpectraTemperatureForAllCharges(gAllChargesTemperature); + toyModelAnalysis->SetDirectedFlowForAllCharges(gDirectedFlow); + toyModelAnalysis->SetEllipticFlowForAllCharges(gEllipticFlow); + toyModelAnalysis->SetTriangularFlowForAllCharges(gTriangularFlow); + toyModelAnalysis->SetQuandrangularFlowForAllCharges(gQuandrangularFlow); + toyModelAnalysis->SetPentangularFlowForAllCharges(gPentangularFlow); + } + else { + //Pions + toyModelAnalysis->SetPionPercentage(gPionPercentage); + toyModelAnalysis->SetSpectraTemperatureForPions(gPionTemperature); + toyModelAnalysis->SetDirectedFlowForPions(gDirectedFlow); + toyModelAnalysis->SetEllipticFlowForPions(gEllipticFlow); + toyModelAnalysis->SetTriangularFlowForPions(gTriangularFlow); + toyModelAnalysis->SetQuandrangularFlowForPions(gQuandrangularFlow); + toyModelAnalysis->SetPentangularFlowForPions(gPentangularFlow); + + //Kaons + toyModelAnalysis->SetKaonPercentage(gKaonPercentage); + toyModelAnalysis->SetSpectraTemperatureForKaons(gKaonTemperature); + toyModelAnalysis->SetDirectedFlowForKaons(gDirectedFlow); + toyModelAnalysis->SetEllipticFlowForKaons(gEllipticFlow); + toyModelAnalysis->SetTriangularFlowForKaons(gTriangularFlow); + toyModelAnalysis->SetQuandrangularFlowForKaons(gQuandrangularFlow); + toyModelAnalysis->SetPentangularFlowForKaons(gPentangularFlow); + + //Protons + toyModelAnalysis->SetProtonPercentage(gProtonPercentage); + toyModelAnalysis->SetSpectraTemperatureForProtons(gProtonTemperature); + toyModelAnalysis->SetDirectedFlowForProtons(gDirectedFlow); + toyModelAnalysis->SetEllipticFlowForProtons(gEllipticFlow); + toyModelAnalysis->SetTriangularFlowForProtons(gTriangularFlow); + toyModelAnalysis->SetQuandrangularFlowForProtons(gQuandrangularFlow); + toyModelAnalysis->SetPentangularFlowForProtons(gPentangularFlow); + } + + //Jets + if(kUseJets) + toyModelAnalysis->SetUseJets(); + + //Dynamical correlations + if(kUseDynamicalCorrelations) + toyModelAnalysis->SetCorrelationPercentage(gDynamicalCorrelationsPercentage); + + //Acceptance filter + if(kUseAcceptanceFilter) { + TFile *gParamFile = TFile::Open(gAcceptanceFilterFile); + if((!gParamFile) || (!gParamFile->IsOpen())) { + Printf("File %s not found!!!",acceptanceFilename); + return; + } + + TString gParamName; + for(Int_t iCentrality = 0; iCentrality < numberOfCentralityBins; iCentrality++) { + gParamName = "gParamCentrality0";//centrality 0-5% + TF1 *gParameterization = dynamic_cast(gParamFile->Get(gParamName.Data())); + } + toyModelAnalysis->SetAcceptanceParameterization(gParameterization); + } + + //Detector effects + if(kSimulateDetectorEffects) + toyModelAnalysis->SimulateDetectorEffects(); + if(fNumberOfInefficientSectors) { + toyModelAnalysis->SetNumberOfInefficientSectorsInPhi(fNumberOfInefficientSectors); + toyModelAnalysis->SetInefficiencyFactor(fInefficiencyFactorInPhi); + } + if(fNumberOfDeadSectors) + toyModelAnalysis->SetNumberOfDeadSectorsInPhi(fNumberOfDeadSectors); + if(fEfficiencyDropNearEtaEdges) + toyModelAnalysis->EnableEfficiencyDropNearEtaEdges(); + + //Initialize and run + toyModelAnalysis->Init(); + toyModelAnalysis->CreateOutputObjects(); + toyModelAnalysis->Run(nEvents); + toyModelAnalysis->FinishOutput(); + + // Print real and CPU time used for analysis: + timer.Stop(); + timer.Print(); +} + diff --git a/PWGDQ/dielectron/macrosLMEE/AddTask_Asako_LMEEPbPb2011AOD.C b/PWGDQ/dielectron/macrosLMEE/AddTask_Asako_LMEEPbPb2011AOD.C index 8b5926b6432..913e7427d28 100644 --- a/PWGDQ/dielectron/macrosLMEE/AddTask_Asako_LMEEPbPb2011AOD.C +++ b/PWGDQ/dielectron/macrosLMEE/AddTask_Asako_LMEEPbPb2011AOD.C @@ -1,180 +1,180 @@ -AliAnalysisTask *AddTask_Asako_LMEEPbPb2011AOD(Bool_t runAll=kFALSE,Bool_t setMC=kFALSE,Bool_t getFromAlien=kFALSE, Bool_t PIDbaseline=kFALSE){ - - Bool_t bESDANA=kFALSE; //Autodetect via InputHandler - //get the current analysis manager - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - Error("AddTask_Asako_LMEEPbPb2011AOD", "No analysis manager found."); - return 0; - } - - -// create task and add it to the manager -// gSystem->AddIncludePath("$ALICE_ROOT/PWGDQ/dielectron/macrosLMEE"); - - - TString configBasePath("$TRAIN_ROOT/cbaumann_dielectron/"); - TString trainRoot=gSystem->Getenv("TRAIN_ROOT"); - - if (trainRoot.IsNull()) configBasePath= "$ALICE_ROOT/PWGDQ/dielectron/macrosLMEE/"; - - - if (getFromAlien && - (!gSystem->Exec("alien_cp alien:///alice/cern.ch/user/c/cbaumann/PWGDQ/dielectron/macrosLMEE/ConfigLMEEPbPb2011AOD.C .")) && - (!gSystem->Exec("alien_cp alien:///alice/cern.ch/user/c/cbaumann/PWGDQ/dielectron/macrosLMEE/LMEECutLibAOD.C .")) - ) { - configBasePath=Form("%s/",gSystem->pwd()); - } - - TString configFile("ConfigAsakoLMEEPbPb2011AOD.C"); - TString configLMEECutLib("LMEECutLibAsako.C"); - - TString configFilePath(configBasePath+configFile); - TString configLMEECutLibPath(configBasePath+configLMEECutLib); - - //AOD Usage currently tested with separate task, to be merged - if (mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class()){ - ::Info("AddTaskLMEEPbPb2011", "no dedicated AOD configuration"); - } - else if (mgr->GetInputEventHandler()->IsA()==AliESDInputHandler::Class()){ - ::Info("AddTaskLMEEPbPb2011AOD","switching on ESD specific code"); - bESDANA=kTRUE; - } - - - //Do we have an MC handler? - Bool_t hasMC=setMC; - if (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0) - hasMC=kTRUE; - - - - if (!gROOT->GetListOfGlobalFunctions()->FindObject(configLMEECutLib.Data())) - gROOT->LoadMacro(configLMEECutLibPath.Data()); - if (!gROOT->GetListOfGlobalFunctions()->FindObject(configFile.Data())) - gROOT->LoadMacro(configFilePath.Data()); - - - LMEECutLibAsako* cutlib = new LMEECutLibAsako(); - AliAnalysisTaskMultiDielectron *task=new AliAnalysisTaskMultiDielectron("MultiDiEData"); - if (!hasMC) task->UsePhysicsSelection(); - task->SetTriggerMask(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral); -// task->SelectCollisionCandidates(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral); -// task->SetRejectPileup(); - task->SelectCollisionCandidates(AliVEvent::kAny); - task->SetEventFilter(cutlib->GetEventCuts(LMEECutLibAsako::kPbPb2011TPCandTOF)); // - - - //load dielectron configuration file - - //add dielectron analysis with different cuts to the task - - - AliDielectron *lowmass1=ConfigAsakoLMEEPbPb2011AOD(1,hasMC,bESDANA); - task->AddDielectron(lowmass1); - printf("add: %s\n",lowmass1->GetName()); - - - AliDielectron *lowmass2=ConfigAsakoLMEEPbPb2011AOD(2,hasMC,bESDANA); - task->AddDielectron(lowmass2); - printf("add: %s\n",lowmass2->GetName()); - - - AliDielectron *lowmass3=ConfigAsakoLMEEPbPb2011AOD(3,hasMC,bESDANA); - task->AddDielectron(lowmass3); - printf("add: %s\n",lowmass3->GetName()); - - - AliDielectron *lowmass4=ConfigAsakoLMEEPbPb2011AOD(4,hasMC,bESDANA); - task->AddDielectron(lowmass4); - printf("add: %s\n",lowmass4->GetName()); - - - - AliDielectron *lowmass5=ConfigAsakoLMEEPbPb2011AOD(5,hasMC,bESDANA); - task->AddDielectron(lowmass5); - printf("add: %s\n",lowmass5->GetName()); - - AliDielectron *lowmass6=ConfigAsakoLMEEPbPb2011AOD(6,hasMC,bESDANA); - task->AddDielectron(lowmass6); - printf("add: %s\n",lowmass6->GetName()); - - AliDielectron *lowmass7=ConfigAsakoLMEEPbPb2011AOD(7,hasMC,bESDANA); - task->AddDielectron(lowmass7); - printf("add: %s\n",lowmass7->GetName()); - - AliDielectron *lowmass8=ConfigAsakoLMEEPbPb2011AOD(8,hasMC,bESDANA); - task->AddDielectron(lowmass8); - printf("add: %s\n",lowmass8->GetName()); - - AliDielectron *lowmass9=ConfigAsakoLMEEPbPb2011AOD(9,hasMC,bESDANA); - task->AddDielectron(lowmass9); - printf("add: %s\n",lowmass9->GetName()); - - AliDielectron *lowmass10=ConfigAsakoLMEEPbPb2011AOD(10,hasMC,bESDANA); - task->AddDielectron(lowmass10); - printf("add: %s\n",lowmass9->GetName()); - - -AliDielectron *lowmass11=ConfigAsakoLMEEPbPb2011AOD(11,hasMC,bESDANA); - task->AddDielectron(lowmass11); - printf("add: %s\n",lowmass11->GetName()); - - - AliDielectron *lowmass12=ConfigAsakoLMEEPbPb2011AOD(12,hasMC,bESDANA); - task->AddDielectron(lowmass12); - printf("add: %s\n",lowmass12->GetName()); - - - AliDielectron *lowmass13=ConfigAsakoLMEEPbPb2011AOD(13,hasMC,bESDANA); - task->AddDielectron(lowmass13); - printf("add: %s\n",lowmass13->GetName()); - - //if (PIDbaseline) { - //AliDielectron *lowmass7=ConfigLMEEPbPb2011AOD(7,hasMC,bESDANA); - // task->AddDielectron(lowmass7); - // printf("add: %s\n",lowmass7->GetName()); - //} - - mgr->AddTask(task); - - //create output container - AliAnalysisDataContainer *coutput1 = - mgr->CreateContainer("asako_LMEEPbPb2011_tree", - TTree::Class(), - AliAnalysisManager::kExchangeContainer, - "LMEEoutput.root"); - - AliAnalysisDataContainer *cOutputHist1 = - mgr->CreateContainer("asako_LMEEPbPb2011_out", - TList::Class(), - AliAnalysisManager::kOutputContainer, - "LMEEoutput.root"); - - /* AliAnalysisDataContainer *cOutputHist2 = - mgr->CreateContainer("cbaumann_lowmass_CF", - TList::Class(), - AliAnalysisManager::kOutputContainer, - "cbaumann_lowmass_CF.root"); - */ - AliAnalysisDataContainer *cOutputHist2 = - mgr->CreateContainer("asako_LMEEPbPb2011_CF", - TList::Class(), - AliAnalysisManager::kOutputContainer, - "LMEEoutput.root"); - - AliAnalysisDataContainer *cOutputHist3 = - mgr->CreateContainer("asako_EventStatPbPb2011", - TH1D::Class(), - AliAnalysisManager::kOutputContainer, - "LMEEoutput.root"); - - - mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(task, 0, coutput1 ); - mgr->ConnectOutput(task, 1, cOutputHist1); - mgr->ConnectOutput(task, 2, cOutputHist2); - mgr->ConnectOutput(task, 3, cOutputHist3); - - return task; -} +AliAnalysisTask *AddTask_Asako_LMEEPbPb2011AOD(Bool_t runAll=kFALSE,Bool_t setMC=kFALSE,Bool_t getFromAlien=kFALSE, Bool_t PIDbaseline=kFALSE){ + + Bool_t bESDANA=kFALSE; //Autodetect via InputHandler + //get the current analysis manager + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + Error("AddTask_Asako_LMEEPbPb2011AOD", "No analysis manager found."); + return 0; + } + + +// create task and add it to the manager +// gSystem->AddIncludePath("$ALICE_ROOT/PWGDQ/dielectron/macrosLMEE"); + + + TString configBasePath("$TRAIN_ROOT/cbaumann_dielectron/"); + TString trainRoot=gSystem->Getenv("TRAIN_ROOT"); + + if (trainRoot.IsNull()) configBasePath= "$ALICE_ROOT/PWGDQ/dielectron/macrosLMEE/"; + + + if (getFromAlien && + (!gSystem->Exec("alien_cp alien:///alice/cern.ch/user/c/cbaumann/PWGDQ/dielectron/macrosLMEE/ConfigLMEEPbPb2011AOD.C .")) && + (!gSystem->Exec("alien_cp alien:///alice/cern.ch/user/c/cbaumann/PWGDQ/dielectron/macrosLMEE/LMEECutLibAOD.C .")) + ) { + configBasePath=Form("%s/",gSystem->pwd()); + } + + TString configFile("ConfigAsakoLMEEPbPb2011AOD.C"); + TString configLMEECutLib("LMEECutLibAsako.C"); + + TString configFilePath(configBasePath+configFile); + TString configLMEECutLibPath(configBasePath+configLMEECutLib); + + //AOD Usage currently tested with separate task, to be merged + if (mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class()){ + ::Info("AddTaskLMEEPbPb2011", "no dedicated AOD configuration"); + } + else if (mgr->GetInputEventHandler()->IsA()==AliESDInputHandler::Class()){ + ::Info("AddTaskLMEEPbPb2011AOD","switching on ESD specific code"); + bESDANA=kTRUE; + } + + + //Do we have an MC handler? + Bool_t hasMC=setMC; + if (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0) + hasMC=kTRUE; + + + + if (!gROOT->GetListOfGlobalFunctions()->FindObject(configLMEECutLib.Data())) + gROOT->LoadMacro(configLMEECutLibPath.Data()); + if (!gROOT->GetListOfGlobalFunctions()->FindObject(configFile.Data())) + gROOT->LoadMacro(configFilePath.Data()); + + + LMEECutLibAsako* cutlib = new LMEECutLibAsako(); + AliAnalysisTaskMultiDielectron *task=new AliAnalysisTaskMultiDielectron("MultiDiEData"); + if (!hasMC) task->UsePhysicsSelection(); + task->SetTriggerMask(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral); +// task->SelectCollisionCandidates(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral); +// task->SetRejectPileup(); + task->SelectCollisionCandidates(AliVEvent::kAny); + task->SetEventFilter(cutlib->GetEventCuts(LMEECutLibAsako::kPbPb2011TPCandTOF)); // + + + //load dielectron configuration file + + //add dielectron analysis with different cuts to the task + + + AliDielectron *lowmass1=ConfigAsakoLMEEPbPb2011AOD(1,hasMC,bESDANA); + task->AddDielectron(lowmass1); + printf("add: %s\n",lowmass1->GetName()); + + + AliDielectron *lowmass2=ConfigAsakoLMEEPbPb2011AOD(2,hasMC,bESDANA); + task->AddDielectron(lowmass2); + printf("add: %s\n",lowmass2->GetName()); + + + AliDielectron *lowmass3=ConfigAsakoLMEEPbPb2011AOD(3,hasMC,bESDANA); + task->AddDielectron(lowmass3); + printf("add: %s\n",lowmass3->GetName()); + + + AliDielectron *lowmass4=ConfigAsakoLMEEPbPb2011AOD(4,hasMC,bESDANA); + task->AddDielectron(lowmass4); + printf("add: %s\n",lowmass4->GetName()); + + + + AliDielectron *lowmass5=ConfigAsakoLMEEPbPb2011AOD(5,hasMC,bESDANA); + task->AddDielectron(lowmass5); + printf("add: %s\n",lowmass5->GetName()); + + AliDielectron *lowmass6=ConfigAsakoLMEEPbPb2011AOD(6,hasMC,bESDANA); + task->AddDielectron(lowmass6); + printf("add: %s\n",lowmass6->GetName()); + + AliDielectron *lowmass7=ConfigAsakoLMEEPbPb2011AOD(7,hasMC,bESDANA); + task->AddDielectron(lowmass7); + printf("add: %s\n",lowmass7->GetName()); + + AliDielectron *lowmass8=ConfigAsakoLMEEPbPb2011AOD(8,hasMC,bESDANA); + task->AddDielectron(lowmass8); + printf("add: %s\n",lowmass8->GetName()); + + AliDielectron *lowmass9=ConfigAsakoLMEEPbPb2011AOD(9,hasMC,bESDANA); + task->AddDielectron(lowmass9); + printf("add: %s\n",lowmass9->GetName()); + + AliDielectron *lowmass10=ConfigAsakoLMEEPbPb2011AOD(10,hasMC,bESDANA); + task->AddDielectron(lowmass10); + printf("add: %s\n",lowmass9->GetName()); + + +AliDielectron *lowmass11=ConfigAsakoLMEEPbPb2011AOD(11,hasMC,bESDANA); + task->AddDielectron(lowmass11); + printf("add: %s\n",lowmass11->GetName()); + + + AliDielectron *lowmass12=ConfigAsakoLMEEPbPb2011AOD(12,hasMC,bESDANA); + task->AddDielectron(lowmass12); + printf("add: %s\n",lowmass12->GetName()); + + + AliDielectron *lowmass13=ConfigAsakoLMEEPbPb2011AOD(13,hasMC,bESDANA); + task->AddDielectron(lowmass13); + printf("add: %s\n",lowmass13->GetName()); + + //if (PIDbaseline) { + //AliDielectron *lowmass7=ConfigLMEEPbPb2011AOD(7,hasMC,bESDANA); + // task->AddDielectron(lowmass7); + // printf("add: %s\n",lowmass7->GetName()); + //} + + mgr->AddTask(task); + + //create output container + AliAnalysisDataContainer *coutput1 = + mgr->CreateContainer("asako_LMEEPbPb2011_tree", + TTree::Class(), + AliAnalysisManager::kExchangeContainer, + "LMEEoutput.root"); + + AliAnalysisDataContainer *cOutputHist1 = + mgr->CreateContainer("asako_LMEEPbPb2011_out", + TList::Class(), + AliAnalysisManager::kOutputContainer, + "LMEEoutput.root"); + + /* AliAnalysisDataContainer *cOutputHist2 = + mgr->CreateContainer("cbaumann_lowmass_CF", + TList::Class(), + AliAnalysisManager::kOutputContainer, + "cbaumann_lowmass_CF.root"); + */ + AliAnalysisDataContainer *cOutputHist2 = + mgr->CreateContainer("asako_LMEEPbPb2011_CF", + TList::Class(), + AliAnalysisManager::kOutputContainer, + "LMEEoutput.root"); + + AliAnalysisDataContainer *cOutputHist3 = + mgr->CreateContainer("asako_EventStatPbPb2011", + TH1D::Class(), + AliAnalysisManager::kOutputContainer, + "LMEEoutput.root"); + + + mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(task, 0, coutput1 ); + mgr->ConnectOutput(task, 1, cOutputHist1); + mgr->ConnectOutput(task, 2, cOutputHist2); + mgr->ConnectOutput(task, 3, cOutputHist3); + + return task; +} diff --git a/PWGGA/EMCALTasks/AliAnalysisTaskEMCALCaloTrackCorr.h b/PWGGA/EMCALTasks/AliAnalysisTaskEMCALCaloTrackCorr.h index 8836cb8307c..8638da3566d 100644 --- a/PWGGA/EMCALTasks/AliAnalysisTaskEMCALCaloTrackCorr.h +++ b/PWGGA/EMCALTasks/AliAnalysisTaskEMCALCaloTrackCorr.h @@ -1,517 +1,517 @@ -#ifndef ALIANALYSISTASKEMCALCALOTRACKCORR_cxx -#define ALIANALYSISTASKEMCALCALOTRACKCORR_cxx - -class TList; -class TH1F; -class TH2F; -class TH1I; -class TString; -class TGeoHMatrix; -class TClonesArray; -class AliEMCALGeometry; -class AliEMCALRecoUtils; -class AliESDtrackCuts; -class AliESDEvent; -class AliMCEvent; -class AliStack; -class AliVCluster; -class AliFiducialCut; -class AliCaloTrackParticle; -class AliCentrality; -class AliEventplane; -class AliAnalysisManager; -class AliInputEventHandler; - - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskEMCALCaloTrackCorr : public AliAnalysisTaskSE { -public: - AliAnalysisTaskEMCALCaloTrackCorr(const char *name = "AliAnalysisTaskEMCALCaloTrackCorr"); - virtual ~AliAnalysisTaskEMCALCaloTrackCorr() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - -// virtual AliFiducialCut *GetFiducialCut() { if(!fFidCut) -// fFidCut = new AliFiducialCut(); return fFidCut ; } - - - enum type {kPtThresholdIC=0, kSumPtInConeIC=1, kPtFracationIC=2, kSumPtFracationIC=3}; - enum particleInCone { kIsolatedNeutralAndCharged=0, kIsolatedOnlyNeutral=1, kIsolatedOnlyCharged=2 }; - - Int_t GetMinNCells() const { return fMinNCells ; } - Double_t GetMinE() const { return fMinE ; } - Double_t GetMinDistBad() const { return fMinDistBad ; } - - Int_t GetDebug() const { return fDebug ; } - void SetDebug(Int_t deb) { fDebug = deb ; } - - Bool_t IsDataMC() const { return kMC ; } - void SetMC(Bool_t mc) { kMC = mc ; } - - TString GetDataType() const { return fDataType ; } - void SetDataType(TString data) { fDataType = data ; } - - Int_t GetHistoPtBins() const { return fHistoPtBins ; } - Float_t GetHistoPtMin() const { return fHistoPtMin ; } - Float_t GetHistoPtMax() const { return fHistoPtMax ; } - - void SetHistoPtRangeAndNBins(Float_t min, Float_t max, Int_t n) - {fHistoPtBins = n; fHistoPtMax = max; fHistoPtMin = min;} - - Int_t GetHistoPhiBins() const { return fHistoPhiBins ; } - Float_t GetHistoPhiMin() const { return fHistoPhiMin ; } - Float_t GetHistoPhiMax() const { return fHistoPhiMax ; } - - void SetHistoPhiRangeAndNBins(Float_t min, Float_t max, Int_t n) - {fHistoPhiBins = n; fHistoPhiMax = max; fHistoPhiMin = min;} - - Int_t GetHistoEtaBins() const { return fHistoEtaBins ; } - Float_t GetHistoEtaMin() const { return fHistoEtaMin ; } - Float_t GetHistoEtaMax() const { return fHistoEtaMax ; } - - void SetHistoEtaRangeAndNBins(Float_t min, Float_t max, Int_t n) - {fHistoEtaBins = n; fHistoEtaMax = max; fHistoEtaMin = min;} - - - - Float_t GetConeR() const { return fSetConeR ; } - Float_t GetPtThreshold() const { return fSetPtThreshold ; } - Float_t GetSumPtThreshold() const { return fSetSumPtThreshold ; } - Float_t GetPtFraction() const { return fSetPtFraction ; } - TString GetICMethod() const { return fICMethod ; } - TString GetParticleTypeInCone() const { return fParticlesInCone ; } - - void SetMinNCells(Int_t n) { fMinNCells = n ; } - void SetMinE(Double_t pt) { fMinE = pt ; } - void SetMinDistBad(Double_t fn) { fMinDistBad = fn ; } - - void SetConeR(Float_t r) { fSetConeR = r ; } - void SetPtThreshold(Float_t pt) { fSetPtThreshold = pt ; } - void SetSumPtThreshold(Float_t s) { fSetSumPtThreshold = s ; } - void SetPtFraction(Float_t pt) { fSetPtFraction = pt ; } - void SetICMethod(Int_t iMethod ) { fICMethod = iMethod ; } - void SetParticleTypeInCone(Int_t i) { fParticlesInCone = i ; } - - void SwitchOnAnaIsolated() { kDoIsolatedAna = kTRUE ; } - void SwitchOffAnaIsolated() { kDoIsolatedAna = kFALSE ; } - - void SwitchOnTrackMultBins() { kDoTrackMultBins = kTRUE ; } - void SwitchOffTrackMultBins() { kDoTrackMultBins = kTRUE ; } - - void SetAnaUELeftRightOrNearAway(Bool_t leftright, Bool_t nearaway) { - kUELeftRight = leftright, - kUENearAway = nearaway ; } - void SwitchOnTwoTracksCorr() { kTwoTracksCorr = kTRUE ; } - void SwitchOffTwoTracksCorr() { kTwoTracksCorr = kFALSE ; } - - void SelectDecayPhotonCorr(Bool_t decayphoton) {kDecayPhotonCorr = decayphoton;} - - void SetAnaMCTruthOrPrimaryCorr(Bool_t kAnatruth, Bool_t kAnaprimary){ - kAnaMCTruthCorr = kAnatruth, - kAnaMCPrimaryCorr = kAnaprimary ; } - - void SetAnaMCPrimaryParticle(Bool_t kpi0, Bool_t keta, Bool_t kphoton){ - kAnaPi0Prim = kpi0, - kAnaEtaPrim = keta, - kAnaPhotonPrim = kphoton ; } - // Taking the absolute leading as the trigger or not - Bool_t DoAbsoluteLeading() const { return kMakeAbsoluteLeading ; } - void SwitchOnAbsoluteLeading() { kMakeAbsoluteLeading = kTRUE ; } - void SwitchOffAbsoluteLeading() { kMakeAbsoluteLeading = kFALSE ; } - - // Taking the near side leading as the trigger or not - Bool_t DoNearSideLeading() const { return kMakeNearSideLeading ; } - void SwitchOnNearSideLeading() { kMakeNearSideLeading = kTRUE ; } - void SwitchOffNearSideLeading() { kMakeNearSideLeading = kFALSE ; } - - void SwitchOnInAcceptance() { kPhotonInAcceptance = kTRUE ; } - void SwitchOffInAcceptance() { kPhotonInAcceptance = kFALSE ; } - - void SwitchOnAnaMapping() { kAnaDecayMapping = kTRUE ; } - void SwitchOffAnaMapping() { kAnaDecayMapping = kFALSE ; } - -// Bool_t IsFiducialCutOn() const { return fCheckFidCut ; } -// void SwitchOnFiducialCut() { fCheckFidCut = kTRUE; - // if(!fFidCut)fFidCut = new AliFiducialCut();} -// void SwitchOffFiducialCut() { fCheckFidCut = kFALSE ; } - - void SetNTriggPtBins(Int_t nbins) { fNTriggPtBins = nbins ; } - Int_t GetNTriggPtBins() const { return fNTriggPtBins ; } - void SetTriggerBins(Float_t *ptTriggBins); - - void SetNAssocPtBins(Int_t mbins) { fNAssocPtBins = mbins ; } - Int_t GetNAssocPtBins() const { return fNAssocPtBins ; } - void SetAssociatedBins(Float_t *ptAssocBins); - - Float_t GetDeltaPhiMaxCut() const { return fDeltaPhiMaxCut ; } - Float_t GetDeltaPhiMinCut() const { return fDeltaPhiMinCut ; } - void SetDeltaPhiCutRange(Float_t phimin, Float_t phimax) - {fDeltaPhiMaxCut = phimax; fDeltaPhiMinCut = phimin ; } - - void SetMixedEventsPool(Int_t n) { nMixedEvents = n ; } - void SwitchOnAnaMixEvent() { kDoMixEventsAna = kTRUE ; } - void SwitchOffAnaMixEvent() { kDoMixEventsAna = kFALSE ; } - - void SwitchOnFillMesonAOD() { kDoMesonFill = kTRUE ; } - void SwitchOffFillMesonAOD() { kDoMesonFill = kFALSE ; } - - void SwitchOnFillMesonHistos() { kNeutralMesonHistos = kTRUE ; } - void SwitchOffFillMesonHistos() { kNeutralMesonHistos = kFALSE ; } - - void SwitchOnAnaMesonCorr() { kDoMesonCorrAna = kTRUE ; } - void SwitchOffAnaMesonCorr() { kDoMesonCorrAna = kFALSE ; } - - void SwitchOnAnaPhotonCorr() { kDoPhotonCorrAna = kTRUE ; } - void SwitchOffAnaPhotonCorr() { kDoPhotonCorrAna = kFALSE ; } - - void SwitchOnEventTriggerAtSE() { kEventTriggerAtSE = kTRUE ; } - void SwitchOffEventTriggerAtSE() { kEventTriggerAtSE = kFALSE; } - - void SwithchOnPhotonPairTimeCut() { kPhotonPairTimeCut = kTRUE ;} - void SwithchOffPhotonPairTimeCut() { kPhotonPairTimeCut = kFALSE ;} - - void SwithchOnPhotonIDCut() { kDoPhotonIDCut = kTRUE ; } - void SwithchOffPhotonIDCut() { kDoPhotonIDCut = kFALSE ; } - - TString GetAnaTypeInIsolated() const { return fAnaTypeInIsolated ; } - void SetAnaTypeInIsolated(TString & part) { fAnaTypeInIsolated = part ; } - - Float_t GetDeltaPhiHRSize() const { return fDeltaPhiHRSize ; } - void SetDeltaPhiHRSize(Float_t fHRphi) { fDeltaPhiHRSize = fHRphi ; } - - Float_t GetUeDeltaPhiSize() const { return fUeDeltaPhiSize ; } - Float_t GetUeDeltaPhiFix() const { return fUeDeltaPhiFix ; } - void SetUeDeltaPhiFixAndSize(Float_t uefix, Float_t uesize) - { fUeDeltaPhiFix = uefix, fUeDeltaPhiSize = uesize ; } - - void SetAssociatedPtBegin(Float_t begin) {fptAssociatedBegin = begin;} - - void SetLargeCorrTrigger(Float_t ftrigger1, Float_t ftrigger2) - {fptTriggerBegin = ftrigger1, fptTriggerEnd = ftrigger2; } - - void SwitchOnAsymmetryCut() { kDoAsymmetryCut = kTRUE ; } - void SwitchOffAsymmetryCut() { kDoAsymmetryCut = kFALSE ; } - void SetAsymmetryCut(Float_t asycut) { fAsymmetryCut = asycut ; } - - void SwitchOnAODHybridTrackSelection() { kDoSelectHybridTracks = kTRUE ;} - void SwitchOffAODHybridTrackSelection() { kDoSelectHybridTracks = kFALSE;} - void SetAnaMesonType(TString fmesontype){ fAnaMesonType = fmesontype ; } - - void SetCentralityBin(Int_t min, Int_t max) - { fCentralityBinMin = min; fCentralityBinMax = max ; } - void SetCentralityClass(TString name) { fCentralityClass = name ; } - - void SetEventPlaneMethod(TString m) { fEventPlaneMethod = m ; } - - UInt_t GetEventTriggerMask() const { return fEventTriggerMaks ; } - void SetEventTriggerMask(UInt_t evtTrig = AliVEvent::kAny) - { fEventTriggerMaks = evtTrig ; } - void SetNCentralityBins(Int_t fcenbins) { fNCentralityBins = fcenbins; } - void SetNEventPlaneBins(Int_t fevbins) { fNEventPlaneBins = fevbins ; } - - void SetEMCALLambda0Cut(Float_t l0min, Float_t l0max) - { fL0CutMin = l0min, fL0CutMax = l0max ; } - void SetClusterTimeCut(Float_t timemin, Float_t timemax){ - fTimeCutMin = timemin, fTimeCutMax = timemax ; } - void SetPhotonPairDeltaTimeCut(Float_t deltatime) - { fPhotonPairTimeCut = deltatime ; } - - void SetTrackMatchedDPhiCut(Float_t dphicut){ fEMCALDPhiCut = dphicut; } - void SetTrackMatchedDEtaCut(Float_t detacut){ fEMCALDEtaCut = detacut; } - - void SetMesonInMassRangeCut(Float_t inmass1, Float_t inmass2){ - fInvMassMinCut = inmass1, fInvMassMaxCut = inmass2 ; } - - void SetMesonInMassLeftRangeCut(Float_t leftmin, Float_t leftmax){ - fLeftBandMinCut = leftmin, fLeftBandMaxCut = leftmax ; } - - void SetMesonInMassRightRangeCut(Float_t rightmin, Float_t rightmax){ - fRightBandMinCut = rightmin, fRightBandMaxCut = rightmax ; } - - void SetEMCALGeometryName(TString name) { fEMCALGeomName = name ; } - - void SetTrackCuts(AliESDtrackCuts * cuts); - - void SetZvertexCut(Float_t fzcut) { fZVertexCut = fzcut ; } - - void SetTrackFilterMask(ULong_t bit) { fTrackFilterMask = bit ; } - - -private: - AliAnalysisTaskEMCALCaloTrackCorr(const AliAnalysisTaskEMCALCaloTrackCorr&); // not implemented - AliAnalysisTaskEMCALCaloTrackCorr& operator=(const AliAnalysisTaskEMCALCaloTrackCorr&); // not implemented - - ////////////Add function - void InitParameters(); - - Bool_t FillInputEvent(); - - Bool_t SelectPair(AliCaloTrackParticle *mesonCandidate); - Bool_t IsolatedPhoton(TClonesArray *fEMCALEventIsolated, - TClonesArray *fCTSEventIsolated, - Int_t fIndexPhotonCan, Double_t ptPhotonCan, - Double_t phiPhotonCan, Double_t etaPhotonCan); - void FillInputPhoton(); - void FillInputMeson() ; - void FillInputTrack() ; - Bool_t MakeChargedCorrelation(Int_t fTrackIndex, Double_t ptTrigg, - Double_t phiTrigg, Double_t etaTrigg); - void MakeChargedMixCorrelation(Double_t ptTriggMix, Double_t phiTriggMix, - Double_t etaTriggMix, TList *poolMix); -private: - enum {kNtriggPtBins=10, kNassocPtBins=10}; - - AliAnalysisManager *fManager; - AliInputEventHandler *fInputHandler; - - AliVEvent *fEvent; - AliMCEvent *fMCEvent; - AliStack *fStack; - AliCentrality *fCentrality; - AliEventplane *fEventPlane; - - AliEMCALRecoUtils *fEMCALRecU; - AliEMCALGeometry *fEMCALGeom; - AliESDtrackCuts *fESDtrackCuts; - // AliFiducialCut *fFidCut; - - TList *outputContainer; - - TString fEMCALGeomName; - TString fCentralityClass; - Int_t fCentralityBinMin; - Int_t fCentralityBinMax; - TString fEventPlaneMethod; - UInt_t fEventTriggerMaks; - Int_t fNCentralityBins; - Int_t fNEventPlaneBins; - - Int_t fHistoPtBins ; - Float_t fHistoPtMax ; - Float_t fHistoPtMin ; - Int_t fHistoPhiBins; - Float_t fHistoPhiMax ; - Float_t fHistoPhiMin ; - Int_t fHistoEtaBins; - Float_t fHistoEtaMax ; - Float_t fHistoEtaMin ; - - Int_t fMinNCells; - Float_t fMinE; - Double_t fMinDistBad; - Float_t fL0CutMin; - Float_t fL0CutMax; - Float_t fTimeCutMin; - Float_t fTimeCutMax; - Float_t fPhotonPairTimeCut; - Float_t fEMCALDPhiCut; - Float_t fEMCALDEtaCut; - Float_t fZVertexCut; - Int_t fDebug; - TString fAnaMesonType; - Float_t fAsymmetryCut; - TString fDataType; - ULong_t fTrackFilterMask; - - Float_t fInvMassMinCut; - Float_t fInvMassMaxCut; - Float_t fLeftBandMinCut; - Float_t fLeftBandMaxCut; - Float_t fRightBandMinCut; - Float_t fRightBandMaxCut; - - Bool_t kMC; - Bool_t kNeutralMesonHistos; - Bool_t kDoMixEventsAna; - Bool_t kDoPhotonCorrAna; - Bool_t kDoAsymmetryCut; - Bool_t kDoSelectHybridTracks; - Bool_t kDoMesonFill; - Bool_t kDoMesonCorrAna; - Bool_t kDoIsolatedAna; - Bool_t kDoTrackMultBins; - Bool_t kUELeftRight; - Bool_t kUENearAway; - Bool_t kDecayPhotonCorr; - Bool_t kAnaMCTruthCorr; - Bool_t kAnaMCPrimaryCorr; - Bool_t kAnaPi0Prim; - Bool_t kAnaEtaPrim; - Bool_t kAnaPhotonPrim; - Bool_t kMakeAbsoluteLeading; - Bool_t kMakeNearSideLeading; - Bool_t kTwoTracksCorr; - Bool_t kPhotonInAcceptance; - Bool_t kAnaDecayMapping; -// Bool_t fCheckFidCut; - Bool_t kEventTriggerAtSE; - Bool_t kPhotonPairTimeCut; - Bool_t kDoPhotonIDCut; - - TH1F *fhNEvents; - Int_t fnEvents; - TH1F *fhNEventsAnalyized; - Int_t fEventAnalyized; - TClonesArray *fPhotonEvent; - TClonesArray *fPhotonPairEvent; - TClonesArray *fCTSEvent; - Int_t nPhotonsEMCAL; - Int_t nTracksCTS; - TString fAnaTypeInIsolated; - Int_t nMixedEvents; - Float_t fSetConeR; - Float_t fSetPtThreshold; - Float_t fSetSumPtThreshold; - Float_t fSetPtFraction; - Int_t fICMethod; - Int_t fParticlesInCone; - - Float_t *fTriggPtArray; - Int_t fNTriggPtBins; - Float_t fptTriggerBegin; - Float_t fptTriggerEnd; - Float_t *fAssocPtArray; - Int_t fNAssocPtBins; - Float_t fptAssociatedBegin; - - Float_t fDeltaPhiMaxCut; - Float_t fDeltaPhiMinCut; - Float_t fUeDeltaPhiSize; - Float_t fUeDeltaPhiFix; - Float_t fDeltaPhiHRSize; - - TH1F * fhPhotonE; - TH2F * fhPhotonPtPhi; - TH2F * fhPhotonPtEta; - TH2F * fhPhotonPhiEta; - - TH1F * fhMesonE; - TH2F * fhMesonPtPhi; - TH2F * fhMesonPtEta; - TH2F * fhMesonPhiEta; - - TH2F * fhAnglePairNoCut; - TH2F * fhInvMassPairNoCut; - TH2F * fhAsyNoCut; - TH2F * fhInvMassPairAsyCut; - TH2F * fhAnglePairAsyCut; - TH2F * fhInvMassPairPhi; - TH2F * fhInvMassPairEta; - TH2F * fhInvMassPairAllCut; - TH2F * fhAnglePairAllCut; - TH2F * fhAsyAllCut; - TH2F * fhPi0DecayPhoton1; - TH2F * fhPi0DecayPhoton1Dphi; - TH2F * fhDecayPhoton1Pi0Dphi; - TH2F * fhPi0DecayPhoton2; - TH2F * fhPi0DecayPhoton2Dphi; - TH2F * fhDecayPhoton2Pi0Dphi; - TH2F * fhDecayPhoton1Photon2; - TH2F * fhDecayPhoton1Photon2Dphi; - TH2F * fhDecayPhoton2Photon1Dphi; - - TH1F * fhNtracksAll; - TH1F * fhNtracksEMC7; - TH1F * fhNtracksAnyINT; - TH1F * fhNtracksCentral; - TH1F * fhNtracksSemiCentral; - TH1F * fhNtracksOtherTirgger; - TH1F * fhNtracksCorr; - TH2F * fhTrackPtPhi; - TH2F * fhTrackPtEta; - TH2F * fhTrackPhiEta; - TH2F * fhPtPhiLeading; //! phi distribution vs pT of leading - TH2F * fhPtEtaLeading; //! eta distribution vs pT of leading - TH2F * fhMixPtPhiLeading; //! phi distribution vs pT of leading - TH2F * fhMixPtEtaLeading; //! eta distribution vs pT of leading - - TH2F * fhDPhiTriggPtAssocPt; - TH2F * fhDEtaTriggPtAssocPt; - TH2F * fhAssocPtTriggPt; - TH2F * fhxELogTriggPt; - TH2F * fhpoutTriggPt; - TH2F * fhzTTriggPt; - TH2F * fhxETriggPt; - TH2F * fhAssocPtTriggPtHR; - TH2F * fhxELogTriggPtHR; - TH2F * fhpoutTriggPtHR; - TH2F * fhzTTriggPtHR; - TH2F * fhxETriggPtHR; - TH2F * fhNUeAssocPtTriggPt; - TH2F * fhNUepoutTriggPt; - TH2F * fhNUexETriggPt; - TH2F * fhNUezTTriggPt; - TH2F * fhNUexELogTriggPt; - TH2F * fhNUeDPhiDEta; - TH2F * fhAUeAssocPtTriggPt; - TH2F * fhAUepoutTriggPt; - TH2F * fhAUezTTriggPt; - TH2F * fhAUexETriggPt; - TH2F * fhAUexELogTriggPt; - TH2F * fhAUeDPhiDEta; - - TH2F * fhMCPtPhiLeading; //! phi distribution vs pT of leading - TH2F * fhMCPtEtaLeading; //! eta distribution vs pT of leading - - TH2F * fhMCAssocPtTriggPt; - TH2F * fhMCxELogTriggPt; - TH2F * fhMCpoutTriggPt; - TH2F * fhMCzTTriggPt; - TH2F * fhMCxETriggPt; - TH2F * fhMCAssocPtTriggPtHR; - TH2F * fhMCxELogTriggPtHR; - TH2F * fhMCpoutTriggPtHR; - TH2F * fhMCzTTriggPtHR; - TH2F * fhMCxETriggPtHR; - TH2F * fhMCNUeAssocPtTriggPt; - TH2F * fhMCNUepoutTriggPt; - TH2F * fhMCNUexETriggPt; - TH2F * fhMCNUezTTriggPt; - TH2F * fhMCNUexELogTriggPt; - TH2F * fhMCAUeAssocPtTriggPt; - TH2F * fhMCAUepoutTriggPt; - TH2F * fhMCAUezTTriggPt; - TH2F * fhMCAUexETriggPt; - TH2F * fhMCAUexELogTriggPt; - - TH2F * fhDPhiAssocPt15T; - TH2F * fhDEtaAssocPt15T; - TH2F * fhMixDPhiAssocPt15T; - TH2F * fhMixDEtaAssocPt15T; - TH2F * fhMCDPhiAssocPt15T; - TH2F * fhMCDEtaAssocPt15T; - - TList* fListMixEvents[10][10][10]; - - TH2F *fhDPhiTriggPtT[kNassocPtBins]; - TH2F *fhDEtaTriggPtT[kNassocPtBins]; - TH2F *fhMixDPhiTriggPtT[kNassocPtBins]; - TH2F *fhMixDEtaTriggPtT[kNassocPtBins]; - - TH2F *fhDPhiSumPtBin[kNtriggPtBins][kNassocPtBins]; - TH2F *fhDEtaSumPtBin[kNtriggPtBins][kNassocPtBins]; - TH2F *fhDPhiDEtaBin[kNtriggPtBins][kNassocPtBins]; - TH2F *fhMixDPhiDEtaBin[kNtriggPtBins][kNassocPtBins]; - - TH2F *fhDPhiAssocPtA[kNtriggPtBins]; - TH2F *fhDEtaAssocPtA[kNtriggPtBins]; - TH2F *fhMixDPhiAssocPtA[kNtriggPtBins]; - TH2F *fhMixDEtaAssocPtA[kNtriggPtBins]; - - TH2F *fhMCDPhiTriggPtT[kNassocPtBins]; - TH2F *fhMCDEtaTriggPtT[kNassocPtBins]; - - TH2F *fhMCDPhiSumPtBin[kNtriggPtBins][kNassocPtBins]; - TH2F *fhMCDEtaSumPtBin[kNtriggPtBins][kNassocPtBins]; - TH2F *fhMCDPhiDEtaBin[kNtriggPtBins][kNassocPtBins]; - - TH2F *fhMCDPhiAssocPtA[kNtriggPtBins]; - TH2F *fhMCDEtaAssocPtA[kNtriggPtBins]; - - ClassDef(AliAnalysisTaskEMCALCaloTrackCorr, 1); // example of analysis -}; - -#endif +#ifndef ALIANALYSISTASKEMCALCALOTRACKCORR_cxx +#define ALIANALYSISTASKEMCALCALOTRACKCORR_cxx + +class TList; +class TH1F; +class TH2F; +class TH1I; +class TString; +class TGeoHMatrix; +class TClonesArray; +class AliEMCALGeometry; +class AliEMCALRecoUtils; +class AliESDtrackCuts; +class AliESDEvent; +class AliMCEvent; +class AliStack; +class AliVCluster; +class AliFiducialCut; +class AliCaloTrackParticle; +class AliCentrality; +class AliEventplane; +class AliAnalysisManager; +class AliInputEventHandler; + + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskEMCALCaloTrackCorr : public AliAnalysisTaskSE { +public: + AliAnalysisTaskEMCALCaloTrackCorr(const char *name = "AliAnalysisTaskEMCALCaloTrackCorr"); + virtual ~AliAnalysisTaskEMCALCaloTrackCorr() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + +// virtual AliFiducialCut *GetFiducialCut() { if(!fFidCut) +// fFidCut = new AliFiducialCut(); return fFidCut ; } + + + enum type {kPtThresholdIC=0, kSumPtInConeIC=1, kPtFracationIC=2, kSumPtFracationIC=3}; + enum particleInCone { kIsolatedNeutralAndCharged=0, kIsolatedOnlyNeutral=1, kIsolatedOnlyCharged=2 }; + + Int_t GetMinNCells() const { return fMinNCells ; } + Double_t GetMinE() const { return fMinE ; } + Double_t GetMinDistBad() const { return fMinDistBad ; } + + Int_t GetDebug() const { return fDebug ; } + void SetDebug(Int_t deb) { fDebug = deb ; } + + Bool_t IsDataMC() const { return kMC ; } + void SetMC(Bool_t mc) { kMC = mc ; } + + TString GetDataType() const { return fDataType ; } + void SetDataType(TString data) { fDataType = data ; } + + Int_t GetHistoPtBins() const { return fHistoPtBins ; } + Float_t GetHistoPtMin() const { return fHistoPtMin ; } + Float_t GetHistoPtMax() const { return fHistoPtMax ; } + + void SetHistoPtRangeAndNBins(Float_t min, Float_t max, Int_t n) + {fHistoPtBins = n; fHistoPtMax = max; fHistoPtMin = min;} + + Int_t GetHistoPhiBins() const { return fHistoPhiBins ; } + Float_t GetHistoPhiMin() const { return fHistoPhiMin ; } + Float_t GetHistoPhiMax() const { return fHistoPhiMax ; } + + void SetHistoPhiRangeAndNBins(Float_t min, Float_t max, Int_t n) + {fHistoPhiBins = n; fHistoPhiMax = max; fHistoPhiMin = min;} + + Int_t GetHistoEtaBins() const { return fHistoEtaBins ; } + Float_t GetHistoEtaMin() const { return fHistoEtaMin ; } + Float_t GetHistoEtaMax() const { return fHistoEtaMax ; } + + void SetHistoEtaRangeAndNBins(Float_t min, Float_t max, Int_t n) + {fHistoEtaBins = n; fHistoEtaMax = max; fHistoEtaMin = min;} + + + + Float_t GetConeR() const { return fSetConeR ; } + Float_t GetPtThreshold() const { return fSetPtThreshold ; } + Float_t GetSumPtThreshold() const { return fSetSumPtThreshold ; } + Float_t GetPtFraction() const { return fSetPtFraction ; } + TString GetICMethod() const { return fICMethod ; } + TString GetParticleTypeInCone() const { return fParticlesInCone ; } + + void SetMinNCells(Int_t n) { fMinNCells = n ; } + void SetMinE(Double_t pt) { fMinE = pt ; } + void SetMinDistBad(Double_t fn) { fMinDistBad = fn ; } + + void SetConeR(Float_t r) { fSetConeR = r ; } + void SetPtThreshold(Float_t pt) { fSetPtThreshold = pt ; } + void SetSumPtThreshold(Float_t s) { fSetSumPtThreshold = s ; } + void SetPtFraction(Float_t pt) { fSetPtFraction = pt ; } + void SetICMethod(Int_t iMethod ) { fICMethod = iMethod ; } + void SetParticleTypeInCone(Int_t i) { fParticlesInCone = i ; } + + void SwitchOnAnaIsolated() { kDoIsolatedAna = kTRUE ; } + void SwitchOffAnaIsolated() { kDoIsolatedAna = kFALSE ; } + + void SwitchOnTrackMultBins() { kDoTrackMultBins = kTRUE ; } + void SwitchOffTrackMultBins() { kDoTrackMultBins = kTRUE ; } + + void SetAnaUELeftRightOrNearAway(Bool_t leftright, Bool_t nearaway) { + kUELeftRight = leftright, + kUENearAway = nearaway ; } + void SwitchOnTwoTracksCorr() { kTwoTracksCorr = kTRUE ; } + void SwitchOffTwoTracksCorr() { kTwoTracksCorr = kFALSE ; } + + void SelectDecayPhotonCorr(Bool_t decayphoton) {kDecayPhotonCorr = decayphoton;} + + void SetAnaMCTruthOrPrimaryCorr(Bool_t kAnatruth, Bool_t kAnaprimary){ + kAnaMCTruthCorr = kAnatruth, + kAnaMCPrimaryCorr = kAnaprimary ; } + + void SetAnaMCPrimaryParticle(Bool_t kpi0, Bool_t keta, Bool_t kphoton){ + kAnaPi0Prim = kpi0, + kAnaEtaPrim = keta, + kAnaPhotonPrim = kphoton ; } + // Taking the absolute leading as the trigger or not + Bool_t DoAbsoluteLeading() const { return kMakeAbsoluteLeading ; } + void SwitchOnAbsoluteLeading() { kMakeAbsoluteLeading = kTRUE ; } + void SwitchOffAbsoluteLeading() { kMakeAbsoluteLeading = kFALSE ; } + + // Taking the near side leading as the trigger or not + Bool_t DoNearSideLeading() const { return kMakeNearSideLeading ; } + void SwitchOnNearSideLeading() { kMakeNearSideLeading = kTRUE ; } + void SwitchOffNearSideLeading() { kMakeNearSideLeading = kFALSE ; } + + void SwitchOnInAcceptance() { kPhotonInAcceptance = kTRUE ; } + void SwitchOffInAcceptance() { kPhotonInAcceptance = kFALSE ; } + + void SwitchOnAnaMapping() { kAnaDecayMapping = kTRUE ; } + void SwitchOffAnaMapping() { kAnaDecayMapping = kFALSE ; } + +// Bool_t IsFiducialCutOn() const { return fCheckFidCut ; } +// void SwitchOnFiducialCut() { fCheckFidCut = kTRUE; + // if(!fFidCut)fFidCut = new AliFiducialCut();} +// void SwitchOffFiducialCut() { fCheckFidCut = kFALSE ; } + + void SetNTriggPtBins(Int_t nbins) { fNTriggPtBins = nbins ; } + Int_t GetNTriggPtBins() const { return fNTriggPtBins ; } + void SetTriggerBins(Float_t *ptTriggBins); + + void SetNAssocPtBins(Int_t mbins) { fNAssocPtBins = mbins ; } + Int_t GetNAssocPtBins() const { return fNAssocPtBins ; } + void SetAssociatedBins(Float_t *ptAssocBins); + + Float_t GetDeltaPhiMaxCut() const { return fDeltaPhiMaxCut ; } + Float_t GetDeltaPhiMinCut() const { return fDeltaPhiMinCut ; } + void SetDeltaPhiCutRange(Float_t phimin, Float_t phimax) + {fDeltaPhiMaxCut = phimax; fDeltaPhiMinCut = phimin ; } + + void SetMixedEventsPool(Int_t n) { nMixedEvents = n ; } + void SwitchOnAnaMixEvent() { kDoMixEventsAna = kTRUE ; } + void SwitchOffAnaMixEvent() { kDoMixEventsAna = kFALSE ; } + + void SwitchOnFillMesonAOD() { kDoMesonFill = kTRUE ; } + void SwitchOffFillMesonAOD() { kDoMesonFill = kFALSE ; } + + void SwitchOnFillMesonHistos() { kNeutralMesonHistos = kTRUE ; } + void SwitchOffFillMesonHistos() { kNeutralMesonHistos = kFALSE ; } + + void SwitchOnAnaMesonCorr() { kDoMesonCorrAna = kTRUE ; } + void SwitchOffAnaMesonCorr() { kDoMesonCorrAna = kFALSE ; } + + void SwitchOnAnaPhotonCorr() { kDoPhotonCorrAna = kTRUE ; } + void SwitchOffAnaPhotonCorr() { kDoPhotonCorrAna = kFALSE ; } + + void SwitchOnEventTriggerAtSE() { kEventTriggerAtSE = kTRUE ; } + void SwitchOffEventTriggerAtSE() { kEventTriggerAtSE = kFALSE; } + + void SwithchOnPhotonPairTimeCut() { kPhotonPairTimeCut = kTRUE ;} + void SwithchOffPhotonPairTimeCut() { kPhotonPairTimeCut = kFALSE ;} + + void SwithchOnPhotonIDCut() { kDoPhotonIDCut = kTRUE ; } + void SwithchOffPhotonIDCut() { kDoPhotonIDCut = kFALSE ; } + + TString GetAnaTypeInIsolated() const { return fAnaTypeInIsolated ; } + void SetAnaTypeInIsolated(TString & part) { fAnaTypeInIsolated = part ; } + + Float_t GetDeltaPhiHRSize() const { return fDeltaPhiHRSize ; } + void SetDeltaPhiHRSize(Float_t fHRphi) { fDeltaPhiHRSize = fHRphi ; } + + Float_t GetUeDeltaPhiSize() const { return fUeDeltaPhiSize ; } + Float_t GetUeDeltaPhiFix() const { return fUeDeltaPhiFix ; } + void SetUeDeltaPhiFixAndSize(Float_t uefix, Float_t uesize) + { fUeDeltaPhiFix = uefix, fUeDeltaPhiSize = uesize ; } + + void SetAssociatedPtBegin(Float_t begin) {fptAssociatedBegin = begin;} + + void SetLargeCorrTrigger(Float_t ftrigger1, Float_t ftrigger2) + {fptTriggerBegin = ftrigger1, fptTriggerEnd = ftrigger2; } + + void SwitchOnAsymmetryCut() { kDoAsymmetryCut = kTRUE ; } + void SwitchOffAsymmetryCut() { kDoAsymmetryCut = kFALSE ; } + void SetAsymmetryCut(Float_t asycut) { fAsymmetryCut = asycut ; } + + void SwitchOnAODHybridTrackSelection() { kDoSelectHybridTracks = kTRUE ;} + void SwitchOffAODHybridTrackSelection() { kDoSelectHybridTracks = kFALSE;} + void SetAnaMesonType(TString fmesontype){ fAnaMesonType = fmesontype ; } + + void SetCentralityBin(Int_t min, Int_t max) + { fCentralityBinMin = min; fCentralityBinMax = max ; } + void SetCentralityClass(TString name) { fCentralityClass = name ; } + + void SetEventPlaneMethod(TString m) { fEventPlaneMethod = m ; } + + UInt_t GetEventTriggerMask() const { return fEventTriggerMaks ; } + void SetEventTriggerMask(UInt_t evtTrig = AliVEvent::kAny) + { fEventTriggerMaks = evtTrig ; } + void SetNCentralityBins(Int_t fcenbins) { fNCentralityBins = fcenbins; } + void SetNEventPlaneBins(Int_t fevbins) { fNEventPlaneBins = fevbins ; } + + void SetEMCALLambda0Cut(Float_t l0min, Float_t l0max) + { fL0CutMin = l0min, fL0CutMax = l0max ; } + void SetClusterTimeCut(Float_t timemin, Float_t timemax){ + fTimeCutMin = timemin, fTimeCutMax = timemax ; } + void SetPhotonPairDeltaTimeCut(Float_t deltatime) + { fPhotonPairTimeCut = deltatime ; } + + void SetTrackMatchedDPhiCut(Float_t dphicut){ fEMCALDPhiCut = dphicut; } + void SetTrackMatchedDEtaCut(Float_t detacut){ fEMCALDEtaCut = detacut; } + + void SetMesonInMassRangeCut(Float_t inmass1, Float_t inmass2){ + fInvMassMinCut = inmass1, fInvMassMaxCut = inmass2 ; } + + void SetMesonInMassLeftRangeCut(Float_t leftmin, Float_t leftmax){ + fLeftBandMinCut = leftmin, fLeftBandMaxCut = leftmax ; } + + void SetMesonInMassRightRangeCut(Float_t rightmin, Float_t rightmax){ + fRightBandMinCut = rightmin, fRightBandMaxCut = rightmax ; } + + void SetEMCALGeometryName(TString name) { fEMCALGeomName = name ; } + + void SetTrackCuts(AliESDtrackCuts * cuts); + + void SetZvertexCut(Float_t fzcut) { fZVertexCut = fzcut ; } + + void SetTrackFilterMask(ULong_t bit) { fTrackFilterMask = bit ; } + + +private: + AliAnalysisTaskEMCALCaloTrackCorr(const AliAnalysisTaskEMCALCaloTrackCorr&); // not implemented + AliAnalysisTaskEMCALCaloTrackCorr& operator=(const AliAnalysisTaskEMCALCaloTrackCorr&); // not implemented + + ////////////Add function + void InitParameters(); + + Bool_t FillInputEvent(); + + Bool_t SelectPair(AliCaloTrackParticle *mesonCandidate); + Bool_t IsolatedPhoton(TClonesArray *fEMCALEventIsolated, + TClonesArray *fCTSEventIsolated, + Int_t fIndexPhotonCan, Double_t ptPhotonCan, + Double_t phiPhotonCan, Double_t etaPhotonCan); + void FillInputPhoton(); + void FillInputMeson() ; + void FillInputTrack() ; + Bool_t MakeChargedCorrelation(Int_t fTrackIndex, Double_t ptTrigg, + Double_t phiTrigg, Double_t etaTrigg); + void MakeChargedMixCorrelation(Double_t ptTriggMix, Double_t phiTriggMix, + Double_t etaTriggMix, TList *poolMix); +private: + enum {kNtriggPtBins=10, kNassocPtBins=10}; + + AliAnalysisManager *fManager; + AliInputEventHandler *fInputHandler; + + AliVEvent *fEvent; + AliMCEvent *fMCEvent; + AliStack *fStack; + AliCentrality *fCentrality; + AliEventplane *fEventPlane; + + AliEMCALRecoUtils *fEMCALRecU; + AliEMCALGeometry *fEMCALGeom; + AliESDtrackCuts *fESDtrackCuts; + // AliFiducialCut *fFidCut; + + TList *outputContainer; + + TString fEMCALGeomName; + TString fCentralityClass; + Int_t fCentralityBinMin; + Int_t fCentralityBinMax; + TString fEventPlaneMethod; + UInt_t fEventTriggerMaks; + Int_t fNCentralityBins; + Int_t fNEventPlaneBins; + + Int_t fHistoPtBins ; + Float_t fHistoPtMax ; + Float_t fHistoPtMin ; + Int_t fHistoPhiBins; + Float_t fHistoPhiMax ; + Float_t fHistoPhiMin ; + Int_t fHistoEtaBins; + Float_t fHistoEtaMax ; + Float_t fHistoEtaMin ; + + Int_t fMinNCells; + Float_t fMinE; + Double_t fMinDistBad; + Float_t fL0CutMin; + Float_t fL0CutMax; + Float_t fTimeCutMin; + Float_t fTimeCutMax; + Float_t fPhotonPairTimeCut; + Float_t fEMCALDPhiCut; + Float_t fEMCALDEtaCut; + Float_t fZVertexCut; + Int_t fDebug; + TString fAnaMesonType; + Float_t fAsymmetryCut; + TString fDataType; + ULong_t fTrackFilterMask; + + Float_t fInvMassMinCut; + Float_t fInvMassMaxCut; + Float_t fLeftBandMinCut; + Float_t fLeftBandMaxCut; + Float_t fRightBandMinCut; + Float_t fRightBandMaxCut; + + Bool_t kMC; + Bool_t kNeutralMesonHistos; + Bool_t kDoMixEventsAna; + Bool_t kDoPhotonCorrAna; + Bool_t kDoAsymmetryCut; + Bool_t kDoSelectHybridTracks; + Bool_t kDoMesonFill; + Bool_t kDoMesonCorrAna; + Bool_t kDoIsolatedAna; + Bool_t kDoTrackMultBins; + Bool_t kUELeftRight; + Bool_t kUENearAway; + Bool_t kDecayPhotonCorr; + Bool_t kAnaMCTruthCorr; + Bool_t kAnaMCPrimaryCorr; + Bool_t kAnaPi0Prim; + Bool_t kAnaEtaPrim; + Bool_t kAnaPhotonPrim; + Bool_t kMakeAbsoluteLeading; + Bool_t kMakeNearSideLeading; + Bool_t kTwoTracksCorr; + Bool_t kPhotonInAcceptance; + Bool_t kAnaDecayMapping; +// Bool_t fCheckFidCut; + Bool_t kEventTriggerAtSE; + Bool_t kPhotonPairTimeCut; + Bool_t kDoPhotonIDCut; + + TH1F *fhNEvents; + Int_t fnEvents; + TH1F *fhNEventsAnalyized; + Int_t fEventAnalyized; + TClonesArray *fPhotonEvent; + TClonesArray *fPhotonPairEvent; + TClonesArray *fCTSEvent; + Int_t nPhotonsEMCAL; + Int_t nTracksCTS; + TString fAnaTypeInIsolated; + Int_t nMixedEvents; + Float_t fSetConeR; + Float_t fSetPtThreshold; + Float_t fSetSumPtThreshold; + Float_t fSetPtFraction; + Int_t fICMethod; + Int_t fParticlesInCone; + + Float_t *fTriggPtArray; + Int_t fNTriggPtBins; + Float_t fptTriggerBegin; + Float_t fptTriggerEnd; + Float_t *fAssocPtArray; + Int_t fNAssocPtBins; + Float_t fptAssociatedBegin; + + Float_t fDeltaPhiMaxCut; + Float_t fDeltaPhiMinCut; + Float_t fUeDeltaPhiSize; + Float_t fUeDeltaPhiFix; + Float_t fDeltaPhiHRSize; + + TH1F * fhPhotonE; + TH2F * fhPhotonPtPhi; + TH2F * fhPhotonPtEta; + TH2F * fhPhotonPhiEta; + + TH1F * fhMesonE; + TH2F * fhMesonPtPhi; + TH2F * fhMesonPtEta; + TH2F * fhMesonPhiEta; + + TH2F * fhAnglePairNoCut; + TH2F * fhInvMassPairNoCut; + TH2F * fhAsyNoCut; + TH2F * fhInvMassPairAsyCut; + TH2F * fhAnglePairAsyCut; + TH2F * fhInvMassPairPhi; + TH2F * fhInvMassPairEta; + TH2F * fhInvMassPairAllCut; + TH2F * fhAnglePairAllCut; + TH2F * fhAsyAllCut; + TH2F * fhPi0DecayPhoton1; + TH2F * fhPi0DecayPhoton1Dphi; + TH2F * fhDecayPhoton1Pi0Dphi; + TH2F * fhPi0DecayPhoton2; + TH2F * fhPi0DecayPhoton2Dphi; + TH2F * fhDecayPhoton2Pi0Dphi; + TH2F * fhDecayPhoton1Photon2; + TH2F * fhDecayPhoton1Photon2Dphi; + TH2F * fhDecayPhoton2Photon1Dphi; + + TH1F * fhNtracksAll; + TH1F * fhNtracksEMC7; + TH1F * fhNtracksAnyINT; + TH1F * fhNtracksCentral; + TH1F * fhNtracksSemiCentral; + TH1F * fhNtracksOtherTirgger; + TH1F * fhNtracksCorr; + TH2F * fhTrackPtPhi; + TH2F * fhTrackPtEta; + TH2F * fhTrackPhiEta; + TH2F * fhPtPhiLeading; //! phi distribution vs pT of leading + TH2F * fhPtEtaLeading; //! eta distribution vs pT of leading + TH2F * fhMixPtPhiLeading; //! phi distribution vs pT of leading + TH2F * fhMixPtEtaLeading; //! eta distribution vs pT of leading + + TH2F * fhDPhiTriggPtAssocPt; + TH2F * fhDEtaTriggPtAssocPt; + TH2F * fhAssocPtTriggPt; + TH2F * fhxELogTriggPt; + TH2F * fhpoutTriggPt; + TH2F * fhzTTriggPt; + TH2F * fhxETriggPt; + TH2F * fhAssocPtTriggPtHR; + TH2F * fhxELogTriggPtHR; + TH2F * fhpoutTriggPtHR; + TH2F * fhzTTriggPtHR; + TH2F * fhxETriggPtHR; + TH2F * fhNUeAssocPtTriggPt; + TH2F * fhNUepoutTriggPt; + TH2F * fhNUexETriggPt; + TH2F * fhNUezTTriggPt; + TH2F * fhNUexELogTriggPt; + TH2F * fhNUeDPhiDEta; + TH2F * fhAUeAssocPtTriggPt; + TH2F * fhAUepoutTriggPt; + TH2F * fhAUezTTriggPt; + TH2F * fhAUexETriggPt; + TH2F * fhAUexELogTriggPt; + TH2F * fhAUeDPhiDEta; + + TH2F * fhMCPtPhiLeading; //! phi distribution vs pT of leading + TH2F * fhMCPtEtaLeading; //! eta distribution vs pT of leading + + TH2F * fhMCAssocPtTriggPt; + TH2F * fhMCxELogTriggPt; + TH2F * fhMCpoutTriggPt; + TH2F * fhMCzTTriggPt; + TH2F * fhMCxETriggPt; + TH2F * fhMCAssocPtTriggPtHR; + TH2F * fhMCxELogTriggPtHR; + TH2F * fhMCpoutTriggPtHR; + TH2F * fhMCzTTriggPtHR; + TH2F * fhMCxETriggPtHR; + TH2F * fhMCNUeAssocPtTriggPt; + TH2F * fhMCNUepoutTriggPt; + TH2F * fhMCNUexETriggPt; + TH2F * fhMCNUezTTriggPt; + TH2F * fhMCNUexELogTriggPt; + TH2F * fhMCAUeAssocPtTriggPt; + TH2F * fhMCAUepoutTriggPt; + TH2F * fhMCAUezTTriggPt; + TH2F * fhMCAUexETriggPt; + TH2F * fhMCAUexELogTriggPt; + + TH2F * fhDPhiAssocPt15T; + TH2F * fhDEtaAssocPt15T; + TH2F * fhMixDPhiAssocPt15T; + TH2F * fhMixDEtaAssocPt15T; + TH2F * fhMCDPhiAssocPt15T; + TH2F * fhMCDEtaAssocPt15T; + + TList* fListMixEvents[10][10][10]; + + TH2F *fhDPhiTriggPtT[kNassocPtBins]; + TH2F *fhDEtaTriggPtT[kNassocPtBins]; + TH2F *fhMixDPhiTriggPtT[kNassocPtBins]; + TH2F *fhMixDEtaTriggPtT[kNassocPtBins]; + + TH2F *fhDPhiSumPtBin[kNtriggPtBins][kNassocPtBins]; + TH2F *fhDEtaSumPtBin[kNtriggPtBins][kNassocPtBins]; + TH2F *fhDPhiDEtaBin[kNtriggPtBins][kNassocPtBins]; + TH2F *fhMixDPhiDEtaBin[kNtriggPtBins][kNassocPtBins]; + + TH2F *fhDPhiAssocPtA[kNtriggPtBins]; + TH2F *fhDEtaAssocPtA[kNtriggPtBins]; + TH2F *fhMixDPhiAssocPtA[kNtriggPtBins]; + TH2F *fhMixDEtaAssocPtA[kNtriggPtBins]; + + TH2F *fhMCDPhiTriggPtT[kNassocPtBins]; + TH2F *fhMCDEtaTriggPtT[kNassocPtBins]; + + TH2F *fhMCDPhiSumPtBin[kNtriggPtBins][kNassocPtBins]; + TH2F *fhMCDEtaSumPtBin[kNtriggPtBins][kNassocPtBins]; + TH2F *fhMCDPhiDEtaBin[kNtriggPtBins][kNassocPtBins]; + + TH2F *fhMCDPhiAssocPtA[kNtriggPtBins]; + TH2F *fhMCDEtaAssocPtA[kNtriggPtBins]; + + ClassDef(AliAnalysisTaskEMCALCaloTrackCorr, 1); // example of analysis +}; + +#endif diff --git a/PWGGA/GammaConv/AliAnaConvCorrPhoton.h b/PWGGA/GammaConv/AliAnaConvCorrPhoton.h index d116c736935..be341a09d91 100644 --- a/PWGGA/GammaConv/AliAnaConvCorrPhoton.h +++ b/PWGGA/GammaConv/AliAnaConvCorrPhoton.h @@ -1,47 +1,47 @@ -/* This file is property of and copyright * - * ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/// @file AliAnaConvCorrPhoton.h -/// @author Svein Lindal -/// @brief Class used to find correlations between photons and charged tracks - -#ifndef ALIANACONVCORRPHOTON_CXX -#define ALIANACONVCORRPHOTON_CXX - -#include "AliAnaConvCorrBase.h" - -class AliAODConversionPhoton; -class TClonesArray; - -class AliAnaConvCorrPhoton : public AliAnaConvCorrBase { - -public: - - AliAnaConvCorrPhoton(); - AliAnaConvCorrPhoton(TString name, TString title); - virtual ~AliAnaConvCorrPhoton(); - - ///Correlation photon with tracks - //virtual void CorrelateWithHadrons(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks, const Bool_t isolated, const Bool_t decayParticle); - - //Process particles identified as pion / eta decay - void SkipDecayParticles() { fSkipDecayParticles = kTRUE; } - void DoDecayParticles() { fSkipDecayParticles = kFALSE; } - void DoDecayOnly() { fSkipDecayParticles = kFALSE; fDecayOnly = kTRUE; } - - //void Process(const TClonesArray * photons, const TClonesArray * tracks, Bool_t isolated); - - private: - - - Bool_t fSkipDecayParticles; //Process particles identified as pion / eta decay particles - Bool_t fDecayOnly; //Only process gamma from decay pion - - AliAnaConvCorrPhoton(const AliAnaConvCorrPhoton&); // not implemented - AliAnaConvCorrPhoton& operator=(const AliAnaConvCorrPhoton&); // not implemented - ClassDef(AliAnaConvCorrPhoton, 1); // example of analysis - -}; - -#endif +/* This file is property of and copyright * + * ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/// @file AliAnaConvCorrPhoton.h +/// @author Svein Lindal +/// @brief Class used to find correlations between photons and charged tracks + +#ifndef ALIANACONVCORRPHOTON_CXX +#define ALIANACONVCORRPHOTON_CXX + +#include "AliAnaConvCorrBase.h" + +class AliAODConversionPhoton; +class TClonesArray; + +class AliAnaConvCorrPhoton : public AliAnaConvCorrBase { + +public: + + AliAnaConvCorrPhoton(); + AliAnaConvCorrPhoton(TString name, TString title); + virtual ~AliAnaConvCorrPhoton(); + + ///Correlation photon with tracks + //virtual void CorrelateWithHadrons(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks, const Bool_t isolated, const Bool_t decayParticle); + + //Process particles identified as pion / eta decay + void SkipDecayParticles() { fSkipDecayParticles = kTRUE; } + void DoDecayParticles() { fSkipDecayParticles = kFALSE; } + void DoDecayOnly() { fSkipDecayParticles = kFALSE; fDecayOnly = kTRUE; } + + //void Process(const TClonesArray * photons, const TClonesArray * tracks, Bool_t isolated); + + private: + + + Bool_t fSkipDecayParticles; //Process particles identified as pion / eta decay particles + Bool_t fDecayOnly; //Only process gamma from decay pion + + AliAnaConvCorrPhoton(const AliAnaConvCorrPhoton&); // not implemented + AliAnaConvCorrPhoton& operator=(const AliAnaConvCorrPhoton&); // not implemented + ClassDef(AliAnaConvCorrPhoton, 1); // example of analysis + +}; + +#endif diff --git a/PWGGA/GammaConv/AliAnaConvIsolation.h b/PWGGA/GammaConv/AliAnaConvIsolation.h index 6af68db94f4..40df9cd8453 100644 --- a/PWGGA/GammaConv/AliAnaConvIsolation.h +++ b/PWGGA/GammaConv/AliAnaConvIsolation.h @@ -1,128 +1,128 @@ -/* This file is property of and copyright * - * ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/// @file AliAnalysisTaskGammaJet.h -/// @author Svein Lindal -/// @brief Class used to run isolation studies of conversion gamma/pions - - -#ifndef ALIANACONVISOLATION_CXX -#define ALIANACONVISOLATION_CXX - -#include -#include "TObject.h" -#include "Rtypes.h" -#include "TF1.h" -#include -class TH2F; -class TH1F; -class AliAODConversionPhoton; -class AliAODConversionParticle; -class TClonesArray; -class TList; - -using namespace std; - -class AliAnaConvIsolation : public TObject { - -public: - - AliAnaConvIsolation(); - AliAnaConvIsolation(Float_t coneSize, Float_t maxPtThreshold, Float_t sumPtThreshold, Float_t maxPtFraction, Float_t sumPtFraction); - virtual ~AliAnaConvIsolation(); - - - //void CreateHistograms(); - - - ///Set And get cone size - void SetConeSize(Float_t cs) {fConeSize = cs*cs;} - Float_t GetConeSize() const {return TMath::Sqrt(fConeSize);} - - - //Set and get max pt threshold - void SetMaxPtThreshold(Float_t cs) {fMaxPtThreshold = cs;} - Float_t GetPtThreshold() const {return fMaxPtThreshold;} - - - //Set and get sum pt threshold - void SetSumPtThreshold(Float_t cs) {fSumPtThreshold = cs;} - Float_t GetPtSumThreshold() const {return fSumPtThreshold;} - - //Set and get max Pt fraction threshold - void SetMaxPtFraction(Float_t cs) {fMaxPtFraction = cs;} - Float_t GetPtFraction() const {return fMaxPtFraction;} - - //Set and get sum pt fraction threshold - void SetSumPtFraction(Float_t cs) {fSumPtFraction = cs;} - Float_t GetPtSumFraction() const {return fSumPtFraction;} - - //Set min pt for a particle to be counted in bg - void SetMinPt( Float_t minpt) {fMinPt = minpt; } - - //Get isolation curve - TF1 * GetIsolationCurve() const { return fIsoCurve; } - - //Set function of isolation curve - void SetIsolationCurve(TString curve) { - fCurveFunction = curve; - } - - Bool_t IsLeading(AliAODConversionParticle * particle, const TObjArray * tracks, const TObjArray * aodParticles); - - - //Fill histograms - //void FillHistograms(Float_t pt, Float_t ptMax, Float_t ptSum, Bool_t isolated, Int_t nTracks); - - //Get list of histograms - //TList * GetHistograms() const { return fHistograms;} - - //Is particle isolated - Bool_t IsIsolated( const AliAODConversionPhoton * const particle, const TClonesArray * const tracks, Bool_t &leading); - Bool_t IsIsolated( AliAODConversionPhoton * const particle, const TClonesArray * const tracks, const Int_t nSpawn, const Int_t * const spawn, Bool_t &leading ); - Int_t IsLeading(const AliAODConversionParticle * particle, const TObjArray * tracks, const Int_t * tIDs) const; - - //Is eta - phi distance smaller than conesize ? - Bool_t IsInCone(Float_t dEta, Float_t dPhi, const Float_t coneSize) const { - dPhi = (TMath::Abs(dPhi) < TMath::Pi()) ? dPhi : TMath::TwoPi() - TMath::Abs(dPhi); - return ( (dEta*dEta + dPhi*dPhi) < coneSize); - } - - private: - - ///Evaluate whether particle is isolated according to criterie - Bool_t EvaluateIsolationCriteria(Float_t ptSum, Float_t pt) const; - - TF1 * fIsoCurve; ///Curve defining if particle is isolated or not - TString fCurveFunction; ///Funtion defining curve - - Float_t fConeSize; //Size of isolation cone - Float_t fMinPt; //min pt for bg particles - Float_t fMaxPtThreshold; //max pt threshold - Float_t fSumPtThreshold; //sum pt threhold - Float_t fMaxPtFraction; //max pt fraction threshold - Float_t fSumPtFraction; //sum pt fraction threshold - - // TList * fHistograms; //list of histograms - - // TH2F * fhMaxPtInCone[2]; //histogram of max pt in cone - // TH2F * fhSumPtInCone[2]; //histogram of sum pt in cone - // TH2F * fhSumPtVsMaxPt[2];//sum pt vs max pt - - // // TH1F * fHistSumPt[2][2]; - // // TH1F * fHistMaxPt[2][2]; - - // TH1F * fhPtCandidates[2]; //pt distribution of isolation candidates - // TH1F * fhTrackMult[2]; //Track multiplicity of events with / wo isolated particles - - - // Float_t fHistogramMaxPt; //Upper pt limit in histograms - - - AliAnaConvIsolation(const AliAnaConvIsolation&); // not implemented - AliAnaConvIsolation& operator=(const AliAnaConvIsolation&); // not implemented - ClassDef(AliAnaConvIsolation, 2); // example of analysis -}; - -#endif +/* This file is property of and copyright * + * ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/// @file AliAnalysisTaskGammaJet.h +/// @author Svein Lindal +/// @brief Class used to run isolation studies of conversion gamma/pions + + +#ifndef ALIANACONVISOLATION_CXX +#define ALIANACONVISOLATION_CXX + +#include +#include "TObject.h" +#include "Rtypes.h" +#include "TF1.h" +#include +class TH2F; +class TH1F; +class AliAODConversionPhoton; +class AliAODConversionParticle; +class TClonesArray; +class TList; + +using namespace std; + +class AliAnaConvIsolation : public TObject { + +public: + + AliAnaConvIsolation(); + AliAnaConvIsolation(Float_t coneSize, Float_t maxPtThreshold, Float_t sumPtThreshold, Float_t maxPtFraction, Float_t sumPtFraction); + virtual ~AliAnaConvIsolation(); + + + //void CreateHistograms(); + + + ///Set And get cone size + void SetConeSize(Float_t cs) {fConeSize = cs*cs;} + Float_t GetConeSize() const {return TMath::Sqrt(fConeSize);} + + + //Set and get max pt threshold + void SetMaxPtThreshold(Float_t cs) {fMaxPtThreshold = cs;} + Float_t GetPtThreshold() const {return fMaxPtThreshold;} + + + //Set and get sum pt threshold + void SetSumPtThreshold(Float_t cs) {fSumPtThreshold = cs;} + Float_t GetPtSumThreshold() const {return fSumPtThreshold;} + + //Set and get max Pt fraction threshold + void SetMaxPtFraction(Float_t cs) {fMaxPtFraction = cs;} + Float_t GetPtFraction() const {return fMaxPtFraction;} + + //Set and get sum pt fraction threshold + void SetSumPtFraction(Float_t cs) {fSumPtFraction = cs;} + Float_t GetPtSumFraction() const {return fSumPtFraction;} + + //Set min pt for a particle to be counted in bg + void SetMinPt( Float_t minpt) {fMinPt = minpt; } + + //Get isolation curve + TF1 * GetIsolationCurve() const { return fIsoCurve; } + + //Set function of isolation curve + void SetIsolationCurve(TString curve) { + fCurveFunction = curve; + } + + Bool_t IsLeading(AliAODConversionParticle * particle, const TObjArray * tracks, const TObjArray * aodParticles); + + + //Fill histograms + //void FillHistograms(Float_t pt, Float_t ptMax, Float_t ptSum, Bool_t isolated, Int_t nTracks); + + //Get list of histograms + //TList * GetHistograms() const { return fHistograms;} + + //Is particle isolated + Bool_t IsIsolated( const AliAODConversionPhoton * const particle, const TClonesArray * const tracks, Bool_t &leading); + Bool_t IsIsolated( AliAODConversionPhoton * const particle, const TClonesArray * const tracks, const Int_t nSpawn, const Int_t * const spawn, Bool_t &leading ); + Int_t IsLeading(const AliAODConversionParticle * particle, const TObjArray * tracks, const Int_t * tIDs) const; + + //Is eta - phi distance smaller than conesize ? + Bool_t IsInCone(Float_t dEta, Float_t dPhi, const Float_t coneSize) const { + dPhi = (TMath::Abs(dPhi) < TMath::Pi()) ? dPhi : TMath::TwoPi() - TMath::Abs(dPhi); + return ( (dEta*dEta + dPhi*dPhi) < coneSize); + } + + private: + + ///Evaluate whether particle is isolated according to criterie + Bool_t EvaluateIsolationCriteria(Float_t ptSum, Float_t pt) const; + + TF1 * fIsoCurve; ///Curve defining if particle is isolated or not + TString fCurveFunction; ///Funtion defining curve + + Float_t fConeSize; //Size of isolation cone + Float_t fMinPt; //min pt for bg particles + Float_t fMaxPtThreshold; //max pt threshold + Float_t fSumPtThreshold; //sum pt threhold + Float_t fMaxPtFraction; //max pt fraction threshold + Float_t fSumPtFraction; //sum pt fraction threshold + + // TList * fHistograms; //list of histograms + + // TH2F * fhMaxPtInCone[2]; //histogram of max pt in cone + // TH2F * fhSumPtInCone[2]; //histogram of sum pt in cone + // TH2F * fhSumPtVsMaxPt[2];//sum pt vs max pt + + // // TH1F * fHistSumPt[2][2]; + // // TH1F * fHistMaxPt[2][2]; + + // TH1F * fhPtCandidates[2]; //pt distribution of isolation candidates + // TH1F * fhTrackMult[2]; //Track multiplicity of events with / wo isolated particles + + + // Float_t fHistogramMaxPt; //Upper pt limit in histograms + + + AliAnaConvIsolation(const AliAnaConvIsolation&); // not implemented + AliAnaConvIsolation& operator=(const AliAnaConvIsolation&); // not implemented + ClassDef(AliAnaConvIsolation, 2); // example of analysis +}; + +#endif diff --git a/PWGGA/GammaConv/AliAnalysisTaskGCPartToPWG4Part.h b/PWGGA/GammaConv/AliAnalysisTaskGCPartToPWG4Part.h index 7aae4ae30cc..721dad5235a 100644 --- a/PWGGA/GammaConv/AliAnalysisTaskGCPartToPWG4Part.h +++ b/PWGGA/GammaConv/AliAnalysisTaskGCPartToPWG4Part.h @@ -1,83 +1,83 @@ -#ifndef AliAnalysisTaskGCPartToPWG4Part_cxx -#define AliAnalysisTaskGCPartToPWG4Part_cxx - -// example of an analysis task creating a p_t spectrum -// Authors: Svein Lindal - -class TH1F; -class AliESDEvent; -class AliAODConversionPhoton; -class AliAODPWG4ParticleCorrelation; -class AliAODPWG4Particle; -class TClonesArray; -class TString; -class AliMCAnalysisUtils; -class AliAODMCHeader; - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskGCPartToPWG4Part : public AliAnalysisTaskSE { - -public: - - AliAnalysisTaskGCPartToPWG4Part(); - AliAnalysisTaskGCPartToPWG4Part(const char *name); - virtual ~AliAnalysisTaskGCPartToPWG4Part(); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetDeltaAODFileName(TString string) { fDeltaAODFileName = string;} - void SetGammaBranchName(TString string) { fAODBranchName = string; } - - - void SetDebugLevel(Int_t debugLevel) { fDebugLevel = debugLevel; } - Int_t GetDebugLevel() const { return fDebugLevel; } - - void SetGammaCutId(TString cut) { fGammaCutString = Form("GammaConv_%s", cut.Data());} - void SetPionCutId(TString cut) { fPionCutString = Form("GammaConv_%s", cut.Data());} - - - private: - - //Clean up - void CleanUp(); - - //Get the AOD event from whereever it might be accessible - AliAODEvent * GetAODEvent(); - - Bool_t BothTracksPresent(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks) const; - Bool_t BothGammaPresent(const AliAODConversionPhoton * const pion, const TClonesArray * const photons, const TClonesArray * const tracks) const; - - //Get Conversion gammas branch - TClonesArray * GetConversionGammas(const AliAODEvent * aodEvent) const; - TClonesArray * GetPions(const AliAODEvent * aodEvent) const; - TClonesArray * GetAODBranch(const AliAODEvent * aodEvent, TString branchName) const; - - //Fill AOD tree with PWG4 particles - AliAODPWG4ParticleCorrelation * AddToAOD(AliAODConversionPhoton * aodO, TClonesArray * branch, TString detector); - AliAODPWG4ParticleCorrelation * AddPionToAOD(AliAODConversionPhoton * pion, TClonesArray * branch, TString detector); - //Process conv gamma - void ProcessConvGamma( const AliAODEvent * const aodEvent ); - - TString fDeltaAODFileName;//! File where Gamma Conv AOD is located, if not in default AOD - TString fGammaCutString; //! The cut string of the conversion analysis used to produce input AOD - TString fPionCutString; //! The cut string of the conversion analysis used to produce input AOD - TString fAODBranchName; - TClonesArray * fAODPWG4Photons; - TClonesArray * fAODPWG4Pi0; - - - Int_t fDebugLevel; - - - AliAnalysisTaskGCPartToPWG4Part(const AliAnalysisTaskGCPartToPWG4Part&); // not implemented - AliAnalysisTaskGCPartToPWG4Part& operator=(const AliAnalysisTaskGCPartToPWG4Part&); // not implemented - - //Int_t CheckTag(AliAODPWG4ParticleCorrelation * particle, TClonesArray * tracks, TClonesArray * arrayMC, AliAODMCHeader * mcHeader); - - ClassDef(AliAnalysisTaskGCPartToPWG4Part, 1); // example of analysis -}; - -#endif +#ifndef AliAnalysisTaskGCPartToPWG4Part_cxx +#define AliAnalysisTaskGCPartToPWG4Part_cxx + +// example of an analysis task creating a p_t spectrum +// Authors: Svein Lindal + +class TH1F; +class AliESDEvent; +class AliAODConversionPhoton; +class AliAODPWG4ParticleCorrelation; +class AliAODPWG4Particle; +class TClonesArray; +class TString; +class AliMCAnalysisUtils; +class AliAODMCHeader; + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskGCPartToPWG4Part : public AliAnalysisTaskSE { + +public: + + AliAnalysisTaskGCPartToPWG4Part(); + AliAnalysisTaskGCPartToPWG4Part(const char *name); + virtual ~AliAnalysisTaskGCPartToPWG4Part(); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetDeltaAODFileName(TString string) { fDeltaAODFileName = string;} + void SetGammaBranchName(TString string) { fAODBranchName = string; } + + + void SetDebugLevel(Int_t debugLevel) { fDebugLevel = debugLevel; } + Int_t GetDebugLevel() const { return fDebugLevel; } + + void SetGammaCutId(TString cut) { fGammaCutString = Form("GammaConv_%s", cut.Data());} + void SetPionCutId(TString cut) { fPionCutString = Form("GammaConv_%s", cut.Data());} + + + private: + + //Clean up + void CleanUp(); + + //Get the AOD event from whereever it might be accessible + AliAODEvent * GetAODEvent(); + + Bool_t BothTracksPresent(const AliAODConversionPhoton * const photon, const TClonesArray * const tracks) const; + Bool_t BothGammaPresent(const AliAODConversionPhoton * const pion, const TClonesArray * const photons, const TClonesArray * const tracks) const; + + //Get Conversion gammas branch + TClonesArray * GetConversionGammas(const AliAODEvent * aodEvent) const; + TClonesArray * GetPions(const AliAODEvent * aodEvent) const; + TClonesArray * GetAODBranch(const AliAODEvent * aodEvent, TString branchName) const; + + //Fill AOD tree with PWG4 particles + AliAODPWG4ParticleCorrelation * AddToAOD(AliAODConversionPhoton * aodO, TClonesArray * branch, TString detector); + AliAODPWG4ParticleCorrelation * AddPionToAOD(AliAODConversionPhoton * pion, TClonesArray * branch, TString detector); + //Process conv gamma + void ProcessConvGamma( const AliAODEvent * const aodEvent ); + + TString fDeltaAODFileName;//! File where Gamma Conv AOD is located, if not in default AOD + TString fGammaCutString; //! The cut string of the conversion analysis used to produce input AOD + TString fPionCutString; //! The cut string of the conversion analysis used to produce input AOD + TString fAODBranchName; + TClonesArray * fAODPWG4Photons; + TClonesArray * fAODPWG4Pi0; + + + Int_t fDebugLevel; + + + AliAnalysisTaskGCPartToPWG4Part(const AliAnalysisTaskGCPartToPWG4Part&); // not implemented + AliAnalysisTaskGCPartToPWG4Part& operator=(const AliAnalysisTaskGCPartToPWG4Part&); // not implemented + + //Int_t CheckTag(AliAODPWG4ParticleCorrelation * particle, TClonesArray * tracks, TClonesArray * arrayMC, AliAODMCHeader * mcHeader); + + ClassDef(AliAnalysisTaskGCPartToPWG4Part, 1); // example of analysis +}; + +#endif diff --git a/PWGGA/PHOSTasks/CaloCellQA/AliAnalysisTaskCaloCellsQA.h b/PWGGA/PHOSTasks/CaloCellQA/AliAnalysisTaskCaloCellsQA.h index 4226c8f7e3f..fbe381afbb1 100644 --- a/PWGGA/PHOSTasks/CaloCellQA/AliAnalysisTaskCaloCellsQA.h +++ b/PWGGA/PHOSTasks/CaloCellQA/AliAnalysisTaskCaloCellsQA.h @@ -1,63 +1,63 @@ -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -//_________________________________________________________________________ -// Container class for bad channels & bad runs identification -// Author: Olga Driga (SUBATECH) - -#ifndef ALIANALYSISTASKCALOCELLSQA_H -#define ALIANALYSISTASKCALOCELLSQA_H - -// --- ROOT system --- -#include - -// --- AliRoot header files --- -#include -#include - -class AliAnalysisTaskCaloCellsQA : public AliAnalysisTaskSE { - -public: - - // detectors - enum { - kEMCAL = 0, - kPHOS = 1 -// ,kDCAL = 2 // not implemented - }; - - AliAnalysisTaskCaloCellsQA(); - AliAnalysisTaskCaloCellsQA(const char *name, Int_t nmods = 10, Int_t det = kEMCAL, char *outfile = NULL); - virtual ~AliAnalysisTaskCaloCellsQA(); - - void UserCreateOutputObjects(); - void UserExec(Option_t *); - void Terminate(Option_t *); - - void SetBadCells(Int_t badcells[], Int_t nbad); - - // getters and setters - AliCaloCellsQA* GetCaloCellsQA() { return fCellsQA; } - Bool_t GetAvoidPileup() { return fkAvoidPileup; } - const char* GetOutputFileName() { return fOutfile.Data(); } - void SetAvoidPileup(Bool_t flag) { fkAvoidPileup = flag; } - void SetOutputFileName(char* fname) { fOutfile = fname; } - -protected: - Bool_t IsClusterBad(AliVCluster *clus); - -private: - AliAnalysisTaskCaloCellsQA(const AliAnalysisTaskCaloCellsQA &); - AliAnalysisTaskCaloCellsQA & operator = (const AliAnalysisTaskCaloCellsQA &); - -private: - Bool_t fkAvoidPileup; // flag not to process pileup events - AliCaloCellsQA* fCellsQA; // analysis instance - TString fOutfile; // output file name - Int_t fNBad; // number of entries in fBadCells - Int_t* fBadCells; //[fNBad] bad cells array - - ClassDef(AliAnalysisTaskCaloCellsQA, 2); -}; - -#endif +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//_________________________________________________________________________ +// Container class for bad channels & bad runs identification +// Author: Olga Driga (SUBATECH) + +#ifndef ALIANALYSISTASKCALOCELLSQA_H +#define ALIANALYSISTASKCALOCELLSQA_H + +// --- ROOT system --- +#include + +// --- AliRoot header files --- +#include +#include + +class AliAnalysisTaskCaloCellsQA : public AliAnalysisTaskSE { + +public: + + // detectors + enum { + kEMCAL = 0, + kPHOS = 1 +// ,kDCAL = 2 // not implemented + }; + + AliAnalysisTaskCaloCellsQA(); + AliAnalysisTaskCaloCellsQA(const char *name, Int_t nmods = 10, Int_t det = kEMCAL, char *outfile = NULL); + virtual ~AliAnalysisTaskCaloCellsQA(); + + void UserCreateOutputObjects(); + void UserExec(Option_t *); + void Terminate(Option_t *); + + void SetBadCells(Int_t badcells[], Int_t nbad); + + // getters and setters + AliCaloCellsQA* GetCaloCellsQA() { return fCellsQA; } + Bool_t GetAvoidPileup() { return fkAvoidPileup; } + const char* GetOutputFileName() { return fOutfile.Data(); } + void SetAvoidPileup(Bool_t flag) { fkAvoidPileup = flag; } + void SetOutputFileName(char* fname) { fOutfile = fname; } + +protected: + Bool_t IsClusterBad(AliVCluster *clus); + +private: + AliAnalysisTaskCaloCellsQA(const AliAnalysisTaskCaloCellsQA &); + AliAnalysisTaskCaloCellsQA & operator = (const AliAnalysisTaskCaloCellsQA &); + +private: + Bool_t fkAvoidPileup; // flag not to process pileup events + AliCaloCellsQA* fCellsQA; // analysis instance + TString fOutfile; // output file name + Int_t fNBad; // number of entries in fBadCells + Int_t* fBadCells; //[fNBad] bad cells array + + ClassDef(AliAnalysisTaskCaloCellsQA, 2); +}; + +#endif diff --git a/PWGGA/PHOSTasks/PHOSCalib/AliAnalysisTaskPi0Calib.h b/PWGGA/PHOSTasks/PHOSCalib/AliAnalysisTaskPi0Calib.h index f290db98ca1..3897e9f6ea1 100644 --- a/PWGGA/PHOSTasks/PHOSCalib/AliAnalysisTaskPi0Calib.h +++ b/PWGGA/PHOSTasks/PHOSCalib/AliAnalysisTaskPi0Calib.h @@ -1,71 +1,71 @@ -#ifndef AliAnalysisTaskPi0Calib_cxx -#define AliAnalysisTaskPi0Calib_cxx - -// PHOS calibration with pi0 -// Authors: DP, YK - -class TObjArray; -class TH1F; -class TH2I; -class TH2F; -class TH2D; -class TH3F; -class TF1 ; -class AliPHOSGeometry; -class AliESDEvent ; -#include "AliPHOSCalibData.h" -#include "AliCDBManager.h" - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskPi0Calib : public AliAnalysisTaskSE { -public: - AliAnalysisTaskPi0Calib(const char *name = "PHOS"); - virtual ~AliAnalysisTaskPi0Calib() ; - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - void SetPHOSBadMap(Int_t mod,TH2I * h) - { - if(fPHOSBadMap[mod]) delete fPHOSBadMap[mod] ; - fPHOSBadMap[mod]=new TH2I(*h) ; - printf("Set %s \n",fPHOSBadMap[mod]->GetName()); - } - - void SetPHOSCalib(Int_t mod,TH2D * h) - { - if(fPHOSAmp[mod]) delete fPHOSAmp[mod] ; - fPHOSAmp[mod]=new TH2D(*h) ; - printf("Set %s \n",fPHOSAmp[mod]->GetName()); - } - - -private: - - AliAnalysisTaskPi0Calib(const AliAnalysisTaskPi0Calib&); // not implemented - AliAnalysisTaskPi0Calib& operator=(const AliAnalysisTaskPi0Calib&); // not implemented - Bool_t IsGoodChannel(const char * det, Int_t mod,Int_t ix, Int_t iz); //Use addisional bad map for PHOS - void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key - Bool_t TestTOF(Double_t e,Double_t tof) ; //Evaluate TOF cut - Bool_t TestLambda(Double_t pt,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons - Double_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge); - Int_t ConvertRunNumber(Int_t run) ; - -private: - TList * fOutputContainer; //! final histogram container - TList * fPHOSEvents; //! Containers for events with PHOS photons - TClonesArray * fPHOSEvent ; //! PHOS photons in current event - AliPHOSCalibData * fPHOSCalibData; //! PHOS calibration object - TH2I * fPHOSBadMap[6] ; //Container for PHOS bad channels map - TH2D * fPHOSAmp[6] ; //Container for PHOS bad channels map - - AliPHOSGeometry * fPHOSGeo; //! PHOS geometry - Int_t fEventCounter; // number of analyzed events - - ClassDef(AliAnalysisTaskPi0Calib, 1); // PHOS analysis task -}; - -#endif +#ifndef AliAnalysisTaskPi0Calib_cxx +#define AliAnalysisTaskPi0Calib_cxx + +// PHOS calibration with pi0 +// Authors: DP, YK + +class TObjArray; +class TH1F; +class TH2I; +class TH2F; +class TH2D; +class TH3F; +class TF1 ; +class AliPHOSGeometry; +class AliESDEvent ; +#include "AliPHOSCalibData.h" +#include "AliCDBManager.h" + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskPi0Calib : public AliAnalysisTaskSE { +public: + AliAnalysisTaskPi0Calib(const char *name = "PHOS"); + virtual ~AliAnalysisTaskPi0Calib() ; + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + void SetPHOSBadMap(Int_t mod,TH2I * h) + { + if(fPHOSBadMap[mod]) delete fPHOSBadMap[mod] ; + fPHOSBadMap[mod]=new TH2I(*h) ; + printf("Set %s \n",fPHOSBadMap[mod]->GetName()); + } + + void SetPHOSCalib(Int_t mod,TH2D * h) + { + if(fPHOSAmp[mod]) delete fPHOSAmp[mod] ; + fPHOSAmp[mod]=new TH2D(*h) ; + printf("Set %s \n",fPHOSAmp[mod]->GetName()); + } + + +private: + + AliAnalysisTaskPi0Calib(const AliAnalysisTaskPi0Calib&); // not implemented + AliAnalysisTaskPi0Calib& operator=(const AliAnalysisTaskPi0Calib&); // not implemented + Bool_t IsGoodChannel(const char * det, Int_t mod,Int_t ix, Int_t iz); //Use addisional bad map for PHOS + void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key + Bool_t TestTOF(Double_t e,Double_t tof) ; //Evaluate TOF cut + Bool_t TestLambda(Double_t pt,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons + Double_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge); + Int_t ConvertRunNumber(Int_t run) ; + +private: + TList * fOutputContainer; //! final histogram container + TList * fPHOSEvents; //! Containers for events with PHOS photons + TClonesArray * fPHOSEvent ; //! PHOS photons in current event + AliPHOSCalibData * fPHOSCalibData; //! PHOS calibration object + TH2I * fPHOSBadMap[6] ; //Container for PHOS bad channels map + TH2D * fPHOSAmp[6] ; //Container for PHOS bad channels map + + AliPHOSGeometry * fPHOSGeo; //! PHOS geometry + Int_t fEventCounter; // number of analyzed events + + ClassDef(AliAnalysisTaskPi0Calib, 1); // PHOS analysis task +}; + +#endif diff --git a/PWGGA/PHOSTasks/PHOS_PbPb_MC/AliPHOSHijingEfficiency.h b/PWGGA/PHOSTasks/PHOS_PbPb_MC/AliPHOSHijingEfficiency.h index 3fddd085070..9755b19b67f 100644 --- a/PWGGA/PHOSTasks/PHOS_PbPb_MC/AliPHOSHijingEfficiency.h +++ b/PWGGA/PHOSTasks/PHOS_PbPb_MC/AliPHOSHijingEfficiency.h @@ -1,98 +1,98 @@ -#ifndef AliPHOSHijingEfficiency_cxx -#define AliPHOSHijingEfficiency_cxx - -// example of an analysis task creating a p_t spectrum -// Authors: Panos Cristakoglou, Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing - -class TObjArray; -class THashList ; -class TH1F; -class TH1D ; -class TH2I; -class TH2F; -class TH3F; -class TF1 ; -class TParticle; -class AliStack ; -class AliESDtrackCuts; -class AliPHOSGeometry; -class AliESDEvent ; -class AliPHOSCalibData; -class AliESDtrack ; -class AliESDCaloCluster ; -class AliCaloPhoton ; - -#include "AliAnalysisTaskSE.h" - -class AliPHOSHijingEfficiency : public AliAnalysisTaskSE { -public: - AliPHOSHijingEfficiency(const char *name = "AliPHOSHijingEfficiency"); - virtual ~AliPHOSHijingEfficiency() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - void SetPHOSBadMap(Int_t mod,TH2I * h) - { - if(fPHOSBadMap[mod]) delete fPHOSBadMap[mod] ; - fPHOSBadMap[mod]=new TH2I(*h) ; - printf("Set %s \n",fPHOSBadMap[mod]->GetName()); - } - -private: - AliPHOSHijingEfficiency(const AliPHOSHijingEfficiency&); // not implemented - AliPHOSHijingEfficiency& operator=(const AliPHOSHijingEfficiency&); // not implemented - Bool_t IsGoodChannel(const char * det, Int_t mod,Int_t ix, Int_t iz); //Use addisional bad map for PHOS - - void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z, Double_t w) const ; //Fill 3D histogram witn name key - void FillAllHistograms(const char * key,AliCaloPhoton * ph)const ; //Fill all possible PID combinations for a given photon - - Bool_t TestLambda(Double_t pt,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons - Bool_t TestLambda2(Double_t pt,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons - Double_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge); - Bool_t TestTOF(Double_t t, Double_t e) ; - Int_t ConvertRunNumber(Int_t run) ; - void ProcessMC() ; - Int_t FindPrimary(AliESDCaloCluster* clu, Bool_t& sure) ; - - void EvalLambdas(AliESDCaloCluster * clu, Int_t iR,Double_t &m02, Double_t &m20); - Double_t CoreEnergy(AliESDCaloCluster * clu); - void Reclusterize(AliESDCaloCluster * clu) ; - Bool_t AreNeibors(Int_t id1,Int_t id2) ; - Double_t PrimaryWeight(Int_t primary); - Double_t PrimaryParticleWeight(TParticle * particle); - void FillSecondaries() ; - Int_t FindCommonParent(Int_t iPart, Int_t jPart) ; - Bool_t HaveParent(Int_t iPart, Int_t pdgParent); - Bool_t InPi0mass(Double_t m, Double_t pt); - -private: - AliStack * fStack ; // - THashList * fOutputContainer; //final histogram container - TList * fPHOSEvents[1][10][11] ; //Containers for events with PHOS photons - TClonesArray * fPHOSEvent ; //PHOS photons in current event - AliPHOSCalibData *fPHOSCalibData; // PHOS calibration object - - //Reaction plain for v2 - Float_t fRP ; //Reaction plane calculated with full TPC - Float_t fRPV0A ; //Reaction plain calculated with A-side TPC: eta>0.15 - Float_t fRPV0C ; //Reaction plain calculated with C-side TPC: eta<-0.15 - Bool_t fHaveTPCRP ; // Is TPC RP defined? - - Int_t fRunNumber ; //Current run number - Float_t fCentrality ; //Centrality of the currecnt event - - Int_t fCenBin ; // Current centrality bin - - TH2I *fPHOSBadMap[6] ; //Container for PHOS bad channels map - - AliPHOSGeometry *fPHOSGeo; // PHOS geometry - Int_t fEventCounter; // number of analyzed events - - ClassDef(AliPHOSHijingEfficiency, 1); // PHOS analysis task -}; - -#endif +#ifndef AliPHOSHijingEfficiency_cxx +#define AliPHOSHijingEfficiency_cxx + +// example of an analysis task creating a p_t spectrum +// Authors: Panos Cristakoglou, Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing + +class TObjArray; +class THashList ; +class TH1F; +class TH1D ; +class TH2I; +class TH2F; +class TH3F; +class TF1 ; +class TParticle; +class AliStack ; +class AliESDtrackCuts; +class AliPHOSGeometry; +class AliESDEvent ; +class AliPHOSCalibData; +class AliESDtrack ; +class AliESDCaloCluster ; +class AliCaloPhoton ; + +#include "AliAnalysisTaskSE.h" + +class AliPHOSHijingEfficiency : public AliAnalysisTaskSE { +public: + AliPHOSHijingEfficiency(const char *name = "AliPHOSHijingEfficiency"); + virtual ~AliPHOSHijingEfficiency() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + void SetPHOSBadMap(Int_t mod,TH2I * h) + { + if(fPHOSBadMap[mod]) delete fPHOSBadMap[mod] ; + fPHOSBadMap[mod]=new TH2I(*h) ; + printf("Set %s \n",fPHOSBadMap[mod]->GetName()); + } + +private: + AliPHOSHijingEfficiency(const AliPHOSHijingEfficiency&); // not implemented + AliPHOSHijingEfficiency& operator=(const AliPHOSHijingEfficiency&); // not implemented + Bool_t IsGoodChannel(const char * det, Int_t mod,Int_t ix, Int_t iz); //Use addisional bad map for PHOS + + void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z, Double_t w) const ; //Fill 3D histogram witn name key + void FillAllHistograms(const char * key,AliCaloPhoton * ph)const ; //Fill all possible PID combinations for a given photon + + Bool_t TestLambda(Double_t pt,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons + Bool_t TestLambda2(Double_t pt,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons + Double_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge); + Bool_t TestTOF(Double_t t, Double_t e) ; + Int_t ConvertRunNumber(Int_t run) ; + void ProcessMC() ; + Int_t FindPrimary(AliESDCaloCluster* clu, Bool_t& sure) ; + + void EvalLambdas(AliESDCaloCluster * clu, Int_t iR,Double_t &m02, Double_t &m20); + Double_t CoreEnergy(AliESDCaloCluster * clu); + void Reclusterize(AliESDCaloCluster * clu) ; + Bool_t AreNeibors(Int_t id1,Int_t id2) ; + Double_t PrimaryWeight(Int_t primary); + Double_t PrimaryParticleWeight(TParticle * particle); + void FillSecondaries() ; + Int_t FindCommonParent(Int_t iPart, Int_t jPart) ; + Bool_t HaveParent(Int_t iPart, Int_t pdgParent); + Bool_t InPi0mass(Double_t m, Double_t pt); + +private: + AliStack * fStack ; // + THashList * fOutputContainer; //final histogram container + TList * fPHOSEvents[1][10][11] ; //Containers for events with PHOS photons + TClonesArray * fPHOSEvent ; //PHOS photons in current event + AliPHOSCalibData *fPHOSCalibData; // PHOS calibration object + + //Reaction plain for v2 + Float_t fRP ; //Reaction plane calculated with full TPC + Float_t fRPV0A ; //Reaction plain calculated with A-side TPC: eta>0.15 + Float_t fRPV0C ; //Reaction plain calculated with C-side TPC: eta<-0.15 + Bool_t fHaveTPCRP ; // Is TPC RP defined? + + Int_t fRunNumber ; //Current run number + Float_t fCentrality ; //Centrality of the currecnt event + + Int_t fCenBin ; // Current centrality bin + + TH2I *fPHOSBadMap[6] ; //Container for PHOS bad channels map + + AliPHOSGeometry *fPHOSGeo; // PHOS geometry + Int_t fEventCounter; // number of analyzed events + + ClassDef(AliPHOSHijingEfficiency, 1); // PHOS analysis task +}; + +#endif diff --git a/PWGGA/PHOSTasks/PHOS_embedding/AliAnalysisTaskPi0DiffEfficiency.h b/PWGGA/PHOSTasks/PHOS_embedding/AliAnalysisTaskPi0DiffEfficiency.h index 9af640e7f32..39a38dfbb32 100644 --- a/PWGGA/PHOSTasks/PHOS_embedding/AliAnalysisTaskPi0DiffEfficiency.h +++ b/PWGGA/PHOSTasks/PHOS_embedding/AliAnalysisTaskPi0DiffEfficiency.h @@ -1,83 +1,83 @@ -#ifndef ALIANALYSISTASKPI0DIFFEFFICIENCY_H -#define ALIANALYSISTASKPI0DIFFEFFICIENCY_H - -// Task calculating effciency of pi0 registration -// as a difference between spectrum after and before -// embedding - -class TClonesArray; -class AliAODCaloCluster ; -class AliPHOSAodCluster ; -class AliPHOSCalibData ; -class AliPHOSGeometry ; - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskPi0DiffEfficiency : public AliAnalysisTaskSE { -public: - AliAnalysisTaskPi0DiffEfficiency(); - AliAnalysisTaskPi0DiffEfficiency(const char *name); - virtual ~AliAnalysisTaskPi0DiffEfficiency() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - - void SetPHOSBadMap(Int_t mod,TH2I * h) - { - if(fPHOSBadMap[mod]) delete fPHOSBadMap[mod] ; - fPHOSBadMap[mod]=new TH2I(*h) ; - printf("Set %s \n",fPHOSBadMap[mod]->GetName()); - } - - protected: - AliAnalysisTaskPi0DiffEfficiency(const AliAnalysisTaskPi0DiffEfficiency& a) ; - AliAnalysisTaskPi0DiffEfficiency& operator=(const AliAnalysisTaskPi0DiffEfficiency& ){return *this;} // not implemented - Bool_t IsGoodChannel(const char * det, Int_t mod,Int_t ix, Int_t iz); //Use addisional bad map for PHOS - void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key - void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z, Double_t weight) const ; //Fill 3D histogram witn name key - Bool_t TestLambda(Double_t e,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons - Bool_t TestLambda2(Double_t e,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons - Double_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge); - Bool_t TestTOF(Double_t t, Double_t e) ; - - void ProcessMC() ; - Double_t CoreEnergy(AliPHOSAodCluster * clu); - -private: - Bool_t IsSameCluster(AliAODCaloCluster * c1,AliAODCaloCluster * c2)const ; - void EvalLambdas(AliAODCaloCluster * clu, Int_t iR,Double_t &m02, Double_t &m20) ; - Double_t PrimaryWeight(Double_t x) ; - -private: - AliStack * fStack ; //! Stack of primary - THashList * fOutputContainer; //! final histogram container - TList * fPHOSEvents[1][10][11] ; //! Containers for events with PHOS photons - TClonesArray * fPHOSEvent ; //!PHOS photons in current event - TClonesArray * fPHOSEvent1 ; //!PHOS photons in current event - TClonesArray * fPHOSEvent2 ; //!PHOS photons in current event - AliPHOSCalibData *fPHOSCalibData; //! PHOS calibration object - TF1 *fNonLinCorr; // Non-linearity correction - - //Reaction plane for v2 - Float_t fRPfull ; //!Reaction plain calculated with full TPC - Float_t fRPA ; //!Reaction plain calculated with A-side TPC: eta>0.15 - Float_t fRPC ; //!Reaction plain calculated with C-side TPC: eta<-0.15 - Float_t fRPFar ; //!Reaction plain calculated with TPC: eta>0.6 - Float_t fRPAFar ; //!Reaction plain calculated with A-side TPC: eta>0.6 - Float_t fRPCFar ; //!Reaction plain calculated with C-side TPC: eta<-0.6 - - Float_t fCentrality ; //!Centrality of the currecnt event - - Int_t fCenBin ; //! Current centrality bin - - TH2I *fPHOSBadMap[6] ; //!Container for PHOS bad channels map - - AliPHOSGeometry *fPHOSGeo; //! PHOS geometry - Int_t fEventCounter; //! number of analyzed events - - ClassDef(AliAnalysisTaskPi0DiffEfficiency, 2); // PHOS analysis task -}; - -#endif +#ifndef ALIANALYSISTASKPI0DIFFEFFICIENCY_H +#define ALIANALYSISTASKPI0DIFFEFFICIENCY_H + +// Task calculating effciency of pi0 registration +// as a difference between spectrum after and before +// embedding + +class TClonesArray; +class AliAODCaloCluster ; +class AliPHOSAodCluster ; +class AliPHOSCalibData ; +class AliPHOSGeometry ; + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskPi0DiffEfficiency : public AliAnalysisTaskSE { +public: + AliAnalysisTaskPi0DiffEfficiency(); + AliAnalysisTaskPi0DiffEfficiency(const char *name); + virtual ~AliAnalysisTaskPi0DiffEfficiency() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + + void SetPHOSBadMap(Int_t mod,TH2I * h) + { + if(fPHOSBadMap[mod]) delete fPHOSBadMap[mod] ; + fPHOSBadMap[mod]=new TH2I(*h) ; + printf("Set %s \n",fPHOSBadMap[mod]->GetName()); + } + + protected: + AliAnalysisTaskPi0DiffEfficiency(const AliAnalysisTaskPi0DiffEfficiency& a) ; + AliAnalysisTaskPi0DiffEfficiency& operator=(const AliAnalysisTaskPi0DiffEfficiency& ){return *this;} // not implemented + Bool_t IsGoodChannel(const char * det, Int_t mod,Int_t ix, Int_t iz); //Use addisional bad map for PHOS + void FillHistogram(const char * key,Double_t x) const ; //Fill 1D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y) const ; //Fill 2D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z) const ; //Fill 3D histogram witn name key + void FillHistogram(const char * key,Double_t x, Double_t y, Double_t z, Double_t weight) const ; //Fill 3D histogram witn name key + Bool_t TestLambda(Double_t e,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons + Bool_t TestLambda2(Double_t e,Double_t l1,Double_t l2) ; //Evaluate Dispersion cuts for photons + Double_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge); + Bool_t TestTOF(Double_t t, Double_t e) ; + + void ProcessMC() ; + Double_t CoreEnergy(AliPHOSAodCluster * clu); + +private: + Bool_t IsSameCluster(AliAODCaloCluster * c1,AliAODCaloCluster * c2)const ; + void EvalLambdas(AliAODCaloCluster * clu, Int_t iR,Double_t &m02, Double_t &m20) ; + Double_t PrimaryWeight(Double_t x) ; + +private: + AliStack * fStack ; //! Stack of primary + THashList * fOutputContainer; //! final histogram container + TList * fPHOSEvents[1][10][11] ; //! Containers for events with PHOS photons + TClonesArray * fPHOSEvent ; //!PHOS photons in current event + TClonesArray * fPHOSEvent1 ; //!PHOS photons in current event + TClonesArray * fPHOSEvent2 ; //!PHOS photons in current event + AliPHOSCalibData *fPHOSCalibData; //! PHOS calibration object + TF1 *fNonLinCorr; // Non-linearity correction + + //Reaction plane for v2 + Float_t fRPfull ; //!Reaction plain calculated with full TPC + Float_t fRPA ; //!Reaction plain calculated with A-side TPC: eta>0.15 + Float_t fRPC ; //!Reaction plain calculated with C-side TPC: eta<-0.15 + Float_t fRPFar ; //!Reaction plain calculated with TPC: eta>0.6 + Float_t fRPAFar ; //!Reaction plain calculated with A-side TPC: eta>0.6 + Float_t fRPCFar ; //!Reaction plain calculated with C-side TPC: eta<-0.6 + + Float_t fCentrality ; //!Centrality of the currecnt event + + Int_t fCenBin ; //! Current centrality bin + + TH2I *fPHOSBadMap[6] ; //!Container for PHOS bad channels map + + AliPHOSGeometry *fPHOSGeo; //! PHOS geometry + Int_t fEventCounter; //! number of analyzed events + + ClassDef(AliAnalysisTaskPi0DiffEfficiency, 2); // PHOS analysis task +}; + +#endif diff --git a/PWGGA/PHOSTasks/PHOS_embedding/AliPHOSEmbedding.h b/PWGGA/PHOSTasks/PHOS_embedding/AliPHOSEmbedding.h index 807b8eb4457..cde7bef9e83 100644 --- a/PWGGA/PHOSTasks/PHOS_embedding/AliPHOSEmbedding.h +++ b/PWGGA/PHOSTasks/PHOS_embedding/AliPHOSEmbedding.h @@ -1,93 +1,93 @@ -#ifndef AliPHOSEmbedding_h -#define AliPHOSEmbedding_h - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -// Class to perform embedding on the AOD level -// Author: D.Peressounko - -class TChain ; -class TClonesArray ; -class TH2F ; - -class AliPHOSClusterizerv1 ; -class AliPHOSReconstructor ; -class AliAODEvent ; -class AliESDEvent ; -class AliESDtrack ; -class AliESDCaloCells ; - -#include "AliAnalysisTaskSE.h" - -class AliPHOSEmbedding : public AliAnalysisTaskSE { -public: - AliPHOSEmbedding(const char *name = "AliPHOSEmbedding"); - virtual ~AliPHOSEmbedding() {} - - //Standard methods - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *){} - - //Chain with signal AOD for embedding - void SetSignalChain(TChain * signal){fAODChain =signal;} - - //Calibration used in reconstruction of real data (ESDs) - //If not set, assume same calibration as set by default - void SetOldCalibration(TH2F **calib) ; - -private: - AliPHOSEmbedding(const AliPHOSEmbedding&); // not implemented - AliPHOSEmbedding& operator=(const AliPHOSEmbedding&); // not implemented - - void Init() ; - void InitMF() ; //Mag.Field initialization for track matching - void InitGeometry() ; - - AliAODEvent * GetNextSignalEvent(void) ; - - void CopyRecalibrateDigits(void) ; - void MakeEmbedding(AliESDEvent * data, AliAODEvent * signal) ; - void MakeDigits(AliAODEvent* signal) ; - - //Convert ESD with embedded signal to AOD - //First standard stuff - void ConvertESDtoAOD(AliESDEvent *esd) ; - void ConvertHeader(AliESDEvent &esd) ; - void ConvertPrimaryVertices(const AliESDEvent &esd) ; - void ConvertCaloClusters(const AliESDEvent &esd) ; - void ConvertEMCALCells(const AliESDEvent &esd) ; - void ConvertPHOSCells(const AliESDEvent &esd) ; - - //Add new branch - void ConvertEmbeddedClusters(const AliESDEvent *esd) ; - void ConvertEmbeddedCells(const AliESDEvent *esd) ; - void ConvertMCParticles(const AliAODEvent *aod) ; - - Float_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge) ; - - - TChain * fAODChain ; //Signal - - TTree * fDigitsTree ; //! Digits - TTree * fClustersTree; //! Clusters - TTree * fTreeOut; //Output AOD - TClonesArray * fDigitsArr ; //! - - TClonesArray * fEmbeddedClusters ; //! - AliAODCaloCells * fEmbeddedCells ; //! - AliESDCaloCells * fCellsPHOS ; //! Old PHOS cells - - AliPHOSClusterizerv1 * fClusterizer ; //! - AliPHOSReconstructor * fPHOSReconstructor ; //! - - TH2F * fOldPHOSCalibration[5] ; //! Calibration coeff. used in ESD production - - Int_t fNSignal ; // Number of signal evetns processed - Int_t fNCaloClustersOld ; //Number of CaloClusters already in ESD - Bool_t fInitialized ; //! - ClassDef(AliPHOSEmbedding, 1); // PHOS analysis task -}; - -#endif +#ifndef AliPHOSEmbedding_h +#define AliPHOSEmbedding_h + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +// Class to perform embedding on the AOD level +// Author: D.Peressounko + +class TChain ; +class TClonesArray ; +class TH2F ; + +class AliPHOSClusterizerv1 ; +class AliPHOSReconstructor ; +class AliAODEvent ; +class AliESDEvent ; +class AliESDtrack ; +class AliESDCaloCells ; + +#include "AliAnalysisTaskSE.h" + +class AliPHOSEmbedding : public AliAnalysisTaskSE { +public: + AliPHOSEmbedding(const char *name = "AliPHOSEmbedding"); + virtual ~AliPHOSEmbedding() {} + + //Standard methods + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *){} + + //Chain with signal AOD for embedding + void SetSignalChain(TChain * signal){fAODChain =signal;} + + //Calibration used in reconstruction of real data (ESDs) + //If not set, assume same calibration as set by default + void SetOldCalibration(TH2F **calib) ; + +private: + AliPHOSEmbedding(const AliPHOSEmbedding&); // not implemented + AliPHOSEmbedding& operator=(const AliPHOSEmbedding&); // not implemented + + void Init() ; + void InitMF() ; //Mag.Field initialization for track matching + void InitGeometry() ; + + AliAODEvent * GetNextSignalEvent(void) ; + + void CopyRecalibrateDigits(void) ; + void MakeEmbedding(AliESDEvent * data, AliAODEvent * signal) ; + void MakeDigits(AliAODEvent* signal) ; + + //Convert ESD with embedded signal to AOD + //First standard stuff + void ConvertESDtoAOD(AliESDEvent *esd) ; + void ConvertHeader(AliESDEvent &esd) ; + void ConvertPrimaryVertices(const AliESDEvent &esd) ; + void ConvertCaloClusters(const AliESDEvent &esd) ; + void ConvertEMCALCells(const AliESDEvent &esd) ; + void ConvertPHOSCells(const AliESDEvent &esd) ; + + //Add new branch + void ConvertEmbeddedClusters(const AliESDEvent *esd) ; + void ConvertEmbeddedCells(const AliESDEvent *esd) ; + void ConvertMCParticles(const AliAODEvent *aod) ; + + Float_t TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge) ; + + + TChain * fAODChain ; //Signal + + TTree * fDigitsTree ; //! Digits + TTree * fClustersTree; //! Clusters + TTree * fTreeOut; //Output AOD + TClonesArray * fDigitsArr ; //! + + TClonesArray * fEmbeddedClusters ; //! + AliAODCaloCells * fEmbeddedCells ; //! + AliESDCaloCells * fCellsPHOS ; //! Old PHOS cells + + AliPHOSClusterizerv1 * fClusterizer ; //! + AliPHOSReconstructor * fPHOSReconstructor ; //! + + TH2F * fOldPHOSCalibration[5] ; //! Calibration coeff. used in ESD production + + Int_t fNSignal ; // Number of signal evetns processed + Int_t fNCaloClustersOld ; //Number of CaloClusters already in ESD + Bool_t fInitialized ; //! + ClassDef(AliPHOSEmbedding, 1); // PHOS analysis task +}; + +#endif diff --git a/PWGGA/PHOSTasks/PHOS_embedding/simrun.C b/PWGGA/PHOSTasks/PHOS_embedding/simrun.C index eccadac3bed..158394098b7 100644 --- a/PWGGA/PHOSTasks/PHOS_embedding/simrun.C +++ b/PWGGA/PHOSTasks/PHOS_embedding/simrun.C @@ -1,16 +1,16 @@ -// simrun.C -{ -// set job and simulation variables as : -// root.exe -b -q simrun.C --run --event --process --field --energy <900/2360/10000> - - cout<<">>>>> SIMULATION <<<<<"<Exec("aliroot -b -q sim.C > sim.log 2>&1"); - gSystem->Exec("mv syswatch.log simwatch.log"); - gSystem->Exec("rm *ITS*.root *TPC*.root *TOF*.root *TRD*.root *PMD*.root ") ; - cout<<">>>>> RECONSTRUCTION <<<<<"<Exec("aliroot -b -q rec.C > rec.log 2>&1"); - gSystem->Exec("mv syswatch.log recwatch.log"); - cout<<">>>>> AOD <<<<<"<Exec("aliroot -b -q CreateAOD.C > aod.log 2>&1"); - -} +// simrun.C +{ +// set job and simulation variables as : +// root.exe -b -q simrun.C --run --event --process --field --energy <900/2360/10000> + + cout<<">>>>> SIMULATION <<<<<"<Exec("aliroot -b -q sim.C > sim.log 2>&1"); + gSystem->Exec("mv syswatch.log simwatch.log"); + gSystem->Exec("rm *ITS*.root *TPC*.root *TOF*.root *TRD*.root *PMD*.root ") ; + cout<<">>>>> RECONSTRUCTION <<<<<"<Exec("aliroot -b -q rec.C > rec.log 2>&1"); + gSystem->Exec("mv syswatch.log recwatch.log"); + cout<<">>>>> AOD <<<<<"<Exec("aliroot -b -q CreateAOD.C > aod.log 2>&1"); + +} diff --git a/PWGHF/hfe/macros/CorrectForEfficiencypptrd.C b/PWGHF/hfe/macros/CorrectForEfficiencypptrd.C index cd7bf2b5af4..040972ffae0 100644 --- a/PWGHF/hfe/macros/CorrectForEfficiencypptrd.C +++ b/PWGHF/hfe/macros/CorrectForEfficiencypptrd.C @@ -1,568 +1,568 @@ -void CorrectForEfficiencypptrd(const char *filedata,const char *fileMC,const char *NameList,Bool_t withtrd=kTRUE, Float_t CorrType=0, Int_t conf=2, Bool_t smoothing=kFALSE, Bool_t hadroncontaminationsubtracted=kTRUE, Bool_t UnsetCorrelatedErrors=kFALSE); -void CorrectForEfficiencyBeauty(const char *filedata,const char *fileMC, const char *fileMCbg); -TList *GetResults(const Char_t *testfile,const Char_t *plus=""); -TList *GetQA(const Char_t *testfile,const Char_t *plus=""); -TObject* GetSpectrum(AliCFContainer *c, Int_t step); -THnSparseF* GetHadronEffbyIPcut(TList *hfeqa); -void CorrectFromTheWidth(TH1D *h1); - -void CorrectForEfficiencypptrd(const char *filedata,const char *fileMC,const char *NameList,Bool_t withtrd, Float_t CorrType, Int_t conf, Bool_t smoothing, Bool_t hadroncontaminationsubtracted, Bool_t UnsetCorrelatedErrors) { - - /////////////////////////////////////////////////////////////////////////////////////////////////////// - // Will produce finalSpectrum.root with results inside - // TGraphErrors UnfoldingCorrectedSpectrum -> unfolding procedure (doesn't work in 2D with trunk) - // TGraphErrors AlltogetherSpectrum -> corrected spectrum with other method - // TH1D RatioUnfoldingAlltogetherSpectrum - // THnSparseF UnfoldingCorrectedNotNormalizedSpectrum -> unfolding procedure not yet normalized - // AliCFDataGrid AlltogetherCorrectedNotNormalizedSpectrum -> other method not yet normalized - // - // NameList - possible extension for the full name of the data and MC TLists (e.g. "_PID2" for HFE_Results_PID2) - // CorrType - 0 use fixed TPC PID 0.5 - // 1 use TPC PID efficiency from V0s - // - // Conf - TRD efficiency - // double TRDeffs[5] = {0.7,0.8,0.9,0.75,0.85}; - // conf = 2, TRDeff = 0.8... - // (Only relevant for withtrd = kTRUE) - // - // f/ smoothing kFALSE - // - // g/ Flag for hadron contamination subtraction - // kTRUE means we subtract the hadron contamination - // kFALSE not - // - /////////////////////////////////////////////////////////////////////////////////////////////////////// - - double TRDeffs[5] = {0.7,0.8,0.9,0.75,0.85}; - - gStyle->SetPalette(1); - gStyle->SetOptStat(1111); - gStyle->SetPadBorderMode(0); - gStyle->SetCanvasColor(10); - gStyle->SetPadLeftMargin(0.13); - gStyle->SetPadRightMargin(0.13); - - if (CorrType>1){ - printf("Wrong argument for the type of correction, it is maybe missing, or it has to be <=2!!! \n"); - return; - } - - ///////////////////// - // Take the stuff - ///////////////////// - - printf("Get results for data \n"); - TList *resultsdata = GetResults(filedata,NameList); - if(!resultsdata){ - printf("No output objects for data: Calculation will terminate here\n"); - return; - } - - /////////////////////////////////////////////////////////// - // Event container for the normalization to CINB1 - // Take the number of events as function of z and number of contributors - // For those without primary vertex from tracks, take the fraction in the z range from MC - // For 10cm: LHC10f6a (88.0756%), LHC10f6 (86.7461%) - //////////////////////////////////////////////////////////// - resultsdata->Print(); - - AliCFContainer *containerdata = (AliCFContainer *) resultsdata->FindObject("eventContainer"); - if(!containerdata) { - printf("No container \n"); - return; - } - AliCFDataGrid *dataGrid = (AliCFDataGrid *) GetSpectrum(containerdata,AliHFEcuts::kEventStepZRange); - //dataGrid->PrintBinLimits(); - dataGrid->PrintNBins(); - - // - TH2D *spectrum_zrange = (TH2D *) dataGrid->Project(0,3); - TAxis *axis_0 = spectrum_zrange->GetXaxis(); - TAxis *axis_1 = spectrum_zrange->GetYaxis(); - printf("Number of bins in x %d and in y %d\n",axis_0->GetNbins(),axis_1->GetNbins()); - TH1D *spectrum1Da = (TH1D *) spectrum_zrange->ProjectionX("bin0",1,1); - TH1D *spectrum1Db = (TH1D *) spectrum_zrange->ProjectionX("bin>0",2,12); - TH1D *spectrum1Dc = (TH1D *) spectrum_zrange->ProjectionX("total"); - Double_t nbinbin0 = spectrum1Da->Integral(); - Double_t nbinnobin0 = spectrum1Db->Integral(); - Double_t nbintotal = spectrum1Dc->Integral(); - - //TCanvas *c1teste = new TCanvas("eventcontainertest","eventcontainertest",800,800); - //c1teste->cd(1); - //spectrum_zrange->Draw("colz"); - - - Float_t numberofentries = nbinnobin0+nbinbin0*0.880756; - printf("Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0,nbinnobin0,nbintotal,numberofentries); - - ////////////////////////////// - // Take more stuff - /////////////////////////////// - - printf("Get results for MC \n"); - TList *resultsmc = GetResults(fileMC,NameList); - if(!resultsmc){ - printf("No output objects for mc: Calculation will terminate here\n"); - return; - } - - AliHFEcontainer *datahfecontainer = (AliHFEcontainer *) resultsdata->FindObject("trackContainer"); - if(!datahfecontainer) { - printf("No container for data \n"); - return; - } - AliCFContainer *sumcontainer = datahfecontainer->GetCFContainer("recTrackContReco"); - - //////////////////////////////////////////// - //Plot raw spectrum for TPC TOF scenario - //////////////////////////////////////////// - AliCFDataGrid *dataGrida = 0x0; - if(!withtrd) dataGrida = (AliCFDataGrid *) GetSpectrum(sumcontainer,AliHFEcuts::kStepHFEcutsTRD + 2); - else dataGrida = (AliCFDataGrid *) GetSpectrum(sumcontainer,AliHFEcuts::kStepHFEcutsTRD + 3); - - TH1D *spectrumpt = (TH1D *) dataGrida->Project(0); - CorrectFromTheWidth(spectrumpt); - - TH1D *total = new TH1D("total","",1,0.3,10.3); - total->SetMaximum(1.0e+07); - total->SetMinimum(1000); - total->SetXTitle("p_{T} [GeV/c]"); - total->SetYTitle("dN/dp_{T}[GeV/c]^{-1}"); - total->SetTitleOffset(1.5,"Y"); - //total->Scale(0.9); - total->GetXaxis()->SetRangeUser(0.38,10.3); - - - TCanvas *c1test = new TCanvas("rawspectrum","rawspectrum",800,800); - c1test->cd(1); - gPad->SetLeftMargin(0.13); - gPad->SetLogy(); - gPad->SetTicks(); - //gPad->SetGridx(); - //gPad->SetGridy(); - gPad->SetFillColor(10); - gPad->SetFrameFillColor(10); - gStyle->SetOptStat(0); - gStyle->SetOptFit(1111); - gStyle->SetOptTitle(0); - total->SetStats(0); - spectrumpt->SetStats(0); - total->Draw(); - spectrumpt->Draw("same"); - TPaveText* t1=new TPaveText(0.49,0.45,0.79,0.52,"NDC"); - t1->SetFillStyle(0); - t1->SetBorderSize(0); - t1->AddText(0.,0.,"pp, #sqrt{s} = 7 TeV"); - t1->SetTextColor(kRed); - //t1->SetTextSize(20); - t1->SetTextFont(42); - t1->Draw(); - TPaveText* t2=new TPaveText(0.49,0.35,0.79,0.42,"NDC"); - t2->SetFillStyle(0); - t2->SetBorderSize(0); - t2->AddText(0.,0.,"L = 2.6 nb^{-1}"); - t2->SetTextColor(kRed); - //t1->SetTextSize(20); - t2->SetTextFont(42); - t2->Draw(); - TPaveText* t3=new TPaveText(0.49,0.35,0.79,0.42,"NDC"); - t3->SetFillStyle(0); - t3->SetBorderSize(0); - t3->AddText(0.,0.,"|#eta| < 0.8"); - t3->SetTextColor(kRed); - //t1->SetTextSize(20); - t3->SetTextFont(42); - t3->Draw(); - - ///////////////////////////// - // Check number of events - ///////////////////////////// - - - Int_t numberOfEventsafterallcuts = (Int_t) datahfecontainer->GetNumberOfEvents(); - - printf("Number of events not corrected %d\n",numberOfEventsafterallcuts); - printf("Number of events corrected %f\n",numberofentries); - - AliHFEcontainer *mchfecontainer = (AliHFEcontainer *) resultsmc->FindObject("trackContainer"); - if(!mchfecontainer) { - printf("No mc container \n"); - return; - } - - printf("Find the container V0\n"); - AliHFEcontainer *containerhfeV0 = (AliHFEcontainer *) resultsdata->FindObject("containerV0"); - if(!containerhfeV0) { - printf("No hfe container \n"); - return; - } - - ////////////// - // Correct - ///////////// - - AliHFEspectrum *spectrum = new AliHFEspectrum("HFEspectrum"); - spectrum->SetNbDimensions(1); - // If you want to correct positive (0) or negative (1) separately - //spectrum->SetChargeChoosen(0); - spectrum->SetSmoothing(smoothing); - spectrum->SetUnSetCorrelatedErrors(UnsetCorrelatedErrors); - spectrum->SetDebugLevel(1); - spectrum->SetNumberOfEvents((Int_t)numberofentries); - spectrum->SetDumpToFile(kTRUE); - // True step in MC (events in range +- 10 cm and no pile up) - spectrum->SetMCTruthStep(AliHFEcuts::kStepMCGeneratedZOutNoPileUpCentralityFine); - - // Step where we correct from MC (tracking + TOF) - spectrum->SetMCEffStep(AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1); - printf("!!! Step we correct with MC %d\n!!!",AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1); - - - // Step from data we correct for - //////////****************************////////////////////////////// - if(withtrd) spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 3); - else spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 2); - //////////****************************////////////////////////////// - - // Steps to be corrected with V0 - if (CorrType == 1){ - printf("\n This time we correct with PID efficiency from V0s !!! \n"); - if(withtrd) { - spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2); - spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 3); - } - else { - spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 1); - spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2); - } - } - - if (CorrType < 1){ - - Double_t effTPC = 0.5, - effTRD = TRDeffs[conf-1]; - printf("effTRD = %f\n", effTRD); - // Place for a correction as an efficiency parametrized as function of pt of pt,eta,phi or p=pt - TF1 *hEfficiency = new TF1("efficiency", "[0]", 0., 20.); - if(withtrd) hEfficiency->SetParameter(0, effTPC*effTRD); - else hEfficiency->SetParameter(0, effTPC); - spectrum->SetEfficiencyFunction(hEfficiency); - } - - // Give everything (data container, mc container and V0 data container) - if (CorrType == 1){ - printf("\n This time we correct with PID efficiency from V0s !!! \n"); - spectrum->Init(datahfecontainer,mchfecontainer,containerhfeV0); - } - else { - printf("\n This time we correct with PID efficiency from MC or fixed value !!! \n"); - spectrum->Init(datahfecontainer,mchfecontainer); - } - - // kTRUE means subtract hadron background, kFALSE means do not subtract hadron background - spectrum->Correct(hadroncontaminationsubtracted); - - -} - -//_____________________________________________________________________ -void CorrectForEfficiencyBeauty(const char *filedata,const char *fileMC, const char *fileMCbg) { - - /////////////////////////////////////////////////////////////////////////////////////////////////////// - // Will produce finalSpectrum.root with results inside - // TGraphErrors UnfoldingCorrectedSpectrum -> unfolding procedure (doesn't work in 2D with trunk) - // TGraphErrors AlltogetherSpectrum -> corrected spectrum with other method - // TH1D RatioUnfoldingAlltogetherSpectrum - // THnSparseF UnfoldingCorrectedNotNormalizedSpectrum -> unfolding procedure not yet normalized - // AliCFDataGrid AlltogetherCorrectedNotNormalizedSpectrum -> other method not yet normalized - /////////////////////////////////////////////////////////////////////////////////////////////////////// - - gStyle->SetPalette(1); - gStyle->SetOptStat(1111); - gStyle->SetPadBorderMode(0); - gStyle->SetCanvasColor(10); - gStyle->SetPadLeftMargin(0.13); - gStyle->SetPadRightMargin(0.13); - - ///////////////////// - // Take the stuff - ///////////////////// - - TList *resultsdata = GetResults(filedata,"_PID2"); - //TList *resultsdata = GetResults(filedata); - if(!resultsdata){ - printf("No output objects for data: Calculation will terminate here\n"); - return; - } - /////////////////////////////////////////////////////////// - // Event container for the normalization to CINB1 - // Take the number of events as function of z and number of contributors - // For those without primary vertex from tracks, take the fraction in the z range from MC - // For 10cm: LHC10f6a (88.0756%), LHC10f6 (86.7461%) - //////////////////////////////////////////////////////////// - - AliCFContainer *containerdata = (AliCFContainer *) resultsdata->FindObject("eventContainer"); - if(!containerdata) { - printf("No container \n"); - return; - } - AliCFDataGrid *dataGrid = (AliCFDataGrid *) GetSpectrum(containerdata,AliHFEcuts::kEventStepZRange); - TH2D *spectrum_zrange = (TH2D *) dataGrid->Project(0,2); - TH1D *spectrum1Da = (TH1D *) spectrum_zrange->ProjectionX("bin0",1,1); - TH1D *spectrum1Db = (TH1D *) spectrum_zrange->ProjectionX("bin>0",2,12); - TH1D *spectrum1Dc = (TH1D *) spectrum_zrange->ProjectionX("total"); - Double_t nbinbin0 = spectrum1Da->Integral(); - Double_t nbinnobin0 = spectrum1Db->Integral(); - Double_t nbintotal = spectrum1Dc->Integral(); - - Float_t numberofentries = nbinnobin0+nbinbin0*0.880756; - printf("Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0,nbinnobin0,nbintotal,numberofentries); - - - AliHFEcontainer *datahfecontainer = (AliHFEcontainer *) resultsdata->FindObject("trackContainer"); - if(!datahfecontainer) { - printf("No container for data \n"); - return; - } - - - ////////////////////////////// - // Check MC # of events - /////////////////////////////// - - TList *resultsmc = GetResults(fileMC,"_PID2"); - if(!resultsmc){ - printf("No output objects for mc: Calculation will terminate here\n"); - return; - } - - AliCFContainer *containermc = (AliCFContainer *) resultsmc->FindObject("eventContainer"); - if(!containermc) { - printf("No container \n"); - return; - } - AliCFDataGrid *mcGrid = (AliCFDataGrid *) GetSpectrum(containermc,AliHFEcuts::kEventStepZRange); - TH2D *spectrum_zrangemc = (TH2D *) mcGrid->Project(0,2); - TH1D *spectrum1Damc = (TH1D *) spectrum_zrangemc->ProjectionX("bin0",1,1); - TH1D *spectrum1Dbmc = (TH1D *) spectrum_zrangemc->ProjectionX("bin>0",2,12); - TH1D *spectrum1Dcmc = (TH1D *) spectrum_zrangemc->ProjectionX("total"); - Double_t nbinbin0mc = spectrum1Damc->Integral(); - Double_t nbinnobin0mc = spectrum1Dbmc->Integral(); - Double_t nbintotalmc = spectrum1Dcmc->Integral(); - - Float_t numberofentriesmc = nbinnobin0mc+nbinbin0mc*0.880756; - printf("MC: Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0mc,nbinnobin0mc,nbintotalmc,numberofentriesmc); - - - - ///////////////////////////// - // Check number of events - ///////////////////////////// - - Int_t numberOfEventsafterallcuts = (Int_t) datahfecontainer->GetNumberOfEvents(); - - printf("Number of events not corrected %d\n",numberOfEventsafterallcuts); - printf("Number of events corrected %f\n",numberofentries); - - AliHFEcontainer *mchfecontainer = (AliHFEcontainer *) resultsmc->FindObject("trackContainer"); - if(!mchfecontainer) { - printf("No mc container \n"); - return; - } - - printf("Find the container V0\n"); - AliHFEcontainer *containerhfeV0 = (AliHFEcontainer *) resultsdata->FindObject("containerV0"); - if(!containerhfeV0) { - printf("No hfe container \n"); - return; - } - - // nonHFE backgrounds - TList *resultsmcbg = GetResults(fileMCbg,"_PID2"); - if(!resultsmcbg){ - printf("No output objects for mc: Calculation will terminate here\n"); return; - } - AliHFEcontainer *mcbghfecontainer = (AliHFEcontainer *) resultsmcbg->FindObject("trackContainer"); - if(!mcbghfecontainer) { - printf("No mc container \n"); - return; - } - - AliCFContainer *containermcbg = (AliCFContainer *) resultsmcbg->FindObject("eventContainer"); - if(!containermcbg) { - printf("No container \n"); - return; - } - - AliCFDataGrid *mcbgGrid = (AliCFDataGrid *) GetSpectrum(containermcbg,AliHFEcuts::kEventStepZRange); - TH2D *spectrum_zrangemcbg = (TH2D *) mcbgGrid->Project(0,2); - TH1D *spectrum1Damcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("bin0",1,1); - TH1D *spectrum1Dbmcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("bin>0",2,12); - TH1D *spectrum1Dcmcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("total"); - Double_t nbinbin0mcbg = spectrum1Damcbg->Integral(); - Double_t nbinnobin0mcbg = spectrum1Dbmcbg->Integral(); - Double_t nbintotalmcbg = spectrum1Dcmcbg->Integral(); - - Float_t numberofentriesmcbg = nbinnobin0mcbg+nbinbin0mcbg*0.880756; - printf("MCbg: Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0mcbg,nbinnobin0mcbg,nbintotalmcbg,numberofentriesmcbg); - - - // hadron contamination after IP cuts - TList *hfeqa = GetQA(fileMC,"_PID2"); - THnSparseF* hsHadronEffbyIPcut = (THnSparseF* )GetHadronEffbyIPcut(hfeqa); - - ////////////// - // Correct - ///////////// - - AliHFEspectrum *spectrum = new AliHFEspectrum("HFEspectrum"); - - spectrum->SetBeautyAnalysis(); - // Enable background subtraction - spectrum->EnableIPanaHadronBgSubtract(); - spectrum->EnableIPanaCharmBgSubtract(); - spectrum->EnableIPanaConversionBgSubtract(); - spectrum->EnableIPanaNonHFEBgSubtract(); - //spectrum->SetNonHFEBackground2ndMethod(); - - spectrum->SetNbDimensions(1); - // If you want to correct positive (0) or negative (1) separately - //spectrum->SetChargeChoosen(0); - spectrum->SetDebugLevel(1); - spectrum->SetNumberOfEvents((Int_t)numberofentries); - spectrum->SetNumberOfMCEvents((Int_t)numberofentriesmc); - spectrum->SetNumberOfMC2Events((Int_t)numberofentriesmcbg); - spectrum->SetDumpToFile(smoothing); - // True step in MC (events in range +- 10 cm and no pile up) - spectrum->SetMCTruthStep(AliHFEcuts::kStepMCGeneratedZOutNoPileUpCentralityFine); - // Step where we correct from MC (tracking + TOF) - spectrum->SetMCEffStep(AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1); - // Step from data we correct for - spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 3); // +3 = tracking + TOF + TPC + IPcut - // Steps to be corrected with V0 (TPC PID only) - spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 1); - spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2); - - spectrum->SetHadronEffbyIPcut(hsHadronEffbyIPcut); - // Give everything (data container, mc container and V0 data container) - spectrum->Init(datahfecontainer,mchfecontainer,containerhfeV0,mcbghfecontainer); - - // kTRUE means subtract hadron background, kFALSE means do not subtract hadron background - spectrum->CorrectBeauty(kTRUE); - -} - -//_____________________________________________________________________ -TList *GetResults(const Char_t *testfile,const Char_t *plus){ - // - // read output - // - TFile *f = TFile::Open(testfile); - if(!f || f->IsZombie()){ - printf("File not readable\n"); - return 0x0; - } - TString name(plus); - printf("Name of TList %s\n",(const char*)name); - TList *l = dynamic_cast(f->Get((const char*)name)); - if(!l){ - printf("Results list was not found\n"); - f->Close(); delete f; - return 0x0; - } - TList *returnlist = dynamic_cast(l->Clone()); - f->Close(); delete f; - return returnlist; -} - -//_____________________________________________________________________ -TList *GetQA(const Char_t *testfile,const Char_t *plus){ - // - // read output - // - TFile *f = TFile::Open(testfile); - if(!f || f->IsZombie()){ - printf("File not readable\n"); - return 0x0; - } - TString name("HFE_QA"); - name += plus; - printf("Name of TList %s\n",(const char*)name); - TList *l = dynamic_cast(f->Get((const char*)name)); - if(!l){ - printf("QA list was not found\n"); - f->Close(); delete f; - return 0x0; - } - TList *returnlist = dynamic_cast(l->Clone()); - f->Close(); delete f; - return returnlist; -} - -//_____________________________________________________________________ -THnSparseF* GetHadronEffbyIPcut(TList *hfeqa){ - - - // get hadron reduction factors due to the IP cuts - TList* tl=(TList*)hfeqa->FindObject("list_TaskQA"); - TH1F* hbefore=(TH1F*)tl->FindObject("hadronsBeforeIPcut"); - TH1F* hafter=(TH1F*)tl->FindObject("hadronsAfterIPcut"); - TH1F* hreduction= (TH1F*)hafter->Clone("hreduction"); - hbefore->Sumw2(); - hafter->Sumw2(); - hreduction->Sumw2(); - hreduction->Divide(hbefore); - - Double_t* binEdges[0]; - Int_t hnBin = hreduction->GetNbinsX(); - Int_t nBin[1] = {hnBin}; - - for(int i=0; iGetBinLowEdge(i+1); - } - binEdges[0][nBin[0]] = hreduction->GetBinLowEdge(nBin[0]) + hreduction->GetBinWidth(nBin[0]); - - THnSparseF* hsreduction = new THnSparseF("hadroncontamin", "hadroncontamin; pt[GeV/c]", 1, nBin); - hsreduction->SetBinEdges(0, binEdges[0]); - - Double_t dataE[1]; - Double_t yval; - for(int i=0; iGetBinCenter(i+1); - yval=hreduction->GetBinContent(i+1); - hsreduction->Fill(dataE,yval); - } - - Int_t* ibins; - ibins = new Int_t[nBin[0] + 1]; - hsreduction->SetBinError(ibins,0); - - - return hsreduction; -} - -//_________________________________________________________________________ -TObject* GetSpectrum(AliCFContainer *c, Int_t step) { - AliCFDataGrid* data = new AliCFDataGrid("data","",*c,step); - //data->SetMeasured(step); - return data; -} -//___________________________________________________________________________ -void CorrectFromTheWidth(TH1D *h1) { - // - // Correct from the width of the bins --> dN/dp_{T} (GeV/c)^{-1} - // - - TAxis *axis = h1->GetXaxis(); - Int_t nbinX = h1->GetNbinsX(); - - for(Int_t i = 1; i <= nbinX; i++) { - - Double_t width = axis->GetBinWidth(i); - Double_t content = h1->GetBinContent(i); - Double_t error = h1->GetBinError(i); - h1->SetBinContent(i,content/width); - h1->SetBinError(i,error/width); - } - -} +void CorrectForEfficiencypptrd(const char *filedata,const char *fileMC,const char *NameList,Bool_t withtrd=kTRUE, Float_t CorrType=0, Int_t conf=2, Bool_t smoothing=kFALSE, Bool_t hadroncontaminationsubtracted=kTRUE, Bool_t UnsetCorrelatedErrors=kFALSE); +void CorrectForEfficiencyBeauty(const char *filedata,const char *fileMC, const char *fileMCbg); +TList *GetResults(const Char_t *testfile,const Char_t *plus=""); +TList *GetQA(const Char_t *testfile,const Char_t *plus=""); +TObject* GetSpectrum(AliCFContainer *c, Int_t step); +THnSparseF* GetHadronEffbyIPcut(TList *hfeqa); +void CorrectFromTheWidth(TH1D *h1); + +void CorrectForEfficiencypptrd(const char *filedata,const char *fileMC,const char *NameList,Bool_t withtrd, Float_t CorrType, Int_t conf, Bool_t smoothing, Bool_t hadroncontaminationsubtracted, Bool_t UnsetCorrelatedErrors) { + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + // Will produce finalSpectrum.root with results inside + // TGraphErrors UnfoldingCorrectedSpectrum -> unfolding procedure (doesn't work in 2D with trunk) + // TGraphErrors AlltogetherSpectrum -> corrected spectrum with other method + // TH1D RatioUnfoldingAlltogetherSpectrum + // THnSparseF UnfoldingCorrectedNotNormalizedSpectrum -> unfolding procedure not yet normalized + // AliCFDataGrid AlltogetherCorrectedNotNormalizedSpectrum -> other method not yet normalized + // + // NameList - possible extension for the full name of the data and MC TLists (e.g. "_PID2" for HFE_Results_PID2) + // CorrType - 0 use fixed TPC PID 0.5 + // 1 use TPC PID efficiency from V0s + // + // Conf - TRD efficiency + // double TRDeffs[5] = {0.7,0.8,0.9,0.75,0.85}; + // conf = 2, TRDeff = 0.8... + // (Only relevant for withtrd = kTRUE) + // + // f/ smoothing kFALSE + // + // g/ Flag for hadron contamination subtraction + // kTRUE means we subtract the hadron contamination + // kFALSE not + // + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + double TRDeffs[5] = {0.7,0.8,0.9,0.75,0.85}; + + gStyle->SetPalette(1); + gStyle->SetOptStat(1111); + gStyle->SetPadBorderMode(0); + gStyle->SetCanvasColor(10); + gStyle->SetPadLeftMargin(0.13); + gStyle->SetPadRightMargin(0.13); + + if (CorrType>1){ + printf("Wrong argument for the type of correction, it is maybe missing, or it has to be <=2!!! \n"); + return; + } + + ///////////////////// + // Take the stuff + ///////////////////// + + printf("Get results for data \n"); + TList *resultsdata = GetResults(filedata,NameList); + if(!resultsdata){ + printf("No output objects for data: Calculation will terminate here\n"); + return; + } + + /////////////////////////////////////////////////////////// + // Event container for the normalization to CINB1 + // Take the number of events as function of z and number of contributors + // For those without primary vertex from tracks, take the fraction in the z range from MC + // For 10cm: LHC10f6a (88.0756%), LHC10f6 (86.7461%) + //////////////////////////////////////////////////////////// + resultsdata->Print(); + + AliCFContainer *containerdata = (AliCFContainer *) resultsdata->FindObject("eventContainer"); + if(!containerdata) { + printf("No container \n"); + return; + } + AliCFDataGrid *dataGrid = (AliCFDataGrid *) GetSpectrum(containerdata,AliHFEcuts::kEventStepZRange); + //dataGrid->PrintBinLimits(); + dataGrid->PrintNBins(); + + // + TH2D *spectrum_zrange = (TH2D *) dataGrid->Project(0,3); + TAxis *axis_0 = spectrum_zrange->GetXaxis(); + TAxis *axis_1 = spectrum_zrange->GetYaxis(); + printf("Number of bins in x %d and in y %d\n",axis_0->GetNbins(),axis_1->GetNbins()); + TH1D *spectrum1Da = (TH1D *) spectrum_zrange->ProjectionX("bin0",1,1); + TH1D *spectrum1Db = (TH1D *) spectrum_zrange->ProjectionX("bin>0",2,12); + TH1D *spectrum1Dc = (TH1D *) spectrum_zrange->ProjectionX("total"); + Double_t nbinbin0 = spectrum1Da->Integral(); + Double_t nbinnobin0 = spectrum1Db->Integral(); + Double_t nbintotal = spectrum1Dc->Integral(); + + //TCanvas *c1teste = new TCanvas("eventcontainertest","eventcontainertest",800,800); + //c1teste->cd(1); + //spectrum_zrange->Draw("colz"); + + + Float_t numberofentries = nbinnobin0+nbinbin0*0.880756; + printf("Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0,nbinnobin0,nbintotal,numberofentries); + + ////////////////////////////// + // Take more stuff + /////////////////////////////// + + printf("Get results for MC \n"); + TList *resultsmc = GetResults(fileMC,NameList); + if(!resultsmc){ + printf("No output objects for mc: Calculation will terminate here\n"); + return; + } + + AliHFEcontainer *datahfecontainer = (AliHFEcontainer *) resultsdata->FindObject("trackContainer"); + if(!datahfecontainer) { + printf("No container for data \n"); + return; + } + AliCFContainer *sumcontainer = datahfecontainer->GetCFContainer("recTrackContReco"); + + //////////////////////////////////////////// + //Plot raw spectrum for TPC TOF scenario + //////////////////////////////////////////// + AliCFDataGrid *dataGrida = 0x0; + if(!withtrd) dataGrida = (AliCFDataGrid *) GetSpectrum(sumcontainer,AliHFEcuts::kStepHFEcutsTRD + 2); + else dataGrida = (AliCFDataGrid *) GetSpectrum(sumcontainer,AliHFEcuts::kStepHFEcutsTRD + 3); + + TH1D *spectrumpt = (TH1D *) dataGrida->Project(0); + CorrectFromTheWidth(spectrumpt); + + TH1D *total = new TH1D("total","",1,0.3,10.3); + total->SetMaximum(1.0e+07); + total->SetMinimum(1000); + total->SetXTitle("p_{T} [GeV/c]"); + total->SetYTitle("dN/dp_{T}[GeV/c]^{-1}"); + total->SetTitleOffset(1.5,"Y"); + //total->Scale(0.9); + total->GetXaxis()->SetRangeUser(0.38,10.3); + + + TCanvas *c1test = new TCanvas("rawspectrum","rawspectrum",800,800); + c1test->cd(1); + gPad->SetLeftMargin(0.13); + gPad->SetLogy(); + gPad->SetTicks(); + //gPad->SetGridx(); + //gPad->SetGridy(); + gPad->SetFillColor(10); + gPad->SetFrameFillColor(10); + gStyle->SetOptStat(0); + gStyle->SetOptFit(1111); + gStyle->SetOptTitle(0); + total->SetStats(0); + spectrumpt->SetStats(0); + total->Draw(); + spectrumpt->Draw("same"); + TPaveText* t1=new TPaveText(0.49,0.45,0.79,0.52,"NDC"); + t1->SetFillStyle(0); + t1->SetBorderSize(0); + t1->AddText(0.,0.,"pp, #sqrt{s} = 7 TeV"); + t1->SetTextColor(kRed); + //t1->SetTextSize(20); + t1->SetTextFont(42); + t1->Draw(); + TPaveText* t2=new TPaveText(0.49,0.35,0.79,0.42,"NDC"); + t2->SetFillStyle(0); + t2->SetBorderSize(0); + t2->AddText(0.,0.,"L = 2.6 nb^{-1}"); + t2->SetTextColor(kRed); + //t1->SetTextSize(20); + t2->SetTextFont(42); + t2->Draw(); + TPaveText* t3=new TPaveText(0.49,0.35,0.79,0.42,"NDC"); + t3->SetFillStyle(0); + t3->SetBorderSize(0); + t3->AddText(0.,0.,"|#eta| < 0.8"); + t3->SetTextColor(kRed); + //t1->SetTextSize(20); + t3->SetTextFont(42); + t3->Draw(); + + ///////////////////////////// + // Check number of events + ///////////////////////////// + + + Int_t numberOfEventsafterallcuts = (Int_t) datahfecontainer->GetNumberOfEvents(); + + printf("Number of events not corrected %d\n",numberOfEventsafterallcuts); + printf("Number of events corrected %f\n",numberofentries); + + AliHFEcontainer *mchfecontainer = (AliHFEcontainer *) resultsmc->FindObject("trackContainer"); + if(!mchfecontainer) { + printf("No mc container \n"); + return; + } + + printf("Find the container V0\n"); + AliHFEcontainer *containerhfeV0 = (AliHFEcontainer *) resultsdata->FindObject("containerV0"); + if(!containerhfeV0) { + printf("No hfe container \n"); + return; + } + + ////////////// + // Correct + ///////////// + + AliHFEspectrum *spectrum = new AliHFEspectrum("HFEspectrum"); + spectrum->SetNbDimensions(1); + // If you want to correct positive (0) or negative (1) separately + //spectrum->SetChargeChoosen(0); + spectrum->SetSmoothing(smoothing); + spectrum->SetUnSetCorrelatedErrors(UnsetCorrelatedErrors); + spectrum->SetDebugLevel(1); + spectrum->SetNumberOfEvents((Int_t)numberofentries); + spectrum->SetDumpToFile(kTRUE); + // True step in MC (events in range +- 10 cm and no pile up) + spectrum->SetMCTruthStep(AliHFEcuts::kStepMCGeneratedZOutNoPileUpCentralityFine); + + // Step where we correct from MC (tracking + TOF) + spectrum->SetMCEffStep(AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1); + printf("!!! Step we correct with MC %d\n!!!",AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1); + + + // Step from data we correct for + //////////****************************////////////////////////////// + if(withtrd) spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 3); + else spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 2); + //////////****************************////////////////////////////// + + // Steps to be corrected with V0 + if (CorrType == 1){ + printf("\n This time we correct with PID efficiency from V0s !!! \n"); + if(withtrd) { + spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2); + spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 3); + } + else { + spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 1); + spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2); + } + } + + if (CorrType < 1){ + + Double_t effTPC = 0.5, + effTRD = TRDeffs[conf-1]; + printf("effTRD = %f\n", effTRD); + // Place for a correction as an efficiency parametrized as function of pt of pt,eta,phi or p=pt + TF1 *hEfficiency = new TF1("efficiency", "[0]", 0., 20.); + if(withtrd) hEfficiency->SetParameter(0, effTPC*effTRD); + else hEfficiency->SetParameter(0, effTPC); + spectrum->SetEfficiencyFunction(hEfficiency); + } + + // Give everything (data container, mc container and V0 data container) + if (CorrType == 1){ + printf("\n This time we correct with PID efficiency from V0s !!! \n"); + spectrum->Init(datahfecontainer,mchfecontainer,containerhfeV0); + } + else { + printf("\n This time we correct with PID efficiency from MC or fixed value !!! \n"); + spectrum->Init(datahfecontainer,mchfecontainer); + } + + // kTRUE means subtract hadron background, kFALSE means do not subtract hadron background + spectrum->Correct(hadroncontaminationsubtracted); + + +} + +//_____________________________________________________________________ +void CorrectForEfficiencyBeauty(const char *filedata,const char *fileMC, const char *fileMCbg) { + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + // Will produce finalSpectrum.root with results inside + // TGraphErrors UnfoldingCorrectedSpectrum -> unfolding procedure (doesn't work in 2D with trunk) + // TGraphErrors AlltogetherSpectrum -> corrected spectrum with other method + // TH1D RatioUnfoldingAlltogetherSpectrum + // THnSparseF UnfoldingCorrectedNotNormalizedSpectrum -> unfolding procedure not yet normalized + // AliCFDataGrid AlltogetherCorrectedNotNormalizedSpectrum -> other method not yet normalized + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + gStyle->SetPalette(1); + gStyle->SetOptStat(1111); + gStyle->SetPadBorderMode(0); + gStyle->SetCanvasColor(10); + gStyle->SetPadLeftMargin(0.13); + gStyle->SetPadRightMargin(0.13); + + ///////////////////// + // Take the stuff + ///////////////////// + + TList *resultsdata = GetResults(filedata,"_PID2"); + //TList *resultsdata = GetResults(filedata); + if(!resultsdata){ + printf("No output objects for data: Calculation will terminate here\n"); + return; + } + /////////////////////////////////////////////////////////// + // Event container for the normalization to CINB1 + // Take the number of events as function of z and number of contributors + // For those without primary vertex from tracks, take the fraction in the z range from MC + // For 10cm: LHC10f6a (88.0756%), LHC10f6 (86.7461%) + //////////////////////////////////////////////////////////// + + AliCFContainer *containerdata = (AliCFContainer *) resultsdata->FindObject("eventContainer"); + if(!containerdata) { + printf("No container \n"); + return; + } + AliCFDataGrid *dataGrid = (AliCFDataGrid *) GetSpectrum(containerdata,AliHFEcuts::kEventStepZRange); + TH2D *spectrum_zrange = (TH2D *) dataGrid->Project(0,2); + TH1D *spectrum1Da = (TH1D *) spectrum_zrange->ProjectionX("bin0",1,1); + TH1D *spectrum1Db = (TH1D *) spectrum_zrange->ProjectionX("bin>0",2,12); + TH1D *spectrum1Dc = (TH1D *) spectrum_zrange->ProjectionX("total"); + Double_t nbinbin0 = spectrum1Da->Integral(); + Double_t nbinnobin0 = spectrum1Db->Integral(); + Double_t nbintotal = spectrum1Dc->Integral(); + + Float_t numberofentries = nbinnobin0+nbinbin0*0.880756; + printf("Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0,nbinnobin0,nbintotal,numberofentries); + + + AliHFEcontainer *datahfecontainer = (AliHFEcontainer *) resultsdata->FindObject("trackContainer"); + if(!datahfecontainer) { + printf("No container for data \n"); + return; + } + + + ////////////////////////////// + // Check MC # of events + /////////////////////////////// + + TList *resultsmc = GetResults(fileMC,"_PID2"); + if(!resultsmc){ + printf("No output objects for mc: Calculation will terminate here\n"); + return; + } + + AliCFContainer *containermc = (AliCFContainer *) resultsmc->FindObject("eventContainer"); + if(!containermc) { + printf("No container \n"); + return; + } + AliCFDataGrid *mcGrid = (AliCFDataGrid *) GetSpectrum(containermc,AliHFEcuts::kEventStepZRange); + TH2D *spectrum_zrangemc = (TH2D *) mcGrid->Project(0,2); + TH1D *spectrum1Damc = (TH1D *) spectrum_zrangemc->ProjectionX("bin0",1,1); + TH1D *spectrum1Dbmc = (TH1D *) spectrum_zrangemc->ProjectionX("bin>0",2,12); + TH1D *spectrum1Dcmc = (TH1D *) spectrum_zrangemc->ProjectionX("total"); + Double_t nbinbin0mc = spectrum1Damc->Integral(); + Double_t nbinnobin0mc = spectrum1Dbmc->Integral(); + Double_t nbintotalmc = spectrum1Dcmc->Integral(); + + Float_t numberofentriesmc = nbinnobin0mc+nbinbin0mc*0.880756; + printf("MC: Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0mc,nbinnobin0mc,nbintotalmc,numberofentriesmc); + + + + ///////////////////////////// + // Check number of events + ///////////////////////////// + + Int_t numberOfEventsafterallcuts = (Int_t) datahfecontainer->GetNumberOfEvents(); + + printf("Number of events not corrected %d\n",numberOfEventsafterallcuts); + printf("Number of events corrected %f\n",numberofentries); + + AliHFEcontainer *mchfecontainer = (AliHFEcontainer *) resultsmc->FindObject("trackContainer"); + if(!mchfecontainer) { + printf("No mc container \n"); + return; + } + + printf("Find the container V0\n"); + AliHFEcontainer *containerhfeV0 = (AliHFEcontainer *) resultsdata->FindObject("containerV0"); + if(!containerhfeV0) { + printf("No hfe container \n"); + return; + } + + // nonHFE backgrounds + TList *resultsmcbg = GetResults(fileMCbg,"_PID2"); + if(!resultsmcbg){ + printf("No output objects for mc: Calculation will terminate here\n"); return; + } + AliHFEcontainer *mcbghfecontainer = (AliHFEcontainer *) resultsmcbg->FindObject("trackContainer"); + if(!mcbghfecontainer) { + printf("No mc container \n"); + return; + } + + AliCFContainer *containermcbg = (AliCFContainer *) resultsmcbg->FindObject("eventContainer"); + if(!containermcbg) { + printf("No container \n"); + return; + } + + AliCFDataGrid *mcbgGrid = (AliCFDataGrid *) GetSpectrum(containermcbg,AliHFEcuts::kEventStepZRange); + TH2D *spectrum_zrangemcbg = (TH2D *) mcbgGrid->Project(0,2); + TH1D *spectrum1Damcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("bin0",1,1); + TH1D *spectrum1Dbmcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("bin>0",2,12); + TH1D *spectrum1Dcmcbg = (TH1D *) spectrum_zrangemcbg->ProjectionX("total"); + Double_t nbinbin0mcbg = spectrum1Damcbg->Integral(); + Double_t nbinnobin0mcbg = spectrum1Dbmcbg->Integral(); + Double_t nbintotalmcbg = spectrum1Dcmcbg->Integral(); + + Float_t numberofentriesmcbg = nbinnobin0mcbg+nbinbin0mcbg*0.880756; + printf("MCbg: Number in bin0 %f, number out %f, total %f, normalized %f\n",nbinbin0mcbg,nbinnobin0mcbg,nbintotalmcbg,numberofentriesmcbg); + + + // hadron contamination after IP cuts + TList *hfeqa = GetQA(fileMC,"_PID2"); + THnSparseF* hsHadronEffbyIPcut = (THnSparseF* )GetHadronEffbyIPcut(hfeqa); + + ////////////// + // Correct + ///////////// + + AliHFEspectrum *spectrum = new AliHFEspectrum("HFEspectrum"); + + spectrum->SetBeautyAnalysis(); + // Enable background subtraction + spectrum->EnableIPanaHadronBgSubtract(); + spectrum->EnableIPanaCharmBgSubtract(); + spectrum->EnableIPanaConversionBgSubtract(); + spectrum->EnableIPanaNonHFEBgSubtract(); + //spectrum->SetNonHFEBackground2ndMethod(); + + spectrum->SetNbDimensions(1); + // If you want to correct positive (0) or negative (1) separately + //spectrum->SetChargeChoosen(0); + spectrum->SetDebugLevel(1); + spectrum->SetNumberOfEvents((Int_t)numberofentries); + spectrum->SetNumberOfMCEvents((Int_t)numberofentriesmc); + spectrum->SetNumberOfMC2Events((Int_t)numberofentriesmcbg); + spectrum->SetDumpToFile(smoothing); + // True step in MC (events in range +- 10 cm and no pile up) + spectrum->SetMCTruthStep(AliHFEcuts::kStepMCGeneratedZOutNoPileUpCentralityFine); + // Step where we correct from MC (tracking + TOF) + spectrum->SetMCEffStep(AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepHFEcutsTRD + 1); + // Step from data we correct for + spectrum->SetStepToCorrect(AliHFEcuts::kStepHFEcutsTRD + 3); // +3 = tracking + TOF + TPC + IPcut + // Steps to be corrected with V0 (TPC PID only) + spectrum->SetStepBeforeCutsV0(AliHFEcuts::kStepHFEcutsTRD + 1); + spectrum->SetStepAfterCutsV0(AliHFEcuts::kStepHFEcutsTRD + 2); + + spectrum->SetHadronEffbyIPcut(hsHadronEffbyIPcut); + // Give everything (data container, mc container and V0 data container) + spectrum->Init(datahfecontainer,mchfecontainer,containerhfeV0,mcbghfecontainer); + + // kTRUE means subtract hadron background, kFALSE means do not subtract hadron background + spectrum->CorrectBeauty(kTRUE); + +} + +//_____________________________________________________________________ +TList *GetResults(const Char_t *testfile,const Char_t *plus){ + // + // read output + // + TFile *f = TFile::Open(testfile); + if(!f || f->IsZombie()){ + printf("File not readable\n"); + return 0x0; + } + TString name(plus); + printf("Name of TList %s\n",(const char*)name); + TList *l = dynamic_cast(f->Get((const char*)name)); + if(!l){ + printf("Results list was not found\n"); + f->Close(); delete f; + return 0x0; + } + TList *returnlist = dynamic_cast(l->Clone()); + f->Close(); delete f; + return returnlist; +} + +//_____________________________________________________________________ +TList *GetQA(const Char_t *testfile,const Char_t *plus){ + // + // read output + // + TFile *f = TFile::Open(testfile); + if(!f || f->IsZombie()){ + printf("File not readable\n"); + return 0x0; + } + TString name("HFE_QA"); + name += plus; + printf("Name of TList %s\n",(const char*)name); + TList *l = dynamic_cast(f->Get((const char*)name)); + if(!l){ + printf("QA list was not found\n"); + f->Close(); delete f; + return 0x0; + } + TList *returnlist = dynamic_cast(l->Clone()); + f->Close(); delete f; + return returnlist; +} + +//_____________________________________________________________________ +THnSparseF* GetHadronEffbyIPcut(TList *hfeqa){ + + + // get hadron reduction factors due to the IP cuts + TList* tl=(TList*)hfeqa->FindObject("list_TaskQA"); + TH1F* hbefore=(TH1F*)tl->FindObject("hadronsBeforeIPcut"); + TH1F* hafter=(TH1F*)tl->FindObject("hadronsAfterIPcut"); + TH1F* hreduction= (TH1F*)hafter->Clone("hreduction"); + hbefore->Sumw2(); + hafter->Sumw2(); + hreduction->Sumw2(); + hreduction->Divide(hbefore); + + Double_t* binEdges[0]; + Int_t hnBin = hreduction->GetNbinsX(); + Int_t nBin[1] = {hnBin}; + + for(int i=0; iGetBinLowEdge(i+1); + } + binEdges[0][nBin[0]] = hreduction->GetBinLowEdge(nBin[0]) + hreduction->GetBinWidth(nBin[0]); + + THnSparseF* hsreduction = new THnSparseF("hadroncontamin", "hadroncontamin; pt[GeV/c]", 1, nBin); + hsreduction->SetBinEdges(0, binEdges[0]); + + Double_t dataE[1]; + Double_t yval; + for(int i=0; iGetBinCenter(i+1); + yval=hreduction->GetBinContent(i+1); + hsreduction->Fill(dataE,yval); + } + + Int_t* ibins; + ibins = new Int_t[nBin[0] + 1]; + hsreduction->SetBinError(ibins,0); + + + return hsreduction; +} + +//_________________________________________________________________________ +TObject* GetSpectrum(AliCFContainer *c, Int_t step) { + AliCFDataGrid* data = new AliCFDataGrid("data","",*c,step); + //data->SetMeasured(step); + return data; +} +//___________________________________________________________________________ +void CorrectFromTheWidth(TH1D *h1) { + // + // Correct from the width of the bins --> dN/dp_{T} (GeV/c)^{-1} + // + + TAxis *axis = h1->GetXaxis(); + Int_t nbinX = h1->GetNbinsX(); + + for(Int_t i = 1; i <= nbinX; i++) { + + Double_t width = axis->GetBinWidth(i); + Double_t content = h1->GetBinContent(i); + Double_t error = h1->GetBinError(i); + h1->SetBinContent(i,content/width); + h1->SetBinError(i,error/width); + } + +} diff --git a/PWGHF/hfe/macros/configs/PbPb/ConfigHFECalSys.C b/PWGHF/hfe/macros/configs/PbPb/ConfigHFECalSys.C index 0dfac732a13..ab7d803faaa 100644 --- a/PWGHF/hfe/macros/configs/PbPb/ConfigHFECalSys.C +++ b/PWGHF/hfe/macros/configs/PbPb/ConfigHFECalSys.C @@ -1,69 +1,69 @@ -AliAnalysisTaskHFECal* ConfigHFECalSys(Bool_t useMC, int TPCclust, int TPCclustPID, int Nits, int ITSstat, int QAhist){ - // - // HFE standard task configuration - // - - Bool_t kAnalyseTaggedTracks = kTRUE; - - AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); - hfecuts->CreateStandardCuts(); - hfecuts->SetMinNClustersTPC(TPCclust); - hfecuts->SetMinNClustersTPCPID(TPCclustPID); - hfecuts->SetMinRatioTPCclusters(0.6); - hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); - hfecuts->SetMinNClustersITS(Nits); - if(ITSstat==0)hfecuts->SetCutITSpixel(AliHFEextraCuts::kAny); - if(ITSstat==1)hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst); - hfecuts->SetCheckITSLayerStatus(kFALSE); - hfecuts->SetVertexRange(10.); - hfecuts->SetTOFPIDStep(kFALSE); - hfecuts->SetPtRange(2, 50); - hfecuts->SetMaxImpactParam(3.,3.); - - AliAnalysisTaskHFECal *task = new AliAnalysisTaskHFECal("HFEanalysisEMCal"); - printf("task ------------------------ %p\n ", task); - task->SetHFECuts(hfecuts); - task->SetInvariantMassCut(0.05); - printf("<<<<<< ------------------ QA status %d",QAhist); - task->SetQAHist(QAhist); - - // Define PID - AliHFEpid *pid = task->GetPID(); - if(useMC) pid->SetHasMCData(kTRUE); - pid->AddDetector("TPC", 0); - pid->AddDetector("EMCAL", 1); - - Double_t params[4]; - char *cutmodel; - if(useMC){ - // Monte-Carlo needs modelling of the falling mean with momentum at low momentum - // for high momentum it is consistent with a flat -0.94 - //cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; - //Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; - //for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; - cutmodel = "pol0"; - params[0] = -1.0; //sigma min - } else { - // Data is consistent with a flat 0.12 - cutmodel = "pol0"; - //params[0] = -0.0015; - //params[0] = -3.0; - //params[0] = -0.05; //sigma min - params[0] = -1.0; //sigma min - } - //pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); - for(Int_t a=0;a<11;a++)pid->ConfigureTPCcentralityCut(a,cutmodel,params,3.0); - - - // change E/p cuts - AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); - emcpid->SetEoPMax(1.3); - emcpid->SetEoPMim(0.9); - - printf("*************************************\n"); - printf("Configuring standard Task:\n"); -// task->PrintStatus(); - pid->PrintStatus(); - printf("*************************************\n"); - return task; -} +AliAnalysisTaskHFECal* ConfigHFECalSys(Bool_t useMC, int TPCclust, int TPCclustPID, int Nits, int ITSstat, int QAhist){ + // + // HFE standard task configuration + // + + Bool_t kAnalyseTaggedTracks = kTRUE; + + AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); + hfecuts->CreateStandardCuts(); + hfecuts->SetMinNClustersTPC(TPCclust); + hfecuts->SetMinNClustersTPCPID(TPCclustPID); + hfecuts->SetMinRatioTPCclusters(0.6); + hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); + hfecuts->SetMinNClustersITS(Nits); + if(ITSstat==0)hfecuts->SetCutITSpixel(AliHFEextraCuts::kAny); + if(ITSstat==1)hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst); + hfecuts->SetCheckITSLayerStatus(kFALSE); + hfecuts->SetVertexRange(10.); + hfecuts->SetTOFPIDStep(kFALSE); + hfecuts->SetPtRange(2, 50); + hfecuts->SetMaxImpactParam(3.,3.); + + AliAnalysisTaskHFECal *task = new AliAnalysisTaskHFECal("HFEanalysisEMCal"); + printf("task ------------------------ %p\n ", task); + task->SetHFECuts(hfecuts); + task->SetInvariantMassCut(0.05); + printf("<<<<<< ------------------ QA status %d",QAhist); + task->SetQAHist(QAhist); + + // Define PID + AliHFEpid *pid = task->GetPID(); + if(useMC) pid->SetHasMCData(kTRUE); + pid->AddDetector("TPC", 0); + pid->AddDetector("EMCAL", 1); + + Double_t params[4]; + char *cutmodel; + if(useMC){ + // Monte-Carlo needs modelling of the falling mean with momentum at low momentum + // for high momentum it is consistent with a flat -0.94 + //cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; + //Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; + //for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; + cutmodel = "pol0"; + params[0] = -1.0; //sigma min + } else { + // Data is consistent with a flat 0.12 + cutmodel = "pol0"; + //params[0] = -0.0015; + //params[0] = -3.0; + //params[0] = -0.05; //sigma min + params[0] = -1.0; //sigma min + } + //pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); + for(Int_t a=0;a<11;a++)pid->ConfigureTPCcentralityCut(a,cutmodel,params,3.0); + + + // change E/p cuts + AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); + emcpid->SetEoPMax(1.3); + emcpid->SetEoPMim(0.9); + + printf("*************************************\n"); + printf("Configuring standard Task:\n"); +// task->PrintStatus(); + pid->PrintStatus(); + printf("*************************************\n"); + return task; +} diff --git a/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorl.C b/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorl.C index d459c79b4c1..dc38d3a9cf9 100644 --- a/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorl.C +++ b/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorl.C @@ -1,68 +1,68 @@ -AliAnalysisTaskElecHadronCorrel* ConfigHFEElecHadronCorl(Bool_t useMC){ - // - // HFE standard task configuration - // - - Bool_t kAnalyseTaggedTracks = kTRUE; - - AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); - hfecuts->CreateStandardCuts(); - //hfecuts->SetTPCiter1(kTRUE); - hfecuts->SetMinNClustersTPC(120); - hfecuts->SetMinRatioTPCclusters(0.6); - //hfecuts->SetTPCmodes(AliHFEextraCuts::kCrossedRows, AliHFEextraCuts::kFoundOverCR); - hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); - //hfecuts->SetUseMixedVertex(kTRUE); - - hfecuts->SetMinNClustersITS(3); - hfecuts->SetCutITSpixel(AliHFEextraCuts::kAny); //shud be put back - hfecuts->SetCheckITSLayerStatus(kFALSE); // shud be put back -// hfecuts->UnsetVertexRequirement(); - hfecuts->SetVertexRange(10.); - //hfecuts->SetSigmaToVertex(10); - hfecuts->SetTOFPIDStep(kFALSE); -// hfecuts->SetQAOn(); - hfecuts->SetPtRange(0, 30); - hfecuts->SetMaxImpactParam(1,2); - - AliAnalysisTaskElecHadronCorrel *task = new AliAnalysisTaskElecHadronCorrel("HFE-hadron correlations"); - printf("task ------------------------ %p\n ", task); - task->SetHFECuts(hfecuts); - task->SetInvariantMassCut(0.05); -// task->SetRemovePileUp(kTRUE); - - // Define PID - AliHFEpid *pid = task->GetPID(); - if(useMC) pid->SetHasMCData(kTRUE); - pid->AddDetector("TPC", 0); - pid->AddDetector("EMCAL", 1); - // change E/p cuts - AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); - emcpid->SetEoPMax(1.2); - emcpid->SetEoPMim(0.8); - - Double_t params[4]; - char *cutmodel; - if(useMC){ - // Monte-Carlo needs modelling of the falling mean with momentum at low momentum - // for high momentum it is consistent with a flat -0.94 - cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; - Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; - for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; - } else { - // Data is consistent with a flat 0.12 - cutmodel = "pol0"; - //params[0] = -0.0015; - //params[0] = -3.0; - //params[0] = -0.05; //sigma min - params[0] = -1.0; //sigma min - } - pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); - - printf("*************************************\n"); - printf("Configuring standard Task:\n"); -// task->PrintStatus(); - pid->PrintStatus(); - printf("*************************************\n"); - return task; -} +AliAnalysisTaskElecHadronCorrel* ConfigHFEElecHadronCorl(Bool_t useMC){ + // + // HFE standard task configuration + // + + Bool_t kAnalyseTaggedTracks = kTRUE; + + AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); + hfecuts->CreateStandardCuts(); + //hfecuts->SetTPCiter1(kTRUE); + hfecuts->SetMinNClustersTPC(120); + hfecuts->SetMinRatioTPCclusters(0.6); + //hfecuts->SetTPCmodes(AliHFEextraCuts::kCrossedRows, AliHFEextraCuts::kFoundOverCR); + hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); + //hfecuts->SetUseMixedVertex(kTRUE); + + hfecuts->SetMinNClustersITS(3); + hfecuts->SetCutITSpixel(AliHFEextraCuts::kAny); //shud be put back + hfecuts->SetCheckITSLayerStatus(kFALSE); // shud be put back +// hfecuts->UnsetVertexRequirement(); + hfecuts->SetVertexRange(10.); + //hfecuts->SetSigmaToVertex(10); + hfecuts->SetTOFPIDStep(kFALSE); +// hfecuts->SetQAOn(); + hfecuts->SetPtRange(0, 30); + hfecuts->SetMaxImpactParam(1,2); + + AliAnalysisTaskElecHadronCorrel *task = new AliAnalysisTaskElecHadronCorrel("HFE-hadron correlations"); + printf("task ------------------------ %p\n ", task); + task->SetHFECuts(hfecuts); + task->SetInvariantMassCut(0.05); +// task->SetRemovePileUp(kTRUE); + + // Define PID + AliHFEpid *pid = task->GetPID(); + if(useMC) pid->SetHasMCData(kTRUE); + pid->AddDetector("TPC", 0); + pid->AddDetector("EMCAL", 1); + // change E/p cuts + AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); + emcpid->SetEoPMax(1.2); + emcpid->SetEoPMim(0.8); + + Double_t params[4]; + char *cutmodel; + if(useMC){ + // Monte-Carlo needs modelling of the falling mean with momentum at low momentum + // for high momentum it is consistent with a flat -0.94 + cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; + Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; + for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; + } else { + // Data is consistent with a flat 0.12 + cutmodel = "pol0"; + //params[0] = -0.0015; + //params[0] = -3.0; + //params[0] = -0.05; //sigma min + params[0] = -1.0; //sigma min + } + pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); + + printf("*************************************\n"); + printf("Configuring standard Task:\n"); +// task->PrintStatus(); + pid->PrintStatus(); + printf("*************************************\n"); + return task; +} diff --git a/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorrelPbPb.C b/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorrelPbPb.C index b1e35bc7d55..5c216e73edc 100644 --- a/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorrelPbPb.C +++ b/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecHadronCorrelPbPb.C @@ -1,110 +1,110 @@ -AliAnalysisTaskElecHadronCorrel* ConfigHFEElecHadronCorrelPbPb(Bool_t useMC, - Bool_t EventTrigSelMB=kTRUE, - Bool_t TrigSelCen = kTRUE, - Double_t CentMin = 0, - Double_t CentMax = 7, - Double_t TPCNsigMinE = -2, - Double_t TPCNsigMaxE = 2, - Double_t TPCNsigMinH = -10, - Double_t TPCNsigMaxH = -3.5, - Double_t SSM02Min = 0.03, - Double_t SSM02Max = 0.5, - Double_t SSM20Min = 0.03, - Double_t SSM20Max = 0.3, - Double_t Disp = 1, - Double_t EovPMin = 0.8, - Double_t EovPMax = 1.2, - Double_t InvM = 0.1, - const char* CentralityMet = "VOM", - Int_t TPCNClsEle = 100, - Int_t TPCNClsHad = 80, - Bool_t AssoEleITSref=kTRUE, - Int_t AssoElecTPCNCls=80, - TString ContNameExt = "Central", - TString TaskName="hfeCorrl"){ - -// - // HFE standard task configuration - // - - Bool_t kAnalyseTaggedTracks = kTRUE; - - AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); -// hfecuts->CreateStandardCuts(); - hfecuts->SetMinNClustersTPC(TPCNClsEle); - hfecuts->SetMinNClustersITS(3); - hfecuts->SetMinNTrackletsTRD(0); - hfecuts->SetMinRatioTPCclusters(0.6); - // hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); - hfecuts->SetRequireITSPixel(); - hfecuts->SetCutITSpixel(AliHFEextraCuts::kAny); - hfecuts->SetMaxChi2perClusterITS(-1); - hfecuts->SetMaxChi2perClusterTPC(3.5); - hfecuts->SetCheckITSLayerStatus(kFALSE); // shud be put back -// hfecuts->UnsetVertexRequirement(); - hfecuts->SetVertexRange(10.); - hfecuts->SetRequireSigmaToVertex(); - //hfecuts->SetSigmaToVertex(10); - hfecuts->SetTOFPIDStep(kFALSE); -// hfecuts->SetQAOn(); - hfecuts->SetPtRange(0, 30); - - TString taskName = TaskName; - - AliAnalysisTaskElecHadronCorrel *task = new AliAnalysisTaskElecHadronCorrel(taskName); - printf("task ------------------------ %p\n ", task); - task->SetHFECuts(hfecuts); -// task->SetRemovePileUp(kTRUE); -// task->SetInvariantMassCut(0.1); - - task->SetEventTriggerSelectionMB(EventTrigSelMB); - task->SetTriggerSelection(TrigSelCen); - task->SetCentralityParameters(CentMin, CentMax, CentralityMet); - task->SetInvariantMassCut(InvM); - task->SetAssoElecTPCNCls(AssoElecTPCNCls); - task->SetTPCnsigmaCutsElecSelection(TPCNsigMinE,TPCNsigMaxE); - task->SetTPCnsigmaCutsHadSelection(TPCNsigMinH,TPCNsigMaxH); - task->SetShowerShapeCutsM02(SSM02Min,SSM02Max); - task->SetShowerShapeCutsM20(SSM20Min,SSM20Max); - task->SetShowerShapeCutsDisp(0,Disp); - task->SetEovPCuts(EovPMin,EovPMax); - task->SetRejectKinkMother(kTRUE); - task->SetTPCNClsHad(TPCNClsHad); - task->SetAssoElecITSrefit(AssoEleITSref); - - // Define PID - AliHFEpid *pid = task->GetPID(); - if(useMC) pid->SetHasMCData(kTRUE); - pid->AddDetector("TPC", 0); - pid->AddDetector("EMCAL", 1); - /* - // change E/p cuts - AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); - emcpid->SetEoPMax(1.2); - emcpid->SetEoPMim(0.8); - - Double_t params[4]; - char *cutmodel; - if(useMC){ - // Monte-Carlo needs modelling of the falling mean with momentum at low momentum - // for high momentum it is consistent with a flat -0.94 - cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; - Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; - for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; - } else { - // Data is consistent with a flat 0.12 - cutmodel = "pol0"; - //params[0] = -0.0015; - //params[0] = -3.0; - params[0] = -1.0; //sigma min - } -// pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); - pid->ConfigureTPCasymmetric(0,30,-1,3.0); -*/ - printf("*************************************\n"); - printf("Configuring standard Task:\n"); -// task->PrintStatus(); - pid->PrintStatus(); - printf("*************************************\n"); - return task; -} +AliAnalysisTaskElecHadronCorrel* ConfigHFEElecHadronCorrelPbPb(Bool_t useMC, + Bool_t EventTrigSelMB=kTRUE, + Bool_t TrigSelCen = kTRUE, + Double_t CentMin = 0, + Double_t CentMax = 7, + Double_t TPCNsigMinE = -2, + Double_t TPCNsigMaxE = 2, + Double_t TPCNsigMinH = -10, + Double_t TPCNsigMaxH = -3.5, + Double_t SSM02Min = 0.03, + Double_t SSM02Max = 0.5, + Double_t SSM20Min = 0.03, + Double_t SSM20Max = 0.3, + Double_t Disp = 1, + Double_t EovPMin = 0.8, + Double_t EovPMax = 1.2, + Double_t InvM = 0.1, + const char* CentralityMet = "VOM", + Int_t TPCNClsEle = 100, + Int_t TPCNClsHad = 80, + Bool_t AssoEleITSref=kTRUE, + Int_t AssoElecTPCNCls=80, + TString ContNameExt = "Central", + TString TaskName="hfeCorrl"){ + +// + // HFE standard task configuration + // + + Bool_t kAnalyseTaggedTracks = kTRUE; + + AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); +// hfecuts->CreateStandardCuts(); + hfecuts->SetMinNClustersTPC(TPCNClsEle); + hfecuts->SetMinNClustersITS(3); + hfecuts->SetMinNTrackletsTRD(0); + hfecuts->SetMinRatioTPCclusters(0.6); + // hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); + hfecuts->SetRequireITSPixel(); + hfecuts->SetCutITSpixel(AliHFEextraCuts::kAny); + hfecuts->SetMaxChi2perClusterITS(-1); + hfecuts->SetMaxChi2perClusterTPC(3.5); + hfecuts->SetCheckITSLayerStatus(kFALSE); // shud be put back +// hfecuts->UnsetVertexRequirement(); + hfecuts->SetVertexRange(10.); + hfecuts->SetRequireSigmaToVertex(); + //hfecuts->SetSigmaToVertex(10); + hfecuts->SetTOFPIDStep(kFALSE); +// hfecuts->SetQAOn(); + hfecuts->SetPtRange(0, 30); + + TString taskName = TaskName; + + AliAnalysisTaskElecHadronCorrel *task = new AliAnalysisTaskElecHadronCorrel(taskName); + printf("task ------------------------ %p\n ", task); + task->SetHFECuts(hfecuts); +// task->SetRemovePileUp(kTRUE); +// task->SetInvariantMassCut(0.1); + + task->SetEventTriggerSelectionMB(EventTrigSelMB); + task->SetTriggerSelection(TrigSelCen); + task->SetCentralityParameters(CentMin, CentMax, CentralityMet); + task->SetInvariantMassCut(InvM); + task->SetAssoElecTPCNCls(AssoElecTPCNCls); + task->SetTPCnsigmaCutsElecSelection(TPCNsigMinE,TPCNsigMaxE); + task->SetTPCnsigmaCutsHadSelection(TPCNsigMinH,TPCNsigMaxH); + task->SetShowerShapeCutsM02(SSM02Min,SSM02Max); + task->SetShowerShapeCutsM20(SSM20Min,SSM20Max); + task->SetShowerShapeCutsDisp(0,Disp); + task->SetEovPCuts(EovPMin,EovPMax); + task->SetRejectKinkMother(kTRUE); + task->SetTPCNClsHad(TPCNClsHad); + task->SetAssoElecITSrefit(AssoEleITSref); + + // Define PID + AliHFEpid *pid = task->GetPID(); + if(useMC) pid->SetHasMCData(kTRUE); + pid->AddDetector("TPC", 0); + pid->AddDetector("EMCAL", 1); + /* + // change E/p cuts + AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); + emcpid->SetEoPMax(1.2); + emcpid->SetEoPMim(0.8); + + Double_t params[4]; + char *cutmodel; + if(useMC){ + // Monte-Carlo needs modelling of the falling mean with momentum at low momentum + // for high momentum it is consistent with a flat -0.94 + cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; + Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; + for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; + } else { + // Data is consistent with a flat 0.12 + cutmodel = "pol0"; + //params[0] = -0.0015; + //params[0] = -3.0; + params[0] = -1.0; //sigma min + } +// pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); + pid->ConfigureTPCasymmetric(0,30,-1,3.0); +*/ + printf("*************************************\n"); + printf("Configuring standard Task:\n"); +// task->PrintStatus(); + pid->PrintStatus(); + printf("*************************************\n"); + return task; +} diff --git a/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecV2.C b/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecV2.C index 57c37c00969..7b443030de7 100644 --- a/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecV2.C +++ b/PWGHF/hfe/macros/configs/PbPb/ConfigHFEElecV2.C @@ -1,60 +1,60 @@ -AliAnalysisTaskElecV2* ConfigHFEElecV2(Bool_t useMC){ - // - // HFE standard task configuration - // - - Bool_t kAnalyseTaggedTracks = kTRUE; - - AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); - hfecuts->CreateStandardCuts(); - hfecuts->SetMinNClustersTPC(100); - hfecuts->SetMinRatioTPCclusters(0.6); - hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); - hfecuts->SetMinNClustersITS(3); - hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst); - hfecuts->SetCheckITSLayerStatus(kFALSE); - hfecuts->SetVertexRange(10.); - hfecuts->SetTOFPIDStep(kFALSE); - hfecuts->SetPtRange(2, 50); - hfecuts->SetMaxImpactParam(1,2); - - AliAnalysisTaskElecV2 *task = new AliAnalysisTaskElecV2("HFE v2"); - printf("task ------------------------ %p\n ", task); - task->SetHFECuts(hfecuts); - task->SetInvariantMassCut(0.05); - - // Define PID - AliHFEpid *pid = task->GetPID(); - if(useMC) pid->SetHasMCData(kTRUE); - pid->AddDetector("TPC", 0); - pid->AddDetector("EMCAL", 1); - // change E/p cuts - AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); - emcpid->SetEoPMax(1.2); - emcpid->SetEoPMim(0.9); - - Double_t params[4]; - char *cutmodel; - if(useMC){ - // Monte-Carlo needs modelling of the falling mean with momentum at low momentum - // for high momentum it is consistent with a flat -0.94 - cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; - Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; - for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; - } else { - // Data is consistent with a flat 0.12 - cutmodel = "pol0"; - //params[0] = -0.0015; - //params[0] = -3.0; - //params[0] = -0.05; //sigma min - params[0] = -1.0; //sigma min - } - pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); - - printf("*************************************\n"); - printf("Configuring standard Task:\n"); -// task->PrintStatus(); - pid->PrintStatus(); - printf("*************************************\n"); - return task; -} +AliAnalysisTaskElecV2* ConfigHFEElecV2(Bool_t useMC){ + // + // HFE standard task configuration + // + + Bool_t kAnalyseTaggedTracks = kTRUE; + + AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); + hfecuts->CreateStandardCuts(); + hfecuts->SetMinNClustersTPC(100); + hfecuts->SetMinRatioTPCclusters(0.6); + hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); + hfecuts->SetMinNClustersITS(3); + hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst); + hfecuts->SetCheckITSLayerStatus(kFALSE); + hfecuts->SetVertexRange(10.); + hfecuts->SetTOFPIDStep(kFALSE); + hfecuts->SetPtRange(2, 50); + hfecuts->SetMaxImpactParam(1,2); + + AliAnalysisTaskElecV2 *task = new AliAnalysisTaskElecV2("HFE v2"); + printf("task ------------------------ %p\n ", task); + task->SetHFECuts(hfecuts); + task->SetInvariantMassCut(0.05); + + // Define PID + AliHFEpid *pid = task->GetPID(); + if(useMC) pid->SetHasMCData(kTRUE); + pid->AddDetector("TPC", 0); + pid->AddDetector("EMCAL", 1); + // change E/p cuts + AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); + emcpid->SetEoPMax(1.2); + emcpid->SetEoPMim(0.9); + + Double_t params[4]; + char *cutmodel; + if(useMC){ + // Monte-Carlo needs modelling of the falling mean with momentum at low momentum + // for high momentum it is consistent with a flat -0.94 + cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; + Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; + for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; + } else { + // Data is consistent with a flat 0.12 + cutmodel = "pol0"; + //params[0] = -0.0015; + //params[0] = -3.0; + //params[0] = -0.05; //sigma min + params[0] = -1.0; //sigma min + } + pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); + + printf("*************************************\n"); + printf("Configuring standard Task:\n"); +// task->PrintStatus(); + pid->PrintStatus(); + printf("*************************************\n"); + return task; +} diff --git a/PWGHF/hfe/macros/configs/PbPb/ConfigHFE_FLOW_TPCEMCal_EP.C b/PWGHF/hfe/macros/configs/PbPb/ConfigHFE_FLOW_TPCEMCal_EP.C index c77789e59b0..eac88eff7b7 100644 --- a/PWGHF/hfe/macros/configs/PbPb/ConfigHFE_FLOW_TPCEMCal_EP.C +++ b/PWGHF/hfe/macros/configs/PbPb/ConfigHFE_FLOW_TPCEMCal_EP.C @@ -1,60 +1,60 @@ -AliAnalysisTaskFlowTPCEMCalEP* ConfigHFE_FLOW_TPCEMCal_EP(Bool_t useMC){ - // - // HFE standard task configuration - // - - Bool_t kAnalyseTaggedTracks = kTRUE; - - AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); - hfecuts->CreateStandardCuts(); - hfecuts->SetMinNClustersTPC(100); - hfecuts->SetMinRatioTPCclusters(0.6); - hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); - hfecuts->SetMinNClustersITS(3); - hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst); - hfecuts->SetCheckITSLayerStatus(kFALSE); - hfecuts->SetVertexRange(10.); - hfecuts->SetTOFPIDStep(kFALSE); - hfecuts->SetPtRange(2, 50); - hfecuts->SetMaxImpactParam(1,2); - - AliAnalysisTaskFlowTPCEMCalEP *task = new AliAnalysisTaskFlowTPCEMCalEP("HFE v2"); - printf("task ------------------------ %p\n ", task); - task->SetHFECuts(hfecuts); - task->SetInvariantMassCut(0.05); - - // Define PID - AliHFEpid *pid = task->GetPID(); - if(useMC) pid->SetHasMCData(kTRUE); - pid->AddDetector("TPC", 0); - pid->AddDetector("EMCAL", 1); - // change E/p cuts - AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); - emcpid->SetEoPMax(1.2); - emcpid->SetEoPMim(0.9); - - Double_t params[4]; - char *cutmodel; - if(useMC){ - // Monte-Carlo needs modelling of the falling mean with momentum at low momentum - // for high momentum it is consistent with a flat -0.94 - cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; - Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; - for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; - } else { - // Data is consistent with a flat 0.12 - cutmodel = "pol0"; - //params[0] = -0.0015; - //params[0] = -3.0; - //params[0] = -0.05; //sigma min - params[0] = -1.0; //sigma min - } - pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); - - printf("*************************************\n"); - printf("Configuring standard Task:\n"); -// task->PrintStatus(); - pid->PrintStatus(); - printf("*************************************\n"); - return task; -} +AliAnalysisTaskFlowTPCEMCalEP* ConfigHFE_FLOW_TPCEMCal_EP(Bool_t useMC){ + // + // HFE standard task configuration + // + + Bool_t kAnalyseTaggedTracks = kTRUE; + + AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsEMCAL","HFE Standard Cuts"); + hfecuts->CreateStandardCuts(); + hfecuts->SetMinNClustersTPC(100); + hfecuts->SetMinRatioTPCclusters(0.6); + hfecuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); + hfecuts->SetMinNClustersITS(3); + hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst); + hfecuts->SetCheckITSLayerStatus(kFALSE); + hfecuts->SetVertexRange(10.); + hfecuts->SetTOFPIDStep(kFALSE); + hfecuts->SetPtRange(2, 50); + hfecuts->SetMaxImpactParam(1,2); + + AliAnalysisTaskFlowTPCEMCalEP *task = new AliAnalysisTaskFlowTPCEMCalEP("HFE v2"); + printf("task ------------------------ %p\n ", task); + task->SetHFECuts(hfecuts); + task->SetInvariantMassCut(0.05); + + // Define PID + AliHFEpid *pid = task->GetPID(); + if(useMC) pid->SetHasMCData(kTRUE); + pid->AddDetector("TPC", 0); + pid->AddDetector("EMCAL", 1); + // change E/p cuts + AliHFEpidEMCAL *emcpid = pid->AliHFEpid::GetDetPID(AliHFEpid::kEMCALpid); + emcpid->SetEoPMax(1.2); + emcpid->SetEoPMim(0.9); + + Double_t params[4]; + char *cutmodel; + if(useMC){ + // Monte-Carlo needs modelling of the falling mean with momentum at low momentum + // for high momentum it is consistent with a flat -0.94 + cutmodel = "[0]*TMath::Exp([1]*x) + [2] + [3]*x"; + Double_t paramsMC[4] = {0.7174, -1.588, -0.9395, 0.0246}; + for(int ipar = 0; ipar < 4; ipar++) params[ipar] = paramsMC[ipar]; + } else { + // Data is consistent with a flat 0.12 + cutmodel = "pol0"; + //params[0] = -0.0015; + //params[0] = -3.0; + //params[0] = -0.05; //sigma min + params[0] = -1.0; //sigma min + } + pid->ConfigureTPCdefaultCut(cutmodel, params,3.0); + + printf("*************************************\n"); + printf("Configuring standard Task:\n"); +// task->PrintStatus(); + pid->PrintStatus(); + printf("*************************************\n"); + return task; +} diff --git a/PWGHF/vertexingHF/AliAnalysisTaskMEVertexingHFTest.C b/PWGHF/vertexingHF/AliAnalysisTaskMEVertexingHFTest.C index 8b46ec7a79c..9f3216ec7a8 100644 --- a/PWGHF/vertexingHF/AliAnalysisTaskMEVertexingHFTest.C +++ b/PWGHF/vertexingHF/AliAnalysisTaskMEVertexingHFTest.C @@ -1,65 +1,65 @@ -void AliAnalysisTaskMEVertexingHFTest() -{ - // - // Test macro for the AliAnalysisTaskME for heavy-flavour event mixing - // r.romita@gsi.de - // - - Bool_t useParFiles=kFALSE; - - gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/LoadLibraries.C"); - LoadLibraries(useParFiles); - - // Local files - - - TChain* chain = new TChain("aodTree"); - Char_t fileName[100]; - sprintf(fileName,"AliAODs.root"); - chain->Add(fileName); - - // Create the analysis manager - AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager"); - - // Input Handler - AliMultiEventInputHandler *inputHandler = new AliMultiEventInputHandler(4,1); - AliEventPoolOTF* pool = new AliEventPoolOTF("event pool", "AOD"); - // apply selections - pool->SetMultiplicityBin(0, 100, 2); - pool->SetZVertexBinning(-20., 20., 2); - pool->Init(); - //set tag directory - Char_t tagDir[100]; - sprintf(tagDir,"."); - pool->SetTagDirectory(tagDir); - mgr->SetInputEventHandler(inputHandler); - mgr->SetEventPool(pool); - inputHandler->SetEventPool(pool); - - // Output - AliAODHandler *aodHandler = new AliAODHandler(); - aodHandler->SetOutputFileName("AliAOD.VertexingHF.root"); - aodHandler->SetCreateNonStandardAOD(); - mgr->SetOutputEventHandler(aodHandler); - - gROOT->LoadMacro("AddTaskHFMixing.C"); - AliAnalysisTaskMEVertexingHF *hfTask = AddTaskHFMixing(); - - - // - // Run the analysis - // - printf("CHAIN HAS %d ENTRIES\n",(Int_t)chain->GetEntries()); - if(!mgr->InitAnalysis()) return; - - mgr->PrintStatus(); - - TStopwatch watch; - watch.Start(); - mgr->StartAnalysis("mix",chain, 1000); - watch.Stop(); - watch.Print(); - delete mgr; - - return; -} +void AliAnalysisTaskMEVertexingHFTest() +{ + // + // Test macro for the AliAnalysisTaskME for heavy-flavour event mixing + // r.romita@gsi.de + // + + Bool_t useParFiles=kFALSE; + + gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/LoadLibraries.C"); + LoadLibraries(useParFiles); + + // Local files + + + TChain* chain = new TChain("aodTree"); + Char_t fileName[100]; + sprintf(fileName,"AliAODs.root"); + chain->Add(fileName); + + // Create the analysis manager + AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager"); + + // Input Handler + AliMultiEventInputHandler *inputHandler = new AliMultiEventInputHandler(4,1); + AliEventPoolOTF* pool = new AliEventPoolOTF("event pool", "AOD"); + // apply selections + pool->SetMultiplicityBin(0, 100, 2); + pool->SetZVertexBinning(-20., 20., 2); + pool->Init(); + //set tag directory + Char_t tagDir[100]; + sprintf(tagDir,"."); + pool->SetTagDirectory(tagDir); + mgr->SetInputEventHandler(inputHandler); + mgr->SetEventPool(pool); + inputHandler->SetEventPool(pool); + + // Output + AliAODHandler *aodHandler = new AliAODHandler(); + aodHandler->SetOutputFileName("AliAOD.VertexingHF.root"); + aodHandler->SetCreateNonStandardAOD(); + mgr->SetOutputEventHandler(aodHandler); + + gROOT->LoadMacro("AddTaskHFMixing.C"); + AliAnalysisTaskMEVertexingHF *hfTask = AddTaskHFMixing(); + + + // + // Run the analysis + // + printf("CHAIN HAS %d ENTRIES\n",(Int_t)chain->GetEntries()); + if(!mgr->InitAnalysis()) return; + + mgr->PrintStatus(); + + TStopwatch watch; + watch.Start(); + mgr->StartAnalysis("mix",chain, 1000); + watch.Stop(); + watch.Print(); + delete mgr; + + return; +} diff --git a/PWGHF/vertexingHF/AliAnalysisTaskSEImproveITS.cxx b/PWGHF/vertexingHF/AliAnalysisTaskSEImproveITS.cxx index e81bdc00581..5521ece56d4 100644 --- a/PWGHF/vertexingHF/AliAnalysisTaskSEImproveITS.cxx +++ b/PWGHF/vertexingHF/AliAnalysisTaskSEImproveITS.cxx @@ -1,664 +1,664 @@ -/************************************************************************* -* Copyright(c) 1998-2011, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#include "AliVertex.h" -#include "AliVVertex.h" -#include "AliESDVertex.h" -#include "AliVertexerTracks.h" -#include "AliAODEvent.h" -#include "AliAODTrack.h" -#include "AliAODMCParticle.h" -#include "AliExternalTrackParam.h" -#include "AliAODRecoDecayHF2Prong.h" -#include "AliAODRecoDecayHF3Prong.h" -#include "AliAODRecoCascadeHF.h" -#include "AliNeutralTrackParam.h" -#include "AliAnalysisTaskSEImproveITS.h" - -// -// Implementation of the "hybrid-approach" for ITS upgrade studies. -// The tastk smears the track parameters according to estimations -// from single-track upgrade studies. Afterwards it recalculates -// the parameters of the reconstructed decays. -// -// WARNING: This will affect all tasks in a train after this one -// (which is typically desired, though). -// - -AliAnalysisTaskSEImproveITS::AliAnalysisTaskSEImproveITS() - :AliAnalysisTaskSE(), - fD0ZResPCur (0), - fD0ZResKCur (0), - fD0ZResPiCur (0), - fD0RPResPCur (0), - fD0RPResKCur (0), - fD0RPResPiCur(0), - fPt1ResPCur (0), - fPt1ResKCur (0), - fPt1ResPiCur (0), - fD0ZResPUpg (0), - fD0ZResKUpg (0), - fD0ZResPiUpg (0), - fD0RPResPUpg (0), - fD0RPResKUpg (0), - fD0RPResPiUpg(0), - fPt1ResPUpg (0), - fPt1ResKUpg (0), - fPt1ResPiUpg (0), - fD0ZResPCurSA (0), - fD0ZResKCurSA (0), - fD0ZResPiCurSA (0), - fD0RPResPCurSA (0), - fD0RPResKCurSA (0), - fD0RPResPiCurSA(0), - fPt1ResPCurSA (0), - fPt1ResKCurSA (0), - fPt1ResPiCurSA (0), - fD0ZResPUpgSA (0), - fD0ZResKUpgSA (0), - fD0ZResPiUpgSA (0), - fD0RPResPUpgSA (0), - fD0RPResKUpgSA (0), - fD0RPResPiUpgSA(0), - fPt1ResPUpgSA (0), - fPt1ResKUpgSA (0), - fPt1ResPiUpgSA (0), - fRunInVertexing(kFALSE), - fImproveTracks(kTRUE), - fDebugOutput (0), - fDebugNtuple (0), - fDebugVars (0), - fNDebug (0) -{ - // - // Default constructor. - // -} - -AliAnalysisTaskSEImproveITS::AliAnalysisTaskSEImproveITS(const char *name, - const char *resfileCurURI, - const char *resfileUpgURI, - Bool_t isRunInVertexing, - Int_t ndebug) - :AliAnalysisTaskSE(name), - fD0ZResPCur (0), - fD0ZResKCur (0), - fD0ZResPiCur (0), - fD0RPResPCur (0), - fD0RPResKCur (0), - fD0RPResPiCur(0), - fPt1ResPCur (0), - fPt1ResKCur (0), - fPt1ResPiCur (0), - fD0ZResPUpg (0), - fD0ZResKUpg (0), - fD0ZResPiUpg (0), - fD0RPResPUpg (0), - fD0RPResKUpg (0), - fD0RPResPiUpg(0), - fPt1ResPUpg (0), - fPt1ResKUpg (0), - fPt1ResPiUpg (0), - fD0ZResPCurSA (0), - fD0ZResKCurSA (0), - fD0ZResPiCurSA (0), - fD0RPResPCurSA (0), - fD0RPResKCurSA (0), - fD0RPResPiCurSA(0), - fPt1ResPCurSA (0), - fPt1ResKCurSA (0), - fPt1ResPiCurSA (0), - fD0ZResPUpgSA (0), - fD0ZResKUpgSA (0), - fD0ZResPiUpgSA (0), - fD0RPResPUpgSA (0), - fD0RPResKUpgSA (0), - fD0RPResPiUpgSA(0), - fPt1ResPUpgSA (0), - fPt1ResKUpgSA (0), - fPt1ResPiUpgSA (0), - fRunInVertexing(isRunInVertexing), - fImproveTracks(kTRUE), - fDebugOutput (0), - fDebugNtuple (0), - fDebugVars (0), - fNDebug (ndebug) -{ - // - // Constructor to be used to create the task. - // The the URIs specify the resolution files to be used. - // They are expected to contain TGraphs with the resolutions - // for the current and the upgraded ITS (see code for details). - // One may also specify for how many tracks debug information - // is written to the output. - // - TFile *resfileCur=TFile::Open(resfileCurURI); - fD0RPResPCur =new TGraph(*static_cast(resfileCur->Get("D0RPResP" ))); - fD0RPResKCur =new TGraph(*static_cast(resfileCur->Get("D0RPResK" ))); - fD0RPResPiCur=new TGraph(*static_cast(resfileCur->Get("D0RPResPi"))); - fD0ZResPCur =new TGraph(*static_cast(resfileCur->Get("D0ZResP" ))); - fD0ZResKCur =new TGraph(*static_cast(resfileCur->Get("D0ZResK" ))); - fD0ZResPiCur =new TGraph(*static_cast(resfileCur->Get("D0ZResPi" ))); - fPt1ResPCur =new TGraph(*static_cast(resfileCur->Get("Pt1ResP" ))); - fPt1ResKCur =new TGraph(*static_cast(resfileCur->Get("Pt1ResK" ))); - fPt1ResPiCur =new TGraph(*static_cast(resfileCur->Get("Pt1ResPi" ))); - fD0RPResPCur ->SetName("D0RPResPCur" ); - fD0RPResKCur ->SetName("D0RPResKCur" ); - fD0RPResPiCur->SetName("D0RPResPiCur"); - fD0ZResPCur ->SetName("D0ZResPCur" ); - fD0ZResKCur ->SetName("D0ZResKCur" ); - fD0ZResPiCur ->SetName("D0ZResPiCur" ); - fPt1ResPCur ->SetName("Pt1ResPCur" ); - fPt1ResKCur ->SetName("Pt1ResKCur" ); - fPt1ResPiCur ->SetName("Pt1ResPiCur" ); - fD0RPResPCurSA =new TGraph(*static_cast(resfileCur->Get("D0RPResPSA" ))); - fD0RPResKCurSA =new TGraph(*static_cast(resfileCur->Get("D0RPResKSA" ))); - fD0RPResPiCurSA=new TGraph(*static_cast(resfileCur->Get("D0RPResPiSA"))); - fD0ZResPCurSA =new TGraph(*static_cast(resfileCur->Get("D0ZResPSA" ))); - fD0ZResKCurSA =new TGraph(*static_cast(resfileCur->Get("D0ZResKSA" ))); - fD0ZResPiCurSA =new TGraph(*static_cast(resfileCur->Get("D0ZResPiSA" ))); - fPt1ResPCurSA =new TGraph(*static_cast(resfileCur->Get("Pt1ResPSA" ))); - fPt1ResKCurSA =new TGraph(*static_cast(resfileCur->Get("Pt1ResKSA" ))); - fPt1ResPiCurSA =new TGraph(*static_cast(resfileCur->Get("Pt1ResPiSA" ))); - fD0RPResPCurSA ->SetName("D0RPResPCurSA" ); - fD0RPResKCurSA ->SetName("D0RPResKCurSA" ); - fD0RPResPiCurSA->SetName("D0RPResPiCurSA"); - fD0ZResPCurSA ->SetName("D0ZResPCurSA" ); - fD0ZResKCurSA ->SetName("D0ZResKCurSA" ); - fD0ZResPiCurSA ->SetName("D0ZResPiCurSA" ); - fPt1ResPCurSA ->SetName("Pt1ResPCurSA" ); - fPt1ResKCurSA ->SetName("Pt1ResKCurSA" ); - fPt1ResPiCurSA ->SetName("Pt1ResPiCurSA" ); - delete resfileCur; - TFile *resfileUpg=TFile::Open(resfileUpgURI ); - fD0RPResPUpg =new TGraph(*static_cast(resfileUpg->Get("D0RPResP" ))); - fD0RPResKUpg =new TGraph(*static_cast(resfileUpg->Get("D0RPResK" ))); - fD0RPResPiUpg=new TGraph(*static_cast(resfileUpg->Get("D0RPResPi"))); - fD0ZResPUpg =new TGraph(*static_cast(resfileUpg->Get("D0ZResP" ))); - fD0ZResKUpg =new TGraph(*static_cast(resfileUpg->Get("D0ZResK" ))); - fD0ZResPiUpg =new TGraph(*static_cast(resfileUpg->Get("D0ZResPi" ))); - fPt1ResPUpg =new TGraph(*static_cast(resfileUpg->Get("Pt1ResP" ))); - fPt1ResKUpg =new TGraph(*static_cast(resfileUpg->Get("Pt1ResK" ))); - fPt1ResPiUpg =new TGraph(*static_cast(resfileUpg->Get("Pt1ResPi" ))); - fD0RPResPUpg ->SetName("D0RPResPUpg" ); - fD0RPResKUpg ->SetName("D0RPResKUpg" ); - fD0RPResPiUpg->SetName("D0RPResPiUpg"); - fD0ZResPUpg ->SetName("D0ZResPUpg" ); - fD0ZResKUpg ->SetName("D0ZResKUpg" ); - fD0ZResPiUpg ->SetName("D0ZResPiUpg" ); - fPt1ResPUpg ->SetName("Pt1ResPUpg" ); - fPt1ResKUpg ->SetName("Pt1ResKUpg" ); - fPt1ResPiUpg ->SetName("Pt1ResPiUpg" ); - fD0RPResPUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0RPResPSA" ))); - fD0RPResKUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0RPResKSA" ))); - fD0RPResPiUpgSA=new TGraph(*static_cast(resfileUpg->Get("D0RPResPiSA"))); - fD0ZResPUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0ZResPSA" ))); - fD0ZResKUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0ZResKSA" ))); - fD0ZResPiUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0ZResPiSA" ))); - fPt1ResPUpgSA =new TGraph(*static_cast(resfileUpg->Get("Pt1ResPSA" ))); - fPt1ResKUpgSA =new TGraph(*static_cast(resfileUpg->Get("Pt1ResKSA" ))); - fPt1ResPiUpgSA =new TGraph(*static_cast(resfileUpg->Get("Pt1ResPiSA" ))); - fD0RPResPUpgSA ->SetName("D0RPResPUpgSA" ); - fD0RPResKUpgSA ->SetName("D0RPResKUpgSA" ); - fD0RPResPiUpgSA->SetName("D0RPResPiUpgSA"); - fD0ZResPUpgSA ->SetName("D0ZResPUpgSA" ); - fD0ZResKUpgSA ->SetName("D0ZResKUpgSA" ); - fD0ZResPiUpgSA ->SetName("D0ZResPiUpgSA" ); - fPt1ResPUpgSA ->SetName("Pt1ResPUpgSA" ); - fPt1ResKUpgSA ->SetName("Pt1ResKUpgSA" ); - fPt1ResPiUpgSA ->SetName("Pt1ResPiUpgSA" ); - delete resfileUpg; - - DefineOutput(1,TNtuple::Class()); -} - -AliAnalysisTaskSEImproveITS::~AliAnalysisTaskSEImproveITS() { - // - // Destructor. - // - delete fDebugOutput; -} - -void AliAnalysisTaskSEImproveITS::UserCreateOutputObjects() { - // - // Creation of user output objects. - // - fDebugOutput=new TList(); - fDebugOutput->SetOwner(); - fDebugNtuple=new TNtuple("fDebugNtuple","Smearing","pdg:ptmc:d0rpo:d0zo:pt1o:sd0rpo:sd0zo:spt1o:d0rpn:d0zn:pt1n:sd0rpn:sd0zn:spt1n:d0rpmc:d0zmc:pt1mc"); - fDebugVars=new Float_t[fDebugNtuple->GetNvar()]; - - fDebugOutput->Add(fDebugNtuple ); - - fDebugOutput->Add(fD0RPResPCur ); - fDebugOutput->Add(fD0RPResKCur ); - fDebugOutput->Add(fD0RPResPiCur); - fDebugOutput->Add(fD0ZResPCur ); - fDebugOutput->Add(fD0ZResKCur ); - fDebugOutput->Add(fD0ZResPiCur ); - fDebugOutput->Add(fPt1ResPCur ); - fDebugOutput->Add(fPt1ResKCur ); - fDebugOutput->Add(fPt1ResPiCur ); - fDebugOutput->Add(fD0RPResPUpg ); - fDebugOutput->Add(fD0RPResKUpg ); - fDebugOutput->Add(fD0RPResPiUpg); - fDebugOutput->Add(fD0ZResPUpg ); - fDebugOutput->Add(fD0ZResKUpg ); - fDebugOutput->Add(fD0ZResPiUpg ); - fDebugOutput->Add(fPt1ResPUpg ); - fDebugOutput->Add(fPt1ResKUpg ); - fDebugOutput->Add(fPt1ResPiUpg ); - - PostData(1,fDebugOutput); -} - -void AliAnalysisTaskSEImproveITS::UserExec(Option_t*) { - // - // The event loop - // - AliAODEvent *ev=0x0; - if(!fRunInVertexing) { - ev=dynamic_cast(InputEvent()); - } else { - if(AODEvent() && IsStandardAOD()) ev = dynamic_cast (AODEvent()); - } - if(!ev) return; - Double_t bz=ev->GetMagneticField(); - - - - - // Smear all tracks - TClonesArray *mcs=static_cast(ev->GetList()->FindObject(AliAODMCParticle::StdBranchName())); - if (!mcs) return; - if (fImproveTracks) { - for(Int_t itrack=0;itrackGetNumberOfTracks();++itrack) { - SmearTrack(ev->GetTrack(itrack),mcs); - } - } - - // TODO: recalculated primary vertex - AliVVertex *primaryVertex=ev->GetPrimaryVertex(); - - // Recalculate all candidates - // D0->Kpi - TClonesArray *array2Prong=static_cast(ev->GetList()->FindObject("D0toKpi")); - if (array2Prong) { - for (Int_t icand=0;icandGetEntries();++icand) { - AliAODRecoDecayHF2Prong *decay=static_cast(array2Prong->At(icand)); - - // recalculate vertices - AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx(); - - - AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast(decay->GetDaughter(0))); - AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast(decay->GetDaughter(1))); - - TObjArray ta12; - - ta12.Add(&et1); ta12.Add(&et2); - AliESDVertex *v12 =RecalculateVertex(oldSecondaryVertex,&ta12 ,bz); - - - // update secondary vertex - Double_t pos[3]; - v12->GetXYZ(pos); - - decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]); - decay->GetSecondaryVtx()->SetChi2perNDF(v12->GetChi2toNDF()); - - //!!!!TODO: covariance matrix - - // update d0 - Double_t d0z0[2],covd0z0[3]; - Double_t d0[2],d0err[2]; - et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); - d0[0]=d0z0[0]; - d0err[0] = TMath::Sqrt(covd0z0[0]); - et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); - d0[1]=d0z0[0]; - d0err[1] = TMath::Sqrt(covd0z0[0]); - decay->Setd0Prongs(2,d0); - decay->Setd0errProngs(2,d0err); - // - - - Double_t xdummy=0.,ydummy=0.; - Double_t dca; - dca=et1.GetDCA(&et2,bz,xdummy,ydummy); - decay->SetDCA(dca); - - - delete v12; - - Double_t px[2],py[2],pz[2]; - for (Int_t i=0;i<2;++i) { - const AliAODTrack *t=static_cast(decay->GetDaughter(i)); - px[i]=t->Px(); - py[i]=t->Py(); - pz[i]=t->Pz(); - } - decay->SetPxPyPzProngs(2,px,py,pz); - } - } - - - // Dstar->Kpipi - TClonesArray *arrayCascade=static_cast(ev->GetList()->FindObject("Dstar")); - - if (arrayCascade) { - for (Int_t icand=0;icandGetEntries();++icand) { - AliAODRecoCascadeHF *decayDstar=static_cast(arrayCascade->At(icand)); - //Get D0 from D* - AliAODRecoDecayHF2Prong* decay=(AliAODRecoDecayHF2Prong*)decayDstar->Get2Prong(); - - // recalculate vertices - //AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx(); - - //soft pion - AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast(decayDstar->GetBachelor())); - - //track D0 - AliNeutralTrackParam *trackD0 = new AliNeutralTrackParam(decay); - - //!!!!TODO: covariance matrix - - // update d0 - Double_t d0z0[2],covd0z0[3]; - Double_t d01[2],d01err[2]; - - //the D* - et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); - d01[0]=d0z0[0]; - d01err[0] = TMath::Sqrt(covd0z0[0]); - trackD0->PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); - d01[1]=d0z0[0]; - d01err[1] = TMath::Sqrt(covd0z0[0]); - decayDstar->Setd0Prongs(2,d01); - decayDstar->Setd0errProngs(2,d01err); - - // delete v12; - delete trackD0; trackD0=NULL; - - // a run for D* - Double_t px1[2],py1[2],pz1[2]; - for (Int_t i=0;i<2;++i) { - const AliAODTrack *t1=static_cast(decayDstar->GetDaughter(i)); - px1[i]=t1->Px(); - py1[i]=t1->Py(); - pz1[i]=t1->Pz(); - } - decayDstar->SetPxPyPzProngs(2,px1,py1,pz1); - - } - } - - - // Three prong - TClonesArray *array3Prong=static_cast(ev->GetList()->FindObject("Charm3Prong")); - if (array3Prong) { - for (Int_t icand=0;icandGetEntries();++icand) { - AliAODRecoDecayHF3Prong *decay=static_cast(array3Prong->At(icand)); - - // recalculate vertices - AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx(); - AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast(decay->GetDaughter(0))); - AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast(decay->GetDaughter(1))); - AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast(decay->GetDaughter(2))); - TObjArray ta123,ta12,ta23; - ta123.Add(&et1);ta123.Add(&et2);ta123.Add(&et3); - ta12. Add(&et1);ta12 .Add(&et2); - ta23 .Add(&et2);ta23 .Add(&et3); - AliESDVertex *v123=RecalculateVertex(oldSecondaryVertex,&ta123,bz); - AliESDVertex *v12 =RecalculateVertex(oldSecondaryVertex,&ta12 ,bz); - AliESDVertex *v23 =RecalculateVertex(oldSecondaryVertex,&ta23 ,bz); - - // update secondary vertex - Double_t pos[3]; - v123->GetXYZ(pos); - decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]); - decay->GetSecondaryVtx()->SetChi2perNDF(v123->GetChi2toNDF()); - //TODO: covariance matrix - - // update d0 for all progs - Double_t d0z0[2],covd0z0[3]; - Double_t d0[3],d0err[3]; - et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); - d0[0]=d0z0[0]; - d0err[0] = TMath::Sqrt(covd0z0[0]); - et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); - d0[1]=d0z0[0]; - d0err[1] = TMath::Sqrt(covd0z0[0]); - et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); - d0[2]=d0z0[0]; - d0err[2] = TMath::Sqrt(covd0z0[0]); - decay->Setd0Prongs (3,d0 ); - decay->Setd0errProngs(3,d0err); - // TODO: setter missing - - // update dca for prong combinations - Double_t xdummy=0.,ydummy=0.; - Double_t dca[3]; - dca[0]=et1.GetDCA(&et2,bz,xdummy,ydummy); - dca[1]=et3.GetDCA(&et2,bz,xdummy,ydummy); - dca[2]=et1.GetDCA(&et3,bz,xdummy,ydummy); - decay->SetDCAs(3,dca); - - // update dist12 and dist23 - primaryVertex->GetXYZ(pos); - decay->SetDist12toPrim(TMath::Sqrt((v12->GetX()-pos[0])*(v12->GetX()-pos[0]) - +(v12->GetY()-pos[1])*(v12->GetY()-pos[1]) - +(v12->GetZ()-pos[2])*(v12->GetZ()-pos[2]))); - decay->SetDist23toPrim(TMath::Sqrt((v23->GetX()-pos[0])*(v23->GetX()-pos[0]) - +(v23->GetY()-pos[1])*(v23->GetY()-pos[1]) - +(v23->GetZ()-pos[2])*(v23->GetZ()-pos[2]))); - - delete v123;delete v12;delete v23; - - Double_t px[3],py[3],pz[3]; - for (Int_t i=0;i<3;++i) { - const AliAODTrack *t=static_cast(decay->GetDaughter(i)); - px[i]=t->Px(); - py[i]=t->Py(); - pz[i]=t->Pz(); - } - decay->SetPxPyPzProngs(3,px,py,pz); - } - } -} - -void AliAnalysisTaskSEImproveITS::SmearTrack(AliAODTrack *track,const TClonesArray *mcs) { - // Early exit, if this track has nothing in common with the ITS - - if (!(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))) - return; - - // Check if the track was already "improved" (this is done with a trick using layer 7 (ie the 8th)) - if (TESTBIT(track->GetITSClusterMap(),7)) return; - // - - - // Get reconstructed track parameters - AliExternalTrackParam et; et.CopyFromVTrack(track); - Double_t *param=const_cast(et.GetParameter()); -//TODO: Double_t *covar=const_cast(et.GetCovariance()); - - // Get MC info - Int_t imc=track->GetLabel(); - if (imc<=0) return; - const AliAODMCParticle *mc=static_cast(mcs->At(imc)); - Double_t mcx[3]; - Double_t mcp[3]; - Double_t mccv[36]={0.}; - Short_t mcc; - mc->XvYvZv(mcx); - mc->PxPyPz(mcp); - mcc=mc->Charge(); - AliExternalTrackParam mct(mcx,mcp,mccv,mcc); - const Double_t *parammc=mct.GetParameter(); -//TODO: const Double_t *covermc=mct.GetCovariance(); - AliVertex vtx(mcx,1.,1); - - // Correct reference points and frames according to MC - // TODO: B-Field correct? - // TODO: failing propagation.... - et.PropagateToDCA(&vtx,track->GetBz(),10.); - et.Rotate(mct.GetAlpha()); - - // Select appropriate smearing functions - Double_t ptmc=TMath::Abs(mc->Pt()); - Double_t sd0rpn=0.; - Double_t sd0zn =0.; - Double_t spt1n =0.; - Double_t sd0rpo=0.; - Double_t sd0zo =0.; - Double_t spt1o =0.; - switch (mc->GetPdgCode()) { - case 2212: case -2212: - sd0rpo=EvalGraph(ptmc,fD0RPResPCur,fD0RPResPCurSA); - sd0zo =EvalGraph(ptmc,fD0ZResPCur,fD0ZResPCurSA); - spt1o =EvalGraph(ptmc,fPt1ResPCur,fPt1ResPCurSA); - sd0rpn=EvalGraph(ptmc,fD0RPResPUpg,fD0RPResPUpgSA); - sd0zn =EvalGraph(ptmc,fD0ZResPUpg,fD0ZResPUpgSA); - spt1n =EvalGraph(ptmc,fPt1ResPUpg,fPt1ResPUpgSA); - break; - case 321: case -321: - sd0rpo=EvalGraph(ptmc,fD0RPResKCur,fD0RPResKCurSA); - sd0zo =EvalGraph(ptmc,fD0ZResKCur,fD0ZResKCurSA); - spt1o =EvalGraph(ptmc,fPt1ResKCur,fPt1ResKCurSA); - sd0rpn=EvalGraph(ptmc,fD0RPResKUpg,fD0RPResKUpgSA); - sd0zn =EvalGraph(ptmc,fD0ZResKUpg,fD0ZResKUpgSA); - spt1n =EvalGraph(ptmc,fPt1ResKUpg,fPt1ResKUpgSA); - break; - case 211: case -211: - sd0rpo=EvalGraph(ptmc,fD0RPResPiCur,fD0RPResPiCurSA); - sd0zo =EvalGraph(ptmc,fD0ZResPiCur,fD0ZResPiCurSA); - spt1o =EvalGraph(ptmc,fPt1ResPiCur,fPt1ResPiCurSA); - sd0rpn=EvalGraph(ptmc,fD0RPResPiUpg,fD0RPResPiUpgSA); - sd0zn =EvalGraph(ptmc,fD0ZResPiUpg,fD0ZResPiUpgSA); - spt1n =EvalGraph(ptmc,fPt1ResPiUpg,fPt1ResPiUpgSA); - break; - default: - return; - } - - // Use the same units (i.e. cm and GeV/c)! TODO: pt! - sd0rpo*=1.e-4; - sd0zo *=1.e-4; - sd0rpn*=1.e-4; - sd0zn *=1.e-4; - - // Apply the smearing - Double_t d0zo =param [1]; - Double_t d0zmc =parammc[1]; - Double_t d0rpo =param [0]; - Double_t d0rpmc=parammc[0]; - Double_t pt1o =param [4]; - Double_t pt1mc =parammc[4]; - Double_t dd0zo =d0zo-d0zmc; - Double_t dd0zn =dd0zo *(sd0zo >0. ? (sd0zn /sd0zo ) : 1.); - Double_t d0zn =d0zmc+dd0zn; - Double_t dd0rpo=d0rpo-d0rpmc; - Double_t dd0rpn=dd0rpo*(sd0rpo>0. ? (sd0rpn/sd0rpo) : 1.); - Double_t d0rpn =d0rpmc+dd0rpn; - Double_t dpt1o =pt1o-pt1mc; - Double_t dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.); - Double_t pt1n =pt1mc+dpt1n; - param[0]=d0rpn; - param[1]=d0zn ; - param[4]=pt1n ; - - // Copy the smeared parameters to the AOD track - Double_t x[3]; - Double_t p[3]; - et.GetXYZ(x); - et.GetPxPyPz(p); - track->SetPosition(x,kFALSE); - track->SetP(p,kTRUE); - - - // Mark the track as "improved" with a trick (this is done with a trick using layer 7 (ie the 8th)) - UChar_t itsClusterMap = track->GetITSClusterMap(); - SETBIT(itsClusterMap,7); - track->SetITSClusterMap(itsClusterMap); - // - - // write out debug infos - if (fDebugNtuple->GetEntries()GetPdgCode(); - fDebugVars[idbg++]=ptmc ; - fDebugVars[idbg++]=d0rpo ; - fDebugVars[idbg++]=d0zo ; - fDebugVars[idbg++]=pt1o ; - fDebugVars[idbg++]=sd0rpo; - fDebugVars[idbg++]=sd0zo ; - fDebugVars[idbg++]=spt1o ; - fDebugVars[idbg++]=d0rpn ; - fDebugVars[idbg++]=d0zn ; - fDebugVars[idbg++]=pt1n ; - fDebugVars[idbg++]=sd0rpn; - fDebugVars[idbg++]=sd0zn ; - fDebugVars[idbg++]=spt1n ; - fDebugVars[idbg++]=d0rpmc; - fDebugVars[idbg++]=d0zmc ; - fDebugVars[idbg++]=pt1mc ; - fDebugNtuple->Fill(fDebugVars); - PostData(1,fDebugOutput); - } -} - -AliESDVertex* AliAnalysisTaskSEImproveITS::RecalculateVertex(const AliVVertex *old,TObjArray *tracks,Double_t bField) { - // - // Helper function to recalculate a vertex. - // - - static UShort_t ids[]={1,2,3}; //TODO: unsave... - AliVertexerTracks vertexer(bField); - vertexer.SetVtxStart(old->GetX(),old->GetY(),old->GetZ()); - AliESDVertex *vertex=vertexer.VertexForSelectedTracks(tracks,ids); - return vertex; -} - -Double_t AliAnalysisTaskSEImproveITS::EvalGraph(Double_t x,const TGraph *graph,const TGraph *graphSA) const { - // - // Evaluates a TGraph without linear extrapolation. Instead the last - // valid point of the graph is used when out of range. - // The function assumes an ascending order of X. - // - - // TODO: find a pretty solution for this: - Int_t n =graph->GetN(); - Double_t xmin=graph->GetX()[0 ]; - Double_t xmax=graph->GetX()[n-1]; - if (xEval(xmin); - Double_t xminSA=graphSA->GetX()[0]; - if(xEval(xminSA); - return graphSA->Eval(x); - } - if (x>xmax) return graph->Eval(xmax); - return graph->Eval(x); -} - -ClassImp(AliAnalysisTaskSEImproveITS); - +/************************************************************************* +* Copyright(c) 1998-2011, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include "AliVertex.h" +#include "AliVVertex.h" +#include "AliESDVertex.h" +#include "AliVertexerTracks.h" +#include "AliAODEvent.h" +#include "AliAODTrack.h" +#include "AliAODMCParticle.h" +#include "AliExternalTrackParam.h" +#include "AliAODRecoDecayHF2Prong.h" +#include "AliAODRecoDecayHF3Prong.h" +#include "AliAODRecoCascadeHF.h" +#include "AliNeutralTrackParam.h" +#include "AliAnalysisTaskSEImproveITS.h" + +// +// Implementation of the "hybrid-approach" for ITS upgrade studies. +// The tastk smears the track parameters according to estimations +// from single-track upgrade studies. Afterwards it recalculates +// the parameters of the reconstructed decays. +// +// WARNING: This will affect all tasks in a train after this one +// (which is typically desired, though). +// + +AliAnalysisTaskSEImproveITS::AliAnalysisTaskSEImproveITS() + :AliAnalysisTaskSE(), + fD0ZResPCur (0), + fD0ZResKCur (0), + fD0ZResPiCur (0), + fD0RPResPCur (0), + fD0RPResKCur (0), + fD0RPResPiCur(0), + fPt1ResPCur (0), + fPt1ResKCur (0), + fPt1ResPiCur (0), + fD0ZResPUpg (0), + fD0ZResKUpg (0), + fD0ZResPiUpg (0), + fD0RPResPUpg (0), + fD0RPResKUpg (0), + fD0RPResPiUpg(0), + fPt1ResPUpg (0), + fPt1ResKUpg (0), + fPt1ResPiUpg (0), + fD0ZResPCurSA (0), + fD0ZResKCurSA (0), + fD0ZResPiCurSA (0), + fD0RPResPCurSA (0), + fD0RPResKCurSA (0), + fD0RPResPiCurSA(0), + fPt1ResPCurSA (0), + fPt1ResKCurSA (0), + fPt1ResPiCurSA (0), + fD0ZResPUpgSA (0), + fD0ZResKUpgSA (0), + fD0ZResPiUpgSA (0), + fD0RPResPUpgSA (0), + fD0RPResKUpgSA (0), + fD0RPResPiUpgSA(0), + fPt1ResPUpgSA (0), + fPt1ResKUpgSA (0), + fPt1ResPiUpgSA (0), + fRunInVertexing(kFALSE), + fImproveTracks(kTRUE), + fDebugOutput (0), + fDebugNtuple (0), + fDebugVars (0), + fNDebug (0) +{ + // + // Default constructor. + // +} + +AliAnalysisTaskSEImproveITS::AliAnalysisTaskSEImproveITS(const char *name, + const char *resfileCurURI, + const char *resfileUpgURI, + Bool_t isRunInVertexing, + Int_t ndebug) + :AliAnalysisTaskSE(name), + fD0ZResPCur (0), + fD0ZResKCur (0), + fD0ZResPiCur (0), + fD0RPResPCur (0), + fD0RPResKCur (0), + fD0RPResPiCur(0), + fPt1ResPCur (0), + fPt1ResKCur (0), + fPt1ResPiCur (0), + fD0ZResPUpg (0), + fD0ZResKUpg (0), + fD0ZResPiUpg (0), + fD0RPResPUpg (0), + fD0RPResKUpg (0), + fD0RPResPiUpg(0), + fPt1ResPUpg (0), + fPt1ResKUpg (0), + fPt1ResPiUpg (0), + fD0ZResPCurSA (0), + fD0ZResKCurSA (0), + fD0ZResPiCurSA (0), + fD0RPResPCurSA (0), + fD0RPResKCurSA (0), + fD0RPResPiCurSA(0), + fPt1ResPCurSA (0), + fPt1ResKCurSA (0), + fPt1ResPiCurSA (0), + fD0ZResPUpgSA (0), + fD0ZResKUpgSA (0), + fD0ZResPiUpgSA (0), + fD0RPResPUpgSA (0), + fD0RPResKUpgSA (0), + fD0RPResPiUpgSA(0), + fPt1ResPUpgSA (0), + fPt1ResKUpgSA (0), + fPt1ResPiUpgSA (0), + fRunInVertexing(isRunInVertexing), + fImproveTracks(kTRUE), + fDebugOutput (0), + fDebugNtuple (0), + fDebugVars (0), + fNDebug (ndebug) +{ + // + // Constructor to be used to create the task. + // The the URIs specify the resolution files to be used. + // They are expected to contain TGraphs with the resolutions + // for the current and the upgraded ITS (see code for details). + // One may also specify for how many tracks debug information + // is written to the output. + // + TFile *resfileCur=TFile::Open(resfileCurURI); + fD0RPResPCur =new TGraph(*static_cast(resfileCur->Get("D0RPResP" ))); + fD0RPResKCur =new TGraph(*static_cast(resfileCur->Get("D0RPResK" ))); + fD0RPResPiCur=new TGraph(*static_cast(resfileCur->Get("D0RPResPi"))); + fD0ZResPCur =new TGraph(*static_cast(resfileCur->Get("D0ZResP" ))); + fD0ZResKCur =new TGraph(*static_cast(resfileCur->Get("D0ZResK" ))); + fD0ZResPiCur =new TGraph(*static_cast(resfileCur->Get("D0ZResPi" ))); + fPt1ResPCur =new TGraph(*static_cast(resfileCur->Get("Pt1ResP" ))); + fPt1ResKCur =new TGraph(*static_cast(resfileCur->Get("Pt1ResK" ))); + fPt1ResPiCur =new TGraph(*static_cast(resfileCur->Get("Pt1ResPi" ))); + fD0RPResPCur ->SetName("D0RPResPCur" ); + fD0RPResKCur ->SetName("D0RPResKCur" ); + fD0RPResPiCur->SetName("D0RPResPiCur"); + fD0ZResPCur ->SetName("D0ZResPCur" ); + fD0ZResKCur ->SetName("D0ZResKCur" ); + fD0ZResPiCur ->SetName("D0ZResPiCur" ); + fPt1ResPCur ->SetName("Pt1ResPCur" ); + fPt1ResKCur ->SetName("Pt1ResKCur" ); + fPt1ResPiCur ->SetName("Pt1ResPiCur" ); + fD0RPResPCurSA =new TGraph(*static_cast(resfileCur->Get("D0RPResPSA" ))); + fD0RPResKCurSA =new TGraph(*static_cast(resfileCur->Get("D0RPResKSA" ))); + fD0RPResPiCurSA=new TGraph(*static_cast(resfileCur->Get("D0RPResPiSA"))); + fD0ZResPCurSA =new TGraph(*static_cast(resfileCur->Get("D0ZResPSA" ))); + fD0ZResKCurSA =new TGraph(*static_cast(resfileCur->Get("D0ZResKSA" ))); + fD0ZResPiCurSA =new TGraph(*static_cast(resfileCur->Get("D0ZResPiSA" ))); + fPt1ResPCurSA =new TGraph(*static_cast(resfileCur->Get("Pt1ResPSA" ))); + fPt1ResKCurSA =new TGraph(*static_cast(resfileCur->Get("Pt1ResKSA" ))); + fPt1ResPiCurSA =new TGraph(*static_cast(resfileCur->Get("Pt1ResPiSA" ))); + fD0RPResPCurSA ->SetName("D0RPResPCurSA" ); + fD0RPResKCurSA ->SetName("D0RPResKCurSA" ); + fD0RPResPiCurSA->SetName("D0RPResPiCurSA"); + fD0ZResPCurSA ->SetName("D0ZResPCurSA" ); + fD0ZResKCurSA ->SetName("D0ZResKCurSA" ); + fD0ZResPiCurSA ->SetName("D0ZResPiCurSA" ); + fPt1ResPCurSA ->SetName("Pt1ResPCurSA" ); + fPt1ResKCurSA ->SetName("Pt1ResKCurSA" ); + fPt1ResPiCurSA ->SetName("Pt1ResPiCurSA" ); + delete resfileCur; + TFile *resfileUpg=TFile::Open(resfileUpgURI ); + fD0RPResPUpg =new TGraph(*static_cast(resfileUpg->Get("D0RPResP" ))); + fD0RPResKUpg =new TGraph(*static_cast(resfileUpg->Get("D0RPResK" ))); + fD0RPResPiUpg=new TGraph(*static_cast(resfileUpg->Get("D0RPResPi"))); + fD0ZResPUpg =new TGraph(*static_cast(resfileUpg->Get("D0ZResP" ))); + fD0ZResKUpg =new TGraph(*static_cast(resfileUpg->Get("D0ZResK" ))); + fD0ZResPiUpg =new TGraph(*static_cast(resfileUpg->Get("D0ZResPi" ))); + fPt1ResPUpg =new TGraph(*static_cast(resfileUpg->Get("Pt1ResP" ))); + fPt1ResKUpg =new TGraph(*static_cast(resfileUpg->Get("Pt1ResK" ))); + fPt1ResPiUpg =new TGraph(*static_cast(resfileUpg->Get("Pt1ResPi" ))); + fD0RPResPUpg ->SetName("D0RPResPUpg" ); + fD0RPResKUpg ->SetName("D0RPResKUpg" ); + fD0RPResPiUpg->SetName("D0RPResPiUpg"); + fD0ZResPUpg ->SetName("D0ZResPUpg" ); + fD0ZResKUpg ->SetName("D0ZResKUpg" ); + fD0ZResPiUpg ->SetName("D0ZResPiUpg" ); + fPt1ResPUpg ->SetName("Pt1ResPUpg" ); + fPt1ResKUpg ->SetName("Pt1ResKUpg" ); + fPt1ResPiUpg ->SetName("Pt1ResPiUpg" ); + fD0RPResPUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0RPResPSA" ))); + fD0RPResKUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0RPResKSA" ))); + fD0RPResPiUpgSA=new TGraph(*static_cast(resfileUpg->Get("D0RPResPiSA"))); + fD0ZResPUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0ZResPSA" ))); + fD0ZResKUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0ZResKSA" ))); + fD0ZResPiUpgSA =new TGraph(*static_cast(resfileUpg->Get("D0ZResPiSA" ))); + fPt1ResPUpgSA =new TGraph(*static_cast(resfileUpg->Get("Pt1ResPSA" ))); + fPt1ResKUpgSA =new TGraph(*static_cast(resfileUpg->Get("Pt1ResKSA" ))); + fPt1ResPiUpgSA =new TGraph(*static_cast(resfileUpg->Get("Pt1ResPiSA" ))); + fD0RPResPUpgSA ->SetName("D0RPResPUpgSA" ); + fD0RPResKUpgSA ->SetName("D0RPResKUpgSA" ); + fD0RPResPiUpgSA->SetName("D0RPResPiUpgSA"); + fD0ZResPUpgSA ->SetName("D0ZResPUpgSA" ); + fD0ZResKUpgSA ->SetName("D0ZResKUpgSA" ); + fD0ZResPiUpgSA ->SetName("D0ZResPiUpgSA" ); + fPt1ResPUpgSA ->SetName("Pt1ResPUpgSA" ); + fPt1ResKUpgSA ->SetName("Pt1ResKUpgSA" ); + fPt1ResPiUpgSA ->SetName("Pt1ResPiUpgSA" ); + delete resfileUpg; + + DefineOutput(1,TNtuple::Class()); +} + +AliAnalysisTaskSEImproveITS::~AliAnalysisTaskSEImproveITS() { + // + // Destructor. + // + delete fDebugOutput; +} + +void AliAnalysisTaskSEImproveITS::UserCreateOutputObjects() { + // + // Creation of user output objects. + // + fDebugOutput=new TList(); + fDebugOutput->SetOwner(); + fDebugNtuple=new TNtuple("fDebugNtuple","Smearing","pdg:ptmc:d0rpo:d0zo:pt1o:sd0rpo:sd0zo:spt1o:d0rpn:d0zn:pt1n:sd0rpn:sd0zn:spt1n:d0rpmc:d0zmc:pt1mc"); + fDebugVars=new Float_t[fDebugNtuple->GetNvar()]; + + fDebugOutput->Add(fDebugNtuple ); + + fDebugOutput->Add(fD0RPResPCur ); + fDebugOutput->Add(fD0RPResKCur ); + fDebugOutput->Add(fD0RPResPiCur); + fDebugOutput->Add(fD0ZResPCur ); + fDebugOutput->Add(fD0ZResKCur ); + fDebugOutput->Add(fD0ZResPiCur ); + fDebugOutput->Add(fPt1ResPCur ); + fDebugOutput->Add(fPt1ResKCur ); + fDebugOutput->Add(fPt1ResPiCur ); + fDebugOutput->Add(fD0RPResPUpg ); + fDebugOutput->Add(fD0RPResKUpg ); + fDebugOutput->Add(fD0RPResPiUpg); + fDebugOutput->Add(fD0ZResPUpg ); + fDebugOutput->Add(fD0ZResKUpg ); + fDebugOutput->Add(fD0ZResPiUpg ); + fDebugOutput->Add(fPt1ResPUpg ); + fDebugOutput->Add(fPt1ResKUpg ); + fDebugOutput->Add(fPt1ResPiUpg ); + + PostData(1,fDebugOutput); +} + +void AliAnalysisTaskSEImproveITS::UserExec(Option_t*) { + // + // The event loop + // + AliAODEvent *ev=0x0; + if(!fRunInVertexing) { + ev=dynamic_cast(InputEvent()); + } else { + if(AODEvent() && IsStandardAOD()) ev = dynamic_cast (AODEvent()); + } + if(!ev) return; + Double_t bz=ev->GetMagneticField(); + + + + + // Smear all tracks + TClonesArray *mcs=static_cast(ev->GetList()->FindObject(AliAODMCParticle::StdBranchName())); + if (!mcs) return; + if (fImproveTracks) { + for(Int_t itrack=0;itrackGetNumberOfTracks();++itrack) { + SmearTrack(ev->GetTrack(itrack),mcs); + } + } + + // TODO: recalculated primary vertex + AliVVertex *primaryVertex=ev->GetPrimaryVertex(); + + // Recalculate all candidates + // D0->Kpi + TClonesArray *array2Prong=static_cast(ev->GetList()->FindObject("D0toKpi")); + if (array2Prong) { + for (Int_t icand=0;icandGetEntries();++icand) { + AliAODRecoDecayHF2Prong *decay=static_cast(array2Prong->At(icand)); + + // recalculate vertices + AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx(); + + + AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast(decay->GetDaughter(0))); + AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast(decay->GetDaughter(1))); + + TObjArray ta12; + + ta12.Add(&et1); ta12.Add(&et2); + AliESDVertex *v12 =RecalculateVertex(oldSecondaryVertex,&ta12 ,bz); + + + // update secondary vertex + Double_t pos[3]; + v12->GetXYZ(pos); + + decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]); + decay->GetSecondaryVtx()->SetChi2perNDF(v12->GetChi2toNDF()); + + //!!!!TODO: covariance matrix + + // update d0 + Double_t d0z0[2],covd0z0[3]; + Double_t d0[2],d0err[2]; + et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); + d0[0]=d0z0[0]; + d0err[0] = TMath::Sqrt(covd0z0[0]); + et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); + d0[1]=d0z0[0]; + d0err[1] = TMath::Sqrt(covd0z0[0]); + decay->Setd0Prongs(2,d0); + decay->Setd0errProngs(2,d0err); + // + + + Double_t xdummy=0.,ydummy=0.; + Double_t dca; + dca=et1.GetDCA(&et2,bz,xdummy,ydummy); + decay->SetDCA(dca); + + + delete v12; + + Double_t px[2],py[2],pz[2]; + for (Int_t i=0;i<2;++i) { + const AliAODTrack *t=static_cast(decay->GetDaughter(i)); + px[i]=t->Px(); + py[i]=t->Py(); + pz[i]=t->Pz(); + } + decay->SetPxPyPzProngs(2,px,py,pz); + } + } + + + // Dstar->Kpipi + TClonesArray *arrayCascade=static_cast(ev->GetList()->FindObject("Dstar")); + + if (arrayCascade) { + for (Int_t icand=0;icandGetEntries();++icand) { + AliAODRecoCascadeHF *decayDstar=static_cast(arrayCascade->At(icand)); + //Get D0 from D* + AliAODRecoDecayHF2Prong* decay=(AliAODRecoDecayHF2Prong*)decayDstar->Get2Prong(); + + // recalculate vertices + //AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx(); + + //soft pion + AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast(decayDstar->GetBachelor())); + + //track D0 + AliNeutralTrackParam *trackD0 = new AliNeutralTrackParam(decay); + + //!!!!TODO: covariance matrix + + // update d0 + Double_t d0z0[2],covd0z0[3]; + Double_t d01[2],d01err[2]; + + //the D* + et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); + d01[0]=d0z0[0]; + d01err[0] = TMath::Sqrt(covd0z0[0]); + trackD0->PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); + d01[1]=d0z0[0]; + d01err[1] = TMath::Sqrt(covd0z0[0]); + decayDstar->Setd0Prongs(2,d01); + decayDstar->Setd0errProngs(2,d01err); + + // delete v12; + delete trackD0; trackD0=NULL; + + // a run for D* + Double_t px1[2],py1[2],pz1[2]; + for (Int_t i=0;i<2;++i) { + const AliAODTrack *t1=static_cast(decayDstar->GetDaughter(i)); + px1[i]=t1->Px(); + py1[i]=t1->Py(); + pz1[i]=t1->Pz(); + } + decayDstar->SetPxPyPzProngs(2,px1,py1,pz1); + + } + } + + + // Three prong + TClonesArray *array3Prong=static_cast(ev->GetList()->FindObject("Charm3Prong")); + if (array3Prong) { + for (Int_t icand=0;icandGetEntries();++icand) { + AliAODRecoDecayHF3Prong *decay=static_cast(array3Prong->At(icand)); + + // recalculate vertices + AliVVertex *oldSecondaryVertex=decay->GetSecondaryVtx(); + AliExternalTrackParam et1; et1.CopyFromVTrack(static_cast(decay->GetDaughter(0))); + AliExternalTrackParam et2; et2.CopyFromVTrack(static_cast(decay->GetDaughter(1))); + AliExternalTrackParam et3; et3.CopyFromVTrack(static_cast(decay->GetDaughter(2))); + TObjArray ta123,ta12,ta23; + ta123.Add(&et1);ta123.Add(&et2);ta123.Add(&et3); + ta12. Add(&et1);ta12 .Add(&et2); + ta23 .Add(&et2);ta23 .Add(&et3); + AliESDVertex *v123=RecalculateVertex(oldSecondaryVertex,&ta123,bz); + AliESDVertex *v12 =RecalculateVertex(oldSecondaryVertex,&ta12 ,bz); + AliESDVertex *v23 =RecalculateVertex(oldSecondaryVertex,&ta23 ,bz); + + // update secondary vertex + Double_t pos[3]; + v123->GetXYZ(pos); + decay->GetSecondaryVtx()->SetPosition(pos[0],pos[1],pos[2]); + decay->GetSecondaryVtx()->SetChi2perNDF(v123->GetChi2toNDF()); + //TODO: covariance matrix + + // update d0 for all progs + Double_t d0z0[2],covd0z0[3]; + Double_t d0[3],d0err[3]; + et1.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); + d0[0]=d0z0[0]; + d0err[0] = TMath::Sqrt(covd0z0[0]); + et2.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); + d0[1]=d0z0[0]; + d0err[1] = TMath::Sqrt(covd0z0[0]); + et3.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0); + d0[2]=d0z0[0]; + d0err[2] = TMath::Sqrt(covd0z0[0]); + decay->Setd0Prongs (3,d0 ); + decay->Setd0errProngs(3,d0err); + // TODO: setter missing + + // update dca for prong combinations + Double_t xdummy=0.,ydummy=0.; + Double_t dca[3]; + dca[0]=et1.GetDCA(&et2,bz,xdummy,ydummy); + dca[1]=et3.GetDCA(&et2,bz,xdummy,ydummy); + dca[2]=et1.GetDCA(&et3,bz,xdummy,ydummy); + decay->SetDCAs(3,dca); + + // update dist12 and dist23 + primaryVertex->GetXYZ(pos); + decay->SetDist12toPrim(TMath::Sqrt((v12->GetX()-pos[0])*(v12->GetX()-pos[0]) + +(v12->GetY()-pos[1])*(v12->GetY()-pos[1]) + +(v12->GetZ()-pos[2])*(v12->GetZ()-pos[2]))); + decay->SetDist23toPrim(TMath::Sqrt((v23->GetX()-pos[0])*(v23->GetX()-pos[0]) + +(v23->GetY()-pos[1])*(v23->GetY()-pos[1]) + +(v23->GetZ()-pos[2])*(v23->GetZ()-pos[2]))); + + delete v123;delete v12;delete v23; + + Double_t px[3],py[3],pz[3]; + for (Int_t i=0;i<3;++i) { + const AliAODTrack *t=static_cast(decay->GetDaughter(i)); + px[i]=t->Px(); + py[i]=t->Py(); + pz[i]=t->Pz(); + } + decay->SetPxPyPzProngs(3,px,py,pz); + } + } +} + +void AliAnalysisTaskSEImproveITS::SmearTrack(AliAODTrack *track,const TClonesArray *mcs) { + // Early exit, if this track has nothing in common with the ITS + + if (!(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))) + return; + + // Check if the track was already "improved" (this is done with a trick using layer 7 (ie the 8th)) + if (TESTBIT(track->GetITSClusterMap(),7)) return; + // + + + // Get reconstructed track parameters + AliExternalTrackParam et; et.CopyFromVTrack(track); + Double_t *param=const_cast(et.GetParameter()); +//TODO: Double_t *covar=const_cast(et.GetCovariance()); + + // Get MC info + Int_t imc=track->GetLabel(); + if (imc<=0) return; + const AliAODMCParticle *mc=static_cast(mcs->At(imc)); + Double_t mcx[3]; + Double_t mcp[3]; + Double_t mccv[36]={0.}; + Short_t mcc; + mc->XvYvZv(mcx); + mc->PxPyPz(mcp); + mcc=mc->Charge(); + AliExternalTrackParam mct(mcx,mcp,mccv,mcc); + const Double_t *parammc=mct.GetParameter(); +//TODO: const Double_t *covermc=mct.GetCovariance(); + AliVertex vtx(mcx,1.,1); + + // Correct reference points and frames according to MC + // TODO: B-Field correct? + // TODO: failing propagation.... + et.PropagateToDCA(&vtx,track->GetBz(),10.); + et.Rotate(mct.GetAlpha()); + + // Select appropriate smearing functions + Double_t ptmc=TMath::Abs(mc->Pt()); + Double_t sd0rpn=0.; + Double_t sd0zn =0.; + Double_t spt1n =0.; + Double_t sd0rpo=0.; + Double_t sd0zo =0.; + Double_t spt1o =0.; + switch (mc->GetPdgCode()) { + case 2212: case -2212: + sd0rpo=EvalGraph(ptmc,fD0RPResPCur,fD0RPResPCurSA); + sd0zo =EvalGraph(ptmc,fD0ZResPCur,fD0ZResPCurSA); + spt1o =EvalGraph(ptmc,fPt1ResPCur,fPt1ResPCurSA); + sd0rpn=EvalGraph(ptmc,fD0RPResPUpg,fD0RPResPUpgSA); + sd0zn =EvalGraph(ptmc,fD0ZResPUpg,fD0ZResPUpgSA); + spt1n =EvalGraph(ptmc,fPt1ResPUpg,fPt1ResPUpgSA); + break; + case 321: case -321: + sd0rpo=EvalGraph(ptmc,fD0RPResKCur,fD0RPResKCurSA); + sd0zo =EvalGraph(ptmc,fD0ZResKCur,fD0ZResKCurSA); + spt1o =EvalGraph(ptmc,fPt1ResKCur,fPt1ResKCurSA); + sd0rpn=EvalGraph(ptmc,fD0RPResKUpg,fD0RPResKUpgSA); + sd0zn =EvalGraph(ptmc,fD0ZResKUpg,fD0ZResKUpgSA); + spt1n =EvalGraph(ptmc,fPt1ResKUpg,fPt1ResKUpgSA); + break; + case 211: case -211: + sd0rpo=EvalGraph(ptmc,fD0RPResPiCur,fD0RPResPiCurSA); + sd0zo =EvalGraph(ptmc,fD0ZResPiCur,fD0ZResPiCurSA); + spt1o =EvalGraph(ptmc,fPt1ResPiCur,fPt1ResPiCurSA); + sd0rpn=EvalGraph(ptmc,fD0RPResPiUpg,fD0RPResPiUpgSA); + sd0zn =EvalGraph(ptmc,fD0ZResPiUpg,fD0ZResPiUpgSA); + spt1n =EvalGraph(ptmc,fPt1ResPiUpg,fPt1ResPiUpgSA); + break; + default: + return; + } + + // Use the same units (i.e. cm and GeV/c)! TODO: pt! + sd0rpo*=1.e-4; + sd0zo *=1.e-4; + sd0rpn*=1.e-4; + sd0zn *=1.e-4; + + // Apply the smearing + Double_t d0zo =param [1]; + Double_t d0zmc =parammc[1]; + Double_t d0rpo =param [0]; + Double_t d0rpmc=parammc[0]; + Double_t pt1o =param [4]; + Double_t pt1mc =parammc[4]; + Double_t dd0zo =d0zo-d0zmc; + Double_t dd0zn =dd0zo *(sd0zo >0. ? (sd0zn /sd0zo ) : 1.); + Double_t d0zn =d0zmc+dd0zn; + Double_t dd0rpo=d0rpo-d0rpmc; + Double_t dd0rpn=dd0rpo*(sd0rpo>0. ? (sd0rpn/sd0rpo) : 1.); + Double_t d0rpn =d0rpmc+dd0rpn; + Double_t dpt1o =pt1o-pt1mc; + Double_t dpt1n =dpt1o *(spt1o >0. ? (spt1n /spt1o ) : 1.); + Double_t pt1n =pt1mc+dpt1n; + param[0]=d0rpn; + param[1]=d0zn ; + param[4]=pt1n ; + + // Copy the smeared parameters to the AOD track + Double_t x[3]; + Double_t p[3]; + et.GetXYZ(x); + et.GetPxPyPz(p); + track->SetPosition(x,kFALSE); + track->SetP(p,kTRUE); + + + // Mark the track as "improved" with a trick (this is done with a trick using layer 7 (ie the 8th)) + UChar_t itsClusterMap = track->GetITSClusterMap(); + SETBIT(itsClusterMap,7); + track->SetITSClusterMap(itsClusterMap); + // + + // write out debug infos + if (fDebugNtuple->GetEntries()GetPdgCode(); + fDebugVars[idbg++]=ptmc ; + fDebugVars[idbg++]=d0rpo ; + fDebugVars[idbg++]=d0zo ; + fDebugVars[idbg++]=pt1o ; + fDebugVars[idbg++]=sd0rpo; + fDebugVars[idbg++]=sd0zo ; + fDebugVars[idbg++]=spt1o ; + fDebugVars[idbg++]=d0rpn ; + fDebugVars[idbg++]=d0zn ; + fDebugVars[idbg++]=pt1n ; + fDebugVars[idbg++]=sd0rpn; + fDebugVars[idbg++]=sd0zn ; + fDebugVars[idbg++]=spt1n ; + fDebugVars[idbg++]=d0rpmc; + fDebugVars[idbg++]=d0zmc ; + fDebugVars[idbg++]=pt1mc ; + fDebugNtuple->Fill(fDebugVars); + PostData(1,fDebugOutput); + } +} + +AliESDVertex* AliAnalysisTaskSEImproveITS::RecalculateVertex(const AliVVertex *old,TObjArray *tracks,Double_t bField) { + // + // Helper function to recalculate a vertex. + // + + static UShort_t ids[]={1,2,3}; //TODO: unsave... + AliVertexerTracks vertexer(bField); + vertexer.SetVtxStart(old->GetX(),old->GetY(),old->GetZ()); + AliESDVertex *vertex=vertexer.VertexForSelectedTracks(tracks,ids); + return vertex; +} + +Double_t AliAnalysisTaskSEImproveITS::EvalGraph(Double_t x,const TGraph *graph,const TGraph *graphSA) const { + // + // Evaluates a TGraph without linear extrapolation. Instead the last + // valid point of the graph is used when out of range. + // The function assumes an ascending order of X. + // + + // TODO: find a pretty solution for this: + Int_t n =graph->GetN(); + Double_t xmin=graph->GetX()[0 ]; + Double_t xmax=graph->GetX()[n-1]; + if (xEval(xmin); + Double_t xminSA=graphSA->GetX()[0]; + if(xEval(xminSA); + return graphSA->Eval(x); + } + if (x>xmax) return graph->Eval(xmax); + return graph->Eval(x); +} + +ClassImp(AliAnalysisTaskSEImproveITS); + diff --git a/PWGHF/vertexingHF/AliAnalysisTaskSESelectHF4Prong.h b/PWGHF/vertexingHF/AliAnalysisTaskSESelectHF4Prong.h index b1fa5237797..861924f3d57 100644 --- a/PWGHF/vertexingHF/AliAnalysisTaskSESelectHF4Prong.h +++ b/PWGHF/vertexingHF/AliAnalysisTaskSESelectHF4Prong.h @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include #include @@ -23,7 +23,7 @@ #include "AliAnalysisTaskSE.h" #include "AliRDHFCutsD0toKpipipi.h" #include "AliAODMCParticle.h" -class AliAODEvent; +class AliAODEvent; class AliAnalysisManager; class AliAnalysisVertexingHF; class AliRDHFCuts; @@ -74,7 +74,7 @@ class AliAnalysisTaskSESelectHF4Prong : public AliAnalysisTaskSE TList *fOutput5; //! list send on output slot 5 TList *fOutputC; //! list send on output slot 6 - //output histograms + //output histograms TH1F *fhInvMassD0Sum10MevBin1; //! Invariant mass D01+D02 (good hyp) 10Mev BIN1 TH1F *fhInvMassD0barSum10MevBin1; //! Invariant mass D0bar1+D0bar2 (good hyp) 10Mev TH1F *fhInvMassSumAll10MevBin1; //! Invariant mass superimpose (good hyp only) 10Mev diff --git a/PWGHF/vertexingHF/AliAnalysisTaskSEVertexingHFTest.C b/PWGHF/vertexingHF/AliAnalysisTaskSEVertexingHFTest.C index ce85126a4f7..8a9c938dc7a 100644 --- a/PWGHF/vertexingHF/AliAnalysisTaskSEVertexingHFTest.C +++ b/PWGHF/vertexingHF/AliAnalysisTaskSEVertexingHFTest.C @@ -1,126 +1,126 @@ -void AliAnalysisTaskSEVertexingHFTest() -{ - // - // Test macro for the AliAnalysisTaskSE for heavy-flavour vertexing - // A.Dainese, andrea.dainese@lnl.infn.it - // - - Bool_t inputAOD=kFALSE; // otherwise, ESD - Bool_t createAOD=kTRUE; // kTRUE: create AOD and use it as input to vertexing - // kFALSE: use ESD as input to vertexing - Bool_t writeKineToAOD = kFALSE; - TString mode="local"; // otherwise, "grid" - Bool_t useParFiles=kFALSE; - Bool_t doCentrality=kTRUE; - - gROOT->LoadMacro("$ALICE_ROOT/PWGHF/vertexingHF/macros/LoadLibraries.C"); - LoadLibraries(useParFiles); - gSystem->Load("libPWGmuon"); - TChain *chain = 0; - - if(mode=="local") { - // Local files - TString treeName,fileName; - if(inputAOD) { - treeName="aodTree"; - fileName="AliAOD.root"; - } else { - treeName="esdTree"; - fileName="AliESDs.root"; - } - chain = new TChain(treeName.Data()); - chain->Add(fileName.Data()); - - } else if (mode=="grid") { - //Fetch files with AliEn : - const char *collectionfile = "Collection.xml"; - TGrid::Connect("alien://") ; - TAlienCollection *coll = TAlienCollection::Open(collectionfile); - if(inputAOD) { // input AOD - chain = new TChain("aodTree"); - while(coll->Next()) chain->Add(coll->GetTURL("")); - } else { // input ESD - //Create an AliRunTagCuts and an AliEventTagCuts Object and impose some selection criteria - AliRunTagCuts *runCuts = new AliRunTagCuts(); - AliEventTagCuts *eventCuts = new AliEventTagCuts(); - AliLHCTagCuts *lhcCuts = new AliLHCTagCuts(); - AliDetectorTagCuts *detCuts = new AliDetectorTagCuts(); - eventCuts->SetMultiplicityRange(0,20000); - //Create an AliTagAnalysis Object and chain the tags - AliTagAnalysis *tagAna = new AliTagAnalysis(); - tagAna->SetType("ESD"); - TGridResult *tagResult = coll->GetGridResult("",0,0); - tagResult->Print(); - tagAna->ChainGridTags(tagResult); - //Create a new esd chain and assign the chain that is returned by querying the tags - chain = tagAna->QueryTags(runCuts,lhcCuts,detCuts,eventCuts); - } - } else { - printf("ERROR: mode has to be \"local\" or \"grid\" \n"); - return; - } - - - // Create the analysis manager - AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager"); - mgr->SetDebugLevel(10); - - // Input Handler - AliInputEventHandler *inputHandler = 0; - if(inputAOD) { - inputHandler = new AliAODInputHandler(); - } else { - inputHandler = new AliESDInputHandler(); - } - mgr->SetInputEventHandler(inputHandler); - - // Output - AliAODHandler *aodHandler = new AliAODHandler(); - const char* deltaAODfname="AliAOD.VertexingHF.root"; - if(createAOD) { - aodHandler->SetOutputFileName("AliAOD.root"); - } else { - aodHandler->SetOutputFileName(deltaAODfname); - aodHandler->SetAODExtensionMode(); - } - mgr->SetOutputEventHandler(aodHandler); - mgr->RegisterExtraFile(deltaAODfname); - - if(!inputAOD && createAOD) { - // MC Truth - AliMCEventHandler* mcHandler = new AliMCEventHandler(); - if(writeKineToAOD) mgr->SetMCtruthEventHandler(mcHandler); - AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Filter"); - if(writeKineToAOD) mgr->AddTask(kinefilter); - // Centrality - if(doCentrality){ - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); - AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); - } - - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C"); - AliAnalysisTaskESDfilter *filter = AddTaskESDFilter(writeKineToAOD); - - } - - // Vertexing analysis task - gROOT->LoadMacro("$ALICE_ROOT/PWGHF/vertexingHF/macros/AddTaskVertexingHF.C"); - AliAnalysisTaskSEVertexingHF *hfTask = AddTaskVertexingHF(deltaAODfname); - - - // - // Run the analysis - // - printf("CHAIN HAS %d ENTRIES\n",(Int_t)chain->GetEntries()); - if(!mgr->InitAnalysis()) return; - - mgr->PrintStatus(); - - TStopwatch watch; - watch.Start(); - mgr->StartAnalysis(mode.Data(),chain); - watch.Stop(); - watch.Print(); - - return; -} +void AliAnalysisTaskSEVertexingHFTest() +{ + // + // Test macro for the AliAnalysisTaskSE for heavy-flavour vertexing + // A.Dainese, andrea.dainese@lnl.infn.it + // + + Bool_t inputAOD=kFALSE; // otherwise, ESD + Bool_t createAOD=kTRUE; // kTRUE: create AOD and use it as input to vertexing + // kFALSE: use ESD as input to vertexing + Bool_t writeKineToAOD = kFALSE; + TString mode="local"; // otherwise, "grid" + Bool_t useParFiles=kFALSE; + Bool_t doCentrality=kTRUE; + + gROOT->LoadMacro("$ALICE_ROOT/PWGHF/vertexingHF/macros/LoadLibraries.C"); + LoadLibraries(useParFiles); + gSystem->Load("libPWGmuon"); + TChain *chain = 0; + + if(mode=="local") { + // Local files + TString treeName,fileName; + if(inputAOD) { + treeName="aodTree"; + fileName="AliAOD.root"; + } else { + treeName="esdTree"; + fileName="AliESDs.root"; + } + chain = new TChain(treeName.Data()); + chain->Add(fileName.Data()); + + } else if (mode=="grid") { + //Fetch files with AliEn : + const char *collectionfile = "Collection.xml"; + TGrid::Connect("alien://") ; + TAlienCollection *coll = TAlienCollection::Open(collectionfile); + if(inputAOD) { // input AOD + chain = new TChain("aodTree"); + while(coll->Next()) chain->Add(coll->GetTURL("")); + } else { // input ESD + //Create an AliRunTagCuts and an AliEventTagCuts Object and impose some selection criteria + AliRunTagCuts *runCuts = new AliRunTagCuts(); + AliEventTagCuts *eventCuts = new AliEventTagCuts(); + AliLHCTagCuts *lhcCuts = new AliLHCTagCuts(); + AliDetectorTagCuts *detCuts = new AliDetectorTagCuts(); + eventCuts->SetMultiplicityRange(0,20000); + //Create an AliTagAnalysis Object and chain the tags + AliTagAnalysis *tagAna = new AliTagAnalysis(); + tagAna->SetType("ESD"); + TGridResult *tagResult = coll->GetGridResult("",0,0); + tagResult->Print(); + tagAna->ChainGridTags(tagResult); + //Create a new esd chain and assign the chain that is returned by querying the tags + chain = tagAna->QueryTags(runCuts,lhcCuts,detCuts,eventCuts); + } + } else { + printf("ERROR: mode has to be \"local\" or \"grid\" \n"); + return; + } + + + // Create the analysis manager + AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager"); + mgr->SetDebugLevel(10); + + // Input Handler + AliInputEventHandler *inputHandler = 0; + if(inputAOD) { + inputHandler = new AliAODInputHandler(); + } else { + inputHandler = new AliESDInputHandler(); + } + mgr->SetInputEventHandler(inputHandler); + + // Output + AliAODHandler *aodHandler = new AliAODHandler(); + const char* deltaAODfname="AliAOD.VertexingHF.root"; + if(createAOD) { + aodHandler->SetOutputFileName("AliAOD.root"); + } else { + aodHandler->SetOutputFileName(deltaAODfname); + aodHandler->SetAODExtensionMode(); + } + mgr->SetOutputEventHandler(aodHandler); + mgr->RegisterExtraFile(deltaAODfname); + + if(!inputAOD && createAOD) { + // MC Truth + AliMCEventHandler* mcHandler = new AliMCEventHandler(); + if(writeKineToAOD) mgr->SetMCtruthEventHandler(mcHandler); + AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Filter"); + if(writeKineToAOD) mgr->AddTask(kinefilter); + // Centrality + if(doCentrality){ + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); + AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); + } + + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C"); + AliAnalysisTaskESDfilter *filter = AddTaskESDFilter(writeKineToAOD); + + } + + // Vertexing analysis task + gROOT->LoadMacro("$ALICE_ROOT/PWGHF/vertexingHF/macros/AddTaskVertexingHF.C"); + AliAnalysisTaskSEVertexingHF *hfTask = AddTaskVertexingHF(deltaAODfname); + + + // + // Run the analysis + // + printf("CHAIN HAS %d ENTRIES\n",(Int_t)chain->GetEntries()); + if(!mgr->InitAnalysis()) return; + + mgr->PrintStatus(); + + TStopwatch watch; + watch.Start(); + mgr->StartAnalysis(mode.Data(),chain); + watch.Stop(); + watch.Print(); + + return; +} diff --git a/PWGHF/vertexingHF/AliCFVertexingHF3Prong.h b/PWGHF/vertexingHF/AliCFVertexingHF3Prong.h index 3c746481278..47bf8cde53b 100644 --- a/PWGHF/vertexingHF/AliCFVertexingHF3Prong.h +++ b/PWGHF/vertexingHF/AliCFVertexingHF3Prong.h @@ -1,71 +1,71 @@ -#ifndef ALICFVERTEXINGHF3PRONG_H -#define ALICFVERTEXINGHF3PRONG_H - -/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id$ */ - -/////////////////////////////////////////////////////////////////// -// // -// Class to compute variables for correction framework // -// for 3-body decays of D mesons (D+, Ds, Lc) // -// in bins of cut variables // -// Origin: Francesco Prino (prino@to.infn.it) // -// Renu Bala (bala@to.infn.it) // -// // -/////////////////////////////////////////////////////////////////// - -#include "AliCFVertexingHF.h" -#include "AliAODRecoDecayHF.h" -#include "AliAODRecoDecayHF3Prong.h" - -class AliAODMCParticle; -class TClonesArray; -class AliCFVertexingHF; -class AliESDtrack; -class TDatabasePDG; - -class AliCFVertexingHF3Prong : public AliCFVertexingHF{ - public: - - AliCFVertexingHF3Prong(Int_t decay,UInt_t resonantDecay); - AliCFVertexingHF3Prong(Int_t decay); - AliCFVertexingHF3Prong(TClonesArray *mcArray, UShort_t originDselection, Int_t decay); - AliCFVertexingHF3Prong(TClonesArray *mcArray, UShort_t originDselection, Int_t decay,UInt_t resonantDecay); - virtual ~AliCFVertexingHF3Prong(){}; - - - - Bool_t GetGeneratedValuesFromMCParticle(Double_t* /*vectorMC*/); - Bool_t GetRecoValuesFromCandidate(Double_t* /*vectorReco*/ ) const; - Bool_t CheckMCChannelDecay()const; - - Bool_t SetRecoCandidateParam(AliAODRecoDecayHF *recoCand); - virtual void SetDecay3Prong(Int_t decay){fDecay=decay;} - Bool_t CheckLc3Prong() const; - void SetResonantDecay(UInt_t resonantDecay) {fResonantDecay = resonantDecay;} - UInt_t GetResonantDecay() const {return fResonantDecay;} - - void SetGeneratedDsOption(Int_t opt) {fGenDsOption=opt;} - Int_t GetGeneratedDsOption() const {return fGenDsOption;} - - enum EDsSel {kCountAllDsKKpi=0, kCountPhipi=1, kCountK0stK=2, kCountResonant=3, kCountNonResonant=4}; - - protected: - - - - private: - AliCFVertexingHF3Prong(const AliCFVertexingHF3Prong& c); - AliCFVertexingHF3Prong& operator= (const AliCFVertexingHF3Prong& other); - - Int_t fDecay; // decay mode id - Int_t fGenDsOption; // option for selection Ds (see enum) - UInt_t fResonantDecay; // resonant decay for which to run the CF - - ClassDef(AliCFVertexingHF3Prong, 3); - -}; - -#endif +#ifndef ALICFVERTEXINGHF3PRONG_H +#define ALICFVERTEXINGHF3PRONG_H + +/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id$ */ + +/////////////////////////////////////////////////////////////////// +// // +// Class to compute variables for correction framework // +// for 3-body decays of D mesons (D+, Ds, Lc) // +// in bins of cut variables // +// Origin: Francesco Prino (prino@to.infn.it) // +// Renu Bala (bala@to.infn.it) // +// // +/////////////////////////////////////////////////////////////////// + +#include "AliCFVertexingHF.h" +#include "AliAODRecoDecayHF.h" +#include "AliAODRecoDecayHF3Prong.h" + +class AliAODMCParticle; +class TClonesArray; +class AliCFVertexingHF; +class AliESDtrack; +class TDatabasePDG; + +class AliCFVertexingHF3Prong : public AliCFVertexingHF{ + public: + + AliCFVertexingHF3Prong(Int_t decay,UInt_t resonantDecay); + AliCFVertexingHF3Prong(Int_t decay); + AliCFVertexingHF3Prong(TClonesArray *mcArray, UShort_t originDselection, Int_t decay); + AliCFVertexingHF3Prong(TClonesArray *mcArray, UShort_t originDselection, Int_t decay,UInt_t resonantDecay); + virtual ~AliCFVertexingHF3Prong(){}; + + + + Bool_t GetGeneratedValuesFromMCParticle(Double_t* /*vectorMC*/); + Bool_t GetRecoValuesFromCandidate(Double_t* /*vectorReco*/ ) const; + Bool_t CheckMCChannelDecay()const; + + Bool_t SetRecoCandidateParam(AliAODRecoDecayHF *recoCand); + virtual void SetDecay3Prong(Int_t decay){fDecay=decay;} + Bool_t CheckLc3Prong() const; + void SetResonantDecay(UInt_t resonantDecay) {fResonantDecay = resonantDecay;} + UInt_t GetResonantDecay() const {return fResonantDecay;} + + void SetGeneratedDsOption(Int_t opt) {fGenDsOption=opt;} + Int_t GetGeneratedDsOption() const {return fGenDsOption;} + + enum EDsSel {kCountAllDsKKpi=0, kCountPhipi=1, kCountK0stK=2, kCountResonant=3, kCountNonResonant=4}; + + protected: + + + + private: + AliCFVertexingHF3Prong(const AliCFVertexingHF3Prong& c); + AliCFVertexingHF3Prong& operator= (const AliCFVertexingHF3Prong& other); + + Int_t fDecay; // decay mode id + Int_t fGenDsOption; // option for selection Ds (see enum) + UInt_t fResonantDecay; // resonant decay for which to run the CF + + ClassDef(AliCFVertexingHF3Prong, 3); + +}; + +#endif diff --git a/PWGHF/vertexingHF/AliRDHFCutsD0toKpipipi.h b/PWGHF/vertexingHF/AliRDHFCutsD0toKpipipi.h index c8122b9bcc8..7d6e7bf8065 100644 --- a/PWGHF/vertexingHF/AliRDHFCutsD0toKpipipi.h +++ b/PWGHF/vertexingHF/AliRDHFCutsD0toKpipipi.h @@ -1,53 +1,53 @@ -#ifndef ALIRDHFCUTSD0TOKPIPIPI_H -#define ALIRDHFCUTSD0TOKPIPIPI_H -/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -//*********************************************************** -// Class AliRDHFCutsD0toKpipipi -// class for cuts on AOD reconstructed D0->Kpipipi +#ifndef ALIRDHFCUTSD0TOKPIPIPI_H +#define ALIRDHFCUTSD0TOKPIPIPI_H +/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//*********************************************************** +// Class AliRDHFCutsD0toKpipipi +// class for cuts on AOD reconstructed D0->Kpipipi // Author: A.Dainese, andrea.dainese@pd.infn.it -// F.Colamaria, fabio.colamaria@ba.infn.it -//*********************************************************** - +// F.Colamaria, fabio.colamaria@ba.infn.it +//*********************************************************** + #include "AliRDHFCuts.h" -#include "AliAODRecoDecayHF4Prong.h" - -class AliRDHFCutsD0toKpipipi : public AliRDHFCuts -{ - public: - - AliRDHFCutsD0toKpipipi(const char* name="CutsD0toKpipipi"); - - virtual ~AliRDHFCutsD0toKpipipi(){} - - AliRDHFCutsD0toKpipipi(const AliRDHFCutsD0toKpipipi& source); - AliRDHFCutsD0toKpipipi& operator=(const AliRDHFCutsD0toKpipipi& source); - +#include "AliAODRecoDecayHF4Prong.h" + +class AliRDHFCutsD0toKpipipi : public AliRDHFCuts +{ + public: + + AliRDHFCutsD0toKpipipi(const char* name="CutsD0toKpipipi"); + + virtual ~AliRDHFCutsD0toKpipipi(){} + + AliRDHFCutsD0toKpipipi(const AliRDHFCutsD0toKpipipi& source); + AliRDHFCutsD0toKpipipi& operator=(const AliRDHFCutsD0toKpipipi& source); + using AliRDHFCuts::GetCutVarsForOpt; virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters){ return GetCutVarsForOpt(d,vars,nvars,pdgdaughters,0x0); } - virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent* aod); - - using AliRDHFCuts::IsSelected; + virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent* aod); + + using AliRDHFCuts::IsSelected; virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel); virtual Int_t IsSelectedFromPID(AliAODRecoDecayHF4Prong *d, Int_t *hyp1, Int_t *hyp2, Int_t *hyp3, Int_t *hyp4); virtual Int_t D01Selected(TObject* obj,Int_t selectionLevel); virtual Int_t D02Selected(TObject* obj,Int_t selectionLevel); virtual Int_t D0bar1Selected(TObject* obj,Int_t selectionLevel); - virtual Int_t D0bar2Selected(TObject* obj,Int_t selectionLevel); - - Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);} + virtual Int_t D0bar2Selected(TObject* obj,Int_t selectionLevel); + + Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);} Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);} Bool_t GetUsePID(Int_t iPtBin=0) const { return (GetCuts() ? (Bool_t)(fCutsRD[GetGlobalIndex(8,iPtBin)]) : kFALSE);} - virtual Bool_t IsInFiducialAcceptance(Double_t pt,Double_t y) const; - - protected: - - - ClassDef(AliRDHFCutsD0toKpipipi,1); // class for cuts on AOD reconstructed D0->Kpipipi -}; - -#endif + virtual Bool_t IsInFiducialAcceptance(Double_t pt,Double_t y) const; + + protected: + + + ClassDef(AliRDHFCutsD0toKpipipi,1); // class for cuts on AOD reconstructed D0->Kpipipi +}; + +#endif diff --git a/PWGHF/vertexingHF/macros/AddTaskCompareHF.C b/PWGHF/vertexingHF/macros/AddTaskCompareHF.C index c38aa67c1d2..bc2483acc0e 100644 --- a/PWGHF/vertexingHF/macros/AddTaskCompareHF.C +++ b/PWGHF/vertexingHF/macros/AddTaskCompareHF.C @@ -1,42 +1,42 @@ -AliAnalysisTaskSECompareHF *AddTaskCompareHF() -{ - // - // Test macro for the AliAnalysisTaskSE for heavy-flavour candidates - // association with MC truth (using MC info in AOD) - // A.Dainese, andrea.dainese@lnl.infn.it - // - - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskCompareHF", "No analysis manager to connect to."); - return NULL; - } - - - // Aanalysis task - AliAnalysisTaskSECompareHF *hfTask = new AliAnalysisTaskSECompareHF("CompareHFAnalysis"); - hfTask->SetDebugLevel(0); - mgr->AddTask(hfTask); - - // - // Create containers for input/output - AliAnalysisDataContainer *cinputCmp = mgr->CreateContainer("cinput",TChain::Class(), - AliAnalysisManager::kInputContainer); - AliAnalysisDataContainer *coutputCmp1 = mgr->CreateContainer("coutputCmp1",TList::Class(), - AliAnalysisManager::kOutputContainer, - "CmpHF.root"); - AliAnalysisDataContainer *coutputCmp2 = mgr->CreateContainer("coutputCmp2",TNtuple::Class(), - AliAnalysisManager::kOutputContainer, - "CmpHFnt.root"); - coutputCmp2->SetSpecialOutput(); - - mgr->ConnectInput(hfTask,0,mgr->GetCommonInputContainer()); - - mgr->ConnectOutput(hfTask,1,coutputCmp1); - mgr->ConnectOutput(hfTask,2,coutputCmp2); - - return hfTask; -} +AliAnalysisTaskSECompareHF *AddTaskCompareHF() +{ + // + // Test macro for the AliAnalysisTaskSE for heavy-flavour candidates + // association with MC truth (using MC info in AOD) + // A.Dainese, andrea.dainese@lnl.infn.it + // + + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskCompareHF", "No analysis manager to connect to."); + return NULL; + } + + + // Aanalysis task + AliAnalysisTaskSECompareHF *hfTask = new AliAnalysisTaskSECompareHF("CompareHFAnalysis"); + hfTask->SetDebugLevel(0); + mgr->AddTask(hfTask); + + // + // Create containers for input/output + AliAnalysisDataContainer *cinputCmp = mgr->CreateContainer("cinput",TChain::Class(), + AliAnalysisManager::kInputContainer); + AliAnalysisDataContainer *coutputCmp1 = mgr->CreateContainer("coutputCmp1",TList::Class(), + AliAnalysisManager::kOutputContainer, + "CmpHF.root"); + AliAnalysisDataContainer *coutputCmp2 = mgr->CreateContainer("coutputCmp2",TNtuple::Class(), + AliAnalysisManager::kOutputContainer, + "CmpHFnt.root"); + coutputCmp2->SetSpecialOutput(); + + mgr->ConnectInput(hfTask,0,mgr->GetCommonInputContainer()); + + mgr->ConnectOutput(hfTask,1,coutputCmp1); + mgr->ConnectOutput(hfTask,2,coutputCmp2); + + return hfTask; +} diff --git a/PWGHF/vertexingHF/macros/AddTaskSelectHF.C b/PWGHF/vertexingHF/macros/AddTaskSelectHF.C index 0a01d8fa1d7..ac020dee99b 100644 --- a/PWGHF/vertexingHF/macros/AddTaskSelectHF.C +++ b/PWGHF/vertexingHF/macros/AddTaskSelectHF.C @@ -1,36 +1,36 @@ -AliAnalysisTaskSESelectHF *AddTaskSelectHF() -{ - // - // Test macro for the AliAnalysisTaskSE for heavy-flavour selection - // and creation of a stand-alone AOD - // A.Dainese, andrea.dainese@lnl.infn.it - // - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskSelectHF", "No analysis manager to connect to."); - return NULL; - } - - - // Output - AliAODHandler *aodHandler = new AliAODHandler(); - aodHandler->SetOutputFileName("AliAOD.VertexingHF.sa.root"); - aodHandler->SetCreateNonStandardAOD(); - mgr->SetOutputEventHandler(aodHandler); - - - // Aanalysis task - AliAnalysisTaskSESelectHF *hfTask = new AliAnalysisTaskSESelectHF("SelectHFAnalysis"); - hfTask->SetDebugLevel(2); - mgr->AddTask(hfTask); - - // - // Create containers for input/output - mgr->ConnectInput(hfTask,0,mgr->GetCommonInputContainer()); - mgr->ConnectOutput(hfTask,0,mgr->GetCommonOutputContainer()); - - return hfTask; -} +AliAnalysisTaskSESelectHF *AddTaskSelectHF() +{ + // + // Test macro for the AliAnalysisTaskSE for heavy-flavour selection + // and creation of a stand-alone AOD + // A.Dainese, andrea.dainese@lnl.infn.it + // + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskSelectHF", "No analysis manager to connect to."); + return NULL; + } + + + // Output + AliAODHandler *aodHandler = new AliAODHandler(); + aodHandler->SetOutputFileName("AliAOD.VertexingHF.sa.root"); + aodHandler->SetCreateNonStandardAOD(); + mgr->SetOutputEventHandler(aodHandler); + + + // Aanalysis task + AliAnalysisTaskSESelectHF *hfTask = new AliAnalysisTaskSESelectHF("SelectHFAnalysis"); + hfTask->SetDebugLevel(2); + mgr->AddTask(hfTask); + + // + // Create containers for input/output + mgr->ConnectInput(hfTask,0,mgr->GetCommonInputContainer()); + mgr->ConnectOutput(hfTask,0,mgr->GetCommonOutputContainer()); + + return hfTask; +} diff --git a/PWGHF/vertexingHF/upgrade/ConfigVertexingHF_ITSUpgrade_wPID.C b/PWGHF/vertexingHF/upgrade/ConfigVertexingHF_ITSUpgrade_wPID.C index 084feeca3eb..53fe0581878 100644 --- a/PWGHF/vertexingHF/upgrade/ConfigVertexingHF_ITSUpgrade_wPID.C +++ b/PWGHF/vertexingHF/upgrade/ConfigVertexingHF_ITSUpgrade_wPID.C @@ -1,219 +1,219 @@ -AliAnalysisVertexingHF* ConfigVertexingHF() { - - printf("Call to AliAnalysisVertexingHF parameters setting :\n"); - vHF = new AliAnalysisVertexingHF(); - - //--- switch-off candidates finding (default: all on) - //vHF->SetD0toKpiOff(); - vHF->SetD0toKpiOn(); - vHF->SetJPSItoEleOff(); - //vHF->Set3ProngOff(); - //vHF->SetLikeSignOn(); // like-sign pairs and triplets - vHF->SetLikeSign3prongOff(); - vHF->Set4ProngOff(); - //vHF->SetDstarOff(); - vHF->SetFindVertexForDstar(kFALSE); - //--- secondary vertex with KF? - //vHF->SetSecVtxWithKF(); - //Cascade - //vHF->SetCascadesOff(); - vHF->SetCascadesOn(); - vHF->SetFindVertexForCascades(kFALSE);//put kFALSE - vHF->SetV0TypeForCascadeVertex(AliRDHFCuts::kOnlyOfflineV0s); //All V0s 0, Offline 1, OnTheFly 2 - vHF->SetUseProtonPIDforLambdaC2V0(); - - vHF->SetMassCutBeforeVertexing(kTRUE); // PbPb - //set PID - vHF->SetUseKaonPIDfor3Prong(kTRUE); - vHF->SetUseKaonPIDforDs(kTRUE); - vHF->SetUseProtonAndPionPIDforLambdaC(); - vHF->SetnSigmaTOFforKaonSel(3., 5.); - vHF->SetnSigmaTPCforKaonSel(5., 5.); - vHF->SetnSigmaTOFforProtonSel(3.,5.); - vHF->SetnSigmaTPCforProtonSel(5., 5.); - vHF->SetnSigmaTPCforPionSel(4., 4.); - vHF->SetnSigmaTOFforPionSel(40.,40.); - vHF->SetMaxMomForTPCPid(9999999999.); - vHF->SetUseTPCPID(kTRUE); - vHF->SetUseTOFPID(kTRUE); - vHF->SetUseTPCPIDOnlyIfNoTOF(kTRUE); - - //--- set cuts for single-track selection - // displaced tracks - AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default"); - esdTrackCuts->SetRequireTPCRefit(kTRUE); - esdTrackCuts->SetMinNClustersTPC(70); - esdTrackCuts->SetRequireITSRefit(kTRUE); - //esdTrackCuts->SetMinNClustersITS(4); - esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kITSU012, - AliESDtrackCuts::kAny); - // |d0|>30 micron for pt<2GeV, no cut above 2 - esdTrackCuts->SetMinDCAToVertexXYPtDep("0.003*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))"); - esdTrackCuts->SetMaxDCAToVertexXY(1.); - esdTrackCuts->SetMaxDCAToVertexZ(1.); - esdTrackCuts->SetPtRange(0.5,1.e10); - esdTrackCuts->SetEtaRange(-0.9,+0.9); - AliAnalysisFilter *trkFilter = new AliAnalysisFilter("trackFilter"); - trkFilter->AddCuts(esdTrackCuts); - vHF->SetTrackFilter(trkFilter); - // D* soft pion tracks - AliESDtrackCuts *esdTrackCutsSoftPi = new AliESDtrackCuts("AliESDtrackCuts","default"); - esdTrackCutsSoftPi->SetMinNClustersITS(2); - esdTrackCutsSoftPi->SetMaxDCAToVertexXY(1.); - esdTrackCutsSoftPi->SetMaxDCAToVertexZ(1.); - esdTrackCutsSoftPi->SetPtRange(0.1,1.e10);// 0.2 - esdTrackCutsSoftPi->SetEtaRange(-0.9,+0.9); - AliAnalysisFilter *trkFilterSoftPi = new AliAnalysisFilter("trackFilterSoftPi"); - trkFilterSoftPi->AddCuts(esdTrackCutsSoftPi); - vHF->SetTrackFilterSoftPi(trkFilterSoftPi); - //--- set cuts for candidates selection - Int_t nptbins=2; Float_t ptlimits[2]={0.,1000000.}; - AliRDHFCutsD0toKpi *cutsD0toKpi = new AliRDHFCutsD0toKpi("CutsD0toKpi"); - cutsD0toKpi->SetStandardCutsPbPb2010(); - cutsD0toKpi->SetMinCentrality(-10); - cutsD0toKpi->SetMaxCentrality(110); - cutsD0toKpi->SetUseSpecialCuts(kFALSE); - cutsD0toKpi->SetMinPtCandidate(0.); - cutsD0toKpi->SetUsePID(kFALSE); - cutsD0toKpi->SetUsePhysicsSelection(kFALSE); - cutsD0toKpi->SetMaxVtxZ(1.e6); - cutsD0toKpi->SetTriggerClass(""); - Float_t cutsArrayD0toKpi[11]={0.4,999999.,1.1,0.,0.,999999.,999999.,0.,0.5,-1,0.}; - cutsD0toKpi->SetPtBins(nptbins,ptlimits); - cutsD0toKpi->SetCuts(11,cutsArrayD0toKpi); - cutsD0toKpi->AddTrackCuts(esdTrackCuts); - vHF->SetCutsD0toKpi(cutsD0toKpi); - AliRDHFCutsJpsitoee *cutsJpsitoee = new AliRDHFCutsJpsitoee("CutsJpsitoee"); - Float_t cutsArrayJpsitoee[9]={0.350,100000.,1.1,0.,0.,100000.,100000.,100000000.,-1.1}; - cutsJpsitoee->SetCuts(9,cutsArrayJpsitoee); - cutsJpsitoee->AddTrackCuts(esdTrackCuts); - vHF->SetCutsJpsitoee(cutsJpsitoee); - AliRDHFCutsDplustoKpipi *cutsDplustoKpipi = new AliRDHFCutsDplustoKpipi("CutsDplustoKpipi"); - cutsDplustoKpipi->SetStandardCutsPbPb2010(); - cutsDplustoKpipi->SetUsePID(kFALSE); - Float_t cutsArrayDplustoKpipi[14]={0.25,0.3,0.3,0.,0.,0.01,0.05,0.05,0.,0.88,0.,10000000000.,0.,-1.}; - cutsDplustoKpipi->SetPtBins(nptbins,ptlimits); - cutsDplustoKpipi->SetCuts(14,cutsArrayDplustoKpipi); - cutsDplustoKpipi->AddTrackCuts(esdTrackCuts); - cutsDplustoKpipi->SetMinPtCandidate(1.); - vHF->SetCutsDplustoKpipi(cutsDplustoKpipi); - AliRDHFCutsDstoKKpi *cutsDstoKKpi = new AliRDHFCutsDstoKKpi("CutsDstoKKpi"); - cutsDstoKKpi->SetStandardCutsPbPb2010(); - cutsDstoKKpi->SetUsePID(kFALSE); - Float_t cutsArrayDstoKKpi[20]={0.2,0.3,0.3,0.,0.,0.005,0.06,0.,0.,0.9,0.,100000.,0.035,0.0001,-1.,1.,0.,0.,0.,-1.}; - cutsDstoKKpi->SetPtBins(nptbins,ptlimits); - cutsDstoKKpi->SetCuts(20,cutsArrayDstoKKpi); - cutsDstoKKpi->AddTrackCuts(esdTrackCuts); - cutsDstoKKpi->SetMinPtCandidate(1.); - vHF->SetCutsDstoKKpi(cutsDstoKKpi); - AliRDHFCutsLctopKpi *cutsLctopKpi = new AliRDHFCutsLctopKpi("CutsLctopKpi"); - cutsLctopKpi->SetStandardCutsPbPb2010(); - cutsLctopKpi->SetUsePID(kFALSE); - Float_t cutsArrayLctopKpi[13]={0.13,0.4,0.4,0.,0.,0.,0.06,0.,0.,0.,0.,0.05,0.4}; - cutsLctopKpi->SetPtBins(nptbins,ptlimits); - cutsLctopKpi->SetCuts(13,cutsArrayLctopKpi); - cutsLctopKpi->AddTrackCuts(esdTrackCuts); - cutsLctopKpi->SetMinPtCandidate(2.);// era due - vHF->SetCutsLctopKpi(cutsLctopKpi); - AliRDHFCutsD0toKpipipi *cutsD0toKpipipi = new AliRDHFCutsD0toKpipipi("CutsD0toKpipipi"); - Float_t cutsArrayD0toKpipipi[9]={0.2,0.04,0.00,0.01,0.02,0.8,0.,0.1,0.}; - cutsD0toKpipipi->SetCuts(9,cutsArrayD0toKpipipi); - cutsD0toKpipipi->AddTrackCuts(esdTrackCuts); - vHF->SetCutsD0toKpipipi(cutsD0toKpipipi); - - - // D* pt dependent cuts ------------------------------------------ - - AliRDHFCutsDStartoKpipi *cutsDStartoKpipi = new AliRDHFCutsDStartoKpipi("CutsDStartoKpipi"); - cutsDStartoKpipi->SetUsePID(kFALSE); - - const Int_t nvars=16; - const Int_t nptbins=2; - - Float_t* ptbins; - ptbins=new Float_t[nptbins+1]; - ptbins[0]=0.; - ptbins[1]=5.; - ptbins[2]=999.; - - cutsDStartoKpipi->SetPtBins(nptbins+1,ptbins); - - Float_t** rdcutsvalmine; - rdcutsvalmine=new Float_t*[nvars]; - for(Int_t iv=0;ivSetCuts(nvars,nptbins,rdcutsvalmine); - - cutsDStartoKpipi->AddTrackCuts(esdTrackCuts); - cutsDStartoKpipi->AddTrackCutsSoftPi(esdTrackCutsSoftPi); - cutsDStartoKpipi->SetMinPtCandidate(1.); - vHF->SetCutsDStartoKpipi(cutsDStartoKpipi); - - //-------------------------------------------------------- - - AliRDHFCutsLctoV0 *cutsLctoV0 = new AliRDHFCutsLctoV0("CutsLctoV0"); - /* - Float_t cutsArrayLctoV0[9]={4.0,4.0,2.0,2.0,0.0,0.0,0.0,1000.,1000.}; - cutsLctoV0->SetCuts(9,cutsArrayLctoV0); - */ - //last dummy - //Float_t cutsArrayLctoV0[10]={4.0,4.0,2.0,2.0,0.0,0.0,0.0,1000.,1000.,1.}; - Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,1.0}; - cutsLctoV0->SetCuts(17,cutsArrayLctoV0); - cutsLctoV0->AddTrackCuts(esdTrackCuts); - vHF->SetCutsLctoV0(cutsLctoV0); - // - //--- set this if you want to reconstruct primary vertex candidate by - // candidate using other tracks in the event (for pp, broad - // interaction region) - //vHF->SetRecoPrimVtxSkippingTrks(); - //--- OR set this if you want to remove the candidate daughters from - // the primary vertex, without recostructing it from scratch - //vHF->SetRmTrksFromPrimVtx(); - - //--- check the settings - vHF->PrintStatus(); - //--- verbose - // AliLog::SetClassDebugLevel("AliAnalysisVertexingHF",2); - - - return vHF; -} - - +AliAnalysisVertexingHF* ConfigVertexingHF() { + + printf("Call to AliAnalysisVertexingHF parameters setting :\n"); + vHF = new AliAnalysisVertexingHF(); + + //--- switch-off candidates finding (default: all on) + //vHF->SetD0toKpiOff(); + vHF->SetD0toKpiOn(); + vHF->SetJPSItoEleOff(); + //vHF->Set3ProngOff(); + //vHF->SetLikeSignOn(); // like-sign pairs and triplets + vHF->SetLikeSign3prongOff(); + vHF->Set4ProngOff(); + //vHF->SetDstarOff(); + vHF->SetFindVertexForDstar(kFALSE); + //--- secondary vertex with KF? + //vHF->SetSecVtxWithKF(); + //Cascade + //vHF->SetCascadesOff(); + vHF->SetCascadesOn(); + vHF->SetFindVertexForCascades(kFALSE);//put kFALSE + vHF->SetV0TypeForCascadeVertex(AliRDHFCuts::kOnlyOfflineV0s); //All V0s 0, Offline 1, OnTheFly 2 + vHF->SetUseProtonPIDforLambdaC2V0(); + + vHF->SetMassCutBeforeVertexing(kTRUE); // PbPb + //set PID + vHF->SetUseKaonPIDfor3Prong(kTRUE); + vHF->SetUseKaonPIDforDs(kTRUE); + vHF->SetUseProtonAndPionPIDforLambdaC(); + vHF->SetnSigmaTOFforKaonSel(3., 5.); + vHF->SetnSigmaTPCforKaonSel(5., 5.); + vHF->SetnSigmaTOFforProtonSel(3.,5.); + vHF->SetnSigmaTPCforProtonSel(5., 5.); + vHF->SetnSigmaTPCforPionSel(4., 4.); + vHF->SetnSigmaTOFforPionSel(40.,40.); + vHF->SetMaxMomForTPCPid(9999999999.); + vHF->SetUseTPCPID(kTRUE); + vHF->SetUseTOFPID(kTRUE); + vHF->SetUseTPCPIDOnlyIfNoTOF(kTRUE); + + //--- set cuts for single-track selection + // displaced tracks + AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default"); + esdTrackCuts->SetRequireTPCRefit(kTRUE); + esdTrackCuts->SetMinNClustersTPC(70); + esdTrackCuts->SetRequireITSRefit(kTRUE); + //esdTrackCuts->SetMinNClustersITS(4); + esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kITSU012, + AliESDtrackCuts::kAny); + // |d0|>30 micron for pt<2GeV, no cut above 2 + esdTrackCuts->SetMinDCAToVertexXYPtDep("0.003*TMath::Max(0.,(1-TMath::Floor(TMath::Abs(pt)/2.)))"); + esdTrackCuts->SetMaxDCAToVertexXY(1.); + esdTrackCuts->SetMaxDCAToVertexZ(1.); + esdTrackCuts->SetPtRange(0.5,1.e10); + esdTrackCuts->SetEtaRange(-0.9,+0.9); + AliAnalysisFilter *trkFilter = new AliAnalysisFilter("trackFilter"); + trkFilter->AddCuts(esdTrackCuts); + vHF->SetTrackFilter(trkFilter); + // D* soft pion tracks + AliESDtrackCuts *esdTrackCutsSoftPi = new AliESDtrackCuts("AliESDtrackCuts","default"); + esdTrackCutsSoftPi->SetMinNClustersITS(2); + esdTrackCutsSoftPi->SetMaxDCAToVertexXY(1.); + esdTrackCutsSoftPi->SetMaxDCAToVertexZ(1.); + esdTrackCutsSoftPi->SetPtRange(0.1,1.e10);// 0.2 + esdTrackCutsSoftPi->SetEtaRange(-0.9,+0.9); + AliAnalysisFilter *trkFilterSoftPi = new AliAnalysisFilter("trackFilterSoftPi"); + trkFilterSoftPi->AddCuts(esdTrackCutsSoftPi); + vHF->SetTrackFilterSoftPi(trkFilterSoftPi); + //--- set cuts for candidates selection + Int_t nptbins=2; Float_t ptlimits[2]={0.,1000000.}; + AliRDHFCutsD0toKpi *cutsD0toKpi = new AliRDHFCutsD0toKpi("CutsD0toKpi"); + cutsD0toKpi->SetStandardCutsPbPb2010(); + cutsD0toKpi->SetMinCentrality(-10); + cutsD0toKpi->SetMaxCentrality(110); + cutsD0toKpi->SetUseSpecialCuts(kFALSE); + cutsD0toKpi->SetMinPtCandidate(0.); + cutsD0toKpi->SetUsePID(kFALSE); + cutsD0toKpi->SetUsePhysicsSelection(kFALSE); + cutsD0toKpi->SetMaxVtxZ(1.e6); + cutsD0toKpi->SetTriggerClass(""); + Float_t cutsArrayD0toKpi[11]={0.4,999999.,1.1,0.,0.,999999.,999999.,0.,0.5,-1,0.}; + cutsD0toKpi->SetPtBins(nptbins,ptlimits); + cutsD0toKpi->SetCuts(11,cutsArrayD0toKpi); + cutsD0toKpi->AddTrackCuts(esdTrackCuts); + vHF->SetCutsD0toKpi(cutsD0toKpi); + AliRDHFCutsJpsitoee *cutsJpsitoee = new AliRDHFCutsJpsitoee("CutsJpsitoee"); + Float_t cutsArrayJpsitoee[9]={0.350,100000.,1.1,0.,0.,100000.,100000.,100000000.,-1.1}; + cutsJpsitoee->SetCuts(9,cutsArrayJpsitoee); + cutsJpsitoee->AddTrackCuts(esdTrackCuts); + vHF->SetCutsJpsitoee(cutsJpsitoee); + AliRDHFCutsDplustoKpipi *cutsDplustoKpipi = new AliRDHFCutsDplustoKpipi("CutsDplustoKpipi"); + cutsDplustoKpipi->SetStandardCutsPbPb2010(); + cutsDplustoKpipi->SetUsePID(kFALSE); + Float_t cutsArrayDplustoKpipi[14]={0.25,0.3,0.3,0.,0.,0.01,0.05,0.05,0.,0.88,0.,10000000000.,0.,-1.}; + cutsDplustoKpipi->SetPtBins(nptbins,ptlimits); + cutsDplustoKpipi->SetCuts(14,cutsArrayDplustoKpipi); + cutsDplustoKpipi->AddTrackCuts(esdTrackCuts); + cutsDplustoKpipi->SetMinPtCandidate(1.); + vHF->SetCutsDplustoKpipi(cutsDplustoKpipi); + AliRDHFCutsDstoKKpi *cutsDstoKKpi = new AliRDHFCutsDstoKKpi("CutsDstoKKpi"); + cutsDstoKKpi->SetStandardCutsPbPb2010(); + cutsDstoKKpi->SetUsePID(kFALSE); + Float_t cutsArrayDstoKKpi[20]={0.2,0.3,0.3,0.,0.,0.005,0.06,0.,0.,0.9,0.,100000.,0.035,0.0001,-1.,1.,0.,0.,0.,-1.}; + cutsDstoKKpi->SetPtBins(nptbins,ptlimits); + cutsDstoKKpi->SetCuts(20,cutsArrayDstoKKpi); + cutsDstoKKpi->AddTrackCuts(esdTrackCuts); + cutsDstoKKpi->SetMinPtCandidate(1.); + vHF->SetCutsDstoKKpi(cutsDstoKKpi); + AliRDHFCutsLctopKpi *cutsLctopKpi = new AliRDHFCutsLctopKpi("CutsLctopKpi"); + cutsLctopKpi->SetStandardCutsPbPb2010(); + cutsLctopKpi->SetUsePID(kFALSE); + Float_t cutsArrayLctopKpi[13]={0.13,0.4,0.4,0.,0.,0.,0.06,0.,0.,0.,0.,0.05,0.4}; + cutsLctopKpi->SetPtBins(nptbins,ptlimits); + cutsLctopKpi->SetCuts(13,cutsArrayLctopKpi); + cutsLctopKpi->AddTrackCuts(esdTrackCuts); + cutsLctopKpi->SetMinPtCandidate(2.);// era due + vHF->SetCutsLctopKpi(cutsLctopKpi); + AliRDHFCutsD0toKpipipi *cutsD0toKpipipi = new AliRDHFCutsD0toKpipipi("CutsD0toKpipipi"); + Float_t cutsArrayD0toKpipipi[9]={0.2,0.04,0.00,0.01,0.02,0.8,0.,0.1,0.}; + cutsD0toKpipipi->SetCuts(9,cutsArrayD0toKpipipi); + cutsD0toKpipipi->AddTrackCuts(esdTrackCuts); + vHF->SetCutsD0toKpipipi(cutsD0toKpipipi); + + + // D* pt dependent cuts ------------------------------------------ + + AliRDHFCutsDStartoKpipi *cutsDStartoKpipi = new AliRDHFCutsDStartoKpipi("CutsDStartoKpipi"); + cutsDStartoKpipi->SetUsePID(kFALSE); + + const Int_t nvars=16; + const Int_t nptbins=2; + + Float_t* ptbins; + ptbins=new Float_t[nptbins+1]; + ptbins[0]=0.; + ptbins[1]=5.; + ptbins[2]=999.; + + cutsDStartoKpipi->SetPtBins(nptbins+1,ptbins); + + Float_t** rdcutsvalmine; + rdcutsvalmine=new Float_t*[nvars]; + for(Int_t iv=0;ivSetCuts(nvars,nptbins,rdcutsvalmine); + + cutsDStartoKpipi->AddTrackCuts(esdTrackCuts); + cutsDStartoKpipi->AddTrackCutsSoftPi(esdTrackCutsSoftPi); + cutsDStartoKpipi->SetMinPtCandidate(1.); + vHF->SetCutsDStartoKpipi(cutsDStartoKpipi); + + //-------------------------------------------------------- + + AliRDHFCutsLctoV0 *cutsLctoV0 = new AliRDHFCutsLctoV0("CutsLctoV0"); + /* + Float_t cutsArrayLctoV0[9]={4.0,4.0,2.0,2.0,0.0,0.0,0.0,1000.,1000.}; + cutsLctoV0->SetCuts(9,cutsArrayLctoV0); + */ + //last dummy + //Float_t cutsArrayLctoV0[10]={4.0,4.0,2.0,2.0,0.0,0.0,0.0,1000.,1000.,1.}; + Float_t cutsArrayLctoV0[17]={1.0,1.0,0.05,0.05,0.0,0.0,0.0,1000.,1000.,0.99,3.,1000.,0.,0.,0.,0.,1.0}; + cutsLctoV0->SetCuts(17,cutsArrayLctoV0); + cutsLctoV0->AddTrackCuts(esdTrackCuts); + vHF->SetCutsLctoV0(cutsLctoV0); + // + //--- set this if you want to reconstruct primary vertex candidate by + // candidate using other tracks in the event (for pp, broad + // interaction region) + //vHF->SetRecoPrimVtxSkippingTrks(); + //--- OR set this if you want to remove the candidate daughters from + // the primary vertex, without recostructing it from scratch + //vHF->SetRmTrksFromPrimVtx(); + + //--- check the settings + vHF->PrintStatus(); + //--- verbose + // AliLog::SetClassDebugLevel("AliAnalysisVertexingHF",2); + + + return vHF; +} + + diff --git a/PWGJE/AliAnalysisTaskPartonDisc.h b/PWGJE/AliAnalysisTaskPartonDisc.h index cf5bacbacfe..58f61439d93 100644 --- a/PWGJE/AliAnalysisTaskPartonDisc.h +++ b/PWGJE/AliAnalysisTaskPartonDisc.h @@ -1,306 +1,306 @@ -#ifndef ALIANALYSISTASKPARTONDISC_H -#define ALIANALYSISTASKPARTONDISC_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -////////////////////////////////////////////////////// -// // -// Analysis task for parton discrimination studies // -// // -////////////////////////////////////////////////////// - -class TH1F; -class TH1I; -class TH2F; -class TH2I; -class TH3F; -class TProfile; -class AliAODEvent; -class AliMCEvent; -class AliAODJet; -class AliAODTrack; -class AliAODMCParticle; -class AliAODVertex; - -#include "AliAnalysisTaskSE.h" - -class AliAnalysisTaskPartonDisc : public AliAnalysisTaskSE { - public: - AliAnalysisTaskPartonDisc(); - AliAnalysisTaskPartonDisc(const char *name); - virtual ~AliAnalysisTaskPartonDisc() {} - - virtual Bool_t UserNotify(); - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(const Option_t *); - - virtual void SetAODwithMC(Bool_t flag) {fUseAODMC = flag;} - virtual void SetMCBranch(const char* mc) {fBranchMC = mc;} - virtual void SetRecBranch(const char* rec) {fBranchRec = rec;} - virtual void SetSecondRecBranch(const char* secrec) {fBranchSecRec = secrec;} - virtual void SetSqrtS(const Double_t sqrts) {fSqrts = sqrts;} - virtual void SetXNtX(const Int_t x) {fNtX = x;} - virtual void SetJetRadius(const Double_t jetradius) {fJetRadius = jetradius;} - virtual void SetFilterBitTracks(const UInt_t bval) {fFilterBit = bval;} - virtual void SetFlavorRadius(const Double_t fradius) {fFlavorRadius = fradius;} - virtual void SetPhojetMC(Bool_t flagmc) {fPhojetMC = flagmc;} - Int_t GetMCEventType(AliMCEvent *mcEvent); - Int_t GetPhojetEventType(AliMCEvent *mcEvent); - Bool_t IsInsideAcceptance(AliAODJet *jet); - Int_t GetJetFlavour(AliAODJet *jet, Int_t ntracks,TClonesArray *mcarray); - Double_t GetDeltaR(Double_t eta1, Double_t phi1,Double_t eta2, Double_t phi2); - Int_t GetNumberOfMcChargedTracks(Int_t percentage,AliAODJet *Jet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); - Int_t GetNumberOfChargedTracks(Int_t percentage,AliAODJet *jet, Int_t ntracks, AliAODEvent *aode, Double_t jr); - virtual void AllocateStaticContainer(Int_t size); - virtual void InitializeStaticContainer(Int_t size); - virtual void SortArray(Double_t *pointer, Int_t arraySize); - Int_t TracksForPercentage(Double_t *array, Int_t arraysize, Int_t percentage, Double_t jetenergy); - Bool_t IsMCTrackInsideThisJet(AliAODMCParticle *MCParticle, AliAODJet *Jet, Double_t jr); - Bool_t IsTrackInsideThisJet(AliAODTrack *aodT, AliAODJet *Jet, Double_t jr); - Bool_t VertexInJet(AliAODVertex *pvtx, AliAODVertex *vtx, AliAODJet *jet, Double_t jr); - Double_t GetEtaValue(Double_t theta) const; - Double_t GetThetaAngle(Double_t xval, Double_t yval, Double_t zval); - Double_t GetPhiAngle(Double_t xval, Double_t yval); - virtual void SetAODMCInput(Bool_t b){fUseAODJetInput = b;} - Double_t DeltaPhiMC(AliAODJet *jet, AliAODMCParticle *particle); - Double_t DeltaEtaMC(AliAODJet *jet, AliAODMCParticle *particle); - Double_t DeltaPhiSqMC(AliAODJet *jet, AliAODMCParticle *particle); - Double_t DeltaEtaSqMC(AliAODJet *jet, AliAODMCParticle *particle); - Double_t DeltaPhiTrack(AliAODJet *jet, AliAODTrack *track); - Double_t DeltaEtaTrack(AliAODJet *jet, AliAODTrack *track); - Double_t DeltaPhiSqTrack(AliAODJet *jet, AliAODTrack *track); - Double_t DeltaEtaSqTrack(AliAODJet *jet, AliAODTrack *track); - virtual void SetMinPtTrackCut(const Double_t minptval) {fMinpTVal = minptval;} - static Bool_t NumberOfReadEventsAOD(const char* currFile, Int_t &fNEvents); - virtual void SetOnlyMC(Bool_t flagOnlyMC) {fUseOnlyMC = flagOnlyMC;} - virtual void SetCheckMCStatus(Bool_t flagMCStatus) {fCheckMCStatus = flagMCStatus;} - virtual void HasOverlapedCones(TClonesArray *JetArray); - virtual void ResetJetFlags(); - virtual void SetEnablePrints(Bool_t flagEnablePrints) {fEnablePrints = flagEnablePrints;} - Bool_t HasPerpendicularCone() const {return fHasPerpCone;} - virtual void SetHIEvent(Bool_t flagHIEvent) {fIsHIevent = flagHIEvent;} - Int_t GetNMcChargedTracksAboveThreshold(AliAODJet *jet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); - Int_t GetRecalcNTXMc(Int_t percentage, AliAODJet *originaljet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); - Int_t GetRecalcNMcChTrUpThr(AliAODJet *jet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); - Int_t GetNRecChargedTracksAboveThreshold(AliAODJet *jet, Int_t ntracks, AliAODEvent *aode, Double_t jr); - Int_t GetRecalcNTXRec(Int_t percentage,AliAODJet *originaljet, Int_t ntracks, AliAODEvent *aode, Double_t jr); - Int_t GetRecalcNRecChTrUpThr(AliAODJet *jet, Int_t ntracks, AliAODEvent *aode, Double_t jr); - Int_t TracksForPercentageRecalc(Double_t *array, Int_t arraysize, Int_t percentage, Double_t jetenergy); - Bool_t IsTrackInsideExcludedArea(Double_t tracketa, Double_t trackphi, TClonesArray *recojets); - Double_t GetV0ExcludedMultiplicity(TClonesArray *recojets); - virtual void SetMinPtUE(const Double_t minptvalUE) {fMinpTValUE = minptvalUE;} - virtual void SetMaxPtUE(const Double_t maxptvalUE) {fMaxpTValUE = maxptvalUE;} - virtual void SetMinPtMC(const Double_t minptvalMC) {fMinpTValMC = minptvalMC;} - Int_t GetV0LikeExcludedMultMC(TClonesArray *mcjets, TClonesArray *mcparticles); - virtual void SetIncreaseOfExclusionR(const Double_t increaseExclR) {fIncExcR = increaseExclR;} - virtual void ForceNotUseTrackRefs(const Bool_t flagForce) {fForceNotTR = flagForce;}; - virtual void NotExtendDiJetExclusion(const Bool_t flagNotDiJ) {fNotExtDiJEx = flagNotDiJ;}; - virtual void FillPerpConeHisto(TH3F *currenthisto, Int_t ntracks, AliAODEvent *aode, Int_t CentralityBin, Int_t pTBin); - virtual void ForceSkipSingleTrackJets(const Bool_t flagForceSJ) {fForceSkipSJ = flagForceSJ;}; - Bool_t IsEqualRel(Double_t vA, Double_t vB); - virtual void SetEnableJetEtaRestriction(Bool_t flagEnableJetEtaRes) {fIncreasingExcl = flagEnableJetEtaRes;} - virtual void SetTrackRandomRejectionPerc(const Double_t perctrackrr) {fTTrackRandomRejection = perctrackrr;} - virtual void SetTrackInJetRandomRejectionPerc(const Double_t perctrackijrr) {fJTrackRandomRejection = perctrackijrr;} - virtual void SetMinPtCutGlobMult(const Double_t minptglobmult) {fMinPtInGlobMult = minptglobmult;} - - private: - AliAODEvent *fAOD; //! AOD object - Bool_t fUseAODMC; // Flag for MC info in the AOD - Bool_t fPhojetMC; // Flag for Phojet MC - TString fBranchMC; // AOD branch name for MC jets - TString fBranchRec; // AOD branch name for reconstructed jets - TString fBranchSecRec; // AOD branch name for secondary reconstructed jets - Double_t fSqrts; // Value of sqrt{s} default 0 to spot errors - Int_t fNtX; // X Value of NTX default 0 to spot errors - Double_t fJetRadius; // Radius used in jet finding default 0 to spot errors - Double_t fFlavorRadius; // Radius used in flavor asignment - UInt_t fFilterBit; // Filterbit value: 16= tracks with standard cuts, 128 = tracks with hit in SDD, 144 (16+128) = all the previous - TList *fOutputList; //! Output list - TH1F *fJetPt; //! Pt spectrum of reco jets - TH1F *fJetPtSec; //! Pt spectrum of secondary reco jets - TH1F *fJetPtMC; //! Pt spectrum of mc jets - TH2F *fJetEta; //! Eta of reco jets - TH2F *fJetEtaSec; //! Eta of secondary reco jets - TH2F *fJetPhi; //! Phi of reco jets - TH2F *fJetPhiSec; //! Phi of secondary reco jets - TH2F *fJetEtaMC; //! Eta of MC jets - TH2F *fJetPhiMC; //! Phi of MC jets - TH2F *fPtAODMC; //! Pt spectrum of MC tracks in AOD - TH2F *fPtAOD; //! Pt spectrum of tracks in AOD (reco MC or real) - TH2F *fEtaAODMC; //! Eta distribution of MC AOD tracks - TH2F *fPhiAODMC; //! Phi distribution of MC AOD tracks - TH2F *fEtaAOD; //! Eta distribution of AOD tracks - TH2F *fPhiAOD; //! Phi distribution of AOD tracks - TH2F *fFlavor; //! Flavor distribution of jets - TH2F *fNJetsMC; //! Number of jets per event in MC - TH2F *fNJetsRD; //! Number of jets per event in real data or reco MC - TH2F *fNJetsRDSeco; //! Number of jets per event in real data or reco MC secondary branch - TH2F *fJetsMultPtMC; //! Jet multiplicity in jet pT in MC - TH2F *fJetsMultPtRD; //! Jet multiplicity in jet pT in real data or reco MC - static Double_t *fgContainer; //! static container for track counting - TH2F *fNChTr[12]; //! Number of charged tracks in the jets as a function of jet pt (MC) - TH2F *fNChTrRD; //! Number of charged tracks in the jets as a function of jet pt (Real Data) - TProfile *fProfNChTrRD; //! Number of charged tracks in the jets as a function of jet pt (Real Data) - TH2I *fProcessPDG[6]; //! Pythia process and pT of the jet - TH1F *fHistPtParton[12]; //! Pt distribution of jets per flavor, mc and reco - TH2F *fFragPion[6]; //! Fragmentation of jet in pions, jet energy - TH2F *fFragKaon[6]; //! Fragmentation of jet in kaons, jet energy - TH2F *fFragProton[6]; //! Fragmentation of jet in protons, jet energy - TH2F *fHistContainerR4[6]; //! Temporary containers for fragmentation of reco jets R4 - TH2F *fHistContainerR3[6]; //! Temporary containers for fragmentation of reco jets R3 - TH2F *fHistContainerR2[6]; //! Temporary containers for fragmentation of reco jets R2 - TH2F *fFragChargedR4[6]; //! Fragmentation of jet in charged part, jet energy R4 - TH2F *fFragChargedR3[6]; //! Fragmentation of jet in charged part, jet energy R3 - TH2F *fFragChargedR2[6]; //! Fragmentation of jet in charged part, jet energy R2 - TH2F *fFragCandidates[2]; //! Tagged candidates for FF - TH1F *fFracQQ; //! process qq as a function of x_{T} - TH1F *fFracGQ; //! process gq as a function of x_{T} - TH1F *fFracGG; //! process gg as a function of x_{T} - TH1F *fFracOutGoingQQ; //! process outgoing qq as a function of x_{T} - TH1F *fFracOutGoingGQ; //! process outgoing gq as a function of x_{T} - TH1F *fFracOutGoingGG; //! process outgoing gg as a function of x_{T} - TProfile *fh1Xsec; //! xsection from pyxsec.root - TH1F *fh1Trials; //! ntrials from pyxsec.root - Short_t fMpdg; //! PDG code of mother of parton - TH2F *fProcessJetPt; //! Pythia Process and jet pT - TH2F *fFlavorLead; //! Flavor distribution of the leading jet - TH2F *fProcessLeadJetPt; //! Pythia Process and jet pT of the leading jet - TH3F *fPDGMothLPart; //! PDG code of the mother of the leading parton, leading parton, jet pT - TH2F *fFlavProc; //! Flavor, Flavor status code - Float_t fAvgTrials; // Average number of trials - Bool_t fUseAODJetInput; // take MC from input AOD not from output AOD - Double_t fMinTrackPtInNTX; // Minimum track pT taken into the NTX calculation - Double_t fMaxTrackPtInNTX; // Maximum track pT taken into the NTX calculation - TH3F *fMinTrackPtInNTXh[2];//! Histo to save fMinTrackPtInNTX as a function of jet pT - TH2F *fMaxTrackPtInNTXh[2];//! Histo to save fMaxTrackPtInNTX as a function of jet pT - TH2F *fSCM[12]; //! Second central moment as a function of jet pt (MC) - TH2F *fSCMRD; //! Second central moment as a function of jet pt (Real Data) - Double_t fMinpTVal; // Minimum pT track cut for SCM analysis - TH2F *fZVertex; //! Z coordinate vertex position, number of reco jets - TH1F *fh1Events; //! nevents read out from PWG4_JetTasksOutput.root - Bool_t fUseOnlyMC; // Flag to signal only MC input - Bool_t fCheckMCStatus; // Flag to check the status of MC, not working for old aliroot - Bool_t fJetFlags[16]; // Flag to mark if this jet is ok (acceptance and no overlap), kTRUE if usable - Int_t fEvtCount; // Event counter for debugging - TH2F *fNAccJetsMC; //! Number of accepted jets per event in MC - TH2F *fNAccJetsRD; //! Number of accepted jets per event in real data or reco MC - TH2F *fNAccJetsRDSeco; //! Number of jets accepted per event in real data or reco MC secondary branch - Bool_t fEnablePrints; // Flag to enable print outs - TH1F *fRecJetPtInclusive; //! Pt spectrum of inclusive reco jets - TH1F *fMCJetPtInclusive; //! Pt spectrum of inclusive MC jets - TH1F *fRecJetPtLeading; //! Pt spectrum of leading reco jets - TH1F *fMCJetPtLeading; //! Pt spectrum of leading MC jets - TH1F *fSecRecJetPtInclusive; //! Pt spectrum of inclusive reco jets (2nd branch) - TH1F *fSecRecJetPtLeading; //! Pt spectrum of leading reco jets (2nd branch) - Bool_t fHasPerpCone; // Flag to indicate if possible to use a perpendicular jet for bckg - Double_t fEtaPerpCoord; // Eta of perpendicular cone - Double_t fPhiPerpCoord; // Phi of perpendicular cone - Double_t fPtPerpCoord; // pT of perpendicular cone - Bool_t fJetEvent; // Flag to indicate a jet event(in acceptance) - AliAODJet *fPerpCone; // Perpendicular Cone - TH2F *fNChTrMCPerp; //! Number of charged tracks in the perpendicular cone MC - TH2F *fNChTrRecPerp; //! Number of charged tracks in the perpendicular cone Reco or Real - TH2F *fSCMMCPerp; //! Second central moment as a function of jet pt for the perp cone MC - TH2F *fSCMRecPerp; //! Second central moment as a function of jet pt for the perp cone Rec - Bool_t fIsHIevent; // Flag to indicate that is reading a HI event - Double_t fCurrentJetMinPtNT90; // Min pT used in the NT90 calculation of the current jet - Double_t *fBckgSbsJet; //! Current jet, background substracted - Double_t fCurrentJetMinPtNT90Recalc; // Min pT used in the NT90 re-calculation of the current jet - // after energy correction of the jet - TH2F *fNChTrCorrMCQuark; //! Number of charged tracks after jet energy correction, as a function of corrected pT, MC quarks - TH2F *fNChTrCorrMCGluon; //! Number of charged tracks after jet energy correction, as a function of corrected pT, MC gluons - TH2F *fNChTrCorrMCPerp; //! Number of charged tracks in the perpendicular cone MC, after correction - Bool_t fIsPossibleToSubstBckg; // Flag to signal that there was a perpendicular cone, as is possible to substract background - TH3F *fNChTrRecECorr; //! Number of charged tracks in the energy corrected jet, as a function of corrected jet pt, centrality - TH3F *fNChTrRecPerpECorr; //! Number of charged tracks in the perpendicular after correction, as a func. of corr. jet pt, centrality - TH1F *fRefMult; //! Reference multiplicity in the AOD - TH2F *fNChTrRDMult[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for reference multiplicities in pp - TH1F *fNAccJetsRDMult[8]; //! Number of accepted jets per event in real data or reco MC, for reference multiplicities in pp - Int_t fCurrentJetCharge; // Charge in the current jet - TH1F *fTotalJetCharge[8]; //! Charge of this jet (dependent on event multiplicity) - TH2F *fRefMultWOJet; //! Reference multiplicity in the AOD and multiplicity without jets - TH2F *fSCMRDMult[8]; //! Second central moment as a function of jet pt (Real Data), for reference multiplicities in pp - TH2F *fNChTrRDMultMC[8]; //! Number of charged tracks in the jets as a function of jet pt (MC Data), for reference multiplicities in pp - TH2F *fSCMRDMultMC[8]; //! Second central moment as a function of jet pt (MC Data), for reference multiplicities in pp - TH2F *fVZEROMult; //! Multiplicity in V0A and V0C - TH2F *fMultWOJetVZero; //! Multiplicity without jets, and VZERO multiplicity - AliAODVZERO *fVZero; //! AOD VZERO object - TH2F *fNChTrRDMultSE[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for 2nd reference multiplicities in pp - TH1F *fNAccJetsRDMultSE[8]; //! Number of accepted jets per event in real data or reco MC, for 2nd reference multiplicities in pp - TH1F *fTotalJetChargeSE[8]; //! Charge of this jet (dependent on 2nd event multiplicity) - TH2F *fSCMRDMultSE[8]; //! Second central moment as a function of jet pt (Real Data), for 2nd reference multiplicities in pp - TH2F *fRefMultFullV0; //! Reference multiplicity in the AOD and multiplicity from the full V0 - TH2F *fRefMultV0Corr; //! Reference multiplicity in the AOD and multiplicity from the V0 sectors with no jets (2 leading) - TH2F *fFullV0V0Corr; //! Multiplicity from the full V0, Multiplicity from the V0 sectors with no jets (2 leading) - TH3F *fNTXV0MultPt; //! NTX, V0 corrected multiplicity, and jet pT - TH3F *fNTXCBMultPt; //! NTX, Central Barrel corrected multiplicity, and jet pT - TH2F *fNChTrRDMultOJ[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for reference multiplicities in pp, 1 Jet - TH2F *fSCMRDMultOJ[8]; //! Second central moment as a function of jet pt (Real Data), for reference multiplicities in pp, 1 Jet - TH2F *fNChTrRDMultSEOJ[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for 2nd reference multiplicities in pp, 1 Jet - TH2F *fSCMRDMultSEOJ[8]; //! Second central moment as a function of jet pt (Real Data), for 2nd reference multiplicities in pp, 1 Jet - Double_t fMinpTValUE; // Minimum pT track cut for the UE multiplicity, default 2 GeV for debugging - TH2F *fRefMultFullV0UJ; //! Reference multiplicity in the AOD and multiplicity from the full V0, un jet - TH2F *fRefMultV0CorrUJ; //! Reference multiplicity in the AOD and multiplicity from the V0 sectors with no jets (2 leading), un jet - TH2F *fFullV0V0CorrUJ; //! Multiplicity from the full V0, Multiplicity from the V0 sectors with no jets (2 leading), un jet - TH2F *fMultWOJetVZeroUJ; //! Multiplicity without jets, and VZERO multiplicity, un jet - TH2F *fRefMultWOJetUJ; //! Reference multiplicity in the AOD and multiplicity without jets, un jet - Double_t fMaxpTValUE; // Maximum pT track cut for the UE multiplicity, default 2 GeV for debugging - TH2F *fRefAODTrackCount; //! Correlation between ref aod mult. and my own counting - TH2F *fRefAODTrackCountUJ; //! Correlation between ref aod mult. and my own counting, single jet event - TH2F *fTrackCountWOJet; //! Correlation between my own counting TPC & soft TPC - TH2F *fTrackCountWOJetUJ; //! Correlation between my own counting TPC & soft TPC UJ - TH2F *fTrackCountWOJetUJMC; //! Correlation between my own counting TPC & soft TPC UJ solo MC - TH2F *fFullV0V0CorrUJMC; //! Multiplicity from the full V0, Multiplicity from the V0 sectors with no jets, un jet MC no real V0 - TH2F *fNChTrRDMultOJMC[8]; //! Number of charged tracks in the jets as a function of jet pt (MC), for reference multiplicities in pp, 1 Jet - TH2F *fSCMRDMultOJMC[8]; //! Second central moment as a function of jet pt (MC), for reference multiplicities in pp, 1 Jet - TH2F *fNChTrRDMultSEOJMC[8]; //! Number of charged tracks in the jets as a function of jet pt (MC), for 2nd reference multiplicities in pp, 1 Jet - TH2F *fSCMRDMultSEOJMC[8]; //! Second central moment as a function of jet pt (MC), for 2nd reference multiplicities in pp, 1 Jet - Double_t fMinpTValMC; // Minimum pT track cut for the MC multiplicity, default 2 GeV for debugging - Double_t fIncExcR; // Increase in the exclusion radius value - Bool_t fForceNotTR; // Force NOT to use track references - Bool_t fNotExtDiJEx; // Not extend the exclusion in the dijet area, old behaviour - TH3F *fMinTrackPtInNTXRecalc; //! Histo to save fMinTrackPtInNTX after recalculation as a function of jet pT - TH2F *fMaxTrackPtInNTXRecalc; //! Histo to save fMaxTrackPtInNTX after recalculation as a function of jet pT - TH3F *fPtDistInJetConeRaw; //! pT distributions of tracks inside the cone for jet pT (raw) ranges and centralities - TH3F *fPtDistInPerpConeRaw; //! pT distributions of tracks inside the perpendicular cone for jet pT (raw) ranges and centralities - TH3F *fPtInPerpCon; //! summed pT from the perpendicular cone for jet pT (raw) ranges and centralities - Double_t fMinTrackPtInNTXR; // Minimum track pT taken into the NTX re-calculation - Double_t fMaxTrackPtInNTXR; // Maximum track pT taken into the NTX re-calculation - Double_t fEventCent; // event centrality - TH2F *fNChTrRecPerpMultSEOJ[8]; //! Number of charged tracks in the perpendicular cone reco or real, with multiplicities - TH1F *fJetEtaAll; //! Eta distribution of all the found jets, no cuts - TH1F *fJetEtaOnlyTPCcut; //! Eta distribution of all the found jets, only with eta acceptance cut - TH1F *fJetEtaJetPt[3]; //! Eta distribution of analyzed jets, 3 ranges of pT - TH3F *fNChTrRecECorrPPMult; //! Number of charged tracks in the energy corrected jet, as a function of corrected jet pt, pp mult - TH3F *fNChTrRecPerpECorrPPMult; //! Number of charged tracks in the perpendicular after correction, as a func. of corr. jet pt, pp mult - Bool_t fForceSkipSJ; // Force to skip single track jets - TH2F *fJetPtCentPbPbRaw; //! Raw pT spectrum of reco jets, centrality in PbPb - TH2F *fJetPtCentPbPbCorr; //! Corrected pT spectrum of reco jets, centrality in PbPb - Double_t fJetAcceptance; // Acceptance cut on jets, for multiplicity in PbPb - Bool_t fIncreasingExcl; // Flag to indicate that the analyis increases exclusion beyond jet radius - TH3F *fTotTracksCone; //! total number of tracks in the jet cone, for jet pT (raw) ranges and centralities - Int_t fTotTracksInCone; // Total number of tracks in the jet cone - - Double_t fTTrackRandomRejection; // Percentage of tracks from the event randomly rejected - Double_t fJTrackRandomRejection; // Percentage of tracks from the jet randomly rejected - TH1F *fJEtaMCMultOJ[8]; //! Eta distribution of jets as a function of jet pt (MC), for V0-like multiplicities in pp, 1 Jet - TH1F *fJEtaMCMultSEOJ[8]; //! Eta distribution of jets as a function of jet pt (MC), for TPC-like multiplicities in pp, 1 Jet - TH1F *fJEtaRDMultOJ[8]; //! Eta distribution of jets as a function of jet pt (Reco Data), for V0 multiplicities in pp, 1 Jet - TH1F *fJEtaRDMultSEOJ[8]; //! Eta distribution of jets as a function of jet pt (Reco Data), for TPC-like multiplicities in pp, 1 Jet - TH1F *fJetPtMCMultOJ[8]; //! Pt spectrum jets (MC), for V0-like multiplicities in pp, 1 jet - TH1F *fJetPtMCMultSEOJ[8]; //! Pt spectrum jets (MC), for TPC-like multiplicities in pp, 1 jet - TH1F *fJetPtRDMultOJ[8]; //! Pt spectrum jets (Reco Data), for V0 multiplicities in pp, 1 jet - TH1F *fJetPtRDMultSEOJ[8]; //! Pt spectrum jets (Reco Data), for TPC multiplicities in pp, 1 jet - TH2F *fEntriesQuark[8]; //! Quark NT90 in MC in the multiplicity bins - TH2F *fEntriesGluon[8]; //! Gluon NT90 in MC in the multiplicity bins - Double_t fMinPtInGlobMult; // Min pT used in the global multiplicity calculation - - AliAnalysisTaskPartonDisc(const AliAnalysisTaskPartonDisc&); // not implemented - AliAnalysisTaskPartonDisc& operator=(const AliAnalysisTaskPartonDisc&); // not implemented - - ClassDef(AliAnalysisTaskPartonDisc, 4); -}; - -#endif +#ifndef ALIANALYSISTASKPARTONDISC_H +#define ALIANALYSISTASKPARTONDISC_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +////////////////////////////////////////////////////// +// // +// Analysis task for parton discrimination studies // +// // +////////////////////////////////////////////////////// + +class TH1F; +class TH1I; +class TH2F; +class TH2I; +class TH3F; +class TProfile; +class AliAODEvent; +class AliMCEvent; +class AliAODJet; +class AliAODTrack; +class AliAODMCParticle; +class AliAODVertex; + +#include "AliAnalysisTaskSE.h" + +class AliAnalysisTaskPartonDisc : public AliAnalysisTaskSE { + public: + AliAnalysisTaskPartonDisc(); + AliAnalysisTaskPartonDisc(const char *name); + virtual ~AliAnalysisTaskPartonDisc() {} + + virtual Bool_t UserNotify(); + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(const Option_t *); + + virtual void SetAODwithMC(Bool_t flag) {fUseAODMC = flag;} + virtual void SetMCBranch(const char* mc) {fBranchMC = mc;} + virtual void SetRecBranch(const char* rec) {fBranchRec = rec;} + virtual void SetSecondRecBranch(const char* secrec) {fBranchSecRec = secrec;} + virtual void SetSqrtS(const Double_t sqrts) {fSqrts = sqrts;} + virtual void SetXNtX(const Int_t x) {fNtX = x;} + virtual void SetJetRadius(const Double_t jetradius) {fJetRadius = jetradius;} + virtual void SetFilterBitTracks(const UInt_t bval) {fFilterBit = bval;} + virtual void SetFlavorRadius(const Double_t fradius) {fFlavorRadius = fradius;} + virtual void SetPhojetMC(Bool_t flagmc) {fPhojetMC = flagmc;} + Int_t GetMCEventType(AliMCEvent *mcEvent); + Int_t GetPhojetEventType(AliMCEvent *mcEvent); + Bool_t IsInsideAcceptance(AliAODJet *jet); + Int_t GetJetFlavour(AliAODJet *jet, Int_t ntracks,TClonesArray *mcarray); + Double_t GetDeltaR(Double_t eta1, Double_t phi1,Double_t eta2, Double_t phi2); + Int_t GetNumberOfMcChargedTracks(Int_t percentage,AliAODJet *Jet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); + Int_t GetNumberOfChargedTracks(Int_t percentage,AliAODJet *jet, Int_t ntracks, AliAODEvent *aode, Double_t jr); + virtual void AllocateStaticContainer(Int_t size); + virtual void InitializeStaticContainer(Int_t size); + virtual void SortArray(Double_t *pointer, Int_t arraySize); + Int_t TracksForPercentage(Double_t *array, Int_t arraysize, Int_t percentage, Double_t jetenergy); + Bool_t IsMCTrackInsideThisJet(AliAODMCParticle *MCParticle, AliAODJet *Jet, Double_t jr); + Bool_t IsTrackInsideThisJet(AliAODTrack *aodT, AliAODJet *Jet, Double_t jr); + Bool_t VertexInJet(AliAODVertex *pvtx, AliAODVertex *vtx, AliAODJet *jet, Double_t jr); + Double_t GetEtaValue(Double_t theta) const; + Double_t GetThetaAngle(Double_t xval, Double_t yval, Double_t zval); + Double_t GetPhiAngle(Double_t xval, Double_t yval); + virtual void SetAODMCInput(Bool_t b){fUseAODJetInput = b;} + Double_t DeltaPhiMC(AliAODJet *jet, AliAODMCParticle *particle); + Double_t DeltaEtaMC(AliAODJet *jet, AliAODMCParticle *particle); + Double_t DeltaPhiSqMC(AliAODJet *jet, AliAODMCParticle *particle); + Double_t DeltaEtaSqMC(AliAODJet *jet, AliAODMCParticle *particle); + Double_t DeltaPhiTrack(AliAODJet *jet, AliAODTrack *track); + Double_t DeltaEtaTrack(AliAODJet *jet, AliAODTrack *track); + Double_t DeltaPhiSqTrack(AliAODJet *jet, AliAODTrack *track); + Double_t DeltaEtaSqTrack(AliAODJet *jet, AliAODTrack *track); + virtual void SetMinPtTrackCut(const Double_t minptval) {fMinpTVal = minptval;} + static Bool_t NumberOfReadEventsAOD(const char* currFile, Int_t &fNEvents); + virtual void SetOnlyMC(Bool_t flagOnlyMC) {fUseOnlyMC = flagOnlyMC;} + virtual void SetCheckMCStatus(Bool_t flagMCStatus) {fCheckMCStatus = flagMCStatus;} + virtual void HasOverlapedCones(TClonesArray *JetArray); + virtual void ResetJetFlags(); + virtual void SetEnablePrints(Bool_t flagEnablePrints) {fEnablePrints = flagEnablePrints;} + Bool_t HasPerpendicularCone() const {return fHasPerpCone;} + virtual void SetHIEvent(Bool_t flagHIEvent) {fIsHIevent = flagHIEvent;} + Int_t GetNMcChargedTracksAboveThreshold(AliAODJet *jet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); + Int_t GetRecalcNTXMc(Int_t percentage, AliAODJet *originaljet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); + Int_t GetRecalcNMcChTrUpThr(AliAODJet *jet, Int_t ntracks, TClonesArray *mcarray, Double_t jr); + Int_t GetNRecChargedTracksAboveThreshold(AliAODJet *jet, Int_t ntracks, AliAODEvent *aode, Double_t jr); + Int_t GetRecalcNTXRec(Int_t percentage,AliAODJet *originaljet, Int_t ntracks, AliAODEvent *aode, Double_t jr); + Int_t GetRecalcNRecChTrUpThr(AliAODJet *jet, Int_t ntracks, AliAODEvent *aode, Double_t jr); + Int_t TracksForPercentageRecalc(Double_t *array, Int_t arraysize, Int_t percentage, Double_t jetenergy); + Bool_t IsTrackInsideExcludedArea(Double_t tracketa, Double_t trackphi, TClonesArray *recojets); + Double_t GetV0ExcludedMultiplicity(TClonesArray *recojets); + virtual void SetMinPtUE(const Double_t minptvalUE) {fMinpTValUE = minptvalUE;} + virtual void SetMaxPtUE(const Double_t maxptvalUE) {fMaxpTValUE = maxptvalUE;} + virtual void SetMinPtMC(const Double_t minptvalMC) {fMinpTValMC = minptvalMC;} + Int_t GetV0LikeExcludedMultMC(TClonesArray *mcjets, TClonesArray *mcparticles); + virtual void SetIncreaseOfExclusionR(const Double_t increaseExclR) {fIncExcR = increaseExclR;} + virtual void ForceNotUseTrackRefs(const Bool_t flagForce) {fForceNotTR = flagForce;}; + virtual void NotExtendDiJetExclusion(const Bool_t flagNotDiJ) {fNotExtDiJEx = flagNotDiJ;}; + virtual void FillPerpConeHisto(TH3F *currenthisto, Int_t ntracks, AliAODEvent *aode, Int_t CentralityBin, Int_t pTBin); + virtual void ForceSkipSingleTrackJets(const Bool_t flagForceSJ) {fForceSkipSJ = flagForceSJ;}; + Bool_t IsEqualRel(Double_t vA, Double_t vB); + virtual void SetEnableJetEtaRestriction(Bool_t flagEnableJetEtaRes) {fIncreasingExcl = flagEnableJetEtaRes;} + virtual void SetTrackRandomRejectionPerc(const Double_t perctrackrr) {fTTrackRandomRejection = perctrackrr;} + virtual void SetTrackInJetRandomRejectionPerc(const Double_t perctrackijrr) {fJTrackRandomRejection = perctrackijrr;} + virtual void SetMinPtCutGlobMult(const Double_t minptglobmult) {fMinPtInGlobMult = minptglobmult;} + + private: + AliAODEvent *fAOD; //! AOD object + Bool_t fUseAODMC; // Flag for MC info in the AOD + Bool_t fPhojetMC; // Flag for Phojet MC + TString fBranchMC; // AOD branch name for MC jets + TString fBranchRec; // AOD branch name for reconstructed jets + TString fBranchSecRec; // AOD branch name for secondary reconstructed jets + Double_t fSqrts; // Value of sqrt{s} default 0 to spot errors + Int_t fNtX; // X Value of NTX default 0 to spot errors + Double_t fJetRadius; // Radius used in jet finding default 0 to spot errors + Double_t fFlavorRadius; // Radius used in flavor asignment + UInt_t fFilterBit; // Filterbit value: 16= tracks with standard cuts, 128 = tracks with hit in SDD, 144 (16+128) = all the previous + TList *fOutputList; //! Output list + TH1F *fJetPt; //! Pt spectrum of reco jets + TH1F *fJetPtSec; //! Pt spectrum of secondary reco jets + TH1F *fJetPtMC; //! Pt spectrum of mc jets + TH2F *fJetEta; //! Eta of reco jets + TH2F *fJetEtaSec; //! Eta of secondary reco jets + TH2F *fJetPhi; //! Phi of reco jets + TH2F *fJetPhiSec; //! Phi of secondary reco jets + TH2F *fJetEtaMC; //! Eta of MC jets + TH2F *fJetPhiMC; //! Phi of MC jets + TH2F *fPtAODMC; //! Pt spectrum of MC tracks in AOD + TH2F *fPtAOD; //! Pt spectrum of tracks in AOD (reco MC or real) + TH2F *fEtaAODMC; //! Eta distribution of MC AOD tracks + TH2F *fPhiAODMC; //! Phi distribution of MC AOD tracks + TH2F *fEtaAOD; //! Eta distribution of AOD tracks + TH2F *fPhiAOD; //! Phi distribution of AOD tracks + TH2F *fFlavor; //! Flavor distribution of jets + TH2F *fNJetsMC; //! Number of jets per event in MC + TH2F *fNJetsRD; //! Number of jets per event in real data or reco MC + TH2F *fNJetsRDSeco; //! Number of jets per event in real data or reco MC secondary branch + TH2F *fJetsMultPtMC; //! Jet multiplicity in jet pT in MC + TH2F *fJetsMultPtRD; //! Jet multiplicity in jet pT in real data or reco MC + static Double_t *fgContainer; //! static container for track counting + TH2F *fNChTr[12]; //! Number of charged tracks in the jets as a function of jet pt (MC) + TH2F *fNChTrRD; //! Number of charged tracks in the jets as a function of jet pt (Real Data) + TProfile *fProfNChTrRD; //! Number of charged tracks in the jets as a function of jet pt (Real Data) + TH2I *fProcessPDG[6]; //! Pythia process and pT of the jet + TH1F *fHistPtParton[12]; //! Pt distribution of jets per flavor, mc and reco + TH2F *fFragPion[6]; //! Fragmentation of jet in pions, jet energy + TH2F *fFragKaon[6]; //! Fragmentation of jet in kaons, jet energy + TH2F *fFragProton[6]; //! Fragmentation of jet in protons, jet energy + TH2F *fHistContainerR4[6]; //! Temporary containers for fragmentation of reco jets R4 + TH2F *fHistContainerR3[6]; //! Temporary containers for fragmentation of reco jets R3 + TH2F *fHistContainerR2[6]; //! Temporary containers for fragmentation of reco jets R2 + TH2F *fFragChargedR4[6]; //! Fragmentation of jet in charged part, jet energy R4 + TH2F *fFragChargedR3[6]; //! Fragmentation of jet in charged part, jet energy R3 + TH2F *fFragChargedR2[6]; //! Fragmentation of jet in charged part, jet energy R2 + TH2F *fFragCandidates[2]; //! Tagged candidates for FF + TH1F *fFracQQ; //! process qq as a function of x_{T} + TH1F *fFracGQ; //! process gq as a function of x_{T} + TH1F *fFracGG; //! process gg as a function of x_{T} + TH1F *fFracOutGoingQQ; //! process outgoing qq as a function of x_{T} + TH1F *fFracOutGoingGQ; //! process outgoing gq as a function of x_{T} + TH1F *fFracOutGoingGG; //! process outgoing gg as a function of x_{T} + TProfile *fh1Xsec; //! xsection from pyxsec.root + TH1F *fh1Trials; //! ntrials from pyxsec.root + Short_t fMpdg; //! PDG code of mother of parton + TH2F *fProcessJetPt; //! Pythia Process and jet pT + TH2F *fFlavorLead; //! Flavor distribution of the leading jet + TH2F *fProcessLeadJetPt; //! Pythia Process and jet pT of the leading jet + TH3F *fPDGMothLPart; //! PDG code of the mother of the leading parton, leading parton, jet pT + TH2F *fFlavProc; //! Flavor, Flavor status code + Float_t fAvgTrials; // Average number of trials + Bool_t fUseAODJetInput; // take MC from input AOD not from output AOD + Double_t fMinTrackPtInNTX; // Minimum track pT taken into the NTX calculation + Double_t fMaxTrackPtInNTX; // Maximum track pT taken into the NTX calculation + TH3F *fMinTrackPtInNTXh[2];//! Histo to save fMinTrackPtInNTX as a function of jet pT + TH2F *fMaxTrackPtInNTXh[2];//! Histo to save fMaxTrackPtInNTX as a function of jet pT + TH2F *fSCM[12]; //! Second central moment as a function of jet pt (MC) + TH2F *fSCMRD; //! Second central moment as a function of jet pt (Real Data) + Double_t fMinpTVal; // Minimum pT track cut for SCM analysis + TH2F *fZVertex; //! Z coordinate vertex position, number of reco jets + TH1F *fh1Events; //! nevents read out from PWG4_JetTasksOutput.root + Bool_t fUseOnlyMC; // Flag to signal only MC input + Bool_t fCheckMCStatus; // Flag to check the status of MC, not working for old aliroot + Bool_t fJetFlags[16]; // Flag to mark if this jet is ok (acceptance and no overlap), kTRUE if usable + Int_t fEvtCount; // Event counter for debugging + TH2F *fNAccJetsMC; //! Number of accepted jets per event in MC + TH2F *fNAccJetsRD; //! Number of accepted jets per event in real data or reco MC + TH2F *fNAccJetsRDSeco; //! Number of jets accepted per event in real data or reco MC secondary branch + Bool_t fEnablePrints; // Flag to enable print outs + TH1F *fRecJetPtInclusive; //! Pt spectrum of inclusive reco jets + TH1F *fMCJetPtInclusive; //! Pt spectrum of inclusive MC jets + TH1F *fRecJetPtLeading; //! Pt spectrum of leading reco jets + TH1F *fMCJetPtLeading; //! Pt spectrum of leading MC jets + TH1F *fSecRecJetPtInclusive; //! Pt spectrum of inclusive reco jets (2nd branch) + TH1F *fSecRecJetPtLeading; //! Pt spectrum of leading reco jets (2nd branch) + Bool_t fHasPerpCone; // Flag to indicate if possible to use a perpendicular jet for bckg + Double_t fEtaPerpCoord; // Eta of perpendicular cone + Double_t fPhiPerpCoord; // Phi of perpendicular cone + Double_t fPtPerpCoord; // pT of perpendicular cone + Bool_t fJetEvent; // Flag to indicate a jet event(in acceptance) + AliAODJet *fPerpCone; // Perpendicular Cone + TH2F *fNChTrMCPerp; //! Number of charged tracks in the perpendicular cone MC + TH2F *fNChTrRecPerp; //! Number of charged tracks in the perpendicular cone Reco or Real + TH2F *fSCMMCPerp; //! Second central moment as a function of jet pt for the perp cone MC + TH2F *fSCMRecPerp; //! Second central moment as a function of jet pt for the perp cone Rec + Bool_t fIsHIevent; // Flag to indicate that is reading a HI event + Double_t fCurrentJetMinPtNT90; // Min pT used in the NT90 calculation of the current jet + Double_t *fBckgSbsJet; //! Current jet, background substracted + Double_t fCurrentJetMinPtNT90Recalc; // Min pT used in the NT90 re-calculation of the current jet + // after energy correction of the jet + TH2F *fNChTrCorrMCQuark; //! Number of charged tracks after jet energy correction, as a function of corrected pT, MC quarks + TH2F *fNChTrCorrMCGluon; //! Number of charged tracks after jet energy correction, as a function of corrected pT, MC gluons + TH2F *fNChTrCorrMCPerp; //! Number of charged tracks in the perpendicular cone MC, after correction + Bool_t fIsPossibleToSubstBckg; // Flag to signal that there was a perpendicular cone, as is possible to substract background + TH3F *fNChTrRecECorr; //! Number of charged tracks in the energy corrected jet, as a function of corrected jet pt, centrality + TH3F *fNChTrRecPerpECorr; //! Number of charged tracks in the perpendicular after correction, as a func. of corr. jet pt, centrality + TH1F *fRefMult; //! Reference multiplicity in the AOD + TH2F *fNChTrRDMult[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for reference multiplicities in pp + TH1F *fNAccJetsRDMult[8]; //! Number of accepted jets per event in real data or reco MC, for reference multiplicities in pp + Int_t fCurrentJetCharge; // Charge in the current jet + TH1F *fTotalJetCharge[8]; //! Charge of this jet (dependent on event multiplicity) + TH2F *fRefMultWOJet; //! Reference multiplicity in the AOD and multiplicity without jets + TH2F *fSCMRDMult[8]; //! Second central moment as a function of jet pt (Real Data), for reference multiplicities in pp + TH2F *fNChTrRDMultMC[8]; //! Number of charged tracks in the jets as a function of jet pt (MC Data), for reference multiplicities in pp + TH2F *fSCMRDMultMC[8]; //! Second central moment as a function of jet pt (MC Data), for reference multiplicities in pp + TH2F *fVZEROMult; //! Multiplicity in V0A and V0C + TH2F *fMultWOJetVZero; //! Multiplicity without jets, and VZERO multiplicity + AliAODVZERO *fVZero; //! AOD VZERO object + TH2F *fNChTrRDMultSE[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for 2nd reference multiplicities in pp + TH1F *fNAccJetsRDMultSE[8]; //! Number of accepted jets per event in real data or reco MC, for 2nd reference multiplicities in pp + TH1F *fTotalJetChargeSE[8]; //! Charge of this jet (dependent on 2nd event multiplicity) + TH2F *fSCMRDMultSE[8]; //! Second central moment as a function of jet pt (Real Data), for 2nd reference multiplicities in pp + TH2F *fRefMultFullV0; //! Reference multiplicity in the AOD and multiplicity from the full V0 + TH2F *fRefMultV0Corr; //! Reference multiplicity in the AOD and multiplicity from the V0 sectors with no jets (2 leading) + TH2F *fFullV0V0Corr; //! Multiplicity from the full V0, Multiplicity from the V0 sectors with no jets (2 leading) + TH3F *fNTXV0MultPt; //! NTX, V0 corrected multiplicity, and jet pT + TH3F *fNTXCBMultPt; //! NTX, Central Barrel corrected multiplicity, and jet pT + TH2F *fNChTrRDMultOJ[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for reference multiplicities in pp, 1 Jet + TH2F *fSCMRDMultOJ[8]; //! Second central moment as a function of jet pt (Real Data), for reference multiplicities in pp, 1 Jet + TH2F *fNChTrRDMultSEOJ[8]; //! Number of charged tracks in the jets as a function of jet pt (Real Data), for 2nd reference multiplicities in pp, 1 Jet + TH2F *fSCMRDMultSEOJ[8]; //! Second central moment as a function of jet pt (Real Data), for 2nd reference multiplicities in pp, 1 Jet + Double_t fMinpTValUE; // Minimum pT track cut for the UE multiplicity, default 2 GeV for debugging + TH2F *fRefMultFullV0UJ; //! Reference multiplicity in the AOD and multiplicity from the full V0, un jet + TH2F *fRefMultV0CorrUJ; //! Reference multiplicity in the AOD and multiplicity from the V0 sectors with no jets (2 leading), un jet + TH2F *fFullV0V0CorrUJ; //! Multiplicity from the full V0, Multiplicity from the V0 sectors with no jets (2 leading), un jet + TH2F *fMultWOJetVZeroUJ; //! Multiplicity without jets, and VZERO multiplicity, un jet + TH2F *fRefMultWOJetUJ; //! Reference multiplicity in the AOD and multiplicity without jets, un jet + Double_t fMaxpTValUE; // Maximum pT track cut for the UE multiplicity, default 2 GeV for debugging + TH2F *fRefAODTrackCount; //! Correlation between ref aod mult. and my own counting + TH2F *fRefAODTrackCountUJ; //! Correlation between ref aod mult. and my own counting, single jet event + TH2F *fTrackCountWOJet; //! Correlation between my own counting TPC & soft TPC + TH2F *fTrackCountWOJetUJ; //! Correlation between my own counting TPC & soft TPC UJ + TH2F *fTrackCountWOJetUJMC; //! Correlation between my own counting TPC & soft TPC UJ solo MC + TH2F *fFullV0V0CorrUJMC; //! Multiplicity from the full V0, Multiplicity from the V0 sectors with no jets, un jet MC no real V0 + TH2F *fNChTrRDMultOJMC[8]; //! Number of charged tracks in the jets as a function of jet pt (MC), for reference multiplicities in pp, 1 Jet + TH2F *fSCMRDMultOJMC[8]; //! Second central moment as a function of jet pt (MC), for reference multiplicities in pp, 1 Jet + TH2F *fNChTrRDMultSEOJMC[8]; //! Number of charged tracks in the jets as a function of jet pt (MC), for 2nd reference multiplicities in pp, 1 Jet + TH2F *fSCMRDMultSEOJMC[8]; //! Second central moment as a function of jet pt (MC), for 2nd reference multiplicities in pp, 1 Jet + Double_t fMinpTValMC; // Minimum pT track cut for the MC multiplicity, default 2 GeV for debugging + Double_t fIncExcR; // Increase in the exclusion radius value + Bool_t fForceNotTR; // Force NOT to use track references + Bool_t fNotExtDiJEx; // Not extend the exclusion in the dijet area, old behaviour + TH3F *fMinTrackPtInNTXRecalc; //! Histo to save fMinTrackPtInNTX after recalculation as a function of jet pT + TH2F *fMaxTrackPtInNTXRecalc; //! Histo to save fMaxTrackPtInNTX after recalculation as a function of jet pT + TH3F *fPtDistInJetConeRaw; //! pT distributions of tracks inside the cone for jet pT (raw) ranges and centralities + TH3F *fPtDistInPerpConeRaw; //! pT distributions of tracks inside the perpendicular cone for jet pT (raw) ranges and centralities + TH3F *fPtInPerpCon; //! summed pT from the perpendicular cone for jet pT (raw) ranges and centralities + Double_t fMinTrackPtInNTXR; // Minimum track pT taken into the NTX re-calculation + Double_t fMaxTrackPtInNTXR; // Maximum track pT taken into the NTX re-calculation + Double_t fEventCent; // event centrality + TH2F *fNChTrRecPerpMultSEOJ[8]; //! Number of charged tracks in the perpendicular cone reco or real, with multiplicities + TH1F *fJetEtaAll; //! Eta distribution of all the found jets, no cuts + TH1F *fJetEtaOnlyTPCcut; //! Eta distribution of all the found jets, only with eta acceptance cut + TH1F *fJetEtaJetPt[3]; //! Eta distribution of analyzed jets, 3 ranges of pT + TH3F *fNChTrRecECorrPPMult; //! Number of charged tracks in the energy corrected jet, as a function of corrected jet pt, pp mult + TH3F *fNChTrRecPerpECorrPPMult; //! Number of charged tracks in the perpendicular after correction, as a func. of corr. jet pt, pp mult + Bool_t fForceSkipSJ; // Force to skip single track jets + TH2F *fJetPtCentPbPbRaw; //! Raw pT spectrum of reco jets, centrality in PbPb + TH2F *fJetPtCentPbPbCorr; //! Corrected pT spectrum of reco jets, centrality in PbPb + Double_t fJetAcceptance; // Acceptance cut on jets, for multiplicity in PbPb + Bool_t fIncreasingExcl; // Flag to indicate that the analyis increases exclusion beyond jet radius + TH3F *fTotTracksCone; //! total number of tracks in the jet cone, for jet pT (raw) ranges and centralities + Int_t fTotTracksInCone; // Total number of tracks in the jet cone + + Double_t fTTrackRandomRejection; // Percentage of tracks from the event randomly rejected + Double_t fJTrackRandomRejection; // Percentage of tracks from the jet randomly rejected + TH1F *fJEtaMCMultOJ[8]; //! Eta distribution of jets as a function of jet pt (MC), for V0-like multiplicities in pp, 1 Jet + TH1F *fJEtaMCMultSEOJ[8]; //! Eta distribution of jets as a function of jet pt (MC), for TPC-like multiplicities in pp, 1 Jet + TH1F *fJEtaRDMultOJ[8]; //! Eta distribution of jets as a function of jet pt (Reco Data), for V0 multiplicities in pp, 1 Jet + TH1F *fJEtaRDMultSEOJ[8]; //! Eta distribution of jets as a function of jet pt (Reco Data), for TPC-like multiplicities in pp, 1 Jet + TH1F *fJetPtMCMultOJ[8]; //! Pt spectrum jets (MC), for V0-like multiplicities in pp, 1 jet + TH1F *fJetPtMCMultSEOJ[8]; //! Pt spectrum jets (MC), for TPC-like multiplicities in pp, 1 jet + TH1F *fJetPtRDMultOJ[8]; //! Pt spectrum jets (Reco Data), for V0 multiplicities in pp, 1 jet + TH1F *fJetPtRDMultSEOJ[8]; //! Pt spectrum jets (Reco Data), for TPC multiplicities in pp, 1 jet + TH2F *fEntriesQuark[8]; //! Quark NT90 in MC in the multiplicity bins + TH2F *fEntriesGluon[8]; //! Gluon NT90 in MC in the multiplicity bins + Double_t fMinPtInGlobMult; // Min pT used in the global multiplicity calculation + + AliAnalysisTaskPartonDisc(const AliAnalysisTaskPartonDisc&); // not implemented + AliAnalysisTaskPartonDisc& operator=(const AliAnalysisTaskPartonDisc&); // not implemented + + ClassDef(AliAnalysisTaskPartonDisc, 4); +}; + +#endif diff --git a/PWGJE/AliPWG4CosmicCandidates.h b/PWGJE/AliPWG4CosmicCandidates.h index 0daada59b7f..ee30ee6879c 100644 --- a/PWGJE/AliPWG4CosmicCandidates.h +++ b/PWGJE/AliPWG4CosmicCandidates.h @@ -1,69 +1,69 @@ -#ifndef AliPWG4CosmicCandidates_cxx -#define AliPWG4CosmicCandidates_cxx - -// Analysis task looking for cosmic candidates -// Authors: Marta Verweij marta.verweij@cern.ch - -class TH1F; -class TH2F; -class TH3F; -class TList; -class AliESDEvent; -class AliESDfriend; -class AliESDfriendTrack; -class AliMCEvent; -class AliVEvent; -class AliESDtrackCuts; -class AliESDtrack; - -#include "AliAnalysisTaskSE.h" - -class AliPWG4CosmicCandidates : public AliAnalysisTaskSE { - public: - AliPWG4CosmicCandidates(); - AliPWG4CosmicCandidates(const char *name); - AliPWG4CosmicCandidates(const AliPWG4CosmicCandidates &res); - AliPWG4CosmicCandidates& operator=(const AliPWG4CosmicCandidates& trclass); - virtual ~AliPWG4CosmicCandidates() {;} - - virtual void LocalInit(); - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - //Setters - void SetCuts(AliESDtrackCuts* trackCuts) {fTrackCuts = trackCuts;} - void SetPtMin(Double_t ptmin) {fPtMin = ptmin;} - void SetMaxCosmicAngle(Double_t angle) {fMaxCosmicAngle = angle;} - - private: - AliESDtrackCuts *fTrackCuts; // Standard trackCuts for global tracks - - Double_t fPtMin; // Minimal pt for cosmic candidate - Double_t fMaxCosmicAngle; // Max deviation from pi (angle between two tracks) in case of cosmic candidate - - TH1F *fNEventAll; //! Event counter - TH1F *fNEventSel; //! Event counter: Selected events for analysis - - TH1F *fPtSignedCosmicCandidates; //! Cosmic Candidates - TH1F *fDeltaPtCosmicCandidates; //! Cosmic Candidates Delta Pt - TH2F *fDeltaPhiSumEta; //! Cosmic Candidates Delta Phi vs Sum Eta - TH2F *fDCAZCosmicCandidates; //! Cosmic Candidates DCAZ track1 vs track2 - TH2F *fDCARCosmicCandidates; //! Cosmic Candidates DCAR track1 vs track2 - TH1F *fTheta; //! Angle \theta between cosmic candidates in 3D space - TH1F *fThetaZoom; //! Angle between cosmic candidates in 3D space zoomed into back-to-back region - TH3F *fThetaPt1Pt2; //! Angle theta vs Pt1 vs Pt2 - TH3F *fThetaPt1Pt2Signed; //! Angle theta vs Pt1 vs Pt2 - TH3F *fDeltaPhiSumEtaPt1; //! Delta Phi vs Sum Eta vs Pt1 - TH3F *fDeltaPhiSumEtaPt2; //! Delta Phi vs Sum Eta vs Pt2 - TH3F *fThetaDCAZ1DCAZ2; //! Angle theta vs DCAZ1 vs DCAZ2 - TH1F *fRisol; //! Isolation R - TH2F *fRisolTheta; //! Isolation R vs Theta - - TList *fHistListCosmics; //! List of Histograms for cosmic candidates - - - ClassDef(AliPWG4CosmicCandidates, 1); -}; - -#endif +#ifndef AliPWG4CosmicCandidates_cxx +#define AliPWG4CosmicCandidates_cxx + +// Analysis task looking for cosmic candidates +// Authors: Marta Verweij marta.verweij@cern.ch + +class TH1F; +class TH2F; +class TH3F; +class TList; +class AliESDEvent; +class AliESDfriend; +class AliESDfriendTrack; +class AliMCEvent; +class AliVEvent; +class AliESDtrackCuts; +class AliESDtrack; + +#include "AliAnalysisTaskSE.h" + +class AliPWG4CosmicCandidates : public AliAnalysisTaskSE { + public: + AliPWG4CosmicCandidates(); + AliPWG4CosmicCandidates(const char *name); + AliPWG4CosmicCandidates(const AliPWG4CosmicCandidates &res); + AliPWG4CosmicCandidates& operator=(const AliPWG4CosmicCandidates& trclass); + virtual ~AliPWG4CosmicCandidates() {;} + + virtual void LocalInit(); + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + //Setters + void SetCuts(AliESDtrackCuts* trackCuts) {fTrackCuts = trackCuts;} + void SetPtMin(Double_t ptmin) {fPtMin = ptmin;} + void SetMaxCosmicAngle(Double_t angle) {fMaxCosmicAngle = angle;} + + private: + AliESDtrackCuts *fTrackCuts; // Standard trackCuts for global tracks + + Double_t fPtMin; // Minimal pt for cosmic candidate + Double_t fMaxCosmicAngle; // Max deviation from pi (angle between two tracks) in case of cosmic candidate + + TH1F *fNEventAll; //! Event counter + TH1F *fNEventSel; //! Event counter: Selected events for analysis + + TH1F *fPtSignedCosmicCandidates; //! Cosmic Candidates + TH1F *fDeltaPtCosmicCandidates; //! Cosmic Candidates Delta Pt + TH2F *fDeltaPhiSumEta; //! Cosmic Candidates Delta Phi vs Sum Eta + TH2F *fDCAZCosmicCandidates; //! Cosmic Candidates DCAZ track1 vs track2 + TH2F *fDCARCosmicCandidates; //! Cosmic Candidates DCAR track1 vs track2 + TH1F *fTheta; //! Angle \theta between cosmic candidates in 3D space + TH1F *fThetaZoom; //! Angle between cosmic candidates in 3D space zoomed into back-to-back region + TH3F *fThetaPt1Pt2; //! Angle theta vs Pt1 vs Pt2 + TH3F *fThetaPt1Pt2Signed; //! Angle theta vs Pt1 vs Pt2 + TH3F *fDeltaPhiSumEtaPt1; //! Delta Phi vs Sum Eta vs Pt1 + TH3F *fDeltaPhiSumEtaPt2; //! Delta Phi vs Sum Eta vs Pt2 + TH3F *fThetaDCAZ1DCAZ2; //! Angle theta vs DCAZ1 vs DCAZ2 + TH1F *fRisol; //! Isolation R + TH2F *fRisolTheta; //! Isolation R vs Theta + + TList *fHistListCosmics; //! List of Histograms for cosmic candidates + + + ClassDef(AliPWG4CosmicCandidates, 1); +}; + +#endif diff --git a/PWGJE/UserTasks/AliAnalysisTaskCheckSingleTrackJetRejection.h b/PWGJE/UserTasks/AliAnalysisTaskCheckSingleTrackJetRejection.h index 1f7d37bcb90..de72ce9504f 100644 --- a/PWGJE/UserTasks/AliAnalysisTaskCheckSingleTrackJetRejection.h +++ b/PWGJE/UserTasks/AliAnalysisTaskCheckSingleTrackJetRejection.h @@ -1,112 +1,112 @@ -#ifndef AliAnalysisTaskCheckSingleTrackJetRejection_cxx -#define AliAnalysisTaskCheckSingleTrackJetRejection_cxx - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -class AliJetHeader; -class AliESDEvent; -class AliAODEvent; -class AliAODJet; -class AliGenPythiaEventHeader; -class AliCFManager; - -class TList; -class TChain; -class TH2F; -class TH1F; -class TH3F; -class TProfile; - - -#include "AliAnalysisTaskSE.h" -#include "THnSparse.h" // cannot forward declare ThnSparseF -#include -#include -#include - -class AliAnalysisTaskCheckSingleTrackJetRejection : public AliAnalysisTaskSE -{ - public: - AliAnalysisTaskCheckSingleTrackJetRejection(); - AliAnalysisTaskCheckSingleTrackJetRejection(const char *name); - virtual ~AliAnalysisTaskCheckSingleTrackJetRejection() {;} - - // Implementation of interface methods - virtual void UserCreateOutputObjects(); - virtual void Init(); - virtual Bool_t Notify(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - virtual void SetDebug(Int_t debug = 0) {fDebug = debug;} - virtual void SetAlgorithm(TString jf="ANTIKT"){JFAlg=jf;} - virtual void SetRadius(Float_t radius=0.4){Radius=radius;} - virtual void SetFilterMask(UInt_t filter=256){Filtermask=filter;} - virtual void SetBackSubMode(Int_t backM=0){BackM=backM;} - virtual void SetTrackPtCut(Float_t tPtcut=0){TrackPtcut=tPtcut;} - virtual void SetSkipCone(Int_t skipCone=0){SkipCone=skipCone;} - virtual void SetMC(Bool_t ismc=kFALSE){IsMC=ismc;} - virtual void FinishTaskOutput(); - virtual Bool_t PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials); - //virtual Float_t GetTotalEvents(const char* currFile); - virtual Double_t DeltaPhi(Double_t phi1,Double_t phi2); - virtual Double_t DeltaR(Double_t phi1,Double_t phi2,Double_t eta1,Double_t eta2); - - - enum {kNPTBINS=10}; - - // 0 all jets - // 1 all jet in eta window - // 2 all jets with partner - // 3 all jets in eta window with partner - // 4 all jets with partner in eta window - enum {kStep0 = 0, kStep1, kStep2, kStep3, kStep4,kMaxStep}; - - - - private: - AliAnalysisTaskCheckSingleTrackJetRejection(const AliAnalysisTaskCheckSingleTrackJetRejection &det); // not implemented - AliAnalysisTaskCheckSingleTrackJetRejection& operator=(const AliAnalysisTaskCheckSingleTrackJetRejection &det); // not implemented - - Bool_t JetSelected(AliAODJet *jet); - - Bool_t fUseAODInput; // read jets from input AOD - Bool_t fFillAOD; // option to fill AOD branch - TString fNonStdFile; - TString fJetBranch; // jet branch to read - - AliAODEvent *fAODIn; // AOD event - AliAODEvent *fAODOut; // AOD event - AliAODExtension *fAODExtension; - TString JFAlg; - Float_t Radius; - UInt_t Filtermask; - Int_t BackM; - Float_t TrackPtcut; - Int_t SkipCone; - Bool_t IsMC; - - TList *fHistList; // Output list - Float_t fxsec; - Float_t ftrial; - Float_t fJetRecEtaWindow; // eta window for rec jets - Float_t fMinJetPt; // limits the jet p_T in addition to what already is done in the jet finder, this is important for jet matching for JF with lo threshold - - TProfile *fH1Xsec; - TH1F *fH1Trials; - TH1F *fH1Events; - - TH1F *fH1jetMCAKT04_pt [6]; - TH2F *fH2jetMCAKT04_Jetpt_maxpt; - TH1F *fH1jetAKT04_pt [6]; - TH2F *fH2jetAKT04_Jetpt_maxpt ; - - TH2F *fH2jetMCAKT04_Eratio [6]; - TH1F *fH1jetMCAKT04_ptmatch [6]; - - - - ClassDef(AliAnalysisTaskCheckSingleTrackJetRejection, 13); // Analysis task for standard dijet analysis -}; - -#endif +#ifndef AliAnalysisTaskCheckSingleTrackJetRejection_cxx +#define AliAnalysisTaskCheckSingleTrackJetRejection_cxx + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +class AliJetHeader; +class AliESDEvent; +class AliAODEvent; +class AliAODJet; +class AliGenPythiaEventHeader; +class AliCFManager; + +class TList; +class TChain; +class TH2F; +class TH1F; +class TH3F; +class TProfile; + + +#include "AliAnalysisTaskSE.h" +#include "THnSparse.h" // cannot forward declare ThnSparseF +#include +#include +#include + +class AliAnalysisTaskCheckSingleTrackJetRejection : public AliAnalysisTaskSE +{ + public: + AliAnalysisTaskCheckSingleTrackJetRejection(); + AliAnalysisTaskCheckSingleTrackJetRejection(const char *name); + virtual ~AliAnalysisTaskCheckSingleTrackJetRejection() {;} + + // Implementation of interface methods + virtual void UserCreateOutputObjects(); + virtual void Init(); + virtual Bool_t Notify(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + virtual void SetDebug(Int_t debug = 0) {fDebug = debug;} + virtual void SetAlgorithm(TString jf="ANTIKT"){JFAlg=jf;} + virtual void SetRadius(Float_t radius=0.4){Radius=radius;} + virtual void SetFilterMask(UInt_t filter=256){Filtermask=filter;} + virtual void SetBackSubMode(Int_t backM=0){BackM=backM;} + virtual void SetTrackPtCut(Float_t tPtcut=0){TrackPtcut=tPtcut;} + virtual void SetSkipCone(Int_t skipCone=0){SkipCone=skipCone;} + virtual void SetMC(Bool_t ismc=kFALSE){IsMC=ismc;} + virtual void FinishTaskOutput(); + virtual Bool_t PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials); + //virtual Float_t GetTotalEvents(const char* currFile); + virtual Double_t DeltaPhi(Double_t phi1,Double_t phi2); + virtual Double_t DeltaR(Double_t phi1,Double_t phi2,Double_t eta1,Double_t eta2); + + + enum {kNPTBINS=10}; + + // 0 all jets + // 1 all jet in eta window + // 2 all jets with partner + // 3 all jets in eta window with partner + // 4 all jets with partner in eta window + enum {kStep0 = 0, kStep1, kStep2, kStep3, kStep4,kMaxStep}; + + + + private: + AliAnalysisTaskCheckSingleTrackJetRejection(const AliAnalysisTaskCheckSingleTrackJetRejection &det); // not implemented + AliAnalysisTaskCheckSingleTrackJetRejection& operator=(const AliAnalysisTaskCheckSingleTrackJetRejection &det); // not implemented + + Bool_t JetSelected(AliAODJet *jet); + + Bool_t fUseAODInput; // read jets from input AOD + Bool_t fFillAOD; // option to fill AOD branch + TString fNonStdFile; + TString fJetBranch; // jet branch to read + + AliAODEvent *fAODIn; // AOD event + AliAODEvent *fAODOut; // AOD event + AliAODExtension *fAODExtension; + TString JFAlg; + Float_t Radius; + UInt_t Filtermask; + Int_t BackM; + Float_t TrackPtcut; + Int_t SkipCone; + Bool_t IsMC; + + TList *fHistList; // Output list + Float_t fxsec; + Float_t ftrial; + Float_t fJetRecEtaWindow; // eta window for rec jets + Float_t fMinJetPt; // limits the jet p_T in addition to what already is done in the jet finder, this is important for jet matching for JF with lo threshold + + TProfile *fH1Xsec; + TH1F *fH1Trials; + TH1F *fH1Events; + + TH1F *fH1jetMCAKT04_pt [6]; + TH2F *fH2jetMCAKT04_Jetpt_maxpt; + TH1F *fH1jetAKT04_pt [6]; + TH2F *fH2jetAKT04_Jetpt_maxpt ; + + TH2F *fH2jetMCAKT04_Eratio [6]; + TH1F *fH1jetMCAKT04_ptmatch [6]; + + + + ClassDef(AliAnalysisTaskCheckSingleTrackJetRejection, 13); // Analysis task for standard dijet analysis +}; + +#endif diff --git a/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.cxx b/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.cxx index 620d780dc78..f833776b6f7 100755 --- a/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.cxx +++ b/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.cxx @@ -1,1125 +1,1125 @@ -//#include -//#include -#include -#include - -#include "TTree.h" -#include "TCanvas.h" -#include "AliAnalysisTask.h" -#include "AliInputEventHandler.h" -#include "AliESDtrack.h" -#include "AliAODVertex.h" -#include "AliAODCluster.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "TDatabasePDG.h" -#include "AliAnalysisManager.h" -#include "AliJetFinder.h" -#include "AliJetHeader.h" -#include "AliJetReader.h" -#include "AliJetReaderHeader.h" -#include "AliUA1JetHeaderV1.h" -#include "AliSISConeJetHeader.h" -#include "AliESDEvent.h" -#include "AliAODEvent.h" -#include "AliAODHandler.h" -#include "AliAODInputHandler.h" -#include "AliAODTrack.h" -#include "AliAODMCParticle.h" -#include "AliAODJet.h" -#include "AliAODJetEventBackground.h" -#include "AliMCParticle.h" -#include "AliAODMCParticle.h" -#include "AliMCEventHandler.h" -#include "AliMCEvent.h" -#include "AliStack.h" - -#include "AliAODHeader.h" -#include "AliAODMCHeader.h" -//#include "AliGenPythiaEventHeader.h" -#include "AliJetKineReaderHeader.h" -#include "AliGenCocktailEventHeader.h" -#include "AliInputEventHandler.h" -#include "AliGenEventHeader.h" -#include "AliGenDPMjetEventHeader.h" - -#include "AliAnalysisTaskJetHadronCorrelation.h" -#include "AliAnalysisTaskPhiCorrelations.h" -//#include "AliAnalysisHelperJetTasks.h" -#include "AliPWG4HighPtQAMC.h" - -using std::cout; -using std::endl; - -ClassImp(AliAnalysisTaskJetHadronCorrelation) - - //________________________________________________________________________ - AliAnalysisTaskJetHadronCorrelation::AliAnalysisTaskJetHadronCorrelation(): - AliAnalysisTaskSE(), - fUseAODInput(kFALSE), - fJetBranch("jets"), - fNonStdFile(""), - fAODIn(0x0), - fAODOut(0x0), - fAODExtension(0x0), - JFAlg("ANTIKT"), - Radius(0.4), - Filtermask(272), - BackM(0), - TrackPtcut(0.15), - SkipCone(0), - IsMC(kTRUE), - JetEScale(1.), - TrackEScale(1.), - fxsec(0.), - ftrial(1.), - fHistList(0x0), // Output list - fIfiles(0), - fH1Events(0x0), - fH1Xsec(0x0), - fH1Trials(0x0), - fH1Track_pt (0x0), - fH1Track_phi (0x0), - fH1Track_eta (0x0), - fH1MCTrack_pt (0x0), - fH1MCTrack_phi (0x0), - fH1MCTrack_eta (0x0), - fH1MCPrimTrack_pt (0x0), - fH1MCPrimTrack_phi (0x0), - fH1MCPrimTrack_eta (0x0), - fH1Jet_pt (0x0), - fH1Jet_phi (0x0), - fH1Jet_eta (0x0), - fH1leadJet_pt (0x0), - fH1leadJet_pt_dijet (0x0), - fH1subJet_pt_dijet (0x0), - fH1JetMC_pt (0x0), - fH1leadJetMC_pt (0x0), - fH1leadJetMC_pt_dijet (0x0), - fH1subJetMC_pt_dijet (0x0), - fH2JetsJet_dphi (0x0), - fH2JetsJet_deta (0x0), - fH2JetsJet_Aj (0x0), - fH2JetsJet_pt (0x0), - fH2JetsJetMC_dphi (0x0), - fH2JetsJetMC_deta (0x0), - fH2JetsJetMC_Aj (0x0), - fH2JetsJetMC_pt (0x0), - fH2Mult_Mtrack (0x0), - fH2Mult_Mlead (0x0), - fH2Mult_Mjet (0x0), - fH2Mult_Njet (0x0), - fH2Mult_Aj (0x0), - fH2Mlead_Aj (0x0), - fH2Jet_pt_Mlead (0x0), - fH2Jet_pt_Munder (0x0), - fH2leadJetMCptResolution (0x0), - fH2TrackMCptResolution (0x0), - fH2TrackMCptEfficiency (0x0), - fH2AjCorrelation_MCRec (0x0), - fH2MleadCorrelation_MCRec(0x0) -{ - for(int j=0;j<5;j++){ - fH1ndiJ_ediv [j]=0; - fH1Aj [j]=0; - fH1Mlead [j]=0; - fH1leadJetMC_dphiResolution [j]=0; - fH1subJetMC_dphiResolution [j]=0; - fH1leadJetMC_Efficiency [j]=0; - fH1subJetMC_Efficiency [j]=0; - for(int k=0;k<5;k++){ - fH1JetHadron_dphi_ediv [j][k]=0; - fH1JetHadron_dphi_tptweight_ediv [j][k]=0; - fH1JetHadron_dphi_tJptweight_ediv[j][k]=0; - fH1JetHadronMC_dphi_ediv [j][k]=0; - fH1JetHadronMC_dphi_tptweight_ediv [j][k]=0; - fH1JetHadronMC_dphi_tJptweight_ediv[j][k]=0; - fH1JetHadronMCPrim_dphi_ediv [j][k]=0; - fH1JetHadronMCPrim_dphi_tptweight_ediv [j][k]=0; - fH1JetHadronMCPrim_dphi_tJptweight_ediv[j][k]=0; - } - } - for(int j=0;j<3;j++){ - fH1ndiJ_2040Mlead [j]=0; - fH1ndiJ_2040Aj [j]=0; - for(int k=0;k<5;k++){ - fH1JetHadron_dphi_tptweight2040_Mleaddep[j][k]=0; - fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]=0; - fH1JetHadronMC_dphi_tptweight2040_Mleaddep[j][k]=0; - fH1JetHadronMC_dphi_tptweight2040_Ajdep [j][k]=0; - fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[j][k]=0; - fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [j][k]=0; - } - } - // Default constructor -} - -//________________________________________________________________________ -AliAnalysisTaskJetHadronCorrelation::AliAnalysisTaskJetHadronCorrelation(const char *name): - AliAnalysisTaskSE(name), - fUseAODInput(kFALSE), - fJetBranch("jets"), - fNonStdFile(""), - fAODIn(0x0), - fAODOut(0x0), - fAODExtension(0x0), - JFAlg("ANTIKT"), - Radius(0.4), - Filtermask(272), - BackM(0), - TrackPtcut(0.15), - SkipCone(0), - IsMC(kTRUE), - JetEScale(1.), - TrackEScale(1.), - fxsec(0.), - ftrial(1.), - fHistList(0x0), // Output list - fIfiles(0), - fH1Events(0x0), - fH1Xsec(0x0), - fH1Trials(0x0), - fH1Track_pt (0x0), - fH1Track_phi (0x0), - fH1Track_eta (0x0), - fH1MCTrack_pt (0x0), - fH1MCTrack_phi (0x0), - fH1MCTrack_eta (0x0), - fH1MCPrimTrack_pt (0x0), - fH1MCPrimTrack_phi (0x0), - fH1MCPrimTrack_eta (0x0), - fH1Jet_pt (0x0), - fH1Jet_phi (0x0), - fH1Jet_eta (0x0), - fH1leadJet_pt (0x0), - fH1leadJet_pt_dijet (0x0), - fH1subJet_pt_dijet (0x0), - fH1JetMC_pt (0x0), - fH1leadJetMC_pt (0x0), - fH1leadJetMC_pt_dijet (0x0), - fH1subJetMC_pt_dijet (0x0), - fH2JetsJet_dphi (0x0), - fH2JetsJet_deta (0x0), - fH2JetsJet_Aj (0x0), - fH2JetsJet_pt (0x0), - fH2JetsJetMC_dphi (0x0), - fH2JetsJetMC_deta (0x0), - fH2JetsJetMC_Aj (0x0), - fH2JetsJetMC_pt (0x0), - fH2Mult_Mtrack (0x0), - fH2Mult_Mlead (0x0), - fH2Mult_Mjet (0x0), - fH2Mult_Njet (0x0), - fH2Mult_Aj (0x0), - fH2Mlead_Aj (0x0), - fH2Jet_pt_Mlead (0x0), - fH2Jet_pt_Munder (0x0), - fH2leadJetMCptResolution (0x0), - fH2TrackMCptResolution (0x0), - fH2TrackMCptEfficiency (0x0), - fH2AjCorrelation_MCRec (0x0), - fH2MleadCorrelation_MCRec(0x0) -{ - - for(int j=0;j<5;j++){ - fH1ndiJ_ediv [j]=0; - fH1Aj [j]=0; - fH1Mlead [j]=0; - fH1leadJetMC_dphiResolution [j]=0; - fH1subJetMC_dphiResolution [j]=0; - fH1leadJetMC_Efficiency [j]=0; - fH1subJetMC_Efficiency [j]=0; - for(int k=0;k<5;k++){ - fH1JetHadron_dphi_ediv [j][k]=0; - fH1JetHadron_dphi_tptweight_ediv [j][k]=0; - fH1JetHadron_dphi_tJptweight_ediv[j][k]=0; - fH1JetHadronMC_dphi_ediv [j][k]=0; - fH1JetHadronMC_dphi_tptweight_ediv [j][k]=0; - fH1JetHadronMC_dphi_tJptweight_ediv[j][k]=0; - fH1JetHadronMCPrim_dphi_ediv [j][k]=0; - fH1JetHadronMCPrim_dphi_tptweight_ediv [j][k]=0; - fH1JetHadronMCPrim_dphi_tJptweight_ediv[j][k]=0; - } - } - for(int j=0;j<3;j++){ - fH1ndiJ_2040Mlead [j]=0; - fH1ndiJ_2040Aj [j]=0; - for(int k=0;k<5;k++){ - fH1JetHadron_dphi_tptweight2040_Mleaddep[j][k]=0; - fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]=0; - fH1JetHadronMC_dphi_tptweight2040_Mleaddep[j][k]=0; - fH1JetHadronMC_dphi_tptweight2040_Ajdep [j][k]=0; - fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[j][k]=0; - fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [j][k]=0; - } - } - - // Default constructor - // Constructor - // Define input and output slots here - // Input slot #0 works with a TChain - DefineInput(0, TChain::Class()); - // Output slot #0 id reserved by the base class for AOD - // Output slot #1 writes into a TH1 container - DefineOutput(1, TList::Class()); -} - -//________________________________________________________________________ -void AliAnalysisTaskJetHadronCorrelation::UserCreateOutputObjects() -{ - // Create histograms - // Called once - - fHistList = new TList();fHistList->SetOwner(kTRUE); cout<<"TList is created for output "<SetOwner(kTRUE); cout<<"TList is created for output "<Add(fH1Events ); - fHistList->Add(fH1Xsec ); - fHistList->Add(fH1Trials ); - fHistList->Add(fH1Track_pt ); - fHistList->Add(fH1Track_phi ); - fHistList->Add(fH1Track_eta ); - fHistList->Add(fH1MCTrack_pt ); - fHistList->Add(fH1MCTrack_phi ); - fHistList->Add(fH1MCTrack_eta ); - fHistList->Add(fH1MCPrimTrack_pt ); - fHistList->Add(fH1MCPrimTrack_phi ); - fHistList->Add(fH1MCPrimTrack_eta ); - fHistList->Add(fH1Jet_pt ); - fHistList->Add(fH1Jet_phi ); - fHistList->Add(fH1Jet_eta ); - fHistList->Add(fH1leadJet_pt ); - fHistList->Add(fH1leadJet_pt_dijet ); - fHistList->Add(fH1subJet_pt_dijet ); - fHistList->Add(fH1JetMC_pt ); - fHistList->Add(fH1leadJetMC_pt ); - fHistList->Add(fH1leadJetMC_pt_dijet); - fHistList->Add(fH1subJetMC_pt_dijet ); - fHistList->Add(fH2JetsJet_dphi ); - fHistList->Add(fH2JetsJet_deta ); - fHistList->Add(fH2JetsJet_Aj ); - fHistList->Add(fH2JetsJet_pt ); - fHistList->Add(fH2JetsJetMC_dphi ); - fHistList->Add(fH2JetsJetMC_deta ); - fHistList->Add(fH2JetsJetMC_Aj ); - fHistList->Add(fH2JetsJetMC_pt ); - fHistList->Add(fH2Mult_Mtrack ); - fHistList->Add(fH2Mult_Mlead ); - fHistList->Add(fH2Mult_Mjet ); - fHistList->Add(fH2Mult_Njet ); - fHistList->Add(fH2Mult_Aj ); - fHistList->Add(fH2Mlead_Aj ); - fHistList->Add(fH2Jet_pt_Mlead ); - fHistList->Add(fH2Jet_pt_Munder ); - fHistList->Add(fH2leadJetMCptResolution ); - fHistList->Add(fH2TrackMCptResolution ); - fHistList->Add(fH2TrackMCptEfficiency ); - fHistList->Add(fH2AjCorrelation_MCRec ); - fHistList->Add(fH2MleadCorrelation_MCRec); - for(int j=0;j<5;j++){ - fHistList->Add(fH1ndiJ_ediv [j]); - fHistList->Add(fH1Aj [j]); - fHistList->Add(fH1Mlead [j]); - fHistList->Add(fH1leadJetMC_dphiResolution [j]); - fHistList->Add(fH1subJetMC_dphiResolution [j]); - fHistList->Add(fH1leadJetMC_Efficiency [j]); - fHistList->Add(fH1subJetMC_Efficiency [j]); - for(int k=0;k<5;k++){ - fHistList->Add(fH1JetHadron_dphi_ediv [j][k]); - fHistList->Add(fH1JetHadron_dphi_tptweight_ediv [j][k]); - fHistList->Add(fH1JetHadron_dphi_tJptweight_ediv [j][k]); - fHistList->Add(fH1JetHadronMC_dphi_ediv [j][k]); - fHistList->Add(fH1JetHadronMC_dphi_tptweight_ediv [j][k]); - fHistList->Add(fH1JetHadronMC_dphi_tJptweight_ediv [j][k]); - fHistList->Add(fH1JetHadronMCPrim_dphi_ediv [j][k]); - fHistList->Add(fH1JetHadronMCPrim_dphi_tptweight_ediv [j][k]); - fHistList->Add(fH1JetHadronMCPrim_dphi_tJptweight_ediv [j][k]); - } - } - for(int j=0;j<3;j++){ - fHistList->Add(fH1ndiJ_2040Mlead [j]); - fHistList->Add(fH1ndiJ_2040Aj [j]); - for(int k=0;k<5;k++){ - fHistList->Add(fH1JetHadron_dphi_tptweight2040_Mleaddep [j][k]); - fHistList->Add(fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]); - fHistList->Add(fH1JetHadronMC_dphi_tptweight2040_Mleaddep [j][k]); - fHistList->Add(fH1JetHadronMC_dphi_tptweight2040_Ajdep [j][k]); - fHistList->Add(fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep [j][k]); - fHistList->Add(fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [j][k]); - } - } - } - else{ - fHistList->Add(fH1Events ); - fHistList->Add(fH1Track_pt ); - fHistList->Add(fH1Track_phi ); - fHistList->Add(fH1Track_eta ); - fHistList->Add(fH1Jet_pt ); - fHistList->Add(fH1Jet_phi ); - fHistList->Add(fH1Jet_eta ); - fHistList->Add(fH1leadJet_pt ); - fHistList->Add(fH1leadJet_pt_dijet ); - fHistList->Add(fH1subJet_pt_dijet ); - fHistList->Add(fH2JetsJet_dphi ); - fHistList->Add(fH2JetsJet_deta ); - fHistList->Add(fH2JetsJet_Aj ); - fHistList->Add(fH2JetsJet_pt ); - fHistList->Add(fH2Mult_Mtrack ); - fHistList->Add(fH2Mult_Mlead ); - fHistList->Add(fH2Mult_Mjet ); - fHistList->Add(fH2Mult_Njet ); - fHistList->Add(fH2Mult_Aj ); - fHistList->Add(fH2Mlead_Aj ); - fHistList->Add(fH2Jet_pt_Mlead ); - fHistList->Add(fH2Jet_pt_Munder ); - for(int j=0;j<5;j++){ - fHistList->Add(fH1ndiJ_ediv [j]); - fHistList->Add(fH1Aj [j]); - fHistList->Add(fH1Mlead [j]); - for(int k=0;k<5;k++){ - fHistList->Add(fH1JetHadron_dphi_ediv [j][k]); - fHistList->Add(fH1JetHadron_dphi_tptweight_ediv [j][k]); - fHistList->Add(fH1JetHadron_dphi_tJptweight_ediv [j][k]); - } - } - for(int j=0;j<3;j++){ - fHistList->Add(fH1ndiJ_2040Mlead [j]); - fHistList->Add(fH1ndiJ_2040Aj [j]); - for(int k=0;k<5;k++){ - fHistList->Add(fH1JetHadron_dphi_tptweight2040_Mleaddep [j][k]); - fHistList->Add(fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]); - } - } - } - - // =========== Switch on Sumw2 for all histos =========== - for (Int_t i=0; iGetEntries(); ++i) - { - TH1 *h1 = dynamic_cast(fHistList->At(i)); - if (h1) - { - h1->Sumw2(); - continue; - } - THnSparse *hn = dynamic_cast(fHistList->At(i)); - if(hn)hn->Sumw2(); - } - TH1::AddDirectory(oldStatus); - - PostData(1,fHistList); -} - - -//---------------------------------------------------------------------- -void AliAnalysisTaskJetHadronCorrelation::Init() -{ - // Initialization - if (fDebug) printf("AnalysisTaskJetHadronCorrelation::Init() \n"); - -} - -Bool_t AliAnalysisTaskJetHadronCorrelation::Notify() -{ - - - fAODIn = dynamic_cast(InputEvent()); - fAODOut = AODEvent(); - if(fNonStdFile.Length()!=0){ - AliAODHandler *aodH = dynamic_cast(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()); - fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0); - if(fAODExtension){ - if(fDebug>1)Printf("AODExtension found for %s ",fNonStdFile.Data()); - } - } - - TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree(); - fxsec=0; - ftrial=1; - - if(tree){ - TFile *curfile = tree->GetCurrentFile(); - if(!curfile){ - Error("Notify","No current file"); - return kFALSE; - } - if(IsMC){ - AliPWG4HighPtQAMC::PythiaInfoFromFile(curfile->GetName(),fxsec,ftrial); - fH1Xsec ->Fill(0.,fxsec); - fH1Trials->Fill(0.,ftrial); - } - - } - - printf("Reading File %s ",fInputHandler->GetTree()->GetCurrentFile()->GetName()); - return kTRUE; -} -void AliAnalysisTaskJetHadronCorrelation::FinishTaskOutput() -{ -} - - - -//________________________________________________________________________ -void AliAnalysisTaskJetHadronCorrelation::UserExec(Option_t *) -{ - - - // Main loop (called each event) - // Execute analysis for current event - - AliAODEvent *fAOD; - TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if( handler && handler->InheritsFrom("AliAODInputHandler") ) { - fAOD = ((AliAODInputHandler*)handler)->GetEvent(); - if(fUseAODInput) fAODIn = fAOD; - if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__); - } - else { - handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); - if( handler && handler->InheritsFrom("AliAODHandler") ) { - fAOD = ((AliAODHandler*)handler)->GetAOD(); - fAODIn = fAOD; - if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__); - } - } - - if(!fAODIn && !fUseAODInput){ // case we have AOD in input & output and want jets from output - TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); - if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) { - fAODIn = ((AliAODHandler*)outHandler)->GetAOD(); - if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__); - } - } - if (!fAODIn) { - Printf("ERROR %s : fAODIn not available",(char*)__FILE__); - return; - } - - AliInputEventHandler* inputHandler = (AliInputEventHandler*) - ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); - if(!(inputHandler->IsEventSelected() & AliVEvent::kMB)){ - if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... "); - return; - } - fH1Events->Fill(0); - - AliAODHeader* aliH = dynamic_cast (fAODIn->GetHeader()); - if(!aliH){ - Printf("ERROR: AliAODHeader not available"); - return; - } - double Mult = aliH->GetRefMultiplicity(); - - // start jet analysis -------------------------Init. - Float_t pi=TMath::Pi(); - - Double_t Jet_pt [20][5000]; - Double_t Jet_phi [20][5000]; - Double_t Jet_eta [20][5000]; - Double_t Jet_area [20][5000]; - Double_t subJet_pt [20][5000]; - Double_t subJet_eta[20][5000]; - Double_t Track_n ; - Double_t Track_pt [5000]; - Double_t Track_eta[5000]; - Double_t Track_phi[5000]; - Double_t MCTrack_n ; - Double_t MCTrack_pt [5000]; - Double_t MCTrack_eta[5000]; - Double_t MCTrack_phi[5000]; - - Track_n=0;MCTrack_n=0; - for(int i=0;i<20;i++){ - for(int j=0;j<1000;j++){ - Jet_pt[i][j]=0.; - Jet_phi[i][j]=999.; - Jet_eta[i][j]=999.; - Jet_area[i][j]=999.; - subJet_pt[i][j]=0.; - subJet_eta[i][j]=999.; - Track_pt [j]=0.; - Track_phi[j]=999.; - Track_eta[j]=999.; - MCTrack_pt [j]=0.; - MCTrack_phi[j]=999.; - MCTrack_eta[j]=999.; - } - } - - int nLJetAOD=999; double ptLJetAOD=0;double phiLJetAOD=999.;double etaLJetAOD=999.;double ptsLJetAOD=0;double phisLJetAOD=900.;double etasLJetAOD=900.; - int nLJetMC2=999; double ptLJetMC2=0;double phiLJetMC2=999.;double etaLJetMC2=999.;double ptsLJetMC2=0;double phisLJetMC2=900.;double etasLJetMC2=900.; - int nLJetMC =999; double ptLJetMC =0;double phiLJetMC =999.;double etaLJetMC =999.;double ptsLJetMC =0;double phisLJetMC =900.;double etasLJetMC =900.; - bool findLJetAOD=false; - bool findLJetMC2=false; - bool findDiJet=false,findDiJetMC=false; - int nLJet = 999; - int Mjet_tot =0; - int Njet_tot =0; - - double Aj=99.,AjMC=99.; - double Mlead=99.,MleadMC=99.; - int Munder=99.; - - ////--------------------------------------------------------------------Init. - - TString cAdd = ""; - TString Branchname_gen,Branchname_gen2,Branchname_rec; - if((JFAlg=="ANTIKT")||(JFAlg=="KT")){ - cAdd += Form("%02d_",(int)((Radius+0.01)*10.)); - cAdd += Form("B%d",(int)BackM); - cAdd += Form("_Filter%05d",Filtermask); - cAdd += Form("_Cut%05d",(int)(1000.*TrackPtcut)); - cAdd += Form("_Skip%02d",SkipCone); - Branchname_gen = Form("clustersAODMC_%s%s",JFAlg.Data(),cAdd.Data()); - Branchname_gen2 = Form("clustersAODMC2_%s%s",JFAlg.Data(),cAdd.Data()); - Branchname_rec = Form("clustersAOD_%s%s",JFAlg.Data(),cAdd.Data()); - } - else{ - cAdd += Form("%02d_",(int)((Radius+0.01)*10.)); - cAdd += Form("B%d",(int)BackM); - cAdd += Form("_Filter%05d",Filtermask); - cAdd += Form("_Cut%05d",(int)(1000.*TrackPtcut)); - Branchname_gen = Form("jetsAODMC_%s%s",JFAlg.Data(),cAdd.Data()); - Branchname_gen2 = Form("jetsAODMC2_%s%s",JFAlg.Data(),cAdd.Data()); - Branchname_rec = Form("jetsAOD_%s%s",JFAlg.Data(),cAdd.Data()); - } - - - - //count number of tracks@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - //Reconstructed Track - TClonesArray* tracks = dynamic_cast (fAODIn->GetTracks()); - if(!tracks){ - if (fDebug > 1) Printf("%s:%d could not get AODtracks", (char*)__FILE__,__LINE__); - return; - } - - Bool_t TrackEff[5000]; - for(int i=0;i<5000;i++){ - TrackEff[i]=false; - } - Int_t nt = fAODIn->GetNumberOfTracks(); - AliAODTrack* trackAOD=NULL; - for(int ntrack =0;ntrackAt(ntrack)); - Bool_t bgoodT=false; - if(Filtermask!=272){if(trackAOD->TestFilterMask(Filtermask))bgoodT=true;} - else {if(trackAOD->IsHybridGlobalConstrainedGlobal())bgoodT=true;} //for hybrid Track cuts - if(!bgoodT)continue; - if(TMath::Abs(trackAOD->Eta())<0.9){ - Track_n++; - fH1Track_pt ->Fill(trackAOD->Pt()*TrackEScale); - fH1Track_phi->Fill(trackAOD->Phi()); - fH1Track_eta->Fill(trackAOD->Eta()); - //cout<<"Scale "<Pt()<< " scaled pt "<< trackAOD->Pt()*TrackEScale <GetLabel()); - TClonesArray* mctracks = dynamic_cast (fAODIn->GetList()->FindObject(AliAODMCParticle::StdBranchName())); - if(!mctracks){ - if (fDebug > 1) Printf("%s:%d could not get AODMCtracks", (char*)__FILE__,__LINE__); - continue; - } - AliAODMCParticle *trackMCAOD = (AliAODMCParticle*) mctracks->At(MCID); - fH2TrackMCptResolution->Fill(trackMCAOD->Pt(),trackAOD->Pt()); - TrackEff[MCID]=true; - // -------------------------------------- - } - } - } - if(IsMC){ - //MC Track - TClonesArray* mctracks = dynamic_cast (fAODIn->GetList()->FindObject(AliAODMCParticle::StdBranchName())); - if(!mctracks){ - if (fDebug > 1) Printf("%s:%d could not get AODMCtracks", (char*)__FILE__,__LINE__); - return; - } - Int_t ntmc = mctracks->GetEntriesFast(); - AliAODMCParticle* trackMCAOD; - int lastprim=0; - for(int ntrack =0;ntrackAt(ntrack)); - if((trackMCAOD->IsPhysicalPrimary())==1)lastprim=ntrack; - } - for(int ntrack =0;ntrackAt(ntrack)); - if((trackMCAOD->GetPdgCode()>10)&&((trackMCAOD->GetMother())>1)&&(ntrack>lastprim)&&(trackMCAOD->Charge())){// for Decay particles - if(TMath::Abs(trackMCAOD->Eta())<0.9){ - fH1MCTrack_pt ->Fill(trackMCAOD->Pt()); - fH1MCTrack_phi->Fill(trackMCAOD->Phi()); - fH1MCTrack_eta->Fill(trackMCAOD->Eta()); - if(TrackEff[ntrack])fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),1); - else fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),0); - } - } - if((trackMCAOD->IsPhysicalPrimary())&&(trackMCAOD->Charge())){// for Physical particles - if(TMath::Abs(trackMCAOD->Eta())<0.9){ - MCTrack_n++; - fH1MCTrack_pt ->Fill(trackMCAOD->Pt()); - fH1MCTrack_phi->Fill(trackMCAOD->Phi()); - fH1MCTrack_eta->Fill(trackMCAOD->Eta()); - fH1MCPrimTrack_pt ->Fill(trackMCAOD->Pt()); - fH1MCPrimTrack_phi->Fill(trackMCAOD->Phi()); - fH1MCPrimTrack_eta->Fill(trackMCAOD->Eta()); - if(TrackEff[ntrack])fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),1); - else fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),0); - } - } - } - } - //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ count number of tracks - - - - - for(int algorithm=0;algorithm<3;algorithm++){ - - if(algorithm==0)fJetBranch = Branchname_rec.Data(); - if(algorithm==1)fJetBranch = Branchname_gen2.Data(); - if(algorithm==2)fJetBranch = Branchname_gen.Data(); - - if((!IsMC&&(algorithm==1||algorithm==2)))continue; - - TClonesArray* jets = dynamic_cast (fAODIn->FindListObject(fJetBranch.Data())); - if(!jets){ - printf(" Tere are no Branch named %s \n",fJetBranch.Data()); - continue; - } - Int_t nj = jets->GetEntriesFast(); - if (fDebug) printf("There are %5d jets in the event \n", nj); - AliAODJet* jetsAOD; - //Find Leading Jet ------------------------------------------------------- - for(int njet =0;njetAt(njet)); - Jet_pt [algorithm][njet] = jetsAOD->Pt()*JetEScale; - Jet_phi [algorithm][njet] = jetsAOD->Phi(); - Jet_eta [algorithm][njet] = jetsAOD->Eta(); - Jet_area [algorithm][njet] = jetsAOD->EffectiveAreaCharged(); - - - TRefArray *reftracks = jetsAOD->GetRefTracks(); - if(algorithm==0){if(Jet_pt[algorithm][njet]>1.)Mjet_tot += reftracks->GetEntriesFast();Njet_tot++;} - double eta_cut_Jet=0.5; - if((TMath::Abs(Jet_eta[algorithm][njet])10.)){ - if(algorithm==0){ - fH1Jet_pt ->Fill(Jet_pt [algorithm][njet]); - fH1Jet_phi->Fill(Jet_phi[algorithm][njet]); - fH1Jet_eta->Fill(Jet_eta[algorithm][njet]); - if(Jet_pt[algorithm][njet]>ptLJetAOD){ - findLJetAOD=true; - nLJetAOD=njet;ptLJetAOD=Jet_pt[algorithm][njet];phiLJetAOD=Jet_phi[algorithm][njet];etaLJetAOD=Jet_eta[algorithm][njet]; - } - } - if(algorithm==1){ - fH1JetMC_pt->Fill(Jet_pt[algorithm][njet]); - if(Jet_pt[algorithm][njet]>ptLJetMC2){ - findLJetMC2=true; - nLJetMC2=njet;ptLJetMC2=Jet_pt[algorithm][njet];phiLJetMC2=Jet_phi[algorithm][njet];etaLJetMC2=Jet_eta[algorithm][njet]; - } - } - if(algorithm==2){ - if(Jet_pt[algorithm][njet]>ptLJetMC){ - nLJetMC=njet;ptLJetMC=Jet_pt[algorithm][njet];phiLJetMC=Jet_phi[algorithm][njet];etaLJetMC=Jet_eta[algorithm][njet]; - } - } - } - }//njet loop - if(algorithm==0){nLJet=nLJetAOD;fH1leadJet_pt ->Fill(Jet_pt[algorithm][nLJet]);} - if(algorithm==1){nLJet=nLJetMC2;fH1leadJetMC_pt->Fill(Jet_pt[algorithm][nLJet]);} - if(algorithm==2){nLJet=nLJetMC;} - if(findLJetAOD&&(algorithm==0)){ - jetsAOD = (AliAODJet*) (jets->At(nLJet)); - TRefArray *reftracks = jetsAOD->GetRefTracks(); - Mlead = reftracks->GetEntriesFast(); - } - if(findLJetMC2&&(algorithm==1)){ - jetsAOD = (AliAODJet*) (jets->At(nLJetMC2)); - TRefArray *reftracks = jetsAOD->GetRefTracks(); - MleadMC = reftracks->GetEntriesFast(); - } - //----------------------------------------------------------- Leading Jet - if(nj<2)continue; - //Find Sub leading Jet ================================================== - for(int njet=0;njetAt(njet); - subJet_pt [algorithm][njet] = jetsAOD->Pt()*JetEScale; - subJet_eta[algorithm][njet] = jetsAOD->Eta(); - double eta_cut_Jet=0.5; - if((TMath::Abs(subJet_eta[algorithm][njet])10.)){ - if(subJet_pt[algorithm][njet]>ptsLJetAOD&&algorithm==0){ - ptsLJetAOD=Jet_pt[algorithm][njet];phisLJetAOD=Jet_phi[algorithm][njet];etasLJetAOD=Jet_eta[algorithm][njet]; - } - if(subJet_pt[algorithm][njet]>ptsLJetMC2 &&algorithm==1){ - ptsLJetMC2=Jet_pt[algorithm][njet];phisLJetMC2=Jet_phi[algorithm][njet];etasLJetMC2=Jet_eta[algorithm][njet]; - } - if(subJet_pt[algorithm][njet]>ptsLJetMC &&algorithm==2){ - ptsLJetMC =Jet_pt[algorithm][njet];phisLJetMC =Jet_phi[algorithm][njet];etasLJetMC =Jet_eta[algorithm][njet]; - } - } - } - //====================================================== Sub leading Jet - - double Leading_pt=0.;double Leading_phi=999.;double Leading_eta=999.;double sLeading_pt=0.;double sLeading_phi=999.;double sLeading_eta=999.; - if(algorithm==0){Leading_pt=ptLJetAOD;Leading_phi=phiLJetAOD;Leading_eta=etaLJetAOD;sLeading_pt=ptsLJetAOD;sLeading_phi=phisLJetAOD;sLeading_eta=etasLJetAOD;} - if(algorithm==1){Leading_pt=ptLJetMC2;Leading_phi=phiLJetMC2;Leading_eta=etaLJetMC2;sLeading_pt=ptsLJetMC2;sLeading_phi=phisLJetMC2;sLeading_eta=etasLJetMC2;} - if(algorithm==2){Leading_pt=ptLJetMC ;Leading_phi=phiLJetMC ;Leading_eta=etaLJetMC ;sLeading_pt=ptsLJetMC ;sLeading_phi=phisLJetMC ;sLeading_eta=etasLJetMC ;} - - ////Di-Jet event trigger +++++++++++++++++++++++++++++++++++++++++++++++ - double DPhi = DeltaPhi(Leading_phi,sLeading_phi); - double DEta = Leading_eta-sLeading_eta; - if(algorithm==0){ - fH2JetsJet_dphi->Fill(Leading_pt,DPhi); - fH2JetsJet_deta->Fill(Leading_pt,DEta); - } - if(algorithm==1){ - fH2JetsJetMC_dphi->Fill(Leading_pt,DPhi); - fH2JetsJetMC_deta->Fill(Leading_pt,DEta); - } - if((TMath::Cos(DPhi)<-0.5)&&(Leading_pt>10.)&&(sLeading_pt>10.)){ - if(algorithm==0)Aj = (Leading_pt-sLeading_pt)/(Leading_pt+sLeading_pt); - if(algorithm==1)AjMC = (Leading_pt-sLeading_pt)/(Leading_pt+sLeading_pt); - if(algorithm==0){ - fH1subJet_pt_dijet ->Fill(sLeading_pt); - fH1leadJet_pt_dijet->Fill(Leading_pt); - fH2JetsJet_Aj ->Fill(Leading_pt,Aj); - fH2JetsJet_pt ->Fill(Leading_pt,sLeading_pt); - fH2Mult_Aj ->Fill(Mult,Aj); - fH2Mlead_Aj ->Fill(Mlead,Aj); - for(int eb=0;eb<5;eb++){ - if(TMath::Abs(Leading_pt -10.-20.*(eb))<10.){ - fH1Aj[eb] ->Fill(Aj); - } - } - } - if(algorithm==1){ - fH1leadJetMC_pt_dijet->Fill(Leading_pt); - fH1subJetMC_pt_dijet ->Fill(sLeading_pt); - fH2JetsJetMC_Aj ->Fill(Leading_pt,AjMC); - fH2JetsJetMC_pt ->Fill(Leading_pt,sLeading_pt); - findDiJetMC=true; - } - findDiJet=true; - - } - ////+++++++++++++++++++++++++++++++++++++++++++++++ Di-Jet event trigger - - if(algorithm!=0)continue;// for only data & reconstructed Jets - - - //Jet-Hadron Correlation############################################### - if((findDiJet)&&(Leading_pt>10.)&&(sLeading_pt>10.)){ - double eta_cut_Jet=0.5; - if(TMath::Abs(Leading_eta)Fill(1); - if(eb==1){ - if((0Fill(1);} - else if((7<=Mlead)&&(Mlead<10)) {fH1ndiJ_2040Mlead[1]->Fill(1);} - else {fH1ndiJ_2040Mlead[2]->Fill(1);} - if((0Fill(1);} - else if((0.19<=Aj)&&(Aj<0.38)) {fH1ndiJ_2040Aj [1]->Fill(1);} - else {fH1ndiJ_2040Aj [2]->Fill(1);} - } - fH1Mlead[eb]->Fill(Mlead); - for(int ntrack =0;ntrackGetTrack(ntrack)); - Bool_t bgoodT=false; - if(Filtermask!=272){if(trackAOD->TestFilterMask(Filtermask))bgoodT=true;} - else{ if(trackAOD->IsHybridGlobalConstrainedGlobal())bgoodT=true;} //for hybrid Track cuts - if(!bgoodT)continue; - Track_pt [ntrack] = (trackAOD->Pt()*TrackEScale); - Track_phi [ntrack] = trackAOD->Phi(); - Track_eta [ntrack] = trackAOD->Eta(); - - //cout<<"Scale "<Pt()<< " scaled pt "<< trackAOD->Pt()*TrackEScale <0.15))continue;} - if(teb==1){if(!((Track_pt[ntrack]<1.5)&&(Track_pt[ntrack]>0.15)))continue;} - if(teb==2){if(!((Track_pt[ntrack]<3.0)&&(Track_pt[ntrack]>1.5)))continue;} - if(teb==3){if(!((Track_pt[ntrack]<4.5)&&(Track_pt[ntrack]>3.0)))continue;} - if(teb==4){if(!( Track_pt[ntrack]>4.5))continue;} - fH1JetHadron_dphi_ediv [eb][teb]->Fill(DelPhi); - fH1JetHadron_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,Track_pt[ntrack]); - fH1JetHadron_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,Track_pt[ntrack]/Leading_pt); - if(eb==1){ - if((0Fill(DelPhi,Track_pt[ntrack]);} - else if((7<=Mlead)&&(Mlead<10)){fH1JetHadron_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,Track_pt[ntrack]);} - else {fH1JetHadron_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,Track_pt[ntrack]);} - if((0Fill(DelPhi,Track_pt[ntrack]);} - else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadron_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,Track_pt[ntrack]);} - else {fH1JetHadron_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,Track_pt[ntrack]);} - } - } - } - }//Track Loop - if(IsMC){ - //MC Track - TClonesArray* mctracks = dynamic_cast (fAODIn->GetList()->FindObject(AliAODMCParticle::StdBranchName())); - if(!mctracks){ - if (fDebug > 1) Printf("%s:%d could not get AODMCtracks", (char*)__FILE__,__LINE__); - continue; - } - Int_t ntmc = mctracks->GetEntriesFast(); - AliAODMCParticle* trackMCAOD; - int lastprim=0; - for(int ntrack =0;ntrackAt(ntrack)); - if((trackMCAOD->IsPhysicalPrimary())==1)lastprim=ntrack; - } - for(int ntrack =0;ntrackAt(ntrack)); - if((trackMCAOD->GetPdgCode()>10)&&((trackMCAOD->GetMother())>1)&&(ntrack>lastprim)&&(trackMCAOD->Charge())){// for Decay particles - MCTrack_pt [ntrack] = trackMCAOD->Pt(); - MCTrack_phi [ntrack] = trackMCAOD->Phi(); - MCTrack_eta [ntrack] = trackMCAOD->Eta(); - double DelPhi = DeltaPhi(Leading_phi,MCTrack_phi[ntrack]); - if(TMath::Abs(MCTrack_eta[ntrack])<0.9){ - for(int teb=0;teb<5;teb++){ - if(teb==0){if(!( MCTrack_pt[ntrack]>0.15))continue;} - if(teb==1){if(!((MCTrack_pt[ntrack]<1.5)&&(MCTrack_pt[ntrack]>0.15)))continue;} - if(teb==2){if(!((MCTrack_pt[ntrack]<3.0)&&(MCTrack_pt[ntrack]>1.5)))continue;} - if(teb==3){if(!((MCTrack_pt[ntrack]<4.5)&&(MCTrack_pt[ntrack]>3.0)))continue;} - if(teb==4){if(!( MCTrack_pt[ntrack]>4.5))continue;} - fH1JetHadronMC_dphi_ediv [eb][teb]->Fill(DelPhi); - fH1JetHadronMC_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]); - fH1JetHadronMC_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]/Leading_pt); - if(eb==1){ - if((0Fill(DelPhi,MCTrack_pt[ntrack]);} - else if((7<=Mlead)&&(Mlead<10)){fH1JetHadronMC_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - else {fH1JetHadronMC_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - if((0Fill(DelPhi,MCTrack_pt[ntrack]);} - else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadronMC_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - else {fH1JetHadronMC_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - } - } - } - } - if((trackMCAOD->IsPhysicalPrimary())&&(trackMCAOD->Charge())){// for Physical particles - MCTrack_pt [ntrack] = trackMCAOD->Pt(); - MCTrack_phi [ntrack] = trackMCAOD->Phi(); - MCTrack_eta [ntrack] = trackMCAOD->Eta(); - double DelPhi = DeltaPhi(Leading_phi,MCTrack_phi[ntrack]); - if(TMath::Abs(MCTrack_eta[ntrack])<0.9){ - for(int teb=0;teb<5;teb++){ - if(teb==0){if(!( MCTrack_pt[ntrack]>0.15))continue;} - if(teb==1){if(!((MCTrack_pt[ntrack]<1.5)&&(MCTrack_pt[ntrack]>0.15)))continue;} - if(teb==2){if(!((MCTrack_pt[ntrack]<3.0)&&(MCTrack_pt[ntrack]>1.5)))continue;} - if(teb==3){if(!((MCTrack_pt[ntrack]<4.5)&&(MCTrack_pt[ntrack]>3.0)))continue;} - if(teb==4){if(!( MCTrack_pt[ntrack]>4.5))continue;} - fH1JetHadronMC_dphi_ediv [eb][teb]->Fill(DelPhi); - fH1JetHadronMC_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]); - fH1JetHadronMC_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]/Leading_pt); - fH1JetHadronMCPrim_dphi_ediv [eb][teb]->Fill(DelPhi); - fH1JetHadronMCPrim_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]); - fH1JetHadronMCPrim_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]/Leading_pt); - if(eb==1){ - if((0Fill(DelPhi,MCTrack_pt[ntrack]);} - else if((7<=Mlead)&&(Mlead<10)){fH1JetHadronMC_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - else {fH1JetHadronMC_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - if((0Fill(DelPhi,MCTrack_pt[ntrack]);} - else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadronMC_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - else {fH1JetHadronMC_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - - if((0Fill(DelPhi,MCTrack_pt[ntrack]);} - else if((7<=Mlead)&&(Mlead<10)){fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - else {fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - if((0Fill(DelPhi,MCTrack_pt[ntrack]);} - else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - else {fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} - } - } - } - } - } - } - } - }// Momentum Loop Jet - fH2Jet_pt_Munder ->Fill(Leading_pt,(double)Munder/(1.8*pi/2.)*Jet_area[0][nLJet]); - fH2Jet_pt_Mlead ->Fill(Leading_pt,Mlead); - }//eta cut - }// Di-Jet - //############################################### Jet-Hadron Correlation - }// algorithm LOOP - if(IsMC){ - for(int eb=0;eb<5;eb++){ - double DPhi,DEta; - if(TMath::Abs(ptLJetAOD -10.-20.*(eb))<10.){ - DPhi = DeltaPhi(phiLJetMC,phiLJetAOD); - DEta = etaLJetMC-etaLJetAOD; - fH1leadJetMC_dphiResolution[eb]->Fill(DPhi); - if(sqrt(pow(DPhi,2)+pow(DEta,2))<0.4)fH1leadJetMC_Efficiency[eb]->Fill(1); - else fH1leadJetMC_Efficiency[eb]->Fill(0); - DPhi = DeltaPhi(phisLJetMC,phisLJetAOD); - DEta = etasLJetMC-etasLJetAOD; - fH1subJetMC_dphiResolution[eb]->Fill(DPhi); - if(sqrt(pow(DPhi,2)+pow(DEta,2))<0.4)fH1subJetMC_Efficiency[eb]->Fill(1); - else fH1subJetMC_Efficiency[eb]->Fill(0); - DPhi = DeltaPhi(phiLJetMC2,phiLJetAOD); - DEta = etaLJetMC2-etaLJetAOD; - - if(sqrt(pow(DPhi,2)+pow(DEta,2))<0.4)fH2leadJetMCptResolution->Fill(ptLJetMC2,ptLJetAOD); - if(findDiJetMC)fH2AjCorrelation_MCRec ->Fill(AjMC,Aj); - if(findDiJetMC)fH2MleadCorrelation_MCRec->Fill(MleadMC,Mlead); - } - } - fH2Mult_Mtrack->Fill(Mult,Track_n); - fH2Mult_Mjet ->Fill(Mult,Mjet_tot); - fH2Mult_Njet ->Fill(Mult,Njet_tot); - if(findLJetAOD)fH2Mult_Mlead ->Fill(Mult,Mlead); - } - else{ - fH2Mult_Mtrack->Fill(Mult,Track_n); - fH2Mult_Mjet ->Fill(Mult,Mjet_tot); - fH2Mult_Njet ->Fill(Mult,Njet_tot); - if(findLJetAOD)fH2Mult_Mlead ->Fill(Mult,Mlead); - } - - PostData(1, fHistList); - return; -} - -//________________________________________________________________________ -void AliAnalysisTaskJetHadronCorrelation::Terminate(Option_t *){ - // Terminate analysis - if (fDebug) printf("AnalysisTaskPt: Terminate() \n"); -} - -Double_t AliAnalysisTaskJetHadronCorrelation::DeltaPhi(Double_t phi1,Double_t phi2){ - Float_t pi=TMath::Pi(); - Double_t dphi = phi1-phi2; - if (dphi<(-1./2*pi))dphi = dphi +2*pi; - else if(dphi>( 3./2*pi))dphi = dphi -2*pi; - return dphi; -} +//#include +//#include +#include +#include + +#include "TTree.h" +#include "TCanvas.h" +#include "AliAnalysisTask.h" +#include "AliInputEventHandler.h" +#include "AliESDtrack.h" +#include "AliAODVertex.h" +#include "AliAODCluster.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "TDatabasePDG.h" +#include "AliAnalysisManager.h" +#include "AliJetFinder.h" +#include "AliJetHeader.h" +#include "AliJetReader.h" +#include "AliJetReaderHeader.h" +#include "AliUA1JetHeaderV1.h" +#include "AliSISConeJetHeader.h" +#include "AliESDEvent.h" +#include "AliAODEvent.h" +#include "AliAODHandler.h" +#include "AliAODInputHandler.h" +#include "AliAODTrack.h" +#include "AliAODMCParticle.h" +#include "AliAODJet.h" +#include "AliAODJetEventBackground.h" +#include "AliMCParticle.h" +#include "AliAODMCParticle.h" +#include "AliMCEventHandler.h" +#include "AliMCEvent.h" +#include "AliStack.h" + +#include "AliAODHeader.h" +#include "AliAODMCHeader.h" +//#include "AliGenPythiaEventHeader.h" +#include "AliJetKineReaderHeader.h" +#include "AliGenCocktailEventHeader.h" +#include "AliInputEventHandler.h" +#include "AliGenEventHeader.h" +#include "AliGenDPMjetEventHeader.h" + +#include "AliAnalysisTaskJetHadronCorrelation.h" +#include "AliAnalysisTaskPhiCorrelations.h" +//#include "AliAnalysisHelperJetTasks.h" +#include "AliPWG4HighPtQAMC.h" + +using std::cout; +using std::endl; + +ClassImp(AliAnalysisTaskJetHadronCorrelation) + + //________________________________________________________________________ + AliAnalysisTaskJetHadronCorrelation::AliAnalysisTaskJetHadronCorrelation(): + AliAnalysisTaskSE(), + fUseAODInput(kFALSE), + fJetBranch("jets"), + fNonStdFile(""), + fAODIn(0x0), + fAODOut(0x0), + fAODExtension(0x0), + JFAlg("ANTIKT"), + Radius(0.4), + Filtermask(272), + BackM(0), + TrackPtcut(0.15), + SkipCone(0), + IsMC(kTRUE), + JetEScale(1.), + TrackEScale(1.), + fxsec(0.), + ftrial(1.), + fHistList(0x0), // Output list + fIfiles(0), + fH1Events(0x0), + fH1Xsec(0x0), + fH1Trials(0x0), + fH1Track_pt (0x0), + fH1Track_phi (0x0), + fH1Track_eta (0x0), + fH1MCTrack_pt (0x0), + fH1MCTrack_phi (0x0), + fH1MCTrack_eta (0x0), + fH1MCPrimTrack_pt (0x0), + fH1MCPrimTrack_phi (0x0), + fH1MCPrimTrack_eta (0x0), + fH1Jet_pt (0x0), + fH1Jet_phi (0x0), + fH1Jet_eta (0x0), + fH1leadJet_pt (0x0), + fH1leadJet_pt_dijet (0x0), + fH1subJet_pt_dijet (0x0), + fH1JetMC_pt (0x0), + fH1leadJetMC_pt (0x0), + fH1leadJetMC_pt_dijet (0x0), + fH1subJetMC_pt_dijet (0x0), + fH2JetsJet_dphi (0x0), + fH2JetsJet_deta (0x0), + fH2JetsJet_Aj (0x0), + fH2JetsJet_pt (0x0), + fH2JetsJetMC_dphi (0x0), + fH2JetsJetMC_deta (0x0), + fH2JetsJetMC_Aj (0x0), + fH2JetsJetMC_pt (0x0), + fH2Mult_Mtrack (0x0), + fH2Mult_Mlead (0x0), + fH2Mult_Mjet (0x0), + fH2Mult_Njet (0x0), + fH2Mult_Aj (0x0), + fH2Mlead_Aj (0x0), + fH2Jet_pt_Mlead (0x0), + fH2Jet_pt_Munder (0x0), + fH2leadJetMCptResolution (0x0), + fH2TrackMCptResolution (0x0), + fH2TrackMCptEfficiency (0x0), + fH2AjCorrelation_MCRec (0x0), + fH2MleadCorrelation_MCRec(0x0) +{ + for(int j=0;j<5;j++){ + fH1ndiJ_ediv [j]=0; + fH1Aj [j]=0; + fH1Mlead [j]=0; + fH1leadJetMC_dphiResolution [j]=0; + fH1subJetMC_dphiResolution [j]=0; + fH1leadJetMC_Efficiency [j]=0; + fH1subJetMC_Efficiency [j]=0; + for(int k=0;k<5;k++){ + fH1JetHadron_dphi_ediv [j][k]=0; + fH1JetHadron_dphi_tptweight_ediv [j][k]=0; + fH1JetHadron_dphi_tJptweight_ediv[j][k]=0; + fH1JetHadronMC_dphi_ediv [j][k]=0; + fH1JetHadronMC_dphi_tptweight_ediv [j][k]=0; + fH1JetHadronMC_dphi_tJptweight_ediv[j][k]=0; + fH1JetHadronMCPrim_dphi_ediv [j][k]=0; + fH1JetHadronMCPrim_dphi_tptweight_ediv [j][k]=0; + fH1JetHadronMCPrim_dphi_tJptweight_ediv[j][k]=0; + } + } + for(int j=0;j<3;j++){ + fH1ndiJ_2040Mlead [j]=0; + fH1ndiJ_2040Aj [j]=0; + for(int k=0;k<5;k++){ + fH1JetHadron_dphi_tptweight2040_Mleaddep[j][k]=0; + fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]=0; + fH1JetHadronMC_dphi_tptweight2040_Mleaddep[j][k]=0; + fH1JetHadronMC_dphi_tptweight2040_Ajdep [j][k]=0; + fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[j][k]=0; + fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [j][k]=0; + } + } + // Default constructor +} + +//________________________________________________________________________ +AliAnalysisTaskJetHadronCorrelation::AliAnalysisTaskJetHadronCorrelation(const char *name): + AliAnalysisTaskSE(name), + fUseAODInput(kFALSE), + fJetBranch("jets"), + fNonStdFile(""), + fAODIn(0x0), + fAODOut(0x0), + fAODExtension(0x0), + JFAlg("ANTIKT"), + Radius(0.4), + Filtermask(272), + BackM(0), + TrackPtcut(0.15), + SkipCone(0), + IsMC(kTRUE), + JetEScale(1.), + TrackEScale(1.), + fxsec(0.), + ftrial(1.), + fHistList(0x0), // Output list + fIfiles(0), + fH1Events(0x0), + fH1Xsec(0x0), + fH1Trials(0x0), + fH1Track_pt (0x0), + fH1Track_phi (0x0), + fH1Track_eta (0x0), + fH1MCTrack_pt (0x0), + fH1MCTrack_phi (0x0), + fH1MCTrack_eta (0x0), + fH1MCPrimTrack_pt (0x0), + fH1MCPrimTrack_phi (0x0), + fH1MCPrimTrack_eta (0x0), + fH1Jet_pt (0x0), + fH1Jet_phi (0x0), + fH1Jet_eta (0x0), + fH1leadJet_pt (0x0), + fH1leadJet_pt_dijet (0x0), + fH1subJet_pt_dijet (0x0), + fH1JetMC_pt (0x0), + fH1leadJetMC_pt (0x0), + fH1leadJetMC_pt_dijet (0x0), + fH1subJetMC_pt_dijet (0x0), + fH2JetsJet_dphi (0x0), + fH2JetsJet_deta (0x0), + fH2JetsJet_Aj (0x0), + fH2JetsJet_pt (0x0), + fH2JetsJetMC_dphi (0x0), + fH2JetsJetMC_deta (0x0), + fH2JetsJetMC_Aj (0x0), + fH2JetsJetMC_pt (0x0), + fH2Mult_Mtrack (0x0), + fH2Mult_Mlead (0x0), + fH2Mult_Mjet (0x0), + fH2Mult_Njet (0x0), + fH2Mult_Aj (0x0), + fH2Mlead_Aj (0x0), + fH2Jet_pt_Mlead (0x0), + fH2Jet_pt_Munder (0x0), + fH2leadJetMCptResolution (0x0), + fH2TrackMCptResolution (0x0), + fH2TrackMCptEfficiency (0x0), + fH2AjCorrelation_MCRec (0x0), + fH2MleadCorrelation_MCRec(0x0) +{ + + for(int j=0;j<5;j++){ + fH1ndiJ_ediv [j]=0; + fH1Aj [j]=0; + fH1Mlead [j]=0; + fH1leadJetMC_dphiResolution [j]=0; + fH1subJetMC_dphiResolution [j]=0; + fH1leadJetMC_Efficiency [j]=0; + fH1subJetMC_Efficiency [j]=0; + for(int k=0;k<5;k++){ + fH1JetHadron_dphi_ediv [j][k]=0; + fH1JetHadron_dphi_tptweight_ediv [j][k]=0; + fH1JetHadron_dphi_tJptweight_ediv[j][k]=0; + fH1JetHadronMC_dphi_ediv [j][k]=0; + fH1JetHadronMC_dphi_tptweight_ediv [j][k]=0; + fH1JetHadronMC_dphi_tJptweight_ediv[j][k]=0; + fH1JetHadronMCPrim_dphi_ediv [j][k]=0; + fH1JetHadronMCPrim_dphi_tptweight_ediv [j][k]=0; + fH1JetHadronMCPrim_dphi_tJptweight_ediv[j][k]=0; + } + } + for(int j=0;j<3;j++){ + fH1ndiJ_2040Mlead [j]=0; + fH1ndiJ_2040Aj [j]=0; + for(int k=0;k<5;k++){ + fH1JetHadron_dphi_tptweight2040_Mleaddep[j][k]=0; + fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]=0; + fH1JetHadronMC_dphi_tptweight2040_Mleaddep[j][k]=0; + fH1JetHadronMC_dphi_tptweight2040_Ajdep [j][k]=0; + fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[j][k]=0; + fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [j][k]=0; + } + } + + // Default constructor + // Constructor + // Define input and output slots here + // Input slot #0 works with a TChain + DefineInput(0, TChain::Class()); + // Output slot #0 id reserved by the base class for AOD + // Output slot #1 writes into a TH1 container + DefineOutput(1, TList::Class()); +} + +//________________________________________________________________________ +void AliAnalysisTaskJetHadronCorrelation::UserCreateOutputObjects() +{ + // Create histograms + // Called once + + fHistList = new TList();fHistList->SetOwner(kTRUE); cout<<"TList is created for output "<SetOwner(kTRUE); cout<<"TList is created for output "<Add(fH1Events ); + fHistList->Add(fH1Xsec ); + fHistList->Add(fH1Trials ); + fHistList->Add(fH1Track_pt ); + fHistList->Add(fH1Track_phi ); + fHistList->Add(fH1Track_eta ); + fHistList->Add(fH1MCTrack_pt ); + fHistList->Add(fH1MCTrack_phi ); + fHistList->Add(fH1MCTrack_eta ); + fHistList->Add(fH1MCPrimTrack_pt ); + fHistList->Add(fH1MCPrimTrack_phi ); + fHistList->Add(fH1MCPrimTrack_eta ); + fHistList->Add(fH1Jet_pt ); + fHistList->Add(fH1Jet_phi ); + fHistList->Add(fH1Jet_eta ); + fHistList->Add(fH1leadJet_pt ); + fHistList->Add(fH1leadJet_pt_dijet ); + fHistList->Add(fH1subJet_pt_dijet ); + fHistList->Add(fH1JetMC_pt ); + fHistList->Add(fH1leadJetMC_pt ); + fHistList->Add(fH1leadJetMC_pt_dijet); + fHistList->Add(fH1subJetMC_pt_dijet ); + fHistList->Add(fH2JetsJet_dphi ); + fHistList->Add(fH2JetsJet_deta ); + fHistList->Add(fH2JetsJet_Aj ); + fHistList->Add(fH2JetsJet_pt ); + fHistList->Add(fH2JetsJetMC_dphi ); + fHistList->Add(fH2JetsJetMC_deta ); + fHistList->Add(fH2JetsJetMC_Aj ); + fHistList->Add(fH2JetsJetMC_pt ); + fHistList->Add(fH2Mult_Mtrack ); + fHistList->Add(fH2Mult_Mlead ); + fHistList->Add(fH2Mult_Mjet ); + fHistList->Add(fH2Mult_Njet ); + fHistList->Add(fH2Mult_Aj ); + fHistList->Add(fH2Mlead_Aj ); + fHistList->Add(fH2Jet_pt_Mlead ); + fHistList->Add(fH2Jet_pt_Munder ); + fHistList->Add(fH2leadJetMCptResolution ); + fHistList->Add(fH2TrackMCptResolution ); + fHistList->Add(fH2TrackMCptEfficiency ); + fHistList->Add(fH2AjCorrelation_MCRec ); + fHistList->Add(fH2MleadCorrelation_MCRec); + for(int j=0;j<5;j++){ + fHistList->Add(fH1ndiJ_ediv [j]); + fHistList->Add(fH1Aj [j]); + fHistList->Add(fH1Mlead [j]); + fHistList->Add(fH1leadJetMC_dphiResolution [j]); + fHistList->Add(fH1subJetMC_dphiResolution [j]); + fHistList->Add(fH1leadJetMC_Efficiency [j]); + fHistList->Add(fH1subJetMC_Efficiency [j]); + for(int k=0;k<5;k++){ + fHistList->Add(fH1JetHadron_dphi_ediv [j][k]); + fHistList->Add(fH1JetHadron_dphi_tptweight_ediv [j][k]); + fHistList->Add(fH1JetHadron_dphi_tJptweight_ediv [j][k]); + fHistList->Add(fH1JetHadronMC_dphi_ediv [j][k]); + fHistList->Add(fH1JetHadronMC_dphi_tptweight_ediv [j][k]); + fHistList->Add(fH1JetHadronMC_dphi_tJptweight_ediv [j][k]); + fHistList->Add(fH1JetHadronMCPrim_dphi_ediv [j][k]); + fHistList->Add(fH1JetHadronMCPrim_dphi_tptweight_ediv [j][k]); + fHistList->Add(fH1JetHadronMCPrim_dphi_tJptweight_ediv [j][k]); + } + } + for(int j=0;j<3;j++){ + fHistList->Add(fH1ndiJ_2040Mlead [j]); + fHistList->Add(fH1ndiJ_2040Aj [j]); + for(int k=0;k<5;k++){ + fHistList->Add(fH1JetHadron_dphi_tptweight2040_Mleaddep [j][k]); + fHistList->Add(fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]); + fHistList->Add(fH1JetHadronMC_dphi_tptweight2040_Mleaddep [j][k]); + fHistList->Add(fH1JetHadronMC_dphi_tptweight2040_Ajdep [j][k]); + fHistList->Add(fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep [j][k]); + fHistList->Add(fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [j][k]); + } + } + } + else{ + fHistList->Add(fH1Events ); + fHistList->Add(fH1Track_pt ); + fHistList->Add(fH1Track_phi ); + fHistList->Add(fH1Track_eta ); + fHistList->Add(fH1Jet_pt ); + fHistList->Add(fH1Jet_phi ); + fHistList->Add(fH1Jet_eta ); + fHistList->Add(fH1leadJet_pt ); + fHistList->Add(fH1leadJet_pt_dijet ); + fHistList->Add(fH1subJet_pt_dijet ); + fHistList->Add(fH2JetsJet_dphi ); + fHistList->Add(fH2JetsJet_deta ); + fHistList->Add(fH2JetsJet_Aj ); + fHistList->Add(fH2JetsJet_pt ); + fHistList->Add(fH2Mult_Mtrack ); + fHistList->Add(fH2Mult_Mlead ); + fHistList->Add(fH2Mult_Mjet ); + fHistList->Add(fH2Mult_Njet ); + fHistList->Add(fH2Mult_Aj ); + fHistList->Add(fH2Mlead_Aj ); + fHistList->Add(fH2Jet_pt_Mlead ); + fHistList->Add(fH2Jet_pt_Munder ); + for(int j=0;j<5;j++){ + fHistList->Add(fH1ndiJ_ediv [j]); + fHistList->Add(fH1Aj [j]); + fHistList->Add(fH1Mlead [j]); + for(int k=0;k<5;k++){ + fHistList->Add(fH1JetHadron_dphi_ediv [j][k]); + fHistList->Add(fH1JetHadron_dphi_tptweight_ediv [j][k]); + fHistList->Add(fH1JetHadron_dphi_tJptweight_ediv [j][k]); + } + } + for(int j=0;j<3;j++){ + fHistList->Add(fH1ndiJ_2040Mlead [j]); + fHistList->Add(fH1ndiJ_2040Aj [j]); + for(int k=0;k<5;k++){ + fHistList->Add(fH1JetHadron_dphi_tptweight2040_Mleaddep [j][k]); + fHistList->Add(fH1JetHadron_dphi_tptweight2040_Ajdep [j][k]); + } + } + } + + // =========== Switch on Sumw2 for all histos =========== + for (Int_t i=0; iGetEntries(); ++i) + { + TH1 *h1 = dynamic_cast(fHistList->At(i)); + if (h1) + { + h1->Sumw2(); + continue; + } + THnSparse *hn = dynamic_cast(fHistList->At(i)); + if(hn)hn->Sumw2(); + } + TH1::AddDirectory(oldStatus); + + PostData(1,fHistList); +} + + +//---------------------------------------------------------------------- +void AliAnalysisTaskJetHadronCorrelation::Init() +{ + // Initialization + if (fDebug) printf("AnalysisTaskJetHadronCorrelation::Init() \n"); + +} + +Bool_t AliAnalysisTaskJetHadronCorrelation::Notify() +{ + + + fAODIn = dynamic_cast(InputEvent()); + fAODOut = AODEvent(); + if(fNonStdFile.Length()!=0){ + AliAODHandler *aodH = dynamic_cast(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()); + fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0); + if(fAODExtension){ + if(fDebug>1)Printf("AODExtension found for %s ",fNonStdFile.Data()); + } + } + + TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree(); + fxsec=0; + ftrial=1; + + if(tree){ + TFile *curfile = tree->GetCurrentFile(); + if(!curfile){ + Error("Notify","No current file"); + return kFALSE; + } + if(IsMC){ + AliPWG4HighPtQAMC::PythiaInfoFromFile(curfile->GetName(),fxsec,ftrial); + fH1Xsec ->Fill(0.,fxsec); + fH1Trials->Fill(0.,ftrial); + } + + } + + printf("Reading File %s ",fInputHandler->GetTree()->GetCurrentFile()->GetName()); + return kTRUE; +} +void AliAnalysisTaskJetHadronCorrelation::FinishTaskOutput() +{ +} + + + +//________________________________________________________________________ +void AliAnalysisTaskJetHadronCorrelation::UserExec(Option_t *) +{ + + + // Main loop (called each event) + // Execute analysis for current event + + AliAODEvent *fAOD; + TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if( handler && handler->InheritsFrom("AliAODInputHandler") ) { + fAOD = ((AliAODInputHandler*)handler)->GetEvent(); + if(fUseAODInput) fAODIn = fAOD; + if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__); + } + else { + handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); + if( handler && handler->InheritsFrom("AliAODHandler") ) { + fAOD = ((AliAODHandler*)handler)->GetAOD(); + fAODIn = fAOD; + if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__); + } + } + + if(!fAODIn && !fUseAODInput){ // case we have AOD in input & output and want jets from output + TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); + if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) { + fAODIn = ((AliAODHandler*)outHandler)->GetAOD(); + if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__); + } + } + if (!fAODIn) { + Printf("ERROR %s : fAODIn not available",(char*)__FILE__); + return; + } + + AliInputEventHandler* inputHandler = (AliInputEventHandler*) + ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); + if(!(inputHandler->IsEventSelected() & AliVEvent::kMB)){ + if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... "); + return; + } + fH1Events->Fill(0); + + AliAODHeader* aliH = dynamic_cast (fAODIn->GetHeader()); + if(!aliH){ + Printf("ERROR: AliAODHeader not available"); + return; + } + double Mult = aliH->GetRefMultiplicity(); + + // start jet analysis -------------------------Init. + Float_t pi=TMath::Pi(); + + Double_t Jet_pt [20][5000]; + Double_t Jet_phi [20][5000]; + Double_t Jet_eta [20][5000]; + Double_t Jet_area [20][5000]; + Double_t subJet_pt [20][5000]; + Double_t subJet_eta[20][5000]; + Double_t Track_n ; + Double_t Track_pt [5000]; + Double_t Track_eta[5000]; + Double_t Track_phi[5000]; + Double_t MCTrack_n ; + Double_t MCTrack_pt [5000]; + Double_t MCTrack_eta[5000]; + Double_t MCTrack_phi[5000]; + + Track_n=0;MCTrack_n=0; + for(int i=0;i<20;i++){ + for(int j=0;j<1000;j++){ + Jet_pt[i][j]=0.; + Jet_phi[i][j]=999.; + Jet_eta[i][j]=999.; + Jet_area[i][j]=999.; + subJet_pt[i][j]=0.; + subJet_eta[i][j]=999.; + Track_pt [j]=0.; + Track_phi[j]=999.; + Track_eta[j]=999.; + MCTrack_pt [j]=0.; + MCTrack_phi[j]=999.; + MCTrack_eta[j]=999.; + } + } + + int nLJetAOD=999; double ptLJetAOD=0;double phiLJetAOD=999.;double etaLJetAOD=999.;double ptsLJetAOD=0;double phisLJetAOD=900.;double etasLJetAOD=900.; + int nLJetMC2=999; double ptLJetMC2=0;double phiLJetMC2=999.;double etaLJetMC2=999.;double ptsLJetMC2=0;double phisLJetMC2=900.;double etasLJetMC2=900.; + int nLJetMC =999; double ptLJetMC =0;double phiLJetMC =999.;double etaLJetMC =999.;double ptsLJetMC =0;double phisLJetMC =900.;double etasLJetMC =900.; + bool findLJetAOD=false; + bool findLJetMC2=false; + bool findDiJet=false,findDiJetMC=false; + int nLJet = 999; + int Mjet_tot =0; + int Njet_tot =0; + + double Aj=99.,AjMC=99.; + double Mlead=99.,MleadMC=99.; + int Munder=99.; + + ////--------------------------------------------------------------------Init. + + TString cAdd = ""; + TString Branchname_gen,Branchname_gen2,Branchname_rec; + if((JFAlg=="ANTIKT")||(JFAlg=="KT")){ + cAdd += Form("%02d_",(int)((Radius+0.01)*10.)); + cAdd += Form("B%d",(int)BackM); + cAdd += Form("_Filter%05d",Filtermask); + cAdd += Form("_Cut%05d",(int)(1000.*TrackPtcut)); + cAdd += Form("_Skip%02d",SkipCone); + Branchname_gen = Form("clustersAODMC_%s%s",JFAlg.Data(),cAdd.Data()); + Branchname_gen2 = Form("clustersAODMC2_%s%s",JFAlg.Data(),cAdd.Data()); + Branchname_rec = Form("clustersAOD_%s%s",JFAlg.Data(),cAdd.Data()); + } + else{ + cAdd += Form("%02d_",(int)((Radius+0.01)*10.)); + cAdd += Form("B%d",(int)BackM); + cAdd += Form("_Filter%05d",Filtermask); + cAdd += Form("_Cut%05d",(int)(1000.*TrackPtcut)); + Branchname_gen = Form("jetsAODMC_%s%s",JFAlg.Data(),cAdd.Data()); + Branchname_gen2 = Form("jetsAODMC2_%s%s",JFAlg.Data(),cAdd.Data()); + Branchname_rec = Form("jetsAOD_%s%s",JFAlg.Data(),cAdd.Data()); + } + + + + //count number of tracks@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + //Reconstructed Track + TClonesArray* tracks = dynamic_cast (fAODIn->GetTracks()); + if(!tracks){ + if (fDebug > 1) Printf("%s:%d could not get AODtracks", (char*)__FILE__,__LINE__); + return; + } + + Bool_t TrackEff[5000]; + for(int i=0;i<5000;i++){ + TrackEff[i]=false; + } + Int_t nt = fAODIn->GetNumberOfTracks(); + AliAODTrack* trackAOD=NULL; + for(int ntrack =0;ntrackAt(ntrack)); + Bool_t bgoodT=false; + if(Filtermask!=272){if(trackAOD->TestFilterMask(Filtermask))bgoodT=true;} + else {if(trackAOD->IsHybridGlobalConstrainedGlobal())bgoodT=true;} //for hybrid Track cuts + if(!bgoodT)continue; + if(TMath::Abs(trackAOD->Eta())<0.9){ + Track_n++; + fH1Track_pt ->Fill(trackAOD->Pt()*TrackEScale); + fH1Track_phi->Fill(trackAOD->Phi()); + fH1Track_eta->Fill(trackAOD->Eta()); + //cout<<"Scale "<Pt()<< " scaled pt "<< trackAOD->Pt()*TrackEScale <GetLabel()); + TClonesArray* mctracks = dynamic_cast (fAODIn->GetList()->FindObject(AliAODMCParticle::StdBranchName())); + if(!mctracks){ + if (fDebug > 1) Printf("%s:%d could not get AODMCtracks", (char*)__FILE__,__LINE__); + continue; + } + AliAODMCParticle *trackMCAOD = (AliAODMCParticle*) mctracks->At(MCID); + fH2TrackMCptResolution->Fill(trackMCAOD->Pt(),trackAOD->Pt()); + TrackEff[MCID]=true; + // -------------------------------------- + } + } + } + if(IsMC){ + //MC Track + TClonesArray* mctracks = dynamic_cast (fAODIn->GetList()->FindObject(AliAODMCParticle::StdBranchName())); + if(!mctracks){ + if (fDebug > 1) Printf("%s:%d could not get AODMCtracks", (char*)__FILE__,__LINE__); + return; + } + Int_t ntmc = mctracks->GetEntriesFast(); + AliAODMCParticle* trackMCAOD; + int lastprim=0; + for(int ntrack =0;ntrackAt(ntrack)); + if((trackMCAOD->IsPhysicalPrimary())==1)lastprim=ntrack; + } + for(int ntrack =0;ntrackAt(ntrack)); + if((trackMCAOD->GetPdgCode()>10)&&((trackMCAOD->GetMother())>1)&&(ntrack>lastprim)&&(trackMCAOD->Charge())){// for Decay particles + if(TMath::Abs(trackMCAOD->Eta())<0.9){ + fH1MCTrack_pt ->Fill(trackMCAOD->Pt()); + fH1MCTrack_phi->Fill(trackMCAOD->Phi()); + fH1MCTrack_eta->Fill(trackMCAOD->Eta()); + if(TrackEff[ntrack])fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),1); + else fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),0); + } + } + if((trackMCAOD->IsPhysicalPrimary())&&(trackMCAOD->Charge())){// for Physical particles + if(TMath::Abs(trackMCAOD->Eta())<0.9){ + MCTrack_n++; + fH1MCTrack_pt ->Fill(trackMCAOD->Pt()); + fH1MCTrack_phi->Fill(trackMCAOD->Phi()); + fH1MCTrack_eta->Fill(trackMCAOD->Eta()); + fH1MCPrimTrack_pt ->Fill(trackMCAOD->Pt()); + fH1MCPrimTrack_phi->Fill(trackMCAOD->Phi()); + fH1MCPrimTrack_eta->Fill(trackMCAOD->Eta()); + if(TrackEff[ntrack])fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),1); + else fH2TrackMCptEfficiency->Fill(trackMCAOD->Pt(),0); + } + } + } + } + //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ count number of tracks + + + + + for(int algorithm=0;algorithm<3;algorithm++){ + + if(algorithm==0)fJetBranch = Branchname_rec.Data(); + if(algorithm==1)fJetBranch = Branchname_gen2.Data(); + if(algorithm==2)fJetBranch = Branchname_gen.Data(); + + if((!IsMC&&(algorithm==1||algorithm==2)))continue; + + TClonesArray* jets = dynamic_cast (fAODIn->FindListObject(fJetBranch.Data())); + if(!jets){ + printf(" Tere are no Branch named %s \n",fJetBranch.Data()); + continue; + } + Int_t nj = jets->GetEntriesFast(); + if (fDebug) printf("There are %5d jets in the event \n", nj); + AliAODJet* jetsAOD; + //Find Leading Jet ------------------------------------------------------- + for(int njet =0;njetAt(njet)); + Jet_pt [algorithm][njet] = jetsAOD->Pt()*JetEScale; + Jet_phi [algorithm][njet] = jetsAOD->Phi(); + Jet_eta [algorithm][njet] = jetsAOD->Eta(); + Jet_area [algorithm][njet] = jetsAOD->EffectiveAreaCharged(); + + + TRefArray *reftracks = jetsAOD->GetRefTracks(); + if(algorithm==0){if(Jet_pt[algorithm][njet]>1.)Mjet_tot += reftracks->GetEntriesFast();Njet_tot++;} + double eta_cut_Jet=0.5; + if((TMath::Abs(Jet_eta[algorithm][njet])10.)){ + if(algorithm==0){ + fH1Jet_pt ->Fill(Jet_pt [algorithm][njet]); + fH1Jet_phi->Fill(Jet_phi[algorithm][njet]); + fH1Jet_eta->Fill(Jet_eta[algorithm][njet]); + if(Jet_pt[algorithm][njet]>ptLJetAOD){ + findLJetAOD=true; + nLJetAOD=njet;ptLJetAOD=Jet_pt[algorithm][njet];phiLJetAOD=Jet_phi[algorithm][njet];etaLJetAOD=Jet_eta[algorithm][njet]; + } + } + if(algorithm==1){ + fH1JetMC_pt->Fill(Jet_pt[algorithm][njet]); + if(Jet_pt[algorithm][njet]>ptLJetMC2){ + findLJetMC2=true; + nLJetMC2=njet;ptLJetMC2=Jet_pt[algorithm][njet];phiLJetMC2=Jet_phi[algorithm][njet];etaLJetMC2=Jet_eta[algorithm][njet]; + } + } + if(algorithm==2){ + if(Jet_pt[algorithm][njet]>ptLJetMC){ + nLJetMC=njet;ptLJetMC=Jet_pt[algorithm][njet];phiLJetMC=Jet_phi[algorithm][njet];etaLJetMC=Jet_eta[algorithm][njet]; + } + } + } + }//njet loop + if(algorithm==0){nLJet=nLJetAOD;fH1leadJet_pt ->Fill(Jet_pt[algorithm][nLJet]);} + if(algorithm==1){nLJet=nLJetMC2;fH1leadJetMC_pt->Fill(Jet_pt[algorithm][nLJet]);} + if(algorithm==2){nLJet=nLJetMC;} + if(findLJetAOD&&(algorithm==0)){ + jetsAOD = (AliAODJet*) (jets->At(nLJet)); + TRefArray *reftracks = jetsAOD->GetRefTracks(); + Mlead = reftracks->GetEntriesFast(); + } + if(findLJetMC2&&(algorithm==1)){ + jetsAOD = (AliAODJet*) (jets->At(nLJetMC2)); + TRefArray *reftracks = jetsAOD->GetRefTracks(); + MleadMC = reftracks->GetEntriesFast(); + } + //----------------------------------------------------------- Leading Jet + if(nj<2)continue; + //Find Sub leading Jet ================================================== + for(int njet=0;njetAt(njet); + subJet_pt [algorithm][njet] = jetsAOD->Pt()*JetEScale; + subJet_eta[algorithm][njet] = jetsAOD->Eta(); + double eta_cut_Jet=0.5; + if((TMath::Abs(subJet_eta[algorithm][njet])10.)){ + if(subJet_pt[algorithm][njet]>ptsLJetAOD&&algorithm==0){ + ptsLJetAOD=Jet_pt[algorithm][njet];phisLJetAOD=Jet_phi[algorithm][njet];etasLJetAOD=Jet_eta[algorithm][njet]; + } + if(subJet_pt[algorithm][njet]>ptsLJetMC2 &&algorithm==1){ + ptsLJetMC2=Jet_pt[algorithm][njet];phisLJetMC2=Jet_phi[algorithm][njet];etasLJetMC2=Jet_eta[algorithm][njet]; + } + if(subJet_pt[algorithm][njet]>ptsLJetMC &&algorithm==2){ + ptsLJetMC =Jet_pt[algorithm][njet];phisLJetMC =Jet_phi[algorithm][njet];etasLJetMC =Jet_eta[algorithm][njet]; + } + } + } + //====================================================== Sub leading Jet + + double Leading_pt=0.;double Leading_phi=999.;double Leading_eta=999.;double sLeading_pt=0.;double sLeading_phi=999.;double sLeading_eta=999.; + if(algorithm==0){Leading_pt=ptLJetAOD;Leading_phi=phiLJetAOD;Leading_eta=etaLJetAOD;sLeading_pt=ptsLJetAOD;sLeading_phi=phisLJetAOD;sLeading_eta=etasLJetAOD;} + if(algorithm==1){Leading_pt=ptLJetMC2;Leading_phi=phiLJetMC2;Leading_eta=etaLJetMC2;sLeading_pt=ptsLJetMC2;sLeading_phi=phisLJetMC2;sLeading_eta=etasLJetMC2;} + if(algorithm==2){Leading_pt=ptLJetMC ;Leading_phi=phiLJetMC ;Leading_eta=etaLJetMC ;sLeading_pt=ptsLJetMC ;sLeading_phi=phisLJetMC ;sLeading_eta=etasLJetMC ;} + + ////Di-Jet event trigger +++++++++++++++++++++++++++++++++++++++++++++++ + double DPhi = DeltaPhi(Leading_phi,sLeading_phi); + double DEta = Leading_eta-sLeading_eta; + if(algorithm==0){ + fH2JetsJet_dphi->Fill(Leading_pt,DPhi); + fH2JetsJet_deta->Fill(Leading_pt,DEta); + } + if(algorithm==1){ + fH2JetsJetMC_dphi->Fill(Leading_pt,DPhi); + fH2JetsJetMC_deta->Fill(Leading_pt,DEta); + } + if((TMath::Cos(DPhi)<-0.5)&&(Leading_pt>10.)&&(sLeading_pt>10.)){ + if(algorithm==0)Aj = (Leading_pt-sLeading_pt)/(Leading_pt+sLeading_pt); + if(algorithm==1)AjMC = (Leading_pt-sLeading_pt)/(Leading_pt+sLeading_pt); + if(algorithm==0){ + fH1subJet_pt_dijet ->Fill(sLeading_pt); + fH1leadJet_pt_dijet->Fill(Leading_pt); + fH2JetsJet_Aj ->Fill(Leading_pt,Aj); + fH2JetsJet_pt ->Fill(Leading_pt,sLeading_pt); + fH2Mult_Aj ->Fill(Mult,Aj); + fH2Mlead_Aj ->Fill(Mlead,Aj); + for(int eb=0;eb<5;eb++){ + if(TMath::Abs(Leading_pt -10.-20.*(eb))<10.){ + fH1Aj[eb] ->Fill(Aj); + } + } + } + if(algorithm==1){ + fH1leadJetMC_pt_dijet->Fill(Leading_pt); + fH1subJetMC_pt_dijet ->Fill(sLeading_pt); + fH2JetsJetMC_Aj ->Fill(Leading_pt,AjMC); + fH2JetsJetMC_pt ->Fill(Leading_pt,sLeading_pt); + findDiJetMC=true; + } + findDiJet=true; + + } + ////+++++++++++++++++++++++++++++++++++++++++++++++ Di-Jet event trigger + + if(algorithm!=0)continue;// for only data & reconstructed Jets + + + //Jet-Hadron Correlation############################################### + if((findDiJet)&&(Leading_pt>10.)&&(sLeading_pt>10.)){ + double eta_cut_Jet=0.5; + if(TMath::Abs(Leading_eta)Fill(1); + if(eb==1){ + if((0Fill(1);} + else if((7<=Mlead)&&(Mlead<10)) {fH1ndiJ_2040Mlead[1]->Fill(1);} + else {fH1ndiJ_2040Mlead[2]->Fill(1);} + if((0Fill(1);} + else if((0.19<=Aj)&&(Aj<0.38)) {fH1ndiJ_2040Aj [1]->Fill(1);} + else {fH1ndiJ_2040Aj [2]->Fill(1);} + } + fH1Mlead[eb]->Fill(Mlead); + for(int ntrack =0;ntrackGetTrack(ntrack)); + Bool_t bgoodT=false; + if(Filtermask!=272){if(trackAOD->TestFilterMask(Filtermask))bgoodT=true;} + else{ if(trackAOD->IsHybridGlobalConstrainedGlobal())bgoodT=true;} //for hybrid Track cuts + if(!bgoodT)continue; + Track_pt [ntrack] = (trackAOD->Pt()*TrackEScale); + Track_phi [ntrack] = trackAOD->Phi(); + Track_eta [ntrack] = trackAOD->Eta(); + + //cout<<"Scale "<Pt()<< " scaled pt "<< trackAOD->Pt()*TrackEScale <0.15))continue;} + if(teb==1){if(!((Track_pt[ntrack]<1.5)&&(Track_pt[ntrack]>0.15)))continue;} + if(teb==2){if(!((Track_pt[ntrack]<3.0)&&(Track_pt[ntrack]>1.5)))continue;} + if(teb==3){if(!((Track_pt[ntrack]<4.5)&&(Track_pt[ntrack]>3.0)))continue;} + if(teb==4){if(!( Track_pt[ntrack]>4.5))continue;} + fH1JetHadron_dphi_ediv [eb][teb]->Fill(DelPhi); + fH1JetHadron_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,Track_pt[ntrack]); + fH1JetHadron_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,Track_pt[ntrack]/Leading_pt); + if(eb==1){ + if((0Fill(DelPhi,Track_pt[ntrack]);} + else if((7<=Mlead)&&(Mlead<10)){fH1JetHadron_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,Track_pt[ntrack]);} + else {fH1JetHadron_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,Track_pt[ntrack]);} + if((0Fill(DelPhi,Track_pt[ntrack]);} + else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadron_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,Track_pt[ntrack]);} + else {fH1JetHadron_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,Track_pt[ntrack]);} + } + } + } + }//Track Loop + if(IsMC){ + //MC Track + TClonesArray* mctracks = dynamic_cast (fAODIn->GetList()->FindObject(AliAODMCParticle::StdBranchName())); + if(!mctracks){ + if (fDebug > 1) Printf("%s:%d could not get AODMCtracks", (char*)__FILE__,__LINE__); + continue; + } + Int_t ntmc = mctracks->GetEntriesFast(); + AliAODMCParticle* trackMCAOD; + int lastprim=0; + for(int ntrack =0;ntrackAt(ntrack)); + if((trackMCAOD->IsPhysicalPrimary())==1)lastprim=ntrack; + } + for(int ntrack =0;ntrackAt(ntrack)); + if((trackMCAOD->GetPdgCode()>10)&&((trackMCAOD->GetMother())>1)&&(ntrack>lastprim)&&(trackMCAOD->Charge())){// for Decay particles + MCTrack_pt [ntrack] = trackMCAOD->Pt(); + MCTrack_phi [ntrack] = trackMCAOD->Phi(); + MCTrack_eta [ntrack] = trackMCAOD->Eta(); + double DelPhi = DeltaPhi(Leading_phi,MCTrack_phi[ntrack]); + if(TMath::Abs(MCTrack_eta[ntrack])<0.9){ + for(int teb=0;teb<5;teb++){ + if(teb==0){if(!( MCTrack_pt[ntrack]>0.15))continue;} + if(teb==1){if(!((MCTrack_pt[ntrack]<1.5)&&(MCTrack_pt[ntrack]>0.15)))continue;} + if(teb==2){if(!((MCTrack_pt[ntrack]<3.0)&&(MCTrack_pt[ntrack]>1.5)))continue;} + if(teb==3){if(!((MCTrack_pt[ntrack]<4.5)&&(MCTrack_pt[ntrack]>3.0)))continue;} + if(teb==4){if(!( MCTrack_pt[ntrack]>4.5))continue;} + fH1JetHadronMC_dphi_ediv [eb][teb]->Fill(DelPhi); + fH1JetHadronMC_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]); + fH1JetHadronMC_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]/Leading_pt); + if(eb==1){ + if((0Fill(DelPhi,MCTrack_pt[ntrack]);} + else if((7<=Mlead)&&(Mlead<10)){fH1JetHadronMC_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + else {fH1JetHadronMC_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + if((0Fill(DelPhi,MCTrack_pt[ntrack]);} + else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadronMC_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + else {fH1JetHadronMC_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + } + } + } + } + if((trackMCAOD->IsPhysicalPrimary())&&(trackMCAOD->Charge())){// for Physical particles + MCTrack_pt [ntrack] = trackMCAOD->Pt(); + MCTrack_phi [ntrack] = trackMCAOD->Phi(); + MCTrack_eta [ntrack] = trackMCAOD->Eta(); + double DelPhi = DeltaPhi(Leading_phi,MCTrack_phi[ntrack]); + if(TMath::Abs(MCTrack_eta[ntrack])<0.9){ + for(int teb=0;teb<5;teb++){ + if(teb==0){if(!( MCTrack_pt[ntrack]>0.15))continue;} + if(teb==1){if(!((MCTrack_pt[ntrack]<1.5)&&(MCTrack_pt[ntrack]>0.15)))continue;} + if(teb==2){if(!((MCTrack_pt[ntrack]<3.0)&&(MCTrack_pt[ntrack]>1.5)))continue;} + if(teb==3){if(!((MCTrack_pt[ntrack]<4.5)&&(MCTrack_pt[ntrack]>3.0)))continue;} + if(teb==4){if(!( MCTrack_pt[ntrack]>4.5))continue;} + fH1JetHadronMC_dphi_ediv [eb][teb]->Fill(DelPhi); + fH1JetHadronMC_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]); + fH1JetHadronMC_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]/Leading_pt); + fH1JetHadronMCPrim_dphi_ediv [eb][teb]->Fill(DelPhi); + fH1JetHadronMCPrim_dphi_tptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]); + fH1JetHadronMCPrim_dphi_tJptweight_ediv [eb][teb]->Fill(DelPhi,MCTrack_pt[ntrack]/Leading_pt); + if(eb==1){ + if((0Fill(DelPhi,MCTrack_pt[ntrack]);} + else if((7<=Mlead)&&(Mlead<10)){fH1JetHadronMC_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + else {fH1JetHadronMC_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + if((0Fill(DelPhi,MCTrack_pt[ntrack]);} + else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadronMC_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + else {fH1JetHadronMC_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + + if((0Fill(DelPhi,MCTrack_pt[ntrack]);} + else if((7<=Mlead)&&(Mlead<10)){fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + else {fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + if((0Fill(DelPhi,MCTrack_pt[ntrack]);} + else if((0.19<=Aj)&&(Aj<0.38)) {fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [1][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + else {fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [2][teb]->Fill(DelPhi,MCTrack_pt[ntrack]);} + } + } + } + } + } + } + } + }// Momentum Loop Jet + fH2Jet_pt_Munder ->Fill(Leading_pt,(double)Munder/(1.8*pi/2.)*Jet_area[0][nLJet]); + fH2Jet_pt_Mlead ->Fill(Leading_pt,Mlead); + }//eta cut + }// Di-Jet + //############################################### Jet-Hadron Correlation + }// algorithm LOOP + if(IsMC){ + for(int eb=0;eb<5;eb++){ + double DPhi,DEta; + if(TMath::Abs(ptLJetAOD -10.-20.*(eb))<10.){ + DPhi = DeltaPhi(phiLJetMC,phiLJetAOD); + DEta = etaLJetMC-etaLJetAOD; + fH1leadJetMC_dphiResolution[eb]->Fill(DPhi); + if(sqrt(pow(DPhi,2)+pow(DEta,2))<0.4)fH1leadJetMC_Efficiency[eb]->Fill(1); + else fH1leadJetMC_Efficiency[eb]->Fill(0); + DPhi = DeltaPhi(phisLJetMC,phisLJetAOD); + DEta = etasLJetMC-etasLJetAOD; + fH1subJetMC_dphiResolution[eb]->Fill(DPhi); + if(sqrt(pow(DPhi,2)+pow(DEta,2))<0.4)fH1subJetMC_Efficiency[eb]->Fill(1); + else fH1subJetMC_Efficiency[eb]->Fill(0); + DPhi = DeltaPhi(phiLJetMC2,phiLJetAOD); + DEta = etaLJetMC2-etaLJetAOD; + + if(sqrt(pow(DPhi,2)+pow(DEta,2))<0.4)fH2leadJetMCptResolution->Fill(ptLJetMC2,ptLJetAOD); + if(findDiJetMC)fH2AjCorrelation_MCRec ->Fill(AjMC,Aj); + if(findDiJetMC)fH2MleadCorrelation_MCRec->Fill(MleadMC,Mlead); + } + } + fH2Mult_Mtrack->Fill(Mult,Track_n); + fH2Mult_Mjet ->Fill(Mult,Mjet_tot); + fH2Mult_Njet ->Fill(Mult,Njet_tot); + if(findLJetAOD)fH2Mult_Mlead ->Fill(Mult,Mlead); + } + else{ + fH2Mult_Mtrack->Fill(Mult,Track_n); + fH2Mult_Mjet ->Fill(Mult,Mjet_tot); + fH2Mult_Njet ->Fill(Mult,Njet_tot); + if(findLJetAOD)fH2Mult_Mlead ->Fill(Mult,Mlead); + } + + PostData(1, fHistList); + return; +} + +//________________________________________________________________________ +void AliAnalysisTaskJetHadronCorrelation::Terminate(Option_t *){ + // Terminate analysis + if (fDebug) printf("AnalysisTaskPt: Terminate() \n"); +} + +Double_t AliAnalysisTaskJetHadronCorrelation::DeltaPhi(Double_t phi1,Double_t phi2){ + Float_t pi=TMath::Pi(); + Double_t dphi = phi1-phi2; + if (dphi<(-1./2*pi))dphi = dphi +2*pi; + else if(dphi>( 3./2*pi))dphi = dphi -2*pi; + return dphi; +} diff --git a/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.h b/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.h index 79e14b90d93..0211348637d 100755 --- a/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.h +++ b/PWGJE/UserTasks/AliAnalysisTaskJetHadronCorrelation.h @@ -1,177 +1,177 @@ -#ifndef AliAnalysisTaskJetHadronCorrelation_cxx -#define AliAnalysisTaskJetHadronCorrelation_cxx - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -class AliJetHeader; -class AliESDEvent; -class AliAODEvent; -class AliAODJet; -class AliGenPythiaEventHeader; -class AliCFManager; - -class TList; -class TChain; -class TH2F; -class TH1F; -class TH3F; -class TProfile; - - -#include "AliAnalysisTaskSE.h" -#include "THnSparse.h" // cannot forward declare ThnSparseF -#include -#include -#include - -class AliAnalysisTaskJetHadronCorrelation : public AliAnalysisTaskSE -{ - public: - AliAnalysisTaskJetHadronCorrelation(); - AliAnalysisTaskJetHadronCorrelation(const char *name); - virtual ~AliAnalysisTaskJetHadronCorrelation() {;} - - // Implementation of interface methods - virtual void UserCreateOutputObjects(); - virtual void Init(); - virtual Bool_t Notify(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - virtual void SetDebug(Int_t debug = 0) {fDebug = debug;} - virtual void SetAlgorithm(TString jf="ANTIKT"){JFAlg=jf;} - virtual void SetRadius(Float_t radius=0.4) {Radius=radius;} - virtual void SetFilterMask(UInt_t filter=256) {Filtermask=filter;} - virtual void SetBackSubMode(Int_t backM=0) {BackM=backM;} - virtual void SetTrackPtCut(Float_t tPtcut=0) {TrackPtcut=tPtcut;} - virtual void SetSkipCone(Int_t skipCone=0) {SkipCone=skipCone;} - virtual void SetMC(Bool_t ismc=true) {IsMC=ismc;} - virtual void SetJetEScale (Float_t JEScale=1.){JetEScale=JEScale;} - virtual void SetTrackEScale(Float_t TEScale=1.){TrackEScale=TEScale;} - virtual void FinishTaskOutput(); - - //enum {kNPTBINS=10}; - - // 0 all jets - // 1 all jet in eta window - // 2 all jets with partner - // 3 all jets in eta window with partner - // 4 all jets with partner in eta window - //enum {kStep0 = 0, kStep1, kStep2, kStep3, kStep4,kMaxStep}; - - - - private: - AliAnalysisTaskJetHadronCorrelation(const AliAnalysisTaskJetHadronCorrelation &det); // not implemented - AliAnalysisTaskJetHadronCorrelation& operator=(const AliAnalysisTaskJetHadronCorrelation &det); // not implemented - Double_t DeltaPhi(Double_t phi1,Double_t phi2); - - Bool_t fUseAODInput; // read jets from input AOD - TString fJetBranch; // jet branch to read - TString fNonStdFile; - - AliAODEvent *fAODIn; // AOD event - AliAODEvent *fAODOut; // AOD event - AliAODExtension *fAODExtension; - TString JFAlg; - Float_t Radius; - UInt_t Filtermask; - Int_t BackM; - Float_t TrackPtcut; - Int_t SkipCone; - Bool_t IsMC; - Float_t JetEScale; - Float_t TrackEScale; - - - Float_t fxsec; - Float_t ftrial; - - TList *fHistList; // Output list - Int_t fIfiles;//!count no. of files - - - TH1F *fH1Events; - TProfile *fH1Xsec; - TH1F *fH1Trials; - - TH1F *fH1Track_pt ; - TH1F *fH1Track_phi ; - TH1F *fH1Track_eta ; - TH1F *fH1MCTrack_pt ; - TH1F *fH1MCTrack_phi ; - TH1F *fH1MCTrack_eta ; - TH1F *fH1MCPrimTrack_pt ; - TH1F *fH1MCPrimTrack_phi ; - TH1F *fH1MCPrimTrack_eta ; - TH1F *fH1Jet_pt ; - TH1F *fH1Jet_phi ; - TH1F *fH1Jet_eta ; - TH1F *fH1leadJet_pt ; - TH1F *fH1leadJet_pt_dijet ; - TH1F *fH1subJet_pt_dijet ; - TH1F *fH1JetMC_pt ; - TH1F *fH1leadJetMC_pt ; - TH1F *fH1leadJetMC_pt_dijet; - TH1F *fH1subJetMC_pt_dijet ; - TH2F *fH2JetsJet_dphi ; - TH2F *fH2JetsJet_deta ; - TH2F *fH2JetsJet_Aj ; - TH2F *fH2JetsJet_pt ; - TH2F *fH2JetsJetMC_dphi ; - TH2F *fH2JetsJetMC_deta ; - TH2F *fH2JetsJetMC_Aj ; - TH2F *fH2JetsJetMC_pt ; - - TH2F *fH2Mult_Mtrack ; - TH2F *fH2Mult_Mlead ; - TH2F *fH2Mult_Mjet ; - TH2F *fH2Mult_Njet ; - TH2F *fH2Mult_Aj ; - TH2F *fH2Mlead_Aj ; - TH2F *fH2Jet_pt_Mlead ; - TH2F *fH2Jet_pt_Munder ; - - TH2F *fH2leadJetMCptResolution ; - TH2F *fH2TrackMCptResolution ; - TH2F *fH2TrackMCptEfficiency ; - TH2F *fH2AjCorrelation_MCRec ; - TH2F *fH2MleadCorrelation_MCRec; - - TH1F *fH1ndiJ_ediv [5]; - TH1F *fH1Aj [5]; - TH1F *fH1Mlead [5]; - - TH1F *fH1leadJetMC_dphiResolution [5]; - TH1F *fH1subJetMC_dphiResolution [5]; - TH1F *fH1leadJetMC_Efficiency [5]; - TH1F *fH1subJetMC_Efficiency [5]; - - TH1F *fH1JetHadron_dphi_ediv [5][5]; - TH1F *fH1JetHadron_dphi_tptweight_ediv [5][5]; - TH1F *fH1JetHadron_dphi_tJptweight_ediv [5][5]; - TH1F *fH1JetHadronMC_dphi_ediv [5][5]; - TH1F *fH1JetHadronMC_dphi_tptweight_ediv [5][5]; - TH1F *fH1JetHadronMC_dphi_tJptweight_ediv[5][5]; - TH1F *fH1JetHadronMCPrim_dphi_ediv [5][5]; - TH1F *fH1JetHadronMCPrim_dphi_tptweight_ediv [5][5]; - TH1F *fH1JetHadronMCPrim_dphi_tJptweight_ediv[5][5]; - //TH1F *fH1JetHadronMCIdeal_dphi_ediv [5][5]; - //TH1F *fH1JetHadronMCIdeal_dphi_tptweight_ediv [5][5]; - //TH1F *fH1JetHadronMCIdeal_dphi_tJptweight_ediv [5][5]; - - TH1F *fH1ndiJ_2040Mlead [3]; - TH1F *fH1ndiJ_2040Aj [3]; - TH1F *fH1JetHadron_dphi_tptweight2040_Mleaddep [3][5]; - TH1F *fH1JetHadron_dphi_tptweight2040_Ajdep [3][5]; - TH1F *fH1JetHadronMC_dphi_tptweight2040_Mleaddep[3][5]; - TH1F *fH1JetHadronMC_dphi_tptweight2040_Ajdep [3][5]; - TH1F *fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[3][5]; - TH1F *fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [3][5]; - //TH1F *fH1JetHadronMCIdeal_dphi_tptweight2040_Mleaddep[3][5]; - //TH1F *fH1JetHadronMCIdeal_dphi_tptweight2040_Ajdep [3][5]; - - ClassDef(AliAnalysisTaskJetHadronCorrelation, 17); // Analysis task for JetHadronCorrelation -}; - -#endif +#ifndef AliAnalysisTaskJetHadronCorrelation_cxx +#define AliAnalysisTaskJetHadronCorrelation_cxx + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +class AliJetHeader; +class AliESDEvent; +class AliAODEvent; +class AliAODJet; +class AliGenPythiaEventHeader; +class AliCFManager; + +class TList; +class TChain; +class TH2F; +class TH1F; +class TH3F; +class TProfile; + + +#include "AliAnalysisTaskSE.h" +#include "THnSparse.h" // cannot forward declare ThnSparseF +#include +#include +#include + +class AliAnalysisTaskJetHadronCorrelation : public AliAnalysisTaskSE +{ + public: + AliAnalysisTaskJetHadronCorrelation(); + AliAnalysisTaskJetHadronCorrelation(const char *name); + virtual ~AliAnalysisTaskJetHadronCorrelation() {;} + + // Implementation of interface methods + virtual void UserCreateOutputObjects(); + virtual void Init(); + virtual Bool_t Notify(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + virtual void SetDebug(Int_t debug = 0) {fDebug = debug;} + virtual void SetAlgorithm(TString jf="ANTIKT"){JFAlg=jf;} + virtual void SetRadius(Float_t radius=0.4) {Radius=radius;} + virtual void SetFilterMask(UInt_t filter=256) {Filtermask=filter;} + virtual void SetBackSubMode(Int_t backM=0) {BackM=backM;} + virtual void SetTrackPtCut(Float_t tPtcut=0) {TrackPtcut=tPtcut;} + virtual void SetSkipCone(Int_t skipCone=0) {SkipCone=skipCone;} + virtual void SetMC(Bool_t ismc=true) {IsMC=ismc;} + virtual void SetJetEScale (Float_t JEScale=1.){JetEScale=JEScale;} + virtual void SetTrackEScale(Float_t TEScale=1.){TrackEScale=TEScale;} + virtual void FinishTaskOutput(); + + //enum {kNPTBINS=10}; + + // 0 all jets + // 1 all jet in eta window + // 2 all jets with partner + // 3 all jets in eta window with partner + // 4 all jets with partner in eta window + //enum {kStep0 = 0, kStep1, kStep2, kStep3, kStep4,kMaxStep}; + + + + private: + AliAnalysisTaskJetHadronCorrelation(const AliAnalysisTaskJetHadronCorrelation &det); // not implemented + AliAnalysisTaskJetHadronCorrelation& operator=(const AliAnalysisTaskJetHadronCorrelation &det); // not implemented + Double_t DeltaPhi(Double_t phi1,Double_t phi2); + + Bool_t fUseAODInput; // read jets from input AOD + TString fJetBranch; // jet branch to read + TString fNonStdFile; + + AliAODEvent *fAODIn; // AOD event + AliAODEvent *fAODOut; // AOD event + AliAODExtension *fAODExtension; + TString JFAlg; + Float_t Radius; + UInt_t Filtermask; + Int_t BackM; + Float_t TrackPtcut; + Int_t SkipCone; + Bool_t IsMC; + Float_t JetEScale; + Float_t TrackEScale; + + + Float_t fxsec; + Float_t ftrial; + + TList *fHistList; // Output list + Int_t fIfiles;//!count no. of files + + + TH1F *fH1Events; + TProfile *fH1Xsec; + TH1F *fH1Trials; + + TH1F *fH1Track_pt ; + TH1F *fH1Track_phi ; + TH1F *fH1Track_eta ; + TH1F *fH1MCTrack_pt ; + TH1F *fH1MCTrack_phi ; + TH1F *fH1MCTrack_eta ; + TH1F *fH1MCPrimTrack_pt ; + TH1F *fH1MCPrimTrack_phi ; + TH1F *fH1MCPrimTrack_eta ; + TH1F *fH1Jet_pt ; + TH1F *fH1Jet_phi ; + TH1F *fH1Jet_eta ; + TH1F *fH1leadJet_pt ; + TH1F *fH1leadJet_pt_dijet ; + TH1F *fH1subJet_pt_dijet ; + TH1F *fH1JetMC_pt ; + TH1F *fH1leadJetMC_pt ; + TH1F *fH1leadJetMC_pt_dijet; + TH1F *fH1subJetMC_pt_dijet ; + TH2F *fH2JetsJet_dphi ; + TH2F *fH2JetsJet_deta ; + TH2F *fH2JetsJet_Aj ; + TH2F *fH2JetsJet_pt ; + TH2F *fH2JetsJetMC_dphi ; + TH2F *fH2JetsJetMC_deta ; + TH2F *fH2JetsJetMC_Aj ; + TH2F *fH2JetsJetMC_pt ; + + TH2F *fH2Mult_Mtrack ; + TH2F *fH2Mult_Mlead ; + TH2F *fH2Mult_Mjet ; + TH2F *fH2Mult_Njet ; + TH2F *fH2Mult_Aj ; + TH2F *fH2Mlead_Aj ; + TH2F *fH2Jet_pt_Mlead ; + TH2F *fH2Jet_pt_Munder ; + + TH2F *fH2leadJetMCptResolution ; + TH2F *fH2TrackMCptResolution ; + TH2F *fH2TrackMCptEfficiency ; + TH2F *fH2AjCorrelation_MCRec ; + TH2F *fH2MleadCorrelation_MCRec; + + TH1F *fH1ndiJ_ediv [5]; + TH1F *fH1Aj [5]; + TH1F *fH1Mlead [5]; + + TH1F *fH1leadJetMC_dphiResolution [5]; + TH1F *fH1subJetMC_dphiResolution [5]; + TH1F *fH1leadJetMC_Efficiency [5]; + TH1F *fH1subJetMC_Efficiency [5]; + + TH1F *fH1JetHadron_dphi_ediv [5][5]; + TH1F *fH1JetHadron_dphi_tptweight_ediv [5][5]; + TH1F *fH1JetHadron_dphi_tJptweight_ediv [5][5]; + TH1F *fH1JetHadronMC_dphi_ediv [5][5]; + TH1F *fH1JetHadronMC_dphi_tptweight_ediv [5][5]; + TH1F *fH1JetHadronMC_dphi_tJptweight_ediv[5][5]; + TH1F *fH1JetHadronMCPrim_dphi_ediv [5][5]; + TH1F *fH1JetHadronMCPrim_dphi_tptweight_ediv [5][5]; + TH1F *fH1JetHadronMCPrim_dphi_tJptweight_ediv[5][5]; + //TH1F *fH1JetHadronMCIdeal_dphi_ediv [5][5]; + //TH1F *fH1JetHadronMCIdeal_dphi_tptweight_ediv [5][5]; + //TH1F *fH1JetHadronMCIdeal_dphi_tJptweight_ediv [5][5]; + + TH1F *fH1ndiJ_2040Mlead [3]; + TH1F *fH1ndiJ_2040Aj [3]; + TH1F *fH1JetHadron_dphi_tptweight2040_Mleaddep [3][5]; + TH1F *fH1JetHadron_dphi_tptweight2040_Ajdep [3][5]; + TH1F *fH1JetHadronMC_dphi_tptweight2040_Mleaddep[3][5]; + TH1F *fH1JetHadronMC_dphi_tptweight2040_Ajdep [3][5]; + TH1F *fH1JetHadronMCPrim_dphi_tptweight2040_Mleaddep[3][5]; + TH1F *fH1JetHadronMCPrim_dphi_tptweight2040_Ajdep [3][5]; + //TH1F *fH1JetHadronMCIdeal_dphi_tptweight2040_Mleaddep[3][5]; + //TH1F *fH1JetHadronMCIdeal_dphi_tptweight2040_Ajdep [3][5]; + + ClassDef(AliAnalysisTaskJetHadronCorrelation, 17); // Analysis task for JetHadronCorrelation +}; + +#endif diff --git a/PWGJE/macros/AddTaskCheckSingleTrackJetRejection.C b/PWGJE/macros/AddTaskCheckSingleTrackJetRejection.C index ba81539c90d..7dccff0bc48 100644 --- a/PWGJE/macros/AddTaskCheckSingleTrackJetRejection.C +++ b/PWGJE/macros/AddTaskCheckSingleTrackJetRejection.C @@ -1,56 +1,56 @@ -AliAnalysisTaskCheckSingleTrackJetRejection *AddTaskCheckSingleTrackJetRejection(char *jf="ANTIKT",Float_t radius=0.4,UInt_t filter=256,Int_t backM=0,Float_t tPtcut=0.15,Int_t skipCone=0,Bool_t IsMC=true) -{ - - // Creates a JetQA task, configures it and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskCheckSingleTrackJetRejection", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskCheckSingleTrackJetRejection", "This task requires an input event handler"); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - - AliAnalysisTaskCheckSingleTrackJetRejection *jetqamcana = new AliAnalysisTaskCheckSingleTrackJetRejection("TaskCheckSingleTrackJetRejection"); - jetqamcana->SetDebugLevel(0); - jetqamcana->SetAlgorithm(jf); - jetqamcana->SetRadius(radius); - jetqamcana->SetFilterMask(filter); - jetqamcana->SetBackSubMode(backM); - jetqamcana->SetTrackPtCut(tPtcut); - jetqamcana->SetSkipCone(skipCone); - jetqamcana->SetMC(IsMC); - mgr->AddTask(jetqamcana); - - TString cAdd = ""; - cAdd += Form("%02d_",(int)((radius+0.01)*10.)); - cAdd += Form("B%d",(int)backM); - cAdd += Form("_Filter%05d",filter); - cAdd += Form("_Cut%05d",(int)(1000.*tPtcut)); - cAdd += Form("_Skip%02d",skipCone); - TString Branch; - if(IsMC)Branch = Form("MC_clustersAOD_%s%s",jf,cAdd.Data()); - else Branch = Form("Data_clustersAOD_%s%s",jf,cAdd.Data()); - - AliAnalysisDataContainer *cout_jetsqamc = mgr->CreateContainer(Form("CheckSingleTrackRejection_%s%s",jf,cAdd.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_CheckSingleTrackJetRejection_%s",AliAnalysisManager::GetCommonFileName(),Branch.Data())); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - - mgr->ConnectInput (jetqamcana,0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(jetqamcana,0, mgr->GetCommonOutputContainer()); - mgr->ConnectOutput(jetqamcana,1, cout_jetsqamc); - - - return jetqamcana; -} +AliAnalysisTaskCheckSingleTrackJetRejection *AddTaskCheckSingleTrackJetRejection(char *jf="ANTIKT",Float_t radius=0.4,UInt_t filter=256,Int_t backM=0,Float_t tPtcut=0.15,Int_t skipCone=0,Bool_t IsMC=true) +{ + + // Creates a JetQA task, configures it and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskCheckSingleTrackJetRejection", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskCheckSingleTrackJetRejection", "This task requires an input event handler"); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + + AliAnalysisTaskCheckSingleTrackJetRejection *jetqamcana = new AliAnalysisTaskCheckSingleTrackJetRejection("TaskCheckSingleTrackJetRejection"); + jetqamcana->SetDebugLevel(0); + jetqamcana->SetAlgorithm(jf); + jetqamcana->SetRadius(radius); + jetqamcana->SetFilterMask(filter); + jetqamcana->SetBackSubMode(backM); + jetqamcana->SetTrackPtCut(tPtcut); + jetqamcana->SetSkipCone(skipCone); + jetqamcana->SetMC(IsMC); + mgr->AddTask(jetqamcana); + + TString cAdd = ""; + cAdd += Form("%02d_",(int)((radius+0.01)*10.)); + cAdd += Form("B%d",(int)backM); + cAdd += Form("_Filter%05d",filter); + cAdd += Form("_Cut%05d",(int)(1000.*tPtcut)); + cAdd += Form("_Skip%02d",skipCone); + TString Branch; + if(IsMC)Branch = Form("MC_clustersAOD_%s%s",jf,cAdd.Data()); + else Branch = Form("Data_clustersAOD_%s%s",jf,cAdd.Data()); + + AliAnalysisDataContainer *cout_jetsqamc = mgr->CreateContainer(Form("CheckSingleTrackRejection_%s%s",jf,cAdd.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_CheckSingleTrackJetRejection_%s",AliAnalysisManager::GetCommonFileName(),Branch.Data())); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + + mgr->ConnectInput (jetqamcana,0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(jetqamcana,0, mgr->GetCommonOutputContainer()); + mgr->ConnectOutput(jetqamcana,1, cout_jetsqamc); + + + return jetqamcana; +} diff --git a/PWGJE/macros/AddTaskDiJets.C b/PWGJE/macros/AddTaskDiJets.C index f721be00141..109a82931bd 100644 --- a/PWGJE/macros/AddTaskDiJets.C +++ b/PWGJE/macros/AddTaskDiJets.C @@ -1,44 +1,44 @@ -AliAnalysisTaskDiJets *AddTaskDiJets(Char_t *jb="jets") -{ -// Creates a dijet task, configures it and adds it to the analysis manager. - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskDiJets", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskDiJets", "This task requires an input event handler"); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - - AliAnalysisTaskDiJets *dijetana = new AliAnalysisTaskDiJets(Form("DiJetAnalysis_%s",jb)); - dijetana->SetDebugLevel(0); -// dijetana->SetFillAOD(kTRUE); - dijetana->SetJetBranch(jb); - mgr->AddTask(dijetana); - - TString jbOut(jb); - jbOut = jbOut(4,jbOut.Sizeof()); - jbOut.ToLower(); - - AliAnalysisDataContainer *cout_dijet = mgr->CreateContainer(Form("dijets_%s",jbOut.Data()), TList::Class(),AliAnalysisManager::kOutputContainer, - Form("%s:PWG4_DiJets_%s",AliAnalysisManager::GetCommonFileName(),jbOut.Data())); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - mgr->ConnectInput (dijetana, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (dijetana, 0, mgr->GetCommonOutputContainer()); - mgr->ConnectOutput (dijetana, 1, cout_dijet); - - return dijetana; -} +AliAnalysisTaskDiJets *AddTaskDiJets(Char_t *jb="jets") +{ +// Creates a dijet task, configures it and adds it to the analysis manager. + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskDiJets", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskDiJets", "This task requires an input event handler"); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + + AliAnalysisTaskDiJets *dijetana = new AliAnalysisTaskDiJets(Form("DiJetAnalysis_%s",jb)); + dijetana->SetDebugLevel(0); +// dijetana->SetFillAOD(kTRUE); + dijetana->SetJetBranch(jb); + mgr->AddTask(dijetana); + + TString jbOut(jb); + jbOut = jbOut(4,jbOut.Sizeof()); + jbOut.ToLower(); + + AliAnalysisDataContainer *cout_dijet = mgr->CreateContainer(Form("dijets_%s",jbOut.Data()), TList::Class(),AliAnalysisManager::kOutputContainer, + Form("%s:PWG4_DiJets_%s",AliAnalysisManager::GetCommonFileName(),jbOut.Data())); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + mgr->ConnectInput (dijetana, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (dijetana, 0, mgr->GetCommonOutputContainer()); + mgr->ConnectOutput (dijetana, 1, cout_dijet); + + return dijetana; +} diff --git a/PWGJE/macros/AddTaskJetHadronCorrelation.C b/PWGJE/macros/AddTaskJetHadronCorrelation.C index 1cc1d9bc5e0..745a03b68f3 100644 --- a/PWGJE/macros/AddTaskJetHadronCorrelation.C +++ b/PWGJE/macros/AddTaskJetHadronCorrelation.C @@ -1,60 +1,60 @@ -AliAnalysisTaskJetHadronCorrelation *AddTaskJetHadronCorrelation(Char_t *jf="ANTIKT",Float_t radius=0.4,UInt_t filter=256,Int_t backM=0,Float_t tPtcut=0.15,Int_t skipCone=0,Bool_t IsMC=true,Float_t JetEScale=1.,Float_t TrackEScale=1.) -{ - - // Creates a JetQA task, configures it and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskJetHadronCorrelation", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskJetHadronCorrelation", "This task requires an input event handler"); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - - AliAnalysisTaskJetHadronCorrelation *jethadron = new AliAnalysisTaskJetHadronCorrelation("TaskJetHadronCorrelation"); - jethadron->SetDebugLevel(3); - jethadron->SetAlgorithm(jf); - jethadron->SetRadius(radius); - jethadron->SetFilterMask(filter); - jethadron->SetBackSubMode(backM); - jethadron->SetTrackPtCut(tPtcut); - jethadron->SetSkipCone(skipCone); - jethadron->SetMC(IsMC); - jethadron->SetJetEScale(JetEScale); - jethadron->SetTrackEScale(TrackEScale); - mgr->AddTask(jethadron); - - TString cAdd = ""; - cAdd += Form("%02d_" ,(int)((radius+0.01)*10.)); - cAdd += Form("B%d" ,(int)backM); - cAdd += Form("_Filter%05d" ,filter); - cAdd += Form("_Cut%05d" ,(int)(1000.*tPtcut)); - cAdd += Form("_Skip%02d" ,skipCone); - cAdd += Form("_JetEScale%03d" ,(int)(JetEScale*100.)); - cAdd += Form("_TrackEScale%03d",(int)(TrackEScale*100.)); - TString Branch; - if(IsMC)Branch = Form("MC_clustersAOD_%s%s",jf,cAdd.Data()); - else Branch = Form("Data_clustersAOD_%s%s",jf,cAdd.Data()); - - AliAnalysisDataContainer *cout_JHC = mgr->CreateContainer(Form("JHC_%s%s",jf,cAdd.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_JHC_%s",AliAnalysisManager::GetCommonFileName(),Branch.Data())); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - - mgr->ConnectInput (jethadron,0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput(jethadron,0, mgr->GetCommonOutputContainer()); - mgr->ConnectOutput(jethadron,1, cout_JHC); - - - return jethadron; -} +AliAnalysisTaskJetHadronCorrelation *AddTaskJetHadronCorrelation(Char_t *jf="ANTIKT",Float_t radius=0.4,UInt_t filter=256,Int_t backM=0,Float_t tPtcut=0.15,Int_t skipCone=0,Bool_t IsMC=true,Float_t JetEScale=1.,Float_t TrackEScale=1.) +{ + + // Creates a JetQA task, configures it and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskJetHadronCorrelation", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskJetHadronCorrelation", "This task requires an input event handler"); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + + AliAnalysisTaskJetHadronCorrelation *jethadron = new AliAnalysisTaskJetHadronCorrelation("TaskJetHadronCorrelation"); + jethadron->SetDebugLevel(3); + jethadron->SetAlgorithm(jf); + jethadron->SetRadius(radius); + jethadron->SetFilterMask(filter); + jethadron->SetBackSubMode(backM); + jethadron->SetTrackPtCut(tPtcut); + jethadron->SetSkipCone(skipCone); + jethadron->SetMC(IsMC); + jethadron->SetJetEScale(JetEScale); + jethadron->SetTrackEScale(TrackEScale); + mgr->AddTask(jethadron); + + TString cAdd = ""; + cAdd += Form("%02d_" ,(int)((radius+0.01)*10.)); + cAdd += Form("B%d" ,(int)backM); + cAdd += Form("_Filter%05d" ,filter); + cAdd += Form("_Cut%05d" ,(int)(1000.*tPtcut)); + cAdd += Form("_Skip%02d" ,skipCone); + cAdd += Form("_JetEScale%03d" ,(int)(JetEScale*100.)); + cAdd += Form("_TrackEScale%03d",(int)(TrackEScale*100.)); + TString Branch; + if(IsMC)Branch = Form("MC_clustersAOD_%s%s",jf,cAdd.Data()); + else Branch = Form("Data_clustersAOD_%s%s",jf,cAdd.Data()); + + AliAnalysisDataContainer *cout_JHC = mgr->CreateContainer(Form("JHC_%s%s",jf,cAdd.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_JHC_%s",AliAnalysisManager::GetCommonFileName(),Branch.Data())); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + + mgr->ConnectInput (jethadron,0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(jethadron,0, mgr->GetCommonOutputContainer()); + mgr->ConnectOutput(jethadron,1, cout_JHC); + + + return jethadron; +} diff --git a/PWGJE/macros/AddTaskJetServices.C b/PWGJE/macros/AddTaskJetServices.C index bdaf8847117..deed7dfa5a6 100644 --- a/PWGJE/macros/AddTaskJetServices.C +++ b/PWGJE/macros/AddTaskJetServices.C @@ -1,102 +1,102 @@ -AliAnalysisTaskJetServices* serv = 0; -Bool_t ConfigWithFlagsJetServices(); -AliAnalysisTaskJetServices *AddTaskJetServices() -{ - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskJetServices", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskJetServices", "This task requires an input event handler"); - return NULL; - } - - TString type = mgr->GetInputEventHandler()->GetDataType(); - type.ToUpper(); - // Create the task and configure it. - //=========================================================================== - - serv = new AliAnalysisTaskJetServices("JetServices"); - - - if(type == "AOD"){ - serv->SetAODInput(kTRUE); - } - mgr->AddTask(serv); - - // evaluate global variables - Bool_t bGood1 = false; - Bool_t bGood2 = false; - - - if(!ConfigWithFlagsJetServices())return 0; - serv->SetUsePhysicsSelection(kTRUE); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - AliAnalysisDataContainer *coutput1_Serv = mgr->CreateContainer("pwgje_services", TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_services",AliAnalysisManager::GetCommonFileName())); - - mgr->ConnectInput (serv, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (serv, 0, mgr->GetCommonOutputContainer()); - mgr->ConnectOutput (serv, 1, coutput1_Serv ); - - return serv; -} - -Bool_t ConfigWithFlagsJetServices(){ - - Bool_t bGood1 = kFALSE; - Bool_t bGood2 = kFALSE; - - - serv->SetRunRange(AliAnalysisManager::GetGlobalInt("kGridRunRangeLo",bGood1), - AliAnalysisManager::GetGlobalInt("kGridRunRangeLo",bGood2)); - - if(!bGood1||!bGood2){ - Printf("%s:%d Run range not set",(char*)__FILE__,__LINE__); - serv->SetRunRange(110000,160000); - } - - - Int_t nTrigger = AliAnalysisManager::GetGlobalInt("kNTrigger",bGood1); - - if(bGood1){ - serv->SetNTrigger(nTrigger); - for(int it = 0;it < nTrigger;it++){ - serv->SetTrigger(it, - AliAnalysisManager::GetGlobalInt(Form("kTriggerBit%d",it),bGood1), - AliAnalysisManager::GetGlobalStr(Form("kTriggerName%d",it),bGood2)); - } - } - - AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1);if(bGood1)serv->SetPhysicsSelectionFlag(AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1)); - else {Printf("%s%d: kPhysicsSelectionFlag not defined",(char*)__FILE__,__LINE__); return kFALSE; } - AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1);if(bGood1)serv->SetNonStdFile(AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1)); - else {Printf("%s%d: kDeltaAODJetName not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1);if(bGood1)serv->SetTrackEtaWindow(AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1)); - else {Printf("%s%d: kTrackEtaWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } - AliAnalysisManager::GetGlobalDbl("kVertexWindow",bGood1);if(bGood1)serv->SetZVertexCut(AliAnalysisManager::GetGlobalDbl("kVertexWindow",bGood1)); - else {Printf("%s%d: kVertexWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1);if(bGood1)serv->SetFilterMask(AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1)); - else {Printf("%s%d: kHighPtFilterMask not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - TString cRun(AliAnalysisManager::GetGlobalStr("kJetRunPeriod",bGood1)); - if(cRun.Contains("10h")||cRun.Contains("11h")){ - serv->SetCollisionType(AliAnalysisTaskJetServices::kPbPb); - } - else{ - serv->SetCollisionType(AliAnalysisTaskJetServices::kPP); - } - - return kTRUE; - -} +AliAnalysisTaskJetServices* serv = 0; +Bool_t ConfigWithFlagsJetServices(); +AliAnalysisTaskJetServices *AddTaskJetServices() +{ + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskJetServices", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskJetServices", "This task requires an input event handler"); + return NULL; + } + + TString type = mgr->GetInputEventHandler()->GetDataType(); + type.ToUpper(); + // Create the task and configure it. + //=========================================================================== + + serv = new AliAnalysisTaskJetServices("JetServices"); + + + if(type == "AOD"){ + serv->SetAODInput(kTRUE); + } + mgr->AddTask(serv); + + // evaluate global variables + Bool_t bGood1 = false; + Bool_t bGood2 = false; + + + if(!ConfigWithFlagsJetServices())return 0; + serv->SetUsePhysicsSelection(kTRUE); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + AliAnalysisDataContainer *coutput1_Serv = mgr->CreateContainer("pwgje_services", TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_services",AliAnalysisManager::GetCommonFileName())); + + mgr->ConnectInput (serv, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (serv, 0, mgr->GetCommonOutputContainer()); + mgr->ConnectOutput (serv, 1, coutput1_Serv ); + + return serv; +} + +Bool_t ConfigWithFlagsJetServices(){ + + Bool_t bGood1 = kFALSE; + Bool_t bGood2 = kFALSE; + + + serv->SetRunRange(AliAnalysisManager::GetGlobalInt("kGridRunRangeLo",bGood1), + AliAnalysisManager::GetGlobalInt("kGridRunRangeLo",bGood2)); + + if(!bGood1||!bGood2){ + Printf("%s:%d Run range not set",(char*)__FILE__,__LINE__); + serv->SetRunRange(110000,160000); + } + + + Int_t nTrigger = AliAnalysisManager::GetGlobalInt("kNTrigger",bGood1); + + if(bGood1){ + serv->SetNTrigger(nTrigger); + for(int it = 0;it < nTrigger;it++){ + serv->SetTrigger(it, + AliAnalysisManager::GetGlobalInt(Form("kTriggerBit%d",it),bGood1), + AliAnalysisManager::GetGlobalStr(Form("kTriggerName%d",it),bGood2)); + } + } + + AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1);if(bGood1)serv->SetPhysicsSelectionFlag(AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1)); + else {Printf("%s%d: kPhysicsSelectionFlag not defined",(char*)__FILE__,__LINE__); return kFALSE; } + AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1);if(bGood1)serv->SetNonStdFile(AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1)); + else {Printf("%s%d: kDeltaAODJetName not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1);if(bGood1)serv->SetTrackEtaWindow(AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1)); + else {Printf("%s%d: kTrackEtaWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } + AliAnalysisManager::GetGlobalDbl("kVertexWindow",bGood1);if(bGood1)serv->SetZVertexCut(AliAnalysisManager::GetGlobalDbl("kVertexWindow",bGood1)); + else {Printf("%s%d: kVertexWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1);if(bGood1)serv->SetFilterMask(AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1)); + else {Printf("%s%d: kHighPtFilterMask not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + TString cRun(AliAnalysisManager::GetGlobalStr("kJetRunPeriod",bGood1)); + if(cRun.Contains("10h")||cRun.Contains("11h")){ + serv->SetCollisionType(AliAnalysisTaskJetServices::kPbPb); + } + else{ + serv->SetCollisionType(AliAnalysisTaskJetServices::kPP); + } + + return kTRUE; + +} diff --git a/PWGJE/macros/AddTaskJetSpectrum2.C b/PWGJE/macros/AddTaskJetSpectrum2.C index d7bdc43dd9e..6863245d7bc 100644 --- a/PWGJE/macros/AddTaskJetSpectrum2.C +++ b/PWGJE/macros/AddTaskJetSpectrum2.C @@ -1,234 +1,234 @@ -Bool_t ConfigWithFlagsJetSpectrum2(); -AliAnalysisTaskJetSpectrum2 *jetspec = 0; - -AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec = "jets",const char* bGen = "jetsAODMC_UA104",const char* nonStdFile="",UInt_t filterMask = 32, Int_t iPhysicsSelectionFlag = AliVEvent::kMB,Int_t hjet=0, UInt_t iEventSelectionMask = 0,Int_t iCl = 0, Bool_t bRCSparseDimensions = kFALSE); - - -AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2Delta(UInt_t filterMask = 32,Bool_t kUseAODMC = kFALSE,Int_t iPhysicsSelectionFlag = AliVEvent::kMB,Int_t hjet=0,UInt_t iFlag = 0xfffffff, UInt_t iEventSelectionMask = 0,char* back = ""){ - - TString cBack = back; - - AliAnalysisTaskJetSpectrum2 *js = 0; - if(kUseAODMC){ - if(iFlag&(1<<0)){ // UA104 - js = AddTaskJetSpectrum2("jets","jetsAODMC_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - js = AddTaskJetSpectrum2("jets","jetsAODMC2_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - } - if(iFlag&(1<<1)){ // ANTIKT 04 - js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC2_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - // cross check MC only background subtration - js = AddTaskJetSpectrum2("jetsAODMC2_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - } - if(iFlag&(1<<2)){ // KT 04 - js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask); - js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC2_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - } - if(iFlag&(1<<3)){ // SISCONE 04 - js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC2_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - } - // here can go other radii - } - else { // only the data ... no MC - if(iFlag&(1<<0)){ // UA104 - js = AddTaskJetSpectrum2("jets","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,1); - } - if(iFlag&(1<<1)){ // ANTIKT 04 - js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - } - if(iFlag&(1<<2)){ // KT 04 - js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask); - } - if(iFlag&(1<<3)){ // SISCONE 04 - js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); - } - } - return js; -} - - -AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bGen ,const char* nonStdFile,UInt_t filterMask,Int_t iPhysicsSelectionFlag,Int_t hjet, UInt_t iEventSelectionMask,Int_t iCl, Bool_t bRCSparseDimensions) -{ - // Creates a jet fider task, configures it and adds it to the analysis manager. - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskJetSpectrum2", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskJetSpectrum2", "This task requires an input event handler"); - return NULL; - } - - TString type = mgr->GetInputEventHandler()->GetDataType(); - TString typeRec(bRec); - TString typeGen(bGen); - typeGen.ToUpper(); - typeRec.ToUpper(); - - - // Create the task and configure it. - //=========================================================================== - - jetspec = new AliAnalysisTaskJetSpectrum2(Form("JetSpectrum2%s-%s_%010d_Class%02d",bRec,bGen,iEventSelectionMask,iCl)); - if(iCl)jetspec->SetEventClass(iCl); - - // add the filter mask for non default jets branches - TString cAdd(""); - cAdd += Form("_Filter%05d",filterMask); - - - jetspec->SetTRP(hjet); - jetspec->SetBranchGen(bGen); - // if(typeGen.Contains("JETSAOD")&&!typeGen.Contains("MC"))jetspec->SetBranchGen(Form("%s%s",bGen,cAdd.Data())); - - jetspec->SetBranchRec(bRec); - // if(typeRec.Contains("JETSAOD")&&!typeRec.Contains("MC")) jetspec->SetBranchRec(Form("%s%s",bRec,cAdd.Data())); - - - - if(type == "AOD"){ - // Assume all jets are not yet produced - // jetspec->SetAODJetInput(kTRUE); - jetspec->SetAODTrackInput(kTRUE); - jetspec->SetAODMCInput(kTRUE); - } - else{ - if(mgr->GetMCtruthEventHandler()){ - jetspec-> SetAnalysisType(AliAnalysisTaskJetSpectrum2::kAnaMCESD); - } - } - - if(typeRec.Contains("AODMC2b")){// work down from the top AODMC2b -> AODMC2 -> AODMC -> AOD - jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAODMCChargedAcceptance); - } - else if (typeRec.Contains("AODMC2")){ - jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAODMCCharged); - } - else if (typeRec.Contains("AODMC")){ - jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAODMCAll); - } - else { // catch akk use AOD - jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAOD); - } - - if(typeGen.Contains("AODMC2b")){// work down from the top AODMC2b -> AODMC2 -> AODMC -> AOD - jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAODMCChargedAcceptance); - } - else if (typeGen.Contains("AODMC2")){ - jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAODMCCharged); - } - else if (typeGen.Contains("AODMC")){ - jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAODMCAll); - } - else if (typeGen.Length()>0){ // catch all use AOD - jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAOD); - } - - if(iEventSelectionMask)jetspec->SetEventSelectionMask(iEventSelectionMask); - - // jetspec->SetDebugLevel(10); - if(!ConfigWithFlagsJetSpectrum2())return 0; - - jetspec->SetUseGlobalSelection(kTRUE); - jetspec->SetMinJetPt(-1.);//keep all jets - - if(bRCSparseDimensions) { - jetspec->SetNRPBins(100); - jetspec->SetNMultBins(1); - jetspec->SetNPtLeadingBins(1); - } - - // to fetch the AOD from the AOD extension ouput - if(strlen(nonStdFile))jetspec->SetNonStdFile(nonStdFile); - mgr->AddTask(jetspec); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - AliAnalysisDataContainer *coutput1_Spec = ; - if(hjet>0) - coutput1_Spec = mgr->CreateContainer(Form("pwgje_spec2_%s_%s_%010d_Class%02d_HJ%d",bRec,bGen,iEventSelectionMask,iCl,hjet),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_spec2_%s_%s_%010d_Class%02d_HJ%d",AliAnalysisManager::GetCommonFileName(),bRec,bGen,iEventSelectionMask,iCl,hjet)); - else - coutput1_Spec = mgr->CreateContainer(Form("pwgje_spec2_%s_%s_%010d_Class%02d",bRec,bGen,iEventSelectionMask,iCl),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_spec2_%s_%s_%010d_Class%02d",AliAnalysisManager::GetCommonFileName(),bRec,bGen,iEventSelectionMask,iCl)); - - mgr->ConnectInput (jetspec, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (jetspec, 0, mgr->GetCommonOutputContainer()); - mgr->ConnectOutput (jetspec, 1, coutput1_Spec ); - - return jetspec; -} - -void SetAODInput(AliAnalysisTaskJetSpectrum2 *taskJetSpectrum){ - taskJetSpectrum->SetAODJetInput(kTRUE); - taskJetSpectrum->SetAODTrackInput(kTRUE); - // taskJetSpectrum->SetUseGlobalSelection(kFALSE); -} - -Bool_t ConfigWithFlagsJetSpectrum2(){ - - Bool_t bGood1 = kFALSE; - Bool_t bGood2 = kFALSE; - - - Int_t nTrigger = AliAnalysisManager::GetGlobalInt("kNTrigger",bGood1); - - if(bGood1){ - jetspec->SetNTrigger(nTrigger); - for(int it = 0;it < nTrigger;it++){ - jetspec->SetTrigger(it, - AliAnalysisManager::GetGlobalInt(Form("kTriggerBit%d",it),bGood1), - AliAnalysisManager::GetGlobalStr(Form("kTriggerName%d",it),bGood2)); - } - } - else { - Printf("%s%d: kNTrigger not defined",(char*)__FILE__,__LINE__); return kFALSE; - } - - - Int_t nAcceptance = AliAnalysisManager::GetGlobalInt("kNAcceptanceSpec",bGood1); - - if(bGood1){ - jetspec->SetNAcceptance(nAcceptance); - for(int ia = 0;ia < nAcceptance;ia++){ - jetspec->SetAcceptance(ia, - AliAnalysisManager::GetGlobalDbl(Form("kAcceptancePhiMinSpec%d",ia),bGood1), - AliAnalysisManager::GetGlobalDbl(Form("kAcceptancePhiMaxSpec%d",ia),bGood1), - AliAnalysisManager::GetGlobalDbl(Form("kAcceptanceEtaMinSpec%d",ia),bGood1), - AliAnalysisManager::GetGlobalDbl(Form("kAcceptanceEtaMaxSpec%d",ia),bGood1)); - } - } - else { - Printf("%s%d: kNAcceptance not defined",(char*)__FILE__,__LINE__); - } - - - AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1);if(bGood1){ - jetspec->SelectCollisionCandidates(AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1)); - } - else {Printf("%s%d: kPhysicsSelectionFlag not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - - AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1);if(bGood1)jetspec->SetNonStdFile(AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1)); - else {Printf("%s%d: kDeltaAODJetName not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1);if(bGood1)jetspec->SetTrackEtaWindow(AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1)); - else {Printf("%s%d: kTrackEtaWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - AliAnalysisManager::GetGlobalDbl("kJetEtaWindow",bGood1);if(bGood1)jetspec->SetJetEtaWindow(AliAnalysisManager::GetGlobalDbl("kJetEtaWindow",bGood1)); - else {Printf("%s%d: kJetEtaWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - - AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1);if(bGood1)jetspec->SetFilterMask(AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1)); - else {Printf("%s%d: kHighPtFilterMask not defined",(char*)__FILE__,__LINE__); return kFALSE; } - - return kTRUE; - - -} +Bool_t ConfigWithFlagsJetSpectrum2(); +AliAnalysisTaskJetSpectrum2 *jetspec = 0; + +AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec = "jets",const char* bGen = "jetsAODMC_UA104",const char* nonStdFile="",UInt_t filterMask = 32, Int_t iPhysicsSelectionFlag = AliVEvent::kMB,Int_t hjet=0, UInt_t iEventSelectionMask = 0,Int_t iCl = 0, Bool_t bRCSparseDimensions = kFALSE); + + +AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2Delta(UInt_t filterMask = 32,Bool_t kUseAODMC = kFALSE,Int_t iPhysicsSelectionFlag = AliVEvent::kMB,Int_t hjet=0,UInt_t iFlag = 0xfffffff, UInt_t iEventSelectionMask = 0,char* back = ""){ + + TString cBack = back; + + AliAnalysisTaskJetSpectrum2 *js = 0; + if(kUseAODMC){ + if(iFlag&(1<<0)){ // UA104 + js = AddTaskJetSpectrum2("jets","jetsAODMC_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + js = AddTaskJetSpectrum2("jets","jetsAODMC2_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + } + if(iFlag&(1<<1)){ // ANTIKT 04 + js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC2_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + // cross check MC only background subtration + js = AddTaskJetSpectrum2("jetsAODMC2_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + } + if(iFlag&(1<<2)){ // KT 04 + js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask); + js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC2_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + } + if(iFlag&(1<<3)){ // SISCONE 04 + js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC2_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + } + // here can go other radii + } + else { // only the data ... no MC + if(iFlag&(1<<0)){ // UA104 + js = AddTaskJetSpectrum2("jets","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,1); + } + if(iFlag&(1<<1)){ // ANTIKT 04 + js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + } + if(iFlag&(1<<2)){ // KT 04 + js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask); + } + if(iFlag&(1<<3)){ // SISCONE 04 + js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask); + } + } + return js; +} + + +AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bGen ,const char* nonStdFile,UInt_t filterMask,Int_t iPhysicsSelectionFlag,Int_t hjet, UInt_t iEventSelectionMask,Int_t iCl, Bool_t bRCSparseDimensions) +{ + // Creates a jet fider task, configures it and adds it to the analysis manager. + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskJetSpectrum2", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskJetSpectrum2", "This task requires an input event handler"); + return NULL; + } + + TString type = mgr->GetInputEventHandler()->GetDataType(); + TString typeRec(bRec); + TString typeGen(bGen); + typeGen.ToUpper(); + typeRec.ToUpper(); + + + // Create the task and configure it. + //=========================================================================== + + jetspec = new AliAnalysisTaskJetSpectrum2(Form("JetSpectrum2%s-%s_%010d_Class%02d",bRec,bGen,iEventSelectionMask,iCl)); + if(iCl)jetspec->SetEventClass(iCl); + + // add the filter mask for non default jets branches + TString cAdd(""); + cAdd += Form("_Filter%05d",filterMask); + + + jetspec->SetTRP(hjet); + jetspec->SetBranchGen(bGen); + // if(typeGen.Contains("JETSAOD")&&!typeGen.Contains("MC"))jetspec->SetBranchGen(Form("%s%s",bGen,cAdd.Data())); + + jetspec->SetBranchRec(bRec); + // if(typeRec.Contains("JETSAOD")&&!typeRec.Contains("MC")) jetspec->SetBranchRec(Form("%s%s",bRec,cAdd.Data())); + + + + if(type == "AOD"){ + // Assume all jets are not yet produced + // jetspec->SetAODJetInput(kTRUE); + jetspec->SetAODTrackInput(kTRUE); + jetspec->SetAODMCInput(kTRUE); + } + else{ + if(mgr->GetMCtruthEventHandler()){ + jetspec-> SetAnalysisType(AliAnalysisTaskJetSpectrum2::kAnaMCESD); + } + } + + if(typeRec.Contains("AODMC2b")){// work down from the top AODMC2b -> AODMC2 -> AODMC -> AOD + jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAODMCChargedAcceptance); + } + else if (typeRec.Contains("AODMC2")){ + jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAODMCCharged); + } + else if (typeRec.Contains("AODMC")){ + jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAODMCAll); + } + else { // catch akk use AOD + jetspec->SetTrackTypeRec(AliAnalysisTaskJetSpectrum2::kTrackAOD); + } + + if(typeGen.Contains("AODMC2b")){// work down from the top AODMC2b -> AODMC2 -> AODMC -> AOD + jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAODMCChargedAcceptance); + } + else if (typeGen.Contains("AODMC2")){ + jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAODMCCharged); + } + else if (typeGen.Contains("AODMC")){ + jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAODMCAll); + } + else if (typeGen.Length()>0){ // catch all use AOD + jetspec->SetTrackTypeGen(AliAnalysisTaskJetSpectrum2::kTrackAOD); + } + + if(iEventSelectionMask)jetspec->SetEventSelectionMask(iEventSelectionMask); + + // jetspec->SetDebugLevel(10); + if(!ConfigWithFlagsJetSpectrum2())return 0; + + jetspec->SetUseGlobalSelection(kTRUE); + jetspec->SetMinJetPt(-1.);//keep all jets + + if(bRCSparseDimensions) { + jetspec->SetNRPBins(100); + jetspec->SetNMultBins(1); + jetspec->SetNPtLeadingBins(1); + } + + // to fetch the AOD from the AOD extension ouput + if(strlen(nonStdFile))jetspec->SetNonStdFile(nonStdFile); + mgr->AddTask(jetspec); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + AliAnalysisDataContainer *coutput1_Spec = ; + if(hjet>0) + coutput1_Spec = mgr->CreateContainer(Form("pwgje_spec2_%s_%s_%010d_Class%02d_HJ%d",bRec,bGen,iEventSelectionMask,iCl,hjet),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_spec2_%s_%s_%010d_Class%02d_HJ%d",AliAnalysisManager::GetCommonFileName(),bRec,bGen,iEventSelectionMask,iCl,hjet)); + else + coutput1_Spec = mgr->CreateContainer(Form("pwgje_spec2_%s_%s_%010d_Class%02d",bRec,bGen,iEventSelectionMask,iCl),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWGJE_spec2_%s_%s_%010d_Class%02d",AliAnalysisManager::GetCommonFileName(),bRec,bGen,iEventSelectionMask,iCl)); + + mgr->ConnectInput (jetspec, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (jetspec, 0, mgr->GetCommonOutputContainer()); + mgr->ConnectOutput (jetspec, 1, coutput1_Spec ); + + return jetspec; +} + +void SetAODInput(AliAnalysisTaskJetSpectrum2 *taskJetSpectrum){ + taskJetSpectrum->SetAODJetInput(kTRUE); + taskJetSpectrum->SetAODTrackInput(kTRUE); + // taskJetSpectrum->SetUseGlobalSelection(kFALSE); +} + +Bool_t ConfigWithFlagsJetSpectrum2(){ + + Bool_t bGood1 = kFALSE; + Bool_t bGood2 = kFALSE; + + + Int_t nTrigger = AliAnalysisManager::GetGlobalInt("kNTrigger",bGood1); + + if(bGood1){ + jetspec->SetNTrigger(nTrigger); + for(int it = 0;it < nTrigger;it++){ + jetspec->SetTrigger(it, + AliAnalysisManager::GetGlobalInt(Form("kTriggerBit%d",it),bGood1), + AliAnalysisManager::GetGlobalStr(Form("kTriggerName%d",it),bGood2)); + } + } + else { + Printf("%s%d: kNTrigger not defined",(char*)__FILE__,__LINE__); return kFALSE; + } + + + Int_t nAcceptance = AliAnalysisManager::GetGlobalInt("kNAcceptanceSpec",bGood1); + + if(bGood1){ + jetspec->SetNAcceptance(nAcceptance); + for(int ia = 0;ia < nAcceptance;ia++){ + jetspec->SetAcceptance(ia, + AliAnalysisManager::GetGlobalDbl(Form("kAcceptancePhiMinSpec%d",ia),bGood1), + AliAnalysisManager::GetGlobalDbl(Form("kAcceptancePhiMaxSpec%d",ia),bGood1), + AliAnalysisManager::GetGlobalDbl(Form("kAcceptanceEtaMinSpec%d",ia),bGood1), + AliAnalysisManager::GetGlobalDbl(Form("kAcceptanceEtaMaxSpec%d",ia),bGood1)); + } + } + else { + Printf("%s%d: kNAcceptance not defined",(char*)__FILE__,__LINE__); + } + + + AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1);if(bGood1){ + jetspec->SelectCollisionCandidates(AliAnalysisManager::GetGlobalInt("kPhysicsSelectionFlag",bGood1)); + } + else {Printf("%s%d: kPhysicsSelectionFlag not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + + AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1);if(bGood1)jetspec->SetNonStdFile(AliAnalysisManager::GetGlobalStr("kDeltaAODJetName",bGood1)); + else {Printf("%s%d: kDeltaAODJetName not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1);if(bGood1)jetspec->SetTrackEtaWindow(AliAnalysisManager::GetGlobalDbl("kTrackEtaWindow",bGood1)); + else {Printf("%s%d: kTrackEtaWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + AliAnalysisManager::GetGlobalDbl("kJetEtaWindow",bGood1);if(bGood1)jetspec->SetJetEtaWindow(AliAnalysisManager::GetGlobalDbl("kJetEtaWindow",bGood1)); + else {Printf("%s%d: kJetEtaWindow not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + + AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1);if(bGood1)jetspec->SetFilterMask(AliAnalysisManager::GetGlobalInt("kHighPtFilterMask",bGood1)); + else {Printf("%s%d: kHighPtFilterMask not defined",(char*)__FILE__,__LINE__); return kFALSE; } + + return kTRUE; + + +} diff --git a/PWGJE/macros/AddTaskKMeans.C b/PWGJE/macros/AddTaskKMeans.C index 98391f3a452..84d3f5eb23e 100644 --- a/PWGJE/macros/AddTaskKMeans.C +++ b/PWGJE/macros/AddTaskKMeans.C @@ -1,48 +1,48 @@ -AliAnalysisTaskKMeans *AddTaskKMeans() -{ -// Creates a dijet task, configures it and adds it to the analysis manager. - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskJets", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskKMeans", "This task requires an input event handler"); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - - AliAnalysisTaskKMeans *taskKMeans = new AliAnalysisTaskKMeans("K-Means Analysis"); - taskKMeans->SetDebugLevel(0); - AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Standard"); - esdTrackCutsL->SetMinNClustersTPC(50); - esdTrackCutsL->SetRequireTPCRefit(kTRUE); - esdTrackCutsL->SetRequireITSRefit(kTRUE); - esdTrackCutsL->SetMaxDCAToVertexXY(3.); - esdTrackCutsL->SetMaxDCAToVertexZ(3.); - esdTrackCutsL->SetAcceptKinkDaughters(kFALSE); - taskKMeans->SetCuts(esdTrackCutsL); - taskKMeans->SetK(4); - taskKMeans->SetMinimumMultiplicity(10); - AliKMeansClustering::SetBeta(1.); - mgr->AddTask(taskKMeans); - - AliAnalysisDataContainer* cout_kmeans = mgr->CreateContainer("KMeans", TList::Class(),AliAnalysisManager::kOutputContainer, - Form("%s:PWG4_KMeans", AliAnalysisManager::GetCommonFileName())); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - mgr->ConnectInput (taskKMeans, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (taskKMeans, 1, cout_kmeans); - - return taskKMeans; -} +AliAnalysisTaskKMeans *AddTaskKMeans() +{ +// Creates a dijet task, configures it and adds it to the analysis manager. + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskJets", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskKMeans", "This task requires an input event handler"); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + + AliAnalysisTaskKMeans *taskKMeans = new AliAnalysisTaskKMeans("K-Means Analysis"); + taskKMeans->SetDebugLevel(0); + AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Standard"); + esdTrackCutsL->SetMinNClustersTPC(50); + esdTrackCutsL->SetRequireTPCRefit(kTRUE); + esdTrackCutsL->SetRequireITSRefit(kTRUE); + esdTrackCutsL->SetMaxDCAToVertexXY(3.); + esdTrackCutsL->SetMaxDCAToVertexZ(3.); + esdTrackCutsL->SetAcceptKinkDaughters(kFALSE); + taskKMeans->SetCuts(esdTrackCutsL); + taskKMeans->SetK(4); + taskKMeans->SetMinimumMultiplicity(10); + AliKMeansClustering::SetBeta(1.); + mgr->AddTask(taskKMeans); + + AliAnalysisDataContainer* cout_kmeans = mgr->CreateContainer("KMeans", TList::Class(),AliAnalysisManager::kOutputContainer, + Form("%s:PWG4_KMeans", AliAnalysisManager::GetCommonFileName())); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + mgr->ConnectInput (taskKMeans, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (taskKMeans, 1, cout_kmeans); + + return taskKMeans; +} diff --git a/PWGJE/macros/AnalysisTrainCAF.C b/PWGJE/macros/AnalysisTrainCAF.C index 7730853e3f2..016602a5f2e 100644 --- a/PWGJE/macros/AnalysisTrainCAF.C +++ b/PWGJE/macros/AnalysisTrainCAF.C @@ -1,398 +1,398 @@ -//______________________________________________________________________________ -void AnalysisTrainCAF(Int_t nEvents = 10000, Int_t nOffset = 0, char *ds = "/PWG4/kleinb/LHC09a1_test500") -{ - // Example of running analysis train in CAF. To run in debug mode: - // - export ROOTSYS=debug on your local client - // - un-comment gProof->ClearPackages() - // - un-comment lines with debugging info - - - Bool_t debug = kTRUE; - Bool_t useMC = kTRUE; - Bool_t readTR = kFALSE; - Bool_t bPROOF = kFALSE; - Bool_t bLOCALPAR = kFALSE; // flag that swtiches on loading of local par files insead of loading libs, needed for grid and local testing - - - Int_t iAODanalysis = 1; - Int_t iAODhandler = 1; - Int_t iESDfilter = 1; // Only active if iAODanalysis=0 - Int_t iJETAN = 1; - Int_t iJETANESD = 0; - Int_t iJETANMC = 0; - Int_t iJETANMC2 = 0; - Int_t iFASTJET = 1; - Int_t iDIJETAN = 0; - Int_t iPWG4SPECTRUM = 0; - Int_t iPWG4JFSYSTEMATICS = 0; - Int_t iPWG4JETCORRECTION = 0; - Int_t iPWG4THREEJETS = 0; - Int_t iPWG4UE = 0; - Int_t iPWG4PID = 0; - - if (iAODanalysis) { - useMC = kFALSE; - readTR = kFALSE; - iESDfilter = 0; - } - if (iJETAN) iESDfilter=1; - if (iESDfilter) iAODhandler=1; - - // Dataset from CAF - TString dataset(ds); - TChain *chain = 0; - // CKB quick hack for local analysis - gROOT->LoadMacro("CreateESDChain.C"); - TChain *chain = CreateChain("aodTree",ds,1); - // TChain *chain = CreateChain("esdTree",ds,100); - // chain = new TChain("aodTree"); - // chain->Add("/Users/kleinb/bigdisk/1/LHC09a3/001/AliAOD.root"); - - - printf("==================================================================\n"); - printf("=========== RUNNING ANALYSIS TRAIN IN CAF MODE =============\n"); - printf("==================================================================\n"); - if (iAODanalysis) printf("= AOD analysis on dataset: %s\n", dataset.Data()); - else printf("= ESD analysis on dataset: %s\n", dataset.Data()); - if (iESDfilter) printf("= ESD filter =\n"); - if (iJETAN) printf("= Jet analysis from AOD =\n"); - if (iJETANESD) printf("= Jet analysis from ESD =\n"); - if (iJETANMC) printf("= Jet analysis from Kinematics =\n"); - if (iJETANMC2) printf("= Jet analysis 2 from Kinematics =\n"); - if (iFASTJET) printf("= Loading FastJet =\n"); - if (iDIJETAN) printf("= DiJet analysis =\n"); - if (iPWG4SPECTRUM)printf("= PWG4 Jet spectrum analysis =\n"); - if (iPWG4JFSYSTEMATICS)printf("= PWG4 Jet Finder systematics =\n"); - if (iPWG4JETCORRECTION)printf("= PWG4 Jet Correction =\n"); - if (iPWG4THREEJETS)printf("= PWG4 Three Jets =\n"); - - if (iPWG4UE) printf("= PWG4 UE =\n"); - printf("==================================================================\n"); - if (useMC) printf(":: use MC TRUE\n"); - else printf(":: use MC FALSE\n"); - if (readTR) printf(":: read TR TRUE\n"); - else printf(":: read TR FALSE\n"); - if (debug) printf(":: debugging TRUE\n"); - else printf(":: debugging FALSE\n"); - - // Load common libraries - gSystem->Load("libTree.so"); - gSystem->Load("libGeom.so"); - gSystem->Load("libVMC.so"); - gSystem->Load("libPhysics.so"); - if(iFASTJET){ - gSystem->Load("libCGAL.so"); - gSystem->Load("libfastjet.so"); - gSystem->Load("libsiscone.so"); - gSystem->Load("libSISConePlugin.so"); - } - - - // Reset user processes if CAF if not responding anymore - // TProof::Reset("alicecaf"); - // One may enable a different ROOT version on CAF - - // const char* proofNode = "localhost"; - const char* proofNode = "alicecaf"; - - // Connect to proof - if(bPROOF){ - TProof::Mgr(proofNode)->ShowROOTVersions(); - // TProof::Mgr(proofNode)->SetROOTVersion("v5-21-01-alice_dbg"); - TProof::Open(proofNode); - - // Clear packages if changing ROOT version on CAF or local - gProof->ClearPackages(); - // Enable proof debugging if needed - // gProof->SetLogLevel(5); - // To debug the train in PROOF mode, type in a root session: - // root[0] TProof::Mgr("lxb6064")->GetSessionLogs()->Display("*",0,10000); - // Common packages - // --- Enable the STEERBase Package - gProof->UploadPackage("STEERBase.par"); - gProof->EnablePackage("STEERBase"); - // --- Enable the ESD Package - gProof->UploadPackage("ESD.par"); - gProof->EnablePackage("ESD"); - // --- Enable the AOD Package - gProof->UploadPackage("AOD.par"); - gProof->EnablePackage("AOD"); - // --- Enable the ANALYSIS Package - gProof->UploadPackage("ANALYSIS.par"); - gProof->EnablePackage("ANALYSIS"); - // --- Enable the ANALYSISalice Package - gProof->UploadPackage("ANALYSISalice.par"); - gProof->EnablePackage("ANALYSISalice"); - - - // --- Enable the JETAN Package - if (iJETAN||iJETANESD||iJETANMC||iJETANMC2) { - gProof->UploadPackage("JETAN.par"); - gProof->EnablePackage("JETAN"); - if(iFASTJET){ - gProof->UploadPackage("FASTJETAN.par"); - gProof->EnablePackage("FASTJETAN"); - } - } - // --- Enable particle correlation analysis - if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS||iPWG4JETCORRECTION||iPWG4THREEJETS) { - gProof->UploadPackage("JETAN.par"); - gProof->EnablePackage("JETAN"); - gProof->UploadPackage("PWG4JetTasks.par"); - gProof->EnablePackage("PWG4JetTasks"); - } - - } - else{ - - // - // We are local or on grid - // access remote files in lcoal case as well so open alien connection - - /* - printf("*** Connect to AliEn ***\n"); - TGrid::Connect("alien://"); - - chain = CreateChainFromCollection("wn.xml","esdTree",2); - */ - - if(bLOCALPAR){ - SetupPar("STEERBase"); - SetupPar("ESD"); - SetupPar("AOD"); - SetupPar("ANALYSIS"); - SetupPar("ANALYSISalice"); - if (iJETAN||iJETANESD||iJETANMC||iJETANMC2){ - SetupPar("JETAN"); - if(iFASTJET) SetupPar("FASTJETAN"); - } - if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS){ - SetupPar("JETAN"); - SetupPar("PWG4JetTasks"); - } - } - else{ - Printf("Loading Local libs"); - gSystem->Load("libSTEERBase"); - gSystem->Load("libESD"); - gSystem->Load("libAOD"); - gSystem->Load("libANALYSIS"); - gSystem->Load("libANALYSISalice"); - // --- Enable the JETAN Package - if (iJETAN||iJETANESD||iJETANMC||iJETANMC2){ - gSystem->Load("libJETAN"); - if(iFASTJET)gSystem->Load("libFASTJETAN"); - } - // --- Enable particle correlation analysis - if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS||iPWG4THREEJETS){ - gSystem->Load("libJETAN"); - gSystem->Load("libPWG4JetTasks"); - } - } - - } - - - // Make the analysis manager - AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "A test setup for the analysis train"); - if (iAODanalysis) { - // AOD input handler - AliAODInputHandler *aodH = new AliAODInputHandler(); - mgr->SetInputEventHandler(aodH); - } else { - // ESD input handler - AliESDInputHandler *esdHandler = new AliESDInputHandler(); - mgr->SetInputEventHandler(esdHandler); -// esdHandler->SetInactiveBranches("FMD CaloCluster"); - } - // Monte Carlo handler - if (useMC && !iAODanalysis) { - AliMCEventHandler* mcHandler = new AliMCEventHandler(); - mgr->SetMCtruthEventHandler(mcHandler); - mcHandler->SetReadTR(readTR); - } - // Top container for input - AliAnalysisDataContainer *cinput = 0; - - cinput = mgr->GetCommonInputContainer(); - - // This container is managed by the AOD handler - AliAnalysisDataContainer *cout_aod = 0; - if (iAODhandler) { - // AOD output handler - AliAODHandler* aodHandler = new AliAODHandler(); - // aodHandler->SetFillAOD(kFALSE); - mgr->SetOutputEventHandler(aodHandler); - aodHandler->SetOutputFileName(Form("AliAODs_pwg4_%07d-%07d.root",nOffset,nOffset+nEvents)); - cout_aod = mgr->GetCommonOutputContainer(); - cout_aod->SetSpecialOutput(); - } - - // Debugging if needed - if (debug) mgr->SetDebugLevel(10); - // AliLog::EnableDebug(kTRUE); - AliLog::SetGlobalLogLevel(1); - - - if (iESDfilter && !iAODanalysis) { - gSystem->Load("libCORRFW.so"); - gSystem->Load("libPWGmuon.so"); - - gROOT->LoadMacro(Form("%s/ANALYSIS/macros/AddTaskESDFilter.C",gSystem->ExpandPathName("${ALICE_ROOT}"))); - // gROOT->LoadMacro("AddTaskESDfilter.C"); - AliAnalysisTaskESDfilter *esdfilter = AddTaskESDFilter(); - Printf("esdFilter %p",esdfilter); - } - // Jet analysis from the AOD - if (iJETAN) { - gROOT->LoadMacro("AddTaskJets.C"); - // AliAnalysisTaskJets *jetanaAOD = AddTaskJets("AOD","UA1",0.4); - // AliAnalysisTaskJets *jetanaAOD = AddTaskJets("AOD","UA1",0.4); - // jetanaAOD->SetNonStdBranch("jetsAOD_UA1"); - AliAnalysisTaskJets *jetanaAOD = AddTaskJets(); - Int_t i = AddTaskJetsDelta(); - } - // JETANALYSIS from the ESD - if (iJETANESD && !iAODanalysis) { - gROOT->LoadMacro("AddTaskJets.C"); - AliAnalysisTaskJets *jetanaESD = AddTaskJets("ESD","UA1"); - jetanaESD->SetDebugLevel(0); - jetanaESD->SetNonStdBranch("jetsESD"); - } - // Jet analysisMC - if (iJETANMC ){ - gROOT->LoadMacro("AddTaskJets.C"); - // AliAnalysisTaskJets *jetanaMC = AddTaskJets("AODMC","UA1",0.4); - AliAnalysisTaskJets *jetanaMC = AddTaskJets("AODMC","UA1",0.4); - jetanaMC->SetDebugLevel(0); - jetanaMC->SetNonStdBranch("jetsMC_UA1"); - } - if (iJETANMC2 ){ - gROOT->LoadMacro("AddTaskJets.C"); - // AliAnalysisTaskJets *jetanaMC2 = AddTaskJets("AODMC2","UA1",0.4); - AliAnalysisTaskJets *jetanaMC2 = AddTaskJets("AODMC2","UA1",0.4); - jetanaMC2->SetDebugLevel(0); - jetanaMC2->SetNonStdBranch("jetsMC2_UA1"); - } - // Dijet analysis - if(iDIJETAN){ - gROOT->LoadMacro("AddTaskDiJets.C"); - AliAnalysisTaskDiJets *dijetana = AddTaskDiJets(); - } - if (iPWG4SPECTRUM) { - gROOT->LoadMacro("AddTaskJetSpectrum2.C"); - AliAnalysisTaskJetSpectrum2* pwg4spec = AddTaskJetSpectrum2(); - pwg4spec->SetAODInput(kTRUE); - pwg4spec->SetBranchRec("jets"); - pwg4spec->SetAnalysisType(0); - pwg4spec->SetDebugLevel(0); - } - if (iPWG4JFSYSTEMATICS) { - gROOT->LoadMacro("AddTaskJFSystematics.C"); - AliAnalysisTaskJFSystematics* pwg4jfs = AddTaskJFSystematics("jetsMC","jets"); - pwg4jfs->SetAODInput(kTRUE); - pwg4jfs->SetDebugLevel(0); - } - if (iPWG4JETCORRECTION) { - gROOT->LoadMacro("AddTaskJetCorrections.C"); - AliAnalysisTaskJetCorrections* pwg4jc = AddTaskJetCorrections(); - pwg4jc->SetDebugLevel(11); - } - if (iPWG4THREEJETS) { - gROOT->LoadMacro("AddTaskThreeJets.C"); - AliAnalysisTaskThreeJets* pwg4jjj = AddTaskThreeJets(); - pwg4jjj->SetDebugLevel(11); - } - if (iPWG4UE) { - gROOT->LoadMacro("AddTaskUE.C"); - AliAnalysisTaskUE* ueana = AddTaskUE(); - } - if(iPWG4PID){ - gROOT->LoadMacro("AddTaskPWG4PidDetEx.C"); - AliAnalysisTaskPWG4PidDetEx *taskPid = AddTaskPWG4PidDetEx(); - taskPid->SetDebugLevel(0); - } - // Run the analysis - // - if (mgr->InitAnalysis()) { - mgr->PrintStatus(); - Printf("Chain with %d entries",chain->GetEntries()); - if(bPROOF)mgr->StartAnalysis("proof",dataset.Data(), nEvents,nOffset); - else mgr->StartAnalysis("local",chain,nEvents); - } -} -TChain *CreateChainFromCollection(const char* xmlfile, const char *treeName="esdTree",Int_t nFiles = 0) -{ -// Create a chain from an alien collection. - TAlienCollection * myCollection = TAlienCollection::Open(xmlfile); - - if (!myCollection) { - ::Error("CreateChainSingle", "Cannot create an AliEn collection from %s", xmlfile) ; - return NULL ; - } - - TChain* chain = new TChain(treeName); - myCollection->Reset() ; - Int_t iCount = 0; - while ( myCollection->Next() ){ - if(nFiles!=0)iCount++; - if(iCount > nFiles)break; - chain->Add(myCollection->GetTURL("")) ; - Printf("Adding %s",myCollection->GetTURL("")); - } - chain->ls(); - return chain; -} - - -void SetupPar(char* pararchivename) -{ - //Load par files, create analysis libraries - //For testing, if par file already decompressed and modified - //classes then do not decompress. - - TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; - TString parpar(Form("%s.par", pararchivename)) ; - /* - if ( gSystem->AccessPathName(parpar.Data()) ) { - gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ; - TString processline(Form(".! make %s", parpar.Data())) ; - gROOT->ProcessLine(processline.Data()) ; - gSystem->ChangeDirectory(cdir) ; - processline = Form(".! mv /tmp/%s .", parpar.Data()) ; - gROOT->ProcessLine(processline.Data()) ; - } - */ - - if (!gSystem->AccessPathName(pararchivename) ) { - TString processline = Form(".! tar xvzf %s",parpar.Data()) ; - gROOT->ProcessLine(processline.Data()); - } - - TString ocwd = gSystem->WorkingDirectory(); - gSystem->ChangeDirectory(pararchivename); - - // check for BUILD.sh and execute - if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { - printf("*******************************\n"); - printf("*** Building PAR archive ***\n"); - cout<Exec("PROOF-INF/BUILD.sh")) { - Error("runProcess","Cannot Build the PAR Archive! - Abort!"); - return -1; - } - } - // check for SETUP.C and execute - if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { - printf("*******************************\n"); - printf("*** Setup PAR archive ***\n"); - cout<Macro("PROOF-INF/SETUP.C"); - } - - gSystem->ChangeDirectory(ocwd.Data()); - printf("Current dir: %s\n", ocwd.Data()); -} +//______________________________________________________________________________ +void AnalysisTrainCAF(Int_t nEvents = 10000, Int_t nOffset = 0, char *ds = "/PWG4/kleinb/LHC09a1_test500") +{ + // Example of running analysis train in CAF. To run in debug mode: + // - export ROOTSYS=debug on your local client + // - un-comment gProof->ClearPackages() + // - un-comment lines with debugging info + + + Bool_t debug = kTRUE; + Bool_t useMC = kTRUE; + Bool_t readTR = kFALSE; + Bool_t bPROOF = kFALSE; + Bool_t bLOCALPAR = kFALSE; // flag that swtiches on loading of local par files insead of loading libs, needed for grid and local testing + + + Int_t iAODanalysis = 1; + Int_t iAODhandler = 1; + Int_t iESDfilter = 1; // Only active if iAODanalysis=0 + Int_t iJETAN = 1; + Int_t iJETANESD = 0; + Int_t iJETANMC = 0; + Int_t iJETANMC2 = 0; + Int_t iFASTJET = 1; + Int_t iDIJETAN = 0; + Int_t iPWG4SPECTRUM = 0; + Int_t iPWG4JFSYSTEMATICS = 0; + Int_t iPWG4JETCORRECTION = 0; + Int_t iPWG4THREEJETS = 0; + Int_t iPWG4UE = 0; + Int_t iPWG4PID = 0; + + if (iAODanalysis) { + useMC = kFALSE; + readTR = kFALSE; + iESDfilter = 0; + } + if (iJETAN) iESDfilter=1; + if (iESDfilter) iAODhandler=1; + + // Dataset from CAF + TString dataset(ds); + TChain *chain = 0; + // CKB quick hack for local analysis + gROOT->LoadMacro("CreateESDChain.C"); + TChain *chain = CreateChain("aodTree",ds,1); + // TChain *chain = CreateChain("esdTree",ds,100); + // chain = new TChain("aodTree"); + // chain->Add("/Users/kleinb/bigdisk/1/LHC09a3/001/AliAOD.root"); + + + printf("==================================================================\n"); + printf("=========== RUNNING ANALYSIS TRAIN IN CAF MODE =============\n"); + printf("==================================================================\n"); + if (iAODanalysis) printf("= AOD analysis on dataset: %s\n", dataset.Data()); + else printf("= ESD analysis on dataset: %s\n", dataset.Data()); + if (iESDfilter) printf("= ESD filter =\n"); + if (iJETAN) printf("= Jet analysis from AOD =\n"); + if (iJETANESD) printf("= Jet analysis from ESD =\n"); + if (iJETANMC) printf("= Jet analysis from Kinematics =\n"); + if (iJETANMC2) printf("= Jet analysis 2 from Kinematics =\n"); + if (iFASTJET) printf("= Loading FastJet =\n"); + if (iDIJETAN) printf("= DiJet analysis =\n"); + if (iPWG4SPECTRUM)printf("= PWG4 Jet spectrum analysis =\n"); + if (iPWG4JFSYSTEMATICS)printf("= PWG4 Jet Finder systematics =\n"); + if (iPWG4JETCORRECTION)printf("= PWG4 Jet Correction =\n"); + if (iPWG4THREEJETS)printf("= PWG4 Three Jets =\n"); + + if (iPWG4UE) printf("= PWG4 UE =\n"); + printf("==================================================================\n"); + if (useMC) printf(":: use MC TRUE\n"); + else printf(":: use MC FALSE\n"); + if (readTR) printf(":: read TR TRUE\n"); + else printf(":: read TR FALSE\n"); + if (debug) printf(":: debugging TRUE\n"); + else printf(":: debugging FALSE\n"); + + // Load common libraries + gSystem->Load("libTree.so"); + gSystem->Load("libGeom.so"); + gSystem->Load("libVMC.so"); + gSystem->Load("libPhysics.so"); + if(iFASTJET){ + gSystem->Load("libCGAL.so"); + gSystem->Load("libfastjet.so"); + gSystem->Load("libsiscone.so"); + gSystem->Load("libSISConePlugin.so"); + } + + + // Reset user processes if CAF if not responding anymore + // TProof::Reset("alicecaf"); + // One may enable a different ROOT version on CAF + + // const char* proofNode = "localhost"; + const char* proofNode = "alicecaf"; + + // Connect to proof + if(bPROOF){ + TProof::Mgr(proofNode)->ShowROOTVersions(); + // TProof::Mgr(proofNode)->SetROOTVersion("v5-21-01-alice_dbg"); + TProof::Open(proofNode); + + // Clear packages if changing ROOT version on CAF or local + gProof->ClearPackages(); + // Enable proof debugging if needed + // gProof->SetLogLevel(5); + // To debug the train in PROOF mode, type in a root session: + // root[0] TProof::Mgr("lxb6064")->GetSessionLogs()->Display("*",0,10000); + // Common packages + // --- Enable the STEERBase Package + gProof->UploadPackage("STEERBase.par"); + gProof->EnablePackage("STEERBase"); + // --- Enable the ESD Package + gProof->UploadPackage("ESD.par"); + gProof->EnablePackage("ESD"); + // --- Enable the AOD Package + gProof->UploadPackage("AOD.par"); + gProof->EnablePackage("AOD"); + // --- Enable the ANALYSIS Package + gProof->UploadPackage("ANALYSIS.par"); + gProof->EnablePackage("ANALYSIS"); + // --- Enable the ANALYSISalice Package + gProof->UploadPackage("ANALYSISalice.par"); + gProof->EnablePackage("ANALYSISalice"); + + + // --- Enable the JETAN Package + if (iJETAN||iJETANESD||iJETANMC||iJETANMC2) { + gProof->UploadPackage("JETAN.par"); + gProof->EnablePackage("JETAN"); + if(iFASTJET){ + gProof->UploadPackage("FASTJETAN.par"); + gProof->EnablePackage("FASTJETAN"); + } + } + // --- Enable particle correlation analysis + if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS||iPWG4JETCORRECTION||iPWG4THREEJETS) { + gProof->UploadPackage("JETAN.par"); + gProof->EnablePackage("JETAN"); + gProof->UploadPackage("PWG4JetTasks.par"); + gProof->EnablePackage("PWG4JetTasks"); + } + + } + else{ + + // + // We are local or on grid + // access remote files in lcoal case as well so open alien connection + + /* + printf("*** Connect to AliEn ***\n"); + TGrid::Connect("alien://"); + + chain = CreateChainFromCollection("wn.xml","esdTree",2); + */ + + if(bLOCALPAR){ + SetupPar("STEERBase"); + SetupPar("ESD"); + SetupPar("AOD"); + SetupPar("ANALYSIS"); + SetupPar("ANALYSISalice"); + if (iJETAN||iJETANESD||iJETANMC||iJETANMC2){ + SetupPar("JETAN"); + if(iFASTJET) SetupPar("FASTJETAN"); + } + if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS){ + SetupPar("JETAN"); + SetupPar("PWG4JetTasks"); + } + } + else{ + Printf("Loading Local libs"); + gSystem->Load("libSTEERBase"); + gSystem->Load("libESD"); + gSystem->Load("libAOD"); + gSystem->Load("libANALYSIS"); + gSystem->Load("libANALYSISalice"); + // --- Enable the JETAN Package + if (iJETAN||iJETANESD||iJETANMC||iJETANMC2){ + gSystem->Load("libJETAN"); + if(iFASTJET)gSystem->Load("libFASTJETAN"); + } + // --- Enable particle correlation analysis + if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS||iPWG4THREEJETS){ + gSystem->Load("libJETAN"); + gSystem->Load("libPWG4JetTasks"); + } + } + + } + + + // Make the analysis manager + AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "A test setup for the analysis train"); + if (iAODanalysis) { + // AOD input handler + AliAODInputHandler *aodH = new AliAODInputHandler(); + mgr->SetInputEventHandler(aodH); + } else { + // ESD input handler + AliESDInputHandler *esdHandler = new AliESDInputHandler(); + mgr->SetInputEventHandler(esdHandler); +// esdHandler->SetInactiveBranches("FMD CaloCluster"); + } + // Monte Carlo handler + if (useMC && !iAODanalysis) { + AliMCEventHandler* mcHandler = new AliMCEventHandler(); + mgr->SetMCtruthEventHandler(mcHandler); + mcHandler->SetReadTR(readTR); + } + // Top container for input + AliAnalysisDataContainer *cinput = 0; + + cinput = mgr->GetCommonInputContainer(); + + // This container is managed by the AOD handler + AliAnalysisDataContainer *cout_aod = 0; + if (iAODhandler) { + // AOD output handler + AliAODHandler* aodHandler = new AliAODHandler(); + // aodHandler->SetFillAOD(kFALSE); + mgr->SetOutputEventHandler(aodHandler); + aodHandler->SetOutputFileName(Form("AliAODs_pwg4_%07d-%07d.root",nOffset,nOffset+nEvents)); + cout_aod = mgr->GetCommonOutputContainer(); + cout_aod->SetSpecialOutput(); + } + + // Debugging if needed + if (debug) mgr->SetDebugLevel(10); + // AliLog::EnableDebug(kTRUE); + AliLog::SetGlobalLogLevel(1); + + + if (iESDfilter && !iAODanalysis) { + gSystem->Load("libCORRFW.so"); + gSystem->Load("libPWGmuon.so"); + + gROOT->LoadMacro(Form("%s/ANALYSIS/macros/AddTaskESDFilter.C",gSystem->ExpandPathName("${ALICE_ROOT}"))); + // gROOT->LoadMacro("AddTaskESDfilter.C"); + AliAnalysisTaskESDfilter *esdfilter = AddTaskESDFilter(); + Printf("esdFilter %p",esdfilter); + } + // Jet analysis from the AOD + if (iJETAN) { + gROOT->LoadMacro("AddTaskJets.C"); + // AliAnalysisTaskJets *jetanaAOD = AddTaskJets("AOD","UA1",0.4); + // AliAnalysisTaskJets *jetanaAOD = AddTaskJets("AOD","UA1",0.4); + // jetanaAOD->SetNonStdBranch("jetsAOD_UA1"); + AliAnalysisTaskJets *jetanaAOD = AddTaskJets(); + Int_t i = AddTaskJetsDelta(); + } + // JETANALYSIS from the ESD + if (iJETANESD && !iAODanalysis) { + gROOT->LoadMacro("AddTaskJets.C"); + AliAnalysisTaskJets *jetanaESD = AddTaskJets("ESD","UA1"); + jetanaESD->SetDebugLevel(0); + jetanaESD->SetNonStdBranch("jetsESD"); + } + // Jet analysisMC + if (iJETANMC ){ + gROOT->LoadMacro("AddTaskJets.C"); + // AliAnalysisTaskJets *jetanaMC = AddTaskJets("AODMC","UA1",0.4); + AliAnalysisTaskJets *jetanaMC = AddTaskJets("AODMC","UA1",0.4); + jetanaMC->SetDebugLevel(0); + jetanaMC->SetNonStdBranch("jetsMC_UA1"); + } + if (iJETANMC2 ){ + gROOT->LoadMacro("AddTaskJets.C"); + // AliAnalysisTaskJets *jetanaMC2 = AddTaskJets("AODMC2","UA1",0.4); + AliAnalysisTaskJets *jetanaMC2 = AddTaskJets("AODMC2","UA1",0.4); + jetanaMC2->SetDebugLevel(0); + jetanaMC2->SetNonStdBranch("jetsMC2_UA1"); + } + // Dijet analysis + if(iDIJETAN){ + gROOT->LoadMacro("AddTaskDiJets.C"); + AliAnalysisTaskDiJets *dijetana = AddTaskDiJets(); + } + if (iPWG4SPECTRUM) { + gROOT->LoadMacro("AddTaskJetSpectrum2.C"); + AliAnalysisTaskJetSpectrum2* pwg4spec = AddTaskJetSpectrum2(); + pwg4spec->SetAODInput(kTRUE); + pwg4spec->SetBranchRec("jets"); + pwg4spec->SetAnalysisType(0); + pwg4spec->SetDebugLevel(0); + } + if (iPWG4JFSYSTEMATICS) { + gROOT->LoadMacro("AddTaskJFSystematics.C"); + AliAnalysisTaskJFSystematics* pwg4jfs = AddTaskJFSystematics("jetsMC","jets"); + pwg4jfs->SetAODInput(kTRUE); + pwg4jfs->SetDebugLevel(0); + } + if (iPWG4JETCORRECTION) { + gROOT->LoadMacro("AddTaskJetCorrections.C"); + AliAnalysisTaskJetCorrections* pwg4jc = AddTaskJetCorrections(); + pwg4jc->SetDebugLevel(11); + } + if (iPWG4THREEJETS) { + gROOT->LoadMacro("AddTaskThreeJets.C"); + AliAnalysisTaskThreeJets* pwg4jjj = AddTaskThreeJets(); + pwg4jjj->SetDebugLevel(11); + } + if (iPWG4UE) { + gROOT->LoadMacro("AddTaskUE.C"); + AliAnalysisTaskUE* ueana = AddTaskUE(); + } + if(iPWG4PID){ + gROOT->LoadMacro("AddTaskPWG4PidDetEx.C"); + AliAnalysisTaskPWG4PidDetEx *taskPid = AddTaskPWG4PidDetEx(); + taskPid->SetDebugLevel(0); + } + // Run the analysis + // + if (mgr->InitAnalysis()) { + mgr->PrintStatus(); + Printf("Chain with %d entries",chain->GetEntries()); + if(bPROOF)mgr->StartAnalysis("proof",dataset.Data(), nEvents,nOffset); + else mgr->StartAnalysis("local",chain,nEvents); + } +} +TChain *CreateChainFromCollection(const char* xmlfile, const char *treeName="esdTree",Int_t nFiles = 0) +{ +// Create a chain from an alien collection. + TAlienCollection * myCollection = TAlienCollection::Open(xmlfile); + + if (!myCollection) { + ::Error("CreateChainSingle", "Cannot create an AliEn collection from %s", xmlfile) ; + return NULL ; + } + + TChain* chain = new TChain(treeName); + myCollection->Reset() ; + Int_t iCount = 0; + while ( myCollection->Next() ){ + if(nFiles!=0)iCount++; + if(iCount > nFiles)break; + chain->Add(myCollection->GetTURL("")) ; + Printf("Adding %s",myCollection->GetTURL("")); + } + chain->ls(); + return chain; +} + + +void SetupPar(char* pararchivename) +{ + //Load par files, create analysis libraries + //For testing, if par file already decompressed and modified + //classes then do not decompress. + + TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; + TString parpar(Form("%s.par", pararchivename)) ; + /* + if ( gSystem->AccessPathName(parpar.Data()) ) { + gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ; + TString processline(Form(".! make %s", parpar.Data())) ; + gROOT->ProcessLine(processline.Data()) ; + gSystem->ChangeDirectory(cdir) ; + processline = Form(".! mv /tmp/%s .", parpar.Data()) ; + gROOT->ProcessLine(processline.Data()) ; + } + */ + + if (!gSystem->AccessPathName(pararchivename) ) { + TString processline = Form(".! tar xvzf %s",parpar.Data()) ; + gROOT->ProcessLine(processline.Data()); + } + + TString ocwd = gSystem->WorkingDirectory(); + gSystem->ChangeDirectory(pararchivename); + + // check for BUILD.sh and execute + if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { + printf("*******************************\n"); + printf("*** Building PAR archive ***\n"); + cout<Exec("PROOF-INF/BUILD.sh")) { + Error("runProcess","Cannot Build the PAR Archive! - Abort!"); + return -1; + } + } + // check for SETUP.C and execute + if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { + printf("*******************************\n"); + printf("*** Setup PAR archive ***\n"); + cout<Macro("PROOF-INF/SETUP.C"); + } + + gSystem->ChangeDirectory(ocwd.Data()); + printf("Current dir: %s\n", ocwd.Data()); +} diff --git a/PWGLF/FORWARD/photons/AliAnalysisTaskPMD.h b/PWGLF/FORWARD/photons/AliAnalysisTaskPMD.h index 37b85405a96..a71738fb264 100644 --- a/PWGLF/FORWARD/photons/AliAnalysisTaskPMD.h +++ b/PWGLF/FORWARD/photons/AliAnalysisTaskPMD.h @@ -1,64 +1,64 @@ -#ifndef AliAnalysisTaskPMD_cxx -#define AliAnalysisTaskPMD_cxx - -// AnalysisTask For PMD -// Authors: Sudipan De, Subhash Singha - -class TH1F; -class TH2F; -class AliESDEvent; -class AliESDPmdTrack; -class AliESDVertex; - -#include - -class AliAnalysisTaskPMD : public AliAnalysisTaskSE { - public: - AliAnalysisTaskPMD() : AliAnalysisTaskSE(), - fESD(0), - fOutputList(0), - fHistTotEvent(0), - fHistTotEventAfterPhySel(0), - fHistTotEventAfterVtx(0), - fHistVtxZ(0), - fHistXYPre(0), - fHistEta(0), - fHistEta1(0), - fHistMultMeas(0), - fHistMultMeas1(0) - { - for(Int_t i=0; i<10; i++){ - fHistMultMeasEtaBinA[i] = 0; - fHistMultMeasEtaBinA1[i] = 0; - } - } - AliAnalysisTaskPMD(const char *name); - virtual ~AliAnalysisTaskPMD() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - private: - AliESDEvent *fESD; //! ESD object - TList *fOutputList; //! Output list - TH1F *fHistTotEvent; //total event - TH1F *fHistTotEventAfterPhySel; //# event after physics selection - TH1F *fHistTotEventAfterVtx; //# event after vertex cut - TH1F *fHistVtxZ;//z vertex distribution - TH2F *fHistXYPre;//2d scatter plot pre - TH1F *fHistEta; // eta distribution in PMD coverage - TH1F *fHistEta1; // eta distribution in PMD coverage - TH1F *fHistMultMeas;//measured multiplicity (2.3-3.9) - TH1F *fHistMultMeas1;//measured multiplicity (2.3-3.9) - - TH1F *fHistMultMeasEtaBinA[10];//meas. mult. dist. for diff. eta bins - TH1F *fHistMultMeasEtaBinA1[10];//meas. mult. dist. for diff. eta bins - - AliAnalysisTaskPMD(const AliAnalysisTaskPMD&); // not implemented - AliAnalysisTaskPMD& operator=(const AliAnalysisTaskPMD&); // not implemented - - ClassDef(AliAnalysisTaskPMD, 1); // example of analysis -}; - -#endif +#ifndef AliAnalysisTaskPMD_cxx +#define AliAnalysisTaskPMD_cxx + +// AnalysisTask For PMD +// Authors: Sudipan De, Subhash Singha + +class TH1F; +class TH2F; +class AliESDEvent; +class AliESDPmdTrack; +class AliESDVertex; + +#include + +class AliAnalysisTaskPMD : public AliAnalysisTaskSE { + public: + AliAnalysisTaskPMD() : AliAnalysisTaskSE(), + fESD(0), + fOutputList(0), + fHistTotEvent(0), + fHistTotEventAfterPhySel(0), + fHistTotEventAfterVtx(0), + fHistVtxZ(0), + fHistXYPre(0), + fHistEta(0), + fHistEta1(0), + fHistMultMeas(0), + fHistMultMeas1(0) + { + for(Int_t i=0; i<10; i++){ + fHistMultMeasEtaBinA[i] = 0; + fHistMultMeasEtaBinA1[i] = 0; + } + } + AliAnalysisTaskPMD(const char *name); + virtual ~AliAnalysisTaskPMD() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + private: + AliESDEvent *fESD; //! ESD object + TList *fOutputList; //! Output list + TH1F *fHistTotEvent; //total event + TH1F *fHistTotEventAfterPhySel; //# event after physics selection + TH1F *fHistTotEventAfterVtx; //# event after vertex cut + TH1F *fHistVtxZ;//z vertex distribution + TH2F *fHistXYPre;//2d scatter plot pre + TH1F *fHistEta; // eta distribution in PMD coverage + TH1F *fHistEta1; // eta distribution in PMD coverage + TH1F *fHistMultMeas;//measured multiplicity (2.3-3.9) + TH1F *fHistMultMeas1;//measured multiplicity (2.3-3.9) + + TH1F *fHistMultMeasEtaBinA[10];//meas. mult. dist. for diff. eta bins + TH1F *fHistMultMeasEtaBinA1[10];//meas. mult. dist. for diff. eta bins + + AliAnalysisTaskPMD(const AliAnalysisTaskPMD&); // not implemented + AliAnalysisTaskPMD& operator=(const AliAnalysisTaskPMD&); // not implemented + + ClassDef(AliAnalysisTaskPMD, 1); // example of analysis +}; + +#endif diff --git a/PWGLF/FORWARD/photons/AliAnalysisTaskPMDSim.h b/PWGLF/FORWARD/photons/AliAnalysisTaskPMDSim.h index 341394acd50..1390aea83c5 100644 --- a/PWGLF/FORWARD/photons/AliAnalysisTaskPMDSim.h +++ b/PWGLF/FORWARD/photons/AliAnalysisTaskPMDSim.h @@ -1,81 +1,81 @@ -#ifndef AliAnalysisTaskPMDSim_cxx -#define AliAnalysisTaskPMDSim_cxx - -// AnalysisTask For PMD -// Authors: Sudipan De, Subhash Singha - -class TH1F; -class TH2F; -class AliESDEvent; -class AliESDPmdTrack; -class AliESDVertex; -class AliStack; -class AliHeader; -class AliGenEventHeader; -class TParticle; - -#include - -class AliAnalysisTaskPMDSim : public AliAnalysisTaskSE { - public: - AliAnalysisTaskPMDSim() : AliAnalysisTaskSE(), - fESD(0), - fOutputList(0), - fHistTotEvent(0), - fHistTotEventAfterPhySel(0), - fHistTotEventAfterVtx(0), - fVtxZ(0), - fHistXYPre(0), - fHistEtaPhM(0), - fHistEtaPhM1(0), - fHistEtaT(0), - fMultMeasured(0), - fMultMeasured1(0), - fMultTrue(0), - fMultCorr(0), - fMultCorr1(0) { - for(Int_t i=0; i<10; i++){ - fHistMultMeasEtaBinA[i] = 0; - fHistMultMeasEtaBinA1[i] = 0; - fHistMultTrueEtaBinA[i] = 0; - fHistMultCorrEtaBinA[i] = 0; - fHistMultCorrEtaBinA1[i] = 0; - } - } - AliAnalysisTaskPMDSim(const char *name); - virtual ~AliAnalysisTaskPMDSim() {} - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - private: - AliESDEvent *fESD; //! ESD object - TList *fOutputList; //! Output list - TH1F *fHistTotEvent; //total event - TH1F *fHistTotEventAfterPhySel; //total event after physel - TH1F *fHistTotEventAfterVtx; //# event after vertex cut - TH1F *fVtxZ;//Vertex Z - TH2F *fHistXYPre;//2d scatter plot pre - TH1F *fHistEtaPhM; - TH1F *fHistEtaPhM1; - TH1F *fHistEtaT; - TH1F *fMultMeasured; - TH1F *fMultMeasured1; - TH1F *fMultTrue; - TH2F *fMultCorr; - TH2F *fMultCorr1; - - TH2F *fHistMultCorrEtaBinA[10];//mult. corr. for diff. eta bin - TH2F *fHistMultCorrEtaBinA1[10];//mult. corr. for diff. eta bin - TH1F *fHistMultTrueEtaBinA[10];//multTrue - TH1F *fHistMultMeasEtaBinA[10];//meas. mult. dist. for diff. eta bins - TH1F *fHistMultMeasEtaBinA1[10];//meas. mult. dist. for diff. eta bins - - AliAnalysisTaskPMDSim(const AliAnalysisTaskPMDSim&); // not implemented - AliAnalysisTaskPMDSim& operator=(const AliAnalysisTaskPMDSim&); // not implemented - - ClassDef(AliAnalysisTaskPMDSim, 1); // example of analysis -}; - -#endif +#ifndef AliAnalysisTaskPMDSim_cxx +#define AliAnalysisTaskPMDSim_cxx + +// AnalysisTask For PMD +// Authors: Sudipan De, Subhash Singha + +class TH1F; +class TH2F; +class AliESDEvent; +class AliESDPmdTrack; +class AliESDVertex; +class AliStack; +class AliHeader; +class AliGenEventHeader; +class TParticle; + +#include + +class AliAnalysisTaskPMDSim : public AliAnalysisTaskSE { + public: + AliAnalysisTaskPMDSim() : AliAnalysisTaskSE(), + fESD(0), + fOutputList(0), + fHistTotEvent(0), + fHistTotEventAfterPhySel(0), + fHistTotEventAfterVtx(0), + fVtxZ(0), + fHistXYPre(0), + fHistEtaPhM(0), + fHistEtaPhM1(0), + fHistEtaT(0), + fMultMeasured(0), + fMultMeasured1(0), + fMultTrue(0), + fMultCorr(0), + fMultCorr1(0) { + for(Int_t i=0; i<10; i++){ + fHistMultMeasEtaBinA[i] = 0; + fHistMultMeasEtaBinA1[i] = 0; + fHistMultTrueEtaBinA[i] = 0; + fHistMultCorrEtaBinA[i] = 0; + fHistMultCorrEtaBinA1[i] = 0; + } + } + AliAnalysisTaskPMDSim(const char *name); + virtual ~AliAnalysisTaskPMDSim() {} + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + private: + AliESDEvent *fESD; //! ESD object + TList *fOutputList; //! Output list + TH1F *fHistTotEvent; //total event + TH1F *fHistTotEventAfterPhySel; //total event after physel + TH1F *fHistTotEventAfterVtx; //# event after vertex cut + TH1F *fVtxZ;//Vertex Z + TH2F *fHistXYPre;//2d scatter plot pre + TH1F *fHistEtaPhM; + TH1F *fHistEtaPhM1; + TH1F *fHistEtaT; + TH1F *fMultMeasured; + TH1F *fMultMeasured1; + TH1F *fMultTrue; + TH2F *fMultCorr; + TH2F *fMultCorr1; + + TH2F *fHistMultCorrEtaBinA[10];//mult. corr. for diff. eta bin + TH2F *fHistMultCorrEtaBinA1[10];//mult. corr. for diff. eta bin + TH1F *fHistMultTrueEtaBinA[10];//multTrue + TH1F *fHistMultMeasEtaBinA[10];//meas. mult. dist. for diff. eta bins + TH1F *fHistMultMeasEtaBinA1[10];//meas. mult. dist. for diff. eta bins + + AliAnalysisTaskPMDSim(const AliAnalysisTaskPMDSim&); // not implemented + AliAnalysisTaskPMDSim& operator=(const AliAnalysisTaskPMDSim&); // not implemented + + ClassDef(AliAnalysisTaskPMDSim, 1); // example of analysis +}; + +#endif diff --git a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonAbsorptionCorrection.h b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonAbsorptionCorrection.h index bc49a9f87d4..42d0f8c3da1 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonAbsorptionCorrection.h +++ b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonAbsorptionCorrection.h @@ -1,82 +1,82 @@ -#ifndef ALIPROTONABSORPTIONCORRECTION_H -#define ALIPROTONABSORPTIONCORRECTION_H - -//------------------------------------------------------------------------- -// Class AliProtonAbsorptionCorrection -// This is the class for the absorption corrections used for -// the baryon (proton) ratio analysis -// -// Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch -//------------------------------------------------------------------------- - -#include "TObject.h" -#include "TH1I.h" -#include "AliCFContainer.h" -#include "AliCFManager.h" - -class TF1; -class TH2D; -class TH1F; -class TList; - -class AliPID; -class AliCFDataGrid; -class AliAODEvent; -class AliAODtrack; -class AliESDEvent; -class AliESDtrack; -class AliExternalTrackParam; -class AliStack; -class AliESDVertex; -class AliProtonAnalysisBase; -class AliMCEvent; - -class AliProtonAbsorptionCorrection : public TObject { - public: - enum { - kStepGenerated = 0, - kStepReconstructible = 1, - kStepReconstructed = 2, - kNSteps = 3 - }; - - AliProtonAbsorptionCorrection(); - virtual ~AliProtonAbsorptionCorrection(); - - void SetBaseAnalysis(AliProtonAnalysisBase * const baseAnalysis) { - fProtonAnalysisBase = baseAnalysis;} - AliProtonAnalysisBase *GetProtonAnalysisBaseObject() const { - return fProtonAnalysisBase;} - - void InitAnalysisHistograms(Int_t nbinsY, Float_t fLowY, Float_t fHighY, - Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); - void FillAbsorptionMaps(AliESDEvent *fESD, - //const AliESDVertex *vertex, - AliMCEvent *mcEvent); - void FillAbsorptionMaps(AliAODEvent *fAOD); - - AliCFContainer *GetProtonContainer() const { - return fCFManagerProtons->GetParticleContainer();} - AliCFContainer *GetAntiProtonContainer() const { - return fCFManagerAntiProtons->GetParticleContainer();} - - private: - AliProtonAbsorptionCorrection(const AliProtonAbsorptionCorrection&); // Not implemented - AliProtonAbsorptionCorrection& operator=(const AliProtonAbsorptionCorrection&); // Not implemented - - AliProtonAnalysisBase *fProtonAnalysisBase;//base analysis object - - Int_t fNBinsY; //number of bins in y or eta - Double_t fMinY, fMaxY; //min & max value of y or eta - Int_t fNBinsPt; //number of bins in pT - Double_t fMinPt, fMaxPt; //min & max value of pT - - //Analysis containers - AliCFManager *fCFManagerProtons; // CF manager protons - AliCFManager *fCFManagerAntiProtons; // CF manager antiprotons - - ClassDef(AliProtonAbsorptionCorrection,1); -}; - -#endif - +#ifndef ALIPROTONABSORPTIONCORRECTION_H +#define ALIPROTONABSORPTIONCORRECTION_H + +//------------------------------------------------------------------------- +// Class AliProtonAbsorptionCorrection +// This is the class for the absorption corrections used for +// the baryon (proton) ratio analysis +// +// Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch +//------------------------------------------------------------------------- + +#include "TObject.h" +#include "TH1I.h" +#include "AliCFContainer.h" +#include "AliCFManager.h" + +class TF1; +class TH2D; +class TH1F; +class TList; + +class AliPID; +class AliCFDataGrid; +class AliAODEvent; +class AliAODtrack; +class AliESDEvent; +class AliESDtrack; +class AliExternalTrackParam; +class AliStack; +class AliESDVertex; +class AliProtonAnalysisBase; +class AliMCEvent; + +class AliProtonAbsorptionCorrection : public TObject { + public: + enum { + kStepGenerated = 0, + kStepReconstructible = 1, + kStepReconstructed = 2, + kNSteps = 3 + }; + + AliProtonAbsorptionCorrection(); + virtual ~AliProtonAbsorptionCorrection(); + + void SetBaseAnalysis(AliProtonAnalysisBase * const baseAnalysis) { + fProtonAnalysisBase = baseAnalysis;} + AliProtonAnalysisBase *GetProtonAnalysisBaseObject() const { + return fProtonAnalysisBase;} + + void InitAnalysisHistograms(Int_t nbinsY, Float_t fLowY, Float_t fHighY, + Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); + void FillAbsorptionMaps(AliESDEvent *fESD, + //const AliESDVertex *vertex, + AliMCEvent *mcEvent); + void FillAbsorptionMaps(AliAODEvent *fAOD); + + AliCFContainer *GetProtonContainer() const { + return fCFManagerProtons->GetParticleContainer();} + AliCFContainer *GetAntiProtonContainer() const { + return fCFManagerAntiProtons->GetParticleContainer();} + + private: + AliProtonAbsorptionCorrection(const AliProtonAbsorptionCorrection&); // Not implemented + AliProtonAbsorptionCorrection& operator=(const AliProtonAbsorptionCorrection&); // Not implemented + + AliProtonAnalysisBase *fProtonAnalysisBase;//base analysis object + + Int_t fNBinsY; //number of bins in y or eta + Double_t fMinY, fMaxY; //min & max value of y or eta + Int_t fNBinsPt; //number of bins in pT + Double_t fMinPt, fMaxPt; //min & max value of pT + + //Analysis containers + AliCFManager *fCFManagerProtons; // CF manager protons + AliCFManager *fCFManagerAntiProtons; // CF manager antiprotons + + ClassDef(AliProtonAbsorptionCorrection,1); +}; + +#endif + diff --git a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.cxx b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.cxx index fdfb359dd02..2f39244c32f 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.cxx +++ b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.cxx @@ -1,253 +1,253 @@ -#include "TChain.h" -#include "TTree.h" -#include "TString.h" -#include "TList.h" -#include "TH2F.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" - -#include "AliESDEvent.h" -#include "AliESDInputHandler.h" -#include "AliAODEvent.h" -#include "AliAODInputHandler.h" -#include "AliMCEventHandler.h" -#include "AliMCEvent.h" -#include "AliStack.h" -#include "AliESDVertex.h" - -#include "AliProtonFeedDownAnalysis.h" -#include "AliProtonAnalysisBase.h" -#include "AliProtonCorrectionAnalysisTask.h" - -#include "AliProtonAbsorptionCorrection.h" -#include "AliProtonSpectraCorrection.h" - -#include - -ClassImp(AliProtonCorrectionAnalysisTask) - -//________________________________________________________________________ -AliProtonCorrectionAnalysisTask::AliProtonCorrectionAnalysisTask() - : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0), - fList(0),fProtonAnalysisBase(0),fProtonAbsorptionCorrection(0), fProtonFeedDownAnalysis(0),fProtonSpectraCorrection(0),fStatHist(0), - fIsOn_AliProtonAbsorptionCorrection(0),fIsOn_AliProtonFeedDownAnalysis(0),fIsOn_AliProtonSpectraCorrection(0) - { - //Dummy constructor - -} - -//________________________________________________________________________ -AliProtonCorrectionAnalysisTask::AliProtonCorrectionAnalysisTask(const char *name) - : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), - fList(0),fProtonAnalysisBase(0),fProtonAbsorptionCorrection(0), fProtonFeedDownAnalysis(0),fProtonSpectraCorrection(0),fStatHist(0), - fIsOn_AliProtonAbsorptionCorrection(0),fIsOn_AliProtonFeedDownAnalysis(0),fIsOn_AliProtonSpectraCorrection(0) - { - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TList container - DefineOutput(0, TList::Class()); -} - -//________________________________________________________________________ -void AliProtonCorrectionAnalysisTask::ConnectInputData(Option_t *) -{ - // Connect ESD or AOD here - // Called once - TString gAnalysisLevel = fProtonAnalysisBase->GetAnalysisLevel(); - - TTree* tree = dynamic_cast (GetInputData(0)); - if (!tree) - { - Printf("ERROR: Could not read chain from input slot 0"); - } - else - { - if(gAnalysisLevel == "ESD") - { - AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - if (!esdH) - { - Printf("ERROR: Could not get ESDInputHandler"); - } - else - fESD = esdH->GetEvent(); - AliMCEventHandler* mcH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); - if (!mcH) - { - Printf("ERROR: Could not retrieve MC event handler"); - } - else - fMC = mcH->MCEvent(); - } - else if(gAnalysisLevel == "AOD") - { - AliAODInputHandler *aodH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - if (!aodH) - { - Printf("ERROR: Could not get AODInputHandler"); - } - else - fAOD = aodH->GetEvent(); - } - else - Printf("Wrong analysis type: Only ESD, AOD types are allowed!"); - } -} -//________________________________________________________________________ -void AliProtonCorrectionAnalysisTask::CreateOutputObjects() -{ - // Create output objects - // Called once - fList = new TList(); - if(fIsOn_AliProtonAbsorptionCorrection) - { - fProtonAbsorptionCorrection->GetProtonContainer()->SetName("containerProtonsAbsorptionCorrection"); - fList->Add(fProtonAbsorptionCorrection->GetProtonContainer()); - fProtonAbsorptionCorrection->GetAntiProtonContainer()->SetName("containerAntiProtonsAbsorptionCorrection"); - fList->Add(fProtonAbsorptionCorrection->GetAntiProtonContainer()); - } - if(fIsOn_AliProtonFeedDownAnalysis) - { - fProtonFeedDownAnalysis->GetProtonContainer()->SetName("containerProtonsFeedDown"); - fList->Add(fProtonFeedDownAnalysis->GetProtonContainer()); - fProtonFeedDownAnalysis->GetAntiProtonContainer()->SetName("containerAntiProtonsFeedDown"); - fList->Add(fProtonFeedDownAnalysis->GetAntiProtonContainer()); - fList->Add(fProtonFeedDownAnalysis->GetLambdaHist()); - fList->Add(fProtonFeedDownAnalysis->GetLambdaweightedHist()); - fList->Add(fProtonFeedDownAnalysis->GetAntiLambdaHist()); - fList->Add(fProtonFeedDownAnalysis->GetAntiLambdaweightedHist()); - } - if(fIsOn_AliProtonSpectraCorrection) - { - fProtonSpectraCorrection->GetProtonContainer()->SetName("containerProtonsSpectraCorrection"); - fList->Add(fProtonSpectraCorrection->GetProtonContainer()); - fProtonSpectraCorrection->GetProtonContainer()->SetName("containerAntiProtonsSpectraCorrection"); - fList->Add(fProtonSpectraCorrection->GetAntiProtonContainer()); - } - fStatHist=new TH1F("StatsHist","StatsHist",10,-0.5,9.5); - fList->Add(fStatHist); - fStatHist->GetXaxis()->SetBinLabel(1,"level1cutESD"); - fStatHist->GetXaxis()->SetBinLabel(2,"level2cutTrigger"); - fStatHist->GetXaxis()->SetBinLabel(3,"level3cutVerstex"); - fStatHist->GetXaxis()->SetBinLabel(4,"level4cutMC"); -} -//________________________________________________________________________ -void AliProtonCorrectionAnalysisTask::Exec(Option_t *) -{ - // Main loop - // Called for each event - TString gAnalysisLevel =fProtonAnalysisBase->GetAnalysisLevel(); - //TString gAnalysisLevel = (fProtonFeedDownAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); - if(gAnalysisLevel == "ESD") - { - if (!fESD) - { - Printf("ERROR: fESD not available"); - return; - } - fStatHist->Fill(0); - if(fProtonAnalysisBase->IsEventTriggered(fESD,fProtonAnalysisBase->GetTriggerMode())) - { - fStatHist->Fill(1); - const AliESDVertex *vertex = fProtonAnalysisBase->GetVertex(fESD,fProtonAnalysisBase->GetAnalysisMode(),fProtonAnalysisBase->GetVxMax(),fProtonAnalysisBase->GetVyMax(),fProtonAnalysisBase->GetVzMax()); - if(vertex) - { - fStatHist->Fill(2); - Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks()); - AliStack* stack1=0x0; - if(!fMC) - return; - stack1 = fMC->Stack(); - if(!stack1) - return; - fStatHist->Fill(3); - if(fIsOn_AliProtonAbsorptionCorrection) - //fProtonAbsorptionCorrection->FillAbsorptionMaps(fESD,vertex,fMC); - fProtonAbsorptionCorrection->FillAbsorptionMaps(fESD,fMC); - if(fIsOn_AliProtonFeedDownAnalysis) - { - fProtonFeedDownAnalysis->Analyze(fESD,vertex,stack1); - fProtonFeedDownAnalysis->Analyze(stack1); - } - if(fIsOn_AliProtonSpectraCorrection) - fProtonSpectraCorrection->FillCorrectionMaps(fESD,vertex,fMC); - - }//reconstructed vertex - }//triggered event - }//ESD analysis - - else if(gAnalysisLevel == "AOD") - { - if (!fAOD) - { - Printf("ERROR: fAOD not available"); - return; - } - Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks()); - if(fIsOn_AliProtonAbsorptionCorrection) - fProtonAbsorptionCorrection->FillAbsorptionMaps(fAOD); - if(fIsOn_AliProtonFeedDownAnalysis) - fProtonFeedDownAnalysis->Analyze(fAOD); - if(fIsOn_AliProtonSpectraCorrection) - fProtonSpectraCorrection->FillCorrectionMaps(fAOD); - }//AOD analysis - - - // Post output data. - PostData(0, fList); -} -//__________________________________________________________________________________________ -void AliProtonCorrectionAnalysisTask::Terminate(Option_t *) -{ - -} -//___________________________________________________________________________________________ -void AliProtonCorrectionAnalysisTask::SetAnalysisObjectAbsorptionCorrection(AliProtonAbsorptionCorrection *const analysis) -{ - if (analysis&&fProtonAnalysisBase) - { - Printf("Absorption Correection ON\n"); - fIsOn_AliProtonAbsorptionCorrection=kTRUE; - fProtonAbsorptionCorrection = analysis; - fProtonAbsorptionCorrection->SetBaseAnalysis(fProtonAnalysisBase); - fProtonAbsorptionCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY()); - } - else - fIsOn_AliProtonAbsorptionCorrection=kFALSE; -} -//___________________________________________________________________________________________ -void AliProtonCorrectionAnalysisTask::SetAnalysisObjectFeedDown(AliProtonFeedDownAnalysis *const analysis) -{ - if (analysis&&fProtonAnalysisBase) - { - Printf("Feed Down ON\n"); - fIsOn_AliProtonFeedDownAnalysis=kTRUE; - fProtonFeedDownAnalysis = analysis; - fProtonFeedDownAnalysis->SetBaseAnalysis(fProtonAnalysisBase); - fProtonFeedDownAnalysis->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY()); - } - else - fIsOn_AliProtonFeedDownAnalysis=kFALSE; -} -//___________________________________________________________________________________________ -void AliProtonCorrectionAnalysisTask::SetAnalysisObjectSpectraCorrection(AliProtonSpectraCorrection *const analysis) -{ - if (analysis&&fProtonAnalysisBase) - { - Printf("Spectra Correection ON\n"); - fIsOn_AliProtonSpectraCorrection=kTRUE; - fProtonSpectraCorrection= analysis; - fProtonSpectraCorrection->SetBaseAnalysis(fProtonAnalysisBase); - fProtonSpectraCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY()); - } - else - fIsOn_AliProtonSpectraCorrection=kFALSE; -} - - - - +#include "TChain.h" +#include "TTree.h" +#include "TString.h" +#include "TList.h" +#include "TH2F.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" + +#include "AliESDEvent.h" +#include "AliESDInputHandler.h" +#include "AliAODEvent.h" +#include "AliAODInputHandler.h" +#include "AliMCEventHandler.h" +#include "AliMCEvent.h" +#include "AliStack.h" +#include "AliESDVertex.h" + +#include "AliProtonFeedDownAnalysis.h" +#include "AliProtonAnalysisBase.h" +#include "AliProtonCorrectionAnalysisTask.h" + +#include "AliProtonAbsorptionCorrection.h" +#include "AliProtonSpectraCorrection.h" + +#include + +ClassImp(AliProtonCorrectionAnalysisTask) + +//________________________________________________________________________ +AliProtonCorrectionAnalysisTask::AliProtonCorrectionAnalysisTask() + : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0), + fList(0),fProtonAnalysisBase(0),fProtonAbsorptionCorrection(0), fProtonFeedDownAnalysis(0),fProtonSpectraCorrection(0),fStatHist(0), + fIsOn_AliProtonAbsorptionCorrection(0),fIsOn_AliProtonFeedDownAnalysis(0),fIsOn_AliProtonSpectraCorrection(0) + { + //Dummy constructor + +} + +//________________________________________________________________________ +AliProtonCorrectionAnalysisTask::AliProtonCorrectionAnalysisTask(const char *name) + : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), + fList(0),fProtonAnalysisBase(0),fProtonAbsorptionCorrection(0), fProtonFeedDownAnalysis(0),fProtonSpectraCorrection(0),fStatHist(0), + fIsOn_AliProtonAbsorptionCorrection(0),fIsOn_AliProtonFeedDownAnalysis(0),fIsOn_AliProtonSpectraCorrection(0) + { + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TList container + DefineOutput(0, TList::Class()); +} + +//________________________________________________________________________ +void AliProtonCorrectionAnalysisTask::ConnectInputData(Option_t *) +{ + // Connect ESD or AOD here + // Called once + TString gAnalysisLevel = fProtonAnalysisBase->GetAnalysisLevel(); + + TTree* tree = dynamic_cast (GetInputData(0)); + if (!tree) + { + Printf("ERROR: Could not read chain from input slot 0"); + } + else + { + if(gAnalysisLevel == "ESD") + { + AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!esdH) + { + Printf("ERROR: Could not get ESDInputHandler"); + } + else + fESD = esdH->GetEvent(); + AliMCEventHandler* mcH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); + if (!mcH) + { + Printf("ERROR: Could not retrieve MC event handler"); + } + else + fMC = mcH->MCEvent(); + } + else if(gAnalysisLevel == "AOD") + { + AliAODInputHandler *aodH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!aodH) + { + Printf("ERROR: Could not get AODInputHandler"); + } + else + fAOD = aodH->GetEvent(); + } + else + Printf("Wrong analysis type: Only ESD, AOD types are allowed!"); + } +} +//________________________________________________________________________ +void AliProtonCorrectionAnalysisTask::CreateOutputObjects() +{ + // Create output objects + // Called once + fList = new TList(); + if(fIsOn_AliProtonAbsorptionCorrection) + { + fProtonAbsorptionCorrection->GetProtonContainer()->SetName("containerProtonsAbsorptionCorrection"); + fList->Add(fProtonAbsorptionCorrection->GetProtonContainer()); + fProtonAbsorptionCorrection->GetAntiProtonContainer()->SetName("containerAntiProtonsAbsorptionCorrection"); + fList->Add(fProtonAbsorptionCorrection->GetAntiProtonContainer()); + } + if(fIsOn_AliProtonFeedDownAnalysis) + { + fProtonFeedDownAnalysis->GetProtonContainer()->SetName("containerProtonsFeedDown"); + fList->Add(fProtonFeedDownAnalysis->GetProtonContainer()); + fProtonFeedDownAnalysis->GetAntiProtonContainer()->SetName("containerAntiProtonsFeedDown"); + fList->Add(fProtonFeedDownAnalysis->GetAntiProtonContainer()); + fList->Add(fProtonFeedDownAnalysis->GetLambdaHist()); + fList->Add(fProtonFeedDownAnalysis->GetLambdaweightedHist()); + fList->Add(fProtonFeedDownAnalysis->GetAntiLambdaHist()); + fList->Add(fProtonFeedDownAnalysis->GetAntiLambdaweightedHist()); + } + if(fIsOn_AliProtonSpectraCorrection) + { + fProtonSpectraCorrection->GetProtonContainer()->SetName("containerProtonsSpectraCorrection"); + fList->Add(fProtonSpectraCorrection->GetProtonContainer()); + fProtonSpectraCorrection->GetProtonContainer()->SetName("containerAntiProtonsSpectraCorrection"); + fList->Add(fProtonSpectraCorrection->GetAntiProtonContainer()); + } + fStatHist=new TH1F("StatsHist","StatsHist",10,-0.5,9.5); + fList->Add(fStatHist); + fStatHist->GetXaxis()->SetBinLabel(1,"level1cutESD"); + fStatHist->GetXaxis()->SetBinLabel(2,"level2cutTrigger"); + fStatHist->GetXaxis()->SetBinLabel(3,"level3cutVerstex"); + fStatHist->GetXaxis()->SetBinLabel(4,"level4cutMC"); +} +//________________________________________________________________________ +void AliProtonCorrectionAnalysisTask::Exec(Option_t *) +{ + // Main loop + // Called for each event + TString gAnalysisLevel =fProtonAnalysisBase->GetAnalysisLevel(); + //TString gAnalysisLevel = (fProtonFeedDownAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); + if(gAnalysisLevel == "ESD") + { + if (!fESD) + { + Printf("ERROR: fESD not available"); + return; + } + fStatHist->Fill(0); + if(fProtonAnalysisBase->IsEventTriggered(fESD,fProtonAnalysisBase->GetTriggerMode())) + { + fStatHist->Fill(1); + const AliESDVertex *vertex = fProtonAnalysisBase->GetVertex(fESD,fProtonAnalysisBase->GetAnalysisMode(),fProtonAnalysisBase->GetVxMax(),fProtonAnalysisBase->GetVyMax(),fProtonAnalysisBase->GetVzMax()); + if(vertex) + { + fStatHist->Fill(2); + Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks()); + AliStack* stack1=0x0; + if(!fMC) + return; + stack1 = fMC->Stack(); + if(!stack1) + return; + fStatHist->Fill(3); + if(fIsOn_AliProtonAbsorptionCorrection) + //fProtonAbsorptionCorrection->FillAbsorptionMaps(fESD,vertex,fMC); + fProtonAbsorptionCorrection->FillAbsorptionMaps(fESD,fMC); + if(fIsOn_AliProtonFeedDownAnalysis) + { + fProtonFeedDownAnalysis->Analyze(fESD,vertex,stack1); + fProtonFeedDownAnalysis->Analyze(stack1); + } + if(fIsOn_AliProtonSpectraCorrection) + fProtonSpectraCorrection->FillCorrectionMaps(fESD,vertex,fMC); + + }//reconstructed vertex + }//triggered event + }//ESD analysis + + else if(gAnalysisLevel == "AOD") + { + if (!fAOD) + { + Printf("ERROR: fAOD not available"); + return; + } + Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks()); + if(fIsOn_AliProtonAbsorptionCorrection) + fProtonAbsorptionCorrection->FillAbsorptionMaps(fAOD); + if(fIsOn_AliProtonFeedDownAnalysis) + fProtonFeedDownAnalysis->Analyze(fAOD); + if(fIsOn_AliProtonSpectraCorrection) + fProtonSpectraCorrection->FillCorrectionMaps(fAOD); + }//AOD analysis + + + // Post output data. + PostData(0, fList); +} +//__________________________________________________________________________________________ +void AliProtonCorrectionAnalysisTask::Terminate(Option_t *) +{ + +} +//___________________________________________________________________________________________ +void AliProtonCorrectionAnalysisTask::SetAnalysisObjectAbsorptionCorrection(AliProtonAbsorptionCorrection *const analysis) +{ + if (analysis&&fProtonAnalysisBase) + { + Printf("Absorption Correection ON\n"); + fIsOn_AliProtonAbsorptionCorrection=kTRUE; + fProtonAbsorptionCorrection = analysis; + fProtonAbsorptionCorrection->SetBaseAnalysis(fProtonAnalysisBase); + fProtonAbsorptionCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY()); + } + else + fIsOn_AliProtonAbsorptionCorrection=kFALSE; +} +//___________________________________________________________________________________________ +void AliProtonCorrectionAnalysisTask::SetAnalysisObjectFeedDown(AliProtonFeedDownAnalysis *const analysis) +{ + if (analysis&&fProtonAnalysisBase) + { + Printf("Feed Down ON\n"); + fIsOn_AliProtonFeedDownAnalysis=kTRUE; + fProtonFeedDownAnalysis = analysis; + fProtonFeedDownAnalysis->SetBaseAnalysis(fProtonAnalysisBase); + fProtonFeedDownAnalysis->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY()); + } + else + fIsOn_AliProtonFeedDownAnalysis=kFALSE; +} +//___________________________________________________________________________________________ +void AliProtonCorrectionAnalysisTask::SetAnalysisObjectSpectraCorrection(AliProtonSpectraCorrection *const analysis) +{ + if (analysis&&fProtonAnalysisBase) + { + Printf("Spectra Correection ON\n"); + fIsOn_AliProtonSpectraCorrection=kTRUE; + fProtonSpectraCorrection= analysis; + fProtonSpectraCorrection->SetBaseAnalysis(fProtonAnalysisBase); + fProtonSpectraCorrection->InitAnalysisHistograms(fProtonAnalysisBase->GetNBinsX(),fProtonAnalysisBase->GetMinX(),fProtonAnalysisBase->GetMaxX(),fProtonAnalysisBase->GetNBinsY(),fProtonAnalysisBase->GetMinY(),fProtonAnalysisBase->GetMaxY()); + } + else + fIsOn_AliProtonSpectraCorrection=kFALSE; +} + + + + diff --git a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.h b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.h index fce5195c237..796b0c04c7d 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.h +++ b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonCorrectionAnalysisTask.h @@ -1,59 +1,59 @@ -#ifndef ALIPROTONCORRECTIONTASK_H -#define ALIPROTONCORRECTIONTASK_H -#include "AliAnalysisTask.h" - -class TList; -class AliESDEvent; -class AliAODEvent; -class AliMCEvent; -class AliProtonFeedDownAnalysis; -class AliProtonAbsorptionCorrection; -class AliProtonSpectraCorrection; -class AliProtonAnalysisBase; - - - -class AliProtonCorrectionAnalysisTask : public AliAnalysisTask { - public: - AliProtonCorrectionAnalysisTask(); - AliProtonCorrectionAnalysisTask(const char *name); - virtual ~AliProtonCorrectionAnalysisTask() {} - - virtual void ConnectInputData(Option_t *); - virtual void CreateOutputObjects(); - virtual void Exec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetAnalysisObjectAbsorptionCorrection(AliProtonAbsorptionCorrection* const analysis) ; - void SetAnalysisObjectFeedDown(AliProtonFeedDownAnalysis* const analysis); - void SetAnalysisObjectSpectraCorrection(AliProtonSpectraCorrection* const analysis); - void SetBaseAnalysis(AliProtonAnalysisBase* const baseAnalysis) { fProtonAnalysisBase = baseAnalysis;} - private: - AliESDEvent *fESD; //ESD object - AliAODEvent *fAOD; //AOD object - AliMCEvent *fMC; //MC object - - TList *fList; //TList output object - - AliProtonAnalysisBase *fProtonAnalysisBase; //base analysis object - AliProtonAbsorptionCorrection *fProtonAbsorptionCorrection;//analysis object - AliProtonFeedDownAnalysis *fProtonFeedDownAnalysis; //analysis object - AliProtonSpectraCorrection *fProtonSpectraCorrection;//analysis object - - TH1F *fStatHist; - - - Bool_t fIsOn_AliProtonAbsorptionCorrection; - Bool_t fIsOn_AliProtonFeedDownAnalysis; - Bool_t fIsOn_AliProtonSpectraCorrection; - - AliProtonCorrectionAnalysisTask(const AliProtonCorrectionAnalysisTask&); // not implemented - AliProtonCorrectionAnalysisTask& operator=(const AliProtonCorrectionAnalysisTask&); // not implemented - -ClassDef(AliProtonCorrectionAnalysisTask, 1); // example of analysis -}; - -#endif - - - +#ifndef ALIPROTONCORRECTIONTASK_H +#define ALIPROTONCORRECTIONTASK_H +#include "AliAnalysisTask.h" + +class TList; +class AliESDEvent; +class AliAODEvent; +class AliMCEvent; +class AliProtonFeedDownAnalysis; +class AliProtonAbsorptionCorrection; +class AliProtonSpectraCorrection; +class AliProtonAnalysisBase; + + + +class AliProtonCorrectionAnalysisTask : public AliAnalysisTask { + public: + AliProtonCorrectionAnalysisTask(); + AliProtonCorrectionAnalysisTask(const char *name); + virtual ~AliProtonCorrectionAnalysisTask() {} + + virtual void ConnectInputData(Option_t *); + virtual void CreateOutputObjects(); + virtual void Exec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetAnalysisObjectAbsorptionCorrection(AliProtonAbsorptionCorrection* const analysis) ; + void SetAnalysisObjectFeedDown(AliProtonFeedDownAnalysis* const analysis); + void SetAnalysisObjectSpectraCorrection(AliProtonSpectraCorrection* const analysis); + void SetBaseAnalysis(AliProtonAnalysisBase* const baseAnalysis) { fProtonAnalysisBase = baseAnalysis;} + private: + AliESDEvent *fESD; //ESD object + AliAODEvent *fAOD; //AOD object + AliMCEvent *fMC; //MC object + + TList *fList; //TList output object + + AliProtonAnalysisBase *fProtonAnalysisBase; //base analysis object + AliProtonAbsorptionCorrection *fProtonAbsorptionCorrection;//analysis object + AliProtonFeedDownAnalysis *fProtonFeedDownAnalysis; //analysis object + AliProtonSpectraCorrection *fProtonSpectraCorrection;//analysis object + + TH1F *fStatHist; + + + Bool_t fIsOn_AliProtonAbsorptionCorrection; + Bool_t fIsOn_AliProtonFeedDownAnalysis; + Bool_t fIsOn_AliProtonSpectraCorrection; + + AliProtonCorrectionAnalysisTask(const AliProtonCorrectionAnalysisTask&); // not implemented + AliProtonCorrectionAnalysisTask& operator=(const AliProtonCorrectionAnalysisTask&); // not implemented + +ClassDef(AliProtonCorrectionAnalysisTask, 1); // example of analysis +}; + +#endif + + + diff --git a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysis.h b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysis.h index 7af8afe9287..8dbc73e9495 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysis.h +++ b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysis.h @@ -1,86 +1,86 @@ -#ifndef ALIPROTONFEEDDOWNANALYSIS_H -#define ALIPROTONFEEDDOWNANALYSIS_H - -#include "TObject.h" -#include "TH1I.h" -#include "AliCFContainer.h" -class TF1; -class TH2D; -class TH1F; -class TList; - -//#include "AliPID.h" -class AliPID; - -class AliCFDataGrid; -class AliAODEvent; -class AliAODtrack; -class AliESDEvent; -class AliESDtrack; -class AliExternalTrackParam; -class AliStack; -class AliESDVertex; -class AliProtonAnalysisBase; - -class AliProtonFeedDownAnalysis : public TObject -{ - public: - enum - { - kAll = 0, //without protons reject the secondaries from hadronic inter. - kPrimary = 1, - kFromLambda = 2, - kSelected = 3 , - kSelectedfromLambda = 4, - kNSteps=5 - }; - AliProtonFeedDownAnalysis(); - //AliProtonFeedDownAnalysis(Int_t nbinsY, Float_t fLowY, Float_t fHighY,Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); - virtual ~AliProtonFeedDownAnalysis(); - - void SetBaseAnalysis(AliProtonAnalysisBase * const baseAnalysis) {fProtonAnalysisBase = baseAnalysis;} - AliProtonAnalysisBase *GetProtonAnalysisBaseObject() const {return fProtonAnalysisBase;} - - void InitAnalysisHistograms(Int_t nbinsY, Float_t fLowY, Float_t fHighY, Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); - void Analyze(AliESDEvent *fESD, const AliESDVertex *vertex,AliStack *stack); - void Analyze(AliAODEvent *fAOD); - void Analyze(AliStack *stack); - - AliCFContainer *GetProtonContainer() const {return fProtonContainer;} - AliCFContainer *GetAntiProtonContainer() const {return fAntiProtonContainer;} - - void SetWeightFunction(TF1* weightfunction){fweightfunction=weightfunction;} - TF1* GetWeightFunction() const{return fweightfunction;} - TH2F* GetLambdaHist() const{return fLambda;} - TH2F* GetLambdaweightedHist() const{return fLambdaweighted;} - TH2F* GetAntiLambdaHist() const{return fAntiLambda;} - TH2F* GetAntiLambdaweightedHist() const{return fAntiLambdaweighted;} - private: - AliProtonFeedDownAnalysis(const AliProtonFeedDownAnalysis&); // Not implemented - AliProtonFeedDownAnalysis& operator=(const AliProtonFeedDownAnalysis&); // Not implemented - - AliProtonAnalysisBase *fProtonAnalysisBase;//base analysis object - Int_t LambdaIsMother(Int_t numbe, AliStack *stack); - Float_t GetWeightforProton(Int_t number, AliStack *stack); - Float_t GetWeightforLambda(Float_t pt); - - Int_t fNBinsY; //number of bins in y or eta - Double_t fMinY, fMaxY; //min & max value of y or eta - Int_t fNBinsPt; //number of bins in pT - Double_t fMinPt, fMaxPt; //min & max value of pT - - //Analysis containers - AliCFContainer *fProtonContainer; //container for protons - AliCFContainer *fAntiProtonContainer; //container for antiprotons - - TF1*fweightfunction; - TH2F *fLambda; - TH2F *fLambdaweighted; - TH2F *fAntiLambda; - TH2F *fAntiLambdaweighted; - - ClassDef(AliProtonFeedDownAnalysis,2); -}; - -#endif - +#ifndef ALIPROTONFEEDDOWNANALYSIS_H +#define ALIPROTONFEEDDOWNANALYSIS_H + +#include "TObject.h" +#include "TH1I.h" +#include "AliCFContainer.h" +class TF1; +class TH2D; +class TH1F; +class TList; + +//#include "AliPID.h" +class AliPID; + +class AliCFDataGrid; +class AliAODEvent; +class AliAODtrack; +class AliESDEvent; +class AliESDtrack; +class AliExternalTrackParam; +class AliStack; +class AliESDVertex; +class AliProtonAnalysisBase; + +class AliProtonFeedDownAnalysis : public TObject +{ + public: + enum + { + kAll = 0, //without protons reject the secondaries from hadronic inter. + kPrimary = 1, + kFromLambda = 2, + kSelected = 3 , + kSelectedfromLambda = 4, + kNSteps=5 + }; + AliProtonFeedDownAnalysis(); + //AliProtonFeedDownAnalysis(Int_t nbinsY, Float_t fLowY, Float_t fHighY,Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); + virtual ~AliProtonFeedDownAnalysis(); + + void SetBaseAnalysis(AliProtonAnalysisBase * const baseAnalysis) {fProtonAnalysisBase = baseAnalysis;} + AliProtonAnalysisBase *GetProtonAnalysisBaseObject() const {return fProtonAnalysisBase;} + + void InitAnalysisHistograms(Int_t nbinsY, Float_t fLowY, Float_t fHighY, Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); + void Analyze(AliESDEvent *fESD, const AliESDVertex *vertex,AliStack *stack); + void Analyze(AliAODEvent *fAOD); + void Analyze(AliStack *stack); + + AliCFContainer *GetProtonContainer() const {return fProtonContainer;} + AliCFContainer *GetAntiProtonContainer() const {return fAntiProtonContainer;} + + void SetWeightFunction(TF1* weightfunction){fweightfunction=weightfunction;} + TF1* GetWeightFunction() const{return fweightfunction;} + TH2F* GetLambdaHist() const{return fLambda;} + TH2F* GetLambdaweightedHist() const{return fLambdaweighted;} + TH2F* GetAntiLambdaHist() const{return fAntiLambda;} + TH2F* GetAntiLambdaweightedHist() const{return fAntiLambdaweighted;} + private: + AliProtonFeedDownAnalysis(const AliProtonFeedDownAnalysis&); // Not implemented + AliProtonFeedDownAnalysis& operator=(const AliProtonFeedDownAnalysis&); // Not implemented + + AliProtonAnalysisBase *fProtonAnalysisBase;//base analysis object + Int_t LambdaIsMother(Int_t numbe, AliStack *stack); + Float_t GetWeightforProton(Int_t number, AliStack *stack); + Float_t GetWeightforLambda(Float_t pt); + + Int_t fNBinsY; //number of bins in y or eta + Double_t fMinY, fMaxY; //min & max value of y or eta + Int_t fNBinsPt; //number of bins in pT + Double_t fMinPt, fMaxPt; //min & max value of pT + + //Analysis containers + AliCFContainer *fProtonContainer; //container for protons + AliCFContainer *fAntiProtonContainer; //container for antiprotons + + TF1*fweightfunction; + TH2F *fLambda; + TH2F *fLambdaweighted; + TH2F *fAntiLambda; + TH2F *fAntiLambdaweighted; + + ClassDef(AliProtonFeedDownAnalysis,2); +}; + +#endif + diff --git a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.cxx b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.cxx index 3fae5d52523..915a51bc82d 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.cxx +++ b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.cxx @@ -1,171 +1,171 @@ -#include "TChain.h" -#include "TTree.h" -#include "TString.h" -#include "TList.h" -#include "TH2F.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" - -#include "AliESDEvent.h" -#include "AliESDInputHandler.h" -#include "AliAODEvent.h" -#include "AliAODInputHandler.h" -#include "AliMCEventHandler.h" -#include "AliMCEvent.h" -#include "AliStack.h" -#include "AliESDVertex.h" - -#include "AliProtonFeedDownAnalysis.h" -#include "AliProtonAnalysisBase.h" -#include "AliProtonFeedDownAnalysisTask.h" -#include - -ClassImp(AliProtonFeedDownAnalysisTask) - -//________________________________________________________________________ -AliProtonFeedDownAnalysisTask::AliProtonFeedDownAnalysisTask() - : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0), - fList(0), fProtonAnalysis(0),fStatHist(0) - { - //Dummy constructor - -} - -//________________________________________________________________________ -AliProtonFeedDownAnalysisTask::AliProtonFeedDownAnalysisTask(const char *name) - : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), - fList(0), fProtonAnalysis(0),fStatHist(0) - { - // Constructor - - // Define input and output slots here - // Input slot #0 works with a TChain - DefineInput(0, TChain::Class()); - // Output slot #0 writes into a TList container - DefineOutput(0, TList::Class()); -} - -//________________________________________________________________________ -void AliProtonFeedDownAnalysisTask::ConnectInputData(Option_t *) -{ - // Connect ESD or AOD here - // Called once - TString gAnalysisLevel = dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); - - TTree* tree = dynamic_cast (GetInputData(0)); - if (!tree) - { - Printf("ERROR: Could not read chain from input slot 0"); - } - else - { - if(gAnalysisLevel == "ESD") - { - AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - if (!esdH) - { - Printf("ERROR: Could not get ESDInputHandler"); - } - else - fESD = esdH->GetEvent(); - AliMCEventHandler* mcH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); - if (!mcH) - { - Printf("ERROR: Could not retrieve MC event handler"); - } - else - fMC = mcH->MCEvent(); - } - else if(gAnalysisLevel == "AOD") - { - AliAODInputHandler *aodH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - if (!aodH) - { - Printf("ERROR: Could not get AODInputHandler"); - } - else - fAOD = aodH->GetEvent(); - } - else - Printf("Wrong analysis type: Only ESD, AOD types are allowed!"); - } -} -//________________________________________________________________________ -void AliProtonFeedDownAnalysisTask::CreateOutputObjects() -{ - // Create output objects - // Called once - fList = new TList(); - fList->Add(fProtonAnalysis->GetProtonContainer()); - fList->Add(fProtonAnalysis->GetAntiProtonContainer()); - fList->Add(fProtonAnalysis->GetLambdaHist()); - fList->Add(fProtonAnalysis->GetLambdaweightedHist()); - fList->Add(fProtonAnalysis->GetAntiLambdaHist()); - fList->Add(fProtonAnalysis->GetAntiLambdaweightedHist()); - fStatHist=new TH1F("StatsHist","StatsHist",10,-0.5,9.5); - fList->Add(fStatHist); - fStatHist->GetXaxis()->SetBinLabel(1,"level1cut"); - fStatHist->GetXaxis()->SetBinLabel(2,"level2cut"); - fStatHist->GetXaxis()->SetBinLabel(3,"level3cut"); - fStatHist->GetXaxis()->SetBinLabel(4,"level4cut"); -} -//________________________________________________________________________ -void AliProtonFeedDownAnalysisTask::Exec(Option_t *) -{ - // Main loop - // Called for each event - TString gAnalysisLevel = dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); - //TString gAnalysisLevel = (fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); - if(gAnalysisLevel == "ESD") - { - if (!fESD) - { - Printf("ERROR: fESD not available"); - return; - } - fStatHist->Fill(0); - if(dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) - { - fStatHist->Fill(1); - const AliESDVertex *vertex = dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVzMax()); - if(vertex) - { - fStatHist->Fill(2); - Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks()); - AliStack* stack1=0x0; - if(!fMC) - return; - stack1 = fMC->Stack(); - if(!stack1) - return; - fStatHist->Fill(3); - fProtonAnalysis->Analyze(fESD,vertex,stack1); - fProtonAnalysis->Analyze(stack1); - - }//reconstructed vertex - }//triggered event - }//ESD analysis - - else if(gAnalysisLevel == "AOD") - { - if (!fAOD) - { - Printf("ERROR: fAOD not available"); - return; - } - Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks()); - fProtonAnalysis->Analyze(fAOD); - }//AOD analysis - - - // Post output data. - PostData(0, fList); -} -//__________________________________________________________________________________________ -void AliProtonFeedDownAnalysisTask::Terminate(Option_t *) -{ - -} - - +#include "TChain.h" +#include "TTree.h" +#include "TString.h" +#include "TList.h" +#include "TH2F.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" + +#include "AliESDEvent.h" +#include "AliESDInputHandler.h" +#include "AliAODEvent.h" +#include "AliAODInputHandler.h" +#include "AliMCEventHandler.h" +#include "AliMCEvent.h" +#include "AliStack.h" +#include "AliESDVertex.h" + +#include "AliProtonFeedDownAnalysis.h" +#include "AliProtonAnalysisBase.h" +#include "AliProtonFeedDownAnalysisTask.h" +#include + +ClassImp(AliProtonFeedDownAnalysisTask) + +//________________________________________________________________________ +AliProtonFeedDownAnalysisTask::AliProtonFeedDownAnalysisTask() + : AliAnalysisTask(), fESD(0), fAOD(0), fMC(0), + fList(0), fProtonAnalysis(0),fStatHist(0) + { + //Dummy constructor + +} + +//________________________________________________________________________ +AliProtonFeedDownAnalysisTask::AliProtonFeedDownAnalysisTask(const char *name) + : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), + fList(0), fProtonAnalysis(0),fStatHist(0) + { + // Constructor + + // Define input and output slots here + // Input slot #0 works with a TChain + DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TList container + DefineOutput(0, TList::Class()); +} + +//________________________________________________________________________ +void AliProtonFeedDownAnalysisTask::ConnectInputData(Option_t *) +{ + // Connect ESD or AOD here + // Called once + TString gAnalysisLevel = dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); + + TTree* tree = dynamic_cast (GetInputData(0)); + if (!tree) + { + Printf("ERROR: Could not read chain from input slot 0"); + } + else + { + if(gAnalysisLevel == "ESD") + { + AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!esdH) + { + Printf("ERROR: Could not get ESDInputHandler"); + } + else + fESD = esdH->GetEvent(); + AliMCEventHandler* mcH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); + if (!mcH) + { + Printf("ERROR: Could not retrieve MC event handler"); + } + else + fMC = mcH->MCEvent(); + } + else if(gAnalysisLevel == "AOD") + { + AliAODInputHandler *aodH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!aodH) + { + Printf("ERROR: Could not get AODInputHandler"); + } + else + fAOD = aodH->GetEvent(); + } + else + Printf("Wrong analysis type: Only ESD, AOD types are allowed!"); + } +} +//________________________________________________________________________ +void AliProtonFeedDownAnalysisTask::CreateOutputObjects() +{ + // Create output objects + // Called once + fList = new TList(); + fList->Add(fProtonAnalysis->GetProtonContainer()); + fList->Add(fProtonAnalysis->GetAntiProtonContainer()); + fList->Add(fProtonAnalysis->GetLambdaHist()); + fList->Add(fProtonAnalysis->GetLambdaweightedHist()); + fList->Add(fProtonAnalysis->GetAntiLambdaHist()); + fList->Add(fProtonAnalysis->GetAntiLambdaweightedHist()); + fStatHist=new TH1F("StatsHist","StatsHist",10,-0.5,9.5); + fList->Add(fStatHist); + fStatHist->GetXaxis()->SetBinLabel(1,"level1cut"); + fStatHist->GetXaxis()->SetBinLabel(2,"level2cut"); + fStatHist->GetXaxis()->SetBinLabel(3,"level3cut"); + fStatHist->GetXaxis()->SetBinLabel(4,"level4cut"); +} +//________________________________________________________________________ +void AliProtonFeedDownAnalysisTask::Exec(Option_t *) +{ + // Main loop + // Called for each event + TString gAnalysisLevel = dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); + //TString gAnalysisLevel = (fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisLevel(); + if(gAnalysisLevel == "ESD") + { + if (!fESD) + { + Printf("ERROR: fESD not available"); + return; + } + fStatHist->Fill(0); + if(dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->IsEventTriggered(fESD,dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetTriggerMode())) + { + fStatHist->Fill(1); + const AliESDVertex *vertex = dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVertex(fESD,dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetAnalysisMode(),dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVxMax(),dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVyMax(),dynamic_cast(fProtonAnalysis->GetProtonAnalysisBaseObject())->GetVzMax()); + if(vertex) + { + fStatHist->Fill(2); + Printf("Proton ESD analysis task: There are %d tracks in this event", fESD->GetNumberOfTracks()); + AliStack* stack1=0x0; + if(!fMC) + return; + stack1 = fMC->Stack(); + if(!stack1) + return; + fStatHist->Fill(3); + fProtonAnalysis->Analyze(fESD,vertex,stack1); + fProtonAnalysis->Analyze(stack1); + + }//reconstructed vertex + }//triggered event + }//ESD analysis + + else if(gAnalysisLevel == "AOD") + { + if (!fAOD) + { + Printf("ERROR: fAOD not available"); + return; + } + Printf("Proton AOD analysis task: There are %d tracks in this event", fAOD->GetNumberOfTracks()); + fProtonAnalysis->Analyze(fAOD); + }//AOD analysis + + + // Post output data. + PostData(0, fList); +} +//__________________________________________________________________________________________ +void AliProtonFeedDownAnalysisTask::Terminate(Option_t *) +{ + +} + + diff --git a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.h b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.h index c9de5c05d35..c1f5ba4b203 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.h +++ b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonFeedDownAnalysisTask.h @@ -1,46 +1,46 @@ -#ifndef ALIPROTONFEEDDOWNANALYSISTASK_H -#define ALIPROTONFEEDDOWNANALYSISTASK_H -#include "AliAnalysisTask.h" - -class TList; -class AliESDEvent; -class AliAODEvent; -class AliMCEvent; -class AliProtonFeedDownAnalysis; - - - -class AliProtonFeedDownAnalysisTask : public AliAnalysisTask { - public: - AliProtonFeedDownAnalysisTask(); - AliProtonFeedDownAnalysisTask(const char *name); - virtual ~AliProtonFeedDownAnalysisTask() {} - - virtual void ConnectInputData(Option_t *); - virtual void CreateOutputObjects(); - virtual void Exec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetAnalysisObject(AliProtonFeedDownAnalysis *const analysis) {fProtonAnalysis = analysis;} - - private: - AliESDEvent *fESD; //ESD object - AliAODEvent *fAOD; //AOD object - AliMCEvent *fMC; //MC object - - TList *fList; //TList output object - - AliProtonFeedDownAnalysis *fProtonAnalysis; //analysis object - - TH1F *fStatHist; - - AliProtonFeedDownAnalysisTask(const AliProtonFeedDownAnalysisTask&); // not implemented - AliProtonFeedDownAnalysisTask& operator=(const AliProtonFeedDownAnalysisTask&); // not implemented - -ClassDef(AliProtonFeedDownAnalysisTask, 1); // example of analysis -}; - -#endif - - - +#ifndef ALIPROTONFEEDDOWNANALYSISTASK_H +#define ALIPROTONFEEDDOWNANALYSISTASK_H +#include "AliAnalysisTask.h" + +class TList; +class AliESDEvent; +class AliAODEvent; +class AliMCEvent; +class AliProtonFeedDownAnalysis; + + + +class AliProtonFeedDownAnalysisTask : public AliAnalysisTask { + public: + AliProtonFeedDownAnalysisTask(); + AliProtonFeedDownAnalysisTask(const char *name); + virtual ~AliProtonFeedDownAnalysisTask() {} + + virtual void ConnectInputData(Option_t *); + virtual void CreateOutputObjects(); + virtual void Exec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetAnalysisObject(AliProtonFeedDownAnalysis *const analysis) {fProtonAnalysis = analysis;} + + private: + AliESDEvent *fESD; //ESD object + AliAODEvent *fAOD; //AOD object + AliMCEvent *fMC; //MC object + + TList *fList; //TList output object + + AliProtonFeedDownAnalysis *fProtonAnalysis; //analysis object + + TH1F *fStatHist; + + AliProtonFeedDownAnalysisTask(const AliProtonFeedDownAnalysisTask&); // not implemented + AliProtonFeedDownAnalysisTask& operator=(const AliProtonFeedDownAnalysisTask&); // not implemented + +ClassDef(AliProtonFeedDownAnalysisTask, 1); // example of analysis +}; + +#endif + + + diff --git a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonSpectraCorrection.h b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonSpectraCorrection.h index 8e9832b0a6f..1926b51e952 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/AliProtonSpectraCorrection.h +++ b/PWGLF/SPECTRA/AntiprotonToProton/AliProtonSpectraCorrection.h @@ -1,84 +1,84 @@ -#ifndef ALIPROTONSPECTRACORRECTION_H -#define ALIPROTONSPECTRACORRECTION_H - -//------------------------------------------------------------------------- -// Class AliProtonSpectraCorrection -// This is the class for the absorption corrections used for -// the baryon (proton) ratio analysis -// -// Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch -//------------------------------------------------------------------------- - -#include "TObject.h" -#include "TH1I.h" -#include "AliCFContainer.h" -#include "AliCFManager.h" - -class TF1; -class TH2D; -class TH1F; -class TList; - -class AliPID; -class AliCFDataGrid; -class AliAODEvent; -class AliAODtrack; -class AliESDEvent; -class AliESDtrack; -class AliExternalTrackParam; -class AliStack; -class AliESDVertex; -class AliProtonAnalysisBase; -class AliMCEvent; - -class AliProtonSpectraCorrection : public TObject { - public: - enum { - kStepGenerated = 0, - kStepReconstructible = 1, - kStepReconstructed = 2, - kStepIdentified = 3, - kStepSelected = 4, - kNSteps = 5 - }; - - AliProtonSpectraCorrection(); - virtual ~AliProtonSpectraCorrection(); - - void SetBaseAnalysis(AliProtonAnalysisBase * const baseAnalysis) { - fProtonAnalysisBase = baseAnalysis;} - AliProtonAnalysisBase *GetProtonAnalysisBaseObject() const { - return fProtonAnalysisBase;} - - void InitAnalysisHistograms(Int_t nbinsY, Float_t fLowY, Float_t fHighY, - Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); - void FillCorrectionMaps(AliESDEvent *fESD, - const AliESDVertex *vertex, - AliMCEvent *mcEvent); - void FillCorrectionMaps(AliAODEvent *fAOD); - - AliCFContainer *GetProtonContainer() const { - return fCFManagerProtons->GetParticleContainer();} - AliCFContainer *GetAntiProtonContainer() const { - return fCFManagerAntiProtons->GetParticleContainer();} - - private: - AliProtonSpectraCorrection(const AliProtonSpectraCorrection&); // Not implemented - AliProtonSpectraCorrection& operator=(const AliProtonSpectraCorrection&); // Not implemented - - AliProtonAnalysisBase *fProtonAnalysisBase;//base analysis object - - Int_t fNBinsY; //number of bins in y or eta - Double_t fMinY, fMaxY; //min & max value of y or eta - Int_t fNBinsPt; //number of bins in pT - Double_t fMinPt, fMaxPt; //min & max value of pT - - //Analysis containers - AliCFManager *fCFManagerProtons; // CF manager protons - AliCFManager *fCFManagerAntiProtons; // CF manager antiprotons - - ClassDef(AliProtonSpectraCorrection,1); -}; - -#endif - +#ifndef ALIPROTONSPECTRACORRECTION_H +#define ALIPROTONSPECTRACORRECTION_H + +//------------------------------------------------------------------------- +// Class AliProtonSpectraCorrection +// This is the class for the absorption corrections used for +// the baryon (proton) ratio analysis +// +// Origin: Panos Christakoglou | Panos.Christakoglou@cern.ch +//------------------------------------------------------------------------- + +#include "TObject.h" +#include "TH1I.h" +#include "AliCFContainer.h" +#include "AliCFManager.h" + +class TF1; +class TH2D; +class TH1F; +class TList; + +class AliPID; +class AliCFDataGrid; +class AliAODEvent; +class AliAODtrack; +class AliESDEvent; +class AliESDtrack; +class AliExternalTrackParam; +class AliStack; +class AliESDVertex; +class AliProtonAnalysisBase; +class AliMCEvent; + +class AliProtonSpectraCorrection : public TObject { + public: + enum { + kStepGenerated = 0, + kStepReconstructible = 1, + kStepReconstructed = 2, + kStepIdentified = 3, + kStepSelected = 4, + kNSteps = 5 + }; + + AliProtonSpectraCorrection(); + virtual ~AliProtonSpectraCorrection(); + + void SetBaseAnalysis(AliProtonAnalysisBase * const baseAnalysis) { + fProtonAnalysisBase = baseAnalysis;} + AliProtonAnalysisBase *GetProtonAnalysisBaseObject() const { + return fProtonAnalysisBase;} + + void InitAnalysisHistograms(Int_t nbinsY, Float_t fLowY, Float_t fHighY, + Int_t nbinsPt, Float_t fLowPt, Float_t fHighPt); + void FillCorrectionMaps(AliESDEvent *fESD, + const AliESDVertex *vertex, + AliMCEvent *mcEvent); + void FillCorrectionMaps(AliAODEvent *fAOD); + + AliCFContainer *GetProtonContainer() const { + return fCFManagerProtons->GetParticleContainer();} + AliCFContainer *GetAntiProtonContainer() const { + return fCFManagerAntiProtons->GetParticleContainer();} + + private: + AliProtonSpectraCorrection(const AliProtonSpectraCorrection&); // Not implemented + AliProtonSpectraCorrection& operator=(const AliProtonSpectraCorrection&); // Not implemented + + AliProtonAnalysisBase *fProtonAnalysisBase;//base analysis object + + Int_t fNBinsY; //number of bins in y or eta + Double_t fMinY, fMaxY; //min & max value of y or eta + Int_t fNBinsPt; //number of bins in pT + Double_t fMinPt, fMaxPt; //min & max value of pT + + //Analysis containers + AliCFManager *fCFManagerProtons; // CF manager protons + AliCFManager *fCFManagerAntiProtons; // CF manager antiprotons + + ClassDef(AliProtonSpectraCorrection,1); +}; + +#endif + diff --git a/PWGLF/SPECTRA/AntiprotonToProton/configProtonAnalysisBaseObject.C b/PWGLF/SPECTRA/AntiprotonToProton/configProtonAnalysisBaseObject.C index 50821ac5196..32b9135c50a 100644 --- a/PWGLF/SPECTRA/AntiprotonToProton/configProtonAnalysisBaseObject.C +++ b/PWGLF/SPECTRA/AntiprotonToProton/configProtonAnalysisBaseObject.C @@ -1,138 +1,138 @@ -AliProtonAnalysisBase *GetProtonAnalysisBaseObject(const char* analysisLevel = "ESD", - Bool_t kAnalyzeMC = kTRUE, - const char* esdAnalysisType = "Hybrid", - const char* pidMode = "Bayesian", - Bool_t kUseOnlineTrigger = kFALSE, - Bool_t kUseOfflineTrigger = kFALSE, - Bool_t kRunQA = kFALSE) { - //Function to setup the AliProtonAnalysisBase object and return it - AliProtonAnalysisBase *baseAnalysis = new AliProtonAnalysisBase(); - //baseAnalysis->SetDebugMode(); - if(kRunQA) baseAnalysis->SetRunQA(); - baseAnalysis->SetAnalysisLevel(analysisLevel); - if(analysisLevel == "ESD") { - if(kAnalyzeMC) - baseAnalysis->SetTriggerMode(AliProtonAnalysisBase::kMB2); - //use the offline trigger - if(kUseOnlineTrigger) baseAnalysis->UseOnlineTrigger(); - - //use the offline trigger - if(kUseOfflineTrigger) baseAnalysis->OfflineTriggerInit(); - - baseAnalysis->SetMinTPCClusters(80); - baseAnalysis->SetMaxChi2PerTPCCluster(3.5); - /*baseAnalysis->SetMaxCov11(2.0); - baseAnalysis->SetMaxCov22(2.0); - baseAnalysis->SetMaxCov33(0.5); - baseAnalysis->SetMaxCov44(0.5); - baseAnalysis->SetMaxCov55(2.0);*/ - baseAnalysis->SetMinTPCdEdxPoints(80); - switch(esdAnalysisType) { - case "TPC": - baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kTPC); - baseAnalysis->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9); - baseAnalysis->SetTPCpid(); - baseAnalysis->SetMaxSigmaToVertexTPC(2.0); - //baseAnalysis->SetMaxDCAXYTPC(1.5); - //baseAnalysis->SetMaxDCAZTPC(1.5); - break; - case "Hybrid": - baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kHybrid); - baseAnalysis->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05); - //baseAnalysis->SetPhaseSpace(18, -0.9, 0.9, 32, 0.5, 1.3); - baseAnalysis->SetTPCpid(); - //baseAnalysis->SetMaxSigmaToVertex(3.0); - //baseAnalysis->SetMaxDCAXY(0.5); - //baseAnalysis->SetMaxDCAZ(0.7); - baseAnalysis->SetMaxDCA3D(2.0); - //baseAnalysis->SetPointOnITSLayer6(); - //baseAnalysis->SetPointOnITSLayer5(); - //baseAnalysis->SetPointOnITSLayer4(); - //baseAnalysis->SetPointOnITSLayer3(); - //baseAnalysis->SetPointOnITSLayer2(); - //baseAnalysis->SetPointOnITSLayer1(); - baseAnalysis->SetPointOnSPDLayers(); - baseAnalysis->SetMinITSClusters(2); - break; - case "FullHybrid": - baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kFullHybrid); - baseAnalysis->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05); - //baseAnalysis->SetPhaseSpace(18, -0.9, 0.9, 32, 0.5, 1.3); - baseAnalysis->SetTPCpid(); - //baseAnalysis->SetMaxSigmaToVertex(3.0); - //baseAnalysis->SetMaxDCAXY(0.2); - //baseAnalysis->SetMaxDCAZ(0.7); - //baseAnalysis->SetMaxDCA3D(0.2); - baseAnalysis->SetPtDependentDCAxy(5,2.89575e+02,6.62161e+01,1.99085e+00); - //baseAnalysis->SetPointOnITSLayer6(); - //baseAnalysis->SetPointOnITSLayer5(); - //baseAnalysis->SetPointOnITSLayer4(); - //baseAnalysis->SetPointOnITSLayer3(); - //baseAnalysis->SetPointOnITSLayer2(); - //baseAnalysis->SetPointOnITSLayer1(); - baseAnalysis->SetPointOnSPDLayers(); - baseAnalysis->SetMinITSClusters(2); - break; - case "Global": - baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kGlobal); - baseAnalysis->SetPhaseSpace(20, -1.0, 1.0, 48, 0.3, 1.5); - baseAnalysis->SetMaxSigmaToVertex(2.0); - //baseAnalysis->SetMaxDCAXY(2.0); - //baseAnalysis->SetMaxDCAZ(2.0); - baseAnalysis->SetTPCRefit(); - baseAnalysis->SetPointOnITSLayer1(); - baseAnalysis->SetPointOnITSLayer2(); - //baseAnalysis->SetPointOnITSLayer3(); - //baseAnalysis->SetPointOnITSLayer4(); - baseAnalysis->SetPointOnITSLayer5(); - baseAnalysis->SetPointOnITSLayer6(); - baseAnalysis->SetMinITSClusters(5); - baseAnalysis->SetITSRefit(); - baseAnalysis->SetESDpid(); - baseAnalysis->SetTOFpid(); - break; - default: - break; - } - baseAnalysis->SetAcceptedVertexDiamond(1.,1.,10.); - baseAnalysis->SetMinNumOfContributors(0); - //baseAnalysis->SetEtaMode(); - switch(pidMode) { - case "Bayesian": - baseAnalysis->SetPIDMode(AliProtonAnalysisBase::kBayesian); - //Momentum dependent priors - /*TFile *f = TFile::Open("$ALICE_ROOT/PWG2/data/PriorProbabilities.root "); - TF1 *fitElectrons = (TF1 *)f->Get("fitElectrons"); - TF1 *fitMuons = (TF1 *)f->Get("fitMuons"); - TF1 *fitPions = (TF1 *)f->Get("fitPions"); - TF1 *fitKaons = (TF1 *)f->Get("fitKaons"); - TF1 *fitProtons = (TF1 *)f->Get("fitProtons"); - baseAnalysis->SetPriorProbabilityFunctions(fitElectrons, - fitMuons, - fitPions, - fitKaons, - fitProtons);*/ - //Fixed prior probabilities - Double_t partFrac[5] = {0.01, 0.01, 0.85, 0.10, 0.05}; - if(!baseAnalysis->IsPriorProbabilityFunctionUsed()) - baseAnalysis->SetPriorProbabilities(partFrac); - break; - case "Ratio": - baseAnalysis->SetPIDMode(AliProtonAnalysisBase::kRatio); - baseAnalysis->SetRatio(-0.2); - break; - case "Sigma": - baseAnalysis->SetPIDMode(AliProtonAnalysisBase::kSigma1); - baseAnalysis->SetNSigma(4); - break; - default: - break; - }//PID mode - }//ESD - if(analysisLevel == "MC") - baseAnalysis->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9); - if(analysisLevel == "AOD") - baseAnalysis->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9); - - return baseAnalysis; -} +AliProtonAnalysisBase *GetProtonAnalysisBaseObject(const char* analysisLevel = "ESD", + Bool_t kAnalyzeMC = kTRUE, + const char* esdAnalysisType = "Hybrid", + const char* pidMode = "Bayesian", + Bool_t kUseOnlineTrigger = kFALSE, + Bool_t kUseOfflineTrigger = kFALSE, + Bool_t kRunQA = kFALSE) { + //Function to setup the AliProtonAnalysisBase object and return it + AliProtonAnalysisBase *baseAnalysis = new AliProtonAnalysisBase(); + //baseAnalysis->SetDebugMode(); + if(kRunQA) baseAnalysis->SetRunQA(); + baseAnalysis->SetAnalysisLevel(analysisLevel); + if(analysisLevel == "ESD") { + if(kAnalyzeMC) + baseAnalysis->SetTriggerMode(AliProtonAnalysisBase::kMB2); + //use the offline trigger + if(kUseOnlineTrigger) baseAnalysis->UseOnlineTrigger(); + + //use the offline trigger + if(kUseOfflineTrigger) baseAnalysis->OfflineTriggerInit(); + + baseAnalysis->SetMinTPCClusters(80); + baseAnalysis->SetMaxChi2PerTPCCluster(3.5); + /*baseAnalysis->SetMaxCov11(2.0); + baseAnalysis->SetMaxCov22(2.0); + baseAnalysis->SetMaxCov33(0.5); + baseAnalysis->SetMaxCov44(0.5); + baseAnalysis->SetMaxCov55(2.0);*/ + baseAnalysis->SetMinTPCdEdxPoints(80); + switch(esdAnalysisType) { + case "TPC": + baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kTPC); + baseAnalysis->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9); + baseAnalysis->SetTPCpid(); + baseAnalysis->SetMaxSigmaToVertexTPC(2.0); + //baseAnalysis->SetMaxDCAXYTPC(1.5); + //baseAnalysis->SetMaxDCAZTPC(1.5); + break; + case "Hybrid": + baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kHybrid); + baseAnalysis->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05); + //baseAnalysis->SetPhaseSpace(18, -0.9, 0.9, 32, 0.5, 1.3); + baseAnalysis->SetTPCpid(); + //baseAnalysis->SetMaxSigmaToVertex(3.0); + //baseAnalysis->SetMaxDCAXY(0.5); + //baseAnalysis->SetMaxDCAZ(0.7); + baseAnalysis->SetMaxDCA3D(2.0); + //baseAnalysis->SetPointOnITSLayer6(); + //baseAnalysis->SetPointOnITSLayer5(); + //baseAnalysis->SetPointOnITSLayer4(); + //baseAnalysis->SetPointOnITSLayer3(); + //baseAnalysis->SetPointOnITSLayer2(); + //baseAnalysis->SetPointOnITSLayer1(); + baseAnalysis->SetPointOnSPDLayers(); + baseAnalysis->SetMinITSClusters(2); + break; + case "FullHybrid": + baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kFullHybrid); + baseAnalysis->SetPhaseSpace(9, -0.9, 0.9, 6, 0.45, 1.05); + //baseAnalysis->SetPhaseSpace(18, -0.9, 0.9, 32, 0.5, 1.3); + baseAnalysis->SetTPCpid(); + //baseAnalysis->SetMaxSigmaToVertex(3.0); + //baseAnalysis->SetMaxDCAXY(0.2); + //baseAnalysis->SetMaxDCAZ(0.7); + //baseAnalysis->SetMaxDCA3D(0.2); + baseAnalysis->SetPtDependentDCAxy(5,2.89575e+02,6.62161e+01,1.99085e+00); + //baseAnalysis->SetPointOnITSLayer6(); + //baseAnalysis->SetPointOnITSLayer5(); + //baseAnalysis->SetPointOnITSLayer4(); + //baseAnalysis->SetPointOnITSLayer3(); + //baseAnalysis->SetPointOnITSLayer2(); + //baseAnalysis->SetPointOnITSLayer1(); + baseAnalysis->SetPointOnSPDLayers(); + baseAnalysis->SetMinITSClusters(2); + break; + case "Global": + baseAnalysis->SetAnalysisMode(AliProtonAnalysisBase::kGlobal); + baseAnalysis->SetPhaseSpace(20, -1.0, 1.0, 48, 0.3, 1.5); + baseAnalysis->SetMaxSigmaToVertex(2.0); + //baseAnalysis->SetMaxDCAXY(2.0); + //baseAnalysis->SetMaxDCAZ(2.0); + baseAnalysis->SetTPCRefit(); + baseAnalysis->SetPointOnITSLayer1(); + baseAnalysis->SetPointOnITSLayer2(); + //baseAnalysis->SetPointOnITSLayer3(); + //baseAnalysis->SetPointOnITSLayer4(); + baseAnalysis->SetPointOnITSLayer5(); + baseAnalysis->SetPointOnITSLayer6(); + baseAnalysis->SetMinITSClusters(5); + baseAnalysis->SetITSRefit(); + baseAnalysis->SetESDpid(); + baseAnalysis->SetTOFpid(); + break; + default: + break; + } + baseAnalysis->SetAcceptedVertexDiamond(1.,1.,10.); + baseAnalysis->SetMinNumOfContributors(0); + //baseAnalysis->SetEtaMode(); + switch(pidMode) { + case "Bayesian": + baseAnalysis->SetPIDMode(AliProtonAnalysisBase::kBayesian); + //Momentum dependent priors + /*TFile *f = TFile::Open("$ALICE_ROOT/PWG2/data/PriorProbabilities.root "); + TF1 *fitElectrons = (TF1 *)f->Get("fitElectrons"); + TF1 *fitMuons = (TF1 *)f->Get("fitMuons"); + TF1 *fitPions = (TF1 *)f->Get("fitPions"); + TF1 *fitKaons = (TF1 *)f->Get("fitKaons"); + TF1 *fitProtons = (TF1 *)f->Get("fitProtons"); + baseAnalysis->SetPriorProbabilityFunctions(fitElectrons, + fitMuons, + fitPions, + fitKaons, + fitProtons);*/ + //Fixed prior probabilities + Double_t partFrac[5] = {0.01, 0.01, 0.85, 0.10, 0.05}; + if(!baseAnalysis->IsPriorProbabilityFunctionUsed()) + baseAnalysis->SetPriorProbabilities(partFrac); + break; + case "Ratio": + baseAnalysis->SetPIDMode(AliProtonAnalysisBase::kRatio); + baseAnalysis->SetRatio(-0.2); + break; + case "Sigma": + baseAnalysis->SetPIDMode(AliProtonAnalysisBase::kSigma1); + baseAnalysis->SetNSigma(4); + break; + default: + break; + }//PID mode + }//ESD + if(analysisLevel == "MC") + baseAnalysis->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9); + if(analysisLevel == "AOD") + baseAnalysis->SetPhaseSpace(10, -0.5, 0.5, 16, 0.5, 0.9); + + return baseAnalysis; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysis.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysis.cxx index 405666073b1..2ce36294118 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysis.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysis.cxx @@ -1,332 +1,332 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//------------------------------------------------------------------------------ -// AliPtResolAnalysis class. -// -// a. functionality: -// - fills analysis control histograms -// -// b. data members: -// - control histograms -// -// Author: J.Otwinowski 04/11/2008 -//------------------------------------------------------------------------------ - -#include "TH1.h" -#include "TH2.h" -#include "TCanvas.h" -#include "THnSparse.h" - -#include "AliHeader.h" -#include "AliInputEventHandler.h" -#include "AliAnalysisManager.h" -#include "AliGenEventHeader.h" -#include "AliStack.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDtrackCuts.h" -#include "AliLog.h" -#include "AliMultiplicity.h" -#include "AliTracker.h" - -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AliPhysicsSelection.h" -#include "AliTriggerAnalysis.h" - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" -#include "AliPtResolAnalysis.h" - -using namespace std; - -ClassImp(AliPtResolAnalysis) - -//_____________________________________________________________________________ - AliPtResolAnalysis::AliPtResolAnalysis(): AlidNdPt(), - fAnalysisFolder(0), - fTrackParamHist(0), - fTrackParamHist2(0) -{ - // default constructor - Init(); -} - -//_____________________________________________________________________________ -AliPtResolAnalysis::AliPtResolAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,title), - fAnalysisFolder(0), - fTrackParamHist(0), - fTrackParamHist2(0) -{ - Init(); -} - -//_____________________________________________________________________________ -AliPtResolAnalysis::~AliPtResolAnalysis() { - // - // destructor - // - if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; - if(fTrackParamHist) delete fTrackParamHist; fTrackParamHist=0; - if(fTrackParamHist2) delete fTrackParamHist2; fTrackParamHist2=0; -} - -//_____________________________________________________________________________ -void AliPtResolAnalysis::Init(){ - // - // Generic histograms to be corrected - // - //1/pT:#sigma(1/pT) - Int_t binsTrackParamHist[2]={400,300}; - Double_t minTrackParamHist[2]={0,0}; - Double_t maxTrackParamHist[2]={1,0.015}; - - fTrackParamHist = new THnSparseF("fTrackParamHist","1/pT:#sigma(1/pT)",2,binsTrackParamHist,minTrackParamHist,maxTrackParamHist); - fTrackParamHist->GetAxis(0)->SetTitle("1/pT (GeV/c)^{-1}"); - fTrackParamHist->GetAxis(1)->SetTitle("#sigma(1/pT)"); - fTrackParamHist->Sumw2(); - - //pt:sigma(1/pT)*pT - const Int_t ptNbins = 73; - Double_t bins[74] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0 }; - - Int_t binsTrackParamHist2[2]={ptNbins,200}; - Double_t minTrackParamHist2[2]={0,0}; - Double_t maxTrackParamHist2[2]={100,0.2}; - - fTrackParamHist2 = new THnSparseF("fTrackParamHist2","pT:#sigma(1/pT)*pT",2,binsTrackParamHist2,minTrackParamHist2,maxTrackParamHist2); - fTrackParamHist2->SetBinEdges(0,bins); - fTrackParamHist2->GetAxis(0)->SetTitle("pT (GeV/c)"); - fTrackParamHist2->GetAxis(1)->SetTitle("#sigma(1/pT)*pT"); - fTrackParamHist2->Sumw2(); - - // init folder - fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); -} - -//_____________________________________________________________________________ -void AliPtResolAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) -{ - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - // trigger selection - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - - // get reconstructed vertex - const AliESDVertex* vtxESD = 0; - Bool_t isRecVertex = kFALSE; - if(evtCuts->IsRecVertexRequired()) - { - Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); - Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); - vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); - isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); - } - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - // - TObjArray *allChargedTracks=0; - // check event cuts - if(isEventOK && isEventTriggered) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - //printf("entries %d \n",entries); - - // fill histograms - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - if(esdTrackCuts->AcceptTrack(track)) - { - if(accCuts->AcceptTrack(track)) - { - //Double_t x, par[5], cov[15]; - //track->GetExternalParameters(x, p); - //track->GetExternalCovariance(cov); - - Double_t v1[2] = {track->OneOverPt(),TMath::Sqrt(track->GetSigma1Pt2())}; - fTrackParamHist->Fill(v1); - - Double_t v2[2] = {track->Pt(),track->Pt()*TMath::Sqrt(track->GetSigma1Pt2())}; - fTrackParamHist2->Fill(v2); - } - } - } - } - } -} - -//_____________________________________________________________________________ -Long64_t AliPtResolAnalysis::Merge(TCollection* const list) -{ - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - - // - //TList *collPhysSelection = new TList; - - // collection of generated histograms - - Int_t count=0; - while((obj = iter->Next()) != 0) { - AliPtResolAnalysis* entry = dynamic_cast(obj); - if (entry == 0) continue; - - // - fTrackParamHist->Add(entry->fTrackParamHist); - fTrackParamHist2->Add(entry->fTrackParamHist2); - } - -return count; -} - -//_____________________________________________________________________________ -void AliPtResolAnalysis::Analyse() -{ - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - // - // Reconstructed event vertex - // - - // export objects to analysis folder - fAnalysisFolder = ExportToFolder(aFolderObj); - if(!fAnalysisFolder) { - if(aFolderObj) delete aFolderObj; - return; - } - - // delete only TObjArray - if(aFolderObj) delete aFolderObj; -} - -//_____________________________________________________________________________ -TFolder* AliPtResolAnalysis::ExportToFolder(TObjArray * const array) -{ - // recreate folder every time and export objects to new one - // - if(!array) return NULL; - - AliPtResolAnalysis * comp=this; - TFolder *folder = comp->GetAnalysisFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AliPtResolAnalysis::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AliPtResolAnalysis class. +// +// a. functionality: +// - fills analysis control histograms +// +// b. data members: +// - control histograms +// +// Author: J.Otwinowski 04/11/2008 +//------------------------------------------------------------------------------ + +#include "TH1.h" +#include "TH2.h" +#include "TCanvas.h" +#include "THnSparse.h" + +#include "AliHeader.h" +#include "AliInputEventHandler.h" +#include "AliAnalysisManager.h" +#include "AliGenEventHeader.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliMultiplicity.h" +#include "AliTracker.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AliPhysicsSelection.h" +#include "AliTriggerAnalysis.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AliPtResolAnalysis.h" + +using namespace std; + +ClassImp(AliPtResolAnalysis) + +//_____________________________________________________________________________ + AliPtResolAnalysis::AliPtResolAnalysis(): AlidNdPt(), + fAnalysisFolder(0), + fTrackParamHist(0), + fTrackParamHist2(0) +{ + // default constructor + Init(); +} + +//_____________________________________________________________________________ +AliPtResolAnalysis::AliPtResolAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,title), + fAnalysisFolder(0), + fTrackParamHist(0), + fTrackParamHist2(0) +{ + Init(); +} + +//_____________________________________________________________________________ +AliPtResolAnalysis::~AliPtResolAnalysis() { + // + // destructor + // + if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; + if(fTrackParamHist) delete fTrackParamHist; fTrackParamHist=0; + if(fTrackParamHist2) delete fTrackParamHist2; fTrackParamHist2=0; +} + +//_____________________________________________________________________________ +void AliPtResolAnalysis::Init(){ + // + // Generic histograms to be corrected + // + //1/pT:#sigma(1/pT) + Int_t binsTrackParamHist[2]={400,300}; + Double_t minTrackParamHist[2]={0,0}; + Double_t maxTrackParamHist[2]={1,0.015}; + + fTrackParamHist = new THnSparseF("fTrackParamHist","1/pT:#sigma(1/pT)",2,binsTrackParamHist,minTrackParamHist,maxTrackParamHist); + fTrackParamHist->GetAxis(0)->SetTitle("1/pT (GeV/c)^{-1}"); + fTrackParamHist->GetAxis(1)->SetTitle("#sigma(1/pT)"); + fTrackParamHist->Sumw2(); + + //pt:sigma(1/pT)*pT + const Int_t ptNbins = 73; + Double_t bins[74] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0 }; + + Int_t binsTrackParamHist2[2]={ptNbins,200}; + Double_t minTrackParamHist2[2]={0,0}; + Double_t maxTrackParamHist2[2]={100,0.2}; + + fTrackParamHist2 = new THnSparseF("fTrackParamHist2","pT:#sigma(1/pT)*pT",2,binsTrackParamHist2,minTrackParamHist2,maxTrackParamHist2); + fTrackParamHist2->SetBinEdges(0,bins); + fTrackParamHist2->GetAxis(0)->SetTitle("pT (GeV/c)"); + fTrackParamHist2->GetAxis(1)->SetTitle("#sigma(1/pT)*pT"); + fTrackParamHist2->Sumw2(); + + // init folder + fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); +} + +//_____________________________________________________________________________ +void AliPtResolAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) +{ + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + // trigger selection + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + + // get reconstructed vertex + const AliESDVertex* vtxESD = 0; + Bool_t isRecVertex = kFALSE; + if(evtCuts->IsRecVertexRequired()) + { + Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); + Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); + vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); + isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); + } + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + // + TObjArray *allChargedTracks=0; + // check event cuts + if(isEventOK && isEventTriggered) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + //printf("entries %d \n",entries); + + // fill histograms + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + if(esdTrackCuts->AcceptTrack(track)) + { + if(accCuts->AcceptTrack(track)) + { + //Double_t x, par[5], cov[15]; + //track->GetExternalParameters(x, p); + //track->GetExternalCovariance(cov); + + Double_t v1[2] = {track->OneOverPt(),TMath::Sqrt(track->GetSigma1Pt2())}; + fTrackParamHist->Fill(v1); + + Double_t v2[2] = {track->Pt(),track->Pt()*TMath::Sqrt(track->GetSigma1Pt2())}; + fTrackParamHist2->Fill(v2); + } + } + } + } + } +} + +//_____________________________________________________________________________ +Long64_t AliPtResolAnalysis::Merge(TCollection* const list) +{ + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + // + //TList *collPhysSelection = new TList; + + // collection of generated histograms + + Int_t count=0; + while((obj = iter->Next()) != 0) { + AliPtResolAnalysis* entry = dynamic_cast(obj); + if (entry == 0) continue; + + // + fTrackParamHist->Add(entry->fTrackParamHist); + fTrackParamHist2->Add(entry->fTrackParamHist2); + } + +return count; +} + +//_____________________________________________________________________________ +void AliPtResolAnalysis::Analyse() +{ + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + // + // Reconstructed event vertex + // + + // export objects to analysis folder + fAnalysisFolder = ExportToFolder(aFolderObj); + if(!fAnalysisFolder) { + if(aFolderObj) delete aFolderObj; + return; + } + + // delete only TObjArray + if(aFolderObj) delete aFolderObj; +} + +//_____________________________________________________________________________ +TFolder* AliPtResolAnalysis::ExportToFolder(TObjArray * const array) +{ + // recreate folder every time and export objects to new one + // + if(!array) return NULL; + + AliPtResolAnalysis * comp=this; + TFolder *folder = comp->GetAnalysisFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AliPtResolAnalysis::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysisPbPb.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysisPbPb.cxx index 2fd662ecf4c..c0839393ab3 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysisPbPb.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AliPtResolAnalysisPbPb.cxx @@ -1,349 +1,349 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//------------------------------------------------------------------------------ -// AliPtResolAnalysisPbPb class. -// -// a. functionality: -// - fills analysis control histograms -// -// b. data members: -// - control histograms -// -// Author: J.Otwinowski 04/11/2008 -//------------------------------------------------------------------------------ - -#include "TH1.h" -#include "TH2.h" -#include "TCanvas.h" -#include "THnSparse.h" - -#include "AliHeader.h" -#include "AliInputEventHandler.h" -#include "AliAnalysisManager.h" -#include "AliGenEventHeader.h" -#include "AliStack.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDtrackCuts.h" -#include "AliLog.h" -#include "AliMultiplicity.h" -#include "AliTracker.h" -#include "AliCentrality.h" - -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AliPhysicsSelection.h" -#include "AliTriggerAnalysis.h" - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" -#include "AliPtResolAnalysisPbPb.h" - - -using namespace std; - -ClassImp(AliPtResolAnalysisPbPb) - -//_____________________________________________________________________________ - AliPtResolAnalysisPbPb::AliPtResolAnalysisPbPb(): AlidNdPt(), - fAnalysisFolder(0), - fTrackParamHist(0), - fTrackParamHist2(0), - fCentralityEstimator(0) -{ - // default constructor - Init(); -} - -//_____________________________________________________________________________ -AliPtResolAnalysisPbPb::AliPtResolAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title), - fAnalysisFolder(0), - fTrackParamHist(0), - fTrackParamHist2(0), - fCentralityEstimator(0) -{ - Init(); -} - -//_____________________________________________________________________________ -AliPtResolAnalysisPbPb::~AliPtResolAnalysisPbPb() { - // - // destructor - // - if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; - if(fTrackParamHist) delete fTrackParamHist; fTrackParamHist=0; - if(fTrackParamHist2) delete fTrackParamHist2; fTrackParamHist2=0; -} - -//_____________________________________________________________________________ -void AliPtResolAnalysisPbPb::Init(){ - // - // Generic histograms to be corrected - // - //1/pT:#sigma(1/pT):centrality - Int_t binsTrackParamHist[3]={400,300,11}; - Double_t minTrackParamHist[3]={0,0,0}; - Double_t maxTrackParamHist[3]={1,0.015,100}; - - Double_t centrBins[12] = {0.0,5.,10.,20.,30.,40.,50.,60.,70.,80.,90.,100}; - - - fTrackParamHist = new THnSparseF("fTrackParamHist","1/pT:#sigma(1/pT):centrality",3,binsTrackParamHist,minTrackParamHist,maxTrackParamHist); - fTrackParamHist->SetBinEdges(2,centrBins); - fTrackParamHist->GetAxis(0)->SetTitle("1/pT (GeV/c)^{-1}"); - fTrackParamHist->GetAxis(1)->SetTitle("#sigma(1/pT)"); - fTrackParamHist->GetAxis(2)->SetTitle("centrality"); - fTrackParamHist->Sumw2(); - - //pt:sigma(1/pT)*pT:centrality - const Int_t ptNbins = 73; - Double_t bins[74] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0 }; - - Int_t binsTrackParamHist2[3]={ptNbins,200,11}; - Double_t minTrackParamHist2[3]={0,0,0}; - Double_t maxTrackParamHist2[3]={100,0.2,100}; - - fTrackParamHist2 = new THnSparseF("fTrackParamHist2","pT:#sigma(1/pT)*pT:centrality",3,binsTrackParamHist2,minTrackParamHist2,maxTrackParamHist2); - fTrackParamHist2->SetBinEdges(0,bins); - fTrackParamHist2->GetAxis(0)->SetTitle("pT (GeV/c)"); - fTrackParamHist2->GetAxis(1)->SetTitle("#sigma(1/pT)*pT"); - fTrackParamHist2->GetAxis(2)->SetTitle("centrality"); - fTrackParamHist2->Sumw2(); - - // init folder - fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); - -} - -//_____________________________________________________________________________ -void AliPtResolAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) -{ - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - // trigger selection - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - - - // centrality determination - Float_t centralityF = -1.; - AliCentrality *esdCentrality = esdEvent->GetCentrality(); - centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); - - // get reconstructed vertex - const AliESDVertex* vtxESD = 0; - Bool_t isRecVertex = kFALSE; - if(evtCuts->IsRecVertexRequired()) - { - Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); - Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); - vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); - isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); - } - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - // - TObjArray *allChargedTracks=0; - // check event cuts - if(isEventOK && isEventTriggered) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - //printf("entries %d \n",entries); - - // fill histograms - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - if(esdTrackCuts->AcceptTrack(track)) - { - if(accCuts->AcceptTrack(track)) - { - //Double_t x, par[5], cov[15]; - //track->GetExternalParameters(x, p); - //track->GetExternalCovariance(cov); - - Double_t v[3] = {track->OneOverPt(),TMath::Sqrt(track->GetSigma1Pt2()),centralityF}; - fTrackParamHist->Fill(v); - - Double_t v2[3] = {track->Pt(),track->Pt()*TMath::Sqrt(track->GetSigma1Pt2()),centralityF}; - fTrackParamHist2->Fill(v2); - } - } - } - } - } -} - -//_____________________________________________________________________________ -Long64_t AliPtResolAnalysisPbPb::Merge(TCollection* const list) -{ - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - - // - //TList *collPhysSelection = new TList; - - // collection of generated histograms - - Int_t count=0; - while((obj = iter->Next()) != 0) { - AliPtResolAnalysisPbPb* entry = dynamic_cast(obj); - if (entry == 0) continue; - - // - fTrackParamHist->Add(entry->fTrackParamHist); - fTrackParamHist2->Add(entry->fTrackParamHist2); - } - -return count; -} - -//_____________________________________________________________________________ -void AliPtResolAnalysisPbPb::Analyse() -{ - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - // - // Reconstructed event vertex - // - - // export objects to analysis folder - fAnalysisFolder = ExportToFolder(aFolderObj); - if(!fAnalysisFolder) { - if(aFolderObj) delete aFolderObj; - return; - } - - // delete only TObjArray - if(aFolderObj) delete aFolderObj; -} - -//_____________________________________________________________________________ -TFolder* AliPtResolAnalysisPbPb::ExportToFolder(TObjArray * const array) -{ - // recreate folder avery time and export objects to new one - // - if(!array) return NULL; - - AliPtResolAnalysisPbPb * comp=this; - TFolder *folder = comp->GetAnalysisFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AliPtResolAnalysisPbPb::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AliPtResolAnalysisPbPb class. +// +// a. functionality: +// - fills analysis control histograms +// +// b. data members: +// - control histograms +// +// Author: J.Otwinowski 04/11/2008 +//------------------------------------------------------------------------------ + +#include "TH1.h" +#include "TH2.h" +#include "TCanvas.h" +#include "THnSparse.h" + +#include "AliHeader.h" +#include "AliInputEventHandler.h" +#include "AliAnalysisManager.h" +#include "AliGenEventHeader.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliMultiplicity.h" +#include "AliTracker.h" +#include "AliCentrality.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AliPhysicsSelection.h" +#include "AliTriggerAnalysis.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AliPtResolAnalysisPbPb.h" + + +using namespace std; + +ClassImp(AliPtResolAnalysisPbPb) + +//_____________________________________________________________________________ + AliPtResolAnalysisPbPb::AliPtResolAnalysisPbPb(): AlidNdPt(), + fAnalysisFolder(0), + fTrackParamHist(0), + fTrackParamHist2(0), + fCentralityEstimator(0) +{ + // default constructor + Init(); +} + +//_____________________________________________________________________________ +AliPtResolAnalysisPbPb::AliPtResolAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title), + fAnalysisFolder(0), + fTrackParamHist(0), + fTrackParamHist2(0), + fCentralityEstimator(0) +{ + Init(); +} + +//_____________________________________________________________________________ +AliPtResolAnalysisPbPb::~AliPtResolAnalysisPbPb() { + // + // destructor + // + if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; + if(fTrackParamHist) delete fTrackParamHist; fTrackParamHist=0; + if(fTrackParamHist2) delete fTrackParamHist2; fTrackParamHist2=0; +} + +//_____________________________________________________________________________ +void AliPtResolAnalysisPbPb::Init(){ + // + // Generic histograms to be corrected + // + //1/pT:#sigma(1/pT):centrality + Int_t binsTrackParamHist[3]={400,300,11}; + Double_t minTrackParamHist[3]={0,0,0}; + Double_t maxTrackParamHist[3]={1,0.015,100}; + + Double_t centrBins[12] = {0.0,5.,10.,20.,30.,40.,50.,60.,70.,80.,90.,100}; + + + fTrackParamHist = new THnSparseF("fTrackParamHist","1/pT:#sigma(1/pT):centrality",3,binsTrackParamHist,minTrackParamHist,maxTrackParamHist); + fTrackParamHist->SetBinEdges(2,centrBins); + fTrackParamHist->GetAxis(0)->SetTitle("1/pT (GeV/c)^{-1}"); + fTrackParamHist->GetAxis(1)->SetTitle("#sigma(1/pT)"); + fTrackParamHist->GetAxis(2)->SetTitle("centrality"); + fTrackParamHist->Sumw2(); + + //pt:sigma(1/pT)*pT:centrality + const Int_t ptNbins = 73; + Double_t bins[74] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0 }; + + Int_t binsTrackParamHist2[3]={ptNbins,200,11}; + Double_t minTrackParamHist2[3]={0,0,0}; + Double_t maxTrackParamHist2[3]={100,0.2,100}; + + fTrackParamHist2 = new THnSparseF("fTrackParamHist2","pT:#sigma(1/pT)*pT:centrality",3,binsTrackParamHist2,minTrackParamHist2,maxTrackParamHist2); + fTrackParamHist2->SetBinEdges(0,bins); + fTrackParamHist2->GetAxis(0)->SetTitle("pT (GeV/c)"); + fTrackParamHist2->GetAxis(1)->SetTitle("#sigma(1/pT)*pT"); + fTrackParamHist2->GetAxis(2)->SetTitle("centrality"); + fTrackParamHist2->Sumw2(); + + // init folder + fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); + +} + +//_____________________________________________________________________________ +void AliPtResolAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) +{ + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + // trigger selection + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + + + // centrality determination + Float_t centralityF = -1.; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); + + // get reconstructed vertex + const AliESDVertex* vtxESD = 0; + Bool_t isRecVertex = kFALSE; + if(evtCuts->IsRecVertexRequired()) + { + Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); + Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); + vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); + isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); + } + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + // + TObjArray *allChargedTracks=0; + // check event cuts + if(isEventOK && isEventTriggered) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + //printf("entries %d \n",entries); + + // fill histograms + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + if(esdTrackCuts->AcceptTrack(track)) + { + if(accCuts->AcceptTrack(track)) + { + //Double_t x, par[5], cov[15]; + //track->GetExternalParameters(x, p); + //track->GetExternalCovariance(cov); + + Double_t v[3] = {track->OneOverPt(),TMath::Sqrt(track->GetSigma1Pt2()),centralityF}; + fTrackParamHist->Fill(v); + + Double_t v2[3] = {track->Pt(),track->Pt()*TMath::Sqrt(track->GetSigma1Pt2()),centralityF}; + fTrackParamHist2->Fill(v2); + } + } + } + } + } +} + +//_____________________________________________________________________________ +Long64_t AliPtResolAnalysisPbPb::Merge(TCollection* const list) +{ + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + // + //TList *collPhysSelection = new TList; + + // collection of generated histograms + + Int_t count=0; + while((obj = iter->Next()) != 0) { + AliPtResolAnalysisPbPb* entry = dynamic_cast(obj); + if (entry == 0) continue; + + // + fTrackParamHist->Add(entry->fTrackParamHist); + fTrackParamHist2->Add(entry->fTrackParamHist2); + } + +return count; +} + +//_____________________________________________________________________________ +void AliPtResolAnalysisPbPb::Analyse() +{ + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + // + // Reconstructed event vertex + // + + // export objects to analysis folder + fAnalysisFolder = ExportToFolder(aFolderObj); + if(!fAnalysisFolder) { + if(aFolderObj) delete aFolderObj; + return; + } + + // delete only TObjArray + if(aFolderObj) delete aFolderObj; +} + +//_____________________________________________________________________________ +TFolder* AliPtResolAnalysisPbPb::ExportToFolder(TObjArray * const array) +{ + // recreate folder avery time and export objects to new one + // + if(!array) return NULL; + + AliPtResolAnalysisPbPb * comp=this; + TFolder *folder = comp->GetAnalysisFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AliPtResolAnalysisPbPb::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPt.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPt.cxx index 32259b42ccf..7b62581527f 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPt.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPt.cxx @@ -1,138 +1,138 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - // last change: 2013-06-13 by M.Knichel - -#include "AliESDtrackCuts.h" -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AliPhysicsSelection.h" -#include "AlidNdPtBackgroundCuts.h" -#include "AlidNdPt.h" - -using namespace std; - -ClassImp(AlidNdPt) - -//_____________________________________________________________________________ -AlidNdPt::AlidNdPt(): TNamed() -, fdNdPtEventCuts(0) -, fdNdPtAcceptanceCuts(0) -, fdNdPtRecAcceptanceCuts(0) -, fMultAcceptanceCuts(0) -, fEsdTrackCuts(0) -, fMultTrackCuts(0) -, fUseMCInfo(kFALSE) -, fAnalysisMode(AlidNdPtHelper::kTPC) -, fTrigger(AliTriggerAnalysis::kMB1) -, fTriggerClass(0) -, fParticleMode(AlidNdPtHelper::kAllPart) -, fPhysicsSelection(0) -, fdNdPtBackgroundCuts(0) -, fAnalyseOutput(kFALSE) -, fMergeTHnSparse(kTRUE) -, fTriggerMask(AliVEvent::kMB) -{ - // default constructor -} - -//_____________________________________________________________________________ -AlidNdPt::AlidNdPt(Char_t* name, Char_t* title): TNamed(name,title) -, fdNdPtEventCuts(0) -, fdNdPtAcceptanceCuts(0) -, fdNdPtRecAcceptanceCuts(0) -, fMultAcceptanceCuts(0) -, fEsdTrackCuts(0) -, fMultTrackCuts(0) -, fUseMCInfo(kFALSE) -, fAnalysisMode(AlidNdPtHelper::kTPC) -, fTrigger(AliTriggerAnalysis::kMB1) -, fTriggerClass(0) -, fParticleMode(AlidNdPtHelper::kAllPart) -, fPhysicsSelection(0) -, fdNdPtBackgroundCuts(0) -, fAnalyseOutput(kFALSE) -, fMergeTHnSparse(kTRUE) -, fTriggerMask(AliVEvent::kMB) -{ - // constructor -} - -AlidNdPt::AlidNdPt(const AlidNdPt&): TNamed() -, fdNdPtEventCuts(0) -, fdNdPtAcceptanceCuts(0) -, fdNdPtRecAcceptanceCuts(0) -, fMultAcceptanceCuts(0) -, fEsdTrackCuts(0) -, fMultTrackCuts(0) -, fUseMCInfo(kFALSE) -, fAnalysisMode(AlidNdPtHelper::kTPC) -, fTrigger(AliTriggerAnalysis::kMB1) -, fTriggerClass(0) -, fParticleMode(AlidNdPtHelper::kAllPart) -, fPhysicsSelection(0) -, fdNdPtBackgroundCuts(0) -, fAnalyseOutput(kFALSE) -, fMergeTHnSparse(kTRUE) -, fTriggerMask(AliVEvent::kMB) -{ - // not implemented -} - -AlidNdPt& AlidNdPt::operator=(const AlidNdPt&) -{ - // not implemented - return *this; -} - -//_____________________________________________________________________________ -AlidNdPt::~AlidNdPt() { - // destructor - if(fdNdPtEventCuts) delete fdNdPtEventCuts; fdNdPtEventCuts=NULL; - if(fdNdPtAcceptanceCuts) delete fdNdPtAcceptanceCuts; fdNdPtAcceptanceCuts=NULL; - if(fMultAcceptanceCuts) delete fMultAcceptanceCuts; fMultAcceptanceCuts=NULL; - if(fdNdPtRecAcceptanceCuts) delete fdNdPtRecAcceptanceCuts; fdNdPtRecAcceptanceCuts=NULL; - if(fEsdTrackCuts) delete fEsdTrackCuts; fEsdTrackCuts=NULL; - if(fMultTrackCuts) delete fMultTrackCuts; fMultTrackCuts=NULL; - if(fPhysicsSelection) delete fPhysicsSelection; fPhysicsSelection=NULL; - if(fdNdPtBackgroundCuts) delete fdNdPtBackgroundCuts; fdNdPtBackgroundCuts=NULL; -} - -//_____________________________________________________________________________ -Double_t * AlidNdPt::CreateLogAxis(Int_t nbins, Double_t xmin, Double_t xmax) { - // retun pointer to the array with log axis - // it is user responsibility to delete the array - - Double_t logxmin = TMath::Log10(xmin); - Double_t logxmax = TMath::Log10(xmax); - Double_t binwidth = (logxmax-logxmin)/nbins; - - Double_t *xbins = new Double_t[nbins+1]; - - xbins[0] = xmin; - for (Int_t i=1;i<=nbins;i++) { - xbins[i] = xmin + TMath::Power(10,logxmin+i*binwidth); - } - -return xbins; -} -//_____________________________________________________________________________ - -Double_t* AlidNdPt::CloneArray(Int_t n, Double_t* source) -{ - if (!source || n==0) return 0; - Double_t* dest = new Double_t[n]; - for (Int_t i=0; iSetBinEdges(0,fBinsZv); - fRecEventHist->SetBinEdges(1,fBinsMult); - fRecEventHist->GetAxis(0)->SetTitle("Zv (cm)"); - fRecEventHist->GetAxis(1)->SetTitle("multiplicity MB"); - fRecEventHist->Sumw2(); - - // - Int_t binsTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; - // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; - // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; - - fRecTrackHist = new THnSparseF("fRecTrackHist","Zv:pT:eta:multRecMult",4,binsTrackHist); //,minTrackHist,maxTrackHist); - fRecTrackHist->SetBinEdges(0,fBinsZv); - fRecTrackHist->SetBinEdges(1,fBinsPt); - fRecTrackHist->SetBinEdges(2,fBinsEta); - fRecTrackHist->SetBinEdges(3,fBinsMult); - fRecTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); - fRecTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)"); - fRecTrackHist->GetAxis(2)->SetTitle("#eta"); - fRecTrackHist->GetAxis(3)->SetTitle("multiplicity (multCuts)"); - fRecTrackHist->Sumw2(); - - Int_t binsMCPrimTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; - // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; - // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; - - fMCPrimTrackHist = new THnSparseF("fMCPrimTrackHist","Zv:mcpT:mceta:multTrueMC",4,binsMCPrimTrackHist); - fMCPrimTrackHist->SetBinEdges(0,fBinsZv); - fMCPrimTrackHist->SetBinEdges(1,fBinsPt); - fMCPrimTrackHist->SetBinEdges(2,fBinsEta); - fMCPrimTrackHist->SetBinEdges(3,fBinsMult); - fMCPrimTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); - fMCPrimTrackHist->GetAxis(1)->SetTitle("MC p_{T} (GeV/c)"); - fMCPrimTrackHist->GetAxis(2)->SetTitle("#eta (MC)"); - fMCPrimTrackHist->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fMCPrimTrackHist->Sumw2(); - - // - // rec. vs MC correlation matrices - // - Int_t binsMultTrueEventMatrix[3]={fMultNbins,fMultNbins,fMultNbins}; -// Double_t minMultTrueEventMatrix[3]={-0.5,-0.5,-0.5}; -// Double_t maxMultTrueEventMatrix[3]={149.5,149.5,149.5}; - fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","multRecMult:multTrueMC:multMB",3,binsMultTrueEventMatrix); //,minMultTrueEventMatrix,maxMultTrueEventMatrix); - fEventMultCorrelationMatrix->SetBinEdges(0,fBinsMult); - fEventMultCorrelationMatrix->SetBinEdges(1,fBinsMult); - fEventMultCorrelationMatrix->SetBinEdges(2,fBinsMult); - fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("multiplicity (multCuts)"); - fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fEventMultCorrelationMatrix->GetAxis(2)->SetTitle("MB multiplicity"); - fEventMultCorrelationMatrix->Sumw2(); - - Int_t binsTrackPtCorrelationMatrix[3]={fPtCorrNbins,fPtCorrNbins,fEtaNbins}; - fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix); - fTrackPtCorrelationMatrix->SetBinEdges(0,fBinsPtCorr); - fTrackPtCorrelationMatrix->SetBinEdges(1,fBinsPtCorr); - fTrackPtCorrelationMatrix->SetBinEdges(2,fBinsEta); - fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta"); - fTrackPtCorrelationMatrix->Sumw2(); - - // - // Efficiency and contamination correction matrices - // - Int_t binsEventMatrix[2]={fZvNbins,fMultNbins}; -// Double_t minEventMatrix[2]={-25.,-0.5}; -// Double_t maxEventMatrix[2]={25.,149.5}; - - fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenEventMatrix->SetBinEdges(0,fBinsZv); - fGenEventMatrix->SetBinEdges(1,fBinsMult); - fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenEventMatrix->Sumw2(); - - fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenSDEventMatrix->SetBinEdges(1,fBinsMult); - fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenSDEventMatrix->Sumw2(); - - fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenDDEventMatrix->SetBinEdges(0,fBinsZv); - fGenDDEventMatrix->SetBinEdges(1,fBinsMult); - fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenDDEventMatrix->Sumw2(); - - fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenNDEventMatrix->SetBinEdges(0,fBinsZv); - fGenNDEventMatrix->SetBinEdges(1,fBinsMult); - fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenNDEventMatrix->Sumw2(); - - fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenNSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenNSDEventMatrix->SetBinEdges(1,fBinsMult); - fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenNSDEventMatrix->Sumw2(); - - // - fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerEventMatrix->Sumw2(); - - fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerSDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerSDEventMatrix->Sumw2(); - - fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerDDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerDDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerDDEventMatrix->Sumw2(); - - fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerNDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerNDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerNDEventMatrix->Sumw2(); - - fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerNSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerNSDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerNSDEventMatrix->Sumw2(); - - // - fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecEventMatrix->SetBinEdges(0,fBinsZv); - fRecEventMatrix->SetBinEdges(1,fBinsMult); - fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecEventMatrix->Sumw2(); - - fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecSDEventMatrix->SetBinEdges(1,fBinsMult); - fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecSDEventMatrix->Sumw2(); - - fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecDDEventMatrix->SetBinEdges(0,fBinsZv); - fRecDDEventMatrix->SetBinEdges(1,fBinsMult); - fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecDDEventMatrix->Sumw2(); - - fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecNDEventMatrix->SetBinEdges(0,fBinsZv); - fRecNDEventMatrix->SetBinEdges(1,fBinsMult); - fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecNDEventMatrix->Sumw2(); - - fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecNSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecNSDEventMatrix->SetBinEdges(1,fBinsMult); - fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecNSDEventMatrix->Sumw2(); - - fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecCandleEventMatrix->SetBinEdges(0,fBinsZv); - fRecCandleEventMatrix->SetBinEdges(1,fBinsMult); - fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecCandleEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecCandleEventMatrix->Sumw2(); - - // - // track to event corrections - // - - fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackEventMatrix->SetBinEdges(3,fBinsMult); - fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackEventMatrix->Sumw2(); - - fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackSDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackSDEventMatrix->SetBinEdges(3,fBinsMult); - fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackSDEventMatrix->Sumw2(); - - fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackDDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackDDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackDDEventMatrix->SetBinEdges(3,fBinsMult); - fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackDDEventMatrix->Sumw2(); - - fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackNDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackNDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackNDEventMatrix->SetBinEdges(3,fBinsMult); - fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackNDEventMatrix->Sumw2(); - - fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackNSDEventMatrix->SetBinEdges(3,fBinsMult); - fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackNSDEventMatrix->Sumw2(); - - - // - fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackEventMatrix->SetBinEdges(3,fBinsMult); - fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackEventMatrix->Sumw2(); - - fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackSDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackSDEventMatrix->SetBinEdges(3,fBinsMult); - fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackSDEventMatrix->Sumw2(); - - fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackDDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackDDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackDDEventMatrix->SetBinEdges(3,fBinsMult); - fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackDDEventMatrix->Sumw2(); - - fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackNDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackNDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackNDEventMatrix->SetBinEdges(3,fBinsMult); - fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackNDEventMatrix->Sumw2(); - - fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackNSDEventMatrix->SetBinEdges(3,fBinsMult); - fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackNSDEventMatrix->Sumw2(); - - // - fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackEventMatrix->SetBinEdges(3,fBinsMult); - fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackEventMatrix->Sumw2(); - - fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackSDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackSDEventMatrix->SetBinEdges(3,fBinsMult); - fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackSDEventMatrix->Sumw2(); - - fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackDDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackDDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackDDEventMatrix->SetBinEdges(3,fBinsMult); - fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackDDEventMatrix->Sumw2(); - - fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackNDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackNDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackNDEventMatrix->SetBinEdges(3,fBinsMult); - fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackNDEventMatrix->Sumw2(); - - fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackNSDEventMatrix->SetBinEdges(3,fBinsMult); - fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackNSDEventMatrix->Sumw2(); - - // - // tracks correction matrices - // - //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fGenTrackMatrix->SetBinEdges(0,fBinsZv); - //fGenTrackMatrix->SetBinEdges(1,binsPt); - fGenTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackMatrix->SetBinEdges(2,fBinsEta); - fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackMatrix->Sumw2(); - - //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fGenPrimTrackMatrix->SetBinEdges(0,fBinsZv); - //fGenPrimTrackMatrix->SetBinEdges(1,binsPt); - fGenPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fGenPrimTrackMatrix->SetBinEdges(2,fBinsEta); - fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenPrimTrackMatrix->Sumw2(); - - //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fRecPrimTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecPrimTrackMatrix->SetBinEdges(1,binsPt); - fRecPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecPrimTrackMatrix->SetBinEdges(2,fBinsEta); - fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecPrimTrackMatrix->Sumw2(); - - // - //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fRecTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecTrackMatrix->SetBinEdges(1,binsPt); - fRecTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackMatrix->SetBinEdges(2,fBinsEta); - fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); - fRecTrackMatrix->GetAxis(2)->SetTitle("Eta"); - fRecTrackMatrix->Sumw2(); - - //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fRecSecTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecSecTrackMatrix->SetBinEdges(1,binsPt); - fRecSecTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecSecTrackMatrix->SetBinEdges(2,fBinsEta); - fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); - fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta"); - fRecSecTrackMatrix->Sumw2(); - - // - //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fRecMultTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecMultTrackMatrix->SetBinEdges(1,binsPt); - fRecMultTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecMultTrackMatrix->SetBinEdges(2,fBinsEta); - fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecMultTrackMatrix->Sumw2(); - - // - // Control analysis histograms - // - - Int_t binsMCEventHist1[3]={100,100,140}; - Double_t minMCEventHist1[3]={-0.1,-0.1,-35.}; - Double_t maxMCEventHist1[3]={0.1,0.1,35.}; - fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1); - fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)"); - fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)"); - fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)"); - fMCEventHist1->Sumw2(); - - // - Int_t binsRecEventHist1[3]={100,100,140}; - Double_t minRecEventHist1[3]={-3.,-3.,-35.}; - Double_t maxRecEventHist1[3]={3.,3.,35.}; - - fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1); - fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)"); - fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)"); - fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)"); - fRecEventHist1->Sumw2(); - - // - Int_t binsRecEventHist2[3]={fZvNbins,fMultNbins,fMultNbins}; -// Double_t minRecEventHist2[3]={-25.,-0.5,-0.5}; -// Double_t maxRecEventHist2[3]={25.,149.5,149.5}; - - fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:multRecMult",3,binsRecEventHist2); //,minRecEventHist2,maxRecEventHist2); - fRecEventHist2->SetBinEdges(0,fBinsZv); - fRecEventHist2->SetBinEdges(1,fBinsMult); - fRecEventHist2->SetBinEdges(2,fBinsMult); - fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)"); - fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB"); - fRecEventHist2->GetAxis(2)->SetTitle("multiplicity (multCuts)"); - fRecEventHist2->Sumw2(); - - // - Double_t kFact = 0.1; - Int_t binsRecMCEventHist1[3]={100,100,100}; - Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; - Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; - - fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1); - fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); - fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); - fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); - fRecMCEventHist1->Sumw2(); - - // - Int_t binsRecMCEventHist2[3]={100,100,fMultNbins}; - Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0}; - Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50}; - - fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:multMB",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2); - fRecMCEventHist2->SetBinEdges(2,fBinsMult); - fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); - fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)"); - fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity MB"); - fRecMCEventHist2->Sumw2(); - - Int_t binsRecMCEventHist3[2]={fMultNbins,5}; - Double_t minRecMCEventHist3[2]={-0.5,0.0}; - Double_t maxRecMCEventHist3[2]={149.50,5.0}; - fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","multRecMult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3); - fRecMCEventHist3->SetBinEdges(0,fBinsMult); - fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity (multCuts)"); - fRecMCEventHist3->GetAxis(1)->SetTitle("EventType"); - fRecMCEventHist3->Sumw2(); - - // - char name[256]; - char title[256]; - for(Int_t i=0; iSetBinEdges(0,fBinsPtCorr); - fMCTrackHist1[i]->SetBinEdges(1,fBinsEta); - fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); - fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)"); - fMCTrackHist1[i]->Sumw2(); - - Int_t binsMCPrimTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; - Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; - Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; - snprintf(name,256,"fMCPrimTrackHist1_%d",i); - snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); - - fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1); - fMCPrimTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); - fMCPrimTrackHist1[i]->SetBinEdges(1,fBinsEta); - fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); - fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid"); - fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech"); - fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother"); - fMCPrimTrackHist1[i]->Sumw2(); - - Int_t binsMCPrimTrackHist2[3]= {4000,20,4000}; - Double_t minMCPrimTrackHist2[3]={0.,0.,0.}; - Double_t maxMCPrimTrackHist2[3]={4000.,20.,4000.}; - snprintf(name,256,"fMCPrimTrackHist2_%d",i); - snprintf(title,256,"pdg:mech:mother"); - - fMCPrimTrackHist2[i] = new THnSparseF(name,title,3,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2); - fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg"); - fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech"); - fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother"); - fMCPrimTrackHist2[i]->Sumw2(); - - Int_t binsMCSecTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; - Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; - Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; - snprintf(name,256,"fMCSecTrackHist1_%d",i); - snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); - - fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1); - fMCSecTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); - fMCSecTrackHist1[i]->SetBinEdges(1,fBinsEta); - fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); - fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid"); - fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech"); - fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother"); - fMCSecTrackHist1[i]->Sumw2(); - - // - - // - - Int_t binsRecTrackHist1[3]={fPtNbins,fEtaNbins,90}; - Double_t minRecTrackHist1[3]={0.,-1.,0.}; - Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()}; - snprintf(name,256,"fRecTrackHist1_%d",i); - snprintf(title,256,"Pt:Eta:Phi"); - fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1); - fRecTrackHist1[i]->SetBinEdges(0,fBinsPt); - fRecTrackHist1[i]->SetBinEdges(1,fBinsEta); - fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)"); - fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta"); - fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)"); - fRecTrackHist1[i]->Sumw2(); - - // - Int_t binsRecTrackMultHist1[2]={fPtNbins,fMultNbins}; - snprintf(name,256,"fRecTrackMultHist_%d",i); - snprintf(title,256,"Pt:Mult"); - fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1); //,minRecTrackMultHist1,maxRecTrackMultHist1); - fRecTrackMultHist1[i]->SetBinEdges(0,fBinsPt); - fRecTrackMultHist1[i]->SetBinEdges(1,fBinsMult); - fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity"); - fRecTrackMultHist1[i]->Sumw2(); - } - - Int_t binsRecMCTrackHist1[4] = {fPtCorrNbins,fEtaNbins,100,100}; - Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5}; - Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5}; - snprintf(name,256,"fRecMCTrackHist1"); - snprintf(title,256,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)"); - - fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1); - fRecMCTrackHist1->SetBinEdges(0,fBinsPtCorr); - fRecMCTrackHist1->SetBinEdges(1,fBinsEta); - fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta"); - fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt"); - fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta"); - - Int_t binsMCMultRecTrackHist1[3] = {fPtCorrNbins,fEtaNbins,6}; - Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.}; - Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.}; - snprintf(name,256,"fMCMultRecTrackHist1"); - snprintf(title,256,"mcPt:mcEta:pid"); - fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1); - fMCMultRecTrackHist1->SetBinEdges(0,fBinsPtCorr); - fMCMultRecTrackHist1->SetBinEdges(1,fBinsEta); - fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta"); - fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid"); - - //nClust:chi2PerClust:pt:eta:phi - Int_t binsRecTrackHist2[5]={160,100,fPtNbins,fEtaNbins,90}; - Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.}; - Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()}; - - fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2); - fRecTrackHist2->SetBinEdges(2,fBinsPt); - fRecTrackHist2->SetBinEdges(3,fBinsEta); - fRecTrackHist2->GetAxis(0)->SetTitle("nClust"); - fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust"); - fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); - fRecTrackHist2->GetAxis(3)->SetTitle("#eta"); - fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)"); - fRecTrackHist2->Sumw2(); - - Int_t binsEventCount[3]={2,2,2}; - Double_t minEventCount[3]={0,0,0}; - Double_t maxEventCount[3]={2,2,2}; - fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount); - fEventCount->GetAxis(0)->SetTitle("trig"); - fEventCount->GetAxis(1)->SetTitle("trig+vert"); - fEventCount->GetAxis(2)->SetTitle("selected"); - fEventCount->Sumw2(); - - // init folder - fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); - - // set init flag - fIsInit = kTRUE; -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) -{ - // init if not done already - if (!fIsInit) { Init(); } - - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - AlidNdPtAcceptanceCuts *multAccCuts = GetMultAcceptanceCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - // trigger selection - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - if(evtCuts->IsTriggerRequired()) - { - // always MB - //isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - isEventTriggered = inputHandler->IsEventSelected() & GetTriggerMask(); - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - - // calculate LHC background - if(!IsUseMCInfo()) - { - // - // 0-multiplicity bin for LHC background correction - // - /* bin0 done in the train - if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) - { - physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx); - } else { - physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx); - } - */ - } - } - - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; - - Int_t multMCTrueTracks = 0; - if(IsUseMCInfo()) - { - // - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - // get event type (ND=0x1, DD=0x2, SD=0x4) - evtType = AliPWG0Helper::GetEventProcessType(header); - AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; - fMCEventHist1->Fill(vMCEventHist1); - - // multipliticy of all MC primary tracks - // in Zv, pt and eta ranges) - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts); - - } // end bUseMC - - - // get reconstructed vertex - const AliESDVertex* vtxESD = 0; - Bool_t isRecVertex = kFALSE; - if(evtCuts->IsRecVertexRequired()) - { - Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); - Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); - vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); - if(!vtxESD) return; - isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); - } - - if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) { - vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC"); - if(!vtxESD) return; - isRecVertex = kTRUE; - } - if(!vtxESD) return; - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - Bool_t isTrigAndVertex = isEventTriggered && isEventOK; - - Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)}; - fEventCount->Fill(vEventCount); - - // vertex contributors - Int_t multMBTracks = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) - { - if(vtxESD && vtxESD->GetStatus() && isRecVertex) - multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts); - } - else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || - GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate ) - { - const AliMultiplicity* mult = esdEvent->GetMultiplicity(); - if(mult && vtxESD && vtxESD->GetStatus() && isRecVertex) - multMBTracks = mult->GetNumberOfTracklets(); - } - else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || - GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || - GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx - ) - { - if(vtxESD && vtxESD->GetStatus() && isRecVertex) - multMBTracks = vtxESD->GetNContributors(); - } - else { - AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode())); - return; - } - - Bool_t isEventSelected = kTRUE; - if(evtCuts->IsEventSelectedRequired()) - { - // select events with at least - // one prompt track in acceptance - // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies - - isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts); - //printf("isEventSelected %d \n", isEventSelected); - } - - TObjArray *allChargedTracks=0; - //Int_t multAll=0, multAcc=0, multRec=0; - Int_t multAll=0, multRec=0; - Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0; - - - // check event cuts - Int_t multRecMult=0; - if(isEventOK && isEventTriggered && isEventSelected) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - //printf("entries %d \n",entries); - - - // calculate mult of reconstructed tracks - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - if(GetMultTrackCuts()->AcceptTrack(track)) - { - if(GetMultAcceptanceCuts()->AcceptTrack(track)) multRecMult++; - } - } - - - labelsAll = new Int_t[entries]; - labelsAcc = new Int_t[entries]; - labelsRec = new Int_t[entries]; - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecMult); - labelsAll[multAll] = TMath::Abs(track->GetLabel()); - multAll++; - - //if(accCuts->AcceptTrack(track)) { - //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); - //labelsAcc[multAcc] = TMath::Abs(track->GetLabel()); - //multAcc++; - //} - - // esd track selection - // ITS stand alone - if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx) - { - if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; - if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; - if(track->GetNcls(0)<4) continue; - if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; - } - else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx) - { - // - // ITS and TPC stand alone tracks - // - if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; - if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; - if(track->GetNcls(0)<4) continue; - if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; - - // Check matching with TPC only track - Bool_t hasMatch = kFALSE; - for(Int_t j=0; jAt(j); - if(!track2) continue; - if(track2->Charge()==0) continue; - if (!track2->GetTPCInnerParam()) continue; - - // check loose cuts for TPC tracks - if(!esdTrackCuts->AcceptTrack(track2)) continue; - - AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam())); - if(!innerTPC) continue; - Double_t x2[3]; track2->GetXYZ(x2); - Double_t b2[3]; AliTracker::GetBxByBz(x2,b2); - Double_t dz[2],cov[3]; - Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov); - if(!isPropOK && innerTPC) {delete innerTPC; continue;} - - // check matching - if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; } - if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; } - if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; } - - hasMatch = kTRUE; - if(innerTPC) delete innerTPC; - } - - if(!hasMatch) continue; - } - else { - // check track cuts - - if(!esdTrackCuts->AcceptTrack(track)) - continue; - } - - // - Bool_t isOK = kFALSE; - Double_t x[3]; track->GetXYZ(x); - Double_t b[3]; AliTracker::GetBxByBz(x,b); - - // - // if TPC-ITS hybrid tracking (kTPCITSHybrid) - // replace track parameters with TPC-ony track parameters - // - if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) - { - // Relate TPC-only tracks to Track or SPD vertex - isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); - if(!isOK) continue; - - // replace esd track parameters with TPCinner - AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); - if (tpcTrack) { - track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); - } - if(tpcTrack) delete tpcTrack; - } - - - // update track parameters using vertex point - if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ) - { - // update track parameters - AliExternalTrackParam cParam; - isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam); - if(!isOK) continue; - track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); - - if(accCuts->AcceptTrack(track)) { - FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); - labelsRec[multRec] = TMath::Abs(track->GetLabel()); - multRec++; - } - } - else { - if(accCuts->AcceptTrack(track)) - { - FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); - labelsRec[multRec] = TMath::Abs(track->GetLabel()); - multRec++; - } - } - } - - - // fill track multiplicity histograms - // terribly slow - // FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec); - - Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()}; - fRecEventHist1->Fill(vRecEventHist1); - - Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRecMult}; - fRecEventHist2->Fill(vRecEventHist2); - - // - Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks}; - fRecEventHist->Fill(vRecEventHist); - } - - if(IsUseMCInfo()) - { - if(mcEvent) { - - if(evtCuts->IsEventSelectedRequired()) - { - // select events with at least - // one MC primary track in acceptance - // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies - - Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent); - //printf("isMCEventSelected %d \n", isMCEventSelected); - if(!isMCEventSelected) { - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - if(labelsAll) delete [] labelsAll; labelsAll = 0; - if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; - if(labelsRec) delete [] labelsRec; labelsRec = 0; - - return; - } - } - - Double_t vMultTrueEventMatrix[3] = { multRecMult, multMCTrueTracks, multMBTracks}; - if(isEventOK && isEventTriggered) { - if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted - fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix); - } - - // - // event level corrections (zv,N_MB) - // - - // all inelastic - Double_t vEventMatrix[2] = {vtxMC[2],multMCTrueTracks}; - fGenEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix); - - // single diffractive - if(evtType == AliPWG0Helper::kSD) { - fGenSDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix); - } - - // double diffractive - if(evtType == AliPWG0Helper::kDD) { - fGenDDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix); - } - - // non diffractive - if(evtType == AliPWG0Helper::kND) { - fGenNDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix); - } - - // non single diffractive - if(evtType != AliPWG0Helper::kSD) { - fGenNSDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix); - } - - // - // track-event level corrections (zv,pt,eta) - // - for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) - { - TParticle* particle = stack->Particle(iMc); - if (!particle) - continue; - - // only charged particles - if(!particle->GetPDG()) continue; - Double_t charge = particle->GetPDG()->Charge()/3.; - if ( TMath::Abs(charge) < 0.001 ) - continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) - continue; - - // physical primary - Bool_t prim = stack->IsPhysicalPrimary(iMc); - if(!prim) continue; - - // checked accepted - if(accCuts->AcceptTrack(particle)) - { - Double_t vTrackEventMatrix[4] = {vtxMC[2], particle->Pt(), particle->Eta(),multMCTrueTracks}; - fGenTrackEventMatrix->Fill(vTrackEventMatrix); - - if(evtType == AliPWG0Helper::kSD) { - fGenTrackSDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kDD) { - fGenTrackDDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kND) { - fGenTrackNDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType != AliPWG0Helper::kSD) { - fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix); - } - - // - if(!isEventTriggered) continue; - - fTriggerTrackEventMatrix->Fill(vTrackEventMatrix); - if(evtType == AliPWG0Helper::kSD) { - fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kDD) { - fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kND) { - fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType != AliPWG0Helper::kSD) { - fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix); - } - - // - if(!isEventOK) continue; - - fRecTrackEventMatrix->Fill(vTrackEventMatrix); - if(evtType == AliPWG0Helper::kSD) { - fRecTrackSDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kDD) { - fRecTrackDDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kND) { - fRecTrackNDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType != AliPWG0Helper::kSD) { - fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix); - } - } - } - - // - // track-level corrections (zv,pt,eta) - // - if(isEventOK && isEventTriggered) - { - - // fill MC and rec event control histograms - if(fHistogramsOn) { - Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]}; - fRecMCEventHist1->Fill(vRecMCEventHist1); - - Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks}; - fRecMCEventHist2->Fill(vRecMCEventHist2); - - Double_t vRecMCEventHist3[2] = {multRecMult,evtType}; - fRecMCEventHist3->Fill(vRecMCEventHist3); - } - - // - // MC histograms for track efficiency studies - // - Int_t countRecCandle = 0; - for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) - { - TParticle* particle = stack->Particle(iMc); - if (!particle) - continue; - - Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; - - // all genertated primaries including neutral - //if( iMc < stack->GetNprimary() ) { - //fGenTrackMatrix->Fill(vTrackMatrix); - //} - - // only charged particles - if(!particle->GetPDG()) continue; - Double_t charge = particle->GetPDG()->Charge()/3.; - if (TMath::Abs(charge) < 0.001) - continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) - continue; - - // physical primary - Bool_t prim = stack->IsPhysicalPrimary(iMc); - - // check accepted - if(accCuts->AcceptTrack(particle)) - { - if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { - fGenPrimTrackMatrix->Fill(vTrackMatrix); - Double_t vMCPrimTrackHist[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; - fMCPrimTrackHist->Fill(vMCPrimTrackHist); - } - - // fill control histograms - if(fHistogramsOn) - FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); - - // check multiple found tracks - Int_t multCount = 0; - for(Int_t iRec=0; iRec1) - { - fRecMultTrackMatrix->Fill(vTrackMatrix); - - // fill control histogram - if(fHistogramsOn) { - Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); - Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid}; - fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1); - } - } - } - } - - // check reconstructed - for(Int_t iRec=0; iRecFill(vTrackMatrix); - - if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { - fRecPrimTrackMatrix->Fill(vTrackMatrix); - //AliESDtrack *track = esdEvent->GetTrack(iRec); - //if(track && track->GetKinkIndex(0) < 0) - // printf("prim kink \n"); - countRecCandle++; - } - - if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix); - - // fill control histograms - if(fHistogramsOn) - FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks); - - break; - } - } - } - } - - if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix); - } - } - }// end bUseMC - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - if(labelsAll) delete [] labelsAll; labelsAll = 0; - if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; - if(labelsRec) delete [] labelsRec; labelsRec = 0; - - if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD; - //if(trigAna) delete trigAna; - -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysis::FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec) { - // multiplicity histograms - - if(!allChargedTracks) return; - if(!labelsAll) return; - if(!labelsAcc) return; - if(!labelsRec) return; - - Int_t entries = allChargedTracks->GetEntries(); - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge() == 0) continue; - - Int_t label = TMath::Abs(track->GetLabel()); - for(Int_t iAll=0; iAllPt(), multAll}; - fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1); - } - } - for(Int_t iAcc=0; iAccPt(), multAcc}; - fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2); - } - } - for(Int_t iRec=0; iRecPt(), multRec}; - fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3); - } - } - } -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multRecMult) -{ - // - // Fill ESD track and MC histograms - // - if(!esdTrack) return; - - Float_t q = esdTrack->Charge(); - if(TMath::Abs(q) < 0.001) return; - - Float_t pt = esdTrack->Pt(); - //Float_t qpt = esdTrack->Pt() * q; - Float_t eta = esdTrack->Eta(); - Float_t phi = esdTrack->Phi(); - - Float_t dca[2], bCov[3]; - esdTrack->GetImpactParameters(dca,bCov); - - Int_t nClust = esdTrack->GetTPCclusters(0); - Float_t chi2PerCluster = 0.; - if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); - - - // fill histograms - Double_t values1[3] = {pt,eta,phi}; - fRecTrackHist1[trackObj]->Fill(values1); - - Double_t values[4] = {zv, pt,eta, multRecMult}; - if(trackObj == AlidNdPtHelper::kRecTracks) { - fRecTrackHist->Fill(values); - } - - /* - Double_t values2[5] = {nClust,chi2PerCluster,pt,eta,phi}; - if(trackObj == AlidNdPtHelper::kRecTracks) - { - if(fHistogramsOn) - fRecTrackHist2->Fill(values2); - } - */ - - // - // Fill rec vs MC information - // - if(!stack) return; - - Int_t label = TMath::Abs(esdTrack->GetLabel()); - //if(label == 0) return; - - if(label > stack->GetNtrack()) return; - TParticle* particle = stack->Particle(label); - if(!particle) return; - - //Bool_t prim = stack->IsPhysicalPrimary(label); - //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); - - Int_t motherPdg = -1; - TParticle* mother = 0; - - //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); - Int_t motherLabel = particle->GetMother(0); - if(motherLabel>0) mother = stack->Particle(motherLabel); - if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only - //Int_t mech = particle->GetUniqueID(); // production mechanism - - if(!particle->GetPDG()) return; - Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 - if(TMath::Abs(gq)<0.001) return; - Float_t gpt = particle->Pt(); - Float_t geta = particle->Eta(); - //Float_t qgpt = particle->Pt() * gq; - //Float_t gphi = particle->Phi(); - - Double_t dpt=0; - //printf("pt %f, gpt %f \n",pt,gpt); - if(gpt) dpt = (pt-gpt)/gpt; - Double_t deta = (eta-geta); - - // fill histograms - if(trackObj == AlidNdPtHelper::kRecTracks) - { - Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta}; - fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix); - - Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta}; - fRecMCTrackHist1->Fill(vRecMCTrackHist1); - } -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj) -{ - // Fill MC histograms - if(!stack) return; - - if(label > stack->GetNtrack()) return; - TParticle* particle = stack->Particle(label); - if(!particle) return; - - Int_t motherPdg = -1; - TParticle* mother = 0; - - //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); - Int_t motherLabel = particle->GetMother(0); - if(motherLabel>0) mother = stack->Particle(motherLabel); - if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only - Int_t mech = particle->GetUniqueID(); // production mechanism - - if(!particle->GetPDG()) return; - Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 - if(TMath::Abs(gq) < 0.001) return; - - Float_t gpt = particle->Pt(); - //Float_t qgpt = particle->Pt() * gq; - Float_t geta = particle->Eta(); - Float_t gphi = particle->Phi(); - //Float_t gpz = particle->Pz(); - - Bool_t prim = stack->IsPhysicalPrimary(label); - //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz(); - - Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); - - //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech); - //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech); - - // - // fill histogram - // - Double_t vMCTrackHist1[3] = {gpt,geta,gphi}; - fMCTrackHist1[trackObj]->Fill(vMCTrackHist1); - - Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg}; - Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg}; - //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); - if(prim) { - fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); - if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2); - } - else { - fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); - } - -} - -//_____________________________________________________________________________ -Long64_t AlidNdPtAnalysis::Merge(TCollection* const list) -{ - // init if not done already - if (!fIsInit) { Init(); } - - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - - // - //TList *collPhysSelection = new TList; - - // collection of generated histograms - - Int_t count=0; - while((obj = iter->Next()) != 0) { - AlidNdPtAnalysis* entry = dynamic_cast(obj); - if (entry == 0) continue; - - // physics selection - //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection()); - //collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); - - // - fRecEventHist->Add(entry->fRecEventHist); - fRecTrackHist->Add(entry->fRecTrackHist); - - // - fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix); - fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix); - - // - fGenEventMatrix->Add(entry->fGenEventMatrix); - fGenSDEventMatrix->Add(entry->fGenSDEventMatrix); - fGenDDEventMatrix->Add(entry->fGenDDEventMatrix); - fGenNDEventMatrix->Add(entry->fGenNDEventMatrix); - fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix); - - fTriggerEventMatrix->Add(entry->fTriggerEventMatrix); - fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix); - fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix); - fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix); - fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix); - - fRecEventMatrix->Add(entry->fRecEventMatrix); - fRecSDEventMatrix->Add(entry->fRecSDEventMatrix); - fRecDDEventMatrix->Add(entry->fRecDDEventMatrix); - fRecNDEventMatrix->Add(entry->fRecNDEventMatrix); - fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix); - - fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix); - // - fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix); - fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix); - fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix); - fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix); - fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix); - - fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix); - fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix); - fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix); - fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix); - fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix); - - fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix); - fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix); - fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix); - fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix); - fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix); - - // - fGenTrackMatrix->Add(entry->fGenTrackMatrix); - fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix); - fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix); - // - fRecTrackMatrix->Add(entry->fRecTrackMatrix); - fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix); - // - fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix); - - // - // control analysis histograms - // - fMCEventHist1->Add(entry->fMCEventHist1); - fRecEventHist1->Add(entry->fRecEventHist1); - fRecEventHist2->Add(entry->fRecEventHist2); - fRecMCEventHist1->Add(entry->fRecMCEventHist1); - fRecMCEventHist2->Add(entry->fRecMCEventHist2); - fRecMCEventHist3->Add(entry->fRecMCEventHist3); - - for(Int_t i=0; iAdd(entry->fMCTrackHist1[i]); - - fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]); - fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]); - fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]); - - fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]); - fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]); - } - fRecMCTrackHist1->Add(entry->fRecMCTrackHist1); - fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1); - fRecTrackHist2->Add(entry->fRecTrackHist2); - fEventCount->Add(entry->fEventCount); - fMCPrimTrackHist->Add(entry->fMCPrimTrackHist); - - count++; - } - - //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); - //trigSelection->Merge(collPhysSelection); - //if(collPhysSelection) delete collPhysSelection; - -return count; -} - -//____________________________________________________________________ -Bool_t AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) { -// -// check 0-bin -// for LHC background calculation -// return kTRUE if vertex not reconstructed or -// track multiplicity == 0 -// -if(!esdEvent) return kFALSE; - - // check vertex - const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks(); - if(!vertex) return kTRUE; - - if(vertex->GetNContributors() < 1) { - // SPD vertex - vertex = esdEvent->GetPrimaryVertexSPD(); - if(!vertex) return kTRUE; - } - if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; - if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) ) - return kTRUE; - -return kFALSE; -} - -//____________________________________________________________________ -Bool_t AlidNdPtAnalysis::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) { -// -// check 0-bin -// for LHC background calculation -// return kTRUE if vertex not reconstructed or -// tracklet multiplicity == 0 -// -if(!esdEvent) return kFALSE; - - // check vertex - const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD(); - if(!vertex) return kTRUE; - if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; - if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE; - -return kFALSE; -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysis::Analyse() -{ - // init if not done already - if (!fIsInit) { Init(); } - - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TH1 *h=0, *h1=0, *h2=0, *h2c = 0; - THnSparse *hs=0; - TH2 *h2D=0; - - char name[256]; - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - // - // LHC backgraund in all and 0-bins - // - //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); - //trigSel->SaveHistograms("physics_selection"); - - // - // Reconstructed event vertex - // - h = fRecEventHist1->Projection(0); - h->SetName("Xv"); - aFolderObj->Add(h); - - h = fRecEventHist1->Projection(1); - h->SetName("Yv"); - aFolderObj->Add(h); - - h = fRecEventHist1->Projection(2); - h->SetName("Zv"); - aFolderObj->Add(h); - - // - // multiplicity - // - h = fRecEventHist2->Projection(1); - h->SetName("multMB"); - aFolderObj->Add(h); - - h = fRecEventHist2->Projection(2); - h->SetName("multiplicity"); - aFolderObj->Add(h); - - h2D = fRecEventHist2->Projection(0,1); - h2D->SetName("Zv_vs_multiplicity_MB"); - aFolderObj->Add(h2D); - - // - // reconstructed pt histograms - // - h = fRecTrackHist1[0]->Projection(0); - h->Scale(1.,"width"); - h->SetName("pt_all_ch"); - aFolderObj->Add(h); - - h = fRecTrackHist1[1]->Projection(0); - h->Scale(1.,"width"); - h->SetName("pt_acc"); - aFolderObj->Add(h); - - h = fRecTrackHist1[2]->Projection(0); - h->Scale(1.,"width"); - h->SetName("pt_rec"); - aFolderObj->Add(h); - - // - // reconstructed eta histograms - // - h = fRecTrackHist1[0]->Projection(1); - h->SetName("eta_all_ch"); - aFolderObj->Add(h); - - h = fRecTrackHist1[1]->Projection(1); - h->SetName("eta_acc"); - aFolderObj->Add(h); - - h = fRecTrackHist1[2]->Projection(1); - h->SetName("eta_rec"); - aFolderObj->Add(h); - - // - // reconstructed phi histograms - // - h = fRecTrackHist1[0]->Projection(2); - h->SetName("phi_all_ch"); - aFolderObj->Add(h); - - h = fRecTrackHist1[1]->Projection(2); - h->SetName("phi_acc"); - aFolderObj->Add(h); - - h = fRecTrackHist1[2]->Projection(2); - h->SetName("phi_rec"); - aFolderObj->Add(h); - - // - // reconstructed eta:pt histograms - // - h2D = fRecTrackHist1[0]->Projection(1,0); - h2D->SetName("pt_eta_all_ch"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[1]->Projection(1,0); - h2D->SetName("pt_eta_acc"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[2]->Projection(1,0); - h2D->SetName("pt_eta_rec"); - aFolderObj->Add(h2D); - - // - // reconstructed phi:pt histograms - // - h2D = fRecTrackHist1[0]->Projection(2,0); - h2D->SetName("pt_phi_all_ch"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[1]->Projection(2,0); - h2D->SetName("pt_phi_acc"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[2]->Projection(2,0); - h2D->SetName("pt_phi_rec"); - aFolderObj->Add(h2D); - - // - // reconstructed phi:eta histograms - // - h2D = fRecTrackHist1[0]->Projection(2,1); - h2D->SetName("eta_phi_all_ch"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[1]->Projection(2,1); - h2D->SetName("eta_phi_acc"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[2]->Projection(2,1); - h2D->SetName("eta_phi_rec"); - aFolderObj->Add(h2D); - - // - // reconstructed nClust, chi2 vs pt, eta, phi - // - if(fHistogramsOn) { - - h2D = fRecTrackHist2->Projection(0,1); - h2D->SetName("nClust_chi2_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(0,2); - h2D->SetName("nClust_pt_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(0,3); - h2D->SetName("nClust_eta_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(0,4); - h2D->SetName("nClust_phi_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(1,2); - h2D->SetName("chi2_pt_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(1,3); - h2D->SetName("chi2_eta_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(1,4); - h2D->SetName("chi2_phi_rec"); - aFolderObj->Add(h2D); - - } - - // - // calculate corrections for empty events - // with multMB==0 - // - - // - // normalised zv to generate zv for triggered events - // - h = fRecEventHist2->Projection(0); - if( h->Integral() ) h->Scale(1./h->Integral()); - h->SetName("zv_distribution_norm"); - aFolderObj->Add(h); - - // - // MC available - // - if(IsUseMCInfo()) { - - // - // Event vertex resolution - // - h2D = fRecMCEventHist2->Projection(0,2); - h2D->SetName("DeltaXv_vs_mult"); - aFolderObj->Add(h2D); - - h2D = fRecMCEventHist2->Projection(1,2); - h2D->SetName("DeltaZv_vs_mult"); - aFolderObj->Add(h2D); - - // - // normalised zv to get trigger/trigger+vertex event differences - // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv) - // - fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.); - h = fTriggerEventMatrix->Projection(0); - h2D = fTriggerEventMatrix->Projection(0,1); - if(h2D->Integral()) h->Scale(1./h2D->Integral()); - - h1 = fRecEventMatrix->Projection(0); - h2D = fRecEventMatrix->Projection(0,1); - if(h2D->Integral()) h1->Scale(1./h2D->Integral()); - - h->Divide(h1); - h->SetName("zv_empty_events_norm"); - aFolderObj->Add(h); - - fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins()); - - // - // rec. vs true multiplicity correlation matrix - // - hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix"); - aFolderObj->Add(hs); - - // - // rec. vs true track pt correlation matrix - // - hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix"); - aFolderObj->Add(hs); - - // - // trigger efficiency for INEL - // - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix"); - aFolderObj->Add(h); - - // - // trigger efficiency for NSD - // - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix"); - aFolderObj->Add(h); - - // - // trigger bias correction (MB to ND) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix"); - aFolderObj->Add(hs); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix"); - - aFolderObj->Add(h); - - // - // trigger bias correction (MB to NSD) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h); - - - // - // trigger bias correction (MB to INEL) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h); - - - // - // event vertex reconstruction correction (MB) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D"); - aFolderObj->Add(h2D); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix"); - aFolderObj->Add(h); - - // - // track-event trigger bias correction (MB to ND) - // - - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h2D); - - // - // track-event trigger bias correction (MB to NSD) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h2D); - - - // - // track-event trigger bias correction (MB to INEL) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h2D); - - // efficiency - - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix"); - aFolderObj->Add(h); - - - // - // track-event vertex reconstruction correction (MB) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix"); - aFolderObj->Add(h2D); - - // efficiency - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix"); - aFolderObj->Add(h); - - - // - // track rec. efficiency correction - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix"); - aFolderObj->Add(h2D); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix"); - aFolderObj->Add(h); - - // efficiency - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix"); - aFolderObj->Add(h); - - // - // secondary track contamination correction - // - //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); - hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix"); - aFolderObj->Add(h); - - // - // multiple track reconstruction correction - // - //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); - hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix"); - aFolderObj->Add(h); - - // - // Control histograms - // - - if(fHistogramsOn) { - - // Efficiency electrons, muons, pions, kaons, protons, all - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_electrons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_muons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_pions"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_kaons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_protons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_selected"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_all"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins()); - fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins()); - - // pt spetra - // - rec, primaries, secondaries - // - primaries (pid) - // - secondaries (pid) - // - secondaries (mech) - // - secondaries (mother) - // - - TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0); - mcPtAccall->SetName("mc_pt_acc_all"); - aFolderObj->Add(mcPtAccall); - - TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0); - mcPtAccprim->SetName("mc_pt_acc_prim"); - aFolderObj->Add(mcPtAccprim); - - TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0); - mcPtRecall->SetName("mc_pt_rec_all"); - aFolderObj->Add(mcPtRecall); - - TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0); - mcPtRecprim->SetName("mc_pt_rec_prim"); - aFolderObj->Add(mcPtRecprim); - - TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0); - mcPtRecsec->SetName("mc_pt_rec_sec"); - aFolderObj->Add(mcPtRecsec); - - for(Int_t i = 0; i<6; i++) - { - snprintf(name,256,"mc_pt_rec_prim_pid_%d",i); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); - h = fMCPrimTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_pt_rec_sec_pid_%d",i); - fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - // production mechanisms for given pid - fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); - - for(Int_t j=0; j<20; j++) { - if(j == 4) { - // decay - - snprintf(name,256,"mc_pt_rec_sec_pid_%d_decay",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_rec_sec_pid_%d_decay",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_mother_rec_sec_pid_%d_decay",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4); - h->SetName(name); - aFolderObj->Add(h); - - } else if (j == 5) { - // conversion - - snprintf(name,256,"mc_pt_rec_sec_pid_%d_conv",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_rec_sec_pid_%d_conv",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_mother_rec_sec_pid_%d_conv",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4); - h->SetName(name); - aFolderObj->Add(h); - - } else if (j == 13) { - // mat - - snprintf(name,256,"mc_pt_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_mother_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4,1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_mother_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_pt_mother_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4,0); - h->SetName(name); - aFolderObj->Add(h); - - } else { - continue; - } - } - - } - } // end fHistogramOn - - // - // resolution histograms - // only for reconstructed tracks - // - - TH2F *h2F=0; - TCanvas * c = new TCanvas("resol","resol"); - c->cd(); - - // - fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); - h->Draw(); - h->SetName("pt_resolution_vs_mcpt"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); - h->Draw(); - h->SetName("dpt_mean_vs_mcpt"); - aFolderObj->Add(h); - - // - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(#eta-#eta_{mc}) resolution"); - h->Draw(); - h->SetName("eta_resolution_vs_mcpt"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(#eta-mc#eta) mean"); - h->Draw(); - h->SetName("deta_mean_vs_mcpt"); - aFolderObj->Add(h); - - // - fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); - h->Draw(); - h->SetName("pt_resolution_vs_mceta"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); - h->Draw(); - h->SetName("dpt_mean_vs_mceta"); - aFolderObj->Add(h); - - // - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(#eta-#eta_{mc}) resolution"); - h->Draw(); - h->SetName("eta_resolution_vs_mceta"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(#eta-mc#eta) mean"); - h->Draw(); - h->SetName("deta_mean_vs_mceta"); - aFolderObj->Add(h); - - fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins()); - - } // end use MC info - - // export objects to analysis folder - fAnalysisFolder = ExportToFolder(aFolderObj); - - // delete only TObjArray - if(aFolderObj) delete aFolderObj; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * const array) -{ - // recreate folder avery time and export objects to new one - // - AlidNdPtAnalysis * comp=this; - TFolder *folder = comp->GetAnalysisFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtAnalysis::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AlidNdPtAnalysis class. +// +// a. functionality: +// - fills analysis control histograms +// - fills generic correction matrices +// - generates correction matrices +// +// b. data members: +// - generic correction matrices +// - control histograms +// +// Author: J.Otwinowski 04/11/2008 +// last change: 2013-06-13 by M.Knichel +// +// meaning of different multiplicities: +// multRec : number of reconstructed tracks, after AcceptanceCuts and TrackCuts +// multRecMult : number of reconstructed tracks, after MultAcceptanceCuts and MultTrackCuts +// multMB : number of contributers to vertex +// multTrueMC : MC true mult, after MultAcceptanceCuts +// mutlAll : number of ESD tracks +// mutlAcc : number of ESD tracks after AcceptanceCuts +//------------------------------------------------------------------------------ + +#include "TH1.h" +#include "TH2.h" +#include "TCanvas.h" +#include "THnSparse.h" + +#include "AliHeader.h" +#include "AliInputEventHandler.h" +#include "AliAnalysisManager.h" +#include "AliGenEventHeader.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliMultiplicity.h" +#include "AliTracker.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AliPhysicsSelection.h" +#include "AliTriggerAnalysis.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AlidNdPtAnalysis.h" + +using namespace std; + +ClassImp(AlidNdPtAnalysis) + +//_____________________________________________________________________________ + AlidNdPtAnalysis::AlidNdPtAnalysis(): AlidNdPt(), + fAnalysisFolder(0), + fHistogramsOn(kFALSE), + + // event multiplicity correlation matrix + fEventMultCorrelationMatrix(0), + + // rec. track pt vs true track pt correlation matrix + fTrackPtCorrelationMatrix(0), + + // event level correction + fGenEventMatrix(0), + fGenSDEventMatrix(0), + fGenDDEventMatrix(0), + fGenNDEventMatrix(0), + fGenNSDEventMatrix(0), + + fTriggerEventMatrix(0), + fTriggerSDEventMatrix(0), + fTriggerDDEventMatrix(0), + fTriggerNDEventMatrix(0), + fTriggerNSDEventMatrix(0), + + fRecEventMatrix(0), + fRecSDEventMatrix(0), + fRecDDEventMatrix(0), + fRecNDEventMatrix(0), + fRecNSDEventMatrix(0), + + // + // track-event level correction + // + fGenTrackEventMatrix(0), + fGenTrackSDEventMatrix(0), + fGenTrackDDEventMatrix(0), + fGenTrackNDEventMatrix(0), + fGenTrackNSDEventMatrix(0), + + fTriggerTrackEventMatrix(0), + fTriggerTrackSDEventMatrix(0), + fTriggerTrackDDEventMatrix(0), + fTriggerTrackNDEventMatrix(0), + fTriggerTrackNSDEventMatrix(0), + + fRecTrackEventMatrix(0), + fRecTrackSDEventMatrix(0), + fRecTrackDDEventMatrix(0), + fRecTrackNDEventMatrix(0), + fRecTrackNSDEventMatrix(0), + + // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix) + fGenTrackMatrix(0), + fGenPrimTrackMatrix(0), + fRecPrimTrackMatrix(0), + + // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix) + fRecTrackMatrix(0), + fRecSecTrackMatrix(0), + + // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix) + fRecMultTrackMatrix(0), + + // event control histograms + fMCEventHist1(0), + fRecEventHist1(0), + fRecEventHist2(0), + fRecMCEventHist1(0), + fRecMCEventHist2(0), + fRecMCEventHist3(0), + + // rec. pt and eta resolution w.r.t MC + fRecMCTrackHist1(0), + + //multple reconstructed tracks + fMCMultRecTrackHist1(0), + + // rec. track control histograms + fRecTrackHist2(0), + + // Generic histograms to be corrected + fRecEventHist(0), + fRecTrackHist(0), + fEventCount(0), + fMCPrimTrackHist(0), + + // Candle event histogram + fRecCandleEventMatrix(0), + + fMultNbins(0), + fPtNbins(0), + fPtCorrNbins(0), + fEtaNbins(0), + fZvNbins(0), + fBinsMult(0), + fBinsPt(0), + fBinsPtCorr(0), + fBinsEta(0), + fBinsZv(0), + + fIsInit(kFALSE) + +{ + // default constructor + for(Int_t i=0; iSetBinEdges(0,fBinsZv); + fRecEventHist->SetBinEdges(1,fBinsMult); + fRecEventHist->GetAxis(0)->SetTitle("Zv (cm)"); + fRecEventHist->GetAxis(1)->SetTitle("multiplicity MB"); + fRecEventHist->Sumw2(); + + // + Int_t binsTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; + // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; + // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; + + fRecTrackHist = new THnSparseF("fRecTrackHist","Zv:pT:eta:multRecMult",4,binsTrackHist); //,minTrackHist,maxTrackHist); + fRecTrackHist->SetBinEdges(0,fBinsZv); + fRecTrackHist->SetBinEdges(1,fBinsPt); + fRecTrackHist->SetBinEdges(2,fBinsEta); + fRecTrackHist->SetBinEdges(3,fBinsMult); + fRecTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); + fRecTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)"); + fRecTrackHist->GetAxis(2)->SetTitle("#eta"); + fRecTrackHist->GetAxis(3)->SetTitle("multiplicity (multCuts)"); + fRecTrackHist->Sumw2(); + + Int_t binsMCPrimTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; + // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; + // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; + + fMCPrimTrackHist = new THnSparseF("fMCPrimTrackHist","Zv:mcpT:mceta:multTrueMC",4,binsMCPrimTrackHist); + fMCPrimTrackHist->SetBinEdges(0,fBinsZv); + fMCPrimTrackHist->SetBinEdges(1,fBinsPt); + fMCPrimTrackHist->SetBinEdges(2,fBinsEta); + fMCPrimTrackHist->SetBinEdges(3,fBinsMult); + fMCPrimTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); + fMCPrimTrackHist->GetAxis(1)->SetTitle("MC p_{T} (GeV/c)"); + fMCPrimTrackHist->GetAxis(2)->SetTitle("#eta (MC)"); + fMCPrimTrackHist->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fMCPrimTrackHist->Sumw2(); + + // + // rec. vs MC correlation matrices + // + Int_t binsMultTrueEventMatrix[3]={fMultNbins,fMultNbins,fMultNbins}; +// Double_t minMultTrueEventMatrix[3]={-0.5,-0.5,-0.5}; +// Double_t maxMultTrueEventMatrix[3]={149.5,149.5,149.5}; + fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","multRecMult:multTrueMC:multMB",3,binsMultTrueEventMatrix); //,minMultTrueEventMatrix,maxMultTrueEventMatrix); + fEventMultCorrelationMatrix->SetBinEdges(0,fBinsMult); + fEventMultCorrelationMatrix->SetBinEdges(1,fBinsMult); + fEventMultCorrelationMatrix->SetBinEdges(2,fBinsMult); + fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("multiplicity (multCuts)"); + fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fEventMultCorrelationMatrix->GetAxis(2)->SetTitle("MB multiplicity"); + fEventMultCorrelationMatrix->Sumw2(); + + Int_t binsTrackPtCorrelationMatrix[3]={fPtCorrNbins,fPtCorrNbins,fEtaNbins}; + fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix); + fTrackPtCorrelationMatrix->SetBinEdges(0,fBinsPtCorr); + fTrackPtCorrelationMatrix->SetBinEdges(1,fBinsPtCorr); + fTrackPtCorrelationMatrix->SetBinEdges(2,fBinsEta); + fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta"); + fTrackPtCorrelationMatrix->Sumw2(); + + // + // Efficiency and contamination correction matrices + // + Int_t binsEventMatrix[2]={fZvNbins,fMultNbins}; +// Double_t minEventMatrix[2]={-25.,-0.5}; +// Double_t maxEventMatrix[2]={25.,149.5}; + + fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenEventMatrix->SetBinEdges(0,fBinsZv); + fGenEventMatrix->SetBinEdges(1,fBinsMult); + fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenEventMatrix->Sumw2(); + + fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenSDEventMatrix->SetBinEdges(1,fBinsMult); + fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenSDEventMatrix->Sumw2(); + + fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenDDEventMatrix->SetBinEdges(0,fBinsZv); + fGenDDEventMatrix->SetBinEdges(1,fBinsMult); + fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenDDEventMatrix->Sumw2(); + + fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenNDEventMatrix->SetBinEdges(0,fBinsZv); + fGenNDEventMatrix->SetBinEdges(1,fBinsMult); + fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenNDEventMatrix->Sumw2(); + + fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenNSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenNSDEventMatrix->SetBinEdges(1,fBinsMult); + fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenNSDEventMatrix->Sumw2(); + + // + fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerEventMatrix->Sumw2(); + + fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerSDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerSDEventMatrix->Sumw2(); + + fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerDDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerDDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerDDEventMatrix->Sumw2(); + + fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerNDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerNDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerNDEventMatrix->Sumw2(); + + fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerNSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerNSDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerNSDEventMatrix->Sumw2(); + + // + fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecEventMatrix->SetBinEdges(0,fBinsZv); + fRecEventMatrix->SetBinEdges(1,fBinsMult); + fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecEventMatrix->Sumw2(); + + fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecSDEventMatrix->SetBinEdges(1,fBinsMult); + fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecSDEventMatrix->Sumw2(); + + fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecDDEventMatrix->SetBinEdges(0,fBinsZv); + fRecDDEventMatrix->SetBinEdges(1,fBinsMult); + fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecDDEventMatrix->Sumw2(); + + fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecNDEventMatrix->SetBinEdges(0,fBinsZv); + fRecNDEventMatrix->SetBinEdges(1,fBinsMult); + fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecNDEventMatrix->Sumw2(); + + fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecNSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecNSDEventMatrix->SetBinEdges(1,fBinsMult); + fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecNSDEventMatrix->Sumw2(); + + fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecCandleEventMatrix->SetBinEdges(0,fBinsZv); + fRecCandleEventMatrix->SetBinEdges(1,fBinsMult); + fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecCandleEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecCandleEventMatrix->Sumw2(); + + // + // track to event corrections + // + + fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackEventMatrix->SetBinEdges(3,fBinsMult); + fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackEventMatrix->Sumw2(); + + fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackSDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackSDEventMatrix->SetBinEdges(3,fBinsMult); + fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackSDEventMatrix->Sumw2(); + + fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackDDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackDDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackDDEventMatrix->SetBinEdges(3,fBinsMult); + fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackDDEventMatrix->Sumw2(); + + fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackNDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackNDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackNDEventMatrix->SetBinEdges(3,fBinsMult); + fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackNDEventMatrix->Sumw2(); + + fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackNSDEventMatrix->SetBinEdges(3,fBinsMult); + fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackNSDEventMatrix->Sumw2(); + + + // + fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackEventMatrix->SetBinEdges(3,fBinsMult); + fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackEventMatrix->Sumw2(); + + fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackSDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackSDEventMatrix->SetBinEdges(3,fBinsMult); + fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackSDEventMatrix->Sumw2(); + + fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackDDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackDDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackDDEventMatrix->SetBinEdges(3,fBinsMult); + fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackDDEventMatrix->Sumw2(); + + fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackNDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackNDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackNDEventMatrix->SetBinEdges(3,fBinsMult); + fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackNDEventMatrix->Sumw2(); + + fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackNSDEventMatrix->SetBinEdges(3,fBinsMult); + fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackNSDEventMatrix->Sumw2(); + + // + fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackEventMatrix->SetBinEdges(3,fBinsMult); + fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackEventMatrix->Sumw2(); + + fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackSDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackSDEventMatrix->SetBinEdges(3,fBinsMult); + fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackSDEventMatrix->Sumw2(); + + fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackDDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackDDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackDDEventMatrix->SetBinEdges(3,fBinsMult); + fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackDDEventMatrix->Sumw2(); + + fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackNDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackNDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackNDEventMatrix->SetBinEdges(3,fBinsMult); + fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackNDEventMatrix->Sumw2(); + + fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackNSDEventMatrix->SetBinEdges(3,fBinsMult); + fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackNSDEventMatrix->Sumw2(); + + // + // tracks correction matrices + // + //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fGenTrackMatrix->SetBinEdges(0,fBinsZv); + //fGenTrackMatrix->SetBinEdges(1,binsPt); + fGenTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackMatrix->SetBinEdges(2,fBinsEta); + fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackMatrix->Sumw2(); + + //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fGenPrimTrackMatrix->SetBinEdges(0,fBinsZv); + //fGenPrimTrackMatrix->SetBinEdges(1,binsPt); + fGenPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fGenPrimTrackMatrix->SetBinEdges(2,fBinsEta); + fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenPrimTrackMatrix->Sumw2(); + + //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fRecPrimTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecPrimTrackMatrix->SetBinEdges(1,binsPt); + fRecPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecPrimTrackMatrix->SetBinEdges(2,fBinsEta); + fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecPrimTrackMatrix->Sumw2(); + + // + //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fRecTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecTrackMatrix->SetBinEdges(1,binsPt); + fRecTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackMatrix->SetBinEdges(2,fBinsEta); + fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); + fRecTrackMatrix->GetAxis(2)->SetTitle("Eta"); + fRecTrackMatrix->Sumw2(); + + //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fRecSecTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecSecTrackMatrix->SetBinEdges(1,binsPt); + fRecSecTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecSecTrackMatrix->SetBinEdges(2,fBinsEta); + fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); + fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta"); + fRecSecTrackMatrix->Sumw2(); + + // + //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fRecMultTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecMultTrackMatrix->SetBinEdges(1,binsPt); + fRecMultTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecMultTrackMatrix->SetBinEdges(2,fBinsEta); + fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecMultTrackMatrix->Sumw2(); + + // + // Control analysis histograms + // + + Int_t binsMCEventHist1[3]={100,100,140}; + Double_t minMCEventHist1[3]={-0.1,-0.1,-35.}; + Double_t maxMCEventHist1[3]={0.1,0.1,35.}; + fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1); + fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)"); + fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)"); + fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)"); + fMCEventHist1->Sumw2(); + + // + Int_t binsRecEventHist1[3]={100,100,140}; + Double_t minRecEventHist1[3]={-3.,-3.,-35.}; + Double_t maxRecEventHist1[3]={3.,3.,35.}; + + fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1); + fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)"); + fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)"); + fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)"); + fRecEventHist1->Sumw2(); + + // + Int_t binsRecEventHist2[3]={fZvNbins,fMultNbins,fMultNbins}; +// Double_t minRecEventHist2[3]={-25.,-0.5,-0.5}; +// Double_t maxRecEventHist2[3]={25.,149.5,149.5}; + + fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:multRecMult",3,binsRecEventHist2); //,minRecEventHist2,maxRecEventHist2); + fRecEventHist2->SetBinEdges(0,fBinsZv); + fRecEventHist2->SetBinEdges(1,fBinsMult); + fRecEventHist2->SetBinEdges(2,fBinsMult); + fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)"); + fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB"); + fRecEventHist2->GetAxis(2)->SetTitle("multiplicity (multCuts)"); + fRecEventHist2->Sumw2(); + + // + Double_t kFact = 0.1; + Int_t binsRecMCEventHist1[3]={100,100,100}; + Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; + Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; + + fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1); + fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); + fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); + fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); + fRecMCEventHist1->Sumw2(); + + // + Int_t binsRecMCEventHist2[3]={100,100,fMultNbins}; + Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0}; + Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50}; + + fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:multMB",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2); + fRecMCEventHist2->SetBinEdges(2,fBinsMult); + fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); + fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)"); + fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity MB"); + fRecMCEventHist2->Sumw2(); + + Int_t binsRecMCEventHist3[2]={fMultNbins,5}; + Double_t minRecMCEventHist3[2]={-0.5,0.0}; + Double_t maxRecMCEventHist3[2]={149.50,5.0}; + fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","multRecMult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3); + fRecMCEventHist3->SetBinEdges(0,fBinsMult); + fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity (multCuts)"); + fRecMCEventHist3->GetAxis(1)->SetTitle("EventType"); + fRecMCEventHist3->Sumw2(); + + // + char name[256]; + char title[256]; + for(Int_t i=0; iSetBinEdges(0,fBinsPtCorr); + fMCTrackHist1[i]->SetBinEdges(1,fBinsEta); + fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); + fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)"); + fMCTrackHist1[i]->Sumw2(); + + Int_t binsMCPrimTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; + Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; + Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; + snprintf(name,256,"fMCPrimTrackHist1_%d",i); + snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); + + fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1); + fMCPrimTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); + fMCPrimTrackHist1[i]->SetBinEdges(1,fBinsEta); + fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); + fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid"); + fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech"); + fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother"); + fMCPrimTrackHist1[i]->Sumw2(); + + Int_t binsMCPrimTrackHist2[3]= {4000,20,4000}; + Double_t minMCPrimTrackHist2[3]={0.,0.,0.}; + Double_t maxMCPrimTrackHist2[3]={4000.,20.,4000.}; + snprintf(name,256,"fMCPrimTrackHist2_%d",i); + snprintf(title,256,"pdg:mech:mother"); + + fMCPrimTrackHist2[i] = new THnSparseF(name,title,3,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2); + fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg"); + fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech"); + fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother"); + fMCPrimTrackHist2[i]->Sumw2(); + + Int_t binsMCSecTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; + Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; + Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; + snprintf(name,256,"fMCSecTrackHist1_%d",i); + snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); + + fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1); + fMCSecTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); + fMCSecTrackHist1[i]->SetBinEdges(1,fBinsEta); + fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); + fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid"); + fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech"); + fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother"); + fMCSecTrackHist1[i]->Sumw2(); + + // + + // + + Int_t binsRecTrackHist1[3]={fPtNbins,fEtaNbins,90}; + Double_t minRecTrackHist1[3]={0.,-1.,0.}; + Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()}; + snprintf(name,256,"fRecTrackHist1_%d",i); + snprintf(title,256,"Pt:Eta:Phi"); + fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1); + fRecTrackHist1[i]->SetBinEdges(0,fBinsPt); + fRecTrackHist1[i]->SetBinEdges(1,fBinsEta); + fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)"); + fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta"); + fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)"); + fRecTrackHist1[i]->Sumw2(); + + // + Int_t binsRecTrackMultHist1[2]={fPtNbins,fMultNbins}; + snprintf(name,256,"fRecTrackMultHist_%d",i); + snprintf(title,256,"Pt:Mult"); + fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1); //,minRecTrackMultHist1,maxRecTrackMultHist1); + fRecTrackMultHist1[i]->SetBinEdges(0,fBinsPt); + fRecTrackMultHist1[i]->SetBinEdges(1,fBinsMult); + fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity"); + fRecTrackMultHist1[i]->Sumw2(); + } + + Int_t binsRecMCTrackHist1[4] = {fPtCorrNbins,fEtaNbins,100,100}; + Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5}; + Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5}; + snprintf(name,256,"fRecMCTrackHist1"); + snprintf(title,256,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)"); + + fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1); + fRecMCTrackHist1->SetBinEdges(0,fBinsPtCorr); + fRecMCTrackHist1->SetBinEdges(1,fBinsEta); + fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta"); + fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt"); + fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta"); + + Int_t binsMCMultRecTrackHist1[3] = {fPtCorrNbins,fEtaNbins,6}; + Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.}; + Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.}; + snprintf(name,256,"fMCMultRecTrackHist1"); + snprintf(title,256,"mcPt:mcEta:pid"); + fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1); + fMCMultRecTrackHist1->SetBinEdges(0,fBinsPtCorr); + fMCMultRecTrackHist1->SetBinEdges(1,fBinsEta); + fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta"); + fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid"); + + //nClust:chi2PerClust:pt:eta:phi + Int_t binsRecTrackHist2[5]={160,100,fPtNbins,fEtaNbins,90}; + Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.}; + Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()}; + + fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2); + fRecTrackHist2->SetBinEdges(2,fBinsPt); + fRecTrackHist2->SetBinEdges(3,fBinsEta); + fRecTrackHist2->GetAxis(0)->SetTitle("nClust"); + fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust"); + fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); + fRecTrackHist2->GetAxis(3)->SetTitle("#eta"); + fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)"); + fRecTrackHist2->Sumw2(); + + Int_t binsEventCount[3]={2,2,2}; + Double_t minEventCount[3]={0,0,0}; + Double_t maxEventCount[3]={2,2,2}; + fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount); + fEventCount->GetAxis(0)->SetTitle("trig"); + fEventCount->GetAxis(1)->SetTitle("trig+vert"); + fEventCount->GetAxis(2)->SetTitle("selected"); + fEventCount->Sumw2(); + + // init folder + fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); + + // set init flag + fIsInit = kTRUE; +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) +{ + // init if not done already + if (!fIsInit) { Init(); } + + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + AlidNdPtAcceptanceCuts *multAccCuts = GetMultAcceptanceCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + // trigger selection + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + if(evtCuts->IsTriggerRequired()) + { + // always MB + //isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + isEventTriggered = inputHandler->IsEventSelected() & GetTriggerMask(); + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + + // calculate LHC background + if(!IsUseMCInfo()) + { + // + // 0-multiplicity bin for LHC background correction + // + /* bin0 done in the train + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) + { + physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx); + } else { + physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx); + } + */ + } + } + + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; + + Int_t multMCTrueTracks = 0; + if(IsUseMCInfo()) + { + // + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + // get event type (ND=0x1, DD=0x2, SD=0x4) + evtType = AliPWG0Helper::GetEventProcessType(header); + AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; + fMCEventHist1->Fill(vMCEventHist1); + + // multipliticy of all MC primary tracks + // in Zv, pt and eta ranges) + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts); + + } // end bUseMC + + + // get reconstructed vertex + const AliESDVertex* vtxESD = 0; + Bool_t isRecVertex = kFALSE; + if(evtCuts->IsRecVertexRequired()) + { + Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); + Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); + vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); + if(!vtxESD) return; + isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); + } + + if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) { + vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC"); + if(!vtxESD) return; + isRecVertex = kTRUE; + } + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + Bool_t isTrigAndVertex = isEventTriggered && isEventOK; + + Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)}; + fEventCount->Fill(vEventCount); + + // vertex contributors + Int_t multMBTracks = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) + { + if(vtxESD && vtxESD->GetStatus() && isRecVertex) + multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts); + } + else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || + GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate ) + { + const AliMultiplicity* mult = esdEvent->GetMultiplicity(); + if(mult && vtxESD && vtxESD->GetStatus() && isRecVertex) + multMBTracks = mult->GetNumberOfTracklets(); + } + else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || + GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || + GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx + ) + { + if(vtxESD && vtxESD->GetStatus() && isRecVertex) + multMBTracks = vtxESD->GetNContributors(); + } + else { + AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode())); + return; + } + + Bool_t isEventSelected = kTRUE; + if(evtCuts->IsEventSelectedRequired()) + { + // select events with at least + // one prompt track in acceptance + // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies + + isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts); + //printf("isEventSelected %d \n", isEventSelected); + } + + TObjArray *allChargedTracks=0; + //Int_t multAll=0, multAcc=0, multRec=0; + Int_t multAll=0, multRec=0; + Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0; + + + // check event cuts + Int_t multRecMult=0; + if(isEventOK && isEventTriggered && isEventSelected) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + //printf("entries %d \n",entries); + + + // calculate mult of reconstructed tracks + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + if(GetMultTrackCuts()->AcceptTrack(track)) + { + if(GetMultAcceptanceCuts()->AcceptTrack(track)) multRecMult++; + } + } + + + labelsAll = new Int_t[entries]; + labelsAcc = new Int_t[entries]; + labelsRec = new Int_t[entries]; + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecMult); + labelsAll[multAll] = TMath::Abs(track->GetLabel()); + multAll++; + + //if(accCuts->AcceptTrack(track)) { + //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); + //labelsAcc[multAcc] = TMath::Abs(track->GetLabel()); + //multAcc++; + //} + + // esd track selection + // ITS stand alone + if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx) + { + if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; + if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; + if(track->GetNcls(0)<4) continue; + if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; + } + else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx) + { + // + // ITS and TPC stand alone tracks + // + if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; + if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; + if(track->GetNcls(0)<4) continue; + if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; + + // Check matching with TPC only track + Bool_t hasMatch = kFALSE; + for(Int_t j=0; jAt(j); + if(!track2) continue; + if(track2->Charge()==0) continue; + if (!track2->GetTPCInnerParam()) continue; + + // check loose cuts for TPC tracks + if(!esdTrackCuts->AcceptTrack(track2)) continue; + + AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam())); + if(!innerTPC) continue; + Double_t x2[3]; track2->GetXYZ(x2); + Double_t b2[3]; AliTracker::GetBxByBz(x2,b2); + Double_t dz[2],cov[3]; + Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov); + if(!isPropOK && innerTPC) {delete innerTPC; continue;} + + // check matching + if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; } + if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; } + if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; } + + hasMatch = kTRUE; + if(innerTPC) delete innerTPC; + } + + if(!hasMatch) continue; + } + else { + // check track cuts + + if(!esdTrackCuts->AcceptTrack(track)) + continue; + } + + // + Bool_t isOK = kFALSE; + Double_t x[3]; track->GetXYZ(x); + Double_t b[3]; AliTracker::GetBxByBz(x,b); + + // + // if TPC-ITS hybrid tracking (kTPCITSHybrid) + // replace track parameters with TPC-ony track parameters + // + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) + { + // Relate TPC-only tracks to Track or SPD vertex + isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); + if(!isOK) continue; + + // replace esd track parameters with TPCinner + AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); + if (tpcTrack) { + track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); + } + if(tpcTrack) delete tpcTrack; + } + + + // update track parameters using vertex point + if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ) + { + // update track parameters + AliExternalTrackParam cParam; + isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam); + if(!isOK) continue; + track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); + + if(accCuts->AcceptTrack(track)) { + FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); + labelsRec[multRec] = TMath::Abs(track->GetLabel()); + multRec++; + } + } + else { + if(accCuts->AcceptTrack(track)) + { + FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); + labelsRec[multRec] = TMath::Abs(track->GetLabel()); + multRec++; + } + } + } + + + // fill track multiplicity histograms + // terribly slow + // FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec); + + Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()}; + fRecEventHist1->Fill(vRecEventHist1); + + Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRecMult}; + fRecEventHist2->Fill(vRecEventHist2); + + // + Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks}; + fRecEventHist->Fill(vRecEventHist); + } + + if(IsUseMCInfo()) + { + if(mcEvent) { + + if(evtCuts->IsEventSelectedRequired()) + { + // select events with at least + // one MC primary track in acceptance + // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies + + Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent); + //printf("isMCEventSelected %d \n", isMCEventSelected); + if(!isMCEventSelected) { + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + if(labelsAll) delete [] labelsAll; labelsAll = 0; + if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; + if(labelsRec) delete [] labelsRec; labelsRec = 0; + + return; + } + } + + Double_t vMultTrueEventMatrix[3] = { multRecMult, multMCTrueTracks, multMBTracks}; + if(isEventOK && isEventTriggered) { + if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted + fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix); + } + + // + // event level corrections (zv,N_MB) + // + + // all inelastic + Double_t vEventMatrix[2] = {vtxMC[2],multMCTrueTracks}; + fGenEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix); + + // single diffractive + if(evtType == AliPWG0Helper::kSD) { + fGenSDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix); + } + + // double diffractive + if(evtType == AliPWG0Helper::kDD) { + fGenDDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix); + } + + // non diffractive + if(evtType == AliPWG0Helper::kND) { + fGenNDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix); + } + + // non single diffractive + if(evtType != AliPWG0Helper::kSD) { + fGenNSDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix); + } + + // + // track-event level corrections (zv,pt,eta) + // + for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) + { + TParticle* particle = stack->Particle(iMc); + if (!particle) + continue; + + // only charged particles + if(!particle->GetPDG()) continue; + Double_t charge = particle->GetPDG()->Charge()/3.; + if ( TMath::Abs(charge) < 0.001 ) + continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) + continue; + + // physical primary + Bool_t prim = stack->IsPhysicalPrimary(iMc); + if(!prim) continue; + + // checked accepted + if(accCuts->AcceptTrack(particle)) + { + Double_t vTrackEventMatrix[4] = {vtxMC[2], particle->Pt(), particle->Eta(),multMCTrueTracks}; + fGenTrackEventMatrix->Fill(vTrackEventMatrix); + + if(evtType == AliPWG0Helper::kSD) { + fGenTrackSDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kDD) { + fGenTrackDDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kND) { + fGenTrackNDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType != AliPWG0Helper::kSD) { + fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix); + } + + // + if(!isEventTriggered) continue; + + fTriggerTrackEventMatrix->Fill(vTrackEventMatrix); + if(evtType == AliPWG0Helper::kSD) { + fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kDD) { + fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kND) { + fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType != AliPWG0Helper::kSD) { + fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix); + } + + // + if(!isEventOK) continue; + + fRecTrackEventMatrix->Fill(vTrackEventMatrix); + if(evtType == AliPWG0Helper::kSD) { + fRecTrackSDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kDD) { + fRecTrackDDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kND) { + fRecTrackNDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType != AliPWG0Helper::kSD) { + fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix); + } + } + } + + // + // track-level corrections (zv,pt,eta) + // + if(isEventOK && isEventTriggered) + { + + // fill MC and rec event control histograms + if(fHistogramsOn) { + Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]}; + fRecMCEventHist1->Fill(vRecMCEventHist1); + + Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks}; + fRecMCEventHist2->Fill(vRecMCEventHist2); + + Double_t vRecMCEventHist3[2] = {multRecMult,evtType}; + fRecMCEventHist3->Fill(vRecMCEventHist3); + } + + // + // MC histograms for track efficiency studies + // + Int_t countRecCandle = 0; + for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) + { + TParticle* particle = stack->Particle(iMc); + if (!particle) + continue; + + Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; + + // all genertated primaries including neutral + //if( iMc < stack->GetNprimary() ) { + //fGenTrackMatrix->Fill(vTrackMatrix); + //} + + // only charged particles + if(!particle->GetPDG()) continue; + Double_t charge = particle->GetPDG()->Charge()/3.; + if (TMath::Abs(charge) < 0.001) + continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) + continue; + + // physical primary + Bool_t prim = stack->IsPhysicalPrimary(iMc); + + // check accepted + if(accCuts->AcceptTrack(particle)) + { + if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { + fGenPrimTrackMatrix->Fill(vTrackMatrix); + Double_t vMCPrimTrackHist[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; + fMCPrimTrackHist->Fill(vMCPrimTrackHist); + } + + // fill control histograms + if(fHistogramsOn) + FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); + + // check multiple found tracks + Int_t multCount = 0; + for(Int_t iRec=0; iRec1) + { + fRecMultTrackMatrix->Fill(vTrackMatrix); + + // fill control histogram + if(fHistogramsOn) { + Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); + Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid}; + fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1); + } + } + } + } + + // check reconstructed + for(Int_t iRec=0; iRecFill(vTrackMatrix); + + if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { + fRecPrimTrackMatrix->Fill(vTrackMatrix); + //AliESDtrack *track = esdEvent->GetTrack(iRec); + //if(track && track->GetKinkIndex(0) < 0) + // printf("prim kink \n"); + countRecCandle++; + } + + if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix); + + // fill control histograms + if(fHistogramsOn) + FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks); + + break; + } + } + } + } + + if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix); + } + } + }// end bUseMC + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + if(labelsAll) delete [] labelsAll; labelsAll = 0; + if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; + if(labelsRec) delete [] labelsRec; labelsRec = 0; + + if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD; + //if(trigAna) delete trigAna; + +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysis::FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec) { + // multiplicity histograms + + if(!allChargedTracks) return; + if(!labelsAll) return; + if(!labelsAcc) return; + if(!labelsRec) return; + + Int_t entries = allChargedTracks->GetEntries(); + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge() == 0) continue; + + Int_t label = TMath::Abs(track->GetLabel()); + for(Int_t iAll=0; iAllPt(), multAll}; + fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1); + } + } + for(Int_t iAcc=0; iAccPt(), multAcc}; + fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2); + } + } + for(Int_t iRec=0; iRecPt(), multRec}; + fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3); + } + } + } +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multRecMult) +{ + // + // Fill ESD track and MC histograms + // + if(!esdTrack) return; + + Float_t q = esdTrack->Charge(); + if(TMath::Abs(q) < 0.001) return; + + Float_t pt = esdTrack->Pt(); + //Float_t qpt = esdTrack->Pt() * q; + Float_t eta = esdTrack->Eta(); + Float_t phi = esdTrack->Phi(); + + Float_t dca[2], bCov[3]; + esdTrack->GetImpactParameters(dca,bCov); + + Int_t nClust = esdTrack->GetTPCclusters(0); + Float_t chi2PerCluster = 0.; + if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); + + + // fill histograms + Double_t values1[3] = {pt,eta,phi}; + fRecTrackHist1[trackObj]->Fill(values1); + + Double_t values[4] = {zv, pt,eta, multRecMult}; + if(trackObj == AlidNdPtHelper::kRecTracks) { + fRecTrackHist->Fill(values); + } + + /* + Double_t values2[5] = {nClust,chi2PerCluster,pt,eta,phi}; + if(trackObj == AlidNdPtHelper::kRecTracks) + { + if(fHistogramsOn) + fRecTrackHist2->Fill(values2); + } + */ + + // + // Fill rec vs MC information + // + if(!stack) return; + + Int_t label = TMath::Abs(esdTrack->GetLabel()); + //if(label == 0) return; + + if(label > stack->GetNtrack()) return; + TParticle* particle = stack->Particle(label); + if(!particle) return; + + //Bool_t prim = stack->IsPhysicalPrimary(label); + //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); + + Int_t motherPdg = -1; + TParticle* mother = 0; + + //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); + Int_t motherLabel = particle->GetMother(0); + if(motherLabel>0) mother = stack->Particle(motherLabel); + if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only + //Int_t mech = particle->GetUniqueID(); // production mechanism + + if(!particle->GetPDG()) return; + Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 + if(TMath::Abs(gq)<0.001) return; + Float_t gpt = particle->Pt(); + Float_t geta = particle->Eta(); + //Float_t qgpt = particle->Pt() * gq; + //Float_t gphi = particle->Phi(); + + Double_t dpt=0; + //printf("pt %f, gpt %f \n",pt,gpt); + if(gpt) dpt = (pt-gpt)/gpt; + Double_t deta = (eta-geta); + + // fill histograms + if(trackObj == AlidNdPtHelper::kRecTracks) + { + Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta}; + fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix); + + Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta}; + fRecMCTrackHist1->Fill(vRecMCTrackHist1); + } +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj) +{ + // Fill MC histograms + if(!stack) return; + + if(label > stack->GetNtrack()) return; + TParticle* particle = stack->Particle(label); + if(!particle) return; + + Int_t motherPdg = -1; + TParticle* mother = 0; + + //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); + Int_t motherLabel = particle->GetMother(0); + if(motherLabel>0) mother = stack->Particle(motherLabel); + if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only + Int_t mech = particle->GetUniqueID(); // production mechanism + + if(!particle->GetPDG()) return; + Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 + if(TMath::Abs(gq) < 0.001) return; + + Float_t gpt = particle->Pt(); + //Float_t qgpt = particle->Pt() * gq; + Float_t geta = particle->Eta(); + Float_t gphi = particle->Phi(); + //Float_t gpz = particle->Pz(); + + Bool_t prim = stack->IsPhysicalPrimary(label); + //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz(); + + Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); + + //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech); + //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech); + + // + // fill histogram + // + Double_t vMCTrackHist1[3] = {gpt,geta,gphi}; + fMCTrackHist1[trackObj]->Fill(vMCTrackHist1); + + Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg}; + Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg}; + //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + if(prim) { + fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2); + } + else { + fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + } + +} + +//_____________________________________________________________________________ +Long64_t AlidNdPtAnalysis::Merge(TCollection* const list) +{ + // init if not done already + if (!fIsInit) { Init(); } + + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + // + //TList *collPhysSelection = new TList; + + // collection of generated histograms + + Int_t count=0; + while((obj = iter->Next()) != 0) { + AlidNdPtAnalysis* entry = dynamic_cast(obj); + if (entry == 0) continue; + + // physics selection + //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection()); + //collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); + + // + fRecEventHist->Add(entry->fRecEventHist); + fRecTrackHist->Add(entry->fRecTrackHist); + + // + fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix); + fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix); + + // + fGenEventMatrix->Add(entry->fGenEventMatrix); + fGenSDEventMatrix->Add(entry->fGenSDEventMatrix); + fGenDDEventMatrix->Add(entry->fGenDDEventMatrix); + fGenNDEventMatrix->Add(entry->fGenNDEventMatrix); + fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix); + + fTriggerEventMatrix->Add(entry->fTriggerEventMatrix); + fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix); + fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix); + fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix); + fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix); + + fRecEventMatrix->Add(entry->fRecEventMatrix); + fRecSDEventMatrix->Add(entry->fRecSDEventMatrix); + fRecDDEventMatrix->Add(entry->fRecDDEventMatrix); + fRecNDEventMatrix->Add(entry->fRecNDEventMatrix); + fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix); + + fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix); + // + fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix); + fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix); + fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix); + fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix); + fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix); + + fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix); + fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix); + fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix); + fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix); + fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix); + + fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix); + fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix); + fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix); + fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix); + fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix); + + // + fGenTrackMatrix->Add(entry->fGenTrackMatrix); + fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix); + fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix); + // + fRecTrackMatrix->Add(entry->fRecTrackMatrix); + fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix); + // + fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix); + + // + // control analysis histograms + // + fMCEventHist1->Add(entry->fMCEventHist1); + fRecEventHist1->Add(entry->fRecEventHist1); + fRecEventHist2->Add(entry->fRecEventHist2); + fRecMCEventHist1->Add(entry->fRecMCEventHist1); + fRecMCEventHist2->Add(entry->fRecMCEventHist2); + fRecMCEventHist3->Add(entry->fRecMCEventHist3); + + for(Int_t i=0; iAdd(entry->fMCTrackHist1[i]); + + fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]); + fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]); + fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]); + + fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]); + fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]); + } + fRecMCTrackHist1->Add(entry->fRecMCTrackHist1); + fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1); + fRecTrackHist2->Add(entry->fRecTrackHist2); + fEventCount->Add(entry->fEventCount); + fMCPrimTrackHist->Add(entry->fMCPrimTrackHist); + + count++; + } + + //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); + //trigSelection->Merge(collPhysSelection); + //if(collPhysSelection) delete collPhysSelection; + +return count; +} + +//____________________________________________________________________ +Bool_t AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) { +// +// check 0-bin +// for LHC background calculation +// return kTRUE if vertex not reconstructed or +// track multiplicity == 0 +// +if(!esdEvent) return kFALSE; + + // check vertex + const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks(); + if(!vertex) return kTRUE; + + if(vertex->GetNContributors() < 1) { + // SPD vertex + vertex = esdEvent->GetPrimaryVertexSPD(); + if(!vertex) return kTRUE; + } + if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; + if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) ) + return kTRUE; + +return kFALSE; +} + +//____________________________________________________________________ +Bool_t AlidNdPtAnalysis::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) { +// +// check 0-bin +// for LHC background calculation +// return kTRUE if vertex not reconstructed or +// tracklet multiplicity == 0 +// +if(!esdEvent) return kFALSE; + + // check vertex + const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD(); + if(!vertex) return kTRUE; + if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; + if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE; + +return kFALSE; +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysis::Analyse() +{ + // init if not done already + if (!fIsInit) { Init(); } + + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TH1 *h=0, *h1=0, *h2=0, *h2c = 0; + THnSparse *hs=0; + TH2 *h2D=0; + + char name[256]; + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + // + // LHC backgraund in all and 0-bins + // + //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); + //trigSel->SaveHistograms("physics_selection"); + + // + // Reconstructed event vertex + // + h = fRecEventHist1->Projection(0); + h->SetName("Xv"); + aFolderObj->Add(h); + + h = fRecEventHist1->Projection(1); + h->SetName("Yv"); + aFolderObj->Add(h); + + h = fRecEventHist1->Projection(2); + h->SetName("Zv"); + aFolderObj->Add(h); + + // + // multiplicity + // + h = fRecEventHist2->Projection(1); + h->SetName("multMB"); + aFolderObj->Add(h); + + h = fRecEventHist2->Projection(2); + h->SetName("multiplicity"); + aFolderObj->Add(h); + + h2D = fRecEventHist2->Projection(0,1); + h2D->SetName("Zv_vs_multiplicity_MB"); + aFolderObj->Add(h2D); + + // + // reconstructed pt histograms + // + h = fRecTrackHist1[0]->Projection(0); + h->Scale(1.,"width"); + h->SetName("pt_all_ch"); + aFolderObj->Add(h); + + h = fRecTrackHist1[1]->Projection(0); + h->Scale(1.,"width"); + h->SetName("pt_acc"); + aFolderObj->Add(h); + + h = fRecTrackHist1[2]->Projection(0); + h->Scale(1.,"width"); + h->SetName("pt_rec"); + aFolderObj->Add(h); + + // + // reconstructed eta histograms + // + h = fRecTrackHist1[0]->Projection(1); + h->SetName("eta_all_ch"); + aFolderObj->Add(h); + + h = fRecTrackHist1[1]->Projection(1); + h->SetName("eta_acc"); + aFolderObj->Add(h); + + h = fRecTrackHist1[2]->Projection(1); + h->SetName("eta_rec"); + aFolderObj->Add(h); + + // + // reconstructed phi histograms + // + h = fRecTrackHist1[0]->Projection(2); + h->SetName("phi_all_ch"); + aFolderObj->Add(h); + + h = fRecTrackHist1[1]->Projection(2); + h->SetName("phi_acc"); + aFolderObj->Add(h); + + h = fRecTrackHist1[2]->Projection(2); + h->SetName("phi_rec"); + aFolderObj->Add(h); + + // + // reconstructed eta:pt histograms + // + h2D = fRecTrackHist1[0]->Projection(1,0); + h2D->SetName("pt_eta_all_ch"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[1]->Projection(1,0); + h2D->SetName("pt_eta_acc"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[2]->Projection(1,0); + h2D->SetName("pt_eta_rec"); + aFolderObj->Add(h2D); + + // + // reconstructed phi:pt histograms + // + h2D = fRecTrackHist1[0]->Projection(2,0); + h2D->SetName("pt_phi_all_ch"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[1]->Projection(2,0); + h2D->SetName("pt_phi_acc"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[2]->Projection(2,0); + h2D->SetName("pt_phi_rec"); + aFolderObj->Add(h2D); + + // + // reconstructed phi:eta histograms + // + h2D = fRecTrackHist1[0]->Projection(2,1); + h2D->SetName("eta_phi_all_ch"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[1]->Projection(2,1); + h2D->SetName("eta_phi_acc"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[2]->Projection(2,1); + h2D->SetName("eta_phi_rec"); + aFolderObj->Add(h2D); + + // + // reconstructed nClust, chi2 vs pt, eta, phi + // + if(fHistogramsOn) { + + h2D = fRecTrackHist2->Projection(0,1); + h2D->SetName("nClust_chi2_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(0,2); + h2D->SetName("nClust_pt_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(0,3); + h2D->SetName("nClust_eta_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(0,4); + h2D->SetName("nClust_phi_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(1,2); + h2D->SetName("chi2_pt_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(1,3); + h2D->SetName("chi2_eta_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(1,4); + h2D->SetName("chi2_phi_rec"); + aFolderObj->Add(h2D); + + } + + // + // calculate corrections for empty events + // with multMB==0 + // + + // + // normalised zv to generate zv for triggered events + // + h = fRecEventHist2->Projection(0); + if( h->Integral() ) h->Scale(1./h->Integral()); + h->SetName("zv_distribution_norm"); + aFolderObj->Add(h); + + // + // MC available + // + if(IsUseMCInfo()) { + + // + // Event vertex resolution + // + h2D = fRecMCEventHist2->Projection(0,2); + h2D->SetName("DeltaXv_vs_mult"); + aFolderObj->Add(h2D); + + h2D = fRecMCEventHist2->Projection(1,2); + h2D->SetName("DeltaZv_vs_mult"); + aFolderObj->Add(h2D); + + // + // normalised zv to get trigger/trigger+vertex event differences + // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv) + // + fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.); + h = fTriggerEventMatrix->Projection(0); + h2D = fTriggerEventMatrix->Projection(0,1); + if(h2D->Integral()) h->Scale(1./h2D->Integral()); + + h1 = fRecEventMatrix->Projection(0); + h2D = fRecEventMatrix->Projection(0,1); + if(h2D->Integral()) h1->Scale(1./h2D->Integral()); + + h->Divide(h1); + h->SetName("zv_empty_events_norm"); + aFolderObj->Add(h); + + fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins()); + + // + // rec. vs true multiplicity correlation matrix + // + hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix"); + aFolderObj->Add(hs); + + // + // rec. vs true track pt correlation matrix + // + hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix"); + aFolderObj->Add(hs); + + // + // trigger efficiency for INEL + // + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix"); + aFolderObj->Add(h); + + // + // trigger efficiency for NSD + // + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix"); + aFolderObj->Add(h); + + // + // trigger bias correction (MB to ND) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix"); + aFolderObj->Add(hs); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix"); + + aFolderObj->Add(h); + + // + // trigger bias correction (MB to NSD) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h); + + + // + // trigger bias correction (MB to INEL) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h); + + + // + // event vertex reconstruction correction (MB) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D"); + aFolderObj->Add(h2D); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix"); + aFolderObj->Add(h); + + // + // track-event trigger bias correction (MB to ND) + // + + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h2D); + + // + // track-event trigger bias correction (MB to NSD) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h2D); + + + // + // track-event trigger bias correction (MB to INEL) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h2D); + + // efficiency + + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix"); + aFolderObj->Add(h); + + + // + // track-event vertex reconstruction correction (MB) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix"); + aFolderObj->Add(h2D); + + // efficiency + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix"); + aFolderObj->Add(h); + + + // + // track rec. efficiency correction + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix"); + aFolderObj->Add(h2D); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix"); + aFolderObj->Add(h); + + // efficiency + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix"); + aFolderObj->Add(h); + + // + // secondary track contamination correction + // + //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); + hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix"); + aFolderObj->Add(h); + + // + // multiple track reconstruction correction + // + //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); + hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix"); + aFolderObj->Add(h); + + // + // Control histograms + // + + if(fHistogramsOn) { + + // Efficiency electrons, muons, pions, kaons, protons, all + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_electrons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_muons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_pions"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_kaons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_protons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_selected"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_all"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins()); + fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins()); + + // pt spetra + // - rec, primaries, secondaries + // - primaries (pid) + // - secondaries (pid) + // - secondaries (mech) + // - secondaries (mother) + // + + TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0); + mcPtAccall->SetName("mc_pt_acc_all"); + aFolderObj->Add(mcPtAccall); + + TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0); + mcPtAccprim->SetName("mc_pt_acc_prim"); + aFolderObj->Add(mcPtAccprim); + + TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0); + mcPtRecall->SetName("mc_pt_rec_all"); + aFolderObj->Add(mcPtRecall); + + TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0); + mcPtRecprim->SetName("mc_pt_rec_prim"); + aFolderObj->Add(mcPtRecprim); + + TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0); + mcPtRecsec->SetName("mc_pt_rec_sec"); + aFolderObj->Add(mcPtRecsec); + + for(Int_t i = 0; i<6; i++) + { + snprintf(name,256,"mc_pt_rec_prim_pid_%d",i); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); + h = fMCPrimTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_pt_rec_sec_pid_%d",i); + fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + // production mechanisms for given pid + fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); + + for(Int_t j=0; j<20; j++) { + if(j == 4) { + // decay + + snprintf(name,256,"mc_pt_rec_sec_pid_%d_decay",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_rec_sec_pid_%d_decay",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_mother_rec_sec_pid_%d_decay",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4); + h->SetName(name); + aFolderObj->Add(h); + + } else if (j == 5) { + // conversion + + snprintf(name,256,"mc_pt_rec_sec_pid_%d_conv",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_rec_sec_pid_%d_conv",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_mother_rec_sec_pid_%d_conv",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4); + h->SetName(name); + aFolderObj->Add(h); + + } else if (j == 13) { + // mat + + snprintf(name,256,"mc_pt_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_mother_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4,1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_mother_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_pt_mother_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4,0); + h->SetName(name); + aFolderObj->Add(h); + + } else { + continue; + } + } + + } + } // end fHistogramOn + + // + // resolution histograms + // only for reconstructed tracks + // + + TH2F *h2F=0; + TCanvas * c = new TCanvas("resol","resol"); + c->cd(); + + // + fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); + h->Draw(); + h->SetName("pt_resolution_vs_mcpt"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); + h->Draw(); + h->SetName("dpt_mean_vs_mcpt"); + aFolderObj->Add(h); + + // + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(#eta-#eta_{mc}) resolution"); + h->Draw(); + h->SetName("eta_resolution_vs_mcpt"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(#eta-mc#eta) mean"); + h->Draw(); + h->SetName("deta_mean_vs_mcpt"); + aFolderObj->Add(h); + + // + fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); + h->Draw(); + h->SetName("pt_resolution_vs_mceta"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); + h->Draw(); + h->SetName("dpt_mean_vs_mceta"); + aFolderObj->Add(h); + + // + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(#eta-#eta_{mc}) resolution"); + h->Draw(); + h->SetName("eta_resolution_vs_mceta"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(#eta-mc#eta) mean"); + h->Draw(); + h->SetName("deta_mean_vs_mceta"); + aFolderObj->Add(h); + + fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins()); + + } // end use MC info + + // export objects to analysis folder + fAnalysisFolder = ExportToFolder(aFolderObj); + + // delete only TObjArray + if(aFolderObj) delete aFolderObj; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * const array) +{ + // recreate folder avery time and export objects to new one + // + AlidNdPtAnalysis * comp=this; + TFolder *folder = comp->GetAnalysisFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtAnalysis::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysispPb.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysispPb.cxx index 2e3dbaee0f2..98650b12739 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysispPb.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysispPb.cxx @@ -1,3171 +1,3171 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//------------------------------------------------------------------------------ -// AlidNdPtAnalysispPb class. -// -// a. functionality: -// - fills analysis control histograms -// - fills generic correction matrices -// - generates correction matrices -// -// b. data members: -// - generic correction matrices -// - control histograms -// -// last change: 2013-06-19 by M.Knichel -// -// meaning of different multiplicities: -// multRec : number of reconstructed tracks, after AcceptanceCuts and TrackCuts -// multRecMult : number of reconstructed tracks, after MultAcceptanceCuts and MultTrackCuts -// multMB : number of contributers to vertex -// multTrueMC : MC true mult, after MultAcceptanceCuts -// mutlAll : number of ESD tracks -// mutlAcc : number of ESD tracks after AcceptanceCuts -//------------------------------------------------------------------------------ - -#include "TH1.h" -#include "TH2.h" -#include "TCanvas.h" -#include "THnSparse.h" - -#include "AliHeader.h" -#include "AliInputEventHandler.h" -#include "AliAnalysisManager.h" -#include "AliGenEventHeader.h" -#include "AliStack.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDtrackCuts.h" -#include "AliLog.h" -#include "AliMultiplicity.h" -#include "AliTracker.h" - -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AliPhysicsSelection.h" -#include "AliTriggerAnalysis.h" -#include "AliCentrality.h" -#include "AliAnalysisUtils.h" - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" -#include "AlidNdPtAnalysispPb.h" - -using namespace std; - -ClassImp(AlidNdPtAnalysispPb) - -//_____________________________________________________________________________ - AlidNdPtAnalysispPb::AlidNdPtAnalysispPb(): AlidNdPt(), - fAnalysisFolder(0), - fHistogramsOn(kFALSE), - - // event multiplicity correlation matrix - fEventMultCorrelationMatrix(0), - - // rec. track pt vs true track pt correlation matrix - fTrackPtCorrelationMatrix(0), - - // event level correction - fGenEventMatrix(0), - fGenSDEventMatrix(0), - fGenDDEventMatrix(0), - fGenNDEventMatrix(0), - fGenNSDEventMatrix(0), - - fTriggerEventMatrix(0), - fTriggerSDEventMatrix(0), - fTriggerDDEventMatrix(0), - fTriggerNDEventMatrix(0), - fTriggerNSDEventMatrix(0), - - fRecEventMatrix(0), - fRecSDEventMatrix(0), - fRecDDEventMatrix(0), - fRecNDEventMatrix(0), - fRecNSDEventMatrix(0), - - // - // track-event level correction - // - fGenTrackEventMatrix(0), - fGenTrackSDEventMatrix(0), - fGenTrackDDEventMatrix(0), - fGenTrackNDEventMatrix(0), - fGenTrackNSDEventMatrix(0), - - fTriggerTrackEventMatrix(0), - fTriggerTrackSDEventMatrix(0), - fTriggerTrackDDEventMatrix(0), - fTriggerTrackNDEventMatrix(0), - fTriggerTrackNSDEventMatrix(0), - - fRecTrackEventMatrix(0), - fRecTrackSDEventMatrix(0), - fRecTrackDDEventMatrix(0), - fRecTrackNDEventMatrix(0), - fRecTrackNSDEventMatrix(0), - - // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix) - fGenTrackMatrix(0), - fGenPrimTrackMatrix(0), - fRecPrimTrackMatrix(0), - - // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix) - fRecTrackMatrix(0), - fRecSecTrackMatrix(0), - - // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix) - fRecMultTrackMatrix(0), - - // event control histograms - fMCEventHist1(0), - fRecEventHist1(0), - fRecEventHist2(0), - fRecMCEventHist1(0), - fRecMCEventHist2(0), - fRecMCEventHist3(0), - - // rec. pt and eta resolution w.r.t MC - fRecMCTrackHist1(0), - - //multple reconstructed tracks - fMCMultRecTrackHist1(0), - - // rec. track control histograms - fRecTrackHist2(0), - - // Generic histograms to be corrected - fRecEventHist(0), - fRecTrackHist(0), - fEventCount(0), - fEventMultHist(0), - fMCPrimTrackHist(0), - - // Candle event histogram - fRecCandleEventMatrix(0), - - fCentralityEventHist(0), - fCentralityTrackHist(0), - fCentralityEstimatorsList(0), - fDimensionsCentralityEstimators(0), - fCentralityNbins(0), - fCentralityNedges(0), - fBinsCentrality(0), - fNVCentralityEvent(0), - fNVCentralityTrack(0), - fVCentralityEvent(0), - fVCentralityTrack(0), - - fMultNbins(0), - fMultNbinsTE(0), - fPtNbins(0), - fPtCorrNbins(0), - fEtaNbins(0), - fZvNbins(0), - fMultNedges(0), - fMultNedgesTE(0), - fPtNedges(0), - fPtCorrNedges(0), - fEtaNedges(0), - fZvNedges(0), - fBinsMult(0), - fBinsMultTE(0), - fBinsPt(0), - fBinsPtCorr(0), - fBinsEta(0), - fBinsZv(0), - - fRapidityShift(-4.65409416218532379e-01), - fUtils(0), - fIs2013pA(kTRUE), - - fIsInit(kFALSE) - -{ - // default constructor - for(Int_t i=0; iGetEntries(); - } -} - - -//_____________________________________________________________________________ -Bool_t AlidNdPtAnalysispPb::CanChangeBins() -{ - if (fIsInit) { - AliDebug(AliLog::kError, "Object AlidNdPtAnalysispPb already initialized. Cannot change."); - return kFALSE; - } - return kTRUE; -} - - -//_____________________________________________________________________________ -void AlidNdPtAnalysispPb::Init() -{ - //define default binning - Double_t binsMultDefault[15] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5, 9.5, 10.5, 20.5, 50.5, 150.5}; - Double_t binsPtDefault[69] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0}; - Double_t binsPtCorrDefault[37] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,50.0}; - Double_t binsEtaDefault[31] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5}; - Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.}; - - Double_t binCentralityDefault[6] = {0.,20.,40.,60.,80.,100.}; - - // if no binning is set, use the default - if (!fBinsMult) { SetBinsMult(14,binsMultDefault); } - if (!fBinsMultTE) { SetBinsMultTE(14,binsMultDefault); } - if (!fBinsPt) { SetBinsPt(68,binsPtDefault); } - if (!fBinsPtCorr) { SetBinsPtCorr(36,binsPtCorrDefault); } - if (!fBinsEta) { SetBinsEta(30,binsEtaDefault); } - if (!fBinsZv) { SetBinsZv(12,binsZvDefault); } - if (!fBinsCentrality) { SetBinsCentrality(5,binCentralityDefault); } - - // Int_t binsTrackMatrix[3]={fZvNbins,fPtCorrNbins,fEtaNbins}; - Int_t binsTrackEventCorrMatrix[4]={fZvNbins,fPtCorrNbins,fEtaNbins,fMultNbinsTE}; - Int_t binsTrackEventCorrMatrixCent[4]={fZvNbins,fPtCorrNbins,fEtaNbins,fCentralityNbins}; - - - // - // Generic histograms to be corrected - // - Int_t binsEventHist[2]={fZvNbins,fMultNbins}; - //Double_t minEventHist[2]={-fBinsZv[0],fBinsMult[0]}; - //Double_t maxEventHist[2]={fBinsZv[fZvNbins],fBinsMult[fMultNbins]}; - - fRecEventHist = new THnSparseF("fRecEventHist","Zv:multMB",2,binsEventHist); //,minEventHist,maxEventHist); - fRecEventHist->SetBinEdges(0,fBinsZv); - fRecEventHist->SetBinEdges(1,fBinsMult); - fRecEventHist->GetAxis(0)->SetTitle("Zv (cm)"); - fRecEventHist->GetAxis(1)->SetTitle("multiplicity MB"); - fRecEventHist->Sumw2(); - - // - Int_t binsTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; - // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; - // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; - - fRecTrackHist = new THnSparseF("fRecTrackHist","Zv:pT:eta:multRecMult",4,binsTrackHist); //,minTrackHist,maxTrackHist); - fRecTrackHist->SetBinEdges(0,fBinsZv); - fRecTrackHist->SetBinEdges(1,fBinsPt); - fRecTrackHist->SetBinEdges(2,fBinsEta); - fRecTrackHist->SetBinEdges(3,fBinsMult); - fRecTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); - fRecTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)"); - fRecTrackHist->GetAxis(2)->SetTitle("#eta"); - fRecTrackHist->GetAxis(3)->SetTitle("multiplicity (multCuts)"); - fRecTrackHist->Sumw2(); - - - Int_t binsMCPrimTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; - // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; - // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; - - fMCPrimTrackHist = new THnSparseF("fMCPrimTrackHist","Zv:mcpT:mceta:multTrueMC",4,binsMCPrimTrackHist); - fMCPrimTrackHist->SetBinEdges(0,fBinsZv); - fMCPrimTrackHist->SetBinEdges(1,fBinsPt); - fMCPrimTrackHist->SetBinEdges(2,fBinsEta); - fMCPrimTrackHist->SetBinEdges(3,fBinsMult); - fMCPrimTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); - fMCPrimTrackHist->GetAxis(1)->SetTitle("MC p_{T} (GeV/c)"); - fMCPrimTrackHist->GetAxis(2)->SetTitle("#eta (MC)"); - fMCPrimTrackHist->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fMCPrimTrackHist->Sumw2(); - - // - // rec. vs MC correlation matrices - // - Int_t binsMultTrueEventMatrix[3]={fMultNbins,fMultNbins,fMultNbins}; -// Double_t minMultTrueEventMatrix[3]={-0.5,-0.5,-0.5}; -// Double_t maxMultTrueEventMatrix[3]={149.5,149.5,149.5}; - fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","multRecMult:multTrueMC:multMB",3,binsMultTrueEventMatrix); //,minMultTrueEventMatrix,maxMultTrueEventMatrix); - fEventMultCorrelationMatrix->SetBinEdges(0,fBinsMult); - fEventMultCorrelationMatrix->SetBinEdges(1,fBinsMult); - fEventMultCorrelationMatrix->SetBinEdges(2,fBinsMult); - fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("multiplicity (multCuts)"); - fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fEventMultCorrelationMatrix->GetAxis(2)->SetTitle("MB multiplicity"); - fEventMultCorrelationMatrix->Sumw2(); - - Int_t binsTrackPtCorrelationMatrix[3]={fPtCorrNbins,fPtCorrNbins,fEtaNbins}; - fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix); - fTrackPtCorrelationMatrix->SetBinEdges(0,fBinsPtCorr); - fTrackPtCorrelationMatrix->SetBinEdges(1,fBinsPtCorr); - fTrackPtCorrelationMatrix->SetBinEdges(2,fBinsEta); - fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta"); - fTrackPtCorrelationMatrix->Sumw2(); - - // - // Efficiency and contamination correction matrices - // - Int_t binsEventMatrix[2]={fZvNbins,fMultNbins}; - Int_t binsEventMatrixCent[3]={fZvNbins,fMultNbins,fCentralityNbins}; -// Double_t minEventMatrix[2]={-25.,-0.5}; -// Double_t maxEventMatrix[2]={25.,149.5}; - - fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenEventMatrix->SetBinEdges(0,fBinsZv); - fGenEventMatrix->SetBinEdges(1,fBinsMult); - fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenEventMatrix->Sumw2(); - - fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenSDEventMatrix->SetBinEdges(1,fBinsMult); - fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenSDEventMatrix->Sumw2(); - - fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenDDEventMatrix->SetBinEdges(0,fBinsZv); - fGenDDEventMatrix->SetBinEdges(1,fBinsMult); - fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenDDEventMatrix->Sumw2(); - - fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenNDEventMatrix->SetBinEdges(0,fBinsZv); - fGenNDEventMatrix->SetBinEdges(1,fBinsMult); - fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenNDEventMatrix->Sumw2(); - - fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fGenNSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenNSDEventMatrix->SetBinEdges(1,fBinsMult); - fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fGenNSDEventMatrix->Sumw2(); - - // - fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerEventMatrix->Sumw2(); - - fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerSDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerSDEventMatrix->Sumw2(); - - fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerDDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerDDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerDDEventMatrix->Sumw2(); - - fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerNDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerNDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerNDEventMatrix->Sumw2(); - - fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fTriggerNSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerNSDEventMatrix->SetBinEdges(1,fBinsMult); - fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fTriggerNSDEventMatrix->Sumw2(); - - // - fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multTrueMC:Cent",3,binsEventMatrixCent); //,minEventMatrix,maxEventMatrix); - fRecEventMatrix->SetBinEdges(0,fBinsZv); - fRecEventMatrix->SetBinEdges(1,fBinsMult); - fRecEventMatrix->SetBinEdges(2,fBinsCentrality); - fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecEventMatrix->GetAxis(2)->SetTitle("Centrality"); - fRecEventMatrix->Sumw2(); - - fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecSDEventMatrix->SetBinEdges(1,fBinsMult); - fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecSDEventMatrix->Sumw2(); - - fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecDDEventMatrix->SetBinEdges(0,fBinsZv); - fRecDDEventMatrix->SetBinEdges(1,fBinsMult); - fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecDDEventMatrix->Sumw2(); - - fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecNDEventMatrix->SetBinEdges(0,fBinsZv); - fRecNDEventMatrix->SetBinEdges(1,fBinsMult); - fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecNDEventMatrix->Sumw2(); - - fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecNSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecNSDEventMatrix->SetBinEdges(1,fBinsMult); - fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecNSDEventMatrix->Sumw2(); - - fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); - fRecCandleEventMatrix->SetBinEdges(0,fBinsZv); - fRecCandleEventMatrix->SetBinEdges(1,fBinsMult); - fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecCandleEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); - fRecCandleEventMatrix->Sumw2(); - - // - // track to event corrections - // - - fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackEventMatrix->SetBinEdges(3,fBinsMultTE); - fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackEventMatrix->Sumw2(); - - fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackSDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE); - fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackSDEventMatrix->Sumw2(); - - fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackDDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackDDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE); - fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackDDEventMatrix->Sumw2(); - - fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackNDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackNDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE); - fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackNDEventMatrix->Sumw2(); - - fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fGenTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); - fGenTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); - fGenTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE); - fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fGenTrackNSDEventMatrix->Sumw2(); - - - // - fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackEventMatrix->SetBinEdges(3,fBinsMultTE); - fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackEventMatrix->Sumw2(); - - fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackSDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE); - fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackSDEventMatrix->Sumw2(); - - fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackDDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackDDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE); - fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackDDEventMatrix->Sumw2(); - - fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackNDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackNDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE); - fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackNDEventMatrix->Sumw2(); - - fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fTriggerTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); - fTriggerTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fTriggerTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); - fTriggerTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE); - fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fTriggerTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fTriggerTrackNSDEventMatrix->Sumw2(); - - - // - fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackEventMatrix->SetBinEdges(3,fBinsMultTE); - fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackEventMatrix->Sumw2(); - - - fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackSDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE); - fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackSDEventMatrix->Sumw2(); - - fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackDDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackDDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE); - fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackDDEventMatrix->Sumw2(); - - fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackNDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackNDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE); - fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackNDEventMatrix->Sumw2(); - - fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); - fRecTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); - fRecTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); - fRecTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE); - fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); - fRecTrackNSDEventMatrix->Sumw2(); - // - // tracks correction matrices - // - //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fGenTrackMatrix->SetBinEdges(0,fBinsZv); - //fGenTrackMatrix->SetBinEdges(1,binsPt); - fGenTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fGenTrackMatrix->SetBinEdges(2,fBinsEta); - fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenTrackMatrix->Sumw2(); - - //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); - fGenPrimTrackMatrix->SetBinEdges(0,fBinsZv); - //fGenPrimTrackMatrix->SetBinEdges(1,binsPt); - fGenPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fGenPrimTrackMatrix->SetBinEdges(2,fBinsEta); - fGenPrimTrackMatrix->SetBinEdges(3,fBinsCentrality); - fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fGenPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality"); - fGenPrimTrackMatrix->Sumw2(); - - //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); - fRecPrimTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecPrimTrackMatrix->SetBinEdges(1,binsPt); - fRecPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecPrimTrackMatrix->SetBinEdges(2,fBinsEta); - fRecPrimTrackMatrix->SetBinEdges(3,fBinsCentrality); - fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality"); - fRecPrimTrackMatrix->Sumw2(); - - // - //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); - fRecTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecTrackMatrix->SetBinEdges(1,binsPt); - fRecTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecTrackMatrix->SetBinEdges(2,fBinsEta); - fRecTrackMatrix->SetBinEdges(3,fBinsCentrality); - fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); - fRecTrackMatrix->GetAxis(2)->SetTitle("Eta"); - fRecTrackMatrix->GetAxis(3)->SetTitle("Centrality"); - fRecTrackMatrix->Sumw2(); - - //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); - fRecSecTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecSecTrackMatrix->SetBinEdges(1,binsPt); - fRecSecTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecSecTrackMatrix->SetBinEdges(2,fBinsEta); - fRecSecTrackMatrix->SetBinEdges(3,fBinsCentrality); - fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); - fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta"); - fRecSecTrackMatrix->GetAxis(3)->SetTitle("Centrality"); - fRecSecTrackMatrix->Sumw2(); - - // - //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); - fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); - fRecMultTrackMatrix->SetBinEdges(0,fBinsZv); - //fRecMultTrackMatrix->SetBinEdges(1,binsPt); - fRecMultTrackMatrix->SetBinEdges(1,fBinsPtCorr); - fRecMultTrackMatrix->SetBinEdges(2,fBinsEta); - fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); - fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); - fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta"); - fRecMultTrackMatrix->Sumw2(); - - // - // Control analysis histograms - // - - Int_t binsMCEventHist1[3]={100,100,140}; - Double_t minMCEventHist1[3]={-0.1,-0.1,-35.}; - Double_t maxMCEventHist1[3]={0.1,0.1,35.}; - fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1); - fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)"); - fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)"); - fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)"); - fMCEventHist1->Sumw2(); - - // - Int_t binsRecEventHist1[3]={100,100,140}; - Double_t minRecEventHist1[3]={-3.,-3.,-35.}; - Double_t maxRecEventHist1[3]={3.,3.,35.}; - - fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1); - fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)"); - fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)"); - fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)"); - fRecEventHist1->Sumw2(); - - // - Int_t binsRecEventHist2[3]={fZvNbins,fMultNbins,fMultNbins}; -// Double_t minRecEventHist2[3]={-25.,-0.5,-0.5}; -// Double_t maxRecEventHist2[3]={25.,149.5,149.5}; - - fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:multRecMult",3,binsRecEventHist2); //,minRecEventHist2,maxRecEventHist2); - fRecEventHist2->SetBinEdges(0,fBinsZv); - fRecEventHist2->SetBinEdges(1,fBinsMult); - fRecEventHist2->SetBinEdges(2,fBinsMult); - fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)"); - fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB"); - fRecEventHist2->GetAxis(2)->SetTitle("multiplicity (multCuts)"); - fRecEventHist2->Sumw2(); - - // - Double_t kFact = 0.1; - Int_t binsRecMCEventHist1[3]={100,100,100}; - Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; - Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; - - fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1); - fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); - fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); - fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); - fRecMCEventHist1->Sumw2(); - - // - Int_t binsRecMCEventHist2[3]={100,100,fMultNbins}; - Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0}; - Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50}; - - fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:multMB",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2); - fRecMCEventHist2->SetBinEdges(2,fBinsMult); - fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); - fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)"); - fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity MB"); - fRecMCEventHist2->Sumw2(); - - Int_t binsRecMCEventHist3[2]={fMultNbins,5}; - Double_t minRecMCEventHist3[2]={-0.5,0.0}; - Double_t maxRecMCEventHist3[2]={149.50,5.0}; - fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","multRecMult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3); - fRecMCEventHist3->SetBinEdges(0,fBinsMult); - fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity (multCuts)"); - fRecMCEventHist3->GetAxis(1)->SetTitle("EventType"); - fRecMCEventHist3->Sumw2(); - - // - char name[256]; - char title[256]; - for(Int_t i=0; iSetBinEdges(0,fBinsPtCorr); - fMCTrackHist1[i]->SetBinEdges(1,fBinsEta); - fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); - fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)"); - fMCTrackHist1[i]->Sumw2(); - - Int_t binsMCPrimTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; - Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; - Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; - snprintf(name,256,"fMCPrimTrackHist1_%d",i); - snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); - - fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1); - fMCPrimTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); - fMCPrimTrackHist1[i]->SetBinEdges(1,fBinsEta); - fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); - fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid"); - fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech"); - fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother"); - fMCPrimTrackHist1[i]->Sumw2(); - - Int_t binsMCPrimTrackHist2[3]= {4000,20,4000}; - Double_t minMCPrimTrackHist2[3]={0.,0.,0.}; - Double_t maxMCPrimTrackHist2[3]={4000.,20.,4000.}; - snprintf(name,256,"fMCPrimTrackHist2_%d",i); - snprintf(title,256,"pdg:mech:mother"); - - fMCPrimTrackHist2[i] = new THnSparseF(name,title,3,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2); - fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg"); - fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech"); - fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother"); - fMCPrimTrackHist2[i]->Sumw2(); - - Int_t binsMCSecTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; - Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; - Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; - snprintf(name,256,"fMCSecTrackHist1_%d",i); - snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); - - fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1); - fMCSecTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); - fMCSecTrackHist1[i]->SetBinEdges(1,fBinsEta); - fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); - fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid"); - fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech"); - fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother"); - fMCSecTrackHist1[i]->Sumw2(); - - // - - // - - Int_t binsRecTrackHist1[3]={fPtNbins,fEtaNbins,90}; - Double_t minRecTrackHist1[3]={0.,-1.,0.}; - Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()}; - snprintf(name,256,"fRecTrackHist1_%d",i); - snprintf(title,256,"Pt:Eta:Phi"); - fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1); - fRecTrackHist1[i]->SetBinEdges(0,fBinsPt); - fRecTrackHist1[i]->SetBinEdges(1,fBinsEta); - fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)"); - fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta"); - fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)"); - fRecTrackHist1[i]->Sumw2(); - - // - Int_t binsRecTrackMultHist1[2]={fPtNbins,fMultNbins}; - snprintf(name,256,"fRecTrackMultHist_%d",i); - snprintf(title,256,"Pt:Mult"); - fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1); //,minRecTrackMultHist1,maxRecTrackMultHist1); - fRecTrackMultHist1[i]->SetBinEdges(0,fBinsPt); - fRecTrackMultHist1[i]->SetBinEdges(1,fBinsMult); - fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity"); - fRecTrackMultHist1[i]->Sumw2(); - } - - Int_t binsRecMCTrackHist1[4] = {fPtCorrNbins,fEtaNbins,100,100}; - Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5}; - Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5}; - snprintf(name,256,"fRecMCTrackHist1"); - snprintf(title,256,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)"); - - fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1); - fRecMCTrackHist1->SetBinEdges(0,fBinsPtCorr); - fRecMCTrackHist1->SetBinEdges(1,fBinsEta); - fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta"); - fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt"); - fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta"); - - Int_t binsMCMultRecTrackHist1[3] = {fPtCorrNbins,fEtaNbins,6}; - Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.}; - Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.}; - snprintf(name,256,"fMCMultRecTrackHist1"); - snprintf(title,256,"mcPt:mcEta:pid"); - fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1); - fMCMultRecTrackHist1->SetBinEdges(0,fBinsPtCorr); - fMCMultRecTrackHist1->SetBinEdges(1,fBinsEta); - fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta"); - fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid"); - - //nClust:chi2PerClust:pt:eta:phi - Int_t binsRecTrackHist2[5]={160,100,fPtNbins,fEtaNbins,90}; - Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.}; - Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()}; - - fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2); - fRecTrackHist2->SetBinEdges(2,fBinsPt); - fRecTrackHist2->SetBinEdges(3,fBinsEta); - fRecTrackHist2->GetAxis(0)->SetTitle("nClust"); - fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust"); - fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); - fRecTrackHist2->GetAxis(3)->SetTitle("#eta"); - fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)"); - fRecTrackHist2->Sumw2(); - - Int_t binsEventCount[3]={2,2,2}; - Double_t minEventCount[3]={0,0,0}; - Double_t maxEventCount[3]={2,2,2}; - fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount); - fEventCount->GetAxis(0)->SetTitle("trig"); - fEventCount->GetAxis(1)->SetTitle("trig+vert"); - fEventCount->GetAxis(2)->SetTitle("selected"); - fEventCount->Sumw2(); - - Int_t binsEventMultHist[3]={fMultNbins,fMultNbins,fMultNbins}; - fEventMultHist = new THnSparseF("fEventMultHist","multMB:multRecMult:multRec",3,binsEventMultHist); - fEventMultHist->GetAxis(0)->SetTitle("multMB"); - fEventMultHist->GetAxis(1)->SetTitle("multRecMult"); - fEventMultHist->GetAxis(2)->SetTitle("multRec"); - fEventMultHist->SetBinEdges(0,fBinsMult); - fEventMultHist->SetBinEdges(1,fBinsMult); - fEventMultHist->SetBinEdges(2,fBinsMult); - fEventMultHist->Sumw2(); - - // - // create histograms for centrality - // (only if fDimensionsCentralityEstimators > 0) - -// if (fDimensionsCentralityEstimators > 0) { - - // fCentralityEventHist - //zv:multRec:multMB:cent[n] - Int_t dimsCentralityEventHist = fDimensionsCentralityEstimators + 3; - Int_t* binsCentralityEventHist = new Int_t[dimsCentralityEventHist]; - TString titleCentralityEventHist("zV:multRecMult:multMB"); - binsCentralityEventHist[0] = fZvNbins; - binsCentralityEventHist[1] = fMultNbins; - binsCentralityEventHist[2] = fMultNbins; - for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { - binsCentralityEventHist[i+2] = fCentralityNbins; - titleCentralityEventHist += ":cent"; - titleCentralityEventHist += TString(GetCentralityEstimator(i)); - } - fCentralityEventHist = new THnSparseF("fCentralityEventHist",titleCentralityEventHist.Data(),dimsCentralityEventHist,binsCentralityEventHist); - fCentralityEventHist->SetBinEdges(0,fBinsZv); - fCentralityEventHist->SetBinEdges(1,fBinsMult); - fCentralityEventHist->SetBinEdges(2,fBinsMult); - fCentralityEventHist->GetAxis(0)->SetTitle("Zv (cm)"); - fCentralityEventHist->GetAxis(1)->SetTitle("multRecMult"); - fCentralityEventHist->GetAxis(2)->SetTitle("multMB"); - for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { - fCentralityEventHist->SetBinEdges(i+2,fBinsCentrality); - TString axistitle(GetCentralityEstimator(i)); - axistitle += " Centrality"; - fCentralityEventHist->GetAxis(i+2)->SetTitle(axistitle); - } - fCentralityEventHist->Sumw2(); - - // fCentralityTrackHist - //zv:pt:eta:multRec:multMB:cent[n] - Int_t dimsCentralityTrackHist = fDimensionsCentralityEstimators + 5; - Int_t* binsCentralityTrackHist = new Int_t[dimsCentralityTrackHist]; - TString titleCentralityTrackHist("zV:pT:eta:multRecMult:multMB"); - binsCentralityTrackHist[0] = fZvNbins; - binsCentralityTrackHist[1] = fPtNbins; - binsCentralityTrackHist[2] = fEtaNbins; - binsCentralityTrackHist[3] = fMultNbins; - binsCentralityTrackHist[4] = fMultNbins; - for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { - binsCentralityTrackHist[i+4] = fCentralityNbins; - titleCentralityTrackHist += ":cent"; - titleCentralityTrackHist += TString(GetCentralityEstimator(i)); - } - fCentralityTrackHist = new THnSparseF("fCentralityTrackHist",titleCentralityTrackHist.Data(),dimsCentralityTrackHist,binsCentralityTrackHist); - fCentralityTrackHist->SetBinEdges(0,fBinsZv); - fCentralityTrackHist->SetBinEdges(1,fBinsPt); - fCentralityTrackHist->SetBinEdges(2,fBinsEta); - fCentralityTrackHist->SetBinEdges(3,fBinsMult); - fCentralityTrackHist->SetBinEdges(4,fBinsMult); - fCentralityTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); - fCentralityTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)"); - fCentralityTrackHist->GetAxis(2)->SetTitle("#eta"); - fCentralityTrackHist->GetAxis(3)->SetTitle("multRecMult"); - fCentralityTrackHist->GetAxis(4)->SetTitle("multMB"); - for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { - fCentralityTrackHist->SetBinEdges(i+4,fBinsCentrality); - TString axistitle(GetCentralityEstimator(i)); - axistitle += " Centrality"; - fCentralityTrackHist->GetAxis(i+4)->SetTitle(axistitle); - } - fCentralityTrackHist->Sumw2(); - - fNVCentralityEvent = fDimensionsCentralityEstimators + 3; - fNVCentralityTrack = fDimensionsCentralityEstimators + 5; - fVCentralityEvent = new Double_t[fNVCentralityEvent]; - fVCentralityTrack = new Double_t[fNVCentralityTrack]; - // } - - // init folder - fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); - - fUtils = new AliAnalysisUtils(); - - // set init flag - fIsInit = kTRUE; -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysispPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) -{ - // init if not done already - if (!fIsInit) { Init(); } - - - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - AlidNdPtAcceptanceCuts *multAccCuts = GetMultAcceptanceCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - // trigger selection - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - if(evtCuts->IsTriggerRequired()) - { - // always MB - //isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - isEventTriggered = inputHandler->IsEventSelected() & GetTriggerMask(); - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - - // calculate LHC background - if(!IsUseMCInfo()) - { - // - // 0-multiplicity bin for LHC background correction - // - /* bin0 done in the train - if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) - { - physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysispPb::IsBinZeroTrackSPDvtx); - } else { - physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysispPb::IsBinZeroSPDvtx); - } - */ - } - } - - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; - - Int_t multMCTrueTracks = 0; - if(IsUseMCInfo()) - { - // - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - // get event type (ND=0x1, DD=0x2, SD=0x4) - evtType = AlidNdPtHelper::GetEventProcessTypePA(header); - AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; - fMCEventHist1->Fill(vMCEventHist1); - - // multipliticy of all MC primary tracks - // in Zv, pt and eta ranges) - if (fRapidityShift == 0) { - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts); - } else { - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts,fRapidityShift); - } - - } // end bUseMC - - - // get reconstructed vertex - const AliESDVertex* vtxESD = 0; - Bool_t isRecVertex = kFALSE; - /* the following lines have been commented out for same vertex as dNdEta analysis - if(evtCuts->IsRecVertexRequired()) - { - Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); - Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); - vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); - if(!vtxESD) return; - isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); - } - - if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) { - vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC"); - if(!vtxESD) return; - isRecVertex = kTRUE; - } - if(!vtxESD) return; - */ - // the following lines have been added for same vertex as dNdEta analysis - vtxESD = esdEvent->GetPrimaryVertexTracks(); - if(!vtxESD || (vtxESD->GetNContributors()<1)) { - // SPD vertex - vtxESD = esdEvent->GetPrimaryVertexSPD(); - if (vtxESD->GetNContributors()>0) { - TString vtxTyp = vtxESD->GetTitle(); - if ( !vtxTyp.Contains("vertexer: Z") || (vtxESD->GetDispersion()<0.04 && vtxESD->GetZRes()<0.25)) isRecVertex = kTRUE; - } - - } else { - isRecVertex = kTRUE; - } - - // the previous lines have been added for same vertex as dNdEta analysis - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; - - Bool_t isEventSelected2013 = kTRUE; - - // selection and pileup rejection for 2013 p-A - if (fIs2013pA) { - if (fUtils->IsFirstEventInChunk(esdEvent)) { isEventSelected2013 = kFALSE; } - if (!fUtils->IsVertexSelected2013pA(esdEvent)) { isEventSelected2013 = kFALSE; } - if (fUtils->IsPileUpEvent(esdEvent)) { isEventSelected2013 = kFALSE; } - } - isEventOK = isEventOK && isEventSelected2013; - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - Bool_t isTrigAndVertex = isEventTriggered && isEventOK; - - Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)}; - fEventCount->Fill(vEventCount); - - // vertex contributors - Int_t multMBTracks = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) - { - if(vtxESD && vtxESD->GetStatus() && isRecVertex) - multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts); - } - else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || - GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate ) - { - const AliMultiplicity* mult = esdEvent->GetMultiplicity(); - if(mult && vtxESD && vtxESD->GetStatus() && isRecVertex) - multMBTracks = mult->GetNumberOfTracklets(); - } - else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || - GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || - GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx - ) - { - if(vtxESD && vtxESD->GetStatus() && isRecVertex) - multMBTracks = vtxESD->GetNContributors(); - } - else { - AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode())); - return; - } - - Bool_t isEventSelected = kTRUE; - if(evtCuts->IsEventSelectedRequired()) - { - // select events with at least - // one prompt track in acceptance - // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies - - isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts); - //printf("isEventSelected %d \n", isEventSelected); - } - - TObjArray *allChargedTracks=0; - //Int_t multAll=0, multAcc=0, multRec=0; - Int_t multAll=0, multRec=0; - Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0; - - - // check event cuts - Int_t multRecMult=0; - Double_t centralityD = -1; - if(isEventOK && isEventTriggered && isEventSelected) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - //printf("entries %d \n",entries); - - - // calculate mult of reconstructed tracks - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - if(GetMultTrackCuts()->AcceptTrack(track)) - { - if(GetMultAcceptanceCuts()->AcceptTrack(track)) { multRecMult++; } - } - } - - - // fill fCentralityEventHist only if necessary - // also filles event-related value for fCentralityTrackHist - if (fDimensionsCentralityEstimators > 0) { - fVCentralityEvent[0] = vtxESD->GetZv(); - fVCentralityEvent[1] = multRecMult; - fVCentralityEvent[2] = multMBTracks; - fVCentralityTrack[0] = vtxESD->GetZv(); - fVCentralityTrack[3] = multRecMult; - fVCentralityTrack[4] = multMBTracks; - for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { - // centrality determination - Float_t centralityF = -1.; - AliCentrality *esdCentrality = esdEvent->GetCentrality(); - centralityF = esdCentrality->GetCentralityPercentile(GetCentralityEstimator(i)); - fVCentralityEvent[i+2] = centralityF; - fVCentralityTrack[i+4] = centralityF; - if (1==i) { centralityD = centralityF; } - } - fCentralityEventHist->Fill(fVCentralityEvent); - } - - - labelsAll = new Int_t[entries]; - labelsAcc = new Int_t[entries]; - labelsRec = new Int_t[entries]; - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecMult); - labelsAll[multAll] = TMath::Abs(track->GetLabel()); - multAll++; - - //if(accCuts->AcceptTrack(track)) { - //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); - //labelsAcc[multAcc] = TMath::Abs(track->GetLabel()); - //multAcc++; - //} - - // esd track selection - // ITS stand alone - if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx) - { - if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; - if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; - if(track->GetNcls(0)<4) continue; - if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; - } - else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx) - { - // - // ITS and TPC stand alone tracks - // - if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; - if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; - if(track->GetNcls(0)<4) continue; - if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; - - // Check matching with TPC only track - Bool_t hasMatch = kFALSE; - for(Int_t j=0; jAt(j); - if(!track2) continue; - if(track2->Charge()==0) continue; - if (!track2->GetTPCInnerParam()) continue; - - // check loose cuts for TPC tracks - if(!esdTrackCuts->AcceptTrack(track2)) continue; - - AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam())); - if(!innerTPC) continue; - Double_t x2[3]; track2->GetXYZ(x2); - Double_t b2[3]; AliTracker::GetBxByBz(x2,b2); - Double_t dz[2],cov[3]; - Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov); - if(!isPropOK && innerTPC) {delete innerTPC; continue;} - - // check matching - if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; } - if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; } - if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; } - - hasMatch = kTRUE; - if(innerTPC) delete innerTPC; - } - - if(!hasMatch) continue; - } - else { - // check track cuts - - if(!esdTrackCuts->AcceptTrack(track)) - continue; - } - - // - Bool_t isOK = kFALSE; - Double_t x[3]; track->GetXYZ(x); - Double_t b[3]; AliTracker::GetBxByBz(x,b); - - // - // if TPC-ITS hybrid tracking (kTPCITSHybrid) - // replace track parameters with TPC-ony track parameters - // - if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) - { - // Relate TPC-only tracks to Track or SPD vertex - isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); - if(!isOK) continue; - - // replace esd track parameters with TPCinner - AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); - if (tpcTrack) { - track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); - } - if(tpcTrack) delete tpcTrack; - } - - - // update track parameters using vertex point - if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ) - { - // update track parameters - AliExternalTrackParam cParam; - isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam); - if(!isOK) continue; - track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); - - if(accCuts->AcceptTrack(track)) { - FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); - labelsRec[multRec] = TMath::Abs(track->GetLabel()); - multRec++; - } - } - else { - if(accCuts->AcceptTrack(track)) - { - FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); - labelsRec[multRec] = TMath::Abs(track->GetLabel()); - multRec++; - } - } - } - - - // fill track multiplicity histograms - // terribly slow - // FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec); - - Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()}; - fRecEventHist1->Fill(vRecEventHist1); - - Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRecMult}; - fRecEventHist2->Fill(vRecEventHist2); - - // - //Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks}; - Double_t vRecEventHist[3] = {vtxESD->GetZv(),multMBTracks,centralityD}; - fRecEventHist->Fill(vRecEventHist); - - // fill fEventMultHist for cross checks - Double_t vEventMultHist[3] = {multMBTracks,multRecMult,multRec}; - fEventMultHist->Fill(vEventMultHist); - } - - if(IsUseMCInfo()) - { - if(mcEvent) { - - if(evtCuts->IsEventSelectedRequired()) - { - // select events with at least - // one MC primary track in acceptance - // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies - - Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent); - //printf("isMCEventSelected %d \n", isMCEventSelected); - if(!isMCEventSelected) { - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - if(labelsAll) delete [] labelsAll; labelsAll = 0; - if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; - if(labelsRec) delete [] labelsRec; labelsRec = 0; - - return; - } - } - - Double_t vMultTrueEventMatrix[3] = { multRecMult, multMCTrueTracks, multMBTracks}; - if(isEventOK && isEventTriggered) { - if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted - fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix); - } - - // - // event level corrections (zv,N_MB) - // - - // all inelastic - //Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks}; - Double_t vEventMatrix[3] = {vtxMC[2],multMCTrueTracks,centralityD}; - fGenEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix); - - // single diffractive - if(evtType == AliPWG0Helper::kSD) { - fGenSDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix); - } - - // double diffractive - if(evtType == AliPWG0Helper::kDD) { - fGenDDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix); - } - - // non diffractive - if(evtType == AliPWG0Helper::kND) { - fGenNDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix); - } - - // non single diffractive - if(evtType != AliPWG0Helper::kSD) { - fGenNSDEventMatrix->Fill(vEventMatrix); - if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix); - if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix); - } - - // - // track-event level corrections (zv,pt,eta) - // - for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) - { - TParticle* particle = stack->Particle(iMc); - if (!particle) - continue; - - // only charged particles - if(!particle->GetPDG()) continue; - Double_t charge = particle->GetPDG()->Charge()/3.; - if ( TMath::Abs(charge) < 0.001 ) - continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) - continue; - - // physical primary - Bool_t prim = stack->IsPhysicalPrimary(iMc); - if(!prim) continue; - - // checked accepted - if(accCuts->AcceptTrack(particle)) - { - //Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()}; - Double_t vTrackEventMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; - fGenTrackEventMatrix->Fill(vTrackEventMatrix); - - if(evtType == AliPWG0Helper::kSD) { - fGenTrackSDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kDD) { - fGenTrackDDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kND) { - fGenTrackNDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType != AliPWG0Helper::kSD) { - fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix); - } - - // - if(!isEventTriggered) continue; - - fTriggerTrackEventMatrix->Fill(vTrackEventMatrix); - if(evtType == AliPWG0Helper::kSD) { - fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kDD) { - fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kND) { - fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType != AliPWG0Helper::kSD) { - fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix); - } - - // - if(!isEventOK) continue; - - fRecTrackEventMatrix->Fill(vTrackEventMatrix); - if(evtType == AliPWG0Helper::kSD) { - fRecTrackSDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kDD) { - fRecTrackDDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType == AliPWG0Helper::kND) { - fRecTrackNDEventMatrix->Fill(vTrackEventMatrix); - } - if(evtType != AliPWG0Helper::kSD) { - fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix); - } - } - } - - // - // track-level corrections (zv,pt,eta) - // - if(isEventOK && isEventTriggered) - { - - // fill MC and rec event control histograms - if(fHistogramsOn) { - Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]}; - fRecMCEventHist1->Fill(vRecMCEventHist1); - - Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks}; - fRecMCEventHist2->Fill(vRecMCEventHist2); - - Double_t vRecMCEventHist3[2] = {multRec,evtType}; - fRecMCEventHist3->Fill(vRecMCEventHist3); - } - - // - // MC histograms for track efficiency studies - // - Int_t countRecCandle = 0; - for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) - { - TParticle* particle = stack->Particle(iMc); - if (!particle) - continue; - - //Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; . - Double_t vTrackMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),centralityD}; - - // all genertated primaries including neutral - //if( iMc < stack->GetNprimary() ) { - //fGenTrackMatrix->Fill(vTrackMatrix); - //} - - // only charged particles - if(!particle->GetPDG()) continue; - Double_t charge = particle->GetPDG()->Charge()/3.; - if (TMath::Abs(charge) < 0.001) - continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) - continue; - - // physical primary - Bool_t prim = stack->IsPhysicalPrimary(iMc); - - // check accepted - if(accCuts->AcceptTrack(particle)) - { - - if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { - fGenPrimTrackMatrix->Fill(vTrackMatrix); - Double_t vMCPrimTrackHist[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; - fMCPrimTrackHist->Fill(vMCPrimTrackHist); - } - // fill control histograms - if(fHistogramsOn) - FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); - - // check multiple found tracks - Int_t multCount = 0; - for(Int_t iRec=0; iRec1) - { - fRecMultTrackMatrix->Fill(vTrackMatrix); - - // fill control histogram - if(fHistogramsOn) { - Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); - Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid}; - fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1); - } - } - } - } - - // check reconstructed - for(Int_t iRec=0; iRecFill(vTrackMatrix); - - if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { - fRecPrimTrackMatrix->Fill(vTrackMatrix); - //AliESDtrack *track = esdEvent->GetTrack(iRec); - //if(track && track->GetKinkIndex(0) < 0) - // printf("prim kink \n"); - countRecCandle++; - } - - if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix); - - // fill control histograms - if(fHistogramsOn) - FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks); - - break; - } - } - } - } - - if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix); - } - } - }// end bUseMC - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - if(labelsAll) delete [] labelsAll; labelsAll = 0; - if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; - if(labelsRec) delete [] labelsRec; labelsRec = 0; - - if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD; - //if(trigAna) delete trigAna; - -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysispPb::FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec) { - // multiplicity histograms - - if(!allChargedTracks) return; - if(!labelsAll) return; - if(!labelsAcc) return; - if(!labelsRec) return; - - Int_t entries = allChargedTracks->GetEntries(); - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge() == 0) continue; - - Int_t label = TMath::Abs(track->GetLabel()); - for(Int_t iAll=0; iAllPt(), multAll}; - fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1); - } - } - for(Int_t iAcc=0; iAccPt(), multAcc}; - fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2); - } - } - for(Int_t iRec=0; iRecPt(), multRec}; - fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3); - } - } - } -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysispPb::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multRecMult) -{ - // - // Fill ESD track and MC histograms - // - if(!esdTrack) return; - - Float_t q = esdTrack->Charge(); - if(TMath::Abs(q) < 0.001) return; - - Float_t pt = esdTrack->Pt(); - //Float_t qpt = esdTrack->Pt() * q; - Float_t eta = esdTrack->Eta(); - Float_t phi = esdTrack->Phi(); - - Float_t dca[2], bCov[3]; - esdTrack->GetImpactParameters(dca,bCov); - - Int_t nClust = esdTrack->GetTPCclusters(0); - Float_t chi2PerCluster = 0.; - if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); - - - // fill histograms - Double_t values1[3] = {pt,eta,phi}; - fRecTrackHist1[trackObj]->Fill(values1); - - Double_t values[4] = {zv, pt,eta, multRecMult}; - if(trackObj == AlidNdPtHelper::kRecTracks) { - fRecTrackHist->Fill(values); - } - - //fill fCentralityTrackHist only if necessary - if (fDimensionsCentralityEstimators > 0) { - fVCentralityTrack[1] = pt; - fVCentralityTrack[2] = eta; - if(trackObj == AlidNdPtHelper::kRecTracks) { - fCentralityTrackHist->Fill(fVCentralityTrack); - } - } - - /* - Double_t values2[5] = {nClust,chi2PerCluster,pt,eta,phi}; - if(trackObj == AlidNdPtHelper::kRecTracks) - { - if(fHistogramsOn) - fRecTrackHist2->Fill(values2); - } - */ - - // - // Fill rec vs MC information - // - if(!stack) return; - - Int_t label = TMath::Abs(esdTrack->GetLabel()); - //if(label == 0) return; - - if(label > stack->GetNtrack()) return; - TParticle* particle = stack->Particle(label); - if(!particle) return; - - //Bool_t prim = stack->IsPhysicalPrimary(label); - //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); - - Int_t motherPdg = -1; - TParticle* mother = 0; - - //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); - Int_t motherLabel = particle->GetMother(0); - if(motherLabel>0) mother = stack->Particle(motherLabel); - if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only - //Int_t mech = particle->GetUniqueID(); // production mechanism - - if(!particle->GetPDG()) return; - Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 - if(TMath::Abs(gq)<0.001) return; - Float_t gpt = particle->Pt(); - Float_t geta = particle->Eta(); - //Float_t qgpt = particle->Pt() * gq; - //Float_t gphi = particle->Phi(); - - Double_t dpt=0; - //printf("pt %f, gpt %f \n",pt,gpt); - if(gpt) dpt = (pt-gpt)/gpt; - Double_t deta = (eta-geta); - - // fill histograms - if(trackObj == AlidNdPtHelper::kRecTracks) - { - Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta}; - fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix); - - Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta}; - fRecMCTrackHist1->Fill(vRecMCTrackHist1); - } -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysispPb::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj) -{ - // Fill MC histograms - if(!stack) return; - - if(label > stack->GetNtrack()) return; - TParticle* particle = stack->Particle(label); - if(!particle) return; - - Int_t motherPdg = -1; - TParticle* mother = 0; - - //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); - Int_t motherLabel = particle->GetMother(0); - if(motherLabel>0) mother = stack->Particle(motherLabel); - if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only - Int_t mech = particle->GetUniqueID(); // production mechanism - - if(!particle->GetPDG()) return; - Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 - if(TMath::Abs(gq) < 0.001) return; - - Float_t gpt = particle->Pt(); - //Float_t qgpt = particle->Pt() * gq; - Float_t geta = particle->Eta(); - Float_t gphi = particle->Phi(); - //Float_t gpz = particle->Pz(); - - Bool_t prim = stack->IsPhysicalPrimary(label); - //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz(); - - Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); - - //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech); - //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech); - - // - // fill histogram - // - Double_t vMCTrackHist1[3] = {gpt,geta,gphi}; - fMCTrackHist1[trackObj]->Fill(vMCTrackHist1); - - Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg}; - Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg}; - //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); - if(prim) { - fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); - if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2); - } - else { - fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); - } - -} - -//_____________________________________________________________________________ -Long64_t AlidNdPtAnalysispPb::Merge(TCollection* const list) -{ - // init if not done already - if (!fIsInit) { Init(); } - - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - - // - //TList *collPhysSelection = new TList; - - // collection of generated histograms - - Int_t count=0; - while((obj = iter->Next()) != 0) { - AlidNdPtAnalysispPb* entry = dynamic_cast(obj); - if (entry == 0) continue; - - // physics selection - //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection()); - //collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); - - // - fRecEventHist->Add(entry->fRecEventHist); - fRecTrackHist->Add(entry->fRecTrackHist); - fEventCount->Add(entry->fEventCount); - fEventMultHist->Add(entry->fEventMultHist); - if (fDimensionsCentralityEstimators > 0) { - fCentralityEventHist->Add(entry->fCentralityEventHist); - fCentralityTrackHist->Add(entry->fCentralityTrackHist); - } - - // - fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix); - fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix); - - // - fGenEventMatrix->Add(entry->fGenEventMatrix); - fGenSDEventMatrix->Add(entry->fGenSDEventMatrix); - fGenDDEventMatrix->Add(entry->fGenDDEventMatrix); - fGenNDEventMatrix->Add(entry->fGenNDEventMatrix); - fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix); - - fTriggerEventMatrix->Add(entry->fTriggerEventMatrix); - fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix); - fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix); - fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix); - fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix); - - fRecEventMatrix->Add(entry->fRecEventMatrix); - fRecSDEventMatrix->Add(entry->fRecSDEventMatrix); - fRecDDEventMatrix->Add(entry->fRecDDEventMatrix); - fRecNDEventMatrix->Add(entry->fRecNDEventMatrix); - fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix); - - fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix); - // - fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix); - fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix); - fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix); - fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix); - fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix); - - fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix); - fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix); - fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix); - fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix); - fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix); - - fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix); - fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix); - fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix); - fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix); - fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix); - - // - fGenTrackMatrix->Add(entry->fGenTrackMatrix); - fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix); - fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix); - // - fRecTrackMatrix->Add(entry->fRecTrackMatrix); - fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix); - // - fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix); - fMCPrimTrackHist->Add(entry->fMCPrimTrackHist); - - // - // control analysis histograms - // - fMCEventHist1->Add(entry->fMCEventHist1); - fRecEventHist1->Add(entry->fRecEventHist1); - fRecEventHist2->Add(entry->fRecEventHist2); - fRecMCEventHist1->Add(entry->fRecMCEventHist1); - fRecMCEventHist2->Add(entry->fRecMCEventHist2); - fRecMCEventHist3->Add(entry->fRecMCEventHist3); - - for(Int_t i=0; iAdd(entry->fMCTrackHist1[i]); - - fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]); - fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]); - fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]); - - fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]); - fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]); - } - fRecMCTrackHist1->Add(entry->fRecMCTrackHist1); - fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1); - fRecTrackHist2->Add(entry->fRecTrackHist2); - - - count++; - } - - //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); - //trigSelection->Merge(collPhysSelection); - //if(collPhysSelection) delete collPhysSelection; - -return count; -} - -//____________________________________________________________________ -Bool_t AlidNdPtAnalysispPb::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) { -// -// check 0-bin -// for LHC background calculation -// return kTRUE if vertex not reconstructed or -// track multiplicity == 0 -// -if(!esdEvent) return kFALSE; - - // check vertex - const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks(); - if(!vertex) return kTRUE; - - if(vertex->GetNContributors() < 1) { - // SPD vertex - vertex = esdEvent->GetPrimaryVertexSPD(); - if(!vertex) return kTRUE; - } - if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; - if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) ) - return kTRUE; - -return kFALSE; -} - -//____________________________________________________________________ -Bool_t AlidNdPtAnalysispPb::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) { -// -// check 0-bin -// for LHC background calculation -// return kTRUE if vertex not reconstructed or -// tracklet multiplicity == 0 -// -if(!esdEvent) return kFALSE; - - // check vertex - const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD(); - if(!vertex) return kTRUE; - if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; - if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE; - -return kFALSE; -} - -//_____________________________________________________________________________ -void AlidNdPtAnalysispPb::Analyse() -{ - // init if not done already - if (!fIsInit) { Init(); } - - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TH1 *h=0, *h1=0, *h2=0, *h2c = 0; - THnSparse *hs=0; - TH2 *h2D=0; - - char name[256]; - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - // - // LHC backgraund in all and 0-bins - // - //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); - //trigSel->SaveHistograms("physics_selection"); - - // - // Reconstructed event vertex - // - h = fRecEventHist1->Projection(0); - h->SetName("Xv"); - aFolderObj->Add(h); - - h = fRecEventHist1->Projection(1); - h->SetName("Yv"); - aFolderObj->Add(h); - - h = fRecEventHist1->Projection(2); - h->SetName("Zv"); - aFolderObj->Add(h); - - // - // multiplicity - // - h = fRecEventHist2->Projection(1); - h->SetName("multMB"); - aFolderObj->Add(h); - - h = fRecEventHist2->Projection(2); - h->SetName("multiplicity"); - aFolderObj->Add(h); - - h2D = fRecEventHist2->Projection(0,1); - h2D->SetName("Zv_vs_multiplicity_MB"); - aFolderObj->Add(h2D); - - // - // reconstructed pt histograms - // - h = fRecTrackHist1[0]->Projection(0); - h->Scale(1.,"width"); - h->SetName("pt_all_ch"); - aFolderObj->Add(h); - - h = fRecTrackHist1[1]->Projection(0); - h->Scale(1.,"width"); - h->SetName("pt_acc"); - aFolderObj->Add(h); - - h = fRecTrackHist1[2]->Projection(0); - h->Scale(1.,"width"); - h->SetName("pt_rec"); - aFolderObj->Add(h); - - // - // reconstructed eta histograms - // - h = fRecTrackHist1[0]->Projection(1); - h->SetName("eta_all_ch"); - aFolderObj->Add(h); - - h = fRecTrackHist1[1]->Projection(1); - h->SetName("eta_acc"); - aFolderObj->Add(h); - - h = fRecTrackHist1[2]->Projection(1); - h->SetName("eta_rec"); - aFolderObj->Add(h); - - // - // reconstructed phi histograms - // - h = fRecTrackHist1[0]->Projection(2); - h->SetName("phi_all_ch"); - aFolderObj->Add(h); - - h = fRecTrackHist1[1]->Projection(2); - h->SetName("phi_acc"); - aFolderObj->Add(h); - - h = fRecTrackHist1[2]->Projection(2); - h->SetName("phi_rec"); - aFolderObj->Add(h); - - // - // reconstructed eta:pt histograms - // - h2D = fRecTrackHist1[0]->Projection(1,0); - h2D->SetName("pt_eta_all_ch"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[1]->Projection(1,0); - h2D->SetName("pt_eta_acc"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[2]->Projection(1,0); - h2D->SetName("pt_eta_rec"); - aFolderObj->Add(h2D); - - // - // reconstructed phi:pt histograms - // - h2D = fRecTrackHist1[0]->Projection(2,0); - h2D->SetName("pt_phi_all_ch"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[1]->Projection(2,0); - h2D->SetName("pt_phi_acc"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[2]->Projection(2,0); - h2D->SetName("pt_phi_rec"); - aFolderObj->Add(h2D); - - // - // reconstructed phi:eta histograms - // - h2D = fRecTrackHist1[0]->Projection(2,1); - h2D->SetName("eta_phi_all_ch"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[1]->Projection(2,1); - h2D->SetName("eta_phi_acc"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist1[2]->Projection(2,1); - h2D->SetName("eta_phi_rec"); - aFolderObj->Add(h2D); - - // - // reconstructed nClust, chi2 vs pt, eta, phi - // - if(fHistogramsOn) { - - h2D = fRecTrackHist2->Projection(0,1); - h2D->SetName("nClust_chi2_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(0,2); - h2D->SetName("nClust_pt_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(0,3); - h2D->SetName("nClust_eta_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(0,4); - h2D->SetName("nClust_phi_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(1,2); - h2D->SetName("chi2_pt_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(1,3); - h2D->SetName("chi2_eta_rec"); - aFolderObj->Add(h2D); - - h2D = fRecTrackHist2->Projection(1,4); - h2D->SetName("chi2_phi_rec"); - aFolderObj->Add(h2D); - - } - - // - // calculate corrections for empty events - // with multMB==0 - // - - // - // normalised zv to generate zv for triggered events - // - h = fRecEventHist2->Projection(0); - if( h->Integral() ) h->Scale(1./h->Integral()); - h->SetName("zv_distribution_norm"); - aFolderObj->Add(h); - - // - // MC available - // - if(IsUseMCInfo()) { - - // - // Event vertex resolution - // - h2D = fRecMCEventHist2->Projection(0,2); - h2D->SetName("DeltaXv_vs_mult"); - aFolderObj->Add(h2D); - - h2D = fRecMCEventHist2->Projection(1,2); - h2D->SetName("DeltaZv_vs_mult"); - aFolderObj->Add(h2D); - - // - // normalised zv to get trigger/trigger+vertex event differences - // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv) - // - fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.); - h = fTriggerEventMatrix->Projection(0); - h2D = fTriggerEventMatrix->Projection(0,1); - if(h2D->Integral()) h->Scale(1./h2D->Integral()); - - h1 = fRecEventMatrix->Projection(0); - h2D = fRecEventMatrix->Projection(0,1); - if(h2D->Integral()) h1->Scale(1./h2D->Integral()); - - h->Divide(h1); - h->SetName("zv_empty_events_norm"); - aFolderObj->Add(h); - - fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins()); - - // - // rec. vs true multiplicity correlation matrix - // - hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix"); - aFolderObj->Add(hs); - - // - // rec. vs true track pt correlation matrix - // - hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix"); - aFolderObj->Add(hs); - - // - // trigger efficiency for INEL - // - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix"); - aFolderObj->Add(h); - - // - // trigger efficiency for NSD - // - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix"); - aFolderObj->Add(h); - - // - // trigger bias correction (MB to ND) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix"); - aFolderObj->Add(hs); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix"); - - aFolderObj->Add(h); - - // - // trigger bias correction (MB to NSD) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h); - - - // - // trigger bias correction (MB to INEL) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h); - - - // - // event vertex reconstruction correction (MB) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D"); - aFolderObj->Add(h2D); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix"); - aFolderObj->Add(h); - - // - // track-event trigger bias correction (MB to ND) - // - - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix"); - aFolderObj->Add(h2D); - - // - // track-event trigger bias correction (MB to NSD) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix"); - aFolderObj->Add(h2D); - - - // - // track-event trigger bias correction (MB to INEL) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix"); - aFolderObj->Add(h2D); - - // efficiency - - h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix"); - aFolderObj->Add(h); - - - // - // track-event vertex reconstruction correction (MB) - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix"); - aFolderObj->Add(h2D); - - // efficiency - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix"); - aFolderObj->Add(h); - - - // - // track rec. efficiency correction - // - hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix"); - aFolderObj->Add(h2D); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix"); - aFolderObj->Add(h); - - // efficiency - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix"); - aFolderObj->Add(h); - - // - // secondary track contamination correction - // - //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); - hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix"); - aFolderObj->Add(h); - - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix"); - aFolderObj->Add(h); - - // - // multiple track reconstruction correction - // - //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); - hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); - aFolderObj->Add(hs); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix"); - aFolderObj->Add(h2D); - - h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix"); - aFolderObj->Add(h2D); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix"); - aFolderObj->Add(h); - - h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix"); - aFolderObj->Add(h); - - // - // Control histograms - // - - if(fHistogramsOn) { - - // Efficiency electrons, muons, pions, kaons, protons, all - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_electrons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_muons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_pions"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_kaons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_protons"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_selected"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); - h1 = fMCPrimTrackHist1[1]->Projection(0); - h2 = fMCPrimTrackHist1[2]->Projection(0); - h2c = (TH1D *)h2->Clone(); - h2c->Divide(h1); - h2c->SetName("eff_pt_all"); - aFolderObj->Add(h2c); - - fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins()); - fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins()); - - // pt spetra - // - rec, primaries, secondaries - // - primaries (pid) - // - secondaries (pid) - // - secondaries (mech) - // - secondaries (mother) - // - - TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0); - mcPtAccall->SetName("mc_pt_acc_all"); - aFolderObj->Add(mcPtAccall); - - TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0); - mcPtAccprim->SetName("mc_pt_acc_prim"); - aFolderObj->Add(mcPtAccprim); - - TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0); - mcPtRecall->SetName("mc_pt_rec_all"); - aFolderObj->Add(mcPtRecall); - - TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0); - mcPtRecprim->SetName("mc_pt_rec_prim"); - aFolderObj->Add(mcPtRecprim); - - TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0); - mcPtRecsec->SetName("mc_pt_rec_sec"); - aFolderObj->Add(mcPtRecsec); - - for(Int_t i = 0; i<6; i++) - { - snprintf(name,256,"mc_pt_rec_prim_pid_%d",i); - fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); - h = fMCPrimTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_pt_rec_sec_pid_%d",i); - fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - // production mechanisms for given pid - fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); - - for(Int_t j=0; j<20; j++) { - if(j == 4) { - // decay - - snprintf(name,256,"mc_pt_rec_sec_pid_%d_decay",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_rec_sec_pid_%d_decay",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_mother_rec_sec_pid_%d_decay",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4); - h->SetName(name); - aFolderObj->Add(h); - - } else if (j == 5) { - // conversion - - snprintf(name,256,"mc_pt_rec_sec_pid_%d_conv",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_rec_sec_pid_%d_conv",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_mother_rec_sec_pid_%d_conv",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4); - h->SetName(name); - aFolderObj->Add(h); - - } else if (j == 13) { - // mat - - snprintf(name,256,"mc_pt_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(0); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_eta_mother_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4,1); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_mother_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4); - h->SetName(name); - aFolderObj->Add(h); - - snprintf(name,256,"mc_pt_mother_rec_sec_pid_%d_mat",i); - fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); - h = fMCSecTrackHist1[2]->Projection(4,0); - h->SetName(name); - aFolderObj->Add(h); - - } else { - continue; - } - } - - } - } // end fHistogramOn - - // - // resolution histograms - // only for reconstructed tracks - // - - TH2F *h2F=0; - TCanvas * c = new TCanvas("resol","resol"); - c->cd(); - - // - fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); - h->Draw(); - h->SetName("pt_resolution_vs_mcpt"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); - h->Draw(); - h->SetName("dpt_mean_vs_mcpt"); - aFolderObj->Add(h); - - // - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(#eta-#eta_{mc}) resolution"); - h->Draw(); - h->SetName("eta_resolution_vs_mcpt"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("p_{tmc} (GeV/c)"); - h->SetYTitle("(#eta-mc#eta) mean"); - h->Draw(); - h->SetName("deta_mean_vs_mcpt"); - aFolderObj->Add(h); - - // - fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); - h->Draw(); - h->SetName("pt_resolution_vs_mceta"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); - h->Draw(); - h->SetName("dpt_mean_vs_mceta"); - aFolderObj->Add(h); - - // - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); - h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(#eta-#eta_{mc}) resolution"); - h->Draw(); - h->SetName("eta_resolution_vs_mceta"); - aFolderObj->Add(h); - - h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); - h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); - h->SetXTitle("#eta_{mc}"); - h->SetYTitle("(#eta-mc#eta) mean"); - h->Draw(); - h->SetName("deta_mean_vs_mceta"); - aFolderObj->Add(h); - - fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins()); - - } // end use MC info - - // export objects to analysis folder - fAnalysisFolder = ExportToFolder(aFolderObj); - - // delete only TObjArray - if(aFolderObj) delete aFolderObj; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtAnalysispPb::ExportToFolder(TObjArray * const array) -{ - // recreate folder avery time and export objects to new one - // - AlidNdPtAnalysispPb * comp=this; - TFolder *folder = comp->GetAnalysisFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtAnalysispPb::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AlidNdPtAnalysispPb class. +// +// a. functionality: +// - fills analysis control histograms +// - fills generic correction matrices +// - generates correction matrices +// +// b. data members: +// - generic correction matrices +// - control histograms +// +// last change: 2013-06-19 by M.Knichel +// +// meaning of different multiplicities: +// multRec : number of reconstructed tracks, after AcceptanceCuts and TrackCuts +// multRecMult : number of reconstructed tracks, after MultAcceptanceCuts and MultTrackCuts +// multMB : number of contributers to vertex +// multTrueMC : MC true mult, after MultAcceptanceCuts +// mutlAll : number of ESD tracks +// mutlAcc : number of ESD tracks after AcceptanceCuts +//------------------------------------------------------------------------------ + +#include "TH1.h" +#include "TH2.h" +#include "TCanvas.h" +#include "THnSparse.h" + +#include "AliHeader.h" +#include "AliInputEventHandler.h" +#include "AliAnalysisManager.h" +#include "AliGenEventHeader.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliMultiplicity.h" +#include "AliTracker.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AliPhysicsSelection.h" +#include "AliTriggerAnalysis.h" +#include "AliCentrality.h" +#include "AliAnalysisUtils.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AlidNdPtAnalysispPb.h" + +using namespace std; + +ClassImp(AlidNdPtAnalysispPb) + +//_____________________________________________________________________________ + AlidNdPtAnalysispPb::AlidNdPtAnalysispPb(): AlidNdPt(), + fAnalysisFolder(0), + fHistogramsOn(kFALSE), + + // event multiplicity correlation matrix + fEventMultCorrelationMatrix(0), + + // rec. track pt vs true track pt correlation matrix + fTrackPtCorrelationMatrix(0), + + // event level correction + fGenEventMatrix(0), + fGenSDEventMatrix(0), + fGenDDEventMatrix(0), + fGenNDEventMatrix(0), + fGenNSDEventMatrix(0), + + fTriggerEventMatrix(0), + fTriggerSDEventMatrix(0), + fTriggerDDEventMatrix(0), + fTriggerNDEventMatrix(0), + fTriggerNSDEventMatrix(0), + + fRecEventMatrix(0), + fRecSDEventMatrix(0), + fRecDDEventMatrix(0), + fRecNDEventMatrix(0), + fRecNSDEventMatrix(0), + + // + // track-event level correction + // + fGenTrackEventMatrix(0), + fGenTrackSDEventMatrix(0), + fGenTrackDDEventMatrix(0), + fGenTrackNDEventMatrix(0), + fGenTrackNSDEventMatrix(0), + + fTriggerTrackEventMatrix(0), + fTriggerTrackSDEventMatrix(0), + fTriggerTrackDDEventMatrix(0), + fTriggerTrackNDEventMatrix(0), + fTriggerTrackNSDEventMatrix(0), + + fRecTrackEventMatrix(0), + fRecTrackSDEventMatrix(0), + fRecTrackDDEventMatrix(0), + fRecTrackNDEventMatrix(0), + fRecTrackNSDEventMatrix(0), + + // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix) + fGenTrackMatrix(0), + fGenPrimTrackMatrix(0), + fRecPrimTrackMatrix(0), + + // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix) + fRecTrackMatrix(0), + fRecSecTrackMatrix(0), + + // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix) + fRecMultTrackMatrix(0), + + // event control histograms + fMCEventHist1(0), + fRecEventHist1(0), + fRecEventHist2(0), + fRecMCEventHist1(0), + fRecMCEventHist2(0), + fRecMCEventHist3(0), + + // rec. pt and eta resolution w.r.t MC + fRecMCTrackHist1(0), + + //multple reconstructed tracks + fMCMultRecTrackHist1(0), + + // rec. track control histograms + fRecTrackHist2(0), + + // Generic histograms to be corrected + fRecEventHist(0), + fRecTrackHist(0), + fEventCount(0), + fEventMultHist(0), + fMCPrimTrackHist(0), + + // Candle event histogram + fRecCandleEventMatrix(0), + + fCentralityEventHist(0), + fCentralityTrackHist(0), + fCentralityEstimatorsList(0), + fDimensionsCentralityEstimators(0), + fCentralityNbins(0), + fCentralityNedges(0), + fBinsCentrality(0), + fNVCentralityEvent(0), + fNVCentralityTrack(0), + fVCentralityEvent(0), + fVCentralityTrack(0), + + fMultNbins(0), + fMultNbinsTE(0), + fPtNbins(0), + fPtCorrNbins(0), + fEtaNbins(0), + fZvNbins(0), + fMultNedges(0), + fMultNedgesTE(0), + fPtNedges(0), + fPtCorrNedges(0), + fEtaNedges(0), + fZvNedges(0), + fBinsMult(0), + fBinsMultTE(0), + fBinsPt(0), + fBinsPtCorr(0), + fBinsEta(0), + fBinsZv(0), + + fRapidityShift(-4.65409416218532379e-01), + fUtils(0), + fIs2013pA(kTRUE), + + fIsInit(kFALSE) + +{ + // default constructor + for(Int_t i=0; iGetEntries(); + } +} + + +//_____________________________________________________________________________ +Bool_t AlidNdPtAnalysispPb::CanChangeBins() +{ + if (fIsInit) { + AliDebug(AliLog::kError, "Object AlidNdPtAnalysispPb already initialized. Cannot change."); + return kFALSE; + } + return kTRUE; +} + + +//_____________________________________________________________________________ +void AlidNdPtAnalysispPb::Init() +{ + //define default binning + Double_t binsMultDefault[15] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5, 9.5, 10.5, 20.5, 50.5, 150.5}; + Double_t binsPtDefault[69] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0}; + Double_t binsPtCorrDefault[37] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,50.0}; + Double_t binsEtaDefault[31] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5}; + Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.}; + + Double_t binCentralityDefault[6] = {0.,20.,40.,60.,80.,100.}; + + // if no binning is set, use the default + if (!fBinsMult) { SetBinsMult(14,binsMultDefault); } + if (!fBinsMultTE) { SetBinsMultTE(14,binsMultDefault); } + if (!fBinsPt) { SetBinsPt(68,binsPtDefault); } + if (!fBinsPtCorr) { SetBinsPtCorr(36,binsPtCorrDefault); } + if (!fBinsEta) { SetBinsEta(30,binsEtaDefault); } + if (!fBinsZv) { SetBinsZv(12,binsZvDefault); } + if (!fBinsCentrality) { SetBinsCentrality(5,binCentralityDefault); } + + // Int_t binsTrackMatrix[3]={fZvNbins,fPtCorrNbins,fEtaNbins}; + Int_t binsTrackEventCorrMatrix[4]={fZvNbins,fPtCorrNbins,fEtaNbins,fMultNbinsTE}; + Int_t binsTrackEventCorrMatrixCent[4]={fZvNbins,fPtCorrNbins,fEtaNbins,fCentralityNbins}; + + + // + // Generic histograms to be corrected + // + Int_t binsEventHist[2]={fZvNbins,fMultNbins}; + //Double_t minEventHist[2]={-fBinsZv[0],fBinsMult[0]}; + //Double_t maxEventHist[2]={fBinsZv[fZvNbins],fBinsMult[fMultNbins]}; + + fRecEventHist = new THnSparseF("fRecEventHist","Zv:multMB",2,binsEventHist); //,minEventHist,maxEventHist); + fRecEventHist->SetBinEdges(0,fBinsZv); + fRecEventHist->SetBinEdges(1,fBinsMult); + fRecEventHist->GetAxis(0)->SetTitle("Zv (cm)"); + fRecEventHist->GetAxis(1)->SetTitle("multiplicity MB"); + fRecEventHist->Sumw2(); + + // + Int_t binsTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; + // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; + // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; + + fRecTrackHist = new THnSparseF("fRecTrackHist","Zv:pT:eta:multRecMult",4,binsTrackHist); //,minTrackHist,maxTrackHist); + fRecTrackHist->SetBinEdges(0,fBinsZv); + fRecTrackHist->SetBinEdges(1,fBinsPt); + fRecTrackHist->SetBinEdges(2,fBinsEta); + fRecTrackHist->SetBinEdges(3,fBinsMult); + fRecTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); + fRecTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)"); + fRecTrackHist->GetAxis(2)->SetTitle("#eta"); + fRecTrackHist->GetAxis(3)->SetTitle("multiplicity (multCuts)"); + fRecTrackHist->Sumw2(); + + + Int_t binsMCPrimTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins}; + // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; + // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; + + fMCPrimTrackHist = new THnSparseF("fMCPrimTrackHist","Zv:mcpT:mceta:multTrueMC",4,binsMCPrimTrackHist); + fMCPrimTrackHist->SetBinEdges(0,fBinsZv); + fMCPrimTrackHist->SetBinEdges(1,fBinsPt); + fMCPrimTrackHist->SetBinEdges(2,fBinsEta); + fMCPrimTrackHist->SetBinEdges(3,fBinsMult); + fMCPrimTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); + fMCPrimTrackHist->GetAxis(1)->SetTitle("MC p_{T} (GeV/c)"); + fMCPrimTrackHist->GetAxis(2)->SetTitle("#eta (MC)"); + fMCPrimTrackHist->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fMCPrimTrackHist->Sumw2(); + + // + // rec. vs MC correlation matrices + // + Int_t binsMultTrueEventMatrix[3]={fMultNbins,fMultNbins,fMultNbins}; +// Double_t minMultTrueEventMatrix[3]={-0.5,-0.5,-0.5}; +// Double_t maxMultTrueEventMatrix[3]={149.5,149.5,149.5}; + fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","multRecMult:multTrueMC:multMB",3,binsMultTrueEventMatrix); //,minMultTrueEventMatrix,maxMultTrueEventMatrix); + fEventMultCorrelationMatrix->SetBinEdges(0,fBinsMult); + fEventMultCorrelationMatrix->SetBinEdges(1,fBinsMult); + fEventMultCorrelationMatrix->SetBinEdges(2,fBinsMult); + fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("multiplicity (multCuts)"); + fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fEventMultCorrelationMatrix->GetAxis(2)->SetTitle("MB multiplicity"); + fEventMultCorrelationMatrix->Sumw2(); + + Int_t binsTrackPtCorrelationMatrix[3]={fPtCorrNbins,fPtCorrNbins,fEtaNbins}; + fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix); + fTrackPtCorrelationMatrix->SetBinEdges(0,fBinsPtCorr); + fTrackPtCorrelationMatrix->SetBinEdges(1,fBinsPtCorr); + fTrackPtCorrelationMatrix->SetBinEdges(2,fBinsEta); + fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta"); + fTrackPtCorrelationMatrix->Sumw2(); + + // + // Efficiency and contamination correction matrices + // + Int_t binsEventMatrix[2]={fZvNbins,fMultNbins}; + Int_t binsEventMatrixCent[3]={fZvNbins,fMultNbins,fCentralityNbins}; +// Double_t minEventMatrix[2]={-25.,-0.5}; +// Double_t maxEventMatrix[2]={25.,149.5}; + + fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenEventMatrix->SetBinEdges(0,fBinsZv); + fGenEventMatrix->SetBinEdges(1,fBinsMult); + fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenEventMatrix->Sumw2(); + + fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenSDEventMatrix->SetBinEdges(1,fBinsMult); + fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenSDEventMatrix->Sumw2(); + + fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenDDEventMatrix->SetBinEdges(0,fBinsZv); + fGenDDEventMatrix->SetBinEdges(1,fBinsMult); + fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenDDEventMatrix->Sumw2(); + + fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenNDEventMatrix->SetBinEdges(0,fBinsZv); + fGenNDEventMatrix->SetBinEdges(1,fBinsMult); + fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenNDEventMatrix->Sumw2(); + + fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fGenNSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenNSDEventMatrix->SetBinEdges(1,fBinsMult); + fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fGenNSDEventMatrix->Sumw2(); + + // + fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerEventMatrix->Sumw2(); + + fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerSDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerSDEventMatrix->Sumw2(); + + fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerDDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerDDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerDDEventMatrix->Sumw2(); + + fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerNDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerNDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerNDEventMatrix->Sumw2(); + + fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fTriggerNSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerNSDEventMatrix->SetBinEdges(1,fBinsMult); + fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fTriggerNSDEventMatrix->Sumw2(); + + // + fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multTrueMC:Cent",3,binsEventMatrixCent); //,minEventMatrix,maxEventMatrix); + fRecEventMatrix->SetBinEdges(0,fBinsZv); + fRecEventMatrix->SetBinEdges(1,fBinsMult); + fRecEventMatrix->SetBinEdges(2,fBinsCentrality); + fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecEventMatrix->GetAxis(2)->SetTitle("Centrality"); + fRecEventMatrix->Sumw2(); + + fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecSDEventMatrix->SetBinEdges(1,fBinsMult); + fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecSDEventMatrix->Sumw2(); + + fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecDDEventMatrix->SetBinEdges(0,fBinsZv); + fRecDDEventMatrix->SetBinEdges(1,fBinsMult); + fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecDDEventMatrix->Sumw2(); + + fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecNDEventMatrix->SetBinEdges(0,fBinsZv); + fRecNDEventMatrix->SetBinEdges(1,fBinsMult); + fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecNDEventMatrix->Sumw2(); + + fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecNSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecNSDEventMatrix->SetBinEdges(1,fBinsMult); + fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecNSDEventMatrix->Sumw2(); + + fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix); + fRecCandleEventMatrix->SetBinEdges(0,fBinsZv); + fRecCandleEventMatrix->SetBinEdges(1,fBinsMult); + fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecCandleEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)"); + fRecCandleEventMatrix->Sumw2(); + + // + // track to event corrections + // + + fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackEventMatrix->SetBinEdges(3,fBinsMultTE); + fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackEventMatrix->Sumw2(); + + fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackSDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE); + fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackSDEventMatrix->Sumw2(); + + fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackDDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackDDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE); + fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackDDEventMatrix->Sumw2(); + + fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackNDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackNDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE); + fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackNDEventMatrix->Sumw2(); + + fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fGenTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); + fGenTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); + fGenTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE); + fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fGenTrackNSDEventMatrix->Sumw2(); + + + // + fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackEventMatrix->SetBinEdges(3,fBinsMultTE); + fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackEventMatrix->Sumw2(); + + fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackSDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE); + fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackSDEventMatrix->Sumw2(); + + fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackDDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackDDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE); + fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackDDEventMatrix->Sumw2(); + + fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackNDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackNDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE); + fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackNDEventMatrix->Sumw2(); + + fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fTriggerTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); + fTriggerTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fTriggerTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); + fTriggerTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE); + fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fTriggerTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fTriggerTrackNSDEventMatrix->Sumw2(); + + + // + fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackEventMatrix->SetBinEdges(3,fBinsMultTE); + fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackEventMatrix->Sumw2(); + + + fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackSDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE); + fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackSDEventMatrix->Sumw2(); + + fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackDDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackDDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE); + fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackDDEventMatrix->Sumw2(); + + fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackNDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackNDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE); + fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackNDEventMatrix->Sumw2(); + + fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix); + fRecTrackNSDEventMatrix->SetBinEdges(0,fBinsZv); + fRecTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackNSDEventMatrix->SetBinEdges(2,fBinsEta); + fRecTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE); + fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)"); + fRecTrackNSDEventMatrix->Sumw2(); + // + // tracks correction matrices + // + //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fGenTrackMatrix->SetBinEdges(0,fBinsZv); + //fGenTrackMatrix->SetBinEdges(1,binsPt); + fGenTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fGenTrackMatrix->SetBinEdges(2,fBinsEta); + fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenTrackMatrix->Sumw2(); + + //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); + fGenPrimTrackMatrix->SetBinEdges(0,fBinsZv); + //fGenPrimTrackMatrix->SetBinEdges(1,binsPt); + fGenPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fGenPrimTrackMatrix->SetBinEdges(2,fBinsEta); + fGenPrimTrackMatrix->SetBinEdges(3,fBinsCentrality); + fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fGenPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality"); + fGenPrimTrackMatrix->Sumw2(); + + //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); + fRecPrimTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecPrimTrackMatrix->SetBinEdges(1,binsPt); + fRecPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecPrimTrackMatrix->SetBinEdges(2,fBinsEta); + fRecPrimTrackMatrix->SetBinEdges(3,fBinsCentrality); + fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality"); + fRecPrimTrackMatrix->Sumw2(); + + // + //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); + fRecTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecTrackMatrix->SetBinEdges(1,binsPt); + fRecTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecTrackMatrix->SetBinEdges(2,fBinsEta); + fRecTrackMatrix->SetBinEdges(3,fBinsCentrality); + fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); + fRecTrackMatrix->GetAxis(2)->SetTitle("Eta"); + fRecTrackMatrix->GetAxis(3)->SetTitle("Centrality"); + fRecTrackMatrix->Sumw2(); + + //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent); + fRecSecTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecSecTrackMatrix->SetBinEdges(1,binsPt); + fRecSecTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecSecTrackMatrix->SetBinEdges(2,fBinsEta); + fRecSecTrackMatrix->SetBinEdges(3,fBinsCentrality); + fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)"); + fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta"); + fRecSecTrackMatrix->GetAxis(3)->SetTitle("Centrality"); + fRecSecTrackMatrix->Sumw2(); + + // + //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix); + fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix); + fRecMultTrackMatrix->SetBinEdges(0,fBinsZv); + //fRecMultTrackMatrix->SetBinEdges(1,binsPt); + fRecMultTrackMatrix->SetBinEdges(1,fBinsPtCorr); + fRecMultTrackMatrix->SetBinEdges(2,fBinsEta); + fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)"); + fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)"); + fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta"); + fRecMultTrackMatrix->Sumw2(); + + // + // Control analysis histograms + // + + Int_t binsMCEventHist1[3]={100,100,140}; + Double_t minMCEventHist1[3]={-0.1,-0.1,-35.}; + Double_t maxMCEventHist1[3]={0.1,0.1,35.}; + fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1); + fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)"); + fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)"); + fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)"); + fMCEventHist1->Sumw2(); + + // + Int_t binsRecEventHist1[3]={100,100,140}; + Double_t minRecEventHist1[3]={-3.,-3.,-35.}; + Double_t maxRecEventHist1[3]={3.,3.,35.}; + + fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1); + fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)"); + fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)"); + fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)"); + fRecEventHist1->Sumw2(); + + // + Int_t binsRecEventHist2[3]={fZvNbins,fMultNbins,fMultNbins}; +// Double_t minRecEventHist2[3]={-25.,-0.5,-0.5}; +// Double_t maxRecEventHist2[3]={25.,149.5,149.5}; + + fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:multRecMult",3,binsRecEventHist2); //,minRecEventHist2,maxRecEventHist2); + fRecEventHist2->SetBinEdges(0,fBinsZv); + fRecEventHist2->SetBinEdges(1,fBinsMult); + fRecEventHist2->SetBinEdges(2,fBinsMult); + fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)"); + fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB"); + fRecEventHist2->GetAxis(2)->SetTitle("multiplicity (multCuts)"); + fRecEventHist2->Sumw2(); + + // + Double_t kFact = 0.1; + Int_t binsRecMCEventHist1[3]={100,100,100}; + Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; + Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; + + fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1); + fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); + fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); + fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); + fRecMCEventHist1->Sumw2(); + + // + Int_t binsRecMCEventHist2[3]={100,100,fMultNbins}; + Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0}; + Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50}; + + fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:multMB",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2); + fRecMCEventHist2->SetBinEdges(2,fBinsMult); + fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); + fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)"); + fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity MB"); + fRecMCEventHist2->Sumw2(); + + Int_t binsRecMCEventHist3[2]={fMultNbins,5}; + Double_t minRecMCEventHist3[2]={-0.5,0.0}; + Double_t maxRecMCEventHist3[2]={149.50,5.0}; + fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","multRecMult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3); + fRecMCEventHist3->SetBinEdges(0,fBinsMult); + fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity (multCuts)"); + fRecMCEventHist3->GetAxis(1)->SetTitle("EventType"); + fRecMCEventHist3->Sumw2(); + + // + char name[256]; + char title[256]; + for(Int_t i=0; iSetBinEdges(0,fBinsPtCorr); + fMCTrackHist1[i]->SetBinEdges(1,fBinsEta); + fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); + fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)"); + fMCTrackHist1[i]->Sumw2(); + + Int_t binsMCPrimTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; + Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; + Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; + snprintf(name,256,"fMCPrimTrackHist1_%d",i); + snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); + + fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1); + fMCPrimTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); + fMCPrimTrackHist1[i]->SetBinEdges(1,fBinsEta); + fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); + fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid"); + fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech"); + fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother"); + fMCPrimTrackHist1[i]->Sumw2(); + + Int_t binsMCPrimTrackHist2[3]= {4000,20,4000}; + Double_t minMCPrimTrackHist2[3]={0.,0.,0.}; + Double_t maxMCPrimTrackHist2[3]={4000.,20.,4000.}; + snprintf(name,256,"fMCPrimTrackHist2_%d",i); + snprintf(title,256,"pdg:mech:mother"); + + fMCPrimTrackHist2[i] = new THnSparseF(name,title,3,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2); + fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg"); + fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech"); + fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother"); + fMCPrimTrackHist2[i]->Sumw2(); + + Int_t binsMCSecTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000}; + Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; + Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; + snprintf(name,256,"fMCSecTrackHist1_%d",i); + snprintf(title,256,"mcPt:mcEta:pid:mech:mother"); + + fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1); + fMCSecTrackHist1[i]->SetBinEdges(0,fBinsPtCorr); + fMCSecTrackHist1[i]->SetBinEdges(1,fBinsEta); + fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta"); + fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid"); + fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech"); + fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother"); + fMCSecTrackHist1[i]->Sumw2(); + + // + + // + + Int_t binsRecTrackHist1[3]={fPtNbins,fEtaNbins,90}; + Double_t minRecTrackHist1[3]={0.,-1.,0.}; + Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()}; + snprintf(name,256,"fRecTrackHist1_%d",i); + snprintf(title,256,"Pt:Eta:Phi"); + fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1); + fRecTrackHist1[i]->SetBinEdges(0,fBinsPt); + fRecTrackHist1[i]->SetBinEdges(1,fBinsEta); + fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)"); + fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta"); + fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)"); + fRecTrackHist1[i]->Sumw2(); + + // + Int_t binsRecTrackMultHist1[2]={fPtNbins,fMultNbins}; + snprintf(name,256,"fRecTrackMultHist_%d",i); + snprintf(title,256,"Pt:Mult"); + fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1); //,minRecTrackMultHist1,maxRecTrackMultHist1); + fRecTrackMultHist1[i]->SetBinEdges(0,fBinsPt); + fRecTrackMultHist1[i]->SetBinEdges(1,fBinsMult); + fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity"); + fRecTrackMultHist1[i]->Sumw2(); + } + + Int_t binsRecMCTrackHist1[4] = {fPtCorrNbins,fEtaNbins,100,100}; + Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5}; + Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5}; + snprintf(name,256,"fRecMCTrackHist1"); + snprintf(title,256,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)"); + + fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1); + fRecMCTrackHist1->SetBinEdges(0,fBinsPtCorr); + fRecMCTrackHist1->SetBinEdges(1,fBinsEta); + fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta"); + fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt"); + fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta"); + + Int_t binsMCMultRecTrackHist1[3] = {fPtCorrNbins,fEtaNbins,6}; + Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.}; + Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.}; + snprintf(name,256,"fMCMultRecTrackHist1"); + snprintf(title,256,"mcPt:mcEta:pid"); + fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1); + fMCMultRecTrackHist1->SetBinEdges(0,fBinsPtCorr); + fMCMultRecTrackHist1->SetBinEdges(1,fBinsEta); + fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta"); + fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid"); + + //nClust:chi2PerClust:pt:eta:phi + Int_t binsRecTrackHist2[5]={160,100,fPtNbins,fEtaNbins,90}; + Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.}; + Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()}; + + fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2); + fRecTrackHist2->SetBinEdges(2,fBinsPt); + fRecTrackHist2->SetBinEdges(3,fBinsEta); + fRecTrackHist2->GetAxis(0)->SetTitle("nClust"); + fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust"); + fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); + fRecTrackHist2->GetAxis(3)->SetTitle("#eta"); + fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)"); + fRecTrackHist2->Sumw2(); + + Int_t binsEventCount[3]={2,2,2}; + Double_t minEventCount[3]={0,0,0}; + Double_t maxEventCount[3]={2,2,2}; + fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount); + fEventCount->GetAxis(0)->SetTitle("trig"); + fEventCount->GetAxis(1)->SetTitle("trig+vert"); + fEventCount->GetAxis(2)->SetTitle("selected"); + fEventCount->Sumw2(); + + Int_t binsEventMultHist[3]={fMultNbins,fMultNbins,fMultNbins}; + fEventMultHist = new THnSparseF("fEventMultHist","multMB:multRecMult:multRec",3,binsEventMultHist); + fEventMultHist->GetAxis(0)->SetTitle("multMB"); + fEventMultHist->GetAxis(1)->SetTitle("multRecMult"); + fEventMultHist->GetAxis(2)->SetTitle("multRec"); + fEventMultHist->SetBinEdges(0,fBinsMult); + fEventMultHist->SetBinEdges(1,fBinsMult); + fEventMultHist->SetBinEdges(2,fBinsMult); + fEventMultHist->Sumw2(); + + // + // create histograms for centrality + // (only if fDimensionsCentralityEstimators > 0) + +// if (fDimensionsCentralityEstimators > 0) { + + // fCentralityEventHist + //zv:multRec:multMB:cent[n] + Int_t dimsCentralityEventHist = fDimensionsCentralityEstimators + 3; + Int_t* binsCentralityEventHist = new Int_t[dimsCentralityEventHist]; + TString titleCentralityEventHist("zV:multRecMult:multMB"); + binsCentralityEventHist[0] = fZvNbins; + binsCentralityEventHist[1] = fMultNbins; + binsCentralityEventHist[2] = fMultNbins; + for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { + binsCentralityEventHist[i+2] = fCentralityNbins; + titleCentralityEventHist += ":cent"; + titleCentralityEventHist += TString(GetCentralityEstimator(i)); + } + fCentralityEventHist = new THnSparseF("fCentralityEventHist",titleCentralityEventHist.Data(),dimsCentralityEventHist,binsCentralityEventHist); + fCentralityEventHist->SetBinEdges(0,fBinsZv); + fCentralityEventHist->SetBinEdges(1,fBinsMult); + fCentralityEventHist->SetBinEdges(2,fBinsMult); + fCentralityEventHist->GetAxis(0)->SetTitle("Zv (cm)"); + fCentralityEventHist->GetAxis(1)->SetTitle("multRecMult"); + fCentralityEventHist->GetAxis(2)->SetTitle("multMB"); + for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { + fCentralityEventHist->SetBinEdges(i+2,fBinsCentrality); + TString axistitle(GetCentralityEstimator(i)); + axistitle += " Centrality"; + fCentralityEventHist->GetAxis(i+2)->SetTitle(axistitle); + } + fCentralityEventHist->Sumw2(); + + // fCentralityTrackHist + //zv:pt:eta:multRec:multMB:cent[n] + Int_t dimsCentralityTrackHist = fDimensionsCentralityEstimators + 5; + Int_t* binsCentralityTrackHist = new Int_t[dimsCentralityTrackHist]; + TString titleCentralityTrackHist("zV:pT:eta:multRecMult:multMB"); + binsCentralityTrackHist[0] = fZvNbins; + binsCentralityTrackHist[1] = fPtNbins; + binsCentralityTrackHist[2] = fEtaNbins; + binsCentralityTrackHist[3] = fMultNbins; + binsCentralityTrackHist[4] = fMultNbins; + for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { + binsCentralityTrackHist[i+4] = fCentralityNbins; + titleCentralityTrackHist += ":cent"; + titleCentralityTrackHist += TString(GetCentralityEstimator(i)); + } + fCentralityTrackHist = new THnSparseF("fCentralityTrackHist",titleCentralityTrackHist.Data(),dimsCentralityTrackHist,binsCentralityTrackHist); + fCentralityTrackHist->SetBinEdges(0,fBinsZv); + fCentralityTrackHist->SetBinEdges(1,fBinsPt); + fCentralityTrackHist->SetBinEdges(2,fBinsEta); + fCentralityTrackHist->SetBinEdges(3,fBinsMult); + fCentralityTrackHist->SetBinEdges(4,fBinsMult); + fCentralityTrackHist->GetAxis(0)->SetTitle("Zv (cm)"); + fCentralityTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)"); + fCentralityTrackHist->GetAxis(2)->SetTitle("#eta"); + fCentralityTrackHist->GetAxis(3)->SetTitle("multRecMult"); + fCentralityTrackHist->GetAxis(4)->SetTitle("multMB"); + for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { + fCentralityTrackHist->SetBinEdges(i+4,fBinsCentrality); + TString axistitle(GetCentralityEstimator(i)); + axistitle += " Centrality"; + fCentralityTrackHist->GetAxis(i+4)->SetTitle(axistitle); + } + fCentralityTrackHist->Sumw2(); + + fNVCentralityEvent = fDimensionsCentralityEstimators + 3; + fNVCentralityTrack = fDimensionsCentralityEstimators + 5; + fVCentralityEvent = new Double_t[fNVCentralityEvent]; + fVCentralityTrack = new Double_t[fNVCentralityTrack]; + // } + + // init folder + fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); + + fUtils = new AliAnalysisUtils(); + + // set init flag + fIsInit = kTRUE; +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysispPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent) +{ + // init if not done already + if (!fIsInit) { Init(); } + + + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + AlidNdPtAcceptanceCuts *multAccCuts = GetMultAcceptanceCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + // trigger selection + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + if(evtCuts->IsTriggerRequired()) + { + // always MB + //isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + isEventTriggered = inputHandler->IsEventSelected() & GetTriggerMask(); + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + + // calculate LHC background + if(!IsUseMCInfo()) + { + // + // 0-multiplicity bin for LHC background correction + // + /* bin0 done in the train + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) + { + physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysispPb::IsBinZeroTrackSPDvtx); + } else { + physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysispPb::IsBinZeroSPDvtx); + } + */ + } + } + + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; + + Int_t multMCTrueTracks = 0; + if(IsUseMCInfo()) + { + // + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + // get event type (ND=0x1, DD=0x2, SD=0x4) + evtType = AlidNdPtHelper::GetEventProcessTypePA(header); + AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; + fMCEventHist1->Fill(vMCEventHist1); + + // multipliticy of all MC primary tracks + // in Zv, pt and eta ranges) + if (fRapidityShift == 0) { + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts); + } else { + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts,fRapidityShift); + } + + } // end bUseMC + + + // get reconstructed vertex + const AliESDVertex* vtxESD = 0; + Bool_t isRecVertex = kFALSE; + /* the following lines have been commented out for same vertex as dNdEta analysis + if(evtCuts->IsRecVertexRequired()) + { + Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); + Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); + vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); + if(!vtxESD) return; + isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); + } + + if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) { + vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC"); + if(!vtxESD) return; + isRecVertex = kTRUE; + } + if(!vtxESD) return; + */ + // the following lines have been added for same vertex as dNdEta analysis + vtxESD = esdEvent->GetPrimaryVertexTracks(); + if(!vtxESD || (vtxESD->GetNContributors()<1)) { + // SPD vertex + vtxESD = esdEvent->GetPrimaryVertexSPD(); + if (vtxESD->GetNContributors()>0) { + TString vtxTyp = vtxESD->GetTitle(); + if ( !vtxTyp.Contains("vertexer: Z") || (vtxESD->GetDispersion()<0.04 && vtxESD->GetZRes()<0.25)) isRecVertex = kTRUE; + } + + } else { + isRecVertex = kTRUE; + } + + // the previous lines have been added for same vertex as dNdEta analysis + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; + + Bool_t isEventSelected2013 = kTRUE; + + // selection and pileup rejection for 2013 p-A + if (fIs2013pA) { + if (fUtils->IsFirstEventInChunk(esdEvent)) { isEventSelected2013 = kFALSE; } + if (!fUtils->IsVertexSelected2013pA(esdEvent)) { isEventSelected2013 = kFALSE; } + if (fUtils->IsPileUpEvent(esdEvent)) { isEventSelected2013 = kFALSE; } + } + isEventOK = isEventOK && isEventSelected2013; + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + Bool_t isTrigAndVertex = isEventTriggered && isEventOK; + + Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)}; + fEventCount->Fill(vEventCount); + + // vertex contributors + Int_t multMBTracks = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) + { + if(vtxESD && vtxESD->GetStatus() && isRecVertex) + multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts); + } + else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || + GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate ) + { + const AliMultiplicity* mult = esdEvent->GetMultiplicity(); + if(mult && vtxESD && vtxESD->GetStatus() && isRecVertex) + multMBTracks = mult->GetNumberOfTracklets(); + } + else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || + GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || + GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx + ) + { + if(vtxESD && vtxESD->GetStatus() && isRecVertex) + multMBTracks = vtxESD->GetNContributors(); + } + else { + AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode())); + return; + } + + Bool_t isEventSelected = kTRUE; + if(evtCuts->IsEventSelectedRequired()) + { + // select events with at least + // one prompt track in acceptance + // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies + + isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts); + //printf("isEventSelected %d \n", isEventSelected); + } + + TObjArray *allChargedTracks=0; + //Int_t multAll=0, multAcc=0, multRec=0; + Int_t multAll=0, multRec=0; + Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0; + + + // check event cuts + Int_t multRecMult=0; + Double_t centralityD = -1; + if(isEventOK && isEventTriggered && isEventSelected) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + //printf("entries %d \n",entries); + + + // calculate mult of reconstructed tracks + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + if(GetMultTrackCuts()->AcceptTrack(track)) + { + if(GetMultAcceptanceCuts()->AcceptTrack(track)) { multRecMult++; } + } + } + + + // fill fCentralityEventHist only if necessary + // also filles event-related value for fCentralityTrackHist + if (fDimensionsCentralityEstimators > 0) { + fVCentralityEvent[0] = vtxESD->GetZv(); + fVCentralityEvent[1] = multRecMult; + fVCentralityEvent[2] = multMBTracks; + fVCentralityTrack[0] = vtxESD->GetZv(); + fVCentralityTrack[3] = multRecMult; + fVCentralityTrack[4] = multMBTracks; + for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { + // centrality determination + Float_t centralityF = -1.; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(GetCentralityEstimator(i)); + fVCentralityEvent[i+2] = centralityF; + fVCentralityTrack[i+4] = centralityF; + if (1==i) { centralityD = centralityF; } + } + fCentralityEventHist->Fill(fVCentralityEvent); + } + + + labelsAll = new Int_t[entries]; + labelsAcc = new Int_t[entries]; + labelsRec = new Int_t[entries]; + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecMult); + labelsAll[multAll] = TMath::Abs(track->GetLabel()); + multAll++; + + //if(accCuts->AcceptTrack(track)) { + //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); + //labelsAcc[multAcc] = TMath::Abs(track->GetLabel()); + //multAcc++; + //} + + // esd track selection + // ITS stand alone + if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx) + { + if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; + if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; + if(track->GetNcls(0)<4) continue; + if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; + } + else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx) + { + // + // ITS and TPC stand alone tracks + // + if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; + if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; + if(track->GetNcls(0)<4) continue; + if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; + + // Check matching with TPC only track + Bool_t hasMatch = kFALSE; + for(Int_t j=0; jAt(j); + if(!track2) continue; + if(track2->Charge()==0) continue; + if (!track2->GetTPCInnerParam()) continue; + + // check loose cuts for TPC tracks + if(!esdTrackCuts->AcceptTrack(track2)) continue; + + AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam())); + if(!innerTPC) continue; + Double_t x2[3]; track2->GetXYZ(x2); + Double_t b2[3]; AliTracker::GetBxByBz(x2,b2); + Double_t dz[2],cov[3]; + Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov); + if(!isPropOK && innerTPC) {delete innerTPC; continue;} + + // check matching + if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; } + if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; } + if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; } + + hasMatch = kTRUE; + if(innerTPC) delete innerTPC; + } + + if(!hasMatch) continue; + } + else { + // check track cuts + + if(!esdTrackCuts->AcceptTrack(track)) + continue; + } + + // + Bool_t isOK = kFALSE; + Double_t x[3]; track->GetXYZ(x); + Double_t b[3]; AliTracker::GetBxByBz(x,b); + + // + // if TPC-ITS hybrid tracking (kTPCITSHybrid) + // replace track parameters with TPC-ony track parameters + // + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) + { + // Relate TPC-only tracks to Track or SPD vertex + isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); + if(!isOK) continue; + + // replace esd track parameters with TPCinner + AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); + if (tpcTrack) { + track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); + } + if(tpcTrack) delete tpcTrack; + } + + + // update track parameters using vertex point + if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ) + { + // update track parameters + AliExternalTrackParam cParam; + isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam); + if(!isOK) continue; + track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); + + if(accCuts->AcceptTrack(track)) { + FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); + labelsRec[multRec] = TMath::Abs(track->GetLabel()); + multRec++; + } + } + else { + if(accCuts->AcceptTrack(track)) + { + FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); + labelsRec[multRec] = TMath::Abs(track->GetLabel()); + multRec++; + } + } + } + + + // fill track multiplicity histograms + // terribly slow + // FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec); + + Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()}; + fRecEventHist1->Fill(vRecEventHist1); + + Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRecMult}; + fRecEventHist2->Fill(vRecEventHist2); + + // + //Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks}; + Double_t vRecEventHist[3] = {vtxESD->GetZv(),multMBTracks,centralityD}; + fRecEventHist->Fill(vRecEventHist); + + // fill fEventMultHist for cross checks + Double_t vEventMultHist[3] = {multMBTracks,multRecMult,multRec}; + fEventMultHist->Fill(vEventMultHist); + } + + if(IsUseMCInfo()) + { + if(mcEvent) { + + if(evtCuts->IsEventSelectedRequired()) + { + // select events with at least + // one MC primary track in acceptance + // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies + + Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent); + //printf("isMCEventSelected %d \n", isMCEventSelected); + if(!isMCEventSelected) { + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + if(labelsAll) delete [] labelsAll; labelsAll = 0; + if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; + if(labelsRec) delete [] labelsRec; labelsRec = 0; + + return; + } + } + + Double_t vMultTrueEventMatrix[3] = { multRecMult, multMCTrueTracks, multMBTracks}; + if(isEventOK && isEventTriggered) { + if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted + fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix); + } + + // + // event level corrections (zv,N_MB) + // + + // all inelastic + //Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks}; + Double_t vEventMatrix[3] = {vtxMC[2],multMCTrueTracks,centralityD}; + fGenEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix); + + // single diffractive + if(evtType == AliPWG0Helper::kSD) { + fGenSDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix); + } + + // double diffractive + if(evtType == AliPWG0Helper::kDD) { + fGenDDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix); + } + + // non diffractive + if(evtType == AliPWG0Helper::kND) { + fGenNDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix); + } + + // non single diffractive + if(evtType != AliPWG0Helper::kSD) { + fGenNSDEventMatrix->Fill(vEventMatrix); + if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix); + if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix); + } + + // + // track-event level corrections (zv,pt,eta) + // + for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) + { + TParticle* particle = stack->Particle(iMc); + if (!particle) + continue; + + // only charged particles + if(!particle->GetPDG()) continue; + Double_t charge = particle->GetPDG()->Charge()/3.; + if ( TMath::Abs(charge) < 0.001 ) + continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) + continue; + + // physical primary + Bool_t prim = stack->IsPhysicalPrimary(iMc); + if(!prim) continue; + + // checked accepted + if(accCuts->AcceptTrack(particle)) + { + //Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()}; + Double_t vTrackEventMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; + fGenTrackEventMatrix->Fill(vTrackEventMatrix); + + if(evtType == AliPWG0Helper::kSD) { + fGenTrackSDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kDD) { + fGenTrackDDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kND) { + fGenTrackNDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType != AliPWG0Helper::kSD) { + fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix); + } + + // + if(!isEventTriggered) continue; + + fTriggerTrackEventMatrix->Fill(vTrackEventMatrix); + if(evtType == AliPWG0Helper::kSD) { + fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kDD) { + fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kND) { + fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType != AliPWG0Helper::kSD) { + fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix); + } + + // + if(!isEventOK) continue; + + fRecTrackEventMatrix->Fill(vTrackEventMatrix); + if(evtType == AliPWG0Helper::kSD) { + fRecTrackSDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kDD) { + fRecTrackDDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType == AliPWG0Helper::kND) { + fRecTrackNDEventMatrix->Fill(vTrackEventMatrix); + } + if(evtType != AliPWG0Helper::kSD) { + fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix); + } + } + } + + // + // track-level corrections (zv,pt,eta) + // + if(isEventOK && isEventTriggered) + { + + // fill MC and rec event control histograms + if(fHistogramsOn) { + Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]}; + fRecMCEventHist1->Fill(vRecMCEventHist1); + + Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks}; + fRecMCEventHist2->Fill(vRecMCEventHist2); + + Double_t vRecMCEventHist3[2] = {multRec,evtType}; + fRecMCEventHist3->Fill(vRecMCEventHist3); + } + + // + // MC histograms for track efficiency studies + // + Int_t countRecCandle = 0; + for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) + { + TParticle* particle = stack->Particle(iMc); + if (!particle) + continue; + + //Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; . + Double_t vTrackMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),centralityD}; + + // all genertated primaries including neutral + //if( iMc < stack->GetNprimary() ) { + //fGenTrackMatrix->Fill(vTrackMatrix); + //} + + // only charged particles + if(!particle->GetPDG()) continue; + Double_t charge = particle->GetPDG()->Charge()/3.; + if (TMath::Abs(charge) < 0.001) + continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) + continue; + + // physical primary + Bool_t prim = stack->IsPhysicalPrimary(iMc); + + // check accepted + if(accCuts->AcceptTrack(particle)) + { + + if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { + fGenPrimTrackMatrix->Fill(vTrackMatrix); + Double_t vMCPrimTrackHist[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; + fMCPrimTrackHist->Fill(vMCPrimTrackHist); + } + // fill control histograms + if(fHistogramsOn) + FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); + + // check multiple found tracks + Int_t multCount = 0; + for(Int_t iRec=0; iRec1) + { + fRecMultTrackMatrix->Fill(vTrackMatrix); + + // fill control histogram + if(fHistogramsOn) { + Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); + Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid}; + fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1); + } + } + } + } + + // check reconstructed + for(Int_t iRec=0; iRecFill(vTrackMatrix); + + if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { + fRecPrimTrackMatrix->Fill(vTrackMatrix); + //AliESDtrack *track = esdEvent->GetTrack(iRec); + //if(track && track->GetKinkIndex(0) < 0) + // printf("prim kink \n"); + countRecCandle++; + } + + if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix); + + // fill control histograms + if(fHistogramsOn) + FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks); + + break; + } + } + } + } + + if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix); + } + } + }// end bUseMC + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + if(labelsAll) delete [] labelsAll; labelsAll = 0; + if(labelsAcc) delete [] labelsAcc; labelsAcc = 0; + if(labelsRec) delete [] labelsRec; labelsRec = 0; + + if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD; + //if(trigAna) delete trigAna; + +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysispPb::FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec) { + // multiplicity histograms + + if(!allChargedTracks) return; + if(!labelsAll) return; + if(!labelsAcc) return; + if(!labelsRec) return; + + Int_t entries = allChargedTracks->GetEntries(); + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge() == 0) continue; + + Int_t label = TMath::Abs(track->GetLabel()); + for(Int_t iAll=0; iAllPt(), multAll}; + fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1); + } + } + for(Int_t iAcc=0; iAccPt(), multAcc}; + fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2); + } + } + for(Int_t iRec=0; iRecPt(), multRec}; + fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3); + } + } + } +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysispPb::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multRecMult) +{ + // + // Fill ESD track and MC histograms + // + if(!esdTrack) return; + + Float_t q = esdTrack->Charge(); + if(TMath::Abs(q) < 0.001) return; + + Float_t pt = esdTrack->Pt(); + //Float_t qpt = esdTrack->Pt() * q; + Float_t eta = esdTrack->Eta(); + Float_t phi = esdTrack->Phi(); + + Float_t dca[2], bCov[3]; + esdTrack->GetImpactParameters(dca,bCov); + + Int_t nClust = esdTrack->GetTPCclusters(0); + Float_t chi2PerCluster = 0.; + if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); + + + // fill histograms + Double_t values1[3] = {pt,eta,phi}; + fRecTrackHist1[trackObj]->Fill(values1); + + Double_t values[4] = {zv, pt,eta, multRecMult}; + if(trackObj == AlidNdPtHelper::kRecTracks) { + fRecTrackHist->Fill(values); + } + + //fill fCentralityTrackHist only if necessary + if (fDimensionsCentralityEstimators > 0) { + fVCentralityTrack[1] = pt; + fVCentralityTrack[2] = eta; + if(trackObj == AlidNdPtHelper::kRecTracks) { + fCentralityTrackHist->Fill(fVCentralityTrack); + } + } + + /* + Double_t values2[5] = {nClust,chi2PerCluster,pt,eta,phi}; + if(trackObj == AlidNdPtHelper::kRecTracks) + { + if(fHistogramsOn) + fRecTrackHist2->Fill(values2); + } + */ + + // + // Fill rec vs MC information + // + if(!stack) return; + + Int_t label = TMath::Abs(esdTrack->GetLabel()); + //if(label == 0) return; + + if(label > stack->GetNtrack()) return; + TParticle* particle = stack->Particle(label); + if(!particle) return; + + //Bool_t prim = stack->IsPhysicalPrimary(label); + //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); + + Int_t motherPdg = -1; + TParticle* mother = 0; + + //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); + Int_t motherLabel = particle->GetMother(0); + if(motherLabel>0) mother = stack->Particle(motherLabel); + if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only + //Int_t mech = particle->GetUniqueID(); // production mechanism + + if(!particle->GetPDG()) return; + Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 + if(TMath::Abs(gq)<0.001) return; + Float_t gpt = particle->Pt(); + Float_t geta = particle->Eta(); + //Float_t qgpt = particle->Pt() * gq; + //Float_t gphi = particle->Phi(); + + Double_t dpt=0; + //printf("pt %f, gpt %f \n",pt,gpt); + if(gpt) dpt = (pt-gpt)/gpt; + Double_t deta = (eta-geta); + + // fill histograms + if(trackObj == AlidNdPtHelper::kRecTracks) + { + Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta}; + fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix); + + Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta}; + fRecMCTrackHist1->Fill(vRecMCTrackHist1); + } +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysispPb::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj) +{ + // Fill MC histograms + if(!stack) return; + + if(label > stack->GetNtrack()) return; + TParticle* particle = stack->Particle(label); + if(!particle) return; + + Int_t motherPdg = -1; + TParticle* mother = 0; + + //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); + Int_t motherLabel = particle->GetMother(0); + if(motherLabel>0) mother = stack->Particle(motherLabel); + if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only + Int_t mech = particle->GetUniqueID(); // production mechanism + + if(!particle->GetPDG()) return; + Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 + if(TMath::Abs(gq) < 0.001) return; + + Float_t gpt = particle->Pt(); + //Float_t qgpt = particle->Pt() * gq; + Float_t geta = particle->Eta(); + Float_t gphi = particle->Phi(); + //Float_t gpz = particle->Pz(); + + Bool_t prim = stack->IsPhysicalPrimary(label); + //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz(); + + Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle); + + //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech); + //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech); + + // + // fill histogram + // + Double_t vMCTrackHist1[3] = {gpt,geta,gphi}; + fMCTrackHist1[trackObj]->Fill(vMCTrackHist1); + + Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg}; + Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg}; + //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + if(prim) { + fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2); + } + else { + fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + } + +} + +//_____________________________________________________________________________ +Long64_t AlidNdPtAnalysispPb::Merge(TCollection* const list) +{ + // init if not done already + if (!fIsInit) { Init(); } + + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + // + //TList *collPhysSelection = new TList; + + // collection of generated histograms + + Int_t count=0; + while((obj = iter->Next()) != 0) { + AlidNdPtAnalysispPb* entry = dynamic_cast(obj); + if (entry == 0) continue; + + // physics selection + //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection()); + //collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); + + // + fRecEventHist->Add(entry->fRecEventHist); + fRecTrackHist->Add(entry->fRecTrackHist); + fEventCount->Add(entry->fEventCount); + fEventMultHist->Add(entry->fEventMultHist); + if (fDimensionsCentralityEstimators > 0) { + fCentralityEventHist->Add(entry->fCentralityEventHist); + fCentralityTrackHist->Add(entry->fCentralityTrackHist); + } + + // + fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix); + fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix); + + // + fGenEventMatrix->Add(entry->fGenEventMatrix); + fGenSDEventMatrix->Add(entry->fGenSDEventMatrix); + fGenDDEventMatrix->Add(entry->fGenDDEventMatrix); + fGenNDEventMatrix->Add(entry->fGenNDEventMatrix); + fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix); + + fTriggerEventMatrix->Add(entry->fTriggerEventMatrix); + fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix); + fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix); + fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix); + fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix); + + fRecEventMatrix->Add(entry->fRecEventMatrix); + fRecSDEventMatrix->Add(entry->fRecSDEventMatrix); + fRecDDEventMatrix->Add(entry->fRecDDEventMatrix); + fRecNDEventMatrix->Add(entry->fRecNDEventMatrix); + fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix); + + fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix); + // + fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix); + fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix); + fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix); + fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix); + fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix); + + fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix); + fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix); + fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix); + fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix); + fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix); + + fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix); + fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix); + fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix); + fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix); + fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix); + + // + fGenTrackMatrix->Add(entry->fGenTrackMatrix); + fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix); + fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix); + // + fRecTrackMatrix->Add(entry->fRecTrackMatrix); + fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix); + // + fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix); + fMCPrimTrackHist->Add(entry->fMCPrimTrackHist); + + // + // control analysis histograms + // + fMCEventHist1->Add(entry->fMCEventHist1); + fRecEventHist1->Add(entry->fRecEventHist1); + fRecEventHist2->Add(entry->fRecEventHist2); + fRecMCEventHist1->Add(entry->fRecMCEventHist1); + fRecMCEventHist2->Add(entry->fRecMCEventHist2); + fRecMCEventHist3->Add(entry->fRecMCEventHist3); + + for(Int_t i=0; iAdd(entry->fMCTrackHist1[i]); + + fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]); + fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]); + fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]); + + fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]); + fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]); + } + fRecMCTrackHist1->Add(entry->fRecMCTrackHist1); + fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1); + fRecTrackHist2->Add(entry->fRecTrackHist2); + + + count++; + } + + //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); + //trigSelection->Merge(collPhysSelection); + //if(collPhysSelection) delete collPhysSelection; + +return count; +} + +//____________________________________________________________________ +Bool_t AlidNdPtAnalysispPb::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) { +// +// check 0-bin +// for LHC background calculation +// return kTRUE if vertex not reconstructed or +// track multiplicity == 0 +// +if(!esdEvent) return kFALSE; + + // check vertex + const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks(); + if(!vertex) return kTRUE; + + if(vertex->GetNContributors() < 1) { + // SPD vertex + vertex = esdEvent->GetPrimaryVertexSPD(); + if(!vertex) return kTRUE; + } + if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; + if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) ) + return kTRUE; + +return kFALSE; +} + +//____________________________________________________________________ +Bool_t AlidNdPtAnalysispPb::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) { +// +// check 0-bin +// for LHC background calculation +// return kTRUE if vertex not reconstructed or +// tracklet multiplicity == 0 +// +if(!esdEvent) return kFALSE; + + // check vertex + const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD(); + if(!vertex) return kTRUE; + if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; + if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE; + +return kFALSE; +} + +//_____________________________________________________________________________ +void AlidNdPtAnalysispPb::Analyse() +{ + // init if not done already + if (!fIsInit) { Init(); } + + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TH1 *h=0, *h1=0, *h2=0, *h2c = 0; + THnSparse *hs=0; + TH2 *h2D=0; + + char name[256]; + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + // + // LHC backgraund in all and 0-bins + // + //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); + //trigSel->SaveHistograms("physics_selection"); + + // + // Reconstructed event vertex + // + h = fRecEventHist1->Projection(0); + h->SetName("Xv"); + aFolderObj->Add(h); + + h = fRecEventHist1->Projection(1); + h->SetName("Yv"); + aFolderObj->Add(h); + + h = fRecEventHist1->Projection(2); + h->SetName("Zv"); + aFolderObj->Add(h); + + // + // multiplicity + // + h = fRecEventHist2->Projection(1); + h->SetName("multMB"); + aFolderObj->Add(h); + + h = fRecEventHist2->Projection(2); + h->SetName("multiplicity"); + aFolderObj->Add(h); + + h2D = fRecEventHist2->Projection(0,1); + h2D->SetName("Zv_vs_multiplicity_MB"); + aFolderObj->Add(h2D); + + // + // reconstructed pt histograms + // + h = fRecTrackHist1[0]->Projection(0); + h->Scale(1.,"width"); + h->SetName("pt_all_ch"); + aFolderObj->Add(h); + + h = fRecTrackHist1[1]->Projection(0); + h->Scale(1.,"width"); + h->SetName("pt_acc"); + aFolderObj->Add(h); + + h = fRecTrackHist1[2]->Projection(0); + h->Scale(1.,"width"); + h->SetName("pt_rec"); + aFolderObj->Add(h); + + // + // reconstructed eta histograms + // + h = fRecTrackHist1[0]->Projection(1); + h->SetName("eta_all_ch"); + aFolderObj->Add(h); + + h = fRecTrackHist1[1]->Projection(1); + h->SetName("eta_acc"); + aFolderObj->Add(h); + + h = fRecTrackHist1[2]->Projection(1); + h->SetName("eta_rec"); + aFolderObj->Add(h); + + // + // reconstructed phi histograms + // + h = fRecTrackHist1[0]->Projection(2); + h->SetName("phi_all_ch"); + aFolderObj->Add(h); + + h = fRecTrackHist1[1]->Projection(2); + h->SetName("phi_acc"); + aFolderObj->Add(h); + + h = fRecTrackHist1[2]->Projection(2); + h->SetName("phi_rec"); + aFolderObj->Add(h); + + // + // reconstructed eta:pt histograms + // + h2D = fRecTrackHist1[0]->Projection(1,0); + h2D->SetName("pt_eta_all_ch"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[1]->Projection(1,0); + h2D->SetName("pt_eta_acc"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[2]->Projection(1,0); + h2D->SetName("pt_eta_rec"); + aFolderObj->Add(h2D); + + // + // reconstructed phi:pt histograms + // + h2D = fRecTrackHist1[0]->Projection(2,0); + h2D->SetName("pt_phi_all_ch"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[1]->Projection(2,0); + h2D->SetName("pt_phi_acc"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[2]->Projection(2,0); + h2D->SetName("pt_phi_rec"); + aFolderObj->Add(h2D); + + // + // reconstructed phi:eta histograms + // + h2D = fRecTrackHist1[0]->Projection(2,1); + h2D->SetName("eta_phi_all_ch"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[1]->Projection(2,1); + h2D->SetName("eta_phi_acc"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist1[2]->Projection(2,1); + h2D->SetName("eta_phi_rec"); + aFolderObj->Add(h2D); + + // + // reconstructed nClust, chi2 vs pt, eta, phi + // + if(fHistogramsOn) { + + h2D = fRecTrackHist2->Projection(0,1); + h2D->SetName("nClust_chi2_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(0,2); + h2D->SetName("nClust_pt_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(0,3); + h2D->SetName("nClust_eta_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(0,4); + h2D->SetName("nClust_phi_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(1,2); + h2D->SetName("chi2_pt_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(1,3); + h2D->SetName("chi2_eta_rec"); + aFolderObj->Add(h2D); + + h2D = fRecTrackHist2->Projection(1,4); + h2D->SetName("chi2_phi_rec"); + aFolderObj->Add(h2D); + + } + + // + // calculate corrections for empty events + // with multMB==0 + // + + // + // normalised zv to generate zv for triggered events + // + h = fRecEventHist2->Projection(0); + if( h->Integral() ) h->Scale(1./h->Integral()); + h->SetName("zv_distribution_norm"); + aFolderObj->Add(h); + + // + // MC available + // + if(IsUseMCInfo()) { + + // + // Event vertex resolution + // + h2D = fRecMCEventHist2->Projection(0,2); + h2D->SetName("DeltaXv_vs_mult"); + aFolderObj->Add(h2D); + + h2D = fRecMCEventHist2->Projection(1,2); + h2D->SetName("DeltaZv_vs_mult"); + aFolderObj->Add(h2D); + + // + // normalised zv to get trigger/trigger+vertex event differences + // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv) + // + fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.); + h = fTriggerEventMatrix->Projection(0); + h2D = fTriggerEventMatrix->Projection(0,1); + if(h2D->Integral()) h->Scale(1./h2D->Integral()); + + h1 = fRecEventMatrix->Projection(0); + h2D = fRecEventMatrix->Projection(0,1); + if(h2D->Integral()) h1->Scale(1./h2D->Integral()); + + h->Divide(h1); + h->SetName("zv_empty_events_norm"); + aFolderObj->Add(h); + + fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins()); + + // + // rec. vs true multiplicity correlation matrix + // + hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix"); + aFolderObj->Add(hs); + + // + // rec. vs true track pt correlation matrix + // + hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix"); + aFolderObj->Add(hs); + + // + // trigger efficiency for INEL + // + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix"); + aFolderObj->Add(h); + + // + // trigger efficiency for NSD + // + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix"); + aFolderObj->Add(h); + + // + // trigger bias correction (MB to ND) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix"); + aFolderObj->Add(hs); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix"); + + aFolderObj->Add(h); + + // + // trigger bias correction (MB to NSD) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h); + + + // + // trigger bias correction (MB to INEL) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h); + + + // + // event vertex reconstruction correction (MB) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D"); + aFolderObj->Add(h2D); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix"); + aFolderObj->Add(h); + + // + // track-event trigger bias correction (MB to ND) + // + + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix"); + aFolderObj->Add(h2D); + + // + // track-event trigger bias correction (MB to NSD) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix"); + aFolderObj->Add(h2D); + + + // + // track-event trigger bias correction (MB to INEL) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix"); + aFolderObj->Add(h2D); + + // efficiency + + h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix"); + aFolderObj->Add(h); + + + // + // track-event vertex reconstruction correction (MB) + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix"); + aFolderObj->Add(h2D); + + // efficiency + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix"); + aFolderObj->Add(h); + + + // + // track rec. efficiency correction + // + hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix"); + aFolderObj->Add(h2D); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix"); + aFolderObj->Add(h); + + // efficiency + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix"); + aFolderObj->Add(h); + + // + // secondary track contamination correction + // + //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); + hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix"); + aFolderObj->Add(h); + + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix"); + aFolderObj->Add(h); + + // + // multiple track reconstruction correction + // + //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); + hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix"); + aFolderObj->Add(hs); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix"); + aFolderObj->Add(h2D); + + h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix"); + aFolderObj->Add(h2D); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix"); + aFolderObj->Add(h); + + h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix"); + aFolderObj->Add(h); + + // + // Control histograms + // + + if(fHistogramsOn) { + + // Efficiency electrons, muons, pions, kaons, protons, all + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_electrons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_muons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_pions"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_kaons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_protons"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_selected"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_all"); + aFolderObj->Add(h2c); + + fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins()); + fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins()); + + // pt spetra + // - rec, primaries, secondaries + // - primaries (pid) + // - secondaries (pid) + // - secondaries (mech) + // - secondaries (mother) + // + + TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0); + mcPtAccall->SetName("mc_pt_acc_all"); + aFolderObj->Add(mcPtAccall); + + TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0); + mcPtAccprim->SetName("mc_pt_acc_prim"); + aFolderObj->Add(mcPtAccprim); + + TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0); + mcPtRecall->SetName("mc_pt_rec_all"); + aFolderObj->Add(mcPtRecall); + + TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0); + mcPtRecprim->SetName("mc_pt_rec_prim"); + aFolderObj->Add(mcPtRecprim); + + TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0); + mcPtRecsec->SetName("mc_pt_rec_sec"); + aFolderObj->Add(mcPtRecsec); + + for(Int_t i = 0; i<6; i++) + { + snprintf(name,256,"mc_pt_rec_prim_pid_%d",i); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); + h = fMCPrimTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_pt_rec_sec_pid_%d",i); + fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + // production mechanisms for given pid + fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1); + + for(Int_t j=0; j<20; j++) { + if(j == 4) { + // decay + + snprintf(name,256,"mc_pt_rec_sec_pid_%d_decay",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_rec_sec_pid_%d_decay",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_mother_rec_sec_pid_%d_decay",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4); + h->SetName(name); + aFolderObj->Add(h); + + } else if (j == 5) { + // conversion + + snprintf(name,256,"mc_pt_rec_sec_pid_%d_conv",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_rec_sec_pid_%d_conv",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_mother_rec_sec_pid_%d_conv",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4); + h->SetName(name); + aFolderObj->Add(h); + + } else if (j == 13) { + // mat + + snprintf(name,256,"mc_pt_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(0); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_eta_mother_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4,1); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_mother_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4); + h->SetName(name); + aFolderObj->Add(h); + + snprintf(name,256,"mc_pt_mother_rec_sec_pid_%d_mat",i); + fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1); + h = fMCSecTrackHist1[2]->Projection(4,0); + h->SetName(name); + aFolderObj->Add(h); + + } else { + continue; + } + } + + } + } // end fHistogramOn + + // + // resolution histograms + // only for reconstructed tracks + // + + TH2F *h2F=0; + TCanvas * c = new TCanvas("resol","resol"); + c->cd(); + + // + fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); + h->Draw(); + h->SetName("pt_resolution_vs_mcpt"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); + h->Draw(); + h->SetName("dpt_mean_vs_mcpt"); + aFolderObj->Add(h); + + // + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(#eta-#eta_{mc}) resolution"); + h->Draw(); + h->SetName("eta_resolution_vs_mcpt"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("p_{tmc} (GeV/c)"); + h->SetYTitle("(#eta-mc#eta) mean"); + h->Draw(); + h->SetName("deta_mean_vs_mcpt"); + aFolderObj->Add(h); + + // + fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution"); + h->Draw(); + h->SetName("pt_resolution_vs_mceta"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean"); + h->Draw(); + h->SetName("dpt_mean_vs_mceta"); + aFolderObj->Add(h); + + // + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); + h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(#eta-#eta_{mc}) resolution"); + h->Draw(); + h->SetName("eta_resolution_vs_mceta"); + aFolderObj->Add(h); + + h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1); + h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10); + h->SetXTitle("#eta_{mc}"); + h->SetYTitle("(#eta-mc#eta) mean"); + h->Draw(); + h->SetName("deta_mean_vs_mceta"); + aFolderObj->Add(h); + + fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins()); + + } // end use MC info + + // export objects to analysis folder + fAnalysisFolder = ExportToFolder(aFolderObj); + + // delete only TObjArray + if(aFolderObj) delete aFolderObj; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtAnalysispPb::ExportToFolder(TObjArray * const array) +{ + // recreate folder avery time and export objects to new one + // + AlidNdPtAnalysispPb * comp=this; + TFolder *folder = comp->GetAnalysisFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtAnalysispPb::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtBackgroundCuts.h b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtBackgroundCuts.h index 493a2d2dc94..03d44f0cec6 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtBackgroundCuts.h +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtBackgroundCuts.h @@ -1,79 +1,79 @@ -#ifndef ALIDNDPTBACKGROUNDCUTS_H -#define ALIDNDPTBACKGROUNDCUTS_H - -//------------------------------------------------------------------------------ -// Class to keep selection cuts for -// cosmic and kinks and splitted tracks. -// -// Author: J.Otwinowski 25/01/2010 -//------------------------------------------------------------------------------ - -class TParticle; -class AliESDtrack; -class AliExternalTrackParam; - -#include "AliAnalysisCuts.h" - -class AlidNdPtBackgroundCuts : public AliAnalysisCuts -{ -public: - AlidNdPtBackgroundCuts(const Char_t* name ="AlidNdPtBackgroundCuts", const Char_t *title =""); - virtual ~AlidNdPtBackgroundCuts(); - - // setters - void SetEtaWindow(const Float_t min=-10., const Float_t max=10.) { fMinEta=min; fMaxEta=max; } - void SetPhiWindow(const Float_t min=0., const Float_t max=1e99) { fMinPhi=min; fMaxPhi=max;} - void SetPtWindow(const Float_t min=0., const Float_t max=1e99) { fMinPt=min; fMaxPt=max;} - void SetMaxFracSharedClust(const Float_t max=1.) {fMaxFracSharedClust=max;} - - // getters - Float_t GetMinEta() const {return fMinEta;} - Float_t GetMaxEta() const {return fMaxEta;} - Float_t GetMinPhi() const {return fMinPhi;} - Float_t GetMaxPhi() const {return fMaxPhi;} - Float_t GetMinPt() const {return fMinPt;} - Float_t GetMaxPt() const {return fMaxPt;} - - Float_t GetMaxFracSharedClust() const {return fMaxFracSharedClust;} - - // Get control histo - THnSparseF *GetControlHisto() const {return fControlHisto;} - - // cuts init function - void Init(); - - // check MC tracks - virtual Bool_t IsSelected(TObject *) {return kTRUE;} - virtual Bool_t IsSelected(TList *) {return kTRUE;} - - // - Bool_t IsBackgroundTrack(AliESDtrack *track1, AliESDtrack *track2); - Bool_t IsCosmicTrack(AliESDtrack *track1, AliESDtrack *track2); - Bool_t IsSplittedTrack(AliESDtrack *track1, AliESDtrack *track2); - - // Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* list); - - // fill control histograms - void SetHistogramsOn(Bool_t fill=kTRUE) {fFillControlHisto = fill; } - Bool_t IsHistogramsOn() const {return fFillControlHisto; } - -private: - Float_t fMinEta; // min pseudorapidity limit - Float_t fMaxEta; // max pseudorapidity limit - Float_t fMinPhi; // min azimuthal angle (rad) limit - Float_t fMaxPhi; // max azimuthal angle (rad) limit - Float_t fMinPt; // min pt limit - Float_t fMaxPt; // max pt limit - Float_t fMaxFracSharedClust; // max fraction of track shared clusters - - Bool_t fFillControlHisto; // flag to fill control histograms - THnSparseF *fControlHisto; //-> etasum:dphi:dpt:pt1:fracSharedClust1:qsum - - AlidNdPtBackgroundCuts(const AlidNdPtBackgroundCuts&); // not implemented - AlidNdPtBackgroundCuts& operator=(const AlidNdPtBackgroundCuts&); // not implemented - - ClassDef(AlidNdPtBackgroundCuts, 1) -}; - -#endif // +#ifndef ALIDNDPTBACKGROUNDCUTS_H +#define ALIDNDPTBACKGROUNDCUTS_H + +//------------------------------------------------------------------------------ +// Class to keep selection cuts for +// cosmic and kinks and splitted tracks. +// +// Author: J.Otwinowski 25/01/2010 +//------------------------------------------------------------------------------ + +class TParticle; +class AliESDtrack; +class AliExternalTrackParam; + +#include "AliAnalysisCuts.h" + +class AlidNdPtBackgroundCuts : public AliAnalysisCuts +{ +public: + AlidNdPtBackgroundCuts(const Char_t* name ="AlidNdPtBackgroundCuts", const Char_t *title =""); + virtual ~AlidNdPtBackgroundCuts(); + + // setters + void SetEtaWindow(const Float_t min=-10., const Float_t max=10.) { fMinEta=min; fMaxEta=max; } + void SetPhiWindow(const Float_t min=0., const Float_t max=1e99) { fMinPhi=min; fMaxPhi=max;} + void SetPtWindow(const Float_t min=0., const Float_t max=1e99) { fMinPt=min; fMaxPt=max;} + void SetMaxFracSharedClust(const Float_t max=1.) {fMaxFracSharedClust=max;} + + // getters + Float_t GetMinEta() const {return fMinEta;} + Float_t GetMaxEta() const {return fMaxEta;} + Float_t GetMinPhi() const {return fMinPhi;} + Float_t GetMaxPhi() const {return fMaxPhi;} + Float_t GetMinPt() const {return fMinPt;} + Float_t GetMaxPt() const {return fMaxPt;} + + Float_t GetMaxFracSharedClust() const {return fMaxFracSharedClust;} + + // Get control histo + THnSparseF *GetControlHisto() const {return fControlHisto;} + + // cuts init function + void Init(); + + // check MC tracks + virtual Bool_t IsSelected(TObject *) {return kTRUE;} + virtual Bool_t IsSelected(TList *) {return kTRUE;} + + // + Bool_t IsBackgroundTrack(AliESDtrack *track1, AliESDtrack *track2); + Bool_t IsCosmicTrack(AliESDtrack *track1, AliESDtrack *track2); + Bool_t IsSplittedTrack(AliESDtrack *track1, AliESDtrack *track2); + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* list); + + // fill control histograms + void SetHistogramsOn(Bool_t fill=kTRUE) {fFillControlHisto = fill; } + Bool_t IsHistogramsOn() const {return fFillControlHisto; } + +private: + Float_t fMinEta; // min pseudorapidity limit + Float_t fMaxEta; // max pseudorapidity limit + Float_t fMinPhi; // min azimuthal angle (rad) limit + Float_t fMaxPhi; // max azimuthal angle (rad) limit + Float_t fMinPt; // min pt limit + Float_t fMaxPt; // max pt limit + Float_t fMaxFracSharedClust; // max fraction of track shared clusters + + Bool_t fFillControlHisto; // flag to fill control histograms + THnSparseF *fControlHisto; //-> etasum:dphi:dpt:pt1:fracSharedClust1:qsum + + AlidNdPtBackgroundCuts(const AlidNdPtBackgroundCuts&); // not implemented + AlidNdPtBackgroundCuts& operator=(const AlidNdPtBackgroundCuts&); // not implemented + + ClassDef(AlidNdPtBackgroundCuts, 1) +}; + +#endif // diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCorrection.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCorrection.cxx index fec3e8ec1e8..3987197ce60 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCorrection.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCorrection.cxx @@ -1,2649 +1,2649 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//------------------------------------------------------------------------------ -// AlidNdPtCorrection class: -// -// a. functionality: -// - applies corrections on dNdPt spectra -// - fills corrected dNdPt histograms -// - fills correction control histograms -// -// b. data members: -// - dNdPt spectra before and after correction procedure -// - control histograms -// - correction matrices (must be loaded) -// -// Author: J.Otwinowski 04/11/2008 -//------------------------------------------------------------------------------ - -#include "TFile.h" -#include "TH1.h" -#include "TH2.h" - -#include "AliHeader.h" -#include "AliGenEventHeader.h" -#include "AliStack.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDtrackCuts.h" -#include "AliLog.h" -#include "AliMultiplicity.h" -#include "AliTracker.h" - -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AliPhysicsSelection.h" - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" -#include "AlidNdPtAnalysis.h" -#include "AlidNdPtCorrection.h" - -using namespace std; - -ClassImp(AlidNdPtCorrection) - -//_____________________________________________________________________________ -//AlidNdPtCorrection::AlidNdPtCorrection(): TNamed(), - AlidNdPtCorrection::AlidNdPtCorrection(): AlidNdPt(), - fCorrectionFolder(0), - fMCEventHist1(0), - fRecEventHist1(0), - fRecEventMultHist1(0), - fMCAllEventMultHist1(0), - fMCAllNDEventMultHist1(0), - fMCAllNSDEventMultHist1(0), - fMCTriggerMultHist1(0), - fMCEventMultHist1(0), - fMCAllPrimTrackMultHist1(0), - fMCNDEventAllPrimTrackMultHist1(0), - fMCNSDEventAllPrimTrackMultHist1(0), - fMCTriggerPrimTrackMultHist1(0), - fMCEventPrimTrackMultHist1(0), - fMCAllPrimTrackTrueMultHist1(0), - fMCNDEventAllPrimTrackTrueMultHist1(0), - fMCNSDEventAllPrimTrackTrueMultHist1(0), - fMCTriggerPrimTrackTrueMultHist1(0), - fMCEventPrimTrackTrueMultHist1(0), - fMCAllPrimTrackTrueMultHist2(0), - fMCNDEventAllPrimTrackTrueMultHist2(0), - fMCNSDEventAllPrimTrackTrueMultHist2(0), - fMCTriggerPrimTrackTrueMultHist2(0), - fMCEventPrimTrackTrueMultHist2(0), - fMCAllPrimTrackMeanPtMult1(0), - fMCNDEventAllPrimTrackMeanPtMult1(0), - fMCNSDEventAllPrimTrackMeanPtMult1(0), - fMCTriggerPrimTrackMeanPtMult1(0), - fMCEventPrimTrackMeanPtMult1(0), - fMCAllPrimTrackMeanPtTrueMult1(0), - fMCNDEventAllPrimTrackMeanPtTrueMult1(0), - fMCNSDEventAllPrimTrackMeanPtTrueMult1(0), - fMCTriggerPrimTrackMeanPtTrueMult1(0), - fMCEventPrimTrackMeanPtTrueMult1(0), - fEventMultCorrelationMatrix(0), - fZvNorm(0), - fZvEmptyEventsNorm(0), - fLHCBin0Background(0), - fCorrTriggerMBtoInelEventMatrix(0), - fCorrTriggerMBtoNDEventMatrix(0), - fCorrTriggerMBtoNSDEventMatrix(0), - fCorrEventMatrix(0), - fCorrTriggerMBtoInelTrackEventMatrix(0), - fCorrTriggerMBtoNDTrackEventMatrix(0), - fCorrTriggerMBtoNSDTrackEventMatrix(0), - fCorrTrackEventMatrix(0), - fCorrTrackMatrix(0), - fCorrHighPtTrackMatrix(0), - fContTrackMatrix(0), - fContMultTrackMatrix(0), - fCorrMatrixFileName(""), - fCosmicsHisto(0), - fEventCount(0) -{ - // default constructor - for(Int_t i=0; iGetAxis(0)->SetTitle("mcXv (cm)"); - fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)"); - fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)"); - fMCEventHist1->Sumw2(); - - // - Int_t binsRecEventHist1[3]={100,100,140}; - Double_t minRecEventHist1[3]={-3.,-3.,-35.}; - Double_t maxRecEventHist1[3]={3.,3.,35.}; - fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1); - fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)"); - fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)"); - fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)"); - fRecEventHist1->Sumw2(); - - // - Int_t binsRecEventMultHist1[2]={150,150}; - Double_t minRecEventMultHist1[2]={-0.5,-0.5}; - Double_t maxRecEventMultHist1[2]={149.5,149.5}; - fRecEventMultHist1 = new THnSparseF("fRecEventMultHist1","track multiplicity:tracklet multiplicity",2,binsRecEventMultHist1,minRecEventMultHist1,maxRecEventMultHist1); - fRecEventMultHist1->GetAxis(0)->SetTitle("track_mult"); - fRecEventMultHist1->GetAxis(1)->SetTitle("tracklet_mult"); - fRecEventMultHist1->Sumw2(); - - // - char name[256]; - char title[256]; - - Int_t binsMCAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCAllPrimTrackMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCAllPrimTrackMultHist1"); - snprintf(title,256,"mcPt:mcEta:multiplicity"); - - fMCAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackMultHist1,minMCAllPrimTrackMultHist1,maxMCAllPrimTrackMultHist1); - fMCAllPrimTrackMultHist1->SetBinEdges(0,binsPt); - fMCAllPrimTrackMultHist1->SetBinEdges(1,binsEta); - fMCAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); - fMCAllPrimTrackMultHist1->Sumw2(); - - Int_t binsMCNDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCNDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCNDEventAllPrimTrackMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCNDEventAllPrimTrackMultHist1"); - snprintf(title,256,"mcPt:mcEta:multiplicity"); - - fMCNDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackMultHist1,minMCNDEventAllPrimTrackMultHist1,maxMCNDEventAllPrimTrackMultHist1); - fMCNDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt); - fMCNDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta); - fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCNDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); - fMCNDEventAllPrimTrackMultHist1->Sumw2(); - - Int_t binsMCNSDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCNSDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCNSDEventAllPrimTrackMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCNSDEventAllPrimTrackMultHist1"); - snprintf(title,256,"mcPt:mcEta:multiplicity"); - - fMCNSDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackMultHist1,minMCNSDEventAllPrimTrackMultHist1,maxMCNSDEventAllPrimTrackMultHist1); - fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt); - fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta); - fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCNSDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); - fMCNSDEventAllPrimTrackMultHist1->Sumw2(); - - Int_t binsMCEventTriggerPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCEventTriggerPrimTrackMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCEventTriggerPrimTrackMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCTriggerPrimTrackMultHist1"); - snprintf(title,256,"mcPt:mcEta:multiplicity"); - - fMCTriggerPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackMultHist1,minMCEventTriggerPrimTrackMultHist1,maxMCEventTriggerPrimTrackMultHist1); - fMCTriggerPrimTrackMultHist1->SetBinEdges(0,binsPt); - fMCTriggerPrimTrackMultHist1->SetBinEdges(1,binsEta); - fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCTriggerPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); - fMCTriggerPrimTrackMultHist1->Sumw2(); - - Int_t binsMCEventPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCEventPrimTrackMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCEventPrimTrackMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCEventPrimTrackMultHist1"); - snprintf(title,256,"mcPt:mcEta:multiplicity"); - - fMCEventPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackMultHist1,minMCEventPrimTrackMultHist1,maxMCEventPrimTrackMultHist1); - fMCEventPrimTrackMultHist1->SetBinEdges(0,binsPt); - fMCEventPrimTrackMultHist1->SetBinEdges(1,binsEta); - fMCEventPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCEventPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCEventPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); - fMCEventPrimTrackMultHist1->Sumw2(); - - // - // true multiplicity - // - - Int_t binsMCAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCAllPrimTrackTrueMultHist1"); - snprintf(title,256,"mcPt:mcEta:true_mult"); - - fMCAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist1,minMCAllPrimTrackTrueMultHist1,maxMCAllPrimTrackTrueMultHist1); - fMCAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); - fMCAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); - fMCAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); - fMCAllPrimTrackTrueMultHist1->Sumw2(); - - Int_t binsMCNDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCNDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCNDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCNDEventAllPrimTrackTrueMultHist1"); - snprintf(title,256,"mcPt:mcEta:true_mult"); - - fMCNDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist1,minMCNDEventAllPrimTrackTrueMultHist1,maxMCNDEventAllPrimTrackTrueMultHist1); - fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); - fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); - fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); - fMCNDEventAllPrimTrackTrueMultHist1->Sumw2(); - - Int_t binsMCNSDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCNSDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCNSDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCNSDEventAllPrimTrackTrueMultHist1"); - snprintf(title,256,"mcPt:mcEta:true_mult"); - - fMCNSDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist1,minMCNSDEventAllPrimTrackTrueMultHist1,maxMCNSDEventAllPrimTrackTrueMultHist1); - fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); - fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); - fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); - fMCNSDEventAllPrimTrackTrueMultHist1->Sumw2(); - - Int_t binsMCEventTriggerPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCEventTriggerPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCEventTriggerPrimTrackTrueMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCTriggerPrimTrackTrueMultHist1"); - snprintf(title,256,"mcPt:mcEta:true_mult"); - - fMCTriggerPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist1,minMCEventTriggerPrimTrackTrueMultHist1,maxMCEventTriggerPrimTrackTrueMultHist1); - fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); - fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); - fMCTriggerPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCTriggerPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCTriggerPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); - fMCTriggerPrimTrackTrueMultHist1->Sumw2(); - - Int_t binsMCEventPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minMCEventPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; - Double_t maxMCEventPrimTrackTrueMultHist1[3]={20.,1.,149.5}; - snprintf(name,256,"fMCEventPrimTrackTrueMultHist1"); - snprintf(title,256,"mcPt:mcEta:true_mult"); - - fMCEventPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist1,minMCEventPrimTrackTrueMultHist1,maxMCEventPrimTrackTrueMultHist1); - fMCEventPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); - fMCEventPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); - fMCEventPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCEventPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); - fMCEventPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); - fMCEventPrimTrackTrueMultHist1->Sumw2(); - - // - // mcPT vs multiplicity vs true multiplicity - // - - Int_t binsMCAllPrimTrackTrueMultHist2[3]={ptNbins,150,150}; - Double_t minMCAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; - Double_t maxMCAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; - snprintf(name,256,"fMCAllPrimTrackTrueMultHist2"); - snprintf(title,256,"mcPt:mult:true_mult"); - - fMCAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist2,minMCAllPrimTrackTrueMultHist2,maxMCAllPrimTrackTrueMultHist2); - fMCAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); - fMCAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); - fMCAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); - fMCAllPrimTrackTrueMultHist2->Sumw2(); - - Int_t binsMCNDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150}; - Double_t minMCNDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; - Double_t maxMCNDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; - snprintf(name,256,"fMCNDEventAllPrimTrackTrueMultHist2"); - snprintf(title,256,"mcPt:mult:true_mult"); - - fMCNDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist2,minMCNDEventAllPrimTrackTrueMultHist2,maxMCNDEventAllPrimTrackTrueMultHist2); - fMCNDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); - fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); - fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); - fMCNDEventAllPrimTrackTrueMultHist2->Sumw2(); - - Int_t binsMCNSDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150}; - Double_t minMCNSDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; - Double_t maxMCNSDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; - snprintf(name,256,"fMCNSDEventAllPrimTrackTrueMultHist2"); - snprintf(title,256,"mcPt:mult:true_mult"); - - fMCNSDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist2,minMCNSDEventAllPrimTrackTrueMultHist2,maxMCNSDEventAllPrimTrackTrueMultHist2); - fMCNSDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); - fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); - fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); - fMCNSDEventAllPrimTrackTrueMultHist2->Sumw2(); - - Int_t binsMCEventTriggerPrimTrackTrueMultHist2[3]={ptNbins,150,150}; - Double_t minMCEventTriggerPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; - Double_t maxMCEventTriggerPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; - snprintf(name,256,"fMCTriggerPrimTrackTrueMultHist2"); - snprintf(title,256,"mcPt:mult:true_mult"); - - fMCTriggerPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist2,minMCEventTriggerPrimTrackTrueMultHist2,maxMCEventTriggerPrimTrackTrueMultHist2); - fMCTriggerPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); - fMCTriggerPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCTriggerPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); - fMCTriggerPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); - fMCTriggerPrimTrackTrueMultHist2->Sumw2(); - - Int_t binsMCEventPrimTrackTrueMultHist2[3]={ptNbins,150,150}; - Double_t minMCEventPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; - Double_t maxMCEventPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; - snprintf(name,256,"fMCEventPrimTrackTrueMultHist2"); - snprintf(title,256,"mcPt:mult:true_mult"); - - fMCEventPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist2,minMCEventPrimTrackTrueMultHist2,maxMCEventPrimTrackTrueMultHist2); - fMCEventPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); - fMCEventPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); - fMCEventPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); - fMCEventPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); - fMCEventPrimTrackTrueMultHist2->Sumw2(); - - - // - // mean pt - // - Int_t binsMCAllPrimTrackMeanPtTrueMult1[2]={100,150}; - Double_t minMCAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; - Double_t maxMCAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; - snprintf(name,256,"fMCAllPrimTrackMeanPtTrueMult1"); - snprintf(title,256,"event :true_mult"); - - fMCAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtTrueMult1,minMCAllPrimTrackMeanPtTrueMult1,maxMCAllPrimTrackMeanPtTrueMult1); - fMCAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); - fMCAllPrimTrackMeanPtTrueMult1->Sumw2(); - - Int_t binsMCAllPrimTrackMeanPtMult1[2]={100,150}; - Double_t minMCAllPrimTrackMeanPtMult1[2]={0.,-0.5}; - Double_t maxMCAllPrimTrackMeanPtMult1[2]={10.,149.5}; - snprintf(name,256,"fMCAllPrimTrackMeanPtMult1"); - snprintf(title,256,"event :mult"); - - fMCAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtMult1,minMCAllPrimTrackMeanPtMult1,maxMCAllPrimTrackMeanPtMult1); - fMCAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); - fMCAllPrimTrackMeanPtMult1->Sumw2(); - - // - Int_t binsMCNDEventAllPrimTrackMeanPtTrueMult1[2]={100,150}; - Double_t minMCNDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; - Double_t maxMCNDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; - snprintf(name,256,"fMCNDEventAllPrimTrackMeanPtTrueMult1"); - snprintf(title,256,"event :true_mult"); - - fMCNDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtTrueMult1,minMCNDEventAllPrimTrackMeanPtTrueMult1,maxMCNDEventAllPrimTrackMeanPtTrueMult1); - fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); - fMCNDEventAllPrimTrackMeanPtTrueMult1->Sumw2(); - - Int_t binsMCNDEventAllPrimTrackMeanPtMult1[2]={100,150}; - Double_t minMCNDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5}; - Double_t maxMCNDEventAllPrimTrackMeanPtMult1[2]={10.,149.5}; - snprintf(name,256,"fMCNDEventAllPrimTrackMeanPtMult1"); - snprintf(title,256,"event :mult"); - - fMCNDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtMult1,minMCNDEventAllPrimTrackMeanPtMult1,maxMCNDEventAllPrimTrackMeanPtMult1); - fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); - fMCNDEventAllPrimTrackMeanPtMult1->Sumw2(); - - // - Int_t binsMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={100,150}; - Double_t minMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; - Double_t maxMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; - snprintf(name,256,"fMCNSDEventAllPrimTrackMeanPtTrueMult1"); - snprintf(title,256,"event :true_mult"); - - fMCNSDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtTrueMult1,minMCNSDEventAllPrimTrackMeanPtTrueMult1,maxMCNSDEventAllPrimTrackMeanPtTrueMult1); - fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); - fMCNSDEventAllPrimTrackMeanPtTrueMult1->Sumw2(); - - Int_t binsMCNSDEventAllPrimTrackMeanPtMult1[2]={100,150}; - Double_t minMCNSDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5}; - Double_t maxMCNSDEventAllPrimTrackMeanPtMult1[2]={10.,149.5}; - snprintf(name,256,"fMCNSDEventAllPrimTrackMeanPtMult1"); - snprintf(title,256,"event :mult"); - - fMCNSDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtMult1,minMCNSDEventAllPrimTrackMeanPtMult1,maxMCNSDEventAllPrimTrackMeanPtMult1); - fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); - fMCNSDEventAllPrimTrackMeanPtMult1->Sumw2(); - - // - Int_t binsMCTriggerPrimTrackMeanPtTrueMult1[2]={100,150}; - Double_t minMCTriggerPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; - Double_t maxMCTriggerPrimTrackMeanPtTrueMult1[2]={10.,149.5}; - snprintf(name,256,"fMCTriggerPrimTrackMeanPtTrueMult1"); - snprintf(title,256,"event :true_mult"); - - fMCTriggerPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtTrueMult1,minMCTriggerPrimTrackMeanPtTrueMult1,maxMCTriggerPrimTrackMeanPtTrueMult1); - fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); - fMCTriggerPrimTrackMeanPtTrueMult1->Sumw2(); - - Int_t binsMCTriggerPrimTrackMeanPtMult1[2]={100,150}; - Double_t minMCTriggerPrimTrackMeanPtMult1[2]={0.,-0.5}; - Double_t maxMCTriggerPrimTrackMeanPtMult1[2]={10.,149.5}; - snprintf(name,256,"fMCTriggerPrimTrackMeanPtMult1"); - snprintf(title,256,"event :mult"); - - fMCTriggerPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtMult1,minMCTriggerPrimTrackMeanPtMult1,maxMCTriggerPrimTrackMeanPtMult1); - fMCTriggerPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCTriggerPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); - fMCTriggerPrimTrackMeanPtMult1->Sumw2(); - - // - Int_t binsMCEventPrimTrackMeanPtTrueMult1[2]={100,150}; - Double_t minMCEventPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; - Double_t maxMCEventPrimTrackMeanPtTrueMult1[2]={10.,149.5}; - snprintf(name,256,"fMCEventPrimTrackMeanPtTrueMult1"); - snprintf(title,256,"event :true_mult"); - - fMCEventPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtTrueMult1,minMCEventPrimTrackMeanPtTrueMult1,maxMCEventPrimTrackMeanPtTrueMult1); - fMCEventPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCEventPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); - fMCEventPrimTrackMeanPtTrueMult1->Sumw2(); - - Int_t binsMCEventPrimTrackMeanPtMult1[2]={100,150}; - Double_t minMCEventPrimTrackMeanPtMult1[2]={0.,-0.5}; - Double_t maxMCEventPrimTrackMeanPtMult1[2]={10.,149.5}; - snprintf(name,256,"fMCEventPrimTrackMeanPtMult1"); - snprintf(title,256,"event :mult"); - - fMCEventPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtMult1,minMCEventPrimTrackMeanPtMult1,maxMCEventPrimTrackMeanPtMult1); - fMCEventPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); - fMCEventPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); - fMCEventPrimTrackMeanPtMult1->Sumw2(); - - - - - - - // - for(Int_t i=0; iSetBinEdges(0,binsPt); - fRecTrackHist1[i]->SetBinEdges(1,binsEta); - fRecTrackHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fRecTrackHist1[i]->GetAxis(1)->SetTitle("Eta"); - fRecTrackHist1[i]->GetAxis(2)->SetTitle("Phi (rad)"); - fRecTrackHist1[i]->Sumw2(); - } - - // - Int_t binsCorrRecTrackMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minCorrRecTrackMultHist1[3]={0.,-1.,-0.5}; - Double_t maxCorrRecTrackMultHist1[3]={20.,1.,149.5}; - - Int_t binsCorrRecTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; - Double_t minCorrRecTrackTrueMultHist1[3]={0.,-1.,-0.5}; - Double_t maxCorrRecTrackTrueMultHist1[3]={20.,1.,149.5}; - - Int_t binsCorrRecTrackTrueMultHist2[3]={ptNbins,150,150}; - Double_t minCorrRecTrackTrueMultHist2[3]={0.,-0.5,-0.5}; - Double_t maxCorrRecTrackTrueMultHist2[3]={20.,149.5,149.5}; - - // - Int_t binsCorrRecTrackMeanPtMultHist1[2]={100,150}; - Double_t minCorrRecTrackMeanPtMultHist1[2]={0.,-0.5}; - Double_t maxCorrRecTrackMeanPtMultHist1[2]={10.,149.5}; - - Int_t binsCorrRecTrackMeanPtTrueMultHist1[2]={100,150}; - Double_t minCorrRecTrackMeanPtTrueMultHist1[2]={0.,-0.5}; - Double_t maxCorrRecTrackMeanPtTrueMultHist1[2]={10.,149.5}; - - Int_t binsCorrRecTrackPt1[1]={200}; - Double_t minCorrRecTrackPt1[1]={0.}; - Double_t maxCorrRecTrackPt1[1]={10.}; - - for(Int_t i=0; i<8; i++) - { - // THnSparse track histograms - snprintf(name,256,"fCorrRecTrackMultHist1_%d",i); - snprintf(title,256,"Pt:Eta:mult"); - fCorrRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackMultHist1,minCorrRecTrackMultHist1,maxCorrRecTrackMultHist1); - fCorrRecTrackMultHist1[i]->SetBinEdges(0,binsPt); - fCorrRecTrackMultHist1[i]->SetBinEdges(1,binsEta); - fCorrRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fCorrRecTrackMultHist1[i]->GetAxis(1)->SetTitle("Eta"); - fCorrRecTrackMultHist1[i]->GetAxis(2)->SetTitle("multiplicity"); - fCorrRecTrackMultHist1[i]->Sumw2(); - - // THnSparse track histograms - snprintf(name,256,"fCorrRecTrackTrueMultHist1_%d",i); - snprintf(title,256,"Pt:Eta:true_mult"); - fCorrRecTrackTrueMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist1,minCorrRecTrackTrueMultHist1,maxCorrRecTrackTrueMultHist1); - fCorrRecTrackTrueMultHist1[i]->SetBinEdges(0,binsPt); - fCorrRecTrackTrueMultHist1[i]->SetBinEdges(1,binsEta); - fCorrRecTrackTrueMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fCorrRecTrackTrueMultHist1[i]->GetAxis(1)->SetTitle("Eta"); - fCorrRecTrackTrueMultHist1[i]->GetAxis(2)->SetTitle("true multiplicity"); - fCorrRecTrackTrueMultHist1[i]->Sumw2(); - - // - snprintf(name,256,"fCorrRecTrackTrueMultHist2_%d",i); - snprintf(title,256,"Pt:mult:true_mult"); - fCorrRecTrackTrueMultHist2[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist2,minCorrRecTrackTrueMultHist2,maxCorrRecTrackTrueMultHist2); - fCorrRecTrackTrueMultHist2[i]->SetBinEdges(0,binsPt); - fCorrRecTrackTrueMultHist2[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fCorrRecTrackTrueMultHist2[i]->GetAxis(1)->SetTitle("multiplicity"); - fCorrRecTrackTrueMultHist2[i]->GetAxis(2)->SetTitle("true multiplicity"); - fCorrRecTrackTrueMultHist2[i]->Sumw2(); - - // THnSparse track histograms - snprintf(name,256,"fCorrRecTrackMeanPtMultHist1_%d",i); - snprintf(title,256,":mult"); - fCorrRecTrackMeanPtMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtMultHist1,minCorrRecTrackMeanPtMultHist1,maxCorrRecTrackMeanPtMultHist1); - fCorrRecTrackMeanPtMultHist1[i]->GetAxis(0)->SetTitle(" (GeV/c)"); - fCorrRecTrackMeanPtMultHist1[i]->GetAxis(1)->SetTitle("multiplicity"); - fCorrRecTrackMeanPtMultHist1[i]->Sumw2(); - - // THnSparse track histograms - snprintf(name,256,"fCorrRecTrackMeanPtTrueMultHist1_%d",i); - snprintf(title,256,":true_mult"); - fCorrRecTrackMeanPtTrueMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtTrueMultHist1,minCorrRecTrackMeanPtTrueMultHist1,maxCorrRecTrackMeanPtTrueMultHist1); - fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(0)->SetTitle(" (GeV/c)"); - fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(1)->SetTitle("true multiplicity"); - fCorrRecTrackMeanPtTrueMultHist1[i]->Sumw2(); - - snprintf(name,256,"fCorrRecTrackPt1_%d",i); - snprintf(title,256,"pt small bining"); - fCorrRecTrackPt1[i] = new THnSparseF(name,title,1,binsCorrRecTrackPt1,minCorrRecTrackPt1,maxCorrRecTrackPt1); - fCorrRecTrackPt1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); - fCorrRecTrackPt1[i]->Sumw2(); - - } - - Int_t binsEventMatrix[2]={zvNbins,150}; - Double_t minEventMatrix[2]={-25.,-0.5}; - Double_t maxEventMatrix[2]={25.,149.5}; - - fMCAllEventMultHist1 = new THnSparseF("fMCAllEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); - fMCAllEventMultHist1->SetBinEdges(0,binsZv); - fMCAllEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); - fMCAllEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); - fMCAllEventMultHist1->Sumw2(); - - fMCAllNDEventMultHist1 = new THnSparseF("fMCAllNDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); - fMCAllNDEventMultHist1->SetBinEdges(0,binsZv); - fMCAllNDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); - fMCAllNDEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); - fMCAllNDEventMultHist1->Sumw2(); - - fMCAllNSDEventMultHist1 = new THnSparseF("fMCAllNSDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); - fMCAllNSDEventMultHist1->SetBinEdges(0,binsZv); - fMCAllNSDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); - fMCAllNSDEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); - fMCAllNSDEventMultHist1->Sumw2(); - - fMCTriggerMultHist1 = new THnSparseF("fMCTriggerMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); - fMCTriggerMultHist1->SetBinEdges(0,binsZv); - fMCTriggerMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); - fMCTriggerMultHist1->GetAxis(1)->SetTitle("multiplicity"); - fMCTriggerMultHist1->Sumw2(); - - fMCEventMultHist1 = new THnSparseF("fMCEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); - fMCEventMultHist1->SetBinEdges(0,binsZv); - fMCEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); - fMCEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); - fMCEventMultHist1->Sumw2(); - - for(Int_t i=0; i<5; i++) - { - // event corrected histograms - snprintf(name,256,"fCorrRecEventHist1_%d",i); - snprintf(title,256,"mcZv:mult"); - fCorrRecEventHist1[i] = new THnSparseF("fCorrRecEventHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); - fCorrRecEventHist1[i]->SetBinEdges(0,binsZv); - fCorrRecEventHist1[i]->GetAxis(0)->SetTitle("Zv (cm)"); - fCorrRecEventHist1[i]->GetAxis(1)->SetTitle("multiplicity"); - fCorrRecEventHist1[i]->Sumw2(); - - // empty event corrected histograms - snprintf(name,256,"fCorrRecEventHist2_%d",i); - snprintf(title,256,"mcZv:mult"); - fCorrRecEventHist2[i] = new THnSparseF("fCorrRecEventHist2","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); - fCorrRecEventHist2[i]->SetBinEdges(0,binsZv); - fCorrRecEventHist2[i]->GetAxis(0)->SetTitle("Zv (cm)"); - fCorrRecEventHist2[i]->GetAxis(1)->SetTitle("multiplicity"); - fCorrRecEventHist2[i]->Sumw2(); - } - - // - // cosmics histo - // - Int_t binsCosmicsHisto[3]= {151, 300, ptNbins}; - Double_t minCosmicsHisto[3]={-1.5, -2.*TMath::Pi(), 0.0}; - Double_t maxCosmicsHisto[3]={ 1.5, 2.*TMath::Pi(), 16.0}; - snprintf(name,256,"fCosmicsHisto"); - snprintf(title,256,"deta:dphi:pt"); - - fCosmicsHisto = new THnSparseF(name,title,3,binsCosmicsHisto,minCosmicsHisto,maxCosmicsHisto); - fCosmicsHisto->SetBinEdges(2,binsPt); - fCosmicsHisto->GetAxis(0)->SetTitle("#Delta#eta"); - fCosmicsHisto->GetAxis(1)->SetTitle("#Delta#phi (rad)"); - fCosmicsHisto->GetAxis(2)->SetTitle("pt (GV/c)"); - fCosmicsHisto->Sumw2(); - - // - Int_t binsEventCount[3]={2,2,2}; - Double_t minEventCount[3]={0,0,0}; - Double_t maxEventCount[3]={2,2,2}; - fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount); - fEventCount->GetAxis(0)->SetTitle("trig"); - fEventCount->GetAxis(1)->SetTitle("trig+vert"); - fEventCount->GetAxis(2)->SetTitle("selected"); - fEventCount->Sumw2(); - - - // init output folder - fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder"); - - // init correction matrices - TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data()); - if(!file) { - AliDebug(AliLog::kError, "file with efficiency matrices not available"); - printf("file with efficiency matrices not available \n"); - } else { - TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt"); - if(!folder) { - AliDebug(AliLog::kError, "file without folderdNdPt"); - printf("file without folderdNdPt \n"); - } else { - // rec. event mult vs true multiplicity - fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix"); - if(!fEventMultCorrelationMatrix) { - Printf("No %s matrix \n", "event_mult_correlation_matrix"); - return; - } - - // - // event level corrections (zv,mult_MB) - // - - // trigger bias correction (MBtoND) - fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix"); - if(!fCorrTriggerMBtoNDEventMatrix) { - Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix"); - return; - } - - // trigger bias correction (MBtoNSD) - fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix"); - if(!fCorrTriggerMBtoNSDEventMatrix) { - Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix"); - return; - } - - // trigger bias correction (MBtoInel) - fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix"); - if(!fCorrTriggerMBtoInelEventMatrix) { - Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix"); - return; - } - - // vertex reconstruction efficiency correction - fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix"); - if(!fCorrEventMatrix) { - Printf("No %s matrix \n", "zv_mult_event_corr_matrix"); - return; - } - - // - // histogram needed for empty events corrections - // - fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm"); - if(!fZvNorm) { - Printf("No %s matrix \n", "fZvNorm"); - return; - } - - fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm"); - if(!fZvEmptyEventsNorm) { - Printf("No %s matrix \n", "fZvEmptyEventsNorm"); - return; - } - - fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background"); - if(!fLHCBin0Background) { - Printf("No %s matrix \n", "fLHCBin0Background"); - return; - } - - // - // track-event level corrections (zv,pt,eta) - // - - // trigger bias correction (MBtoND) - fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix"); - if(!fCorrTriggerMBtoNDTrackEventMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix"); - return; - } - - // trigger bias correction (MBtoNSD) - fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); - if(!fCorrTriggerMBtoNSDTrackEventMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); - return; - } - - // trigger bias correction (MBtoInel) - fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix"); - if(!fCorrTriggerMBtoInelTrackEventMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix"); - return; - } - - // vertex reconstruction efficiency correction (zv,pt,eta) - fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix"); - if(!fCorrTrackEventMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix"); - return; - } - - // track reconstruction efficiency correction (zv,pt,eta) - fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix"); - if(!fCorrTrackMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix"); - return; - } - - // high pt track reconstruction efficiency correction (zv,pt,eta) - fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix"); - if(!fCorrHighPtTrackMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix"); - return; - } - - // secondary tracks contamination correction (zv,pt,eta) - fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix"); - if(!fContTrackMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix"); - return; - } - - // multiply reconstructed tracks correction - fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix"); - if(!fContMultTrackMatrix) { - Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix"); - return; - } - } - } - -} - -//_____________________________________________________________________________ -void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent) -{ - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - - // trigger selection - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *trigSel = NULL; - AliTriggerAnalysis *trigAna = NULL; // needed for andV0 - - if(evtCuts->IsTriggerRequired()) - { - // - trigSel = GetPhysicsTriggerSelection(); - if(!trigSel) { - AliDebug(AliLog::kError, "cannot get trigSel"); - return; - } - - if(IsUseMCInfo()) - { - trigSel->SetAnalyzeMC(); - - if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1) - { - // check V0 systematics (case1) - // Initialization done in the macro - trigAna = trigSel->GetTriggerAnalysis(); - if(!trigAna) - return; - - //trigAna->SetV0HwPars(15, 61.5, 86.5); - //trigAna->SetV0AdcThr(15); - - isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); - //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered); - //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - - if(GetTrigger() == AliTriggerAnalysis::kV0AND) - { - isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - //printf("V0AND %d \n",isEventTriggered); - } - } - else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2) - { - // check V0 systematics (case2 only in MC) - // Initialization done in the macro - - trigAna = trigSel->GetTriggerAnalysis(); - if(!trigAna) - return; - - //trigAna->SetV0HwPars(0, 0, 125); - //trigAna->SetV0AdcThr(0); - - isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); - //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - - if(GetTrigger() == AliTriggerAnalysis::kV0AND) - { - isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - //printf("V0AND %d \n",isEventTriggered); - } - } - else { - isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); - //printf("MB1 %d \n",isEventTriggered); - - if(GetTrigger() == AliTriggerAnalysis::kV0AND) - { - trigAna = trigSel->GetTriggerAnalysis(); - if(!trigAna) - return; - - isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - //printf("V0AND %d \n",isEventTriggered); - } - } - } - else { - // - // 0-multiplicity bin for LHC background correction - // - if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) - { - trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx); - } else { - trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx); - } - - if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1) - { - // check V0 systematics (case1) - // Initialization done in the macro - trigAna = trigSel->GetTriggerAnalysis(); - if(!trigAna) - return; - - //trigAna->SetV0HwPars(15, 61.5, 86.5); - //trigAna->SetV0AdcThr(15); - - isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); - //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - - if(GetTrigger() == AliTriggerAnalysis::kV0AND) - { - isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - //printf("V0AND %d \n",isEventTriggered); - } - } - else { - isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); - //printf("MB1 %d \n",isEventTriggered); - - if(GetTrigger() == AliTriggerAnalysis::kV0AND) - { - trigAna = trigSel->GetTriggerAnalysis(); - if(!trigAna) - return; - - isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); - //printf("V0AND %d \n",isEventTriggered); - } - } - } - } - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; - Int_t multMCTrueTracks = 0; - - if(IsUseMCInfo()) - { - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - - // get event type (ND=0x1, DD=0x2, SD=0x4) - evtType = AliPWG0Helper::GetEventProcessType(header); - //Printf("evtType %d \n", evtType); - AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - // Fill MC event histogram - Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; - fMCEventHist1->Fill(vMCEventHist1); - - // multipliticy of all MC primary tracks - // in Zvtx, eta ranges - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); - - } // end bUseMC - - // get reconstructed vertex - const AliESDVertex* vtxESD = 0; - Bool_t isRecVertex = kFALSE; - if(evtCuts->IsRecVertexRequired()) - { - Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); - Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); - vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); - if(!vtxESD) return; - isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); - } - - if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) { - vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC"); - if(!vtxESD) return; - isRecVertex = kTRUE; - } - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - // vertex contributors - Int_t multMBTracks = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) - { - if(vtxESD->GetStatus() && isRecVertex) - multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts); - } - else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || - GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ) - { - const AliMultiplicity* mult = esdEvent->GetMultiplicity(); - //if(mult && vtxESD->GetStatus() && isRecVertex) - if(mult) - multMBTracks = mult->GetNumberOfTracklets(); - - } - else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || - GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) - { - if(vtxESD && vtxESD->GetStatus() && isRecVertex) - multMBTracks = vtxESD->GetNContributors(); - - } - else { - AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode())); - return; - } - - Bool_t isEventSelected = kTRUE; - if(evtCuts->IsEventSelectedRequired()) - { - // select events with at least - // one prompt track in acceptance - // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies - - isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts); - //printf("isEventSelected %d \n", isEventSelected); - } - - Bool_t isTrigAndVertex = isEventTriggered && isEventOK; - Double_t vEventCount[3] = { isEventTriggered, isTrigAndVertex, isEventSelected }; - fEventCount->Fill(vEventCount); - - // - // correct event and track histograms - // - TObjArray *allChargedTracks=0; - Int_t multRec=0, multRecTemp=0; - Int_t *labelsRec=0; - Bool_t isCosmic = kFALSE; - - - if(isEventOK && isEventTriggered && isEventSelected) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - labelsRec = new Int_t[entries]; - - // calculate mult of reconstructed tracks - - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - // cosmics analysis - isCosmic = kFALSE; - if( GetParticleMode()==AlidNdPtHelper::kCosmic ) - { - for(Int_t j=0; jAt(j); - if(!track1) continue; - if(track1->Charge()==0) continue; - - if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && - esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) - { - isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1); - } - if(isCosmic) - { - Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() }; - fCosmicsHisto->Fill(vCosmicsHisto); - } - } - - if(!isCosmic) continue; - } - - if(esdTrackCuts->AcceptTrack(track)) - { - if(accCuts->AcceptTrack(track)) multRecTemp++; - } - } - - // - for(Int_t i=0; iAt(i); - if(!track) continue; - if(track->Charge()==0) continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) - continue; - - // track-level corrections - if(!esdTrackCuts->AcceptTrack(track)) continue; - //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue; - - // cosmics analysis - isCosmic = kFALSE; - if( GetParticleMode()==AlidNdPtHelper::kCosmic ) - { - for(Int_t j=0; jAt(j); - if(!track1) continue; - if(track1->Charge()==0) continue; - - if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && - esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) - { - isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1); - } - } - if(!isCosmic) continue; - } - - Bool_t isOK = kFALSE; - Double_t x[3]; track->GetXYZ(x); - Double_t b[3]; AliTracker::GetBxByBz(x,b); - - // - // if TPC-ITS hybrid tracking (kTPCITSHybrid) - // replace track parameters with TPC-ony track parameters - // - if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) - { - // Relate TPC-only tracks to Tracks or SPD vertex - isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); - if(!isOK) continue; - - // replace esd track parameters with TPCinner - AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); - if (!tpcTrack) return; - track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); - - if(tpcTrack) delete tpcTrack; - } - - // - if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate) - { - // - // update track parameters - // - AliExternalTrackParam cParam; - isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam); - if(!isOK) continue; - track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); - - if(accCuts->AcceptTrack(track)) { - FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks); - labelsRec[multRec] = TMath::Abs(track->GetLabel()); - multRec++; - } - } - else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) - { - // - // Replace rec with MC - // - if(accCuts->AcceptTrack(track)) { - FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks); - labelsRec[multRec] = TMath::Abs(track->GetLabel()); - multRec++; - } - } - else { - // - // all the rest tracking scenarios - // - if(accCuts->AcceptTrack(track)) { - FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks); - labelsRec[multRec] = TMath::Abs(track->GetLabel()); - multRec++; - } - } - } - - // event-level corrections - if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) - { - FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks); - } - else { - FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks); - } - - // calculate meanPt from the event - Double_t meanPtMult[8] = {0}; - for (Int_t i = 0; i<8; i++) { - if(!fCorrRecTrackMultHist1[i]) continue; - TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0); - if(!hp) continue; - meanPtMult[i] = hp->GetMean(); - Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp}; - fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1); - - if( IsUseMCInfo() ) { - Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks}; - fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1); - } - - // reset pt histo for the next event - if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset(); - if(hp) delete hp; - } - - // control event histograms - Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()}; - fRecEventHist1->Fill(vRecEventHist1); - - // correlation track multiplicity vs MB track multiplicity - Double_t vRecEventMultHist1[3] = {multRec, multMBTracks}; - fRecEventMultHist1->Fill(vRecEventMultHist1); - } - - // empty events corrections - // no reconstructed zv - if( isEventTriggered && multMBTracks==0 && isEventSelected ) - { - if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) - { - FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks); - } - else { - Double_t zv = fZvNorm->GetRandom(); - if(zv>evtCuts->GetMinZv() && zvGetMaxZv()) - FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks); - } - } - - if(IsUseMCInfo()) - { - if(!mcEvent) return; - - Bool_t isMCEventSelected = kTRUE; - if(evtCuts->IsEventSelectedRequired()) - { - // select events with at least - // one MC primary track in acceptance - // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies - isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent); - //printf("isMCEventSelected %d \n", isMCEventSelected); - } - - // select MC events - if(evtCuts->AcceptMCEvent(mcEvent) && isMCEventSelected) - { - // - // event histograms - // - Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks}; - fMCAllEventMultHist1->Fill(vMCEventMatrix); - - if(evtType == AliPWG0Helper::kND) { - fMCAllNDEventMultHist1->Fill(vMCEventMatrix); - } - if(evtType != AliPWG0Helper::kSD) { - fMCAllNSDEventMultHist1->Fill(vMCEventMatrix); - } - if(isEventTriggered) { - fMCTriggerMultHist1->Fill(vMCEventMatrix); - } - if(isEventTriggered && isEventOK) { - fMCEventMultHist1->Fill(vMCEventMatrix); - } - - // - // MC histograms for efficiency studies - // - Double_t sumPtMC = 0; - Int_t nPart = stack->GetNtrack(); - for (Int_t iMc = 0; iMc < nPart; ++iMc) - { - // print MC stack info - //AlidNdPtHelper::PrintMCInfo(stack,iMc); - - TParticle* particle = stack->Particle(iMc); - if (!particle) - continue; - - // only charged particles - - if(!particle->GetPDG()) continue; - Double_t charge = particle->GetPDG()->Charge()/3.; - if (TMath::Abs(charge) < 0.001) - continue; - - // only postive charged - if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) - continue; - - // only negative charged - if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) - continue; - - // physical primary - Bool_t prim = stack->IsPhysicalPrimary(iMc); - if(!prim) continue; - - // all primaries in acceptance - if(!accCuts->AcceptTrack(particle)) continue; - - Double_t gpt = particle->Pt(); - Double_t geta = particle->Eta(); - - // sum up pt in the event - sumPtMC +=gpt; - - Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp}; - Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks}; - Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks}; - - fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); - fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); - fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); - - if(evtType == AliPWG0Helper::kND) { - fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); - fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); - fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); - } - if(evtType != AliPWG0Helper::kSD) { - fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); - fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); - fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); - } - if(isEventTriggered) { - fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); - fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); - fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); - } - if(isEventTriggered && isEventOK) { - fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); - fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); - fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); - } - } - - // - // calculate in the event - // - Double_t meanPtMCMult = 0; - Double_t meanPtMCTrueMult = 0; - if(multRecTemp) { - meanPtMCMult = sumPtMC/multRecTemp; - } - if(multMCTrueTracks) { - meanPtMCTrueMult = sumPtMC/multMCTrueTracks; - } - - Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp}; - Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks}; - - fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); - fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); - - if(evtType == AliPWG0Helper::kND) { - fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); - fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); - } - if(evtType != AliPWG0Helper::kSD) { - fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); - fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); - } - if(isEventTriggered) { - fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); - fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); - } - if(isEventTriggered && isEventOK) { - fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); - fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); - } - } - } // end bUseMC - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - if(labelsRec) delete [] labelsRec; labelsRec = 0; - - if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD; -} - -//_____________________________________________________________________________ -void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const -{ - // - // Fill corrected histograms - // - - Double_t vEventMatrix[2] = {zv,multMBTracks}; - // - // Correct for efficiency - // - if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0) - { - Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks); - Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks); - Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks); - Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks); - //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF); - - fCorrRecEventHist1[0]->Fill(vEventMatrix); - fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF); - fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF); - fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF); - fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF); - } - - if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events - { - Double_t factLHCBack = 1.; - if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1); - - - Int_t bin = fZvEmptyEventsNorm->FindBin(zv); - Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin); - - Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks); - Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks); - Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks); - //printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0); - - fCorrRecEventHist2[0]->Fill(vEventMatrix); - fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ); - fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0); - fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0); - fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0); - } -} - -//_____________________________________________________________________________ -void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const -{ - // - // Fill ESD track and MC histograms - // - if(!esdTrack) return; - - //Float_t q = esdTrack->Charge(); - Float_t pt = esdTrack->Pt(); - Float_t eta = esdTrack->Eta(); - Float_t phi = esdTrack->Phi(); - - if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec) - { - Int_t label = TMath::Abs(esdTrack->GetLabel()); - - TParticle* particle = stack->Particle(label); - if(!particle) return; - - if(!particle->GetPDG()) return; - Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 - if(TMath::Abs(gq)<0.001) return; - Float_t gpt = particle->Pt(); - Float_t geta = particle->Eta(); - Float_t gphi = particle->Phi(); - - // replace reconstructed values with MC - pt = gpt; - eta = geta; - phi = gphi; - } - - // - // Fill histograms - // - Double_t values[3] = {pt,eta,phi}; - fRecTrackHist1[trackObj]->Fill(values); - - // - // Correct for contamination and efficiency - // - if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec) - { - // track level corrections - Double_t trackEffF = 1.0; - if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta); - else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta); - - Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta); - Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta); - //printf("zv %f, pt %f, eta %f \n",zv,pt,eta); - //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF); - - // track-event level corrections - Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta); - Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta); - Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta); - Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta); - //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD); - - Double_t corrF[8] = { 1.0, - trackContF, - trackContF*trackEffF, - trackContF*trackEffF*multTrackContF, - trackContF*trackEffF*multTrackContF*vertexEffF, - trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel, - trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND, - trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD - }; - - // Fill histograms - Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult}; - Double_t valCorrRecTrackPt1[1] = {pt}; - for(Int_t i=0; i<8; i++) { - fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]); - fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]); - - if( IsUseMCInfo() ) { - Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult}; - Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult}; - - fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]); - fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]); - } - } - } -} - -void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const -{ - // Fill MC histograms - if(!stack) return; - - /* - TParticle* particle = stack->Particle(label); - if(!particle) return; - - Int_t mother_pdg = -1; - TParticle* mother = 0; - - //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); - Int_t motherLabel = particle->GetMother(0); - if(motherLabel>0) mother = stack->Particle(motherLabel); - if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only - Int_t mech = particle->GetUniqueID(); // production mechanism - - if(!particle->GetPDG()) return; - Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 - Float_t gpt = particle->Pt(); - Float_t qgpt = particle->Pt() * gq; - Float_t geta = particle->Eta(); - Float_t gphi = particle->Phi(); - Float_t gpz = particle->Pz(); - - Bool_t prim = stack->IsPhysicalPrimary(label); - Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz(); - - Int_t pid=-1; - if (TMath::Abs(particle->GetPdgCode()) == kElectron) { pid = 0; } - else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; } - else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus) { pid = 2; } - else if (TMath::Abs(particle->GetPdgCode()) == kKPlus) { pid = 3; } - else if (TMath::Abs(particle->GetPdgCode()) == kProton) { pid = 4; } - else { pid = 5; } - */ - - //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech); - -} - -//_____________________________________________________________________________ -Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const { -// return correction factor F(zv,pt,eta) - - if(!hist) return 1.; - - // - TAxis *ax = hist->GetAxis(0); - TAxis *ay = hist->GetAxis(1); - TAxis *az = hist->GetAxis(2); - - Int_t binx = ax->FindBin(zv); - Int_t biny = ay->FindBin(pt); - Int_t binz = az->FindBin(eta); - Int_t dim[3] = {binx,biny,binz}; - - Double_t fact = hist->GetBinContent(dim); - -return fact; -} - -//_____________________________________________________________________________ -Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const { -// return contamination correction factor F(zv,pt,eta) - - if(!hist) return 1.0; - - // - TAxis *ax = hist->GetAxis(0); - TAxis *ay = hist->GetAxis(1); - TAxis *az = hist->GetAxis(2); - - Int_t binx = ax->FindBin(zv); - Int_t biny = ay->FindBin(pt); - Int_t binz = az->FindBin(eta); - Int_t dim[3] = {binx,biny,binz}; - - // - // additional correction for secondary - // particles with strangeness (data driven) - // - Double_t corrFact = 1.; - if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt); - //printf("pt %f, corrFact %f \n", pt, corrFact); - - Double_t fact = 1.0 - corrFact*hist->GetBinContent(dim); - //Double_t fact = hist->GetBinContent(dim); - -return fact; -} - -//_____________________________________________________________________________ -Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const { -// return correction factor F(zv,mult) - - if(!hist) return 1.; - - TAxis *ax = hist->GetAxis(0); - TAxis *ay = hist->GetAxis(1); - Int_t binx = ax->FindBin(zv); - Int_t biny = ay->FindBin(mult); - Int_t dim[2] = {binx,biny}; - - Double_t fact = hist->GetBinContent(dim); - - -return fact; -} - -//_____________________________________________________________________________ -Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const { -// return contamination correction factor F(zv,mult) - - if(!hist) return 1.; - - TAxis *ax = hist->GetAxis(0); - TAxis *ay = hist->GetAxis(1); - Int_t binx = ax->FindBin(zv); - Int_t biny = ay->FindBin(mult); - Int_t dim[2] = {binx,biny}; - Double_t fact = 1.0-hist->GetBinContent(dim); - -return fact; -} - -//_____________________________________________________________________________ -Long64_t AlidNdPtCorrection::Merge(TCollection* const list) -{ - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - - // collection of generated histograms - - // physics selection - TList *collPhysSelection = new TList; - - Int_t count=0; - while((obj = iter->Next()) != 0) { - AlidNdPtCorrection* entry = dynamic_cast(obj); - if (entry == 0) continue; - - collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); - - fEventCount->Add(entry->fEventCount); - - fMCEventHist1->Add(entry->fMCEventHist1); - fRecEventHist1->Add(entry->fRecEventHist1); - fRecEventMultHist1->Add(entry->fRecEventMultHist1); - - fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1); - fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1); - fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1); - fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1); - fMCEventMultHist1->Add(entry->fMCEventMultHist1); - - fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1); - fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1); - fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1); - fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1); - fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1); - - fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1); - fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1); - fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1); - fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1); - fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1); - - fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2); - fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2); - fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2); - fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2); - fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2); - - fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1); - fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1); - fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1); - fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1); - fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1); - - fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1); - fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1); - fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1); - fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1); - fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1); - - fCosmicsHisto->Add(entry->fCosmicsHisto); - - for(Int_t i=0; iAdd(entry->fRecTrackHist1[i]); - } - - for(Int_t i=0; i<8; i++) { - fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]); - fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]); - fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]); - - fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]); - fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]); - - fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]); - } - - for(Int_t i=0; i<5; i++) { - fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]); - fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]); - } - - count++; - } - - // - AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); - trigSelection->Merge(collPhysSelection); - if(collPhysSelection) delete collPhysSelection; - -return count; -} - -//____________________________________________________________________________ -Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const -{ -// -// get multiplicity of primary particles -// - if(!hist) return 0; - Int_t trueMult = 0; - - // 0 bins exluded - TAxis *ax = hist->GetAxis(0); - TAxis *ay = hist->GetAxis(1); - ax->SetRange(1,ax->GetNbins()); - ay->SetRange(1,ay->GetNbins()); - - // measured mult - ax->SetRangeUser((Float_t)mult,(Float_t)mult); - - // get true multiplicity - TH1D *h1 = (TH1D *)hist->Projection(1); - trueMult = (Int_t)h1->GetMean(); - - return trueMult; -} - -//_____________________________________________________________________________ -void AlidNdPtCorrection::Analyse() -{ - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TH1 *h = 0, *hs=0, *hsc=0; - TH2 *h2D = 0; - - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - // - // get cuts - // - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available"); - return; - } - - // - // set min and max values - // - //Double_t minPt = accCuts->GetMinPt(); - //Double_t maxPt = accCuts->GetMaxPt(); - Double_t minEta = accCuts->GetMinEta(); - Double_t maxEta = accCuts->GetMaxEta()-0.00001; - - printf("minEta %f, maxEta %f \n",minEta, maxEta); - - // - // LHC backgraund in all and 0-bins - // - AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); - trigSel->SaveHistograms("physics_selection"); - - // - // cosmics background histo - // - h2D = fCosmicsHisto->Projection(0,1); - h2D->SetName("deta_vs_dphi_cosmics"); - aFolderObj->Add(h2D); - - // - // event level - // - h = fCorrRecEventHist1[0]->Projection(1); - h->SetName("mult_event_not_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist1[1]->Projection(1); - h->SetName("mult_event_vertex_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist1[2]->Projection(1); - h->SetName("mult_trigger_vertex_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist1[3]->Projection(1); - h->SetName("mult_ND_trigger_vertex_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist1[4]->Projection(1); - h->SetName("mult_NSD_trigger_vertex_corrected"); - aFolderObj->Add(h); - - // empty events - h = fCorrRecEventHist2[0]->Projection(1); - h->SetName("mult_empty_event_not_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist2[1]->Projection(1); - h->SetName("mult_empty_event_vertex_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist2[2]->Projection(1); - h->SetName("mult_empty_trigger_vertex_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist2[3]->Projection(1); - h->SetName("mult_empty_ND_trigger_vertex_corrected"); - aFolderObj->Add(h); - - h = fCorrRecEventHist2[4]->Projection(1); - h->SetName("mult_empty_NSD_trigger_vertex_corrected"); - aFolderObj->Add(h); - - // - // MC available - // - if(IsUseMCInfo()) { - - // mc - h = fMCAllEventMultHist1->Projection(1); - h->SetName("mc_mult_event_acc_prim"); - aFolderObj->Add(h); - - h = fMCAllNDEventMultHist1->Projection(1); - h->SetName("mc_mult_ND_event_acc_prim"); - aFolderObj->Add(h); - - h = fMCAllNSDEventMultHist1->Projection(1); - h->SetName("mc_mult_NSD_event_acc_prim"); - aFolderObj->Add(h); - - h = fMCTriggerMultHist1->Projection(1); - h->SetName("mc_mult_trigger_acc_prim"); - aFolderObj->Add(h); - - h = fMCEventMultHist1->Projection(1); - h->SetName("mc_mult_trigger_event_acc_prim"); - aFolderObj->Add(h); - - - // - // track level - // - - // limit eta range - for(Int_t i=0;i<8;i++) { - //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt); - //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta); - } - //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); - //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); - - //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); - //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); - - //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); - //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); - - //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); - //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); - - //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); - //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); - - } // end use MC info - - // - h2D = fCorrRecTrackMultHist1[3]->Projection(1,0); - h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[4]->Projection(1,0); - h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[5]->Projection(1,0); - h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[6]->Projection(1,0); - h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[7]->Projection(1,0); - h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - - // - h2D = fCorrRecTrackMultHist1[3]->Projection(2,0); - h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[4]->Projection(2,0); - h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[5]->Projection(2,0); - h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[6]->Projection(2,0); - h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - h2D = fCorrRecTrackMultHist1[7]->Projection(2,0); - h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h2D); - - // pt axis - - h = fCorrRecTrackMultHist1[0]->Projection(0); - h->SetName("pt_rec_track_not_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_track_not_corrected_s"); - aFolderObj->Add(hs); - - // - h = fCorrRecTrackMultHist1[1]->Projection(0); - h->SetName("pt_rec_track_cont_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_track_cont_corrected_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact"); - hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s")); - aFolderObj->Add(hsc); - - // - h = fCorrRecTrackMultHist1[2]->Projection(0); - h->SetName("pt_rec_track_eff_cont_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_track_eff_cont_corrected_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact"); - hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s")); - aFolderObj->Add(hsc); - - // - h = fCorrRecTrackMultHist1[3]->Projection(0); - h->SetName("pt_rec_track_mult_eff_cont_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_track_mult_eff_cont_corrected_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact"); - hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s")); - aFolderObj->Add(hsc); - - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact"); - hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s")); - aFolderObj->Add(hsc); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm"); - hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - // - h = fCorrRecTrackMultHist1[4]->Projection(0); - h->SetName("pt_rec_event_track_mult_eff_cont_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm"); - hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - // - h = fCorrRecTrackMultHist1[5]->Projection(0); - h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm"); - hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - // positive eta - fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta); - - h = fCorrRecTrackMultHist1[5]->Projection(0); - h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta"); - hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - // negative eta - fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001); - - h = fCorrRecTrackMultHist1[5]->Projection(0); - h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta"); - hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins()); - - // - h = fCorrRecTrackMultHist1[6]->Projection(0); - h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm"); - hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - // - h = fCorrRecTrackMultHist1[7]->Projection(0); - h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm"); - hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - // - // positive eta - // - fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta); - - h = fCorrRecTrackMultHist1[7]->Projection(0); - h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta"); - hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - // - // negative eta - // - fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001); - - h = fCorrRecTrackMultHist1[7]->Projection(0); - h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta"); - hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral())); - aFolderObj->Add(hsc); - - fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins()); - - // eta axis - h = fCorrRecTrackMultHist1[0]->Projection(1); - h->SetName("eta_rec_track_not_corrected"); - aFolderObj->Add(h); - - h = fCorrRecTrackMultHist1[1]->Projection(1); - h->SetName("eta_rec_track_cont_corrected"); - aFolderObj->Add(h); - - h = fCorrRecTrackMultHist1[2]->Projection(1); - h->SetName("eta_rec_track_eff_cont_corrected"); - aFolderObj->Add(h); - - h = fCorrRecTrackMultHist1[3]->Projection(1); - h->SetName("eta_rec_track_mult_eff_cont_corrected"); - aFolderObj->Add(h); - - h = fCorrRecTrackMultHist1[4]->Projection(1); - h->SetName("eta_rec_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h); - - h = fCorrRecTrackMultHist1[5]->Projection(1); - h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h); - - h = fCorrRecTrackMultHist1[6]->Projection(1); - h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h); - - h = fCorrRecTrackMultHist1[7]->Projection(1); - h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected"); - aFolderObj->Add(h); - - - // - // MC available - // - if(IsUseMCInfo()) { - - // - h2D = fMCAllPrimTrackMultHist1->Projection(2,0); - h2D->SetName("mc_all_pt_mult_acc_prim"); - aFolderObj->Add(h2D); - - h2D = fMCAllPrimTrackMultHist1->Projection(1,0); - h2D->SetName("mc_all_eta_pt_acc_prim"); - aFolderObj->Add(h2D); - - h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0); - h2D->SetName("mc_ND_all_pt_mult_acc_prim"); - aFolderObj->Add(h2D); - - h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0); - h2D->SetName("mc_ND_all_eta_pt_acc_prim"); - aFolderObj->Add(h2D); - - h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0); - h2D->SetName("mc_NSD_all_pt_mult_acc_prim"); - aFolderObj->Add(h2D); - - h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0); - h2D->SetName("mc_NSD_all_eta_pt_acc_prim"); - aFolderObj->Add(h2D); - - // - - h = fMCAllPrimTrackMultHist1->Projection(0); - h->SetName("mc_all_pt_acc_prim"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("mc_all_pt_acc_prim_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("mc_all_pt_acc_prim_s_norm"); - hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral()); - aFolderObj->Add(hsc); - - h = fMCNDEventAllPrimTrackMultHist1->Projection(0); - h->SetName("mc_ND_all_pt_acc_prim"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("mc_ND_all_pt_acc_prim_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("mc_ND_all_pt_acc_prim_s_norm"); - hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral()); - aFolderObj->Add(hsc); - - h = fMCNSDEventAllPrimTrackMultHist1->Projection(0); - h->SetName("mc_NSD_all_pt_acc_prim"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("mc_NSD_all_pt_acc_prim_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm"); - hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral()); - aFolderObj->Add(hsc); - - h = fMCTriggerPrimTrackMultHist1->Projection(0); - h->SetName("mc_trigger_all_pt_acc_prim"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("mc_trigger_all_pt_acc_prim_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm"); - hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral()); - aFolderObj->Add(hsc); - - h = fMCEventPrimTrackMultHist1->Projection(0); - h->SetName("mc_all_pt_acc_trig_event_prim"); - hs = AlidNdPtHelper::ScaleByBinWidth(h); - hs->SetName("mc_all_pt_acc_trig_event_prim_s"); - aFolderObj->Add(hs); - - hsc = (TH1D*)hs->Clone(); - hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm"); - hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral()); - aFolderObj->Add(hsc); - - // - - h = fMCAllPrimTrackMultHist1->Projection(1); - h->SetName("mc_all_eta_acc_prim"); - aFolderObj->Add(h); - - h = fMCNDEventAllPrimTrackMultHist1->Projection(1); - h->SetName("mc_ND_all_eta_acc_prim"); - aFolderObj->Add(h); - - h = fMCNSDEventAllPrimTrackMultHist1->Projection(1); - h->SetName("mc_NSD_all_eta_acc_prim"); - aFolderObj->Add(h); - - h = fMCTriggerPrimTrackMultHist1->Projection(1); - h->SetName("mc_trigger_all_eta_acc_prim"); - aFolderObj->Add(h); - - h = fMCEventPrimTrackMultHist1->Projection(1); - h->SetName("mc_all_eta_acc_trig_event_prim"); - aFolderObj->Add(h); - - // - // calculate ratios (rec / mc) - // - - hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm"); - hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm")); - aFolderObj->Add(hsc); - - hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected"); - hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim")); - aFolderObj->Add(hsc); - - // - hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm"); - hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm")); - aFolderObj->Add(hsc); - - hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected"); - hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim")); - aFolderObj->Add(hsc); - - // - hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm"); - hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm")); - aFolderObj->Add(hsc); - - hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected"); - hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim")); - aFolderObj->Add(hsc); - - // - hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm"); - hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm")); - aFolderObj->Add(hsc); - - hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected"); - hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim")); - aFolderObj->Add(hsc); - - // track level - hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm"); - hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm")); - aFolderObj->Add(hsc); - - hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected"); - hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected"); - hsc->Sumw2(); - hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim")); - aFolderObj->Add(hsc); - - } // end MC infor available - - // export objects to analysis folder - fCorrectionFolder = ExportToFolder(aFolderObj); - - // delete only TObjArray - if(aFolderObj) delete aFolderObj; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array) -{ - // recreate folder avery time and export objects to new one - // - AlidNdPtCorrection * comp=this; - TFolder *folder = comp->GetCorrectionFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AlidNdPtCorrection class: +// +// a. functionality: +// - applies corrections on dNdPt spectra +// - fills corrected dNdPt histograms +// - fills correction control histograms +// +// b. data members: +// - dNdPt spectra before and after correction procedure +// - control histograms +// - correction matrices (must be loaded) +// +// Author: J.Otwinowski 04/11/2008 +//------------------------------------------------------------------------------ + +#include "TFile.h" +#include "TH1.h" +#include "TH2.h" + +#include "AliHeader.h" +#include "AliGenEventHeader.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliMultiplicity.h" +#include "AliTracker.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AliPhysicsSelection.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AlidNdPtAnalysis.h" +#include "AlidNdPtCorrection.h" + +using namespace std; + +ClassImp(AlidNdPtCorrection) + +//_____________________________________________________________________________ +//AlidNdPtCorrection::AlidNdPtCorrection(): TNamed(), + AlidNdPtCorrection::AlidNdPtCorrection(): AlidNdPt(), + fCorrectionFolder(0), + fMCEventHist1(0), + fRecEventHist1(0), + fRecEventMultHist1(0), + fMCAllEventMultHist1(0), + fMCAllNDEventMultHist1(0), + fMCAllNSDEventMultHist1(0), + fMCTriggerMultHist1(0), + fMCEventMultHist1(0), + fMCAllPrimTrackMultHist1(0), + fMCNDEventAllPrimTrackMultHist1(0), + fMCNSDEventAllPrimTrackMultHist1(0), + fMCTriggerPrimTrackMultHist1(0), + fMCEventPrimTrackMultHist1(0), + fMCAllPrimTrackTrueMultHist1(0), + fMCNDEventAllPrimTrackTrueMultHist1(0), + fMCNSDEventAllPrimTrackTrueMultHist1(0), + fMCTriggerPrimTrackTrueMultHist1(0), + fMCEventPrimTrackTrueMultHist1(0), + fMCAllPrimTrackTrueMultHist2(0), + fMCNDEventAllPrimTrackTrueMultHist2(0), + fMCNSDEventAllPrimTrackTrueMultHist2(0), + fMCTriggerPrimTrackTrueMultHist2(0), + fMCEventPrimTrackTrueMultHist2(0), + fMCAllPrimTrackMeanPtMult1(0), + fMCNDEventAllPrimTrackMeanPtMult1(0), + fMCNSDEventAllPrimTrackMeanPtMult1(0), + fMCTriggerPrimTrackMeanPtMult1(0), + fMCEventPrimTrackMeanPtMult1(0), + fMCAllPrimTrackMeanPtTrueMult1(0), + fMCNDEventAllPrimTrackMeanPtTrueMult1(0), + fMCNSDEventAllPrimTrackMeanPtTrueMult1(0), + fMCTriggerPrimTrackMeanPtTrueMult1(0), + fMCEventPrimTrackMeanPtTrueMult1(0), + fEventMultCorrelationMatrix(0), + fZvNorm(0), + fZvEmptyEventsNorm(0), + fLHCBin0Background(0), + fCorrTriggerMBtoInelEventMatrix(0), + fCorrTriggerMBtoNDEventMatrix(0), + fCorrTriggerMBtoNSDEventMatrix(0), + fCorrEventMatrix(0), + fCorrTriggerMBtoInelTrackEventMatrix(0), + fCorrTriggerMBtoNDTrackEventMatrix(0), + fCorrTriggerMBtoNSDTrackEventMatrix(0), + fCorrTrackEventMatrix(0), + fCorrTrackMatrix(0), + fCorrHighPtTrackMatrix(0), + fContTrackMatrix(0), + fContMultTrackMatrix(0), + fCorrMatrixFileName(""), + fCosmicsHisto(0), + fEventCount(0) +{ + // default constructor + for(Int_t i=0; iGetAxis(0)->SetTitle("mcXv (cm)"); + fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)"); + fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)"); + fMCEventHist1->Sumw2(); + + // + Int_t binsRecEventHist1[3]={100,100,140}; + Double_t minRecEventHist1[3]={-3.,-3.,-35.}; + Double_t maxRecEventHist1[3]={3.,3.,35.}; + fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1); + fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)"); + fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)"); + fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)"); + fRecEventHist1->Sumw2(); + + // + Int_t binsRecEventMultHist1[2]={150,150}; + Double_t minRecEventMultHist1[2]={-0.5,-0.5}; + Double_t maxRecEventMultHist1[2]={149.5,149.5}; + fRecEventMultHist1 = new THnSparseF("fRecEventMultHist1","track multiplicity:tracklet multiplicity",2,binsRecEventMultHist1,minRecEventMultHist1,maxRecEventMultHist1); + fRecEventMultHist1->GetAxis(0)->SetTitle("track_mult"); + fRecEventMultHist1->GetAxis(1)->SetTitle("tracklet_mult"); + fRecEventMultHist1->Sumw2(); + + // + char name[256]; + char title[256]; + + Int_t binsMCAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCAllPrimTrackMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCAllPrimTrackMultHist1"); + snprintf(title,256,"mcPt:mcEta:multiplicity"); + + fMCAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackMultHist1,minMCAllPrimTrackMultHist1,maxMCAllPrimTrackMultHist1); + fMCAllPrimTrackMultHist1->SetBinEdges(0,binsPt); + fMCAllPrimTrackMultHist1->SetBinEdges(1,binsEta); + fMCAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); + fMCAllPrimTrackMultHist1->Sumw2(); + + Int_t binsMCNDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCNDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCNDEventAllPrimTrackMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCNDEventAllPrimTrackMultHist1"); + snprintf(title,256,"mcPt:mcEta:multiplicity"); + + fMCNDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackMultHist1,minMCNDEventAllPrimTrackMultHist1,maxMCNDEventAllPrimTrackMultHist1); + fMCNDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt); + fMCNDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta); + fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCNDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); + fMCNDEventAllPrimTrackMultHist1->Sumw2(); + + Int_t binsMCNSDEventAllPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCNSDEventAllPrimTrackMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCNSDEventAllPrimTrackMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCNSDEventAllPrimTrackMultHist1"); + snprintf(title,256,"mcPt:mcEta:multiplicity"); + + fMCNSDEventAllPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackMultHist1,minMCNSDEventAllPrimTrackMultHist1,maxMCNSDEventAllPrimTrackMultHist1); + fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(0,binsPt); + fMCNSDEventAllPrimTrackMultHist1->SetBinEdges(1,binsEta); + fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCNSDEventAllPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); + fMCNSDEventAllPrimTrackMultHist1->Sumw2(); + + Int_t binsMCEventTriggerPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCEventTriggerPrimTrackMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCEventTriggerPrimTrackMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCTriggerPrimTrackMultHist1"); + snprintf(title,256,"mcPt:mcEta:multiplicity"); + + fMCTriggerPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackMultHist1,minMCEventTriggerPrimTrackMultHist1,maxMCEventTriggerPrimTrackMultHist1); + fMCTriggerPrimTrackMultHist1->SetBinEdges(0,binsPt); + fMCTriggerPrimTrackMultHist1->SetBinEdges(1,binsEta); + fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCTriggerPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); + fMCTriggerPrimTrackMultHist1->Sumw2(); + + Int_t binsMCEventPrimTrackMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCEventPrimTrackMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCEventPrimTrackMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCEventPrimTrackMultHist1"); + snprintf(title,256,"mcPt:mcEta:multiplicity"); + + fMCEventPrimTrackMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackMultHist1,minMCEventPrimTrackMultHist1,maxMCEventPrimTrackMultHist1); + fMCEventPrimTrackMultHist1->SetBinEdges(0,binsPt); + fMCEventPrimTrackMultHist1->SetBinEdges(1,binsEta); + fMCEventPrimTrackMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCEventPrimTrackMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCEventPrimTrackMultHist1->GetAxis(2)->SetTitle("multiplicity"); + fMCEventPrimTrackMultHist1->Sumw2(); + + // + // true multiplicity + // + + Int_t binsMCAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCAllPrimTrackTrueMultHist1"); + snprintf(title,256,"mcPt:mcEta:true_mult"); + + fMCAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist1,minMCAllPrimTrackTrueMultHist1,maxMCAllPrimTrackTrueMultHist1); + fMCAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); + fMCAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); + fMCAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); + fMCAllPrimTrackTrueMultHist1->Sumw2(); + + Int_t binsMCNDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCNDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCNDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCNDEventAllPrimTrackTrueMultHist1"); + snprintf(title,256,"mcPt:mcEta:true_mult"); + + fMCNDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist1,minMCNDEventAllPrimTrackTrueMultHist1,maxMCNDEventAllPrimTrackTrueMultHist1); + fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); + fMCNDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); + fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCNDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); + fMCNDEventAllPrimTrackTrueMultHist1->Sumw2(); + + Int_t binsMCNSDEventAllPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCNSDEventAllPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCNSDEventAllPrimTrackTrueMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCNSDEventAllPrimTrackTrueMultHist1"); + snprintf(title,256,"mcPt:mcEta:true_mult"); + + fMCNSDEventAllPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist1,minMCNSDEventAllPrimTrackTrueMultHist1,maxMCNSDEventAllPrimTrackTrueMultHist1); + fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); + fMCNSDEventAllPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); + fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCNSDEventAllPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); + fMCNSDEventAllPrimTrackTrueMultHist1->Sumw2(); + + Int_t binsMCEventTriggerPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCEventTriggerPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCEventTriggerPrimTrackTrueMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCTriggerPrimTrackTrueMultHist1"); + snprintf(title,256,"mcPt:mcEta:true_mult"); + + fMCTriggerPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist1,minMCEventTriggerPrimTrackTrueMultHist1,maxMCEventTriggerPrimTrackTrueMultHist1); + fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); + fMCTriggerPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); + fMCTriggerPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCTriggerPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCTriggerPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); + fMCTriggerPrimTrackTrueMultHist1->Sumw2(); + + Int_t binsMCEventPrimTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minMCEventPrimTrackTrueMultHist1[3]={0.,-1.,-0.5}; + Double_t maxMCEventPrimTrackTrueMultHist1[3]={20.,1.,149.5}; + snprintf(name,256,"fMCEventPrimTrackTrueMultHist1"); + snprintf(title,256,"mcPt:mcEta:true_mult"); + + fMCEventPrimTrackTrueMultHist1 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist1,minMCEventPrimTrackTrueMultHist1,maxMCEventPrimTrackTrueMultHist1); + fMCEventPrimTrackTrueMultHist1->SetBinEdges(0,binsPt); + fMCEventPrimTrackTrueMultHist1->SetBinEdges(1,binsEta); + fMCEventPrimTrackTrueMultHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCEventPrimTrackTrueMultHist1->GetAxis(1)->SetTitle("mcEta"); + fMCEventPrimTrackTrueMultHist1->GetAxis(2)->SetTitle("true_mult"); + fMCEventPrimTrackTrueMultHist1->Sumw2(); + + // + // mcPT vs multiplicity vs true multiplicity + // + + Int_t binsMCAllPrimTrackTrueMultHist2[3]={ptNbins,150,150}; + Double_t minMCAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; + Double_t maxMCAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; + snprintf(name,256,"fMCAllPrimTrackTrueMultHist2"); + snprintf(title,256,"mcPt:mult:true_mult"); + + fMCAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCAllPrimTrackTrueMultHist2,minMCAllPrimTrackTrueMultHist2,maxMCAllPrimTrackTrueMultHist2); + fMCAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); + fMCAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); + fMCAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); + fMCAllPrimTrackTrueMultHist2->Sumw2(); + + Int_t binsMCNDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150}; + Double_t minMCNDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; + Double_t maxMCNDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; + snprintf(name,256,"fMCNDEventAllPrimTrackTrueMultHist2"); + snprintf(title,256,"mcPt:mult:true_mult"); + + fMCNDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNDEventAllPrimTrackTrueMultHist2,minMCNDEventAllPrimTrackTrueMultHist2,maxMCNDEventAllPrimTrackTrueMultHist2); + fMCNDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); + fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); + fMCNDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); + fMCNDEventAllPrimTrackTrueMultHist2->Sumw2(); + + Int_t binsMCNSDEventAllPrimTrackTrueMultHist2[3]={ptNbins,150,150}; + Double_t minMCNSDEventAllPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; + Double_t maxMCNSDEventAllPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; + snprintf(name,256,"fMCNSDEventAllPrimTrackTrueMultHist2"); + snprintf(title,256,"mcPt:mult:true_mult"); + + fMCNSDEventAllPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCNSDEventAllPrimTrackTrueMultHist2,minMCNSDEventAllPrimTrackTrueMultHist2,maxMCNSDEventAllPrimTrackTrueMultHist2); + fMCNSDEventAllPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); + fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); + fMCNSDEventAllPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); + fMCNSDEventAllPrimTrackTrueMultHist2->Sumw2(); + + Int_t binsMCEventTriggerPrimTrackTrueMultHist2[3]={ptNbins,150,150}; + Double_t minMCEventTriggerPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; + Double_t maxMCEventTriggerPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; + snprintf(name,256,"fMCTriggerPrimTrackTrueMultHist2"); + snprintf(title,256,"mcPt:mult:true_mult"); + + fMCTriggerPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventTriggerPrimTrackTrueMultHist2,minMCEventTriggerPrimTrackTrueMultHist2,maxMCEventTriggerPrimTrackTrueMultHist2); + fMCTriggerPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); + fMCTriggerPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCTriggerPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); + fMCTriggerPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); + fMCTriggerPrimTrackTrueMultHist2->Sumw2(); + + Int_t binsMCEventPrimTrackTrueMultHist2[3]={ptNbins,150,150}; + Double_t minMCEventPrimTrackTrueMultHist2[3]={0.,-0.5,-0.5}; + Double_t maxMCEventPrimTrackTrueMultHist2[3]={20.,149.5,149.5}; + snprintf(name,256,"fMCEventPrimTrackTrueMultHist2"); + snprintf(title,256,"mcPt:mult:true_mult"); + + fMCEventPrimTrackTrueMultHist2 = new THnSparseF(name,title,3,binsMCEventPrimTrackTrueMultHist2,minMCEventPrimTrackTrueMultHist2,maxMCEventPrimTrackTrueMultHist2); + fMCEventPrimTrackTrueMultHist2->SetBinEdges(0,binsPt); + fMCEventPrimTrackTrueMultHist2->GetAxis(0)->SetTitle("mcPt (GeV/c)"); + fMCEventPrimTrackTrueMultHist2->GetAxis(1)->SetTitle("mult"); + fMCEventPrimTrackTrueMultHist2->GetAxis(2)->SetTitle("true_mult"); + fMCEventPrimTrackTrueMultHist2->Sumw2(); + + + // + // mean pt + // + Int_t binsMCAllPrimTrackMeanPtTrueMult1[2]={100,150}; + Double_t minMCAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; + Double_t maxMCAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; + snprintf(name,256,"fMCAllPrimTrackMeanPtTrueMult1"); + snprintf(title,256,"event :true_mult"); + + fMCAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtTrueMult1,minMCAllPrimTrackMeanPtTrueMult1,maxMCAllPrimTrackMeanPtTrueMult1); + fMCAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); + fMCAllPrimTrackMeanPtTrueMult1->Sumw2(); + + Int_t binsMCAllPrimTrackMeanPtMult1[2]={100,150}; + Double_t minMCAllPrimTrackMeanPtMult1[2]={0.,-0.5}; + Double_t maxMCAllPrimTrackMeanPtMult1[2]={10.,149.5}; + snprintf(name,256,"fMCAllPrimTrackMeanPtMult1"); + snprintf(title,256,"event :mult"); + + fMCAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCAllPrimTrackMeanPtMult1,minMCAllPrimTrackMeanPtMult1,maxMCAllPrimTrackMeanPtMult1); + fMCAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); + fMCAllPrimTrackMeanPtMult1->Sumw2(); + + // + Int_t binsMCNDEventAllPrimTrackMeanPtTrueMult1[2]={100,150}; + Double_t minMCNDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; + Double_t maxMCNDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; + snprintf(name,256,"fMCNDEventAllPrimTrackMeanPtTrueMult1"); + snprintf(title,256,"event :true_mult"); + + fMCNDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtTrueMult1,minMCNDEventAllPrimTrackMeanPtTrueMult1,maxMCNDEventAllPrimTrackMeanPtTrueMult1); + fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCNDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); + fMCNDEventAllPrimTrackMeanPtTrueMult1->Sumw2(); + + Int_t binsMCNDEventAllPrimTrackMeanPtMult1[2]={100,150}; + Double_t minMCNDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5}; + Double_t maxMCNDEventAllPrimTrackMeanPtMult1[2]={10.,149.5}; + snprintf(name,256,"fMCNDEventAllPrimTrackMeanPtMult1"); + snprintf(title,256,"event :mult"); + + fMCNDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNDEventAllPrimTrackMeanPtMult1,minMCNDEventAllPrimTrackMeanPtMult1,maxMCNDEventAllPrimTrackMeanPtMult1); + fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCNDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); + fMCNDEventAllPrimTrackMeanPtMult1->Sumw2(); + + // + Int_t binsMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={100,150}; + Double_t minMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; + Double_t maxMCNSDEventAllPrimTrackMeanPtTrueMult1[2]={10.,149.5}; + snprintf(name,256,"fMCNSDEventAllPrimTrackMeanPtTrueMult1"); + snprintf(title,256,"event :true_mult"); + + fMCNSDEventAllPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtTrueMult1,minMCNSDEventAllPrimTrackMeanPtTrueMult1,maxMCNSDEventAllPrimTrackMeanPtTrueMult1); + fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCNSDEventAllPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); + fMCNSDEventAllPrimTrackMeanPtTrueMult1->Sumw2(); + + Int_t binsMCNSDEventAllPrimTrackMeanPtMult1[2]={100,150}; + Double_t minMCNSDEventAllPrimTrackMeanPtMult1[2]={0.,-0.5}; + Double_t maxMCNSDEventAllPrimTrackMeanPtMult1[2]={10.,149.5}; + snprintf(name,256,"fMCNSDEventAllPrimTrackMeanPtMult1"); + snprintf(title,256,"event :mult"); + + fMCNSDEventAllPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCNSDEventAllPrimTrackMeanPtMult1,minMCNSDEventAllPrimTrackMeanPtMult1,maxMCNSDEventAllPrimTrackMeanPtMult1); + fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCNSDEventAllPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); + fMCNSDEventAllPrimTrackMeanPtMult1->Sumw2(); + + // + Int_t binsMCTriggerPrimTrackMeanPtTrueMult1[2]={100,150}; + Double_t minMCTriggerPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; + Double_t maxMCTriggerPrimTrackMeanPtTrueMult1[2]={10.,149.5}; + snprintf(name,256,"fMCTriggerPrimTrackMeanPtTrueMult1"); + snprintf(title,256,"event :true_mult"); + + fMCTriggerPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtTrueMult1,minMCTriggerPrimTrackMeanPtTrueMult1,maxMCTriggerPrimTrackMeanPtTrueMult1); + fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCTriggerPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); + fMCTriggerPrimTrackMeanPtTrueMult1->Sumw2(); + + Int_t binsMCTriggerPrimTrackMeanPtMult1[2]={100,150}; + Double_t minMCTriggerPrimTrackMeanPtMult1[2]={0.,-0.5}; + Double_t maxMCTriggerPrimTrackMeanPtMult1[2]={10.,149.5}; + snprintf(name,256,"fMCTriggerPrimTrackMeanPtMult1"); + snprintf(title,256,"event :mult"); + + fMCTriggerPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCTriggerPrimTrackMeanPtMult1,minMCTriggerPrimTrackMeanPtMult1,maxMCTriggerPrimTrackMeanPtMult1); + fMCTriggerPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCTriggerPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); + fMCTriggerPrimTrackMeanPtMult1->Sumw2(); + + // + Int_t binsMCEventPrimTrackMeanPtTrueMult1[2]={100,150}; + Double_t minMCEventPrimTrackMeanPtTrueMult1[2]={0.,-0.5}; + Double_t maxMCEventPrimTrackMeanPtTrueMult1[2]={10.,149.5}; + snprintf(name,256,"fMCEventPrimTrackMeanPtTrueMult1"); + snprintf(title,256,"event :true_mult"); + + fMCEventPrimTrackMeanPtTrueMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtTrueMult1,minMCEventPrimTrackMeanPtTrueMult1,maxMCEventPrimTrackMeanPtTrueMult1); + fMCEventPrimTrackMeanPtTrueMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCEventPrimTrackMeanPtTrueMult1->GetAxis(1)->SetTitle("true_mult"); + fMCEventPrimTrackMeanPtTrueMult1->Sumw2(); + + Int_t binsMCEventPrimTrackMeanPtMult1[2]={100,150}; + Double_t minMCEventPrimTrackMeanPtMult1[2]={0.,-0.5}; + Double_t maxMCEventPrimTrackMeanPtMult1[2]={10.,149.5}; + snprintf(name,256,"fMCEventPrimTrackMeanPtMult1"); + snprintf(title,256,"event :mult"); + + fMCEventPrimTrackMeanPtMult1 = new THnSparseF(name,title,2,binsMCEventPrimTrackMeanPtMult1,minMCEventPrimTrackMeanPtMult1,maxMCEventPrimTrackMeanPtMult1); + fMCEventPrimTrackMeanPtMult1->GetAxis(0)->SetTitle(" (GeV/c)"); + fMCEventPrimTrackMeanPtMult1->GetAxis(1)->SetTitle("multiplicity"); + fMCEventPrimTrackMeanPtMult1->Sumw2(); + + + + + + + // + for(Int_t i=0; iSetBinEdges(0,binsPt); + fRecTrackHist1[i]->SetBinEdges(1,binsEta); + fRecTrackHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fRecTrackHist1[i]->GetAxis(1)->SetTitle("Eta"); + fRecTrackHist1[i]->GetAxis(2)->SetTitle("Phi (rad)"); + fRecTrackHist1[i]->Sumw2(); + } + + // + Int_t binsCorrRecTrackMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minCorrRecTrackMultHist1[3]={0.,-1.,-0.5}; + Double_t maxCorrRecTrackMultHist1[3]={20.,1.,149.5}; + + Int_t binsCorrRecTrackTrueMultHist1[3]={ptNbins,etaNbins,150}; + Double_t minCorrRecTrackTrueMultHist1[3]={0.,-1.,-0.5}; + Double_t maxCorrRecTrackTrueMultHist1[3]={20.,1.,149.5}; + + Int_t binsCorrRecTrackTrueMultHist2[3]={ptNbins,150,150}; + Double_t minCorrRecTrackTrueMultHist2[3]={0.,-0.5,-0.5}; + Double_t maxCorrRecTrackTrueMultHist2[3]={20.,149.5,149.5}; + + // + Int_t binsCorrRecTrackMeanPtMultHist1[2]={100,150}; + Double_t minCorrRecTrackMeanPtMultHist1[2]={0.,-0.5}; + Double_t maxCorrRecTrackMeanPtMultHist1[2]={10.,149.5}; + + Int_t binsCorrRecTrackMeanPtTrueMultHist1[2]={100,150}; + Double_t minCorrRecTrackMeanPtTrueMultHist1[2]={0.,-0.5}; + Double_t maxCorrRecTrackMeanPtTrueMultHist1[2]={10.,149.5}; + + Int_t binsCorrRecTrackPt1[1]={200}; + Double_t minCorrRecTrackPt1[1]={0.}; + Double_t maxCorrRecTrackPt1[1]={10.}; + + for(Int_t i=0; i<8; i++) + { + // THnSparse track histograms + snprintf(name,256,"fCorrRecTrackMultHist1_%d",i); + snprintf(title,256,"Pt:Eta:mult"); + fCorrRecTrackMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackMultHist1,minCorrRecTrackMultHist1,maxCorrRecTrackMultHist1); + fCorrRecTrackMultHist1[i]->SetBinEdges(0,binsPt); + fCorrRecTrackMultHist1[i]->SetBinEdges(1,binsEta); + fCorrRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fCorrRecTrackMultHist1[i]->GetAxis(1)->SetTitle("Eta"); + fCorrRecTrackMultHist1[i]->GetAxis(2)->SetTitle("multiplicity"); + fCorrRecTrackMultHist1[i]->Sumw2(); + + // THnSparse track histograms + snprintf(name,256,"fCorrRecTrackTrueMultHist1_%d",i); + snprintf(title,256,"Pt:Eta:true_mult"); + fCorrRecTrackTrueMultHist1[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist1,minCorrRecTrackTrueMultHist1,maxCorrRecTrackTrueMultHist1); + fCorrRecTrackTrueMultHist1[i]->SetBinEdges(0,binsPt); + fCorrRecTrackTrueMultHist1[i]->SetBinEdges(1,binsEta); + fCorrRecTrackTrueMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fCorrRecTrackTrueMultHist1[i]->GetAxis(1)->SetTitle("Eta"); + fCorrRecTrackTrueMultHist1[i]->GetAxis(2)->SetTitle("true multiplicity"); + fCorrRecTrackTrueMultHist1[i]->Sumw2(); + + // + snprintf(name,256,"fCorrRecTrackTrueMultHist2_%d",i); + snprintf(title,256,"Pt:mult:true_mult"); + fCorrRecTrackTrueMultHist2[i] = new THnSparseF(name,title,3,binsCorrRecTrackTrueMultHist2,minCorrRecTrackTrueMultHist2,maxCorrRecTrackTrueMultHist2); + fCorrRecTrackTrueMultHist2[i]->SetBinEdges(0,binsPt); + fCorrRecTrackTrueMultHist2[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fCorrRecTrackTrueMultHist2[i]->GetAxis(1)->SetTitle("multiplicity"); + fCorrRecTrackTrueMultHist2[i]->GetAxis(2)->SetTitle("true multiplicity"); + fCorrRecTrackTrueMultHist2[i]->Sumw2(); + + // THnSparse track histograms + snprintf(name,256,"fCorrRecTrackMeanPtMultHist1_%d",i); + snprintf(title,256,":mult"); + fCorrRecTrackMeanPtMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtMultHist1,minCorrRecTrackMeanPtMultHist1,maxCorrRecTrackMeanPtMultHist1); + fCorrRecTrackMeanPtMultHist1[i]->GetAxis(0)->SetTitle(" (GeV/c)"); + fCorrRecTrackMeanPtMultHist1[i]->GetAxis(1)->SetTitle("multiplicity"); + fCorrRecTrackMeanPtMultHist1[i]->Sumw2(); + + // THnSparse track histograms + snprintf(name,256,"fCorrRecTrackMeanPtTrueMultHist1_%d",i); + snprintf(title,256,":true_mult"); + fCorrRecTrackMeanPtTrueMultHist1[i] = new THnSparseF(name,title,2,binsCorrRecTrackMeanPtTrueMultHist1,minCorrRecTrackMeanPtTrueMultHist1,maxCorrRecTrackMeanPtTrueMultHist1); + fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(0)->SetTitle(" (GeV/c)"); + fCorrRecTrackMeanPtTrueMultHist1[i]->GetAxis(1)->SetTitle("true multiplicity"); + fCorrRecTrackMeanPtTrueMultHist1[i]->Sumw2(); + + snprintf(name,256,"fCorrRecTrackPt1_%d",i); + snprintf(title,256,"pt small bining"); + fCorrRecTrackPt1[i] = new THnSparseF(name,title,1,binsCorrRecTrackPt1,minCorrRecTrackPt1,maxCorrRecTrackPt1); + fCorrRecTrackPt1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)"); + fCorrRecTrackPt1[i]->Sumw2(); + + } + + Int_t binsEventMatrix[2]={zvNbins,150}; + Double_t minEventMatrix[2]={-25.,-0.5}; + Double_t maxEventMatrix[2]={25.,149.5}; + + fMCAllEventMultHist1 = new THnSparseF("fMCAllEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); + fMCAllEventMultHist1->SetBinEdges(0,binsZv); + fMCAllEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); + fMCAllEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); + fMCAllEventMultHist1->Sumw2(); + + fMCAllNDEventMultHist1 = new THnSparseF("fMCAllNDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); + fMCAllNDEventMultHist1->SetBinEdges(0,binsZv); + fMCAllNDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); + fMCAllNDEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); + fMCAllNDEventMultHist1->Sumw2(); + + fMCAllNSDEventMultHist1 = new THnSparseF("fMCAllNSDEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); + fMCAllNSDEventMultHist1->SetBinEdges(0,binsZv); + fMCAllNSDEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); + fMCAllNSDEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); + fMCAllNSDEventMultHist1->Sumw2(); + + fMCTriggerMultHist1 = new THnSparseF("fMCTriggerMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); + fMCTriggerMultHist1->SetBinEdges(0,binsZv); + fMCTriggerMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); + fMCTriggerMultHist1->GetAxis(1)->SetTitle("multiplicity"); + fMCTriggerMultHist1->Sumw2(); + + fMCEventMultHist1 = new THnSparseF("fMCEventMultHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); + fMCEventMultHist1->SetBinEdges(0,binsZv); + fMCEventMultHist1->GetAxis(0)->SetTitle("mcZv (cm)"); + fMCEventMultHist1->GetAxis(1)->SetTitle("multiplicity"); + fMCEventMultHist1->Sumw2(); + + for(Int_t i=0; i<5; i++) + { + // event corrected histograms + snprintf(name,256,"fCorrRecEventHist1_%d",i); + snprintf(title,256,"mcZv:mult"); + fCorrRecEventHist1[i] = new THnSparseF("fCorrRecEventHist1","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); + fCorrRecEventHist1[i]->SetBinEdges(0,binsZv); + fCorrRecEventHist1[i]->GetAxis(0)->SetTitle("Zv (cm)"); + fCorrRecEventHist1[i]->GetAxis(1)->SetTitle("multiplicity"); + fCorrRecEventHist1[i]->Sumw2(); + + // empty event corrected histograms + snprintf(name,256,"fCorrRecEventHist2_%d",i); + snprintf(title,256,"mcZv:mult"); + fCorrRecEventHist2[i] = new THnSparseF("fCorrRecEventHist2","mcZv:mult",2,binsEventMatrix,minEventMatrix,maxEventMatrix); + fCorrRecEventHist2[i]->SetBinEdges(0,binsZv); + fCorrRecEventHist2[i]->GetAxis(0)->SetTitle("Zv (cm)"); + fCorrRecEventHist2[i]->GetAxis(1)->SetTitle("multiplicity"); + fCorrRecEventHist2[i]->Sumw2(); + } + + // + // cosmics histo + // + Int_t binsCosmicsHisto[3]= {151, 300, ptNbins}; + Double_t minCosmicsHisto[3]={-1.5, -2.*TMath::Pi(), 0.0}; + Double_t maxCosmicsHisto[3]={ 1.5, 2.*TMath::Pi(), 16.0}; + snprintf(name,256,"fCosmicsHisto"); + snprintf(title,256,"deta:dphi:pt"); + + fCosmicsHisto = new THnSparseF(name,title,3,binsCosmicsHisto,minCosmicsHisto,maxCosmicsHisto); + fCosmicsHisto->SetBinEdges(2,binsPt); + fCosmicsHisto->GetAxis(0)->SetTitle("#Delta#eta"); + fCosmicsHisto->GetAxis(1)->SetTitle("#Delta#phi (rad)"); + fCosmicsHisto->GetAxis(2)->SetTitle("pt (GV/c)"); + fCosmicsHisto->Sumw2(); + + // + Int_t binsEventCount[3]={2,2,2}; + Double_t minEventCount[3]={0,0,0}; + Double_t maxEventCount[3]={2,2,2}; + fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount); + fEventCount->GetAxis(0)->SetTitle("trig"); + fEventCount->GetAxis(1)->SetTitle("trig+vert"); + fEventCount->GetAxis(2)->SetTitle("selected"); + fEventCount->Sumw2(); + + + // init output folder + fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder"); + + // init correction matrices + TFile *file = (TFile *)TFile::Open(fCorrMatrixFileName.Data()); + if(!file) { + AliDebug(AliLog::kError, "file with efficiency matrices not available"); + printf("file with efficiency matrices not available \n"); + } else { + TFolder *folder = (TFolder *)file->FindObjectAny("folderdNdPt"); + if(!folder) { + AliDebug(AliLog::kError, "file without folderdNdPt"); + printf("file without folderdNdPt \n"); + } else { + // rec. event mult vs true multiplicity + fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix"); + if(!fEventMultCorrelationMatrix) { + Printf("No %s matrix \n", "event_mult_correlation_matrix"); + return; + } + + // + // event level corrections (zv,mult_MB) + // + + // trigger bias correction (MBtoND) + fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix"); + if(!fCorrTriggerMBtoNDEventMatrix) { + Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix"); + return; + } + + // trigger bias correction (MBtoNSD) + fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix"); + if(!fCorrTriggerMBtoNSDEventMatrix) { + Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix"); + return; + } + + // trigger bias correction (MBtoInel) + fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix"); + if(!fCorrTriggerMBtoInelEventMatrix) { + Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix"); + return; + } + + // vertex reconstruction efficiency correction + fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix"); + if(!fCorrEventMatrix) { + Printf("No %s matrix \n", "zv_mult_event_corr_matrix"); + return; + } + + // + // histogram needed for empty events corrections + // + fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm"); + if(!fZvNorm) { + Printf("No %s matrix \n", "fZvNorm"); + return; + } + + fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm"); + if(!fZvEmptyEventsNorm) { + Printf("No %s matrix \n", "fZvEmptyEventsNorm"); + return; + } + + fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background"); + if(!fLHCBin0Background) { + Printf("No %s matrix \n", "fLHCBin0Background"); + return; + } + + // + // track-event level corrections (zv,pt,eta) + // + + // trigger bias correction (MBtoND) + fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix"); + if(!fCorrTriggerMBtoNDTrackEventMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix"); + return; + } + + // trigger bias correction (MBtoNSD) + fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); + if(!fCorrTriggerMBtoNSDTrackEventMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix"); + return; + } + + // trigger bias correction (MBtoInel) + fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix"); + if(!fCorrTriggerMBtoInelTrackEventMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix"); + return; + } + + // vertex reconstruction efficiency correction (zv,pt,eta) + fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix"); + if(!fCorrTrackEventMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix"); + return; + } + + // track reconstruction efficiency correction (zv,pt,eta) + fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix"); + if(!fCorrTrackMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix"); + return; + } + + // high pt track reconstruction efficiency correction (zv,pt,eta) + fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix"); + if(!fCorrHighPtTrackMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix"); + return; + } + + // secondary tracks contamination correction (zv,pt,eta) + fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix"); + if(!fContTrackMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix"); + return; + } + + // multiply reconstructed tracks correction + fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix"); + if(!fContMultTrackMatrix) { + Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix"); + return; + } + } + } + +} + +//_____________________________________________________________________________ +void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent) +{ + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + + // trigger selection + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *trigSel = NULL; + AliTriggerAnalysis *trigAna = NULL; // needed for andV0 + + if(evtCuts->IsTriggerRequired()) + { + // + trigSel = GetPhysicsTriggerSelection(); + if(!trigSel) { + AliDebug(AliLog::kError, "cannot get trigSel"); + return; + } + + if(IsUseMCInfo()) + { + trigSel->SetAnalyzeMC(); + + if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1) + { + // check V0 systematics (case1) + // Initialization done in the macro + trigAna = trigSel->GetTriggerAnalysis(); + if(!trigAna) + return; + + //trigAna->SetV0HwPars(15, 61.5, 86.5); + //trigAna->SetV0AdcThr(15); + + isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); + //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered); + //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + + if(GetTrigger() == AliTriggerAnalysis::kV0AND) + { + isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + //printf("V0AND %d \n",isEventTriggered); + } + } + else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2) + { + // check V0 systematics (case2 only in MC) + // Initialization done in the macro + + trigAna = trigSel->GetTriggerAnalysis(); + if(!trigAna) + return; + + //trigAna->SetV0HwPars(0, 0, 125); + //trigAna->SetV0AdcThr(0); + + isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); + //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + + if(GetTrigger() == AliTriggerAnalysis::kV0AND) + { + isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + //printf("V0AND %d \n",isEventTriggered); + } + } + else { + isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); + //printf("MB1 %d \n",isEventTriggered); + + if(GetTrigger() == AliTriggerAnalysis::kV0AND) + { + trigAna = trigSel->GetTriggerAnalysis(); + if(!trigAna) + return; + + isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + //printf("V0AND %d \n",isEventTriggered); + } + } + } + else { + // + // 0-multiplicity bin for LHC background correction + // + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) + { + trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx); + } else { + trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx); + } + + if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1) + { + // check V0 systematics (case1) + // Initialization done in the macro + trigAna = trigSel->GetTriggerAnalysis(); + if(!trigAna) + return; + + //trigAna->SetV0HwPars(15, 61.5, 86.5); + //trigAna->SetV0AdcThr(15); + + isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); + //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + + if(GetTrigger() == AliTriggerAnalysis::kV0AND) + { + isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + //printf("V0AND %d \n",isEventTriggered); + } + } + else { + isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); + //printf("MB1 %d \n",isEventTriggered); + + if(GetTrigger() == AliTriggerAnalysis::kV0AND) + { + trigAna = trigSel->GetTriggerAnalysis(); + if(!trigAna) + return; + + isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger()); + //printf("V0AND %d \n",isEventTriggered); + } + } + } + } + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; + Int_t multMCTrueTracks = 0; + + if(IsUseMCInfo()) + { + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + + // get event type (ND=0x1, DD=0x2, SD=0x4) + evtType = AliPWG0Helper::GetEventProcessType(header); + //Printf("evtType %d \n", evtType); + AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + // Fill MC event histogram + Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; + fMCEventHist1->Fill(vMCEventHist1); + + // multipliticy of all MC primary tracks + // in Zvtx, eta ranges + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); + + } // end bUseMC + + // get reconstructed vertex + const AliESDVertex* vtxESD = 0; + Bool_t isRecVertex = kFALSE; + if(evtCuts->IsRecVertexRequired()) + { + Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); + Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); + vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); + if(!vtxESD) return; + isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); + } + + if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) { + vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC"); + if(!vtxESD) return; + isRecVertex = kTRUE; + } + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + // vertex contributors + Int_t multMBTracks = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) + { + if(vtxESD->GetStatus() && isRecVertex) + multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts); + } + else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || + GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ) + { + const AliMultiplicity* mult = esdEvent->GetMultiplicity(); + //if(mult && vtxESD->GetStatus() && isRecVertex) + if(mult) + multMBTracks = mult->GetNumberOfTracklets(); + + } + else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || + GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) + { + if(vtxESD && vtxESD->GetStatus() && isRecVertex) + multMBTracks = vtxESD->GetNContributors(); + + } + else { + AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode())); + return; + } + + Bool_t isEventSelected = kTRUE; + if(evtCuts->IsEventSelectedRequired()) + { + // select events with at least + // one prompt track in acceptance + // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies + + isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts); + //printf("isEventSelected %d \n", isEventSelected); + } + + Bool_t isTrigAndVertex = isEventTriggered && isEventOK; + Double_t vEventCount[3] = { isEventTriggered, isTrigAndVertex, isEventSelected }; + fEventCount->Fill(vEventCount); + + // + // correct event and track histograms + // + TObjArray *allChargedTracks=0; + Int_t multRec=0, multRecTemp=0; + Int_t *labelsRec=0; + Bool_t isCosmic = kFALSE; + + + if(isEventOK && isEventTriggered && isEventSelected) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + labelsRec = new Int_t[entries]; + + // calculate mult of reconstructed tracks + + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + // cosmics analysis + isCosmic = kFALSE; + if( GetParticleMode()==AlidNdPtHelper::kCosmic ) + { + for(Int_t j=0; jAt(j); + if(!track1) continue; + if(track1->Charge()==0) continue; + + if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && + esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) + { + isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1); + } + if(isCosmic) + { + Double_t vCosmicsHisto[3] = { track->Eta()+track1->Eta(), track->Phi()-track1->Phi(), track1->Pt() }; + fCosmicsHisto->Fill(vCosmicsHisto); + } + } + + if(!isCosmic) continue; + } + + if(esdTrackCuts->AcceptTrack(track)) + { + if(accCuts->AcceptTrack(track)) multRecTemp++; + } + } + + // + for(Int_t i=0; iAt(i); + if(!track) continue; + if(track->Charge()==0) continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) + continue; + + // track-level corrections + if(!esdTrackCuts->AcceptTrack(track)) continue; + //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue; + + // cosmics analysis + isCosmic = kFALSE; + if( GetParticleMode()==AlidNdPtHelper::kCosmic ) + { + for(Int_t j=0; jAt(j); + if(!track1) continue; + if(track1->Charge()==0) continue; + + if( esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && + esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) + { + isCosmic = AlidNdPtHelper::IsCosmicTrack(track, track1); + } + } + if(!isCosmic) continue; + } + + Bool_t isOK = kFALSE; + Double_t x[3]; track->GetXYZ(x); + Double_t b[3]; AliTracker::GetBxByBz(x,b); + + // + // if TPC-ITS hybrid tracking (kTPCITSHybrid) + // replace track parameters with TPC-ony track parameters + // + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) + { + // Relate TPC-only tracks to Tracks or SPD vertex + isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); + if(!isOK) continue; + + // replace esd track parameters with TPCinner + AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); + if (!tpcTrack) return; + track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); + + if(tpcTrack) delete tpcTrack; + } + + // + if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate) + { + // + // update track parameters + // + AliExternalTrackParam cParam; + isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam); + if(!isOK) continue; + track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); + + if(accCuts->AcceptTrack(track)) { + FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp,multMCTrueTracks); + labelsRec[multRec] = TMath::Abs(track->GetLabel()); + multRec++; + } + } + else if (GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) + { + // + // Replace rec with MC + // + if(accCuts->AcceptTrack(track)) { + FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxMC[2],multRecTemp, multMCTrueTracks); + labelsRec[multRec] = TMath::Abs(track->GetLabel()); + multRec++; + } + } + else { + // + // all the rest tracking scenarios + // + if(accCuts->AcceptTrack(track)) { + FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,vtxESD->GetZv(),multRecTemp, multMCTrueTracks); + labelsRec[multRec] = TMath::Abs(track->GetLabel()); + multRec++; + } + } + } + + // event-level corrections + if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) + { + FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks); + } + else { + FillHistograms(AlidNdPtHelper::kRecEvents,vtxESD->GetZv(),multMBTracks); + } + + // calculate meanPt from the event + Double_t meanPtMult[8] = {0}; + for (Int_t i = 0; i<8; i++) { + if(!fCorrRecTrackMultHist1[i]) continue; + TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0); + if(!hp) continue; + meanPtMult[i] = hp->GetMean(); + Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp}; + fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1); + + if( IsUseMCInfo() ) { + Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks}; + fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1); + } + + // reset pt histo for the next event + if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset(); + if(hp) delete hp; + } + + // control event histograms + Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()}; + fRecEventHist1->Fill(vRecEventHist1); + + // correlation track multiplicity vs MB track multiplicity + Double_t vRecEventMultHist1[3] = {multRec, multMBTracks}; + fRecEventMultHist1->Fill(vRecEventMultHist1); + } + + // empty events corrections + // no reconstructed zv + if( isEventTriggered && multMBTracks==0 && isEventSelected ) + { + if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) + { + FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks); + } + else { + Double_t zv = fZvNorm->GetRandom(); + if(zv>evtCuts->GetMinZv() && zvGetMaxZv()) + FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks); + } + } + + if(IsUseMCInfo()) + { + if(!mcEvent) return; + + Bool_t isMCEventSelected = kTRUE; + if(evtCuts->IsEventSelectedRequired()) + { + // select events with at least + // one MC primary track in acceptance + // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies + isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent); + //printf("isMCEventSelected %d \n", isMCEventSelected); + } + + // select MC events + if(evtCuts->AcceptMCEvent(mcEvent) && isMCEventSelected) + { + // + // event histograms + // + Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks}; + fMCAllEventMultHist1->Fill(vMCEventMatrix); + + if(evtType == AliPWG0Helper::kND) { + fMCAllNDEventMultHist1->Fill(vMCEventMatrix); + } + if(evtType != AliPWG0Helper::kSD) { + fMCAllNSDEventMultHist1->Fill(vMCEventMatrix); + } + if(isEventTriggered) { + fMCTriggerMultHist1->Fill(vMCEventMatrix); + } + if(isEventTriggered && isEventOK) { + fMCEventMultHist1->Fill(vMCEventMatrix); + } + + // + // MC histograms for efficiency studies + // + Double_t sumPtMC = 0; + Int_t nPart = stack->GetNtrack(); + for (Int_t iMc = 0; iMc < nPart; ++iMc) + { + // print MC stack info + //AlidNdPtHelper::PrintMCInfo(stack,iMc); + + TParticle* particle = stack->Particle(iMc); + if (!particle) + continue; + + // only charged particles + + if(!particle->GetPDG()) continue; + Double_t charge = particle->GetPDG()->Charge()/3.; + if (TMath::Abs(charge) < 0.001) + continue; + + // only postive charged + if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) + continue; + + // only negative charged + if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) + continue; + + // physical primary + Bool_t prim = stack->IsPhysicalPrimary(iMc); + if(!prim) continue; + + // all primaries in acceptance + if(!accCuts->AcceptTrack(particle)) continue; + + Double_t gpt = particle->Pt(); + Double_t geta = particle->Eta(); + + // sum up pt in the event + sumPtMC +=gpt; + + Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp}; + Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks}; + Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks}; + + fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); + fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); + fMCAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); + + if(evtType == AliPWG0Helper::kND) { + fMCNDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); + fMCNDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); + fMCNDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); + } + if(evtType != AliPWG0Helper::kSD) { + fMCNSDEventAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); + fMCNSDEventAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); + fMCNSDEventAllPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); + } + if(isEventTriggered) { + fMCTriggerPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); + fMCTriggerPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); + fMCTriggerPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); + } + if(isEventTriggered && isEventOK) { + fMCEventPrimTrackMultHist1->Fill(valMCAllTrackMultHist1); + fMCEventPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1); + fMCEventPrimTrackTrueMultHist2->Fill(valMCAllTrackTrueMultHist2); + } + } + + // + // calculate in the event + // + Double_t meanPtMCMult = 0; + Double_t meanPtMCTrueMult = 0; + if(multRecTemp) { + meanPtMCMult = sumPtMC/multRecTemp; + } + if(multMCTrueTracks) { + meanPtMCTrueMult = sumPtMC/multMCTrueTracks; + } + + Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp}; + Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks}; + + fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); + fMCAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); + + if(evtType == AliPWG0Helper::kND) { + fMCNDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); + fMCNDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); + } + if(evtType != AliPWG0Helper::kSD) { + fMCNSDEventAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); + fMCNSDEventAllPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); + } + if(isEventTriggered) { + fMCTriggerPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); + fMCTriggerPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); + } + if(isEventTriggered && isEventOK) { + fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult); + fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult); + } + } + } // end bUseMC + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + if(labelsRec) delete [] labelsRec; labelsRec = 0; + + if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD; +} + +//_____________________________________________________________________________ +void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBTracks) const +{ + // + // Fill corrected histograms + // + + Double_t vEventMatrix[2] = {zv,multMBTracks}; + // + // Correct for efficiency + // + if(eventObj == AlidNdPtHelper::kRecEvents && multMBTracks>0) + { + Double_t corrToMBF = GetCorrFactZvMult(fCorrEventMatrix,zv,multMBTracks); + Double_t corrToInelF = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks); + Double_t corrToNDF = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks); + Double_t corrToNSDF = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks); + //printf("corrToMBF %f, corrToInelF %f, corrToNDF %f corrToNSDF %f \n",corrToMBF,corrToInelF,corrToNDF,corrToNSDF); + + fCorrRecEventHist1[0]->Fill(vEventMatrix); + fCorrRecEventHist1[1]->Fill(vEventMatrix,corrToMBF); + fCorrRecEventHist1[2]->Fill(vEventMatrix,corrToMBF*corrToInelF); + fCorrRecEventHist1[3]->Fill(vEventMatrix,corrToMBF*corrToNDF); + fCorrRecEventHist1[4]->Fill(vEventMatrix,corrToMBF*corrToNSDF); + } + + if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events + { + Double_t factLHCBack = 1.; + if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1); + + + Int_t bin = fZvEmptyEventsNorm->FindBin(zv); + Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin); + + Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks); + Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks); + Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks); + //printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0); + + fCorrRecEventHist2[0]->Fill(vEventMatrix); + fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ); + fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0); + fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0); + fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0); + } +} + +//_____________________________________________________________________________ +void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack * const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t mult, Int_t trueMult) const +{ + // + // Fill ESD track and MC histograms + // + if(!esdTrack) return; + + //Float_t q = esdTrack->Charge(); + Float_t pt = esdTrack->Pt(); + Float_t eta = esdTrack->Eta(); + Float_t phi = esdTrack->Phi(); + + if(stack && GetAnalysisMode() == AlidNdPtHelper::kMCRec) + { + Int_t label = TMath::Abs(esdTrack->GetLabel()); + + TParticle* particle = stack->Particle(label); + if(!particle) return; + + if(!particle->GetPDG()) return; + Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 + if(TMath::Abs(gq)<0.001) return; + Float_t gpt = particle->Pt(); + Float_t geta = particle->Eta(); + Float_t gphi = particle->Phi(); + + // replace reconstructed values with MC + pt = gpt; + eta = geta; + phi = gphi; + } + + // + // Fill histograms + // + Double_t values[3] = {pt,eta,phi}; + fRecTrackHist1[trackObj]->Fill(values); + + // + // Correct for contamination and efficiency + // + if(trackObj == AlidNdPtHelper::kRecTracks || GetAnalysisMode() == AlidNdPtHelper::kMCRec) + { + // track level corrections + Double_t trackEffF = 1.0; + if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta); + else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta); + + Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta); + Double_t multTrackContF = GetContFactZvPtEta(fContMultTrackMatrix,zv,pt,eta); + //printf("zv %f, pt %f, eta %f \n",zv,pt,eta); + //printf("trackEffF %f, trackContF %f, multTrackContF %f \n", trackEffF, trackContF, multTrackContF); + + // track-event level corrections + Double_t vertexEffF = GetCorrFactZvPtEta(fCorrTrackEventMatrix,zv,pt,eta); + Double_t trigMBToInel = GetCorrFactZvPtEta(fCorrTriggerMBtoInelTrackEventMatrix,zv,pt,eta); + Double_t trigMBToND = GetCorrFactZvPtEta(fCorrTriggerMBtoNDTrackEventMatrix,zv,pt,eta); + Double_t trigMBToNSD = GetCorrFactZvPtEta(fCorrTriggerMBtoNSDTrackEventMatrix,zv,pt,eta); + //printf("vertexEffF %f, trigMBToInel %f, trigMBToNSD %f \n", vertexEffF, trigMBToInel, trigMBToNSD); + + Double_t corrF[8] = { 1.0, + trackContF, + trackContF*trackEffF, + trackContF*trackEffF*multTrackContF, + trackContF*trackEffF*multTrackContF*vertexEffF, + trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToInel, + trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToND, + trackContF*trackEffF*multTrackContF*vertexEffF*trigMBToNSD + }; + + // Fill histograms + Double_t valCorrRecTrackMultHist1[3] = {pt,eta,mult}; + Double_t valCorrRecTrackPt1[1] = {pt}; + for(Int_t i=0; i<8; i++) { + fCorrRecTrackMultHist1[i]->Fill(valCorrRecTrackMultHist1,corrF[i]); + fCorrRecTrackPt1[i]->Fill(valCorrRecTrackPt1,corrF[i]); + + if( IsUseMCInfo() ) { + Double_t valCorrRecTrackTrueMultHist1[3] = {pt,eta,trueMult}; + Double_t valCorrRecTrackTrueMultHist2[3] = {pt,mult,trueMult}; + + fCorrRecTrackTrueMultHist1[i]->Fill(valCorrRecTrackTrueMultHist1,corrF[i]); + fCorrRecTrackTrueMultHist2[i]->Fill(valCorrRecTrackTrueMultHist2,corrF[i]); + } + } + } +} + +void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/, AlidNdPtHelper::TrackObject /*trackObj*/, Int_t /*mult*/) const +{ + // Fill MC histograms + if(!stack) return; + + /* + TParticle* particle = stack->Particle(label); + if(!particle) return; + + Int_t mother_pdg = -1; + TParticle* mother = 0; + + //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label); + Int_t motherLabel = particle->GetMother(0); + if(motherLabel>0) mother = stack->Particle(motherLabel); + if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only + Int_t mech = particle->GetUniqueID(); // production mechanism + + if(!particle->GetPDG()) return; + Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 + Float_t gpt = particle->Pt(); + Float_t qgpt = particle->Pt() * gq; + Float_t geta = particle->Eta(); + Float_t gphi = particle->Phi(); + Float_t gpz = particle->Pz(); + + Bool_t prim = stack->IsPhysicalPrimary(label); + Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz(); + + Int_t pid=-1; + if (TMath::Abs(particle->GetPdgCode()) == kElectron) { pid = 0; } + else if (TMath::Abs(particle->GetPdgCode()) == kMuonMinus) { pid = 1; } + else if (TMath::Abs(particle->GetPdgCode()) == kPiPlus) { pid = 2; } + else if (TMath::Abs(particle->GetPdgCode()) == kKPlus) { pid = 3; } + else if (TMath::Abs(particle->GetPdgCode()) == kProton) { pid = 4; } + else { pid = 5; } + */ + + //if(!prim) printf("prim_mother %d, mother %d, particle %d, production mech %d\n",prim_mother->GetPdgCode(),mother->GetPdgCode(), particle->GetPdgCode(),mech); + +} + +//_____________________________________________________________________________ +Double_t AlidNdPtCorrection::GetCorrFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const { +// return correction factor F(zv,pt,eta) + + if(!hist) return 1.; + + // + TAxis *ax = hist->GetAxis(0); + TAxis *ay = hist->GetAxis(1); + TAxis *az = hist->GetAxis(2); + + Int_t binx = ax->FindBin(zv); + Int_t biny = ay->FindBin(pt); + Int_t binz = az->FindBin(eta); + Int_t dim[3] = {binx,biny,binz}; + + Double_t fact = hist->GetBinContent(dim); + +return fact; +} + +//_____________________________________________________________________________ +Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t zv, Double_t pt, Double_t eta) const { +// return contamination correction factor F(zv,pt,eta) + + if(!hist) return 1.0; + + // + TAxis *ax = hist->GetAxis(0); + TAxis *ay = hist->GetAxis(1); + TAxis *az = hist->GetAxis(2); + + Int_t binx = ax->FindBin(zv); + Int_t biny = ay->FindBin(pt); + Int_t binz = az->FindBin(eta); + Int_t dim[3] = {binx,biny,binz}; + + // + // additional correction for secondary + // particles with strangeness (data driven) + // + Double_t corrFact = 1.; + if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt); + //printf("pt %f, corrFact %f \n", pt, corrFact); + + Double_t fact = 1.0 - corrFact*hist->GetBinContent(dim); + //Double_t fact = hist->GetBinContent(dim); + +return fact; +} + +//_____________________________________________________________________________ +Double_t AlidNdPtCorrection::GetCorrFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const { +// return correction factor F(zv,mult) + + if(!hist) return 1.; + + TAxis *ax = hist->GetAxis(0); + TAxis *ay = hist->GetAxis(1); + Int_t binx = ax->FindBin(zv); + Int_t biny = ay->FindBin(mult); + Int_t dim[2] = {binx,biny}; + + Double_t fact = hist->GetBinContent(dim); + + +return fact; +} + +//_____________________________________________________________________________ +Double_t AlidNdPtCorrection::GetContFactZvMult(THnSparse * const hist, Double_t zv, Int_t mult) const { +// return contamination correction factor F(zv,mult) + + if(!hist) return 1.; + + TAxis *ax = hist->GetAxis(0); + TAxis *ay = hist->GetAxis(1); + Int_t binx = ax->FindBin(zv); + Int_t biny = ay->FindBin(mult); + Int_t dim[2] = {binx,biny}; + Double_t fact = 1.0-hist->GetBinContent(dim); + +return fact; +} + +//_____________________________________________________________________________ +Long64_t AlidNdPtCorrection::Merge(TCollection* const list) +{ + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + // collection of generated histograms + + // physics selection + TList *collPhysSelection = new TList; + + Int_t count=0; + while((obj = iter->Next()) != 0) { + AlidNdPtCorrection* entry = dynamic_cast(obj); + if (entry == 0) continue; + + collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); + + fEventCount->Add(entry->fEventCount); + + fMCEventHist1->Add(entry->fMCEventHist1); + fRecEventHist1->Add(entry->fRecEventHist1); + fRecEventMultHist1->Add(entry->fRecEventMultHist1); + + fMCAllEventMultHist1->Add(entry->fMCAllEventMultHist1); + fMCAllNDEventMultHist1->Add(entry->fMCAllNDEventMultHist1); + fMCAllNSDEventMultHist1->Add(entry->fMCAllNSDEventMultHist1); + fMCTriggerMultHist1->Add(entry->fMCTriggerMultHist1); + fMCEventMultHist1->Add(entry->fMCEventMultHist1); + + fMCAllPrimTrackMultHist1->Add(entry->fMCAllPrimTrackMultHist1); + fMCNDEventAllPrimTrackMultHist1->Add(entry->fMCNDEventAllPrimTrackMultHist1); + fMCNSDEventAllPrimTrackMultHist1->Add(entry->fMCNSDEventAllPrimTrackMultHist1); + fMCTriggerPrimTrackMultHist1->Add(entry->fMCTriggerPrimTrackMultHist1); + fMCEventPrimTrackMultHist1->Add(entry->fMCEventPrimTrackMultHist1); + + fMCAllPrimTrackTrueMultHist1->Add(entry->fMCAllPrimTrackTrueMultHist1); + fMCNDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNDEventAllPrimTrackTrueMultHist1); + fMCNSDEventAllPrimTrackTrueMultHist1->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist1); + fMCTriggerPrimTrackTrueMultHist1->Add(entry->fMCTriggerPrimTrackTrueMultHist1); + fMCEventPrimTrackTrueMultHist1->Add(entry->fMCEventPrimTrackTrueMultHist1); + + fMCAllPrimTrackTrueMultHist2->Add(entry->fMCAllPrimTrackTrueMultHist2); + fMCNDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNDEventAllPrimTrackTrueMultHist2); + fMCNSDEventAllPrimTrackTrueMultHist2->Add(entry->fMCNSDEventAllPrimTrackTrueMultHist2); + fMCTriggerPrimTrackTrueMultHist2->Add(entry->fMCTriggerPrimTrackTrueMultHist2); + fMCEventPrimTrackTrueMultHist2->Add(entry->fMCEventPrimTrackTrueMultHist2); + + fMCAllPrimTrackMeanPtMult1->Add(entry->fMCAllPrimTrackMeanPtMult1); + fMCNDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtMult1); + fMCNSDEventAllPrimTrackMeanPtMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtMult1); + fMCTriggerPrimTrackMeanPtMult1->Add(entry->fMCTriggerPrimTrackMeanPtMult1); + fMCEventPrimTrackMeanPtMult1->Add(entry->fMCEventPrimTrackMeanPtMult1); + + fMCAllPrimTrackMeanPtTrueMult1->Add(entry->fMCAllPrimTrackMeanPtTrueMult1); + fMCNDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNDEventAllPrimTrackMeanPtTrueMult1); + fMCNSDEventAllPrimTrackMeanPtTrueMult1->Add(entry->fMCNSDEventAllPrimTrackMeanPtTrueMult1); + fMCTriggerPrimTrackMeanPtTrueMult1->Add(entry->fMCTriggerPrimTrackMeanPtTrueMult1); + fMCEventPrimTrackMeanPtTrueMult1->Add(entry->fMCEventPrimTrackMeanPtTrueMult1); + + fCosmicsHisto->Add(entry->fCosmicsHisto); + + for(Int_t i=0; iAdd(entry->fRecTrackHist1[i]); + } + + for(Int_t i=0; i<8; i++) { + fCorrRecTrackMultHist1[i]->Add(entry->fCorrRecTrackMultHist1[i]); + fCorrRecTrackTrueMultHist1[i]->Add(entry->fCorrRecTrackTrueMultHist1[i]); + fCorrRecTrackTrueMultHist2[i]->Add(entry->fCorrRecTrackTrueMultHist2[i]); + + fCorrRecTrackMeanPtMultHist1[i]->Add(entry->fCorrRecTrackMeanPtMultHist1[i]); + fCorrRecTrackMeanPtTrueMultHist1[i]->Add(entry->fCorrRecTrackMeanPtTrueMultHist1[i]); + + fCorrRecTrackPt1[i]->Add(entry->fCorrRecTrackPt1[i]); + } + + for(Int_t i=0; i<5; i++) { + fCorrRecEventHist1[i]->Add(entry->fCorrRecEventHist1[i]); + fCorrRecEventHist2[i]->Add(entry->fCorrRecEventHist2[i]); + } + + count++; + } + + // + AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); + trigSelection->Merge(collPhysSelection); + if(collPhysSelection) delete collPhysSelection; + +return count; +} + +//____________________________________________________________________________ +Int_t AlidNdPtCorrection::GetTrueMult(THnSparse * const hist, Int_t mult) const +{ +// +// get multiplicity of primary particles +// + if(!hist) return 0; + Int_t trueMult = 0; + + // 0 bins exluded + TAxis *ax = hist->GetAxis(0); + TAxis *ay = hist->GetAxis(1); + ax->SetRange(1,ax->GetNbins()); + ay->SetRange(1,ay->GetNbins()); + + // measured mult + ax->SetRangeUser((Float_t)mult,(Float_t)mult); + + // get true multiplicity + TH1D *h1 = (TH1D *)hist->Projection(1); + trueMult = (Int_t)h1->GetMean(); + + return trueMult; +} + +//_____________________________________________________________________________ +void AlidNdPtCorrection::Analyse() +{ + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TH1 *h = 0, *hs=0, *hsc=0; + TH2 *h2D = 0; + + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + // + // get cuts + // + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available"); + return; + } + + // + // set min and max values + // + //Double_t minPt = accCuts->GetMinPt(); + //Double_t maxPt = accCuts->GetMaxPt(); + Double_t minEta = accCuts->GetMinEta(); + Double_t maxEta = accCuts->GetMaxEta()-0.00001; + + printf("minEta %f, maxEta %f \n",minEta, maxEta); + + // + // LHC backgraund in all and 0-bins + // + AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); + trigSel->SaveHistograms("physics_selection"); + + // + // cosmics background histo + // + h2D = fCosmicsHisto->Projection(0,1); + h2D->SetName("deta_vs_dphi_cosmics"); + aFolderObj->Add(h2D); + + // + // event level + // + h = fCorrRecEventHist1[0]->Projection(1); + h->SetName("mult_event_not_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist1[1]->Projection(1); + h->SetName("mult_event_vertex_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist1[2]->Projection(1); + h->SetName("mult_trigger_vertex_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist1[3]->Projection(1); + h->SetName("mult_ND_trigger_vertex_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist1[4]->Projection(1); + h->SetName("mult_NSD_trigger_vertex_corrected"); + aFolderObj->Add(h); + + // empty events + h = fCorrRecEventHist2[0]->Projection(1); + h->SetName("mult_empty_event_not_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist2[1]->Projection(1); + h->SetName("mult_empty_event_vertex_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist2[2]->Projection(1); + h->SetName("mult_empty_trigger_vertex_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist2[3]->Projection(1); + h->SetName("mult_empty_ND_trigger_vertex_corrected"); + aFolderObj->Add(h); + + h = fCorrRecEventHist2[4]->Projection(1); + h->SetName("mult_empty_NSD_trigger_vertex_corrected"); + aFolderObj->Add(h); + + // + // MC available + // + if(IsUseMCInfo()) { + + // mc + h = fMCAllEventMultHist1->Projection(1); + h->SetName("mc_mult_event_acc_prim"); + aFolderObj->Add(h); + + h = fMCAllNDEventMultHist1->Projection(1); + h->SetName("mc_mult_ND_event_acc_prim"); + aFolderObj->Add(h); + + h = fMCAllNSDEventMultHist1->Projection(1); + h->SetName("mc_mult_NSD_event_acc_prim"); + aFolderObj->Add(h); + + h = fMCTriggerMultHist1->Projection(1); + h->SetName("mc_mult_trigger_acc_prim"); + aFolderObj->Add(h); + + h = fMCEventMultHist1->Projection(1); + h->SetName("mc_mult_trigger_event_acc_prim"); + aFolderObj->Add(h); + + + // + // track level + // + + // limit eta range + for(Int_t i=0;i<8;i++) { + //fCorrRecTrackMultHist1[i]->GetAxis(0)->SetRangeUser(minPt,maxPt); + //fCorrRecTrackMultHist1[i]->GetAxis(1)->SetRangeUser(minEta,maxEta); + } + //fMCAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); + //fMCAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); + + //fMCNDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); + //fMCNDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); + + //fMCNSDEventAllPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); + //fMCNSDEventAllPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); + + //fMCTriggerPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); + //fMCTriggerPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); + + //fMCEventPrimTrackMultHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); + //fMCEventPrimTrackMultHist1->GetAxis(1)->SetRangeUser(minEta,maxEta); + + } // end use MC info + + // + h2D = fCorrRecTrackMultHist1[3]->Projection(1,0); + h2D->SetName("pt_eta_rec_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[4]->Projection(1,0); + h2D->SetName("pt_eta_rec_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[5]->Projection(1,0); + h2D->SetName("pt_eta_rec_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[6]->Projection(1,0); + h2D->SetName("pt_eta_rec_ND_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[7]->Projection(1,0); + h2D->SetName("pt_eta_rec_NSD_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + + // + h2D = fCorrRecTrackMultHist1[3]->Projection(2,0); + h2D->SetName("pt_mult_rec_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[4]->Projection(2,0); + h2D->SetName("pt_mult_rec_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[5]->Projection(2,0); + h2D->SetName("pt_mult_rec_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[6]->Projection(2,0); + h2D->SetName("pt_mult_rec_ND_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + h2D = fCorrRecTrackMultHist1[7]->Projection(2,0); + h2D->SetName("pt_mult_rec_NSD_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h2D); + + // pt axis + + h = fCorrRecTrackMultHist1[0]->Projection(0); + h->SetName("pt_rec_track_not_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_track_not_corrected_s"); + aFolderObj->Add(hs); + + // + h = fCorrRecTrackMultHist1[1]->Projection(0); + h->SetName("pt_rec_track_cont_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_track_cont_corrected_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone("pt_rec_track_cont_corr_fact"); + hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s")); + aFolderObj->Add(hsc); + + // + h = fCorrRecTrackMultHist1[2]->Projection(0); + h->SetName("pt_rec_track_eff_cont_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_track_eff_cont_corrected_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone("pt_rec_track_eff_corr_fact"); + hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_cont_corrected_s")); + aFolderObj->Add(hsc); + + // + h = fCorrRecTrackMultHist1[3]->Projection(0); + h->SetName("pt_rec_track_mult_eff_cont_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_track_mult_eff_cont_corrected_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone("pt_rec_track_mult_corr_fact"); + hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_eff_cont_corrected_s")); + aFolderObj->Add(hsc); + + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hsc = (TH1D*)hs->Clone("pt_rec_track_mult_eff_cont_corr_fact"); + hsc->Divide((TH1D*)aFolderObj->FindObject("pt_rec_track_not_corrected_s")); + aFolderObj->Add(hsc); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_track_mult_eff_cont_corrected_s_norm"); + hsc->Scale(1./(fCorrRecEventHist1[0]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + // + h = fCorrRecTrackMultHist1[4]->Projection(0); + h->SetName("pt_rec_event_track_mult_eff_cont_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_event_track_mult_eff_cont_corrected_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_event_track_mult_eff_cont_corrected_s_norm"); + hsc->Scale(1./(fCorrRecEventHist1[1]->Projection(1)->Integral()+fCorrRecEventHist2[1]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + // + h = fCorrRecTrackMultHist1[5]->Projection(0); + h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm"); + hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral() + fCorrRecEventHist2[2]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + // positive eta + fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(0., maxEta); + + h = fCorrRecTrackMultHist1[5]->Projection(0); + h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_posEta"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_posEta"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_posEta"); + hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + // negative eta + fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRangeUser(minEta, -0.00001); + + h = fCorrRecTrackMultHist1[5]->Projection(0); + h->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_negEta"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_negEta"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm_negEta"); + hsc->Scale(1./(fCorrRecEventHist1[2]->Projection(1)->Integral()+fCorrRecEventHist2[2]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + fCorrRecTrackMultHist1[5]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[5]->GetAxis(1)->GetNbins()); + + // + h = fCorrRecTrackMultHist1[6]->Projection(0); + h->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm"); + hsc->Scale(1./(fCorrRecEventHist1[3]->Projection(1)->Integral()+fCorrRecEventHist2[3]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + // + h = fCorrRecTrackMultHist1[7]->Projection(0); + h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm"); + hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral() + fCorrRecEventHist2[4]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + // + // positive eta + // + fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(0., maxEta); + + h = fCorrRecTrackMultHist1[7]->Projection(0); + h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_posEta"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_posEta"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_posEta"); + hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + // + // negative eta + // + fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRangeUser(minEta, -0.00001); + + h = fCorrRecTrackMultHist1[7]->Projection(0); + h->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_negEta"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_negEta"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm_negEta"); + hsc->Scale(1./(fCorrRecEventHist1[4]->Projection(1)->Integral()+fCorrRecEventHist2[4]->Projection(1)->Integral())); + aFolderObj->Add(hsc); + + fCorrRecTrackMultHist1[7]->GetAxis(1)->SetRange(1, fCorrRecTrackMultHist1[7]->GetAxis(1)->GetNbins()); + + // eta axis + h = fCorrRecTrackMultHist1[0]->Projection(1); + h->SetName("eta_rec_track_not_corrected"); + aFolderObj->Add(h); + + h = fCorrRecTrackMultHist1[1]->Projection(1); + h->SetName("eta_rec_track_cont_corrected"); + aFolderObj->Add(h); + + h = fCorrRecTrackMultHist1[2]->Projection(1); + h->SetName("eta_rec_track_eff_cont_corrected"); + aFolderObj->Add(h); + + h = fCorrRecTrackMultHist1[3]->Projection(1); + h->SetName("eta_rec_track_mult_eff_cont_corrected"); + aFolderObj->Add(h); + + h = fCorrRecTrackMultHist1[4]->Projection(1); + h->SetName("eta_rec_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h); + + h = fCorrRecTrackMultHist1[5]->Projection(1); + h->SetName("eta_rec_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h); + + h = fCorrRecTrackMultHist1[6]->Projection(1); + h->SetName("eta_rec_ND_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h); + + h = fCorrRecTrackMultHist1[7]->Projection(1); + h->SetName("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected"); + aFolderObj->Add(h); + + + // + // MC available + // + if(IsUseMCInfo()) { + + // + h2D = fMCAllPrimTrackMultHist1->Projection(2,0); + h2D->SetName("mc_all_pt_mult_acc_prim"); + aFolderObj->Add(h2D); + + h2D = fMCAllPrimTrackMultHist1->Projection(1,0); + h2D->SetName("mc_all_eta_pt_acc_prim"); + aFolderObj->Add(h2D); + + h2D = fMCNDEventAllPrimTrackMultHist1->Projection(2,0); + h2D->SetName("mc_ND_all_pt_mult_acc_prim"); + aFolderObj->Add(h2D); + + h2D = fMCNDEventAllPrimTrackMultHist1->Projection(1,0); + h2D->SetName("mc_ND_all_eta_pt_acc_prim"); + aFolderObj->Add(h2D); + + h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(2,0); + h2D->SetName("mc_NSD_all_pt_mult_acc_prim"); + aFolderObj->Add(h2D); + + h2D = fMCNSDEventAllPrimTrackMultHist1->Projection(1,0); + h2D->SetName("mc_NSD_all_eta_pt_acc_prim"); + aFolderObj->Add(h2D); + + // + + h = fMCAllPrimTrackMultHist1->Projection(0); + h->SetName("mc_all_pt_acc_prim"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("mc_all_pt_acc_prim_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("mc_all_pt_acc_prim_s_norm"); + hsc->Scale(1./fMCAllEventMultHist1->Projection(1)->Integral()); + aFolderObj->Add(hsc); + + h = fMCNDEventAllPrimTrackMultHist1->Projection(0); + h->SetName("mc_ND_all_pt_acc_prim"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("mc_ND_all_pt_acc_prim_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("mc_ND_all_pt_acc_prim_s_norm"); + hsc->Scale(1./fMCAllNDEventMultHist1->Projection(1)->Integral()); + aFolderObj->Add(hsc); + + h = fMCNSDEventAllPrimTrackMultHist1->Projection(0); + h->SetName("mc_NSD_all_pt_acc_prim"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("mc_NSD_all_pt_acc_prim_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("mc_NSD_all_pt_acc_prim_s_norm"); + hsc->Scale(1./fMCAllNSDEventMultHist1->Projection(1)->Integral()); + aFolderObj->Add(hsc); + + h = fMCTriggerPrimTrackMultHist1->Projection(0); + h->SetName("mc_trigger_all_pt_acc_prim"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("mc_trigger_all_pt_acc_prim_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("mc_trigger_all_pt_acc_prim_s_norm"); + hsc->Scale(1./fMCTriggerMultHist1->Projection(1)->Integral()); + aFolderObj->Add(hsc); + + h = fMCEventPrimTrackMultHist1->Projection(0); + h->SetName("mc_all_pt_acc_trig_event_prim"); + hs = AlidNdPtHelper::ScaleByBinWidth(h); + hs->SetName("mc_all_pt_acc_trig_event_prim_s"); + aFolderObj->Add(hs); + + hsc = (TH1D*)hs->Clone(); + hsc->SetName("mc_all_pt_acc_trig_event_prim_s_norm"); + hsc->Scale(1./fMCEventMultHist1->Projection(1)->Integral()); + aFolderObj->Add(hsc); + + // + + h = fMCAllPrimTrackMultHist1->Projection(1); + h->SetName("mc_all_eta_acc_prim"); + aFolderObj->Add(h); + + h = fMCNDEventAllPrimTrackMultHist1->Projection(1); + h->SetName("mc_ND_all_eta_acc_prim"); + aFolderObj->Add(h); + + h = fMCNSDEventAllPrimTrackMultHist1->Projection(1); + h->SetName("mc_NSD_all_eta_acc_prim"); + aFolderObj->Add(h); + + h = fMCTriggerPrimTrackMultHist1->Projection(1); + h->SetName("mc_trigger_all_eta_acc_prim"); + aFolderObj->Add(h); + + h = fMCEventPrimTrackMultHist1->Projection(1); + h->SetName("mc_all_eta_acc_trig_event_prim"); + aFolderObj->Add(h); + + // + // calculate ratios (rec / mc) + // + + hs = (TH1*)aFolderObj->FindObject("pt_rec_trig_event_track_mult_eff_cont_corrected_s_norm"); + hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_prim_s_norm")); + aFolderObj->Add(hsc); + + hs = (TH1*)aFolderObj->FindObject("eta_rec_trig_event_track_mult_eff_cont_corrected"); + hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_trig_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_prim")); + aFolderObj->Add(hsc); + + // + hs = (TH1*)aFolderObj->FindObject("pt_rec_ND_trig_event_track_mult_eff_cont_corrected_s_norm"); + hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_pt_acc_prim_s_norm")); + aFolderObj->Add(hsc); + + hs = (TH1*)aFolderObj->FindObject("eta_rec_ND_trig_event_track_mult_eff_cont_corrected"); + hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_ND_trig_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_ND_all_eta_acc_prim")); + aFolderObj->Add(hsc); + + // + hs = (TH1*)aFolderObj->FindObject("pt_rec_NSD_trig_event_track_mult_eff_cont_corrected_s_norm"); + hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_pt_acc_prim_s_norm")); + aFolderObj->Add(hsc); + + hs = (TH1*)aFolderObj->FindObject("eta_rec_NSD_trig_event_track_mult_eff_cont_corrected"); + hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_NSD_trig_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_NSD_all_eta_acc_prim")); + aFolderObj->Add(hsc); + + // + hs = (TH1*)aFolderObj->FindObject("pt_rec_event_track_mult_eff_cont_corrected_s_norm"); + hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_pt_acc_prim_s_norm")); + aFolderObj->Add(hsc); + + hs = (TH1*)aFolderObj->FindObject("eta_rec_event_track_mult_eff_cont_corrected"); + hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_event_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_trigger_all_eta_acc_prim")); + aFolderObj->Add(hsc); + + // track level + hs = (TH1*)aFolderObj->FindObject("pt_rec_track_mult_eff_cont_corrected_s_norm"); + hsc = (TH1D*)hs->Clone("ratio_pt_rec_to_mc_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_pt_acc_trig_event_prim_s_norm")); + aFolderObj->Add(hsc); + + hs = (TH1*)aFolderObj->FindObject("eta_rec_track_mult_eff_cont_corrected"); + hsc = (TH1D*)hs->Clone("ratio_eta_rec_to_mc_track_mult_eff_cont_corrected"); + hsc->Sumw2(); + hsc->Divide((TH1*)aFolderObj->FindObject("mc_all_eta_acc_trig_event_prim")); + aFolderObj->Add(hsc); + + } // end MC infor available + + // export objects to analysis folder + fCorrectionFolder = ExportToFolder(aFolderObj); + + // delete only TObjArray + if(aFolderObj) delete aFolderObj; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtCorrection::ExportToFolder(TObjArray * const array) +{ + // recreate folder avery time and export objects to new one + // + AlidNdPtCorrection * comp=this; + TFolder *folder = comp->GetCorrectionFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtCorrection::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysis.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysis.cxx index 9e24cfb7e0e..267ca3b40c5 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysis.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysis.cxx @@ -1,896 +1,896 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//------------------------------------------------------------------------------ -// AlidNdPtCutAnalysis class. -// -// a. functionality: -// - fills generic cut histograms -// - generates cuts (selection criteria) -// -// b. data members: -// - generic cut histograms -// - control histograms -// -// Author: J.Otwinowski 04/11/2008 -//------------------------------------------------------------------------------ -#include "TH1.h" -#include "TH2.h" - -#include "AliHeader.h" -#include "AliGenEventHeader.h" -#include "AliInputEventHandler.h" -#include "AliStack.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDtrackCuts.h" -#include "AliLog.h" -#include "AliTracker.h" - -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AlidNdPtBackgroundCuts.h" -#include "AlidNdPtAnalysis.h" -#include "AliPhysicsSelection.h" - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" -#include "AlidNdPtCutAnalysis.h" - -using namespace std; - -ClassImp(AlidNdPtCutAnalysis) - -//_____________________________________________________________________________ - AlidNdPtCutAnalysis::AlidNdPtCutAnalysis(): AlidNdPt(), - fAnalysisFolder(0), - fEventCount(0), - fRecEventHist(0), - fMCEventHist(0), - fRecMCEventHist(0), - fRecMCTrackHist(0) -{ - // default constructor - Init(); -} - -//_____________________________________________________________________________ -AlidNdPtCutAnalysis::AlidNdPtCutAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,title), - fAnalysisFolder(0), - fEventCount(0), - fRecEventHist(0), - fMCEventHist(0), - fRecMCEventHist(0), - fRecMCTrackHist(0) -{ - // constructor - Init(); -} - -//_____________________________________________________________________________ -AlidNdPtCutAnalysis::~AlidNdPtCutAnalysis() { - // - if(fEventCount) delete fEventCount; fEventCount=0; - if(fRecEventHist) delete fRecEventHist; fRecEventHist=0; - if(fMCEventHist) delete fMCEventHist; fMCEventHist=0; - if(fRecMCEventHist) delete fRecMCEventHist; fRecMCEventHist=0; - if(fRecMCTrackHist) delete fRecMCTrackHist; fRecMCTrackHist=0; - - if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysis::Init(){ - // - // Init histograms - // - /* - const Int_t ptNbins = 56; - const Double_t ptMin = 0.; - const Double_t ptMax = 16.; - Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0}; - */ - // set pt bins - const Int_t ptNbins = 50; - const Double_t ptMin = 1.e-2, ptMax = 50.; - Double_t *binsPt = CreateLogAxis(ptNbins,ptMin,ptMax); - - // - Int_t binsEventCount[2]={2,2}; - Double_t minEventCount[2]={0,0}; - Double_t maxEventCount[2]={2,2}; - fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount); - fEventCount->GetAxis(0)->SetTitle("trig"); - fEventCount->GetAxis(1)->SetTitle("trig+vert"); - fEventCount->Sumw2(); - - //Xv:Yv:Zv:ResZv:Mult - Double_t kFact = 1.0; - - Int_t binsRecEventHist[5]={80,80,100,80,150}; - Double_t minRecEventHist[5]={-3.*kFact,-3.*kFact,-35.,0.,0.}; - Double_t maxRecEventHist[5]={3.*kFact,3.*kFact,35.,10.,150.}; - fRecEventHist = new THnSparseF("fRecEventHist","Xv:Yv:Zv:ResZv:Mult",5,binsRecEventHist,minRecEventHist,maxRecEventHist); - fRecEventHist->GetAxis(0)->SetTitle("Xv (cm)"); - fRecEventHist->GetAxis(1)->SetTitle("Yv (cm)"); - fRecEventHist->GetAxis(2)->SetTitle("Zv (cm)"); - fRecEventHist->GetAxis(3)->SetTitle("ResZv (cm)"); - fRecEventHist->GetAxis(4)->SetTitle("Mult"); - fRecEventHist->Sumw2(); - - //Xv:Yv:Zv - Int_t binsMCEventHist[3]={80,80,100}; - Double_t minMCEventHist[3]={-0.1,-0.1,-35.}; - Double_t maxMCEventHist[3]={0.1,0.1,35.}; - fMCEventHist = new THnSparseF("fMCEventHist","mcXv:mcYv:mcZv",3,binsMCEventHist,minMCEventHist,maxMCEventHist); - fMCEventHist->GetAxis(0)->SetTitle("mcXv (cm)"); - fMCEventHist->GetAxis(1)->SetTitle("mcYv (cm)"); - fMCEventHist->GetAxis(2)->SetTitle("mcZv (cm)"); - fMCEventHist->Sumw2(); - - //Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult - Int_t binsRecMCEventHist[4]={100,100,100,150}; - Double_t minRecMCEventHist[4]={-1.0*kFact,-1.0*kFact,-1.0*kFact,0.}; - Double_t maxRecMCEventHist[4]={1.0*kFact,1.0*kFact,1.0*kFact,150.}; - fRecMCEventHist = new THnSparseF("fRecMCEventHist","Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult",4,binsRecMCEventHist,minRecMCEventHist,maxRecMCEventHist); - fRecMCEventHist->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); - fRecMCEventHist->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); - fRecMCEventHist->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); - fRecMCEventHist->GetAxis(3)->SetTitle("Mult"); - fRecMCEventHist->Sumw2(); - - // - // THnSparse track histograms - // - - //nCrossRows:chi2PerClust:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromMaterial:isPrim:charge - Int_t binsRecMCTrackHist[13]= { 160, 10, 20, 20, 50, 50, 20, 90, ptNbins, 2, 2, 2, 3 }; - Double_t minRecMCTrackHist[13]={ 0., 0., 0., 0., -0.5,-0.5,-1.0, 0., ptMin, 0., 0., 0.,-1. }; - Double_t maxRecMCTrackHist[13]={ 160., 10., 1., 1., 0.5, 0.5, 1.0, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2. }; - - fRecMCTrackHist = new THnSparseF("fRecMCTrackHist","nCrossRows:chi2PerClust:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromMaterial:isPrim:charge",13,binsRecMCTrackHist,minRecMCTrackHist,maxRecMCTrackHist); - fRecMCTrackHist->SetBinEdges(8,binsPt); - fRecMCTrackHist->GetAxis(0)->SetTitle("nCrossRows"); - fRecMCTrackHist->GetAxis(1)->SetTitle("chi2PerClust"); - fRecMCTrackHist->GetAxis(2)->SetTitle("nCrossRows/nFindableClust"); - fRecMCTrackHist->GetAxis(3)->SetTitle("fracSharedClust"); - fRecMCTrackHist->GetAxis(4)->SetTitle("DCAy (cm)"); - fRecMCTrackHist->GetAxis(5)->SetTitle("DCAz (cm)"); - fRecMCTrackHist->GetAxis(6)->SetTitle("#eta"); - fRecMCTrackHist->GetAxis(7)->SetTitle("#phi (rad)"); - fRecMCTrackHist->GetAxis(8)->SetTitle("p_{T} (GeV/c)"); - fRecMCTrackHist->GetAxis(9)->SetTitle("hasStrangeMother"); - fRecMCTrackHist->GetAxis(10)->SetTitle("isFromMaterial"); - fRecMCTrackHist->GetAxis(11)->SetTitle("isPrim"); - fRecMCTrackHist->GetAxis(12)->SetTitle("charge"); - fRecMCTrackHist->Sumw2(); - - //nClust:chi2PerClust:nClust/nFindableClust:DCAy:DCAz:eta:phi:pt:kinkIdx:isPrim:polarity - /* - Int_t binsRecMCTrackHist[11]={160,80,80,100,100,90,90,ptNbins, 3, 2, 2}; - Double_t minRecMCTrackHist[11]={0., 0., 0., -1.,-1.,-1.5, 0., ptMin, -1., 0., 0.}; - Double_t maxRecMCTrackHist[11]={160.,10.,1.2, 1.,1.,1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2.}; - - fRecMCTrackHist = new THnSparseF("fRecMCTrackHist","nClust:chi2PerClust:nClust/nFindableClust:DCAy:DCAz:eta:phi:pt:kinkIdx:isPrim:polarity",11,binsRecMCTrackHist,minRecMCTrackHist,maxRecMCTrackHist); - fRecMCTrackHist->SetBinEdges(7,binsPt); - - fRecMCTrackHist->GetAxis(0)->SetTitle("nClust"); - fRecMCTrackHist->GetAxis(1)->SetTitle("chi2PerClust"); - fRecMCTrackHist->GetAxis(2)->SetTitle("nClust/nFindableClust"); - fRecMCTrackHist->GetAxis(3)->SetTitle("DCAy (cm)"); - fRecMCTrackHist->GetAxis(4)->SetTitle("DCAz (cm)"); - fRecMCTrackHist->GetAxis(5)->SetTitle("#eta"); - fRecMCTrackHist->GetAxis(6)->SetTitle("#phi (rad)"); - fRecMCTrackHist->GetAxis(7)->SetTitle("p_{T} (GeV/c)"); - fRecMCTrackHist->GetAxis(8)->SetTitle("kinkIdx"); // 0 - no kink, -1 - kink mother, 1 - kink daugther - fRecMCTrackHist->GetAxis(9)->SetTitle("isPrim"); - fRecMCTrackHist->GetAxis(10)->SetTitle("polarity"); - fRecMCTrackHist->Sumw2(); - */ - - // init output folder - fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); - -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent) -{ - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - // trigger selection - - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - } - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; - - if(IsUseMCInfo()) - { - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - - // get event type (ND=0x1, DD=0x2, SD=0x4) - evtType = AliPWG0Helper::GetEventProcessType(header); - AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - // Fill MC event histogram - Double_t vMCEventHist[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; - fMCEventHist->Fill(vMCEventHist); - - } // end bUseMC - - // get reconstructed vertex - Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); - Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); - const AliESDVertex* vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); - Bool_t isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; - - TObjArray *allChargedTracks=0; - Int_t multAll=0; - - // - // event counter - // - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK,isEventTriggered); - - Bool_t isTrigAndVertex = isEventTriggered && isEventOK; - Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex}; - fEventCount->Fill(vEventCount); - - // - // cosmic background and splitted tracks - // - if(GetParticleMode() == AlidNdPtHelper::kBackgroundTrack) - { - AlidNdPtBackgroundCuts *backCuts = GetBackgroundCuts(); - if(!backCuts) return; - - for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) - { - AliESDtrack *track1 = esdEvent->GetTrack(iTrack); - if(!track1) continue; - if(track1->Charge()==0) continue; - - for (Int_t jTrack = iTrack+1; jTrack < esdEvent->GetNumberOfTracks(); jTrack++) - { - AliESDtrack *track2 = esdEvent->GetTrack(jTrack); - if(!track2) continue; - if(track2->Charge()==0) continue; - - //printf("track2->Charge() %d\n",track2->Charge()); - - backCuts->IsBackgroundTrack(track1, track2); - } - } - } - - // check event cuts - if(isEventOK && isEventTriggered) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - for(Int_t i=0; iAt(i); - if(!track) continue; - - if(!esdTrackCuts->AcceptTrack(track)) continue; - - // - Bool_t isOK = kFALSE; - Double_t x[3]; track->GetXYZ(x); - Double_t b[3]; AliTracker::GetBxByBz(x,b); - - // - // if TPC-ITS hybrid tracking (kTPCITSHybrid) - // replace track parameters with TPC-ony track parameters - // - if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) - { - // Relate TPC-only tracks to SPD vertex - isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); - if(!isOK) continue; - - // replace esd track parameters with TPCinner - AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); - if (!tpcTrack) return; - track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); - - if(tpcTrack) delete tpcTrack; - } - - // - if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate) - { - // - // update track parameters - // - AliExternalTrackParam cParam; - isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam); - if(!isOK) continue; - - track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); - } - - FillHistograms(track, stack); - multAll++; - } - - Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll}; - fRecEventHist->Fill(vRecEventHist); - - if(IsUseMCInfo()) { - Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll}; - fRecMCEventHist->Fill(vRecMCEventHist); - } - } - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack) const -{ - // - // Fill ESD track and MC histograms - // - if(!esdTrack) return; - if(esdTrack->Charge() == 0.) return; - - Float_t pt = esdTrack->Pt(); - Float_t eta = esdTrack->Eta(); - Float_t phi = esdTrack->Phi(); - - - Int_t nClust = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - nClust = esdTrack->GetTPCNclsIter1(); - } else { - nClust = esdTrack->GetTPCclusters(0); - } - - Float_t chi2PerCluster = 0.; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2Iter1()/Float_t(nClust); - } else { - chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); - } - - Int_t nFindableClust = esdTrack->GetTPCNclsF(); - - - Float_t clustPerFindClust = 0.; - if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust; - - Float_t b[2], bCov[3]; - esdTrack->GetImpactParameters(b,bCov); - - // - Float_t nCrossedRowsTPC = esdTrack->GetTPCClusterInfo(2,1); - - Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0; - if (esdTrack->GetTPCNclsF()>0) { - ratioCrossedRowsOverFindableClustersTPC = esdTrack->GetTPCClusterInfo(2,1)/esdTrack->GetTPCNclsF(); - } - - // - Int_t nClustersTPCShared = esdTrack->GetTPCnclsS(); - Float_t fracClustersTPCShared = -1.; - fracClustersTPCShared = Float_t(nClustersTPCShared)/Float_t(nClust); - - - // kink idx - Int_t kinkIdx = 0; - //if(esdTrack->GetKinkIndex(0) > 0.) isKink = kTRUE; - if(esdTrack->GetKinkIndex(0) > 0) kinkIdx = 1; // kink daughter - else if(esdTrack->GetKinkIndex(0) < 0) kinkIdx = -1; // kink mother - else kinkIdx = 0; // not kink - - //printf("esdTrack->GetKinkIndex(0) %d \n", esdTrack->GetKinkIndex(0)); - //printf("esdTrack->GetKinkIndex(1) %d \n", esdTrack->GetKinkIndex(1)); - //printf("esdTrack->GetKinkIndex(2) %d \n", esdTrack->GetKinkIndex(2)); - //printf("kinkIdx %d \n", kinkIdx); - - // - // Fill rec vs MC information - // - Bool_t isPrim = kTRUE; - Bool_t hasStrangeMother = kFALSE; - Bool_t isFromMaterial = kFALSE; - - if(IsUseMCInfo()) { - if(!stack) return; - Int_t label = TMath::Abs(esdTrack->GetLabel()); - TParticle* particle = stack->Particle(label); - if(!particle) return; - if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return; - isPrim = stack->IsPhysicalPrimary(label); - - // check whether has stange mother - // - Int_t motherPdg = -1; - TParticle* mother = 0; - - Int_t motherLabel = particle->GetMother(0); - if(motherLabel>0) mother = stack->Particle(motherLabel); - if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only - Int_t mech = particle->GetUniqueID(); // production mechanism - - if( (motherPdg == 3122) || (motherPdg == -3122) || (motherPdg == 310)) // lambda, antilambda, k0s - { - if( (mech == 4) || (mech == 5) ) hasStrangeMother = kTRUE; - } - else { - //if(isPrim==0 && mech == 13) - //printf("mech %d \n", mech); - if(!isPrim) isFromMaterial = kTRUE; - } - - //if(isPrim && pt > 1.5 && kinkIdx == -1) printf("nClust %d \n", nClust); - } - - // fill histo - Int_t charge = esdTrack->Charge(); - - //Double_t vRecMCTrackHist[11] = { nClust,chi2PerCluster,clustPerFindClust,b[0],b[1],eta,phi,pt,kinkIdx,isPrim, polarity }; - //fRecMCTrackHist->Fill(vRecMCTrackHist); - - Double_t vRecMCTrackHist[13] = { nCrossedRowsTPC, chi2PerCluster, ratioCrossedRowsOverFindableClustersTPC, fracClustersTPCShared , b[0], b[1], eta, phi, pt, hasStrangeMother, isFromMaterial, isPrim, charge }; - fRecMCTrackHist->Fill(vRecMCTrackHist); - -} - -//_____________________________________________________________________________ -Long64_t AlidNdPtCutAnalysis::Merge(TCollection* const list) -{ - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - - //TList *collPhysSelection = new TList; - - // collection of generated histograms - Int_t count=0; - while((obj = iter->Next()) != 0) { - AlidNdPtCutAnalysis* entry = dynamic_cast(obj); - if (entry == 0) continue; - - // event histo - fEventCount->Add(entry->fEventCount); - fRecEventHist->Add(entry->fRecEventHist); - fRecMCEventHist->Add(entry->fRecMCEventHist); - fMCEventHist->Add(entry->fMCEventHist); - - // track histo - fRecMCTrackHist->Add(entry->fRecMCTrackHist); - - // physics selection - //collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); - - count++; - } - - //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); - //trigSelection->Merge(collPhysSelection); - - //if(collPhysSelection) delete collPhysSelection; - -return count; -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysis::Analyse() -{ - // - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - TH1D *h1D = 0; - TH2D *h2D = 0; - - - // - // get cuts - // - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available"); - return; - } - - // - // set min and max values - // - Double_t minPt = accCuts->GetMinPt(); - Double_t maxPt = accCuts->GetMaxPt(); - Double_t minEta = accCuts->GetMinEta(); - Double_t maxEta = accCuts->GetMaxEta()-0.00001; - - Double_t maxDCAr = accCuts->GetMaxDCAr(); - - // - // Event counters - // - h2D = (TH2D*)fEventCount->Projection(0,1); - if(!h2D) return; - h2D->SetName("trig_vs_trigANDvertex"); - aFolderObj->Add(h2D); - - fEventCount->GetAxis(0)->SetRange(2,2); // triggered - h1D = (TH1D*)fEventCount->Projection(1); - if(!h1D) return; - h1D->SetTitle("rec. vertex for triggered events"); - h1D->SetName("trigANDvertex"); - aFolderObj->Add(h1D); - - // - // Create rec. event histograms - // - h1D = (TH1D *)fRecEventHist->Projection(0); - if(!h1D) return; - h1D->SetName("rec_xv"); - aFolderObj->Add(h1D); - - h1D = (TH1D *)fRecEventHist->Projection(1); - if(!h1D) return; - h1D->SetName("rec_yv"); - aFolderObj->Add(h1D); - - h1D = (TH1D *)fRecEventHist->Projection(2); - if(!h1D) return; - h1D->SetName("rec_zv"); - aFolderObj->Add(h1D); - - h2D = (TH2D *)fRecEventHist->Projection(3,4); - if(!h2D) return; - h2D->SetName("rec_resZv_vs_Mult"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecEventHist->Projection(0,1); - if(!h2D) return; - h2D->SetName("rec_xv_vs_yv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecEventHist->Projection(0,2); - if(!h2D) return; - h2D->SetName("rec_xv_vs_zv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecEventHist->Projection(3,4); - if(!h2D) return; - h2D->SetName("rec_resZv_vs_Mult"); - aFolderObj->Add(h2D); - - // - // MC available - // - if(IsUseMCInfo()) { - - // - // Create mc event histograms - // - h2D = (TH2D *)fMCEventHist->Projection(0,1); - if(!h2D) return; - h2D->SetName("mc_xv_vs_yv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fMCEventHist->Projection(0,2); - if(!h2D) return; - h2D->SetName("mc_xv_vs_zv"); - aFolderObj->Add(h2D); - - // - // Create rec-mc event histograms - // - h2D = (TH2D *)fRecMCEventHist->Projection(0,3); - if(!h2D) return; - h2D->SetName("rec_mc_deltaXv_vs_mult"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCEventHist->Projection(1,3); - if(!h2D) return; - h2D->SetName("rec_mc_deltaYv_vs_mult"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCEventHist->Projection(2,3); - if(!h2D) return; - h2D->SetName("rec_mc_deltaZv_vs_mult"); - aFolderObj->Add(h2D); - - } // end use MC info - - - - // - // Create rec-mc track track histograms - // - - // DCA cuts - fRecMCTrackHist->GetAxis(3)->SetRangeUser(-maxDCAr,maxDCAr); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(-maxDCAr,maxDCAr); - - h2D = (TH2D *)fRecMCTrackHist->Projection(7,5); - if(!h2D) return; - h2D->SetName("pt_vs_eta"); - aFolderObj->Add(h2D); - - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minPt,maxPt); - - h2D = (TH2D *)fRecMCTrackHist->Projection(0,5); - if(!h2D) return; - h2D->SetName("nClust_vs_eta"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(1,5); - if(!h2D) return; - h2D->SetName("chi2PerClust_vs_eta"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(2,5); - if(!h2D) return; - h2D->SetName("ratio_nClust_nFindableClust_vs_eta"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(5,6); - if(!h2D) return; - h2D->SetName("eta_vs_phi"); - aFolderObj->Add(h2D); - - // - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minEta,maxEta); - - h2D = (TH2D *)fRecMCTrackHist->Projection(0,6); - if(!h2D) return; - h2D->SetName("nClust_vs_phi"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(1,6); - if(!h2D) return; - h2D->SetName("chi2PerClust_vs_phi"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(2,6); - if(!h2D) return; - h2D->SetName("ratio_nClust_nFindableClust_vs_phi"); - aFolderObj->Add(h2D); - - // - fRecMCTrackHist->GetAxis(7)->SetRangeUser(0.0,maxPt); - - h2D = (TH2D *)fRecMCTrackHist->Projection(0,7); - if(!h2D) return; - h2D->SetName("nClust_vs_pt"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(1,7); - if(!h2D) return; - h2D->SetName("chi2PerClust_vs_pt"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(2,7); - if(!h2D) return; - h2D->SetName("ratio_nClust_nFindableClust_vs_pt"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(6,7); - if(!h2D) return; - h2D->SetName("phi_vs_pt"); - aFolderObj->Add(h2D); - - - // fiducial volume - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minEta,maxEta); - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minPt,maxPt); - - // DCA cuts - fRecMCTrackHist->GetAxis(3)->SetRangeUser(-maxDCAr,maxDCAr); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(-maxDCAr,maxDCAr); - - h2D = (TH2D *)fRecMCTrackHist->Projection(0,1); - if(!h2D) return; - h2D->SetName("nClust_vs_chi2PerClust"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCTrackHist->Projection(0,2); - if(!h2D) return; - h2D->SetName("nClust_vs_ratio_nClust_nFindableClust"); - aFolderObj->Add(h2D); - - // - // DCAy cuts - // - fRecMCTrackHist->GetAxis(0)->SetRange(50,160); // nClust/track > 50 - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,3.9999); // chi2/cluster < 4.0 - fRecMCTrackHist->GetAxis(3)->SetRange(1,fRecMCTrackHist->GetAxis(3)->GetNbins()); - //fRecMCTrackHist->GetAxis(4)->SetRangeUser(-1.0,1.0); - fRecMCTrackHist->GetAxis(4)->SetRange(1,fRecMCTrackHist->GetAxis(4)->GetNbins()); - - // sec - fRecMCTrackHist->GetAxis(9)->SetRange(1,1); - h1D = (TH1D *)fRecMCTrackHist->Projection(3); - if(!h1D) return; - h1D->SetName("dcay_sec"); - aFolderObj->Add(h1D); - - // prim - fRecMCTrackHist->GetAxis(9)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHist->Projection(3); - if(!h1D) return; - h1D->SetName("dcay_prim"); - aFolderObj->Add(h1D); - - // DCAz cuts - //fRecMCTrackHist->GetAxis(3)->SetRangeUser(-1.0,1.0); - fRecMCTrackHist->GetAxis(4)->SetRange(1,fRecMCTrackHist->GetAxis(4)->GetNbins()); - - // sec - fRecMCTrackHist->GetAxis(9)->SetRange(1,1); - h1D = (TH1D *)fRecMCTrackHist->Projection(4); - if(!h1D) return; - h1D->SetName("dcaz_sec"); - aFolderObj->Add(h1D); - - // prim - fRecMCTrackHist->GetAxis(9)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHist->Projection(4); - if(!h1D) return; - h1D->SetName("dcaz_prim"); - aFolderObj->Add(h1D); - - - // export objects to analysis folder - fAnalysisFolder = ExportToFolder(aFolderObj); - if(!fAnalysisFolder) { - if(aFolderObj) delete aFolderObj; - return; - } - - // delete only TObjArray - if(aFolderObj) delete aFolderObj; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtCutAnalysis::ExportToFolder(TObjArray * const array) -{ - // recreate folder avery time and export objects to new one - // - AlidNdPtCutAnalysis * comp=this; - TFolder *folder = comp->GetAnalysisFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtCutAnalysis::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AlidNdPtCutAnalysis class. +// +// a. functionality: +// - fills generic cut histograms +// - generates cuts (selection criteria) +// +// b. data members: +// - generic cut histograms +// - control histograms +// +// Author: J.Otwinowski 04/11/2008 +//------------------------------------------------------------------------------ +#include "TH1.h" +#include "TH2.h" + +#include "AliHeader.h" +#include "AliGenEventHeader.h" +#include "AliInputEventHandler.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliTracker.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AlidNdPtBackgroundCuts.h" +#include "AlidNdPtAnalysis.h" +#include "AliPhysicsSelection.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AlidNdPtCutAnalysis.h" + +using namespace std; + +ClassImp(AlidNdPtCutAnalysis) + +//_____________________________________________________________________________ + AlidNdPtCutAnalysis::AlidNdPtCutAnalysis(): AlidNdPt(), + fAnalysisFolder(0), + fEventCount(0), + fRecEventHist(0), + fMCEventHist(0), + fRecMCEventHist(0), + fRecMCTrackHist(0) +{ + // default constructor + Init(); +} + +//_____________________________________________________________________________ +AlidNdPtCutAnalysis::AlidNdPtCutAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,title), + fAnalysisFolder(0), + fEventCount(0), + fRecEventHist(0), + fMCEventHist(0), + fRecMCEventHist(0), + fRecMCTrackHist(0) +{ + // constructor + Init(); +} + +//_____________________________________________________________________________ +AlidNdPtCutAnalysis::~AlidNdPtCutAnalysis() { + // + if(fEventCount) delete fEventCount; fEventCount=0; + if(fRecEventHist) delete fRecEventHist; fRecEventHist=0; + if(fMCEventHist) delete fMCEventHist; fMCEventHist=0; + if(fRecMCEventHist) delete fRecMCEventHist; fRecMCEventHist=0; + if(fRecMCTrackHist) delete fRecMCTrackHist; fRecMCTrackHist=0; + + if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysis::Init(){ + // + // Init histograms + // + /* + const Int_t ptNbins = 56; + const Double_t ptMin = 0.; + const Double_t ptMax = 16.; + Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0}; + */ + // set pt bins + const Int_t ptNbins = 50; + const Double_t ptMin = 1.e-2, ptMax = 50.; + Double_t *binsPt = CreateLogAxis(ptNbins,ptMin,ptMax); + + // + Int_t binsEventCount[2]={2,2}; + Double_t minEventCount[2]={0,0}; + Double_t maxEventCount[2]={2,2}; + fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount); + fEventCount->GetAxis(0)->SetTitle("trig"); + fEventCount->GetAxis(1)->SetTitle("trig+vert"); + fEventCount->Sumw2(); + + //Xv:Yv:Zv:ResZv:Mult + Double_t kFact = 1.0; + + Int_t binsRecEventHist[5]={80,80,100,80,150}; + Double_t minRecEventHist[5]={-3.*kFact,-3.*kFact,-35.,0.,0.}; + Double_t maxRecEventHist[5]={3.*kFact,3.*kFact,35.,10.,150.}; + fRecEventHist = new THnSparseF("fRecEventHist","Xv:Yv:Zv:ResZv:Mult",5,binsRecEventHist,minRecEventHist,maxRecEventHist); + fRecEventHist->GetAxis(0)->SetTitle("Xv (cm)"); + fRecEventHist->GetAxis(1)->SetTitle("Yv (cm)"); + fRecEventHist->GetAxis(2)->SetTitle("Zv (cm)"); + fRecEventHist->GetAxis(3)->SetTitle("ResZv (cm)"); + fRecEventHist->GetAxis(4)->SetTitle("Mult"); + fRecEventHist->Sumw2(); + + //Xv:Yv:Zv + Int_t binsMCEventHist[3]={80,80,100}; + Double_t minMCEventHist[3]={-0.1,-0.1,-35.}; + Double_t maxMCEventHist[3]={0.1,0.1,35.}; + fMCEventHist = new THnSparseF("fMCEventHist","mcXv:mcYv:mcZv",3,binsMCEventHist,minMCEventHist,maxMCEventHist); + fMCEventHist->GetAxis(0)->SetTitle("mcXv (cm)"); + fMCEventHist->GetAxis(1)->SetTitle("mcYv (cm)"); + fMCEventHist->GetAxis(2)->SetTitle("mcZv (cm)"); + fMCEventHist->Sumw2(); + + //Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult + Int_t binsRecMCEventHist[4]={100,100,100,150}; + Double_t minRecMCEventHist[4]={-1.0*kFact,-1.0*kFact,-1.0*kFact,0.}; + Double_t maxRecMCEventHist[4]={1.0*kFact,1.0*kFact,1.0*kFact,150.}; + fRecMCEventHist = new THnSparseF("fRecMCEventHist","Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult",4,binsRecMCEventHist,minRecMCEventHist,maxRecMCEventHist); + fRecMCEventHist->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); + fRecMCEventHist->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); + fRecMCEventHist->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); + fRecMCEventHist->GetAxis(3)->SetTitle("Mult"); + fRecMCEventHist->Sumw2(); + + // + // THnSparse track histograms + // + + //nCrossRows:chi2PerClust:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromMaterial:isPrim:charge + Int_t binsRecMCTrackHist[13]= { 160, 10, 20, 20, 50, 50, 20, 90, ptNbins, 2, 2, 2, 3 }; + Double_t minRecMCTrackHist[13]={ 0., 0., 0., 0., -0.5,-0.5,-1.0, 0., ptMin, 0., 0., 0.,-1. }; + Double_t maxRecMCTrackHist[13]={ 160., 10., 1., 1., 0.5, 0.5, 1.0, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2. }; + + fRecMCTrackHist = new THnSparseF("fRecMCTrackHist","nCrossRows:chi2PerClust:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromMaterial:isPrim:charge",13,binsRecMCTrackHist,minRecMCTrackHist,maxRecMCTrackHist); + fRecMCTrackHist->SetBinEdges(8,binsPt); + fRecMCTrackHist->GetAxis(0)->SetTitle("nCrossRows"); + fRecMCTrackHist->GetAxis(1)->SetTitle("chi2PerClust"); + fRecMCTrackHist->GetAxis(2)->SetTitle("nCrossRows/nFindableClust"); + fRecMCTrackHist->GetAxis(3)->SetTitle("fracSharedClust"); + fRecMCTrackHist->GetAxis(4)->SetTitle("DCAy (cm)"); + fRecMCTrackHist->GetAxis(5)->SetTitle("DCAz (cm)"); + fRecMCTrackHist->GetAxis(6)->SetTitle("#eta"); + fRecMCTrackHist->GetAxis(7)->SetTitle("#phi (rad)"); + fRecMCTrackHist->GetAxis(8)->SetTitle("p_{T} (GeV/c)"); + fRecMCTrackHist->GetAxis(9)->SetTitle("hasStrangeMother"); + fRecMCTrackHist->GetAxis(10)->SetTitle("isFromMaterial"); + fRecMCTrackHist->GetAxis(11)->SetTitle("isPrim"); + fRecMCTrackHist->GetAxis(12)->SetTitle("charge"); + fRecMCTrackHist->Sumw2(); + + //nClust:chi2PerClust:nClust/nFindableClust:DCAy:DCAz:eta:phi:pt:kinkIdx:isPrim:polarity + /* + Int_t binsRecMCTrackHist[11]={160,80,80,100,100,90,90,ptNbins, 3, 2, 2}; + Double_t minRecMCTrackHist[11]={0., 0., 0., -1.,-1.,-1.5, 0., ptMin, -1., 0., 0.}; + Double_t maxRecMCTrackHist[11]={160.,10.,1.2, 1.,1.,1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2.}; + + fRecMCTrackHist = new THnSparseF("fRecMCTrackHist","nClust:chi2PerClust:nClust/nFindableClust:DCAy:DCAz:eta:phi:pt:kinkIdx:isPrim:polarity",11,binsRecMCTrackHist,minRecMCTrackHist,maxRecMCTrackHist); + fRecMCTrackHist->SetBinEdges(7,binsPt); + + fRecMCTrackHist->GetAxis(0)->SetTitle("nClust"); + fRecMCTrackHist->GetAxis(1)->SetTitle("chi2PerClust"); + fRecMCTrackHist->GetAxis(2)->SetTitle("nClust/nFindableClust"); + fRecMCTrackHist->GetAxis(3)->SetTitle("DCAy (cm)"); + fRecMCTrackHist->GetAxis(4)->SetTitle("DCAz (cm)"); + fRecMCTrackHist->GetAxis(5)->SetTitle("#eta"); + fRecMCTrackHist->GetAxis(6)->SetTitle("#phi (rad)"); + fRecMCTrackHist->GetAxis(7)->SetTitle("p_{T} (GeV/c)"); + fRecMCTrackHist->GetAxis(8)->SetTitle("kinkIdx"); // 0 - no kink, -1 - kink mother, 1 - kink daugther + fRecMCTrackHist->GetAxis(9)->SetTitle("isPrim"); + fRecMCTrackHist->GetAxis(10)->SetTitle("polarity"); + fRecMCTrackHist->Sumw2(); + */ + + // init output folder + fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); + +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent) +{ + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + // trigger selection + + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess; + + if(IsUseMCInfo()) + { + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + + // get event type (ND=0x1, DD=0x2, SD=0x4) + evtType = AliPWG0Helper::GetEventProcessType(header); + AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType)); + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + // Fill MC event histogram + Double_t vMCEventHist[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; + fMCEventHist->Fill(vMCEventHist); + + } // end bUseMC + + // get reconstructed vertex + Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); + Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); + const AliESDVertex* vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); + Bool_t isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE); + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; + + TObjArray *allChargedTracks=0; + Int_t multAll=0; + + // + // event counter + // + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK,isEventTriggered); + + Bool_t isTrigAndVertex = isEventTriggered && isEventOK; + Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex}; + fEventCount->Fill(vEventCount); + + // + // cosmic background and splitted tracks + // + if(GetParticleMode() == AlidNdPtHelper::kBackgroundTrack) + { + AlidNdPtBackgroundCuts *backCuts = GetBackgroundCuts(); + if(!backCuts) return; + + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) + { + AliESDtrack *track1 = esdEvent->GetTrack(iTrack); + if(!track1) continue; + if(track1->Charge()==0) continue; + + for (Int_t jTrack = iTrack+1; jTrack < esdEvent->GetNumberOfTracks(); jTrack++) + { + AliESDtrack *track2 = esdEvent->GetTrack(jTrack); + if(!track2) continue; + if(track2->Charge()==0) continue; + + //printf("track2->Charge() %d\n",track2->Charge()); + + backCuts->IsBackgroundTrack(track1, track2); + } + } + } + + // check event cuts + if(isEventOK && isEventTriggered) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + for(Int_t i=0; iAt(i); + if(!track) continue; + + if(!esdTrackCuts->AcceptTrack(track)) continue; + + // + Bool_t isOK = kFALSE; + Double_t x[3]; track->GetXYZ(x); + Double_t b[3]; AliTracker::GetBxByBz(x,b); + + // + // if TPC-ITS hybrid tracking (kTPCITSHybrid) + // replace track parameters with TPC-ony track parameters + // + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) + { + // Relate TPC-only tracks to SPD vertex + isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig); + if(!isOK) continue; + + // replace esd track parameters with TPCinner + AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); + if (!tpcTrack) return; + track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); + + if(tpcTrack) delete tpcTrack; + } + + // + if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate) + { + // + // update track parameters + // + AliExternalTrackParam cParam; + isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam); + if(!isOK) continue; + + track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); + } + + FillHistograms(track, stack); + multAll++; + } + + Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll}; + fRecEventHist->Fill(vRecEventHist); + + if(IsUseMCInfo()) { + Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll}; + fRecMCEventHist->Fill(vRecMCEventHist); + } + } + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack) const +{ + // + // Fill ESD track and MC histograms + // + if(!esdTrack) return; + if(esdTrack->Charge() == 0.) return; + + Float_t pt = esdTrack->Pt(); + Float_t eta = esdTrack->Eta(); + Float_t phi = esdTrack->Phi(); + + + Int_t nClust = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + nClust = esdTrack->GetTPCNclsIter1(); + } else { + nClust = esdTrack->GetTPCclusters(0); + } + + Float_t chi2PerCluster = 0.; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2Iter1()/Float_t(nClust); + } else { + chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); + } + + Int_t nFindableClust = esdTrack->GetTPCNclsF(); + + + Float_t clustPerFindClust = 0.; + if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust; + + Float_t b[2], bCov[3]; + esdTrack->GetImpactParameters(b,bCov); + + // + Float_t nCrossedRowsTPC = esdTrack->GetTPCClusterInfo(2,1); + + Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0; + if (esdTrack->GetTPCNclsF()>0) { + ratioCrossedRowsOverFindableClustersTPC = esdTrack->GetTPCClusterInfo(2,1)/esdTrack->GetTPCNclsF(); + } + + // + Int_t nClustersTPCShared = esdTrack->GetTPCnclsS(); + Float_t fracClustersTPCShared = -1.; + fracClustersTPCShared = Float_t(nClustersTPCShared)/Float_t(nClust); + + + // kink idx + Int_t kinkIdx = 0; + //if(esdTrack->GetKinkIndex(0) > 0.) isKink = kTRUE; + if(esdTrack->GetKinkIndex(0) > 0) kinkIdx = 1; // kink daughter + else if(esdTrack->GetKinkIndex(0) < 0) kinkIdx = -1; // kink mother + else kinkIdx = 0; // not kink + + //printf("esdTrack->GetKinkIndex(0) %d \n", esdTrack->GetKinkIndex(0)); + //printf("esdTrack->GetKinkIndex(1) %d \n", esdTrack->GetKinkIndex(1)); + //printf("esdTrack->GetKinkIndex(2) %d \n", esdTrack->GetKinkIndex(2)); + //printf("kinkIdx %d \n", kinkIdx); + + // + // Fill rec vs MC information + // + Bool_t isPrim = kTRUE; + Bool_t hasStrangeMother = kFALSE; + Bool_t isFromMaterial = kFALSE; + + if(IsUseMCInfo()) { + if(!stack) return; + Int_t label = TMath::Abs(esdTrack->GetLabel()); + TParticle* particle = stack->Particle(label); + if(!particle) return; + if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return; + isPrim = stack->IsPhysicalPrimary(label); + + // check whether has stange mother + // + Int_t motherPdg = -1; + TParticle* mother = 0; + + Int_t motherLabel = particle->GetMother(0); + if(motherLabel>0) mother = stack->Particle(motherLabel); + if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only + Int_t mech = particle->GetUniqueID(); // production mechanism + + if( (motherPdg == 3122) || (motherPdg == -3122) || (motherPdg == 310)) // lambda, antilambda, k0s + { + if( (mech == 4) || (mech == 5) ) hasStrangeMother = kTRUE; + } + else { + //if(isPrim==0 && mech == 13) + //printf("mech %d \n", mech); + if(!isPrim) isFromMaterial = kTRUE; + } + + //if(isPrim && pt > 1.5 && kinkIdx == -1) printf("nClust %d \n", nClust); + } + + // fill histo + Int_t charge = esdTrack->Charge(); + + //Double_t vRecMCTrackHist[11] = { nClust,chi2PerCluster,clustPerFindClust,b[0],b[1],eta,phi,pt,kinkIdx,isPrim, polarity }; + //fRecMCTrackHist->Fill(vRecMCTrackHist); + + Double_t vRecMCTrackHist[13] = { nCrossedRowsTPC, chi2PerCluster, ratioCrossedRowsOverFindableClustersTPC, fracClustersTPCShared , b[0], b[1], eta, phi, pt, hasStrangeMother, isFromMaterial, isPrim, charge }; + fRecMCTrackHist->Fill(vRecMCTrackHist); + +} + +//_____________________________________________________________________________ +Long64_t AlidNdPtCutAnalysis::Merge(TCollection* const list) +{ + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + //TList *collPhysSelection = new TList; + + // collection of generated histograms + Int_t count=0; + while((obj = iter->Next()) != 0) { + AlidNdPtCutAnalysis* entry = dynamic_cast(obj); + if (entry == 0) continue; + + // event histo + fEventCount->Add(entry->fEventCount); + fRecEventHist->Add(entry->fRecEventHist); + fRecMCEventHist->Add(entry->fRecMCEventHist); + fMCEventHist->Add(entry->fMCEventHist); + + // track histo + fRecMCTrackHist->Add(entry->fRecMCTrackHist); + + // physics selection + //collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); + + count++; + } + + //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); + //trigSelection->Merge(collPhysSelection); + + //if(collPhysSelection) delete collPhysSelection; + +return count; +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysis::Analyse() +{ + // + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + TH1D *h1D = 0; + TH2D *h2D = 0; + + + // + // get cuts + // + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available"); + return; + } + + // + // set min and max values + // + Double_t minPt = accCuts->GetMinPt(); + Double_t maxPt = accCuts->GetMaxPt(); + Double_t minEta = accCuts->GetMinEta(); + Double_t maxEta = accCuts->GetMaxEta()-0.00001; + + Double_t maxDCAr = accCuts->GetMaxDCAr(); + + // + // Event counters + // + h2D = (TH2D*)fEventCount->Projection(0,1); + if(!h2D) return; + h2D->SetName("trig_vs_trigANDvertex"); + aFolderObj->Add(h2D); + + fEventCount->GetAxis(0)->SetRange(2,2); // triggered + h1D = (TH1D*)fEventCount->Projection(1); + if(!h1D) return; + h1D->SetTitle("rec. vertex for triggered events"); + h1D->SetName("trigANDvertex"); + aFolderObj->Add(h1D); + + // + // Create rec. event histograms + // + h1D = (TH1D *)fRecEventHist->Projection(0); + if(!h1D) return; + h1D->SetName("rec_xv"); + aFolderObj->Add(h1D); + + h1D = (TH1D *)fRecEventHist->Projection(1); + if(!h1D) return; + h1D->SetName("rec_yv"); + aFolderObj->Add(h1D); + + h1D = (TH1D *)fRecEventHist->Projection(2); + if(!h1D) return; + h1D->SetName("rec_zv"); + aFolderObj->Add(h1D); + + h2D = (TH2D *)fRecEventHist->Projection(3,4); + if(!h2D) return; + h2D->SetName("rec_resZv_vs_Mult"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecEventHist->Projection(0,1); + if(!h2D) return; + h2D->SetName("rec_xv_vs_yv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecEventHist->Projection(0,2); + if(!h2D) return; + h2D->SetName("rec_xv_vs_zv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecEventHist->Projection(3,4); + if(!h2D) return; + h2D->SetName("rec_resZv_vs_Mult"); + aFolderObj->Add(h2D); + + // + // MC available + // + if(IsUseMCInfo()) { + + // + // Create mc event histograms + // + h2D = (TH2D *)fMCEventHist->Projection(0,1); + if(!h2D) return; + h2D->SetName("mc_xv_vs_yv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fMCEventHist->Projection(0,2); + if(!h2D) return; + h2D->SetName("mc_xv_vs_zv"); + aFolderObj->Add(h2D); + + // + // Create rec-mc event histograms + // + h2D = (TH2D *)fRecMCEventHist->Projection(0,3); + if(!h2D) return; + h2D->SetName("rec_mc_deltaXv_vs_mult"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCEventHist->Projection(1,3); + if(!h2D) return; + h2D->SetName("rec_mc_deltaYv_vs_mult"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCEventHist->Projection(2,3); + if(!h2D) return; + h2D->SetName("rec_mc_deltaZv_vs_mult"); + aFolderObj->Add(h2D); + + } // end use MC info + + + + // + // Create rec-mc track track histograms + // + + // DCA cuts + fRecMCTrackHist->GetAxis(3)->SetRangeUser(-maxDCAr,maxDCAr); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(-maxDCAr,maxDCAr); + + h2D = (TH2D *)fRecMCTrackHist->Projection(7,5); + if(!h2D) return; + h2D->SetName("pt_vs_eta"); + aFolderObj->Add(h2D); + + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minPt,maxPt); + + h2D = (TH2D *)fRecMCTrackHist->Projection(0,5); + if(!h2D) return; + h2D->SetName("nClust_vs_eta"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(1,5); + if(!h2D) return; + h2D->SetName("chi2PerClust_vs_eta"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(2,5); + if(!h2D) return; + h2D->SetName("ratio_nClust_nFindableClust_vs_eta"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(5,6); + if(!h2D) return; + h2D->SetName("eta_vs_phi"); + aFolderObj->Add(h2D); + + // + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minEta,maxEta); + + h2D = (TH2D *)fRecMCTrackHist->Projection(0,6); + if(!h2D) return; + h2D->SetName("nClust_vs_phi"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(1,6); + if(!h2D) return; + h2D->SetName("chi2PerClust_vs_phi"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(2,6); + if(!h2D) return; + h2D->SetName("ratio_nClust_nFindableClust_vs_phi"); + aFolderObj->Add(h2D); + + // + fRecMCTrackHist->GetAxis(7)->SetRangeUser(0.0,maxPt); + + h2D = (TH2D *)fRecMCTrackHist->Projection(0,7); + if(!h2D) return; + h2D->SetName("nClust_vs_pt"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(1,7); + if(!h2D) return; + h2D->SetName("chi2PerClust_vs_pt"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(2,7); + if(!h2D) return; + h2D->SetName("ratio_nClust_nFindableClust_vs_pt"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(6,7); + if(!h2D) return; + h2D->SetName("phi_vs_pt"); + aFolderObj->Add(h2D); + + + // fiducial volume + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minEta,maxEta); + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minPt,maxPt); + + // DCA cuts + fRecMCTrackHist->GetAxis(3)->SetRangeUser(-maxDCAr,maxDCAr); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(-maxDCAr,maxDCAr); + + h2D = (TH2D *)fRecMCTrackHist->Projection(0,1); + if(!h2D) return; + h2D->SetName("nClust_vs_chi2PerClust"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCTrackHist->Projection(0,2); + if(!h2D) return; + h2D->SetName("nClust_vs_ratio_nClust_nFindableClust"); + aFolderObj->Add(h2D); + + // + // DCAy cuts + // + fRecMCTrackHist->GetAxis(0)->SetRange(50,160); // nClust/track > 50 + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,3.9999); // chi2/cluster < 4.0 + fRecMCTrackHist->GetAxis(3)->SetRange(1,fRecMCTrackHist->GetAxis(3)->GetNbins()); + //fRecMCTrackHist->GetAxis(4)->SetRangeUser(-1.0,1.0); + fRecMCTrackHist->GetAxis(4)->SetRange(1,fRecMCTrackHist->GetAxis(4)->GetNbins()); + + // sec + fRecMCTrackHist->GetAxis(9)->SetRange(1,1); + h1D = (TH1D *)fRecMCTrackHist->Projection(3); + if(!h1D) return; + h1D->SetName("dcay_sec"); + aFolderObj->Add(h1D); + + // prim + fRecMCTrackHist->GetAxis(9)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHist->Projection(3); + if(!h1D) return; + h1D->SetName("dcay_prim"); + aFolderObj->Add(h1D); + + // DCAz cuts + //fRecMCTrackHist->GetAxis(3)->SetRangeUser(-1.0,1.0); + fRecMCTrackHist->GetAxis(4)->SetRange(1,fRecMCTrackHist->GetAxis(4)->GetNbins()); + + // sec + fRecMCTrackHist->GetAxis(9)->SetRange(1,1); + h1D = (TH1D *)fRecMCTrackHist->Projection(4); + if(!h1D) return; + h1D->SetName("dcaz_sec"); + aFolderObj->Add(h1D); + + // prim + fRecMCTrackHist->GetAxis(9)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHist->Projection(4); + if(!h1D) return; + h1D->SetName("dcaz_prim"); + aFolderObj->Add(h1D); + + + // export objects to analysis folder + fAnalysisFolder = ExportToFolder(aFolderObj); + if(!fAnalysisFolder) { + if(aFolderObj) delete aFolderObj; + return; + } + + // delete only TObjArray + if(aFolderObj) delete aFolderObj; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtCutAnalysis::ExportToFolder(TObjArray * const array) +{ + // recreate folder avery time and export objects to new one + // + AlidNdPtCutAnalysis * comp=this; + TFolder *folder = comp->GetAnalysisFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtCutAnalysis::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysisPbPb.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysisPbPb.cxx index 26ae91c1eb4..355a86a7a20 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysisPbPb.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtCutAnalysisPbPb.cxx @@ -1,1413 +1,1413 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//------------------------------------------------------------------------------ -// AlidNdPtCutAnalysisPbPb class. -// -// a. functionality: -// - fills generic cut histograms -// - generates cuts (selection criteria) -// -// b. data members: -// - generic cut histograms -// - control histograms -// -// Author: J.Otwinowski 04/11/2008 -//------------------------------------------------------------------------------ -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TMatrixD.h" - -#include - -#include "AliHeader.h" -#include "AliGenEventHeader.h" -#include "AliInputEventHandler.h" -#include "AliCentrality.h" -#include "AliStack.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDtrackCuts.h" -#include "AliLog.h" -#include "AliTracker.h" - -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AlidNdPtBackgroundCuts.h" -#include "AlidNdPtAnalysis.h" -#include "AliPhysicsSelection.h" - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" -#include "AlidNdPtCutAnalysisPbPb.h" - -using namespace std; - -ClassImp(AlidNdPtCutAnalysisPbPb) - -//_____________________________________________________________________________ - AlidNdPtCutAnalysisPbPb::AlidNdPtCutAnalysisPbPb(): AlidNdPt(), - fAnalysisFolder(0), - fEventCount(0), - fRecEventHist(0), - fMCEventHist(0), - fRecMCEventHist(0), - fRecMCTrackHist(0), - fCentralityEstimator(0), - fFolderObj(0) -{ - // default constructor - Init(); -} - -//_____________________________________________________________________________ -AlidNdPtCutAnalysisPbPb::AlidNdPtCutAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title), - fAnalysisFolder(0), - fEventCount(0), - fRecEventHist(0), - fMCEventHist(0), - fRecMCEventHist(0), - fRecMCTrackHist(0), - fCentralityEstimator(0), - fFolderObj(0) -{ - // constructor - Init(); -} - -//_____________________________________________________________________________ -AlidNdPtCutAnalysisPbPb::~AlidNdPtCutAnalysisPbPb() { - // - if(fEventCount) delete fEventCount; fEventCount=0; - if(fRecEventHist) delete fRecEventHist; fRecEventHist=0; - if(fMCEventHist) delete fMCEventHist; fMCEventHist=0; - if(fRecMCEventHist) delete fRecMCEventHist; fRecMCEventHist=0; - if(fRecMCTrackHist) delete fRecMCTrackHist; fRecMCTrackHist=0; - - if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; - if(fFolderObj) delete fFolderObj; fFolderObj=0; -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysisPbPb::Init(){ - // - // Init histograms - // - //const Int_t ptNbins = 58; - //const Double_t ptMin = 0.; - //const Double_t ptMax = 20.; - /* - Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0, 20.}; - */ - - // set pt bins - const Int_t ptNbins = 50; - const Double_t ptMin = 1.e-2, ptMax = 100.; - Double_t *binsPt = CreateLogAxis(ptNbins,ptMin,ptMax); - - // centrality bins - const Int_t centrNbins = 3; - const Double_t centrMin = 0, centrMax = 1; - Double_t binsCentr[centrNbins+1] = {0.0, 20., 50., 100.}; - - // - Int_t binsEventCount[2]={2,2}; - Double_t minEventCount[2]={0,0}; - Double_t maxEventCount[2]={2,2}; - fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount); - fEventCount->GetAxis(0)->SetTitle("trig"); - fEventCount->GetAxis(1)->SetTitle("trig+vert"); - fEventCount->Sumw2(); - - //Xv:Yv:Zv:ResZv:Mult - Double_t kFact = 0.1; - - Int_t binsRecEventHist[5]={80,80,100,80,150}; - Double_t minRecEventHist[5]={-1.*kFact,-1.*kFact,-35.,0.,0.}; - Double_t maxRecEventHist[5]={1.*kFact,1.*kFact,35.,10.,3000.}; - fRecEventHist = new THnSparseF("fRecEventHist","Xv:Yv:Zv:ResZv:Mult",5,binsRecEventHist,minRecEventHist,maxRecEventHist); - fRecEventHist->GetAxis(0)->SetTitle("Xv (cm)"); - fRecEventHist->GetAxis(1)->SetTitle("Yv (cm)"); - fRecEventHist->GetAxis(2)->SetTitle("Zv (cm)"); - fRecEventHist->GetAxis(3)->SetTitle("ResZv (cm)"); - fRecEventHist->GetAxis(4)->SetTitle("Mult"); - fRecEventHist->Sumw2(); - - //Xv:Yv:Zv - Int_t binsMCEventHist[3]={80,80,100}; - Double_t minMCEventHist[3]={-0.1,-0.1,-35.}; - Double_t maxMCEventHist[3]={0.1,0.1,35.}; - fMCEventHist = new THnSparseF("fMCEventHist","mcXv:mcYv:mcZv",3,binsMCEventHist,minMCEventHist,maxMCEventHist); - fMCEventHist->GetAxis(0)->SetTitle("mcXv (cm)"); - fMCEventHist->GetAxis(1)->SetTitle("mcYv (cm)"); - fMCEventHist->GetAxis(2)->SetTitle("mcZv (cm)"); - fMCEventHist->Sumw2(); - - //Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult - Int_t binsRecMCEventHist[4]={100,100,100,150}; - Double_t minRecMCEventHist[4]={-1.0*kFact,-1.0*kFact,-1.0*kFact,0.}; - Double_t maxRecMCEventHist[4]={1.0*kFact,1.0*kFact,1.0*kFact,3000.}; - fRecMCEventHist = new THnSparseF("fRecMCEventHist","Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult",4,binsRecMCEventHist,minRecMCEventHist,maxRecMCEventHist); - fRecMCEventHist->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); - fRecMCEventHist->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); - fRecMCEventHist->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); - fRecMCEventHist->GetAxis(3)->SetTitle("Mult"); - fRecMCEventHist->Sumw2(); - - // - // THnSparse track histograms - // - // - // - //nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc - Int_t binsRecMCTrackHist[17]= {160, 10, 70, 30, 20, 50, 50, 20, 90, ptNbins, 2, 2, 2, 2, 3, centrNbins,100}; - Double_t minRecMCTrackHist[17]={0., 0., 0., 0., 0.,-0.5,-2.5,-1.0, 0., ptMin, 0., 0., 0., 0.,-1., centrMin, 0.}; - Double_t maxRecMCTrackHist[17]={160.,10.,70.,1.5, 1., 0.5, 2.5, 1.0, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2., 2., centrMax, 100.}; - - fRecMCTrackHist = new THnSparseF("fRecMCTrackHist","nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc",17,binsRecMCTrackHist,minRecMCTrackHist,maxRecMCTrackHist); - fRecMCTrackHist->SetBinEdges(9,binsPt); - fRecMCTrackHist->SetBinEdges(15,binsCentr); - - fRecMCTrackHist->GetAxis(0)->SetTitle("nCrossRows"); - fRecMCTrackHist->GetAxis(1)->SetTitle("chi2PerClust"); - fRecMCTrackHist->GetAxis(2)->SetTitle("chi2PerClustITS"); - fRecMCTrackHist->GetAxis(3)->SetTitle("nCrossRows/nFindableClust"); - fRecMCTrackHist->GetAxis(4)->SetTitle("fracSharedClust"); - fRecMCTrackHist->GetAxis(5)->SetTitle("DCAy (cm)"); - fRecMCTrackHist->GetAxis(6)->SetTitle("DCAz (cm)"); - fRecMCTrackHist->GetAxis(7)->SetTitle("#eta"); - fRecMCTrackHist->GetAxis(8)->SetTitle("#phi (rad)"); - fRecMCTrackHist->GetAxis(9)->SetTitle("p_{T} (GeV/c)"); - fRecMCTrackHist->GetAxis(10)->SetTitle("hasStrangeMother"); - fRecMCTrackHist->GetAxis(11)->SetTitle("isFromConversion"); - fRecMCTrackHist->GetAxis(12)->SetTitle("isFromMaterial"); - fRecMCTrackHist->GetAxis(13)->SetTitle("isPrim"); - fRecMCTrackHist->GetAxis(14)->SetTitle("charge"); - fRecMCTrackHist->GetAxis(15)->SetTitle("centrality"); - fRecMCTrackHist->GetAxis(16)->SetTitle("chi2ToTPCc"); - fRecMCTrackHist->Sumw2(); - - // init output folder - fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); - -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent) -{ - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - // trigger selection - - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - } - - // centrality determination - Float_t centralityF = -1; - AliCentrality *esdCentrality = esdEvent->GetCentrality(); - centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - - Int_t multMCTrueTracks = 0; - if(IsUseMCInfo()) - { - // - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - Double_t vMCEventHist[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; - fMCEventHist->Fill(vMCEventHist); - - // multipliticy of all MC primary tracks - // in Zv, pt and eta ranges) - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); - - } // end bUseMC - - // get reconstructed vertex - const AliESDVertex* vtxESD = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - vtxESD = esdEvent->GetPrimaryVertexTPC(); - } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { - vtxESD = esdEvent->GetPrimaryVertexTracks(); - } - else { - return; - } - - if(!vtxESD) return; - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - TObjArray *allChargedTracks=0; - Int_t multAll=0; - - // - // event counter - // - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK,isEventTriggered); - - Bool_t isTrigAndVertex = isEventTriggered && isEventOK; - Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex}; - fEventCount->Fill(vEventCount); - - // check event cuts - if(isEventOK && isEventTriggered) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - for(Int_t i=0; iAt(i); - if(!track) continue; - - if(!esdTrackCuts->AcceptTrack(track)) continue; - if(!accCuts->AcceptTrack(track)) continue; - - FillHistograms(esdEvent, track, stack, centralityF); - multAll++; - - } - - Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll}; - fRecEventHist->Fill(vRecEventHist); - - if(IsUseMCInfo()) { - Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll}; - fRecMCEventHist->Fill(vRecMCEventHist); - } - } - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysisPbPb::FillHistograms(AliESDEvent *const esdEvent, AliESDtrack *const esdTrack, AliStack *const stack, Float_t centralityF) const -{ - // - // Fill ESD track and MC histograms - // - if(!esdTrack) return; - if(esdTrack->Charge() == 0.) return; - - Float_t pt = esdTrack->Pt(); - Float_t eta = esdTrack->Eta(); - Float_t phi = esdTrack->Phi(); - - Int_t nClust = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - nClust = esdTrack->GetTPCNclsIter1(); - } else { - nClust = esdTrack->GetTPCclusters(0); - } - - Float_t chi2PerCluster = 0.; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2Iter1()/Float_t(nClust); - } else { - chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); - } - - Int_t nClustersITS = esdTrack->GetITSclusters(0); - Float_t chi2PerClusterITS = -1; - if (nClustersITS!=0) { - chi2PerClusterITS = esdTrack->GetITSchi2()/Float_t(nClustersITS); - } - - Float_t clustPerFindClust = 0.; - Int_t nFindableClust = esdTrack->GetTPCNclsF(); - if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust; - - Float_t b[2], bCov[3]; - esdTrack->GetImpactParameters(b,bCov); - - // - Float_t nCrossedRowsTPC = esdTrack->GetTPCClusterInfo(2,1); - - Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0; - if (esdTrack->GetTPCNclsF()>0) { - ratioCrossedRowsOverFindableClustersTPC = esdTrack->GetTPCClusterInfo(2,1)/esdTrack->GetTPCNclsF(); - } - - // - Int_t nClustersTPCShared = esdTrack->GetTPCnclsS(); - Float_t fracClustersTPCShared = -1.; - fracClustersTPCShared = Float_t(nClustersTPCShared)/Float_t(nClust); - - // - // kink idx - Int_t kinkIdx = 0; - //if(esdTrack->GetKinkIndex(0) > 0.) isKink = kTRUE; - if(esdTrack->GetKinkIndex(0) > 0) kinkIdx = 1; // kink daughter - else if(esdTrack->GetKinkIndex(0) < 0) kinkIdx = -1; // kink mother - else kinkIdx = 0; // not kink - - //printf("esdTrack->GetKinkIndex(0) %d \n", esdTrack->GetKinkIndex(0)); - //printf("esdTrack->GetKinkIndex(1) %d \n", esdTrack->GetKinkIndex(1)); - //printf("esdTrack->GetKinkIndex(2) %d \n", esdTrack->GetKinkIndex(2)); - //printf("kinkIdx %d \n", kinkIdx); - - Bool_t isOK = kTRUE; - AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(esdTrack->GetTPCInnerParam()); - if (!tpcInner) return; - tpcInner->Rotate(esdTrack->GetAlpha()); - tpcInner->PropagateTo(esdTrack->GetX(),esdEvent->GetMagneticField()); - - // tpc constrained - AliExternalTrackParam * tpcInnerC = (AliExternalTrackParam *)(esdTrack->GetTPCInnerParam()->Clone()); - if (!tpcInnerC) return; - tpcInnerC->Rotate(esdTrack->GetAlpha()); - tpcInnerC->PropagateTo(esdTrack->GetX(),esdEvent->GetMagneticField()); - Double_t dz[2],cov[3]; - AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex(); - - if (!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) - { - if(tpcInnerC) delete tpcInnerC; - return; - } - Double_t covar[6]; vtx->GetCovMatrix(covar); - Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]}; - Double_t c[3]={covar[2],0.,covar[5]}; - Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c); - isOK = tpcInnerC->Update(p,c); - isOK = tpcInnerC->Rotate(esdTrack->GetAlpha()); - isOK = tpcInnerC->Propagate(esdTrack->GetAlpha(),esdTrack->GetX(),esdEvent->GetMagneticField()); - - if(!isOK || chi2C>kVeryBig) { - if(tpcInnerC) delete tpcInnerC; - return; - } - - // - // calculate chi2 between vi and vj vectors - // with covi and covj covariance matrices - // chi2ij = (vi-vj)^(T)*(covi+covj)^(-1)*(vi-vj) - // - TMatrixD deltaT(5,1); - TMatrixD delta(1,5); - TMatrixD covarM(5,5); - - for (Int_t ipar=0; ipar<5; ipar++) deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-esdTrack->GetParameter()[ipar]; - for (Int_t ipar=0; ipar<5; ipar++) delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-esdTrack->GetParameter()[ipar]; - - for (Int_t ipar=0; ipar<5; ipar++) { - for (Int_t jpar=0; jpar<5; jpar++) { - Int_t index=esdTrack->GetIndex(ipar,jpar); - covarM(ipar,jpar)=esdTrack->GetCovariance()[index]+tpcInnerC->GetCovariance()[index]; - } - } - TMatrixD covarMInv = covarM.Invert(); - TMatrixD mat2 = covarMInv*deltaT; - TMatrixD chi2 = delta*mat2; - - // - // Fill rec vs MC information - // - Bool_t isPrim = kTRUE; - Bool_t hasStrangeMother = kFALSE; - Bool_t isFromMaterial = kFALSE; - Bool_t isFromConversion = kFALSE; - - if(IsUseMCInfo()) - { - if(!stack) return; - Int_t label = TMath::Abs(esdTrack->GetLabel()); - TParticle* particle = stack->Particle(label); - if(!particle) return; - if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return; - isPrim = stack->IsPhysicalPrimary(label); - - // check whether has stange mother - // - Int_t motherPdg = -1; - TParticle* mother = 0; - - Int_t motherLabel = particle->GetMother(0); - if(motherLabel>0) mother = stack->Particle(motherLabel); - if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only - Int_t mech = particle->GetUniqueID(); // production mechanism - - // K+-, lambda, antilambda, K0s decays - if(!isPrim && mech==4 && - (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short)) - { - hasStrangeMother = kTRUE; - } - - if(!isPrim && mech==5 && motherPdg==kGamma) { - isFromConversion=kTRUE; - } - - if(!isPrim && mech==13) { - isFromMaterial=kTRUE; - } - } - - // fill histo - Int_t charge = esdTrack->Charge(); - Double_t vRecMCTrackHist[17] = { nCrossedRowsTPC, chi2PerCluster, chi2PerClusterITS,ratioCrossedRowsOverFindableClustersTPC, fracClustersTPCShared, b[0], b[1], eta, phi, pt, hasStrangeMother, isFromConversion, isFromMaterial, isPrim, charge, centralityF, chi2(0,0) }; - fRecMCTrackHist->Fill(vRecMCTrackHist); - - if(tpcInnerC) delete tpcInnerC; -} - -//_____________________________________________________________________________ -Long64_t AlidNdPtCutAnalysisPbPb::Merge(TCollection* const list) -{ - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - TObjArray* objArrayList = 0; - objArrayList = new TObjArray(); - - //TList *collPhysSelection = new TList; - - // collection of generated histograms - Int_t count=0; - while((obj = iter->Next()) != 0) { - AlidNdPtCutAnalysisPbPb* entry = dynamic_cast(obj); - if (entry == 0) continue; - - // event histo - if(GetMergeTHnSparse()) - { - fEventCount->Add(entry->fEventCount); - fRecEventHist->Add(entry->fRecEventHist); - fRecMCEventHist->Add(entry->fRecMCEventHist); - fMCEventHist->Add(entry->fMCEventHist); - - // track histo - fRecMCTrackHist->Add(entry->fRecMCTrackHist); - } - - if (entry->fFolderObj) { objArrayList->Add(entry->fFolderObj); } - - count++; - } - if (fFolderObj) { fFolderObj->Merge(objArrayList); } - - // to signal that track histos were not merged: reset - if (!GetMergeTHnSparse()) - { - // reset content - // save memory - fEventCount->Reset(); - fRecEventHist->Reset(); - fRecMCEventHist->Reset(); - fMCEventHist->Reset(); - - // track histo - fRecMCTrackHist->Reset(); - } - - // delete - if (objArrayList) delete objArrayList; objArrayList=0; - -return count; -} - -//_____________________________________________________________________________ -void AlidNdPtCutAnalysisPbPb::Analyse() -{ - // - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - TH1D *h1D = 0; - TH2D *h2D = 0; - TH3D *h3D = 0; - - // - // make event level projection - // - //THnSparseF *fEventCount; //-> trig, trig + vertex - //THnSparseF *fRecEventHist; //-> Xv:Yv:Zv:ResZv:Mult - //THnSparseF *fMCEventHist; //-> mcXv:mcYv:mcZv - //THnSparseF *fRecMCEventHist; //-> Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult - - // - // Event counters - // - h2D = (TH2D*)fEventCount->Projection(0,1); - h2D->SetName("trig_vs_trigANDvertex"); - h2D->SetTitle("trig_vs_trigANDvertex"); - aFolderObj->Add(h2D); - - fEventCount->GetAxis(0)->SetRange(2,2); // triggered - h1D = (TH1D*)fEventCount->Projection(1); - h1D->SetTitle("rec. vertex for triggered events"); - h1D->SetName("trigANDvertex"); - h1D->SetTitle("trigANDvertex"); - aFolderObj->Add(h1D); - - // - // Create rec. event histograms - // - h1D = (TH1D *)fRecEventHist->Projection(0); - h1D->SetName("rec_xv"); - h1D->SetTitle("rec_xv"); - aFolderObj->Add(h1D); - - h1D = (TH1D *)fRecEventHist->Projection(1); - h1D->SetName("rec_yv"); - h1D->SetTitle("rec_yv"); - aFolderObj->Add(h1D); - - h1D = (TH1D *)fRecEventHist->Projection(2); - h1D->SetName("rec_zv"); - h1D->SetTitle("rec_zv"); - aFolderObj->Add(h1D); - - h2D = (TH2D *)fRecEventHist->Projection(0,1); - h2D->SetName("rec_xv_vs_yv"); - h2D->SetTitle("rec_xv_vs_yv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecEventHist->Projection(1,2); - h2D->SetName("rec_yv_vs_zv"); - h2D->SetTitle("rec_yv_vs_zv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecEventHist->Projection(0,2); - h2D->SetName("rec_xv_vs_zv"); - h2D->SetTitle("rec_xv_vs_zv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecEventHist->Projection(3,4); - h2D->SetName("rec_resZv_vs_Mult"); - h2D->SetTitle("rec_resZv_vs_Mult"); - aFolderObj->Add(h2D); - - // - // MC available - // - if(IsUseMCInfo()) { - - // - // Create mc event histograms - // - - h1D = (TH1D *)fMCEventHist->Projection(0); - h1D->SetName("mc_xv"); - h1D->SetTitle("mc_xv"); - aFolderObj->Add(h1D); - - h1D = (TH1D *)fMCEventHist->Projection(1); - h1D->SetName("mc_yv"); - h1D->SetTitle("mc_yv"); - aFolderObj->Add(h1D); - - h1D = (TH1D *)fMCEventHist->Projection(2); - h1D->SetName("mc_zv"); - h1D->SetTitle("mc_zv"); - aFolderObj->Add(h1D); - - - h2D = (TH2D *)fMCEventHist->Projection(0,1); - h2D->SetName("mc_xv_vs_yv"); - h2D->SetTitle("mc_xv_vs_yv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fMCEventHist->Projection(1,2); - h2D->SetName("mc_yv_vs_zv"); - h2D->SetTitle("mc_yv_vs_zv"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fMCEventHist->Projection(0,2); - h2D->SetName("mc_xv_vs_zv"); - h2D->SetTitle("mc_xv_vs_zv"); - aFolderObj->Add(h2D); - - // - // Create rec-mc event histograms - // - h2D = (TH2D *)fRecMCEventHist->Projection(0,3); - h2D->SetName("rec_mc_deltaXv_vs_mult"); - h2D->SetTitle("rec_mc_deltaXv_vs_mult"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCEventHist->Projection(1,3); - h2D->SetName("rec_mc_deltaYv_vs_mult"); - h2D->SetTitle("rec_mc_deltaYv_vs_mult"); - aFolderObj->Add(h2D); - - h2D = (TH2D *)fRecMCEventHist->Projection(2,3); - h2D->SetName("rec_mc_deltaZv_vs_mult"); - h2D->SetTitle("rec_mc_deltaZv_vs_mult"); - aFolderObj->Add(h2D); - - } // end use MC info - - // - // make track level projection - // - // THnSparse track histograms - // nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc - // - - // only TH3 histograms - // x : pT : centr - Double_t minNCrossRows = 120.; - Double_t maxChi2PerClust = 4.; - Double_t maxChi2PerClustITS = 36.; - Double_t minNCrossRowsOverFindable = 0.8; - Double_t maxFracSharedClust = 0.4; - Double_t minDCAr = -0.2, maxDCAr = 0.2; - Double_t minDCAz = -2., maxDCAz = 2.; - Double_t minEta = -0.8, maxEta = 0.8; - Double_t maxChi2ToTPCc = 50; - - // only TH3 histograms - // x : pT : centr - - // set all cuts - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); - - // nCrossRows - fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); - - h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); - h3D->SetName("rec_nCrossRows_pT_centr"); - h3D->SetTitle("rec_nCrossRows_pT_centr"); - aFolderObj->Add(h3D); - - - // Chi2PerClust - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); - - h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); - h3D->SetName("rec_Chi2PerClust_pT_centr"); - h3D->SetTitle("rec_Chi2PerClust_pT_centr"); - aFolderObj->Add(h3D); - - - // Chi2PerClustITS - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); - h3D->SetName("rec_Chi2PerClustITS_pT_centr"); - h3D->SetTitle("rec_Chi2PerClustITS_pT_centr"); - aFolderObj->Add(h3D); - - - // NCrossRowsOverFindable - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); - h3D->SetName("rec_NCrossRowsOverFindable_pT_centr"); - h3D->SetTitle("rec_NCrossRowsOverFindable_pT_centr"); - aFolderObj->Add(h3D); - - - // FracSharedClust - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); - h3D->SetName("rec_FracSharedClust_pT_centr"); - h3D->SetTitle("rec_FracSharedClust_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAr - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); - h3D->SetName("rec_DCAr_pT_centr"); - h3D->SetTitle("rec_DCAr_pT_centr"); - aFolderObj->Add(h3D); - - // DCAz - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); - h3D->SetName("rec_DCAz_pT_centr"); - h3D->SetTitle("rec_DCAz_pT_centr"); - aFolderObj->Add(h3D); - - // chi2ToTPCc - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); - h3D->SetName("rec_chi2ToTPCc_pT_centr"); - h3D->SetTitle("rec_chi2ToTPCc_pT_centr"); - aFolderObj->Add(h3D); - - - // - // MC available - // - // nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc - // - - if(IsUseMCInfo()) { - // - // only TH3 histograms - // x : pT : centr - // - // comes from week decays - // - fRecMCTrackHist->GetAxis(10)->SetRange(2,2); - - // set all cuts - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); - - // nCrossRows - fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); - - h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); - h3D->SetName("rec_sec_strange_nCrossRows_pT_centr"); - h3D->SetTitle("rec_sec_strange_nCrossRows_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClust - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); - - h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); - h3D->SetName("rec_sec_strange_Chi2PerClust_pT_centr"); - h3D->SetTitle("rec_sec_strange_Chi2PerClust_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClustITS - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); - h3D->SetName("rec_sec_strange_Chi2PerClustITS_pT_centr"); - h3D->SetTitle("rec_sec_strange_Chi2PerClustITS_pT_centr"); - aFolderObj->Add(h3D); - - - // NCrossRowsOverFindable - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); - h3D->SetName("rec_sec_strange_NCrossRowsOverFindable_pT_centr"); - h3D->SetTitle("rec_sec_strange_NCrossRowsOverFindable_pT_centr"); - aFolderObj->Add(h3D); - - - // FracSharedClust - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); - h3D->SetName("rec_sec_strange_FracSharedClust_pT_centr"); - h3D->SetTitle("rec_sec_strange_FracSharedClust_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAr - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); - h3D->SetName("rec_sec_strange_DCAr_pT_centr"); - h3D->SetTitle("rec_sec_strange_DCAr_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAz - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); - h3D->SetName("rec_sec_strange_DCAz_pT_centr"); - h3D->SetTitle("rec_sec_strange_DCAz_pT_centr"); - aFolderObj->Add(h3D); - - // chi2ToTPCc - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); - h3D->SetName("rec_sec_strange_chi2ToTPCc_pT_centr"); - h3D->SetTitle("rec_sec_strange_chi2ToTPCc_pT_centr"); - aFolderObj->Add(h3D); - - - // only TH3 histograms - // x : pT : centr - // - - // comes from conversion - // - fRecMCTrackHist->GetAxis(10)->SetRange(1,2); - fRecMCTrackHist->GetAxis(11)->SetRange(2,2); - - // set all cuts - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); - - // nCrossRows - fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); - - h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); - h3D->SetName("rec_sec_conversion_nCrossRows_pT_centr"); - h3D->SetTitle("rec_sec_conversion_nCrossRows_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClust - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); - - h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); - h3D->SetName("rec_sec_conversion_Chi2PerClust_pT_centr"); - h3D->SetTitle("rec_sec_conversion_Chi2PerClust_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClustITS - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); - h3D->SetName("rec_sec_conversion_Chi2PerClustITS_pT_centr"); - h3D->SetTitle("rec_sec_conversion_Chi2PerClustITS_pT_centr"); - aFolderObj->Add(h3D); - - - // NCrossRowsOverFindable - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); - h3D->SetName("rec_sec_conversion_NCrossRowsOverFindable_pT_centr"); - h3D->SetTitle("rec_sec_conversion_NCrossRowsOverFindable_pT_centr"); - aFolderObj->Add(h3D); - - - // FracSharedClust - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); - h3D->SetName("rec_sec_conversion_FracSharedClust_pT_centr"); - h3D->SetTitle("rec_sec_conversion_FracSharedClust_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAr - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); - h3D->SetName("rec_sec_conversion_DCAr_pT_centr"); - h3D->SetTitle("rec_sec_conversion_DCAr_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAz - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); - h3D->SetName("rec_sec_conversion_DCAz_pT_centr"); - h3D->SetTitle("rec_sec_conversion_DCAz_pT_centr"); - aFolderObj->Add(h3D); - - // chi2ToTPCc - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); - h3D->SetName("rec_sec_conversion_chi2ToTPCc_pT_centr"); - h3D->SetTitle("rec_sec_conversion_chi2ToTPCc_pT_centr"); - aFolderObj->Add(h3D); - - - - - - // comes from interaction with material - // - fRecMCTrackHist->GetAxis(11)->SetRange(1,2); - fRecMCTrackHist->GetAxis(12)->SetRange(2,2); - - // set all cuts - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); - - // nCrossRows - fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); - - h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); - h3D->SetName("rec_sec_material_nCrossRows_pT_centr"); - h3D->SetTitle("rec_sec_material_nCrossRows_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClust - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); - - h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); - h3D->SetName("rec_sec_material_Chi2PerClust_pT_centr"); - h3D->SetTitle("rec_sec_material_Chi2PerClust_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClustITS - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); - h3D->SetName("rec_sec_material_Chi2PerClustITS_pT_centr"); - h3D->SetTitle("rec_sec_material_Chi2PerClustITS_pT_centr"); - aFolderObj->Add(h3D); - - - // NCrossRowsOverFindable - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); - h3D->SetName("rec_sec_material_NCrossRowsOverFindable_pT_centr"); - h3D->SetTitle("rec_sec_material_NCrossRowsOverFindable_pT_centr"); - aFolderObj->Add(h3D); - - - // FracSharedClust - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); - h3D->SetName("rec_sec_material_FracSharedClust_pT_centr"); - h3D->SetTitle("rec_sec_material_FracSharedClust_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAr - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); - h3D->SetName("rec_sec_material_DCAr_pT_centr"); - h3D->SetTitle("rec_sec_material_DCAr_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAz - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); - h3D->SetName("rec_sec_material_DCAz_pT_centr"); - h3D->SetTitle("rec_sec_material_DCAz_pT_centr"); - aFolderObj->Add(h3D); - - // chi2ToTPCc - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); - h3D->SetName("rec_sec_material_chi2ToTPCc_pT_centr"); - h3D->SetTitle("rec_sec_material_chi2ToTPCc_pT_centr"); - aFolderObj->Add(h3D); - - - - // - // only TH3 histograms - // x : pT : centr - // - // secondaries defined as AliStack::IsPhysicalPrimary() - // - fRecMCTrackHist->GetAxis(12)->SetRange(1,2); - fRecMCTrackHist->GetAxis(13)->SetRange(1,1); - - // set all cuts - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); - - // nCrossRows - fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); - - h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); - h3D->SetName("rec_sec_nCrossRows_pT_centr"); - h3D->SetTitle("rec_sec_nCrossRows_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClust - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); - - h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); - h3D->SetName("rec_sec_Chi2PerClust_pT_centr"); - h3D->SetTitle("rec_sec_Chi2PerClust_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClustITS - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); - h3D->SetName("rec_sec_Chi2PerClustITS_pT_centr"); - h3D->SetTitle("rec_sec_Chi2PerClustITS_pT_centr"); - aFolderObj->Add(h3D); - - - // NCrossRowsOverFindable - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); - h3D->SetName("rec_sec_NCrossRowsOverFindable_pT_centr"); - h3D->SetTitle("rec_sec_NCrossRowsOverFindable_pT_centr"); - aFolderObj->Add(h3D); - - - // FracSharedClust - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); - h3D->SetName("rec_sec_FracSharedClust_pT_centr"); - h3D->SetTitle("rec_sec_FracSharedClust_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAr - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); - h3D->SetName("rec_sec_DCAr_pT_centr"); - h3D->SetTitle("rec_sec_DCAr_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAz - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); - h3D->SetName("rec_sec_DCAz_pT_centr"); - h3D->SetTitle("rec_sec_DCAz_pT_centr"); - aFolderObj->Add(h3D); - - // chi2ToTPCc - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); - h3D->SetName("rec_sec_chi2ToTPCc_pT_centr"); - h3D->SetTitle("rec_sec_chi2ToTPCc_pT_centr"); - aFolderObj->Add(h3D); - - // - // only TH3 histograms - // x : pT : centr - // - // primaries defined as AliStack::IsPhysicalPrimary() - // - fRecMCTrackHist->GetAxis(12)->SetRange(1,2); - fRecMCTrackHist->GetAxis(13)->SetRange(2,2); - - // set all cuts - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); - - // nCrossRows - fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); - - h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); - h3D->SetName("rec_prim_nCrossRows_pT_centr"); - h3D->SetTitle("rec_prim_nCrossRows_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClust - fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); - - h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); - h3D->SetName("rec_prim_Chi2PerClust_pT_centr"); - h3D->SetTitle("rec_prim_Chi2PerClust_pT_centr"); - aFolderObj->Add(h3D); - - // Chi2PerClustITS - fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); - h3D->SetName("rec_prim_Chi2PerClustITS_pT_centr"); - h3D->SetTitle("rec_prim_Chi2PerClustITS_pT_centr"); - aFolderObj->Add(h3D); - - - // NCrossRowsOverFindable - fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); - fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); - h3D->SetName("rec_prim_NCrossRowsOverFindable_pT_centr"); - h3D->SetTitle("rec_prim_NCrossRowsOverFindable_pT_centr"); - aFolderObj->Add(h3D); - - - // FracSharedClust - fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); - h3D->SetName("rec_prim_FracSharedClust_pT_centr"); - h3D->SetTitle("rec_prim_FracSharedClust_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAr - fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); - fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); - h3D->SetName("rec_prim_DCAr_pT_centr"); - h3D->SetTitle("rec_prim_DCAr_pT_centr"); - aFolderObj->Add(h3D); - - - // DCAz - fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); - fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); - - h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); - h3D->SetName("rec_prim_DCAz_pT_centr"); - h3D->SetTitle("rec_prim_DCAz_pT_centr"); - aFolderObj->Add(h3D); - - // chi2ToTPCc - fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); - fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); - - h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); - h3D->SetName("rec_prim_chi2ToTPCc_pT_centr"); - h3D->SetTitle("rec_prim_chi2ToTPCc_pT_centr"); - aFolderObj->Add(h3D); - - } - - // export objects to analysis folder - fAnalysisFolder = ExportToFolder(aFolderObj); - if(!fAnalysisFolder) { - if(aFolderObj) delete aFolderObj; - return; - } - - // Reset setings - - for(Int_t ndim = 0; ndim < fEventCount->GetNdimensions(); ndim++) { - fEventCount->GetAxis(ndim)->SetRange(1,fEventCount->GetAxis(ndim)->GetNbins()); - } - - for(Int_t ndim = 0; ndim < fMCEventHist->GetNdimensions(); ndim++) { - fMCEventHist->GetAxis(ndim)->SetRange(1,fMCEventHist->GetAxis(ndim)->GetNbins()); - } - - for(Int_t ndim = 0; ndim < fRecMCEventHist->GetNdimensions(); ndim++) { - fRecMCEventHist->GetAxis(ndim)->SetRange(1,fRecMCEventHist->GetAxis(ndim)->GetNbins()); - } - - for(Int_t ndim = 0; ndim < fRecMCTrackHist->GetNdimensions(); ndim++) - { - fRecMCTrackHist->GetAxis(ndim)->SetRange(1,fRecMCTrackHist->GetAxis(ndim)->GetNbins()); - } - - // delete only TObjArray - //if(aFolderObj) delete aFolderObj; - - if (fFolderObj) delete fFolderObj; - fFolderObj = aFolderObj; - aFolderObj=0; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtCutAnalysisPbPb::ExportToFolder(TObjArray * const array) -{ - // recreate folder avery time and export objects to new one - // - AlidNdPtCutAnalysisPbPb * comp=this; - TFolder *folder = comp->GetAnalysisFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtCutAnalysisPbPb::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AlidNdPtCutAnalysisPbPb class. +// +// a. functionality: +// - fills generic cut histograms +// - generates cuts (selection criteria) +// +// b. data members: +// - generic cut histograms +// - control histograms +// +// Author: J.Otwinowski 04/11/2008 +//------------------------------------------------------------------------------ +#include "TH1.h" +#include "TH2.h" +#include "TH3.h" +#include "TMatrixD.h" + +#include + +#include "AliHeader.h" +#include "AliGenEventHeader.h" +#include "AliInputEventHandler.h" +#include "AliCentrality.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliTracker.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AlidNdPtBackgroundCuts.h" +#include "AlidNdPtAnalysis.h" +#include "AliPhysicsSelection.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AlidNdPtCutAnalysisPbPb.h" + +using namespace std; + +ClassImp(AlidNdPtCutAnalysisPbPb) + +//_____________________________________________________________________________ + AlidNdPtCutAnalysisPbPb::AlidNdPtCutAnalysisPbPb(): AlidNdPt(), + fAnalysisFolder(0), + fEventCount(0), + fRecEventHist(0), + fMCEventHist(0), + fRecMCEventHist(0), + fRecMCTrackHist(0), + fCentralityEstimator(0), + fFolderObj(0) +{ + // default constructor + Init(); +} + +//_____________________________________________________________________________ +AlidNdPtCutAnalysisPbPb::AlidNdPtCutAnalysisPbPb(Char_t* name, Char_t* title): AlidNdPt(name,title), + fAnalysisFolder(0), + fEventCount(0), + fRecEventHist(0), + fMCEventHist(0), + fRecMCEventHist(0), + fRecMCTrackHist(0), + fCentralityEstimator(0), + fFolderObj(0) +{ + // constructor + Init(); +} + +//_____________________________________________________________________________ +AlidNdPtCutAnalysisPbPb::~AlidNdPtCutAnalysisPbPb() { + // + if(fEventCount) delete fEventCount; fEventCount=0; + if(fRecEventHist) delete fRecEventHist; fRecEventHist=0; + if(fMCEventHist) delete fMCEventHist; fMCEventHist=0; + if(fRecMCEventHist) delete fRecMCEventHist; fRecMCEventHist=0; + if(fRecMCTrackHist) delete fRecMCTrackHist; fRecMCTrackHist=0; + + if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; + if(fFolderObj) delete fFolderObj; fFolderObj=0; +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysisPbPb::Init(){ + // + // Init histograms + // + //const Int_t ptNbins = 58; + //const Double_t ptMin = 0.; + //const Double_t ptMax = 20.; + /* + Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0, 20.}; + */ + + // set pt bins + const Int_t ptNbins = 50; + const Double_t ptMin = 1.e-2, ptMax = 100.; + Double_t *binsPt = CreateLogAxis(ptNbins,ptMin,ptMax); + + // centrality bins + const Int_t centrNbins = 3; + const Double_t centrMin = 0, centrMax = 1; + Double_t binsCentr[centrNbins+1] = {0.0, 20., 50., 100.}; + + // + Int_t binsEventCount[2]={2,2}; + Double_t minEventCount[2]={0,0}; + Double_t maxEventCount[2]={2,2}; + fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount); + fEventCount->GetAxis(0)->SetTitle("trig"); + fEventCount->GetAxis(1)->SetTitle("trig+vert"); + fEventCount->Sumw2(); + + //Xv:Yv:Zv:ResZv:Mult + Double_t kFact = 0.1; + + Int_t binsRecEventHist[5]={80,80,100,80,150}; + Double_t minRecEventHist[5]={-1.*kFact,-1.*kFact,-35.,0.,0.}; + Double_t maxRecEventHist[5]={1.*kFact,1.*kFact,35.,10.,3000.}; + fRecEventHist = new THnSparseF("fRecEventHist","Xv:Yv:Zv:ResZv:Mult",5,binsRecEventHist,minRecEventHist,maxRecEventHist); + fRecEventHist->GetAxis(0)->SetTitle("Xv (cm)"); + fRecEventHist->GetAxis(1)->SetTitle("Yv (cm)"); + fRecEventHist->GetAxis(2)->SetTitle("Zv (cm)"); + fRecEventHist->GetAxis(3)->SetTitle("ResZv (cm)"); + fRecEventHist->GetAxis(4)->SetTitle("Mult"); + fRecEventHist->Sumw2(); + + //Xv:Yv:Zv + Int_t binsMCEventHist[3]={80,80,100}; + Double_t minMCEventHist[3]={-0.1,-0.1,-35.}; + Double_t maxMCEventHist[3]={0.1,0.1,35.}; + fMCEventHist = new THnSparseF("fMCEventHist","mcXv:mcYv:mcZv",3,binsMCEventHist,minMCEventHist,maxMCEventHist); + fMCEventHist->GetAxis(0)->SetTitle("mcXv (cm)"); + fMCEventHist->GetAxis(1)->SetTitle("mcYv (cm)"); + fMCEventHist->GetAxis(2)->SetTitle("mcZv (cm)"); + fMCEventHist->Sumw2(); + + //Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult + Int_t binsRecMCEventHist[4]={100,100,100,150}; + Double_t minRecMCEventHist[4]={-1.0*kFact,-1.0*kFact,-1.0*kFact,0.}; + Double_t maxRecMCEventHist[4]={1.0*kFact,1.0*kFact,1.0*kFact,3000.}; + fRecMCEventHist = new THnSparseF("fRecMCEventHist","Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult",4,binsRecMCEventHist,minRecMCEventHist,maxRecMCEventHist); + fRecMCEventHist->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); + fRecMCEventHist->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); + fRecMCEventHist->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); + fRecMCEventHist->GetAxis(3)->SetTitle("Mult"); + fRecMCEventHist->Sumw2(); + + // + // THnSparse track histograms + // + // + // + //nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc + Int_t binsRecMCTrackHist[17]= {160, 10, 70, 30, 20, 50, 50, 20, 90, ptNbins, 2, 2, 2, 2, 3, centrNbins,100}; + Double_t minRecMCTrackHist[17]={0., 0., 0., 0., 0.,-0.5,-2.5,-1.0, 0., ptMin, 0., 0., 0., 0.,-1., centrMin, 0.}; + Double_t maxRecMCTrackHist[17]={160.,10.,70.,1.5, 1., 0.5, 2.5, 1.0, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2., 2., centrMax, 100.}; + + fRecMCTrackHist = new THnSparseF("fRecMCTrackHist","nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc",17,binsRecMCTrackHist,minRecMCTrackHist,maxRecMCTrackHist); + fRecMCTrackHist->SetBinEdges(9,binsPt); + fRecMCTrackHist->SetBinEdges(15,binsCentr); + + fRecMCTrackHist->GetAxis(0)->SetTitle("nCrossRows"); + fRecMCTrackHist->GetAxis(1)->SetTitle("chi2PerClust"); + fRecMCTrackHist->GetAxis(2)->SetTitle("chi2PerClustITS"); + fRecMCTrackHist->GetAxis(3)->SetTitle("nCrossRows/nFindableClust"); + fRecMCTrackHist->GetAxis(4)->SetTitle("fracSharedClust"); + fRecMCTrackHist->GetAxis(5)->SetTitle("DCAy (cm)"); + fRecMCTrackHist->GetAxis(6)->SetTitle("DCAz (cm)"); + fRecMCTrackHist->GetAxis(7)->SetTitle("#eta"); + fRecMCTrackHist->GetAxis(8)->SetTitle("#phi (rad)"); + fRecMCTrackHist->GetAxis(9)->SetTitle("p_{T} (GeV/c)"); + fRecMCTrackHist->GetAxis(10)->SetTitle("hasStrangeMother"); + fRecMCTrackHist->GetAxis(11)->SetTitle("isFromConversion"); + fRecMCTrackHist->GetAxis(12)->SetTitle("isFromMaterial"); + fRecMCTrackHist->GetAxis(13)->SetTitle("isPrim"); + fRecMCTrackHist->GetAxis(14)->SetTitle("charge"); + fRecMCTrackHist->GetAxis(15)->SetTitle("centrality"); + fRecMCTrackHist->GetAxis(16)->SetTitle("chi2ToTPCc"); + fRecMCTrackHist->Sumw2(); + + // init output folder + fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); + +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysisPbPb::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent) +{ + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + // trigger selection + + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // centrality determination + Float_t centralityF = -1; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + + Int_t multMCTrueTracks = 0; + if(IsUseMCInfo()) + { + // + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + Double_t vMCEventHist[3]={vtxMC[0],vtxMC[1],vtxMC[2]}; + fMCEventHist->Fill(vMCEventHist); + + // multipliticy of all MC primary tracks + // in Zv, pt and eta ranges) + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); + + } // end bUseMC + + // get reconstructed vertex + const AliESDVertex* vtxESD = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + TObjArray *allChargedTracks=0; + Int_t multAll=0; + + // + // event counter + // + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK,isEventTriggered); + + Bool_t isTrigAndVertex = isEventTriggered && isEventOK; + Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex}; + fEventCount->Fill(vEventCount); + + // check event cuts + if(isEventOK && isEventTriggered) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + for(Int_t i=0; iAt(i); + if(!track) continue; + + if(!esdTrackCuts->AcceptTrack(track)) continue; + if(!accCuts->AcceptTrack(track)) continue; + + FillHistograms(esdEvent, track, stack, centralityF); + multAll++; + + } + + Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll}; + fRecEventHist->Fill(vRecEventHist); + + if(IsUseMCInfo()) { + Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll}; + fRecMCEventHist->Fill(vRecMCEventHist); + } + } + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysisPbPb::FillHistograms(AliESDEvent *const esdEvent, AliESDtrack *const esdTrack, AliStack *const stack, Float_t centralityF) const +{ + // + // Fill ESD track and MC histograms + // + if(!esdTrack) return; + if(esdTrack->Charge() == 0.) return; + + Float_t pt = esdTrack->Pt(); + Float_t eta = esdTrack->Eta(); + Float_t phi = esdTrack->Phi(); + + Int_t nClust = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + nClust = esdTrack->GetTPCNclsIter1(); + } else { + nClust = esdTrack->GetTPCclusters(0); + } + + Float_t chi2PerCluster = 0.; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2Iter1()/Float_t(nClust); + } else { + chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); + } + + Int_t nClustersITS = esdTrack->GetITSclusters(0); + Float_t chi2PerClusterITS = -1; + if (nClustersITS!=0) { + chi2PerClusterITS = esdTrack->GetITSchi2()/Float_t(nClustersITS); + } + + Float_t clustPerFindClust = 0.; + Int_t nFindableClust = esdTrack->GetTPCNclsF(); + if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust; + + Float_t b[2], bCov[3]; + esdTrack->GetImpactParameters(b,bCov); + + // + Float_t nCrossedRowsTPC = esdTrack->GetTPCClusterInfo(2,1); + + Float_t ratioCrossedRowsOverFindableClustersTPC = 1.0; + if (esdTrack->GetTPCNclsF()>0) { + ratioCrossedRowsOverFindableClustersTPC = esdTrack->GetTPCClusterInfo(2,1)/esdTrack->GetTPCNclsF(); + } + + // + Int_t nClustersTPCShared = esdTrack->GetTPCnclsS(); + Float_t fracClustersTPCShared = -1.; + fracClustersTPCShared = Float_t(nClustersTPCShared)/Float_t(nClust); + + // + // kink idx + Int_t kinkIdx = 0; + //if(esdTrack->GetKinkIndex(0) > 0.) isKink = kTRUE; + if(esdTrack->GetKinkIndex(0) > 0) kinkIdx = 1; // kink daughter + else if(esdTrack->GetKinkIndex(0) < 0) kinkIdx = -1; // kink mother + else kinkIdx = 0; // not kink + + //printf("esdTrack->GetKinkIndex(0) %d \n", esdTrack->GetKinkIndex(0)); + //printf("esdTrack->GetKinkIndex(1) %d \n", esdTrack->GetKinkIndex(1)); + //printf("esdTrack->GetKinkIndex(2) %d \n", esdTrack->GetKinkIndex(2)); + //printf("kinkIdx %d \n", kinkIdx); + + Bool_t isOK = kTRUE; + AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(esdTrack->GetTPCInnerParam()); + if (!tpcInner) return; + tpcInner->Rotate(esdTrack->GetAlpha()); + tpcInner->PropagateTo(esdTrack->GetX(),esdEvent->GetMagneticField()); + + // tpc constrained + AliExternalTrackParam * tpcInnerC = (AliExternalTrackParam *)(esdTrack->GetTPCInnerParam()->Clone()); + if (!tpcInnerC) return; + tpcInnerC->Rotate(esdTrack->GetAlpha()); + tpcInnerC->PropagateTo(esdTrack->GetX(),esdEvent->GetMagneticField()); + Double_t dz[2],cov[3]; + AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex(); + + if (!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) + { + if(tpcInnerC) delete tpcInnerC; + return; + } + Double_t covar[6]; vtx->GetCovMatrix(covar); + Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]}; + Double_t c[3]={covar[2],0.,covar[5]}; + Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c); + isOK = tpcInnerC->Update(p,c); + isOK = tpcInnerC->Rotate(esdTrack->GetAlpha()); + isOK = tpcInnerC->Propagate(esdTrack->GetAlpha(),esdTrack->GetX(),esdEvent->GetMagneticField()); + + if(!isOK || chi2C>kVeryBig) { + if(tpcInnerC) delete tpcInnerC; + return; + } + + // + // calculate chi2 between vi and vj vectors + // with covi and covj covariance matrices + // chi2ij = (vi-vj)^(T)*(covi+covj)^(-1)*(vi-vj) + // + TMatrixD deltaT(5,1); + TMatrixD delta(1,5); + TMatrixD covarM(5,5); + + for (Int_t ipar=0; ipar<5; ipar++) deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-esdTrack->GetParameter()[ipar]; + for (Int_t ipar=0; ipar<5; ipar++) delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-esdTrack->GetParameter()[ipar]; + + for (Int_t ipar=0; ipar<5; ipar++) { + for (Int_t jpar=0; jpar<5; jpar++) { + Int_t index=esdTrack->GetIndex(ipar,jpar); + covarM(ipar,jpar)=esdTrack->GetCovariance()[index]+tpcInnerC->GetCovariance()[index]; + } + } + TMatrixD covarMInv = covarM.Invert(); + TMatrixD mat2 = covarMInv*deltaT; + TMatrixD chi2 = delta*mat2; + + // + // Fill rec vs MC information + // + Bool_t isPrim = kTRUE; + Bool_t hasStrangeMother = kFALSE; + Bool_t isFromMaterial = kFALSE; + Bool_t isFromConversion = kFALSE; + + if(IsUseMCInfo()) + { + if(!stack) return; + Int_t label = TMath::Abs(esdTrack->GetLabel()); + TParticle* particle = stack->Particle(label); + if(!particle) return; + if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return; + isPrim = stack->IsPhysicalPrimary(label); + + // check whether has stange mother + // + Int_t motherPdg = -1; + TParticle* mother = 0; + + Int_t motherLabel = particle->GetMother(0); + if(motherLabel>0) mother = stack->Particle(motherLabel); + if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only + Int_t mech = particle->GetUniqueID(); // production mechanism + + // K+-, lambda, antilambda, K0s decays + if(!isPrim && mech==4 && + (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short)) + { + hasStrangeMother = kTRUE; + } + + if(!isPrim && mech==5 && motherPdg==kGamma) { + isFromConversion=kTRUE; + } + + if(!isPrim && mech==13) { + isFromMaterial=kTRUE; + } + } + + // fill histo + Int_t charge = esdTrack->Charge(); + Double_t vRecMCTrackHist[17] = { nCrossedRowsTPC, chi2PerCluster, chi2PerClusterITS,ratioCrossedRowsOverFindableClustersTPC, fracClustersTPCShared, b[0], b[1], eta, phi, pt, hasStrangeMother, isFromConversion, isFromMaterial, isPrim, charge, centralityF, chi2(0,0) }; + fRecMCTrackHist->Fill(vRecMCTrackHist); + + if(tpcInnerC) delete tpcInnerC; +} + +//_____________________________________________________________________________ +Long64_t AlidNdPtCutAnalysisPbPb::Merge(TCollection* const list) +{ + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + TObjArray* objArrayList = 0; + objArrayList = new TObjArray(); + + //TList *collPhysSelection = new TList; + + // collection of generated histograms + Int_t count=0; + while((obj = iter->Next()) != 0) { + AlidNdPtCutAnalysisPbPb* entry = dynamic_cast(obj); + if (entry == 0) continue; + + // event histo + if(GetMergeTHnSparse()) + { + fEventCount->Add(entry->fEventCount); + fRecEventHist->Add(entry->fRecEventHist); + fRecMCEventHist->Add(entry->fRecMCEventHist); + fMCEventHist->Add(entry->fMCEventHist); + + // track histo + fRecMCTrackHist->Add(entry->fRecMCTrackHist); + } + + if (entry->fFolderObj) { objArrayList->Add(entry->fFolderObj); } + + count++; + } + if (fFolderObj) { fFolderObj->Merge(objArrayList); } + + // to signal that track histos were not merged: reset + if (!GetMergeTHnSparse()) + { + // reset content + // save memory + fEventCount->Reset(); + fRecEventHist->Reset(); + fRecMCEventHist->Reset(); + fMCEventHist->Reset(); + + // track histo + fRecMCTrackHist->Reset(); + } + + // delete + if (objArrayList) delete objArrayList; objArrayList=0; + +return count; +} + +//_____________________________________________________________________________ +void AlidNdPtCutAnalysisPbPb::Analyse() +{ + // + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + TH1D *h1D = 0; + TH2D *h2D = 0; + TH3D *h3D = 0; + + // + // make event level projection + // + //THnSparseF *fEventCount; //-> trig, trig + vertex + //THnSparseF *fRecEventHist; //-> Xv:Yv:Zv:ResZv:Mult + //THnSparseF *fMCEventHist; //-> mcXv:mcYv:mcZv + //THnSparseF *fRecMCEventHist; //-> Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult + + // + // Event counters + // + h2D = (TH2D*)fEventCount->Projection(0,1); + h2D->SetName("trig_vs_trigANDvertex"); + h2D->SetTitle("trig_vs_trigANDvertex"); + aFolderObj->Add(h2D); + + fEventCount->GetAxis(0)->SetRange(2,2); // triggered + h1D = (TH1D*)fEventCount->Projection(1); + h1D->SetTitle("rec. vertex for triggered events"); + h1D->SetName("trigANDvertex"); + h1D->SetTitle("trigANDvertex"); + aFolderObj->Add(h1D); + + // + // Create rec. event histograms + // + h1D = (TH1D *)fRecEventHist->Projection(0); + h1D->SetName("rec_xv"); + h1D->SetTitle("rec_xv"); + aFolderObj->Add(h1D); + + h1D = (TH1D *)fRecEventHist->Projection(1); + h1D->SetName("rec_yv"); + h1D->SetTitle("rec_yv"); + aFolderObj->Add(h1D); + + h1D = (TH1D *)fRecEventHist->Projection(2); + h1D->SetName("rec_zv"); + h1D->SetTitle("rec_zv"); + aFolderObj->Add(h1D); + + h2D = (TH2D *)fRecEventHist->Projection(0,1); + h2D->SetName("rec_xv_vs_yv"); + h2D->SetTitle("rec_xv_vs_yv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecEventHist->Projection(1,2); + h2D->SetName("rec_yv_vs_zv"); + h2D->SetTitle("rec_yv_vs_zv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecEventHist->Projection(0,2); + h2D->SetName("rec_xv_vs_zv"); + h2D->SetTitle("rec_xv_vs_zv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecEventHist->Projection(3,4); + h2D->SetName("rec_resZv_vs_Mult"); + h2D->SetTitle("rec_resZv_vs_Mult"); + aFolderObj->Add(h2D); + + // + // MC available + // + if(IsUseMCInfo()) { + + // + // Create mc event histograms + // + + h1D = (TH1D *)fMCEventHist->Projection(0); + h1D->SetName("mc_xv"); + h1D->SetTitle("mc_xv"); + aFolderObj->Add(h1D); + + h1D = (TH1D *)fMCEventHist->Projection(1); + h1D->SetName("mc_yv"); + h1D->SetTitle("mc_yv"); + aFolderObj->Add(h1D); + + h1D = (TH1D *)fMCEventHist->Projection(2); + h1D->SetName("mc_zv"); + h1D->SetTitle("mc_zv"); + aFolderObj->Add(h1D); + + + h2D = (TH2D *)fMCEventHist->Projection(0,1); + h2D->SetName("mc_xv_vs_yv"); + h2D->SetTitle("mc_xv_vs_yv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fMCEventHist->Projection(1,2); + h2D->SetName("mc_yv_vs_zv"); + h2D->SetTitle("mc_yv_vs_zv"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fMCEventHist->Projection(0,2); + h2D->SetName("mc_xv_vs_zv"); + h2D->SetTitle("mc_xv_vs_zv"); + aFolderObj->Add(h2D); + + // + // Create rec-mc event histograms + // + h2D = (TH2D *)fRecMCEventHist->Projection(0,3); + h2D->SetName("rec_mc_deltaXv_vs_mult"); + h2D->SetTitle("rec_mc_deltaXv_vs_mult"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCEventHist->Projection(1,3); + h2D->SetName("rec_mc_deltaYv_vs_mult"); + h2D->SetTitle("rec_mc_deltaYv_vs_mult"); + aFolderObj->Add(h2D); + + h2D = (TH2D *)fRecMCEventHist->Projection(2,3); + h2D->SetName("rec_mc_deltaZv_vs_mult"); + h2D->SetTitle("rec_mc_deltaZv_vs_mult"); + aFolderObj->Add(h2D); + + } // end use MC info + + // + // make track level projection + // + // THnSparse track histograms + // nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc + // + + // only TH3 histograms + // x : pT : centr + Double_t minNCrossRows = 120.; + Double_t maxChi2PerClust = 4.; + Double_t maxChi2PerClustITS = 36.; + Double_t minNCrossRowsOverFindable = 0.8; + Double_t maxFracSharedClust = 0.4; + Double_t minDCAr = -0.2, maxDCAr = 0.2; + Double_t minDCAz = -2., maxDCAz = 2.; + Double_t minEta = -0.8, maxEta = 0.8; + Double_t maxChi2ToTPCc = 50; + + // only TH3 histograms + // x : pT : centr + + // set all cuts + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); + + // nCrossRows + fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); + + h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); + h3D->SetName("rec_nCrossRows_pT_centr"); + h3D->SetTitle("rec_nCrossRows_pT_centr"); + aFolderObj->Add(h3D); + + + // Chi2PerClust + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); + + h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); + h3D->SetName("rec_Chi2PerClust_pT_centr"); + h3D->SetTitle("rec_Chi2PerClust_pT_centr"); + aFolderObj->Add(h3D); + + + // Chi2PerClustITS + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); + h3D->SetName("rec_Chi2PerClustITS_pT_centr"); + h3D->SetTitle("rec_Chi2PerClustITS_pT_centr"); + aFolderObj->Add(h3D); + + + // NCrossRowsOverFindable + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); + h3D->SetName("rec_NCrossRowsOverFindable_pT_centr"); + h3D->SetTitle("rec_NCrossRowsOverFindable_pT_centr"); + aFolderObj->Add(h3D); + + + // FracSharedClust + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); + h3D->SetName("rec_FracSharedClust_pT_centr"); + h3D->SetTitle("rec_FracSharedClust_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAr + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); + h3D->SetName("rec_DCAr_pT_centr"); + h3D->SetTitle("rec_DCAr_pT_centr"); + aFolderObj->Add(h3D); + + // DCAz + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); + h3D->SetName("rec_DCAz_pT_centr"); + h3D->SetTitle("rec_DCAz_pT_centr"); + aFolderObj->Add(h3D); + + // chi2ToTPCc + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); + h3D->SetName("rec_chi2ToTPCc_pT_centr"); + h3D->SetTitle("rec_chi2ToTPCc_pT_centr"); + aFolderObj->Add(h3D); + + + // + // MC available + // + // nCrossRows:chi2PerClust:chi2PerClustITS:nCrossRows/nFindableClust:fracSharedClust:DCAy:DCAz:eta:phi:pt:hasStrangeMother:isFromConversion:isFromMaterial:isPrim:charge:centr:chi2ToTPCc + // + + if(IsUseMCInfo()) { + // + // only TH3 histograms + // x : pT : centr + // + // comes from week decays + // + fRecMCTrackHist->GetAxis(10)->SetRange(2,2); + + // set all cuts + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); + + // nCrossRows + fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); + + h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); + h3D->SetName("rec_sec_strange_nCrossRows_pT_centr"); + h3D->SetTitle("rec_sec_strange_nCrossRows_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClust + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); + + h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); + h3D->SetName("rec_sec_strange_Chi2PerClust_pT_centr"); + h3D->SetTitle("rec_sec_strange_Chi2PerClust_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClustITS + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); + h3D->SetName("rec_sec_strange_Chi2PerClustITS_pT_centr"); + h3D->SetTitle("rec_sec_strange_Chi2PerClustITS_pT_centr"); + aFolderObj->Add(h3D); + + + // NCrossRowsOverFindable + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); + h3D->SetName("rec_sec_strange_NCrossRowsOverFindable_pT_centr"); + h3D->SetTitle("rec_sec_strange_NCrossRowsOverFindable_pT_centr"); + aFolderObj->Add(h3D); + + + // FracSharedClust + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); + h3D->SetName("rec_sec_strange_FracSharedClust_pT_centr"); + h3D->SetTitle("rec_sec_strange_FracSharedClust_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAr + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); + h3D->SetName("rec_sec_strange_DCAr_pT_centr"); + h3D->SetTitle("rec_sec_strange_DCAr_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAz + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); + h3D->SetName("rec_sec_strange_DCAz_pT_centr"); + h3D->SetTitle("rec_sec_strange_DCAz_pT_centr"); + aFolderObj->Add(h3D); + + // chi2ToTPCc + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); + h3D->SetName("rec_sec_strange_chi2ToTPCc_pT_centr"); + h3D->SetTitle("rec_sec_strange_chi2ToTPCc_pT_centr"); + aFolderObj->Add(h3D); + + + // only TH3 histograms + // x : pT : centr + // + + // comes from conversion + // + fRecMCTrackHist->GetAxis(10)->SetRange(1,2); + fRecMCTrackHist->GetAxis(11)->SetRange(2,2); + + // set all cuts + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); + + // nCrossRows + fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); + + h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); + h3D->SetName("rec_sec_conversion_nCrossRows_pT_centr"); + h3D->SetTitle("rec_sec_conversion_nCrossRows_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClust + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); + + h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); + h3D->SetName("rec_sec_conversion_Chi2PerClust_pT_centr"); + h3D->SetTitle("rec_sec_conversion_Chi2PerClust_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClustITS + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); + h3D->SetName("rec_sec_conversion_Chi2PerClustITS_pT_centr"); + h3D->SetTitle("rec_sec_conversion_Chi2PerClustITS_pT_centr"); + aFolderObj->Add(h3D); + + + // NCrossRowsOverFindable + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); + h3D->SetName("rec_sec_conversion_NCrossRowsOverFindable_pT_centr"); + h3D->SetTitle("rec_sec_conversion_NCrossRowsOverFindable_pT_centr"); + aFolderObj->Add(h3D); + + + // FracSharedClust + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); + h3D->SetName("rec_sec_conversion_FracSharedClust_pT_centr"); + h3D->SetTitle("rec_sec_conversion_FracSharedClust_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAr + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); + h3D->SetName("rec_sec_conversion_DCAr_pT_centr"); + h3D->SetTitle("rec_sec_conversion_DCAr_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAz + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); + h3D->SetName("rec_sec_conversion_DCAz_pT_centr"); + h3D->SetTitle("rec_sec_conversion_DCAz_pT_centr"); + aFolderObj->Add(h3D); + + // chi2ToTPCc + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); + h3D->SetName("rec_sec_conversion_chi2ToTPCc_pT_centr"); + h3D->SetTitle("rec_sec_conversion_chi2ToTPCc_pT_centr"); + aFolderObj->Add(h3D); + + + + + + // comes from interaction with material + // + fRecMCTrackHist->GetAxis(11)->SetRange(1,2); + fRecMCTrackHist->GetAxis(12)->SetRange(2,2); + + // set all cuts + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); + + // nCrossRows + fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); + + h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); + h3D->SetName("rec_sec_material_nCrossRows_pT_centr"); + h3D->SetTitle("rec_sec_material_nCrossRows_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClust + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); + + h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); + h3D->SetName("rec_sec_material_Chi2PerClust_pT_centr"); + h3D->SetTitle("rec_sec_material_Chi2PerClust_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClustITS + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); + h3D->SetName("rec_sec_material_Chi2PerClustITS_pT_centr"); + h3D->SetTitle("rec_sec_material_Chi2PerClustITS_pT_centr"); + aFolderObj->Add(h3D); + + + // NCrossRowsOverFindable + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); + h3D->SetName("rec_sec_material_NCrossRowsOverFindable_pT_centr"); + h3D->SetTitle("rec_sec_material_NCrossRowsOverFindable_pT_centr"); + aFolderObj->Add(h3D); + + + // FracSharedClust + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); + h3D->SetName("rec_sec_material_FracSharedClust_pT_centr"); + h3D->SetTitle("rec_sec_material_FracSharedClust_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAr + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); + h3D->SetName("rec_sec_material_DCAr_pT_centr"); + h3D->SetTitle("rec_sec_material_DCAr_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAz + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); + h3D->SetName("rec_sec_material_DCAz_pT_centr"); + h3D->SetTitle("rec_sec_material_DCAz_pT_centr"); + aFolderObj->Add(h3D); + + // chi2ToTPCc + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); + h3D->SetName("rec_sec_material_chi2ToTPCc_pT_centr"); + h3D->SetTitle("rec_sec_material_chi2ToTPCc_pT_centr"); + aFolderObj->Add(h3D); + + + + // + // only TH3 histograms + // x : pT : centr + // + // secondaries defined as AliStack::IsPhysicalPrimary() + // + fRecMCTrackHist->GetAxis(12)->SetRange(1,2); + fRecMCTrackHist->GetAxis(13)->SetRange(1,1); + + // set all cuts + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); + + // nCrossRows + fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); + + h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); + h3D->SetName("rec_sec_nCrossRows_pT_centr"); + h3D->SetTitle("rec_sec_nCrossRows_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClust + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); + + h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); + h3D->SetName("rec_sec_Chi2PerClust_pT_centr"); + h3D->SetTitle("rec_sec_Chi2PerClust_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClustITS + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); + h3D->SetName("rec_sec_Chi2PerClustITS_pT_centr"); + h3D->SetTitle("rec_sec_Chi2PerClustITS_pT_centr"); + aFolderObj->Add(h3D); + + + // NCrossRowsOverFindable + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); + h3D->SetName("rec_sec_NCrossRowsOverFindable_pT_centr"); + h3D->SetTitle("rec_sec_NCrossRowsOverFindable_pT_centr"); + aFolderObj->Add(h3D); + + + // FracSharedClust + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); + h3D->SetName("rec_sec_FracSharedClust_pT_centr"); + h3D->SetTitle("rec_sec_FracSharedClust_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAr + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); + h3D->SetName("rec_sec_DCAr_pT_centr"); + h3D->SetTitle("rec_sec_DCAr_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAz + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); + h3D->SetName("rec_sec_DCAz_pT_centr"); + h3D->SetTitle("rec_sec_DCAz_pT_centr"); + aFolderObj->Add(h3D); + + // chi2ToTPCc + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); + h3D->SetName("rec_sec_chi2ToTPCc_pT_centr"); + h3D->SetTitle("rec_sec_chi2ToTPCc_pT_centr"); + aFolderObj->Add(h3D); + + // + // only TH3 histograms + // x : pT : centr + // + // primaries defined as AliStack::IsPhysicalPrimary() + // + fRecMCTrackHist->GetAxis(12)->SetRange(1,2); + fRecMCTrackHist->GetAxis(13)->SetRange(2,2); + + // set all cuts + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0.,maxChi2ToTPCc-0.0001); + + // nCrossRows + fRecMCTrackHist->GetAxis(0)->SetRangeUser(0,160); + + h3D = (TH3D *)fRecMCTrackHist->Projection(0,9,15); + h3D->SetName("rec_prim_nCrossRows_pT_centr"); + h3D->SetTitle("rec_prim_nCrossRows_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClust + fRecMCTrackHist->GetAxis(0)->SetRangeUser(minNCrossRows,160); + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,10); + + h3D = (TH3D *)fRecMCTrackHist->Projection(1,9,15); + h3D->SetName("rec_prim_Chi2PerClust_pT_centr"); + h3D->SetTitle("rec_prim_Chi2PerClust_pT_centr"); + aFolderObj->Add(h3D); + + // Chi2PerClustITS + fRecMCTrackHist->GetAxis(1)->SetRangeUser(0.,maxChi2PerClust-0.0001); + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(2,9,15); + h3D->SetName("rec_prim_Chi2PerClustITS_pT_centr"); + h3D->SetTitle("rec_prim_Chi2PerClustITS_pT_centr"); + aFolderObj->Add(h3D); + + + // NCrossRowsOverFindable + fRecMCTrackHist->GetAxis(2)->SetRangeUser(0.,maxChi2PerClustITS-0.0001); + fRecMCTrackHist->GetAxis(3)->SetRangeUser(0,1.4999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(3,9,15); + h3D->SetName("rec_prim_NCrossRowsOverFindable_pT_centr"); + h3D->SetTitle("rec_prim_NCrossRowsOverFindable_pT_centr"); + aFolderObj->Add(h3D); + + + // FracSharedClust + fRecMCTrackHist->GetAxis(3)->SetRangeUser(minNCrossRowsOverFindable,1.4999); + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,0.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(4,9,15); + h3D->SetName("rec_prim_FracSharedClust_pT_centr"); + h3D->SetTitle("rec_prim_FracSharedClust_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAr + fRecMCTrackHist->GetAxis(4)->SetRangeUser(0.,maxFracSharedClust-0.0001); + fRecMCTrackHist->GetAxis(5)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(5,9,15); + h3D->SetName("rec_prim_DCAr_pT_centr"); + h3D->SetTitle("rec_prim_DCAr_pT_centr"); + aFolderObj->Add(h3D); + + + // DCAz + fRecMCTrackHist->GetAxis(5)->SetRangeUser(minDCAr,maxDCAr-0.0001); + fRecMCTrackHist->GetAxis(6)->SetRangeUser(-10.,9.9999); + + h3D = (TH3D *)fRecMCTrackHist->Projection(6,9,15); + h3D->SetName("rec_prim_DCAz_pT_centr"); + h3D->SetTitle("rec_prim_DCAz_pT_centr"); + aFolderObj->Add(h3D); + + // chi2ToTPCc + fRecMCTrackHist->GetAxis(6)->SetRangeUser(minDCAz,maxDCAz-0.0001); + fRecMCTrackHist->GetAxis(16)->SetRangeUser(0,100); + + h3D = (TH3D *)fRecMCTrackHist->Projection(16,9,15); + h3D->SetName("rec_prim_chi2ToTPCc_pT_centr"); + h3D->SetTitle("rec_prim_chi2ToTPCc_pT_centr"); + aFolderObj->Add(h3D); + + } + + // export objects to analysis folder + fAnalysisFolder = ExportToFolder(aFolderObj); + if(!fAnalysisFolder) { + if(aFolderObj) delete aFolderObj; + return; + } + + // Reset setings + + for(Int_t ndim = 0; ndim < fEventCount->GetNdimensions(); ndim++) { + fEventCount->GetAxis(ndim)->SetRange(1,fEventCount->GetAxis(ndim)->GetNbins()); + } + + for(Int_t ndim = 0; ndim < fMCEventHist->GetNdimensions(); ndim++) { + fMCEventHist->GetAxis(ndim)->SetRange(1,fMCEventHist->GetAxis(ndim)->GetNbins()); + } + + for(Int_t ndim = 0; ndim < fRecMCEventHist->GetNdimensions(); ndim++) { + fRecMCEventHist->GetAxis(ndim)->SetRange(1,fRecMCEventHist->GetAxis(ndim)->GetNbins()); + } + + for(Int_t ndim = 0; ndim < fRecMCTrackHist->GetNdimensions(); ndim++) + { + fRecMCTrackHist->GetAxis(ndim)->SetRange(1,fRecMCTrackHist->GetAxis(ndim)->GetNbins()); + } + + // delete only TObjArray + //if(aFolderObj) delete aFolderObj; + + if (fFolderObj) delete fFolderObj; + fFolderObj = aFolderObj; + aFolderObj=0; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtCutAnalysisPbPb::ExportToFolder(TObjArray * const array) +{ + // recreate folder avery time and export objects to new one + // + AlidNdPtCutAnalysisPbPb * comp=this; + TFolder *folder = comp->GetAnalysisFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtCutAnalysisPbPb::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEfficiency.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEfficiency.cxx index 0756f338920..799cee608a6 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEfficiency.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEfficiency.cxx @@ -1,566 +1,566 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -//------------------------------------------------------------------------------ -// AlidNdPtEfficiency class. -// -// a. functionality: -// - fills generic cut histograms -// - generates cuts (selection criteria) -// -// b. data members: -// - generic cut histograms -// - control histograms -// -// Author: J.Otwinowski 18/11/2010 -//------------------------------------------------------------------------------ -#include "TH1.h" -#include "TH2.h" - -#include "AliHeader.h" -#include "AliGenEventHeader.h" -#include "AliStack.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDtrackCuts.h" -#include "AliLog.h" -#include "AliTracker.h" - -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" -#include "AlidNdPtBackgroundCuts.h" -#include "AlidNdPtAnalysis.h" -#include "AliPhysicsSelection.h" - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" -#include "AlidNdPtEfficiency.h" - -using namespace std; - -ClassImp(AlidNdPtEfficiency) - -//_____________________________________________________________________________ - AlidNdPtEfficiency::AlidNdPtEfficiency(): AlidNdPt(), - fAnalysisFolder(0), - fRecMCTrackHistTPCITS(0), - fRecMCTrackHistITSTPC(0) -{ - // default constructor - Init(); -} - -//_____________________________________________________________________________ -AlidNdPtEfficiency::AlidNdPtEfficiency(Char_t* name, Char_t* title): AlidNdPt(name,title), - fAnalysisFolder(0), - fRecMCTrackHistTPCITS(0), - fRecMCTrackHistITSTPC(0) -{ - // constructor - Init(); -} - -//_____________________________________________________________________________ -AlidNdPtEfficiency::~AlidNdPtEfficiency() { - // - if(fRecMCTrackHistTPCITS) delete fRecMCTrackHistTPCITS; fRecMCTrackHistTPCITS=0; - if(fRecMCTrackHistITSTPC) delete fRecMCTrackHistITSTPC; fRecMCTrackHistITSTPC=0; - - if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; -} - -//_____________________________________________________________________________ -void AlidNdPtEfficiency::Init(){ - // - // Init histograms - // - const Int_t ptNbins = 63; - const Double_t ptMin = 0.; - const Double_t ptMax = 20.; - - Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0, 20.,25.,30.,35.,40.,50}; - - // - // THnSparse track histograms - // - - // TPC -> ITS matching efficiency - // eta:phi:pt:isPrim:charge:isMatch:isTPC - Int_t binsRecMCTrackHistTPCITS[7]= { 30, 90, ptNbins, 2, 3, 2, 2 }; - Double_t minRecMCTrackHistTPCITS[7]={-1.5, 0., ptMin, 0., -1., 0., 0. }; - Double_t maxRecMCTrackHistTPCITS[7]={ 1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2. }; - - fRecMCTrackHistTPCITS = new THnSparseF("fRecMCTrackHistTPCITS","eta:phi:pt:isPrim:charge:isMatch:isTPC",7,binsRecMCTrackHistTPCITS,minRecMCTrackHistTPCITS,maxRecMCTrackHistTPCITS); - fRecMCTrackHistTPCITS->SetBinEdges(2,binsPt); - fRecMCTrackHistTPCITS->GetAxis(0)->SetTitle("#eta"); - fRecMCTrackHistTPCITS->GetAxis(1)->SetTitle("#phi (rad)"); - fRecMCTrackHistTPCITS->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); - fRecMCTrackHistTPCITS->GetAxis(3)->SetTitle("isPrim"); - fRecMCTrackHistTPCITS->GetAxis(4)->SetTitle("charge"); - fRecMCTrackHistTPCITS->GetAxis(5)->SetTitle("isMatch"); - fRecMCTrackHistTPCITS->GetAxis(6)->SetTitle("isTPC"); - fRecMCTrackHistTPCITS->Sumw2(); - - // ITS -> TPC matching efficiency - // eta:phi:pt:isPrim:charge:isMatch - Int_t binsRecMCTrackHistITSTPC[6]= { 30, 90, ptNbins, 2, 3, 2 }; - Double_t minRecMCTrackHistITSTPC[6]={-1.5, 0., ptMin, 0., -1., 0 }; - Double_t maxRecMCTrackHistITSTPC[6]={ 1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2.}; - - fRecMCTrackHistITSTPC = new THnSparseF("fRecMCTrackHistITSTPC","eta:phi:pt:isPrim:charge:isMatch",6,binsRecMCTrackHistITSTPC,minRecMCTrackHistITSTPC,maxRecMCTrackHistITSTPC); - fRecMCTrackHistITSTPC->SetBinEdges(2,binsPt); - fRecMCTrackHistITSTPC->GetAxis(0)->SetTitle("#eta"); - fRecMCTrackHistITSTPC->GetAxis(1)->SetTitle("#phi (rad)"); - fRecMCTrackHistITSTPC->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); - fRecMCTrackHistITSTPC->GetAxis(3)->SetTitle("isPrim"); - fRecMCTrackHistITSTPC->GetAxis(4)->SetTitle("charge"); - fRecMCTrackHistITSTPC->GetAxis(5)->SetTitle("isMatch"); - fRecMCTrackHistITSTPC->Sumw2(); - - // init output folder - fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); -} - -//_____________________________________________________________________________ -void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent) -{ - // - // Process real and/or simulated events - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - - - // trigger selection - Bool_t isEventTriggered = kTRUE; - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - - Int_t multMCTrueTracks = 0; - if(IsUseMCInfo()) - { - // - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - // multipliticy of all MC primary tracks - // in Zv, pt and eta ranges) - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); - - } // end bUseMC - - // get reconstructed vertex - const AliESDVertex* vtxESD = 0; - if(evtCuts->IsRecVertexRequired()) - { - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - vtxESD = esdEvent->GetPrimaryVertexTPC(); - } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { - vtxESD = esdEvent->GetPrimaryVertexTracks(); - } - else { - return; - } - } - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - TObjArray *allChargedTracks=0; - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK,isEventTriggered); - - // check event cuts - if(isEventOK && isEventTriggered) - { - // get all charged tracks - allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); - if(!allChargedTracks) return; - - Int_t entries = allChargedTracks->GetEntries(); - Bool_t isTPC = kFALSE; - Bool_t isMatch = kFALSE; - - // TPC -> ITS prolongation efficiency - for(Int_t iTrack=0; iTrackAt(iTrack); - if(!track) continue; - - isTPC = kFALSE; - - if(track->Charge()==0) continue; - if(!track->GetTPCInnerParam()) continue; - if(!(track->GetStatus()&AliESDtrack::kTPCrefit)) continue; - - // check loose cuts for TPC tracks - if(!esdTrackCuts->AcceptTrack(track)) { continue; } - - isTPC = kTRUE; - isMatch = kFALSE; - if( (track->GetStatus()&AliESDtrack::kITSrefit) && - (track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) ) - { - isMatch = kTRUE; - } - - // - FillHistograms(track, stack, isMatch, isTPC, kFALSE); - //if(tpcTrack) delete tpcTrack; - } - - // - // ITS -> TPC prolongation efficiency - // - for(Int_t iTrack=0; iTrackAt(iTrack); - if(!track) continue; - - // - // ITS stand alone tracks - // - if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; - if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; - if(track->GetNcls(0)<4) continue; - if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; - - // Check matching with TPC only track - for(Int_t jTrack=0; jTrackAt(jTrack); - if(!track2) continue; - if(track2->Charge()==0) continue; - if(!track2->GetTPCInnerParam()) continue; - if(!(track2->GetStatus() & AliESDtrack::kTPCrefit)) continue; - - // Get TPC only tracks (must be deleted by user) - AliESDtrack* tpcTrack2 = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent, jTrack); - if(!tpcTrack2) continue; - if(!tpcTrack2->RelateToVertex(vtxESD,esdEvent->GetMagneticField(),100.)) { delete tpcTrack2; continue; } - - // check loose cuts for TPC tracks - if(!esdTrackCuts->AcceptTrack(tpcTrack2)) { delete tpcTrack2; continue; } - - // check matching - if (TMath::Abs(track->GetY() - tpcTrack2->GetY()) > 3) { delete tpcTrack2; continue; } - if (TMath::Abs(track->GetSnp() - tpcTrack2->GetSnp()) > 0.2) { delete tpcTrack2; continue; } - if (TMath::Abs(track->GetTgl() - tpcTrack2->GetTgl()) > 0.2) { delete tpcTrack2; continue; } - - isMatch = kTRUE; - if(tpcTrack2) { - delete tpcTrack2; - } - break; - } - - // - FillHistograms(track, stack, isMatch, kFALSE, kTRUE); - } - } - - if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; - -} - -//_____________________________________________________________________________ -void AlidNdPtEfficiency::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isTPC, const Bool_t isITSTPC) const -{ - // - // Fill ESD track and MC histograms - // - if(!esdTrack) return; - Int_t charge = esdTrack->Charge(); - if(charge == 0.) return; - - Float_t pt = esdTrack->Pt(); - Float_t eta = esdTrack->Eta(); - Float_t phi = esdTrack->Phi(); - - // - // Fill rec vs MC information - // - Bool_t isPrim = kTRUE; - - if(IsUseMCInfo()) { - if(!stack) return; - Int_t label = esdTrack->GetLabel(); - if(label < 0.) return; // fake ITS track - TParticle* particle = stack->Particle(label); - if(!particle) return; - if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return; - isPrim = stack->IsPhysicalPrimary(label); - } - - // fill histo - Double_t vRecMCTrackHist[6] = { eta,phi,pt,isPrim,charge,isMatch }; - Double_t vRecMCTrackHistTPCITS[7] = { eta,phi,pt,isPrim,charge,isMatch,isTPC }; - - if(isITSTPC) { - fRecMCTrackHistITSTPC->Fill(vRecMCTrackHist); - } - else { - fRecMCTrackHistTPCITS->Fill(vRecMCTrackHistTPCITS); - } -} - -//_____________________________________________________________________________ -Long64_t AlidNdPtEfficiency::Merge(TCollection* const list) -{ - // Merge list of objects (needed by PROOF) - - if (!list) - return 0; - - if (list->IsEmpty()) - return 1; - - TIterator* iter = list->MakeIterator(); - TObject* obj = 0; - - // collection of generated histograms - Int_t count=0; - while((obj = iter->Next()) != 0) { - AlidNdPtEfficiency* entry = dynamic_cast(obj); - if (entry == 0) continue; - - // track histo - fRecMCTrackHistTPCITS->Add(entry->fRecMCTrackHistTPCITS); - fRecMCTrackHistITSTPC->Add(entry->fRecMCTrackHistITSTPC); - - count++; - } - -return count; -} - -//_____________________________________________________________________________ -void AlidNdPtEfficiency::Analyse() -{ - // - // Analyse histograms - // - TH1::AddDirectory(kFALSE); - TObjArray *aFolderObj = new TObjArray; - if(!aFolderObj) return; - - TH1D *h1Dall = 0; - TH1D *h1D = 0; - TH1D *h1Dc = 0; - - - // - // get cuts - // - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - Error("AlidNdPtEfficiency::Analyse()", "cuts not available"); - return; - } - - // - // TPC->ITS efficiency - // - - //eff vs eta - fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); - h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(0); - if(!h1Dall) return; - fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(0); - if(!h1D) return; - - h1Dc = (TH1D *)h1D->Clone("eff_vs_eta_TPCITS"); - h1Dc->Divide(h1Dall); - aFolderObj->Add(h1Dc); - fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); - fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); - - //eff vs phi - fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); - fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799); - h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(1); - if(!h1Dall) return; - fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(1); - if(!h1D) return; - - h1Dc = (TH1D *)h1D->Clone("eff_vs_phi_TPCITS"); - h1Dc->Divide(h1Dall); - aFolderObj->Add(h1Dc); - fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); - fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); - - //eff vs pT - fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); - fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799); - h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(2); - if(!h1Dall) return; - fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(2); - if(!h1D) return; - - h1Dc = (TH1D *)h1D->Clone("eff_vs_pT_TPCITS"); - h1Dc->Divide(h1Dall); - aFolderObj->Add(h1Dc); - fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); - fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); - - - // - // ITS->TPC efficiency - // - - fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-1.5, 1.499); - fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); - - //eff vs eta - h1Dall = (TH1D *)fRecMCTrackHistITSTPC->Projection(0); - if(!h1Dall) return; - fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHistITSTPC->Projection(0); - if(!h1D) return; - - h1Dc = (TH1D *)h1D->Clone("eff_vs_eta_ITSTPC"); - h1Dc->Divide(h1Dall); - aFolderObj->Add(h1Dc); - fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); - - //eff vs phi - fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-0.8, 0.799); - h1Dall = (TH1D *)fRecMCTrackHistITSTPC->Projection(1); - if(!h1Dall) return; - fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHistITSTPC->Projection(1); - if(!h1D) return; - - h1Dc = (TH1D *)h1D->Clone("eff_vs_phi_ITSTPC"); - h1Dc->Divide(h1Dall); - aFolderObj->Add(h1Dc); - fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); - - //eff vs pT - fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-0.8, 0.799); - h1Dall = (TH1D *)fRecMCTrackHistITSTPC->Projection(2); - if(!h1Dall) return; - fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(2,2); - h1D = (TH1D *)fRecMCTrackHistITSTPC->Projection(2); - if(!h1D) return; - - h1Dc = (TH1D *)h1D->Clone("eff_vs_pT_ITSTPC"); - h1Dc->Divide(h1Dall); - aFolderObj->Add(h1Dc); - fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); - - // export objects to analysis folder - fAnalysisFolder = ExportToFolder(aFolderObj); - if(!fAnalysisFolder) { - if(aFolderObj) delete aFolderObj; - return; - } - - // delete only TObjArray - if(aFolderObj) delete aFolderObj; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtEfficiency::ExportToFolder(TObjArray * const array) -{ - // recreate folder avery time and export objects to new one - // - AlidNdPtEfficiency * comp=this; - TFolder *folder = comp->GetAnalysisFolder(); - - TString name, title; - TFolder *newFolder = 0; - Int_t i = 0; - Int_t size = array->GetSize(); - - if(folder) { - // get name and title from old folder - name = folder->GetName(); - title = folder->GetTitle(); - - // delete old one - delete folder; - - // create new one - newFolder = CreateFolder(name.Data(),title.Data()); - newFolder->SetOwner(); - - // add objects to folder - while(i < size) { - newFolder->Add(array->At(i)); - i++; - } - } - -return newFolder; -} - -//_____________________________________________________________________________ -TFolder* AlidNdPtEfficiency::CreateFolder(TString name,TString title) { -// create folder for analysed histograms -// -TFolder *folder = 0; - folder = new TFolder(name.Data(),title.Data()); - - return folder; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +//------------------------------------------------------------------------------ +// AlidNdPtEfficiency class. +// +// a. functionality: +// - fills generic cut histograms +// - generates cuts (selection criteria) +// +// b. data members: +// - generic cut histograms +// - control histograms +// +// Author: J.Otwinowski 18/11/2010 +//------------------------------------------------------------------------------ +#include "TH1.h" +#include "TH2.h" + +#include "AliHeader.h" +#include "AliGenEventHeader.h" +#include "AliStack.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDtrackCuts.h" +#include "AliLog.h" +#include "AliTracker.h" + +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" +#include "AlidNdPtBackgroundCuts.h" +#include "AlidNdPtAnalysis.h" +#include "AliPhysicsSelection.h" + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" +#include "AlidNdPtEfficiency.h" + +using namespace std; + +ClassImp(AlidNdPtEfficiency) + +//_____________________________________________________________________________ + AlidNdPtEfficiency::AlidNdPtEfficiency(): AlidNdPt(), + fAnalysisFolder(0), + fRecMCTrackHistTPCITS(0), + fRecMCTrackHistITSTPC(0) +{ + // default constructor + Init(); +} + +//_____________________________________________________________________________ +AlidNdPtEfficiency::AlidNdPtEfficiency(Char_t* name, Char_t* title): AlidNdPt(name,title), + fAnalysisFolder(0), + fRecMCTrackHistTPCITS(0), + fRecMCTrackHistITSTPC(0) +{ + // constructor + Init(); +} + +//_____________________________________________________________________________ +AlidNdPtEfficiency::~AlidNdPtEfficiency() { + // + if(fRecMCTrackHistTPCITS) delete fRecMCTrackHistTPCITS; fRecMCTrackHistTPCITS=0; + if(fRecMCTrackHistITSTPC) delete fRecMCTrackHistITSTPC; fRecMCTrackHistITSTPC=0; + + if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0; +} + +//_____________________________________________________________________________ +void AlidNdPtEfficiency::Init(){ + // + // Init histograms + // + const Int_t ptNbins = 63; + const Double_t ptMin = 0.; + const Double_t ptMax = 20.; + + Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0, 20.,25.,30.,35.,40.,50}; + + // + // THnSparse track histograms + // + + // TPC -> ITS matching efficiency + // eta:phi:pt:isPrim:charge:isMatch:isTPC + Int_t binsRecMCTrackHistTPCITS[7]= { 30, 90, ptNbins, 2, 3, 2, 2 }; + Double_t minRecMCTrackHistTPCITS[7]={-1.5, 0., ptMin, 0., -1., 0., 0. }; + Double_t maxRecMCTrackHistTPCITS[7]={ 1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2. }; + + fRecMCTrackHistTPCITS = new THnSparseF("fRecMCTrackHistTPCITS","eta:phi:pt:isPrim:charge:isMatch:isTPC",7,binsRecMCTrackHistTPCITS,minRecMCTrackHistTPCITS,maxRecMCTrackHistTPCITS); + fRecMCTrackHistTPCITS->SetBinEdges(2,binsPt); + fRecMCTrackHistTPCITS->GetAxis(0)->SetTitle("#eta"); + fRecMCTrackHistTPCITS->GetAxis(1)->SetTitle("#phi (rad)"); + fRecMCTrackHistTPCITS->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); + fRecMCTrackHistTPCITS->GetAxis(3)->SetTitle("isPrim"); + fRecMCTrackHistTPCITS->GetAxis(4)->SetTitle("charge"); + fRecMCTrackHistTPCITS->GetAxis(5)->SetTitle("isMatch"); + fRecMCTrackHistTPCITS->GetAxis(6)->SetTitle("isTPC"); + fRecMCTrackHistTPCITS->Sumw2(); + + // ITS -> TPC matching efficiency + // eta:phi:pt:isPrim:charge:isMatch + Int_t binsRecMCTrackHistITSTPC[6]= { 30, 90, ptNbins, 2, 3, 2 }; + Double_t minRecMCTrackHistITSTPC[6]={-1.5, 0., ptMin, 0., -1., 0 }; + Double_t maxRecMCTrackHistITSTPC[6]={ 1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2.}; + + fRecMCTrackHistITSTPC = new THnSparseF("fRecMCTrackHistITSTPC","eta:phi:pt:isPrim:charge:isMatch",6,binsRecMCTrackHistITSTPC,minRecMCTrackHistITSTPC,maxRecMCTrackHistITSTPC); + fRecMCTrackHistITSTPC->SetBinEdges(2,binsPt); + fRecMCTrackHistITSTPC->GetAxis(0)->SetTitle("#eta"); + fRecMCTrackHistITSTPC->GetAxis(1)->SetTitle("#phi (rad)"); + fRecMCTrackHistITSTPC->GetAxis(2)->SetTitle("p_{T} (GeV/c)"); + fRecMCTrackHistITSTPC->GetAxis(3)->SetTitle("isPrim"); + fRecMCTrackHistITSTPC->GetAxis(4)->SetTitle("charge"); + fRecMCTrackHistITSTPC->GetAxis(5)->SetTitle("isMatch"); + fRecMCTrackHistITSTPC->Sumw2(); + + // init output folder + fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder"); +} + +//_____________________________________________________________________________ +void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent) +{ + // + // Process real and/or simulated events + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + + + // trigger selection + Bool_t isEventTriggered = kTRUE; + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + + Int_t multMCTrueTracks = 0; + if(IsUseMCInfo()) + { + // + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + // multipliticy of all MC primary tracks + // in Zv, pt and eta ranges) + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); + + } // end bUseMC + + // get reconstructed vertex + const AliESDVertex* vtxESD = 0; + if(evtCuts->IsRecVertexRequired()) + { + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + } + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + TObjArray *allChargedTracks=0; + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK,isEventTriggered); + + // check event cuts + if(isEventOK && isEventTriggered) + { + // get all charged tracks + allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); + if(!allChargedTracks) return; + + Int_t entries = allChargedTracks->GetEntries(); + Bool_t isTPC = kFALSE; + Bool_t isMatch = kFALSE; + + // TPC -> ITS prolongation efficiency + for(Int_t iTrack=0; iTrackAt(iTrack); + if(!track) continue; + + isTPC = kFALSE; + + if(track->Charge()==0) continue; + if(!track->GetTPCInnerParam()) continue; + if(!(track->GetStatus()&AliESDtrack::kTPCrefit)) continue; + + // check loose cuts for TPC tracks + if(!esdTrackCuts->AcceptTrack(track)) { continue; } + + isTPC = kTRUE; + isMatch = kFALSE; + if( (track->GetStatus()&AliESDtrack::kITSrefit) && + (track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) ) + { + isMatch = kTRUE; + } + + // + FillHistograms(track, stack, isMatch, isTPC, kFALSE); + //if(tpcTrack) delete tpcTrack; + } + + // + // ITS -> TPC prolongation efficiency + // + for(Int_t iTrack=0; iTrackAt(iTrack); + if(!track) continue; + + // + // ITS stand alone tracks + // + if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue; + if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue; + if(track->GetNcls(0)<4) continue; + if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue; + + // Check matching with TPC only track + for(Int_t jTrack=0; jTrackAt(jTrack); + if(!track2) continue; + if(track2->Charge()==0) continue; + if(!track2->GetTPCInnerParam()) continue; + if(!(track2->GetStatus() & AliESDtrack::kTPCrefit)) continue; + + // Get TPC only tracks (must be deleted by user) + AliESDtrack* tpcTrack2 = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent, jTrack); + if(!tpcTrack2) continue; + if(!tpcTrack2->RelateToVertex(vtxESD,esdEvent->GetMagneticField(),100.)) { delete tpcTrack2; continue; } + + // check loose cuts for TPC tracks + if(!esdTrackCuts->AcceptTrack(tpcTrack2)) { delete tpcTrack2; continue; } + + // check matching + if (TMath::Abs(track->GetY() - tpcTrack2->GetY()) > 3) { delete tpcTrack2; continue; } + if (TMath::Abs(track->GetSnp() - tpcTrack2->GetSnp()) > 0.2) { delete tpcTrack2; continue; } + if (TMath::Abs(track->GetTgl() - tpcTrack2->GetTgl()) > 0.2) { delete tpcTrack2; continue; } + + isMatch = kTRUE; + if(tpcTrack2) { + delete tpcTrack2; + } + break; + } + + // + FillHistograms(track, stack, isMatch, kFALSE, kTRUE); + } + } + + if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; + +} + +//_____________________________________________________________________________ +void AlidNdPtEfficiency::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isTPC, const Bool_t isITSTPC) const +{ + // + // Fill ESD track and MC histograms + // + if(!esdTrack) return; + Int_t charge = esdTrack->Charge(); + if(charge == 0.) return; + + Float_t pt = esdTrack->Pt(); + Float_t eta = esdTrack->Eta(); + Float_t phi = esdTrack->Phi(); + + // + // Fill rec vs MC information + // + Bool_t isPrim = kTRUE; + + if(IsUseMCInfo()) { + if(!stack) return; + Int_t label = esdTrack->GetLabel(); + if(label < 0.) return; // fake ITS track + TParticle* particle = stack->Particle(label); + if(!particle) return; + if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return; + isPrim = stack->IsPhysicalPrimary(label); + } + + // fill histo + Double_t vRecMCTrackHist[6] = { eta,phi,pt,isPrim,charge,isMatch }; + Double_t vRecMCTrackHistTPCITS[7] = { eta,phi,pt,isPrim,charge,isMatch,isTPC }; + + if(isITSTPC) { + fRecMCTrackHistITSTPC->Fill(vRecMCTrackHist); + } + else { + fRecMCTrackHistTPCITS->Fill(vRecMCTrackHistTPCITS); + } +} + +//_____________________________________________________________________________ +Long64_t AlidNdPtEfficiency::Merge(TCollection* const list) +{ + // Merge list of objects (needed by PROOF) + + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + // collection of generated histograms + Int_t count=0; + while((obj = iter->Next()) != 0) { + AlidNdPtEfficiency* entry = dynamic_cast(obj); + if (entry == 0) continue; + + // track histo + fRecMCTrackHistTPCITS->Add(entry->fRecMCTrackHistTPCITS); + fRecMCTrackHistITSTPC->Add(entry->fRecMCTrackHistITSTPC); + + count++; + } + +return count; +} + +//_____________________________________________________________________________ +void AlidNdPtEfficiency::Analyse() +{ + // + // Analyse histograms + // + TH1::AddDirectory(kFALSE); + TObjArray *aFolderObj = new TObjArray; + if(!aFolderObj) return; + + TH1D *h1Dall = 0; + TH1D *h1D = 0; + TH1D *h1Dc = 0; + + + // + // get cuts + // + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + Error("AlidNdPtEfficiency::Analyse()", "cuts not available"); + return; + } + + // + // TPC->ITS efficiency + // + + //eff vs eta + fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); + h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(0); + if(!h1Dall) return; + fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(0); + if(!h1D) return; + + h1Dc = (TH1D *)h1D->Clone("eff_vs_eta_TPCITS"); + h1Dc->Divide(h1Dall); + aFolderObj->Add(h1Dc); + fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); + fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); + + //eff vs phi + fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); + fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799); + h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(1); + if(!h1Dall) return; + fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(1); + if(!h1D) return; + + h1Dc = (TH1D *)h1D->Clone("eff_vs_phi_TPCITS"); + h1Dc->Divide(h1Dall); + aFolderObj->Add(h1Dc); + fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); + fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); + + //eff vs pT + fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); + fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799); + h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(2); + if(!h1Dall) return; + fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(2); + if(!h1D) return; + + h1Dc = (TH1D *)h1D->Clone("eff_vs_pT_TPCITS"); + h1Dc->Divide(h1Dall); + aFolderObj->Add(h1Dc); + fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); + fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); + + + // + // ITS->TPC efficiency + // + + fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-1.5, 1.499); + fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); + + //eff vs eta + h1Dall = (TH1D *)fRecMCTrackHistITSTPC->Projection(0); + if(!h1Dall) return; + fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHistITSTPC->Projection(0); + if(!h1D) return; + + h1Dc = (TH1D *)h1D->Clone("eff_vs_eta_ITSTPC"); + h1Dc->Divide(h1Dall); + aFolderObj->Add(h1Dc); + fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); + + //eff vs phi + fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-0.8, 0.799); + h1Dall = (TH1D *)fRecMCTrackHistITSTPC->Projection(1); + if(!h1Dall) return; + fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHistITSTPC->Projection(1); + if(!h1D) return; + + h1Dc = (TH1D *)h1D->Clone("eff_vs_phi_ITSTPC"); + h1Dc->Divide(h1Dall); + aFolderObj->Add(h1Dc); + fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); + + //eff vs pT + fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-0.8, 0.799); + h1Dall = (TH1D *)fRecMCTrackHistITSTPC->Projection(2); + if(!h1Dall) return; + fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(2,2); + h1D = (TH1D *)fRecMCTrackHistITSTPC->Projection(2); + if(!h1D) return; + + h1Dc = (TH1D *)h1D->Clone("eff_vs_pT_ITSTPC"); + h1Dc->Divide(h1Dall); + aFolderObj->Add(h1Dc); + fRecMCTrackHistITSTPC->GetAxis(5)->SetRange(1,2); + + // export objects to analysis folder + fAnalysisFolder = ExportToFolder(aFolderObj); + if(!fAnalysisFolder) { + if(aFolderObj) delete aFolderObj; + return; + } + + // delete only TObjArray + if(aFolderObj) delete aFolderObj; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtEfficiency::ExportToFolder(TObjArray * const array) +{ + // recreate folder avery time and export objects to new one + // + AlidNdPtEfficiency * comp=this; + TFolder *folder = comp->GetAnalysisFolder(); + + TString name, title; + TFolder *newFolder = 0; + Int_t i = 0; + Int_t size = array->GetSize(); + + if(folder) { + // get name and title from old folder + name = folder->GetName(); + title = folder->GetTitle(); + + // delete old one + delete folder; + + // create new one + newFolder = CreateFolder(name.Data(),title.Data()); + newFolder->SetOwner(); + + // add objects to folder + while(i < size) { + newFolder->Add(array->At(i)); + i++; + } + } + +return newFolder; +} + +//_____________________________________________________________________________ +TFolder* AlidNdPtEfficiency::CreateFolder(TString name,TString title) { +// create folder for analysed histograms +// +TFolder *folder = 0; + folder = new TFolder(name.Data(),title.Data()); + + return folder; +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEventCuts.h b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEventCuts.h index 7a4ffbc6dcd..85d73c6fa6d 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEventCuts.h +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtEventCuts.h @@ -1,116 +1,116 @@ -#ifndef ALIDNDPTEVENTCUTS_H -#define ALIDNDPTEVENTCUTS_H - -//------------------------------------------------------------------------------ -// Class to keep event selection cuts for dNdPt analysis. -// -// Author: J.Otwinowski 01/11/2008 -//------------------------------------------------------------------------------ - -#include "AliAnalysisCuts.h" - -class AliESDEvent; -class AliESDVertex; -class AliMCEvent; -class AliHeader; -class AliGenEventHeader; - -#include "AliPWG0Helper.h" -#include "AlidNdPtHelper.h" - -class AlidNdPtEventCuts : public AliAnalysisCuts -{ -public: - AlidNdPtEventCuts(const Char_t* name ="AlidNdPtEventCuts", const Char_t *title =""); - virtual ~AlidNdPtEventCuts(); - - // setters - void SetTriggerRequired(const Bool_t bFlag=kTRUE) {fTriggerRequired=bFlag;} - void SetRecVertexRequired(const Bool_t bFlag=kTRUE) {fRecVertexRequired=bFlag;} - void SetEventProcessType(AliPWG0Helper::MCProcessType type=AliPWG0Helper::kInvalidProcess) {fEventProcessType=type;} - void SetNContributorsRange(const Float_t min=0.,const Float_t max=1e99) {fMinNContributors=min; fMaxNContributors=max;} - void SetMaxR(const Float_t max=1e99) {fMaxR=max;} - void SetZvRange(const Float_t min=-1e99, const Float_t max=1e99) {fMinZv=min; fMaxZv=max;} - - void SetMeanXYZv(const Float_t xv=0.0, const Float_t yv=0.0, const Float_t zv=0.0) { - fMeanXv = xv; fMeanYv = yv; fMeanZv = zv; - } - - void SetSigmaMeanXYZv(const Float_t sxv=1.0, const Float_t syv=1.0, const Float_t szv=10.0) { - fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv; - } - - - void SetRedoTPCVertex(const Bool_t redo = kTRUE) {fRedoTPCVertex = redo;} - void SetUseBeamSpotConstraint(const Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;} - void SetEventSelectedRequired(const Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} - - - // getters - Bool_t IsEventSelectedRequired() const {return fEventSelectedRequired;} - Bool_t IsTriggerRequired() const {return fTriggerRequired;} - Bool_t IsRecVertexRequired() const {return fRecVertexRequired;} - Int_t GetEventProcessType() const {return fEventProcessType;} - Float_t GetMinNContributors() const {return fMinNContributors;} - Float_t GetMaxNContributors() const {return fMaxNContributors;} - Float_t GetMaxR() const {return fMaxR;} - Float_t GetMinZv() const {return fMinZv;} - Float_t GetMaxZv() const {return fMaxZv;} - - Float_t GetMeanXv() const {return fMeanXv;} - Float_t GetMeanYv() const {return fMeanYv;} - Float_t GetMeanZv() const {return fMeanZv;} - - Float_t GetSigmaMeanXv() const {return fSigmaMeanXv;} - Float_t GetSigmaMeanYv() const {return fSigmaMeanYv;} - Float_t GetSigmaMeanZv() const {return fSigmaMeanZv;} - - Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;} - Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;} - - - // cuts init function - void Init(); - - // check MC tracks - Bool_t IsSelected(TObject *) {return kTRUE;} - Bool_t IsSelected(TList *) {return kTRUE;} - - // accept event - Bool_t AcceptEvent(AliESDEvent *event=0, AliMCEvent *mcEvent=0, const AliESDVertex *vtx=0); - Bool_t AcceptMCEvent(AliMCEvent *mcEvent=0); - - // Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* list); - -private: - Bool_t fTriggerRequired; // trigger required - Bool_t fRecVertexRequired; // reconstructed event vertex required - Int_t fEventProcessType; // select MC event process type (ND, SD, DD) - Float_t fMinNContributors; // min. number of contributing vertex tracks - Float_t fMaxNContributors; // max. number of contributing vertex tracks - Float_t fMaxR; // max. vertex radii (R = sqrt(Xv^2+Yv^2) - Float_t fMinZv; // min. Zv vertex - Float_t fMaxZv; // max. Zv vertex - - // interaction spot constraint - Float_t fMeanXv; // mean Xv position - Float_t fMeanYv; // mean Yv position - Float_t fMeanZv; // mean Zv position - - Float_t fSigmaMeanXv; // sigma mean Xv position - Float_t fSigmaMeanYv; // sigma mean Yv position - Float_t fSigmaMeanZv; // sigma mean Zv position - - Bool_t fRedoTPCVertex; // redo vertex - Bool_t fUseBeamSpotConstraint; // use beam spot contraints - - Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required - - AlidNdPtEventCuts(const AlidNdPtEventCuts&); // not implemented - AlidNdPtEventCuts& operator=(const AlidNdPtEventCuts&); // not implemented - - ClassDef(AlidNdPtEventCuts, 2) -}; - -#endif // ALIDNDPTEVENTCUTS_H +#ifndef ALIDNDPTEVENTCUTS_H +#define ALIDNDPTEVENTCUTS_H + +//------------------------------------------------------------------------------ +// Class to keep event selection cuts for dNdPt analysis. +// +// Author: J.Otwinowski 01/11/2008 +//------------------------------------------------------------------------------ + +#include "AliAnalysisCuts.h" + +class AliESDEvent; +class AliESDVertex; +class AliMCEvent; +class AliHeader; +class AliGenEventHeader; + +#include "AliPWG0Helper.h" +#include "AlidNdPtHelper.h" + +class AlidNdPtEventCuts : public AliAnalysisCuts +{ +public: + AlidNdPtEventCuts(const Char_t* name ="AlidNdPtEventCuts", const Char_t *title =""); + virtual ~AlidNdPtEventCuts(); + + // setters + void SetTriggerRequired(const Bool_t bFlag=kTRUE) {fTriggerRequired=bFlag;} + void SetRecVertexRequired(const Bool_t bFlag=kTRUE) {fRecVertexRequired=bFlag;} + void SetEventProcessType(AliPWG0Helper::MCProcessType type=AliPWG0Helper::kInvalidProcess) {fEventProcessType=type;} + void SetNContributorsRange(const Float_t min=0.,const Float_t max=1e99) {fMinNContributors=min; fMaxNContributors=max;} + void SetMaxR(const Float_t max=1e99) {fMaxR=max;} + void SetZvRange(const Float_t min=-1e99, const Float_t max=1e99) {fMinZv=min; fMaxZv=max;} + + void SetMeanXYZv(const Float_t xv=0.0, const Float_t yv=0.0, const Float_t zv=0.0) { + fMeanXv = xv; fMeanYv = yv; fMeanZv = zv; + } + + void SetSigmaMeanXYZv(const Float_t sxv=1.0, const Float_t syv=1.0, const Float_t szv=10.0) { + fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv; + } + + + void SetRedoTPCVertex(const Bool_t redo = kTRUE) {fRedoTPCVertex = redo;} + void SetUseBeamSpotConstraint(const Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;} + void SetEventSelectedRequired(const Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} + + + // getters + Bool_t IsEventSelectedRequired() const {return fEventSelectedRequired;} + Bool_t IsTriggerRequired() const {return fTriggerRequired;} + Bool_t IsRecVertexRequired() const {return fRecVertexRequired;} + Int_t GetEventProcessType() const {return fEventProcessType;} + Float_t GetMinNContributors() const {return fMinNContributors;} + Float_t GetMaxNContributors() const {return fMaxNContributors;} + Float_t GetMaxR() const {return fMaxR;} + Float_t GetMinZv() const {return fMinZv;} + Float_t GetMaxZv() const {return fMaxZv;} + + Float_t GetMeanXv() const {return fMeanXv;} + Float_t GetMeanYv() const {return fMeanYv;} + Float_t GetMeanZv() const {return fMeanZv;} + + Float_t GetSigmaMeanXv() const {return fSigmaMeanXv;} + Float_t GetSigmaMeanYv() const {return fSigmaMeanYv;} + Float_t GetSigmaMeanZv() const {return fSigmaMeanZv;} + + Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;} + Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;} + + + // cuts init function + void Init(); + + // check MC tracks + Bool_t IsSelected(TObject *) {return kTRUE;} + Bool_t IsSelected(TList *) {return kTRUE;} + + // accept event + Bool_t AcceptEvent(AliESDEvent *event=0, AliMCEvent *mcEvent=0, const AliESDVertex *vtx=0); + Bool_t AcceptMCEvent(AliMCEvent *mcEvent=0); + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* list); + +private: + Bool_t fTriggerRequired; // trigger required + Bool_t fRecVertexRequired; // reconstructed event vertex required + Int_t fEventProcessType; // select MC event process type (ND, SD, DD) + Float_t fMinNContributors; // min. number of contributing vertex tracks + Float_t fMaxNContributors; // max. number of contributing vertex tracks + Float_t fMaxR; // max. vertex radii (R = sqrt(Xv^2+Yv^2) + Float_t fMinZv; // min. Zv vertex + Float_t fMaxZv; // max. Zv vertex + + // interaction spot constraint + Float_t fMeanXv; // mean Xv position + Float_t fMeanYv; // mean Yv position + Float_t fMeanZv; // mean Zv position + + Float_t fSigmaMeanXv; // sigma mean Xv position + Float_t fSigmaMeanYv; // sigma mean Yv position + Float_t fSigmaMeanZv; // sigma mean Zv position + + Bool_t fRedoTPCVertex; // redo vertex + Bool_t fUseBeamSpotConstraint; // use beam spot contraints + + Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required + + AlidNdPtEventCuts(const AlidNdPtEventCuts&); // not implemented + AlidNdPtEventCuts& operator=(const AlidNdPtEventCuts&); // not implemented + + ClassDef(AlidNdPtEventCuts, 2) +}; + +#endif // ALIDNDPTEVENTCUTS_H diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTask.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTask.cxx index af919f4e287..e9ecf9a1c84 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTask.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTask.cxx @@ -1,217 +1,217 @@ -/************************************************************************** -* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -#include "iostream" - -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TCanvas.h" -#include "TList.h" -#include "TFile.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliESDEvent.h" -#include "AliESDInputHandler.h" -#include "AliESDVertex.h" -#include "AliTracker.h" -#include "AliGeomManager.h" - -#include "AliCentrality.h" -#include "AliESDVZERO.h" -#include "AliMultiplicity.h" - -#include "AliESDtrackCuts.h" -#include "AliMCEventHandler.h" -#include "AlidNdPt.h" -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" - -#include "AlidNdPtTask.h" - -using namespace std; - -ClassImp(AlidNdPtTask) - -//_____________________________________________________________________________ -AlidNdPtTask::AlidNdPtTask(const char *name) - : AliAnalysisTaskSE(name) - , fESD(0) - , fMC(0) - , fOutput(0) - , fPitList(0) - , fCompList(0) - , fUseMCInfo(kFALSE) -{ - // Constructor - - // Define input and output slots here - DefineOutput(1, TList::Class()); - - // create the list for comparison objects - fCompList = new TList; -} - -//_____________________________________________________________________________ -AlidNdPtTask::~AlidNdPtTask() -{ - if(fOutput) delete fOutput; fOutput =0; - if(fCompList) delete fCompList; fCompList =0; -} - -//____________________________________________________________________________ -Bool_t AlidNdPtTask::Notify() -{ - static Int_t count = 0; - count++; - //Printf("Processing %d. file: %s", count, ((TTree*) GetInputData(0))->GetCurrentFile()->GetName()); - TTree *chain = (TChain*)GetInputData(0); - if(chain) - Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName()); - - /* - TChain *chain = (TChain*)GetInputData(0); - AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - if (!esdH) { - Printf("ERROR: Could not get ESDInputHandler"); - return kFALSE; - } else { - if(chain) - Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName()); - } - */ - -return kTRUE; -} - -//_____________________________________________________________________________ -Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj) -{ - // add analysis object to the list - if(pObj == 0) { - Printf("ERROR: Could not add comparison object"); - return kFALSE; - } - - // add object to the list - fCompList->AddLast(pObj); - -return kTRUE; -} - -//_____________________________________________________________________________ -void AlidNdPtTask::UserCreateOutputObjects() -{ - // Create histograms - // Called once - - OpenFile(1, "RECREATE"); - - // - // create output list - // - fOutput = new TList; - fOutput->SetOwner(); - fPitList = fOutput->MakeIterator(); - - // add dNdPt analysis objects to the output - AlidNdPt *pObj=0; - Int_t count=0; - TIterator *pitCompList = fCompList->MakeIterator(); - pitCompList->Reset(); - while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) { - fOutput->Add(pObj); - count++; - } - Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count); - - PostData(1, fOutput); -} - -//_____________________________________________________________________________ -void AlidNdPtTask::UserExec(Option_t *) -{ - // - // Called for each event - // - - // ESD event - fESD = (AliESDEvent*) (InputEvent()); - if (!fESD) { - Printf("ERROR: ESD event not available"); - return; - } - - // MC event - if(fUseMCInfo) { - fMC = MCEvent(); - if (!fMC) { - Printf("ERROR: MC event not available"); - return; - } - } - - - AlidNdPt *pObj = 0; - fPitList->Reset(); - while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) { - pObj->Process(fESD,fMC); - } - - - // Post output data. - PostData(1, fOutput); -} - -//_____________________________________________________________________________ -void AlidNdPtTask::FinishTaskOutput() -{ - // - // Called one at the end - // locally on working node - // - // check output data - fOutput = dynamic_cast (GetOutputData(1)); - if (!fOutput) { - Printf("ERROR: AlidNdPtTask::FinishTaskOutput(): Output data not avaiable GetOutputData(1)==0x0 ..." ); - return; - } - - AlidNdPt* pObj=0; - TIterator* itOut = fOutput->MakeIterator(); - itOut->Reset(); - while(( pObj = dynamic_cast(itOut->Next())) != NULL) { - if(pObj->GetAnalyseOutput()) { - pObj->Analyse(); - } - } - - // Post output data. - PostData(1, fOutput); -} - -//_____________________________________________________________________________ -void AlidNdPtTask::Terminate(Option_t *) -{ - // Called one at the end - - // check output data - fOutput = dynamic_cast (GetOutputData(1)); - if (!fOutput) { - Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." ); - return; - } -} +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +#include "iostream" + +#include "TChain.h" +#include "TTree.h" +#include "TH1F.h" +#include "TCanvas.h" +#include "TList.h" +#include "TFile.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliESDEvent.h" +#include "AliESDInputHandler.h" +#include "AliESDVertex.h" +#include "AliTracker.h" +#include "AliGeomManager.h" + +#include "AliCentrality.h" +#include "AliESDVZERO.h" +#include "AliMultiplicity.h" + +#include "AliESDtrackCuts.h" +#include "AliMCEventHandler.h" +#include "AlidNdPt.h" +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" + +#include "AlidNdPtTask.h" + +using namespace std; + +ClassImp(AlidNdPtTask) + +//_____________________________________________________________________________ +AlidNdPtTask::AlidNdPtTask(const char *name) + : AliAnalysisTaskSE(name) + , fESD(0) + , fMC(0) + , fOutput(0) + , fPitList(0) + , fCompList(0) + , fUseMCInfo(kFALSE) +{ + // Constructor + + // Define input and output slots here + DefineOutput(1, TList::Class()); + + // create the list for comparison objects + fCompList = new TList; +} + +//_____________________________________________________________________________ +AlidNdPtTask::~AlidNdPtTask() +{ + if(fOutput) delete fOutput; fOutput =0; + if(fCompList) delete fCompList; fCompList =0; +} + +//____________________________________________________________________________ +Bool_t AlidNdPtTask::Notify() +{ + static Int_t count = 0; + count++; + //Printf("Processing %d. file: %s", count, ((TTree*) GetInputData(0))->GetCurrentFile()->GetName()); + TTree *chain = (TChain*)GetInputData(0); + if(chain) + Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName()); + + /* + TChain *chain = (TChain*)GetInputData(0); + AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!esdH) { + Printf("ERROR: Could not get ESDInputHandler"); + return kFALSE; + } else { + if(chain) + Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName()); + } + */ + +return kTRUE; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj) +{ + // add analysis object to the list + if(pObj == 0) { + Printf("ERROR: Could not add comparison object"); + return kFALSE; + } + + // add object to the list + fCompList->AddLast(pObj); + +return kTRUE; +} + +//_____________________________________________________________________________ +void AlidNdPtTask::UserCreateOutputObjects() +{ + // Create histograms + // Called once + + OpenFile(1, "RECREATE"); + + // + // create output list + // + fOutput = new TList; + fOutput->SetOwner(); + fPitList = fOutput->MakeIterator(); + + // add dNdPt analysis objects to the output + AlidNdPt *pObj=0; + Int_t count=0; + TIterator *pitCompList = fCompList->MakeIterator(); + pitCompList->Reset(); + while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) { + fOutput->Add(pObj); + count++; + } + Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count); + + PostData(1, fOutput); +} + +//_____________________________________________________________________________ +void AlidNdPtTask::UserExec(Option_t *) +{ + // + // Called for each event + // + + // ESD event + fESD = (AliESDEvent*) (InputEvent()); + if (!fESD) { + Printf("ERROR: ESD event not available"); + return; + } + + // MC event + if(fUseMCInfo) { + fMC = MCEvent(); + if (!fMC) { + Printf("ERROR: MC event not available"); + return; + } + } + + + AlidNdPt *pObj = 0; + fPitList->Reset(); + while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) { + pObj->Process(fESD,fMC); + } + + + // Post output data. + PostData(1, fOutput); +} + +//_____________________________________________________________________________ +void AlidNdPtTask::FinishTaskOutput() +{ + // + // Called one at the end + // locally on working node + // + // check output data + fOutput = dynamic_cast (GetOutputData(1)); + if (!fOutput) { + Printf("ERROR: AlidNdPtTask::FinishTaskOutput(): Output data not avaiable GetOutputData(1)==0x0 ..." ); + return; + } + + AlidNdPt* pObj=0; + TIterator* itOut = fOutput->MakeIterator(); + itOut->Reset(); + while(( pObj = dynamic_cast(itOut->Next())) != NULL) { + if(pObj->GetAnalyseOutput()) { + pObj->Analyse(); + } + } + + // Post output data. + PostData(1, fOutput); +} + +//_____________________________________________________________________________ +void AlidNdPtTask::Terminate(Option_t *) +{ + // Called one at the end + + // check output data + fOutput = dynamic_cast (GetOutputData(1)); + if (!fOutput) { + Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." ); + return; + } +} diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx index d3e33b6d962..ebdb83f1e09 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx @@ -1,2075 +1,2075 @@ -/************************************************************************** -* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -#include "iostream" - -#include -#include - -#include "TChain.h" -#include "TTreeStream.h" -#include "TTree.h" -#include "TH1F.h" -#include "TCanvas.h" -#include "TList.h" -#include "TObjArray.h" -#include "TFile.h" -#include "TMatrixD.h" -#include "TRandom3.h" - -#include "AliHeader.h" -#include "AliGenEventHeader.h" -#include "AliInputEventHandler.h" -#include "AliStack.h" -#include "AliTrackReference.h" - -#include "AliPhysicsSelection.h" -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliESDEvent.h" -#include "AliESDfriend.h" -#include "AliMCEvent.h" -#include "AliESDInputHandler.h" -#include "AliESDVertex.h" -#include "AliTracker.h" -#include "AliGeomManager.h" - -#include "AliCentrality.h" -#include "AliESDVZERO.h" -#include "AliMultiplicity.h" - -#include "AliESDtrackCuts.h" -#include "AliMCEventHandler.h" -#include "AlidNdPt.h" -#include "AlidNdPtEventCuts.h" -#include "AlidNdPtAcceptanceCuts.h" - -#include "AlidNdPtTrackDumpTask.h" -#include "AliKFParticle.h" -#include "AliESDv0.h" - -using namespace std; - -ClassImp(AlidNdPtTrackDumpTask) - -//_____________________________________________________________________________ -AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name) - : AliAnalysisTaskSE(name) - , fESD(0) - , fMC(0) - , fESDfriend(0) - , fOutput(0) - , fPitList(0) - , fUseMCInfo(kFALSE) - , fUseESDfriends(kFALSE) - , fdNdPtEventCuts(0) - , fdNdPtAcceptanceCuts(0) - , fdNdPtRecAcceptanceCuts(0) - , fEsdTrackCuts(0) - , fTrigger(AliTriggerAnalysis::kMB1) - , fAnalysisMode(AlidNdPtHelper::kTPC) - , fTreeSRedirector(0) - , fCentralityEstimator(0) - , fLowPtTrackDownscaligF(0) - , fLowPtV0DownscaligF(0) - , fProcessAll(kFALSE) - , fProcessCosmics(kFALSE) - , fTree1(0) - , fTree2(0) - , fTree3(0) - , fTree4(0) - , fTree5(0) - , fTree6(0) -{ - // Constructor - - // Define input and output slots here - DefineOutput(1, TTree::Class()); - DefineOutput(2, TTree::Class()); - DefineOutput(3, TTree::Class()); - DefineOutput(4, TTree::Class()); - DefineOutput(5, TTree::Class()); - DefineOutput(6, TTree::Class()); -} - -//_____________________________________________________________________________ -AlidNdPtTrackDumpTask::~AlidNdPtTrackDumpTask() -{ - if(fOutput) delete fOutput; fOutput =0; - if(fTreeSRedirector) delete fTreeSRedirector; fTreeSRedirector =0; - - if(fdNdPtEventCuts) delete fdNdPtEventCuts; fdNdPtEventCuts=NULL; - if(fdNdPtAcceptanceCuts) delete fdNdPtAcceptanceCuts; fdNdPtAcceptanceCuts=NULL; - if(fdNdPtRecAcceptanceCuts) delete fdNdPtRecAcceptanceCuts; fdNdPtRecAcceptanceCuts=NULL; - if(fEsdTrackCuts) delete fEsdTrackCuts; fEsdTrackCuts=NULL; - - -} - -//____________________________________________________________________________ -Bool_t AlidNdPtTrackDumpTask::Notify() -{ - static Int_t count = 0; - count++; - TTree *chain = (TChain*)GetInputData(0); - if(chain) - { - Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName()); - } - -return kTRUE; -} - -//_____________________________________________________________________________ -void AlidNdPtTrackDumpTask::UserCreateOutputObjects() -{ - // Create histograms - // Called once - fOutput = new TList; - fOutput->SetOwner(); - - // - // create temporary file for output tree - fTreeSRedirector = new TTreeSRedirector("jotwinow_Temp_Trees.root"); - - fTree1 = new TTree; - fTree2 = new TTree; - fTree3 = new TTree; - fTree4 = new TTree; - fTree5 = new TTree; - fTree6 = new TTree; - - fOutput->Add(fTree1); - fOutput->Add(fTree2); - fOutput->Add(fTree3); - fOutput->Add(fTree4); - fOutput->Add(fTree5); - fOutput->Add(fTree6); - - PostData(1, fTree1); - PostData(2, fTree2); - PostData(3, fTree3); - PostData(4, fTree4); - PostData(5, fTree5); - PostData(6, fTree6); - -} - -//_____________________________________________________________________________ -void AlidNdPtTrackDumpTask::UserExec(Option_t *) -{ - // - // Called for each event - // - - // ESD event - fESD = (AliESDEvent*) (InputEvent()); - if (!fESD) { - Printf("ERROR: ESD event not available"); - return; - } - - // MC event - if(fUseMCInfo) { - fMC = MCEvent(); - if (!fMC) { - Printf("ERROR: MC event not available"); - return; - } - } - - if(fUseESDfriends) { - fESDfriend = static_cast(fESD->FindListObject("AliESDfriend")); - if(!fESDfriend) { - Printf("ERROR: ESD friends not available"); - } - } - - // - if(fProcessAll) { - ProcessAll(fESD,fMC,fESDfriend); // all track stages and MC - } - else { - Process(fESD,fMC,fESDfriend); // only global and TPC tracks - } - - // - ProcessV0(fESD,fMC,fESDfriend); - ProcessLaser(fESD,fMC,fESDfriend); - ProcessdEdx(fESD,fMC,fESDfriend); - - if (fProcessCosmics) { ProcessCosmics(fESD); } - if(IsUseMCInfo()) { ProcessMCEff(fESD,fMC,fESDfriend); } -} - -//_____________________________________________________________________________ -void AlidNdPtTrackDumpTask::ProcessCosmics(AliESDEvent *const event) -{ - // - // Select real events with high-pT tracks - // - if(!event) { - AliDebug(AliLog::kError, "event not available"); - return; - } - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); - - - // check for cosmic pairs - // - // find cosmic pairs trigger by random trigger - // - // - AliESDVertex *vertexSPD = (AliESDVertex *)event->GetPrimaryVertexSPD(); - AliESDVertex *vertexTPC = (AliESDVertex *)event->GetPrimaryVertexTPC(); - const Double_t kMinPt=0.8; - const Double_t kMinPtMax=0.8; - const Double_t kMinNcl=50; - const Double_t kMaxDelta[5]={2,600,0.02,0.02,0.1}; - Int_t ntracks=event->GetNumberOfTracks(); - // Float_t dcaTPC[2]={0,0}; - // Float_t covTPC[3]={0,0,0}; - - UInt_t specie = event->GetEventSpecie(); // skip laser events - if (specie==AliRecoParam::kCalib) return; - - - - for (Int_t itrack0=0;itrack0GetTrack(itrack0); - if (!track0) continue; - if (!track0->IsOn(AliESDtrack::kTPCrefit)) continue; - - if (TMath::Abs(AliTracker::GetBz())>1 && track0->Pt() < kMinPt) continue; - if (track0->Pt() < kMinPt) continue; - if (track0->GetTPCncls() < kMinNcl) continue; - if (TMath::Abs(track0->GetY())GetKinkIndex(0)>0) continue; - const Double_t * par0=track0->GetParameter(); //track param at rhe DCA - //rm primaries - // - //track0->GetImpactParametersTPC(dcaTPC,covTPC); - //if (TMath::Abs(dcaTPC[0])GetInnerParam(); - for (Int_t itrack1=itrack0+1;itrack1GetTrack(itrack1); - if (!track1) continue; - if (!track1->IsOn(AliESDtrack::kTPCrefit)) continue; - if (track1->GetKinkIndex(0)>0) continue; - if ((TMath::Abs(AliTracker::GetBz())>1) && (track1->Pt() < kMinPt)) continue; - if (track1->Pt() < kMinPt) continue; - if (track1->GetTPCncls()1 && TMath::Max(track1->Pt(), track0->Pt())GetY())GetImpactParametersTPC(dcaTPC,covTPC); - // if (TMath::Abs(dcaTPC[0])GetParameter(); //track param at rhe DCA - // - Bool_t isPair=kTRUE; - for (Int_t ipar=0; ipar<5; ipar++){ - if (ipar==4&&TMath::Abs(AliTracker::GetBz())<1) continue; // 1/pt not defined for B field off - if (TMath::Abs(TMath::Abs(par0[ipar])-TMath::Abs(par1[ipar]))>kMaxDelta[ipar]) isPair=kFALSE; - } - if (!isPair) continue; - if (TMath::Abs(TMath::Abs(track0->GetAlpha()-track1->GetAlpha())-TMath::Pi())>kMaxDelta[2]) isPair=kFALSE; - //delta with correct sign - /* - TCut cut0="abs(t1.fP[0]+t0.fP[0])<2" - TCut cut3="abs(t1.fP[3]+t0.fP[3])<0.02" - TCut cut4="abs(t1.fP[4]+t0.fP[4])<0.2" - */ - if (TMath::Abs(par0[0]+par1[0])>kMaxDelta[0]) isPair=kFALSE; //delta y opposite sign - if (TMath::Abs(par0[3]+par1[3])>kMaxDelta[3]) isPair=kFALSE; //delta tgl opposite sign - if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Abs(par0[4]+par1[4])>kMaxDelta[4]) isPair=kFALSE; //delta 1/pt opposite sign - if (!isPair) continue; - TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName()); - Int_t eventNumber = event->GetEventNumberInFile(); - //Bool_t hasFriend = kFALSE; - //Bool_t hasITS=(track0->GetNcls(0)+track1->GetNcls(0)>4); - //printf("DUMPHPTCosmic:%s|%f|%d|%d|%d\n",filename.Data(),(TMath::Min(track0->Pt(),track1->Pt())), eventNumber,hasFriend,hasITS); - // const AliExternalTrackParam * trackIn1 = track1->GetInnerParam(); - // - // - Int_t ntracksSPD = vertexSPD->GetNContributors(); - Int_t ntracksTPC = vertexTPC->GetNContributors(); - Int_t runNumber = event->GetRunNumber(); - Int_t timeStamp = event->GetTimeStamp(); - ULong64_t triggerMask = event->GetTriggerMask(); - Float_t magField = event->GetMagneticField(); - TObjString triggerClass = event->GetFiredTriggerClasses().Data(); - - // - // Dump to the tree - // vertex - // TPC-ITS tracks - // - if(!fTreeSRedirector) return; - (*fTreeSRedirector)<<"CosmicPairs"<< - "fileName.="<<&fileName<< // file name - "runNumber="<GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); - - // trigger - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - } - - // centrality determination - Float_t centralityF = -1; - AliCentrality *esdCentrality = esdEvent->GetCentrality(); - centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - - Int_t multMCTrueTracks = 0; - if(IsUseMCInfo()) - { - // - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - // multipliticy of all MC primary tracks - // in Zv, pt and eta ranges) - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); - - } // end bUseMC - - // get reconstructed vertex - //const AliESDVertex* vtxESD = 0; - AliESDVertex* vtxESD = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); - } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); - } - else { - return; - } - - if(!vtxESD) return; - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d, status %d, vz %f \n",isEventOK, isEventTriggered, vtxESD->GetStatus(), vtxESD->GetZv()); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - - // check event cuts - if(isEventOK && isEventTriggered) - { - - // - // get IR information - // - AliESDHeader *esdHeader = 0; - esdHeader = esdEvent->GetHeader(); - if(!esdHeader) return; - //Int_t ir1 = esdHeader->GetTriggerIREntries(); //all ir-s - //Int_t ir2 = esdHeader->GetTriggerIREntries(-1,1); // int2 set, 180 ms time interval - - // Use when Peter commit the changes in the header - Int_t ir1 = 0; - Int_t ir2 = 0; - - // - Double_t vert[3] = {0}; - vert[0] = vtxESD->GetXv(); - vert[1] = vtxESD->GetYv(); - vert[2] = vtxESD->GetZv(); - Int_t mult = vtxESD->GetNContributors(); - Double_t bz = esdEvent->GetMagneticField(); - Double_t runNumber = esdEvent->GetRunNumber(); - Double_t evtTimeStamp = esdEvent->GetTimeStamp(); - Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); - - // high pT tracks - for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) - { - AliESDtrack *track = esdEvent->GetTrack(iTrack); - if(!track) continue; - if(track->Charge()==0) continue; - if(!esdTrackCuts->AcceptTrack(track)) continue; - if(!accCuts->AcceptTrack(track)) continue; - - // downscale low-pT tracks - Double_t scalempt= TMath::Min(track->Pt(),10.); - Double_t downscaleF = gRandom->Rndm(); - downscaleF *= fLowPtTrackDownscaligF; - if(TMath::Exp(2*scalempt)GetTPCInnerParam()); - if (!tpcInner) continue; - // transform to the track reference frame - Bool_t isOK = kFALSE; - isOK = tpcInner->Rotate(track->GetAlpha()); - isOK = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); - if(!isOK) continue; - - // Dump to the tree - // vertex - // TPC-ITS tracks - // - if(!fTreeSRedirector) return; - (*fTreeSRedirector)<<"highPt"<< - "fileName.="<<&fileName<< - "runNumber="<GetCurrentFile()->GetName()); - - // laser events - const AliESDHeader* esdHeader = esdEvent->GetHeader(); - if(esdHeader && esdHeader->GetEventSpecie()==AliRecoParam::kCalib) - { - Int_t countLaserTracks = 0; - for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) - { - AliESDtrack *track = esdEvent->GetTrack(iTrack); - if(!track) continue; - - if(track->GetTPCInnerParam()) countLaserTracks++; - } - - if(countLaserTracks > 100) - { - Double_t runNumber = esdEvent->GetRunNumber(); - Double_t evtTimeStamp = esdEvent->GetTimeStamp(); - Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); - Double_t bz = esdEvent->GetMagneticField(); - - if(!fTreeSRedirector) return; - (*fTreeSRedirector)<<"Laser"<< - "fileName.="<<&fileName<< - "runNumber="<GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); - - // trigger - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - } - - // centrality determination - Float_t centralityF = -1; - AliCentrality *esdCentrality = esdEvent->GetCentrality(); - centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - - Int_t multMCTrueTracks = 0; - if(IsUseMCInfo()) - { - // - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - // multipliticy of all MC primary tracks - // in Zv, pt and eta ranges) - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); - - } // end bUseMC - - // get reconstructed vertex - //const AliESDVertex* vtxESD = 0; - AliESDVertex* vtxESD = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); - } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); - } - else { - return; - } - - if(!vtxESD) return; - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - - // check event cuts - if(isEventOK && isEventTriggered) - { - // - // get IR information - // - AliESDHeader *esdHeader = 0; - esdHeader = esdEvent->GetHeader(); - if(!esdHeader) return; - //Int_t ir1 = esdHeader->GetTriggerIREntries(); //all ir-s - //Int_t ir2 = esdHeader->GetTriggerIREntries(-1,1); // int2 set, 180 ms time interval - // - Int_t ir1 = 0; - Int_t ir2 = 0; - - // - Double_t vert[3] = {0}; - vert[0] = vtxESD->GetXv(); - vert[1] = vtxESD->GetYv(); - vert[2] = vtxESD->GetZv(); - Int_t mult = vtxESD->GetNContributors(); - Double_t bz = esdEvent->GetMagneticField(); - Double_t runNumber = esdEvent->GetRunNumber(); - Double_t evtTimeStamp = esdEvent->GetTimeStamp(); - Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); - - // high pT tracks - for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) - { - AliESDtrack *track = esdEvent->GetTrack(iTrack); - if(!track) continue; - if(track->Charge()==0) continue; - if(!esdTrackCuts->AcceptTrack(track)) continue; - if(!accCuts->AcceptTrack(track)) continue; - - // downscale low-pT tracks - Double_t scalempt= TMath::Min(track->Pt(),10.); - Double_t downscaleF = gRandom->Rndm(); - downscaleF *= fLowPtTrackDownscaligF; - if(TMath::Exp(2*scalempt)GetXYZ(x); - Double_t b[3]; AliTracker::GetBxByBz(x,b); - - // - // Transform TPC inner params to track reference frame - // - Bool_t isOKtpcInner = kFALSE; - AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(track->GetTPCInnerParam()); - if (tpcInner) { - // transform to the track reference frame - isOKtpcInner = tpcInner->Rotate(track->GetAlpha()); - isOKtpcInner = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); - } - - // - // Constrain TPC inner to vertex - // clone TPCinner has to be deleted - // - Bool_t isOKtpcInnerC = kFALSE; - AliExternalTrackParam * tpcInnerC = new AliExternalTrackParam(*(track->GetTPCInnerParam())); - if (tpcInnerC) { - isOKtpcInnerC = ConstrainTPCInner(tpcInnerC,vtxESD,b); - isOKtpcInnerC = tpcInnerC->Rotate(track->GetAlpha()); - isOKtpcInnerC = tpcInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); - } - - // - // Constrain TPC refitted tracks at inner TPC wall (InnerParams) to vertex - // Clone track InnerParams has to be deleted - // - Bool_t isOKtrackInnerC = kFALSE; - AliExternalTrackParam * trackInnerC = new AliExternalTrackParam(*(track->GetInnerParam())); - if (trackInnerC) { - isOKtrackInnerC = ConstrainTrackInner(trackInnerC,vtxESD,track->GetMass(),b); - isOKtrackInnerC = trackInnerC->Rotate(track->GetAlpha()); - isOKtrackInnerC = trackInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); - } - - // - // calculate chi2 between vi and vj vectors - // with covi and covj covariance matrices - // chi2ij = (vi-vj)^(T)*(covi+covj)^(-1)*(vi-vj) - // - TMatrixD deltaT(5,1), deltaTtrackC(5,1); - TMatrixD delta(1,5), deltatrackC(1,5); - TMatrixD covarM(5,5), covarMtrackC(5,5); - TMatrixD chi2(1,1); - TMatrixD chi2trackC(1,1); - - if(isOKtpcInnerC && isOKtrackInnerC) - { - for (Int_t ipar=0; ipar<5; ipar++) { - deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; - delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; - - deltaTtrackC(ipar,0)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; - deltatrackC(0,ipar)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; - - for (Int_t jpar=0; jpar<5; jpar++) { - Int_t index=track->GetIndex(ipar,jpar); - covarM(ipar,jpar)=track->GetCovariance()[index]+tpcInnerC->GetCovariance()[index]; - covarMtrackC(ipar,jpar)=track->GetCovariance()[index]+trackInnerC->GetCovariance()[index]; - } - } - - // chi2 distance TPC constrained and TPC+ITS - TMatrixD covarMInv = covarM.Invert(); - TMatrixD mat2 = covarMInv*deltaT; - chi2 = delta*mat2; - //chi2.Print(); - - // chi2 distance TPC refitted constrained and TPC+ITS - TMatrixD covarMInvtrackC = covarMtrackC.Invert(); - TMatrixD mat2trackC = covarMInvtrackC*deltaTtrackC; - chi2trackC = deltatrackC*mat2trackC; - //chi2trackC.Print(); - } - - - // - // Propagate ITSout to TPC inner wall - // and calculate chi2 distance to track (InnerParams) - // - const Double_t kTPCRadius=85; - const Double_t kStep=3; - - // clone track InnerParams has to be deleted - Bool_t isOKtrackInnerC2 = kFALSE; - AliExternalTrackParam *trackInnerC2 = new AliExternalTrackParam(*(track->GetInnerParam())); - if (trackInnerC2) { - isOKtrackInnerC2 = AliTracker::PropagateTrackToBxByBz(trackInnerC2,kTPCRadius,track->GetMass(),kStep,kFALSE); - } - - Bool_t isOKouterITSc = kFALSE; - AliExternalTrackParam *outerITSc = NULL; - TMatrixD chi2OuterITS(1,1); - - if(esdFriend && esdFriend->TestSkipBit()==kFALSE) - { - // propagate ITSout to TPC inner wall - AliESDfriendTrack *friendTrack = esdFriend->GetTrack(iTrack); - - if(friendTrack) - { - outerITSc = new AliExternalTrackParam(*friendTrack->GetITSOut()); - if(outerITSc) - { - isOKouterITSc = AliTracker::PropagateTrackToBxByBz(outerITSc,kTPCRadius,track->GetMass(),kStep,kFALSE); - isOKouterITSc = outerITSc->Rotate(trackInnerC2->GetAlpha()); - isOKouterITSc = outerITSc->PropagateTo(trackInnerC2->GetX(),esdEvent->GetMagneticField()); - - // - // calculate chi2 between outerITS and innerParams - // cov without z-coordinate at the moment - // - TMatrixD deltaTouterITS(4,1); - TMatrixD deltaouterITS(1,4); - TMatrixD covarMouterITS(4,4); - - if(isOKtrackInnerC2 && isOKouterITSc) { - Int_t kipar = 0; - Int_t kjpar = 0; - for (Int_t ipar=0; ipar<5; ipar++) { - if(ipar!=1) { - deltaTouterITS(kipar,0)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar]; - deltaouterITS(0,kipar)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar]; - } - - kjpar=0; - for (Int_t jpar=0; jpar<5; jpar++) { - Int_t index=outerITSc->GetIndex(ipar,jpar); - if(ipar !=1 || jpar!=1) { - covarMouterITS(kipar,kjpar)=outerITSc->GetCovariance()[index]+trackInnerC2->GetCovariance()[index]; - } - if(jpar!=1) kjpar++; - } - if(ipar!=1) kipar++; - } - - // chi2 distance ITSout and InnerParams - TMatrixD covarMInvouterITS = covarMouterITS.Invert(); - TMatrixD mat2outerITS = covarMInvouterITS*deltaTouterITS; - chi2OuterITS = deltaouterITS*mat2outerITS; - //chi2OuterITS.Print(); - } - } - } - } - - // - // MC info - // - TParticle *particle=NULL, *particleTPC=NULL, *particleITS=NULL; - TParticle *particleMother=NULL, *particleMotherTPC=NULL, *particleMotherITS=NULL; - Int_t mech=-1, mechTPC=-1, mechITS=-1; - Bool_t isPrim=kFALSE, isPrimTPC=kFALSE, isPrimITS=kFALSE; - Bool_t isFromStrangess=kFALSE, isFromStrangessTPC=kFALSE, isFromStrangessITS=kFALSE; - Bool_t isFromConversion=kFALSE, isFromConversionTPC=kFALSE, isFromConversionITS=kFALSE; - Bool_t isFromMaterial=kFALSE, isFromMaterialTPC=kFALSE, isFromMaterialITS=kFALSE; - - AliTrackReference *refTPCIn = NULL; - AliTrackReference *refITS = NULL; - - Bool_t isOKtrackInnerC3 = kFALSE; - AliExternalTrackParam *trackInnerC3 = new AliExternalTrackParam(*(track->GetInnerParam())); - - if(IsUseMCInfo()) - { - if(!stack) return; - - // - // global track - // - Int_t label = TMath::Abs(track->GetLabel()); - particle = stack->Particle(label); - if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0.) - { - particleMother = GetMother(particle,stack); - mech = particle->GetUniqueID(); - isPrim = stack->IsPhysicalPrimary(label); - isFromStrangess = IsFromStrangeness(label,stack); - isFromConversion = IsFromConversion(label,stack); - isFromMaterial = IsFromMaterial(label,stack); - } - - // - // TPC track - // - Int_t labelTPC = TMath::Abs(track->GetTPCLabel()); - particleTPC = stack->Particle(labelTPC); - if(particleTPC && particleTPC->GetPDG() && particleTPC->GetPDG()->Charge()!=0.) - { - particleMotherTPC = GetMother(particleTPC,stack); - mechTPC = particleTPC->GetUniqueID(); - isPrimTPC = stack->IsPhysicalPrimary(labelTPC); - isFromStrangessTPC = IsFromStrangeness(labelTPC,stack); - isFromConversionTPC = IsFromConversion(labelTPC,stack); - isFromMaterialTPC = IsFromMaterial(labelTPC,stack); - } - - // - // store first track reference - // for TPC track - // - TParticle *part=0; - TClonesArray *trefs=0; - Int_t status = mcEvent->GetParticleAndTR(track->GetTPCLabel(), part, trefs); - - if(status>0 && part && trefs && part->GetPDG() && part->GetPDG()->Charge()!=0.) - { - Int_t nTrackRef = trefs->GetEntries(); - //printf("nTrackRef %d \n",nTrackRef); - - Int_t countITS = 0; - for (Int_t iref = 0; iref < nTrackRef; iref++) - { - AliTrackReference *ref = (AliTrackReference *)trefs->At(iref); - - // Ref. in the middle ITS - if(ref && ref->DetectorId()==AliTrackReference::kITS) - { - if(!refITS && countITS==2) { - refITS = ref; - //printf("refITS %p \n",refITS); - } - countITS++; - } - - // TPC - if(ref && ref->DetectorId()==AliTrackReference::kTPC) - { - if(!refTPCIn) { - refTPCIn = ref; - //printf("refTPCIn %p \n",refTPCIn); - //break; - } - } - } - - // transform inner params to TrackRef - // reference frame - if(refTPCIn && trackInnerC3) - { - Double_t kRefPhi = TMath::ATan2(refTPCIn->Y(),refTPCIn->X()); - isOKtrackInnerC3 = trackInnerC3->Rotate(kRefPhi); - isOKtrackInnerC3 = AliTracker::PropagateTrackToBxByBz(trackInnerC3,refTPCIn->R(),track->GetMass(),kStep,kFALSE); - } - } - - // - // ITS track - // - Int_t labelITS = TMath::Abs(track->GetITSLabel()); - particleITS = stack->Particle(labelITS); - if(particleITS && particleITS->GetPDG() && particleITS->GetPDG()->Charge()!=0.) - { - particleMotherITS = GetMother(particleITS,stack); - mechITS = particleITS->GetUniqueID(); - isPrimITS = stack->IsPhysicalPrimary(labelITS); - isFromStrangessITS = IsFromStrangeness(labelITS,stack); - isFromConversionITS = IsFromConversion(labelITS,stack); - isFromMaterialITS = IsFromMaterial(labelITS,stack); - } - } - - // - Bool_t dumpToTree=kFALSE; - - if(isOKtpcInnerC && isOKtrackInnerC) dumpToTree = kTRUE; - if(fUseESDfriends && isOKtrackInnerC2 && isOKouterITSc) dumpToTree = kTRUE; - if(fUseMCInfo && isOKtrackInnerC3) dumpToTree = kTRUE; - - // - if(fTreeSRedirector && dumpToTree) - { - (*fTreeSRedirector)<<"highPt"<< - "fileName.="<<&fileName<< - "runNumber="<GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); - - // trigger - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - } - - // centrality determination - Float_t centralityF = -1; - AliCentrality *esdCentrality = esdEvent->GetCentrality(); - centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); - - // use MC information - AliHeader* header = 0; - AliGenEventHeader* genHeader = 0; - AliStack* stack = 0; - TArrayF vtxMC(3); - - Int_t multMCTrueTracks = 0; - if(IsUseMCInfo()) - { - // - if(!mcEvent) { - AliDebug(AliLog::kError, "mcEvent not available"); - return; - } - // get MC event header - header = mcEvent->Header(); - if (!header) { - AliDebug(AliLog::kError, "Header not available"); - return; - } - // MC particle stack - stack = mcEvent->Stack(); - if (!stack) { - AliDebug(AliLog::kError, "Stack not available"); - return; - } - - // get MC vertex - genHeader = header->GenEventHeader(); - if (!genHeader) { - AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); - return; - } - genHeader->PrimaryVertex(vtxMC); - - // multipliticy of all MC primary tracks - // in Zv, pt and eta ranges) - multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); - - } // end bUseMC - - // get reconstructed vertex - //const AliESDVertex* vtxESD = 0; - AliESDVertex* vtxESD = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); - } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); - } - else { - return; - } - - if(!vtxESD) return; - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - // check event cuts - if(isEventOK && isEventTriggered) - { - if(IsUseMCInfo()) - { - if(!stack) return; - - // - // MC info - // - TParticle *particle=NULL; - TParticle *particleMother=NULL; - Int_t mech=-1; - - // reco event info - Double_t vert[3] = {0}; - vert[0] = vtxESD->GetXv(); - vert[1] = vtxESD->GetYv(); - vert[2] = vtxESD->GetZv(); - Int_t mult = vtxESD->GetNContributors(); - Double_t bz = esdEvent->GetMagneticField(); - Double_t runNumber = esdEvent->GetRunNumber(); - Double_t evtTimeStamp = esdEvent->GetTimeStamp(); - Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); - - // loop over MC stack - for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) - { - particle = stack->Particle(iMc); - if (!particle) - continue; - - // only charged particles - if(!particle->GetPDG()) continue; - Double_t charge = particle->GetPDG()->Charge()/3.; - if (TMath::Abs(charge) < 0.001) - continue; - - // only primary particles - Bool_t prim = stack->IsPhysicalPrimary(iMc); - if(!prim) continue; - - // downscale low-pT particles - Double_t scalempt= TMath::Min(particle->Pt(),10.); - Double_t downscaleF = gRandom->Rndm(); - downscaleF *= fLowPtTrackDownscaligF; - if(TMath::Exp(2*scalempt)AcceptTrack(particle)) continue; - - // check if particle reconstructed - Bool_t isRec = kFALSE; - Int_t trackIndex = -1; - for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) - { - - AliESDtrack *track = esdEvent->GetTrack(iTrack); - if(!track) continue; - if(track->Charge()==0) continue; - if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) - { - Int_t label = TMath::Abs(track->GetLabel()); - if(label == iMc) { - isRec = kTRUE; - trackIndex = iTrack; - break; - } - } - } - - // Store information in the output tree - AliESDtrack *recTrack = NULL; - if(trackIndex>-1) { - recTrack = esdEvent->GetTrack(trackIndex); - } else { - recTrack = new AliESDtrack(); - } - - particleMother = GetMother(particle,stack); - mech = particle->GetUniqueID(); - - //MC particle track length - Double_t tpcTrackLength = 0.; - AliMCParticle *mcParticle = (AliMCParticle*) mcEvent->GetTrack(iMc); - if(mcParticle) { - Int_t counter; - tpcTrackLength = mcParticle->GetTPCTrackLength(bz,0.05,counter,3.0); - } - - - // - if(fTreeSRedirector) { - (*fTreeSRedirector)<<"MCEffTree"<< - "fileName.="<<&fileName<< - "runNumber="< 1 - // - if (track->GetTPCNcls() < 60) return kFALSE; - Double_t mom = track->GetInnerParam()->GetP(); - if (mom < 0.2) return kFALSE; // protection against unexpected behavior of Aleph parameterization - Float_t dca[2], bCov[3]; - track->GetImpactParameters(dca,bCov); - // - - Double_t triggerDeDx = 4*AliExternalTrackParam::BetheBlochAleph((mom*2)/(0.938*3),1.0288,31.9806,5.04114e-11,2.13096,2.38541); - - if (track->GetTPCsignal() > triggerDeDx && track->GetTPCsignal()<1000 && TMath::Abs(dca[0])<3.) return kTRUE; - - return kFALSE; -} - -//_____________________________________________________________________________ -void AlidNdPtTrackDumpTask::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const /*esdFriend*/) -{ - // - // Select real events with V0 (K0s and Lambda) high-pT candidates - // - if(!esdEvent) { - AliDebug(AliLog::kError, "esdEvent not available"); - return; - } - - // get selection cuts - AlidNdPtEventCuts *evtCuts = GetEventCuts(); - AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); - AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); - - if(!evtCuts || !accCuts || !esdTrackCuts) { - AliDebug(AliLog::kError, "cuts not available"); - return; - } - - // trigger selection - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); - - // trigger - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - //SetPhysicsTriggerSelection(physicsSelection); - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - } - - // centrality determination - Float_t centralityF = -1; - AliCentrality *esdCentrality = esdEvent->GetCentrality(); - centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); - - - // get reconstructed vertex - //const AliESDVertex* vtxESD = 0; - AliESDVertex* vtxESD = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); - } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); - } - else { - return; - } - - if(!vtxESD) return; - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - // check event cuts - if(isEventOK && isEventTriggered) { - // - // Dump the pt downscaled V0 into the tree - // - Int_t ntracks = esdEvent->GetNumberOfTracks(); - Int_t nV0s = esdEvent->GetNumberOfV0s(); - Int_t run = esdEvent->GetRunNumber(); - Int_t time= esdEvent->GetTimeStamp(); - Int_t evNr=esdEvent->GetEventNumberInFile(); - Double_t bz = esdEvent->GetMagneticField(); - - - for (Int_t iv0=0; iv0GetV0(iv0); - if (!v0) continue; - AliESDtrack * track0 = esdEvent->GetTrack(v0->GetIndex(0)); - AliESDtrack * track1 = esdEvent->GetTrack(v0->GetIndex(1)); - if (!track0) continue; - if (!track1) continue; - if (track0->GetSign()<0) { - track1 = esdEvent->GetTrack(v0->GetIndex(0)); - track0 = esdEvent->GetTrack(v0->GetIndex(1)); - } - // - Bool_t isDownscaled = IsV0Downscaled(v0); - if (isDownscaled) continue; - AliKFParticle kfparticle; // - Int_t type=GetKFParticle(v0,esdEvent,kfparticle); - if (type==0) continue; - - if(!fTreeSRedirector) return; - (*fTreeSRedirector)<<"V0s"<< - "isDownscaled="<GetCurrentFile()->GetName()); - - // trigger - Bool_t isEventTriggered = kTRUE; - AliPhysicsSelection *physicsSelection = NULL; - AliTriggerAnalysis* triggerAnalysis = NULL; - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - if(evtCuts->IsTriggerRequired()) - { - // always MB - isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - - physicsSelection = static_cast (inputHandler->GetEventSelection()); - if(!physicsSelection) return; - - if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { - // set trigger (V0AND) - triggerAnalysis = physicsSelection->GetTriggerAnalysis(); - if(!triggerAnalysis) return; - isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); - } - } - - // get reconstructed vertex - AliESDVertex* vtxESD = 0; - if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); - } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { - vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); - } - else { - return; - } - if(!vtxESD) return; - - Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); - //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); - - - // check event cuts - if(isEventOK && isEventTriggered) - { - Double_t vert[3] = {0}; - vert[0] = vtxESD->GetXv(); - vert[1] = vtxESD->GetYv(); - vert[2] = vtxESD->GetZv(); - Int_t mult = vtxESD->GetNContributors(); - Double_t bz = esdEvent->GetMagneticField(); - Double_t runNumber = esdEvent->GetRunNumber(); - Double_t evtTimeStamp = esdEvent->GetTimeStamp(); - Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); - - // large dEdx - for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) - { - AliESDtrack *track = esdEvent->GetTrack(iTrack); - if(!track) continue; - if(track->Charge()==0) continue; - if(!esdTrackCuts->AcceptTrack(track)) continue; - if(!accCuts->AcceptTrack(track)) continue; - - if(!IsHighDeDxParticle(track)) continue; - - if(!fTreeSRedirector) return; - (*fTreeSRedirector)<<"dEdx"<< - "fileName.="<<&fileName<< - "runNumber="<GetOnFlyStatus() ==kFALSE) return 0; - // - // 1.) track cut - // - AliESDtrack * track0 = event->GetTrack(v0->GetIndex(0)); - AliESDtrack * track1 = event->GetTrack(v0->GetIndex(1)); - /* - TCut cutD="abs(track0.fD/sqrt(track0.fCdd))>2&&abs(track1.fD/sqrt(track1.fCdd))>2"; - TCut cutTheta="abs(track0.fP[3])<1&&abs(track1.fP[3])<1"; - TCut cutNcl="track0.GetTPCClusterInfo(2,1)>100&&track1.GetTPCClusterInfo(2,1)>100"; - */ - if (TMath::Abs(track0->GetTgl())>1) return 0; - if (TMath::Abs(track1->GetTgl())>1) return 0; - if ((track0->GetTPCClusterInfo(2,1))<100) return 0; - if ((track1->GetTPCClusterInfo(2,1))<100) return 0; - //if ((track0->GetITSclusters(0))<2) return 0; - //if ((track1->GetITSclusters(0))<2) return 0; - Float_t pos0[2]={0}, cov0[3]={0}; - Float_t pos1[2]={0}, cov1[3]={0}; - track0->GetImpactParameters(pos0,cov0); - track0->GetImpactParameters(pos1,cov1); - // - if (TMath::Abs(pos0[0])GetKFInfo(2,2,2); - if (chi2KF>25) return 0; - // - // 4.) Rough mass cut - 0.200 GeV - // - static Double_t masses[2]={-1}; - if (masses[0]<0){ - masses[0] = TDatabasePDG::Instance()->GetParticle("K_S0")->Mass(); - masses[1] = TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass(); - } - Double_t mass00= v0->GetEffMass(0,0); - Double_t mass22= v0->GetEffMass(2,2); - Double_t mass42= v0->GetEffMass(4,2); - Double_t mass24= v0->GetEffMass(2,4); - Bool_t massOK=kFALSE; - Int_t type=0; - Int_t ptype=0; - Double_t dmass=1; - Int_t p1=0, p2=0; - if (TMath::Abs(mass00-0)GetParamP(); - const AliExternalTrackParam *paramN = v0->GetParamN(); - if (paramP->GetSign()<0){ - paramP=v0->GetParamP(); - paramN=v0->GetParamN(); - } - //Double_t *pparam1 = (Double_t*)paramP->GetParameter(); - //Double_t *pparam2 = (Double_t*)paramN->GetParameter(); - // - AliKFParticle kfp1( *paramP, spdg[p1] ); - AliKFParticle kfp2( *paramN, -1 *spdg[p2] ); - AliKFParticle V0KF; - (V0KF)+=kfp1; - (V0KF)+=kfp2; - kfparticle=V0KF; - // - // Pointing angle - // - Double_t errPhi = V0KF.GetErrPhi(); - Double_t pointAngle= TMath::ACos(v0->GetV0CosineOfPointingAngle()); - if (pointAngle/errPhi>10) return 0; - // - return ptype; -} - -//_____________________________________________________________________________ -Bool_t AlidNdPtTrackDumpTask::IsV0Downscaled(AliESDv0 *const v0) -{ - // - // Downscale randomly low pt V0 - // - //return kFALSE; - Double_t maxPt= TMath::Max(v0->GetParamP()->Pt(), v0->GetParamN()->Pt()); - Double_t scalempt= TMath::Min(maxPt,10.); - Double_t downscaleF = gRandom->Rndm(); - downscaleF *= fLowPtV0DownscaligF; - - //printf("V0 TMath::Exp(2*scalempt) %e, downscaleF %e \n",TMath::Exp(2*scalempt), downscaleF); - if (TMath::Exp(2*scalempt)Exp(1); - Bool_t isDownscaled =TMath::Exp(rnd)<100*gRandom->Rndm(); - his1->Fill(rnd); - if (!isDownscaled) his2->Fill(rnd); - }} - - */ - -} - - - -//_____________________________________________________________________________ -Bool_t AlidNdPtTrackDumpTask::ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3]) -{ - // Constrain TPC inner params constrained - // - if(!tpcInnerC) return kFALSE; - if(!vtx) return kFALSE; - - Double_t dz[2],cov[3]; - //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex(); - //if(!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE; - //if(!tpcInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE; - if(!tpcInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE; - - - Double_t covar[6]; vtx->GetCovMatrix(covar); - Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]}; - Double_t c[3]={covar[2],0.,covar[5]}; - Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c); - if (chi2C>kVeryBig) return kFALSE; - - if(!tpcInnerC->Update(p,c)) return kFALSE; - - return kTRUE; -} - -//_____________________________________________________________________________ -Bool_t AlidNdPtTrackDumpTask::ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3]) -{ - // Constrain TPC inner params constrained - // - if(!trackInnerC) return kFALSE; - if(!vtx) return kFALSE; - - const Double_t kRadius = 2.8; - const Double_t kMaxStep = 1.0; - - Double_t dz[2],cov[3]; - - //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex(); - //if(!trackInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE; - //if(!trackInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE; - - if(!AliTracker::PropagateTrackToBxByBz(trackInnerC,kRadius,mass,kMaxStep,kFALSE)) return kFALSE; - if(!trackInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE; - - // - Double_t covar[6]; vtx->GetCovMatrix(covar); - Double_t p[2]={trackInnerC->GetParameter()[0]-dz[0],trackInnerC->GetParameter()[1]-dz[1]}; - Double_t c[3]={covar[2],0.,covar[5]}; - Double_t chi2C=trackInnerC->GetPredictedChi2(p,c); - if (chi2C>kVeryBig) return kFALSE; - - if(!trackInnerC->Update(p,c)) return kFALSE; - - return kTRUE; -} - - -//_____________________________________________________________________________ -TParticle *AlidNdPtTrackDumpTask::GetMother(TParticle *const particle, AliStack *const stack) -{ - if(!particle) return NULL; - if(!stack) return NULL; - - Int_t motherLabel = TMath::Abs(particle->GetMother(0)); - TParticle* mother = NULL; - mother = stack->Particle(motherLabel); - -return mother; -} - -//_____________________________________________________________________________ -Bool_t AlidNdPtTrackDumpTask::IsFromConversion(const Int_t label, AliStack *const stack) -{ - Bool_t isFromConversion = kFALSE; - - if(stack) { - TParticle* particle = stack->Particle(label); - - if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) - { - Int_t mech = particle->GetUniqueID(); // production mechanism - Bool_t isPrim = stack->IsPhysicalPrimary(label); - - Int_t motherLabel = TMath::Abs(particle->GetMother(0)); - TParticle* mother = stack->Particle(motherLabel); - if(mother) { - Int_t motherPdg = mother->GetPdgCode(); - - if(!isPrim && mech==5 && motherPdg==kGamma) { - isFromConversion=kTRUE; - } - } - } - } - - return isFromConversion; -} - -//_____________________________________________________________________________ -Bool_t AlidNdPtTrackDumpTask::IsFromMaterial(const Int_t label, AliStack *const stack) -{ - Bool_t isFromMaterial = kFALSE; - - if(stack) { - TParticle* particle = stack->Particle(label); - - if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) - { - Int_t mech = particle->GetUniqueID(); // production mechanism - Bool_t isPrim = stack->IsPhysicalPrimary(label); - - Int_t motherLabel = TMath::Abs(particle->GetMother(0)); - TParticle* mother = stack->Particle(motherLabel); - if(mother) { - if(!isPrim && mech==13) { - isFromMaterial=kTRUE; - } - } - } - } - - return isFromMaterial; -} - -//_____________________________________________________________________________ -Bool_t AlidNdPtTrackDumpTask::IsFromStrangeness(const Int_t label, AliStack *const stack) -{ - Bool_t isFromStrangeness = kFALSE; - - if(stack) { - TParticle* particle = stack->Particle(label); - - if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) - { - Int_t mech = particle->GetUniqueID(); // production mechanism - Bool_t isPrim = stack->IsPhysicalPrimary(label); - - Int_t motherLabel = TMath::Abs(particle->GetMother(0)); - TParticle* mother = stack->Particle(motherLabel); - if(mother) { - Int_t motherPdg = mother->GetPdgCode(); - - // K+-, lambda, antilambda, K0s decays - if(!isPrim && mech==4 && - (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short)) - { - isFromStrangeness = kTRUE; - } - } - } - } - - return isFromStrangeness; -} - - -//_____________________________________________________________________________ -void AlidNdPtTrackDumpTask::FinishTaskOutput() -{ - // - // Called one at the end - // locally on working node - // - - // must be deleted to store trees - if(fTreeSRedirector) delete fTreeSRedirector; fTreeSRedirector=0; - - // open temporary file and copy trees to the ouptut container - - TChain* chain = 0; - /* - TTree* tree1 = 0; - TTree* tree2 = 0; - TTree* tree3 = 0; - TTree* tree4 = 0; - TTree* tree5 = 0; - TTree* tree6 = 0; - */ - // - chain = new TChain("highPt"); - if(chain) { - chain->Add("jotwinow_Temp_Trees.root"); - fTree1 = chain->CopyTree("1"); - delete chain; chain=0; - } - if(fTree1) fTree1->Print(); - - // - chain = new TChain("V0s"); - if(chain) { - chain->Add("jotwinow_Temp_Trees.root"); - fTree2 = chain->CopyTree("1"); - delete chain; chain=0; - } - if(fTree2) fTree2->Print(); - - // - chain = new TChain("dEdx"); - if(chain) { - chain->Add("jotwinow_Temp_Trees.root"); - fTree3 = chain->CopyTree("1"); - delete chain; chain=0; - } - if(fTree3) fTree3->Print(); - - // - chain = new TChain("Laser"); - if(chain) { - chain->Add("jotwinow_Temp_Trees.root"); - fTree4 = chain->CopyTree("1"); - delete chain; chain=0; - } - if(fTree4) fTree4->Print(); - - // - chain = new TChain("MCEffTree"); - if(chain) { - chain->Add("jotwinow_Temp_Trees.root"); - fTree5 = chain->CopyTree("1"); - delete chain; chain=0; - } - if(fTree5) fTree5->Print(); - - // - chain = new TChain("CosmicPairs"); - if(chain) { - chain->Add("jotwinow_Temp_Trees.root"); - fTree6 = chain->CopyTree("1"); - delete chain; chain=0; - } - if(fTree6) fTree6->Print(); - - - OpenFile(1); - - // Post output data. - PostData(1, fTree1); - PostData(2, fTree2); - PostData(3, fTree3); - PostData(4, fTree4); - PostData(5, fTree5); - PostData(6, fTree6); -} - -//_____________________________________________________________________________ -void AlidNdPtTrackDumpTask::Terminate(Option_t *) -{ - // Called one at the end - /* - fOutputSummary = dynamic_cast (GetOutputData(1)); - if(fOutputSummary) delete fOutputSummary; fOutputSummary=0; - TChain* chain = new TChain("highPt"); - if(!chain) return; - chain->Add("jotwinow_HighPt_TrackAndV0_Trees.root"); - TTree *tree = chain->CopyTree("1"); - if (chain) { delete chain; chain=0; } - if(!tree) return; - tree->Print(); - fOutputSummary = tree; - - if (!fOutputSummary) { - Printf("ERROR: AlidNdPtTrackDumpTask::Terminate(): Output data not avaiable %p \n", GetOutputData(1)); - return; - } - */ -} +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +#include "iostream" + +#include +#include + +#include "TChain.h" +#include "TTreeStream.h" +#include "TTree.h" +#include "TH1F.h" +#include "TCanvas.h" +#include "TList.h" +#include "TObjArray.h" +#include "TFile.h" +#include "TMatrixD.h" +#include "TRandom3.h" + +#include "AliHeader.h" +#include "AliGenEventHeader.h" +#include "AliInputEventHandler.h" +#include "AliStack.h" +#include "AliTrackReference.h" + +#include "AliPhysicsSelection.h" +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliESDEvent.h" +#include "AliESDfriend.h" +#include "AliMCEvent.h" +#include "AliESDInputHandler.h" +#include "AliESDVertex.h" +#include "AliTracker.h" +#include "AliGeomManager.h" + +#include "AliCentrality.h" +#include "AliESDVZERO.h" +#include "AliMultiplicity.h" + +#include "AliESDtrackCuts.h" +#include "AliMCEventHandler.h" +#include "AlidNdPt.h" +#include "AlidNdPtEventCuts.h" +#include "AlidNdPtAcceptanceCuts.h" + +#include "AlidNdPtTrackDumpTask.h" +#include "AliKFParticle.h" +#include "AliESDv0.h" + +using namespace std; + +ClassImp(AlidNdPtTrackDumpTask) + +//_____________________________________________________________________________ +AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name) + : AliAnalysisTaskSE(name) + , fESD(0) + , fMC(0) + , fESDfriend(0) + , fOutput(0) + , fPitList(0) + , fUseMCInfo(kFALSE) + , fUseESDfriends(kFALSE) + , fdNdPtEventCuts(0) + , fdNdPtAcceptanceCuts(0) + , fdNdPtRecAcceptanceCuts(0) + , fEsdTrackCuts(0) + , fTrigger(AliTriggerAnalysis::kMB1) + , fAnalysisMode(AlidNdPtHelper::kTPC) + , fTreeSRedirector(0) + , fCentralityEstimator(0) + , fLowPtTrackDownscaligF(0) + , fLowPtV0DownscaligF(0) + , fProcessAll(kFALSE) + , fProcessCosmics(kFALSE) + , fTree1(0) + , fTree2(0) + , fTree3(0) + , fTree4(0) + , fTree5(0) + , fTree6(0) +{ + // Constructor + + // Define input and output slots here + DefineOutput(1, TTree::Class()); + DefineOutput(2, TTree::Class()); + DefineOutput(3, TTree::Class()); + DefineOutput(4, TTree::Class()); + DefineOutput(5, TTree::Class()); + DefineOutput(6, TTree::Class()); +} + +//_____________________________________________________________________________ +AlidNdPtTrackDumpTask::~AlidNdPtTrackDumpTask() +{ + if(fOutput) delete fOutput; fOutput =0; + if(fTreeSRedirector) delete fTreeSRedirector; fTreeSRedirector =0; + + if(fdNdPtEventCuts) delete fdNdPtEventCuts; fdNdPtEventCuts=NULL; + if(fdNdPtAcceptanceCuts) delete fdNdPtAcceptanceCuts; fdNdPtAcceptanceCuts=NULL; + if(fdNdPtRecAcceptanceCuts) delete fdNdPtRecAcceptanceCuts; fdNdPtRecAcceptanceCuts=NULL; + if(fEsdTrackCuts) delete fEsdTrackCuts; fEsdTrackCuts=NULL; + + +} + +//____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::Notify() +{ + static Int_t count = 0; + count++; + TTree *chain = (TChain*)GetInputData(0); + if(chain) + { + Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName()); + } + +return kTRUE; +} + +//_____________________________________________________________________________ +void AlidNdPtTrackDumpTask::UserCreateOutputObjects() +{ + // Create histograms + // Called once + fOutput = new TList; + fOutput->SetOwner(); + + // + // create temporary file for output tree + fTreeSRedirector = new TTreeSRedirector("jotwinow_Temp_Trees.root"); + + fTree1 = new TTree; + fTree2 = new TTree; + fTree3 = new TTree; + fTree4 = new TTree; + fTree5 = new TTree; + fTree6 = new TTree; + + fOutput->Add(fTree1); + fOutput->Add(fTree2); + fOutput->Add(fTree3); + fOutput->Add(fTree4); + fOutput->Add(fTree5); + fOutput->Add(fTree6); + + PostData(1, fTree1); + PostData(2, fTree2); + PostData(3, fTree3); + PostData(4, fTree4); + PostData(5, fTree5); + PostData(6, fTree6); + +} + +//_____________________________________________________________________________ +void AlidNdPtTrackDumpTask::UserExec(Option_t *) +{ + // + // Called for each event + // + + // ESD event + fESD = (AliESDEvent*) (InputEvent()); + if (!fESD) { + Printf("ERROR: ESD event not available"); + return; + } + + // MC event + if(fUseMCInfo) { + fMC = MCEvent(); + if (!fMC) { + Printf("ERROR: MC event not available"); + return; + } + } + + if(fUseESDfriends) { + fESDfriend = static_cast(fESD->FindListObject("AliESDfriend")); + if(!fESDfriend) { + Printf("ERROR: ESD friends not available"); + } + } + + // + if(fProcessAll) { + ProcessAll(fESD,fMC,fESDfriend); // all track stages and MC + } + else { + Process(fESD,fMC,fESDfriend); // only global and TPC tracks + } + + // + ProcessV0(fESD,fMC,fESDfriend); + ProcessLaser(fESD,fMC,fESDfriend); + ProcessdEdx(fESD,fMC,fESDfriend); + + if (fProcessCosmics) { ProcessCosmics(fESD); } + if(IsUseMCInfo()) { ProcessMCEff(fESD,fMC,fESDfriend); } +} + +//_____________________________________________________________________________ +void AlidNdPtTrackDumpTask::ProcessCosmics(AliESDEvent *const event) +{ + // + // Select real events with high-pT tracks + // + if(!event) { + AliDebug(AliLog::kError, "event not available"); + return; + } + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + // get file name + TTree *chain = (TChain*)GetInputData(0); + if(!chain) { + Printf("ERROR: Could not receive input chain"); + return; + } + TObjString fileName(chain->GetCurrentFile()->GetName()); + + + // check for cosmic pairs + // + // find cosmic pairs trigger by random trigger + // + // + AliESDVertex *vertexSPD = (AliESDVertex *)event->GetPrimaryVertexSPD(); + AliESDVertex *vertexTPC = (AliESDVertex *)event->GetPrimaryVertexTPC(); + const Double_t kMinPt=0.8; + const Double_t kMinPtMax=0.8; + const Double_t kMinNcl=50; + const Double_t kMaxDelta[5]={2,600,0.02,0.02,0.1}; + Int_t ntracks=event->GetNumberOfTracks(); + // Float_t dcaTPC[2]={0,0}; + // Float_t covTPC[3]={0,0,0}; + + UInt_t specie = event->GetEventSpecie(); // skip laser events + if (specie==AliRecoParam::kCalib) return; + + + + for (Int_t itrack0=0;itrack0GetTrack(itrack0); + if (!track0) continue; + if (!track0->IsOn(AliESDtrack::kTPCrefit)) continue; + + if (TMath::Abs(AliTracker::GetBz())>1 && track0->Pt() < kMinPt) continue; + if (track0->Pt() < kMinPt) continue; + if (track0->GetTPCncls() < kMinNcl) continue; + if (TMath::Abs(track0->GetY())GetKinkIndex(0)>0) continue; + const Double_t * par0=track0->GetParameter(); //track param at rhe DCA + //rm primaries + // + //track0->GetImpactParametersTPC(dcaTPC,covTPC); + //if (TMath::Abs(dcaTPC[0])GetInnerParam(); + for (Int_t itrack1=itrack0+1;itrack1GetTrack(itrack1); + if (!track1) continue; + if (!track1->IsOn(AliESDtrack::kTPCrefit)) continue; + if (track1->GetKinkIndex(0)>0) continue; + if ((TMath::Abs(AliTracker::GetBz())>1) && (track1->Pt() < kMinPt)) continue; + if (track1->Pt() < kMinPt) continue; + if (track1->GetTPCncls()1 && TMath::Max(track1->Pt(), track0->Pt())GetY())GetImpactParametersTPC(dcaTPC,covTPC); + // if (TMath::Abs(dcaTPC[0])GetParameter(); //track param at rhe DCA + // + Bool_t isPair=kTRUE; + for (Int_t ipar=0; ipar<5; ipar++){ + if (ipar==4&&TMath::Abs(AliTracker::GetBz())<1) continue; // 1/pt not defined for B field off + if (TMath::Abs(TMath::Abs(par0[ipar])-TMath::Abs(par1[ipar]))>kMaxDelta[ipar]) isPair=kFALSE; + } + if (!isPair) continue; + if (TMath::Abs(TMath::Abs(track0->GetAlpha()-track1->GetAlpha())-TMath::Pi())>kMaxDelta[2]) isPair=kFALSE; + //delta with correct sign + /* + TCut cut0="abs(t1.fP[0]+t0.fP[0])<2" + TCut cut3="abs(t1.fP[3]+t0.fP[3])<0.02" + TCut cut4="abs(t1.fP[4]+t0.fP[4])<0.2" + */ + if (TMath::Abs(par0[0]+par1[0])>kMaxDelta[0]) isPair=kFALSE; //delta y opposite sign + if (TMath::Abs(par0[3]+par1[3])>kMaxDelta[3]) isPair=kFALSE; //delta tgl opposite sign + if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Abs(par0[4]+par1[4])>kMaxDelta[4]) isPair=kFALSE; //delta 1/pt opposite sign + if (!isPair) continue; + TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName()); + Int_t eventNumber = event->GetEventNumberInFile(); + //Bool_t hasFriend = kFALSE; + //Bool_t hasITS=(track0->GetNcls(0)+track1->GetNcls(0)>4); + //printf("DUMPHPTCosmic:%s|%f|%d|%d|%d\n",filename.Data(),(TMath::Min(track0->Pt(),track1->Pt())), eventNumber,hasFriend,hasITS); + // const AliExternalTrackParam * trackIn1 = track1->GetInnerParam(); + // + // + Int_t ntracksSPD = vertexSPD->GetNContributors(); + Int_t ntracksTPC = vertexTPC->GetNContributors(); + Int_t runNumber = event->GetRunNumber(); + Int_t timeStamp = event->GetTimeStamp(); + ULong64_t triggerMask = event->GetTriggerMask(); + Float_t magField = event->GetMagneticField(); + TObjString triggerClass = event->GetFiredTriggerClasses().Data(); + + // + // Dump to the tree + // vertex + // TPC-ITS tracks + // + if(!fTreeSRedirector) return; + (*fTreeSRedirector)<<"CosmicPairs"<< + "fileName.="<<&fileName<< // file name + "runNumber="<GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + // get file name + TTree *chain = (TChain*)GetInputData(0); + if(!chain) { + Printf("ERROR: Could not receive input chain"); + return; + } + TObjString fileName(chain->GetCurrentFile()->GetName()); + + // trigger + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // centrality determination + Float_t centralityF = -1; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + + Int_t multMCTrueTracks = 0; + if(IsUseMCInfo()) + { + // + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + // multipliticy of all MC primary tracks + // in Zv, pt and eta ranges) + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); + + } // end bUseMC + + // get reconstructed vertex + //const AliESDVertex* vtxESD = 0; + AliESDVertex* vtxESD = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d, status %d, vz %f \n",isEventOK, isEventTriggered, vtxESD->GetStatus(), vtxESD->GetZv()); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + + // check event cuts + if(isEventOK && isEventTriggered) + { + + // + // get IR information + // + AliESDHeader *esdHeader = 0; + esdHeader = esdEvent->GetHeader(); + if(!esdHeader) return; + //Int_t ir1 = esdHeader->GetTriggerIREntries(); //all ir-s + //Int_t ir2 = esdHeader->GetTriggerIREntries(-1,1); // int2 set, 180 ms time interval + + // Use when Peter commit the changes in the header + Int_t ir1 = 0; + Int_t ir2 = 0; + + // + Double_t vert[3] = {0}; + vert[0] = vtxESD->GetXv(); + vert[1] = vtxESD->GetYv(); + vert[2] = vtxESD->GetZv(); + Int_t mult = vtxESD->GetNContributors(); + Double_t bz = esdEvent->GetMagneticField(); + Double_t runNumber = esdEvent->GetRunNumber(); + Double_t evtTimeStamp = esdEvent->GetTimeStamp(); + Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); + + // high pT tracks + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) + { + AliESDtrack *track = esdEvent->GetTrack(iTrack); + if(!track) continue; + if(track->Charge()==0) continue; + if(!esdTrackCuts->AcceptTrack(track)) continue; + if(!accCuts->AcceptTrack(track)) continue; + + // downscale low-pT tracks + Double_t scalempt= TMath::Min(track->Pt(),10.); + Double_t downscaleF = gRandom->Rndm(); + downscaleF *= fLowPtTrackDownscaligF; + if(TMath::Exp(2*scalempt)GetTPCInnerParam()); + if (!tpcInner) continue; + // transform to the track reference frame + Bool_t isOK = kFALSE; + isOK = tpcInner->Rotate(track->GetAlpha()); + isOK = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); + if(!isOK) continue; + + // Dump to the tree + // vertex + // TPC-ITS tracks + // + if(!fTreeSRedirector) return; + (*fTreeSRedirector)<<"highPt"<< + "fileName.="<<&fileName<< + "runNumber="<GetCurrentFile()->GetName()); + + // laser events + const AliESDHeader* esdHeader = esdEvent->GetHeader(); + if(esdHeader && esdHeader->GetEventSpecie()==AliRecoParam::kCalib) + { + Int_t countLaserTracks = 0; + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) + { + AliESDtrack *track = esdEvent->GetTrack(iTrack); + if(!track) continue; + + if(track->GetTPCInnerParam()) countLaserTracks++; + } + + if(countLaserTracks > 100) + { + Double_t runNumber = esdEvent->GetRunNumber(); + Double_t evtTimeStamp = esdEvent->GetTimeStamp(); + Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); + Double_t bz = esdEvent->GetMagneticField(); + + if(!fTreeSRedirector) return; + (*fTreeSRedirector)<<"Laser"<< + "fileName.="<<&fileName<< + "runNumber="<GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + // get file name + TTree *chain = (TChain*)GetInputData(0); + if(!chain) { + Printf("ERROR: Could not receive input chain"); + return; + } + TObjString fileName(chain->GetCurrentFile()->GetName()); + + // trigger + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // centrality determination + Float_t centralityF = -1; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + + Int_t multMCTrueTracks = 0; + if(IsUseMCInfo()) + { + // + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + // multipliticy of all MC primary tracks + // in Zv, pt and eta ranges) + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); + + } // end bUseMC + + // get reconstructed vertex + //const AliESDVertex* vtxESD = 0; + AliESDVertex* vtxESD = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + + // check event cuts + if(isEventOK && isEventTriggered) + { + // + // get IR information + // + AliESDHeader *esdHeader = 0; + esdHeader = esdEvent->GetHeader(); + if(!esdHeader) return; + //Int_t ir1 = esdHeader->GetTriggerIREntries(); //all ir-s + //Int_t ir2 = esdHeader->GetTriggerIREntries(-1,1); // int2 set, 180 ms time interval + // + Int_t ir1 = 0; + Int_t ir2 = 0; + + // + Double_t vert[3] = {0}; + vert[0] = vtxESD->GetXv(); + vert[1] = vtxESD->GetYv(); + vert[2] = vtxESD->GetZv(); + Int_t mult = vtxESD->GetNContributors(); + Double_t bz = esdEvent->GetMagneticField(); + Double_t runNumber = esdEvent->GetRunNumber(); + Double_t evtTimeStamp = esdEvent->GetTimeStamp(); + Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); + + // high pT tracks + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) + { + AliESDtrack *track = esdEvent->GetTrack(iTrack); + if(!track) continue; + if(track->Charge()==0) continue; + if(!esdTrackCuts->AcceptTrack(track)) continue; + if(!accCuts->AcceptTrack(track)) continue; + + // downscale low-pT tracks + Double_t scalempt= TMath::Min(track->Pt(),10.); + Double_t downscaleF = gRandom->Rndm(); + downscaleF *= fLowPtTrackDownscaligF; + if(TMath::Exp(2*scalempt)GetXYZ(x); + Double_t b[3]; AliTracker::GetBxByBz(x,b); + + // + // Transform TPC inner params to track reference frame + // + Bool_t isOKtpcInner = kFALSE; + AliExternalTrackParam * tpcInner = (AliExternalTrackParam *)(track->GetTPCInnerParam()); + if (tpcInner) { + // transform to the track reference frame + isOKtpcInner = tpcInner->Rotate(track->GetAlpha()); + isOKtpcInner = tpcInner->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); + } + + // + // Constrain TPC inner to vertex + // clone TPCinner has to be deleted + // + Bool_t isOKtpcInnerC = kFALSE; + AliExternalTrackParam * tpcInnerC = new AliExternalTrackParam(*(track->GetTPCInnerParam())); + if (tpcInnerC) { + isOKtpcInnerC = ConstrainTPCInner(tpcInnerC,vtxESD,b); + isOKtpcInnerC = tpcInnerC->Rotate(track->GetAlpha()); + isOKtpcInnerC = tpcInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); + } + + // + // Constrain TPC refitted tracks at inner TPC wall (InnerParams) to vertex + // Clone track InnerParams has to be deleted + // + Bool_t isOKtrackInnerC = kFALSE; + AliExternalTrackParam * trackInnerC = new AliExternalTrackParam(*(track->GetInnerParam())); + if (trackInnerC) { + isOKtrackInnerC = ConstrainTrackInner(trackInnerC,vtxESD,track->GetMass(),b); + isOKtrackInnerC = trackInnerC->Rotate(track->GetAlpha()); + isOKtrackInnerC = trackInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField()); + } + + // + // calculate chi2 between vi and vj vectors + // with covi and covj covariance matrices + // chi2ij = (vi-vj)^(T)*(covi+covj)^(-1)*(vi-vj) + // + TMatrixD deltaT(5,1), deltaTtrackC(5,1); + TMatrixD delta(1,5), deltatrackC(1,5); + TMatrixD covarM(5,5), covarMtrackC(5,5); + TMatrixD chi2(1,1); + TMatrixD chi2trackC(1,1); + + if(isOKtpcInnerC && isOKtrackInnerC) + { + for (Int_t ipar=0; ipar<5; ipar++) { + deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; + delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; + + deltaTtrackC(ipar,0)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; + deltatrackC(0,ipar)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar]; + + for (Int_t jpar=0; jpar<5; jpar++) { + Int_t index=track->GetIndex(ipar,jpar); + covarM(ipar,jpar)=track->GetCovariance()[index]+tpcInnerC->GetCovariance()[index]; + covarMtrackC(ipar,jpar)=track->GetCovariance()[index]+trackInnerC->GetCovariance()[index]; + } + } + + // chi2 distance TPC constrained and TPC+ITS + TMatrixD covarMInv = covarM.Invert(); + TMatrixD mat2 = covarMInv*deltaT; + chi2 = delta*mat2; + //chi2.Print(); + + // chi2 distance TPC refitted constrained and TPC+ITS + TMatrixD covarMInvtrackC = covarMtrackC.Invert(); + TMatrixD mat2trackC = covarMInvtrackC*deltaTtrackC; + chi2trackC = deltatrackC*mat2trackC; + //chi2trackC.Print(); + } + + + // + // Propagate ITSout to TPC inner wall + // and calculate chi2 distance to track (InnerParams) + // + const Double_t kTPCRadius=85; + const Double_t kStep=3; + + // clone track InnerParams has to be deleted + Bool_t isOKtrackInnerC2 = kFALSE; + AliExternalTrackParam *trackInnerC2 = new AliExternalTrackParam(*(track->GetInnerParam())); + if (trackInnerC2) { + isOKtrackInnerC2 = AliTracker::PropagateTrackToBxByBz(trackInnerC2,kTPCRadius,track->GetMass(),kStep,kFALSE); + } + + Bool_t isOKouterITSc = kFALSE; + AliExternalTrackParam *outerITSc = NULL; + TMatrixD chi2OuterITS(1,1); + + if(esdFriend && esdFriend->TestSkipBit()==kFALSE) + { + // propagate ITSout to TPC inner wall + AliESDfriendTrack *friendTrack = esdFriend->GetTrack(iTrack); + + if(friendTrack) + { + outerITSc = new AliExternalTrackParam(*friendTrack->GetITSOut()); + if(outerITSc) + { + isOKouterITSc = AliTracker::PropagateTrackToBxByBz(outerITSc,kTPCRadius,track->GetMass(),kStep,kFALSE); + isOKouterITSc = outerITSc->Rotate(trackInnerC2->GetAlpha()); + isOKouterITSc = outerITSc->PropagateTo(trackInnerC2->GetX(),esdEvent->GetMagneticField()); + + // + // calculate chi2 between outerITS and innerParams + // cov without z-coordinate at the moment + // + TMatrixD deltaTouterITS(4,1); + TMatrixD deltaouterITS(1,4); + TMatrixD covarMouterITS(4,4); + + if(isOKtrackInnerC2 && isOKouterITSc) { + Int_t kipar = 0; + Int_t kjpar = 0; + for (Int_t ipar=0; ipar<5; ipar++) { + if(ipar!=1) { + deltaTouterITS(kipar,0)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar]; + deltaouterITS(0,kipar)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar]; + } + + kjpar=0; + for (Int_t jpar=0; jpar<5; jpar++) { + Int_t index=outerITSc->GetIndex(ipar,jpar); + if(ipar !=1 || jpar!=1) { + covarMouterITS(kipar,kjpar)=outerITSc->GetCovariance()[index]+trackInnerC2->GetCovariance()[index]; + } + if(jpar!=1) kjpar++; + } + if(ipar!=1) kipar++; + } + + // chi2 distance ITSout and InnerParams + TMatrixD covarMInvouterITS = covarMouterITS.Invert(); + TMatrixD mat2outerITS = covarMInvouterITS*deltaTouterITS; + chi2OuterITS = deltaouterITS*mat2outerITS; + //chi2OuterITS.Print(); + } + } + } + } + + // + // MC info + // + TParticle *particle=NULL, *particleTPC=NULL, *particleITS=NULL; + TParticle *particleMother=NULL, *particleMotherTPC=NULL, *particleMotherITS=NULL; + Int_t mech=-1, mechTPC=-1, mechITS=-1; + Bool_t isPrim=kFALSE, isPrimTPC=kFALSE, isPrimITS=kFALSE; + Bool_t isFromStrangess=kFALSE, isFromStrangessTPC=kFALSE, isFromStrangessITS=kFALSE; + Bool_t isFromConversion=kFALSE, isFromConversionTPC=kFALSE, isFromConversionITS=kFALSE; + Bool_t isFromMaterial=kFALSE, isFromMaterialTPC=kFALSE, isFromMaterialITS=kFALSE; + + AliTrackReference *refTPCIn = NULL; + AliTrackReference *refITS = NULL; + + Bool_t isOKtrackInnerC3 = kFALSE; + AliExternalTrackParam *trackInnerC3 = new AliExternalTrackParam(*(track->GetInnerParam())); + + if(IsUseMCInfo()) + { + if(!stack) return; + + // + // global track + // + Int_t label = TMath::Abs(track->GetLabel()); + particle = stack->Particle(label); + if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0.) + { + particleMother = GetMother(particle,stack); + mech = particle->GetUniqueID(); + isPrim = stack->IsPhysicalPrimary(label); + isFromStrangess = IsFromStrangeness(label,stack); + isFromConversion = IsFromConversion(label,stack); + isFromMaterial = IsFromMaterial(label,stack); + } + + // + // TPC track + // + Int_t labelTPC = TMath::Abs(track->GetTPCLabel()); + particleTPC = stack->Particle(labelTPC); + if(particleTPC && particleTPC->GetPDG() && particleTPC->GetPDG()->Charge()!=0.) + { + particleMotherTPC = GetMother(particleTPC,stack); + mechTPC = particleTPC->GetUniqueID(); + isPrimTPC = stack->IsPhysicalPrimary(labelTPC); + isFromStrangessTPC = IsFromStrangeness(labelTPC,stack); + isFromConversionTPC = IsFromConversion(labelTPC,stack); + isFromMaterialTPC = IsFromMaterial(labelTPC,stack); + } + + // + // store first track reference + // for TPC track + // + TParticle *part=0; + TClonesArray *trefs=0; + Int_t status = mcEvent->GetParticleAndTR(track->GetTPCLabel(), part, trefs); + + if(status>0 && part && trefs && part->GetPDG() && part->GetPDG()->Charge()!=0.) + { + Int_t nTrackRef = trefs->GetEntries(); + //printf("nTrackRef %d \n",nTrackRef); + + Int_t countITS = 0; + for (Int_t iref = 0; iref < nTrackRef; iref++) + { + AliTrackReference *ref = (AliTrackReference *)trefs->At(iref); + + // Ref. in the middle ITS + if(ref && ref->DetectorId()==AliTrackReference::kITS) + { + if(!refITS && countITS==2) { + refITS = ref; + //printf("refITS %p \n",refITS); + } + countITS++; + } + + // TPC + if(ref && ref->DetectorId()==AliTrackReference::kTPC) + { + if(!refTPCIn) { + refTPCIn = ref; + //printf("refTPCIn %p \n",refTPCIn); + //break; + } + } + } + + // transform inner params to TrackRef + // reference frame + if(refTPCIn && trackInnerC3) + { + Double_t kRefPhi = TMath::ATan2(refTPCIn->Y(),refTPCIn->X()); + isOKtrackInnerC3 = trackInnerC3->Rotate(kRefPhi); + isOKtrackInnerC3 = AliTracker::PropagateTrackToBxByBz(trackInnerC3,refTPCIn->R(),track->GetMass(),kStep,kFALSE); + } + } + + // + // ITS track + // + Int_t labelITS = TMath::Abs(track->GetITSLabel()); + particleITS = stack->Particle(labelITS); + if(particleITS && particleITS->GetPDG() && particleITS->GetPDG()->Charge()!=0.) + { + particleMotherITS = GetMother(particleITS,stack); + mechITS = particleITS->GetUniqueID(); + isPrimITS = stack->IsPhysicalPrimary(labelITS); + isFromStrangessITS = IsFromStrangeness(labelITS,stack); + isFromConversionITS = IsFromConversion(labelITS,stack); + isFromMaterialITS = IsFromMaterial(labelITS,stack); + } + } + + // + Bool_t dumpToTree=kFALSE; + + if(isOKtpcInnerC && isOKtrackInnerC) dumpToTree = kTRUE; + if(fUseESDfriends && isOKtrackInnerC2 && isOKouterITSc) dumpToTree = kTRUE; + if(fUseMCInfo && isOKtrackInnerC3) dumpToTree = kTRUE; + + // + if(fTreeSRedirector && dumpToTree) + { + (*fTreeSRedirector)<<"highPt"<< + "fileName.="<<&fileName<< + "runNumber="<GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + // get file name + TTree *chain = (TChain*)GetInputData(0); + if(!chain) { + Printf("ERROR: Could not receive input chain"); + return; + } + TObjString fileName(chain->GetCurrentFile()->GetName()); + + // trigger + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // centrality determination + Float_t centralityF = -1; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); + + // use MC information + AliHeader* header = 0; + AliGenEventHeader* genHeader = 0; + AliStack* stack = 0; + TArrayF vtxMC(3); + + Int_t multMCTrueTracks = 0; + if(IsUseMCInfo()) + { + // + if(!mcEvent) { + AliDebug(AliLog::kError, "mcEvent not available"); + return; + } + // get MC event header + header = mcEvent->Header(); + if (!header) { + AliDebug(AliLog::kError, "Header not available"); + return; + } + // MC particle stack + stack = mcEvent->Stack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + return; + } + + // get MC vertex + genHeader = header->GenEventHeader(); + if (!genHeader) { + AliDebug(AliLog::kError, "Could not retrieve genHeader from Header"); + return; + } + genHeader->PrimaryVertex(vtxMC); + + // multipliticy of all MC primary tracks + // in Zv, pt and eta ranges) + multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts); + + } // end bUseMC + + // get reconstructed vertex + //const AliESDVertex* vtxESD = 0; + AliESDVertex* vtxESD = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + // check event cuts + if(isEventOK && isEventTriggered) + { + if(IsUseMCInfo()) + { + if(!stack) return; + + // + // MC info + // + TParticle *particle=NULL; + TParticle *particleMother=NULL; + Int_t mech=-1; + + // reco event info + Double_t vert[3] = {0}; + vert[0] = vtxESD->GetXv(); + vert[1] = vtxESD->GetYv(); + vert[2] = vtxESD->GetZv(); + Int_t mult = vtxESD->GetNContributors(); + Double_t bz = esdEvent->GetMagneticField(); + Double_t runNumber = esdEvent->GetRunNumber(); + Double_t evtTimeStamp = esdEvent->GetTimeStamp(); + Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); + + // loop over MC stack + for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) + { + particle = stack->Particle(iMc); + if (!particle) + continue; + + // only charged particles + if(!particle->GetPDG()) continue; + Double_t charge = particle->GetPDG()->Charge()/3.; + if (TMath::Abs(charge) < 0.001) + continue; + + // only primary particles + Bool_t prim = stack->IsPhysicalPrimary(iMc); + if(!prim) continue; + + // downscale low-pT particles + Double_t scalempt= TMath::Min(particle->Pt(),10.); + Double_t downscaleF = gRandom->Rndm(); + downscaleF *= fLowPtTrackDownscaligF; + if(TMath::Exp(2*scalempt)AcceptTrack(particle)) continue; + + // check if particle reconstructed + Bool_t isRec = kFALSE; + Int_t trackIndex = -1; + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) + { + + AliESDtrack *track = esdEvent->GetTrack(iTrack); + if(!track) continue; + if(track->Charge()==0) continue; + if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) + { + Int_t label = TMath::Abs(track->GetLabel()); + if(label == iMc) { + isRec = kTRUE; + trackIndex = iTrack; + break; + } + } + } + + // Store information in the output tree + AliESDtrack *recTrack = NULL; + if(trackIndex>-1) { + recTrack = esdEvent->GetTrack(trackIndex); + } else { + recTrack = new AliESDtrack(); + } + + particleMother = GetMother(particle,stack); + mech = particle->GetUniqueID(); + + //MC particle track length + Double_t tpcTrackLength = 0.; + AliMCParticle *mcParticle = (AliMCParticle*) mcEvent->GetTrack(iMc); + if(mcParticle) { + Int_t counter; + tpcTrackLength = mcParticle->GetTPCTrackLength(bz,0.05,counter,3.0); + } + + + // + if(fTreeSRedirector) { + (*fTreeSRedirector)<<"MCEffTree"<< + "fileName.="<<&fileName<< + "runNumber="< 1 + // + if (track->GetTPCNcls() < 60) return kFALSE; + Double_t mom = track->GetInnerParam()->GetP(); + if (mom < 0.2) return kFALSE; // protection against unexpected behavior of Aleph parameterization + Float_t dca[2], bCov[3]; + track->GetImpactParameters(dca,bCov); + // + + Double_t triggerDeDx = 4*AliExternalTrackParam::BetheBlochAleph((mom*2)/(0.938*3),1.0288,31.9806,5.04114e-11,2.13096,2.38541); + + if (track->GetTPCsignal() > triggerDeDx && track->GetTPCsignal()<1000 && TMath::Abs(dca[0])<3.) return kTRUE; + + return kFALSE; +} + +//_____________________________________________________________________________ +void AlidNdPtTrackDumpTask::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const /*esdFriend*/) +{ + // + // Select real events with V0 (K0s and Lambda) high-pT candidates + // + if(!esdEvent) { + AliDebug(AliLog::kError, "esdEvent not available"); + return; + } + + // get selection cuts + AlidNdPtEventCuts *evtCuts = GetEventCuts(); + AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); + AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); + + if(!evtCuts || !accCuts || !esdTrackCuts) { + AliDebug(AliLog::kError, "cuts not available"); + return; + } + + // trigger selection + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + // get file name + TTree *chain = (TChain*)GetInputData(0); + if(!chain) { + Printf("ERROR: Could not receive input chain"); + return; + } + TObjString fileName(chain->GetCurrentFile()->GetName()); + + // trigger + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // centrality determination + Float_t centralityF = -1; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); + + + // get reconstructed vertex + //const AliESDVertex* vtxESD = 0; + AliESDVertex* vtxESD = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + // check event cuts + if(isEventOK && isEventTriggered) { + // + // Dump the pt downscaled V0 into the tree + // + Int_t ntracks = esdEvent->GetNumberOfTracks(); + Int_t nV0s = esdEvent->GetNumberOfV0s(); + Int_t run = esdEvent->GetRunNumber(); + Int_t time= esdEvent->GetTimeStamp(); + Int_t evNr=esdEvent->GetEventNumberInFile(); + Double_t bz = esdEvent->GetMagneticField(); + + + for (Int_t iv0=0; iv0GetV0(iv0); + if (!v0) continue; + AliESDtrack * track0 = esdEvent->GetTrack(v0->GetIndex(0)); + AliESDtrack * track1 = esdEvent->GetTrack(v0->GetIndex(1)); + if (!track0) continue; + if (!track1) continue; + if (track0->GetSign()<0) { + track1 = esdEvent->GetTrack(v0->GetIndex(0)); + track0 = esdEvent->GetTrack(v0->GetIndex(1)); + } + // + Bool_t isDownscaled = IsV0Downscaled(v0); + if (isDownscaled) continue; + AliKFParticle kfparticle; // + Int_t type=GetKFParticle(v0,esdEvent,kfparticle); + if (type==0) continue; + + if(!fTreeSRedirector) return; + (*fTreeSRedirector)<<"V0s"<< + "isDownscaled="<GetCurrentFile()->GetName()); + + // trigger + Bool_t isEventTriggered = kTRUE; + AliPhysicsSelection *physicsSelection = NULL; + AliTriggerAnalysis* triggerAnalysis = NULL; + + // + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // get reconstructed vertex + AliESDVertex* vtxESD = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + + // check event cuts + if(isEventOK && isEventTriggered) + { + Double_t vert[3] = {0}; + vert[0] = vtxESD->GetXv(); + vert[1] = vtxESD->GetYv(); + vert[2] = vtxESD->GetZv(); + Int_t mult = vtxESD->GetNContributors(); + Double_t bz = esdEvent->GetMagneticField(); + Double_t runNumber = esdEvent->GetRunNumber(); + Double_t evtTimeStamp = esdEvent->GetTimeStamp(); + Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); + + // large dEdx + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) + { + AliESDtrack *track = esdEvent->GetTrack(iTrack); + if(!track) continue; + if(track->Charge()==0) continue; + if(!esdTrackCuts->AcceptTrack(track)) continue; + if(!accCuts->AcceptTrack(track)) continue; + + if(!IsHighDeDxParticle(track)) continue; + + if(!fTreeSRedirector) return; + (*fTreeSRedirector)<<"dEdx"<< + "fileName.="<<&fileName<< + "runNumber="<GetOnFlyStatus() ==kFALSE) return 0; + // + // 1.) track cut + // + AliESDtrack * track0 = event->GetTrack(v0->GetIndex(0)); + AliESDtrack * track1 = event->GetTrack(v0->GetIndex(1)); + /* + TCut cutD="abs(track0.fD/sqrt(track0.fCdd))>2&&abs(track1.fD/sqrt(track1.fCdd))>2"; + TCut cutTheta="abs(track0.fP[3])<1&&abs(track1.fP[3])<1"; + TCut cutNcl="track0.GetTPCClusterInfo(2,1)>100&&track1.GetTPCClusterInfo(2,1)>100"; + */ + if (TMath::Abs(track0->GetTgl())>1) return 0; + if (TMath::Abs(track1->GetTgl())>1) return 0; + if ((track0->GetTPCClusterInfo(2,1))<100) return 0; + if ((track1->GetTPCClusterInfo(2,1))<100) return 0; + //if ((track0->GetITSclusters(0))<2) return 0; + //if ((track1->GetITSclusters(0))<2) return 0; + Float_t pos0[2]={0}, cov0[3]={0}; + Float_t pos1[2]={0}, cov1[3]={0}; + track0->GetImpactParameters(pos0,cov0); + track0->GetImpactParameters(pos1,cov1); + // + if (TMath::Abs(pos0[0])GetKFInfo(2,2,2); + if (chi2KF>25) return 0; + // + // 4.) Rough mass cut - 0.200 GeV + // + static Double_t masses[2]={-1}; + if (masses[0]<0){ + masses[0] = TDatabasePDG::Instance()->GetParticle("K_S0")->Mass(); + masses[1] = TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass(); + } + Double_t mass00= v0->GetEffMass(0,0); + Double_t mass22= v0->GetEffMass(2,2); + Double_t mass42= v0->GetEffMass(4,2); + Double_t mass24= v0->GetEffMass(2,4); + Bool_t massOK=kFALSE; + Int_t type=0; + Int_t ptype=0; + Double_t dmass=1; + Int_t p1=0, p2=0; + if (TMath::Abs(mass00-0)GetParamP(); + const AliExternalTrackParam *paramN = v0->GetParamN(); + if (paramP->GetSign()<0){ + paramP=v0->GetParamP(); + paramN=v0->GetParamN(); + } + //Double_t *pparam1 = (Double_t*)paramP->GetParameter(); + //Double_t *pparam2 = (Double_t*)paramN->GetParameter(); + // + AliKFParticle kfp1( *paramP, spdg[p1] ); + AliKFParticle kfp2( *paramN, -1 *spdg[p2] ); + AliKFParticle V0KF; + (V0KF)+=kfp1; + (V0KF)+=kfp2; + kfparticle=V0KF; + // + // Pointing angle + // + Double_t errPhi = V0KF.GetErrPhi(); + Double_t pointAngle= TMath::ACos(v0->GetV0CosineOfPointingAngle()); + if (pointAngle/errPhi>10) return 0; + // + return ptype; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::IsV0Downscaled(AliESDv0 *const v0) +{ + // + // Downscale randomly low pt V0 + // + //return kFALSE; + Double_t maxPt= TMath::Max(v0->GetParamP()->Pt(), v0->GetParamN()->Pt()); + Double_t scalempt= TMath::Min(maxPt,10.); + Double_t downscaleF = gRandom->Rndm(); + downscaleF *= fLowPtV0DownscaligF; + + //printf("V0 TMath::Exp(2*scalempt) %e, downscaleF %e \n",TMath::Exp(2*scalempt), downscaleF); + if (TMath::Exp(2*scalempt)Exp(1); + Bool_t isDownscaled =TMath::Exp(rnd)<100*gRandom->Rndm(); + his1->Fill(rnd); + if (!isDownscaled) his2->Fill(rnd); + }} + + */ + +} + + + +//_____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3]) +{ + // Constrain TPC inner params constrained + // + if(!tpcInnerC) return kFALSE; + if(!vtx) return kFALSE; + + Double_t dz[2],cov[3]; + //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex(); + //if(!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE; + //if(!tpcInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE; + if(!tpcInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE; + + + Double_t covar[6]; vtx->GetCovMatrix(covar); + Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]}; + Double_t c[3]={covar[2],0.,covar[5]}; + Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c); + if (chi2C>kVeryBig) return kFALSE; + + if(!tpcInnerC->Update(p,c)) return kFALSE; + + return kTRUE; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3]) +{ + // Constrain TPC inner params constrained + // + if(!trackInnerC) return kFALSE; + if(!vtx) return kFALSE; + + const Double_t kRadius = 2.8; + const Double_t kMaxStep = 1.0; + + Double_t dz[2],cov[3]; + + //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex(); + //if(!trackInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE; + //if(!trackInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE; + + if(!AliTracker::PropagateTrackToBxByBz(trackInnerC,kRadius,mass,kMaxStep,kFALSE)) return kFALSE; + if(!trackInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE; + + // + Double_t covar[6]; vtx->GetCovMatrix(covar); + Double_t p[2]={trackInnerC->GetParameter()[0]-dz[0],trackInnerC->GetParameter()[1]-dz[1]}; + Double_t c[3]={covar[2],0.,covar[5]}; + Double_t chi2C=trackInnerC->GetPredictedChi2(p,c); + if (chi2C>kVeryBig) return kFALSE; + + if(!trackInnerC->Update(p,c)) return kFALSE; + + return kTRUE; +} + + +//_____________________________________________________________________________ +TParticle *AlidNdPtTrackDumpTask::GetMother(TParticle *const particle, AliStack *const stack) +{ + if(!particle) return NULL; + if(!stack) return NULL; + + Int_t motherLabel = TMath::Abs(particle->GetMother(0)); + TParticle* mother = NULL; + mother = stack->Particle(motherLabel); + +return mother; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::IsFromConversion(const Int_t label, AliStack *const stack) +{ + Bool_t isFromConversion = kFALSE; + + if(stack) { + TParticle* particle = stack->Particle(label); + + if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) + { + Int_t mech = particle->GetUniqueID(); // production mechanism + Bool_t isPrim = stack->IsPhysicalPrimary(label); + + Int_t motherLabel = TMath::Abs(particle->GetMother(0)); + TParticle* mother = stack->Particle(motherLabel); + if(mother) { + Int_t motherPdg = mother->GetPdgCode(); + + if(!isPrim && mech==5 && motherPdg==kGamma) { + isFromConversion=kTRUE; + } + } + } + } + + return isFromConversion; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::IsFromMaterial(const Int_t label, AliStack *const stack) +{ + Bool_t isFromMaterial = kFALSE; + + if(stack) { + TParticle* particle = stack->Particle(label); + + if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) + { + Int_t mech = particle->GetUniqueID(); // production mechanism + Bool_t isPrim = stack->IsPhysicalPrimary(label); + + Int_t motherLabel = TMath::Abs(particle->GetMother(0)); + TParticle* mother = stack->Particle(motherLabel); + if(mother) { + if(!isPrim && mech==13) { + isFromMaterial=kTRUE; + } + } + } + } + + return isFromMaterial; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::IsFromStrangeness(const Int_t label, AliStack *const stack) +{ + Bool_t isFromStrangeness = kFALSE; + + if(stack) { + TParticle* particle = stack->Particle(label); + + if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0) + { + Int_t mech = particle->GetUniqueID(); // production mechanism + Bool_t isPrim = stack->IsPhysicalPrimary(label); + + Int_t motherLabel = TMath::Abs(particle->GetMother(0)); + TParticle* mother = stack->Particle(motherLabel); + if(mother) { + Int_t motherPdg = mother->GetPdgCode(); + + // K+-, lambda, antilambda, K0s decays + if(!isPrim && mech==4 && + (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short)) + { + isFromStrangeness = kTRUE; + } + } + } + } + + return isFromStrangeness; +} + + +//_____________________________________________________________________________ +void AlidNdPtTrackDumpTask::FinishTaskOutput() +{ + // + // Called one at the end + // locally on working node + // + + // must be deleted to store trees + if(fTreeSRedirector) delete fTreeSRedirector; fTreeSRedirector=0; + + // open temporary file and copy trees to the ouptut container + + TChain* chain = 0; + /* + TTree* tree1 = 0; + TTree* tree2 = 0; + TTree* tree3 = 0; + TTree* tree4 = 0; + TTree* tree5 = 0; + TTree* tree6 = 0; + */ + // + chain = new TChain("highPt"); + if(chain) { + chain->Add("jotwinow_Temp_Trees.root"); + fTree1 = chain->CopyTree("1"); + delete chain; chain=0; + } + if(fTree1) fTree1->Print(); + + // + chain = new TChain("V0s"); + if(chain) { + chain->Add("jotwinow_Temp_Trees.root"); + fTree2 = chain->CopyTree("1"); + delete chain; chain=0; + } + if(fTree2) fTree2->Print(); + + // + chain = new TChain("dEdx"); + if(chain) { + chain->Add("jotwinow_Temp_Trees.root"); + fTree3 = chain->CopyTree("1"); + delete chain; chain=0; + } + if(fTree3) fTree3->Print(); + + // + chain = new TChain("Laser"); + if(chain) { + chain->Add("jotwinow_Temp_Trees.root"); + fTree4 = chain->CopyTree("1"); + delete chain; chain=0; + } + if(fTree4) fTree4->Print(); + + // + chain = new TChain("MCEffTree"); + if(chain) { + chain->Add("jotwinow_Temp_Trees.root"); + fTree5 = chain->CopyTree("1"); + delete chain; chain=0; + } + if(fTree5) fTree5->Print(); + + // + chain = new TChain("CosmicPairs"); + if(chain) { + chain->Add("jotwinow_Temp_Trees.root"); + fTree6 = chain->CopyTree("1"); + delete chain; chain=0; + } + if(fTree6) fTree6->Print(); + + + OpenFile(1); + + // Post output data. + PostData(1, fTree1); + PostData(2, fTree2); + PostData(3, fTree3); + PostData(4, fTree4); + PostData(5, fTree5); + PostData(6, fTree6); +} + +//_____________________________________________________________________________ +void AlidNdPtTrackDumpTask::Terminate(Option_t *) +{ + // Called one at the end + /* + fOutputSummary = dynamic_cast (GetOutputData(1)); + if(fOutputSummary) delete fOutputSummary; fOutputSummary=0; + TChain* chain = new TChain("highPt"); + if(!chain) return; + chain->Add("jotwinow_HighPt_TrackAndV0_Trees.root"); + TTree *tree = chain->CopyTree("1"); + if (chain) { delete chain; chain=0; } + if(!tree) return; + tree->Print(); + fOutputSummary = tree; + + if (!fOutputSummary) { + Printf("ERROR: AlidNdPtTrackDumpTask::Terminate(): Output data not avaiable %p \n", GetOutputData(1)); + return; + } + */ +} diff --git a/PWGLF/SPECTRA/IdentifiedHighPt/grid/ListDirectories.h b/PWGLF/SPECTRA/IdentifiedHighPt/grid/ListDirectories.h index 3c12b5a66b0..154393f694f 100644 --- a/PWGLF/SPECTRA/IdentifiedHighPt/grid/ListDirectories.h +++ b/PWGLF/SPECTRA/IdentifiedHighPt/grid/ListDirectories.h @@ -1,51 +1,51 @@ -//--------------------------------------------------------- -// PARAMETERS TO BE SET BY HAND - - -const Int_t runs[]={ - - //117222, - - 117220, - 117116, - 117112, - 117109, - 117099, - 117092, - 117086, - 117077, - 117065, - 117063, - 117060, - 117059, - 117054, - 117053, - 117052, - 117050, - 117048, - 116645, - 116643, - 116574, - 116571, - 116562, - 116403, - 116402, - 116288, - 116102, - 115414, - 115401, - 115393, - 115193, - 115186, - 114931, - -1 - -}; - - -TString location="/alice/cern.ch/user/a/aortizve/work_HighPtDeDx_lhc10b_Data_ESDs/output"; -// TString output="ESDs/pass1_4plus/QA"; -//TString output="output"; - -//const char * localPath = "./cache_41/"; -const char * localPath = "./files/"; +//--------------------------------------------------------- +// PARAMETERS TO BE SET BY HAND + + +const Int_t runs[]={ + + //117222, + + 117220, + 117116, + 117112, + 117109, + 117099, + 117092, + 117086, + 117077, + 117065, + 117063, + 117060, + 117059, + 117054, + 117053, + 117052, + 117050, + 117048, + 116645, + 116643, + 116574, + 116571, + 116562, + 116403, + 116402, + 116288, + 116102, + 115414, + 115401, + 115393, + 115193, + 115186, + 114931, + -1 + +}; + + +TString location="/alice/cern.ch/user/a/aortizve/work_HighPtDeDx_lhc10b_Data_ESDs/output"; +// TString output="ESDs/pass1_4plus/QA"; +//TString output="output"; + +//const char * localPath = "./cache_41/"; +const char * localPath = "./files/"; diff --git a/PWGLF/SPECTRA/Kinks/macros/AddTaskKink.C b/PWGLF/SPECTRA/Kinks/macros/AddTaskKink.C index 3cf78442ef6..1737174b1ff 100644 --- a/PWGLF/SPECTRA/Kinks/macros/AddTaskKink.C +++ b/PWGLF/SPECTRA/Kinks/macros/AddTaskKink.C @@ -1,49 +1,49 @@ -AliAnalysisKinkESDat* AddTaskKink(TString lCustomName="") -{ - //pp settings - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) - { - ::Error("AddKinkTask", "No analysis manager to connect to."); - return NULL; - } - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) - { - ::Error("AddKinkTask", "This task requires an input event handler"); - return NULL; - } - - TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - if(type.Contains("AOD")) - { - ::Error("AddKinkTask", "This task requires to run on ESD"); - return NULL; - } - - //TString outputFileName = AliAnalysisManager::GetCommonFileName(); - //outputFileName += ":PWG2SpectraTOF"; - - AliAnalysisKinkESDat* task = new AliAnalysisKinkESDat("AliAnalysisKinkESDat"); - - //task->SetMC("kFALSE"); // 26/11/12 - -task->SetMulCut(0,1002); - mgr->AddTask(task); - - //Attach input - AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); -// mgr->ConnectInput(task,0,mgr->GetCommonInputContainer()); - mgr->ConnectInput(task,0,cinput); - - TString lContainerName="PWGLFKinks"; - lContainerName.Append(lCustomName); - AliAnalysisDataContainer *coutput1= mgr->CreateContainer(lContainerName.Data(),TList::Class(), AliAnalysisManager::kOutputContainer,"AnalysisResults.root"); - mgr->ConnectOutput(task, 1, coutput1); - - - return task; - -} - +AliAnalysisKinkESDat* AddTaskKink(TString lCustomName="") +{ + //pp settings + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) + { + ::Error("AddKinkTask", "No analysis manager to connect to."); + return NULL; + } + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) + { + ::Error("AddKinkTask", "This task requires an input event handler"); + return NULL; + } + + TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + if(type.Contains("AOD")) + { + ::Error("AddKinkTask", "This task requires to run on ESD"); + return NULL; + } + + //TString outputFileName = AliAnalysisManager::GetCommonFileName(); + //outputFileName += ":PWG2SpectraTOF"; + + AliAnalysisKinkESDat* task = new AliAnalysisKinkESDat("AliAnalysisKinkESDat"); + + //task->SetMC("kFALSE"); // 26/11/12 + +task->SetMulCut(0,1002); + mgr->AddTask(task); + + //Attach input + AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); +// mgr->ConnectInput(task,0,mgr->GetCommonInputContainer()); + mgr->ConnectInput(task,0,cinput); + + TString lContainerName="PWGLFKinks"; + lContainerName.Append(lCustomName); + AliAnalysisDataContainer *coutput1= mgr->CreateContainer(lContainerName.Data(),TList::Class(), AliAnalysisManager::kOutputContainer,"AnalysisResults.root"); + mgr->ConnectOutput(task, 1, coutput1); + + + return task; + +} + diff --git a/PWGLF/SPECTRA/Kinks/macros/AddTaskKinkMC.C b/PWGLF/SPECTRA/Kinks/macros/AddTaskKinkMC.C index 665652b4e5b..123603cde79 100644 --- a/PWGLF/SPECTRA/Kinks/macros/AddTaskKinkMC.C +++ b/PWGLF/SPECTRA/Kinks/macros/AddTaskKinkMC.C @@ -1,49 +1,49 @@ -AliAnalysisKinkESDMC* AddTaskKinkMC(TString lCustomName="") -{ - //pp settings - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) - { - ::Error("AddKinkTask", "No analysis manager to connect to."); - return NULL; - } - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) - { - ::Error("AddKinkTask", "This task requires an input event handler"); - return NULL; - } - - TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - if(type.Contains("AOD")) - { - ::Error("AddKinkTask", "This task requires to run on ESD"); - return NULL; - } - - //TString outputFileName = AliAnalysisManager::GetCommonFileName(); - //outputFileName += ":PWG2SpectraTOF"; - - AliAnalysisKinkESDMC* task = new AliAnalysisKinkESDMC("AliAnalysisKinkESDMC"); - - //task->SetMC("kFALSE"); // 26/11/12 - -task->SetMulCut(0,1002); - mgr->AddTask(task); - - //Attach input - AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); -// mgr->ConnectInput(task,0,mgr->GetCommonInputContainer()); - mgr->ConnectInput(task,0,cinput); - - TString lContainerName="PWGLFKinksMC"; - lContainerName.Append(lCustomName); - AliAnalysisDataContainer *coutput1= mgr->CreateContainer(lContainerName.Data(),TList::Class(), AliAnalysisManager::kOutputContainer,"AnalysisResultsMC.root"); - mgr->ConnectOutput(task, 1, coutput1); - - - return task; - -} - +AliAnalysisKinkESDMC* AddTaskKinkMC(TString lCustomName="") +{ + //pp settings + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) + { + ::Error("AddKinkTask", "No analysis manager to connect to."); + return NULL; + } + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) + { + ::Error("AddKinkTask", "This task requires an input event handler"); + return NULL; + } + + TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + if(type.Contains("AOD")) + { + ::Error("AddKinkTask", "This task requires to run on ESD"); + return NULL; + } + + //TString outputFileName = AliAnalysisManager::GetCommonFileName(); + //outputFileName += ":PWG2SpectraTOF"; + + AliAnalysisKinkESDMC* task = new AliAnalysisKinkESDMC("AliAnalysisKinkESDMC"); + + //task->SetMC("kFALSE"); // 26/11/12 + +task->SetMulCut(0,1002); + mgr->AddTask(task); + + //Attach input + AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); +// mgr->ConnectInput(task,0,mgr->GetCommonInputContainer()); + mgr->ConnectInput(task,0,cinput); + + TString lContainerName="PWGLFKinksMC"; + lContainerName.Append(lCustomName); + AliAnalysisDataContainer *coutput1= mgr->CreateContainer(lContainerName.Data(),TList::Class(), AliAnalysisManager::kOutputContainer,"AnalysisResultsMC.root"); + mgr->ConnectOutput(task, 1, coutput1); + + + return task; + +} + diff --git a/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.cxx b/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.cxx index e95ba295f49..1a06e14fbda 100644 --- a/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.cxx +++ b/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.cxx @@ -1,472 +1,472 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -//============================================================================== -// AliHMPIDAnalysysTask - Class representing a basic analysis tool of HMPID data -// A set of histograms is created. -//============================================================================== -// -// By means of AliHMPIDAnalysisTask.C macro it is possible to use this class -// to perform the analysis on local data, on data on alien using local machine -// and on CAF. - -#ifndef AliHMPIDAnalysisTASK_CXX -#define AliHMPIDAnalysisTASK_CXX - - -#include "TH1.h" -#include "TH2.h" -#include "TFile.h" -#include "TCanvas.h" -#include "TGraphErrors.h" -#include "AliPIDResponse.h" -#include "AliPID.h" -#include "AliVEvent.h" -#include "AliVParticle.h" -#include "AliVTrack.h" -#include "AliESDtrackCuts.h" -#include "AliAnalysisFilter.h" -#include "AliAnalysisManager.h" -#include "AliESDInputHandler.h" -#include "AliMCEventHandler.h" -#include "AliMCEvent.h" -#include "AliESDtrack.h" -#include "AliPID.h" -#include "AliLog.h" -#include "AliHMPIDAnalysisTask.h" - -ClassImp(AliHMPIDAnalysisTask) - -//__________________________________________________________________________ -AliHMPIDAnalysisTask::AliHMPIDAnalysisTask() : - fESD(0x0),fMC(0x0),fUseMC(kTRUE), - fHmpHistList(0x0), - fHmpNevents(0x0), - fZvertex(0x0), - fPIDResponse(0x0), - fTrackCuts(0x0), - fTrackFilter(0x0), - fTree(0x0) -{ - // - //Default ctor - // - for (Int_t i=0; i<69; i++) fVar[i]=0; -} - -//___________________________________________________________________________ -AliHMPIDAnalysisTask::AliHMPIDAnalysisTask(const Char_t* name) : - AliAnalysisTaskSE(name), - fESD(0x0), fMC(0x0), fUseMC(kTRUE), - fHmpHistList(0x0), - fHmpNevents(0x0), - fZvertex(0x0), - fPIDResponse(0x0), - fTrackCuts(0x0), - fTrackFilter(0x0), - fTree(0x0) -{ - // - // Constructor. Initialization of Inputs and Outputs - // - for (Int_t i=0; i<69; i++) fVar[i]=0; - - DefineOutput(1,TList::Class()); - DefineOutput(2,TTree::Class()); -} - -//___________________________________________________________________________ -AliHMPIDAnalysisTask& AliHMPIDAnalysisTask::operator=(const AliHMPIDAnalysisTask& c) -{ - // - // Assignment operator - // - if (this!=&c) { - AliAnalysisTaskSE::operator=(c); - fESD = c.fESD; - fMC = c.fMC; - fUseMC = c.fUseMC; - fHmpHistList = c.fHmpHistList; - fHmpNevents = c.fHmpNevents; - fZvertex = c.fZvertex; - fPIDResponse = c.fPIDResponse; - fTrackCuts = c.fTrackCuts; - fTrackFilter = c.fTrackFilter; - fTree = c.fTree; - for (Int_t i=0; i<69; i++) fVar[i]=c.fVar[i]; - } - return *this; -} - -//___________________________________________________________________________ -AliHMPIDAnalysisTask::AliHMPIDAnalysisTask(const AliHMPIDAnalysisTask& c) : - AliAnalysisTaskSE(c), - fESD(c.fESD),fMC(c.fMC),fUseMC(c.fUseMC), - fHmpHistList(c.fHmpHistList), - fHmpNevents(c.fHmpNevents), - fZvertex(c.fZvertex), - fPIDResponse(c.fPIDResponse), - fTrackCuts(c.fTrackCuts), - fTrackFilter(c.fTrackFilter), - fTree(c.fTree) -{ - // - // Copy Constructor - // - for (Int_t i=0; i<69; i++) fVar[i]=c.fVar[i]; -} - -//___________________________________________________________________________ -AliHMPIDAnalysisTask::~AliHMPIDAnalysisTask() { - // - //destructor - // - Info("~AliHMPIDAnalysisTask","Calling Destructor"); - if (fHmpHistList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fHmpHistList; -} - -//___________________________________________________________________________ -void AliHMPIDAnalysisTask::ConnectInputData(Option_t *) -{ - // Connect ESD here - - AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - if (!esdH) { - AliDebug(2,Form("ERROR: Could not get ESDInputHandler")); - } else - fESD = esdH->GetEvent(); - fPIDResponse = esdH->GetPIDResponse(); - - if (fUseMC){ - // Connect MC - AliMCEventHandler *mcH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); - if (!mcH) { - AliDebug(2,Form("ERROR: Could not get MCEventHandler")); - fUseMC = kFALSE; - } else - fMC = mcH->MCEvent(); - if (!fMC) AliDebug(2,Form("ERROR: Could not get MCEvent")); - } - - fTrackCuts = new AliESDtrackCuts("fTrackCuts", "Standard"); - fTrackCuts->SetAcceptKinkDaughters(kFALSE); - fTrackCuts->SetMinNClustersTPC(80); - fTrackCuts->SetMaxChi2PerClusterTPC(4); - fTrackCuts->SetMaxDCAToVertexXY(3); - fTrackCuts->SetMaxDCAToVertexZ(3); - fTrackCuts->SetRequireTPCRefit(kTRUE); - fTrackCuts->SetRequireITSRefit(kTRUE); - fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); - - fTrackFilter = new AliAnalysisFilter("trackFilter"); - fTrackFilter->AddCuts(fTrackCuts); - -} -//*************************************************************************************************************************************************************************** -void AliHMPIDAnalysisTask::UserExec(Option_t *) -{ - - fHmpNevents->Fill(0); - - const AliESDVertex *vertex = fESD->GetPrimaryVertexTracks(); - - if(!vertex || !vertex->GetStatus() || vertex->GetNContributors()<1) { - - // SPD vertex - vertex = fESD->GetPrimaryVertexSPD(); - if(!vertex) { - PostData(1,fHmpHistList); - PostData(2,fTree); - return; - } - if(!vertex->GetStatus()){ - PostData(1,fHmpHistList); - PostData(2,fTree); - return; - } - if(vertex->GetNContributors()<1){ - PostData(1,fHmpHistList); - PostData(2,fTree); - return; - } - } - - Double_t vtxPos[3] = {999, 999, 999}; - if(vertex) vertex->GetXYZ(vtxPos); - - fHmpNevents->Fill(1); - - fZvertex->Fill(vtxPos[2]); - - if(!fPIDResponse){ - PostData(1,fHmpHistList); - PostData(2,fTree); - return; - } - - Double_t probsHMP[5], probsTPC[5], probsTOF[5]; - Float_t nSigmasTOF[5], nSigmasTPC[5]; - - AliESDtrack *track = 0; - - Double_t ktol = 0.001; - Double_t r[3], rin[3], rout[3]; - - // - // Main loop function, executed on Event basis - // - for (Int_t iTrack = 0; iTrackGetNumberOfTracks(); iTrack++) { - - track = fESD->GetTrack(iTrack); - if(!track) continue; - - //if(!fTrackFilter->IsSelected(track)) continue; - //if(!track->GetStatus() || !AliESDtrack::kTOFout || !AliESDtrack::kTIME || track->GetTOFsignal()<12000 || track->GetTOFsignal()>200000 || track->GetIntegratedLength()<365) continue; - - track->GetXYZ(r); - track->GetInnerXYZ(rin); - track->GetOuterXYZ(rout); - - if(Equal(track->GetHMPIDsignal(),-20.,ktol)) continue; - if(track->GetHMPIDcluIdx() < 0) continue; - - Int_t q, nph; - Float_t x, y; - Float_t xpc, ypc, th, ph; - track->GetHMPIDmip(x,y,q,nph); - track->GetHMPIDtrk(xpc,ypc,th,ph); - - Int_t ITSrefit = track->IsOn(AliESDtrack::kITSrefit); - Int_t TPCrefit = track->IsOn(AliESDtrack::kTPCrefit); - - if(Equal(x,0.,ktol) && Equal(y,0.,ktol) && Equal(xpc,0.,ktol) && Equal(ypc,0.,ktol)) continue; - - Double_t pHmp[3] = {0}, pHmp3 = 0; - if (track->GetOuterHmpPxPyPz(pHmp)) pHmp3 = TMath::Sqrt(pHmp[0]*pHmp[0]+pHmp[1]*pHmp[1]+pHmp[2]*pHmp[2]); - - Float_t b[2]; - Float_t bCov[3]; - track->GetImpactParameters(b,bCov); - - track->GetHMPIDpid(probsHMP); - fPIDResponse->ComputeTOFProbability(track,AliPID::kSPECIES,probsTOF); - fPIDResponse->ComputeTPCProbability(track,AliPID::kSPECIES,probsTPC); - - for(Int_t ispecie=0; ispecieNumberOfSigmasTOF((AliVTrack*)track,(AliPID::EParticleType)ispecie); - nSigmasTPC[ispecie] = fPIDResponse->NumberOfSigmasTPC((AliVTrack*)track,(AliPID::EParticleType)ispecie); - } - - fVar[0] = track->GetHMPIDcluIdx()/1000000; - fVar[1] = pHmp3; - fVar[2] = (Float_t)track->P(); - fVar[3] = xpc; - fVar[4] = ypc; - fVar[5] = x; - fVar[6] = y; - fVar[7] = (Float_t)track->GetHMPIDsignal(); - fVar[8] = q; - fVar[9] = th; - fVar[10] = ph; - fVar[11] = (Float_t)track->GetSign(); - fVar[12] = (Float_t)nph; - fVar[13] = (Float_t)track->GetNcls(1); - fVar[14] = (Float_t)probsHMP[0]; - fVar[15] = (Float_t)probsHMP[1]; - fVar[16] = (Float_t)probsHMP[2]; - fVar[17] = (Float_t)probsHMP[3]; - fVar[18] = (Float_t)probsHMP[4]; - fVar[19] = (Float_t)track->GetTOFsignal(); - fVar[20] = (Float_t)track->GetKinkIndex(0); - fVar[21] = (Float_t)track->Xv(); - fVar[22] = (Float_t)track->Yv(); - fVar[23] = (Float_t)track->Zv(); - fVar[24] = (Float_t)track->GetTPCchi2(); - fVar[25] = b[0]; - fVar[26] = b[1]; - fVar[27] = track->GetHMPIDcluIdx()%1000000/1000; - fVar[28] = vtxPos[0]; - fVar[29] = vtxPos[1]; - fVar[30] = vtxPos[2]; - fVar[31] = (Float_t)ITSrefit; - fVar[32] = (Float_t)TPCrefit; - fVar[33] = (Float_t)track->Eta(); - fVar[34] = (Float_t)r[0]; - fVar[35] = (Float_t)r[1]; - fVar[36] = (Float_t)r[2]; - fVar[37] = (Float_t)rout[0]; - fVar[38] = (Float_t)rout[1]; - fVar[39] = (Float_t)rout[2]; - fVar[40] = (Float_t)pHmp[0]; - fVar[41] = (Float_t)pHmp[1]; - fVar[42] = (Float_t)pHmp[2]; - fVar[43] = (Float_t)track->Px(); - fVar[44] = (Float_t)track->Py(); - fVar[45] = (Float_t)track->Pz(); - fVar[46] = (Float_t)track->GetTPCClusterInfo(2,1); - fVar[47] = (Float_t)track->GetTPCNclsF(); - fVar[48] = nSigmasTOF[0]; - fVar[49] = nSigmasTOF[1]; - fVar[50] = nSigmasTOF[2]; - fVar[51] = nSigmasTOF[3]; - fVar[52] = nSigmasTOF[4]; - fVar[53] = nSigmasTPC[0]; - fVar[54] = nSigmasTPC[1]; - fVar[55] = nSigmasTPC[2]; - fVar[56] = nSigmasTPC[3]; - fVar[57] = nSigmasTPC[4]; - fVar[58] = (Float_t)probsTOF[0]; - fVar[59] = (Float_t)probsTOF[1]; - fVar[60] = (Float_t)probsTOF[2]; - fVar[61] = (Float_t)probsTOF[3]; - fVar[62] = (Float_t)probsTOF[4]; - fVar[63] = (Float_t)probsTPC[0]; - fVar[64] = (Float_t)probsTPC[1]; - fVar[65] = (Float_t)probsTPC[2]; - fVar[66] = (Float_t)probsTPC[3]; - fVar[67] = (Float_t)probsTPC[4]; - fVar[68] = (Float_t)track->GetHMPIDchi2(); - - fTree->Fill(); - - }//track loop - - /* PostData(0) is taken care of by AliAnalysisTaskSE */ - PostData(1,fHmpHistList); - PostData(2,fTree); -} -//___________________________________________________________________________ -void AliHMPIDAnalysisTask::Terminate(Option_t*) -{ - // The Terminate() function is the last function to be called during - // a query. It always runs on the client, it can be used to present - // the results graphically or save the results to file. - - Info("Terminate"," "); - - if (!fUseMC) return; - - fHmpHistList = dynamic_cast (GetOutputData(1)); - - if (!fHmpHistList) { - AliError("Histogram List is not available"); - return; - } - - - AliAnalysisTaskSE::Terminate(); - -} -//___________________________________________________________________________ -void AliHMPIDAnalysisTask::UserCreateOutputObjects() { - // - //HERE ONE CAN CREATE OUTPUT OBJECTS - //TO BE SET BEFORE THE EXECUTION OF THE TASK - // - - //slot #1 -// OpenFile(1); - fHmpHistList = new TList(); - fHmpHistList->SetOwner(); - - fHmpNevents = new TH1F("fHmpNevents","Number of events",2,0,2); - fHmpHistList->Add(fHmpNevents); - - fZvertex = new TH1F("fZvertex","Z primary vertex distribution",4000,-20,20); - fHmpHistList->Add(fZvertex); - -// OpenFile(2); - fTree = new TTree("Tree","Tree with data"); - fTree->Branch("Chamber",&fVar[0]); - fTree->Branch("pHmp3",&fVar[1]); - fTree->Branch("P",&fVar[2]); - fTree->Branch("Xpc",&fVar[3]); - fTree->Branch("Ypc",&fVar[4]); - fTree->Branch("X",&fVar[5]); - fTree->Branch("Y",&fVar[6]); - fTree->Branch("HMPIDsignal",&fVar[7]); - fTree->Branch("Charge",&fVar[8]); - fTree->Branch("Theta",&fVar[9]); - fTree->Branch("Phi",&fVar[10]); - fTree->Branch("Sign",&fVar[11]); - fTree->Branch("NumPhotons",&fVar[12]); - fTree->Branch("NumTPCclust",&fVar[13]); - fTree->Branch("ProbHMP0",&fVar[14]); - fTree->Branch("ProbHMP1",&fVar[15]); - fTree->Branch("ProbHMP2",&fVar[16]); - fTree->Branch("ProbHMP3",&fVar[17]); - fTree->Branch("ProbHMP4",&fVar[18]); - fTree->Branch("TOFsignal",&fVar[19]); - fTree->Branch("KinkIndex",&fVar[20]); - fTree->Branch("Xv",&fVar[21]); - fTree->Branch("Yv",&fVar[22]); - fTree->Branch("Zv",&fVar[23]); - fTree->Branch("TPCchi2",&fVar[24]); - fTree->Branch("b0",&fVar[25]); - fTree->Branch("b1",&fVar[26]); - fTree->Branch("ClustSize",&fVar[27]); - fTree->Branch("PrimVertexX",&fVar[28]); - fTree->Branch("PrimVertexY",&fVar[29]); - fTree->Branch("PrimVertexZ",&fVar[30]); - fTree->Branch("ITSrefit",&fVar[31]); - fTree->Branch("TPCrefit",&fVar[32]); - fTree->Branch("Eta",&fVar[33]); - fTree->Branch("xTrack",&fVar[34]); - fTree->Branch("yTrack",&fVar[35]); - fTree->Branch("zTrack",&fVar[36]); - fTree->Branch("xOuterTrack",&fVar[37]); - fTree->Branch("yOuterTrack",&fVar[38]); - fTree->Branch("zOuterTrack",&fVar[39]); - fTree->Branch("pHmpX",&fVar[40]); - fTree->Branch("pHmpY",&fVar[41]); - fTree->Branch("pHmpZ",&fVar[42]); - fTree->Branch("Px",&fVar[43]); - fTree->Branch("Py",&fVar[44]); - fTree->Branch("Pz",&fVar[45]); - fTree->Branch("nCrossedRowsTPC",&fVar[46]); - fTree->Branch("findableClustTPC",&fVar[47]); - fTree->Branch("NSigmasTOF0",&fVar[48]); - fTree->Branch("NSigmasTOF1",&fVar[49]); - fTree->Branch("NSigmasTOF2",&fVar[50]); - fTree->Branch("NSigmasTOF3",&fVar[51]); - fTree->Branch("NSigmasTOF4",&fVar[52]); - fTree->Branch("NSigmasTPC0",&fVar[53]); - fTree->Branch("NSigmasTPC1",&fVar[54]); - fTree->Branch("NSigmasTPC2",&fVar[55]); - fTree->Branch("NSigmasTPC3",&fVar[56]); - fTree->Branch("NSigmasTPC4",&fVar[57]); - fTree->Branch("ProbTOF0",&fVar[58]); - fTree->Branch("ProbTOF1",&fVar[59]); - fTree->Branch("ProbTOF2",&fVar[60]); - fTree->Branch("ProbTOF3",&fVar[61]); - fTree->Branch("ProbTOF4",&fVar[62]); - fTree->Branch("ProbTPC0",&fVar[63]); - fTree->Branch("ProbTPC1",&fVar[64]); - fTree->Branch("ProbTPC2",&fVar[65]); - fTree->Branch("ProbTPC3",&fVar[66]); - fTree->Branch("ProbTPC4",&fVar[67]); - fTree->Branch("HmpSigma",&fVar[68]); - - PostData(1,fHmpHistList); - PostData(2,fTree); -} - -//____________________________________________________________________________________________________________________________________ -Bool_t AliHMPIDAnalysisTask::Equal(Double_t x, Double_t y, Double_t tolerance) -{ - return abs(x - y) <= tolerance ; -} - -#endif +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +//============================================================================== +// AliHMPIDAnalysysTask - Class representing a basic analysis tool of HMPID data +// A set of histograms is created. +//============================================================================== +// +// By means of AliHMPIDAnalysisTask.C macro it is possible to use this class +// to perform the analysis on local data, on data on alien using local machine +// and on CAF. + +#ifndef AliHMPIDAnalysisTASK_CXX +#define AliHMPIDAnalysisTASK_CXX + + +#include "TH1.h" +#include "TH2.h" +#include "TFile.h" +#include "TCanvas.h" +#include "TGraphErrors.h" +#include "AliPIDResponse.h" +#include "AliPID.h" +#include "AliVEvent.h" +#include "AliVParticle.h" +#include "AliVTrack.h" +#include "AliESDtrackCuts.h" +#include "AliAnalysisFilter.h" +#include "AliAnalysisManager.h" +#include "AliESDInputHandler.h" +#include "AliMCEventHandler.h" +#include "AliMCEvent.h" +#include "AliESDtrack.h" +#include "AliPID.h" +#include "AliLog.h" +#include "AliHMPIDAnalysisTask.h" + +ClassImp(AliHMPIDAnalysisTask) + +//__________________________________________________________________________ +AliHMPIDAnalysisTask::AliHMPIDAnalysisTask() : + fESD(0x0),fMC(0x0),fUseMC(kTRUE), + fHmpHistList(0x0), + fHmpNevents(0x0), + fZvertex(0x0), + fPIDResponse(0x0), + fTrackCuts(0x0), + fTrackFilter(0x0), + fTree(0x0) +{ + // + //Default ctor + // + for (Int_t i=0; i<69; i++) fVar[i]=0; +} + +//___________________________________________________________________________ +AliHMPIDAnalysisTask::AliHMPIDAnalysisTask(const Char_t* name) : + AliAnalysisTaskSE(name), + fESD(0x0), fMC(0x0), fUseMC(kTRUE), + fHmpHistList(0x0), + fHmpNevents(0x0), + fZvertex(0x0), + fPIDResponse(0x0), + fTrackCuts(0x0), + fTrackFilter(0x0), + fTree(0x0) +{ + // + // Constructor. Initialization of Inputs and Outputs + // + for (Int_t i=0; i<69; i++) fVar[i]=0; + + DefineOutput(1,TList::Class()); + DefineOutput(2,TTree::Class()); +} + +//___________________________________________________________________________ +AliHMPIDAnalysisTask& AliHMPIDAnalysisTask::operator=(const AliHMPIDAnalysisTask& c) +{ + // + // Assignment operator + // + if (this!=&c) { + AliAnalysisTaskSE::operator=(c); + fESD = c.fESD; + fMC = c.fMC; + fUseMC = c.fUseMC; + fHmpHistList = c.fHmpHistList; + fHmpNevents = c.fHmpNevents; + fZvertex = c.fZvertex; + fPIDResponse = c.fPIDResponse; + fTrackCuts = c.fTrackCuts; + fTrackFilter = c.fTrackFilter; + fTree = c.fTree; + for (Int_t i=0; i<69; i++) fVar[i]=c.fVar[i]; + } + return *this; +} + +//___________________________________________________________________________ +AliHMPIDAnalysisTask::AliHMPIDAnalysisTask(const AliHMPIDAnalysisTask& c) : + AliAnalysisTaskSE(c), + fESD(c.fESD),fMC(c.fMC),fUseMC(c.fUseMC), + fHmpHistList(c.fHmpHistList), + fHmpNevents(c.fHmpNevents), + fZvertex(c.fZvertex), + fPIDResponse(c.fPIDResponse), + fTrackCuts(c.fTrackCuts), + fTrackFilter(c.fTrackFilter), + fTree(c.fTree) +{ + // + // Copy Constructor + // + for (Int_t i=0; i<69; i++) fVar[i]=c.fVar[i]; +} + +//___________________________________________________________________________ +AliHMPIDAnalysisTask::~AliHMPIDAnalysisTask() { + // + //destructor + // + Info("~AliHMPIDAnalysisTask","Calling Destructor"); + if (fHmpHistList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fHmpHistList; +} + +//___________________________________________________________________________ +void AliHMPIDAnalysisTask::ConnectInputData(Option_t *) +{ + // Connect ESD here + + AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!esdH) { + AliDebug(2,Form("ERROR: Could not get ESDInputHandler")); + } else + fESD = esdH->GetEvent(); + fPIDResponse = esdH->GetPIDResponse(); + + if (fUseMC){ + // Connect MC + AliMCEventHandler *mcH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); + if (!mcH) { + AliDebug(2,Form("ERROR: Could not get MCEventHandler")); + fUseMC = kFALSE; + } else + fMC = mcH->MCEvent(); + if (!fMC) AliDebug(2,Form("ERROR: Could not get MCEvent")); + } + + fTrackCuts = new AliESDtrackCuts("fTrackCuts", "Standard"); + fTrackCuts->SetAcceptKinkDaughters(kFALSE); + fTrackCuts->SetMinNClustersTPC(80); + fTrackCuts->SetMaxChi2PerClusterTPC(4); + fTrackCuts->SetMaxDCAToVertexXY(3); + fTrackCuts->SetMaxDCAToVertexZ(3); + fTrackCuts->SetRequireTPCRefit(kTRUE); + fTrackCuts->SetRequireITSRefit(kTRUE); + fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); + + fTrackFilter = new AliAnalysisFilter("trackFilter"); + fTrackFilter->AddCuts(fTrackCuts); + +} +//*************************************************************************************************************************************************************************** +void AliHMPIDAnalysisTask::UserExec(Option_t *) +{ + + fHmpNevents->Fill(0); + + const AliESDVertex *vertex = fESD->GetPrimaryVertexTracks(); + + if(!vertex || !vertex->GetStatus() || vertex->GetNContributors()<1) { + + // SPD vertex + vertex = fESD->GetPrimaryVertexSPD(); + if(!vertex) { + PostData(1,fHmpHistList); + PostData(2,fTree); + return; + } + if(!vertex->GetStatus()){ + PostData(1,fHmpHistList); + PostData(2,fTree); + return; + } + if(vertex->GetNContributors()<1){ + PostData(1,fHmpHistList); + PostData(2,fTree); + return; + } + } + + Double_t vtxPos[3] = {999, 999, 999}; + if(vertex) vertex->GetXYZ(vtxPos); + + fHmpNevents->Fill(1); + + fZvertex->Fill(vtxPos[2]); + + if(!fPIDResponse){ + PostData(1,fHmpHistList); + PostData(2,fTree); + return; + } + + Double_t probsHMP[5], probsTPC[5], probsTOF[5]; + Float_t nSigmasTOF[5], nSigmasTPC[5]; + + AliESDtrack *track = 0; + + Double_t ktol = 0.001; + Double_t r[3], rin[3], rout[3]; + + // + // Main loop function, executed on Event basis + // + for (Int_t iTrack = 0; iTrackGetNumberOfTracks(); iTrack++) { + + track = fESD->GetTrack(iTrack); + if(!track) continue; + + //if(!fTrackFilter->IsSelected(track)) continue; + //if(!track->GetStatus() || !AliESDtrack::kTOFout || !AliESDtrack::kTIME || track->GetTOFsignal()<12000 || track->GetTOFsignal()>200000 || track->GetIntegratedLength()<365) continue; + + track->GetXYZ(r); + track->GetInnerXYZ(rin); + track->GetOuterXYZ(rout); + + if(Equal(track->GetHMPIDsignal(),-20.,ktol)) continue; + if(track->GetHMPIDcluIdx() < 0) continue; + + Int_t q, nph; + Float_t x, y; + Float_t xpc, ypc, th, ph; + track->GetHMPIDmip(x,y,q,nph); + track->GetHMPIDtrk(xpc,ypc,th,ph); + + Int_t ITSrefit = track->IsOn(AliESDtrack::kITSrefit); + Int_t TPCrefit = track->IsOn(AliESDtrack::kTPCrefit); + + if(Equal(x,0.,ktol) && Equal(y,0.,ktol) && Equal(xpc,0.,ktol) && Equal(ypc,0.,ktol)) continue; + + Double_t pHmp[3] = {0}, pHmp3 = 0; + if (track->GetOuterHmpPxPyPz(pHmp)) pHmp3 = TMath::Sqrt(pHmp[0]*pHmp[0]+pHmp[1]*pHmp[1]+pHmp[2]*pHmp[2]); + + Float_t b[2]; + Float_t bCov[3]; + track->GetImpactParameters(b,bCov); + + track->GetHMPIDpid(probsHMP); + fPIDResponse->ComputeTOFProbability(track,AliPID::kSPECIES,probsTOF); + fPIDResponse->ComputeTPCProbability(track,AliPID::kSPECIES,probsTPC); + + for(Int_t ispecie=0; ispecieNumberOfSigmasTOF((AliVTrack*)track,(AliPID::EParticleType)ispecie); + nSigmasTPC[ispecie] = fPIDResponse->NumberOfSigmasTPC((AliVTrack*)track,(AliPID::EParticleType)ispecie); + } + + fVar[0] = track->GetHMPIDcluIdx()/1000000; + fVar[1] = pHmp3; + fVar[2] = (Float_t)track->P(); + fVar[3] = xpc; + fVar[4] = ypc; + fVar[5] = x; + fVar[6] = y; + fVar[7] = (Float_t)track->GetHMPIDsignal(); + fVar[8] = q; + fVar[9] = th; + fVar[10] = ph; + fVar[11] = (Float_t)track->GetSign(); + fVar[12] = (Float_t)nph; + fVar[13] = (Float_t)track->GetNcls(1); + fVar[14] = (Float_t)probsHMP[0]; + fVar[15] = (Float_t)probsHMP[1]; + fVar[16] = (Float_t)probsHMP[2]; + fVar[17] = (Float_t)probsHMP[3]; + fVar[18] = (Float_t)probsHMP[4]; + fVar[19] = (Float_t)track->GetTOFsignal(); + fVar[20] = (Float_t)track->GetKinkIndex(0); + fVar[21] = (Float_t)track->Xv(); + fVar[22] = (Float_t)track->Yv(); + fVar[23] = (Float_t)track->Zv(); + fVar[24] = (Float_t)track->GetTPCchi2(); + fVar[25] = b[0]; + fVar[26] = b[1]; + fVar[27] = track->GetHMPIDcluIdx()%1000000/1000; + fVar[28] = vtxPos[0]; + fVar[29] = vtxPos[1]; + fVar[30] = vtxPos[2]; + fVar[31] = (Float_t)ITSrefit; + fVar[32] = (Float_t)TPCrefit; + fVar[33] = (Float_t)track->Eta(); + fVar[34] = (Float_t)r[0]; + fVar[35] = (Float_t)r[1]; + fVar[36] = (Float_t)r[2]; + fVar[37] = (Float_t)rout[0]; + fVar[38] = (Float_t)rout[1]; + fVar[39] = (Float_t)rout[2]; + fVar[40] = (Float_t)pHmp[0]; + fVar[41] = (Float_t)pHmp[1]; + fVar[42] = (Float_t)pHmp[2]; + fVar[43] = (Float_t)track->Px(); + fVar[44] = (Float_t)track->Py(); + fVar[45] = (Float_t)track->Pz(); + fVar[46] = (Float_t)track->GetTPCClusterInfo(2,1); + fVar[47] = (Float_t)track->GetTPCNclsF(); + fVar[48] = nSigmasTOF[0]; + fVar[49] = nSigmasTOF[1]; + fVar[50] = nSigmasTOF[2]; + fVar[51] = nSigmasTOF[3]; + fVar[52] = nSigmasTOF[4]; + fVar[53] = nSigmasTPC[0]; + fVar[54] = nSigmasTPC[1]; + fVar[55] = nSigmasTPC[2]; + fVar[56] = nSigmasTPC[3]; + fVar[57] = nSigmasTPC[4]; + fVar[58] = (Float_t)probsTOF[0]; + fVar[59] = (Float_t)probsTOF[1]; + fVar[60] = (Float_t)probsTOF[2]; + fVar[61] = (Float_t)probsTOF[3]; + fVar[62] = (Float_t)probsTOF[4]; + fVar[63] = (Float_t)probsTPC[0]; + fVar[64] = (Float_t)probsTPC[1]; + fVar[65] = (Float_t)probsTPC[2]; + fVar[66] = (Float_t)probsTPC[3]; + fVar[67] = (Float_t)probsTPC[4]; + fVar[68] = (Float_t)track->GetHMPIDchi2(); + + fTree->Fill(); + + }//track loop + + /* PostData(0) is taken care of by AliAnalysisTaskSE */ + PostData(1,fHmpHistList); + PostData(2,fTree); +} +//___________________________________________________________________________ +void AliHMPIDAnalysisTask::Terminate(Option_t*) +{ + // The Terminate() function is the last function to be called during + // a query. It always runs on the client, it can be used to present + // the results graphically or save the results to file. + + Info("Terminate"," "); + + if (!fUseMC) return; + + fHmpHistList = dynamic_cast (GetOutputData(1)); + + if (!fHmpHistList) { + AliError("Histogram List is not available"); + return; + } + + + AliAnalysisTaskSE::Terminate(); + +} +//___________________________________________________________________________ +void AliHMPIDAnalysisTask::UserCreateOutputObjects() { + // + //HERE ONE CAN CREATE OUTPUT OBJECTS + //TO BE SET BEFORE THE EXECUTION OF THE TASK + // + + //slot #1 +// OpenFile(1); + fHmpHistList = new TList(); + fHmpHistList->SetOwner(); + + fHmpNevents = new TH1F("fHmpNevents","Number of events",2,0,2); + fHmpHistList->Add(fHmpNevents); + + fZvertex = new TH1F("fZvertex","Z primary vertex distribution",4000,-20,20); + fHmpHistList->Add(fZvertex); + +// OpenFile(2); + fTree = new TTree("Tree","Tree with data"); + fTree->Branch("Chamber",&fVar[0]); + fTree->Branch("pHmp3",&fVar[1]); + fTree->Branch("P",&fVar[2]); + fTree->Branch("Xpc",&fVar[3]); + fTree->Branch("Ypc",&fVar[4]); + fTree->Branch("X",&fVar[5]); + fTree->Branch("Y",&fVar[6]); + fTree->Branch("HMPIDsignal",&fVar[7]); + fTree->Branch("Charge",&fVar[8]); + fTree->Branch("Theta",&fVar[9]); + fTree->Branch("Phi",&fVar[10]); + fTree->Branch("Sign",&fVar[11]); + fTree->Branch("NumPhotons",&fVar[12]); + fTree->Branch("NumTPCclust",&fVar[13]); + fTree->Branch("ProbHMP0",&fVar[14]); + fTree->Branch("ProbHMP1",&fVar[15]); + fTree->Branch("ProbHMP2",&fVar[16]); + fTree->Branch("ProbHMP3",&fVar[17]); + fTree->Branch("ProbHMP4",&fVar[18]); + fTree->Branch("TOFsignal",&fVar[19]); + fTree->Branch("KinkIndex",&fVar[20]); + fTree->Branch("Xv",&fVar[21]); + fTree->Branch("Yv",&fVar[22]); + fTree->Branch("Zv",&fVar[23]); + fTree->Branch("TPCchi2",&fVar[24]); + fTree->Branch("b0",&fVar[25]); + fTree->Branch("b1",&fVar[26]); + fTree->Branch("ClustSize",&fVar[27]); + fTree->Branch("PrimVertexX",&fVar[28]); + fTree->Branch("PrimVertexY",&fVar[29]); + fTree->Branch("PrimVertexZ",&fVar[30]); + fTree->Branch("ITSrefit",&fVar[31]); + fTree->Branch("TPCrefit",&fVar[32]); + fTree->Branch("Eta",&fVar[33]); + fTree->Branch("xTrack",&fVar[34]); + fTree->Branch("yTrack",&fVar[35]); + fTree->Branch("zTrack",&fVar[36]); + fTree->Branch("xOuterTrack",&fVar[37]); + fTree->Branch("yOuterTrack",&fVar[38]); + fTree->Branch("zOuterTrack",&fVar[39]); + fTree->Branch("pHmpX",&fVar[40]); + fTree->Branch("pHmpY",&fVar[41]); + fTree->Branch("pHmpZ",&fVar[42]); + fTree->Branch("Px",&fVar[43]); + fTree->Branch("Py",&fVar[44]); + fTree->Branch("Pz",&fVar[45]); + fTree->Branch("nCrossedRowsTPC",&fVar[46]); + fTree->Branch("findableClustTPC",&fVar[47]); + fTree->Branch("NSigmasTOF0",&fVar[48]); + fTree->Branch("NSigmasTOF1",&fVar[49]); + fTree->Branch("NSigmasTOF2",&fVar[50]); + fTree->Branch("NSigmasTOF3",&fVar[51]); + fTree->Branch("NSigmasTOF4",&fVar[52]); + fTree->Branch("NSigmasTPC0",&fVar[53]); + fTree->Branch("NSigmasTPC1",&fVar[54]); + fTree->Branch("NSigmasTPC2",&fVar[55]); + fTree->Branch("NSigmasTPC3",&fVar[56]); + fTree->Branch("NSigmasTPC4",&fVar[57]); + fTree->Branch("ProbTOF0",&fVar[58]); + fTree->Branch("ProbTOF1",&fVar[59]); + fTree->Branch("ProbTOF2",&fVar[60]); + fTree->Branch("ProbTOF3",&fVar[61]); + fTree->Branch("ProbTOF4",&fVar[62]); + fTree->Branch("ProbTPC0",&fVar[63]); + fTree->Branch("ProbTPC1",&fVar[64]); + fTree->Branch("ProbTPC2",&fVar[65]); + fTree->Branch("ProbTPC3",&fVar[66]); + fTree->Branch("ProbTPC4",&fVar[67]); + fTree->Branch("HmpSigma",&fVar[68]); + + PostData(1,fHmpHistList); + PostData(2,fTree); +} + +//____________________________________________________________________________________________________________________________________ +Bool_t AliHMPIDAnalysisTask::Equal(Double_t x, Double_t y, Double_t tolerance) +{ + return abs(x - y) <= tolerance ; +} + +#endif diff --git a/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.h b/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.h index 032ae93f239..66f95785c7e 100644 --- a/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.h +++ b/PWGLF/SPECTRA/PiKaPr/HMPID/AliHMPIDAnalysisTask.h @@ -1,82 +1,82 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -//============================================================================== -// AliHMPIDAnalysysTask - Class representing a basic analysis tool of HMPID data at -// level of ESD. -// A set of histograms is created. -//============================================================================== - -#ifndef ALIHMPIDANALYSISTASK_H -#define ALIHMPIDANALYSISTASK_H - -#include "AliAnalysisTaskSE.h" -#include "AliStack.h" - -class TH1; -class TParticle; -class TFile; -class AliESDtrack; -class AliESDtrackCuts; -class AliAnalysisFilter; -class AliESDEvent; -class AliVEvent; -class AliPIDResposne; - -class AliHMPIDAnalysisTask : public AliAnalysisTaskSE { - public: - - enum {kChamber = 7}; - - AliHMPIDAnalysisTask(); - AliHMPIDAnalysisTask(const Char_t* name); - AliHMPIDAnalysisTask& operator= (const AliHMPIDAnalysisTask& c); - AliHMPIDAnalysisTask(const AliHMPIDAnalysisTask& c); - virtual ~AliHMPIDAnalysisTask(); - - virtual void ConnectInputData(Option_t *); - // virtual void AliHMPIDAnalysisTask::UserCreateObject(Option_t *) - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - void SetUseMC(Bool_t useMC) { fUseMC = useMC; } - Bool_t Equal(Double_t x, Double_t y, Double_t tolerance); - - protected: - - private: - - AliESDEvent *fESD; //! ESD object - AliMCEvent *fMC; //! MC event - - Bool_t fUseMC; // decide whether use or not the MC information - - TList *fHmpHistList ; // list of histograms - - TH1F *fHmpNevents; - TH1F *fZvertex; - - AliPIDResponse *fPIDResponse; - AliESDtrackCuts *fTrackCuts; - AliAnalysisFilter *fTrackFilter; - - TTree *fTree; // tree with useful data for subsequent analysis - Float_t fVar[69]; // array of data to fill the tree - - ClassDef(AliHMPIDAnalysisTask,4); -}; - -#endif +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +//============================================================================== +// AliHMPIDAnalysysTask - Class representing a basic analysis tool of HMPID data at +// level of ESD. +// A set of histograms is created. +//============================================================================== + +#ifndef ALIHMPIDANALYSISTASK_H +#define ALIHMPIDANALYSISTASK_H + +#include "AliAnalysisTaskSE.h" +#include "AliStack.h" + +class TH1; +class TParticle; +class TFile; +class AliESDtrack; +class AliESDtrackCuts; +class AliAnalysisFilter; +class AliESDEvent; +class AliVEvent; +class AliPIDResposne; + +class AliHMPIDAnalysisTask : public AliAnalysisTaskSE { + public: + + enum {kChamber = 7}; + + AliHMPIDAnalysisTask(); + AliHMPIDAnalysisTask(const Char_t* name); + AliHMPIDAnalysisTask& operator= (const AliHMPIDAnalysisTask& c); + AliHMPIDAnalysisTask(const AliHMPIDAnalysisTask& c); + virtual ~AliHMPIDAnalysisTask(); + + virtual void ConnectInputData(Option_t *); + // virtual void AliHMPIDAnalysisTask::UserCreateObject(Option_t *) + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + void SetUseMC(Bool_t useMC) { fUseMC = useMC; } + Bool_t Equal(Double_t x, Double_t y, Double_t tolerance); + + protected: + + private: + + AliESDEvent *fESD; //! ESD object + AliMCEvent *fMC; //! MC event + + Bool_t fUseMC; // decide whether use or not the MC information + + TList *fHmpHistList ; // list of histograms + + TH1F *fHmpNevents; + TH1F *fZvertex; + + AliPIDResponse *fPIDResponse; + AliESDtrackCuts *fTrackCuts; + AliAnalysisFilter *fTrackFilter; + + TTree *fTree; // tree with useful data for subsequent analysis + Float_t fVar[69]; // array of data to fill the tree + + ClassDef(AliHMPIDAnalysisTask,4); +}; + +#endif diff --git a/PWGLF/SPECTRA/PiKaPr/HMPID/AnalysisTrainHMPID.C b/PWGLF/SPECTRA/PiKaPr/HMPID/AnalysisTrainHMPID.C index 1be6307c4f1..976f7cb8aa0 100644 --- a/PWGLF/SPECTRA/PiKaPr/HMPID/AnalysisTrainHMPID.C +++ b/PWGLF/SPECTRA/PiKaPr/HMPID/AnalysisTrainHMPID.C @@ -1,1094 +1,1094 @@ -//===================== ANALYSIS TRAIN ========================================= -// To use: copy this macro to your work directory, modify the global part to match -// your needs, then run root. -// root[0] .L AnalysisTrainHMPID.C -// Grid full mode as below (other modes: test, offline, submit, terminate) -// root[1] AnalysisTrainHMPID("grid", "full") -// CAF mode (requires root v5-23-02 + aliroot v4-16-Rev08) -// root[2] AnalysisTrainHMPID("proof") -// Local mode requires AliESds.root or AliAOD.root in ./data directory -// root[3] AnalysisTrainHMPID("local") -// In proof and grid modes, a token is needed and sourcing the produced environment file. -// - -// ============================================================================= -// ### General Steering variables -// ============================================================================= -//== general setup variables -TString kTrainName = "hmpidAnalysis"; // (no blancs or special characters) -TString kJobTag = "HMPID Tasks analysis train configured"; // -Bool_t kUsePAR = kFALSE; // use par files for extra libs -Bool_t kUseCPAR = kFALSE; // use par files for common libs -Bool_t kFillAOD = kFALSE; // switch of AOD filling for on the fly analysis - -Int_t iAODhandler = 1; // Analysis produces an AOD or dAOD's -Int_t iESDfilter = 0; // ESD to AOD filter (barrel + muon tracks) -Int_t iPhysicsSelection = 1; // Physics selection task -Bool_t kUseKinefilter = kFALSE; // use Kinematics filter -Bool_t kUseMuonfilter = kFALSE; // use muon filter -TString kCommonOutputFileName = "HmpidOutput.root"; - - -//== general process variables - -// ### Other flags to steer the analysis -//============================================================================== -Bool_t kSkipTerminate = kFALSE; // Do not call Teminate -Bool_t kDebugLevel = kTRUE; // activate debugging -Int_t kUseSysInfo = 0; // activate debugging -Bool_t kUseMC = kTRUE; // use MC info -Bool_t kIsMC = kFALSE; // is MC info, if false it overwrites Use(AOD)MC -Bool_t kUseESDTags = kFALSE; // use ESD tags for selection -Bool_t kUseTR = kFALSE; // use track references - -// ### Analysis modules to be included. Some may not be yet fully implemented. -//============================================================================== -Int_t iHMPID = 1; // Basic HMPID analysis task -Int_t iJETAN = 0; // Jet analysis (PWG4) // 1 write standard 2 write non-standard jets -Int_t iJETANLib = 0; -Int_t kHighPtFilterMask = 16; // change depending on the used AOD Filter - - -//============================================================================== -// ### PROOF Steering varibales -//============================================================================== -//== proof setup variables -TString kProofCluster = "alice-caf.cern.ch"; -Bool_t kProofUseAFPAR = kTRUE; // use AF special par file -TString kProofAFversion = "VO_ALICE@AliRoot::v4-20-08-AN"; -//== proof input and output variables -TString kProofDataSet = "/alice/sim/LHC10d2_117220"; -//== proof process variables -Bool_t kProofClearPackages = kFALSE; -Int_t kProofEvents = 10000; -Int_t kProofOffset = 0; - -//============================================================================== -// ### Grid plugin Steering varibiables -//============================================================================== -//== grid plugin setup variables -Bool_t kPluginUse = kTRUE; // do not change -Bool_t kPluginUseProductionMode = kFALSE; // use the plugin in production mode -TString kPluginRootVersion = "v5-30-03"; // *CHANGE ME IF MORE RECENT IN GRID* -TString kPluginAliRootVersion = "v5-02-06-AN"; // *CHANGE ME IF MORE RECENT IN GRID* -Bool_t kPluginMergeViaJDL = kTRUE; // merge via JDL -Bool_t kPluginFastReadOption = kFALSE; // use xrootd flags to reduce timeouts -Bool_t kPluginOverwriteMode = kTRUE; // overwrite existing collections -Int_t kPluginOutputToRunNumber = 1; // write the output to subdirs named after run number -TString kPluginExecutableCommand = "root -b -q"; - -// == grid plugin input and output variables -TString kGridDatadir = "/alice/data/2010/LHC10b"; -TString kGridLocalRunList = ""; -TString kGridWorkDir = "LHC10b/pass3"; // Alien working directory -TString kGridOutdir = ""; // AliEn output directory. If blank will become output_ -TString kGridDataSet = ""; // sub working directory not to confuse different run xmls -Int_t kGridRunRange[2] = {114783, 114783}; // Set the run range -TString kGridRunPattern = "%03d"; // important for leading zeroes!! -TString kGridPassPattern = "/ESDs/pass3"; -//TString kGridPassPattern = "ESDs/pass1"; to work with plugin->AddRunNumber -TString kGridExtraFiles = ""; // files that will be added to the input list in the JDL... -Int_t kGridMaxMergeFiles = 12; // Number of files merged in a chunk grid run range -TString kGridMergeExclude = "AliAOD.root"; // Files that should not be merged -TString kGridOutputStorages = "disk=2"; // Make replicas on the storages -// == grid process variables -Int_t kGridRunsPerMaster = 1; // Number of runs per master job -Int_t kGridFilesPerJob = 100; // Maximum number of files per job (gives size of AOD) - -//============================================================================== -// ### Local Steering variables -//============================================================================== -//== local setup variables -//== local input and output variables -TString kLocalXMLDataset = ""; // Change local xml dataset for local interactive analysis -TString kLocalDataList = "list.txt"; // Change local xml dataset for local interactive analysis -// == local process variables - - - -// Temporaries. -TString anaPars = ""; -TString anaLibs = ""; -TString anaLibsExtra = ""; -TString anaSources = ""; -// Function signatures -class AliAnalysisAlien; - -//______________________________________________________________________________ -void AnalysisTrainHMPID(const char *analysis_mode="local", const char *plugin_mode="", - const char *config_file="",Int_t iOffset = 0) -{ -// Main analysis train macro. If a configuration file is provided, all parameters -// are taken from there but may be altered by CheckModuleFlags. - - if (strlen(config_file) && !LoadConfig(config_file)) return; - - if(iOffset)kProofOffset = iOffset; - TString smode(analysis_mode); - smode.ToUpper(); - // Check compatibility of selected modules - CheckModuleFlags(smode); - - printf("==================================================================\n"); - printf("=========== RUNNING ANALYSIS TRAIN %s IN %s MODE ==========\n", kTrainName.Data(),smode.Data()); - printf("==================================================================\n"); - printf("= Configuring analysis train for: =\n"); - printf("= ESD analysis =\n"); - if (iPhysicsSelection) printf("= Physics selection =\n"); - if (iESDfilter) printf("= ESD filter =\n"); - if (iJETAN) printf("= Jet analysis =\n"); - printf("==================================================================\n"); - printf(":: use MC truth %d\n", (UInt_t)kUseMC); - printf(":: use KINE filter %d\n", (UInt_t)kUseKinefilter); - printf(":: use track refs %d\n", (UInt_t)kUseTR); - printf(":: use tags %d\n", (UInt_t)kUseESDTags); - printf(":: use debugging %d\n", (UInt_t)kDebugLevel); - printf(":: use PAR files %d\n", (UInt_t)kUsePAR); - printf(":: use AliEn plugin %d\n", (UInt_t)kPluginUse); - - //========================================================================== - // Connect to back-end system - if (!Connect(smode)) { - ::Error("AnalysisTrain", "Could not connect to %s back-end", analysis_mode); - return; - } - - // Load common libraries and set include path - if (!LoadCommonLibraries(smode)) { - ::Error("AnalysisTrain", "Could not load common libraries"); - return; - } - - - - // Make the analysis manager and connect event handlers - AliAnalysisManager *mgr = new AliAnalysisManager("HMPIDTrain", "HMPID train"); - if (kCommonOutputFileName.Length()>0)mgr->SetCommonFileName(kCommonOutputFileName.Data()); - mgr->SetNSysInfo(0); - if (!strcmp(plugin_mode, "test")) mgr->SetNSysInfo(1); - if (kUseSysInfo)mgr->SetNSysInfo(kUseSysInfo); - mgr->SetSkipTerminate(kSkipTerminate); - - // Load analysis specific libraries - if (!LoadAnalysisLibraries(smode)) { - ::Error("AnalysisTrain", "Could not load analysis libraries"); - return; - } - - // Create input handler (input container created automatically) - // ESD input handler - AliESDInputHandler *esdHandler = new AliESDInputHandler(); - if (kUseESDTags) esdHandler->SetReadTags(); - esdHandler->SetReadFriends(kFALSE); - mgr->SetInputEventHandler(esdHandler); - - // Monte Carlo handler - if (kUseMC) { - AliMCEventHandler* mcHandler = new AliMCEventHandler(); - mgr->SetMCtruthEventHandler(mcHandler); - mcHandler->SetReadTR(kUseTR); - } - - // AOD output container, created automatically when setting an AOD handler - if (iAODhandler) { - // AOD output handler - AliAODHandler* aodHandler = new AliAODHandler(); - aodHandler->SetOutputFileName("AliAOD.root"); - aodHandler->SetFillAODforRun(kFillAOD); - - mgr->SetOutputEventHandler(aodHandler); - AliAnalysisDataContainer *cout_aod = mgr->GetCommonOutputContainer(); - cout_aod->SetSpecialOutput(); - } - - // Debugging if needed - if (kDebugLevel){ - mgr->SetDebugLevel(3); - } - if(kUseSysInfo>0){ - mgr->RegisterExtraFile("syswatch.root"); - if(kGridMergeExclude.Length())kGridMergeExclude += " "; - kGridMergeExclude += "syswatch.root"; - } else { - AliLog::SetGlobalLogLevel(AliLog::kError); - } - - //========================================================================== - // Create the chain. In this example it is created only from ALIEN files but - // can be done to work in batch or grid mode as well. - TChain *chain = CreateChain(smode, plugin_mode); - - //========================================================================== - // Load the tasks configuration macros for all wagons. These files are supposed now to be - // in the current workdir, but in AliEn they will be in the file catalog, - // mapped from AliRoot and pecified in the jdl input list. - if(iPhysicsSelection){ - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); - AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(); // last flag also adds information on - } - - if (iESDfilter) { - // ESD filter task configuration. - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C"); - AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(kUseKinefilter,kUseMuonfilter); - if(kIsMC){ - mgr->RegisterExtraFile("pyxsec_hists.root"); - if(kGridMergeExclude.Length())kGridMergeExclude += " "; - kGridMergeExclude += "pyxsec_hists.root"; - } - } - - // Jet analysis - if (iJETAN) { - gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskJets.C"); - AliAnalysisTaskJets *taskjets = 0; - if (iJETAN&1) taskjets = AddTaskJets(kHighPtFilterMask); - if (!taskjets) ::Warning("AnalysisTrainHMPID", "AliAnalysisTaskJets cannot run for this train conditions - EXCLUDED"); - } - - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); - AliAnalysisTaskPIDResponse *taskPIDResponse = AddTaskPIDResponse(); - - - if(iHMPID){ - gROOT->LoadMacro("$ALICE_ROOT/HMPID/AddTaskHMPID.C"); - AliHMPIDAnalysisTask *taskHmpid = AddTaskHMPID(kUseMC); - taskHmpid->SelectCollisionCandidates(); - if (!taskHmpid) ::Warning("AnalysisTrainHMPID", "AliAnalysisTaskHMPID cannot run for this train conditions - EXCLUDED"); - } - - if (kPluginUse) { - AliAnalysisGrid *alienHandler = CreateAlienHandler(plugin_mode); - AliAnalysisManager::GetAnalysisManager()->SetGridHandler(alienHandler); - } - - if (mgr->InitAnalysis()) { - mgr->PrintStatus(); - if (!strcmp(plugin_mode,"submit") && smode=="GRID"){ - TString alien_workdir = gGrid->GetHomeDirectory(); - alien_workdir += kGridWorkDir.Data(); - if(kGridDataSet.Length()>0)alien_workdir += Form("/%s",kGridDataSet.Data()); - AliAnalysisAlien *gridhandler = (AliAnalysisAlien*)mgr->GetGridHandler(); - printf("=== AnalysisTrainHMPID:: Registering jdl in the work directory alien://%s/%s, should be done by the manager! ===\n", - alien_workdir.Data(),gridhandler->GetGridOutputDir()); - - TString dest; - dest = Form("%s/%s/%s.jdl",alien_workdir.Data(),gridhandler->GetGridOutputDir(),kTrainName.Data()); - if(AliAnalysisAlien::FileExists(dest.Data())){ - // Printf("%s exist on grid removing...",dest.Data()); - // gGrid->Rm(dest.Data()); - } - TFile::Cp(Form("file:%s.jdl",kTrainName.Data()),Form("alien://%s",dest.Data())); - - - TString dest; - dest = Form("%s/%s/%s_merge.jdl",alien_workdir.Data(),gridhandler->GetGridOutputDir(),kTrainName.Data()); - if(AliAnalysisAlien::FileExists(dest.Data())){ - // Printf("%s exist on grid removing...",dest.Data()); - // gGrid->Rm(dest.Data()); - } - TFile::Cp(Form("file:%s_merge.jdl",kTrainName.Data()),Form("alien://%s",dest.Data())); - } - - AliLog::SetGlobalLogLevel(AliLog::kError); - if((kUseSysInfo>0 && smode=="LOCAL") || !strcmp(plugin_mode, "test")){ - TFile *fM = TFile::Open("manager_local.root","RECREATE"); - mgr->Write(); - fM->Close(); - } - - StartAnalysis(smode, chain); - - if((kUseSysInfo>0 && smode=="LOCAL") || !strcmp(plugin_mode, "test")){ - for(int i = 0;i < mgr->GetTopTasks()->GetEntries();i++){ - mgr->ProfileTask(i); - } - } - if (!strcmp(plugin_mode, "offline") && smode=="GRID"){ - // Offline mode path files - // PatchJDL(); - PatchAnalysisMacro(); - } - } -} - - -//______________________________________________________________________________ -void StartAnalysis(const char *mode, TChain *chain) { - - Int_t imode = -1; - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!strcmp(mode, "LOCAL")) imode = 0; - if (!strcmp(mode, "PROOF")) imode = 1; - if (!strcmp(mode, "GRID")) imode = 2; - switch (imode) { - case 0: - if (!chain) { - ::Error("AnalysisTrainHMPID.C::StartAnalysis", "Cannot create the chain"); - return; - } - mgr->StartAnalysis(mode, chain); - return; - case 1: - if (!kProofDataSet.Length()) { - ::Error("AnalysisTrainHMPID.C::StartAnalysis", "kProofDataSet is empty"); - return; - } - mgr->StartAnalysis(mode, kProofDataSet, kProofEvents,kProofOffset); - return; - case 2: - if (kPluginUse) { - if (!mgr->GetGridHandler()) { - ::Error("AnalysisTrainHMPID.C::StartAnalysis", "Grid plugin not initialized"); - return; - } - mgr->StartAnalysis("grid"); - } else { - if (!chain) { - ::Error("AnalysisTrainHMPID.C::StartAnalysis", "Cannot create the chain"); - return; - } - mgr->StartAnalysis(mode, chain); - } - return; - } -} - -//______________________________________________________________________________ -void CheckModuleFlags(const char *mode) { -// Checks selected modules and insure compatibility - Int_t imode = -1; - if (!strcmp(mode, "LOCAL")) imode = 0; - if (!strcmp(mode, "PROOF")) imode = 1; - if (!strcmp(mode, "GRID")) imode = 2; - - - if (kUseCPAR) { - kPluginAliRootVersion = ""; // NO aliroot if we use CPAR - } - - if (imode==1) { - if (!kUsePAR) { - ::Info("AnalysisTrainHMPID.C::CheckModuleFlags", "PAR files enabled due to PROOF analysis"); - kUsePAR = kTRUE; - } - } - if (imode != 2) { - ::Info("AnalysisTrainHMPID.C::CheckModuleFlags", "AliEn plugin disabled since not in GRID mode"); - kPluginUse = kFALSE; - } - - if(!kIsMC){ - // switch off anthin related to MC - kUseMC = 0; - kUseTR = kFALSE; - } - - // ESD analysis - if (!kUseMC){ - kUseTR = kFALSE; - if(kUseKinefilter)::Info("AnalysisTrainHMPID.C::CheckModuleFlags", "Kine Filter disabled in analysis without MC"); - kUseKinefilter = kFALSE; - } - if (iJETAN){ - iESDfilter=1; - } - if (!iESDfilter){ - kUseKinefilter = kFALSE; - kUseMuonfilter = kFALSE; - } - - iJETANLib = iJETAN && 1; - if (iESDfilter) {iAODhandler=1;} - if (kUseKinefilter && !kUseMC) kUseKinefilter = kFALSE; - -} - - -//______________________________________________________________________________ -Bool_t Connect(const char *mode) { -// Connect to the back-end system. - Int_t imode = -1; - if (!strcmp(mode, "LOCAL")) imode = 0; - if (!strcmp(mode, "PROOF")) imode = 1; - if (!strcmp(mode, "GRID")) imode = 2; - TString username = gSystem->Getenv("alien_API_USER"); - switch (imode) { - case 0: - break; - case 1: - if (!username.Length()) { - ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), "Make sure you:\n \ - 1. Have called: alien-token-init \n \ - 2. Have called: >source /tmp/gclient_env_$UID"); - return kFALSE; - } - ::Info("AnalysisTrainHMPID.C::Connect", "Connecting user <%s> to PROOF cluster <%s>", - username.Data(), kProofCluster.Data()); - gEnv->SetValue("XSec.GSI.DelegProxy", "2"); - TProof::Open(Form("%s@%s", username.Data(), kProofCluster.Data())); - if (!gProof) { - if (strcmp(gSystem->Getenv("XrdSecGSISRVNAMES"), "lxfsrd0506.cern.ch")) - ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), "Environment XrdSecGSISRVNAMES different from lxfsrd0506.cern.ch"); - return kFALSE; - } - if(kProofClearPackages)gProof->ClearPackages(); - break; - case 2: - if (!username.Length()) { - ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), "Make sure you:\n \ - 1. Have called: alien-token-init \n \ - 2. Have called: >source /tmp/gclient_env_$UID"); - return kFALSE; - } - if (kPluginUse && !gSystem->Getenv("alien_CLOSE_SE")) { - ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), - "When using the AliEn plugin it is preferable to define the \ - variable alien_CLOSE_SE in your environment."); - return kFALSE; - } - ::Info("AnalysisTrainHMPID.C::Connect", "Connecting user <%s> to AliEn ...", - username.Data()); - TGrid::Connect("alien://"); - if (!gGrid || !gGrid->IsConnected()) return kFALSE; - break; - default: - ::Error("AnalysisTrainHMPID.C::Connect", "Unknown run mode: %s", mode); - return kFALSE; - } - ::Info("AnalysisTrainHMPID.C::Connect","Connected in %s mode", mode); - return kTRUE; -} - - -//______________________________________________________________________________ -Bool_t LoadCommonLibraries(const char *mode) -{ -// Load common analysis libraries. - Int_t imode = -1; - if (!strcmp(mode, "LOCAL")) imode = 0; - if (!strcmp(mode, "PROOF")) imode = 1; - if (!strcmp(mode, "GRID")) imode = 2; - if (!gSystem->Getenv("ALICE_ROOT")) { - ::Error("AnalysisTrainHMPID.C::LoadCommonLibraries", "Analysis train requires that analysis libraries are compiled with a local AliRoot"); - return kFALSE; - } - Bool_t success = kTRUE; - // ROOT libraries - gSystem->Load("libTree.so"); - gSystem->Load("libGeom.so"); - gSystem->Load("libVMC.so"); - gSystem->Load("libPhysics.so"); - - // Load framework classes. Par option ignored here. - switch (imode) { - case 0: - case 2: - if (kUseCPAR) { - success &= LoadLibrary("STEERBase", mode, kTRUE); - success &= LoadLibrary("ESD", mode, kTRUE); - success &= LoadLibrary("AOD", mode, kTRUE); - success &= LoadLibrary("ANALYSIS", mode, kTRUE); - success &= LoadLibrary("ANALYSISalice", mode, kTRUE); - success &= LoadLibrary("CORRFW", mode, kTRUE); - } else { - success &= LoadLibrary("libSTEERBase.so", mode); - success &= LoadLibrary("libESD.so", mode); - success &= LoadLibrary("libAOD.so", mode); - success &= LoadLibrary("libANALYSIS.so", mode); - success &= LoadLibrary("libANALYSISalice.so", mode); - success &= LoadLibrary("libCORRFW.so", mode); - gROOT->ProcessLine(".include $ALICE_ROOT/include"); - } - break; - case 1: - if (!kProofUseAFPAR) { - success &= LoadLibrary("STEERBase", mode); - success &= LoadLibrary("ESD", mode); - success &= LoadLibrary("AOD", mode); - success &= LoadLibrary("ANALYSIS", mode); - success &= LoadLibrary("ANALYSISalice", mode); - success &= LoadLibrary("CORRFW", mode); - } else { - success &= !gProof->EnablePackage(kProofAFversion); - success &= LoadLibrary("CORRFW", mode); - } - break; - default: - ::Error("AnalysisTrainHMPID.C::LoadCommonLibraries", "Unknown run mode: %s", mode); - return kFALSE; - } - if (success) { - ::Info("AnalysisTrainHMPID.C::LoadCommodLibraries", "Load common libraries: SUCCESS"); - ::Info("AnalysisTrainHMPID.C::LoadCommodLibraries", "Include path for Aclic compilation:\n%s", - gSystem->GetIncludePath()); - } else { - ::Info("AnalysisTrainHMPID.C::LoadCommodLibraries", "Load common libraries: FAILED"); - } - - return success; -} - - -//______________________________________________________________________________ -Bool_t LoadAnalysisLibraries(const char *mode) -{ -// Load common analysis libraries. - Bool_t success = kTRUE; - if (iESDfilter) { - if (!LoadLibrary("PWG3base", mode, kTRUE) || - !LoadLibrary("PWG3muon", mode, kTRUE)) return kFALSE; - } - - if(iHMPID){ - if (!LoadSource(Form("%s/AliHMPIDAnalysisTask.cxx",gSystem->ExpandPathName(".")), mode, kTRUE))return kFALSE; - } - - if (iJETANLib) { - if (!LoadLibrary("JETAN", mode, kTRUE)) return kFALSE; - } - - ::Info("AnalysisTrainHMPID.C::LoadAnalysisLibraries", "Load other libraries: SUCCESS"); - return kTRUE; -} - - -//______________________________________________________________________________ -Bool_t LoadLibrary(const char *module, const char *mode, Bool_t rec=kFALSE) -{ -// Load a module library in a given mode. Reports success. - Int_t imode = -1; - Int_t result; - TString smodule(module); - if (!strcmp(mode, "LOCAL")) imode = 0; - if (!strcmp(mode, "PROOF")) imode = 1; - if (!strcmp(mode, "GRID")) imode = 2; - TString mod(module); - if (!mod.Length()) { - ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Empty module name"); - return kFALSE; - } - // If a library is specified, just load it - if (smodule.EndsWith(".so")) { - mod.Remove(mod.Index(".so")); - result = gSystem->Load(mod); - if (result < 0) { - ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Could not load library %s", module); - return kFALSE; - } - if (rec) anaLibs += Form("%s.so ",mod.Data()); - if (rec) anaLibsExtra += Form("%s.so ",mod.Data()); - return kTRUE; - } - // Check if the library is already loaded - if (strlen(gSystem->GetLibraries(Form("%s.so", module), "", kFALSE)) > 0) - return kTRUE; - switch (imode) { - case 0: - case 2: - if (kUsePAR) { - result = SetupPar(module); - if (rec) anaPars += Form("%s.par ", module); - } else { - result = gSystem->Load(Form("lib%s.so", module)); - if (rec) anaLibs += Form("lib%s.so ", module); - } - break; - case 1: - if(!gSystem->AccessPathName(module)){ - ::Info("AnalysisTrainHMPID.C::LoadLibrary", "Removing directory %s",module); - gSystem->Exec(Form("rm -rf %s",module)); - } - result = gProof->UploadPackage(module); - if (result<0) { - result = gProof->UploadPackage(gSystem->ExpandPathName(Form("$ALICE_ROOT/%s.par", module))); - if (result<0) { - ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Could not find module %s.par in current directory nor in $ALICE_ROOT", module); - return kFALSE; - } - } - result = gProof->EnablePackage(module); - break; - default: - return kFALSE; - } - if (result < 0) { - ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Could not load module %s", module); - return kFALSE; - } - return kTRUE; -} - -//______________________________________________________________________________ -Bool_t LoadSource(const char *source, const char *mode, Bool_t rec=kFALSE) -{ -// Load a module library in a given mode. Reports success. - Int_t imode = -1; - Int_t result = -1; - if (!strcmp(mode, "LOCAL")) imode = 0; - if (!strcmp(mode, "PROOF")) imode = 1; - if (!strcmp(mode, "GRID")) imode = 2; - TString ssource(source); - TString basename = gSystem->BaseName(ssource.Data()); - if (!ssource.Length()) { - ::Error("AnalysisTrainHMPID.C::LoadSource", "Empty task name"); - return kFALSE; - } - // we have a source code so compile it - if (ssource.EndsWith(".cxx")) { - // need to copy it here other wise the path is also used on grid... - ssource.Remove(ssource.Index(".cxx")); - basename.Remove(basename.Index(".cxx")); - Printf("LoadSources:: Copying... path %s{cxx,h}",ssource.Data()); - gSystem->Exec(Form("cp %s.cxx . ",ssource.Data())); - gSystem->Exec(Form("cp %s.h . ",ssource.Data())); - // Path to code - // only needed for local compilation, in grid and proof mode - // the task headers are uploaded - // path.Remove(path.Index(gSystem->BaseName(path.Data()))); - // Printf("LoadSources:: Including path %s",path.Data()); - // if(path.Length()>0)gROOT->ProcessLine(Form(".include %s",path.Data())); - Printf("LoadSources:: Loading... path %s",basename.Data()); - switch (imode) { - case 0: - result = gROOT->LoadMacro(Form("%s.cxx++g",basename.Data())); - break; - case 1: - result = gProof->Load(Form("%s.cxx++g",basename.Data())); - break; - case 2: - result = gROOT->LoadMacro(Form("%s.cxx++g",basename.Data())); - if (rec){ - // what we want to compile - anaSources += Form("%s.cxx ",basename.Data()); - // what we need as input... - anaLibs += Form("%s.cxx %s.h ",basename.Data(),basename.Data()); - } - break; - default: - return kFALSE; - } - } - if (result < 0) { - ::Error("AnalysisTrainHMPID.C::LoadSources", "Could not load source %s", source); - return kFALSE; - } - return kTRUE; -} - -//______________________________________________________________________________ -TChain *CreateChain(const char *mode, const char *plugin_mode) -{ -// Create the input chain - Int_t imode = -1; - if (!strcmp(mode, "LOCAL")) imode = 0; - if (!strcmp(mode, "PROOF")) imode = 1; - if (!strcmp(mode, "GRID")) imode = 2; - TChain *chain = NULL; - // Local chain - switch (imode) { - case 0: - if (!kLocalXMLDataset.Length()) { - // Local ESD - chain = new TChain("esdTree"); - TString line; - ifstream in; - in.open(kLocalDataList.Data()); - while (in.good()) { - in >> line; - if (line.Length() == 0) continue; - cout << " line = " << line << endl; - chain->Add(line.Data()); - } - } else { - // Interactive ESD - chain = CreateChainSingle(kLocalXMLDataset, "esdTree"); - } - break; - case 1: - break; - case 2: - if (kPluginUse) { - AliAnalysisGrid *alienHandler = CreateAlienHandler(plugin_mode); - AliAnalysisManager::GetAnalysisManager()->SetGridHandler(alienHandler); - } else { - TString treeName = "esdTree"; - chain = CreateChainSingle("wn.xml", treeName); - } - break; - default: - } - if (chain && chain->GetNtrees()) return chain; - return NULL; -} - -//______________________________________________________________________________ -TChain* CreateChainSingle(const char* xmlfile, const char *treeName) -{ - printf("*******************************\n"); - printf("*** Getting the ESD Chain ***\n"); - printf("*******************************\n"); - TAlienCollection * myCollection = TAlienCollection::Open(xmlfile); - - if (!myCollection) { - ::Error("AnalysisTrainHMPID.C::CreateChainSingle", "Cannot create an AliEn collection from %s", xmlfile) ; - return NULL ; - } - - TChain* chain = new TChain(treeName); - myCollection->Reset() ; - while ( myCollection->Next() ) chain->Add(myCollection->GetTURL("")) ; - chain->ls(); - return chain; -} - -//______________________________________________________________________________ -Int_t SetupPar(char* pararchivename) -{ - if (!pararchivename || !strlen(pararchivename)) return -1; - char processline[1024]; - if (gSystem->AccessPathName(Form("%s.par", pararchivename))) { - if (!gSystem->AccessPathName(Form("%s/%s.par", gSystem->Getenv("ALICE_ROOT"),pararchivename))) { - ::Info("AnalysisTrainHMPID.C::SetupPar", "Getting %s.par from $ALICE_ROOT", pararchivename); - TFile::Cp(gSystem->ExpandPathName(Form("$ALICE_ROOT/%s.par", pararchivename)), - Form("%s.par",pararchivename)); - } else { - ::Error("AnalysisTrainHMPID.C::SetupPar", "Cannot find %s.par", pararchivename); - return -1; - } - } - gSystem->Exec(Form("tar xvzf %s.par", pararchivename)); - - TString ocwd = gSystem->WorkingDirectory(); - if (!gSystem->ChangeDirectory(pararchivename)) return -1; - - // check for BUILD.sh and execute - if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { - printf("*******************************\n"); - printf("*** Building PAR archive ***\n"); - printf("*******************************\n"); - if (gSystem->Exec("PROOF-INF/BUILD.sh")) { - Error("runProcess","Cannot Build the PAR Archive! - Abort!"); - return -1; - } - } - - // check for SETUP.C and execute - if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { - printf("*******************************\n"); - printf("*** Setup PAR archive ***\n"); - printf("*******************************\n"); - gROOT->Macro("PROOF-INF/SETUP.C"); - } - if (!gSystem->ChangeDirectory(ocwd.Data())) return -1; - return 0; -} - -//______________________________________________________________________________ -AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode) -{ -// Check if user has a valid token, otherwise make one. This has limitations. -// One can always follow the standard procedure of calling alien-token-init then -// source /tmp/gclient_env_$UID in the current shell. - if (!AliAnalysisGrid::CreateToken()) return NULL; - AliAnalysisAlien *plugin = new AliAnalysisAlien(); -// Set the run mode (can be "full", "test", "offline", "submit" or "terminate") - plugin->SetRunMode(plugin_mode); - if (kPluginUseProductionMode) plugin->SetProductionMode(); - plugin->SetJobTag(kJobTag); - plugin->SetNtestFiles(1); -// plugin->SetPreferedSE("ALICE::NIHAM::File"); -// Set versions of used packages - plugin->SetAPIVersion("V1.1x"); - plugin->SetROOTVersion(kPluginRootVersion); - plugin->SetAliROOTVersion(kPluginAliRootVersion); - -// Declare input data to be processed. -// Method 1: Create automatically XML collections using alien 'find' command. -// Define production directory LFN - plugin->SetGridDataDir(kGridDatadir.Data()); -// Set data search pattern - plugin->SetDataPattern(Form(" %s/*/*ESDs.root",kGridPassPattern.Data())); -// ...then add run numbers to be considered - plugin->SetRunPrefix("000"); - plugin->SetRunRange(kGridRunRange[0], kGridRunRange[1]); - - if(kGridLocalRunList.Length()>0){ - ifstream in1; - in1.open(kGridLocalRunList.Data()); - int iRun; - // just use run numbers, negatives will be excluded - while(in1>>iRun){ - if(iRun>0){ - Printf("AnalysisTrainHMPID Adding run number from File %s", Form(kGridRunPattern.Data(),iRun)); - plugin->AddRunNumber(Form(kGridRunPattern.Data(),iRun)); - } else{ - Printf("AnalysisTrainHMPID Skipping run number from File %d", iRun); - } - } - } - -// Method 2: Declare existing data files (raw collections, xml collections, root file) -// If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir()) -// XML collections added via this method can be combined with the first method if -// the content is compatible (using or not tags) -// plugin->AddDataFile("137431.xml"); -// plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root"); -// Define alien work directory where all files will be copied. Relative to alien $HOME. - TString alien_workdir = ""; - - alien_workdir += kGridWorkDir.Data(); - if(kGridDataSet.Length()>0)alien_workdir += Form("/%s",kGridDataSet.Data()); - plugin->SetGridWorkingDir(alien_workdir.Data()); - - // Declare alien output directory. Relative to working directory. - if (!kGridOutdir.Length()) kGridOutdir = Form("output_%s",kTrainName.Data()); - plugin->SetGridOutputDir(kGridOutdir); - - // set extra libs before par file compilation - anaLibs += kGridExtraFiles; - anaLibs = anaLibs.Strip(); - Printf("anaLibs %s",anaLibs.Data()); - Printf("anaLibsExtra %s",anaLibsExtra.Data()); - - if (anaLibs.Length()) plugin->SetAdditionalLibs(anaLibs.Data()); - if (anaLibsExtra.Length()) plugin->SetAdditionalRootLibs(anaLibsExtra.Data()); - - TString ana_sources = ""; - TString ana_add = ""; - if (kUsePAR && anaPars.Length()) { - printf("%s\n", anaPars.Data()); - TObjArray *arr; - TObjString *objstr; - arr = anaPars.Tokenize(" "); - TIter next(arr); - while ((objstr=(TObjString*)next())) plugin->EnablePackage(objstr->GetString()); - delete arr; - } - -// Declare the analysis source files names separated by blancs. To be compiled runtime -// using ACLiC on the worker nodes. - ana_sources = anaSources.Strip(); -// Declare all libraries (other than the default ones for the framework. These will be -// loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here. - - if (ana_sources.Length()) plugin->SetAnalysisSource(ana_sources); - plugin->SetExecutableCommand(kPluginExecutableCommand.Data()); - // Declare the output file names separated by blancs. - // (can be like: file.root or file.root@ALICE::Niham::File) - plugin->SetUseSubmitPolicy(kFALSE); - plugin->SetMergeExcludes(kGridMergeExclude); - plugin->SetMaxMergeFiles(kGridMaxMergeFiles); - plugin->SetNrunsPerMaster(kGridRunsPerMaster); - plugin->SetMergeViaJDL(kPluginMergeViaJDL); - // Use fastread option - plugin->SetFastReadOption(kPluginFastReadOption); - // UseOverwrite mode - plugin->SetOverwriteMode(kPluginOverwriteMode); - // Optionally define the files to be archived. - // plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:AliAOD.root,AOD.tag.root@ALICE::NIHAM::File"); - plugin->SetOutputToRunNo(kPluginOutputToRunNumber); // write the output to subdirs named after run number -// plugin->SetDefaultOutputs(kFALSE); - - // Put default output files to archive - TString listhists = ""; - TString listaods = ""; - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - TIter next(mgr->GetOutputs()); - AliAnalysisDataContainer *output; - while ((output=(AliAnalysisDataContainer*)next())) { - const char *filename = output->GetFileName(); - if (!(strcmp(filename, "default"))) { - if (!mgr->GetOutputEventHandler()) continue; - filename = mgr->GetOutputEventHandler()->GetOutputFileName(); - if (listaods.Length()) listaods += " "; - listaods += filename; - } else { - if(!listhists.Contains(filename)){ - if (listhists.Length()) listhists += " "; - listhists += filename; - } - } - } - - if (mgr->GetExtraFiles().Length()) { - if (listaods.Length()) listaods += " "; - listaods += mgr->GetExtraFiles(); - } - - TString outputArchive; - outputArchive = Form("log_archive.zip:std*r@%s",kGridOutputStorages.Data()); - listaods.ReplaceAll(" ", ","); - listhists.ReplaceAll(" ", ","); - if (listhists.Length()) listhists = Form("hist_archive.zip:%s@%s", listhists.Data(), kGridOutputStorages.Data()); - if (listaods.Length()) listaods = Form("aod_archive.zip:%s@%s", listaods.Data(), kGridOutputStorages.Data()); - - if (!listhists.Length() && !listaods.Length()) { - ::Fatal("AnalysisTrainHMPID", "No task output !"); - } - - if (listaods.Length()) { - outputArchive += " "; - outputArchive += listaods; - } - if (listhists.Length()) { - outputArchive += " "; - outputArchive += listhists; - } -// plugin->SetOutputArchive(outputArchive); - -// Optionally set a name for the generated analysis macro (default MyAnalysis.C) - plugin->SetAnalysisMacro(Form("%s.C", kTrainName.Data())); -// Optionally set maximum number of input files/subjob (default 100, put 0 to ignore) - plugin->SetSplitMaxInputFileNumber(kGridFilesPerJob); -// Optionally set number of failed jobs that will trigger killing waiting sub-jobs. -// plugin->SetMaxInitFailed(5); -// Optionally resubmit threshold. -// plugin->SetMasterResubmitThreshold(90); -// Optionally set time to live (default 30000 sec) - plugin->SetTTL(30000); -// Optionally set input format (default xml-single) - plugin->SetInputFormat("xml-single"); -// Optionally modify the name of the generated JDL (default analysis.jdl) - plugin->SetJDLName(Form("%s.jdl", kTrainName.Data())); -// Optionally modify the executable name (default analysis.sh) - plugin->SetExecutable(Form("%s.sh", kTrainName.Data())); -// Optionally modify job price (default 1) - plugin->SetPrice(1); -// Optionally modify split mode (default 'se') - plugin->SetSplitMode("se"); - plugin->SetCheckCopy(kFALSE); - return plugin; -} - -//______________________________________________________________________________ -Bool_t LoadConfig(const char *filename) -{ -// Read train configuration from file - if (gSystem->AccessPathName(filename)) { - ::Error("AnalysisTrainHMPID.C::LoadConfig", "Config file name not found"); - return kFALSE; - } - gROOT->ProcessLine(Form(".x %s", filename)); - ::Info("AnalysisTrainHMPID.C::LoadConfig", "Train configuration loaded from file %s", filename); - return kTRUE; -} - -//______________________________________________________________________________ -Bool_t PatchJDL(){ - Printf(">>> Patching JDL"); - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - AliAnalysisAlien* gridHandler = (AliAnalysisAlien*)mgr->GetGridHandler(); - TGridJDL *jdl = gridHandler->GetGridJDL(); - if(iJETAN)jdl->AddToPackages("fastjet","v2.4.0"); - gridHandler->WriteJDL(kFALSE); - Printf("<<< Patching JDL"); - return kTRUE; -} - -//______________________________________________________________________________ -Bool_t PatchAnalysisMacro(){ - Printf(">>> Patching AnalysisMacro"); - gSystem->Exec(Form("mv %s.C %s.C_tmp",kTrainName.Data(),kTrainName.Data())); - - ifstream in1; - in1.open(Form("%s.C_tmp", kTrainName.Data())); - char cLine[250]; - TString st; - while(in1.getline(cLine,250)){ - st += cLine; - st += "\n"; - } - Int_t index= -1; - index = st.Index("gSystem->Load(\"libPhysics\");"); - index += strlen("gSystem->Load(\"libPhysics\");"); - /* - TObjArray *arr; - TObjString *objstr; - arr = anaLibs.Tokenize(" "); - TIter next(arr); - - add += "\n\n // added by CKB \n"; - while ((objstr=(TObjString*)next())){ - if(objstr->GetString().Contains("PWG3"))continue; - if(objstr->GetString().EndsWith(".so"))add += Form("gSystem->Load(\"%s\");\n",objstr->GetString().Data()); - } - delete arr; - */ - // add += Form("AliLog::SetGlobalLogLevel(%d);\n",AliLog::GetGlobalLogLevel()); - TString add = ""; - - if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); - add += "\n\n // added by CKB \n"; - add += "\n gSystem->AddIncludePath(\"./\"); \n"; - if(gGrid && kPluginAliRootVersion.Length()==0){ - add += "\n // Dirty hack for TRD reference data \n"; - add += "\n gSystem->Setenv(\"ALICE_ROOT\",\""; - add += Form("alien://%s/rootfiles/",gGrid->GetHomeDirectory()); - add += "\"); \n"; - } - add += "// BKC \n\n"; - st.Insert(index,add.Data()); - - if(kUseCPAR && kPluginAliRootVersion.Length()==0){ - index = st.Index("gSystem->AddIncludePath(\"-I$"); // uncommen $ALICE_ROOT include for par files - if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); - st.Insert(index,"// CKB comment out whehn no aliroot is provided \n //"); - } - - ofstream out; - out.open(Form("%s.C", kTrainName.Data())); - if (out.bad()) { - return kFALSE; - } - out << st << endl; - Printf("<<< Patching AnalysisMacro"); - - Printf(">>> Patching Merge Macro"); - gSystem->Exec(Form("mv %s_merge.C %s_merge.C_tmp",kTrainName.Data(),kTrainName.Data())); - - ifstream in2; - in2.open(Form("%s_merge.C_tmp", kTrainName.Data())); - TString st2; - while(in2.getline(cLine,250)){ - st2 += cLine; - st2 += "\n"; - } - index = st2.Index("gSystem->Load(\"libPhysics\");"); - index += strlen("gSystem->Load(\"libPhysics\");"); - TString add2 = ""; - add2 += "\n gSystem->AddIncludePath(\"./\"); \n"; - if(gGrid&&kPluginAliRootVersion.Length()==0){ - add2 += "\n // Dirty hack for TRD reference data \n"; - add2 += "\n gSystem->Setenv(\"ALICE_ROOT\",\""; - add2 += Form("alien://%s/rootfiles/",gGrid->GetHomeDirectory()); - add2 += "\"); \n"; - } - add2 += "// BKC \n\n"; - if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); - st2.Insert(index,add.Data()); - - if(kUseCPAR&&kPluginAliRootVersion.Length()==0){ - index = st2.Index("gSystem->AddIncludePath(\"-I$"); // uncommen $ALICE_ROOT include for par files - if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); - st2.Insert(index,"// CKB comment out whehn no aliroot is provided \n //"); - } - - // do not exclude the extra files from merign, this is done explicitly in this train script - index = st2.Index("mergeExcludes +="); // uncommen $ALICE_ROOT include for par files - if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); - st2.Insert(index,"// CKB comment out, handled explicitly by the train macro \n //"); - - - ofstream out2; - out2.open(Form("%s_merge.C", kTrainName.Data())); - if (out2.bad()) { - return kFALSE; - } - out2 << st2 << endl; - Printf("<<< Patching Merging Macro"); - - - return kTRUE; - -} +//===================== ANALYSIS TRAIN ========================================= +// To use: copy this macro to your work directory, modify the global part to match +// your needs, then run root. +// root[0] .L AnalysisTrainHMPID.C +// Grid full mode as below (other modes: test, offline, submit, terminate) +// root[1] AnalysisTrainHMPID("grid", "full") +// CAF mode (requires root v5-23-02 + aliroot v4-16-Rev08) +// root[2] AnalysisTrainHMPID("proof") +// Local mode requires AliESds.root or AliAOD.root in ./data directory +// root[3] AnalysisTrainHMPID("local") +// In proof and grid modes, a token is needed and sourcing the produced environment file. +// + +// ============================================================================= +// ### General Steering variables +// ============================================================================= +//== general setup variables +TString kTrainName = "hmpidAnalysis"; // (no blancs or special characters) +TString kJobTag = "HMPID Tasks analysis train configured"; // +Bool_t kUsePAR = kFALSE; // use par files for extra libs +Bool_t kUseCPAR = kFALSE; // use par files for common libs +Bool_t kFillAOD = kFALSE; // switch of AOD filling for on the fly analysis + +Int_t iAODhandler = 1; // Analysis produces an AOD or dAOD's +Int_t iESDfilter = 0; // ESD to AOD filter (barrel + muon tracks) +Int_t iPhysicsSelection = 1; // Physics selection task +Bool_t kUseKinefilter = kFALSE; // use Kinematics filter +Bool_t kUseMuonfilter = kFALSE; // use muon filter +TString kCommonOutputFileName = "HmpidOutput.root"; + + +//== general process variables + +// ### Other flags to steer the analysis +//============================================================================== +Bool_t kSkipTerminate = kFALSE; // Do not call Teminate +Bool_t kDebugLevel = kTRUE; // activate debugging +Int_t kUseSysInfo = 0; // activate debugging +Bool_t kUseMC = kTRUE; // use MC info +Bool_t kIsMC = kFALSE; // is MC info, if false it overwrites Use(AOD)MC +Bool_t kUseESDTags = kFALSE; // use ESD tags for selection +Bool_t kUseTR = kFALSE; // use track references + +// ### Analysis modules to be included. Some may not be yet fully implemented. +//============================================================================== +Int_t iHMPID = 1; // Basic HMPID analysis task +Int_t iJETAN = 0; // Jet analysis (PWG4) // 1 write standard 2 write non-standard jets +Int_t iJETANLib = 0; +Int_t kHighPtFilterMask = 16; // change depending on the used AOD Filter + + +//============================================================================== +// ### PROOF Steering varibales +//============================================================================== +//== proof setup variables +TString kProofCluster = "alice-caf.cern.ch"; +Bool_t kProofUseAFPAR = kTRUE; // use AF special par file +TString kProofAFversion = "VO_ALICE@AliRoot::v4-20-08-AN"; +//== proof input and output variables +TString kProofDataSet = "/alice/sim/LHC10d2_117220"; +//== proof process variables +Bool_t kProofClearPackages = kFALSE; +Int_t kProofEvents = 10000; +Int_t kProofOffset = 0; + +//============================================================================== +// ### Grid plugin Steering varibiables +//============================================================================== +//== grid plugin setup variables +Bool_t kPluginUse = kTRUE; // do not change +Bool_t kPluginUseProductionMode = kFALSE; // use the plugin in production mode +TString kPluginRootVersion = "v5-30-03"; // *CHANGE ME IF MORE RECENT IN GRID* +TString kPluginAliRootVersion = "v5-02-06-AN"; // *CHANGE ME IF MORE RECENT IN GRID* +Bool_t kPluginMergeViaJDL = kTRUE; // merge via JDL +Bool_t kPluginFastReadOption = kFALSE; // use xrootd flags to reduce timeouts +Bool_t kPluginOverwriteMode = kTRUE; // overwrite existing collections +Int_t kPluginOutputToRunNumber = 1; // write the output to subdirs named after run number +TString kPluginExecutableCommand = "root -b -q"; + +// == grid plugin input and output variables +TString kGridDatadir = "/alice/data/2010/LHC10b"; +TString kGridLocalRunList = ""; +TString kGridWorkDir = "LHC10b/pass3"; // Alien working directory +TString kGridOutdir = ""; // AliEn output directory. If blank will become output_ +TString kGridDataSet = ""; // sub working directory not to confuse different run xmls +Int_t kGridRunRange[2] = {114783, 114783}; // Set the run range +TString kGridRunPattern = "%03d"; // important for leading zeroes!! +TString kGridPassPattern = "/ESDs/pass3"; +//TString kGridPassPattern = "ESDs/pass1"; to work with plugin->AddRunNumber +TString kGridExtraFiles = ""; // files that will be added to the input list in the JDL... +Int_t kGridMaxMergeFiles = 12; // Number of files merged in a chunk grid run range +TString kGridMergeExclude = "AliAOD.root"; // Files that should not be merged +TString kGridOutputStorages = "disk=2"; // Make replicas on the storages +// == grid process variables +Int_t kGridRunsPerMaster = 1; // Number of runs per master job +Int_t kGridFilesPerJob = 100; // Maximum number of files per job (gives size of AOD) + +//============================================================================== +// ### Local Steering variables +//============================================================================== +//== local setup variables +//== local input and output variables +TString kLocalXMLDataset = ""; // Change local xml dataset for local interactive analysis +TString kLocalDataList = "list.txt"; // Change local xml dataset for local interactive analysis +// == local process variables + + + +// Temporaries. +TString anaPars = ""; +TString anaLibs = ""; +TString anaLibsExtra = ""; +TString anaSources = ""; +// Function signatures +class AliAnalysisAlien; + +//______________________________________________________________________________ +void AnalysisTrainHMPID(const char *analysis_mode="local", const char *plugin_mode="", + const char *config_file="",Int_t iOffset = 0) +{ +// Main analysis train macro. If a configuration file is provided, all parameters +// are taken from there but may be altered by CheckModuleFlags. + + if (strlen(config_file) && !LoadConfig(config_file)) return; + + if(iOffset)kProofOffset = iOffset; + TString smode(analysis_mode); + smode.ToUpper(); + // Check compatibility of selected modules + CheckModuleFlags(smode); + + printf("==================================================================\n"); + printf("=========== RUNNING ANALYSIS TRAIN %s IN %s MODE ==========\n", kTrainName.Data(),smode.Data()); + printf("==================================================================\n"); + printf("= Configuring analysis train for: =\n"); + printf("= ESD analysis =\n"); + if (iPhysicsSelection) printf("= Physics selection =\n"); + if (iESDfilter) printf("= ESD filter =\n"); + if (iJETAN) printf("= Jet analysis =\n"); + printf("==================================================================\n"); + printf(":: use MC truth %d\n", (UInt_t)kUseMC); + printf(":: use KINE filter %d\n", (UInt_t)kUseKinefilter); + printf(":: use track refs %d\n", (UInt_t)kUseTR); + printf(":: use tags %d\n", (UInt_t)kUseESDTags); + printf(":: use debugging %d\n", (UInt_t)kDebugLevel); + printf(":: use PAR files %d\n", (UInt_t)kUsePAR); + printf(":: use AliEn plugin %d\n", (UInt_t)kPluginUse); + + //========================================================================== + // Connect to back-end system + if (!Connect(smode)) { + ::Error("AnalysisTrain", "Could not connect to %s back-end", analysis_mode); + return; + } + + // Load common libraries and set include path + if (!LoadCommonLibraries(smode)) { + ::Error("AnalysisTrain", "Could not load common libraries"); + return; + } + + + + // Make the analysis manager and connect event handlers + AliAnalysisManager *mgr = new AliAnalysisManager("HMPIDTrain", "HMPID train"); + if (kCommonOutputFileName.Length()>0)mgr->SetCommonFileName(kCommonOutputFileName.Data()); + mgr->SetNSysInfo(0); + if (!strcmp(plugin_mode, "test")) mgr->SetNSysInfo(1); + if (kUseSysInfo)mgr->SetNSysInfo(kUseSysInfo); + mgr->SetSkipTerminate(kSkipTerminate); + + // Load analysis specific libraries + if (!LoadAnalysisLibraries(smode)) { + ::Error("AnalysisTrain", "Could not load analysis libraries"); + return; + } + + // Create input handler (input container created automatically) + // ESD input handler + AliESDInputHandler *esdHandler = new AliESDInputHandler(); + if (kUseESDTags) esdHandler->SetReadTags(); + esdHandler->SetReadFriends(kFALSE); + mgr->SetInputEventHandler(esdHandler); + + // Monte Carlo handler + if (kUseMC) { + AliMCEventHandler* mcHandler = new AliMCEventHandler(); + mgr->SetMCtruthEventHandler(mcHandler); + mcHandler->SetReadTR(kUseTR); + } + + // AOD output container, created automatically when setting an AOD handler + if (iAODhandler) { + // AOD output handler + AliAODHandler* aodHandler = new AliAODHandler(); + aodHandler->SetOutputFileName("AliAOD.root"); + aodHandler->SetFillAODforRun(kFillAOD); + + mgr->SetOutputEventHandler(aodHandler); + AliAnalysisDataContainer *cout_aod = mgr->GetCommonOutputContainer(); + cout_aod->SetSpecialOutput(); + } + + // Debugging if needed + if (kDebugLevel){ + mgr->SetDebugLevel(3); + } + if(kUseSysInfo>0){ + mgr->RegisterExtraFile("syswatch.root"); + if(kGridMergeExclude.Length())kGridMergeExclude += " "; + kGridMergeExclude += "syswatch.root"; + } else { + AliLog::SetGlobalLogLevel(AliLog::kError); + } + + //========================================================================== + // Create the chain. In this example it is created only from ALIEN files but + // can be done to work in batch or grid mode as well. + TChain *chain = CreateChain(smode, plugin_mode); + + //========================================================================== + // Load the tasks configuration macros for all wagons. These files are supposed now to be + // in the current workdir, but in AliEn they will be in the file catalog, + // mapped from AliRoot and pecified in the jdl input list. + if(iPhysicsSelection){ + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(); // last flag also adds information on + } + + if (iESDfilter) { + // ESD filter task configuration. + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C"); + AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(kUseKinefilter,kUseMuonfilter); + if(kIsMC){ + mgr->RegisterExtraFile("pyxsec_hists.root"); + if(kGridMergeExclude.Length())kGridMergeExclude += " "; + kGridMergeExclude += "pyxsec_hists.root"; + } + } + + // Jet analysis + if (iJETAN) { + gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskJets.C"); + AliAnalysisTaskJets *taskjets = 0; + if (iJETAN&1) taskjets = AddTaskJets(kHighPtFilterMask); + if (!taskjets) ::Warning("AnalysisTrainHMPID", "AliAnalysisTaskJets cannot run for this train conditions - EXCLUDED"); + } + + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); + AliAnalysisTaskPIDResponse *taskPIDResponse = AddTaskPIDResponse(); + + + if(iHMPID){ + gROOT->LoadMacro("$ALICE_ROOT/HMPID/AddTaskHMPID.C"); + AliHMPIDAnalysisTask *taskHmpid = AddTaskHMPID(kUseMC); + taskHmpid->SelectCollisionCandidates(); + if (!taskHmpid) ::Warning("AnalysisTrainHMPID", "AliAnalysisTaskHMPID cannot run for this train conditions - EXCLUDED"); + } + + if (kPluginUse) { + AliAnalysisGrid *alienHandler = CreateAlienHandler(plugin_mode); + AliAnalysisManager::GetAnalysisManager()->SetGridHandler(alienHandler); + } + + if (mgr->InitAnalysis()) { + mgr->PrintStatus(); + if (!strcmp(plugin_mode,"submit") && smode=="GRID"){ + TString alien_workdir = gGrid->GetHomeDirectory(); + alien_workdir += kGridWorkDir.Data(); + if(kGridDataSet.Length()>0)alien_workdir += Form("/%s",kGridDataSet.Data()); + AliAnalysisAlien *gridhandler = (AliAnalysisAlien*)mgr->GetGridHandler(); + printf("=== AnalysisTrainHMPID:: Registering jdl in the work directory alien://%s/%s, should be done by the manager! ===\n", + alien_workdir.Data(),gridhandler->GetGridOutputDir()); + + TString dest; + dest = Form("%s/%s/%s.jdl",alien_workdir.Data(),gridhandler->GetGridOutputDir(),kTrainName.Data()); + if(AliAnalysisAlien::FileExists(dest.Data())){ + // Printf("%s exist on grid removing...",dest.Data()); + // gGrid->Rm(dest.Data()); + } + TFile::Cp(Form("file:%s.jdl",kTrainName.Data()),Form("alien://%s",dest.Data())); + + + TString dest; + dest = Form("%s/%s/%s_merge.jdl",alien_workdir.Data(),gridhandler->GetGridOutputDir(),kTrainName.Data()); + if(AliAnalysisAlien::FileExists(dest.Data())){ + // Printf("%s exist on grid removing...",dest.Data()); + // gGrid->Rm(dest.Data()); + } + TFile::Cp(Form("file:%s_merge.jdl",kTrainName.Data()),Form("alien://%s",dest.Data())); + } + + AliLog::SetGlobalLogLevel(AliLog::kError); + if((kUseSysInfo>0 && smode=="LOCAL") || !strcmp(plugin_mode, "test")){ + TFile *fM = TFile::Open("manager_local.root","RECREATE"); + mgr->Write(); + fM->Close(); + } + + StartAnalysis(smode, chain); + + if((kUseSysInfo>0 && smode=="LOCAL") || !strcmp(plugin_mode, "test")){ + for(int i = 0;i < mgr->GetTopTasks()->GetEntries();i++){ + mgr->ProfileTask(i); + } + } + if (!strcmp(plugin_mode, "offline") && smode=="GRID"){ + // Offline mode path files + // PatchJDL(); + PatchAnalysisMacro(); + } + } +} + + +//______________________________________________________________________________ +void StartAnalysis(const char *mode, TChain *chain) { + + Int_t imode = -1; + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!strcmp(mode, "LOCAL")) imode = 0; + if (!strcmp(mode, "PROOF")) imode = 1; + if (!strcmp(mode, "GRID")) imode = 2; + switch (imode) { + case 0: + if (!chain) { + ::Error("AnalysisTrainHMPID.C::StartAnalysis", "Cannot create the chain"); + return; + } + mgr->StartAnalysis(mode, chain); + return; + case 1: + if (!kProofDataSet.Length()) { + ::Error("AnalysisTrainHMPID.C::StartAnalysis", "kProofDataSet is empty"); + return; + } + mgr->StartAnalysis(mode, kProofDataSet, kProofEvents,kProofOffset); + return; + case 2: + if (kPluginUse) { + if (!mgr->GetGridHandler()) { + ::Error("AnalysisTrainHMPID.C::StartAnalysis", "Grid plugin not initialized"); + return; + } + mgr->StartAnalysis("grid"); + } else { + if (!chain) { + ::Error("AnalysisTrainHMPID.C::StartAnalysis", "Cannot create the chain"); + return; + } + mgr->StartAnalysis(mode, chain); + } + return; + } +} + +//______________________________________________________________________________ +void CheckModuleFlags(const char *mode) { +// Checks selected modules and insure compatibility + Int_t imode = -1; + if (!strcmp(mode, "LOCAL")) imode = 0; + if (!strcmp(mode, "PROOF")) imode = 1; + if (!strcmp(mode, "GRID")) imode = 2; + + + if (kUseCPAR) { + kPluginAliRootVersion = ""; // NO aliroot if we use CPAR + } + + if (imode==1) { + if (!kUsePAR) { + ::Info("AnalysisTrainHMPID.C::CheckModuleFlags", "PAR files enabled due to PROOF analysis"); + kUsePAR = kTRUE; + } + } + if (imode != 2) { + ::Info("AnalysisTrainHMPID.C::CheckModuleFlags", "AliEn plugin disabled since not in GRID mode"); + kPluginUse = kFALSE; + } + + if(!kIsMC){ + // switch off anthin related to MC + kUseMC = 0; + kUseTR = kFALSE; + } + + // ESD analysis + if (!kUseMC){ + kUseTR = kFALSE; + if(kUseKinefilter)::Info("AnalysisTrainHMPID.C::CheckModuleFlags", "Kine Filter disabled in analysis without MC"); + kUseKinefilter = kFALSE; + } + if (iJETAN){ + iESDfilter=1; + } + if (!iESDfilter){ + kUseKinefilter = kFALSE; + kUseMuonfilter = kFALSE; + } + + iJETANLib = iJETAN && 1; + if (iESDfilter) {iAODhandler=1;} + if (kUseKinefilter && !kUseMC) kUseKinefilter = kFALSE; + +} + + +//______________________________________________________________________________ +Bool_t Connect(const char *mode) { +// Connect to the back-end system. + Int_t imode = -1; + if (!strcmp(mode, "LOCAL")) imode = 0; + if (!strcmp(mode, "PROOF")) imode = 1; + if (!strcmp(mode, "GRID")) imode = 2; + TString username = gSystem->Getenv("alien_API_USER"); + switch (imode) { + case 0: + break; + case 1: + if (!username.Length()) { + ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), "Make sure you:\n \ + 1. Have called: alien-token-init \n \ + 2. Have called: >source /tmp/gclient_env_$UID"); + return kFALSE; + } + ::Info("AnalysisTrainHMPID.C::Connect", "Connecting user <%s> to PROOF cluster <%s>", + username.Data(), kProofCluster.Data()); + gEnv->SetValue("XSec.GSI.DelegProxy", "2"); + TProof::Open(Form("%s@%s", username.Data(), kProofCluster.Data())); + if (!gProof) { + if (strcmp(gSystem->Getenv("XrdSecGSISRVNAMES"), "lxfsrd0506.cern.ch")) + ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), "Environment XrdSecGSISRVNAMES different from lxfsrd0506.cern.ch"); + return kFALSE; + } + if(kProofClearPackages)gProof->ClearPackages(); + break; + case 2: + if (!username.Length()) { + ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), "Make sure you:\n \ + 1. Have called: alien-token-init \n \ + 2. Have called: >source /tmp/gclient_env_$UID"); + return kFALSE; + } + if (kPluginUse && !gSystem->Getenv("alien_CLOSE_SE")) { + ::Error(Form("AnalysisTrainHMPID.C::Connect <%s>", mode), + "When using the AliEn plugin it is preferable to define the \ + variable alien_CLOSE_SE in your environment."); + return kFALSE; + } + ::Info("AnalysisTrainHMPID.C::Connect", "Connecting user <%s> to AliEn ...", + username.Data()); + TGrid::Connect("alien://"); + if (!gGrid || !gGrid->IsConnected()) return kFALSE; + break; + default: + ::Error("AnalysisTrainHMPID.C::Connect", "Unknown run mode: %s", mode); + return kFALSE; + } + ::Info("AnalysisTrainHMPID.C::Connect","Connected in %s mode", mode); + return kTRUE; +} + + +//______________________________________________________________________________ +Bool_t LoadCommonLibraries(const char *mode) +{ +// Load common analysis libraries. + Int_t imode = -1; + if (!strcmp(mode, "LOCAL")) imode = 0; + if (!strcmp(mode, "PROOF")) imode = 1; + if (!strcmp(mode, "GRID")) imode = 2; + if (!gSystem->Getenv("ALICE_ROOT")) { + ::Error("AnalysisTrainHMPID.C::LoadCommonLibraries", "Analysis train requires that analysis libraries are compiled with a local AliRoot"); + return kFALSE; + } + Bool_t success = kTRUE; + // ROOT libraries + gSystem->Load("libTree.so"); + gSystem->Load("libGeom.so"); + gSystem->Load("libVMC.so"); + gSystem->Load("libPhysics.so"); + + // Load framework classes. Par option ignored here. + switch (imode) { + case 0: + case 2: + if (kUseCPAR) { + success &= LoadLibrary("STEERBase", mode, kTRUE); + success &= LoadLibrary("ESD", mode, kTRUE); + success &= LoadLibrary("AOD", mode, kTRUE); + success &= LoadLibrary("ANALYSIS", mode, kTRUE); + success &= LoadLibrary("ANALYSISalice", mode, kTRUE); + success &= LoadLibrary("CORRFW", mode, kTRUE); + } else { + success &= LoadLibrary("libSTEERBase.so", mode); + success &= LoadLibrary("libESD.so", mode); + success &= LoadLibrary("libAOD.so", mode); + success &= LoadLibrary("libANALYSIS.so", mode); + success &= LoadLibrary("libANALYSISalice.so", mode); + success &= LoadLibrary("libCORRFW.so", mode); + gROOT->ProcessLine(".include $ALICE_ROOT/include"); + } + break; + case 1: + if (!kProofUseAFPAR) { + success &= LoadLibrary("STEERBase", mode); + success &= LoadLibrary("ESD", mode); + success &= LoadLibrary("AOD", mode); + success &= LoadLibrary("ANALYSIS", mode); + success &= LoadLibrary("ANALYSISalice", mode); + success &= LoadLibrary("CORRFW", mode); + } else { + success &= !gProof->EnablePackage(kProofAFversion); + success &= LoadLibrary("CORRFW", mode); + } + break; + default: + ::Error("AnalysisTrainHMPID.C::LoadCommonLibraries", "Unknown run mode: %s", mode); + return kFALSE; + } + if (success) { + ::Info("AnalysisTrainHMPID.C::LoadCommodLibraries", "Load common libraries: SUCCESS"); + ::Info("AnalysisTrainHMPID.C::LoadCommodLibraries", "Include path for Aclic compilation:\n%s", + gSystem->GetIncludePath()); + } else { + ::Info("AnalysisTrainHMPID.C::LoadCommodLibraries", "Load common libraries: FAILED"); + } + + return success; +} + + +//______________________________________________________________________________ +Bool_t LoadAnalysisLibraries(const char *mode) +{ +// Load common analysis libraries. + Bool_t success = kTRUE; + if (iESDfilter) { + if (!LoadLibrary("PWG3base", mode, kTRUE) || + !LoadLibrary("PWG3muon", mode, kTRUE)) return kFALSE; + } + + if(iHMPID){ + if (!LoadSource(Form("%s/AliHMPIDAnalysisTask.cxx",gSystem->ExpandPathName(".")), mode, kTRUE))return kFALSE; + } + + if (iJETANLib) { + if (!LoadLibrary("JETAN", mode, kTRUE)) return kFALSE; + } + + ::Info("AnalysisTrainHMPID.C::LoadAnalysisLibraries", "Load other libraries: SUCCESS"); + return kTRUE; +} + + +//______________________________________________________________________________ +Bool_t LoadLibrary(const char *module, const char *mode, Bool_t rec=kFALSE) +{ +// Load a module library in a given mode. Reports success. + Int_t imode = -1; + Int_t result; + TString smodule(module); + if (!strcmp(mode, "LOCAL")) imode = 0; + if (!strcmp(mode, "PROOF")) imode = 1; + if (!strcmp(mode, "GRID")) imode = 2; + TString mod(module); + if (!mod.Length()) { + ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Empty module name"); + return kFALSE; + } + // If a library is specified, just load it + if (smodule.EndsWith(".so")) { + mod.Remove(mod.Index(".so")); + result = gSystem->Load(mod); + if (result < 0) { + ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Could not load library %s", module); + return kFALSE; + } + if (rec) anaLibs += Form("%s.so ",mod.Data()); + if (rec) anaLibsExtra += Form("%s.so ",mod.Data()); + return kTRUE; + } + // Check if the library is already loaded + if (strlen(gSystem->GetLibraries(Form("%s.so", module), "", kFALSE)) > 0) + return kTRUE; + switch (imode) { + case 0: + case 2: + if (kUsePAR) { + result = SetupPar(module); + if (rec) anaPars += Form("%s.par ", module); + } else { + result = gSystem->Load(Form("lib%s.so", module)); + if (rec) anaLibs += Form("lib%s.so ", module); + } + break; + case 1: + if(!gSystem->AccessPathName(module)){ + ::Info("AnalysisTrainHMPID.C::LoadLibrary", "Removing directory %s",module); + gSystem->Exec(Form("rm -rf %s",module)); + } + result = gProof->UploadPackage(module); + if (result<0) { + result = gProof->UploadPackage(gSystem->ExpandPathName(Form("$ALICE_ROOT/%s.par", module))); + if (result<0) { + ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Could not find module %s.par in current directory nor in $ALICE_ROOT", module); + return kFALSE; + } + } + result = gProof->EnablePackage(module); + break; + default: + return kFALSE; + } + if (result < 0) { + ::Error("AnalysisTrainHMPID.C::LoadLibrary", "Could not load module %s", module); + return kFALSE; + } + return kTRUE; +} + +//______________________________________________________________________________ +Bool_t LoadSource(const char *source, const char *mode, Bool_t rec=kFALSE) +{ +// Load a module library in a given mode. Reports success. + Int_t imode = -1; + Int_t result = -1; + if (!strcmp(mode, "LOCAL")) imode = 0; + if (!strcmp(mode, "PROOF")) imode = 1; + if (!strcmp(mode, "GRID")) imode = 2; + TString ssource(source); + TString basename = gSystem->BaseName(ssource.Data()); + if (!ssource.Length()) { + ::Error("AnalysisTrainHMPID.C::LoadSource", "Empty task name"); + return kFALSE; + } + // we have a source code so compile it + if (ssource.EndsWith(".cxx")) { + // need to copy it here other wise the path is also used on grid... + ssource.Remove(ssource.Index(".cxx")); + basename.Remove(basename.Index(".cxx")); + Printf("LoadSources:: Copying... path %s{cxx,h}",ssource.Data()); + gSystem->Exec(Form("cp %s.cxx . ",ssource.Data())); + gSystem->Exec(Form("cp %s.h . ",ssource.Data())); + // Path to code + // only needed for local compilation, in grid and proof mode + // the task headers are uploaded + // path.Remove(path.Index(gSystem->BaseName(path.Data()))); + // Printf("LoadSources:: Including path %s",path.Data()); + // if(path.Length()>0)gROOT->ProcessLine(Form(".include %s",path.Data())); + Printf("LoadSources:: Loading... path %s",basename.Data()); + switch (imode) { + case 0: + result = gROOT->LoadMacro(Form("%s.cxx++g",basename.Data())); + break; + case 1: + result = gProof->Load(Form("%s.cxx++g",basename.Data())); + break; + case 2: + result = gROOT->LoadMacro(Form("%s.cxx++g",basename.Data())); + if (rec){ + // what we want to compile + anaSources += Form("%s.cxx ",basename.Data()); + // what we need as input... + anaLibs += Form("%s.cxx %s.h ",basename.Data(),basename.Data()); + } + break; + default: + return kFALSE; + } + } + if (result < 0) { + ::Error("AnalysisTrainHMPID.C::LoadSources", "Could not load source %s", source); + return kFALSE; + } + return kTRUE; +} + +//______________________________________________________________________________ +TChain *CreateChain(const char *mode, const char *plugin_mode) +{ +// Create the input chain + Int_t imode = -1; + if (!strcmp(mode, "LOCAL")) imode = 0; + if (!strcmp(mode, "PROOF")) imode = 1; + if (!strcmp(mode, "GRID")) imode = 2; + TChain *chain = NULL; + // Local chain + switch (imode) { + case 0: + if (!kLocalXMLDataset.Length()) { + // Local ESD + chain = new TChain("esdTree"); + TString line; + ifstream in; + in.open(kLocalDataList.Data()); + while (in.good()) { + in >> line; + if (line.Length() == 0) continue; + cout << " line = " << line << endl; + chain->Add(line.Data()); + } + } else { + // Interactive ESD + chain = CreateChainSingle(kLocalXMLDataset, "esdTree"); + } + break; + case 1: + break; + case 2: + if (kPluginUse) { + AliAnalysisGrid *alienHandler = CreateAlienHandler(plugin_mode); + AliAnalysisManager::GetAnalysisManager()->SetGridHandler(alienHandler); + } else { + TString treeName = "esdTree"; + chain = CreateChainSingle("wn.xml", treeName); + } + break; + default: + } + if (chain && chain->GetNtrees()) return chain; + return NULL; +} + +//______________________________________________________________________________ +TChain* CreateChainSingle(const char* xmlfile, const char *treeName) +{ + printf("*******************************\n"); + printf("*** Getting the ESD Chain ***\n"); + printf("*******************************\n"); + TAlienCollection * myCollection = TAlienCollection::Open(xmlfile); + + if (!myCollection) { + ::Error("AnalysisTrainHMPID.C::CreateChainSingle", "Cannot create an AliEn collection from %s", xmlfile) ; + return NULL ; + } + + TChain* chain = new TChain(treeName); + myCollection->Reset() ; + while ( myCollection->Next() ) chain->Add(myCollection->GetTURL("")) ; + chain->ls(); + return chain; +} + +//______________________________________________________________________________ +Int_t SetupPar(char* pararchivename) +{ + if (!pararchivename || !strlen(pararchivename)) return -1; + char processline[1024]; + if (gSystem->AccessPathName(Form("%s.par", pararchivename))) { + if (!gSystem->AccessPathName(Form("%s/%s.par", gSystem->Getenv("ALICE_ROOT"),pararchivename))) { + ::Info("AnalysisTrainHMPID.C::SetupPar", "Getting %s.par from $ALICE_ROOT", pararchivename); + TFile::Cp(gSystem->ExpandPathName(Form("$ALICE_ROOT/%s.par", pararchivename)), + Form("%s.par",pararchivename)); + } else { + ::Error("AnalysisTrainHMPID.C::SetupPar", "Cannot find %s.par", pararchivename); + return -1; + } + } + gSystem->Exec(Form("tar xvzf %s.par", pararchivename)); + + TString ocwd = gSystem->WorkingDirectory(); + if (!gSystem->ChangeDirectory(pararchivename)) return -1; + + // check for BUILD.sh and execute + if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { + printf("*******************************\n"); + printf("*** Building PAR archive ***\n"); + printf("*******************************\n"); + if (gSystem->Exec("PROOF-INF/BUILD.sh")) { + Error("runProcess","Cannot Build the PAR Archive! - Abort!"); + return -1; + } + } + + // check for SETUP.C and execute + if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { + printf("*******************************\n"); + printf("*** Setup PAR archive ***\n"); + printf("*******************************\n"); + gROOT->Macro("PROOF-INF/SETUP.C"); + } + if (!gSystem->ChangeDirectory(ocwd.Data())) return -1; + return 0; +} + +//______________________________________________________________________________ +AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode) +{ +// Check if user has a valid token, otherwise make one. This has limitations. +// One can always follow the standard procedure of calling alien-token-init then +// source /tmp/gclient_env_$UID in the current shell. + if (!AliAnalysisGrid::CreateToken()) return NULL; + AliAnalysisAlien *plugin = new AliAnalysisAlien(); +// Set the run mode (can be "full", "test", "offline", "submit" or "terminate") + plugin->SetRunMode(plugin_mode); + if (kPluginUseProductionMode) plugin->SetProductionMode(); + plugin->SetJobTag(kJobTag); + plugin->SetNtestFiles(1); +// plugin->SetPreferedSE("ALICE::NIHAM::File"); +// Set versions of used packages + plugin->SetAPIVersion("V1.1x"); + plugin->SetROOTVersion(kPluginRootVersion); + plugin->SetAliROOTVersion(kPluginAliRootVersion); + +// Declare input data to be processed. +// Method 1: Create automatically XML collections using alien 'find' command. +// Define production directory LFN + plugin->SetGridDataDir(kGridDatadir.Data()); +// Set data search pattern + plugin->SetDataPattern(Form(" %s/*/*ESDs.root",kGridPassPattern.Data())); +// ...then add run numbers to be considered + plugin->SetRunPrefix("000"); + plugin->SetRunRange(kGridRunRange[0], kGridRunRange[1]); + + if(kGridLocalRunList.Length()>0){ + ifstream in1; + in1.open(kGridLocalRunList.Data()); + int iRun; + // just use run numbers, negatives will be excluded + while(in1>>iRun){ + if(iRun>0){ + Printf("AnalysisTrainHMPID Adding run number from File %s", Form(kGridRunPattern.Data(),iRun)); + plugin->AddRunNumber(Form(kGridRunPattern.Data(),iRun)); + } else{ + Printf("AnalysisTrainHMPID Skipping run number from File %d", iRun); + } + } + } + +// Method 2: Declare existing data files (raw collections, xml collections, root file) +// If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir()) +// XML collections added via this method can be combined with the first method if +// the content is compatible (using or not tags) +// plugin->AddDataFile("137431.xml"); +// plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root"); +// Define alien work directory where all files will be copied. Relative to alien $HOME. + TString alien_workdir = ""; + + alien_workdir += kGridWorkDir.Data(); + if(kGridDataSet.Length()>0)alien_workdir += Form("/%s",kGridDataSet.Data()); + plugin->SetGridWorkingDir(alien_workdir.Data()); + + // Declare alien output directory. Relative to working directory. + if (!kGridOutdir.Length()) kGridOutdir = Form("output_%s",kTrainName.Data()); + plugin->SetGridOutputDir(kGridOutdir); + + // set extra libs before par file compilation + anaLibs += kGridExtraFiles; + anaLibs = anaLibs.Strip(); + Printf("anaLibs %s",anaLibs.Data()); + Printf("anaLibsExtra %s",anaLibsExtra.Data()); + + if (anaLibs.Length()) plugin->SetAdditionalLibs(anaLibs.Data()); + if (anaLibsExtra.Length()) plugin->SetAdditionalRootLibs(anaLibsExtra.Data()); + + TString ana_sources = ""; + TString ana_add = ""; + if (kUsePAR && anaPars.Length()) { + printf("%s\n", anaPars.Data()); + TObjArray *arr; + TObjString *objstr; + arr = anaPars.Tokenize(" "); + TIter next(arr); + while ((objstr=(TObjString*)next())) plugin->EnablePackage(objstr->GetString()); + delete arr; + } + +// Declare the analysis source files names separated by blancs. To be compiled runtime +// using ACLiC on the worker nodes. + ana_sources = anaSources.Strip(); +// Declare all libraries (other than the default ones for the framework. These will be +// loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here. + + if (ana_sources.Length()) plugin->SetAnalysisSource(ana_sources); + plugin->SetExecutableCommand(kPluginExecutableCommand.Data()); + // Declare the output file names separated by blancs. + // (can be like: file.root or file.root@ALICE::Niham::File) + plugin->SetUseSubmitPolicy(kFALSE); + plugin->SetMergeExcludes(kGridMergeExclude); + plugin->SetMaxMergeFiles(kGridMaxMergeFiles); + plugin->SetNrunsPerMaster(kGridRunsPerMaster); + plugin->SetMergeViaJDL(kPluginMergeViaJDL); + // Use fastread option + plugin->SetFastReadOption(kPluginFastReadOption); + // UseOverwrite mode + plugin->SetOverwriteMode(kPluginOverwriteMode); + // Optionally define the files to be archived. + // plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:AliAOD.root,AOD.tag.root@ALICE::NIHAM::File"); + plugin->SetOutputToRunNo(kPluginOutputToRunNumber); // write the output to subdirs named after run number +// plugin->SetDefaultOutputs(kFALSE); + + // Put default output files to archive + TString listhists = ""; + TString listaods = ""; + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + TIter next(mgr->GetOutputs()); + AliAnalysisDataContainer *output; + while ((output=(AliAnalysisDataContainer*)next())) { + const char *filename = output->GetFileName(); + if (!(strcmp(filename, "default"))) { + if (!mgr->GetOutputEventHandler()) continue; + filename = mgr->GetOutputEventHandler()->GetOutputFileName(); + if (listaods.Length()) listaods += " "; + listaods += filename; + } else { + if(!listhists.Contains(filename)){ + if (listhists.Length()) listhists += " "; + listhists += filename; + } + } + } + + if (mgr->GetExtraFiles().Length()) { + if (listaods.Length()) listaods += " "; + listaods += mgr->GetExtraFiles(); + } + + TString outputArchive; + outputArchive = Form("log_archive.zip:std*r@%s",kGridOutputStorages.Data()); + listaods.ReplaceAll(" ", ","); + listhists.ReplaceAll(" ", ","); + if (listhists.Length()) listhists = Form("hist_archive.zip:%s@%s", listhists.Data(), kGridOutputStorages.Data()); + if (listaods.Length()) listaods = Form("aod_archive.zip:%s@%s", listaods.Data(), kGridOutputStorages.Data()); + + if (!listhists.Length() && !listaods.Length()) { + ::Fatal("AnalysisTrainHMPID", "No task output !"); + } + + if (listaods.Length()) { + outputArchive += " "; + outputArchive += listaods; + } + if (listhists.Length()) { + outputArchive += " "; + outputArchive += listhists; + } +// plugin->SetOutputArchive(outputArchive); + +// Optionally set a name for the generated analysis macro (default MyAnalysis.C) + plugin->SetAnalysisMacro(Form("%s.C", kTrainName.Data())); +// Optionally set maximum number of input files/subjob (default 100, put 0 to ignore) + plugin->SetSplitMaxInputFileNumber(kGridFilesPerJob); +// Optionally set number of failed jobs that will trigger killing waiting sub-jobs. +// plugin->SetMaxInitFailed(5); +// Optionally resubmit threshold. +// plugin->SetMasterResubmitThreshold(90); +// Optionally set time to live (default 30000 sec) + plugin->SetTTL(30000); +// Optionally set input format (default xml-single) + plugin->SetInputFormat("xml-single"); +// Optionally modify the name of the generated JDL (default analysis.jdl) + plugin->SetJDLName(Form("%s.jdl", kTrainName.Data())); +// Optionally modify the executable name (default analysis.sh) + plugin->SetExecutable(Form("%s.sh", kTrainName.Data())); +// Optionally modify job price (default 1) + plugin->SetPrice(1); +// Optionally modify split mode (default 'se') + plugin->SetSplitMode("se"); + plugin->SetCheckCopy(kFALSE); + return plugin; +} + +//______________________________________________________________________________ +Bool_t LoadConfig(const char *filename) +{ +// Read train configuration from file + if (gSystem->AccessPathName(filename)) { + ::Error("AnalysisTrainHMPID.C::LoadConfig", "Config file name not found"); + return kFALSE; + } + gROOT->ProcessLine(Form(".x %s", filename)); + ::Info("AnalysisTrainHMPID.C::LoadConfig", "Train configuration loaded from file %s", filename); + return kTRUE; +} + +//______________________________________________________________________________ +Bool_t PatchJDL(){ + Printf(">>> Patching JDL"); + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + AliAnalysisAlien* gridHandler = (AliAnalysisAlien*)mgr->GetGridHandler(); + TGridJDL *jdl = gridHandler->GetGridJDL(); + if(iJETAN)jdl->AddToPackages("fastjet","v2.4.0"); + gridHandler->WriteJDL(kFALSE); + Printf("<<< Patching JDL"); + return kTRUE; +} + +//______________________________________________________________________________ +Bool_t PatchAnalysisMacro(){ + Printf(">>> Patching AnalysisMacro"); + gSystem->Exec(Form("mv %s.C %s.C_tmp",kTrainName.Data(),kTrainName.Data())); + + ifstream in1; + in1.open(Form("%s.C_tmp", kTrainName.Data())); + char cLine[250]; + TString st; + while(in1.getline(cLine,250)){ + st += cLine; + st += "\n"; + } + Int_t index= -1; + index = st.Index("gSystem->Load(\"libPhysics\");"); + index += strlen("gSystem->Load(\"libPhysics\");"); + /* + TObjArray *arr; + TObjString *objstr; + arr = anaLibs.Tokenize(" "); + TIter next(arr); + + add += "\n\n // added by CKB \n"; + while ((objstr=(TObjString*)next())){ + if(objstr->GetString().Contains("PWG3"))continue; + if(objstr->GetString().EndsWith(".so"))add += Form("gSystem->Load(\"%s\");\n",objstr->GetString().Data()); + } + delete arr; + */ + // add += Form("AliLog::SetGlobalLogLevel(%d);\n",AliLog::GetGlobalLogLevel()); + TString add = ""; + + if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); + add += "\n\n // added by CKB \n"; + add += "\n gSystem->AddIncludePath(\"./\"); \n"; + if(gGrid && kPluginAliRootVersion.Length()==0){ + add += "\n // Dirty hack for TRD reference data \n"; + add += "\n gSystem->Setenv(\"ALICE_ROOT\",\""; + add += Form("alien://%s/rootfiles/",gGrid->GetHomeDirectory()); + add += "\"); \n"; + } + add += "// BKC \n\n"; + st.Insert(index,add.Data()); + + if(kUseCPAR && kPluginAliRootVersion.Length()==0){ + index = st.Index("gSystem->AddIncludePath(\"-I$"); // uncommen $ALICE_ROOT include for par files + if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); + st.Insert(index,"// CKB comment out whehn no aliroot is provided \n //"); + } + + ofstream out; + out.open(Form("%s.C", kTrainName.Data())); + if (out.bad()) { + return kFALSE; + } + out << st << endl; + Printf("<<< Patching AnalysisMacro"); + + Printf(">>> Patching Merge Macro"); + gSystem->Exec(Form("mv %s_merge.C %s_merge.C_tmp",kTrainName.Data(),kTrainName.Data())); + + ifstream in2; + in2.open(Form("%s_merge.C_tmp", kTrainName.Data())); + TString st2; + while(in2.getline(cLine,250)){ + st2 += cLine; + st2 += "\n"; + } + index = st2.Index("gSystem->Load(\"libPhysics\");"); + index += strlen("gSystem->Load(\"libPhysics\");"); + TString add2 = ""; + add2 += "\n gSystem->AddIncludePath(\"./\"); \n"; + if(gGrid&&kPluginAliRootVersion.Length()==0){ + add2 += "\n // Dirty hack for TRD reference data \n"; + add2 += "\n gSystem->Setenv(\"ALICE_ROOT\",\""; + add2 += Form("alien://%s/rootfiles/",gGrid->GetHomeDirectory()); + add2 += "\"); \n"; + } + add2 += "// BKC \n\n"; + if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); + st2.Insert(index,add.Data()); + + if(kUseCPAR&&kPluginAliRootVersion.Length()==0){ + index = st2.Index("gSystem->AddIncludePath(\"-I$"); // uncommen $ALICE_ROOT include for par files + if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); + st2.Insert(index,"// CKB comment out whehn no aliroot is provided \n //"); + } + + // do not exclude the extra files from merign, this is done explicitly in this train script + index = st2.Index("mergeExcludes +="); // uncommen $ALICE_ROOT include for par files + if(index<0)Printf("%s:%d index out of bounds",(char*)__FILE__,__LINE__); + st2.Insert(index,"// CKB comment out, handled explicitly by the train macro \n //"); + + + ofstream out2; + out2.open(Form("%s_merge.C", kTrainName.Data())); + if (out2.bad()) { + return kFALSE; + } + out2 << st2 << endl; + Printf("<<< Patching Merging Macro"); + + + return kTRUE; + +} diff --git a/PWGLF/SPECTRA/PiKaPr/TPCTOF/AddTaskCombinedHadronSpectra.C b/PWGLF/SPECTRA/PiKaPr/TPCTOF/AddTaskCombinedHadronSpectra.C index 92ca196d62a..b9e444fe5e4 100644 --- a/PWGLF/SPECTRA/PiKaPr/TPCTOF/AddTaskCombinedHadronSpectra.C +++ b/PWGLF/SPECTRA/PiKaPr/TPCTOF/AddTaskCombinedHadronSpectra.C @@ -1,87 +1,87 @@ - - -AliAnalysisTask *AddTaskCombinedHadronSpectra(Int_t identifier = 0, Bool_t isMC = kFALSE, Bool_t isTPConly = kFALSE, Bool_t writeOwnFile = kFALSE, Bool_t saveMotherPDG = kFALSE, Bool_t useEvenDcaBinning = kFALSE, Bool_t smallTHnSparse = kFALSE, Double_t nSigmaTPCLow= -3., Double_t nSigmaTPCHigh = 3., Double_t rapidityLow = -0.2, Double_t rapidityHigh = 0.2, Bool_t setTrackCuts = kFALSE, AliESDtrackCuts *ESDtrackCuts = 0){ - - - //get the current analysis manager - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - Error("AddTask_janielsk_CombinedHadron", "No analysis manager found."); - return 0; - } - //============= Set Task Name =================== - TString taskName=("AliAnalysisCombinedHadronSpectra.cxx+g"); - //=============================================== - // Load the task - gROOT->LoadMacro(taskName.Data()); - - - - //========= Add task to the ANALYSIS manager ===== - - //normal tracks - AliAnalysisCombinedHadronSpectra *task = new AliAnalysisCombinedHadronSpectra("janielskTaskCombinedHadron"); - task->SelectCollisionCandidates(AliVEvent::kMB); - - //switches - if (isMC) task->SetIsMCtrue(isMC); - if (isTPConly)task->SetUseTPConlyTracks(isTPConly); - if (saveMotherPDG) task->SetSaveMotherPDG(saveMotherPDG); - if (useEvenDcaBinning) task->SetEvenDCAbinning(kTRUE); - if (smallTHnSparse){ - task->SetSmallTHnSparse(kTRUE); - task->SetTPCnSigmaCuts(nSigmaTPCLow,nSigmaTPCHigh); - task->SetRapidityCuts(rapidityLow,rapidityHigh); - } - - //initialize task - task->Initialize(); - - //esd cuts need to be set after initialize or cuts will be replaced by standard cuts in initialize - if (setTrackCuts) task->SetESDtrackCuts(ESDtrackCuts); - - //add task to manager - mgr->AddTask(task); - - - - - //================================================ - // data containers - //================================================ - // find input container - //below the trunk version - AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); - -/* - //dumm output container - AliAnalysisDataContainer *coutput0 = - mgr->CreateContainer(Form("akalweit_tree%i",identifier), - TTree::Class(), - AliAnalysisManager::kExchangeContainer, - Form("akalweit_default%i",identifier)); - - - //define output containers, please use 'username'_'somename' - AliAnalysisDataContainer *coutput1 = - mgr->CreateContainer(Form("akalweit_CombinedHadron%i",identifier), TList::Class(), - AliAnalysisManager::kOutputContainer,Form("akalweit_CombinedHadron%i.root",identifier)); -*/ - if (!writeOwnFile) { - AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(Form("janielsk_CombinedHadron%i",identifier), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:janielsk_CombinedHadron", AliAnalysisManager::GetCommonFileName())); - } - else { - AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(Form("janielsk_CombinedHadron%i",identifier), TList::Class(), AliAnalysisManager::kOutputContainer, Form("janielsk_CombinedHadron.root")); - } - - - - //connect containers - - // - mgr->ConnectInput (task, 0, cinput ); - //mgr->ConnectOutput (task, 0, coutput0); - mgr->ConnectOutput (task, 1, coutput1); - - return task; -} + + +AliAnalysisTask *AddTaskCombinedHadronSpectra(Int_t identifier = 0, Bool_t isMC = kFALSE, Bool_t isTPConly = kFALSE, Bool_t writeOwnFile = kFALSE, Bool_t saveMotherPDG = kFALSE, Bool_t useEvenDcaBinning = kFALSE, Bool_t smallTHnSparse = kFALSE, Double_t nSigmaTPCLow= -3., Double_t nSigmaTPCHigh = 3., Double_t rapidityLow = -0.2, Double_t rapidityHigh = 0.2, Bool_t setTrackCuts = kFALSE, AliESDtrackCuts *ESDtrackCuts = 0){ + + + //get the current analysis manager + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + Error("AddTask_janielsk_CombinedHadron", "No analysis manager found."); + return 0; + } + //============= Set Task Name =================== + TString taskName=("AliAnalysisCombinedHadronSpectra.cxx+g"); + //=============================================== + // Load the task + gROOT->LoadMacro(taskName.Data()); + + + + //========= Add task to the ANALYSIS manager ===== + + //normal tracks + AliAnalysisCombinedHadronSpectra *task = new AliAnalysisCombinedHadronSpectra("janielskTaskCombinedHadron"); + task->SelectCollisionCandidates(AliVEvent::kMB); + + //switches + if (isMC) task->SetIsMCtrue(isMC); + if (isTPConly)task->SetUseTPConlyTracks(isTPConly); + if (saveMotherPDG) task->SetSaveMotherPDG(saveMotherPDG); + if (useEvenDcaBinning) task->SetEvenDCAbinning(kTRUE); + if (smallTHnSparse){ + task->SetSmallTHnSparse(kTRUE); + task->SetTPCnSigmaCuts(nSigmaTPCLow,nSigmaTPCHigh); + task->SetRapidityCuts(rapidityLow,rapidityHigh); + } + + //initialize task + task->Initialize(); + + //esd cuts need to be set after initialize or cuts will be replaced by standard cuts in initialize + if (setTrackCuts) task->SetESDtrackCuts(ESDtrackCuts); + + //add task to manager + mgr->AddTask(task); + + + + + //================================================ + // data containers + //================================================ + // find input container + //below the trunk version + AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); + +/* + //dumm output container + AliAnalysisDataContainer *coutput0 = + mgr->CreateContainer(Form("akalweit_tree%i",identifier), + TTree::Class(), + AliAnalysisManager::kExchangeContainer, + Form("akalweit_default%i",identifier)); + + + //define output containers, please use 'username'_'somename' + AliAnalysisDataContainer *coutput1 = + mgr->CreateContainer(Form("akalweit_CombinedHadron%i",identifier), TList::Class(), + AliAnalysisManager::kOutputContainer,Form("akalweit_CombinedHadron%i.root",identifier)); +*/ + if (!writeOwnFile) { + AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(Form("janielsk_CombinedHadron%i",identifier), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:janielsk_CombinedHadron", AliAnalysisManager::GetCommonFileName())); + } + else { + AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(Form("janielsk_CombinedHadron%i",identifier), TList::Class(), AliAnalysisManager::kOutputContainer, Form("janielsk_CombinedHadron.root")); + } + + + + //connect containers + + // + mgr->ConnectInput (task, 0, cinput ); + //mgr->ConnectOutput (task, 0, coutput0); + mgr->ConnectOutput (task, 1, coutput1); + + return task; +} diff --git a/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAOD.h b/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAOD.h index 8d7c91b9fb5..9d88497f403 100644 --- a/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAOD.h +++ b/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAOD.h @@ -1,69 +1,69 @@ -#ifndef ALIANALYSISTASKSPECTRAAOD_H -#define ALIANALYSISTASKSPECTRAAOD_H - -/* See cxx source for full Copyright notice */ - -//------------------------------------------------------------------------- -// AliAnalysisTaskSpectraAOD -// -// -// -// -// Author: Michele Floris, CERN -//------------------------------------------------------------------------- - -class TH1F; -class TH2F; -class AliAODEvent; -class AliSpectraAODHistoManager; -class AliSpectraAODTrackCuts; -class AliSpectraAODEventCuts; -class AliSpectraAODPID; -#include "AliSpectraAODHistoManager.h" -#include "AliAnalysisTaskSE.h" - - -class AliAnalysisTaskSpectraAOD : public AliAnalysisTaskSE -{ -public: - - // constructors - AliAnalysisTaskSpectraAOD() : AliAnalysisTaskSE(), fAOD(0), fHistMan(0), fTrackCuts(0), fEventCuts(0), fPID(0), fIsMC(0), fNRebin(0) - {} - AliAnalysisTaskSpectraAOD(const char *name); - virtual ~AliAnalysisTaskSpectraAOD() {} - - void SetIsMC(Bool_t isMC = kFALSE) {fIsMC = isMC; }; - Bool_t GetIsMC() const { return fIsMC;}; - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - AliSpectraAODHistoManager * GetHistoManager() { return fHistMan; } - AliSpectraAODTrackCuts * GetTrackCuts() { return fTrackCuts; } - AliSpectraAODEventCuts * GetEventCuts() { return fEventCuts; } - AliSpectraAODPID * GetPID() { return fPID; } - - void SetTrackCuts(AliSpectraAODTrackCuts * tc) { fTrackCuts = tc; } - void SetEventCuts(AliSpectraAODEventCuts * vc) { fEventCuts = vc; } - void SetPID (AliSpectraAODPID * pid) { fPID = pid; } - void SetNRebin(Int_t nreb){fNRebin=nreb;} - Int_t GetNRebin() {return fNRebin;} - -private: - - AliAODEvent * fAOD; //! AOD object - AliSpectraAODHistoManager * fHistMan; // Histogram Manager - AliSpectraAODTrackCuts * fTrackCuts; // Track Cuts - AliSpectraAODEventCuts * fEventCuts; // Event Cuts - AliSpectraAODPID * fPID;// PID class - Bool_t fIsMC;// true if processing MC - Int_t fNRebin; //rebin of histos - AliAnalysisTaskSpectraAOD(const AliAnalysisTaskSpectraAOD&); - AliAnalysisTaskSpectraAOD& operator=(const AliAnalysisTaskSpectraAOD&); - - ClassDef(AliAnalysisTaskSpectraAOD, 1); -}; - -#endif +#ifndef ALIANALYSISTASKSPECTRAAOD_H +#define ALIANALYSISTASKSPECTRAAOD_H + +/* See cxx source for full Copyright notice */ + +//------------------------------------------------------------------------- +// AliAnalysisTaskSpectraAOD +// +// +// +// +// Author: Michele Floris, CERN +//------------------------------------------------------------------------- + +class TH1F; +class TH2F; +class AliAODEvent; +class AliSpectraAODHistoManager; +class AliSpectraAODTrackCuts; +class AliSpectraAODEventCuts; +class AliSpectraAODPID; +#include "AliSpectraAODHistoManager.h" +#include "AliAnalysisTaskSE.h" + + +class AliAnalysisTaskSpectraAOD : public AliAnalysisTaskSE +{ +public: + + // constructors + AliAnalysisTaskSpectraAOD() : AliAnalysisTaskSE(), fAOD(0), fHistMan(0), fTrackCuts(0), fEventCuts(0), fPID(0), fIsMC(0), fNRebin(0) + {} + AliAnalysisTaskSpectraAOD(const char *name); + virtual ~AliAnalysisTaskSpectraAOD() {} + + void SetIsMC(Bool_t isMC = kFALSE) {fIsMC = isMC; }; + Bool_t GetIsMC() const { return fIsMC;}; + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + AliSpectraAODHistoManager * GetHistoManager() { return fHistMan; } + AliSpectraAODTrackCuts * GetTrackCuts() { return fTrackCuts; } + AliSpectraAODEventCuts * GetEventCuts() { return fEventCuts; } + AliSpectraAODPID * GetPID() { return fPID; } + + void SetTrackCuts(AliSpectraAODTrackCuts * tc) { fTrackCuts = tc; } + void SetEventCuts(AliSpectraAODEventCuts * vc) { fEventCuts = vc; } + void SetPID (AliSpectraAODPID * pid) { fPID = pid; } + void SetNRebin(Int_t nreb){fNRebin=nreb;} + Int_t GetNRebin() {return fNRebin;} + +private: + + AliAODEvent * fAOD; //! AOD object + AliSpectraAODHistoManager * fHistMan; // Histogram Manager + AliSpectraAODTrackCuts * fTrackCuts; // Track Cuts + AliSpectraAODEventCuts * fEventCuts; // Event Cuts + AliSpectraAODPID * fPID;// PID class + Bool_t fIsMC;// true if processing MC + Int_t fNRebin; //rebin of histos + AliAnalysisTaskSpectraAOD(const AliAnalysisTaskSpectraAOD&); + AliAnalysisTaskSpectraAOD& operator=(const AliAnalysisTaskSpectraAOD&); + + ClassDef(AliAnalysisTaskSpectraAOD, 1); +}; + +#endif diff --git a/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraBoth.h b/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraBoth.h index 5100e0b641a..817c2aee196 100644 --- a/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraBoth.h +++ b/PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraBoth.h @@ -1,79 +1,79 @@ -#ifndef ALIANALYSISTASKSPECTRABOTH_H -#define ALIANALYSISTASKSPECTRABOTH_H - -/* See cxx source for full Copyright notice */ - -//------------------------------------------------------------------------- -// AliAnalysisTaskSpectraBoth -// -// -// -// -// Author: Michele Floris, CERN -//------------------------------------------------------------------------- - -class TH1F; -class TH2F; -class AliVEvent; -class AliSpectraBothHistoManager; -class AliSpectraBothTrackCuts; -class AliSpectraBothEventCuts; -class AliSpectraBothPID; -class AliESDtrackCuts; -class AliGenEventHeader; - -#include "AliSpectraBothHistoManager.h" -#include "AliAnalysisTaskSE.h" -#include "AliESDtrackCuts.h" - -class AliAnalysisTaskSpectraBoth : public AliAnalysisTaskSE -{ -public: - - // constructors - AliAnalysisTaskSpectraBoth() : AliAnalysisTaskSE(), fAOD(0), fHistMan(0), fTrackCuts(0), fEventCuts(0), fPID(0), fIsMC(0), fNRebin(0),fUseMinSigma(0),fCuts(0),fdotheMCLoopAfterEventCuts(0) - {} - AliAnalysisTaskSpectraBoth(const char *name); - virtual ~AliAnalysisTaskSpectraBoth() {} - - void SetIsMC(Bool_t isMC = kFALSE) {fIsMC = isMC; }; - Bool_t GetIsMC() const { return fIsMC;}; - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - - AliSpectraBothHistoManager * GetHistoManager() { return fHistMan; } - AliSpectraBothTrackCuts * GetTrackCuts() { return fTrackCuts; } - AliSpectraBothEventCuts * GetEventCuts() { return fEventCuts; } - AliSpectraBothPID * GetPID() { return fPID; } - - void SetTrackCuts(AliSpectraBothTrackCuts * tc) { fTrackCuts = tc; } - void SetEventCuts(AliSpectraBothEventCuts * vc) { fEventCuts = vc; } - void SetPID (AliSpectraBothPID * pid) { fPID = pid; } - void SetNRebin(Int_t nreb){fNRebin=nreb;} - void SetUseMinSigma (Bool_t flag) {fUseMinSigma=flag;} - Int_t GetNRebin() const {return fNRebin;} - void SetAliESDtrackCuts(AliESDtrackCuts* cuts ){fCuts=cuts;} - void SetdotheMCLoopAfterEventCuts (Bool_t flag) {fdotheMCLoopAfterEventCuts=flag;} - Bool_t GetdotheMCLoopAfterEventCuts () const {return fdotheMCLoopAfterEventCuts;} -private: - - AliVEvent * fAOD; //! AOD object - AliSpectraBothHistoManager * fHistMan; // Histogram Manager - AliSpectraBothTrackCuts * fTrackCuts; // Track Cuts - AliSpectraBothEventCuts * fEventCuts; // Event Cuts - AliSpectraBothPID * fPID;// PID class - Bool_t fIsMC;// true if processing MC - Int_t fNRebin; //rebin of histos - Bool_t fUseMinSigma; // if true use min sigma - AliESDtrackCuts *fCuts; // ESD track cuts - Bool_t fdotheMCLoopAfterEventCuts; // if true first check the ESD event cuts than loop over MC info , if flase other approach - - AliAnalysisTaskSpectraBoth(const AliAnalysisTaskSpectraBoth&); - AliAnalysisTaskSpectraBoth& operator=(const AliAnalysisTaskSpectraBoth&); - - ClassDef(AliAnalysisTaskSpectraBoth, 2); -}; - -#endif +#ifndef ALIANALYSISTASKSPECTRABOTH_H +#define ALIANALYSISTASKSPECTRABOTH_H + +/* See cxx source for full Copyright notice */ + +//------------------------------------------------------------------------- +// AliAnalysisTaskSpectraBoth +// +// +// +// +// Author: Michele Floris, CERN +//------------------------------------------------------------------------- + +class TH1F; +class TH2F; +class AliVEvent; +class AliSpectraBothHistoManager; +class AliSpectraBothTrackCuts; +class AliSpectraBothEventCuts; +class AliSpectraBothPID; +class AliESDtrackCuts; +class AliGenEventHeader; + +#include "AliSpectraBothHistoManager.h" +#include "AliAnalysisTaskSE.h" +#include "AliESDtrackCuts.h" + +class AliAnalysisTaskSpectraBoth : public AliAnalysisTaskSE +{ +public: + + // constructors + AliAnalysisTaskSpectraBoth() : AliAnalysisTaskSE(), fAOD(0), fHistMan(0), fTrackCuts(0), fEventCuts(0), fPID(0), fIsMC(0), fNRebin(0),fUseMinSigma(0),fCuts(0),fdotheMCLoopAfterEventCuts(0) + {} + AliAnalysisTaskSpectraBoth(const char *name); + virtual ~AliAnalysisTaskSpectraBoth() {} + + void SetIsMC(Bool_t isMC = kFALSE) {fIsMC = isMC; }; + Bool_t GetIsMC() const { return fIsMC;}; + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + + AliSpectraBothHistoManager * GetHistoManager() { return fHistMan; } + AliSpectraBothTrackCuts * GetTrackCuts() { return fTrackCuts; } + AliSpectraBothEventCuts * GetEventCuts() { return fEventCuts; } + AliSpectraBothPID * GetPID() { return fPID; } + + void SetTrackCuts(AliSpectraBothTrackCuts * tc) { fTrackCuts = tc; } + void SetEventCuts(AliSpectraBothEventCuts * vc) { fEventCuts = vc; } + void SetPID (AliSpectraBothPID * pid) { fPID = pid; } + void SetNRebin(Int_t nreb){fNRebin=nreb;} + void SetUseMinSigma (Bool_t flag) {fUseMinSigma=flag;} + Int_t GetNRebin() const {return fNRebin;} + void SetAliESDtrackCuts(AliESDtrackCuts* cuts ){fCuts=cuts;} + void SetdotheMCLoopAfterEventCuts (Bool_t flag) {fdotheMCLoopAfterEventCuts=flag;} + Bool_t GetdotheMCLoopAfterEventCuts () const {return fdotheMCLoopAfterEventCuts;} +private: + + AliVEvent * fAOD; //! AOD object + AliSpectraBothHistoManager * fHistMan; // Histogram Manager + AliSpectraBothTrackCuts * fTrackCuts; // Track Cuts + AliSpectraBothEventCuts * fEventCuts; // Event Cuts + AliSpectraBothPID * fPID;// PID class + Bool_t fIsMC;// true if processing MC + Int_t fNRebin; //rebin of histos + Bool_t fUseMinSigma; // if true use min sigma + AliESDtrackCuts *fCuts; // ESD track cuts + Bool_t fdotheMCLoopAfterEventCuts; // if true first check the ESD event cuts than loop over MC info , if flase other approach + + AliAnalysisTaskSpectraBoth(const AliAnalysisTaskSpectraBoth&); + AliAnalysisTaskSpectraBoth& operator=(const AliAnalysisTaskSpectraBoth&); + + ClassDef(AliAnalysisTaskSpectraBoth, 2); +}; + +#endif diff --git a/PWGLF/SPECTRA/PiKaPr/TestAOD/runGridBoth.C b/PWGLF/SPECTRA/PiKaPr/TestAOD/runGridBoth.C index d63f4170d54..8a2c5fc6b35 100644 --- a/PWGLF/SPECTRA/PiKaPr/TestAOD/runGridBoth.C +++ b/PWGLF/SPECTRA/PiKaPr/TestAOD/runGridBoth.C @@ -149,8 +149,8 @@ gSystem->Load("libPWGLFspectra.so"); } // Add PID task - // Bool_t isMC=kFALSE, Bool_t autoMCesd=kTRUE, - // Bool_t tuneOnData=kFALSE, Int_t recoPass=2, Bool_t cachePID=kFALSE, TString detResponse="", + // Bool_t isMC=kFALSE, Bool_t autoMCesd=kTRUE, + // Bool_t tuneOnData=kFALSE, Int_t recoPass=2, Bool_t cachePID=kFALSE, TString detResponse="", //Bool_t useTPCEtaCorrection = kFALSE gROOT->LoadMacro("./AddTaskSpectraBoth.C"); Double_t Nsigmapid=3.; diff --git a/PWGLF/STRANGENESS/Correlations/macros/runProofLambdaOverK0sJets.C b/PWGLF/STRANGENESS/Correlations/macros/runProofLambdaOverK0sJets.C index fcc5c5a595e..212dedb4295 100644 --- a/PWGLF/STRANGENESS/Correlations/macros/runProofLambdaOverK0sJets.C +++ b/PWGLF/STRANGENESS/Correlations/macros/runProofLambdaOverK0sJets.C @@ -1,75 +1,75 @@ -//Based on the file $ALICE_ROOT/PWGLF/STRANGENESS/Cascades/macros/runProofCascadePbPb() -void runProofLambdaOverK0sJets(TString proofCluster = "xsanchez@skaf.saske.sk", - TString alirootVer = "VO_ALICE@AliRoot::v5-03-70-AN", - TString rootVer = "VO_ALICE@ROOT::v5-34-02", - TString path = "/alice/data/LHC10h_000138624_p2_AOD049", - TString name = "LambdaOverK0sRatio", - Int_t data = 2010, - Float_t minCen = 0., - Float_t maxCen = 90., - Float_t ptMinTrig = 5., - Float_t ptMaxTrig = 10., - Float_t etaMaxTrig = 0.75, - Float_t rapMaxV0 = 0.75, - Bool_t sepInjec = kTRUE, - Bool_t isMC = kFALSE, - Bool_t usePID = kTRUE, - Bool_t doQA = kFALSE){ - - Printf(" \nThe parameters of the programm are : \n "); - Printf(" \t Analysis mode:\t %s\n \t Centrality:\t %.1lf - %.1lf\n \t Use MC Data?:\t %s\n \t Use PID?:\t %s\n", - "Proof", minCen,maxCen, - (isMC) ? "Yes" : "No", - (usePID) ? "Yes" : "No"); - - // _____________________________________________________ // - - gEnv->SetValue("XSec.GSI.DelegProxy", "2"); - - TProof::Mgr(proofCluster.Data())->SetROOTVersion(rootVer.Data()); - - TString alirootMode = ""; - TString extraLibs; - TList *list = new TList(); - alirootMode="ALIROOT"; - extraLibs+= "ANALYSIS:OADB:ANALYSISalice:CORRFW"; - list->Add(new TNamed("ALIROOT_MODE", alirootMode.Data())); - list->Add(new TNamed("ALIROOT_EXTRA_LIBS", extraLibs.Data())); - - TProof::Reset(proofCluster.Data()); - TProof::Open(proofCluster.Data()); - //TProof::Open(proofCluster.Data(),"workers=1"); - gProof->ClearPackages(); - gProof->EnablePackage(alirootVer.Data(),list); - - // _____________________________________________________ // - - gSystem->AddIncludePath("-I$ALICE_ROOT/include"); - - AliAnalysisManager *mgr = new AliAnalysisManager("Manager"); - - AliAODInputHandler* aodH = new AliAODInputHandler; - mgr->SetInputEventHandler(aodH); - - //PID - gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); - AliAnalysisTask *pidTask = AddTaskPIDResponse(isMC); - //AliAnalysisTask *pidTask = AddTaskPIDResponse(isMC,kTRUE); - if(!pidTask) { printf("no PIDtask\n"); return; } - - Float_t checkIDTrig= kTRUE; - - // My task - gROOT->LoadMacro("AliAnalysisTaskLambdaOverK0sJets.cxx+g"); - gROOT->LoadMacro("AddTaskLambdaOverK0sJets.C"); - AliAnalysisTaskLambdaOverK0sJets *task = AddTaskLambdaOverK0sJets(name,data,minCen,maxCen,ptMinTrig,ptMaxTrig,etaMaxTrig,checkIDTrig,rapMaxV0,sepInjec,isMC,usePID,doQA); - - // _____________________________________________________ // - - if (!mgr->InitAnalysis()) return; - mgr->PrintStatus(); - mgr->StartAnalysis("proof",path); - //mgr->StartAnalysis("proof",path,1,1); - -} - +//Based on the file $ALICE_ROOT/PWGLF/STRANGENESS/Cascades/macros/runProofCascadePbPb() +void runProofLambdaOverK0sJets(TString proofCluster = "xsanchez@skaf.saske.sk", + TString alirootVer = "VO_ALICE@AliRoot::v5-03-70-AN", + TString rootVer = "VO_ALICE@ROOT::v5-34-02", + TString path = "/alice/data/LHC10h_000138624_p2_AOD049", + TString name = "LambdaOverK0sRatio", + Int_t data = 2010, + Float_t minCen = 0., + Float_t maxCen = 90., + Float_t ptMinTrig = 5., + Float_t ptMaxTrig = 10., + Float_t etaMaxTrig = 0.75, + Float_t rapMaxV0 = 0.75, + Bool_t sepInjec = kTRUE, + Bool_t isMC = kFALSE, + Bool_t usePID = kTRUE, + Bool_t doQA = kFALSE){ + + Printf(" \nThe parameters of the programm are : \n "); + Printf(" \t Analysis mode:\t %s\n \t Centrality:\t %.1lf - %.1lf\n \t Use MC Data?:\t %s\n \t Use PID?:\t %s\n", + "Proof", minCen,maxCen, + (isMC) ? "Yes" : "No", + (usePID) ? "Yes" : "No"); + + // _____________________________________________________ // + + gEnv->SetValue("XSec.GSI.DelegProxy", "2"); + + TProof::Mgr(proofCluster.Data())->SetROOTVersion(rootVer.Data()); + + TString alirootMode = ""; + TString extraLibs; + TList *list = new TList(); + alirootMode="ALIROOT"; + extraLibs+= "ANALYSIS:OADB:ANALYSISalice:CORRFW"; + list->Add(new TNamed("ALIROOT_MODE", alirootMode.Data())); + list->Add(new TNamed("ALIROOT_EXTRA_LIBS", extraLibs.Data())); + + TProof::Reset(proofCluster.Data()); + TProof::Open(proofCluster.Data()); + //TProof::Open(proofCluster.Data(),"workers=1"); + gProof->ClearPackages(); + gProof->EnablePackage(alirootVer.Data(),list); + + // _____________________________________________________ // + + gSystem->AddIncludePath("-I$ALICE_ROOT/include"); + + AliAnalysisManager *mgr = new AliAnalysisManager("Manager"); + + AliAODInputHandler* aodH = new AliAODInputHandler; + mgr->SetInputEventHandler(aodH); + + //PID + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); + AliAnalysisTask *pidTask = AddTaskPIDResponse(isMC); + //AliAnalysisTask *pidTask = AddTaskPIDResponse(isMC,kTRUE); + if(!pidTask) { printf("no PIDtask\n"); return; } + + Float_t checkIDTrig= kTRUE; + + // My task + gROOT->LoadMacro("AliAnalysisTaskLambdaOverK0sJets.cxx+g"); + gROOT->LoadMacro("AddTaskLambdaOverK0sJets.C"); + AliAnalysisTaskLambdaOverK0sJets *task = AddTaskLambdaOverK0sJets(name,data,minCen,maxCen,ptMinTrig,ptMaxTrig,etaMaxTrig,checkIDTrig,rapMaxV0,sepInjec,isMC,usePID,doQA); + + // _____________________________________________________ // + + if (!mgr->InitAnalysis()) return; + mgr->PrintStatus(); + mgr->StartAnalysis("proof",path); + //mgr->StartAnalysis("proof",path,1,1); + +} + diff --git a/PWGLF/STRANGENESS/LambdaK0PbPb/MainStreamAnalysis/Makefile b/PWGLF/STRANGENESS/LambdaK0PbPb/MainStreamAnalysis/Makefile index 0d7eb86dcaa..c18e8c67497 100644 --- a/PWGLF/STRANGENESS/LambdaK0PbPb/MainStreamAnalysis/Makefile +++ b/PWGLF/STRANGENESS/LambdaK0PbPb/MainStreamAnalysis/Makefile @@ -1,82 +1,82 @@ -# this make file is used to quickly compile locally the code (to check -# for errors) and to produce par files + tags - -OBJECTS = AliAnalysisTaskPerformanceStrange.o #AliAnalysisLambdaK0HistoManager.o AliAnalysisTaskLambdaK0AOD.o AliAnalysisLambdaK0Cuts.o -HEADERS = $(OBJECTS:.o=.h) -MACROS = - - #DrawRatiosVsPt_C.so - #Get_mass_histos_C.so LoadHistoAndRecorrect_C.so FitPt2Par_C.so - #Get_pt_histos_debug_C.so \ -MOREHEADERS = -BASENAME = BG - -############################################################# -TARGET = lib$(BASENAME).so -DICT = lib$(BASENAME)Dict - -CXX = g++ -CXXFLAGS = -O -Wall -fPIC -D_REENTRANT -I$(ROOTSYS)/include \ - -I$(ALICE_ROOT)/include -I$(ALICE_ROOT)/obj/include -I$(ALICE_ROOT)/PWG0 -I$(ALICE_ROOT)/ANALYSIS -I$(ALICE_ROOT)/PWG1/background \ - -c -g -CINTFLAGS = -I$(ALICE_ROOT)/include -I$(ALICE_ROOT)/obj/include -I$(ALICE_ROOT)/PWG0 -I$(ALICE_ROOT)/ANALYSIS - -all: $(MACROS) $(TARGET) -############################################################# -%.o: %.cxx %.h $(HEADERS) - $(CXX) $(CXXFLAGS) $< - -%_C.so: %.C - echo "{" > tmp.C - echo "gROOT->LoadMacro(\"compile.C\");" >> tmp.C - echo "compile(\"$<\");" >> tmp.C - echo "}" >> tmp.C - echo ".x tmp.C" | root -b -q - -%_cxx.so: %.cxx - echo "{" > tmp.C - echo "gROOT->LoadMacro(\"compile.C\");" >> tmp.C - echo "compile(\"$<\");" >> tmp.C - echo "}" >> tmp.C - echo ".x tmp.C" | root -b -# echo "gROOT->LoadMacro(\"IncludeMichele.C\");" >> tmp.C -# echo "IncludeMichele();" >> tmp.C -# echo "gROOT->LoadMacro(\"$<+g\");" >> tmp.C -# echo "}" >> tmp.C -# echo ".x tmp.C" | aliroot -b - - -$(DICT).cxx: $(HEADERS) LinkDef.h - rootcint -f $@ -c $(CINTFLAGS) -p $(MOREHEADERS) $^ - -$(DICT).o: $(DICT).cxx - $(CXX) $(CXXFLAGS) $< - - -$(TARGET): $(OBJECTS) $(DICT).o - g++ -shared -O $^ -o $@ -# cd .. ; make - -tags: - cd $(ALICE_ROOT); \ - find . -iname "*.cxx " | grep -v target | grep -v tgt | etags - ;\ - find . -iname "*.h" | grep -v target | grep -v tgt | grep -v include | etags --append - -# find . -iname "*.cxx " | grep -v target | grep -v tgt | etags \ -# --include=$(ALICE_ROOT)/TAGS --include=$(ROOTSYS)/TAGS - -# find . -iname "*.h" | grep -v target | grep -v tgt | grep -v include | etags --append - - -pars: - cd $(ALICE_ROOT)/obj ; \ - make STEERBase.par; \ - make ESD.par ;\ - make AOD.par ;\ - make ANALYSIS.par ;\ - make ANALYSISalice.par ;\ - make CORRFW.par ;\ - make PWG0base.par - -.PHONY: clean - -clean: - @rm *.o *.so *Dict.cxx - +# this make file is used to quickly compile locally the code (to check +# for errors) and to produce par files + tags + +OBJECTS = AliAnalysisTaskPerformanceStrange.o #AliAnalysisLambdaK0HistoManager.o AliAnalysisTaskLambdaK0AOD.o AliAnalysisLambdaK0Cuts.o +HEADERS = $(OBJECTS:.o=.h) +MACROS = + + #DrawRatiosVsPt_C.so + #Get_mass_histos_C.so LoadHistoAndRecorrect_C.so FitPt2Par_C.so + #Get_pt_histos_debug_C.so \ +MOREHEADERS = +BASENAME = BG + +############################################################# +TARGET = lib$(BASENAME).so +DICT = lib$(BASENAME)Dict + +CXX = g++ +CXXFLAGS = -O -Wall -fPIC -D_REENTRANT -I$(ROOTSYS)/include \ + -I$(ALICE_ROOT)/include -I$(ALICE_ROOT)/obj/include -I$(ALICE_ROOT)/PWG0 -I$(ALICE_ROOT)/ANALYSIS -I$(ALICE_ROOT)/PWG1/background \ + -c -g +CINTFLAGS = -I$(ALICE_ROOT)/include -I$(ALICE_ROOT)/obj/include -I$(ALICE_ROOT)/PWG0 -I$(ALICE_ROOT)/ANALYSIS + +all: $(MACROS) $(TARGET) +############################################################# +%.o: %.cxx %.h $(HEADERS) + $(CXX) $(CXXFLAGS) $< + +%_C.so: %.C + echo "{" > tmp.C + echo "gROOT->LoadMacro(\"compile.C\");" >> tmp.C + echo "compile(\"$<\");" >> tmp.C + echo "}" >> tmp.C + echo ".x tmp.C" | root -b -q + +%_cxx.so: %.cxx + echo "{" > tmp.C + echo "gROOT->LoadMacro(\"compile.C\");" >> tmp.C + echo "compile(\"$<\");" >> tmp.C + echo "}" >> tmp.C + echo ".x tmp.C" | root -b +# echo "gROOT->LoadMacro(\"IncludeMichele.C\");" >> tmp.C +# echo "IncludeMichele();" >> tmp.C +# echo "gROOT->LoadMacro(\"$<+g\");" >> tmp.C +# echo "}" >> tmp.C +# echo ".x tmp.C" | aliroot -b + + +$(DICT).cxx: $(HEADERS) LinkDef.h + rootcint -f $@ -c $(CINTFLAGS) -p $(MOREHEADERS) $^ + +$(DICT).o: $(DICT).cxx + $(CXX) $(CXXFLAGS) $< + + +$(TARGET): $(OBJECTS) $(DICT).o + g++ -shared -O $^ -o $@ +# cd .. ; make + +tags: + cd $(ALICE_ROOT); \ + find . -iname "*.cxx " | grep -v target | grep -v tgt | etags - ;\ + find . -iname "*.h" | grep -v target | grep -v tgt | grep -v include | etags --append - +# find . -iname "*.cxx " | grep -v target | grep -v tgt | etags \ +# --include=$(ALICE_ROOT)/TAGS --include=$(ROOTSYS)/TAGS - +# find . -iname "*.h" | grep -v target | grep -v tgt | grep -v include | etags --append - + +pars: + cd $(ALICE_ROOT)/obj ; \ + make STEERBase.par; \ + make ESD.par ;\ + make AOD.par ;\ + make ANALYSIS.par ;\ + make ANALYSISalice.par ;\ + make CORRFW.par ;\ + make PWG0base.par + +.PHONY: clean + +clean: + @rm *.o *.so *Dict.cxx + diff --git a/PWGPP/AliAnalysisTaskVtXY.h b/PWGPP/AliAnalysisTaskVtXY.h index 65aed181f1d..ad3411491cc 100644 --- a/PWGPP/AliAnalysisTaskVtXY.h +++ b/PWGPP/AliAnalysisTaskVtXY.h @@ -1,42 +1,42 @@ -#ifndef AliAnalysisTaskVtXY_h -#define AliAnalysisTaskVtXY_h -/* Copyright (c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * see cxx source for full Copyright notice */ -//------------------------------------------------------- -// -// ESD based analysis of the main vertex resolution in XY in order -// to estimate the beam interaction spot location and size -// -//------------------------------------------------------- -class TStyle; -class TH2F; -class TProfile; -class AliESDEvent; -class AliVertex; -class AliESDVertex; -class AliVertexerTracks; -class AliESDVertexer; -#include "AliAnalysisTask.h" - -class AliAnalysisTaskVtXY : public AliAnalysisTask { - public: - AliAnalysisTaskVtXY(const char *name = "AliAnalysisTaskVtXY"); - virtual ~AliAnalysisTaskVtXY() {} - - virtual void ConnectInputData(Option_t *); - virtual void CreateOutputObjects(); - virtual void Exec(Option_t *option); - virtual void Terminate(Option_t *); - - private: - AliESDEvent *fESD; //ESD object - TList *fList; //TList output object - TProfile *fHistVtx; //Vtx spectrum - TProfile *fHistVty; //Vty spectrum - AliAnalysisTaskVtXY(const AliAnalysisTaskVtXY&); //not implemented - AliAnalysisTaskVtXY& operator=(const AliAnalysisTaskVtXY&); //not implemented - - ClassDef(AliAnalysisTaskVtXY, 1); //example of analysis -}; - -#endif +#ifndef AliAnalysisTaskVtXY_h +#define AliAnalysisTaskVtXY_h +/* Copyright (c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * see cxx source for full Copyright notice */ +//------------------------------------------------------- +// +// ESD based analysis of the main vertex resolution in XY in order +// to estimate the beam interaction spot location and size +// +//------------------------------------------------------- +class TStyle; +class TH2F; +class TProfile; +class AliESDEvent; +class AliVertex; +class AliESDVertex; +class AliVertexerTracks; +class AliESDVertexer; +#include "AliAnalysisTask.h" + +class AliAnalysisTaskVtXY : public AliAnalysisTask { + public: + AliAnalysisTaskVtXY(const char *name = "AliAnalysisTaskVtXY"); + virtual ~AliAnalysisTaskVtXY() {} + + virtual void ConnectInputData(Option_t *); + virtual void CreateOutputObjects(); + virtual void Exec(Option_t *option); + virtual void Terminate(Option_t *); + + private: + AliESDEvent *fESD; //ESD object + TList *fList; //TList output object + TProfile *fHistVtx; //Vtx spectrum + TProfile *fHistVty; //Vty spectrum + AliAnalysisTaskVtXY(const AliAnalysisTaskVtXY&); //not implemented + AliAnalysisTaskVtXY& operator=(const AliAnalysisTaskVtXY&); //not implemented + + ClassDef(AliAnalysisTaskVtXY, 1); //example of analysis +}; + +#endif diff --git a/PWGPP/AliFilteredTreeAcceptanceCuts.h b/PWGPP/AliFilteredTreeAcceptanceCuts.h index ae88485336d..94ee9225d7a 100644 --- a/PWGPP/AliFilteredTreeAcceptanceCuts.h +++ b/PWGPP/AliFilteredTreeAcceptanceCuts.h @@ -1,97 +1,97 @@ -#ifndef ALIFILTEREDTREEACCEPTANCECUTS_H -#define ALIFILTEREDTREEACCEPTANCECUTS_H - -//------------------------------------------------------------------------------ -// Class to keep selection cuts for MC tracks. -// -// Author: J.Otwinowski 03/11/2008 -// last change: 2011-04-04 by M.Knichel -//------------------------------------------------------------------------------ - -class TParticle; -class AliESDtrack; -class AliExternalTrackParam; - -#include "AliAnalysisCuts.h" - -class AliFilteredTreeAcceptanceCuts : public AliAnalysisCuts -{ -public: - AliFilteredTreeAcceptanceCuts(const Char_t* name ="AliFilteredTreeAcceptanceCuts", const Char_t *title =""); - virtual ~AliFilteredTreeAcceptanceCuts(); - - // setters - void SetEtaRange(Float_t min=-1e99, Float_t max=1e99) { fMinEta=min; fMaxEta=max; } - void SetPhiRange(Float_t min=-1e99, Float_t max=1e99) { fMinPhi=min; fMaxPhi=max;} - void SetPtRange(Float_t min=-1e99, Float_t max=1e99) { fMinPt=min; fMaxPt=max;} - void SetExcludeEtaPhiRange(Float_t etaMin, Float_t etaMax, Float_t phiMin, Float_t phiMax) - { fExcludeMinEta = etaMin; fExcludeMaxEta = etaMax; fExcludeMinPhi = phiMin; fExcludeMaxPhi = phiMax; fCheckRange=kTRUE; } - void SetExcludeEtaPhiRange2(Float_t etaMin, Float_t etaMax, Float_t phiMin, Float_t phiMax) - { fExcludeMinEta2 = etaMin; fExcludeMaxEta2 = etaMax; fExcludeMinPhi2 = phiMin; fExcludeMaxPhi2 = phiMax; fCheckRange=kTRUE; } - - void SetMaxDCAr(Float_t max=1e99) { fMaxDCAr=max;} - void SetMaxDCAz(Float_t max=1e99) { fMaxDCAz=max;} - - // getters - Float_t GetMinEta() const {return fMinEta;} - Float_t GetMaxEta() const {return fMaxEta;} - Float_t GetMinPhi() const {return fMinPhi;} - Float_t GetMaxPhi() const {return fMaxPhi;} - Float_t GetMinPt() const {return fMinPt;} - Float_t GetMaxPt() const {return fMaxPt;} - - Bool_t GetCheckRange() const { return fCheckRange; } - Float_t GetExcludeMinEta() const { return fExcludeMinEta; } - Float_t GetExcludeMaxEta() const { return fExcludeMaxEta; } - Float_t GetExcludeMinPhi() const { return fExcludeMinPhi; } - Float_t GetExcludeMaxPhi() const { return fExcludeMaxPhi; } - - Float_t GetMaxDCAr() const {return fMaxDCAr;} - Float_t GetMaxDCAz() const {return fMaxDCAz;} - - // cuts init function - void Init(); - - // check MC tracks - virtual Bool_t IsSelected(TObject *) {return kTRUE;} - virtual Bool_t IsSelected(TList *) {return kTRUE;} - - // - Bool_t AcceptTrack(AliESDtrack *track); - Bool_t AcceptTrackLocalTPC(AliESDtrack *track); - Bool_t AcceptTrack(AliExternalTrackParam *track); - Bool_t AcceptTrack(TParticle *particle); - - // Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* list); - -private: - Float_t fMinEta; // min pseudorapidity - Float_t fMaxEta; // max pseudorapidity - Float_t fMinPhi; // min azimuthal angle (rad) - Float_t fMaxPhi; // max azimuthal angle (rad) - Float_t fMinPt; // min pt - Float_t fMaxPt; // max pt - - Float_t fExcludeMinEta; - Float_t fExcludeMaxEta; - Float_t fExcludeMinPhi; - Float_t fExcludeMaxPhi; - Float_t fExcludeMinEta2; - Float_t fExcludeMaxEta2; - Float_t fExcludeMinPhi2; - Float_t fExcludeMaxPhi2; - Bool_t fCheckRange; - - // max DCAr and DCAz with respect - // to nominal vertex position - Float_t fMaxDCAr; // min DCAr - Float_t fMaxDCAz; // max DCAz - - AliFilteredTreeAcceptanceCuts(const AliFilteredTreeAcceptanceCuts&); // not implemented - AliFilteredTreeAcceptanceCuts& operator=(const AliFilteredTreeAcceptanceCuts&); // not implemented - - ClassDef(AliFilteredTreeAcceptanceCuts, 1) -}; - -#endif // +#ifndef ALIFILTEREDTREEACCEPTANCECUTS_H +#define ALIFILTEREDTREEACCEPTANCECUTS_H + +//------------------------------------------------------------------------------ +// Class to keep selection cuts for MC tracks. +// +// Author: J.Otwinowski 03/11/2008 +// last change: 2011-04-04 by M.Knichel +//------------------------------------------------------------------------------ + +class TParticle; +class AliESDtrack; +class AliExternalTrackParam; + +#include "AliAnalysisCuts.h" + +class AliFilteredTreeAcceptanceCuts : public AliAnalysisCuts +{ +public: + AliFilteredTreeAcceptanceCuts(const Char_t* name ="AliFilteredTreeAcceptanceCuts", const Char_t *title =""); + virtual ~AliFilteredTreeAcceptanceCuts(); + + // setters + void SetEtaRange(Float_t min=-1e99, Float_t max=1e99) { fMinEta=min; fMaxEta=max; } + void SetPhiRange(Float_t min=-1e99, Float_t max=1e99) { fMinPhi=min; fMaxPhi=max;} + void SetPtRange(Float_t min=-1e99, Float_t max=1e99) { fMinPt=min; fMaxPt=max;} + void SetExcludeEtaPhiRange(Float_t etaMin, Float_t etaMax, Float_t phiMin, Float_t phiMax) + { fExcludeMinEta = etaMin; fExcludeMaxEta = etaMax; fExcludeMinPhi = phiMin; fExcludeMaxPhi = phiMax; fCheckRange=kTRUE; } + void SetExcludeEtaPhiRange2(Float_t etaMin, Float_t etaMax, Float_t phiMin, Float_t phiMax) + { fExcludeMinEta2 = etaMin; fExcludeMaxEta2 = etaMax; fExcludeMinPhi2 = phiMin; fExcludeMaxPhi2 = phiMax; fCheckRange=kTRUE; } + + void SetMaxDCAr(Float_t max=1e99) { fMaxDCAr=max;} + void SetMaxDCAz(Float_t max=1e99) { fMaxDCAz=max;} + + // getters + Float_t GetMinEta() const {return fMinEta;} + Float_t GetMaxEta() const {return fMaxEta;} + Float_t GetMinPhi() const {return fMinPhi;} + Float_t GetMaxPhi() const {return fMaxPhi;} + Float_t GetMinPt() const {return fMinPt;} + Float_t GetMaxPt() const {return fMaxPt;} + + Bool_t GetCheckRange() const { return fCheckRange; } + Float_t GetExcludeMinEta() const { return fExcludeMinEta; } + Float_t GetExcludeMaxEta() const { return fExcludeMaxEta; } + Float_t GetExcludeMinPhi() const { return fExcludeMinPhi; } + Float_t GetExcludeMaxPhi() const { return fExcludeMaxPhi; } + + Float_t GetMaxDCAr() const {return fMaxDCAr;} + Float_t GetMaxDCAz() const {return fMaxDCAz;} + + // cuts init function + void Init(); + + // check MC tracks + virtual Bool_t IsSelected(TObject *) {return kTRUE;} + virtual Bool_t IsSelected(TList *) {return kTRUE;} + + // + Bool_t AcceptTrack(AliESDtrack *track); + Bool_t AcceptTrackLocalTPC(AliESDtrack *track); + Bool_t AcceptTrack(AliExternalTrackParam *track); + Bool_t AcceptTrack(TParticle *particle); + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* list); + +private: + Float_t fMinEta; // min pseudorapidity + Float_t fMaxEta; // max pseudorapidity + Float_t fMinPhi; // min azimuthal angle (rad) + Float_t fMaxPhi; // max azimuthal angle (rad) + Float_t fMinPt; // min pt + Float_t fMaxPt; // max pt + + Float_t fExcludeMinEta; + Float_t fExcludeMaxEta; + Float_t fExcludeMinPhi; + Float_t fExcludeMaxPhi; + Float_t fExcludeMinEta2; + Float_t fExcludeMaxEta2; + Float_t fExcludeMinPhi2; + Float_t fExcludeMaxPhi2; + Bool_t fCheckRange; + + // max DCAr and DCAz with respect + // to nominal vertex position + Float_t fMaxDCAr; // min DCAr + Float_t fMaxDCAz; // max DCAz + + AliFilteredTreeAcceptanceCuts(const AliFilteredTreeAcceptanceCuts&); // not implemented + AliFilteredTreeAcceptanceCuts& operator=(const AliFilteredTreeAcceptanceCuts&); // not implemented + + ClassDef(AliFilteredTreeAcceptanceCuts, 1) +}; + +#endif // diff --git a/PWGPP/AliFilteredTreeEventCuts.h b/PWGPP/AliFilteredTreeEventCuts.h index b97a80431eb..ce36817f7f2 100644 --- a/PWGPP/AliFilteredTreeEventCuts.h +++ b/PWGPP/AliFilteredTreeEventCuts.h @@ -1,130 +1,130 @@ -#ifndef ALIFILTEREDTREEEVENTCUTS_H -#define ALIFILTEREDTREEEVENTCUTS_H - -//------------------------------------------------------------------------------ -// Class to keep event selection cuts for dNdPt analysis. -// -// Author: J.Otwinowski 01/11/2008 -//------------------------------------------------------------------------------ - -#include "AliAnalysisCuts.h" - -class AliESDEvent; -class AliESDVertex; -class AliMCEvent; -class AliHeader; -class AliGenEventHeader; -class AliStack; - -class AliFilteredTreeEventCuts : public AliAnalysisCuts -{ -public: - AliFilteredTreeEventCuts(const Char_t* name ="AliFilteredTreeEventCuts", const Char_t *title =""); - virtual ~AliFilteredTreeEventCuts(); - - //TODO: copied from AliPWG0Helper, find a more central place for these - enum AnalysisMode { kInvalid = -1, kSPD = 0x1, kTPC = 0x2, kTPCITS = 0x4, kFieldOn = 0x8, kSPDOnlyL0 = 0x10, kTPCSPD = 0x20}; - enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4, kOnePart = 0x8 }; - enum DiffTreatment { kMCFlags = 0, kUA5Cuts = 1, kE710Cuts, kALICEHadronLevel }; - - // setters - void SetTriggerRequired(Bool_t bFlag=kTRUE) {fTriggerRequired=bFlag;} - void SetRecVertexRequired(Bool_t bFlag=kTRUE) {fRecVertexRequired=bFlag;} - void SetEventProcessType(MCProcessType type=kInvalidProcess) {fEventProcessType=type;} - void SetNContributorsRange(Float_t min=0.,Float_t max=1e99) {fMinNContributors=min; fMaxNContributors=max;} - void SetMaxR(Float_t max=1e99) {fMaxR=max;} - void SetZvRange(Float_t min=-1e99, Float_t max=1e99) {fMinZv=min; fMaxZv=max;} - - void SetMeanXYZv(Float_t xv=0.0, Float_t yv=0.0, Float_t zv=0.0) { - fMeanXv = xv; fMeanYv = yv; fMeanZv = zv; - } - - void SetSigmaMeanXYZv(Float_t sxv=1.0, Float_t syv=1.0, Float_t szv=10.0) { - fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv; - } - - - void SetRedoTPCVertex(Bool_t redo = kTRUE) {fRedoTPCVertex = redo;} - void SetUseBeamSpotConstraint(Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;} - void SetEventSelectedRequired(Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} - - - // getters - Bool_t IsEventSelectedRequired() const {return fEventSelectedRequired;} - Bool_t IsTriggerRequired() const {return fTriggerRequired;} - Bool_t IsRecVertexRequired() const {return fRecVertexRequired;} - Int_t GetEventProcessType() const {return fEventProcessType;} - Float_t GetMinNContributors() const {return fMinNContributors;} - Float_t GetMaxNContributors() const {return fMaxNContributors;} - Float_t GetMaxR() const {return fMaxR;} - Float_t GetMinZv() const {return fMinZv;} - Float_t GetMaxZv() const {return fMaxZv;} - - Float_t GetMeanXv() const {return fMeanXv;} - Float_t GetMeanYv() const {return fMeanYv;} - Float_t GetMeanZv() const {return fMeanZv;} - - Float_t GetSigmaMeanXv() const {return fSigmaMeanXv;} - Float_t GetSigmaMeanYv() const {return fSigmaMeanYv;} - Float_t GetSigmaMeanZv() const {return fSigmaMeanZv;} - - Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;} - Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;} - - - // cuts init function - void Init(); - - // check MC tracks - Bool_t IsSelected(TObject *) {return kTRUE;} - Bool_t IsSelected(TList *) {return kTRUE;} - - // accept event - Bool_t AcceptEvent(AliESDEvent *event=0, AliMCEvent *mcEvent=0, const AliESDVertex *vtx=0); - Bool_t AcceptMCEvent(AliMCEvent *mcEvent=0); - - // Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* list); - - //statics copied from AliPWG0Helper - static MCProcessType GetEventProcessType(AliESDEvent* esd, AliHeader* header, AliStack* stack, DiffTreatment diffTreatment); - static MCProcessType GetEventProcessType(AliHeader* aHeader, Bool_t adebug = kFALSE); - static MCProcessType GetPythiaEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE); - static MCProcessType GetDPMjetEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE); - static Bool_t IsHadronLevelSingleDiffractive(AliStack* stack, Float_t cms, Float_t xiMin, Float_t xiMax); - static Double_t Rapidity(Double_t pt, Double_t pz, Double_t m); -protected: - static Int_t fgLastProcessType; // stores the raw value of the last process type extracted - // - -private: - Bool_t fTriggerRequired; // trigger required - Bool_t fRecVertexRequired; // reconstructed event vertex required - Int_t fEventProcessType; // select MC event process type (ND, SD, DD) - Float_t fMinNContributors; // min. number of contributing vertex tracks - Float_t fMaxNContributors; // max. number of contributing vertex tracks - Float_t fMaxR; // max. vertex radii (R = sqrt(Xv^2+Yv^2) - Float_t fMinZv; // min. Zv vertex - Float_t fMaxZv; // max. Zv vertex - - // interaction spot constraint - Float_t fMeanXv; // mean Xv position - Float_t fMeanYv; // mean Yv position - Float_t fMeanZv; // mean Zv position - - Float_t fSigmaMeanXv; // sigma mean Xv position - Float_t fSigmaMeanYv; // sigma mean Yv position - Float_t fSigmaMeanZv; // sigma mean Zv position - - Bool_t fRedoTPCVertex; // redo vertex - Bool_t fUseBeamSpotConstraint; // use beam spot contraints - - Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required - - AliFilteredTreeEventCuts(const AliFilteredTreeEventCuts&); // not implemented - AliFilteredTreeEventCuts& operator=(const AliFilteredTreeEventCuts&); // not implemented - - ClassDef(AliFilteredTreeEventCuts, 1) -}; - -#endif // ALIFILTEREDTREEEVENTCUTS_H +#ifndef ALIFILTEREDTREEEVENTCUTS_H +#define ALIFILTEREDTREEEVENTCUTS_H + +//------------------------------------------------------------------------------ +// Class to keep event selection cuts for dNdPt analysis. +// +// Author: J.Otwinowski 01/11/2008 +//------------------------------------------------------------------------------ + +#include "AliAnalysisCuts.h" + +class AliESDEvent; +class AliESDVertex; +class AliMCEvent; +class AliHeader; +class AliGenEventHeader; +class AliStack; + +class AliFilteredTreeEventCuts : public AliAnalysisCuts +{ +public: + AliFilteredTreeEventCuts(const Char_t* name ="AliFilteredTreeEventCuts", const Char_t *title =""); + virtual ~AliFilteredTreeEventCuts(); + + //TODO: copied from AliPWG0Helper, find a more central place for these + enum AnalysisMode { kInvalid = -1, kSPD = 0x1, kTPC = 0x2, kTPCITS = 0x4, kFieldOn = 0x8, kSPDOnlyL0 = 0x10, kTPCSPD = 0x20}; + enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4, kOnePart = 0x8 }; + enum DiffTreatment { kMCFlags = 0, kUA5Cuts = 1, kE710Cuts, kALICEHadronLevel }; + + // setters + void SetTriggerRequired(Bool_t bFlag=kTRUE) {fTriggerRequired=bFlag;} + void SetRecVertexRequired(Bool_t bFlag=kTRUE) {fRecVertexRequired=bFlag;} + void SetEventProcessType(MCProcessType type=kInvalidProcess) {fEventProcessType=type;} + void SetNContributorsRange(Float_t min=0.,Float_t max=1e99) {fMinNContributors=min; fMaxNContributors=max;} + void SetMaxR(Float_t max=1e99) {fMaxR=max;} + void SetZvRange(Float_t min=-1e99, Float_t max=1e99) {fMinZv=min; fMaxZv=max;} + + void SetMeanXYZv(Float_t xv=0.0, Float_t yv=0.0, Float_t zv=0.0) { + fMeanXv = xv; fMeanYv = yv; fMeanZv = zv; + } + + void SetSigmaMeanXYZv(Float_t sxv=1.0, Float_t syv=1.0, Float_t szv=10.0) { + fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv; + } + + + void SetRedoTPCVertex(Bool_t redo = kTRUE) {fRedoTPCVertex = redo;} + void SetUseBeamSpotConstraint(Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;} + void SetEventSelectedRequired(Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} + + + // getters + Bool_t IsEventSelectedRequired() const {return fEventSelectedRequired;} + Bool_t IsTriggerRequired() const {return fTriggerRequired;} + Bool_t IsRecVertexRequired() const {return fRecVertexRequired;} + Int_t GetEventProcessType() const {return fEventProcessType;} + Float_t GetMinNContributors() const {return fMinNContributors;} + Float_t GetMaxNContributors() const {return fMaxNContributors;} + Float_t GetMaxR() const {return fMaxR;} + Float_t GetMinZv() const {return fMinZv;} + Float_t GetMaxZv() const {return fMaxZv;} + + Float_t GetMeanXv() const {return fMeanXv;} + Float_t GetMeanYv() const {return fMeanYv;} + Float_t GetMeanZv() const {return fMeanZv;} + + Float_t GetSigmaMeanXv() const {return fSigmaMeanXv;} + Float_t GetSigmaMeanYv() const {return fSigmaMeanYv;} + Float_t GetSigmaMeanZv() const {return fSigmaMeanZv;} + + Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;} + Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;} + + + // cuts init function + void Init(); + + // check MC tracks + Bool_t IsSelected(TObject *) {return kTRUE;} + Bool_t IsSelected(TList *) {return kTRUE;} + + // accept event + Bool_t AcceptEvent(AliESDEvent *event=0, AliMCEvent *mcEvent=0, const AliESDVertex *vtx=0); + Bool_t AcceptMCEvent(AliMCEvent *mcEvent=0); + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* list); + + //statics copied from AliPWG0Helper + static MCProcessType GetEventProcessType(AliESDEvent* esd, AliHeader* header, AliStack* stack, DiffTreatment diffTreatment); + static MCProcessType GetEventProcessType(AliHeader* aHeader, Bool_t adebug = kFALSE); + static MCProcessType GetPythiaEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE); + static MCProcessType GetDPMjetEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE); + static Bool_t IsHadronLevelSingleDiffractive(AliStack* stack, Float_t cms, Float_t xiMin, Float_t xiMax); + static Double_t Rapidity(Double_t pt, Double_t pz, Double_t m); +protected: + static Int_t fgLastProcessType; // stores the raw value of the last process type extracted + // + +private: + Bool_t fTriggerRequired; // trigger required + Bool_t fRecVertexRequired; // reconstructed event vertex required + Int_t fEventProcessType; // select MC event process type (ND, SD, DD) + Float_t fMinNContributors; // min. number of contributing vertex tracks + Float_t fMaxNContributors; // max. number of contributing vertex tracks + Float_t fMaxR; // max. vertex radii (R = sqrt(Xv^2+Yv^2) + Float_t fMinZv; // min. Zv vertex + Float_t fMaxZv; // max. Zv vertex + + // interaction spot constraint + Float_t fMeanXv; // mean Xv position + Float_t fMeanYv; // mean Yv position + Float_t fMeanZv; // mean Zv position + + Float_t fSigmaMeanXv; // sigma mean Xv position + Float_t fSigmaMeanYv; // sigma mean Yv position + Float_t fSigmaMeanZv; // sigma mean Zv position + + Bool_t fRedoTPCVertex; // redo vertex + Bool_t fUseBeamSpotConstraint; // use beam spot contraints + + Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required + + AliFilteredTreeEventCuts(const AliFilteredTreeEventCuts&); // not implemented + AliFilteredTreeEventCuts& operator=(const AliFilteredTreeEventCuts&); // not implemented + + ClassDef(AliFilteredTreeEventCuts, 1) +}; + +#endif // ALIFILTEREDTREEEVENTCUTS_H diff --git a/PWGPP/HMPID/AddTaskHmpidQA.C b/PWGPP/HMPID/AddTaskHmpidQA.C index 5ac0b62c241..0fc965b8af8 100644 --- a/PWGPP/HMPID/AddTaskHmpidQA.C +++ b/PWGPP/HMPID/AddTaskHmpidQA.C @@ -1,39 +1,39 @@ -AliHMPIDTaskQA *AddTaskHmpidQA(Bool_t useMC=kTRUE) -{ -// Creates a HMPID task, configures it and adds it to the analysis manager. - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskHmpidQA", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTaskHmpidQA", "This task requires an input event handler"); - return NULL; - } - - // Create the task and configure it. - //=========================================================================== - - AliHMPIDTaskQA *hmpTask = new AliHMPIDTaskQA("HMPIDTaskQA"); - hmpTask->SetDebugLevel(0); - hmpTask->SelectCollisionCandidates(); - hmpTask->SetUseMC(useMC); - mgr->AddTask(hmpTask); - - AliAnalysisDataContainer *cout_hmpid= mgr->CreateContainer("HmpidQA", TList::Class(),AliAnalysisManager::kOutputContainer, - Form("%s:HmpidQA",AliAnalysisManager::GetCommonFileName())); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - mgr->ConnectInput (hmpTask, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (hmpTask, 1, cout_hmpid); - - return hmpTask; -} +AliHMPIDTaskQA *AddTaskHmpidQA(Bool_t useMC=kTRUE) +{ +// Creates a HMPID task, configures it and adds it to the analysis manager. + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskHmpidQA", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskHmpidQA", "This task requires an input event handler"); + return NULL; + } + + // Create the task and configure it. + //=========================================================================== + + AliHMPIDTaskQA *hmpTask = new AliHMPIDTaskQA("HMPIDTaskQA"); + hmpTask->SetDebugLevel(0); + hmpTask->SelectCollisionCandidates(); + hmpTask->SetUseMC(useMC); + mgr->AddTask(hmpTask); + + AliAnalysisDataContainer *cout_hmpid= mgr->CreateContainer("HmpidQA", TList::Class(),AliAnalysisManager::kOutputContainer, + Form("%s:HmpidQA",AliAnalysisManager::GetCommonFileName())); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + mgr->ConnectInput (hmpTask, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (hmpTask, 1, cout_hmpid); + + return hmpTask; +} diff --git a/PWGPP/PilotTrain/AddTaskVZEROQA.C b/PWGPP/PilotTrain/AddTaskVZEROQA.C index f6d22980c3e..7b72dce1bce 100644 --- a/PWGPP/PilotTrain/AddTaskVZEROQA.C +++ b/PWGPP/PilotTrain/AddTaskVZEROQA.C @@ -1,41 +1,41 @@ -AliAnalysisTaskSE* AddTaskVZEROQA(Int_t runNumber) -{ - // Creates a QA task exploiting simple symmetries phi, eta +/-, charge ... - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskQAsym", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTasQAsym", "This task requires an input event handler"); - return NULL; - } - TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - - // Configure analysis - //=========================================================================== - - - - AliAnaVZEROQA* task = new AliAnaVZEROQA("AliAnaVZEROQA"); - mgr->AddTask(task); - - AliAnalysisDataContainer *cout = mgr->CreateContainer("QAVZEROHists",TList::Class(), - AliAnalysisManager::kOutputContainer, Form("%s:VZERO_Performance", - mgr->GetCommonFileName())); - - mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (task, 1, cout); - - return task; - - -} - - +AliAnalysisTaskSE* AddTaskVZEROQA(Int_t runNumber) +{ + // Creates a QA task exploiting simple symmetries phi, eta +/-, charge ... + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskQAsym", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTasQAsym", "This task requires an input event handler"); + return NULL; + } + TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + + // Configure analysis + //=========================================================================== + + + + AliAnaVZEROQA* task = new AliAnaVZEROQA("AliAnaVZEROQA"); + mgr->AddTask(task); + + AliAnalysisDataContainer *cout = mgr->CreateContainer("QAVZEROHists",TList::Class(), + AliAnalysisManager::kOutputContainer, Form("%s:VZERO_Performance", + mgr->GetCommonFileName())); + + mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (task, 1, cout); + + return task; + + +} + + diff --git a/PWGPP/PilotTrain/AddTaskVZEROQATrig.C b/PWGPP/PilotTrain/AddTaskVZEROQATrig.C index 3ef22e49948..8b045a57b65 100644 --- a/PWGPP/PilotTrain/AddTaskVZEROQATrig.C +++ b/PWGPP/PilotTrain/AddTaskVZEROQATrig.C @@ -1,41 +1,41 @@ -AliAnalysisTaskSE* AddTaskVZEROQATrig(Int_t runNumber) -{ - // Creates a QA task exploiting simple symmetries phi, eta +/-, charge ... - - // Get the pointer to the existing analysis manager via the static access method. - //============================================================================== - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - ::Error("AddTaskQAsym", "No analysis manager to connect to."); - return NULL; - } - - // Check the analysis type using the event handlers connected to the analysis manager. - //============================================================================== - if (!mgr->GetInputEventHandler()) { - ::Error("AddTasQAsym", "This task requires an input event handler"); - return NULL; - } - TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" - - // Configure analysis - //=========================================================================== - - - - AliAnaVZEROQA* task = new AliAnaVZEROQA("AliAnaVZEROQATrig"); - mgr->AddTask(task); - - AliAnalysisDataContainer *cout = mgr->CreateContainer("QAVZEROHistsTrig",TList::Class(), - AliAnalysisManager::kOutputContainer, Form("%s:VZERO_Performance_Trig", - mgr->GetCommonFileName())); - - mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer()); - mgr->ConnectOutput (task, 1, cout); - - return task; - - -} - - +AliAnalysisTaskSE* AddTaskVZEROQATrig(Int_t runNumber) +{ + // Creates a QA task exploiting simple symmetries phi, eta +/-, charge ... + + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskQAsym", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTasQAsym", "This task requires an input event handler"); + return NULL; + } + TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + + // Configure analysis + //=========================================================================== + + + + AliAnaVZEROQA* task = new AliAnaVZEROQA("AliAnaVZEROQATrig"); + mgr->AddTask(task); + + AliAnalysisDataContainer *cout = mgr->CreateContainer("QAVZEROHistsTrig",TList::Class(), + AliAnalysisManager::kOutputContainer, Form("%s:VZERO_Performance_Trig", + mgr->GetCommonFileName())); + + mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput (task, 1, cout); + + return task; + + +} + + diff --git a/PWGPP/TPC/AliComparisonObject.h b/PWGPP/TPC/AliComparisonObject.h index e2038fa0991..9a7071a6ba8 100644 --- a/PWGPP/TPC/AliComparisonObject.h +++ b/PWGPP/TPC/AliComparisonObject.h @@ -1,59 +1,59 @@ -#ifndef ALICOMPARISONOBJECT_H -#define ALICOMPARISONOBJECT_H - -//------------------------------------------------------------------------------ -// Abstract class to keep information from comparison of -// reconstructed and MC particle tracks. -// -// Author: J.Otwinowski 04/14/2008 -//------------------------------------------------------------------------------ - -#include "TNamed.h" -#include "TFolder.h" - -class AliMCInfo; -class AliESDRecInfo; - -class AliComparisonObject : public TNamed { -public : - AliComparisonObject(); - AliComparisonObject(const char* name="AliComparisonObject", const char* title="AliComparisonObject"); - virtual ~AliComparisonObject(); - - // Init data members - // call once before event loop - virtual void Init() = 0; - - // Execute analysis - // call in the event loop - virtual void Exec(AliMCInfo* const infoMC=0, AliESDRecInfo* const infoRC=0) = 0; - - // Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* const list=0) = 0; - - // Analyse output histograms - virtual void Analyse() = 0; - - // Get output folder for analysed histograms - virtual TFolder* GetAnalysisFolder() const = 0; - - // set and get analysisMode - void SetAnalysisMode(Int_t analysisMode=0) {fAnalysisMode = analysisMode;} - Int_t GetAnalysisMode() {return fAnalysisMode;} - - // set and get hpt generator - void SetHptGenerator(Bool_t hptGenerator=kFALSE) {fHptGenerator = hptGenerator;} - Bool_t IsHptGenerator() {return fHptGenerator;} - -protected: - - // analysis mode - Int_t fAnalysisMode; // 0-TPC, 1-TPCITS, 2-Constrained - - // hpt generator - Bool_t fHptGenerator; // hpt event generator - - ClassDef(AliComparisonObject,1); -}; - -#endif +#ifndef ALICOMPARISONOBJECT_H +#define ALICOMPARISONOBJECT_H + +//------------------------------------------------------------------------------ +// Abstract class to keep information from comparison of +// reconstructed and MC particle tracks. +// +// Author: J.Otwinowski 04/14/2008 +//------------------------------------------------------------------------------ + +#include "TNamed.h" +#include "TFolder.h" + +class AliMCInfo; +class AliESDRecInfo; + +class AliComparisonObject : public TNamed { +public : + AliComparisonObject(); + AliComparisonObject(const char* name="AliComparisonObject", const char* title="AliComparisonObject"); + virtual ~AliComparisonObject(); + + // Init data members + // call once before event loop + virtual void Init() = 0; + + // Execute analysis + // call in the event loop + virtual void Exec(AliMCInfo* const infoMC=0, AliESDRecInfo* const infoRC=0) = 0; + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* const list=0) = 0; + + // Analyse output histograms + virtual void Analyse() = 0; + + // Get output folder for analysed histograms + virtual TFolder* GetAnalysisFolder() const = 0; + + // set and get analysisMode + void SetAnalysisMode(Int_t analysisMode=0) {fAnalysisMode = analysisMode;} + Int_t GetAnalysisMode() {return fAnalysisMode;} + + // set and get hpt generator + void SetHptGenerator(Bool_t hptGenerator=kFALSE) {fHptGenerator = hptGenerator;} + Bool_t IsHptGenerator() {return fHptGenerator;} + +protected: + + // analysis mode + Int_t fAnalysisMode; // 0-TPC, 1-TPCITS, 2-Constrained + + // hpt generator + Bool_t fHptGenerator; // hpt event generator + + ClassDef(AliComparisonObject,1); +}; + +#endif diff --git a/PWGPP/TPC/AliMCInfoCuts.h b/PWGPP/TPC/AliMCInfoCuts.h index c3aa579db65..64da13bb739 100644 --- a/PWGPP/TPC/AliMCInfoCuts.h +++ b/PWGPP/TPC/AliMCInfoCuts.h @@ -1,97 +1,97 @@ -#ifndef ALIMCINFOCUTS_H -#define ALIMCINFOCUTS_H - -//------------------------------------------------------------------------------ -// Class to keep selection cuts for MC tracks. -// -// Author: J.Otwinowski 04/02/2008 -//------------------------------------------------------------------------------ - -#include -#include "AliAnalysisCuts.h" - -class TArrayI; - -class AliMCInfoCuts : public AliAnalysisCuts -{ -public: - AliMCInfoCuts(const Char_t* name ="AliMCInfoCuts", const Char_t *title =""); - virtual ~AliMCInfoCuts(); - - // setters - void SetMinRowsWithDigits(const Int_t min=0) {fMinRowsWithDigits = min;} - void SetMaxR(const Float_t max=1e99) {fMaxR = max;} - void SetMaxVz(const Float_t max=1e99) {fMaxVz = max;} - void SetRangeTPCSignal(const Float_t min=0, const Float_t max=1e99) {fMinTPCSignal = min; fMaxTPCSignal = max;} - void SetMinTrackLength(const Int_t min=0) {fMinTrackLength = min;} - - // getters - Int_t GetMinRowsWithDigits() const {return fMinRowsWithDigits;} - Float_t GetMaxR() const {return fMaxR;} - Float_t GetMaxVz() const {return fMaxVz;} - Float_t GetMinTPCSignal() const {return fMinTPCSignal;} - Float_t GetMaxTPCSignal() const {return fMaxTPCSignal;} - Float_t GetMinTrackLength() const {return fMinTrackLength;} - - Float_t GetEP() const {return ep;} - Float_t GetEM() const {return em;} - Float_t GetMuP() const {return mup;} - Float_t GetMuM() const {return mum;} - Float_t GetPiP() const {return pip;} - Float_t GetPiM() const {return pim;} - Float_t GetKP() const {return kp;} - Float_t GetKM() const {return km;} - Float_t GetProt() const {return prot;} - Float_t GetProtBar() const {return protbar;} - - // cuts init function - void InitME(); - - // check MC tracks - virtual Bool_t IsSelected(TObject *) {return kTRUE;} - virtual Bool_t IsSelected(TList *) {return kTRUE;} - - // add particle to array - void AddPdgParticle(Int_t idx=-1, Int_t pdgcode=0) const; - - // check particle in array - Bool_t IsPdgParticle(Int_t pdgcode=0) const; - - // check particle in array - Bool_t IsPosPdgParticle(Int_t pdgcode=0) const; - - // Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* list); - -private: - Int_t fMinRowsWithDigits; // min. number of TPC raws with digits - Float_t fMaxR; // max. R distance from MC vertex - Float_t fMaxVz; // max. Z distance from MC vertex - Float_t fMinTPCSignal; // min. TPC Signal calculated from Bethe Bloch formula - Float_t fMaxTPCSignal; // max. TPC Signal calculated from Bethe Bloch formula - Float_t fMinTrackLength; // min. TPC minimum track length - - TArrayI* aTrackParticles; // array of tracked particles - - // PDG tracked particles (later added to aTrackParticles) - enum enumData { - kNParticles = 10, // number of particles below - ep = kPositron, - em = kElectron, - mup = kMuonPlus, - mum = kMuonMinus, - pip = kPiPlus, - pim = kPiMinus, - kp = kKPlus, - km = kKMinus, - prot = kProton, - protbar = kProtonBar - }; - - AliMCInfoCuts(const AliMCInfoCuts&); // not implemented - AliMCInfoCuts& operator=(const AliMCInfoCuts&); // not implemented - - ClassDef(AliMCInfoCuts, 1) -}; - -#endif // ALIMCINFOCUTS_H +#ifndef ALIMCINFOCUTS_H +#define ALIMCINFOCUTS_H + +//------------------------------------------------------------------------------ +// Class to keep selection cuts for MC tracks. +// +// Author: J.Otwinowski 04/02/2008 +//------------------------------------------------------------------------------ + +#include +#include "AliAnalysisCuts.h" + +class TArrayI; + +class AliMCInfoCuts : public AliAnalysisCuts +{ +public: + AliMCInfoCuts(const Char_t* name ="AliMCInfoCuts", const Char_t *title =""); + virtual ~AliMCInfoCuts(); + + // setters + void SetMinRowsWithDigits(const Int_t min=0) {fMinRowsWithDigits = min;} + void SetMaxR(const Float_t max=1e99) {fMaxR = max;} + void SetMaxVz(const Float_t max=1e99) {fMaxVz = max;} + void SetRangeTPCSignal(const Float_t min=0, const Float_t max=1e99) {fMinTPCSignal = min; fMaxTPCSignal = max;} + void SetMinTrackLength(const Int_t min=0) {fMinTrackLength = min;} + + // getters + Int_t GetMinRowsWithDigits() const {return fMinRowsWithDigits;} + Float_t GetMaxR() const {return fMaxR;} + Float_t GetMaxVz() const {return fMaxVz;} + Float_t GetMinTPCSignal() const {return fMinTPCSignal;} + Float_t GetMaxTPCSignal() const {return fMaxTPCSignal;} + Float_t GetMinTrackLength() const {return fMinTrackLength;} + + Float_t GetEP() const {return ep;} + Float_t GetEM() const {return em;} + Float_t GetMuP() const {return mup;} + Float_t GetMuM() const {return mum;} + Float_t GetPiP() const {return pip;} + Float_t GetPiM() const {return pim;} + Float_t GetKP() const {return kp;} + Float_t GetKM() const {return km;} + Float_t GetProt() const {return prot;} + Float_t GetProtBar() const {return protbar;} + + // cuts init function + void InitME(); + + // check MC tracks + virtual Bool_t IsSelected(TObject *) {return kTRUE;} + virtual Bool_t IsSelected(TList *) {return kTRUE;} + + // add particle to array + void AddPdgParticle(Int_t idx=-1, Int_t pdgcode=0) const; + + // check particle in array + Bool_t IsPdgParticle(Int_t pdgcode=0) const; + + // check particle in array + Bool_t IsPosPdgParticle(Int_t pdgcode=0) const; + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* list); + +private: + Int_t fMinRowsWithDigits; // min. number of TPC raws with digits + Float_t fMaxR; // max. R distance from MC vertex + Float_t fMaxVz; // max. Z distance from MC vertex + Float_t fMinTPCSignal; // min. TPC Signal calculated from Bethe Bloch formula + Float_t fMaxTPCSignal; // max. TPC Signal calculated from Bethe Bloch formula + Float_t fMinTrackLength; // min. TPC minimum track length + + TArrayI* aTrackParticles; // array of tracked particles + + // PDG tracked particles (later added to aTrackParticles) + enum enumData { + kNParticles = 10, // number of particles below + ep = kPositron, + em = kElectron, + mup = kMuonPlus, + mum = kMuonMinus, + pip = kPiPlus, + pim = kPiMinus, + kp = kKPlus, + km = kKMinus, + prot = kProton, + protbar = kProtonBar + }; + + AliMCInfoCuts(const AliMCInfoCuts&); // not implemented + AliMCInfoCuts& operator=(const AliMCInfoCuts&); // not implemented + + ClassDef(AliMCInfoCuts, 1) +}; + +#endif // ALIMCINFOCUTS_H diff --git a/PWGPP/TPC/AliPerformanceObject.h b/PWGPP/TPC/AliPerformanceObject.h index b840ab108f2..148fa65d256 100644 --- a/PWGPP/TPC/AliPerformanceObject.h +++ b/PWGPP/TPC/AliPerformanceObject.h @@ -1,146 +1,146 @@ -#ifndef ALIPERFORMANCEOBJECT_H -#define ALIPERFORMANCEOBJECT_H - -//------------------------------------------------------------------------------ -// Base class to keep information from comparison of -// reconstructed and MC particle tracks. -// -// Author: J.Otwinowski 04/14/2008 -// Changes by M.Knichel 15/10/2010 -//------------------------------------------------------------------------------ - -#include "TNamed.h" -#include "TFolder.h" -#include "THnSparse.h" - -class TTree; -class AliMCEvent; -class AliESDEvent; -class AliRecInfoCuts; -class AliMCInfoCuts; -class AliESDfriend; -class AliESDVertex; - -class AliPerformanceObject : public TNamed { -public : - AliPerformanceObject(); - AliPerformanceObject(const char* name="AliPerformanceObject", const char* title="AliPerformanceObject", Int_t run=-1, Bool_t highMult=kFALSE); - virtual ~AliPerformanceObject(); - - // Init data members - // call once before event loop - virtual void Init() = 0; - - // init for high multiplicity (PbPb) - // to be called instead of Init() - virtual void InitHighMult(); - - // Execute analysis - // call in the event loop - virtual void Exec(AliMCEvent* const infoMC=0, AliESDEvent* const infoRC=0, AliESDfriend* const infoFriend=0, const Bool_t bUseMC=kFALSE, const Bool_t bUseESDfriend=kFALSE) = 0; - - // Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* const list=0) = 0; - - // project to 1d,2d,3d - // is called from FinishTaskOuput() in AliPerformanceTask - virtual void Analyse() = 0; - - // Get output folder for analysed histograms - virtual TFolder* GetAnalysisFolder() const = 0; - - // create a summary stored in a ttree - // has to be implented - virtual TTree* CreateSummary() { return 0; } - - // project to 1d,2d,3d - // is called from Terminate() in AliPerformanceTask - // final spectra calculation - virtual void AnalyseFinal() { ; } - - // - virtual void SetAliRecInfoCuts(AliRecInfoCuts* const cuts=0) = 0; - virtual void SetAliMCInfoCuts(AliMCInfoCuts* const cuts=0) = 0; - - // set and get analysisMode - void SetAnalysisMode(const Int_t analysisMode=0) {fAnalysisMode = analysisMode;} - Int_t GetAnalysisMode() const {return fAnalysisMode;} - - // set and get hpt generator - void SetHptGenerator(const Bool_t hptGenerator=kFALSE) {fHptGenerator = hptGenerator;} - Bool_t IsHptGenerator() const {return fHptGenerator;} - - // draw all histograms from the folder - void PrintHisto(Bool_t logz = kTRUE, const Char_t * outFileName = "PerformanceQAHisto.ps"); - - // create log axis - Double_t *CreateLogAxis(Int_t nbins, Double_t xmin, Double_t xmax); - - // trigger class selection - void SetTriggerClass(const Char_t *triggerClass) { fTriggerClass = triggerClass; } - const Char_t* GetTriggerClass() const { return fTriggerClass; } - - // use track vertex - void SetUseTrackVertex(Bool_t trackVtx = kTRUE) { fUseTrackVertex = trackVtx; } - Bool_t IsUseTrackVertex() { return fUseTrackVertex; } - - Bool_t IsHighMultiplicity() { return fHighMultiplicity; } - - // merging of thnsparse - Bool_t GetMergeTHnSparseObj() { return fMergeTHnSparseObj; } - void SetMergeTHnSparseObj(Bool_t merge) {fMergeTHnSparseObj = merge; } - - void SetRunNumber(Int_t run) { fRunNumber = run; } - Int_t GetRunNumber() const { return fRunNumber; } - - // use kink daughters - void SetUseKinkDaughters(Bool_t kinkDaughters = kTRUE) { fUseKinkDaughters = kinkDaughters; } - Bool_t IsUseKinkDaughters() { return fUseKinkDaughters; } - - // Centrality bin to be used - void SetUseCentralityBin(Int_t bin) { fUseCentralityBin = bin; } - Int_t GetUseCentralityBin() { return fUseCentralityBin; } - - // use tof bunch crossing - void SetUseTOFBunchCrossing(Bool_t tofBunching = kTRUE) { fUseTOFBunchCrossing = tofBunching; } - Bool_t IsUseTOFBunchCrossing() { return fUseTOFBunchCrossing; } - -protected: - - void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, TString* selString = 0); - void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, Int_t yDim, TString* selString = 0); - void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, Int_t yDim, Int_t zDim, TString* selString = 0); - - // merge THnSparse - Bool_t fMergeTHnSparseObj; - - // analysis mode - Int_t fAnalysisMode; // 0-TPC, 1-TPCITS, 2-Constrained, 3-TPC inner wall, 4-TPC outer wall - - Int_t fRunNumber; - - // hpt generator - Bool_t fHptGenerator; // hpt event generator - - // trigger class - const Char_t * fTriggerClass; - - // use track vertex - Bool_t fUseTrackVertex; // use track vertex - - // PbPb mode? - Bool_t fHighMultiplicity; // flag to switch between pp and PbPb - - Bool_t fUseKinkDaughters; // use kink daughthers, default is yes - - Int_t fUseCentralityBin; // centrality bin to be used - - Bool_t fUseTOFBunchCrossing; // use TOFBunchCrossing, default is yes - - AliPerformanceObject(const AliPerformanceObject&); // not implemented - AliPerformanceObject& operator=(const AliPerformanceObject&); // not implemented - - ClassDef(AliPerformanceObject,7); -}; - -#endif +#ifndef ALIPERFORMANCEOBJECT_H +#define ALIPERFORMANCEOBJECT_H + +//------------------------------------------------------------------------------ +// Base class to keep information from comparison of +// reconstructed and MC particle tracks. +// +// Author: J.Otwinowski 04/14/2008 +// Changes by M.Knichel 15/10/2010 +//------------------------------------------------------------------------------ + +#include "TNamed.h" +#include "TFolder.h" +#include "THnSparse.h" + +class TTree; +class AliMCEvent; +class AliESDEvent; +class AliRecInfoCuts; +class AliMCInfoCuts; +class AliESDfriend; +class AliESDVertex; + +class AliPerformanceObject : public TNamed { +public : + AliPerformanceObject(); + AliPerformanceObject(const char* name="AliPerformanceObject", const char* title="AliPerformanceObject", Int_t run=-1, Bool_t highMult=kFALSE); + virtual ~AliPerformanceObject(); + + // Init data members + // call once before event loop + virtual void Init() = 0; + + // init for high multiplicity (PbPb) + // to be called instead of Init() + virtual void InitHighMult(); + + // Execute analysis + // call in the event loop + virtual void Exec(AliMCEvent* const infoMC=0, AliESDEvent* const infoRC=0, AliESDfriend* const infoFriend=0, const Bool_t bUseMC=kFALSE, const Bool_t bUseESDfriend=kFALSE) = 0; + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* const list=0) = 0; + + // project to 1d,2d,3d + // is called from FinishTaskOuput() in AliPerformanceTask + virtual void Analyse() = 0; + + // Get output folder for analysed histograms + virtual TFolder* GetAnalysisFolder() const = 0; + + // create a summary stored in a ttree + // has to be implented + virtual TTree* CreateSummary() { return 0; } + + // project to 1d,2d,3d + // is called from Terminate() in AliPerformanceTask + // final spectra calculation + virtual void AnalyseFinal() { ; } + + // + virtual void SetAliRecInfoCuts(AliRecInfoCuts* const cuts=0) = 0; + virtual void SetAliMCInfoCuts(AliMCInfoCuts* const cuts=0) = 0; + + // set and get analysisMode + void SetAnalysisMode(const Int_t analysisMode=0) {fAnalysisMode = analysisMode;} + Int_t GetAnalysisMode() const {return fAnalysisMode;} + + // set and get hpt generator + void SetHptGenerator(const Bool_t hptGenerator=kFALSE) {fHptGenerator = hptGenerator;} + Bool_t IsHptGenerator() const {return fHptGenerator;} + + // draw all histograms from the folder + void PrintHisto(Bool_t logz = kTRUE, const Char_t * outFileName = "PerformanceQAHisto.ps"); + + // create log axis + Double_t *CreateLogAxis(Int_t nbins, Double_t xmin, Double_t xmax); + + // trigger class selection + void SetTriggerClass(const Char_t *triggerClass) { fTriggerClass = triggerClass; } + const Char_t* GetTriggerClass() const { return fTriggerClass; } + + // use track vertex + void SetUseTrackVertex(Bool_t trackVtx = kTRUE) { fUseTrackVertex = trackVtx; } + Bool_t IsUseTrackVertex() { return fUseTrackVertex; } + + Bool_t IsHighMultiplicity() { return fHighMultiplicity; } + + // merging of thnsparse + Bool_t GetMergeTHnSparseObj() { return fMergeTHnSparseObj; } + void SetMergeTHnSparseObj(Bool_t merge) {fMergeTHnSparseObj = merge; } + + void SetRunNumber(Int_t run) { fRunNumber = run; } + Int_t GetRunNumber() const { return fRunNumber; } + + // use kink daughters + void SetUseKinkDaughters(Bool_t kinkDaughters = kTRUE) { fUseKinkDaughters = kinkDaughters; } + Bool_t IsUseKinkDaughters() { return fUseKinkDaughters; } + + // Centrality bin to be used + void SetUseCentralityBin(Int_t bin) { fUseCentralityBin = bin; } + Int_t GetUseCentralityBin() { return fUseCentralityBin; } + + // use tof bunch crossing + void SetUseTOFBunchCrossing(Bool_t tofBunching = kTRUE) { fUseTOFBunchCrossing = tofBunching; } + Bool_t IsUseTOFBunchCrossing() { return fUseTOFBunchCrossing; } + +protected: + + void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, TString* selString = 0); + void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, Int_t yDim, TString* selString = 0); + void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, Int_t yDim, Int_t zDim, TString* selString = 0); + + // merge THnSparse + Bool_t fMergeTHnSparseObj; + + // analysis mode + Int_t fAnalysisMode; // 0-TPC, 1-TPCITS, 2-Constrained, 3-TPC inner wall, 4-TPC outer wall + + Int_t fRunNumber; + + // hpt generator + Bool_t fHptGenerator; // hpt event generator + + // trigger class + const Char_t * fTriggerClass; + + // use track vertex + Bool_t fUseTrackVertex; // use track vertex + + // PbPb mode? + Bool_t fHighMultiplicity; // flag to switch between pp and PbPb + + Bool_t fUseKinkDaughters; // use kink daughthers, default is yes + + Int_t fUseCentralityBin; // centrality bin to be used + + Bool_t fUseTOFBunchCrossing; // use TOFBunchCrossing, default is yes + + AliPerformanceObject(const AliPerformanceObject&); // not implemented + AliPerformanceObject& operator=(const AliPerformanceObject&); // not implemented + + ClassDef(AliPerformanceObject,7); +}; + +#endif diff --git a/PWGPP/TPC/AliPerformanceTask.cxx b/PWGPP/TPC/AliPerformanceTask.cxx index 4253c5abbb9..14f59a6a804 100644 --- a/PWGPP/TPC/AliPerformanceTask.cxx +++ b/PWGPP/TPC/AliPerformanceTask.cxx @@ -1,391 +1,391 @@ -/************************************************************************** -* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -//------------------------------------------------------------------------------ -// Implementation of the AliPerformanceTask class. It checks reconstruction performance -// for the reconstructed vs MC particle tracks under several conditions. For real data -// the control QA histograms are filled. -// -// The comparison output objects deriving from AliPerformanceObject -// (e.g. AliPerformanceRes, AliPerformanceEff, AliPerformanceDEdx, AliPerformanceDCA ...) -// are stored in the output file (details in description of these classes). -// -// Author: J.Otwinowski 01/04/2009 -// Changes by M.Knichel 15/10/2010 -//------------------------------------------------------------------------------ - -#include "iostream" - -#include "TChain.h" -#include "TTree.h" -#include "TH1F.h" -#include "TCanvas.h" -#include "TList.h" -#include "TFile.h" -#include "TSystem.h" - -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliESDEvent.h" -#include "AliESDfriend.h" -#include "AliMCEvent.h" -#include "AliESDInputHandler.h" -#include "AliMCEventHandler.h" -#include "AliESDVertex.h" -#include "AliMagF.h" -#include "AliTracker.h" -#include "AliGeomManager.h" -#include "AliCDBManager.h" - -#include "AliCentrality.h" -#include "AliESDVZERO.h" -#include "AliMultiplicity.h" - -#include "AliMCInfo.h" -#include "AliESDRecInfo.h" -#include "AliMCInfoCuts.h" -#include "AliRecInfoCuts.h" -#include "AliPerformanceObject.h" -#include "AliTPCPerformanceSummary.h" -#include "AliPerformanceTPC.h" -#include "AliPerformanceDEdx.h" -#include "AliPerformanceMatch.h" -#include "AliPerformanceTask.h" - - -using namespace std; - -ClassImp(AliPerformanceTask) - -//_____________________________________________________________________________ -AliPerformanceTask::AliPerformanceTask() - : AliAnalysisTaskSE("Performance") - , fESD(0) - , fESDfriend(0) - , fMC(0) - , fOutput(0) - , fOutputSummary(0) - , fPitList(0) - , fCompList(0) - , fUseMCInfo(kFALSE) - , fUseESDfriend(kFALSE) - , fUseHLT(kFALSE) - , fUseTerminate(kTRUE) - , fUseCentrality(0) - , fUseOCDB(kTRUE) - , fUseCentralityBin(0) -{ - // Dummy Constructor - // should not be used -} - -//_____________________________________________________________________________ -AliPerformanceTask::AliPerformanceTask(const char *name, const char */*title*/) - : AliAnalysisTaskSE(name) - , fESD(0) - , fESDfriend(0) - , fMC(0) - , fOutput(0) - , fOutputSummary(0) - , fPitList(0) - , fCompList(0) - , fUseMCInfo(kFALSE) - , fUseESDfriend(kFALSE) - , fUseHLT(kFALSE) - , fUseTerminate(kTRUE) - , fUseCentrality(0) - , fUseOCDB(kTRUE) - , fUseCentralityBin(0) -{ - // Constructor - - // Define input and output slots here - DefineOutput(0, TTree::Class()); - DefineOutput(1, TList::Class()); - - // create the list for comparison objects - fCompList = new TList; -} - -//_____________________________________________________________________________ -AliPerformanceTask::~AliPerformanceTask() -{ - if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { - if (fOutput) delete fOutput; fOutput = 0; - if (fOutputSummary) delete fOutputSummary; fOutputSummary = 0; - if (fCompList) delete fCompList; fCompList = 0; - } -} - -//_____________________________________________________________________________ -Bool_t AliPerformanceTask::AddPerformanceObject(AliPerformanceObject *pObj) -{ - // add comparison object to the list - if(pObj == 0) { - Printf("ERROR: Could not add comparison object"); - return kFALSE; - } - - // add object to the list - fCompList->AddLast(pObj); - -return kTRUE; -} - -//_____________________________________________________________________________ -void AliPerformanceTask::UserCreateOutputObjects() -{ - // Create histograms - // Called once - - // create output list - fOutput = new TList; - fOutput->SetOwner(); - fPitList = fOutput->MakeIterator(); - - // create output list - //fOutputSummary = new TTree; - - // add comparison objects to the output - AliPerformanceObject *pObj=0; - Int_t count=0; - TIterator *pitCompList = fCompList->MakeIterator(); - pitCompList->Reset(); - while(( pObj = (AliPerformanceObject *)pitCompList->Next()) != NULL) { - fOutput->Add(pObj); - count++; - } - Printf("UserCreateOutputObjects(): Number of output comparison objects: %d \n", count); - - PostData(1, fOutput); - PostData(0, fOutputSummary); -} - -//_____________________________________________________________________________ -void AliPerformanceTask::UserExec(Option_t *) -{ - // Main loop - // Called for each event - - - // Decide whether to use HLT or Offline ESD - if(fUseHLT){ - - AliESDInputHandler *esdH = dynamic_cast - (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - - if (!esdH) { - printf("ERROR: Could not get ESDInputHandler"); - return; - } - fESD = esdH->GetHLTEvent(); - }// end if fUseHLT - else - fESD = (AliESDEvent*) (InputEvent()); - - if(fUseESDfriend) - { - if (fUseHLT) - { - AliESDEvent *fESDoffline; - fESDoffline = (AliESDEvent*) (InputEvent()); - fESDfriend = static_cast(fESDoffline->FindListObject("AliESDfriend")); - } - else - { - fESDfriend = static_cast(fESD->FindListObject("AliESDfriend")); - } - if(!fESDfriend) { - Printf("ERROR: ESD friends not available"); - } - } - - if(fUseMCInfo) { - fMC = MCEvent(); - } - - - if (!fESD) { - Printf("ERROR: ESD event not available"); - return; - } - - if (fUseMCInfo && !fMC) { - Printf("ERROR: MC event not available"); - return; - } - - if(fUseESDfriend) - { - if(!fESDfriend) { - Printf("ERROR: ESD friends not available"); - } - } - - // Process analysis - Bool_t process = kTRUE; - - // Check for centrality - if (fUseCentrality) { - if ( CalculateCentralityBin() != fUseCentralityBin ) { - process = kFALSE; - } - } - - // Process comparison - if (process) { - AliPerformanceObject *pObj=0; - fPitList->Reset(); - while(( pObj = (AliPerformanceObject *)fPitList->Next()) != NULL) { - AliInfo(pObj->GetName()); - pObj->Exec(fMC,fESD,fESDfriend,fUseMCInfo,fUseESDfriend); - } - } - - // Post output data. - PostData(1, fOutput); -} - -//_____________________________________________________________________________ -void AliPerformanceTask::Terminate(Option_t *) -{ - // Called once at the end - - if ( !fUseTerminate ) - return; - - // check output data - fOutputSummary = dynamic_cast (GetOutputData(0)); - fOutput = dynamic_cast (GetOutputData(1)); - if (!fOutput) { - Printf("ERROR: AliPerformanceTask::Terminate(): fOutput data not available ..." ); - return; - } - if (fOutputSummary) { delete fOutputSummary; fOutputSummary=0; } - AliPerformanceObject* pObj=0; - AliPerformanceTPC* pTPC = 0; - AliPerformanceDEdx* pDEdx = 0; - AliPerformanceMatch* pMatch = 0; - AliPerformanceMatch* pPull = 0; - AliPerformanceMatch* pConstrain = 0; - TIterator* itOut = fOutput->MakeIterator(); - itOut->Reset(); - while(( pObj = dynamic_cast(itOut->Next())) != NULL) { - pObj->AnalyseFinal(); - /* if (! pTPC) { pTPC = dynamic_cast(pObj); } - if (! pDEdx) { pDEdx = dynamic_cast(pObj); } - if (! pMatch) { pMatch = dynamic_cast(pObj); } - if ((! pPull) && pMatch ) { pPull = dynamic_cast(pObj);*/ - - if (!strcmp(pObj->GetName(),"AliPerformanceTPC")) { pTPC = dynamic_cast(pObj); } - if (!strcmp(pObj->GetName(),"AliPerformanceDEdxTPCInner")) { pDEdx = dynamic_cast(pObj); } - if (!strcmp(pObj->GetName(),"AliPerformanceMatchTPCITS")) { pMatch = dynamic_cast(pObj); } - if (!strcmp(pObj->GetName(),"AliPerformanceMatchITSTPC")) { pPull = dynamic_cast(pObj);} - if (!strcmp(pObj->GetName(),"AliPerformanceMatchTPCConstrain")) { pConstrain = dynamic_cast(pObj);} - } - - - if(!fUseOCDB) { - printf("DO NOT USE OCDB \n"); - return; - } - - if (! AliCDBManager::Instance()->GetDefaultStorage()) { AliCDBManager::Instance()->SetDefaultStorage("raw://"); } - TUUID uuid; - TString tmpFile = gSystem->TempDirectory() + TString("/TPCQASummary.") + uuid.AsString() + TString(".root"); - AliTPCPerformanceSummary::WriteToFile(pTPC, pDEdx, pMatch, pPull, pConstrain, tmpFile.Data()); - TChain* chain = new TChain("tpcQA"); - if(!chain) return; - chain->Add(tmpFile.Data()); - TTree *tree = chain->CopyTree("1"); - if (chain) { delete chain; chain=0; } - fOutputSummary = tree; - - // Post output data. - PostData(0, fOutputSummary); - -} - -//_____________________________________________________________________________ -void AliPerformanceTask::FinishTaskOutput() -{ - // called once at the end of each job (on the workernode) - // - // projects THnSparse to TH1,2,3 - - fOutput = dynamic_cast (GetOutputData(1)); - if (!fOutput) { - Printf("ERROR: AliPerformanceTask::FinishTaskOutput(): fOutput data not available ..." ); - return; - } - - AliPerformanceObject* pObj=0; - TIterator* itOut = fOutput->MakeIterator(); - itOut->Reset(); - while(( pObj = dynamic_cast(itOut->Next())) != NULL) { - pObj->SetRunNumber(fCurrentRunNumber); - pObj->Analyse(); - } - - // Post output data. - PostData(1, fOutput); -} - -//_____________________________________________________________________________ -Bool_t AliPerformanceTask::Notify() -{ - static Int_t count = 0; - count++; - Printf("Processing %d. file", count); - - return kTRUE; -} - -//________________________________________________________________________ -Int_t AliPerformanceTask::CalculateCentralityBin(){ - // Get Centrality bin - - Int_t centrality = -1; - Float_t centralityF = -1; - - if (fUseCentrality == 0) - return centrality; - - AliCentrality *esdCentrality = fESD->GetCentrality(); - - // New : 2010-11-18 JMT - if ( fUseCentrality == 1 ) - centralityF = esdCentrality->GetCentralityPercentile("V0M"); - else if ( fUseCentrality == 2 ) - centralityF = esdCentrality->GetCentralityPercentile("CL1"); - else if ( fUseCentrality == 3 ) - centralityF = esdCentrality->GetCentralityPercentile("TRK"); - if (centralityF == 0.) - centralityF = 100.; - - if ( centralityF >= 0. && centralityF < 5.) centrality = 0; - else if ( centralityF >= 5. && centralityF < 10.) centrality = 5; - else if ( centralityF >= 10. && centralityF < 20.) centrality = 10; - else if ( centralityF >= 20. && centralityF < 30.) centrality = 20; - else if ( centralityF >= 30. && centralityF < 40.) centrality = 30; - else if ( centralityF >= 40. && centralityF < 50.) centrality = 40; - else if ( centralityF >= 50. && centralityF < 60.) centrality = 50; - else if ( centralityF >= 60. && centralityF < 70.) centrality = 60; - else if ( centralityF >= 70. && centralityF < 80.) centrality = 70; - else if ( centralityF >= 80. && centralityF < 90.) centrality = 80; - else if ( centralityF >= 90. && centralityF <=100.) centrality = 90; - - return centrality; -} +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +//------------------------------------------------------------------------------ +// Implementation of the AliPerformanceTask class. It checks reconstruction performance +// for the reconstructed vs MC particle tracks under several conditions. For real data +// the control QA histograms are filled. +// +// The comparison output objects deriving from AliPerformanceObject +// (e.g. AliPerformanceRes, AliPerformanceEff, AliPerformanceDEdx, AliPerformanceDCA ...) +// are stored in the output file (details in description of these classes). +// +// Author: J.Otwinowski 01/04/2009 +// Changes by M.Knichel 15/10/2010 +//------------------------------------------------------------------------------ + +#include "iostream" + +#include "TChain.h" +#include "TTree.h" +#include "TH1F.h" +#include "TCanvas.h" +#include "TList.h" +#include "TFile.h" +#include "TSystem.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliESDEvent.h" +#include "AliESDfriend.h" +#include "AliMCEvent.h" +#include "AliESDInputHandler.h" +#include "AliMCEventHandler.h" +#include "AliESDVertex.h" +#include "AliMagF.h" +#include "AliTracker.h" +#include "AliGeomManager.h" +#include "AliCDBManager.h" + +#include "AliCentrality.h" +#include "AliESDVZERO.h" +#include "AliMultiplicity.h" + +#include "AliMCInfo.h" +#include "AliESDRecInfo.h" +#include "AliMCInfoCuts.h" +#include "AliRecInfoCuts.h" +#include "AliPerformanceObject.h" +#include "AliTPCPerformanceSummary.h" +#include "AliPerformanceTPC.h" +#include "AliPerformanceDEdx.h" +#include "AliPerformanceMatch.h" +#include "AliPerformanceTask.h" + + +using namespace std; + +ClassImp(AliPerformanceTask) + +//_____________________________________________________________________________ +AliPerformanceTask::AliPerformanceTask() + : AliAnalysisTaskSE("Performance") + , fESD(0) + , fESDfriend(0) + , fMC(0) + , fOutput(0) + , fOutputSummary(0) + , fPitList(0) + , fCompList(0) + , fUseMCInfo(kFALSE) + , fUseESDfriend(kFALSE) + , fUseHLT(kFALSE) + , fUseTerminate(kTRUE) + , fUseCentrality(0) + , fUseOCDB(kTRUE) + , fUseCentralityBin(0) +{ + // Dummy Constructor + // should not be used +} + +//_____________________________________________________________________________ +AliPerformanceTask::AliPerformanceTask(const char *name, const char */*title*/) + : AliAnalysisTaskSE(name) + , fESD(0) + , fESDfriend(0) + , fMC(0) + , fOutput(0) + , fOutputSummary(0) + , fPitList(0) + , fCompList(0) + , fUseMCInfo(kFALSE) + , fUseESDfriend(kFALSE) + , fUseHLT(kFALSE) + , fUseTerminate(kTRUE) + , fUseCentrality(0) + , fUseOCDB(kTRUE) + , fUseCentralityBin(0) +{ + // Constructor + + // Define input and output slots here + DefineOutput(0, TTree::Class()); + DefineOutput(1, TList::Class()); + + // create the list for comparison objects + fCompList = new TList; +} + +//_____________________________________________________________________________ +AliPerformanceTask::~AliPerformanceTask() +{ + if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { + if (fOutput) delete fOutput; fOutput = 0; + if (fOutputSummary) delete fOutputSummary; fOutputSummary = 0; + if (fCompList) delete fCompList; fCompList = 0; + } +} + +//_____________________________________________________________________________ +Bool_t AliPerformanceTask::AddPerformanceObject(AliPerformanceObject *pObj) +{ + // add comparison object to the list + if(pObj == 0) { + Printf("ERROR: Could not add comparison object"); + return kFALSE; + } + + // add object to the list + fCompList->AddLast(pObj); + +return kTRUE; +} + +//_____________________________________________________________________________ +void AliPerformanceTask::UserCreateOutputObjects() +{ + // Create histograms + // Called once + + // create output list + fOutput = new TList; + fOutput->SetOwner(); + fPitList = fOutput->MakeIterator(); + + // create output list + //fOutputSummary = new TTree; + + // add comparison objects to the output + AliPerformanceObject *pObj=0; + Int_t count=0; + TIterator *pitCompList = fCompList->MakeIterator(); + pitCompList->Reset(); + while(( pObj = (AliPerformanceObject *)pitCompList->Next()) != NULL) { + fOutput->Add(pObj); + count++; + } + Printf("UserCreateOutputObjects(): Number of output comparison objects: %d \n", count); + + PostData(1, fOutput); + PostData(0, fOutputSummary); +} + +//_____________________________________________________________________________ +void AliPerformanceTask::UserExec(Option_t *) +{ + // Main loop + // Called for each event + + + // Decide whether to use HLT or Offline ESD + if(fUseHLT){ + + AliESDInputHandler *esdH = dynamic_cast + (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + + if (!esdH) { + printf("ERROR: Could not get ESDInputHandler"); + return; + } + fESD = esdH->GetHLTEvent(); + }// end if fUseHLT + else + fESD = (AliESDEvent*) (InputEvent()); + + if(fUseESDfriend) + { + if (fUseHLT) + { + AliESDEvent *fESDoffline; + fESDoffline = (AliESDEvent*) (InputEvent()); + fESDfriend = static_cast(fESDoffline->FindListObject("AliESDfriend")); + } + else + { + fESDfriend = static_cast(fESD->FindListObject("AliESDfriend")); + } + if(!fESDfriend) { + Printf("ERROR: ESD friends not available"); + } + } + + if(fUseMCInfo) { + fMC = MCEvent(); + } + + + if (!fESD) { + Printf("ERROR: ESD event not available"); + return; + } + + if (fUseMCInfo && !fMC) { + Printf("ERROR: MC event not available"); + return; + } + + if(fUseESDfriend) + { + if(!fESDfriend) { + Printf("ERROR: ESD friends not available"); + } + } + + // Process analysis + Bool_t process = kTRUE; + + // Check for centrality + if (fUseCentrality) { + if ( CalculateCentralityBin() != fUseCentralityBin ) { + process = kFALSE; + } + } + + // Process comparison + if (process) { + AliPerformanceObject *pObj=0; + fPitList->Reset(); + while(( pObj = (AliPerformanceObject *)fPitList->Next()) != NULL) { + AliInfo(pObj->GetName()); + pObj->Exec(fMC,fESD,fESDfriend,fUseMCInfo,fUseESDfriend); + } + } + + // Post output data. + PostData(1, fOutput); +} + +//_____________________________________________________________________________ +void AliPerformanceTask::Terminate(Option_t *) +{ + // Called once at the end + + if ( !fUseTerminate ) + return; + + // check output data + fOutputSummary = dynamic_cast (GetOutputData(0)); + fOutput = dynamic_cast (GetOutputData(1)); + if (!fOutput) { + Printf("ERROR: AliPerformanceTask::Terminate(): fOutput data not available ..." ); + return; + } + if (fOutputSummary) { delete fOutputSummary; fOutputSummary=0; } + AliPerformanceObject* pObj=0; + AliPerformanceTPC* pTPC = 0; + AliPerformanceDEdx* pDEdx = 0; + AliPerformanceMatch* pMatch = 0; + AliPerformanceMatch* pPull = 0; + AliPerformanceMatch* pConstrain = 0; + TIterator* itOut = fOutput->MakeIterator(); + itOut->Reset(); + while(( pObj = dynamic_cast(itOut->Next())) != NULL) { + pObj->AnalyseFinal(); + /* if (! pTPC) { pTPC = dynamic_cast(pObj); } + if (! pDEdx) { pDEdx = dynamic_cast(pObj); } + if (! pMatch) { pMatch = dynamic_cast(pObj); } + if ((! pPull) && pMatch ) { pPull = dynamic_cast(pObj);*/ + + if (!strcmp(pObj->GetName(),"AliPerformanceTPC")) { pTPC = dynamic_cast(pObj); } + if (!strcmp(pObj->GetName(),"AliPerformanceDEdxTPCInner")) { pDEdx = dynamic_cast(pObj); } + if (!strcmp(pObj->GetName(),"AliPerformanceMatchTPCITS")) { pMatch = dynamic_cast(pObj); } + if (!strcmp(pObj->GetName(),"AliPerformanceMatchITSTPC")) { pPull = dynamic_cast(pObj);} + if (!strcmp(pObj->GetName(),"AliPerformanceMatchTPCConstrain")) { pConstrain = dynamic_cast(pObj);} + } + + + if(!fUseOCDB) { + printf("DO NOT USE OCDB \n"); + return; + } + + if (! AliCDBManager::Instance()->GetDefaultStorage()) { AliCDBManager::Instance()->SetDefaultStorage("raw://"); } + TUUID uuid; + TString tmpFile = gSystem->TempDirectory() + TString("/TPCQASummary.") + uuid.AsString() + TString(".root"); + AliTPCPerformanceSummary::WriteToFile(pTPC, pDEdx, pMatch, pPull, pConstrain, tmpFile.Data()); + TChain* chain = new TChain("tpcQA"); + if(!chain) return; + chain->Add(tmpFile.Data()); + TTree *tree = chain->CopyTree("1"); + if (chain) { delete chain; chain=0; } + fOutputSummary = tree; + + // Post output data. + PostData(0, fOutputSummary); + +} + +//_____________________________________________________________________________ +void AliPerformanceTask::FinishTaskOutput() +{ + // called once at the end of each job (on the workernode) + // + // projects THnSparse to TH1,2,3 + + fOutput = dynamic_cast (GetOutputData(1)); + if (!fOutput) { + Printf("ERROR: AliPerformanceTask::FinishTaskOutput(): fOutput data not available ..." ); + return; + } + + AliPerformanceObject* pObj=0; + TIterator* itOut = fOutput->MakeIterator(); + itOut->Reset(); + while(( pObj = dynamic_cast(itOut->Next())) != NULL) { + pObj->SetRunNumber(fCurrentRunNumber); + pObj->Analyse(); + } + + // Post output data. + PostData(1, fOutput); +} + +//_____________________________________________________________________________ +Bool_t AliPerformanceTask::Notify() +{ + static Int_t count = 0; + count++; + Printf("Processing %d. file", count); + + return kTRUE; +} + +//________________________________________________________________________ +Int_t AliPerformanceTask::CalculateCentralityBin(){ + // Get Centrality bin + + Int_t centrality = -1; + Float_t centralityF = -1; + + if (fUseCentrality == 0) + return centrality; + + AliCentrality *esdCentrality = fESD->GetCentrality(); + + // New : 2010-11-18 JMT + if ( fUseCentrality == 1 ) + centralityF = esdCentrality->GetCentralityPercentile("V0M"); + else if ( fUseCentrality == 2 ) + centralityF = esdCentrality->GetCentralityPercentile("CL1"); + else if ( fUseCentrality == 3 ) + centralityF = esdCentrality->GetCentralityPercentile("TRK"); + if (centralityF == 0.) + centralityF = 100.; + + if ( centralityF >= 0. && centralityF < 5.) centrality = 0; + else if ( centralityF >= 5. && centralityF < 10.) centrality = 5; + else if ( centralityF >= 10. && centralityF < 20.) centrality = 10; + else if ( centralityF >= 20. && centralityF < 30.) centrality = 20; + else if ( centralityF >= 30. && centralityF < 40.) centrality = 30; + else if ( centralityF >= 40. && centralityF < 50.) centrality = 40; + else if ( centralityF >= 50. && centralityF < 60.) centrality = 50; + else if ( centralityF >= 60. && centralityF < 70.) centrality = 60; + else if ( centralityF >= 70. && centralityF < 80.) centrality = 70; + else if ( centralityF >= 80. && centralityF < 90.) centrality = 80; + else if ( centralityF >= 90. && centralityF <=100.) centrality = 90; + + return centrality; +} diff --git a/PWGPP/TRD/AliTRDinfoGen.cxx b/PWGPP/TRD/AliTRDinfoGen.cxx index 88c9d9aa94e..640142e3399 100644 --- a/PWGPP/TRD/AliTRDinfoGen.cxx +++ b/PWGPP/TRD/AliTRDinfoGen.cxx @@ -1,1044 +1,1044 @@ -/************************************************************************** -* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -/* $Id: AliTRDinfoGen.cxx 27496 2008-07-22 08:35:45Z cblume $ */ - -//////////////////////////////////////////////////////////////////////////// -// -// Tender wagon for TRD performance/calibration train -// -// In this wagon the information from -// - ESD -// - Friends [if available] -// - MC [if available] -// are grouped into AliTRDtrackInfo objects and fed to worker tasks -// -// Authors: -// Markus Fasel -// Alexandru Bercuci -// -//////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AliLog.h" -#include "AliAnalysisManager.h" -#include "AliGeomManager.h" -#include "AliCDBManager.h" -#include "AliCDBStorage.h" -#include "AliCDBEntry.h" -#include "AliCDBPath.h" -#include "AliESDEvent.h" -#include "AliMCEvent.h" -#include "AliESDInputHandler.h" -#include "AliESDInputHandlerRP.h" -#include "AliMCEventHandler.h" - -#include "AliESDfriend.h" -#include "AliESDfriendTrack.h" -#include "AliESDHeader.h" -#include "AliESDRun.h" -#include "AliESDtrack.h" -#include "AliESDv0.h" -#include "AliESDtrackCuts.h" -#include "AliESDv0KineCuts.h" -#include "AliMCParticle.h" -#include "AliMultiplicity.h" -#include "AliCentrality.h" -#include "AliPID.h" -#include "AliStack.h" -#include "AliTrackReference.h" -#include "TTreeStream.h" - -#include -#include -#include -#include -#include - -#include "AliTRDReconstructor.h" -#include "AliTRDrecoParam.h" -#include "AliTRDcalibDB.h" -#include "AliTRDtrackerV1.h" -#include "AliTRDpadPlane.h" -#include "AliTRDgeometry.h" -#include "AliTRDtrackV1.h" -#include "AliTRDseedV1.h" -#include "AliTRDcluster.h" -#include "AliTRDinfoGen.h" -#include "AliTRDpwgppHelper.h" -#include "info/AliTRDtrackInfo.h" -#include "info/AliTRDeventInfo.h" -#include "info/AliTRDv0Info.h" -#include "info/AliTRDchmbInfo.h" -#include "info/AliTRDtriggerInfo.h" -#include "info/AliTRDeventCuts.h" - -ClassImp(AliTRDinfoGen) - -const Float_t AliTRDinfoGen::fgkITS = 100.; // to be checked -const Float_t AliTRDinfoGen::fgkTPC = 290.; -const Float_t AliTRDinfoGen::fgkTRD = 365.; - -const Float_t AliTRDinfoGen::fgkTrkDCAxy = 1.; -const Float_t AliTRDinfoGen::fgkTrkDCAz = 1.; -const Int_t AliTRDinfoGen::fgkNclTPC = 70; -const Float_t AliTRDinfoGen::fgkPt = 0.2; -const Float_t AliTRDinfoGen::fgkEta = 0.9; -AliTRDReconstructor* AliTRDinfoGen::fgReconstructor(NULL); -AliTRDgeometry* AliTRDinfoGen::fgGeo(NULL); -//____________________________________________________________________ -AliTRDinfoGen::AliTRDinfoGen() - :AliAnalysisTaskSE() - ,fESDev(NULL) - ,fMCev(NULL) - ,fEventCut(NULL) - ,fTrackCut(NULL) - ,fV0Identifier(NULL) - ,fV0Cut(NULL) - ,fOCDB("local://$ALICE_ROOT/OCDB") - ,fTrackInfo(NULL) - ,fEventInfo(NULL) - ,fV0Info(NULL) - ,fTracksBarrel(NULL) - ,fTracksITS(NULL) - ,fTracksSA(NULL) - ,fTracksKink(NULL) - ,fV0List(NULL) - ,fClusters(NULL) - ,fContainer(NULL) - ,fRecos(NULL) - ,fDebugStream(NULL) -{ - // - // Default constructor - // - SetNameTitle("TRDinfoGen", "MC-REC TRD-track list generator"); -} - -//____________________________________________________________________ -AliTRDinfoGen::AliTRDinfoGen(char* name) - :AliAnalysisTaskSE(name) - ,fESDev(NULL) - ,fMCev(NULL) - ,fEventCut(NULL) - ,fTrackCut(NULL) - ,fV0Identifier(NULL) - ,fV0Cut(NULL) - ,fOCDB("local://$ALICE_ROOT/OCDB") - ,fTrackInfo(NULL) - ,fEventInfo(NULL) - ,fV0Info(NULL) - ,fTracksBarrel(NULL) - ,fTracksITS(NULL) - ,fTracksSA(NULL) - ,fTracksKink(NULL) - ,fV0List(NULL) - ,fClusters(NULL) - ,fContainer(NULL) - ,fRecos(NULL) - ,fDebugStream(NULL) -{ - // - // Default constructor - // - SetTitle("MC-REC TRD-track list generator"); - DefineOutput(AliTRDpwgppHelper::kTracksBarrel, TObjArray::Class()); - DefineOutput(AliTRDpwgppHelper::kTracksITS, TObjArray::Class()); - DefineOutput(AliTRDpwgppHelper::kTracksSA, TObjArray::Class()); - DefineOutput(AliTRDpwgppHelper::kTracksKink, TObjArray::Class()); - DefineOutput(AliTRDpwgppHelper::kEventInfo, AliTRDeventInfo::Class()); - DefineOutput(AliTRDpwgppHelper::kV0List, TObjArray::Class()); - DefineOutput(AliTRDpwgppHelper::kClusters, TObjArray::Class()); - DefineOutput(AliTRDpwgppHelper::kMonitor, TObjArray::Class()); // histogram list -} - -//____________________________________________________________________ -AliTRDinfoGen::~AliTRDinfoGen() -{ -// Destructor - if(fgGeo) delete fgGeo; - if(fgReconstructor) delete fgReconstructor; - if(fDebugStream) delete fDebugStream; - if(fV0Cut) delete fV0Cut; - if(fV0Identifier) delete fV0Identifier; - if(fTrackCut) delete fTrackCut; - if(fEventCut) delete fEventCut; - if(fTrackInfo) delete fTrackInfo; fTrackInfo = NULL; - if(fEventInfo) delete fEventInfo; fEventInfo = NULL; - if(fV0Info) delete fV0Info; fV0Info = NULL; - if(fTracksBarrel){ - fTracksBarrel->Delete(); delete fTracksBarrel; - fTracksBarrel = NULL; - } - if(fTracksITS){ - fTracksITS->Delete(); delete fTracksITS; - fTracksITS = NULL; - } - if(fTracksSA){ - fTracksSA->Delete(); delete fTracksSA; - fTracksSA = NULL; - } - if(fTracksKink){ - fTracksKink->Delete(); delete fTracksKink; - fTracksKink = NULL; - } - if(fV0List){ - fV0List->Delete(); - delete fV0List; - fV0List = NULL; - } - if(fClusters){ - fClusters->Delete(); delete fClusters; - fClusters = NULL; - } - if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){ - fContainer->Delete(); - delete fContainer; - fContainer = NULL; - } -} - -//____________________________________________________________________ -Bool_t AliTRDinfoGen::GetRefFigure(Int_t) -{ -// General graphs for PWGPP/TRD train - if(!gPad){ - AliWarning("Please provide a canvas to draw results."); - return kFALSE; - } - fContainer->At(kStatTrk)->Draw("bar"); - return kTRUE; -} - -//____________________________________________________________________ -void AliTRDinfoGen::UserCreateOutputObjects() -{ - // - // Create Output Containers (TObjectArray containing 1D histograms) - // - - fTrackInfo = new AliTRDtrackInfo(); - fEventInfo = new AliTRDeventInfo(); - fV0Info = new AliTRDv0Info(); - fTracksBarrel = new TObjArray(200); fTracksBarrel->SetOwner(kTRUE); - fTracksITS = new TObjArray(20); fTracksITS->SetOwner(kTRUE); - fTracksSA = new TObjArray(20); fTracksSA->SetOwner(kTRUE); - fTracksKink = new TObjArray(20); fTracksKink->SetOwner(kTRUE); - fV0List = new TObjArray(10); fV0List->SetOwner(kTRUE); - fClusters = new TObjArray(AliTRDgeometry::kNdet); fClusters->SetOwner(kTRUE); - - // define general monitor - fContainer = new TObjArray(kNclasses); fContainer->SetOwner(kTRUE); - TH1 *h=new TH1I("hStat", "Run statistics;Observable;Entries", Int_t(kNObjects), -0.5, Float_t(kNObjects)-0.5); - TAxis *ax(h->GetXaxis()); - ax->SetBinLabel(Int_t(kTracksESD) + 1, "ESD"); - ax->SetBinLabel(Int_t(kTracksMC) + 1, "MC"); - ax->SetBinLabel(Int_t(kV0) + 1, "V0"); - ax->SetBinLabel(Int_t(kTPC) + 1, "TPC"); - ax->SetBinLabel(Int_t(kITS) + 1, "ITS"); - ax->SetBinLabel(Int_t(kTRDin) + 1, "TRDin"); - ax->SetBinLabel(Int_t(kTRDout) + 1, "TRDout"); - ax->SetBinLabel(Int_t(kBarrel) + 1, "Barrel"); - ax->SetBinLabel(Int_t(kBarrelMC) + 1, "BarrelMC"); - ax->SetBinLabel(Int_t(kSA) + 1, "SA"); - ax->SetBinLabel(Int_t(kSAMC) + 1, "SAMC"); - ax->SetBinLabel(Int_t(kKink) + 1, "Kink"); - ax->SetBinLabel(Int_t(kKinkMC) + 1, "KinkMC"); - ax->SetBinLabel(Int_t(kBarrelFriend) + 1, "BFriend"); - ax->SetBinLabel(Int_t(kSAFriend) + 1, "SFriend"); - fContainer->AddAt(h, kStatTrk); - h=new TH1I("hEv", "Run statistics;Event Class;Entries", 4, -0.5, 3.5); - ax = h->GetXaxis(); - ax->SetBinLabel(1, "Low"); - ax->SetBinLabel(2, "High"); - ax->SetBinLabel(3, "Cosmic"); - ax->SetBinLabel(4, "Calib"); - fContainer->AddAt(h, kEvType); - TH2I* h2=new TH2I("hBCtrack", "Track Statistics;Fill Bunch;TOF BC;Entries", 3500, -0.5, 3499.5, 31, -10.5, 20.5); - fContainer->AddAt(h2, kBC); - fContainer->AddAt(new AliTRDtriggerInfo(), kTrigger); - TObjArray *chmb = new TObjArray(AliTRDgeometry::kNdet); - chmb->SetName("Chambers Status"); chmb->SetOwner(kTRUE); - fContainer->AddAt(chmb, kChmb); - - PostData(AliTRDpwgppHelper::kTracksBarrel, fTracksBarrel); - PostData(AliTRDpwgppHelper::kTracksITS, fTracksITS); - PostData(AliTRDpwgppHelper::kTracksSA, fTracksSA); - PostData(AliTRDpwgppHelper::kTracksKink, fTracksKink); - PostData(AliTRDpwgppHelper::kEventInfo, fEventInfo); - PostData(AliTRDpwgppHelper::kV0List, fV0List); - PostData(AliTRDpwgppHelper::kClusters, fClusters); - PostData(AliTRDpwgppHelper::kMonitor, fContainer); -} - -//____________________________________________________________________ -Bool_t AliTRDinfoGen::Load(const Char_t *file, const Char_t *dir, const Char_t *name) -{ -// Load data from performance file - - if(!TFile::Open(file)){ - AliWarning(Form("Couldn't open file %s.", file)); - return kFALSE; - } - if(!gFile->cd(dir)){ - AliWarning(Form("Couldn't cd to %s in %s.", dir, file)); - gFile->Close(); - return kFALSE; - } - const Char_t *tn=(name ? name : GetName()); - if(!(fContainer = (TObjArray*)gDirectory->Get(tn))){ - AliWarning(Form("Missing histogram container %s.", tn)); - gFile->Close(); - return kFALSE; - } - gFile->Close(); - return kTRUE; -} - -//____________________________________________________________________ -void AliTRDinfoGen::UserExec(Option_t *){ - // - // Run the Analysis - // - - fTracksBarrel->Delete(); - fTracksITS->Delete(); - fTracksSA->Delete(); - fTracksKink->Delete(); - fV0List->Delete(); - fClusters->Delete(); - fEventInfo->Delete(""); - - fESDev = dynamic_cast(InputEvent()); - if(!fESDev){ - AliError("Failed retrieving ESD event"); - return; - } - // WARNING - // This part may conflict with other detectors !! - if(!IsInitOCDB()){ - AliCDBEntry* obj(NULL); - AliCDBManager* ocdb = AliCDBManager::Instance(); - if(ocdb->IsDefaultStorageSet()){ - AliInfo("OCDB :: initialized externally."); - } else { - AliInfo("OCDB :: initializing locally ..."); - // prepare OCDB access - ocdb->SetDefaultStorage(fOCDB.Data()); - //ocdb->SetSpecificStorage("TRD/Align/Data", "local:///home/niham/abercuci/local"); - ocdb->SetRun(fESDev->GetRunNumber()); - // create geo manager - if(!(obj = ocdb->Get(AliCDBPath("GRP", "Geometry", "Data")))){ - AliError("GEOMETRY failed initialization."); - } else { - AliGeomManager::SetGeometry((TGeoManager*)obj->GetObject()); - AliGeomManager::GetNalignable("TRD"); - AliGeomManager::GetNalignable("TPC"); - AliGeomManager::GetNalignable("ITS"); - AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD"); - } - //init magnetic field - if(!TGeoGlobalMagField::Instance()->IsLocked() && - !fESDev->InitMagneticField()){ - AliError("MAGNETIC FIELD failed initialization."); - } - // set no of time bins - AliTRDtrackerV1::SetNTimeBins(AliTRDcalibDB::Instance()->GetNumberOfTimeBinsDCS()); - } - AliInfo(Form("OCDB : Loc[%s] Run[%d] TB[%d]", ocdb->GetDefaultStorage()->GetURI().Data(), ocdb->GetRun(), AliTRDtrackerV1::GetNTimeBins())); - - // load misalignment - fgGeo = new AliTRDgeometry; - fgGeo->CreateClusterMatrixArray(); - MakeChambers(); - // load reco param list from OCDB - AliInfo("Initializing TRD reco params ..."); - fgReconstructor = new AliTRDReconstructor(); - if(!(obj = ocdb->Get(AliCDBPath("TRD", "Calib", "RecoParam")))){ - AliError("RECO PARAM failed initialization."); - } else { - obj->PrintMetaData(); - fRecos = (TObjArray*)obj->GetObject(); - } - SetInitOCDB(); - } - - AliDebug(2, "+++++++++++++++++++++++++++++++++++++++"); - AliDebug(2, Form("Analyse Ev[%d]", fESDev->GetEventNumberInFile())); - - // set reco param valid for this event - TH1 *h = (TH1I*)fContainer->At(kEvType); - if(!fRecos){ - fgReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam()); - h->Fill(0); - } else { - for(Int_t ireco(0); irecoGetEntriesFast(); ireco++){ - AliTRDrecoParam *reco((AliTRDrecoParam*)fRecos->At(ireco)); - Int_t es(reco->GetEventSpecie()); - if(!(es&fESDev->GetEventSpecie())) continue; - fgReconstructor->SetRecoParam(reco); - if(AliLog::GetDebugLevel("PWGPP/TRD", "AliTRDinfoGen")>5) reco->Dump(); - TString s; - if(es&AliRecoParam::kLowMult){ s="LowMult"; h->Fill(0);} - else if(es&AliRecoParam::kHighMult){ s="HighMult"; h->Fill(1);} - else if(es&AliRecoParam::kCosmic){ s="Cosmic"; h->Fill(2);} - else if(es&AliRecoParam::kCalib){ s="Calib"; h->Fill(3);} - else s="Unknown"; - AliDebug(2, Form(" Using reco param \"%s\" for event %d.", s.Data(), fESDev->GetEventNumberInFile())); - break; - } - } - - // link MC if available - fMCev = MCEvent(); - - // trigger monitor - AliTRDtriggerInfo *ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger); - TObjArray *evTriggers = fESDev->GetFiredTriggerClasses().Tokenize(" "); - //printf("Ev[%03d] Triggers[%s]\n", fESDev->GetEventNumberInFile(), fESDev->GetFiredTriggerClasses().Data()); - for(Int_t iet(evTriggers->GetEntriesFast()); iet--;) ti->Add((*evTriggers)[iet]->GetName()); - evTriggers->Delete(); delete evTriggers; - - // event selection based on vertex cuts and trigger - if(UseLocalEvSelection() && !fEventCut->IsSelected(fESDev, IsCollision())){ - AliDebug(2, "Event failed selection on vertex and trigger"); - return; - } - - if(!fESDfriend){ - AliError("Failed retrieving ESD friend event"); - return; - } - if(HasMCdata() && !fMCev){ - AliError("Failed retrieving MC event"); - return; - } - - new(fEventInfo)AliTRDeventInfo(fESDev->GetHeader(), const_cast(fESDev->GetESDRun())); - // Determine centrality - // Author: Ionut Arsene - TString beamtype = fESDev->GetESDRun()->GetBeamType(); - if(beamtype.Contains("Pb-Pb") || beamtype.Contains("A-A")){ - const AliMultiplicity *mult = fESDev->GetMultiplicity(); - fEventInfo->SetMultiplicity(mult?mult->GetNumberOfTracklets():0); - const AliCentrality *cent = fESDev->GetCentrality(); - // centrality for different options V0 = "V0M", ITS = "TKL" etc - fEventInfo->SetCentrality(cent?cent->GetCentralityPercentile("TKL"):-1.); - AliDebug(2, Form(" Beam Type[%s] Mult[%d/%4d] Cent[%d/%5.2f]", - beamtype.Data(), - fEventInfo->GetMultiplicity(), mult?mult->GetNumberOfTracklets():0, - fEventInfo->GetCentrality(), cent?cent->GetCentralityPercentile("TKL"):-1.)); - } else { - fEventInfo->SetMultiplicity(0); - fEventInfo->SetCentrality(-1.); - AliDebug(2, Form(" Beam Type[%s]", beamtype.Data())); - } - UShort_t evBC(fESDev->GetBunchCrossNumber()); - - // electron identifier from conversions - if(!fV0Identifier) fV0Identifier = new AliESDv0KineCuts(); - fV0Identifier->SetEvent(fESDev); - - Bool_t *trackMap(NULL); - AliStack * mStack(NULL); - Int_t nTracksMC = HasMCdata() ? fMCev->GetNumberOfTracks() : 0, nTracksESD = fESDev->GetNumberOfTracks(); - if(HasMCdata()){ - mStack = fMCev->Stack(); - if(!mStack){ - AliError("Failed retrieving MC Stack"); - return; - } - trackMap = new Bool_t[nTracksMC]; - memset(trackMap, 0, sizeof(Bool_t) * nTracksMC); - } - - Double32_t dedx[100]; Int_t nSlices(0); - Int_t nTRDout(0), nTRDin(0), nTPC(0), nITS(0) -// ,nclsTrklt - ,nBarrel(0), nBarrelITS(0), nSA(0), nKink(0) - ,nBarrelFriend(0), nBarrelITSFriend(0), nSAFriend(0) - ,nBarrelMC(0), nSAMC(0), nKinkMC(0); - AliESDtrack *esdTrack = NULL; - AliESDfriendTrack *esdFriendTrack = NULL; - TObject *calObject = NULL; - AliTRDtrackV1 *track = NULL; - AliTRDseedV1 *tracklet = NULL; - AliTRDcluster *cl = NULL; - - - // LOOP 0 - over ESD v0s - Float_t bField(fESDev->GetMagneticField()); - AliESDv0 *v0(NULL); - Int_t v0pid[AliPID::kSPECIES]; - for(Int_t iv0(0); iv0GetNumberOfV0s(); iv0++){ - // Take only V0s from the On-the-fly v0 finder - if(!(v0 = fESDev->GetV0(iv0))) continue; - if(!v0->GetOnFlyStatus()) continue; - // register v0 - if(fV0Cut) new(fV0Info) AliTRDv0Info(*fV0Cut); - else new(fV0Info) AliTRDv0Info(); - fV0Info->SetMagField(bField); - fV0Info->SetV0tracks(fESDev->GetTrack(v0->GetPindex()), fESDev->GetTrack(v0->GetNindex())); - fV0Info->SetV0Info(v0); - // tag conversion electrons - Int_t pdgV0, pdgP, pdgN; - if(fV0Identifier->ProcessV0(v0, pdgV0, pdgP, pdgN)) { - switch(pdgV0){ - case kGamma: fV0Info->SetDecay(AliTRDv0Info::kGamma); break; - case kK0Short: fV0Info->SetDecay(AliTRDv0Info::kK0s); break; - case kLambda0: fV0Info->SetDecay(AliTRDv0Info::kLambda); break; - case kLambda0Bar: fV0Info->SetDecay(AliTRDv0Info::kAntiLambda); break; - default: AliDebug(1, Form("V0[%+4d] -> +[%+4d] -[%+4d]. Decay not mapped.", pdgV0, pdgP, pdgN)); - } - } - fV0List->Add(new AliTRDv0Info(*fV0Info));// kFOUND=kFALSE; - } - - - // LOOP 1 - over ESD tracks - AliTRDv0Info *v0info=NULL; - for(Int_t itrk = 0; itrk < nTracksESD; itrk++){ - new(fTrackInfo) AliTRDtrackInfo(); - esdTrack = fESDev->GetTrack(itrk); - AliDebug(3, Form("\n%3d ITS[%d] TPC[%d] TRD[%d] TOF-BC[%d]\n", itrk, esdTrack->GetNcls(0), esdTrack->GetNcls(1), esdTrack->GetNcls(2), esdTrack->GetTOFBunchCrossing())); - if(esdTrack->GetStatus()&AliESDtrack::kITSout) nITS++; - if(esdTrack->GetStatus()&AliESDtrack::kTPCout) nTPC++; - if(esdTrack->GetStatus()&AliESDtrack::kTRDout) nTRDout++; - if(esdTrack->GetStatus()&AliESDtrack::kTRDin) nTRDin++; - -/* Int_t ns(esdTrack->GetNumberOfTRDslices()); - printf(" %3d ITS[%c] TPC[%c] TRDin[%c] TRDout[%c] TRDStop[%c] ns[%d]\n", itrk, - (esdTrack->GetStatus()&AliESDtrack::kITSout)?'y':'n', - (esdTrack->GetStatus()&AliESDtrack::kTPCout)?'y':'n', - (esdTrack->GetStatus()&AliESDtrack::kTRDin)?'y':'n', - (esdTrack->GetStatus()&AliESDtrack::kTRDout)?'y':'n', - (esdTrack->GetStatus()&AliESDtrack::kTRDStop)?'y':'n', ns); - if(ns){ - for(Int_t ipl(0); iplGetTRDmomentum(ipl, &sp)); - printf(" [%d] p[%6.3f+-%6.3f] dEdx={", ipl, p, sp); - for(Int_t is(0); is<8; is++) printf("%7.2f ", esdTrack->GetTRDslice(ipl, is)); printf("}\n"); - } - } -*/ - // look at external track param - const AliExternalTrackParam *op = esdTrack->GetOuterParam(); - Double_t xyz[3]; - if(op){ - op->GetXYZ(xyz); - op->Global2LocalPosition(xyz, op->GetAlpha()); - AliDebug(3, Form("op @ X[%7.3f]\n", xyz[0])); - } - - // read MC info - Int_t label = -1; UInt_t alab=UINT_MAX; - if(HasMCdata()){ - label = esdTrack->GetLabel(); - alab = TMath::Abs(label); - // register the track - if(alab < UInt_t(nTracksMC)){ - trackMap[alab] = kTRUE; - } else { - AliError(Form("MC label[%d] outside scope for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk)); - continue; - } - AliMCParticle *mcParticle(NULL); - if(!(mcParticle = (AliMCParticle*) fMCev->GetTrack(alab))){ - AliError(Form("MC particle label[%d] missing for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk)); - continue; - } - fTrackInfo->SetMC(); - fTrackInfo->SetMCeta(mcParticle->Eta()); - fTrackInfo->SetMCphi(mcParticle->Phi()); - fTrackInfo->SetMCpt(mcParticle->Pt()); - fTrackInfo->SetPDG(mcParticle->Particle()->GetPdgCode()); - fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary()); - fTrackInfo->SetLabel(label); - fTrackInfo->SetTRDlabel(esdTrack->GetTRDLabel()); - AliTrackReference *ref(NULL); - for(Int_t iref(0); irefGetNumberOfTrackReferences(); iref++){ - if(!(ref = mcParticle->GetTrackReference(iref))) continue; - if(ref->DetectorId() != AliTrackReference::kTRD) continue; - AliDebug(4, Form(" TRD trackRef[%2d] @ r[%7.3f] [REC]", iref, ref->LocalX())); - fTrackInfo->AddTrackRef(ref); - } - AliDebug(3, Form("Lab[%4d] pdg[%+4d] NtrackRefs[%d(%d)]", alab, mcParticle->Particle()->GetPdgCode(), fTrackInfo->GetNTrackRefs(), mcParticle->GetNumberOfTrackReferences())); - } - - // copy some relevant info to TRD track info - fTrackInfo->SetStatus(esdTrack->GetStatus()); - fTrackInfo->SetTrackId(esdTrack->GetID()); - Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p); - fTrackInfo->SetESDpid(p); - fTrackInfo->SetESDpidQuality(esdTrack->GetTRDntrackletsPID()); - fTrackInfo->SetESDeta(esdTrack->Eta()); - Double_t loc[3]; - if(esdTrack->GetXYZAt(298., fESDev->GetMagneticField(), loc)) fTrackInfo->SetESDphi(TMath::ATan2(loc[1], loc[0])); - fTrackInfo->SetESDpt(esdTrack->Pt()); - if(!nSlices) nSlices = esdTrack->GetNumberOfTRDslices(); - memset(dedx, 0, 100*sizeof(Double32_t)); - Int_t in(0); - for(Int_t il=0; ilGetTRDslice(il, is); - for(Int_t il=0; ilGetTRDmomentum(il); - fTrackInfo->SetSlices(in, dedx); - fTrackInfo->SetNumberOfClustersRefit(esdTrack->GetNcls(2)); - // some other Informations which we may wish to store in order to find problematic cases - fTrackInfo->SetKinkIndex(esdTrack->GetKinkIndex(0)); - fTrackInfo->SetTPCncls(static_cast(esdTrack->GetNcls(1))); - fTrackInfo->SetTPCdedx(esdTrack->GetTPCsignal()); - Float_t tofTime = esdTrack->GetTOFsignal() - fESDev->GetT0TOF(0); - fTrackInfo->SetTOFbeta(tofTime>0.?((esdTrack->GetIntegratedLength()/(tofTime*TMath::C()))*10e9):-999.); - fTrackInfo->SetTOFbc(esdTrack->GetTOFBunchCrossing()==AliVTrack::kTOFBCNA?0:esdTrack->GetTOFBunchCrossing()); -// nclsTrklt = 0; - - // set V0pid info - //printf("%4d Looking for V0s...\n" , fTrackInfo->GetTrackId()); - for(Int_t iv(0); ivGetEntriesFast(); iv++){ - if(!(v0info = (AliTRDv0Info*)fV0List->At(iv))) continue; - if(!v0info->GetV0Daughter(1) && !v0info->GetV0Daughter(-1)) continue; - if(!v0info->HasTrack(fTrackInfo)) continue; - //v0info->Print(); - memset(v0pid, 0, AliPID::kSPECIES*sizeof(Int_t)); - fTrackInfo->SetV0(); - for(Int_t is=AliPID::kSPECIES; is--;) v0pid[is] = v0info->GetPID(is, fTrackInfo); fTrackInfo->SetV0pid(v0pid); - if(v0info->IsDecay(AliTRDv0Info::kGamma)) fTrackInfo->SetElectron(); - else if(v0info->IsDecay(AliTRDv0Info::kK0s)) fTrackInfo->SetPion(); - else if(v0info->IsDecay(AliTRDv0Info::kLambda)) esdTrack->Charge()>0?fTrackInfo->SetProton():fTrackInfo->SetPion(); - else if(v0info->IsDecay(AliTRDv0Info::kAntiLambda)) esdTrack->Charge()<0?fTrackInfo->SetProton():fTrackInfo->SetPion(); - - //TODO one track can be attached to more than one v0. Ideally one would need a list of v0 attached to the track info - } - - // read track REC info - if((esdFriendTrack = (fESDfriend->GetNumberOfTracks() > itrk) ? fESDfriend->GetTrack(itrk): NULL)) { - fTrackInfo->SetTPCoutParam(esdFriendTrack->GetTPCOut()); - fTrackInfo->SetITSoutParam(esdFriendTrack->GetITSOut()); - const AliTrackPointArray *tps(NULL); - if((tps=esdFriendTrack->GetTrackPointArray()) && HasTrackPoints()) fTrackInfo->SetTrackPointArray(tps); - Int_t icalib = 0; - while((calObject = esdFriendTrack->GetCalibObject(icalib++))){ - if(strcmp(calObject->IsA()->GetName(),"AliTRDtrackV1") != 0) continue; // Look for the TRDtrack - if(!(track = dynamic_cast(calObject))) break; - AliDebug(4, Form("TRD track OK")); - // Set the clusters to unused - for(Int_t ipl = 0; ipl < AliTRDgeometry::kNlayer; ipl++){ - if(!(tracklet = track->GetTracklet(ipl))) continue; - tracklet->ResetClusterIter(); - while((cl = tracklet->NextCluster())) cl->Use(0); - } - fTrackInfo->SetTrack(track); - ((TH2I*)fContainer->At(kBC))->Fill(evBC, esdTrack->GetTOFBunchCrossing()); - break; - } - AliDebug(3, Form("Ntracklets[%d]", fTrackInfo->GetNTracklets())); - } else AliDebug(3, Form("No Friends for trk[%3d] Ntrk[%3d]", itrk, fESDfriend->GetNumberOfTracks())); - if(op) fTrackInfo->SetOuterParam(op); - - if(DebugLevel() >= 1){ - AliTRDtrackInfo info(*fTrackInfo); - (*DebugStream()) << "trackInfo" - << "TrackInfo.=" << &info - << "\n"; - info.Delete(""); - } - - ULong_t status(esdTrack->GetStatus()); - if((status&AliESDtrack::kTPCout)){ // TPC prolongation - if(!esdTrack->GetKinkIndex(0)){ // Barrel Track Selection - Bool_t selected(kTRUE); - if(UseLocalTrkSelection()){ - if(esdTrack->Pt() < fgkPt){ - AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt())); - selected = kFALSE; - } - if(selected && TMath::Abs(esdTrack->Eta()) > fgkEta){ - AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta()))); - selected = kFALSE; - } - if(selected && esdTrack->GetTPCNcls() < fgkNclTPC){ - AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] NclTPC[%d]", itrk, fESDev->GetEventNumberInFile(), esdTrack->GetTPCNcls())); - selected = kFALSE; - } - if(selected && !(esdTrack->GetStatus()&AliESDtrack::kITSrefit)){ //SPD refit flag (Ionut) - AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] ITSrefit", itrk, fESDev->GetEventNumberInFile())); - selected = kFALSE; - } - UChar_t itsMap = esdTrack->GetITSClusterMap(); - Bool_t firstSPDlayerHit = (itsMap & (UChar_t(1)<<0)), - secondSPDlayerHit = (itsMap & (UChar_t(1)<<1)); - if(selected && !(firstSPDlayerHit || secondSPDlayerHit)){ // request at least 1 SPD cluster (Ionut) - AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] no SPD cluster", itrk, fESDev->GetEventNumberInFile())); - selected = kFALSE; - } - - Float_t par[2], cov[3]; - esdTrack->GetImpactParameters(par, cov); - if(IsCollision()){ // cuts on DCA - if(selected && TMath::Abs(par[0]) > fgkTrkDCAxy){ - AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0]))); - selected = kFALSE; - } - if(selected && TMath::Abs(par[1]) > fgkTrkDCAz){ - AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1]))); - selected = kFALSE; - } - } else if(selected && fMCev && !fMCev->IsPhysicalPrimary(alab)){; - AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile())); - selected = kFALSE; - } - } - if(fTrackCut && !fTrackCut->IsSelected(esdTrack)) selected = kFALSE; - if(selected){ - fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo)); - nBarrel++; - if(fTrackInfo->GetTrack()) nBarrelFriend++; - } - } else { - fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo)); - nKink++; - } - } else if((status&AliESDtrack::kITSout)) { // ITS prolongation - Bool_t selected(kTRUE); - if(UseLocalTrkSelection()){ - if(esdTrack->Pt() < fgkPt){ - AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt())); - selected = kFALSE; - } - if(selected && TMath::Abs(esdTrack->Eta()) > fgkEta){ - AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta()))); - selected = kFALSE; - } - Float_t par[2], cov[3]; - esdTrack->GetImpactParameters(par, cov); - if(IsCollision()){ // cuts on DCA - if(selected && TMath::Abs(par[0]) > fgkTrkDCAxy){ - AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0]))); - selected = kFALSE; - } - if(selected && TMath::Abs(par[1]) > fgkTrkDCAz){ - AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1]))); - selected = kFALSE; - } - } else if(selected && fMCev && !fMCev->IsPhysicalPrimary(alab)){; - AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile())); - selected = kFALSE; - } - } - if(fTrackCut && !fTrackCut->IsSelected(esdTrack)) selected = kFALSE; - if(selected){ - fTracksITS->Add(new AliTRDtrackInfo(*fTrackInfo)); - nBarrelITS++; - if(fTrackInfo->GetTrack()) nBarrelITSFriend++; - } - } else if((status&AliESDtrack::kTRDout) && !(status&AliESDtrack::kTRDin)){ // TRD SA tracking - fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo)); - nSA++; - if(fTrackInfo->GetTrack()) nSAFriend++; - } - fTrackInfo->Delete(""); - } - // read clusters REC info - TTree * treeR(NULL); AliESDInputHandlerRP *esdRPhandler(NULL); - if(fInputHandler) esdRPhandler = dynamic_cast(fInputHandler); - if(esdRPhandler){ - if((treeR = esdRPhandler->GetTreeR("TRD"))) { - TObjArray *recPoints(NULL); - if((treeR->GetBranch("TRDcluster"))){ - treeR->SetBranchAddress("TRDcluster", &recPoints); - for(Int_t idet(0); idetGetEntries(); idet++){ - treeR->GetEntry(idet); - if(!recPoints->GetEntries()){ - AliDebug(1, Form("Missing entry %d from TreeR", idet)); - continue; - } - AliTRDcluster *c = (AliTRDcluster*)(*recPoints)[0]; - if(!c){ - AliDebug(1, Form("Missing first cluster in entry %d from TreeR", idet)); - continue; - } - fClusters->AddAt(recPoints->Clone(Form("%03d", c->GetDetector())), c->GetDetector()); - } - } else AliDebug(3, "No TRDcluster branch"); - } else AliDebug(3, "No RecPoints"); - } else AliDebug(3, "No AliESDInputHandlerRP"); - - - // LOOP 2 - over MC tracks which are passing TRD where the track is not reconstructed - if(HasMCdata()){ - AliDebug(10, "Output of the MC track map:"); - for(Int_t itk = 0; itk < nTracksMC; itk++) AliDebug(10, Form("trackMap[%d] = %s", itk, trackMap[itk] == kTRUE ? "TRUE" : "kFALSE")); - - AliTrackReference *ref(NULL); - for(Int_t itk = 0; itk < nTracksMC; itk++){ - if(trackMap[itk]) continue; - AliMCParticle *mcParticle = (AliMCParticle*) fMCev->GetTrack(TMath::Abs(itk)); - - Int_t nRefsTRD(0); - for(Int_t iref(0); irefGetNumberOfTrackReferences(); iref++){ // count TRD TR - if(!(ref = mcParticle->GetTrackReference(iref))) continue; - if(ref->DetectorId() != AliTrackReference::kTRD) continue; - if(!nRefsTRD){ // build track info for this pure MC track - new(fTrackInfo) AliTRDtrackInfo(); - fTrackInfo->SetMC(); - fTrackInfo->SetPDG(mcParticle->Particle()->GetPdgCode()); - } - AliDebug(4, Form(" TRD trackRef[%2d] @ r[%7.3f] [MC]", iref, ref->LocalX())); - fTrackInfo->AddTrackRef(ref); - } - // In this stage we at least require 1 hit inside TRD. What will be done with this tracks is a task for the - // analysis job - if(!nRefsTRD) continue; - AliDebug(3, Form("Lab[%4d] pdg[%+4d] NtrackRefs[%d(%d)]", itk, mcParticle->Particle()->GetPdgCode(), fTrackInfo->GetNTrackRefs(), mcParticle->GetNumberOfTrackReferences())); - fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary()); - fTrackInfo->SetLabel(itk); - if(DebugLevel() >= 1){ - AliTRDtrackInfo info(*fTrackInfo); - (*DebugStream()) << "trackInfo" - << "TrackInfo.=" << &info - << "\n"; - info.Delete(""); - } - AliDebug(3, Form("Add MC track @ label[%d] nTRDrefs[%d].", itk, nRefsTRD)); - // check where the track starts - ref = mcParticle->GetTrackReference(0); - if(ref->LocalX() < fgkITS){ - fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo)); - //fTracksITS->Add(new AliTRDtrackInfo(*fTrackInfo)); - nBarrelMC++; - } else if(ref->LocalX() < fgkTPC) { - fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo)); - nKinkMC++; - } else if(nRefsTRD>6){ - fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo)); - nSAMC++; - } - fTrackInfo->Delete(""); - } - delete[] trackMap; - } - AliDebug(1, Form( - "\nEv[%3d] Tracks: ESD[%d] MC[%d] V0[%d]\n" - " TPCout[%d] ITSout[%d] TRDin[%d] TRDout[%d]\n" - " Barrel[%3d+%3d=%3d] ITS[%3d=%3d] SA[%2d+%2d=%2d] Kink[%2d+%2d=%2d]" - ,(Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracksESD, nTracksMC, fV0List->GetEntries() - , nTPC, nITS, nTRDin, nTRDout - ,nBarrel, nBarrelMC, fTracksBarrel->GetEntries() - ,nBarrelITS, fTracksITS->GetEntries() - ,nSA, nSAMC, fTracksSA->GetEntries() - ,nKink, nKinkMC, fTracksKink->GetEntries() - )); - // save track statistics - h = (TH1I*)fContainer->At(kStatTrk); - h->Fill(Float_t(kTracksESD), nTracksESD); - h->Fill(Float_t(kTracksMC), nTracksMC); - h->Fill(Float_t(kV0), fV0List->GetEntries()); - h->Fill(Float_t(kTPC), nTPC); - h->Fill(Float_t(kITS), nITS); - h->Fill(Float_t(kTRDin), nTRDin); - h->Fill(Float_t(kTRDout), nTRDout); - h->Fill(Float_t(kBarrel), nBarrel); - h->Fill(Float_t(kBarrelMC), nBarrelMC); - h->Fill(Float_t(kSA), nSA); - h->Fill(Float_t(kSAMC), nSAMC); - h->Fill(Float_t(kKink), nKink); - h->Fill(Float_t(kKinkMC), nKinkMC); - h->Fill(Float_t(kBarrelFriend), nBarrelFriend); - h->Fill(Float_t(kSAFriend), nSAFriend); -} - - -//____________________________________________________________________ -void AliTRDinfoGen::MakeChambers() -{ -// Build chamber position and status - if(!fContainer){ - AliError("Missing container"); - return; - } - AliTRDcalibDB *calib(AliTRDcalibDB::Instance()); - if(!calib){ - AliError("No access to calibration data"); - return; - } - TObjArray *chmb = (TObjArray*)fContainer->At(kChmb); - Int_t stat(0); - Double_t alpha(0.), cs(-2.), sn(0.), pos[4]; - for(Int_t isec(0); isecGetClusterMatrix(idet)); - if(!matrix){ - AliDebug(2, Form("Missing matrix for %03d [%02d_%d_%d]", idet, isec, istk, ilyr)); - continue; - } - AliDebug(2, Form("Read info for %03d [%02d_%d_%d]", idet, isec, istk, ilyr)); - AliTRDpadPlane *pp(fgGeo->GetPadPlane(ilyr, istk)); - Double_t zm(0.5 * (pp->GetRow0() + pp->GetRowEnd())), - loc0[] = {AliTRDgeometry::AnodePos(), pp->GetCol0(), zm-pp->GetRow0()}, - loc1[] = {AliTRDgeometry::AnodePos(), pp->GetColEnd(), zm-pp->GetRowEnd()}, - glb[3] = {1,1,1}; - matrix->LocalToMaster(loc0, glb); - Float_t phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn), - tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]), - eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl)))); - pos[0] = eta; pos[1] = phi; - matrix->LocalToMaster(loc1, glb); - phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn); - tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]); - eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl)))); - pos[2] = eta; pos[3] = phi; - stat = 0; - if(calib->IsChamberGood(idet)){ - if(calib->IsHalfChamberNoData(idet, 0)) stat += 2; - if(calib->IsHalfChamberNoData(idet, 1)) stat += 3; - } else stat = 1; - chmb->Add(new AliTRDchmbInfo(idet, stat, pos)); - } - } - } -} - -//____________________________________________________________________ -void AliTRDinfoGen::MakeSummary() -{ -// Build summary plots - if(!fContainer){ - AliError("Missing results"); - return; - } - TH1 *h1(NULL); TVirtualPad *p(NULL); TCanvas *cOut(NULL); - - const Int_t nx(1024), ny(1024); - cOut = new TCanvas("infoGenSummary", "Run Statistics", nx, ny); - cOut->Divide(2,2, 1.e-5, 1.e-5); - //========= - p=cOut->cd(1);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy(); - h1 = (TH1*)fContainer->At(kStatTrk); - h1->SetBarOffset(0.06); h1->SetBarWidth(0.88); h1->SetFillColor(kGreen); h1->SetFillStyle(3001); - h1->Draw("bar1"); - //========= - p=cOut->cd(2);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy(); - h1 = (TH1*)fContainer->At(kEvType); - h1->SetBarOffset(0.04); h1->SetBarWidth(0.92);h1->SetFillColor(kGreen); h1->SetFillStyle(3001); - h1->Draw("bar1"); - //========= - p=cOut->cd(3);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogz(); - TH2 *h2((TH2*)fContainer->At(kBC)); - h1 = h2->ProjectionX("_px"); - Int_t n(0); Int_t bins[3500]; - for(Int_t ib(1); ib<=3500; ib++){ - if(h1->GetBinContent(ib) < 1) continue; - bins[n++] = ib; - } - delete h1; - - TAxis *ay(h2->GetYaxis()); - TH2 *hs = new TH2I("hBC_Summary", Form("%s;%s;%s", h2->GetTitle(), h2->GetXaxis()->GetTitle(), h2->GetYaxis()->GetTitle()), - n, -0.5, n-0.5, ay->GetNbins(), ay->GetXmin(), ay->GetXmax()); - hs->SetLineColor(kBlack);hs->SetLineWidth(1); - hs->SetMarkerColor(kRed); - TAxis *ax(hs->GetXaxis()); ax->CenterTitle(); ax->SetTitleOffset(1.4); - for(Int_t ib(0); ibSetBinLabel(ib+1, Form("%d", bins[ib])); - for(Int_t iy(1); iy<=ay->GetNbins(); iy++){ - hs->SetBinContent(ib+1, iy, h2->GetBinContent(bins[ib], iy)); - } - } - hs->Draw("textbox"); - - //========= - p=cOut->cd(4); p->SetRightMargin(0.0215);p->SetLeftMargin(0.414);//p->SetLogz(); - TObject *o = fContainer->At(kTrigger); - if(o){ - if((h1 = dynamic_cast(o))) { - h1->GetXaxis()->SetTitleOffset(6.5); h1->GetXaxis()->CenterTitle(); - h1->SetFillStyle(3001);h1->SetFillColor(kGreen); - h1->SetBarWidth(0.8);h1->SetBarOffset(0.1); - ((TH1I*)o)->Draw("hbar2"); - } else o->Draw(); - } - cOut->SaveAs(Form("%s.gif", cOut->GetName())); -} - -//____________________________________________________________________ -void AliTRDinfoGen::SetLocalEvSelection(const AliTRDeventCuts &ec) -{ -// Set event cuts from outside - if(!fEventCut) fEventCut = new AliTRDeventCuts(ec); - else new(fEventCut) AliTRDeventCuts(ec); - fEventCut->Print(); -} - -//____________________________________________________________________ -void AliTRDinfoGen::SetLocalV0Selection(const AliTRDv0Info &v0) -{ -// Set V0 cuts from outside - - if(!fV0Cut) fV0Cut = new AliTRDv0Info(v0); - else new(fV0Cut) AliTRDv0Info(v0); - fV0Cut->Print(); -} - -//____________________________________________________________________ -TTreeSRedirector* AliTRDinfoGen::DebugStream() -{ -// Manage debug stream for task - if(!fDebugStream){ - TDirectory *savedir = gDirectory; - fDebugStream = new TTreeSRedirector("TRD.DebugInfoGen.root"); - savedir->cd(); - } - return fDebugStream; -} - -//____________________________________________________________________ -void AliTRDinfoGen::Terminate(Option_t* /*option*/) -{ -// Process run information - AliInfo(""); - if(!(fContainer = dynamic_cast(GetOutputData(AliTRDpwgppHelper::kMonitor)))) return; - AliInfo(Form("fContainer(%p)", (void*)fContainer)); - - AliTRDtriggerInfo* ti(NULL); - if(UseLocalEvSelection()){ - if(!(ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger))) return; - for(Int_t ix(0); ixGetNTriggers(); ix++){ - if(fEventCut->CheckTrigger(ti->GetTrigger(ix))) ti->SetSelectTrigger(ix); - //ax->SetBinLabel(ix, Form("#color[2]{%s}", ax->GetBinLabel(ix))); - } - } -} - +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +/* $Id: AliTRDinfoGen.cxx 27496 2008-07-22 08:35:45Z cblume $ */ + +//////////////////////////////////////////////////////////////////////////// +// +// Tender wagon for TRD performance/calibration train +// +// In this wagon the information from +// - ESD +// - Friends [if available] +// - MC [if available] +// are grouped into AliTRDtrackInfo objects and fed to worker tasks +// +// Authors: +// Markus Fasel +// Alexandru Bercuci +// +//////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AliLog.h" +#include "AliAnalysisManager.h" +#include "AliGeomManager.h" +#include "AliCDBManager.h" +#include "AliCDBStorage.h" +#include "AliCDBEntry.h" +#include "AliCDBPath.h" +#include "AliESDEvent.h" +#include "AliMCEvent.h" +#include "AliESDInputHandler.h" +#include "AliESDInputHandlerRP.h" +#include "AliMCEventHandler.h" + +#include "AliESDfriend.h" +#include "AliESDfriendTrack.h" +#include "AliESDHeader.h" +#include "AliESDRun.h" +#include "AliESDtrack.h" +#include "AliESDv0.h" +#include "AliESDtrackCuts.h" +#include "AliESDv0KineCuts.h" +#include "AliMCParticle.h" +#include "AliMultiplicity.h" +#include "AliCentrality.h" +#include "AliPID.h" +#include "AliStack.h" +#include "AliTrackReference.h" +#include "TTreeStream.h" + +#include +#include +#include +#include +#include + +#include "AliTRDReconstructor.h" +#include "AliTRDrecoParam.h" +#include "AliTRDcalibDB.h" +#include "AliTRDtrackerV1.h" +#include "AliTRDpadPlane.h" +#include "AliTRDgeometry.h" +#include "AliTRDtrackV1.h" +#include "AliTRDseedV1.h" +#include "AliTRDcluster.h" +#include "AliTRDinfoGen.h" +#include "AliTRDpwgppHelper.h" +#include "info/AliTRDtrackInfo.h" +#include "info/AliTRDeventInfo.h" +#include "info/AliTRDv0Info.h" +#include "info/AliTRDchmbInfo.h" +#include "info/AliTRDtriggerInfo.h" +#include "info/AliTRDeventCuts.h" + +ClassImp(AliTRDinfoGen) + +const Float_t AliTRDinfoGen::fgkITS = 100.; // to be checked +const Float_t AliTRDinfoGen::fgkTPC = 290.; +const Float_t AliTRDinfoGen::fgkTRD = 365.; + +const Float_t AliTRDinfoGen::fgkTrkDCAxy = 1.; +const Float_t AliTRDinfoGen::fgkTrkDCAz = 1.; +const Int_t AliTRDinfoGen::fgkNclTPC = 70; +const Float_t AliTRDinfoGen::fgkPt = 0.2; +const Float_t AliTRDinfoGen::fgkEta = 0.9; +AliTRDReconstructor* AliTRDinfoGen::fgReconstructor(NULL); +AliTRDgeometry* AliTRDinfoGen::fgGeo(NULL); +//____________________________________________________________________ +AliTRDinfoGen::AliTRDinfoGen() + :AliAnalysisTaskSE() + ,fESDev(NULL) + ,fMCev(NULL) + ,fEventCut(NULL) + ,fTrackCut(NULL) + ,fV0Identifier(NULL) + ,fV0Cut(NULL) + ,fOCDB("local://$ALICE_ROOT/OCDB") + ,fTrackInfo(NULL) + ,fEventInfo(NULL) + ,fV0Info(NULL) + ,fTracksBarrel(NULL) + ,fTracksITS(NULL) + ,fTracksSA(NULL) + ,fTracksKink(NULL) + ,fV0List(NULL) + ,fClusters(NULL) + ,fContainer(NULL) + ,fRecos(NULL) + ,fDebugStream(NULL) +{ + // + // Default constructor + // + SetNameTitle("TRDinfoGen", "MC-REC TRD-track list generator"); +} + +//____________________________________________________________________ +AliTRDinfoGen::AliTRDinfoGen(char* name) + :AliAnalysisTaskSE(name) + ,fESDev(NULL) + ,fMCev(NULL) + ,fEventCut(NULL) + ,fTrackCut(NULL) + ,fV0Identifier(NULL) + ,fV0Cut(NULL) + ,fOCDB("local://$ALICE_ROOT/OCDB") + ,fTrackInfo(NULL) + ,fEventInfo(NULL) + ,fV0Info(NULL) + ,fTracksBarrel(NULL) + ,fTracksITS(NULL) + ,fTracksSA(NULL) + ,fTracksKink(NULL) + ,fV0List(NULL) + ,fClusters(NULL) + ,fContainer(NULL) + ,fRecos(NULL) + ,fDebugStream(NULL) +{ + // + // Default constructor + // + SetTitle("MC-REC TRD-track list generator"); + DefineOutput(AliTRDpwgppHelper::kTracksBarrel, TObjArray::Class()); + DefineOutput(AliTRDpwgppHelper::kTracksITS, TObjArray::Class()); + DefineOutput(AliTRDpwgppHelper::kTracksSA, TObjArray::Class()); + DefineOutput(AliTRDpwgppHelper::kTracksKink, TObjArray::Class()); + DefineOutput(AliTRDpwgppHelper::kEventInfo, AliTRDeventInfo::Class()); + DefineOutput(AliTRDpwgppHelper::kV0List, TObjArray::Class()); + DefineOutput(AliTRDpwgppHelper::kClusters, TObjArray::Class()); + DefineOutput(AliTRDpwgppHelper::kMonitor, TObjArray::Class()); // histogram list +} + +//____________________________________________________________________ +AliTRDinfoGen::~AliTRDinfoGen() +{ +// Destructor + if(fgGeo) delete fgGeo; + if(fgReconstructor) delete fgReconstructor; + if(fDebugStream) delete fDebugStream; + if(fV0Cut) delete fV0Cut; + if(fV0Identifier) delete fV0Identifier; + if(fTrackCut) delete fTrackCut; + if(fEventCut) delete fEventCut; + if(fTrackInfo) delete fTrackInfo; fTrackInfo = NULL; + if(fEventInfo) delete fEventInfo; fEventInfo = NULL; + if(fV0Info) delete fV0Info; fV0Info = NULL; + if(fTracksBarrel){ + fTracksBarrel->Delete(); delete fTracksBarrel; + fTracksBarrel = NULL; + } + if(fTracksITS){ + fTracksITS->Delete(); delete fTracksITS; + fTracksITS = NULL; + } + if(fTracksSA){ + fTracksSA->Delete(); delete fTracksSA; + fTracksSA = NULL; + } + if(fTracksKink){ + fTracksKink->Delete(); delete fTracksKink; + fTracksKink = NULL; + } + if(fV0List){ + fV0List->Delete(); + delete fV0List; + fV0List = NULL; + } + if(fClusters){ + fClusters->Delete(); delete fClusters; + fClusters = NULL; + } + if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){ + fContainer->Delete(); + delete fContainer; + fContainer = NULL; + } +} + +//____________________________________________________________________ +Bool_t AliTRDinfoGen::GetRefFigure(Int_t) +{ +// General graphs for PWGPP/TRD train + if(!gPad){ + AliWarning("Please provide a canvas to draw results."); + return kFALSE; + } + fContainer->At(kStatTrk)->Draw("bar"); + return kTRUE; +} + +//____________________________________________________________________ +void AliTRDinfoGen::UserCreateOutputObjects() +{ + // + // Create Output Containers (TObjectArray containing 1D histograms) + // + + fTrackInfo = new AliTRDtrackInfo(); + fEventInfo = new AliTRDeventInfo(); + fV0Info = new AliTRDv0Info(); + fTracksBarrel = new TObjArray(200); fTracksBarrel->SetOwner(kTRUE); + fTracksITS = new TObjArray(20); fTracksITS->SetOwner(kTRUE); + fTracksSA = new TObjArray(20); fTracksSA->SetOwner(kTRUE); + fTracksKink = new TObjArray(20); fTracksKink->SetOwner(kTRUE); + fV0List = new TObjArray(10); fV0List->SetOwner(kTRUE); + fClusters = new TObjArray(AliTRDgeometry::kNdet); fClusters->SetOwner(kTRUE); + + // define general monitor + fContainer = new TObjArray(kNclasses); fContainer->SetOwner(kTRUE); + TH1 *h=new TH1I("hStat", "Run statistics;Observable;Entries", Int_t(kNObjects), -0.5, Float_t(kNObjects)-0.5); + TAxis *ax(h->GetXaxis()); + ax->SetBinLabel(Int_t(kTracksESD) + 1, "ESD"); + ax->SetBinLabel(Int_t(kTracksMC) + 1, "MC"); + ax->SetBinLabel(Int_t(kV0) + 1, "V0"); + ax->SetBinLabel(Int_t(kTPC) + 1, "TPC"); + ax->SetBinLabel(Int_t(kITS) + 1, "ITS"); + ax->SetBinLabel(Int_t(kTRDin) + 1, "TRDin"); + ax->SetBinLabel(Int_t(kTRDout) + 1, "TRDout"); + ax->SetBinLabel(Int_t(kBarrel) + 1, "Barrel"); + ax->SetBinLabel(Int_t(kBarrelMC) + 1, "BarrelMC"); + ax->SetBinLabel(Int_t(kSA) + 1, "SA"); + ax->SetBinLabel(Int_t(kSAMC) + 1, "SAMC"); + ax->SetBinLabel(Int_t(kKink) + 1, "Kink"); + ax->SetBinLabel(Int_t(kKinkMC) + 1, "KinkMC"); + ax->SetBinLabel(Int_t(kBarrelFriend) + 1, "BFriend"); + ax->SetBinLabel(Int_t(kSAFriend) + 1, "SFriend"); + fContainer->AddAt(h, kStatTrk); + h=new TH1I("hEv", "Run statistics;Event Class;Entries", 4, -0.5, 3.5); + ax = h->GetXaxis(); + ax->SetBinLabel(1, "Low"); + ax->SetBinLabel(2, "High"); + ax->SetBinLabel(3, "Cosmic"); + ax->SetBinLabel(4, "Calib"); + fContainer->AddAt(h, kEvType); + TH2I* h2=new TH2I("hBCtrack", "Track Statistics;Fill Bunch;TOF BC;Entries", 3500, -0.5, 3499.5, 31, -10.5, 20.5); + fContainer->AddAt(h2, kBC); + fContainer->AddAt(new AliTRDtriggerInfo(), kTrigger); + TObjArray *chmb = new TObjArray(AliTRDgeometry::kNdet); + chmb->SetName("Chambers Status"); chmb->SetOwner(kTRUE); + fContainer->AddAt(chmb, kChmb); + + PostData(AliTRDpwgppHelper::kTracksBarrel, fTracksBarrel); + PostData(AliTRDpwgppHelper::kTracksITS, fTracksITS); + PostData(AliTRDpwgppHelper::kTracksSA, fTracksSA); + PostData(AliTRDpwgppHelper::kTracksKink, fTracksKink); + PostData(AliTRDpwgppHelper::kEventInfo, fEventInfo); + PostData(AliTRDpwgppHelper::kV0List, fV0List); + PostData(AliTRDpwgppHelper::kClusters, fClusters); + PostData(AliTRDpwgppHelper::kMonitor, fContainer); +} + +//____________________________________________________________________ +Bool_t AliTRDinfoGen::Load(const Char_t *file, const Char_t *dir, const Char_t *name) +{ +// Load data from performance file + + if(!TFile::Open(file)){ + AliWarning(Form("Couldn't open file %s.", file)); + return kFALSE; + } + if(!gFile->cd(dir)){ + AliWarning(Form("Couldn't cd to %s in %s.", dir, file)); + gFile->Close(); + return kFALSE; + } + const Char_t *tn=(name ? name : GetName()); + if(!(fContainer = (TObjArray*)gDirectory->Get(tn))){ + AliWarning(Form("Missing histogram container %s.", tn)); + gFile->Close(); + return kFALSE; + } + gFile->Close(); + return kTRUE; +} + +//____________________________________________________________________ +void AliTRDinfoGen::UserExec(Option_t *){ + // + // Run the Analysis + // + + fTracksBarrel->Delete(); + fTracksITS->Delete(); + fTracksSA->Delete(); + fTracksKink->Delete(); + fV0List->Delete(); + fClusters->Delete(); + fEventInfo->Delete(""); + + fESDev = dynamic_cast(InputEvent()); + if(!fESDev){ + AliError("Failed retrieving ESD event"); + return; + } + // WARNING + // This part may conflict with other detectors !! + if(!IsInitOCDB()){ + AliCDBEntry* obj(NULL); + AliCDBManager* ocdb = AliCDBManager::Instance(); + if(ocdb->IsDefaultStorageSet()){ + AliInfo("OCDB :: initialized externally."); + } else { + AliInfo("OCDB :: initializing locally ..."); + // prepare OCDB access + ocdb->SetDefaultStorage(fOCDB.Data()); + //ocdb->SetSpecificStorage("TRD/Align/Data", "local:///home/niham/abercuci/local"); + ocdb->SetRun(fESDev->GetRunNumber()); + // create geo manager + if(!(obj = ocdb->Get(AliCDBPath("GRP", "Geometry", "Data")))){ + AliError("GEOMETRY failed initialization."); + } else { + AliGeomManager::SetGeometry((TGeoManager*)obj->GetObject()); + AliGeomManager::GetNalignable("TRD"); + AliGeomManager::GetNalignable("TPC"); + AliGeomManager::GetNalignable("ITS"); + AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD"); + } + //init magnetic field + if(!TGeoGlobalMagField::Instance()->IsLocked() && + !fESDev->InitMagneticField()){ + AliError("MAGNETIC FIELD failed initialization."); + } + // set no of time bins + AliTRDtrackerV1::SetNTimeBins(AliTRDcalibDB::Instance()->GetNumberOfTimeBinsDCS()); + } + AliInfo(Form("OCDB : Loc[%s] Run[%d] TB[%d]", ocdb->GetDefaultStorage()->GetURI().Data(), ocdb->GetRun(), AliTRDtrackerV1::GetNTimeBins())); + + // load misalignment + fgGeo = new AliTRDgeometry; + fgGeo->CreateClusterMatrixArray(); + MakeChambers(); + // load reco param list from OCDB + AliInfo("Initializing TRD reco params ..."); + fgReconstructor = new AliTRDReconstructor(); + if(!(obj = ocdb->Get(AliCDBPath("TRD", "Calib", "RecoParam")))){ + AliError("RECO PARAM failed initialization."); + } else { + obj->PrintMetaData(); + fRecos = (TObjArray*)obj->GetObject(); + } + SetInitOCDB(); + } + + AliDebug(2, "+++++++++++++++++++++++++++++++++++++++"); + AliDebug(2, Form("Analyse Ev[%d]", fESDev->GetEventNumberInFile())); + + // set reco param valid for this event + TH1 *h = (TH1I*)fContainer->At(kEvType); + if(!fRecos){ + fgReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam()); + h->Fill(0); + } else { + for(Int_t ireco(0); irecoGetEntriesFast(); ireco++){ + AliTRDrecoParam *reco((AliTRDrecoParam*)fRecos->At(ireco)); + Int_t es(reco->GetEventSpecie()); + if(!(es&fESDev->GetEventSpecie())) continue; + fgReconstructor->SetRecoParam(reco); + if(AliLog::GetDebugLevel("PWGPP/TRD", "AliTRDinfoGen")>5) reco->Dump(); + TString s; + if(es&AliRecoParam::kLowMult){ s="LowMult"; h->Fill(0);} + else if(es&AliRecoParam::kHighMult){ s="HighMult"; h->Fill(1);} + else if(es&AliRecoParam::kCosmic){ s="Cosmic"; h->Fill(2);} + else if(es&AliRecoParam::kCalib){ s="Calib"; h->Fill(3);} + else s="Unknown"; + AliDebug(2, Form(" Using reco param \"%s\" for event %d.", s.Data(), fESDev->GetEventNumberInFile())); + break; + } + } + + // link MC if available + fMCev = MCEvent(); + + // trigger monitor + AliTRDtriggerInfo *ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger); + TObjArray *evTriggers = fESDev->GetFiredTriggerClasses().Tokenize(" "); + //printf("Ev[%03d] Triggers[%s]\n", fESDev->GetEventNumberInFile(), fESDev->GetFiredTriggerClasses().Data()); + for(Int_t iet(evTriggers->GetEntriesFast()); iet--;) ti->Add((*evTriggers)[iet]->GetName()); + evTriggers->Delete(); delete evTriggers; + + // event selection based on vertex cuts and trigger + if(UseLocalEvSelection() && !fEventCut->IsSelected(fESDev, IsCollision())){ + AliDebug(2, "Event failed selection on vertex and trigger"); + return; + } + + if(!fESDfriend){ + AliError("Failed retrieving ESD friend event"); + return; + } + if(HasMCdata() && !fMCev){ + AliError("Failed retrieving MC event"); + return; + } + + new(fEventInfo)AliTRDeventInfo(fESDev->GetHeader(), const_cast(fESDev->GetESDRun())); + // Determine centrality + // Author: Ionut Arsene + TString beamtype = fESDev->GetESDRun()->GetBeamType(); + if(beamtype.Contains("Pb-Pb") || beamtype.Contains("A-A")){ + const AliMultiplicity *mult = fESDev->GetMultiplicity(); + fEventInfo->SetMultiplicity(mult?mult->GetNumberOfTracklets():0); + const AliCentrality *cent = fESDev->GetCentrality(); + // centrality for different options V0 = "V0M", ITS = "TKL" etc + fEventInfo->SetCentrality(cent?cent->GetCentralityPercentile("TKL"):-1.); + AliDebug(2, Form(" Beam Type[%s] Mult[%d/%4d] Cent[%d/%5.2f]", + beamtype.Data(), + fEventInfo->GetMultiplicity(), mult?mult->GetNumberOfTracklets():0, + fEventInfo->GetCentrality(), cent?cent->GetCentralityPercentile("TKL"):-1.)); + } else { + fEventInfo->SetMultiplicity(0); + fEventInfo->SetCentrality(-1.); + AliDebug(2, Form(" Beam Type[%s]", beamtype.Data())); + } + UShort_t evBC(fESDev->GetBunchCrossNumber()); + + // electron identifier from conversions + if(!fV0Identifier) fV0Identifier = new AliESDv0KineCuts(); + fV0Identifier->SetEvent(fESDev); + + Bool_t *trackMap(NULL); + AliStack * mStack(NULL); + Int_t nTracksMC = HasMCdata() ? fMCev->GetNumberOfTracks() : 0, nTracksESD = fESDev->GetNumberOfTracks(); + if(HasMCdata()){ + mStack = fMCev->Stack(); + if(!mStack){ + AliError("Failed retrieving MC Stack"); + return; + } + trackMap = new Bool_t[nTracksMC]; + memset(trackMap, 0, sizeof(Bool_t) * nTracksMC); + } + + Double32_t dedx[100]; Int_t nSlices(0); + Int_t nTRDout(0), nTRDin(0), nTPC(0), nITS(0) +// ,nclsTrklt + ,nBarrel(0), nBarrelITS(0), nSA(0), nKink(0) + ,nBarrelFriend(0), nBarrelITSFriend(0), nSAFriend(0) + ,nBarrelMC(0), nSAMC(0), nKinkMC(0); + AliESDtrack *esdTrack = NULL; + AliESDfriendTrack *esdFriendTrack = NULL; + TObject *calObject = NULL; + AliTRDtrackV1 *track = NULL; + AliTRDseedV1 *tracklet = NULL; + AliTRDcluster *cl = NULL; + + + // LOOP 0 - over ESD v0s + Float_t bField(fESDev->GetMagneticField()); + AliESDv0 *v0(NULL); + Int_t v0pid[AliPID::kSPECIES]; + for(Int_t iv0(0); iv0GetNumberOfV0s(); iv0++){ + // Take only V0s from the On-the-fly v0 finder + if(!(v0 = fESDev->GetV0(iv0))) continue; + if(!v0->GetOnFlyStatus()) continue; + // register v0 + if(fV0Cut) new(fV0Info) AliTRDv0Info(*fV0Cut); + else new(fV0Info) AliTRDv0Info(); + fV0Info->SetMagField(bField); + fV0Info->SetV0tracks(fESDev->GetTrack(v0->GetPindex()), fESDev->GetTrack(v0->GetNindex())); + fV0Info->SetV0Info(v0); + // tag conversion electrons + Int_t pdgV0, pdgP, pdgN; + if(fV0Identifier->ProcessV0(v0, pdgV0, pdgP, pdgN)) { + switch(pdgV0){ + case kGamma: fV0Info->SetDecay(AliTRDv0Info::kGamma); break; + case kK0Short: fV0Info->SetDecay(AliTRDv0Info::kK0s); break; + case kLambda0: fV0Info->SetDecay(AliTRDv0Info::kLambda); break; + case kLambda0Bar: fV0Info->SetDecay(AliTRDv0Info::kAntiLambda); break; + default: AliDebug(1, Form("V0[%+4d] -> +[%+4d] -[%+4d]. Decay not mapped.", pdgV0, pdgP, pdgN)); + } + } + fV0List->Add(new AliTRDv0Info(*fV0Info));// kFOUND=kFALSE; + } + + + // LOOP 1 - over ESD tracks + AliTRDv0Info *v0info=NULL; + for(Int_t itrk = 0; itrk < nTracksESD; itrk++){ + new(fTrackInfo) AliTRDtrackInfo(); + esdTrack = fESDev->GetTrack(itrk); + AliDebug(3, Form("\n%3d ITS[%d] TPC[%d] TRD[%d] TOF-BC[%d]\n", itrk, esdTrack->GetNcls(0), esdTrack->GetNcls(1), esdTrack->GetNcls(2), esdTrack->GetTOFBunchCrossing())); + if(esdTrack->GetStatus()&AliESDtrack::kITSout) nITS++; + if(esdTrack->GetStatus()&AliESDtrack::kTPCout) nTPC++; + if(esdTrack->GetStatus()&AliESDtrack::kTRDout) nTRDout++; + if(esdTrack->GetStatus()&AliESDtrack::kTRDin) nTRDin++; + +/* Int_t ns(esdTrack->GetNumberOfTRDslices()); + printf(" %3d ITS[%c] TPC[%c] TRDin[%c] TRDout[%c] TRDStop[%c] ns[%d]\n", itrk, + (esdTrack->GetStatus()&AliESDtrack::kITSout)?'y':'n', + (esdTrack->GetStatus()&AliESDtrack::kTPCout)?'y':'n', + (esdTrack->GetStatus()&AliESDtrack::kTRDin)?'y':'n', + (esdTrack->GetStatus()&AliESDtrack::kTRDout)?'y':'n', + (esdTrack->GetStatus()&AliESDtrack::kTRDStop)?'y':'n', ns); + if(ns){ + for(Int_t ipl(0); iplGetTRDmomentum(ipl, &sp)); + printf(" [%d] p[%6.3f+-%6.3f] dEdx={", ipl, p, sp); + for(Int_t is(0); is<8; is++) printf("%7.2f ", esdTrack->GetTRDslice(ipl, is)); printf("}\n"); + } + } +*/ + // look at external track param + const AliExternalTrackParam *op = esdTrack->GetOuterParam(); + Double_t xyz[3]; + if(op){ + op->GetXYZ(xyz); + op->Global2LocalPosition(xyz, op->GetAlpha()); + AliDebug(3, Form("op @ X[%7.3f]\n", xyz[0])); + } + + // read MC info + Int_t label = -1; UInt_t alab=UINT_MAX; + if(HasMCdata()){ + label = esdTrack->GetLabel(); + alab = TMath::Abs(label); + // register the track + if(alab < UInt_t(nTracksMC)){ + trackMap[alab] = kTRUE; + } else { + AliError(Form("MC label[%d] outside scope for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk)); + continue; + } + AliMCParticle *mcParticle(NULL); + if(!(mcParticle = (AliMCParticle*) fMCev->GetTrack(alab))){ + AliError(Form("MC particle label[%d] missing for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk)); + continue; + } + fTrackInfo->SetMC(); + fTrackInfo->SetMCeta(mcParticle->Eta()); + fTrackInfo->SetMCphi(mcParticle->Phi()); + fTrackInfo->SetMCpt(mcParticle->Pt()); + fTrackInfo->SetPDG(mcParticle->Particle()->GetPdgCode()); + fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary()); + fTrackInfo->SetLabel(label); + fTrackInfo->SetTRDlabel(esdTrack->GetTRDLabel()); + AliTrackReference *ref(NULL); + for(Int_t iref(0); irefGetNumberOfTrackReferences(); iref++){ + if(!(ref = mcParticle->GetTrackReference(iref))) continue; + if(ref->DetectorId() != AliTrackReference::kTRD) continue; + AliDebug(4, Form(" TRD trackRef[%2d] @ r[%7.3f] [REC]", iref, ref->LocalX())); + fTrackInfo->AddTrackRef(ref); + } + AliDebug(3, Form("Lab[%4d] pdg[%+4d] NtrackRefs[%d(%d)]", alab, mcParticle->Particle()->GetPdgCode(), fTrackInfo->GetNTrackRefs(), mcParticle->GetNumberOfTrackReferences())); + } + + // copy some relevant info to TRD track info + fTrackInfo->SetStatus(esdTrack->GetStatus()); + fTrackInfo->SetTrackId(esdTrack->GetID()); + Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p); + fTrackInfo->SetESDpid(p); + fTrackInfo->SetESDpidQuality(esdTrack->GetTRDntrackletsPID()); + fTrackInfo->SetESDeta(esdTrack->Eta()); + Double_t loc[3]; + if(esdTrack->GetXYZAt(298., fESDev->GetMagneticField(), loc)) fTrackInfo->SetESDphi(TMath::ATan2(loc[1], loc[0])); + fTrackInfo->SetESDpt(esdTrack->Pt()); + if(!nSlices) nSlices = esdTrack->GetNumberOfTRDslices(); + memset(dedx, 0, 100*sizeof(Double32_t)); + Int_t in(0); + for(Int_t il=0; ilGetTRDslice(il, is); + for(Int_t il=0; ilGetTRDmomentum(il); + fTrackInfo->SetSlices(in, dedx); + fTrackInfo->SetNumberOfClustersRefit(esdTrack->GetNcls(2)); + // some other Informations which we may wish to store in order to find problematic cases + fTrackInfo->SetKinkIndex(esdTrack->GetKinkIndex(0)); + fTrackInfo->SetTPCncls(static_cast(esdTrack->GetNcls(1))); + fTrackInfo->SetTPCdedx(esdTrack->GetTPCsignal()); + Float_t tofTime = esdTrack->GetTOFsignal() - fESDev->GetT0TOF(0); + fTrackInfo->SetTOFbeta(tofTime>0.?((esdTrack->GetIntegratedLength()/(tofTime*TMath::C()))*10e9):-999.); + fTrackInfo->SetTOFbc(esdTrack->GetTOFBunchCrossing()==AliVTrack::kTOFBCNA?0:esdTrack->GetTOFBunchCrossing()); +// nclsTrklt = 0; + + // set V0pid info + //printf("%4d Looking for V0s...\n" , fTrackInfo->GetTrackId()); + for(Int_t iv(0); ivGetEntriesFast(); iv++){ + if(!(v0info = (AliTRDv0Info*)fV0List->At(iv))) continue; + if(!v0info->GetV0Daughter(1) && !v0info->GetV0Daughter(-1)) continue; + if(!v0info->HasTrack(fTrackInfo)) continue; + //v0info->Print(); + memset(v0pid, 0, AliPID::kSPECIES*sizeof(Int_t)); + fTrackInfo->SetV0(); + for(Int_t is=AliPID::kSPECIES; is--;) v0pid[is] = v0info->GetPID(is, fTrackInfo); fTrackInfo->SetV0pid(v0pid); + if(v0info->IsDecay(AliTRDv0Info::kGamma)) fTrackInfo->SetElectron(); + else if(v0info->IsDecay(AliTRDv0Info::kK0s)) fTrackInfo->SetPion(); + else if(v0info->IsDecay(AliTRDv0Info::kLambda)) esdTrack->Charge()>0?fTrackInfo->SetProton():fTrackInfo->SetPion(); + else if(v0info->IsDecay(AliTRDv0Info::kAntiLambda)) esdTrack->Charge()<0?fTrackInfo->SetProton():fTrackInfo->SetPion(); + + //TODO one track can be attached to more than one v0. Ideally one would need a list of v0 attached to the track info + } + + // read track REC info + if((esdFriendTrack = (fESDfriend->GetNumberOfTracks() > itrk) ? fESDfriend->GetTrack(itrk): NULL)) { + fTrackInfo->SetTPCoutParam(esdFriendTrack->GetTPCOut()); + fTrackInfo->SetITSoutParam(esdFriendTrack->GetITSOut()); + const AliTrackPointArray *tps(NULL); + if((tps=esdFriendTrack->GetTrackPointArray()) && HasTrackPoints()) fTrackInfo->SetTrackPointArray(tps); + Int_t icalib = 0; + while((calObject = esdFriendTrack->GetCalibObject(icalib++))){ + if(strcmp(calObject->IsA()->GetName(),"AliTRDtrackV1") != 0) continue; // Look for the TRDtrack + if(!(track = dynamic_cast(calObject))) break; + AliDebug(4, Form("TRD track OK")); + // Set the clusters to unused + for(Int_t ipl = 0; ipl < AliTRDgeometry::kNlayer; ipl++){ + if(!(tracklet = track->GetTracklet(ipl))) continue; + tracklet->ResetClusterIter(); + while((cl = tracklet->NextCluster())) cl->Use(0); + } + fTrackInfo->SetTrack(track); + ((TH2I*)fContainer->At(kBC))->Fill(evBC, esdTrack->GetTOFBunchCrossing()); + break; + } + AliDebug(3, Form("Ntracklets[%d]", fTrackInfo->GetNTracklets())); + } else AliDebug(3, Form("No Friends for trk[%3d] Ntrk[%3d]", itrk, fESDfriend->GetNumberOfTracks())); + if(op) fTrackInfo->SetOuterParam(op); + + if(DebugLevel() >= 1){ + AliTRDtrackInfo info(*fTrackInfo); + (*DebugStream()) << "trackInfo" + << "TrackInfo.=" << &info + << "\n"; + info.Delete(""); + } + + ULong_t status(esdTrack->GetStatus()); + if((status&AliESDtrack::kTPCout)){ // TPC prolongation + if(!esdTrack->GetKinkIndex(0)){ // Barrel Track Selection + Bool_t selected(kTRUE); + if(UseLocalTrkSelection()){ + if(esdTrack->Pt() < fgkPt){ + AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt())); + selected = kFALSE; + } + if(selected && TMath::Abs(esdTrack->Eta()) > fgkEta){ + AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta()))); + selected = kFALSE; + } + if(selected && esdTrack->GetTPCNcls() < fgkNclTPC){ + AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] NclTPC[%d]", itrk, fESDev->GetEventNumberInFile(), esdTrack->GetTPCNcls())); + selected = kFALSE; + } + if(selected && !(esdTrack->GetStatus()&AliESDtrack::kITSrefit)){ //SPD refit flag (Ionut) + AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] ITSrefit", itrk, fESDev->GetEventNumberInFile())); + selected = kFALSE; + } + UChar_t itsMap = esdTrack->GetITSClusterMap(); + Bool_t firstSPDlayerHit = (itsMap & (UChar_t(1)<<0)), + secondSPDlayerHit = (itsMap & (UChar_t(1)<<1)); + if(selected && !(firstSPDlayerHit || secondSPDlayerHit)){ // request at least 1 SPD cluster (Ionut) + AliDebug(3, Form("Reject Trk[%3d] Ev[%4d] no SPD cluster", itrk, fESDev->GetEventNumberInFile())); + selected = kFALSE; + } + + Float_t par[2], cov[3]; + esdTrack->GetImpactParameters(par, cov); + if(IsCollision()){ // cuts on DCA + if(selected && TMath::Abs(par[0]) > fgkTrkDCAxy){ + AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0]))); + selected = kFALSE; + } + if(selected && TMath::Abs(par[1]) > fgkTrkDCAz){ + AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1]))); + selected = kFALSE; + } + } else if(selected && fMCev && !fMCev->IsPhysicalPrimary(alab)){; + AliDebug(3, Form("Reject TPC Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile())); + selected = kFALSE; + } + } + if(fTrackCut && !fTrackCut->IsSelected(esdTrack)) selected = kFALSE; + if(selected){ + fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo)); + nBarrel++; + if(fTrackInfo->GetTrack()) nBarrelFriend++; + } + } else { + fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo)); + nKink++; + } + } else if((status&AliESDtrack::kITSout)) { // ITS prolongation + Bool_t selected(kTRUE); + if(UseLocalTrkSelection()){ + if(esdTrack->Pt() < fgkPt){ + AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Pt[%5.2f]", itrk, fESDev->GetEventNumberInFile(), esdTrack->Pt())); + selected = kFALSE; + } + if(selected && TMath::Abs(esdTrack->Eta()) > fgkEta){ + AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Eta[%5.2f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(esdTrack->Eta()))); + selected = kFALSE; + } + Float_t par[2], cov[3]; + esdTrack->GetImpactParameters(par, cov); + if(IsCollision()){ // cuts on DCA + if(selected && TMath::Abs(par[0]) > fgkTrkDCAxy){ + AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] DCAxy[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[0]))); + selected = kFALSE; + } + if(selected && TMath::Abs(par[1]) > fgkTrkDCAz){ + AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] DCAz[%f]", itrk, fESDev->GetEventNumberInFile(), TMath::Abs(par[1]))); + selected = kFALSE; + } + } else if(selected && fMCev && !fMCev->IsPhysicalPrimary(alab)){; + AliDebug(3, Form("Reject ITS Trk[%3d] Ev[%4d] Primary", itrk, fESDev->GetEventNumberInFile())); + selected = kFALSE; + } + } + if(fTrackCut && !fTrackCut->IsSelected(esdTrack)) selected = kFALSE; + if(selected){ + fTracksITS->Add(new AliTRDtrackInfo(*fTrackInfo)); + nBarrelITS++; + if(fTrackInfo->GetTrack()) nBarrelITSFriend++; + } + } else if((status&AliESDtrack::kTRDout) && !(status&AliESDtrack::kTRDin)){ // TRD SA tracking + fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo)); + nSA++; + if(fTrackInfo->GetTrack()) nSAFriend++; + } + fTrackInfo->Delete(""); + } + // read clusters REC info + TTree * treeR(NULL); AliESDInputHandlerRP *esdRPhandler(NULL); + if(fInputHandler) esdRPhandler = dynamic_cast(fInputHandler); + if(esdRPhandler){ + if((treeR = esdRPhandler->GetTreeR("TRD"))) { + TObjArray *recPoints(NULL); + if((treeR->GetBranch("TRDcluster"))){ + treeR->SetBranchAddress("TRDcluster", &recPoints); + for(Int_t idet(0); idetGetEntries(); idet++){ + treeR->GetEntry(idet); + if(!recPoints->GetEntries()){ + AliDebug(1, Form("Missing entry %d from TreeR", idet)); + continue; + } + AliTRDcluster *c = (AliTRDcluster*)(*recPoints)[0]; + if(!c){ + AliDebug(1, Form("Missing first cluster in entry %d from TreeR", idet)); + continue; + } + fClusters->AddAt(recPoints->Clone(Form("%03d", c->GetDetector())), c->GetDetector()); + } + } else AliDebug(3, "No TRDcluster branch"); + } else AliDebug(3, "No RecPoints"); + } else AliDebug(3, "No AliESDInputHandlerRP"); + + + // LOOP 2 - over MC tracks which are passing TRD where the track is not reconstructed + if(HasMCdata()){ + AliDebug(10, "Output of the MC track map:"); + for(Int_t itk = 0; itk < nTracksMC; itk++) AliDebug(10, Form("trackMap[%d] = %s", itk, trackMap[itk] == kTRUE ? "TRUE" : "kFALSE")); + + AliTrackReference *ref(NULL); + for(Int_t itk = 0; itk < nTracksMC; itk++){ + if(trackMap[itk]) continue; + AliMCParticle *mcParticle = (AliMCParticle*) fMCev->GetTrack(TMath::Abs(itk)); + + Int_t nRefsTRD(0); + for(Int_t iref(0); irefGetNumberOfTrackReferences(); iref++){ // count TRD TR + if(!(ref = mcParticle->GetTrackReference(iref))) continue; + if(ref->DetectorId() != AliTrackReference::kTRD) continue; + if(!nRefsTRD){ // build track info for this pure MC track + new(fTrackInfo) AliTRDtrackInfo(); + fTrackInfo->SetMC(); + fTrackInfo->SetPDG(mcParticle->Particle()->GetPdgCode()); + } + AliDebug(4, Form(" TRD trackRef[%2d] @ r[%7.3f] [MC]", iref, ref->LocalX())); + fTrackInfo->AddTrackRef(ref); + } + // In this stage we at least require 1 hit inside TRD. What will be done with this tracks is a task for the + // analysis job + if(!nRefsTRD) continue; + AliDebug(3, Form("Lab[%4d] pdg[%+4d] NtrackRefs[%d(%d)]", itk, mcParticle->Particle()->GetPdgCode(), fTrackInfo->GetNTrackRefs(), mcParticle->GetNumberOfTrackReferences())); + fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary()); + fTrackInfo->SetLabel(itk); + if(DebugLevel() >= 1){ + AliTRDtrackInfo info(*fTrackInfo); + (*DebugStream()) << "trackInfo" + << "TrackInfo.=" << &info + << "\n"; + info.Delete(""); + } + AliDebug(3, Form("Add MC track @ label[%d] nTRDrefs[%d].", itk, nRefsTRD)); + // check where the track starts + ref = mcParticle->GetTrackReference(0); + if(ref->LocalX() < fgkITS){ + fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo)); + //fTracksITS->Add(new AliTRDtrackInfo(*fTrackInfo)); + nBarrelMC++; + } else if(ref->LocalX() < fgkTPC) { + fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo)); + nKinkMC++; + } else if(nRefsTRD>6){ + fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo)); + nSAMC++; + } + fTrackInfo->Delete(""); + } + delete[] trackMap; + } + AliDebug(1, Form( + "\nEv[%3d] Tracks: ESD[%d] MC[%d] V0[%d]\n" + " TPCout[%d] ITSout[%d] TRDin[%d] TRDout[%d]\n" + " Barrel[%3d+%3d=%3d] ITS[%3d=%3d] SA[%2d+%2d=%2d] Kink[%2d+%2d=%2d]" + ,(Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracksESD, nTracksMC, fV0List->GetEntries() + , nTPC, nITS, nTRDin, nTRDout + ,nBarrel, nBarrelMC, fTracksBarrel->GetEntries() + ,nBarrelITS, fTracksITS->GetEntries() + ,nSA, nSAMC, fTracksSA->GetEntries() + ,nKink, nKinkMC, fTracksKink->GetEntries() + )); + // save track statistics + h = (TH1I*)fContainer->At(kStatTrk); + h->Fill(Float_t(kTracksESD), nTracksESD); + h->Fill(Float_t(kTracksMC), nTracksMC); + h->Fill(Float_t(kV0), fV0List->GetEntries()); + h->Fill(Float_t(kTPC), nTPC); + h->Fill(Float_t(kITS), nITS); + h->Fill(Float_t(kTRDin), nTRDin); + h->Fill(Float_t(kTRDout), nTRDout); + h->Fill(Float_t(kBarrel), nBarrel); + h->Fill(Float_t(kBarrelMC), nBarrelMC); + h->Fill(Float_t(kSA), nSA); + h->Fill(Float_t(kSAMC), nSAMC); + h->Fill(Float_t(kKink), nKink); + h->Fill(Float_t(kKinkMC), nKinkMC); + h->Fill(Float_t(kBarrelFriend), nBarrelFriend); + h->Fill(Float_t(kSAFriend), nSAFriend); +} + + +//____________________________________________________________________ +void AliTRDinfoGen::MakeChambers() +{ +// Build chamber position and status + if(!fContainer){ + AliError("Missing container"); + return; + } + AliTRDcalibDB *calib(AliTRDcalibDB::Instance()); + if(!calib){ + AliError("No access to calibration data"); + return; + } + TObjArray *chmb = (TObjArray*)fContainer->At(kChmb); + Int_t stat(0); + Double_t alpha(0.), cs(-2.), sn(0.), pos[4]; + for(Int_t isec(0); isecGetClusterMatrix(idet)); + if(!matrix){ + AliDebug(2, Form("Missing matrix for %03d [%02d_%d_%d]", idet, isec, istk, ilyr)); + continue; + } + AliDebug(2, Form("Read info for %03d [%02d_%d_%d]", idet, isec, istk, ilyr)); + AliTRDpadPlane *pp(fgGeo->GetPadPlane(ilyr, istk)); + Double_t zm(0.5 * (pp->GetRow0() + pp->GetRowEnd())), + loc0[] = {AliTRDgeometry::AnodePos(), pp->GetCol0(), zm-pp->GetRow0()}, + loc1[] = {AliTRDgeometry::AnodePos(), pp->GetColEnd(), zm-pp->GetRowEnd()}, + glb[3] = {1,1,1}; + matrix->LocalToMaster(loc0, glb); + Float_t phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn), + tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]), + eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl)))); + pos[0] = eta; pos[1] = phi; + matrix->LocalToMaster(loc1, glb); + phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn); + tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]); + eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl)))); + pos[2] = eta; pos[3] = phi; + stat = 0; + if(calib->IsChamberGood(idet)){ + if(calib->IsHalfChamberNoData(idet, 0)) stat += 2; + if(calib->IsHalfChamberNoData(idet, 1)) stat += 3; + } else stat = 1; + chmb->Add(new AliTRDchmbInfo(idet, stat, pos)); + } + } + } +} + +//____________________________________________________________________ +void AliTRDinfoGen::MakeSummary() +{ +// Build summary plots + if(!fContainer){ + AliError("Missing results"); + return; + } + TH1 *h1(NULL); TVirtualPad *p(NULL); TCanvas *cOut(NULL); + + const Int_t nx(1024), ny(1024); + cOut = new TCanvas("infoGenSummary", "Run Statistics", nx, ny); + cOut->Divide(2,2, 1.e-5, 1.e-5); + //========= + p=cOut->cd(1);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy(); + h1 = (TH1*)fContainer->At(kStatTrk); + h1->SetBarOffset(0.06); h1->SetBarWidth(0.88); h1->SetFillColor(kGreen); h1->SetFillStyle(3001); + h1->Draw("bar1"); + //========= + p=cOut->cd(2);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy(); + h1 = (TH1*)fContainer->At(kEvType); + h1->SetBarOffset(0.04); h1->SetBarWidth(0.92);h1->SetFillColor(kGreen); h1->SetFillStyle(3001); + h1->Draw("bar1"); + //========= + p=cOut->cd(3);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogz(); + TH2 *h2((TH2*)fContainer->At(kBC)); + h1 = h2->ProjectionX("_px"); + Int_t n(0); Int_t bins[3500]; + for(Int_t ib(1); ib<=3500; ib++){ + if(h1->GetBinContent(ib) < 1) continue; + bins[n++] = ib; + } + delete h1; + + TAxis *ay(h2->GetYaxis()); + TH2 *hs = new TH2I("hBC_Summary", Form("%s;%s;%s", h2->GetTitle(), h2->GetXaxis()->GetTitle(), h2->GetYaxis()->GetTitle()), + n, -0.5, n-0.5, ay->GetNbins(), ay->GetXmin(), ay->GetXmax()); + hs->SetLineColor(kBlack);hs->SetLineWidth(1); + hs->SetMarkerColor(kRed); + TAxis *ax(hs->GetXaxis()); ax->CenterTitle(); ax->SetTitleOffset(1.4); + for(Int_t ib(0); ibSetBinLabel(ib+1, Form("%d", bins[ib])); + for(Int_t iy(1); iy<=ay->GetNbins(); iy++){ + hs->SetBinContent(ib+1, iy, h2->GetBinContent(bins[ib], iy)); + } + } + hs->Draw("textbox"); + + //========= + p=cOut->cd(4); p->SetRightMargin(0.0215);p->SetLeftMargin(0.414);//p->SetLogz(); + TObject *o = fContainer->At(kTrigger); + if(o){ + if((h1 = dynamic_cast(o))) { + h1->GetXaxis()->SetTitleOffset(6.5); h1->GetXaxis()->CenterTitle(); + h1->SetFillStyle(3001);h1->SetFillColor(kGreen); + h1->SetBarWidth(0.8);h1->SetBarOffset(0.1); + ((TH1I*)o)->Draw("hbar2"); + } else o->Draw(); + } + cOut->SaveAs(Form("%s.gif", cOut->GetName())); +} + +//____________________________________________________________________ +void AliTRDinfoGen::SetLocalEvSelection(const AliTRDeventCuts &ec) +{ +// Set event cuts from outside + if(!fEventCut) fEventCut = new AliTRDeventCuts(ec); + else new(fEventCut) AliTRDeventCuts(ec); + fEventCut->Print(); +} + +//____________________________________________________________________ +void AliTRDinfoGen::SetLocalV0Selection(const AliTRDv0Info &v0) +{ +// Set V0 cuts from outside + + if(!fV0Cut) fV0Cut = new AliTRDv0Info(v0); + else new(fV0Cut) AliTRDv0Info(v0); + fV0Cut->Print(); +} + +//____________________________________________________________________ +TTreeSRedirector* AliTRDinfoGen::DebugStream() +{ +// Manage debug stream for task + if(!fDebugStream){ + TDirectory *savedir = gDirectory; + fDebugStream = new TTreeSRedirector("TRD.DebugInfoGen.root"); + savedir->cd(); + } + return fDebugStream; +} + +//____________________________________________________________________ +void AliTRDinfoGen::Terminate(Option_t* /*option*/) +{ +// Process run information + AliInfo(""); + if(!(fContainer = dynamic_cast(GetOutputData(AliTRDpwgppHelper::kMonitor)))) return; + AliInfo(Form("fContainer(%p)", (void*)fContainer)); + + AliTRDtriggerInfo* ti(NULL); + if(UseLocalEvSelection()){ + if(!(ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger))) return; + for(Int_t ix(0); ixGetNTriggers(); ix++){ + if(fEventCut->CheckTrigger(ti->GetTrigger(ix))) ti->SetSelectTrigger(ix); + //ax->SetBinLabel(ix, Form("#color[2]{%s}", ax->GetBinLabel(ix))); + } + } +} + diff --git a/PWGPP/TRD/AliTRDinfoGen.h b/PWGPP/TRD/AliTRDinfoGen.h index 125d7cd9787..2a9a228c086 100644 --- a/PWGPP/TRD/AliTRDinfoGen.h +++ b/PWGPP/TRD/AliTRDinfoGen.h @@ -1,149 +1,149 @@ -#ifndef ALITRDINFOGEN_H -#define ALITRDINFOGEN_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: AliTRDinfoGen.h 27496 2008-07-22 08:35:45Z cblume $ */ - -//////////////////////////////////////////////////////////////////////////// -// // -// TRD Performance tender wagon // -// // -//////////////////////////////////////////////////////////////////////////// - -#ifndef ALIANALYSISTASKSE_H -#include "AliAnalysisTaskSE.h" -#endif - -class AliESDEvent; -class AliMCEvent; -class AliESDfriend; -class AliTRDtrackInfo; -class AliTRDeventInfo; -class AliTRDv0Info; -class AliTRDeventCuts; -class AliESDtrackCuts; -class AliESDv0KineCuts; -class TObjArray; -class TString; -class TTreeSRedirector; -class AliTRDReconstructor; -class AliTRDgeometry; -class AliTRDinfoGen : public AliAnalysisTaskSE -{ -public: - enum AliTRDinfoGenSteeringBits{ - kMCdata = BIT(18) - ,kUseLocalTrkSelection = BIT(19) - ,kCollision = BIT(20) - ,kOCDB = BIT(21) - ,kTrkPoints = BIT(22) - }; - enum AliTRDinfoGenObjects{ - kTracksESD = 0 - ,kTracksMC - ,kV0 - ,kTPC - ,kITS - ,kTRDin - ,kTRDout - ,kBarrel - ,kBarrelMC - ,kSA - ,kSAMC - ,kKink - ,kKinkMC - ,kBarrelFriend - ,kSAFriend - ,kNObjects - }; - enum AliTRDinfoGenClasses{ - kStatTrk = 0 - ,kEvType -// ,kBCtrack - ,kBC - ,kTrigger - ,kChmb - ,kNclasses - }; - AliTRDinfoGen(); - AliTRDinfoGen(char* name); - virtual ~AliTRDinfoGen(); - - static Float_t GetEndITS() { return fgkITS;} - static Float_t GetEndTPC() { return fgkTPC;} - static Float_t GetEndTRD() { return fgkTRD;} - Int_t GetNRefFigures() const { return 1;} - const char* GetOCDB() const {return fOCDB.Data();} - Bool_t GetRefFigure(Int_t ifig); - Bool_t Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL); - - Bool_t HasMCdata() const { return TestBit(kMCdata);}; - // temporary until check with AliAnalysisTaskSE collision selection mechanism - Bool_t IsInitOCDB() const {return TestBit(kOCDB);} - Bool_t IsCollision() const {return TestBit(kCollision);} - Bool_t HasTrackPoints() const {return TestBit(kTrkPoints);} - void MakeSummary(); - static const AliTRDReconstructor* Reconstructor() {return fgReconstructor;} - static AliTRDgeometry* Geometry() {return fgGeo;} - void SetInitOCDB(Bool_t set=kTRUE) {SetBit(kOCDB, set);} - void SetCollision(Bool_t set=kTRUE) {SetBit(kCollision, set);} - //void SetLocalEvSelection(const AliTRDeventCuts */*cut*/){;} - void SetLocalEvSelection(const AliTRDeventCuts &ec); - //void SetLocalTrkSelection(const AliESDtrackCuts */*cut*/){;} - void SetLocalTrkSelection(Bool_t use=kTRUE) {SetBit(kUseLocalTrkSelection, use);} - void SetLocalV0Selection(const AliTRDv0Info &v0); - void SetMCdata(Bool_t mc = kTRUE) {SetBit(kMCdata, mc);} - void SetOCDB(const char *ocdb) {fOCDB=ocdb;} - - Bool_t UseLocalEvSelection() const {return Bool_t(fEventCut);} - Bool_t UseLocalTrkSelection() const {return TestBit(kUseLocalTrkSelection);} - void UseTrackPoints(Bool_t use=kTRUE) {SetBit(kTrkPoints, use);} - void UserCreateOutputObjects(); - void UserExec(Option_t *); - void Terminate(Option_t* option = ""); -private: - // rough radial limits for TRD - static const Float_t fgkITS; // end ITS - static const Float_t fgkTPC; // end TPC - static const Float_t fgkTRD; // end TRD - - // Track selection - static const Float_t fgkTrkDCAxy; // cm - static const Float_t fgkTrkDCAz; // cm - static const Int_t fgkNclTPC; // N clusters TPC - static const Float_t fgkPt; // min. pt - static const Float_t fgkEta; // eta range - static AliTRDReconstructor *fgReconstructor; // single instance of TRD reconstructor used by all tasks - static AliTRDgeometry *fgGeo; // single instance of TRD geometry used by all tasks - - AliTRDinfoGen(const AliTRDinfoGen&); - AliTRDinfoGen& operator=(const AliTRDinfoGen&); - TTreeSRedirector* DebugStream(); - void MakeChambers(); - -// UShort_t fBF; //! Bunch Fill of previous event - AliESDEvent *fESDev; //! ESD event - AliMCEvent *fMCev; //! MC event - // event/track cuts OO - to be used - AliTRDeventCuts *fEventCut; // event cut - AliESDtrackCuts *fTrackCut; // track cut - AliESDv0KineCuts *fV0Identifier; // V0 identifier - AliTRDv0Info *fV0Cut; // v0 cut - TString fOCDB; // OCDB location - AliTRDtrackInfo *fTrackInfo; //! Track info - AliTRDeventInfo *fEventInfo; //! Event info - AliTRDv0Info *fV0Info; //! V0 info - TObjArray *fTracksBarrel; //! Array of barrel(TPC) tracks - TObjArray *fTracksITS; //! Array of ITS seeded tracks - TObjArray *fTracksSA; //! Array of stand alone tracks - TObjArray *fTracksKink; //! Array of kink tracks - TObjArray *fV0List; //! V0 container - TObjArray *fClusters; //! Clusters container - TObjArray *fContainer; //! container to store results - TObjArray *fRecos; //! array of reco params - TTreeSRedirector *fDebugStream; //! debug stream - - ClassDef(AliTRDinfoGen, 8) // entry to TRD analysis train -}; -#endif +#ifndef ALITRDINFOGEN_H +#define ALITRDINFOGEN_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: AliTRDinfoGen.h 27496 2008-07-22 08:35:45Z cblume $ */ + +//////////////////////////////////////////////////////////////////////////// +// // +// TRD Performance tender wagon // +// // +//////////////////////////////////////////////////////////////////////////// + +#ifndef ALIANALYSISTASKSE_H +#include "AliAnalysisTaskSE.h" +#endif + +class AliESDEvent; +class AliMCEvent; +class AliESDfriend; +class AliTRDtrackInfo; +class AliTRDeventInfo; +class AliTRDv0Info; +class AliTRDeventCuts; +class AliESDtrackCuts; +class AliESDv0KineCuts; +class TObjArray; +class TString; +class TTreeSRedirector; +class AliTRDReconstructor; +class AliTRDgeometry; +class AliTRDinfoGen : public AliAnalysisTaskSE +{ +public: + enum AliTRDinfoGenSteeringBits{ + kMCdata = BIT(18) + ,kUseLocalTrkSelection = BIT(19) + ,kCollision = BIT(20) + ,kOCDB = BIT(21) + ,kTrkPoints = BIT(22) + }; + enum AliTRDinfoGenObjects{ + kTracksESD = 0 + ,kTracksMC + ,kV0 + ,kTPC + ,kITS + ,kTRDin + ,kTRDout + ,kBarrel + ,kBarrelMC + ,kSA + ,kSAMC + ,kKink + ,kKinkMC + ,kBarrelFriend + ,kSAFriend + ,kNObjects + }; + enum AliTRDinfoGenClasses{ + kStatTrk = 0 + ,kEvType +// ,kBCtrack + ,kBC + ,kTrigger + ,kChmb + ,kNclasses + }; + AliTRDinfoGen(); + AliTRDinfoGen(char* name); + virtual ~AliTRDinfoGen(); + + static Float_t GetEndITS() { return fgkITS;} + static Float_t GetEndTPC() { return fgkTPC;} + static Float_t GetEndTRD() { return fgkTRD;} + Int_t GetNRefFigures() const { return 1;} + const char* GetOCDB() const {return fOCDB.Data();} + Bool_t GetRefFigure(Int_t ifig); + Bool_t Load(const Char_t *fn="AnalysisResults.root", const Char_t *dir="TRD_Performance", const Char_t *name=NULL); + + Bool_t HasMCdata() const { return TestBit(kMCdata);}; + // temporary until check with AliAnalysisTaskSE collision selection mechanism + Bool_t IsInitOCDB() const {return TestBit(kOCDB);} + Bool_t IsCollision() const {return TestBit(kCollision);} + Bool_t HasTrackPoints() const {return TestBit(kTrkPoints);} + void MakeSummary(); + static const AliTRDReconstructor* Reconstructor() {return fgReconstructor;} + static AliTRDgeometry* Geometry() {return fgGeo;} + void SetInitOCDB(Bool_t set=kTRUE) {SetBit(kOCDB, set);} + void SetCollision(Bool_t set=kTRUE) {SetBit(kCollision, set);} + //void SetLocalEvSelection(const AliTRDeventCuts */*cut*/){;} + void SetLocalEvSelection(const AliTRDeventCuts &ec); + //void SetLocalTrkSelection(const AliESDtrackCuts */*cut*/){;} + void SetLocalTrkSelection(Bool_t use=kTRUE) {SetBit(kUseLocalTrkSelection, use);} + void SetLocalV0Selection(const AliTRDv0Info &v0); + void SetMCdata(Bool_t mc = kTRUE) {SetBit(kMCdata, mc);} + void SetOCDB(const char *ocdb) {fOCDB=ocdb;} + + Bool_t UseLocalEvSelection() const {return Bool_t(fEventCut);} + Bool_t UseLocalTrkSelection() const {return TestBit(kUseLocalTrkSelection);} + void UseTrackPoints(Bool_t use=kTRUE) {SetBit(kTrkPoints, use);} + void UserCreateOutputObjects(); + void UserExec(Option_t *); + void Terminate(Option_t* option = ""); +private: + // rough radial limits for TRD + static const Float_t fgkITS; // end ITS + static const Float_t fgkTPC; // end TPC + static const Float_t fgkTRD; // end TRD + + // Track selection + static const Float_t fgkTrkDCAxy; // cm + static const Float_t fgkTrkDCAz; // cm + static const Int_t fgkNclTPC; // N clusters TPC + static const Float_t fgkPt; // min. pt + static const Float_t fgkEta; // eta range + static AliTRDReconstructor *fgReconstructor; // single instance of TRD reconstructor used by all tasks + static AliTRDgeometry *fgGeo; // single instance of TRD geometry used by all tasks + + AliTRDinfoGen(const AliTRDinfoGen&); + AliTRDinfoGen& operator=(const AliTRDinfoGen&); + TTreeSRedirector* DebugStream(); + void MakeChambers(); + +// UShort_t fBF; //! Bunch Fill of previous event + AliESDEvent *fESDev; //! ESD event + AliMCEvent *fMCev; //! MC event + // event/track cuts OO - to be used + AliTRDeventCuts *fEventCut; // event cut + AliESDtrackCuts *fTrackCut; // track cut + AliESDv0KineCuts *fV0Identifier; // V0 identifier + AliTRDv0Info *fV0Cut; // v0 cut + TString fOCDB; // OCDB location + AliTRDtrackInfo *fTrackInfo; //! Track info + AliTRDeventInfo *fEventInfo; //! Event info + AliTRDv0Info *fV0Info; //! V0 info + TObjArray *fTracksBarrel; //! Array of barrel(TPC) tracks + TObjArray *fTracksITS; //! Array of ITS seeded tracks + TObjArray *fTracksSA; //! Array of stand alone tracks + TObjArray *fTracksKink; //! Array of kink tracks + TObjArray *fV0List; //! V0 container + TObjArray *fClusters; //! Clusters container + TObjArray *fContainer; //! container to store results + TObjArray *fRecos; //! array of reco params + TTreeSRedirector *fDebugStream; //! debug stream + + ClassDef(AliTRDinfoGen, 8) // entry to TRD analysis train +}; +#endif diff --git a/PWGPP/TRD/AliTRDrecoTask.cxx b/PWGPP/TRD/AliTRDrecoTask.cxx index 67198bc1a69..1cc07f05746 100644 --- a/PWGPP/TRD/AliTRDrecoTask.cxx +++ b/PWGPP/TRD/AliTRDrecoTask.cxx @@ -1,920 +1,920 @@ -/////////////////////////////////////////////////////// -// -// Basic class for Performance/Calibration TRD tasks -// -// It performs generic tasks like : -// - data file manegment -// - reference container management -// - debug container management -// - interaction with AliAnalysisManager -// - Plot functor loop -// -// Author: Alexandru Bercuci , 10/09/2008 -// -///////////////////////////////////////////////////////// - -#include "TClass.h" -#include "TMethod.h" -#include "TMethodCall.h" -#include "TMethodArg.h" -#include "TFile.h" -#include "TChain.h" -#include "TList.h" -#include "TMap.h" -#include "TH1.h" -#include "TH2.h" -#include "TH3.h" -#include "TF1.h" -#include "TObjArray.h" -#include "TDirectory.h" -#include "TTreeStream.h" -#include "TBox.h" -#include "TLatex.h" -#include "TVectorT.h" - -#include "AliLog.h" -#include "AliAnalysisTask.h" -#include "AliAnalysisManager.h" -#include "AliExternalTrackParam.h" - -#include "info/AliTRDchmbInfo.h" -#include "info/AliTRDeventInfo.h" -#include "info/AliTRDtrendingManager.h" -#include "AliTRDrecoTask.h" -#include "AliTRDtrackV1.h" -#include "AliTRDpidUtil.h" - -ClassImp(AliTRDrecoTask) - -Float_t AliTRDrecoTask::fgPt[AliTRDrecoTask::fgNPt+1] = {0.}; -TTreeSRedirector* AliTRDrecoTask::fgDebugStream(NULL); -TH1* AliTRDrecoTask::fgProjector(NULL); -//_______________________________________________________ -AliTRDrecoTask::AliTRDrecoTask() - : AliAnalysisTaskSE() - ,fNRefFigures(0) - ,fDets(NULL) - ,fDetsV(NULL) - ,fContainer(NULL) - ,fEvent(NULL) - ,fTracks(NULL) - ,fClusters(NULL) - ,fkClusters(NULL) - ,fkTrack(NULL) - ,fkMC(NULL) - ,fkESD(NULL) - ,fSpecies(-6) - ,fTriggerSlot(0) - ,fPt(-1.) - ,fPhi(0.) - ,fEta(0.) - ,fNpt(0) - ,fTriggerList(NULL) - ,fPlotFuncList(NULL) - ,fDetFuncList(NULL) - ,fRunTerminate(kFALSE) -{ -// Default constructor - snprintf(fNameId, 10, "no name"); -} - -//_______________________________________________________ -AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title) - : AliAnalysisTaskSE(name) - ,fNRefFigures(0) - ,fDets(NULL) - ,fDetsV(NULL) - ,fContainer(NULL) - ,fEvent(NULL) - ,fTracks(NULL) - ,fClusters(NULL) - ,fkClusters(NULL) - ,fkTrack(NULL) - ,fkMC(NULL) - ,fkESD(NULL) - ,fSpecies(-6) - ,fTriggerSlot(0) - ,fPt(-1.) - ,fPhi(0.) - ,fEta(0.) - ,fNpt(0) - ,fTriggerList(NULL) - ,fPlotFuncList(NULL) - ,fDetFuncList(NULL) - ,fRunTerminate(kFALSE) -{ -// Constructor for all derived performance tasks - - SetTitle(title); - snprintf(fNameId, 10, "no name"); - DefineInput (1, TObjArray::Class()); // track list - DefineInput (2, AliTRDeventInfo::Class()); // event info object - DefineInput (3, TObjArray::Class()); // cluster list object - DefineOutput(1, TObjArray::Class()); // histogram list -} - -//_______________________________________________________ -AliTRDrecoTask::~AliTRDrecoTask() -{ - - // Generic task destructor - - AliDebug(2, Form(" Ending task %s[%s]", GetName(), GetTitle())); - if(fgDebugStream){ - delete fgDebugStream; - fgDebugStream = NULL; - } - - if(fgProjector){ - delete fgProjector; - fgProjector = NULL; - } - - if(fPlotFuncList){ - fPlotFuncList->Delete(); - delete fPlotFuncList; - fPlotFuncList = NULL; - } - if(fDetFuncList){ - fDetFuncList->Delete(); - delete fDetFuncList; - fDetFuncList = NULL; - } - - if(fDets){ - if(fDets->IsOwner()) fDets->Delete(); - delete fDets; - fDets = NULL; - } - if(fDetsV) delete fDetsV; fDetsV=NULL; - if(fTriggerList){fTriggerList->Delete(); delete fTriggerList;} - - if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){ - if(fContainer->IsOwner()) fContainer->Delete(); - delete fContainer; - fContainer = NULL; - } - -/* if(fgTrendPoint){ - TFile::Open("TRD.PerformanceTrend.root", "UPDATE"); - fgTrendPoint->Write(); - delete fgTrendPoint; - fgTrendPoint=NULL; - gFile->Close(); - }*/ -} - -//_______________________________________________________ -Int_t AliTRDrecoTask::GetNRefFigures() const -{ - if(!fNRefFigures) AliWarning("No reference plots available."); - return fNRefFigures; -} - -//____________________________________________________________________ -Int_t AliTRDrecoTask::GetPtBin(Float_t pt) -{ -// Get significant (very low, low, medium, high, very high) pt bin - - Int_t ipt(0); - while(ipt(GetInputData(1)); - fEvent = dynamic_cast(GetInputData(2)); - fTriggerSlot=0; - if(fTriggerList && fEvent){ - for(Int_t itrig(0); itrigGetEntries(); itrig++){ - if(!fEvent->GetFiredTriggerClasses().Contains(((TObjString*)(*fTriggerList)[itrig])->GetName())) continue; - //printf("\"%s\" selected\n", ((TObjString*)(*fTriggerList)[itrig])->GetName()); - SETBIT(fTriggerSlot,itrig); - } - if(!fTriggerSlot){ - AliDebug(2, Form("Triggers[%s] not used for %s", fEvent->GetFiredTriggerClasses().Data(), GetName())); - return; - } - } - fClusters = dynamic_cast(GetInputData(3)); - - if(!fPlotFuncList){ - AliWarning("No track functor list defined for the task"); - return; - } - if(!fEvent || !fTracks) return; - if(!fTracks->GetEntriesFast()) return; - else AliDebug(2, Form("Tracks[%d] for %s", fTracks->GetEntriesFast(), GetName())); - - Int_t itrk(-1); - AliTRDtrackInfo *trackInfo(NULL); - TIter plotIter(fPlotFuncList); - TObjArrayIter trackIter(fTracks); - while((trackInfo = dynamic_cast(trackIter()))){ - itrk++; fPt=-1; fEta=0.; fPhi=0.; fSpecies=-6; - fkMC = trackInfo->GetMCinfo(); - fkESD = trackInfo->GetESDinfo(); - if((fkTrack = trackInfo->GetTrack())){ - // cache properties of the track at TRD entrance - // check input track status - AliExternalTrackParam *tin(NULL); - if(!(tin = fkTrack->GetTrackIn())) AliDebug(2, Form("Missing TRD track[%d] :: entry point.", itrk)); - else { - fPt = tin->Pt(); - fEta = tin->Eta(); - Double_t xyz[3]; - if(!tin->GetXYZ(xyz)) AliDebug(2, Form("Failed TRD track[%d] :: global track postion", itrk)); - else fPhi = TMath::ATan2(xyz[1], xyz[0]); - fSpecies= fkTrack->Charge()*(AliTRDpidUtil::Mass2Pid(fkTrack->GetMass())+1); - } - } else AliDebug(2, Form("Missing TRD track[%d].", itrk)); - - TMethodCall *plot(NULL); - plotIter.Reset(); - while((plot=dynamic_cast(plotIter()))) plot->Execute(this); - } - if(!fClusters) return; - if(!fDetFuncList){ - AliDebug(1, "No detector functor list defined for task"); - return; - } - TIter detIter(fDetFuncList); - for(Int_t idet(0); idetAt(idet))) continue; - TMethodCall *det(NULL); - detIter.Reset(); - while((det=dynamic_cast(detIter()))) det->Execute(this); - } -} - -//_______________________________________________________ -Bool_t AliTRDrecoTask::GetRefFigure(Int_t /*ifig*/) -{ - AliWarning("Retrieving reference figures not implemented."); - return kFALSE; -} - -//_______________________________________________________ -Bool_t AliTRDrecoTask::PutTrendValue(const Char_t *name, Double_t val, Double_t err) -{ -// Generic publisher for trend values - - AliTRDtrendingManager *tm = AliTRDtrendingManager::Instance(); - if(!tm){ - AliError("Wrong usage of the trending functionality. Could not instantiate AliTRDtrendingManager singleton."); - return kFALSE; - } - tm->AddValue(Form("%s_%s", GetName(), name), val, err); - return kTRUE; -} - -//_______________________________________________________ -void AliTRDrecoTask::InitFunctorList() -{ -// Initialize list of functors - - TClass *c = this->IsA(); - if(fPlotFuncList) fPlotFuncList->Clear(); - if(fDetFuncList) fDetFuncList->Clear(); - - TMethod *m(NULL); - TIter methIter(c->GetListOfMethods()); - while((m=dynamic_cast(methIter()))){ - TString name(m->GetName()); - if(name.BeginsWith("Plot")){ - if(!fPlotFuncList) fPlotFuncList = new TList(); - fPlotFuncList->AddLast(new TMethodCall(c, (const char*)name, "")); - } else if(name.BeginsWith("Det")){ - if(!fDetFuncList) fDetFuncList = new TList(); - fDetFuncList->AddLast(new TMethodCall(c, (const char*)name, "")); - } - } -} - -//_______________________________________________________ -Bool_t AliTRDrecoTask::Load(const Char_t *file, const Char_t *dir) -{ -// Generic container loader - - if(!TFile::Open(file)){ - AliWarning(Form("Couldn't open file %s.", file)); - return kFALSE; - } - if(!gFile->cd(dir)){ - AliWarning(Form("Couldn't cd to %s in %s.", dir, file)); - gFile->Close(); - return kFALSE; - } - if(!(fContainer = (TObjArray*)gDirectory->Get(GetName()))){ - AliWarning("Missing histogram container."); - gFile->Close(); - return kFALSE; - } - gFile->Close(); - return kTRUE; -} - -//________________________________________________________ -Bool_t AliTRDrecoTask::LoadDetectorMap(const Char_t *file, const Char_t *dir) -{ -// Load detector map. - - if(!TFile::Open(file)){ - AliWarning(Form("Couldn't open file %s.", file)); - return kFALSE; - } - if(!gFile->cd(dir)){ - AliWarning(Form("Couldn't cd to %s in %s.", dir, file)); - gFile->Close(); - return kFALSE; - } - TObjArray *info = NULL; - if(!(info = (TObjArray*)gDirectory->Get("TRDinfoGen"))){ - AliWarning("Missing TRDinfoGen container."); - gFile->Close(); - return kFALSE; - } - - if(info->FindObject("Chambers Status")) - fDets = (TObjArray*)((TObjArray*)info->FindObject("Chambers Status"))->Clone(); - - if(!fDets){ - if(!info->At(4) || strcmp("TObjArray", info->At(4)->IsA()->GetName())) AliError("Looking for old style chamber status map. Failed."); - else { - AliWarning("Looking for old style chamber status map."); - fDetsV = (TObjArray*)((TObjArray*)info->At(4))->Clone(); - } - } - gFile->Close(); - info->Delete(); delete info; - return kTRUE; -} - - -//________________________________________________________ -Bool_t AliTRDrecoTask::Save(TObjArray * const results){ - // - // Store the output graphs in a ROOT file - // Input TObject array will not be written as Key to the file, - // only content itself - // - - TDirectory *cwd = gDirectory; - if(!TFile::Open(Form("TRD.Result%s.root", GetName()), "RECREATE")) return kFALSE; - - TIterator *iter = results->MakeIterator(); - TObject *inObject = NULL, *outObject = NULL; - while((inObject = iter->Next())){ - outObject = inObject->Clone(); - outObject->Write(NULL, TObject::kSingleKey); - } - delete iter; - gFile->Close(); delete gFile; - cwd->cd(); - return kTRUE; -} - -//_______________________________________________________ -Bool_t AliTRDrecoTask::PostProcess() -{ -// To be implemented by particular tasks - - AliWarning("Post processing of reference histograms not implemented."); - return kTRUE; -} - -//_______________________________________________________ -void AliTRDrecoTask::MakeDetectorPlot(Int_t ly, const Option_t *opt) -{ -// Draw chamber boundaries in eta/phi plots with misalignments -// based on info collected by AliTRDinfoGen - - if(!fDets){ - AliWarning("NEW Detector map and status not available. Try OLD"); - MakeDetectorPlotOLD(ly, opt); - return; - } - AliTRDchmbInfo *ci(NULL); - for(Int_t idet(0); idetGetEntriesFast(); idet++){ - if(!(ci = (AliTRDchmbInfo*)fDets->At(idet))) continue; - if(AliTRDgeometry::GetLayer(ci->GetDetector()) != ly) continue; - ci->Draw(opt); - } -} - -//_______________________________________________________ -void AliTRDrecoTask::MakeDetectorPlotOLD(Int_t ly, const Option_t *opt) -{ -// Draw chamber boundaries in eta/phi plots with misalignments -// based on info collected by AliTRDinfoGen OLD data storage - - if(!fDetsV){ - AliError("OLD Detector map and status not available."); - return; - } - if(!fDetsV->GetEntries()){ - AliError("OLD Detector map and status not filled."); - return; - } - - Float_t xmin(0.), xmax(0.); - TBox *gdet = new TBox(); - gdet->SetLineColor(kBlack);gdet->SetFillColor(kBlack); - Int_t style[] = {0, 3003}; - for(Int_t idet(0); idet<540; idet++){ - if(idet%6 != ly) continue; - TVectorF *det((TVectorF*)fDetsV->At(idet)); - if(!det) continue; - Int_t iopt = Int_t((*det)[4]); - if(strcmp(opt, "eta")==0){ - xmin=(*det)[0]; xmax=(*det)[2]; - } else if(strcmp(opt, "pad")==0){ - Int_t stk(AliTRDgeometry::GetStack(idet)); - xmin=-0.6+16*(4-stk)-(stk<2?4:0); xmax=xmin+(stk==2?12:16)-0.2; - } else continue; - AliDebug(2, Form("det[%03d] 0[%+4.1f(%+4.1f) %+4.1f] 1[%+4.1f(%+4.1f) %+4.1f] opt[%d]", idet, xmin, (*det)[0], (*det)[1], xmax, (*det)[2], (*det)[3], iopt)); - if(iopt==1){ - gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack); - gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]); - } else { - gdet->SetFillStyle(style[0]); - gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]); - if(iopt==2){ - gdet->SetFillStyle(style[1]);gdet->SetFillColor(kGreen); - gdet->DrawBox(xmin, (*det)[1], xmax, 0.5*((*det)[3]+(*det)[1])); - } else if(iopt==3){ - gdet->SetFillStyle(style[1]);gdet->SetFillColor(kRed); - gdet->DrawBox(xmin, 0.5*((*det)[3]+(*det)[1]), xmax, (*det)[3]); - } else if(iopt!=0) AliError(Form("Wrong chmb. status[%d] for det[%03d]", iopt, idet)); - } - } - Float_t dsm = TMath::TwoPi()/AliTRDgeometry::kNsector; - xmin=0.; - if(strcmp(opt, "pad")==0) xmin=38.; - TLatex *sm = new TLatex(); sm->SetTextAlign(22);sm->SetTextColor(kBlack); sm->SetTextFont(32);sm->SetTextSize(0.03); - for(Int_t is(0); isDrawLatex(xmin, -TMath::Pi()+(is+0.5)*dsm, Form("%02d", is>=9?(is-9):(is+9))); -} - - -//_______________________________________________________ -void AliTRDrecoTask::MakeSummary() -{ -// To be implemented by particular tasks - AliWarning("Summary not available"); -} - -//_______________________________________________________ -void AliTRDrecoTask::SetDebugLevel(Int_t level) -{ -// Generic debug handler - - AliAnalysisTaskSE::SetDebugLevel(level); - if(DebugLevel()>=1 && !fgDebugStream){ - AliInfo(Form("Debug Level for Task %s set to %d", GetName(), level)); - TDirectory *savedir = gDirectory; - fgDebugStream = new TTreeSRedirector("TRD.DebugPerformance.root", "RECREATE"); - savedir->cd(); - } -} - -//____________________________________________________________________ -void AliTRDrecoTask::Terminate(Option_t *) -{ - // - // Terminate - // - - if(fgDebugStream){ - delete fgDebugStream; - fgDebugStream = NULL; - } - fContainer = dynamic_cast(GetOutputData(1)); - if(fContainer && fRunTerminate){ - PostProcess(); - MakeSummary(); - } -} - -//________________________________________________________ -Float_t AliTRDrecoTask::SetNormZ(TH2 *h2, Int_t bxmin, Int_t bxmax, Int_t bymin, Int_t bymax, Float_t thr) -{ -// Normalize histo content to the mean value in the range specified by bin ranges -// [bxmin, bxmax] on the x axis and [bymin, bymax] on the y axis. -// Optionally a threshold "thr" can be specified to disregard entries with no meaning - - Float_t s = 0., c=0.; Int_t is(0); - for(Int_t ix(bxmin); ix<=(bxmax>0?bxmax:(h2->GetXaxis()->GetNbins())); ix++){ - for(Int_t iy(bymin); iy<=(bymax>0?bymax:(h2->GetYaxis()->GetNbins())); iy++){ - if((c = h2->GetBinContent(ix, iy))GetXaxis()->GetNbins(); ix++){ - for(Int_t iy(1); iy<=h2->GetYaxis()->GetNbins(); iy++){ - if((c = h2->GetBinContent(ix, iy))SetBinContent(ix, iy, thr-1000); - else h2->SetBinContent(ix, iy, 100.*(c/s-1.)); - } - } - return s; -} - -//________________________________________________________ -void AliTRDrecoTask::SetRangeZ(TH2 *h2, Float_t min, Float_t max, Float_t thr) -{ -// Set range on Z axis such to avoid outliers - - Float_t c(0.), dz(1.e-3*(max-min)); - for(Int_t ix(1); ix<=h2->GetXaxis()->GetNbins(); ix++){ - for(Int_t iy(1); iy<=h2->GetYaxis()->GetNbins(); iy++){ - if((c = h2->GetBinContent(ix, iy))SetBinContent(ix, iy, min+dz); - } - } - h2->GetZaxis()->SetRangeUser(min, max); -} - -//________________________________________________________ -Float_t AliTRDrecoTask::GetMeanStat(TH1 *h, Float_t cut, Int_t opt, Float_t *sigma) -{ -// Return mean number of entries/bin of histogram "h". -// If optionally sigma is allocated than it is also filled with sigma paramter of the gauss fit -// -// Option "opt" is given the following values are accepted: -// -1 : consider only entries less than "cut" -// 1 : consider only entries greater than "cut" -// 0 : no "cut" [dafault] -// Error codes -// -999. : statistics too low [20] -// -998. : fit failed - - const Int_t kvd(100000); - Float_t v[kvd]; - Int_t nbx(h->GetNbinsX()), nby(h->GetNbinsY()), nbz(h->GetNbinsZ()); - Int_t nv(0); Float_t xmin(1.e5), xmax(-xmin); - for(Int_t ix(1); ix<=nbx; ix++){ - for(Int_t iy(1); iy<=nby; iy++){ - for(Int_t iz(1); iz<=nbz; iz++){ - Float_t c = h->GetBinContent(ix, iy, iz); - if(opt*(c-cut)<0.) continue; - v[nv++] = c; - if(cxmax) xmax = c; - if(nv==kvd){ - printf("W - AliTRDrecoTask::GetMeanStat() :: Unreliable results for %s[%s]. Statical allocation exceeded.\n", h->GetName(), h->GetTitle()); - break; - } - } - if(nv==kvd) break; - } - if(nv==kvd) break; - } - if(nv<10){ - //printf("W - AliTRDrecoTask::GetMeanStat() :: Failed for %s[%s]. Statical undefined [%d].\n", h->GetName(), h->GetTitle(), nv); - return -999.; - } - if(fgProjector) delete fgProjector; - fgProjector = new TH1F("hProjector", "", 20, 0.5*(3*xmin-xmax), 0.5*(3*xmax - xmin)); - for(Int_t iv(0); ivFill(v[iv]); - TF1 f("f", "gaus", xmin, xmax); - f.SetParameter(0, fgProjector->Integral()); - f.SetParameter(1, fgProjector->GetMean()); f.SetParLimits(1, xmin, xmax); - f.SetParameter(2, fgProjector->GetRMS()); - if(fgProjector->Fit(&f, "WQ0", "goff")) return -998.; - if(sigma) *sigma = f.GetParameter(2); - return f.GetParameter(1); -} - -//________________________________________________________ -Int_t AliTRDrecoTask::Rebin(TH2 *h, Int_t n, Int_t rebinX[], Int_t rebinY[], Int_t nstat) -{ -// Rebin histo "h" according to "rebinning" strategy "n" steps such to obtain mean statistics per bin over "nstat" - - Int_t irebin(0); - while(irebinRebin2D(rebinX[irebin], rebinY[irebin]); - irebin++; - } - return irebin; -} - -//________________________________________________________ -AliTRDrecoTask::AliTRDrecoProjection::AliTRDrecoProjection() - :TNamed() - ,fH(NULL) - ,fNrebin(0) -{ - // constructor - fRebin[0] = NULL;fRebin[1] = NULL; - memset(fAx, 0, 3*sizeof(Int_t)); - memset(fRange, 0, 4*sizeof(Float_t)); -} - -//________________________________________________________ -AliTRDrecoTask::AliTRDrecoProjection::~AliTRDrecoProjection() -{ - // destructor - if(fH) delete fH; - if(fRebin[0]) delete [] fRebin[0]; - if(fRebin[1]) delete [] fRebin[1]; -} - -//________________________________________________________ -void AliTRDrecoTask::AliTRDrecoProjection::Build(const Char_t *n, const Char_t *t, Int_t ix, Int_t iy, Int_t iz, TAxis *aa[]) -{ -// check and build (if neccessary) projection determined by axis "ix", "iy" and "iz" - if(!aa[ix] || !aa[iy] || !aa[iz]) return; - TAxis *ax(aa[ix]), *ay(aa[iy]), *az(aa[iz]); - // check ax definiton to protect against older versions of the data - if(ax->GetNbins()<=0 || (ax->GetXmax()-ax->GetXmin())<=0.){ - AliWarning(Form("Wrong definition of axis[%d] \"%s\"[%d](%f %f).", ix, ax->GetTitle(), ax->GetNbins(), ax->GetXmin(), ax->GetXmax())); - return; - } - if(ay->GetNbins()<=0 || (ay->GetXmax()-ay->GetXmin())<=0.){ - AliWarning(Form("Wrong definition of axis[%d] \"%s\"[%d](%f %f).", ix, ay->GetTitle(), ay->GetNbins(), ay->GetXmin(), ay->GetXmax())); - return; - } - if(az->GetNbins()<=0 || (az->GetXmax()-az->GetXmin())<=0.){ - AliWarning(Form("Wrong definition of axis[%d] \"%s\"[%d](%f %f).", ix, az->GetTitle(), az->GetNbins(), az->GetXmin(), az->GetXmax())); - return; - } - SetNameTitle(n,t); - fH = new TH3I(n, Form("%s;%s;%s;%s", t, ax->GetTitle(), ay->GetTitle(), az->GetTitle()), - ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), - ay->GetNbins(), ay->GetXmin(), ay->GetXmax(), - az->GetNbins(), az->GetXmin(), az->GetXmax()); - fAx[0] = ix; fAx[1] = iy; fAx[2] = iz; - fRange[0] = az->GetXmin()/3.; fRange[1] = az->GetXmax()/3.; - AliDebug(2, Form("H3(%s, %s) :: %s[%3d %4.2f %4.2f]%s[%3d %4.2f %4.2f]%s[%3d %4.2f %4.2f]", n, t, - ax->GetTitle(), ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), - ay->GetTitle(), ay->GetNbins(), ay->GetXmin(), ay->GetXmax(), - az->GetTitle(), az->GetNbins(), az->GetXmin(), az->GetXmax())); -} - -//________________________________________________________ -AliTRDrecoTask::AliTRDrecoProjection& AliTRDrecoTask::AliTRDrecoProjection::operator=(const AliTRDrecoProjection& rhs) -{ -// copy projections - if(this == &rhs) return *this; - - TNamed::operator=(rhs); - if(fNrebin){fNrebin=0; delete [] fRebin[0]; delete [] fRebin[1];} - if(rhs.fNrebin) SetRebinStrategy(rhs.fNrebin, rhs.fRebin[0], rhs.fRebin[1]); - memcpy(fAx, rhs.fAx, 3*sizeof(Int_t)); - memcpy(fRange, rhs.fRange, 4*sizeof(Float_t)); - if(fH) delete fH; - if(rhs.fH) fH=(TH3I*)rhs.fH->Clone(Form("%s_CLONE", rhs.fH->GetName())); - return *this; -} - -//________________________________________________________ -AliTRDrecoTask::AliTRDrecoProjection& AliTRDrecoTask::AliTRDrecoProjection::operator+=(const AliTRDrecoProjection& other) -{ -// increment projections - if(!fH || !other.fH) return *this; - AliDebug(2, Form("%s+=%s [%s+=%s]", GetName(), other.GetName(), fH->GetName(), (other.fH)->GetName())); - fH->Add(other.fH); - return *this; -} - -//________________________________________________________ -void AliTRDrecoTask::AliTRDrecoProjection::Increment(Int_t bin[], Double_t v) -{ -// increment bin with value "v" pointed by general coord in "bin" - if(!fH) return; - AliDebug(4, Form(" %s[%2d]", fH->GetName(), Int_t(v))); - fH->AddBinContent(fH->GetBin(bin[fAx[0]],bin[fAx[1]],bin[fAx[2]]), Int_t(v)); -} - -//________________________________________________________ -Double_t AliTRDrecoTask::AliTRDrecoProjection::GetTrendValue(const Int_t mid, Double_t *e, Double_t *s, Double_t *se) const -{ -// Return result of fitting the main distribution (represented on the z axis) with the function selected -// "mid". Optionally return the Mean and RMS of the distribution pointing to "m" and "s" - - if(!fH){ - AliDebug(1, Form("Missing 3D in %s", GetName())); - return -999.; - } - TH1 *h1s(NULL); - if(!(h1s = (TH1D*)fH->Project3D("z"))){ - AliDebug(1, Form("Failed Project3D(\"z\") in %s", GetName())); - return -999.; - } - Int_t ne((Int_t)h1s->Integral()); - if(ne<30){ - AliDebug(1, Form("Statistics too low[%2d] in %s", ne, GetName())); - delete h1s; - return -999.; - } - TAxis *az(h1s->GetXaxis()); - Float_t mn(h1s->GetMean()), rms(h1s->GetRMS()), - v(mn), // main trending value (mean, mu, MPV) - ve(rms),// dispersion (RMS, sigma, landau 2nd param) - ev(h1s->GetMeanError()), // error on v - eve(h1s->GetRMSError());// error on ve - if(mid==1){ - TF1 fg("fg", "gaus", az->GetXmin(), az->GetXmax()); - fg.SetParameter(0, Float_t(ne)); fg.SetParameter(1, mn); fg.SetParameter(2, rms); - h1s->Fit(&fg, "WQ0"); - v = fg.GetParameter(1); ev = fg.GetParError(1); - ve= fg.GetParameter(2); eve= fg.GetParError(2); - } else if (mid==2) { - TF1 fl("fl", "landau", az->GetXmin(), az->GetXmax()); - fl.SetParameter(0, Float_t(ne)); fl.SetParameter(1, mn); fl.SetParameter(2, rms); - h1s->Fit(&fl, "WQ0"); - v = fl.GetMaximumX(); ev = fl.GetParError(1); - ve= fl.GetParameter(2);eve= fl.GetParError(2); - } - if(e) *e = ev; - if(s) *s = ve; - if(se) *se = eve; - AliDebug(2, Form("[%d] %s(%4d) = M{%f+-%f} S{%f+-%f}", mid, fH->GetName(), (Int_t)h1s->Integral(), v, ev, ve, eve)); - - delete h1s; - return v; -} - -//________________________________________________________ -TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2Dbin(Int_t bin, Bool_t mc) -{ -// dumb 2D projection for bin including under/over flow. Default all [bin==-1] - - TAxis *ax(fH->GetXaxis()), *ay(fH->GetYaxis()), *az(fH->GetZaxis()); - Int_t nbins(az->GetNbins()); - TH2F *h2(NULL); - if(bin<0) h2 = new TH2F(Form("%s_2D", fH->GetName()), - Form("%s;%s;%s;Entries", fH->GetTitle(), ax->GetTitle(), ay->GetTitle()), - ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), - ay->GetNbins(), ay->GetXmin(), ay->GetXmax()); - else h2 = new TH2F(Form("%s%d_2D", fH->GetName(), bin), - Form("%s | #it{%4.2f<=p_{t}^{%s}[GeV/c]<%4.2f};%s;%s;Entries", fH->GetTitle(), - bin?fgPt[bin-1]:0., mc?"MC":"", bin>nbins?99.99:fgPt[bin], ax->GetTitle(), ay->GetTitle()), - ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), - ay->GetNbins(), ay->GetXmin(), ay->GetXmax()); - for(Int_t ix(1); ix<=ax->GetNbins(); ix++){ - for(Int_t iy(1); iy<=ay->GetNbins(); iy++){ - Int_t ibin = h2->GetBin(ix, iy); - for(Int_t iz(0); iz<=az->GetNbins()+1; iz++){ - if(bin<0) h2->AddBinContent(ibin, fH->GetBinContent(ix, iy, iz)); - else if(bin==iz){ - h2->AddBinContent(ibin, fH->GetBinContent(ix, iy, iz)); - break; - } - } - } - } - return h2; -} - -//________________________________________________________ -TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2D(const Int_t nstat, const Int_t ncol, const Int_t mid, Bool_t del) -{ -// build the 2D projection and adjust binning - - const Char_t *title[] = {"Mean", "#mu", "MPV"}; - if(!fH){ - AliDebug(1, Form("Missing 3D in %s", GetName())); - return NULL; - } - TAxis *ax(fH->GetXaxis()), *ay(fH->GetYaxis()), *az(fH->GetZaxis()); - TH2D *h2s(NULL), *hyx(NULL); - if(!(h2s = (TH2D*)fH->Project3D("yx"))){ - AliDebug(1, Form("Failed Project3D(\"yx\") in %s", GetName())); - return NULL; - } - // save a copy of the original distribution - if(!del){ - hyx = (TH2D*)h2s->Clone(); - hyx->SetName(Form("%sEn", fH->GetName())); - } - Int_t irebin(Rebin(h2s, fNrebin, fRebin[0], fRebin[1], nstat)), dxBin(1), dyBin(1); - for(Int_t ir(0); irGetNbinsX()), ny(h2s->GetNbinsY()); - delete h2s; - if(mid<0) return NULL; - - // start projection - TH1 *h(NULL); Int_t n(0); - Float_t dz=(fRange[1]-fRange[1])/ncol; - TString titlez(az->GetTitle()); TObjArray *tokenTitle(titlez.Tokenize(" ")); - Int_t nt(tokenTitle->GetEntriesFast()); - TH2 *h2(NULL); - if((h2 = (TH2*)gDirectory->Get(Form("%s_2D", fH->GetName())))) delete h2; // avoid ROOT warning messages - h2 = new TH2F(Form("%s_2D", fH->GetName()), - Form("%s;%s;%s;%s(%s) %s", fH->GetTitle(), ax->GetTitle(), ay->GetTitle(), title[mid], nt>0?(*tokenTitle)[0]->GetName():"", nt>1?(*tokenTitle)[1]->GetName():""), - nx, ax->GetXmin(), ax->GetXmax(), ny, ay->GetXmin(), ay->GetXmax()); - tokenTitle->Delete(); delete tokenTitle; - h2->SetContour(ncol); - h2->GetZaxis()->CenterTitle(); - h2->GetZaxis()->SetTitleOffset(1.4); - h2->GetZaxis()->SetRangeUser(fRange[0], fRange[1]); - AliDebug(2, Form("%s[%s] nx[%d] ny[%d]", h2->GetName(), h2->GetTitle(), nx, ny)); - for(Int_t iy(0); iyProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin+1, (ix+1)*dxBin, iy*dyBin+1, (iy+1)*dyBin); - Int_t ne((Int_t)h->Integral()); - //printf(" x[%2d %2d] y[%2d %2d] ne[%4d]\n", ix*dxBin+1, (ix+1)*dxBin, iy*dyBin+1, (iy+1)*dyBin, ne); - if(neSetBinContent(ix+1, iy+1, -999); - h2->SetBinError(ix+1, iy+1, 1.); - n++; - }else{ - // redo the projection by adding 1 bin @ left and 1 bin @ right for smoothing - h = fH->ProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin, (ix+1)*dxBin+1, iy*dyBin, (iy+1)*dyBin+1); - Float_t v(h->GetMean()), ve(h->GetRMS()); - if(mid==1){ - TF1 fg("fg", "gaus", az->GetXmin(), az->GetXmax()); - fg.SetParameter(0, Float_t(ne)); fg.SetParameter(1, v); fg.SetParameter(2, ve); - h->Fit(&fg, "WQ0"); - v = fg.GetParameter(1); ve = fg.GetParameter(2); - } else if (mid==2) { - TF1 fl("fl", "landau", az->GetXmin(), az->GetXmax()); - fl.SetParameter(0, Float_t(ne)); fl.SetParameter(1, v); fl.SetParameter(2, ve); - h->Fit(&fl, "WQ0"); - v = fl.GetMaximumX(); ve = fl.GetParameter(2); -/* TF1 fgle("gle", "[0]*TMath::Landau(x, [1], [2], 1)*TMath::Exp(-[3]*x/[1])", az->GetXmin(), az->GetXmax()); - fgle.SetParameter(0, fl.GetParameter(0)); - fgle.SetParameter(1, fl.GetParameter(1)); - fgle.SetParameter(2, fl.GetParameter(2)); - fgle.SetParameter(3, 1.);fgle.SetParLimits(3, 0., 5.); - h->Fit(&fgle, "WQ"); - v = fgle.GetMaximumX(); ve = fgle.GetParameter(2);*/ - } - if(vSetBinContent(ix+1, iy+1, fRange[0]+0.1*dz); - else h2->SetBinContent(ix+1, iy+1, v); - h2->SetBinError(ix+1, iy+1, ve); - } - } - } - if(h) delete h; - if(n==nx*ny){ // clean empty projections - AliDebug(1, Form("Empty projection in %s", GetName())); - delete h2; h2=NULL; - } - return h2; -} - -//________________________________________________________ -void AliTRDrecoTask::AliTRDrecoProjection::SetRebinStrategy(Int_t n, Int_t rebx[], Int_t reby[]) -{ -// define rebinning strategy for this projection - fNrebin = n; - fRebin[0] = new Int_t[n]; memcpy(fRebin[0], rebx, n*sizeof(Int_t)); - fRebin[1] = new Int_t[n]; memcpy(fRebin[1], reby, n*sizeof(Int_t)); -} - -//________________________________________________________ -void AliTRDrecoTask::SetTriggerList(const Char_t *tl) -{ -// Store list of triggers to be monitored - TString stl(tl); - if(fTriggerList){ fTriggerList->Delete(); delete fTriggerList;} - TObjArray *atl = stl.Tokenize(" "); - fTriggerList = (TObjArray*)atl->Clone(""); - atl->Delete(); delete atl; - AliInfo("Running only for triggers::"); - fTriggerList->Print(); -} - - +/////////////////////////////////////////////////////// +// +// Basic class for Performance/Calibration TRD tasks +// +// It performs generic tasks like : +// - data file manegment +// - reference container management +// - debug container management +// - interaction with AliAnalysisManager +// - Plot functor loop +// +// Author: Alexandru Bercuci , 10/09/2008 +// +///////////////////////////////////////////////////////// + +#include "TClass.h" +#include "TMethod.h" +#include "TMethodCall.h" +#include "TMethodArg.h" +#include "TFile.h" +#include "TChain.h" +#include "TList.h" +#include "TMap.h" +#include "TH1.h" +#include "TH2.h" +#include "TH3.h" +#include "TF1.h" +#include "TObjArray.h" +#include "TDirectory.h" +#include "TTreeStream.h" +#include "TBox.h" +#include "TLatex.h" +#include "TVectorT.h" + +#include "AliLog.h" +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" +#include "AliExternalTrackParam.h" + +#include "info/AliTRDchmbInfo.h" +#include "info/AliTRDeventInfo.h" +#include "info/AliTRDtrendingManager.h" +#include "AliTRDrecoTask.h" +#include "AliTRDtrackV1.h" +#include "AliTRDpidUtil.h" + +ClassImp(AliTRDrecoTask) + +Float_t AliTRDrecoTask::fgPt[AliTRDrecoTask::fgNPt+1] = {0.}; +TTreeSRedirector* AliTRDrecoTask::fgDebugStream(NULL); +TH1* AliTRDrecoTask::fgProjector(NULL); +//_______________________________________________________ +AliTRDrecoTask::AliTRDrecoTask() + : AliAnalysisTaskSE() + ,fNRefFigures(0) + ,fDets(NULL) + ,fDetsV(NULL) + ,fContainer(NULL) + ,fEvent(NULL) + ,fTracks(NULL) + ,fClusters(NULL) + ,fkClusters(NULL) + ,fkTrack(NULL) + ,fkMC(NULL) + ,fkESD(NULL) + ,fSpecies(-6) + ,fTriggerSlot(0) + ,fPt(-1.) + ,fPhi(0.) + ,fEta(0.) + ,fNpt(0) + ,fTriggerList(NULL) + ,fPlotFuncList(NULL) + ,fDetFuncList(NULL) + ,fRunTerminate(kFALSE) +{ +// Default constructor + snprintf(fNameId, 10, "no name"); +} + +//_______________________________________________________ +AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title) + : AliAnalysisTaskSE(name) + ,fNRefFigures(0) + ,fDets(NULL) + ,fDetsV(NULL) + ,fContainer(NULL) + ,fEvent(NULL) + ,fTracks(NULL) + ,fClusters(NULL) + ,fkClusters(NULL) + ,fkTrack(NULL) + ,fkMC(NULL) + ,fkESD(NULL) + ,fSpecies(-6) + ,fTriggerSlot(0) + ,fPt(-1.) + ,fPhi(0.) + ,fEta(0.) + ,fNpt(0) + ,fTriggerList(NULL) + ,fPlotFuncList(NULL) + ,fDetFuncList(NULL) + ,fRunTerminate(kFALSE) +{ +// Constructor for all derived performance tasks + + SetTitle(title); + snprintf(fNameId, 10, "no name"); + DefineInput (1, TObjArray::Class()); // track list + DefineInput (2, AliTRDeventInfo::Class()); // event info object + DefineInput (3, TObjArray::Class()); // cluster list object + DefineOutput(1, TObjArray::Class()); // histogram list +} + +//_______________________________________________________ +AliTRDrecoTask::~AliTRDrecoTask() +{ + + // Generic task destructor + + AliDebug(2, Form(" Ending task %s[%s]", GetName(), GetTitle())); + if(fgDebugStream){ + delete fgDebugStream; + fgDebugStream = NULL; + } + + if(fgProjector){ + delete fgProjector; + fgProjector = NULL; + } + + if(fPlotFuncList){ + fPlotFuncList->Delete(); + delete fPlotFuncList; + fPlotFuncList = NULL; + } + if(fDetFuncList){ + fDetFuncList->Delete(); + delete fDetFuncList; + fDetFuncList = NULL; + } + + if(fDets){ + if(fDets->IsOwner()) fDets->Delete(); + delete fDets; + fDets = NULL; + } + if(fDetsV) delete fDetsV; fDetsV=NULL; + if(fTriggerList){fTriggerList->Delete(); delete fTriggerList;} + + if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){ + if(fContainer->IsOwner()) fContainer->Delete(); + delete fContainer; + fContainer = NULL; + } + +/* if(fgTrendPoint){ + TFile::Open("TRD.PerformanceTrend.root", "UPDATE"); + fgTrendPoint->Write(); + delete fgTrendPoint; + fgTrendPoint=NULL; + gFile->Close(); + }*/ +} + +//_______________________________________________________ +Int_t AliTRDrecoTask::GetNRefFigures() const +{ + if(!fNRefFigures) AliWarning("No reference plots available."); + return fNRefFigures; +} + +//____________________________________________________________________ +Int_t AliTRDrecoTask::GetPtBin(Float_t pt) +{ +// Get significant (very low, low, medium, high, very high) pt bin + + Int_t ipt(0); + while(ipt(GetInputData(1)); + fEvent = dynamic_cast(GetInputData(2)); + fTriggerSlot=0; + if(fTriggerList && fEvent){ + for(Int_t itrig(0); itrigGetEntries(); itrig++){ + if(!fEvent->GetFiredTriggerClasses().Contains(((TObjString*)(*fTriggerList)[itrig])->GetName())) continue; + //printf("\"%s\" selected\n", ((TObjString*)(*fTriggerList)[itrig])->GetName()); + SETBIT(fTriggerSlot,itrig); + } + if(!fTriggerSlot){ + AliDebug(2, Form("Triggers[%s] not used for %s", fEvent->GetFiredTriggerClasses().Data(), GetName())); + return; + } + } + fClusters = dynamic_cast(GetInputData(3)); + + if(!fPlotFuncList){ + AliWarning("No track functor list defined for the task"); + return; + } + if(!fEvent || !fTracks) return; + if(!fTracks->GetEntriesFast()) return; + else AliDebug(2, Form("Tracks[%d] for %s", fTracks->GetEntriesFast(), GetName())); + + Int_t itrk(-1); + AliTRDtrackInfo *trackInfo(NULL); + TIter plotIter(fPlotFuncList); + TObjArrayIter trackIter(fTracks); + while((trackInfo = dynamic_cast(trackIter()))){ + itrk++; fPt=-1; fEta=0.; fPhi=0.; fSpecies=-6; + fkMC = trackInfo->GetMCinfo(); + fkESD = trackInfo->GetESDinfo(); + if((fkTrack = trackInfo->GetTrack())){ + // cache properties of the track at TRD entrance + // check input track status + AliExternalTrackParam *tin(NULL); + if(!(tin = fkTrack->GetTrackIn())) AliDebug(2, Form("Missing TRD track[%d] :: entry point.", itrk)); + else { + fPt = tin->Pt(); + fEta = tin->Eta(); + Double_t xyz[3]; + if(!tin->GetXYZ(xyz)) AliDebug(2, Form("Failed TRD track[%d] :: global track postion", itrk)); + else fPhi = TMath::ATan2(xyz[1], xyz[0]); + fSpecies= fkTrack->Charge()*(AliTRDpidUtil::Mass2Pid(fkTrack->GetMass())+1); + } + } else AliDebug(2, Form("Missing TRD track[%d].", itrk)); + + TMethodCall *plot(NULL); + plotIter.Reset(); + while((plot=dynamic_cast(plotIter()))) plot->Execute(this); + } + if(!fClusters) return; + if(!fDetFuncList){ + AliDebug(1, "No detector functor list defined for task"); + return; + } + TIter detIter(fDetFuncList); + for(Int_t idet(0); idetAt(idet))) continue; + TMethodCall *det(NULL); + detIter.Reset(); + while((det=dynamic_cast(detIter()))) det->Execute(this); + } +} + +//_______________________________________________________ +Bool_t AliTRDrecoTask::GetRefFigure(Int_t /*ifig*/) +{ + AliWarning("Retrieving reference figures not implemented."); + return kFALSE; +} + +//_______________________________________________________ +Bool_t AliTRDrecoTask::PutTrendValue(const Char_t *name, Double_t val, Double_t err) +{ +// Generic publisher for trend values + + AliTRDtrendingManager *tm = AliTRDtrendingManager::Instance(); + if(!tm){ + AliError("Wrong usage of the trending functionality. Could not instantiate AliTRDtrendingManager singleton."); + return kFALSE; + } + tm->AddValue(Form("%s_%s", GetName(), name), val, err); + return kTRUE; +} + +//_______________________________________________________ +void AliTRDrecoTask::InitFunctorList() +{ +// Initialize list of functors + + TClass *c = this->IsA(); + if(fPlotFuncList) fPlotFuncList->Clear(); + if(fDetFuncList) fDetFuncList->Clear(); + + TMethod *m(NULL); + TIter methIter(c->GetListOfMethods()); + while((m=dynamic_cast(methIter()))){ + TString name(m->GetName()); + if(name.BeginsWith("Plot")){ + if(!fPlotFuncList) fPlotFuncList = new TList(); + fPlotFuncList->AddLast(new TMethodCall(c, (const char*)name, "")); + } else if(name.BeginsWith("Det")){ + if(!fDetFuncList) fDetFuncList = new TList(); + fDetFuncList->AddLast(new TMethodCall(c, (const char*)name, "")); + } + } +} + +//_______________________________________________________ +Bool_t AliTRDrecoTask::Load(const Char_t *file, const Char_t *dir) +{ +// Generic container loader + + if(!TFile::Open(file)){ + AliWarning(Form("Couldn't open file %s.", file)); + return kFALSE; + } + if(!gFile->cd(dir)){ + AliWarning(Form("Couldn't cd to %s in %s.", dir, file)); + gFile->Close(); + return kFALSE; + } + if(!(fContainer = (TObjArray*)gDirectory->Get(GetName()))){ + AliWarning("Missing histogram container."); + gFile->Close(); + return kFALSE; + } + gFile->Close(); + return kTRUE; +} + +//________________________________________________________ +Bool_t AliTRDrecoTask::LoadDetectorMap(const Char_t *file, const Char_t *dir) +{ +// Load detector map. + + if(!TFile::Open(file)){ + AliWarning(Form("Couldn't open file %s.", file)); + return kFALSE; + } + if(!gFile->cd(dir)){ + AliWarning(Form("Couldn't cd to %s in %s.", dir, file)); + gFile->Close(); + return kFALSE; + } + TObjArray *info = NULL; + if(!(info = (TObjArray*)gDirectory->Get("TRDinfoGen"))){ + AliWarning("Missing TRDinfoGen container."); + gFile->Close(); + return kFALSE; + } + + if(info->FindObject("Chambers Status")) + fDets = (TObjArray*)((TObjArray*)info->FindObject("Chambers Status"))->Clone(); + + if(!fDets){ + if(!info->At(4) || strcmp("TObjArray", info->At(4)->IsA()->GetName())) AliError("Looking for old style chamber status map. Failed."); + else { + AliWarning("Looking for old style chamber status map."); + fDetsV = (TObjArray*)((TObjArray*)info->At(4))->Clone(); + } + } + gFile->Close(); + info->Delete(); delete info; + return kTRUE; +} + + +//________________________________________________________ +Bool_t AliTRDrecoTask::Save(TObjArray * const results){ + // + // Store the output graphs in a ROOT file + // Input TObject array will not be written as Key to the file, + // only content itself + // + + TDirectory *cwd = gDirectory; + if(!TFile::Open(Form("TRD.Result%s.root", GetName()), "RECREATE")) return kFALSE; + + TIterator *iter = results->MakeIterator(); + TObject *inObject = NULL, *outObject = NULL; + while((inObject = iter->Next())){ + outObject = inObject->Clone(); + outObject->Write(NULL, TObject::kSingleKey); + } + delete iter; + gFile->Close(); delete gFile; + cwd->cd(); + return kTRUE; +} + +//_______________________________________________________ +Bool_t AliTRDrecoTask::PostProcess() +{ +// To be implemented by particular tasks + + AliWarning("Post processing of reference histograms not implemented."); + return kTRUE; +} + +//_______________________________________________________ +void AliTRDrecoTask::MakeDetectorPlot(Int_t ly, const Option_t *opt) +{ +// Draw chamber boundaries in eta/phi plots with misalignments +// based on info collected by AliTRDinfoGen + + if(!fDets){ + AliWarning("NEW Detector map and status not available. Try OLD"); + MakeDetectorPlotOLD(ly, opt); + return; + } + AliTRDchmbInfo *ci(NULL); + for(Int_t idet(0); idetGetEntriesFast(); idet++){ + if(!(ci = (AliTRDchmbInfo*)fDets->At(idet))) continue; + if(AliTRDgeometry::GetLayer(ci->GetDetector()) != ly) continue; + ci->Draw(opt); + } +} + +//_______________________________________________________ +void AliTRDrecoTask::MakeDetectorPlotOLD(Int_t ly, const Option_t *opt) +{ +// Draw chamber boundaries in eta/phi plots with misalignments +// based on info collected by AliTRDinfoGen OLD data storage + + if(!fDetsV){ + AliError("OLD Detector map and status not available."); + return; + } + if(!fDetsV->GetEntries()){ + AliError("OLD Detector map and status not filled."); + return; + } + + Float_t xmin(0.), xmax(0.); + TBox *gdet = new TBox(); + gdet->SetLineColor(kBlack);gdet->SetFillColor(kBlack); + Int_t style[] = {0, 3003}; + for(Int_t idet(0); idet<540; idet++){ + if(idet%6 != ly) continue; + TVectorF *det((TVectorF*)fDetsV->At(idet)); + if(!det) continue; + Int_t iopt = Int_t((*det)[4]); + if(strcmp(opt, "eta")==0){ + xmin=(*det)[0]; xmax=(*det)[2]; + } else if(strcmp(opt, "pad")==0){ + Int_t stk(AliTRDgeometry::GetStack(idet)); + xmin=-0.6+16*(4-stk)-(stk<2?4:0); xmax=xmin+(stk==2?12:16)-0.2; + } else continue; + AliDebug(2, Form("det[%03d] 0[%+4.1f(%+4.1f) %+4.1f] 1[%+4.1f(%+4.1f) %+4.1f] opt[%d]", idet, xmin, (*det)[0], (*det)[1], xmax, (*det)[2], (*det)[3], iopt)); + if(iopt==1){ + gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack); + gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]); + } else { + gdet->SetFillStyle(style[0]); + gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]); + if(iopt==2){ + gdet->SetFillStyle(style[1]);gdet->SetFillColor(kGreen); + gdet->DrawBox(xmin, (*det)[1], xmax, 0.5*((*det)[3]+(*det)[1])); + } else if(iopt==3){ + gdet->SetFillStyle(style[1]);gdet->SetFillColor(kRed); + gdet->DrawBox(xmin, 0.5*((*det)[3]+(*det)[1]), xmax, (*det)[3]); + } else if(iopt!=0) AliError(Form("Wrong chmb. status[%d] for det[%03d]", iopt, idet)); + } + } + Float_t dsm = TMath::TwoPi()/AliTRDgeometry::kNsector; + xmin=0.; + if(strcmp(opt, "pad")==0) xmin=38.; + TLatex *sm = new TLatex(); sm->SetTextAlign(22);sm->SetTextColor(kBlack); sm->SetTextFont(32);sm->SetTextSize(0.03); + for(Int_t is(0); isDrawLatex(xmin, -TMath::Pi()+(is+0.5)*dsm, Form("%02d", is>=9?(is-9):(is+9))); +} + + +//_______________________________________________________ +void AliTRDrecoTask::MakeSummary() +{ +// To be implemented by particular tasks + AliWarning("Summary not available"); +} + +//_______________________________________________________ +void AliTRDrecoTask::SetDebugLevel(Int_t level) +{ +// Generic debug handler + + AliAnalysisTaskSE::SetDebugLevel(level); + if(DebugLevel()>=1 && !fgDebugStream){ + AliInfo(Form("Debug Level for Task %s set to %d", GetName(), level)); + TDirectory *savedir = gDirectory; + fgDebugStream = new TTreeSRedirector("TRD.DebugPerformance.root", "RECREATE"); + savedir->cd(); + } +} + +//____________________________________________________________________ +void AliTRDrecoTask::Terminate(Option_t *) +{ + // + // Terminate + // + + if(fgDebugStream){ + delete fgDebugStream; + fgDebugStream = NULL; + } + fContainer = dynamic_cast(GetOutputData(1)); + if(fContainer && fRunTerminate){ + PostProcess(); + MakeSummary(); + } +} + +//________________________________________________________ +Float_t AliTRDrecoTask::SetNormZ(TH2 *h2, Int_t bxmin, Int_t bxmax, Int_t bymin, Int_t bymax, Float_t thr) +{ +// Normalize histo content to the mean value in the range specified by bin ranges +// [bxmin, bxmax] on the x axis and [bymin, bymax] on the y axis. +// Optionally a threshold "thr" can be specified to disregard entries with no meaning + + Float_t s = 0., c=0.; Int_t is(0); + for(Int_t ix(bxmin); ix<=(bxmax>0?bxmax:(h2->GetXaxis()->GetNbins())); ix++){ + for(Int_t iy(bymin); iy<=(bymax>0?bymax:(h2->GetYaxis()->GetNbins())); iy++){ + if((c = h2->GetBinContent(ix, iy))GetXaxis()->GetNbins(); ix++){ + for(Int_t iy(1); iy<=h2->GetYaxis()->GetNbins(); iy++){ + if((c = h2->GetBinContent(ix, iy))SetBinContent(ix, iy, thr-1000); + else h2->SetBinContent(ix, iy, 100.*(c/s-1.)); + } + } + return s; +} + +//________________________________________________________ +void AliTRDrecoTask::SetRangeZ(TH2 *h2, Float_t min, Float_t max, Float_t thr) +{ +// Set range on Z axis such to avoid outliers + + Float_t c(0.), dz(1.e-3*(max-min)); + for(Int_t ix(1); ix<=h2->GetXaxis()->GetNbins(); ix++){ + for(Int_t iy(1); iy<=h2->GetYaxis()->GetNbins(); iy++){ + if((c = h2->GetBinContent(ix, iy))SetBinContent(ix, iy, min+dz); + } + } + h2->GetZaxis()->SetRangeUser(min, max); +} + +//________________________________________________________ +Float_t AliTRDrecoTask::GetMeanStat(TH1 *h, Float_t cut, Int_t opt, Float_t *sigma) +{ +// Return mean number of entries/bin of histogram "h". +// If optionally sigma is allocated than it is also filled with sigma paramter of the gauss fit +// +// Option "opt" is given the following values are accepted: +// -1 : consider only entries less than "cut" +// 1 : consider only entries greater than "cut" +// 0 : no "cut" [dafault] +// Error codes +// -999. : statistics too low [20] +// -998. : fit failed + + const Int_t kvd(100000); + Float_t v[kvd]; + Int_t nbx(h->GetNbinsX()), nby(h->GetNbinsY()), nbz(h->GetNbinsZ()); + Int_t nv(0); Float_t xmin(1.e5), xmax(-xmin); + for(Int_t ix(1); ix<=nbx; ix++){ + for(Int_t iy(1); iy<=nby; iy++){ + for(Int_t iz(1); iz<=nbz; iz++){ + Float_t c = h->GetBinContent(ix, iy, iz); + if(opt*(c-cut)<0.) continue; + v[nv++] = c; + if(cxmax) xmax = c; + if(nv==kvd){ + printf("W - AliTRDrecoTask::GetMeanStat() :: Unreliable results for %s[%s]. Statical allocation exceeded.\n", h->GetName(), h->GetTitle()); + break; + } + } + if(nv==kvd) break; + } + if(nv==kvd) break; + } + if(nv<10){ + //printf("W - AliTRDrecoTask::GetMeanStat() :: Failed for %s[%s]. Statical undefined [%d].\n", h->GetName(), h->GetTitle(), nv); + return -999.; + } + if(fgProjector) delete fgProjector; + fgProjector = new TH1F("hProjector", "", 20, 0.5*(3*xmin-xmax), 0.5*(3*xmax - xmin)); + for(Int_t iv(0); ivFill(v[iv]); + TF1 f("f", "gaus", xmin, xmax); + f.SetParameter(0, fgProjector->Integral()); + f.SetParameter(1, fgProjector->GetMean()); f.SetParLimits(1, xmin, xmax); + f.SetParameter(2, fgProjector->GetRMS()); + if(fgProjector->Fit(&f, "WQ0", "goff")) return -998.; + if(sigma) *sigma = f.GetParameter(2); + return f.GetParameter(1); +} + +//________________________________________________________ +Int_t AliTRDrecoTask::Rebin(TH2 *h, Int_t n, Int_t rebinX[], Int_t rebinY[], Int_t nstat) +{ +// Rebin histo "h" according to "rebinning" strategy "n" steps such to obtain mean statistics per bin over "nstat" + + Int_t irebin(0); + while(irebinRebin2D(rebinX[irebin], rebinY[irebin]); + irebin++; + } + return irebin; +} + +//________________________________________________________ +AliTRDrecoTask::AliTRDrecoProjection::AliTRDrecoProjection() + :TNamed() + ,fH(NULL) + ,fNrebin(0) +{ + // constructor + fRebin[0] = NULL;fRebin[1] = NULL; + memset(fAx, 0, 3*sizeof(Int_t)); + memset(fRange, 0, 4*sizeof(Float_t)); +} + +//________________________________________________________ +AliTRDrecoTask::AliTRDrecoProjection::~AliTRDrecoProjection() +{ + // destructor + if(fH) delete fH; + if(fRebin[0]) delete [] fRebin[0]; + if(fRebin[1]) delete [] fRebin[1]; +} + +//________________________________________________________ +void AliTRDrecoTask::AliTRDrecoProjection::Build(const Char_t *n, const Char_t *t, Int_t ix, Int_t iy, Int_t iz, TAxis *aa[]) +{ +// check and build (if neccessary) projection determined by axis "ix", "iy" and "iz" + if(!aa[ix] || !aa[iy] || !aa[iz]) return; + TAxis *ax(aa[ix]), *ay(aa[iy]), *az(aa[iz]); + // check ax definiton to protect against older versions of the data + if(ax->GetNbins()<=0 || (ax->GetXmax()-ax->GetXmin())<=0.){ + AliWarning(Form("Wrong definition of axis[%d] \"%s\"[%d](%f %f).", ix, ax->GetTitle(), ax->GetNbins(), ax->GetXmin(), ax->GetXmax())); + return; + } + if(ay->GetNbins()<=0 || (ay->GetXmax()-ay->GetXmin())<=0.){ + AliWarning(Form("Wrong definition of axis[%d] \"%s\"[%d](%f %f).", ix, ay->GetTitle(), ay->GetNbins(), ay->GetXmin(), ay->GetXmax())); + return; + } + if(az->GetNbins()<=0 || (az->GetXmax()-az->GetXmin())<=0.){ + AliWarning(Form("Wrong definition of axis[%d] \"%s\"[%d](%f %f).", ix, az->GetTitle(), az->GetNbins(), az->GetXmin(), az->GetXmax())); + return; + } + SetNameTitle(n,t); + fH = new TH3I(n, Form("%s;%s;%s;%s", t, ax->GetTitle(), ay->GetTitle(), az->GetTitle()), + ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), + ay->GetNbins(), ay->GetXmin(), ay->GetXmax(), + az->GetNbins(), az->GetXmin(), az->GetXmax()); + fAx[0] = ix; fAx[1] = iy; fAx[2] = iz; + fRange[0] = az->GetXmin()/3.; fRange[1] = az->GetXmax()/3.; + AliDebug(2, Form("H3(%s, %s) :: %s[%3d %4.2f %4.2f]%s[%3d %4.2f %4.2f]%s[%3d %4.2f %4.2f]", n, t, + ax->GetTitle(), ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), + ay->GetTitle(), ay->GetNbins(), ay->GetXmin(), ay->GetXmax(), + az->GetTitle(), az->GetNbins(), az->GetXmin(), az->GetXmax())); +} + +//________________________________________________________ +AliTRDrecoTask::AliTRDrecoProjection& AliTRDrecoTask::AliTRDrecoProjection::operator=(const AliTRDrecoProjection& rhs) +{ +// copy projections + if(this == &rhs) return *this; + + TNamed::operator=(rhs); + if(fNrebin){fNrebin=0; delete [] fRebin[0]; delete [] fRebin[1];} + if(rhs.fNrebin) SetRebinStrategy(rhs.fNrebin, rhs.fRebin[0], rhs.fRebin[1]); + memcpy(fAx, rhs.fAx, 3*sizeof(Int_t)); + memcpy(fRange, rhs.fRange, 4*sizeof(Float_t)); + if(fH) delete fH; + if(rhs.fH) fH=(TH3I*)rhs.fH->Clone(Form("%s_CLONE", rhs.fH->GetName())); + return *this; +} + +//________________________________________________________ +AliTRDrecoTask::AliTRDrecoProjection& AliTRDrecoTask::AliTRDrecoProjection::operator+=(const AliTRDrecoProjection& other) +{ +// increment projections + if(!fH || !other.fH) return *this; + AliDebug(2, Form("%s+=%s [%s+=%s]", GetName(), other.GetName(), fH->GetName(), (other.fH)->GetName())); + fH->Add(other.fH); + return *this; +} + +//________________________________________________________ +void AliTRDrecoTask::AliTRDrecoProjection::Increment(Int_t bin[], Double_t v) +{ +// increment bin with value "v" pointed by general coord in "bin" + if(!fH) return; + AliDebug(4, Form(" %s[%2d]", fH->GetName(), Int_t(v))); + fH->AddBinContent(fH->GetBin(bin[fAx[0]],bin[fAx[1]],bin[fAx[2]]), Int_t(v)); +} + +//________________________________________________________ +Double_t AliTRDrecoTask::AliTRDrecoProjection::GetTrendValue(const Int_t mid, Double_t *e, Double_t *s, Double_t *se) const +{ +// Return result of fitting the main distribution (represented on the z axis) with the function selected +// "mid". Optionally return the Mean and RMS of the distribution pointing to "m" and "s" + + if(!fH){ + AliDebug(1, Form("Missing 3D in %s", GetName())); + return -999.; + } + TH1 *h1s(NULL); + if(!(h1s = (TH1D*)fH->Project3D("z"))){ + AliDebug(1, Form("Failed Project3D(\"z\") in %s", GetName())); + return -999.; + } + Int_t ne((Int_t)h1s->Integral()); + if(ne<30){ + AliDebug(1, Form("Statistics too low[%2d] in %s", ne, GetName())); + delete h1s; + return -999.; + } + TAxis *az(h1s->GetXaxis()); + Float_t mn(h1s->GetMean()), rms(h1s->GetRMS()), + v(mn), // main trending value (mean, mu, MPV) + ve(rms),// dispersion (RMS, sigma, landau 2nd param) + ev(h1s->GetMeanError()), // error on v + eve(h1s->GetRMSError());// error on ve + if(mid==1){ + TF1 fg("fg", "gaus", az->GetXmin(), az->GetXmax()); + fg.SetParameter(0, Float_t(ne)); fg.SetParameter(1, mn); fg.SetParameter(2, rms); + h1s->Fit(&fg, "WQ0"); + v = fg.GetParameter(1); ev = fg.GetParError(1); + ve= fg.GetParameter(2); eve= fg.GetParError(2); + } else if (mid==2) { + TF1 fl("fl", "landau", az->GetXmin(), az->GetXmax()); + fl.SetParameter(0, Float_t(ne)); fl.SetParameter(1, mn); fl.SetParameter(2, rms); + h1s->Fit(&fl, "WQ0"); + v = fl.GetMaximumX(); ev = fl.GetParError(1); + ve= fl.GetParameter(2);eve= fl.GetParError(2); + } + if(e) *e = ev; + if(s) *s = ve; + if(se) *se = eve; + AliDebug(2, Form("[%d] %s(%4d) = M{%f+-%f} S{%f+-%f}", mid, fH->GetName(), (Int_t)h1s->Integral(), v, ev, ve, eve)); + + delete h1s; + return v; +} + +//________________________________________________________ +TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2Dbin(Int_t bin, Bool_t mc) +{ +// dumb 2D projection for bin including under/over flow. Default all [bin==-1] + + TAxis *ax(fH->GetXaxis()), *ay(fH->GetYaxis()), *az(fH->GetZaxis()); + Int_t nbins(az->GetNbins()); + TH2F *h2(NULL); + if(bin<0) h2 = new TH2F(Form("%s_2D", fH->GetName()), + Form("%s;%s;%s;Entries", fH->GetTitle(), ax->GetTitle(), ay->GetTitle()), + ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), + ay->GetNbins(), ay->GetXmin(), ay->GetXmax()); + else h2 = new TH2F(Form("%s%d_2D", fH->GetName(), bin), + Form("%s | #it{%4.2f<=p_{t}^{%s}[GeV/c]<%4.2f};%s;%s;Entries", fH->GetTitle(), + bin?fgPt[bin-1]:0., mc?"MC":"", bin>nbins?99.99:fgPt[bin], ax->GetTitle(), ay->GetTitle()), + ax->GetNbins(), ax->GetXmin(), ax->GetXmax(), + ay->GetNbins(), ay->GetXmin(), ay->GetXmax()); + for(Int_t ix(1); ix<=ax->GetNbins(); ix++){ + for(Int_t iy(1); iy<=ay->GetNbins(); iy++){ + Int_t ibin = h2->GetBin(ix, iy); + for(Int_t iz(0); iz<=az->GetNbins()+1; iz++){ + if(bin<0) h2->AddBinContent(ibin, fH->GetBinContent(ix, iy, iz)); + else if(bin==iz){ + h2->AddBinContent(ibin, fH->GetBinContent(ix, iy, iz)); + break; + } + } + } + } + return h2; +} + +//________________________________________________________ +TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2D(const Int_t nstat, const Int_t ncol, const Int_t mid, Bool_t del) +{ +// build the 2D projection and adjust binning + + const Char_t *title[] = {"Mean", "#mu", "MPV"}; + if(!fH){ + AliDebug(1, Form("Missing 3D in %s", GetName())); + return NULL; + } + TAxis *ax(fH->GetXaxis()), *ay(fH->GetYaxis()), *az(fH->GetZaxis()); + TH2D *h2s(NULL), *hyx(NULL); + if(!(h2s = (TH2D*)fH->Project3D("yx"))){ + AliDebug(1, Form("Failed Project3D(\"yx\") in %s", GetName())); + return NULL; + } + // save a copy of the original distribution + if(!del){ + hyx = (TH2D*)h2s->Clone(); + hyx->SetName(Form("%sEn", fH->GetName())); + } + Int_t irebin(Rebin(h2s, fNrebin, fRebin[0], fRebin[1], nstat)), dxBin(1), dyBin(1); + for(Int_t ir(0); irGetNbinsX()), ny(h2s->GetNbinsY()); + delete h2s; + if(mid<0) return NULL; + + // start projection + TH1 *h(NULL); Int_t n(0); + Float_t dz=(fRange[1]-fRange[1])/ncol; + TString titlez(az->GetTitle()); TObjArray *tokenTitle(titlez.Tokenize(" ")); + Int_t nt(tokenTitle->GetEntriesFast()); + TH2 *h2(NULL); + if((h2 = (TH2*)gDirectory->Get(Form("%s_2D", fH->GetName())))) delete h2; // avoid ROOT warning messages + h2 = new TH2F(Form("%s_2D", fH->GetName()), + Form("%s;%s;%s;%s(%s) %s", fH->GetTitle(), ax->GetTitle(), ay->GetTitle(), title[mid], nt>0?(*tokenTitle)[0]->GetName():"", nt>1?(*tokenTitle)[1]->GetName():""), + nx, ax->GetXmin(), ax->GetXmax(), ny, ay->GetXmin(), ay->GetXmax()); + tokenTitle->Delete(); delete tokenTitle; + h2->SetContour(ncol); + h2->GetZaxis()->CenterTitle(); + h2->GetZaxis()->SetTitleOffset(1.4); + h2->GetZaxis()->SetRangeUser(fRange[0], fRange[1]); + AliDebug(2, Form("%s[%s] nx[%d] ny[%d]", h2->GetName(), h2->GetTitle(), nx, ny)); + for(Int_t iy(0); iyProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin+1, (ix+1)*dxBin, iy*dyBin+1, (iy+1)*dyBin); + Int_t ne((Int_t)h->Integral()); + //printf(" x[%2d %2d] y[%2d %2d] ne[%4d]\n", ix*dxBin+1, (ix+1)*dxBin, iy*dyBin+1, (iy+1)*dyBin, ne); + if(neSetBinContent(ix+1, iy+1, -999); + h2->SetBinError(ix+1, iy+1, 1.); + n++; + }else{ + // redo the projection by adding 1 bin @ left and 1 bin @ right for smoothing + h = fH->ProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin, (ix+1)*dxBin+1, iy*dyBin, (iy+1)*dyBin+1); + Float_t v(h->GetMean()), ve(h->GetRMS()); + if(mid==1){ + TF1 fg("fg", "gaus", az->GetXmin(), az->GetXmax()); + fg.SetParameter(0, Float_t(ne)); fg.SetParameter(1, v); fg.SetParameter(2, ve); + h->Fit(&fg, "WQ0"); + v = fg.GetParameter(1); ve = fg.GetParameter(2); + } else if (mid==2) { + TF1 fl("fl", "landau", az->GetXmin(), az->GetXmax()); + fl.SetParameter(0, Float_t(ne)); fl.SetParameter(1, v); fl.SetParameter(2, ve); + h->Fit(&fl, "WQ0"); + v = fl.GetMaximumX(); ve = fl.GetParameter(2); +/* TF1 fgle("gle", "[0]*TMath::Landau(x, [1], [2], 1)*TMath::Exp(-[3]*x/[1])", az->GetXmin(), az->GetXmax()); + fgle.SetParameter(0, fl.GetParameter(0)); + fgle.SetParameter(1, fl.GetParameter(1)); + fgle.SetParameter(2, fl.GetParameter(2)); + fgle.SetParameter(3, 1.);fgle.SetParLimits(3, 0., 5.); + h->Fit(&fgle, "WQ"); + v = fgle.GetMaximumX(); ve = fgle.GetParameter(2);*/ + } + if(vSetBinContent(ix+1, iy+1, fRange[0]+0.1*dz); + else h2->SetBinContent(ix+1, iy+1, v); + h2->SetBinError(ix+1, iy+1, ve); + } + } + } + if(h) delete h; + if(n==nx*ny){ // clean empty projections + AliDebug(1, Form("Empty projection in %s", GetName())); + delete h2; h2=NULL; + } + return h2; +} + +//________________________________________________________ +void AliTRDrecoTask::AliTRDrecoProjection::SetRebinStrategy(Int_t n, Int_t rebx[], Int_t reby[]) +{ +// define rebinning strategy for this projection + fNrebin = n; + fRebin[0] = new Int_t[n]; memcpy(fRebin[0], rebx, n*sizeof(Int_t)); + fRebin[1] = new Int_t[n]; memcpy(fRebin[1], reby, n*sizeof(Int_t)); +} + +//________________________________________________________ +void AliTRDrecoTask::SetTriggerList(const Char_t *tl) +{ +// Store list of triggers to be monitored + TString stl(tl); + if(fTriggerList){ fTriggerList->Delete(); delete fTriggerList;} + TObjArray *atl = stl.Tokenize(" "); + fTriggerList = (TObjArray*)atl->Clone(""); + atl->Delete(); delete atl; + AliInfo("Running only for triggers::"); + fTriggerList->Print(); +} + + diff --git a/PWGPP/TRD/AliTRDrecoTask.h b/PWGPP/TRD/AliTRDrecoTask.h index 62f08684263..515c35f3dab 100644 --- a/PWGPP/TRD/AliTRDrecoTask.h +++ b/PWGPP/TRD/AliTRDrecoTask.h @@ -1,157 +1,157 @@ -#ifndef ALITRDRECOTASK_H -#define ALITRDRECOTASK_H - -/////////////////////////////////////////////////////// -// -// Basic class for Performance/Calibration TRD tasks -// -// Author: Alexandru Bercuci, 10/09/2008 -// -////////////////////////////////////////////////// - -#ifndef ALIANALYSISTASKSE_H -#include "AliAnalysisTaskSE.h" -#endif - -#ifndef ALITRDTRACKINFO_H -#include "info/AliTRDtrackInfo.h" -#endif - -#ifndef ALITRDEVENTINFO_H -#include "info/AliTRDeventInfo.h" -#endif - -class TAxis; -class TH1; -class TH2; -class TH3; -class TF1; -class TList; -class TObjArray; -class TTreeSRedirector; -class AliTRDtrackV1; -class AliTRDrecoTask : public AliAnalysisTaskSE -{ -friend class AliEveTRDTrackList; -public: - enum AliTRDrecoSteeringBits{ - kMCdata = BIT(18) - ,kFriends = BIT(19) - ,kPostProcess = BIT(20) - ,kHeavyIon = BIT(21) - }; - - class AliTRDrecoProjection : public TNamed - { - public: - AliTRDrecoProjection(); - virtual ~AliTRDrecoProjection(); - AliTRDrecoProjection& operator+=(const AliTRDrecoProjection& other); - AliTRDrecoProjection& operator=(const AliTRDrecoProjection& other); - void Build(const Char_t *n, const Char_t *t, Int_t ix, Int_t iy, Int_t iz, TAxis *aa[]); - Double_t GetTrendValue(const Int_t mid=0, Double_t *m=NULL, Double_t *s=NULL, Double_t *se=NULL) const; - TH3* H() const { return fH;} - void Increment(Int_t bin[], Double_t v); - TH2* Projection2D(const Int_t nstat, const Int_t ncol, const Int_t mid=0, Bool_t del=kTRUE); - TH2* Projection2Dbin(Int_t ibin=-1, Bool_t mc=kFALSE); - void SetRebinStrategy(Int_t n, Int_t rebx[], Int_t reby[]); - void SetShowRange(Float_t zm, Float_t zM, Float_t em=0., Float_t eM=0.) {fRange[0] = zm; fRange[1] = zM; fRange[2] = em; fRange[3] = eM;} - private: - AliTRDrecoProjection(const AliTRDrecoProjection&); - protected: - TH3 *fH; // data container - Int_t fAx[3]; // projection axes - Int_t fNrebin; // no. of rebinning steps - Int_t *fRebin[2]; //[fNrebin] rebinning of the X nd Y axes - Float_t fRange[4]; //show range of the z processed - - ClassDef(AliTRDrecoProjection, 2) // wrapper for a projection container THnSparse -> TH3 - }; - - AliTRDrecoTask(); - AliTRDrecoTask(const char *name, const char *title); - virtual ~AliTRDrecoTask(); - - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *opt); - virtual void SetDebugLevel(Int_t level); - - - static Float_t GetMeanStat(TH1 *h, Float_t cut=0., Int_t opt=0, Float_t *sigma=NULL); - Int_t GetNRefFigures() const; - const Char_t* GetNameId() const { return fNameId;} - TList* GetPlotFunctors() const { return fPlotFuncList;} - Int_t GetPtBin(Float_t pt); - virtual Bool_t GetRefFigure(Int_t ifig); - virtual void MakeSummary(); - void MakeDetectorPlot(Int_t ly=0, const Option_t *opt=""); - void MakeDetectorPlotOLD(Int_t ly=0, const Option_t *opt=""); - Bool_t IsHeavyIon() const { return TestBit(kHeavyIon);}; - Bool_t IsPP() const { return !TestBit(kHeavyIon);}; - Bool_t HasFriends() const { return TestBit(kFriends);}; - Bool_t HasMCdata() const { return TestBit(kMCdata);}; - Bool_t HasPostProcess() const { return TestBit(kPostProcess);}; - Bool_t HasRunTerminate() const { return fRunTerminate; } - virtual TObjArray* Histos() { return fContainer;} - - virtual Bool_t Load(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance"); - virtual Bool_t LoadDetectorMap(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance"); - virtual Bool_t Save(TObjArray * const res); - virtual Bool_t PostProcess(); - virtual Bool_t PutTrendValue(const Char_t *name, Double_t val, Double_t err=0); - static Int_t Rebin(TH2 *h, Int_t n, Int_t rebinX[], Int_t rebinY[], Int_t nstat); - virtual void SetFriends(Bool_t fr = kTRUE) {SetBit(kFriends, fr);} - virtual void SetMCdata(Bool_t mc = kTRUE) {SetBit(kMCdata, mc);} - virtual void SetNameId(const Char_t *nid) {snprintf(fNameId, 10, "%s", nid);} - virtual void SetPostProcess(Bool_t pp = kTRUE) {SetBit(kPostProcess, pp);} - static Float_t SetNormZ(TH2 *h2, Int_t bxmin=1, Int_t bxmax=-1, Int_t bymin=1, Int_t bymax=-1, Float_t thr=0.); - static void SetRangeZ(TH2 *h2, Float_t m, Float_t M, Float_t thr=0.); - void SetRunTerminate(Bool_t runTerminate = kTRUE) { fRunTerminate = runTerminate; } - void SetTriggerList(const Char_t *tl); - virtual void Terminate(Option_t *); - -protected: - static TTreeSRedirector* DebugStream() { return fgDebugStream;} - virtual void InitFunctorList(); - Bool_t HasFunctorList() const { return fPlotFuncList != NULL; } - Bool_t MakeMomSegmentation(); - - Char_t fNameId[10]; // unique identifier of task particularity - UChar_t fNRefFigures; // no of reference figures reported by task - TObjArray *fDets; //! OLD container to store detector position and status support should be discontinued - TObjArray *fDetsV; //! NEW container to store detector position and status - TObjArray *fContainer; //! container to store results - AliTRDeventInfo *fEvent; //! Event Info - TObjArray *fTracks; //! Array of tracks - TObjArray *fClusters; //! Array of clusters - const TObjArray *fkClusters; //! current detector clusters array - const AliTRDtrackV1 *fkTrack; //! current track - const AliTRDtrackInfo::AliMCinfo *fkMC; //! MC info - const AliTRDtrackInfo::AliESDinfo *fkESD;//! ESD info - Char_t fSpecies; //! species index +1 with charge sign - Char_t fTriggerSlot; //! selected triggers map (if requested) - Float_t fPt; //! p_t of the track being analyzed - Float_t fPhi; //! phi of the track being analyzed - Float_t fEta; //! eta of the track being analyzed - Int_t fNpt; // no of pt/p bins actually used - TObjArray *fTriggerList; //! optional trigger list to be monitored - -private: - AliTRDrecoTask(const AliTRDrecoTask&); - AliTRDrecoTask& operator=(const AliTRDrecoTask&); - - TList *fPlotFuncList; //! track functors list - TList *fDetFuncList; //! detector functors list - Bool_t fRunTerminate; // Switch for Terminate Function - static TTreeSRedirector *fgDebugStream; //! Debug stream - static TH1 *fgProjector; //! Projector histogram for Z statistics -protected: - static const Int_t fgNPt = 25; //! No of debug pt bins - static Float_t fgPt[fgNPt+1]; //! Array with limits for debug pt bins - - ClassDef(AliTRDrecoTask, 5) // base TRD reconstruction task -}; - -#endif - +#ifndef ALITRDRECOTASK_H +#define ALITRDRECOTASK_H + +/////////////////////////////////////////////////////// +// +// Basic class for Performance/Calibration TRD tasks +// +// Author: Alexandru Bercuci, 10/09/2008 +// +////////////////////////////////////////////////// + +#ifndef ALIANALYSISTASKSE_H +#include "AliAnalysisTaskSE.h" +#endif + +#ifndef ALITRDTRACKINFO_H +#include "info/AliTRDtrackInfo.h" +#endif + +#ifndef ALITRDEVENTINFO_H +#include "info/AliTRDeventInfo.h" +#endif + +class TAxis; +class TH1; +class TH2; +class TH3; +class TF1; +class TList; +class TObjArray; +class TTreeSRedirector; +class AliTRDtrackV1; +class AliTRDrecoTask : public AliAnalysisTaskSE +{ +friend class AliEveTRDTrackList; +public: + enum AliTRDrecoSteeringBits{ + kMCdata = BIT(18) + ,kFriends = BIT(19) + ,kPostProcess = BIT(20) + ,kHeavyIon = BIT(21) + }; + + class AliTRDrecoProjection : public TNamed + { + public: + AliTRDrecoProjection(); + virtual ~AliTRDrecoProjection(); + AliTRDrecoProjection& operator+=(const AliTRDrecoProjection& other); + AliTRDrecoProjection& operator=(const AliTRDrecoProjection& other); + void Build(const Char_t *n, const Char_t *t, Int_t ix, Int_t iy, Int_t iz, TAxis *aa[]); + Double_t GetTrendValue(const Int_t mid=0, Double_t *m=NULL, Double_t *s=NULL, Double_t *se=NULL) const; + TH3* H() const { return fH;} + void Increment(Int_t bin[], Double_t v); + TH2* Projection2D(const Int_t nstat, const Int_t ncol, const Int_t mid=0, Bool_t del=kTRUE); + TH2* Projection2Dbin(Int_t ibin=-1, Bool_t mc=kFALSE); + void SetRebinStrategy(Int_t n, Int_t rebx[], Int_t reby[]); + void SetShowRange(Float_t zm, Float_t zM, Float_t em=0., Float_t eM=0.) {fRange[0] = zm; fRange[1] = zM; fRange[2] = em; fRange[3] = eM;} + private: + AliTRDrecoProjection(const AliTRDrecoProjection&); + protected: + TH3 *fH; // data container + Int_t fAx[3]; // projection axes + Int_t fNrebin; // no. of rebinning steps + Int_t *fRebin[2]; //[fNrebin] rebinning of the X nd Y axes + Float_t fRange[4]; //show range of the z processed + + ClassDef(AliTRDrecoProjection, 2) // wrapper for a projection container THnSparse -> TH3 + }; + + AliTRDrecoTask(); + AliTRDrecoTask(const char *name, const char *title); + virtual ~AliTRDrecoTask(); + + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *opt); + virtual void SetDebugLevel(Int_t level); + + + static Float_t GetMeanStat(TH1 *h, Float_t cut=0., Int_t opt=0, Float_t *sigma=NULL); + Int_t GetNRefFigures() const; + const Char_t* GetNameId() const { return fNameId;} + TList* GetPlotFunctors() const { return fPlotFuncList;} + Int_t GetPtBin(Float_t pt); + virtual Bool_t GetRefFigure(Int_t ifig); + virtual void MakeSummary(); + void MakeDetectorPlot(Int_t ly=0, const Option_t *opt=""); + void MakeDetectorPlotOLD(Int_t ly=0, const Option_t *opt=""); + Bool_t IsHeavyIon() const { return TestBit(kHeavyIon);}; + Bool_t IsPP() const { return !TestBit(kHeavyIon);}; + Bool_t HasFriends() const { return TestBit(kFriends);}; + Bool_t HasMCdata() const { return TestBit(kMCdata);}; + Bool_t HasPostProcess() const { return TestBit(kPostProcess);}; + Bool_t HasRunTerminate() const { return fRunTerminate; } + virtual TObjArray* Histos() { return fContainer;} + + virtual Bool_t Load(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance"); + virtual Bool_t LoadDetectorMap(const Char_t *file = "AnalysisResults.root", const Char_t *dir = "TRD_Performance"); + virtual Bool_t Save(TObjArray * const res); + virtual Bool_t PostProcess(); + virtual Bool_t PutTrendValue(const Char_t *name, Double_t val, Double_t err=0); + static Int_t Rebin(TH2 *h, Int_t n, Int_t rebinX[], Int_t rebinY[], Int_t nstat); + virtual void SetFriends(Bool_t fr = kTRUE) {SetBit(kFriends, fr);} + virtual void SetMCdata(Bool_t mc = kTRUE) {SetBit(kMCdata, mc);} + virtual void SetNameId(const Char_t *nid) {snprintf(fNameId, 10, "%s", nid);} + virtual void SetPostProcess(Bool_t pp = kTRUE) {SetBit(kPostProcess, pp);} + static Float_t SetNormZ(TH2 *h2, Int_t bxmin=1, Int_t bxmax=-1, Int_t bymin=1, Int_t bymax=-1, Float_t thr=0.); + static void SetRangeZ(TH2 *h2, Float_t m, Float_t M, Float_t thr=0.); + void SetRunTerminate(Bool_t runTerminate = kTRUE) { fRunTerminate = runTerminate; } + void SetTriggerList(const Char_t *tl); + virtual void Terminate(Option_t *); + +protected: + static TTreeSRedirector* DebugStream() { return fgDebugStream;} + virtual void InitFunctorList(); + Bool_t HasFunctorList() const { return fPlotFuncList != NULL; } + Bool_t MakeMomSegmentation(); + + Char_t fNameId[10]; // unique identifier of task particularity + UChar_t fNRefFigures; // no of reference figures reported by task + TObjArray *fDets; //! OLD container to store detector position and status support should be discontinued + TObjArray *fDetsV; //! NEW container to store detector position and status + TObjArray *fContainer; //! container to store results + AliTRDeventInfo *fEvent; //! Event Info + TObjArray *fTracks; //! Array of tracks + TObjArray *fClusters; //! Array of clusters + const TObjArray *fkClusters; //! current detector clusters array + const AliTRDtrackV1 *fkTrack; //! current track + const AliTRDtrackInfo::AliMCinfo *fkMC; //! MC info + const AliTRDtrackInfo::AliESDinfo *fkESD;//! ESD info + Char_t fSpecies; //! species index +1 with charge sign + Char_t fTriggerSlot; //! selected triggers map (if requested) + Float_t fPt; //! p_t of the track being analyzed + Float_t fPhi; //! phi of the track being analyzed + Float_t fEta; //! eta of the track being analyzed + Int_t fNpt; // no of pt/p bins actually used + TObjArray *fTriggerList; //! optional trigger list to be monitored + +private: + AliTRDrecoTask(const AliTRDrecoTask&); + AliTRDrecoTask& operator=(const AliTRDrecoTask&); + + TList *fPlotFuncList; //! track functors list + TList *fDetFuncList; //! detector functors list + Bool_t fRunTerminate; // Switch for Terminate Function + static TTreeSRedirector *fgDebugStream; //! Debug stream + static TH1 *fgProjector; //! Projector histogram for Z statistics +protected: + static const Int_t fgNPt = 25; //! No of debug pt bins + static Float_t fgPt[fgNPt+1]; //! Array with limits for debug pt bins + + ClassDef(AliTRDrecoTask, 5) // base TRD reconstruction task +}; + +#endif + diff --git a/PWGPP/cosmic/AliAnalysisTaskCosmic.h b/PWGPP/cosmic/AliAnalysisTaskCosmic.h index 024740d3203..a1a25d3b223 100644 --- a/PWGPP/cosmic/AliAnalysisTaskCosmic.h +++ b/PWGPP/cosmic/AliAnalysisTaskCosmic.h @@ -1,81 +1,81 @@ -#ifndef ALIANALYSISTASKCOSMIC_H -#define ALIANALYSISTASKCOSMIC_H - -/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id$ */ - -// Analysis Task for the Quality Assurance of Cosmic Data -// Two track segments in the are matched in angle and charged. T -// The quality of the matching in is checked by comparing -// the tarnsverse momenta and starting points of the track segments -// -// Author -// Andreas Morsch -// andreas.morsch@cern.ch - - - -class TH1F; -class TH2F; - -class TProfile; - -class TList; -class TClonesArray; - - -#include "AliAnalysisTaskSE.h" - -enum SelType { - kPosC = 0, - kNegC = 1, - kPosZ = 2, - kNegZ = 3, - kGood = 4, - kBad = 5 -}; - -class AliAnalysisTaskCosmic : public AliAnalysisTaskSE { - public: - AliAnalysisTaskCosmic(const char *name = "AliAnalysisTaskCosmic"); - virtual ~AliAnalysisTaskCosmic() {} - AliAnalysisTaskCosmic(const AliAnalysisTaskCosmic& task); - AliAnalysisTaskCosmic& operator=(const AliAnalysisTaskCosmic& task); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - private: - TList* fHists; // List of histograms - TH1F* fhPt[6]; // Pt distribution - TH1F* fhTheta[6]; // Eta distribution - TH1F* fhPhi[6]; // Phi distribution - TH1F* fhDPhi[6]; // DeltaPhi - TH1F* fhDTheta[6]; // DeltaTheta - TH1F* fhDZ[6]; // DeltaZ - TH1F* fhDX[6]; // DeltaX - TH1F* fhDY[6]; // DeltaY - TH1F* fhDPt[6]; // DeltaPt - TH1F* fhD1ovPt[6]; // Delta 1/Pt - - - TH1F* fhDPtovPt[6]; // DeltaPt/pt - - - TH2F* fhDZvsZ; // dz vs z - TH2F* fhDZvsPhi; // dz vs phi - - TH2F* fhCh1Ch2; // ch1 vs ch2 - TH2F* fhPh1Ph2; // phi1 vs phi2 - TH2F* fhCl1Cl2G; // #Clusters - TH2F* fhCl1Cl2B; // #Clusters - - TProfile* fpDPt[6]; // delta pt / - TProfile* fpDPtS[6]; // delta_pt / - - ClassDef(AliAnalysisTaskCosmic, 1); // example of analysis -}; - -#endif +#ifndef ALIANALYSISTASKCOSMIC_H +#define ALIANALYSISTASKCOSMIC_H + +/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id$ */ + +// Analysis Task for the Quality Assurance of Cosmic Data +// Two track segments in the are matched in angle and charged. T +// The quality of the matching in is checked by comparing +// the tarnsverse momenta and starting points of the track segments +// +// Author +// Andreas Morsch +// andreas.morsch@cern.ch + + + +class TH1F; +class TH2F; + +class TProfile; + +class TList; +class TClonesArray; + + +#include "AliAnalysisTaskSE.h" + +enum SelType { + kPosC = 0, + kNegC = 1, + kPosZ = 2, + kNegZ = 3, + kGood = 4, + kBad = 5 +}; + +class AliAnalysisTaskCosmic : public AliAnalysisTaskSE { + public: + AliAnalysisTaskCosmic(const char *name = "AliAnalysisTaskCosmic"); + virtual ~AliAnalysisTaskCosmic() {} + AliAnalysisTaskCosmic(const AliAnalysisTaskCosmic& task); + AliAnalysisTaskCosmic& operator=(const AliAnalysisTaskCosmic& task); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + private: + TList* fHists; // List of histograms + TH1F* fhPt[6]; // Pt distribution + TH1F* fhTheta[6]; // Eta distribution + TH1F* fhPhi[6]; // Phi distribution + TH1F* fhDPhi[6]; // DeltaPhi + TH1F* fhDTheta[6]; // DeltaTheta + TH1F* fhDZ[6]; // DeltaZ + TH1F* fhDX[6]; // DeltaX + TH1F* fhDY[6]; // DeltaY + TH1F* fhDPt[6]; // DeltaPt + TH1F* fhD1ovPt[6]; // Delta 1/Pt + + + TH1F* fhDPtovPt[6]; // DeltaPt/pt + + + TH2F* fhDZvsZ; // dz vs z + TH2F* fhDZvsPhi; // dz vs phi + + TH2F* fhCh1Ch2; // ch1 vs ch2 + TH2F* fhPh1Ph2; // phi1 vs phi2 + TH2F* fhCl1Cl2G; // #Clusters + TH2F* fhCl1Cl2B; // #Clusters + + TProfile* fpDPt[6]; // delta pt / + TProfile* fpDPtS[6]; // delta_pt / + + ClassDef(AliAnalysisTaskCosmic, 1); // example of analysis +}; + +#endif diff --git a/PWGPP/macros/AddTrainPerformanceTRD.C b/PWGPP/macros/AddTrainPerformanceTRD.C index 2e142486a94..c06c07a4537 100644 --- a/PWGPP/macros/AddTrainPerformanceTRD.C +++ b/PWGPP/macros/AddTrainPerformanceTRD.C @@ -1,204 +1,204 @@ -// Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID). -// -// Usage: -// AddTrainPerformanceTRD.C(MC, friends, tasks) -// tasks : "ALL" or one/more of the following: -// "EFF" : TRD Tracking Efficiency -// "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations -// "MULT" : TRD single track selection -// "RES" : TRD tracking Resolution -// "CLRES": clusters Resolution -// "CAL" : TRD calibration -// "ALGN" : TRD alignment -// "PID" : TRD PID - pion efficiency -// "PIDR" : TRD PID - reference data -// "DET" : Basic TRD Detector checks -// "NOFR" : Data set does not have AliESDfriends.root -// "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely -// on MC information are switched off -// -// In compiled mode : -// Don't forget to load first the libraries -// gSystem->Load("libMemStat.so") -// gSystem->Load("libMemStatGui.so") -// gSystem->Load("libANALYSIS.so") -// gSystem->Load("libANALYSISalice.so") -// gSystem->Load("libPWGPP.so"); -// -// Authors: -// Alex Bercuci (A.Bercuci@gsi.de) -// Markus Fasel (m.Fasel@gsi.de) - -#if ! defined (__CINT__) || defined (__MAKECINT__) -//#ifndef __CINT__ -#include - -#include "TStopwatch.h" -#include "TMemStat.h" -#include "TMemStatViewerGUI.h" - -#include "TROOT.h" -#include "TClass.h" -#include "TSystem.h" -#include "TString.h" -#include "TError.h" -#include "TChain.h" -#include "TGrid.h" -#include "TAlienCollection.h" -#include "TGridCollection.h" -#include "TGridResult.h" -#include "TGeoGlobalMagField.h" - -#include "AliMagF.h" -#include "AliTracker.h" -#include "AliLog.h" -#include "AliCDBManager.h" -#include "AliGRPManager.h" -#include "AliGeomManager.h" -#include "AliAnalysisManager.h" -#include "AliAnalysisDataContainer.h" -#include "AliMCEventHandler.h" -#include "AliESDInputHandler.h" - -#include "TRD/AliTRDtrackerV1.h" -#include "TRD/AliTRDcalibDB.h" - -#include "PWGPP/TRD/macros/AddTRDcheckESD.C" -#include "PWGPP/TRD/macros/AddTRDinfoGen.C" -#include "PWGPP/TRD/macros/AddTRDcheckDET.C" -#include "PWGPP/TRD/macros/AddTRDefficiency.C" -#include "PWGPP/TRD/macros/AddTRDresolution.C" -#include "PWGPP/TRD/macros/AddTRDcheckPID.C" -#include "PWGPP/TRD/macros/AddTRDcheckTRK.C" -#include "PWGPP/TRD/macros/AddTRDv0Monitor.C" -#endif - -TString opt(""); -const Char_t* Translate(Bool_t doCheckESD=kTRUE, Bool_t doCheckDET=kTRUE, Bool_t doEffic=kTRUE, Bool_t doResolution=kTRUE, Bool_t doCheckPID=kTRUE, Bool_t doV0Monitor=kTRUE); -Bool_t AddTrainPerformanceTRD(Char_t *trd="ALL", const Char_t *addMacroPath = "$ALICE_ROOT/PWGPP/TRD/macros") -{ - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if(!mgr) { - Error("AddTrainPerformanceTRD", "AliAnalysisManager not set!"); - return kFALSE; - } - - // TRD data containers - AliAnalysisDataContainer *ci[AliTRDpwgppHelper::kNOutSlots]; - AliAnalysisDataContainer *ce[5]; - - Info("AddTrainPerformanceTRD", Form("Add Macros taken from %s", addMacroPath)); - Info("AddTrainPerformanceTRD", Form("TRD wagons \"%s\"", trd)); - Int_t bitmap = AliTRDpwgppHelper::ParseOptions(trd); - for(Int_t it=0; itLoadMacro(Form("%s/Add%s.C+", addMacroPath, TString(AliTRDpwgppHelper::TaskClassName(it))(3,20).Data()))) { - Error("AddTrainPerformanceTRD()", Form("Error loading %s task.", AliTRDpwgppHelper::TaskClassName(it))); - return kFALSE; - } - if(!AliTRDpwgppHelper::DoTask(it, bitmap)) continue; - - switch(it){ - case AliTRDpwgppHelper::kCheckESD: - AddTRDcheckESD(mgr); break; - case AliTRDpwgppHelper::kInfoGen: - AddTRDinfoGen(mgr, 0, NULL, ci); break; - case AliTRDpwgppHelper::kCheckDET: - // map slots - ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; - ce[1]=ci[AliTRDpwgppHelper::kTracksSA]; - ce[2]=ci[AliTRDpwgppHelper::kTracksKink]; - ce[3]=ci[AliTRDpwgppHelper::kEventInfo]; - ce[4]=ci[AliTRDpwgppHelper::kClusters]; - AddTRDcheckDET(mgr, bitmap, ce); - break; - case AliTRDpwgppHelper::kEfficiency: - // map slots - ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; - ce[1]=ci[AliTRDpwgppHelper::kTracksITS]; - ce[2]=ci[AliTRDpwgppHelper::kTracksKink]; - ce[3]=ci[AliTRDpwgppHelper::kEventInfo]; - ce[4]=ci[AliTRDpwgppHelper::kClusters]; - AddTRDefficiency(mgr, bitmap, ce); - break; - case AliTRDpwgppHelper::kResolution: - // map slots - ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; - ce[1]=ci[AliTRDpwgppHelper::kTracksITS]; - ce[2]=ci[AliTRDpwgppHelper::kTracksKink]; - ce[3]=ci[AliTRDpwgppHelper::kEventInfo]; - ce[4]=ci[AliTRDpwgppHelper::kClusters]; - AddTRDresolution(mgr, bitmap, ce); - break; - case AliTRDpwgppHelper::kCheckPID: - // map slots - ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; - ce[1]=ci[AliTRDpwgppHelper::kEventInfo]; - ce[2]=ci[AliTRDpwgppHelper::kV0List]; - AddTRDcheckPID(mgr, bitmap, ce, &ce[3]); - break; - case AliTRDpwgppHelper::kCheckTRK: - // map slots - ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; - ce[1]=ci[AliTRDpwgppHelper::kEventInfo]; - ce[2]=ci[AliTRDpwgppHelper::kClusters]; - AddTRDcheckTRK(mgr, 0, ce); - break; - case AliTRDpwgppHelper::kV0Monitor: - // slots already mapped by checkPID - AddTRDv0Monitor(mgr, 0, ce); - break; - default: - Warning("AddTrainPerformanceTRD()", Form("No performance task registered at slot %d.", it)); - } - } - return kTRUE; -} - -const Char_t* Translate(Bool_t doCheckESD, Bool_t doCheckDET, Bool_t doEffic, Bool_t doResolution, Bool_t doCheckPID, Bool_t doCheckV0) -{ - opt.Clear(); - if( doCheckESD==kTRUE && - doCheckDET==kTRUE && - doEffic==kTRUE && - doResolution==kTRUE && - doCheckPID==kTRUE && - doCheckV0==kTRUE - ){ - opt="ALL"; - } else { - Bool_t kINDENT(kFALSE); - if(doCheckESD){ - opt.Append("ESD"); - kINDENT=kTRUE; - } - if(doCheckDET){ - if(kINDENT) opt.Append(" "); - opt.Append("DET"); - kINDENT = kTRUE; - } - if(doEffic){ - if(kINDENT) opt.Append(" "); - opt.Append("EFF"); - kINDENT=kTRUE; - } - if(doResolution){ - if(kINDENT) opt.Append(" "); - opt.Append("RES"); - kINDENT=kTRUE; - } - if(doCheckPID){ - if(kINDENT) opt.Append(" "); - opt.Append("PID"); - kINDENT=kTRUE; - } - if(doCheckV0){ - if(kINDENT) opt.Append(" "); - opt.Append("V0"); - kINDENT=kTRUE; - } - } - - return (const Char_t*)opt.Data(); -} - - +// Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID). +// +// Usage: +// AddTrainPerformanceTRD.C(MC, friends, tasks) +// tasks : "ALL" or one/more of the following: +// "EFF" : TRD Tracking Efficiency +// "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations +// "MULT" : TRD single track selection +// "RES" : TRD tracking Resolution +// "CLRES": clusters Resolution +// "CAL" : TRD calibration +// "ALGN" : TRD alignment +// "PID" : TRD PID - pion efficiency +// "PIDR" : TRD PID - reference data +// "DET" : Basic TRD Detector checks +// "NOFR" : Data set does not have AliESDfriends.root +// "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely +// on MC information are switched off +// +// In compiled mode : +// Don't forget to load first the libraries +// gSystem->Load("libMemStat.so") +// gSystem->Load("libMemStatGui.so") +// gSystem->Load("libANALYSIS.so") +// gSystem->Load("libANALYSISalice.so") +// gSystem->Load("libPWGPP.so"); +// +// Authors: +// Alex Bercuci (A.Bercuci@gsi.de) +// Markus Fasel (m.Fasel@gsi.de) + +#if ! defined (__CINT__) || defined (__MAKECINT__) +//#ifndef __CINT__ +#include + +#include "TStopwatch.h" +#include "TMemStat.h" +#include "TMemStatViewerGUI.h" + +#include "TROOT.h" +#include "TClass.h" +#include "TSystem.h" +#include "TString.h" +#include "TError.h" +#include "TChain.h" +#include "TGrid.h" +#include "TAlienCollection.h" +#include "TGridCollection.h" +#include "TGridResult.h" +#include "TGeoGlobalMagField.h" + +#include "AliMagF.h" +#include "AliTracker.h" +#include "AliLog.h" +#include "AliCDBManager.h" +#include "AliGRPManager.h" +#include "AliGeomManager.h" +#include "AliAnalysisManager.h" +#include "AliAnalysisDataContainer.h" +#include "AliMCEventHandler.h" +#include "AliESDInputHandler.h" + +#include "TRD/AliTRDtrackerV1.h" +#include "TRD/AliTRDcalibDB.h" + +#include "PWGPP/TRD/macros/AddTRDcheckESD.C" +#include "PWGPP/TRD/macros/AddTRDinfoGen.C" +#include "PWGPP/TRD/macros/AddTRDcheckDET.C" +#include "PWGPP/TRD/macros/AddTRDefficiency.C" +#include "PWGPP/TRD/macros/AddTRDresolution.C" +#include "PWGPP/TRD/macros/AddTRDcheckPID.C" +#include "PWGPP/TRD/macros/AddTRDcheckTRK.C" +#include "PWGPP/TRD/macros/AddTRDv0Monitor.C" +#endif + +TString opt(""); +const Char_t* Translate(Bool_t doCheckESD=kTRUE, Bool_t doCheckDET=kTRUE, Bool_t doEffic=kTRUE, Bool_t doResolution=kTRUE, Bool_t doCheckPID=kTRUE, Bool_t doV0Monitor=kTRUE); +Bool_t AddTrainPerformanceTRD(Char_t *trd="ALL", const Char_t *addMacroPath = "$ALICE_ROOT/PWGPP/TRD/macros") +{ + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if(!mgr) { + Error("AddTrainPerformanceTRD", "AliAnalysisManager not set!"); + return kFALSE; + } + + // TRD data containers + AliAnalysisDataContainer *ci[AliTRDpwgppHelper::kNOutSlots]; + AliAnalysisDataContainer *ce[5]; + + Info("AddTrainPerformanceTRD", Form("Add Macros taken from %s", addMacroPath)); + Info("AddTrainPerformanceTRD", Form("TRD wagons \"%s\"", trd)); + Int_t bitmap = AliTRDpwgppHelper::ParseOptions(trd); + for(Int_t it=0; itLoadMacro(Form("%s/Add%s.C+", addMacroPath, TString(AliTRDpwgppHelper::TaskClassName(it))(3,20).Data()))) { + Error("AddTrainPerformanceTRD()", Form("Error loading %s task.", AliTRDpwgppHelper::TaskClassName(it))); + return kFALSE; + } + if(!AliTRDpwgppHelper::DoTask(it, bitmap)) continue; + + switch(it){ + case AliTRDpwgppHelper::kCheckESD: + AddTRDcheckESD(mgr); break; + case AliTRDpwgppHelper::kInfoGen: + AddTRDinfoGen(mgr, 0, NULL, ci); break; + case AliTRDpwgppHelper::kCheckDET: + // map slots + ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; + ce[1]=ci[AliTRDpwgppHelper::kTracksSA]; + ce[2]=ci[AliTRDpwgppHelper::kTracksKink]; + ce[3]=ci[AliTRDpwgppHelper::kEventInfo]; + ce[4]=ci[AliTRDpwgppHelper::kClusters]; + AddTRDcheckDET(mgr, bitmap, ce); + break; + case AliTRDpwgppHelper::kEfficiency: + // map slots + ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; + ce[1]=ci[AliTRDpwgppHelper::kTracksITS]; + ce[2]=ci[AliTRDpwgppHelper::kTracksKink]; + ce[3]=ci[AliTRDpwgppHelper::kEventInfo]; + ce[4]=ci[AliTRDpwgppHelper::kClusters]; + AddTRDefficiency(mgr, bitmap, ce); + break; + case AliTRDpwgppHelper::kResolution: + // map slots + ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; + ce[1]=ci[AliTRDpwgppHelper::kTracksITS]; + ce[2]=ci[AliTRDpwgppHelper::kTracksKink]; + ce[3]=ci[AliTRDpwgppHelper::kEventInfo]; + ce[4]=ci[AliTRDpwgppHelper::kClusters]; + AddTRDresolution(mgr, bitmap, ce); + break; + case AliTRDpwgppHelper::kCheckPID: + // map slots + ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; + ce[1]=ci[AliTRDpwgppHelper::kEventInfo]; + ce[2]=ci[AliTRDpwgppHelper::kV0List]; + AddTRDcheckPID(mgr, bitmap, ce, &ce[3]); + break; + case AliTRDpwgppHelper::kCheckTRK: + // map slots + ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel]; + ce[1]=ci[AliTRDpwgppHelper::kEventInfo]; + ce[2]=ci[AliTRDpwgppHelper::kClusters]; + AddTRDcheckTRK(mgr, 0, ce); + break; + case AliTRDpwgppHelper::kV0Monitor: + // slots already mapped by checkPID + AddTRDv0Monitor(mgr, 0, ce); + break; + default: + Warning("AddTrainPerformanceTRD()", Form("No performance task registered at slot %d.", it)); + } + } + return kTRUE; +} + +const Char_t* Translate(Bool_t doCheckESD, Bool_t doCheckDET, Bool_t doEffic, Bool_t doResolution, Bool_t doCheckPID, Bool_t doCheckV0) +{ + opt.Clear(); + if( doCheckESD==kTRUE && + doCheckDET==kTRUE && + doEffic==kTRUE && + doResolution==kTRUE && + doCheckPID==kTRUE && + doCheckV0==kTRUE + ){ + opt="ALL"; + } else { + Bool_t kINDENT(kFALSE); + if(doCheckESD){ + opt.Append("ESD"); + kINDENT=kTRUE; + } + if(doCheckDET){ + if(kINDENT) opt.Append(" "); + opt.Append("DET"); + kINDENT = kTRUE; + } + if(doEffic){ + if(kINDENT) opt.Append(" "); + opt.Append("EFF"); + kINDENT=kTRUE; + } + if(doResolution){ + if(kINDENT) opt.Append(" "); + opt.Append("RES"); + kINDENT=kTRUE; + } + if(doCheckPID){ + if(kINDENT) opt.Append(" "); + opt.Append("PID"); + kINDENT=kTRUE; + } + if(doCheckV0){ + if(kINDENT) opt.Append(" "); + opt.Append("V0"); + kINDENT=kTRUE; + } + } + + return (const Char_t*)opt.Data(); +} + + diff --git a/PWGPP/macros/PhysSel/QALHC11c_QA69.h b/PWGPP/macros/PhysSel/QALHC11c_QA69.h index e31e65053b5..bfd89f5d794 100644 --- a/PWGPP/macros/PhysSel/QALHC11c_QA69.h +++ b/PWGPP/macros/PhysSel/QALHC11c_QA69.h @@ -1,120 +1,120 @@ -//--------------------------------------------------------- -// PARAMETERS TO BE SET BY HAND - - -// const Int_t runs[]={ 139173, 139172, 139110, 139107, 139042, 139038, 138973, 138796, 138795, 138742, 138740, 138737, 138736, 138732, 138731, 138730, 138666, 138662, 138653, 138652, 138638, 138637, 138624, 138621, 138620, 138583, 138582, 138579, 138578, 138534, 138533, 138469, 138442, 138439, 138438, 138396, 138275, 138225, 138201, 138200, 138197, 138192, 138190, 138154, 138153, 138151, 138150, 138126, 138125, 137848, 137847, 137844, 137843, 137752, 137751, 137748, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137689, 137686, 137685, 137639, 137638, 137609, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137370, 137366, 137365, 137243, 137236, 137235, 137232, 137230, 137165, 137163, 137162, 137161, 137137, 137136, 137135, 137133, 137132, 137125, 137124, 137045, 137042, 136879, 136854, 136851, -1 }; - -// const Int_t runs[]={ -// 137135, 137161, 137162, 137163, 137165, 137230, 137232, 137235, 137236, 137243, 137365, 137366, 137430, 137431, 137432, 137434, 137439, 137440, 137441, 137443, 137530, 137531, 137539, 137541, 137544, 137546, 137549, 137595, 137638, 137639, 137685, 137691, 137692, 137693, 137704, 137718, 137722, 137724, 137748, 137751, 137752, 137843, 138125, 138126, 138190, 138192, 138200, 138201, 138275, 138359, 138364, 138396, 138438, 138439, 138442, 138469, 138534, 138578, 138579, 138582, 138583, 138621, 138624, 138638, 138653, 138662, 138666, 138730, 138731, 138740, 138830, 138836, 138837, 138870, 138871, 138872, 138924, 138972, 138976, 138977, 138978, 138979, 138980, 138982, 138983, 139024, 139025, 139028, 139029, 139030, 139031, 139034, 139036, 139037, 139038, 139042, 139105, 139107, 139172, 139173, 139309, 139310, 139314, 139328, 139329, 139360, 139437, 139438, 139440, 139441, 139465, 139503, 139505, 139507, 139510, -1}; - -const Int_t runs[]={ - 154808, - 154796, - 154793, - 154789, - 154787, - 154786, - 154783, - 154780, - 154773, - 154763, - 154570, - 154495, - 154485, - 154483, - 154482, - 154480, - 154478, - 154448, - 154385, - 154383, - 154382, - 154289, - 154286, - 154283, - 154281, - 154273, - 154270, - 154269, - 154266, - 154264, - 154261, - 154257, - 154252, - 154222, - 154221, - 154220, - 154219, - 154211, - 154207, - 154151, - 154143, - 154141, - 154136, - 154132, - 154126, - 154130, - 153738, - 153733, - 153728, - 153727, - 153726, - 153725, - 153718, - 153709, - 153702, - 153594, - 153591, - 153589, - 153571, - 153570, - 153566, - 153560, - 153558, - 153552, - 153548, - 153544, - 153542, - 153541, - 153539, - 153536, - 153533, - 153373, - 153371, - 153369, - 153363, - 153362, - -1 -}; - - - -// check number of processed QA trains for this runs. Try all. - -//const Int_t QAcycle[]={41, 40, 36, 34, 33, 32, 31, -1}; -const Int_t QAcycle[]={69,-1}; - - -TString location="/alice/data/2011/LHC11c"; -// TString output="ESDs/pass1_4plus/QA"; -TString output="ESDs/pass1/QA"; -Bool_t localMode = 1; // if true, read local copy - - -// event stat files are saved locally, with the following suffix. If -// localMode above is true, this local copies are processed rather -// than the originals on alien -const char * localSuffix = "pass1"; -//const char * localPath = "./cache_41/"; -const char * localPath = "./files/"; -//const char * localPath = "./QA_LHC10h_43/"; - -// See twiki and update this list, if needed -TString knownProblems = ""; - -// "137161, 137162, 137163, 137165, 138190, 138200, 138201, 138396, 138439, 138469, 138579, 137443, 137230, 137232, 137443, 137531, 137546, 138150, 138154, 138197, 138438, 139024, 139031"; -const char * trigger1 = "CEMC7-B-NOPF-ALLNOTRD";//rowCMBAC -const char * trigger2 = "CMUSH7-B-NOPF-MUON";//rowCMBACS2 -const char * trigger3 = "CINT7-B-NOPF-ALLNOTRD";//rowC0SMH - -const char *period="LHC11c pass1, Cycle QA69"; +//--------------------------------------------------------- +// PARAMETERS TO BE SET BY HAND + + +// const Int_t runs[]={ 139173, 139172, 139110, 139107, 139042, 139038, 138973, 138796, 138795, 138742, 138740, 138737, 138736, 138732, 138731, 138730, 138666, 138662, 138653, 138652, 138638, 138637, 138624, 138621, 138620, 138583, 138582, 138579, 138578, 138534, 138533, 138469, 138442, 138439, 138438, 138396, 138275, 138225, 138201, 138200, 138197, 138192, 138190, 138154, 138153, 138151, 138150, 138126, 138125, 137848, 137847, 137844, 137843, 137752, 137751, 137748, 137724, 137722, 137718, 137704, 137693, 137692, 137691, 137689, 137686, 137685, 137639, 137638, 137609, 137608, 137595, 137549, 137546, 137544, 137541, 137539, 137531, 137530, 137443, 137441, 137440, 137439, 137434, 137432, 137431, 137430, 137370, 137366, 137365, 137243, 137236, 137235, 137232, 137230, 137165, 137163, 137162, 137161, 137137, 137136, 137135, 137133, 137132, 137125, 137124, 137045, 137042, 136879, 136854, 136851, -1 }; + +// const Int_t runs[]={ +// 137135, 137161, 137162, 137163, 137165, 137230, 137232, 137235, 137236, 137243, 137365, 137366, 137430, 137431, 137432, 137434, 137439, 137440, 137441, 137443, 137530, 137531, 137539, 137541, 137544, 137546, 137549, 137595, 137638, 137639, 137685, 137691, 137692, 137693, 137704, 137718, 137722, 137724, 137748, 137751, 137752, 137843, 138125, 138126, 138190, 138192, 138200, 138201, 138275, 138359, 138364, 138396, 138438, 138439, 138442, 138469, 138534, 138578, 138579, 138582, 138583, 138621, 138624, 138638, 138653, 138662, 138666, 138730, 138731, 138740, 138830, 138836, 138837, 138870, 138871, 138872, 138924, 138972, 138976, 138977, 138978, 138979, 138980, 138982, 138983, 139024, 139025, 139028, 139029, 139030, 139031, 139034, 139036, 139037, 139038, 139042, 139105, 139107, 139172, 139173, 139309, 139310, 139314, 139328, 139329, 139360, 139437, 139438, 139440, 139441, 139465, 139503, 139505, 139507, 139510, -1}; + +const Int_t runs[]={ + 154808, + 154796, + 154793, + 154789, + 154787, + 154786, + 154783, + 154780, + 154773, + 154763, + 154570, + 154495, + 154485, + 154483, + 154482, + 154480, + 154478, + 154448, + 154385, + 154383, + 154382, + 154289, + 154286, + 154283, + 154281, + 154273, + 154270, + 154269, + 154266, + 154264, + 154261, + 154257, + 154252, + 154222, + 154221, + 154220, + 154219, + 154211, + 154207, + 154151, + 154143, + 154141, + 154136, + 154132, + 154126, + 154130, + 153738, + 153733, + 153728, + 153727, + 153726, + 153725, + 153718, + 153709, + 153702, + 153594, + 153591, + 153589, + 153571, + 153570, + 153566, + 153560, + 153558, + 153552, + 153548, + 153544, + 153542, + 153541, + 153539, + 153536, + 153533, + 153373, + 153371, + 153369, + 153363, + 153362, + -1 +}; + + + +// check number of processed QA trains for this runs. Try all. + +//const Int_t QAcycle[]={41, 40, 36, 34, 33, 32, 31, -1}; +const Int_t QAcycle[]={69,-1}; + + +TString location="/alice/data/2011/LHC11c"; +// TString output="ESDs/pass1_4plus/QA"; +TString output="ESDs/pass1/QA"; +Bool_t localMode = 1; // if true, read local copy + + +// event stat files are saved locally, with the following suffix. If +// localMode above is true, this local copies are processed rather +// than the originals on alien +const char * localSuffix = "pass1"; +//const char * localPath = "./cache_41/"; +const char * localPath = "./files/"; +//const char * localPath = "./QA_LHC10h_43/"; + +// See twiki and update this list, if needed +TString knownProblems = ""; + +// "137161, 137162, 137163, 137165, 138190, 138200, 138201, 138396, 138439, 138469, 138579, 137443, 137230, 137232, 137443, 137531, 137546, 138150, 138154, 138197, 138438, 139024, 139031"; +const char * trigger1 = "CEMC7-B-NOPF-ALLNOTRD";//rowCMBAC +const char * trigger2 = "CMUSH7-B-NOPF-MUON";//rowCMBACS2 +const char * trigger3 = "CINT7-B-NOPF-ALLNOTRD";//rowC0SMH + +const char *period="LHC11c pass1, Cycle QA69"; diff --git a/PWGPP/macros/PlotImpParResVsPt.C b/PWGPP/macros/PlotImpParResVsPt.C index 87e04e89ee6..0e056485151 100644 --- a/PWGPP/macros/PlotImpParResVsPt.C +++ b/PWGPP/macros/PlotImpParResVsPt.C @@ -1,278 +1,278 @@ -TF1 *CreateFuncGausTail(TH1F *h,TString funcname); -TF1 *CreateFuncGaussTail(TH1F *h,TString funcname,Double_t parone,Double_t partwo); - -void PlotImpParResVsPt() -{ - gStyle->SetOptStat(0); - - - TFile *file1=TFile::Open("QAresults_merged_195344_195351.root","READ"); - TDirectoryFile *dir1=(TDirectoryFile*)file1->GetDirectory("ImpParRes_Performance_wSDD"); - - //TFile *d0dist1=TFile::Open("/home/luojb/2011/ImpactParameter/OutputFile/PP/LHC10b/ImpParRes.Performance_LHC10bcde_pass2_ESDdiamond_2011_01_26.root","READ"); - - //if (!d0dist1->IsOpen()) return; - - - - TList *d0allpointRec1 = (TList*)dir1->Get("coutputd0allPointRec_0_1000000"); - - TList *d0allpointSkip1 = (TList*)dir1->Get("coutputd0allPointSkip_0_1000000"); - - TList *d0particlePID1 = (TList*)dir1->Get("coutputd0particlePID_0_1000000"); - - TList *d0pt = (TList*)dir1->Get("coutputd0Pt_0_1000000"); - //TFile *d0ppr=TFile::Open("../ResolutionsAnalysis_def.root","READ"); - //if(!d0ppr->IsOpen()) return; - - //define the histgram - - TH1F **d0AllpointrphiSkip1_=new TH1F*[26]; - - TH1F **d0AllpointrphiSkipTail1_=new TH1F*[26]; - TH1F **d0AllpointrphiSkipGaus1_=new TH1F*[26]; - - TH1F **d0Pt_=new TH1F*[26]; - Int_t nbins = 51; - Double_t xbins[52]={0.22,0.23,0.26,0.27,0.35,0.36,0.45,0.46,0.55,0.56,0.65,0.66,0.75,0.76,0.85,0.86,1.05,1.06,1.25,1.27,1.45,1.47,1.65,1.67,1.85,1.87,2.15,2.17,2.45,2.47,2.65,2.67,2.85,2.87,3.25,3.27,3.75,3.77,4.15,4.20,4.95,5.15,5.35,5.55,6.0,6.8,8.5,10.5,12,19.,21.,32}; - - //TGraph *Resrphi_allpoint =new TGraph("Resrphi_allpot","d_0 impact parameter resolution_rphi [#mu m]; p_{t} [GeV/c]",nbins,xbins); - TGraphErrors *Resrphi_allpointRec =new TGraphErrors(26); - //Resrphi_allpointRec->SetMaximum(400); - //Resrphi_allpointRec->SetMinimum(0); - //Resrphi_allpoint->SetXTitle("p_{t} [GeV/c]"); - //Resrphi_Rec->SetYTitle("d^{0} impact parameter resolution_rphi [#mu m]"); - Resrphi_allpointRec->SetLineWidth(1); - Resrphi_allpointRec->SetMarkerStyle(20); - - TGraphErrors *Resrphi_allpointSkip1 =(TGraphErrors*)Resrphi_allpointRec->Clone("Resrphi_allpointSkip1"); - - TGraphErrors *Resrphi_allpointSkipmean1 =(TGraphErrors*)Resrphi_allpointRec->Clone("Resrphi_allpointSkipmean1"); - - - // fit gaussian - /* - TF1 *allpointRec1 = new TF1("allpointRec1","gaus",-10000.,10000.); - TF1 *allpointRec2 = new TF1("allpointRec2","gaus",-10000.,10000.); - TF1 *allpointRec3 = new TF1("allpointRec3","gaus",-10000.,10000.); - TF1 *allpointRec4 = new TF1("allpointRec4","gaus",-10000.,10000.); - TF1 *allpointRec5 = new TF1("allpointRec5","gaus",-10000.,10000.); - TF1 *allpointRec6 = new TF1("allpointRec6","gaus",-10000.,10000.); - */ - - - TF1 *f1 = new TF1("f1","gaus",-10000.,10000.); - TF1 *wn1 = new TF1("wn1","gaus",-10000.,10000.); - //fitting histogram - for (Int_t i=0;i<26;i++){ - TString getstr; - Int_t jj=i+1; - Double_t j =3.; - // - // CHANGE ONLY HERE TO GET rphi 6 points, rphi SPDany, or z 6 points - // - //getstr="d0allpointzSkip_"; - getstr="d0allpointrphiSkip_"; - //getstr="d0partpointrphiSkip_"; - // - // - getstr += jj; - d0AllpointrphiSkip1_[i] = (TH1F*)d0allpointSkip1->FindObject(getstr);//->Clone(getstr+"d0allrphiRec"); - - getstr="d0pt_"; - getstr += jj; - d0Pt_[i] = (TH1F*)d0pt->FindObject(getstr); - - - //Set fitting function - //normalization - TF1 *h = new TF1("h","gaus",-10000.,10000.); - d0AllpointrphiSkip1_[i]->Fit("h","NR,Q"); - Double_t d0rphirange_allpointSkip1 = h->GetParameter(2); - Double_t Entries = d0AllpointrphiSkip1_[i]->GetEntries(); - Double_t Integral = d0AllpointrphiSkip1_[i]->Integral(); - d0AllpointrphiSkip1_[i]->Scale(1./Integral); - - //cp histogram - d0AllpointrphiSkipTail1_[i] = new TH1F(*d0AllpointrphiSkip1_[i]); // = new TH1F(*(TH1F*)d0AllpointrphiSkip1_[i]); - d0AllpointrphiSkipGaus1_[i] = new TH1F(*d0AllpointrphiSkip1_[i]); - Double_t wholerangeint=d0AllpointrphiSkip1_[i]->Integral(); - Double_t cutleft1= -j*(d0rphirange_allpointSkip1); - Double_t cutright1 =j*d0rphirange_allpointSkip1; - d0AllpointrphiSkipTail1_[i]->Reset(0); - d0AllpointrphiSkipGaus1_[i]->Reset(0); - for (Int_t bin=1;binGetNbinsX();bin++){ - Int_t bincontent = d0AllpointrphiSkip1_[i]->GetBinCenter(bin); - if(bincontentcutright1) { - d0AllpointrphiSkipTail1_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin)); - d0AllpointrphiSkipTail1_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin)); - d0AllpointrphiSkipGaus1_[i]->SetBinContent(bin,0.); - //This sentence is very important,otherwise we will get the information the data is empty when we fit it . - } - else if(bincontent>=cutleft1 && bincontent<=cutright1){ - d0AllpointrphiSkipTail1_[i]->SetBinContent(bin,0); - d0AllpointrphiSkipGaus1_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin)); - d0AllpointrphiSkipGaus1_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin)); - } - //d0AllpointrphiSkipGaus_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin)); - //d0AllpointrphiSkipGaus_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin)); - } - //return; - TF1 *hh; - hh =CreateFuncTail(d0AllpointrphiSkipTail1_[i],"hh"); - hh->SetLineColor(4); - d0AllpointrphiSkipTail1_[i]->SetLineColor(5); - d0AllpointrphiSkipTail1_[i]->Fit("hh","NR,Q","",-2500,2500); - Double_t Sigmatail_allpointSkip1 = hh->GetParameter(2); - d0AllpointrphiSkipGaus1_[i]->Fit("h","NR,Q","",-2500,2500); - Double_t Sigmagaus_allpointSkip1 = h->GetParameter(2); - TF1 *allpointSkip1; - allpointSkip1=CreateFuncGaussTail(d0AllpointrphiSkip1_[i],"allpointSkip1",Sigmagaus_allpointSkip1,Sigmatail_allpointSkip1); - - - - Double_t pt =d0Pt_[i]->GetMean(); - Double_t RMS=d0Pt_[i]->GetRMS(); - cout<<"i:"<SetRange(-j*d0rphirange_allpointSkip1,j*d0rphirange_allpointSkip1); - d0AllpointrphiSkip1_[i]->Fit("allpointSkip1","NR,Q"); - Resrphi_allpointSkip1->SetPoint(jj,pt,allpointSkip1->GetParameter(2)); - Resrphi_allpointSkip1->SetPointError(jj,RMS,allpointSkip1->GetParError(2)); - Resrphi_allpointSkipmean1->SetPoint(jj,pt,allpointSkip1->GetParameter(1)); - Resrphi_allpointSkipmean1->SetPointError(jj,RMS,allpointSkip1->GetParError(1)); - - } - - //********************************************************************************************** - //************************************ Plot figures ****************************************** - //********************************************************************************************** - - TCanvas *d0ResrphiSkip1 = new TCanvas("d0ResrphiSkip1","d0ResrphiSkip1",0,0,540,420); - d0ResrphiSkip1->cd(); - gPad->SetLogx(); - TH2F *hFrame111 = new TH2F("hFrame","; p_{t} [GeV/c]; d0_resolution [#mum]",2,0.15,38,2,0,350); - hFrame111->Draw(); - - Resrphi_allpointSkip1->SetMarkerStyle(20); - Resrphi_allpointSkip1->SetMarkerColor(2); - Resrphi_allpointSkip1->Draw("p"); - /* - TLegend *legend = new TLegend(0.28,0.75,0.65,0.88); - legend-> SetTextSize(0.025); - legend->SetBorderSize(0); - legend->SetFillColor(0); - legend->AddEntry(Resrphi_allpointSkip1,"d0ResrphiSkip_LHCbcd","pl"); - //legend->AddEntry(Resrphi_allpointRec4,"d0ResrphiSkip_LHC11a10a","pl"); - //legend->AddEntry(Resrphi_allpointRec2,"d0ResrphiSkip_LHC11a10a_m","pl"); - legend->Draw(); - */ - d0ResrphiSkip1->Update(); - - TCanvas *d0MeanrphiSkip1 = new TCanvas("d0MeanrphiSkip1","d0MeanrphiSkip1",0,0,540,420); - d0MeanrphiSkip1->cd(); - gPad->SetLogx(); - TH2F *hFrame1 = new TH2F("hFrame1","; p_{t} [GeV/c]; d0_mean [#mum]",2,0.15,38,2,-35,30); - hFrame1->Draw(); - Resrphi_allpointSkipmean1->SetMarkerStyle(20); - Resrphi_allpointSkipmean1->SetMarkerColor(2); - Resrphi_allpointSkipmean1->Draw("p"); - //Resrphi_allpointSkipmean2->SetMarkerStyle(20); - //Resrphi_allpointSkipmean2->SetMarkerColor(3); - //Resrphi_allpointSkipmean2->Draw("p,sames"); - - /* - TLegend *legend = new TLegend(0.2,0.7,0.7,0.88); - legend-> SetTextSize(0.025); - legend->SetBorderSize(0); - legend->SetFillColor(0); - legend->AddEntry(Resrphi_allpointSkipmean1,"d0MeanrphiSkip_LHC11a_partpointSkip_pass2_with_SDD","pl"); - //legend->AddEntry(Resrphi_allpointSkipmean2,"d0MeanrphiSkip_LHC11a_partpointSkip_pass3_with_SDD","pl"); - //legend->AddEntry(Resrphi_allpointSkipmean3,"d0MeanrphiSkip_LHC10d_partpointSkip_diamond","pl"); - legend->Draw(); - */ - d0MeanrphiSkip1->Update(); - - return; - -} -//--------------------------------------------------------------------------- -TF1 *CreateFuncTail(TH1F *hh,TString funcname,Double_t wholeRangeInt=-1.) -{ - /* TF1 *f3 = new TF1("f3","gaus",300,10000.); - cout<<"here:"<<2222222<Fit("f3","NR,Q"); - Double_t value =f3->GetParameter(2); - cout<<"value:"<SetParLimits(0,0.,250.);//Set the first parameter [0] range - tail->SetParLimits(1,-50,50.);//Set the second parameter [1] range - tail->SetParLimits(2,0,15000.); - Double_t binwidth=hh->GetBinWidth(10); - Double_t integral=hh->Integral(); - if(wholeRangeInt!=-1.)tail->SetParLimits(0,(0.2)*wholeRangeInt*binwidth,(0.5)*wholeRangeInt*binwidth); - Double_t RMS1=TMath::Abs(hh->GetRMS()); - Double_t firstvalue1=binwidth*integral; - //cout<<"binwidth:"<SetParameters(1.,0,100.);//Set the initial value of parameter - // tail->SetParameters(1,0,RMS1); - - return tail; - -} -//---------------------------------------------------------------------------- -TF1 *CreateFuncGausTail(TH1F *h,TString funcname) -{ - TF1 *gaustail=new TF1(funcname.Data(),"[0]*([4]/(TMath::Sqrt(2.*TMath::Pi())*[2])*TMath::Exp(-1.*(x-[1])*(x-[1])/(2.*[2]*[2]))+(1.-[4])/(2.*[3])*TMath::Exp(-TMath::Abs(x-[1])/[3]))",-2500.,2500.); - gaustail->SetParLimits(0,0.,250000000.);//Set the first parameter [0] range - gaustail->SetParLimits(1,-20,20.);//Set the second parameter [1] range - gaustail->SetParLimits(2,0.,500.); - gaustail->SetParLimits(3,0.,500.); - gaustail->SetParLimits(4,0.,1.); - Double_t binwidth=h->GetBinWidth(10); - Double_t integral=h->Integral(); - Double_t RMS1=TMath::Abs(h->GetRMS()); - Double_t firstvalue=binwidth*integral; - //cout<<"binwidth:"<SetParameters(firstvalue,0,RMS1,RMS1/20,0.82);//Set the initial value of parameter - //gaustail->FixParameter(0,firstvalue); - return gaustail; - -} -//---------------------------------------------------------------------------- -TF1 *CreateFuncGaussTail(TH1F *h,TString funcname,Double_t parone,Double_t partwo) -{ - TF1 *f = new TF1("f","gaus",-10000.,10000.); - h->Fit("f","NR,Q"); - Double_t value =f->GetParameter(2); - Double_t par1=1.1*parone; - Double_t par2=partwo*1.2;//par2*(1.-0.2),par2*(1.+0.2)); - TF1 *gaustail=new TF1(funcname.Data(),"[0]*([4]/(TMath::Sqrt(2.*TMath::Pi())*[2])*TMath::Exp(-1.*(x-[1])*(x-[1])/(2.*[2]*[2]))+(1.-[4])/(2.*[3])*TMath::Exp(-TMath::Abs(x-[1])/[3]))",-2500.,2500.); - //gaustail->SetParLimits(0,0.,10.);//Set the first parameter [0] range - gaustail->SetParLimits(1,-50.,50.);//Set the second parameter [1] range - //gaustail->SetParLimits(2,0.,par1); - gaustail->SetParLimits(3,0,par2); - gaustail->SetParLimits(4,0.,1.); - Double_t binwidth=h->GetBinWidth(10); - Double_t integral=h->Integral(); - Double_t RMS1=TMath::Abs(h->GetRMS()); - Double_t firstvalue=binwidth*integral; - //cout<<"binwidth:"<SetParameters(1,0,value,partwo,0.82);//Set the initial value of parameter - - delete f; - return gaustail; - -} +TF1 *CreateFuncGausTail(TH1F *h,TString funcname); +TF1 *CreateFuncGaussTail(TH1F *h,TString funcname,Double_t parone,Double_t partwo); + +void PlotImpParResVsPt() +{ + gStyle->SetOptStat(0); + + + TFile *file1=TFile::Open("QAresults_merged_195344_195351.root","READ"); + TDirectoryFile *dir1=(TDirectoryFile*)file1->GetDirectory("ImpParRes_Performance_wSDD"); + + //TFile *d0dist1=TFile::Open("/home/luojb/2011/ImpactParameter/OutputFile/PP/LHC10b/ImpParRes.Performance_LHC10bcde_pass2_ESDdiamond_2011_01_26.root","READ"); + + //if (!d0dist1->IsOpen()) return; + + + + TList *d0allpointRec1 = (TList*)dir1->Get("coutputd0allPointRec_0_1000000"); + + TList *d0allpointSkip1 = (TList*)dir1->Get("coutputd0allPointSkip_0_1000000"); + + TList *d0particlePID1 = (TList*)dir1->Get("coutputd0particlePID_0_1000000"); + + TList *d0pt = (TList*)dir1->Get("coutputd0Pt_0_1000000"); + //TFile *d0ppr=TFile::Open("../ResolutionsAnalysis_def.root","READ"); + //if(!d0ppr->IsOpen()) return; + + //define the histgram + + TH1F **d0AllpointrphiSkip1_=new TH1F*[26]; + + TH1F **d0AllpointrphiSkipTail1_=new TH1F*[26]; + TH1F **d0AllpointrphiSkipGaus1_=new TH1F*[26]; + + TH1F **d0Pt_=new TH1F*[26]; + Int_t nbins = 51; + Double_t xbins[52]={0.22,0.23,0.26,0.27,0.35,0.36,0.45,0.46,0.55,0.56,0.65,0.66,0.75,0.76,0.85,0.86,1.05,1.06,1.25,1.27,1.45,1.47,1.65,1.67,1.85,1.87,2.15,2.17,2.45,2.47,2.65,2.67,2.85,2.87,3.25,3.27,3.75,3.77,4.15,4.20,4.95,5.15,5.35,5.55,6.0,6.8,8.5,10.5,12,19.,21.,32}; + + //TGraph *Resrphi_allpoint =new TGraph("Resrphi_allpot","d_0 impact parameter resolution_rphi [#mu m]; p_{t} [GeV/c]",nbins,xbins); + TGraphErrors *Resrphi_allpointRec =new TGraphErrors(26); + //Resrphi_allpointRec->SetMaximum(400); + //Resrphi_allpointRec->SetMinimum(0); + //Resrphi_allpoint->SetXTitle("p_{t} [GeV/c]"); + //Resrphi_Rec->SetYTitle("d^{0} impact parameter resolution_rphi [#mu m]"); + Resrphi_allpointRec->SetLineWidth(1); + Resrphi_allpointRec->SetMarkerStyle(20); + + TGraphErrors *Resrphi_allpointSkip1 =(TGraphErrors*)Resrphi_allpointRec->Clone("Resrphi_allpointSkip1"); + + TGraphErrors *Resrphi_allpointSkipmean1 =(TGraphErrors*)Resrphi_allpointRec->Clone("Resrphi_allpointSkipmean1"); + + + // fit gaussian + /* + TF1 *allpointRec1 = new TF1("allpointRec1","gaus",-10000.,10000.); + TF1 *allpointRec2 = new TF1("allpointRec2","gaus",-10000.,10000.); + TF1 *allpointRec3 = new TF1("allpointRec3","gaus",-10000.,10000.); + TF1 *allpointRec4 = new TF1("allpointRec4","gaus",-10000.,10000.); + TF1 *allpointRec5 = new TF1("allpointRec5","gaus",-10000.,10000.); + TF1 *allpointRec6 = new TF1("allpointRec6","gaus",-10000.,10000.); + */ + + + TF1 *f1 = new TF1("f1","gaus",-10000.,10000.); + TF1 *wn1 = new TF1("wn1","gaus",-10000.,10000.); + //fitting histogram + for (Int_t i=0;i<26;i++){ + TString getstr; + Int_t jj=i+1; + Double_t j =3.; + // + // CHANGE ONLY HERE TO GET rphi 6 points, rphi SPDany, or z 6 points + // + //getstr="d0allpointzSkip_"; + getstr="d0allpointrphiSkip_"; + //getstr="d0partpointrphiSkip_"; + // + // + getstr += jj; + d0AllpointrphiSkip1_[i] = (TH1F*)d0allpointSkip1->FindObject(getstr);//->Clone(getstr+"d0allrphiRec"); + + getstr="d0pt_"; + getstr += jj; + d0Pt_[i] = (TH1F*)d0pt->FindObject(getstr); + + + //Set fitting function + //normalization + TF1 *h = new TF1("h","gaus",-10000.,10000.); + d0AllpointrphiSkip1_[i]->Fit("h","NR,Q"); + Double_t d0rphirange_allpointSkip1 = h->GetParameter(2); + Double_t Entries = d0AllpointrphiSkip1_[i]->GetEntries(); + Double_t Integral = d0AllpointrphiSkip1_[i]->Integral(); + d0AllpointrphiSkip1_[i]->Scale(1./Integral); + + //cp histogram + d0AllpointrphiSkipTail1_[i] = new TH1F(*d0AllpointrphiSkip1_[i]); // = new TH1F(*(TH1F*)d0AllpointrphiSkip1_[i]); + d0AllpointrphiSkipGaus1_[i] = new TH1F(*d0AllpointrphiSkip1_[i]); + Double_t wholerangeint=d0AllpointrphiSkip1_[i]->Integral(); + Double_t cutleft1= -j*(d0rphirange_allpointSkip1); + Double_t cutright1 =j*d0rphirange_allpointSkip1; + d0AllpointrphiSkipTail1_[i]->Reset(0); + d0AllpointrphiSkipGaus1_[i]->Reset(0); + for (Int_t bin=1;binGetNbinsX();bin++){ + Int_t bincontent = d0AllpointrphiSkip1_[i]->GetBinCenter(bin); + if(bincontentcutright1) { + d0AllpointrphiSkipTail1_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin)); + d0AllpointrphiSkipTail1_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin)); + d0AllpointrphiSkipGaus1_[i]->SetBinContent(bin,0.); + //This sentence is very important,otherwise we will get the information the data is empty when we fit it . + } + else if(bincontent>=cutleft1 && bincontent<=cutright1){ + d0AllpointrphiSkipTail1_[i]->SetBinContent(bin,0); + d0AllpointrphiSkipGaus1_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin)); + d0AllpointrphiSkipGaus1_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin)); + } + //d0AllpointrphiSkipGaus_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin)); + //d0AllpointrphiSkipGaus_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin)); + } + //return; + TF1 *hh; + hh =CreateFuncTail(d0AllpointrphiSkipTail1_[i],"hh"); + hh->SetLineColor(4); + d0AllpointrphiSkipTail1_[i]->SetLineColor(5); + d0AllpointrphiSkipTail1_[i]->Fit("hh","NR,Q","",-2500,2500); + Double_t Sigmatail_allpointSkip1 = hh->GetParameter(2); + d0AllpointrphiSkipGaus1_[i]->Fit("h","NR,Q","",-2500,2500); + Double_t Sigmagaus_allpointSkip1 = h->GetParameter(2); + TF1 *allpointSkip1; + allpointSkip1=CreateFuncGaussTail(d0AllpointrphiSkip1_[i],"allpointSkip1",Sigmagaus_allpointSkip1,Sigmatail_allpointSkip1); + + + + Double_t pt =d0Pt_[i]->GetMean(); + Double_t RMS=d0Pt_[i]->GetRMS(); + cout<<"i:"<SetRange(-j*d0rphirange_allpointSkip1,j*d0rphirange_allpointSkip1); + d0AllpointrphiSkip1_[i]->Fit("allpointSkip1","NR,Q"); + Resrphi_allpointSkip1->SetPoint(jj,pt,allpointSkip1->GetParameter(2)); + Resrphi_allpointSkip1->SetPointError(jj,RMS,allpointSkip1->GetParError(2)); + Resrphi_allpointSkipmean1->SetPoint(jj,pt,allpointSkip1->GetParameter(1)); + Resrphi_allpointSkipmean1->SetPointError(jj,RMS,allpointSkip1->GetParError(1)); + + } + + //********************************************************************************************** + //************************************ Plot figures ****************************************** + //********************************************************************************************** + + TCanvas *d0ResrphiSkip1 = new TCanvas("d0ResrphiSkip1","d0ResrphiSkip1",0,0,540,420); + d0ResrphiSkip1->cd(); + gPad->SetLogx(); + TH2F *hFrame111 = new TH2F("hFrame","; p_{t} [GeV/c]; d0_resolution [#mum]",2,0.15,38,2,0,350); + hFrame111->Draw(); + + Resrphi_allpointSkip1->SetMarkerStyle(20); + Resrphi_allpointSkip1->SetMarkerColor(2); + Resrphi_allpointSkip1->Draw("p"); + /* + TLegend *legend = new TLegend(0.28,0.75,0.65,0.88); + legend-> SetTextSize(0.025); + legend->SetBorderSize(0); + legend->SetFillColor(0); + legend->AddEntry(Resrphi_allpointSkip1,"d0ResrphiSkip_LHCbcd","pl"); + //legend->AddEntry(Resrphi_allpointRec4,"d0ResrphiSkip_LHC11a10a","pl"); + //legend->AddEntry(Resrphi_allpointRec2,"d0ResrphiSkip_LHC11a10a_m","pl"); + legend->Draw(); + */ + d0ResrphiSkip1->Update(); + + TCanvas *d0MeanrphiSkip1 = new TCanvas("d0MeanrphiSkip1","d0MeanrphiSkip1",0,0,540,420); + d0MeanrphiSkip1->cd(); + gPad->SetLogx(); + TH2F *hFrame1 = new TH2F("hFrame1","; p_{t} [GeV/c]; d0_mean [#mum]",2,0.15,38,2,-35,30); + hFrame1->Draw(); + Resrphi_allpointSkipmean1->SetMarkerStyle(20); + Resrphi_allpointSkipmean1->SetMarkerColor(2); + Resrphi_allpointSkipmean1->Draw("p"); + //Resrphi_allpointSkipmean2->SetMarkerStyle(20); + //Resrphi_allpointSkipmean2->SetMarkerColor(3); + //Resrphi_allpointSkipmean2->Draw("p,sames"); + + /* + TLegend *legend = new TLegend(0.2,0.7,0.7,0.88); + legend-> SetTextSize(0.025); + legend->SetBorderSize(0); + legend->SetFillColor(0); + legend->AddEntry(Resrphi_allpointSkipmean1,"d0MeanrphiSkip_LHC11a_partpointSkip_pass2_with_SDD","pl"); + //legend->AddEntry(Resrphi_allpointSkipmean2,"d0MeanrphiSkip_LHC11a_partpointSkip_pass3_with_SDD","pl"); + //legend->AddEntry(Resrphi_allpointSkipmean3,"d0MeanrphiSkip_LHC10d_partpointSkip_diamond","pl"); + legend->Draw(); + */ + d0MeanrphiSkip1->Update(); + + return; + +} +//--------------------------------------------------------------------------- +TF1 *CreateFuncTail(TH1F *hh,TString funcname,Double_t wholeRangeInt=-1.) +{ + /* TF1 *f3 = new TF1("f3","gaus",300,10000.); + cout<<"here:"<<2222222<Fit("f3","NR,Q"); + Double_t value =f3->GetParameter(2); + cout<<"value:"<SetParLimits(0,0.,250.);//Set the first parameter [0] range + tail->SetParLimits(1,-50,50.);//Set the second parameter [1] range + tail->SetParLimits(2,0,15000.); + Double_t binwidth=hh->GetBinWidth(10); + Double_t integral=hh->Integral(); + if(wholeRangeInt!=-1.)tail->SetParLimits(0,(0.2)*wholeRangeInt*binwidth,(0.5)*wholeRangeInt*binwidth); + Double_t RMS1=TMath::Abs(hh->GetRMS()); + Double_t firstvalue1=binwidth*integral; + //cout<<"binwidth:"<SetParameters(1.,0,100.);//Set the initial value of parameter + // tail->SetParameters(1,0,RMS1); + + return tail; + +} +//---------------------------------------------------------------------------- +TF1 *CreateFuncGausTail(TH1F *h,TString funcname) +{ + TF1 *gaustail=new TF1(funcname.Data(),"[0]*([4]/(TMath::Sqrt(2.*TMath::Pi())*[2])*TMath::Exp(-1.*(x-[1])*(x-[1])/(2.*[2]*[2]))+(1.-[4])/(2.*[3])*TMath::Exp(-TMath::Abs(x-[1])/[3]))",-2500.,2500.); + gaustail->SetParLimits(0,0.,250000000.);//Set the first parameter [0] range + gaustail->SetParLimits(1,-20,20.);//Set the second parameter [1] range + gaustail->SetParLimits(2,0.,500.); + gaustail->SetParLimits(3,0.,500.); + gaustail->SetParLimits(4,0.,1.); + Double_t binwidth=h->GetBinWidth(10); + Double_t integral=h->Integral(); + Double_t RMS1=TMath::Abs(h->GetRMS()); + Double_t firstvalue=binwidth*integral; + //cout<<"binwidth:"<SetParameters(firstvalue,0,RMS1,RMS1/20,0.82);//Set the initial value of parameter + //gaustail->FixParameter(0,firstvalue); + return gaustail; + +} +//---------------------------------------------------------------------------- +TF1 *CreateFuncGaussTail(TH1F *h,TString funcname,Double_t parone,Double_t partwo) +{ + TF1 *f = new TF1("f","gaus",-10000.,10000.); + h->Fit("f","NR,Q"); + Double_t value =f->GetParameter(2); + Double_t par1=1.1*parone; + Double_t par2=partwo*1.2;//par2*(1.-0.2),par2*(1.+0.2)); + TF1 *gaustail=new TF1(funcname.Data(),"[0]*([4]/(TMath::Sqrt(2.*TMath::Pi())*[2])*TMath::Exp(-1.*(x-[1])*(x-[1])/(2.*[2]*[2]))+(1.-[4])/(2.*[3])*TMath::Exp(-TMath::Abs(x-[1])/[3]))",-2500.,2500.); + //gaustail->SetParLimits(0,0.,10.);//Set the first parameter [0] range + gaustail->SetParLimits(1,-50.,50.);//Set the second parameter [1] range + //gaustail->SetParLimits(2,0.,par1); + gaustail->SetParLimits(3,0,par2); + gaustail->SetParLimits(4,0.,1.); + Double_t binwidth=h->GetBinWidth(10); + Double_t integral=h->Integral(); + Double_t RMS1=TMath::Abs(h->GetRMS()); + Double_t firstvalue=binwidth*integral; + //cout<<"binwidth:"<SetParameters(1,0,value,partwo,0.82);//Set the initial value of parameter + + delete f; + return gaustail; + +} diff --git a/PWGPP/macros/rawmerge.C b/PWGPP/macros/rawmerge.C index ccf718ab2ce..ba58fc443da 100644 --- a/PWGPP/macros/rawmerge.C +++ b/PWGPP/macros/rawmerge.C @@ -1,93 +1,93 @@ -// -// Macro to create the "raw" data file with selected events -// Paramaters: -// eventListFileName - input ascii file with list of chunks and event numbers - two collumns -// osplit - split the file after given threhshold value -// -// TGrid * alien = TGrid::Connect("alien://",0,0,"t"); - -void rawmerge(const char *eventListFileName, - const char *outputDirectoryURI, - Long64_t osplit=-1) -{ - TGrid * alien = TGrid::Connect("alien://",0,0,"t"); - - Int_t eventNumber; - FILE *files=fopen(eventListFileName,"r"); - if (!files) { - fprintf(stderr,"error: could not read event list file \"%s\". Exiting.\n",eventListFileName); - return; - } - char iURI[1000]; - TString iURIold; - char oURI[1000]; - TFile *ifile=0; - TFile *ofile=0; - TTree *itree=0; - TTree *otree=0; - Long64_t ievent; - Long64_t oevent; - Int_t ofilenumber=0; - Int_t line=0; - Int_t eventold=0; - while (!feof(files)) { - ++line; - if (fscanf(files,"%s %d\n",iURI,&ievent)!=2) { - fprintf(stderr,"warning: corrupted event line (%d) in input file, skipping it...\n",line); - continue; - } - printf("> processing \"%s\" event %d...\n",iURI,ievent); - if (ievent==eventold) { printf("duplicated continue\n"),continue;} - // - if (iURIold.Contains(iURI)==0){ - printf("NF: %s\n",iURI); - delete ifile;ifile=0; - ifile=TFile::Open(iURI); - if (!ifile) { - fprintf(stderr,"warning: could not open file for event \"%s\", skipping it...\n",iURI); - continue; - } - iURIold=iURI; - }else{ - printf("OF: %s\n",iURI); - iURIold=iURI; - } - // - TTree *itree=dynamic_cast(ifile->Get("RAW")); - if (!itree) { - fprintf(stderr,"warning: could not find RAW tree for event \"%s\", skipping it...\n",iURI); - continue; - } - - // create (new) output file and tree - if (!ofile || (osplit>0 && oevent%osplit==0)) { - delete ofile; - ++ofilenumber; - sprintf(oURI,"%s/merged_%d.root",outputDirectoryURI,ofilenumber); - printf("< creating output file \"%s\"\n",oURI); - ofile=TFile::Open(oURI,"RECREATE"); - if (!ofile) { - fprintf(stderr,"error: could not create output file: \"%s\" Exiting.\n",oURI); - break; - } - otree=itree->CloneTree(0); - } - // copy event and write to file - otree->CopyAddresses(itree); - if (ievent==eventold) continue; - itree->GetEntry(ievent); - eventold=ievent; - otree->Fill(); -// otree->CopyEntries(itree,Form("Entry$==%d",ievent),1); - ofile->Write(); - ++oevent; - - // reset input - itree->ResetBranchAddresses(); - } - - printf("Merged %d events.\n",oevent); - delete ifile; - delete ofile; -} - +// +// Macro to create the "raw" data file with selected events +// Paramaters: +// eventListFileName - input ascii file with list of chunks and event numbers - two collumns +// osplit - split the file after given threhshold value +// +// TGrid * alien = TGrid::Connect("alien://",0,0,"t"); + +void rawmerge(const char *eventListFileName, + const char *outputDirectoryURI, + Long64_t osplit=-1) +{ + TGrid * alien = TGrid::Connect("alien://",0,0,"t"); + + Int_t eventNumber; + FILE *files=fopen(eventListFileName,"r"); + if (!files) { + fprintf(stderr,"error: could not read event list file \"%s\". Exiting.\n",eventListFileName); + return; + } + char iURI[1000]; + TString iURIold; + char oURI[1000]; + TFile *ifile=0; + TFile *ofile=0; + TTree *itree=0; + TTree *otree=0; + Long64_t ievent; + Long64_t oevent; + Int_t ofilenumber=0; + Int_t line=0; + Int_t eventold=0; + while (!feof(files)) { + ++line; + if (fscanf(files,"%s %d\n",iURI,&ievent)!=2) { + fprintf(stderr,"warning: corrupted event line (%d) in input file, skipping it...\n",line); + continue; + } + printf("> processing \"%s\" event %d...\n",iURI,ievent); + if (ievent==eventold) { printf("duplicated continue\n"),continue;} + // + if (iURIold.Contains(iURI)==0){ + printf("NF: %s\n",iURI); + delete ifile;ifile=0; + ifile=TFile::Open(iURI); + if (!ifile) { + fprintf(stderr,"warning: could not open file for event \"%s\", skipping it...\n",iURI); + continue; + } + iURIold=iURI; + }else{ + printf("OF: %s\n",iURI); + iURIold=iURI; + } + // + TTree *itree=dynamic_cast(ifile->Get("RAW")); + if (!itree) { + fprintf(stderr,"warning: could not find RAW tree for event \"%s\", skipping it...\n",iURI); + continue; + } + + // create (new) output file and tree + if (!ofile || (osplit>0 && oevent%osplit==0)) { + delete ofile; + ++ofilenumber; + sprintf(oURI,"%s/merged_%d.root",outputDirectoryURI,ofilenumber); + printf("< creating output file \"%s\"\n",oURI); + ofile=TFile::Open(oURI,"RECREATE"); + if (!ofile) { + fprintf(stderr,"error: could not create output file: \"%s\" Exiting.\n",oURI); + break; + } + otree=itree->CloneTree(0); + } + // copy event and write to file + otree->CopyAddresses(itree); + if (ievent==eventold) continue; + itree->GetEntry(ievent); + eventold=ievent; + otree->Fill(); +// otree->CopyEntries(itree,Form("Entry$==%d",ievent),1); + ofile->Write(); + ++oevent; + + // reset input + itree->ResetBranchAddresses(); + } + + printf("Merged %d events.\n",oevent); + delete ifile; + delete ofile; +} + diff --git a/PYTHIA6/QPYTHIA/qgrid b/PYTHIA6/QPYTHIA/qgrid index 94a40bcba6f..d402648634a 100644 --- a/PYTHIA6/QPYTHIA/qgrid +++ b/PYTHIA6/QPYTHIA/qgrid @@ -1,5085 +1,5085 @@ - 60 - 80 - 0.0001 -9.21034037 - 0.000125892541 -8.98008186 - 0.000158489319 -8.74982335 - 0.000199526231 -8.51956484 - 0.000251188643 -8.28930633 - 0.000316227766 -8.05904783 - 0.000398107171 -7.82878932 - 0.000501187234 -7.59853081 - 0.000630957344 -7.3682723 - 0.000794328235 -7.13801379 - 0.001 -6.90775528 - 0.00125892541 -6.67749677 - 0.00158489319 -6.44723826 - 0.00199526231 -6.21697975 - 0.00251188643 -5.98672124 - 0.00316227766 -5.75646273 - 0.00398107171 -5.52620422 - 0.00501187234 -5.29594571 - 0.00630957344 -5.0656872 - 0.00794328235 -4.8354287 - 0.01 -4.60517019 - 0.0125892541 -4.37491168 - 0.0158489319 -4.14465317 - 0.0199526231 -3.91439466 - 0.0251188643 -3.68413615 - 0.0316227766 -3.45387764 - 0.0398107171 -3.22361913 - 0.0501187234 -2.99336062 - 0.0630957344 -2.76310211 - 0.0794328235 -2.5328436 - 0.1 -2.30258509 - 0.125892541 -2.07232658 - 0.158489319 -1.84206807 - 0.199526231 -1.61180957 - 0.251188643 -1.38155106 - 0.316227766 -1.15129255 - 0.398107171 -0.921034037 - 0.501187234 -0.690775528 - 0.630957344 -0.460517019 - 0.794328235 -0.230258509 - 1. 0. - 1.25892541 0.230258509 - 1.58489319 0.460517019 - 1.99526231 0.690775528 - 2.51188643 0.921034037 - 3.16227766 1.15129255 - 3.98107171 1.38155106 - 5.01187234 1.61180957 - 6.30957344 1.84206807 - 7.94328235 2.07232658 - 10. 2.30258509 - 12.5892541 2.5328436 - 15.8489319 2.76310211 - 19.9526231 2.99336062 - 25.1188643 3.22361913 - 31.6227766 3.45387764 - 39.8107171 3.68413615 - 50.1187234 3.91439466 - 63.0957344 4.14465317 - 79.4328235 4.37491168 - 100. 4.60517019 - 0.001 -6.90775528 - 0.00112201845 -6.79262602 - 0.00125892541 -6.67749677 - 0.00141253754 -6.56236752 - 0.00158489319 -6.44723826 - 0.00177827941 -6.33210901 - 0.00199526231 -6.21697975 - 0.00223872114 -6.1018505 - 0.00251188643 -5.98672124 - 0.00281838293 -5.87159199 - 0.00316227766 -5.75646273 - 0.00354813389 -5.64133348 - 0.00398107171 -5.52620422 - 0.00446683592 -5.41107497 - 0.00501187234 -5.29594571 - 0.00562341325 -5.18081646 - 0.00630957344 -5.0656872 - 0.00707945784 -4.95055795 - 0.00794328235 -4.8354287 - 0.00891250938 -4.72029944 - 0.01 -4.60517019 - 0.0112201845 -4.49004093 - 0.0125892541 -4.37491168 - 0.0141253754 -4.25978242 - 0.0158489319 -4.14465317 - 0.0177827941 -4.02952391 - 0.0199526231 -3.91439466 - 0.0223872114 -3.7992654 - 0.0251188643 -3.68413615 - 0.0281838293 -3.56900689 - 0.0316227766 -3.45387764 - 0.0354813389 -3.33874838 - 0.0398107171 -3.22361913 - 0.0446683592 -3.10848988 - 0.0501187234 -2.99336062 - 0.0562341325 -2.87823137 - 0.0630957344 -2.76310211 - 0.0707945784 -2.64797286 - 0.0794328235 -2.5328436 - 0.0891250938 -2.41771435 - 0.1 -2.30258509 - 0.112201845 -2.18745584 - 0.125892541 -2.07232658 - 0.141253754 -1.95719733 - 0.158489319 -1.84206807 - 0.177827941 -1.72693882 - 0.199526231 -1.61180957 - 0.223872114 -1.49668031 - 0.251188643 -1.38155106 - 0.281838293 -1.2664218 - 0.316227766 -1.15129255 - 0.354813389 -1.03616329 - 0.398107171 -0.921034037 - 0.446683592 -0.805904783 - 0.501187234 -0.690775528 - 0.562341325 -0.575646273 - 0.630957344 -0.460517019 - 0.707945784 -0.345387764 - 0.794328235 -0.230258509 - 0.891250938 -0.115129255 - 1. 0. - 1.12201845 0.115129255 - 1.25892541 0.230258509 - 1.41253754 0.345387764 - 1.58489319 0.460517019 - 1.77827941 0.575646273 - 1.99526231 0.690775528 - 2.23872114 0.805904783 - 2.51188643 0.921034037 - 2.81838293 1.03616329 - 3.16227766 1.15129255 - 3.54813389 1.2664218 - 3.98107171 1.38155106 - 4.46683592 1.49668031 - 5.01187234 1.61180957 - 5.62341325 1.72693882 - 6.30957344 1.84206807 - 7.07945784 1.95719733 - 7.94328235 2.07232658 - 8.91250938 2.18745584 - 10. 2.30258509 - 26.1649637 - 26.1652789 - 26.1656735 - 26.1661666 - 26.1667818 - 26.1675472 - 26.1684966 - 26.1696694 - 26.1711103 - 26.1728682 - 26.1749926 - 26.1775273 - 26.180498 - 26.1838913 - 26.1876193 - 26.1914606 - 26.1949666 - 26.1973126 - 26.1970677 - 26.1918452 - 26.1777842 - 26.1488031 - 26.0955694 - 26.004154 - 25.8544286 - 25.6184534 - 25.2594425 - 24.7323852 - 23.9879433 - 22.9812173 - 21.6855492 - 20.1076351 - 18.2949959 - 16.3261541 - 14.2854038 - 12.2417977 - 10.2489045 - 8.35437038 - 6.60255292 - 5.03255272 - 3.67586322 - 2.55333738 - 1.67193012 - 1.02228613 - 0.578563848 - 0.301619759 - 0.145695492 - 0.0670601251 - 0.0333193933 - 0.0210231159 - 0.0132646894 - 0.0083694532 - 0.00528076797 - 0.00333193933 - 0.00210231159 - 0.00132646894 - 0.00083694532 - 0.000528076797 - 0.000333193933 - 0.000210231159 - 0.000132646894 - 24.0270715 - 24.0273681 - 24.0277396 - 24.0282042 - 24.0287843 - 24.0295072 - 24.0304052 - 24.0315168 - 24.0328863 - 24.0345632 - 24.0365995 - 24.0390453 - 24.0419387 - 24.045289 - 24.0490477 - 24.0530604 - 24.0569881 - 24.0601834 - 24.0614961 - 24.0589776 - 24.0494375 - 24.0278014 - 23.9862115 - 23.9128347 - 23.7904017 - 23.5946559 - 23.2931688 - 22.8454201 - 22.2055513 - 21.329397 - 20.1864789 - 18.7745782 - 17.129571 - 15.3207136 - 13.4292442 - 11.5253533 - 9.66287747 - 7.88789382 - 6.24309985 - 4.76621931 - 3.4876948 - 2.42788673 - 1.59402992 - 0.977965689 - 0.555928628 - 0.291503431 - 0.141893842 - 0.0659126311 - 0.0317145617 - 0.0218519652 - 0.0137876579 - 0.00869942402 - 0.00548896548 - 0.00346330308 - 0.00218519652 - 0.00137876579 - 0.000869942402 - 0.000548896548 - 0.000346330308 - 0.000218519652 - 0.000137876579 - 22.0501145 - 22.0503934 - 22.050743 - 22.0511805 - 22.0517273 - 22.0524093 - 22.0532578 - 22.0543101 - 22.0556096 - 22.0572058 - 22.0591524 - 22.0615038 - 22.0643074 - 22.0675906 - 22.0713365 - 22.075445 - 22.0796677 - 22.0835039 - 22.0860384 - 22.0856905 - 22.0798365 - 22.0642583 - 22.032363 - 21.9741287 - 21.8747873 - 21.7133575 - 21.4613844 - 21.0826172 - 20.5348378 - 19.7753741 - 18.7713146 - 17.5131141 - 16.025882 - 14.3690457 - 12.6193913 - 10.8476229 - 9.10830861 - 7.44630634 - 5.90268937 - 4.51387061 - 3.3092999 - 2.30886431 - 1.52005399 - 0.935828289 - 0.534376655 - 0.281858926 - 0.138230107 - 0.0647938818 - 0.0305555545 - 0.0192792515 - 0.0121643853 - 0.00767520827 - 0.00484272903 - 0.00305555545 - 0.00192792515 - 0.00121643853 - 0.000767520827 - 0.000484272903 - 0.000305555545 - 0.000192792515 - 0.000121643853 - 20.2226768 - 20.222939 - 20.2232678 - 20.2236795 - 20.2241945 - 20.2248375 - 20.2256384 - 20.2266334 - 20.2278648 - 20.2293814 - 20.2312378 - 20.2334911 - 20.2361959 - 20.2393934 - 20.2430919 - 20.2472355 - 20.2516497 - 20.2559556 - 20.2594332 - 20.2608102 - 20.2579413 - 20.2473355 - 20.2234797 - 20.1779153 - 20.0980542 - 19.9658136 - 19.7563348 - 19.4373732 - 18.9703936 - 18.3147791 - 17.436364 - 16.319801 - 14.9805183 - 13.4679374 - 11.8531343 - 10.2064492 - 8.58345254 - 7.02821709 - 5.5802574 - 4.27472599 - 3.14013172 - 2.19590946 - 1.44978297 - 0.895751247 - 0.513848281 - 0.27265364 - 0.13473659 - 0.0636837675 - 0.0301230881 - 0.019814614 - 0.0125021762 - 0.00788833993 - 0.00497720601 - 0.00314040469 - 0.0019814614 - 0.00125021762 - 0.000788833993 - 0.000497720601 - 0.000314040469 - 0.00019814614 - 0.000125021762 - 18.5341152 - 18.5343616 - 18.5346707 - 18.535058 - 18.5355427 - 18.5361485 - 18.5369039 - 18.5378437 - 18.5390089 - 18.5404476 - 18.5422141 - 18.5443676 - 18.5469674 - 18.5500652 - 18.5536895 - 18.5578196 - 18.5623414 - 18.5669761 - 18.5711662 - 18.5738974 - 18.5734265 - 18.5668785 - 18.5496616 - 18.5146609 - 18.4511826 - 18.3436978 - 18.17058 - 17.9033033 - 17.5069636 - 16.9433924 - 16.1781458 - 15.1914821 - 13.9903683 - 12.6143908 - 11.127886 - 9.59977593 - 8.08666305 - 6.63231252 - 5.27480006 - 4.04804782 - 2.97967463 - 2.08868315 - 1.38300707 - 0.857620668 - 0.494285939 - 0.263863094 - 0.131383431 - 0.0626390925 - 0.0300666276 - 0.0179939035 - 0.0113533856 - 0.00716350202 - 0.00451986421 - 0.00285184152 - 0.00179939035 - 0.00113533856 - 0.000716350202 - 0.000451986421 - 0.000285184152 - 0.000179939035 - 0.000113533856 - 16.9745109 - 16.9747424 - 16.9750328 - 16.9753969 - 16.975853 - 16.9764233 - 16.9771352 - 16.978022 - 16.9791233 - 16.9804861 - 16.982164 - 16.9842171 - 16.9867079 - 16.9896956 - 16.9932249 - 16.997303 - 17.0018647 - 17.0067141 - 17.0114265 - 17.0152037 - 17.0166402 - 17.0133808 - 17.0016189 - 16.975391 - 16.9256442 - 16.8390905 - 16.696992 - 16.4742396 - 16.1394396 - 15.6571224 - 14.9933486 - 14.1252485 - 13.0526028 - 11.80563 - 10.4411831 - 9.02563601 - 7.61638931 - 6.25735581 - 4.98536859 - 3.83313817 - 2.82744172 - 1.98686465 - 1.31953078 - 0.821326177 - 0.475633485 - 0.255464231 - 0.128174668 - 0.0616612263 - 0.0298543177 - 0.015403983 - 0.00971925622 - 0.0061324361 - 0.0038693056 - 0.00244136678 - 0.0015403983 - 0.000971925622 - 0.00061324361 - 0.00038693056 - 0.000244136678 - 0.00015403983 - 9.71925622E-05 - 15.5346205 - 15.5348379 - 15.5351107 - 15.5354529 - 15.5358817 - 15.5364183 - 15.5370887 - 15.5379248 - 15.5389647 - 15.5402538 - 15.5418449 - 15.543798 - 15.5461779 - 15.5490494 - 15.5524683 - 15.5564644 - 15.561012 - 15.5659815 - 15.5710603 - 15.5756285 - 15.5785633 - 15.5779485 - 15.5706423 - 15.5516677 - 15.5133884 - 15.444475 - 15.3287559 - 15.1442368 - 14.8628633 - 14.4519948 - 13.8788036 - 13.1184013 - 12.1646498 - 11.0391045 - 9.7906956 - 8.48214512 - 7.17116379 - 5.90218268 - 4.71106756 - 3.62934121 - 2.68297316 - 1.89015041 - 1.25917468 - 0.786762696 - 0.457838983 - 0.247434294 - 0.125096883 - 0.0606980395 - 0.0295993088 - 0.0152589564 - 0.0101334241 - 0.00639375836 - 0.0040341888 - 0.00254540105 - 0.00160603949 - 0.00101334241 - 0.000639375836 - 0.00040341888 - 0.000254540105 - 0.000160603949 - 0.000101334241 - 14.2058328 - 14.2060368 - 14.206293 - 14.2066144 - 14.2070173 - 14.2075219 - 14.2081529 - 14.2089405 - 14.2099214 - 14.2111393 - 14.212646 - 14.2145005 - 14.2167687 - 14.2195192 - 14.2228166 - 14.2267077 - 14.2311984 - 14.2362134 - 14.2415314 - 14.2466799 - 14.2507732 - 14.2522633 - 14.2485727 - 14.2355646 - 14.2068234 - 14.1527245 - 14.0593669 - 13.9075721 - 13.67242 - 13.3241366 - 12.8314572 - 12.1684161 - 11.3241717 - 10.3124876 - 9.17423569 - 7.96749444 - 6.74959196 - 5.56569667 - 4.45105218 - 3.43603612 - 2.54583489 - 1.79825544 - 1.2017454 - 0.753833174 - 0.440854374 - 0.239750702 - 0.122143762 - 0.0597701255 - 0.0293782461 - 0.0151826155 - 0.0106334365 - 0.00670924486 - 0.00423324732 - 0.00267099849 - 0.00168528611 - 0.00106334365 - 0.000670924486 - 0.000423324732 - 0.000267099849 - 0.000168528611 - 0.000106334365 - 12.9801254 - 12.9803168 - 12.9805572 - 12.980859 - 12.981238 - 12.9817122 - 12.9823056 - 12.983047 - 12.9839709 - 12.9851205 - 12.9865452 - 12.9883032 - 12.9904603 - 12.9930878 - 12.9962558 - 13.0000247 - 13.0044253 - 13.0094258 - 13.0148791 - 13.0204354 - 13.0254054 - 13.0285506 - 13.0277692 - 13.0196412 - 12.9987972 - 12.9570932 - 12.8826259 - 12.7587476 - 12.5634455 - 12.2697756 - 11.8483523 - 11.2729121 - 10.529036 - 9.6236686 - 8.58976621 - 7.47995296 - 6.35034249 - 5.24686679 - 4.20452429 - 3.25263659 - 2.41561682 - 1.71090972 - 1.14709608 - 0.722445555 - 0.424633204 - 0.232394344 - 0.119307494 - 0.0588761487 - 0.0291516576 - 0.0151597245 - 0.00842477705 - 0.00531567496 - 0.00335396415 - 0.00211620832 - 0.00133523718 - 0.000842477705 - 0.000531567496 - 0.000335396415 - 0.000211620832 - 0.000133523718 - 8.42477705E-05 - 11.8500275 - 11.8502071 - 11.8504327 - 11.8507159 - 11.8510713 - 11.8515168 - 11.8520746 - 11.852772 - 11.8536424 - 11.8547263 - 11.8560719 - 11.8577359 - 11.8597836 - 11.8622868 - 11.8653206 - 11.8689548 - 11.8732394 - 11.8781779 - 11.8836832 - 11.8895062 - 11.8951206 - 11.8995466 - 11.9010834 - 11.8969192 - 11.8825806 - 11.851204 - 11.7926374 - 11.6924919 - 11.5314267 - 11.2852344 - 10.9266117 - 10.4296237 - 9.7772851 - 8.97074018 - 8.03540779 - 7.01787167 - 5.97213866 - 4.94472053 - 3.97073291 - 3.07858988 - 2.29193273 - 1.62785717 - 1.09506463 - 0.692511929 - 0.409130913 - 0.2253456 - 0.116579793 - 0.0580126558 - 0.0289477931 - 0.0151278576 - 0.00841075529 - 0.00492179651 - 0.00310544366 - 0.00195940248 - 0.00123629939 - 0.000780052179 - 0.000492179651 - 0.000310544366 - 0.000195940248 - 0.000123629939 - 7.80052179E-05 - 10.8085819 - 10.8087503 - 10.8089619 - 10.8092276 - 10.8095611 - 10.8099794 - 10.8105034 - 10.8111591 - 10.8119781 - 10.8129992 - 10.8142686 - 10.8158416 - 10.817782 - 10.8201618 - 10.8230588 - 10.8265498 - 10.8306994 - 10.8355386 - 10.8410293 - 10.8470041 - 10.853072 - 10.8584686 - 10.8618301 - 10.8608587 - 10.8518479 - 10.8290362 - 10.783801 - 10.7037595 - 10.5720041 - 10.3669319 - 10.0634294 - 9.63637758 - 9.06710913 - 8.35198174 - 7.50944176 - 6.57968941 - 5.61375222 - 4.65833791 - 3.74897148 - 2.91337313 - 2.17441718 - 1.54885865 - 1.04550381 - 0.663949935 - 0.394306698 - 0.21858646 - 0.113954836 - 0.0571782126 - 0.0287406795 - 0.0150799523 - 0.00838809431 - 0.00559767958 - 0.00353189704 - 0.00222847638 - 0.00140607354 - 0.000887172426 - 0.000559767958 - 0.000353189704 - 0.000222847638 - 0.000140607354 - 8.87172426E-05 - 9.84931108 - 9.84946893 - 9.8496673 - 9.84991651 - 9.85022938 - 9.85062191 - 9.85111393 - 9.85172996 - 9.85250013 - 9.85346121 - 9.8546577 - 9.85614273 - 9.85797871 - 9.86023704 - 9.86299652 - 9.86633882 - 9.87033948 - 9.87505117 - 9.88047429 - 9.88650865 - 9.89287379 - 9.89898459 - 9.90375956 - 9.90533573 - 9.90065722 - 9.88491208 - 9.85080673 - 9.78773063 - 9.68097585 - 9.51138325 - 9.25606257 - 8.89107287 - 8.39681843 - 7.76584049 - 7.01031005 - 6.16394188 - 5.27400113 - 4.3868429 - 3.53857556 - 2.75649309 - 2.06272585 - 1.47368618 - 0.998274201 - 0.636681371 - 0.380121387 - 0.212099296 - 0.111426978 - 0.0563698768 - 0.028539381 - 0.0150461497 - 0.0083876929 - 0.00491582846 - 0.00151736168 - 0.000957390496 - 0.000604072565 - 0.000381144022 - 0.00024048562 - 0.000151736168 - 9.57390496E-05 - 6.04072565E-05 - 3.81144022E-05 - 8.96618645 - 8.96633437 - 8.9665203 - 8.96675392 - 8.96704732 - 8.96741554 - 8.9678773 - 8.96845576 - 8.96917948 - 8.97008342 - 8.97121028 - 8.97261077 - 8.97434557 - 8.97648488 - 8.97910762 - 8.98229838 - 8.98614058 - 8.99070331 - 8.99601782 - 9.00203764 - 9.00857317 - 9.0151875 - 9.02103492 - 9.02461806 - 9.02343436 - 9.01348468 - 8.98862723 - 8.93980964 - 8.85429871 - 8.71520272 - 8.50182782 - 8.19166682 - 7.76481933 - 7.21090894 - 6.53660993 - 5.76926956 - 4.95175054 - 4.12939706 - 3.33892095 - 2.6074847 - 1.95653293 - 1.40212583 - 0.953244606 - 0.610632998 - 0.366537602 - 0.205868159 - 0.108988504 - 0.0555866803 - 0.0283416518 - 0.0150076716 - 0.00838620514 - 0.00493668711 - 0.00353773777 - 0.00223216163 - 0.00140839877 - 0.00088863955 - 0.000560693651 - 0.000353773777 - 0.000223216163 - 0.000140839877 - 8.8863955E-05 - 8.153598 - 8.15373657 - 8.15391078 - 8.15412972 - 8.15440475 - 8.15475001 - 8.15518317 - 8.15572607 - 8.15640572 - 8.15725526 - 8.15831534 - 8.15963477 - 8.16127201 - 8.16329548 - 8.16578342 - 8.16882185 - 8.17249959 - 8.17689796 - 8.18207215 - 8.1880189 - 8.19462249 - 8.20156801 - 8.20820583 - 8.21334577 - 8.21495354 - 8.2097239 - 8.19250998 - 8.15562329 - 8.08809214 - 7.97510701 - 7.79810071 - 7.53616387 - 7.16959348 - 6.68590334 - 6.08708491 - 5.3944232 - 4.6459168 - 3.88519277 - 3.14941933 - 2.46591016 - 1.85553151 - 1.33397503 - 0.910290781 - 0.585734979 - 0.353520521 - 0.199877718 - 0.106634445 - 0.0548262964 - 0.0281491974 - 0.0149709845 - 0.00838166385 - 0.00490482416 - 0.00509966305 - 0.00395590895 - 0.00249600981 - 0.00157487572 - 0.000993679402 - 0.000626969317 - 0.000395590895 - 0.000249600981 - 0.000157487572 - 7.40632504 - 7.40645482 - 7.406618 - 7.40682311 - 7.40708082 - 7.40740444 - 7.40781051 - 7.40831979 - 7.40895771 - 7.40975572 - 7.41075232 - 7.41199425 - 7.41353764 - 7.41544889 - 7.41780486 - 7.42069196 - 7.42420207 - 7.42842547 - 7.43343576 - 7.43926361 - 7.44585341 - 7.45298997 - 7.46018637 - 7.46650901 - 7.47031892 - 7.46890219 - 7.45796762 - 7.43101571 - 7.3786373 - 7.28791851 - 7.14231618 - 6.92260831 - 6.60967972 - 6.18964191 - 5.66061271 - 5.03826823 - 4.35547422 - 3.65344942 - 2.96951328 - 2.33135779 - 1.75943086 - 1.26904276 - 0.869295911 - 0.561921584 - 0.341037019 - 0.194113027 - 0.104359136 - 0.0540871639 - 0.0279604738 - 0.0149337794 - 0.00837700982 - 0.00489659124 - 0.00286425263 - 0.00548095688 - 0.0615575851 - 0.0388402104 - 0.024506516 - 0.0154625663 - 0.00975621975 - 0.00615575851 - 0.00388402104 - 6.71951225 - 6.71963376 - 6.71978655 - 6.71997864 - 6.72022003 - 6.72052325 - 6.7209039 - 6.7213814 - 6.72197983 - 6.72272893 - 6.72366521 - 6.7248332 - 6.72628667 - 6.72808971 - 6.73031733 - 6.73305508 - 6.73639671 - 6.74043847 - 6.74526769 - 6.75094186 - 6.75745277 - 6.76466719 - 6.77223218 - 6.77942815 - 6.78494858 - 6.78658133 - 6.78076946 - 6.76204555 - 6.72237918 - 6.65056869 - 6.53197051 - 6.34907944 - 6.08366019 - 5.72102384 - 5.25619031 - 4.6997844 - 4.07946159 - 3.43341231 - 2.79867114 - 2.20344213 - 1.66795731 - 1.20714855 - 0.830149003 - 0.53913081 - 0.329055795 - 0.188560153 - 0.102157527 - 0.0533673496 - 0.0277755197 - 0.014899945 - 0.00837189984 - 0.00489500261 - 0.00292400599 - 0.00202530697 - 0.00127788231 - 0.000806289226 - 0.000508734109 - 0.000320989523 - 0.000202530697 - 0.000127788231 - 8.06289226E-05 - 6.08864399 - 6.08875772 - 6.08890075 - 6.08908059 - 6.08930662 - 6.08959061 - 6.08994723 - 6.09039474 - 6.09095585 - 6.09165863 - 6.09253766 - 6.09363528 - 6.0950028 - 6.09670184 - 6.09880515 - 6.10139684 - 6.10457099 - 6.10842762 - 6.113064 - 6.11855812 - 6.12493967 - 6.13214146 - 6.13992047 - 6.147735 - 6.15455701 - 6.15859909 - 6.15693192 - 6.14498067 - 6.1159255 - 6.06010041 - 5.96462391 - 5.81368987 - 5.59014906 - 5.27901178 - 4.87291769 - 4.37806293 - 3.81698971 - 3.22435396 - 2.63638144 - 2.0818003 - 1.58085242 - 1.14812228 - 0.792745809 - 0.517303925 - 0.317546855 - 0.183206168 - 0.100024188 - 0.0526657133 - 0.0275934923 - 0.0148645861 - 0.00836734802 - 0.0048963336 - 0.00291657952 - 0.00200517933 - 0.00232836919 - 0.0150446033 - 0.00949250295 - 0.00598936446 - 0.00377903349 - 0.00238440894 - 0.00150446033 - 5.50952141 - 5.50962783 - 5.50976168 - 5.50992999 - 5.51014158 - 5.51040747 - 5.51074144 - 5.51116067 - 5.51168653 - 5.51234551 - 5.5131703 - 5.51420104 - 5.51548661 - 5.51708601 - 5.51906949 - 5.52151911 - 5.52452822 - 5.5281988 - 5.53263496 - 5.53793004 - 5.54414343 - 5.55126084 - 5.55912918 - 5.5673534 - 5.57513842 - 5.58105502 - 5.5827081 - 5.57629233 - 5.55604585 - 5.51367121 - 5.43790436 - 5.31458542 - 5.12778494 - 4.86261512 - 4.5099808 - 4.07229975 - 3.56724669 - 3.02557781 - 2.48214894 - 1.96609164 - 1.49787306 - 1.0918028 - 0.756987623 - 0.496385399 - 0.306482838 - 0.178038526 - 0.0979543256 - 0.0519803885 - 0.0274140085 - 0.0148293044 - 0.00836258747 - 0.00489567842 - 0.00293783192 - 0.00174431162 - 0.00124009692 - 0.0152486166 - 0.00962122663 - 0.00607058361 - 0.00383027931 - 0.00241674286 - 0.00152486166 - 4.97824174 - 4.97834128 - 4.9784665 - 4.97862399 - 4.97882198 - 4.97907084 - 4.97938349 - 4.97977607 - 4.98026868 - 4.98088628 - 4.98165973 - 4.98262703 - 4.98383463 - 4.98533886 - 4.98720722 - 4.98951933 - 4.99236701 - 4.99585268 - 5.00008476 - 5.00516775 - 5.01118391 - 5.01816098 - 5.02601863 - 5.03448268 - 5.04295154 - 5.05029707 - 5.05457792 - 5.05264915 - 5.03966954 - 5.00855413 - 4.94951041 - 4.84994602 - 4.69522561 - 4.47087673 - 4.16663525 - 3.78178683 - 3.32950151 - 2.83642419 - 2.33549149 - 1.85599215 - 1.41879174 - 1.03803813 - 0.722781373 - 0.476322918 - 0.295836773 - 0.173045256 - 0.0959437135 - 0.0513097233 - 0.0272370068 - 0.0147943879 - 0.00835766896 - 0.00489549681 - 0.00293674338 - 0.0017908797 - 0.00129381553 - 0.00462269196 - 0.0212959642 - 0.013436845 - 0.00847807605 - 0.00534930435 - 0.00337518287 - 4.49117962 - 4.49127272 - 4.49138983 - 4.49153714 - 4.49172236 - 4.4919552 - 4.49224779 - 4.49261527 - 4.49307653 - 4.49365507 - 4.49437999 - 4.4952872 - 4.49642074 - 4.49783425 - 4.49959237 - 4.50177195 - 4.50446262 - 4.50776612 - 4.51179309 - 4.51665579 - 4.52245363 - 4.52924736 - 4.53701518 - 4.54558157 - 4.5545053 - 4.56291027 - 4.56923896 - 4.57091129 - 4.56388381 - 4.54213992 - 4.49721514 - 4.41798848 - 4.29114498 - 4.10286279 - 3.8421903 - 3.50590038 - 3.10310442 - 2.65627613 - 2.19593996 - 1.75119222 - 1.34339518 - 0.986684604 - 0.690039158 - 0.457066884 - 0.285583478 - 0.168215035 - 0.0939877131 - 0.0506525253 - 0.027061463 - 0.0147590591 - 0.00835272277 - 0.00489468575 - 0.00293835804 - 0.0017908618 - 0.00118556692 - 0.00136811865 - 0.0180735029 - 0.0114036094 - 0.0071951911 - 0.00453985867 - 0.00286445717 - 4.04496928 - 4.04505632 - 4.04516582 - 4.04530356 - 4.04547678 - 4.04569456 - 4.04596827 - 4.04631212 - 4.04674386 - 4.04728557 - 4.04796465 - 4.048815 - 4.04987831 - 4.05120553 - 4.05285834 - 4.05491063 - 4.05744937 - 4.06057464 - 4.0643977 - 4.06903578 - 4.07460075 - 4.08117883 - 4.08879484 - 4.09735332 - 4.10654517 - 4.11570441 - 4.12359706 - 4.12812438 - 4.12593134 - 4.11193793 - 4.07886959 - 4.01696977 - 3.91423281 - 3.75765426 - 3.53599507 - 3.24408885 - 2.88748527 - 2.48456552 - 2.06303938 - 1.65139161 - 1.27148393 - 0.937606959 - 0.658677825 - 0.438570611 - 0.27569929 - 0.163537412 - 0.0920820429 - 0.0500072991 - 0.0268872752 - 0.0147234781 - 0.00834749967 - 0.00489440789 - 0.0029380571 - 0.00179069444 - 0.00110396008 - 0.0006324403 - 0.000399042852 - 0.000251779018 - 0.000158861821 - 0.000100235033 - 6.324403E-05 - 3.63648523 - 3.63656658 - 3.63666894 - 3.63679769 - 3.63695964 - 3.63716327 - 3.63741923 - 3.63774087 - 3.63814481 - 3.6386518 - 3.63928763 - 3.64008425 - 3.64108105 - 3.64232631 - 3.64387878 - 3.64580919 - 3.64820149 - 3.65115343 - 3.6547756 - 3.6591878 - 3.66451071 - 3.6708497 - 3.67826614 - 3.68672922 - 3.69603795 - 3.70570075 - 3.71475526 - 3.7215114 - 3.72320583 - 3.71557556 - 3.69240528 - 3.64519041 - 3.56319516 - 3.43434177 - 3.24742668 - 2.99586004 - 2.68214868 - 2.32077806 - 1.93635285 - 1.55629724 - 1.20287021 - 0.890678244 - 0.628618811 - 0.420789784 - 0.266161696 - 0.159002035 - 0.0902227763 - 0.0493724453 - 0.0267141325 - 0.0146876527 - 0.00834212574 - 0.00489384014 - 0.0029382967 - 0.00179103419 - 0.00109706737 - 0.000689210129 - 0.000434862193 - 0.000274379494 - 0.000173121757 - 0.000109232444 - 6.89210129E-05 - 3.26281979 - 3.2628958 - 3.26299145 - 3.26311178 - 3.26326313 - 3.26345347 - 3.26369277 - 3.2639935 - 3.26437129 - 3.26484561 - 3.26544068 - 3.26618659 - 3.2671205 - 3.26828809 - 3.26974516 - 3.27155922 - 3.27381095 - 3.27659523 - 3.28002093 - 3.28420866 - 3.28928472 - 3.29536854 - 3.30254983 - 3.31084918 - 3.32015366 - 3.33011568 - 3.33999993 - 3.34846193 - 3.3532448 - 3.35079506 - 3.33583441 - 3.30099651 - 3.23675546 - 3.132022 - 2.97588018 - 2.7607686 - 2.48666762 - 2.16445631 - 1.81546593 - 1.46562096 - 1.13737568 - 0.845779763 - 0.59978762 - 0.403682669 - 0.256949345 - 0.154599199 - 0.0884061065 - 0.0487468004 - 0.0265414939 - 0.0146511972 - 0.00833655397 - 0.00489330983 - 0.00293836859 - 0.00179006879 - 0.00110013643 - 0.000677445281 - 0.000427439076 - 0.000269695824 - 0.000170166561 - 0.000107367841 - 6.77445281E-05 - 2.92126017 - 2.92133118 - 2.92142054 - 2.92153297 - 2.9216744 - 2.92185227 - 2.92207593 - 2.92235706 - 2.92271029 - 2.92315389 - 2.92371062 - 2.92440876 - 2.92528333 - 2.9263775 - 2.92774413 - 2.9294475 - 2.93156487 - 2.93418783 - 2.93742279 - 2.94138971 - 2.946218 - 2.95203696 - 2.95895775 - 2.96704152 - 2.97624643 - 2.98634308 - 2.99678509 - 3.00651905 - 3.01371991 - 3.01544742 - 3.00724753 - 2.98278014 - 2.933655 - 2.84979474 - 2.72076046 - 2.53840465 - 2.30067535 - 2.01520118 - 1.69999233 - 1.37907938 - 1.07482835 - 0.802800976 - 0.572114139 - 0.387209612 - 0.248042042 - 0.150319737 - 0.0866282177 - 0.0481289606 - 0.0263691264 - 0.0146143207 - 0.00833084503 - 0.00489273662 - 0.00293815859 - 0.0017902894 - 0.00110539606 - 0.000664655516 - 0.000419369279 - 0.000264604127 - 0.000166953917 - 0.0001053408 - 6.64655516E-05 - 2.60927255 - 2.60933889 - 2.60942237 - 2.6095274 - 2.60965954 - 2.60982575 - 2.61003476 - 2.61029753 - 2.61062775 - 2.61104254 - 2.61156328 - 2.61221654 - 2.61303529 - 2.61406024 - 2.61534143 - 2.6169399 - 2.61892941 - 2.62139803 - 2.62444908 - 2.6282008 - 2.6327837 - 2.63833354 - 2.6449773 - 2.65280769 - 2.6618397 - 2.6719404 - 2.68271988 - 2.69336884 - 2.70242884 - 2.70748737 - 2.70481146 - 2.68897924 - 2.65265308 - 2.58676067 - 2.48147493 - 2.32838223 - 2.12385601 - 1.87267101 - 1.58957925 - 1.29639568 - 1.01505996 - 0.761638773 - 0.545532145 - 0.371333418 - 0.239420688 - 0.146154898 - 0.0848855107 - 0.0475176575 - 0.026196224 - 0.0145768513 - 0.00832477968 - 0.00489197115 - 0.00293820136 - 0.00179015834 - 0.00110112529 - 0.000681650813 - 0.000430092587 - 0.000271370076 - 0.000171222943 - 0.000108034373 - 6.81650813E-05 - 2.3245018 - 2.32456377 - 2.32464176 - 2.32473989 - 2.32486336 - 2.32501867 - 2.325214 - 2.32545959 - 2.32576828 - 2.32615613 - 2.32664316 - 2.32725434 - 2.32802069 - 2.32898058 - 2.33018128 - 2.33168066 - 2.33354897 - 2.33587059 - 2.33874536 - 2.34228894 - 2.34663138 - 2.35191216 - 2.35826953 - 2.36582022 - 2.37462426 - 2.38462689 - 2.39556705 - 2.4068393 - 2.41729519 - 2.42497444 - 2.42677165 - 2.4180809 - 2.39252954 - 2.3420207 - 2.25742753 - 2.13032846 - 1.95593368 - 1.73657765 - 1.48391138 - 1.21730253 - 0.957903452 - 0.722196189 - 0.519979757 - 0.356018544 - 0.231067171 - 0.142096348 - 0.0831745527 - 0.0469114675 - 0.0260225652 - 0.0145383165 - 0.0083185797 - 0.00489122722 - 0.00293811222 - 0.00179015305 - 0.0011013634 - 0.000680111719 - 0.000429121484 - 0.000270757352 - 0.00017083634 - 0.000107790443 - 6.80111719E-05 - 2.06478787 - 2.06484577 - 2.06491863 - 2.06501032 - 2.06512568 - 2.06527081 - 2.06545335 - 2.0656829 - 2.06597146 - 2.06633408 - 2.06678956 - 2.06736131 - 2.06807849 - 2.06897728 - 2.07010223 - 2.07150814 - 2.07326177 - 2.07544372 - 2.07815007 - 2.08149325 - 2.08560162 - 2.09061622 - 2.09668277 - 2.10393592 - 2.11247086 - 2.1222956 - 2.13325462 - 2.14491187 - 2.15637992 - 2.16608436 - 2.17146346 - 2.16863184 - 2.15209324 - 2.11468022 - 2.04801671 - 1.94387468 - 1.79666085 - 1.60668026 - 1.38271321 - 1.14154611 - 0.903191975 - 0.684380594 - 0.495399454 - 0.341231528 - 0.222964456 - 0.138136101 - 0.0814920819 - 0.046309142 - 0.0258476014 - 0.0144988151 - 0.00831201367 - 0.00489041217 - 0.00293804955 - 0.0017901088 - 0.00110094336 - 0.000679425389 - 0.000428688439 - 0.000270484119 - 0.000170663942 - 0.000107681667 - 6.79425389E-05 - 1.82818831 - 1.82824239 - 1.82831045 - 1.8283961 - 1.82850387 - 1.82863946 - 1.82881001 - 1.8290245 - 1.82929418 - 1.82963313 - 1.83005897 - 1.83059367 - 1.83126462 - 1.83210581 - 1.83315929 - 1.83447682 - 1.8361217 - 1.83817074 - 1.840716 - 1.84386623 - 1.84774712 - 1.85249941 - 1.85827328 - 1.86521615 - 1.87345014 - 1.8830331 - 1.89389522 - 1.90574045 - 1.9179002 - 1.92912789 - 1.93733062 - 1.93925592 - 1.93019709 - 1.90385944 - 1.85263835 - 1.76865117 - 1.64580805 - 1.48277675 - 1.28574874 - 1.06889008 - 0.850758941 - 0.648101653 - 0.471738221 - 0.326940745 - 0.215096364 - 0.134266656 - 0.0798346938 - 0.0457094397 - 0.0256708483 - 0.0144581549 - 0.00830500348 - 0.004889644 - 0.00293791584 - 0.00179012714 - 0.00109719049 - 0.000681258089 - 0.000429844795 - 0.00027121373 - 0.000171124295 - 0.000107972131 - 6.81258089E-05 - 1.61298708 - 1.61303756 - 1.61310109 - 1.61318104 - 1.61328165 - 1.61340823 - 1.61356747 - 1.61376775 - 1.61401959 - 1.61433618 - 1.614734 - 1.61523364 - 1.61586079 - 1.61664738 - 1.61763297 - 1.61886639 - 1.62040753 - 1.62232931 - 1.62471966 - 1.62768321 - 1.63134213 - 1.63583542 - 1.64131508 - 1.64793703 - 1.65584332 - 1.66513071 - 1.67579829 - 1.68766479 - 1.70024403 - 1.71256676 - 1.7229427 - 1.72867252 - 1.72575603 - 1.70870858 - 1.67069497 - 1.604288 - 1.50315701 - 1.36469564 - 1.19281895 - 0.999118875 - 0.800439389 - 0.61326942 - 0.448946969 - 0.313116559 - 0.207447637 - 0.130480761 - 0.0781993155 - 0.0451110551 - 0.0254918071 - 0.0144161676 - 0.00829759133 - 0.00488951539 - 0.00293781279 - 0.00179008515 - 0.0011009588 - 0.000681310995 - 0.000429878176 - 0.000271234792 - 0.000171137584 - 0.000107980516 - 6.81310995E-05 - 1.41766991 - 1.41771696 - 1.41777618 - 1.41785071 - 1.41794449 - 1.41806249 - 1.41821095 - 1.41839769 - 1.41863253 - 1.41892778 - 1.41929885 - 1.41976501 - 1.42035029 - 1.42108464 - 1.42200518 - 1.42315786 - 1.42459914 - 1.42639808 - 1.42863827 - 1.43141983 - 1.43486074 - 1.43909695 - 1.44428005 - 1.45057079 - 1.45812522 - 1.46706963 - 1.47745758 - 1.48920106 - 1.50196479 - 1.51501285 - 1.52699899 - 1.53570503 - 1.53775917 - 1.52842137 - 1.50160734 - 1.45042077 - 1.36849931 - 1.25229055 - 1.10375876 - 0.932039913 - 0.752071971 - 0.579792964 - 0.42698003 - 0.299731565 - 0.200003781 - 0.126771608 - 0.0765828994 - 0.044512597 - 0.0253100308 - 0.014372568 - 0.00828970646 - 0.00488756396 - 0.00293776718 - 0.00179002797 - 0.00110094535 - 0.000681289726 - 0.000429864756 - 0.000271226325 - 0.000171132242 - 0.000107977145 - 6.81289726E-05 - 1.24085909 - 1.24090285 - 1.24095793 - 1.24102725 - 1.24111448 - 1.24122425 - 1.24136235 - 1.24153608 - 1.24175459 - 1.24202933 - 1.24237468 - 1.24280862 - 1.24335359 - 1.24403756 - 1.24489531 - 1.2459699 - 1.24731443 - 1.24899396 - 1.25108766 - 1.2536908 - 1.25691653 - 1.26089662 - 1.26578039 - 1.27173021 - 1.2789111 - 1.28747082 - 1.29750511 - 1.30900053 - 1.32174558 - 1.33519914 - 1.34830736 - 1.35926824 - 1.36526556 - 1.36223781 - 1.34482099 - 1.30669695 - 1.24163886 - 1.14543877 - 1.01843594 - 0.867485808 - 0.705501537 - 0.547579231 - 0.405793937 - 0.286760831 - 0.192751033 - 0.123132623 - 0.0749824791 - 0.0439128517 - 0.0251248796 - 0.0143272646 - 0.00828124833 - 0.00488639877 - 0.00293762921 - 0.00179003376 - 0.00110090151 - 0.000681115389 - 0.000429754757 - 0.00027115692 - 0.00017108845 - 0.000107949514 - 6.81115389E-05 - 1.0812188 - 1.0812594 - 1.0813105 - 1.08137481 - 1.08145574 - 1.08155758 - 1.08168573 - 1.08184694 - 1.08204972 - 1.08230471 - 1.08262529 - 1.08302817 - 1.08353425 - 1.08416959 - 1.08496664 - 1.08596564 - 1.0872163 - 1.08877973 - 1.0907305 - 1.09315882 - 1.09617248 - 1.09989817 - 1.10448135 - 1.11008339 - 1.11687398 - 1.12501561 - 1.13463561 - 1.1457792 - 1.15833508 - 1.17192345 - 1.18573708 - 1.19833167 - 1.20737877 - 1.2094297 - 1.19980089 - 1.17277609 - 1.12239363 - 1.04404232 - 0.936752202 - 0.805317762 - 0.660582523 - 0.516532837 - 0.385345894 - 0.274182013 - 0.185676429 - 0.119557528 - 0.0733950476 - 0.043310475 - 0.0249357971 - 0.0142800046 - 0.00827214821 - 0.00488508471 - 0.00293746431 - 0.00179008871 - 0.00110077856 - 0.000681261813 - 0.000429847145 - 0.000271215213 - 0.00017112523 - 0.000107972721 - 6.81261813E-05 - 0.937358464 - 0.937396041 - 0.937443338 - 0.937502867 - 0.937577785 - 0.937672065 - 0.937790696 - 0.937939949 - 0.938127698 - 0.938363823 - 0.938660712 - 0.939033879 - 0.939502728 - 0.940091483 - 0.940830326 - 0.941756743 - 0.942917136 - 0.944368663 - 0.946181306 - 0.948440067 - 0.951247068 - 0.954723272 - 0.959009075 - 0.964262803 - 0.97065537 - 0.978358413 - 0.987522097 - 0.998236803 - 1.01047128 - 1.02397793 - 1.03815577 - 1.05186549 - 1.06320331 - 1.06926849 - 1.06601058 - 1.04831855 - 1.01059106 - 0.948027098 - 0.858645418 - 0.745430586 - 0.617184033 - 0.486556694 - 0.365591941 - 0.261975155 - 0.178767845 - 0.116040324 - 0.0718177812 - 0.0427041112 - 0.0247422107 - 0.0142305115 - 0.00826239243 - 0.00488358983 - 0.00293727661 - 0.00179006079 - 0.00110085704 - 0.000681264237 - 0.000429848674 - 0.000271216178 - 0.000171125839 - 0.000107973105 - 6.81264237E-05 - 0.807767075 - 0.807801819 - 0.807845553 - 0.807900597 - 0.807969872 - 0.808057054 - 0.808166758 - 0.808304788 - 0.808478432 - 0.808696837 - 0.808971477 - 0.809316728 - 0.809750581 - 0.810295517 - 0.810979562 - 0.811837584 - 0.8129128 - 0.814258562 - 0.81594037 - 0.81803806 - 0.820648028 - 0.823885188 - 0.827884159 - 0.832798813 - 0.838798739 - 0.846060452 - 0.854749922 - 0.864991636 - 0.876817481 - 0.890087078 - 0.904370417 - 0.918785895 - 0.9317959 - 0.94098397 - 0.942879431 - 0.932961702 - 0.906052731 - 0.857335258 - 0.784088884 - 0.687757853 - 0.575196708 - 0.457554492 - 0.34648511 - 0.250121978 - 0.172014229 - 0.112575157 - 0.0702478723 - 0.0420924131 - 0.024543515 - 0.014178522 - 0.0082518256 - 0.00488194209 - 0.00293707115 - 0.00178998335 - 0.00110084718 - 0.000681259642 - 0.000429845774 - 0.000271214348 - 0.000171124685 - 0.000107972377 - 6.81259642E-05 - 0.690803152 - 0.690835311 - 0.690875791 - 0.69092674 - 0.690990865 - 0.691071566 - 0.691173121 - 0.691300905 - 0.691461668 - 0.691663888 - 0.691918203 - 0.692237943 - 0.692639803 - 0.693144658 - 0.693778556 - 0.694573935 - 0.695571064 - 0.696819745 - 0.698381265 - 0.700330566 - 0.702758512 - 0.70577404 - 0.709505789 - 0.714102455 - 0.719730749 - 0.726569048 - 0.734793907 - 0.744555244 - 0.755934353 - 0.768877213 - 0.783094421 - 0.797920231 - 0.812129568 - 0.823728652 - 0.829768825 - 0.826289671 - 0.80856945 - 0.77190759 - 0.7130832 - 0.632273825 - 0.53454046 - 0.429435717 - 0.327974358 - 0.238604583 - 0.165405844 - 0.109156284 - 0.0686825269 - 0.0414739901 - 0.0243390181 - 0.0141238102 - 0.00824032123 - 0.00488009955 - 0.00293683112 - 0.00178995802 - 0.00110080691 - 0.000681297415 - 0.000429869608 - 0.000271229386 - 0.000171134173 - 0.000107978363 - 6.81297415E-05 - 0.584746675 - 0.584776557 - 0.58481417 - 0.584861514 - 0.584921101 - 0.584996095 - 0.585090471 - 0.585209226 - 0.58535864 - 0.585546598 - 0.585782998 - 0.58608025 - 0.586453901 - 0.586923403 - 0.587513051 - 0.588253126 - 0.589181271 - 0.590344114 - 0.591799163 - 0.593616935 - 0.595883249 - 0.59870151 - 0.602194656 - 0.606506177 - 0.611799251 - 0.618252376 - 0.626049172 - 0.635358628 - 0.646300796 - 0.658891115 - 0.672955354 - 0.688007383 - 0.703086419 - 0.716563122 - 0.725951023 - 0.727807444 - 0.717873435 - 0.691658096 - 0.645638609 - 0.578988033 - 0.495169999 - 0.402122736 - 0.310005364 - 0.227403553 - 0.158934283 - 0.105778171 - 0.0671189811 - 0.0408474611 - 0.0241280391 - 0.0140660397 - 0.00822784624 - 0.00487799498 - 0.0029365472 - 0.00178991961 - 0.0011007929 - 0.000681291629 - 0.000429865957 - 0.000271227083 - 0.00017113272 - 0.000107977446 - 6.81291629E-05 - 0.487898048 - 0.487926007 - 0.487961201 - 0.4880055 - 0.488061256 - 0.488131429 - 0.488219742 - 0.488330873 - 0.488470702 - 0.488646614 - 0.488867881 - 0.489146135 - 0.489495952 - 0.489935581 - 0.490487828 - 0.491181148 - 0.492050944 - 0.493141162 - 0.494506079 - 0.496212435 - 0.4983417 - 0.500992497 - 0.504282774 - 0.508351354 - 0.513358 - 0.51948071 - 0.526908144 - 0.535824093 - 0.546379548 - 0.558646275 - 0.572544568 - 0.587737363 - 0.603485978 - 0.618472072 - 0.63061228 - 0.636931348 - 0.633618171 - 0.616447699 - 0.581750188 - 0.527930598 - 0.457074281 - 0.375557963 - 0.292523899 - 0.21649643 - 0.152591979 - 0.102435689 - 0.0655544701 - 0.0402113778 - 0.0239098378 - 0.0140048508 - 0.00821421129 - 0.0048755908 - 0.00293620032 - 0.00178986767 - 0.00110067428 - 0.00068125308 - 0.000429841634 - 0.000271211736 - 0.000171123037 - 0.000107971337 - 6.8125308E-05 - 0.398696083 - 0.398722494 - 0.398755739 - 0.398797586 - 0.398850257 - 0.398916549 - 0.39899998 - 0.399104971 - 0.399237081 - 0.399403293 - 0.399612375 - 0.399875331 - 0.400205957 - 0.40062153 - 0.401143662 - 0.401799334 - 0.40262216 - 0.403653902 - 0.404946249 - 0.40656289 - 0.408581822 - 0.411097812 - 0.414224806 - 0.41809789 - 0.422874136 - 0.428731233 - 0.435862066 - 0.444462683 - 0.454709607 - 0.466721144 - 0.480495901 - 0.495820933 - 0.512143822 - 0.52840995 - 0.542883437 - 0.553003023 - 0.555375429 - 0.546066848 - 0.521372836 - 0.479130493 - 0.420267747 - 0.349707732 - 0.275481008 - 0.205857448 - 0.146371274 - 0.0991241894 - 0.0639862133 - 0.0395642891 - 0.0236836666 - 0.0139398994 - 0.0081993016 - 0.0048728883 - 0.00293579036 - 0.00178983188 - 0.00110078291 - 0.000681286008 - 0.000429862411 - 0.000271224845 - 0.000171131308 - 0.000107976556 - 6.81286008E-05 - 0.315825579 - 0.315850806 - 0.31588256 - 0.315922531 - 0.315972842 - 0.316036166 - 0.316115863 - 0.316216158 - 0.316342366 - 0.31650116 - 0.316700926 - 0.316952187 - 0.317268143 - 0.317665333 - 0.318164456 - 0.318791375 - 0.31957834 - 0.320565467 - 0.321802487 - 0.323350801 - 0.325285803 - 0.327699417 - 0.330702688 - 0.334428101 - 0.339031074 - 0.344689677 - 0.35160105 - 0.359972184 - 0.370001611 - 0.381847118 - 0.395573248 - 0.411071358 - 0.427945848 - 0.445365442 - 0.461891907 - 0.475325761 - 0.482653266 - 0.480234422 - 0.464404615 - 0.432592861 - 0.384774475 - 0.324560038 - 0.258837949 - 0.195459111 - 0.140263376 - 0.0958395795 - 0.062411466 - 0.0389047157 - 0.0234487038 - 0.0138707917 - 0.0081829422 - 0.00486978259 - 0.00293530758 - 0.00178974778 - 0.00110077117 - 0.000681259082 - 0.000429845421 - 0.000271214125 - 0.000171124544 - 0.000107972288 - 6.81259082E-05 - 0.238293782 - 0.238318148 - 0.238348819 - 0.238387427 - 0.238436024 - 0.238497191 - 0.238574175 - 0.238671061 - 0.238792982 - 0.23894639 - 0.239139393 - 0.239382167 - 0.239687482 - 0.240071345 - 0.240553797 - 0.241159899 - 0.241920927 - 0.242875827 - 0.244072952 - 0.245572103 - 0.247446889 - 0.249787335 - 0.252702638 - 0.256323801 - 0.260805682 - 0.26632764 - 0.273091472 - 0.281314561 - 0.291215182 - 0.302985558 - 0.316746893 - 0.332479409 - 0.349920724 - 0.368429592 - 0.386822707 - 0.403214846 - 0.414931421 - 0.41861452 - 0.410684383 - 0.388282868 - 0.35061004 - 0.300116184 - 0.24256813 - 0.185274957 - 0.134257976 - 0.0925780926 - 0.0608275138 - 0.0382311587 - 0.0232041118 - 0.0137971014 - 0.00816497887 - 0.0048662557 - 0.00293471549 - 0.00178964648 - 0.00110076323 - 0.000681261528 - 0.000429846964 - 0.000271215099 - 0.000171125159 - 0.000107972676 - 6.81261528E-05 - 0.165468163 - 0.165491927 - 0.165521842 - 0.165559497 - 0.165606896 - 0.165666556 - 0.165741645 - 0.165836148 - 0.165955075 - 0.166104724 - 0.166293008 - 0.166529863 - 0.16682776 - 0.16720234 - 0.167673194 - 0.168264833 - 0.169007873 - 0.169940473 - 0.171110069 - 0.172575428 - 0.174409031 - 0.176699771 - 0.17955586 - 0.183107749 - 0.18751066 - 0.192946035 - 0.199620756 - 0.207762302 - 0.217607108 - 0.229378099 - 0.24324605 - 0.259268093 - 0.277296484 - 0.296853291 - 0.316975032 - 0.336050064 - 0.351705241 - 0.360846587 - 0.360004078 - 0.346120714 - 0.317766982 - 0.276378993 - 0.226655042 - 0.175282032 - 0.128343623 - 0.0893359265 - 0.0592318228 - 0.0375420409 - 0.0229489915 - 0.0137183618 - 0.00814519069 - 0.00486222964 - 0.00293402081 - 0.00178953286 - 0.00110073904 - 0.000681261946 - 0.000429847228 - 0.000271215266 - 0.000171125264 - 0.000107972742 - 6.81261946E-05 - 0.0970784885 - 0.0971018274 - 0.0971312069 - 0.0971681893 - 0.097214741 - 0.097273336 - 0.0973470864 - 0.0974399071 - 0.0975567208 - 0.0977037173 - 0.0978886716 - 0.0981213537 - 0.0984140273 - 0.0987820763 - 0.0992447807 - 0.0998262751 - 0.100556725 - 0.101473763 - 0.102624222 - 0.104066203 - 0.105871505 - 0.108128393 - 0.110944657 - 0.114450788 - 0.118802938 - 0.12418507 - 0.130809291 - 0.138912744 - 0.148748564 - 0.16056726 - 0.174583492 - 0.190921849 - 0.209534622 - 0.230086187 - 0.251805053 - 0.273320316 - 0.292528457 - 0.306581041 - 0.31213148 - 0.305988135 - 0.286207794 - 0.253341696 - 0.211086795 - 0.165461769 - 0.122508803 - 0.0861090486 - 0.0576219875 - 0.0368357899 - 0.0226824085 - 0.0136340662 - 0.00812336247 - 0.00485763225 - 0.00293319306 - 0.00178940469 - 0.00110071551 - 0.000681249662 - 0.000429839478 - 0.000271210375 - 0.000171122178 - 0.000107970795 - 6.81249662E-05 - 0.0331912137 - 0.0332142102 - 0.0332431588 - 0.0332795993 - 0.0333254692 - 0.0333832069 - 0.0334558797 - 0.0335473463 - 0.0336624592 - 0.0338073197 - 0.0339895962 - 0.034218923 - 0.0345073974 - 0.0348701994 - 0.0353263609 - 0.0358997172 - 0.0366200786 - 0.0375246629 - 0.0386598343 - 0.0400831873 - 0.0418660097 - 0.0440961285 - 0.0468810987 - 0.0503516061 - 0.0546648085 - 0.0600071026 - 0.0665954306 - 0.0746756917 - 0.0845159587 - 0.0963912667 - 0.110555108 - 0.127191647 - 0.146341508 - 0.167794955 - 0.190951104 - 0.214654737 - 0.237047722 - 0.255512914 - 0.266837125 - 0.267743217 - 0.255866058 - 0.230980677 - 0.195849573 - 0.155798808 - 0.116742879 - 0.082893283 - 0.0559956979 - 0.0361107898 - 0.0224034116 - 0.0135436841 - 0.00809922826 - 0.00485235499 - 0.00293221314 - 0.00178923187 - 0.0011006785 - 0.00068124301 - 0.00042983528 - 0.000271207727 - 0.000171120507 - 0.000107969741 - 6.8124301E-05 - -0.0258360013 - -0.0258133616 - -0.025784862 - -0.0257489865 - -0.0257038272 - -0.0256469832 - -0.0255754341 - -0.02548538 - -0.0253720417 - -0.0252294096 - -0.0250499294 - -0.0248241087 - -0.0245400258 - -0.0241827166 - -0.0237334136 - -0.0231686023 - -0.0224588572 - -0.0215674143 - -0.0204484339 - -0.0190449069 - -0.0172861651 - -0.0150849786 - -0.0123342568 - -0.00890345392 - -0.00463489983 - 0.000659504549 - 0.00720045477 - 0.0152409874 - 0.0250617718 - 0.0369588648 - 0.0512195668 - 0.0680804796 - 0.0876607154 - 0.109863397 - 0.134242092 - 0.159839288 - 0.185025995 - 0.207408865 - 0.223919956 - 0.23123888 - 0.226653885 - 0.209252962 - 0.180921977 - 0.146278434 - 0.111036473 - 0.0796845875 - 0.0543507391 - 0.0353654193 - 0.0221109575 - 0.0134466237 - 0.00807254263 - 0.00484629863 - 0.00293105533 - 0.00178902517 - 0.0011006375 - 0.000681244613 - 0.000423548461 - 0.000264227561 - 0.000165233749 - 0.000103422532 - 6.49761327E-05 - -0.0794153344 - -0.0793931601 - -0.0793652462 - -0.0793301076 - -0.0792858755 - -0.0792301981 - -0.0791601161 - -0.0790719069 - -0.0789608877 - -0.0788211699 - -0.0786453501 - -0.078424124 - -0.078145804 - -0.0777957159 - -0.0773554502 - -0.0768019314 - -0.0761062684 - -0.0752323417 - -0.0741350779 - -0.0727583611 - -0.0710325371 - -0.068871477 - -0.0661692046 - -0.0627961527 - -0.0585952268 - -0.0533780431 - -0.0469220091 - -0.0389693788 - -0.0292301084 - -0.0173913091 - -0.00313737563 - 0.0138136248 - 0.0336503321 - 0.0563778652 - 0.0816919465 - 0.108820571 - 0.136355092 - 0.16212631 - 0.183228988 - 0.19634162 - 0.198472745 - 0.188097836 - 0.166271182 - 0.136883425 - 0.105381161 - 0.0764794394 - 0.0526849874 - 0.0345980268 - 0.0218039829 - 0.0133422755 - 0.00804299033 - 0.0048393632 - 0.00292966535 - 0.00178876003 - 0.00110058897 - 0.000681222751 - 0.000423551969 - 0.000264225789 - 0.000165220501 - 0.000103537486 - 6.49600558E-05 - -0.126804812 - -0.126783295 - -0.126756208 - -0.126722111 - -0.12667919 - -0.126625161 - -0.126557154 - -0.126471554 - -0.126363817 - -0.126228225 - -0.126057592 - -0.125842882 - -0.125572744 - -0.125232923 - -0.124805529 - -0.124268132 - -0.123592632 - -0.12274388 - -0.121677977 - -0.120340218 - -0.118662614 - -0.116560958 - -0.113931425 - -0.110646734 - -0.106552016 - -0.101460683 - -0.0951508678 - -0.0873634112 - -0.0778030202 - -0.0661451139 - -0.0520520965 - -0.035204326 - -0.0153525614 - 0.00760040684 - 0.0334824881 - 0.0616990788 - 0.0910591155 - 0.119625424 - 0.144680535 - 0.162948946 - 0.171225814 - 0.16744109 - 0.151850898 - 0.127590858 - 0.0997685065 - 0.0732751918 - 0.0509965207 - 0.0338069567 - 0.0214813754 - 0.0132299456 - 0.00801024759 - 0.00483140096 - 0.00292800077 - 0.00178844661 - 0.00110052761 - 0.000681208413 - 0.000423536386 - 0.000264216453 - 0.000161113561 - 0.000103519852 - 6.49653739E-05 - -0.167200696 - -0.167180094 - -0.167154158 - -0.16712151 - -0.167080411 - -0.167028677 - -0.166963557 - -0.16688159 - -0.166778422 - -0.166648578 - -0.166485172 - -0.166279547 - -0.166020824 - -0.165695341 - -0.165285944 - -0.164771119 - -0.164123901 - -0.163310541 - -0.162288859 - -0.161006242 - -0.159397221 - -0.157380588 - -0.154856019 - -0.15170021 - -0.147762635 - -0.142861149 - -0.136777897 - -0.129256385 - -0.120001088 - -0.108681834 - -0.0949463603 - -0.0784458705 - -0.0588801367 - -0.0360699484 - -0.0100644974 - 0.0187129472 - 0.0492899732 - 0.0799752459 - 0.108271853 - 0.131005724 - 0.144831297 - 0.147201241 - 0.137600622 - 0.118368864 - 0.0941885767 - 0.070070303 - 0.0492838415 - 0.0329904709 - 0.0211419787 - 0.013108929 - 0.00797393079 - 0.00482228018 - 0.00292603702 - 0.00178804901 - 0.0011004462 - 0.000681197709 - 0.000423524496 - 0.000264343202 - 0.000165243916 - 0.00010353024 - 6.4983364E-05 - -0.199846404 - -0.199827011 - -0.199802598 - -0.199771865 - -0.199733179 - -0.19968448 - -0.19962318 - -0.199546019 - -0.1994489 - -0.199326664 - -0.199172828 - -0.198979237 - -0.198735643 - -0.198429171 - -0.198043654 - -0.197558805 - -0.196949189 - -0.196182952 - -0.195220254 - -0.194011354 - -0.192494288 - -0.190592081 - -0.188209455 - -0.185229024 - -0.18150703 - -0.176868795 - -0.171104243 - -0.163964204 - -0.15515864 - -0.144358754 - -0.131205926 - -0.115331904 - -0.0963963173 - -0.0741492557 - -0.0485272605 - -0.0197886857 - 0.011314684 - 0.0433541121 - 0.0740919475 - 0.100520317 - 0.119237481 - 0.127297915 - 0.123446037 - 0.109173005 - 0.0886276304 - 0.0668644755 - 0.0475462743 - 0.0321467918 - 0.0207845753 - 0.0129784462 - 0.00793364068 - 0.00481181528 - 0.00292369876 - 0.00178757017 - 0.00110034516 - 0.000681170374 - 0.000423525989 - 0.00026420365 - 0.000165233091 - 0.000103549318 - 6.49697828E-05 - -0.224153268 - -0.224135384 - -0.22411287 - -0.224084528 - -0.22404885 - -0.224003938 - -0.223947404 - -0.223876242 - -0.22378667 - -0.223673932 - -0.223532042 - -0.223353478 - -0.22312878 - -0.222846062 - -0.222490395 - -0.22204304 - -0.221480489 - -0.220773288 - -0.219884573 - -0.218768273 - -0.217366933 - -0.215609074 - -0.213406058 - -0.210648416 - -0.207201673 - -0.202901764 - -0.197550341 - -0.190910473 - -0.182703714 - -0.172610133 - -0.160273854 - -0.145317953 - -0.127374263 - -0.106135464 - -0.0814381791 - -0.0533850607 - -0.0225079028 - 0.010042633 - 0.0423287457 - 0.0715810074 - 0.0944408702 - 0.107664016 - 0.109301405 - 0.0999420899 - 0.0830644235 - 0.0636584465 - 0.0457846042 - 0.0312740739 - 0.0204078759 - 0.0128376937 - 0.00788893198 - 0.00479981506 - 0.00292092455 - 0.00178698327 - 0.00110022208 - 0.000681145802 - 0.000423525442 - 0.000264204341 - 0.000165230353 - 0.000103555649 - 6.49886899E-05 - -0.239820824 - -0.239804715 - -0.239784434 - -0.239758904 - -0.239726766 - -0.239686309 - -0.239635383 - -0.239571277 - -0.239490587 - -0.239389023 - -0.239261194 - -0.239100318 - -0.238897866 - -0.238643122 - -0.238322619 - -0.237919449 - -0.237412392 - -0.236774846 - -0.23597349 - -0.234966648 - -0.233702282 - -0.232115563 - -0.230125946 - -0.227633722 - -0.224516031 - -0.22062239 - -0.21576993 - -0.209738711 - -0.202267884 - -0.193053942 - -0.181753148 - -0.16799143 - -0.151386559 - -0.131589418 - -0.108353007 - -0.0816384823 - -0.0517645122 - -0.0195946805 - 0.0132693811 - 0.0443710654 - 0.0705080122 - 0.0882638164 - 0.095076174 - 0.090594055 - 0.0774642231 - 0.0604528421 - 0.0440022482 - 0.0303705177 - 0.0200104617 - 0.0126858093 - 0.00783931308 - 0.00478606168 - 0.00291763598 - 0.00178627202 - 0.00110006559 - 0.000681108375 - 0.000423513476 - 0.000264203861 - 0.000165238564 - 0.000103533344 - 6.49660605E-05 - -0.246936498 - -0.24692236 - -0.246904562 - -0.246882156 - -0.24685395 - -0.246818443 - -0.246773746 - -0.246717483 - -0.246646661 - -0.246557517 - -0.246445315 - -0.2463041 - -0.246126381 - -0.245902742 - -0.24562135 - -0.24526734 - -0.24482205 - -0.24426207 - -0.243558057 - -0.242673277 - -0.241561814 - -0.240166376 - -0.238415656 - -0.236221173 - -0.233473571 - -0.230038386 - -0.225751389 - -0.220413749 - -0.213787569 - -0.205592727 - -0.195506653 - -0.183169692 - -0.168200087 - -0.150224578 - -0.128932701 - -0.104164675 - -0.0760421328 - -0.045144277 - -0.0127121896 - 0.019177825 - 0.0475992483 - 0.0691188312 - 0.0806894583 - 0.0810242158 - 0.0717699268 - 0.0572446522 - 0.042206948 - 0.0294348309 - 0.0195905631 - 0.0125219354 - 0.00778424738 - 0.00477031786 - 0.00291374518 - 0.00178539808 - 0.00109987929 - 0.000681064273 - 0.000423503349 - 0.000264203032 - 0.000165236267 - 0.000103534286 - 6.49759968E-05 - -0.246030697 - -0.246018631 - -0.246003442 - -0.24598432 - -0.245960248 - -0.245929944 - -0.245891797 - -0.245843778 - -0.245783332 - -0.245707246 - -0.245611476 - -0.245490936 - -0.24533923 - -0.245148312 - -0.24490807 - -0.244605796 - -0.244225531 - -0.243747241 - -0.2431458 - -0.242389724 - -0.241439612 - -0.240246235 - -0.238748207 - -0.23686918 - -0.234514513 - -0.231567393 - -0.22788444 - -0.223290952 - -0.217576129 - -0.210488935 - -0.201735795 - -0.190982128 - -0.177860955 - -0.16199353 - -0.14302921 - -0.120714126 - -0.0949996284 - -0.0661988702 - -0.0351875064 - -0.00361252156 - 0.0259883401 - 0.0503404528 - 0.0660965835 - 0.0711109017 - 0.0658910295 - 0.0540189905 - 0.0404124949 - 0.0284677373 - 0.0191456599 - 0.0123452555 - 0.00772315269 - 0.00475229783 - 0.00290914104 - 0.00178433634 - 0.00109963813 - 0.000681008942 - 0.000423489108 - 0.000264199407 - 0.000165234639 - 0.000103536157 - 6.49714587E-05 - -0.238067421 - -0.238057419 - -0.238044829 - -0.238028978 - -0.238009025 - -0.237983906 - -0.237952284 - -0.237912479 - -0.237862371 - -0.237799297 - -0.237719902 - -0.237619969 - -0.23749419 - -0.23733589 - -0.237136676 - -0.236885998 - -0.236570598 - -0.236173827 - -0.235674788 - -0.235047273 - -0.234258449 - -0.233267233 - -0.232022306 - -0.230459695 - -0.22849987 - -0.226044303 - -0.222971481 - -0.219132429 - -0.214345939 - -0.208393903 - -0.201017575 - -0.191916169 - -0.180750208 - -0.16715351 - -0.150759792 - -0.131252515 - -0.108449176 - -0.0824319618 - -0.0537308691 - -0.0235443381 - 0.00606684937 - 0.032162622 - 0.0513293227 - 0.0607361126 - 0.0596951219 - 0.0507333806 - 0.0386380869 - 0.0274757267 - 0.0186717156 - 0.0121550229 - 0.00765537302 - 0.00473170091 - 0.00290370731 - 0.00178304658 - 0.00109934533 - 0.000680940477 - 0.000423469554 - 0.000264195315 - 0.000165232362 - 0.000103536688 - 6.49706068E-05 - -0.224363924 - -0.224355875 - -0.224345743 - -0.224332988 - -0.22431693 - -0.224296715 - -0.224271268 - -0.224239233 - -0.224198906 - -0.224148143 - -0.224084243 - -0.224003809 - -0.223902567 - -0.22377514 - -0.223614765 - -0.223412938 - -0.223158969 - -0.222839425 - -0.222437434 - -0.22193182 - -0.221296024 - -0.220496767 - -0.219492408 - -0.218230924 - -0.216647462 - -0.214661387 - -0.212172802 - -0.209058518 - -0.205167543 - -0.200316332 - -0.194284251 - -0.1868102 - -0.177592042 - -0.166291686 - -0.15255044 - -0.136021812 - -0.116432042 - -0.0936814699 - -0.0679992281 - -0.0401528774 - -0.0116805669 - 0.014960042 - 0.0365440015 - 0.0498282256 - 0.0530126 - 0.0472947839 - 0.0368994546 - 0.0264781428 - 0.0181629321 - 0.0119502215 - 0.00758024769 - 0.00470819688 - 0.00289730414 - 0.00178147879 - 0.00109897917 - 0.000680852958 - 0.000423448694 - 0.00026418554 - 0.000165231445 - 0.000103536183 - 6.49761364E-05 - -0.206452057 - -0.206445766 - -0.206437847 - -0.206427878 - -0.206415328 - -0.206399528 - -0.206379638 - -0.2063546 - -0.206323079 - -0.2062834 - -0.206233451 - -0.206170576 - -0.206091431 - -0.20599181 - -0.205866421 - -0.205708607 - -0.205509997 - -0.205260065 - -0.204945586 - -0.204549943 - -0.204052276 - -0.203426412 - -0.20263955 - -0.201650622 - -0.2004083 - -0.198848549 - -0.196891701 - -0.194438968 - -0.191368417 - -0.187530463 - -0.18274313 - -0.176787601 - -0.169405098 - -0.160296997 - -0.149131472 - -0.135562172 - -0.1192675 - -0.100022823 - -0.0778207629 - -0.0530519003 - -0.0267393407 - -0.000767397508 - 0.0220597536 - 0.0384253389 - 0.0456699312 - 0.0435388586 - 0.0351834995 - 0.0255147454 - 0.0176154254 - 0.0117275886 - 0.00749752161 - 0.00468138678 - 0.00288976371 - 0.00177958148 - 0.00109852515 - 0.000680743204 - 0.000423422536 - 0.00026417845 - 0.000165227288 - 0.000103535527 - 6.49743821E-05 - -0.185910995 - -0.185906214 - -0.185900197 - -0.185892621 - -0.185883083 - -0.185871077 - -0.185855962 - -0.185836933 - -0.185812979 - -0.185782824 - -0.185744862 - -0.185697075 - -0.185636919 - -0.185561196 - -0.185465879 - -0.185345902 - -0.185194892 - -0.185004833 - -0.184765645 - -0.184464655 - -0.184085936 - -0.183609485 - -0.183010191 - -0.182256555 - -0.181309112 - -0.180118475 - -0.178622955 - -0.176745676 - -0.174391138 - -0.171441207 - -0.167750621 - -0.163142225 - -0.157402526 - -0.150278694 - -0.141479177 - -0.130681764 - -0.11755563 - -0.101807638 - -0.0832676421 - -0.0620300087 - -0.0386619848 - -0.0144581615 - 0.0083598587 - 0.0267401955 - 0.0375607301 - 0.0392347556 - 0.0334045488 - 0.0246409527 - 0.0170412092 - 0.0114766979 - 0.00740851454 - 0.00465056998 - 0.00288090954 - 0.00177729014 - 0.00109796694 - 0.000680608965 - 0.00042338709 - 0.000264169616 - 0.000165224911 - 0.000103535793 - 6.49720216E-05 - -0.164208161 - -0.164204623 - -0.164200169 - -0.164194562 - -0.164187503 - -0.164178616 - -0.164167428 - -0.164153344 - -0.164135613 - -0.164113292 - -0.164085192 - -0.164049817 - -0.164005285 - -0.163949225 - -0.163878654 - -0.163789819 - -0.163677993 - -0.163537232 - -0.163360055 - -0.16313705 - -0.16285638 - -0.16250316 - -0.162058678 - -0.161499424 - -0.160795871 - -0.159910969 - -0.158798273 - -0.15739964 - -0.155642422 - -0.153436093 - -0.15066827 - -0.147200201 - -0.142861938 - -0.137447799 - -0.130713354 - -0.122376414 - -0.112126471 - -0.0996503785 - -0.0846866143 - -0.0671255862 - -0.0471749468 - -0.0255958661 - -0.00396618721 - 0.0151898909 - 0.0287402098 - 0.0341433817 - 0.0313635319 - 0.0238888781 - 0.0164927832 - 0.0111772687 - 0.00731569643 - 0.0046144985 - 0.00287066322 - 0.00177453123 - 0.00109727733 - 0.000680437111 - 0.000423343352 - 0.000264159367 - 0.000165221768 - 0.000103534628 - 6.49752712E-05 - -0.142579368 - -0.142576812 - -0.142573594 - -0.142569542 - -0.142564442 - -0.142558022 - -0.142549939 - -0.142539763 - -0.142526952 - -0.142510824 - -0.14249052 - -0.142464959 - -0.14243278 - -0.142392269 - -0.142341269 - -0.142277064 - -0.142196236 - -0.142094481 - -0.141966381 - -0.141805116 - -0.141602101 - -0.141346531 - -0.141024806 - -0.140619808 - -0.140110001 - -0.139468291 - -0.138660606 - -0.137644119 - -0.136365051 - -0.134755948 - -0.132732377 - -0.130188976 - -0.126994901 - -0.122988889 - -0.117974544 - -0.111717245 - -0.103945453 - -0.0943616922 - -0.0826724407 - -0.0686517322 - -0.0522588095 - -0.0338294919 - -0.0143375513 - 0.0043545657 - 0.0194968086 - 0.0281322926 - 0.0287590711 - 0.0231889751 - 0.0160713063 - 0.0108186227 - 0.00721197958 - 0.00457415589 - 0.00285901231 - 0.00177116832 - 0.00109642775 - 0.000680226379 - 0.00042328906 - 0.000264144705 - 0.000165217683 - 0.000103533095 - 6.4973768E-05 - -0.121964072 - -0.121962265 - -0.12195999 - -0.121957126 - -0.12195352 - -0.12194898 - -0.121943266 - -0.121936071 - -0.121927013 - -0.12191561 - -0.121901254 - -0.121883181 - -0.121860427 - -0.121831781 - -0.121795716 - -0.121750309 - -0.121693142 - -0.121621165 - -0.121530542 - -0.121416436 - -0.121272759 - -0.121091839 - -0.120864009 - -0.120577086 - -0.120215715 - -0.119760537 - -0.119187136 - -0.118464719 - -0.117554444 - -0.11640732 - -0.114961587 - -0.113139471 - -0.110843257 - -0.107950673 - -0.104309802 - -0.0997341773 - -0.0939995879 - -0.0868458238 - -0.0779895657 - -0.0671594302 - -0.0541707026 - -0.0390628838 - -0.0223181995 - -0.005139871 - 0.0103449112 - 0.021298999 - 0.0252911087 - 0.0223025182 - 0.0158669683 - 0.0104540666 - 0.00706049831 - 0.00454012185 - 0.00284360571 - 0.00176698338 - 0.00109538878 - 0.000679961164 - 0.00042322012 - 0.000264126049 - 0.000165212714 - 0.000103531227 - 6.49743181E-05 - -0.102994758 - -0.102993504 - -0.102991926 - -0.10298994 - -0.102987439 - -0.10298429 - -0.102980326 - -0.102975335 - -0.102969052 - -0.102961142 - -0.102951184 - -0.102938646 - -0.102922861 - -0.102902988 - -0.102877967 - -0.102846463 - -0.102806795 - -0.102756848 - -0.102693953 - -0.10261475 - -0.102515001 - -0.102389367 - -0.102231111 - -0.102031733 - -0.101780505 - -0.101463873 - -0.101064705 - -0.100561328 - -0.0999262986 - -0.0991248397 - -0.0981128416 - -0.0968343327 - -0.0952182981 - -0.0931747542 - -0.0905900638 - -0.0873216961 - -0.0831931368 - -0.0779906893 - -0.071465918 - -0.0633510744 - -0.0534005725 - -0.0414789936 - -0.0277208427 - -0.0127748344 - 0.00191760684 - 0.014020627 - 0.020829046 - 0.0208565125 - 0.0158276551 - 0.0102339484 - 0.00681337452 - 0.00452034985 - 0.00281980186 - 0.00176330184 - 0.00109422804 - 0.000679639562 - 0.000423135068 - 0.000264103536 - 0.000165207875 - 0.000103529636 - 6.4972819E-05 - -0.0860273261 - -0.0860264708 - -0.0860253941 - -0.0860240387 - -0.0860223322 - -0.0860201838 - -0.0860174791 - -0.086014074 - -0.0860097871 - -0.08600439 - -0.0859975951 - -0.0859890402 - -0.0859782693 - -0.0859647081 - -0.0859476332 - -0.0859261335 - -0.0858990613 - -0.0858649702 - -0.0858220375 - -0.0857679656 - -0.0856998569 - -0.0856140558 - -0.0855059483 - -0.0853697068 - -0.0851979647 - -0.0849814021 - -0.0847082141 - -0.0843634283 - -0.0839280262 - -0.0833778078 - -0.0826819244 - -0.0818009795 - -0.0806845812 - -0.0792682146 - -0.0774693167 - -0.0751825228 - -0.0722742962 - -0.0685777274 - -0.0638895152 - -0.057973531 - -0.0505796527 - -0.0414932585 - -0.0306387982 - -0.0182632252 - -0.00520041313 - 0.00687880022 - 0.0155397772 - 0.018514876 - 0.0156682513 - 0.0103112136 - 0.00651343026 - 0.00446670909 - 0.00280335719 - 0.00175963011 - 0.00109202658 - 0.000679160397 - 0.000423025577 - 0.000264074067 - 0.000165198761 - 0.000103527406 - 6.49714969E-05 - -0.0711947261 - -0.0711941507 - -0.0711934264 - -0.0711925145 - -0.0711913664 - -0.0711899211 - -0.0711881015 - -0.0711858107 - -0.0711829265 - -0.0711792955 - -0.0711747239 - -0.0711689681 - -0.0711617213 - -0.0711525968 - -0.0711411079 - -0.0711266411 - -0.0711084235 - -0.0710854813 - -0.0710565866 - -0.0710201909 - -0.0709743409 - -0.0709165708 - -0.0708437661 - -0.0707519898 - -0.07063626 - -0.070490265 - -0.0703059966 - -0.0700732762 - -0.0697791398 - -0.0694070361 - -0.0689357769 - -0.0683381592 - -0.0675791545 - -0.0666135359 - -0.065382797 - -0.0638112288 - -0.0618011137 - -0.0592272753 - -0.0559318947 - -0.0517219482 - -0.0463744694 - -0.0396598906 - -0.0314013826 - -0.0215961563 - -0.0106222355 - 0.000489308121 - 0.00987706917 - 0.0151871679 - 0.0149588676 - 0.010641152 - 0.00636144751 - 0.00428366893 - 0.00282899163 - 0.00174074207 - 0.00109019602 - 0.000678964586 - 0.000422908986 - 0.000264036364 - 0.000165188913 - 0.000103525405 - 6.49707209E-05 - -0.0584676741 - -0.0584672916 - -0.0584668101 - -0.0584662038 - -0.0584654405 - -0.0584644796 - -0.0584632699 - -0.0584617468 - -0.0584598293 - -0.0584574151 - -0.0584543757 - -0.0584505488 - -0.0584457305 - -0.0584396636 - -0.0584320244 - -0.0584224047 - -0.0584102906 - -0.0583950337 - -0.058375817 - -0.0583516096 - -0.0583211105 - -0.0582826767 - -0.058234232 - -0.0581731496 - -0.0580961028 - -0.0579988723 - -0.0578760968 - -0.0577209501 - -0.0575247187 - -0.0572762467 - -0.0569612032 - -0.0565611088 - -0.0560520371 - -0.0554028824 - -0.0545730527 - -0.0535094317 - -0.0521424645 - -0.0503813297 - -0.0481084885 - -0.0451746917 - -0.0413972426 - -0.0365676771 - -0.0304809131 - -0.0230063847 - -0.0142286617 - -0.00467406643 - 0.00443118954 - 0.01111844 - 0.013369494 - 0.0108906792 - 0.00656421404 - 0.00399859991 - 0.00284470096 - 0.00171989906 - 0.00109551739 - 0.000678004135 - 0.000422664438 - 0.000264005045 - 0.000165174526 - 0.000103521209 - 6.49699083E-05 - -0.0477111505 - -0.0477108987 - -0.0477105817 - -0.0477101825 - -0.0477096801 - -0.0477090475 - -0.0477082511 - -0.0477072484 - -0.0477059861 - -0.0477043968 - -0.0477023958 - -0.0476998764 - -0.0476967042 - -0.04769271 - -0.0476876805 - -0.047681347 - -0.0476733707 - -0.0476633248 - -0.0476506707 - -0.047634729 - -0.0476146422 - -0.0475893266 - -0.0475574122 - -0.0475171648 - -0.0474663865 - -0.047402287 - -0.0473213166 - -0.0472189492 - -0.0470893965 - -0.0469252313 - -0.0467168848 - -0.0464519745 - -0.0461143963 - -0.0456830963 - -0.0451304058 - -0.0444197939 - -0.0435028714 - -0.0423154982 - -0.0407729779 - -0.038764708 - -0.0361496001 - -0.0327556173 - -0.0283907318 - -0.022879339 - -0.0161470591 - -0.00838100913 - -0.000267747729 - 0.0067972578 - 0.0108789841 - 0.0106068361 - 0.00706651903 - 0.00385961313 - 0.00270403434 - 0.00176675459 - 0.00108010792 - 0.000674063795 - 0.000422506454 - 0.000263880888 - 0.000165157315 - 0.00010351582 - 6.49687108E-05 - -0.0387307273 - -0.0387305628 - -0.0387303558 - -0.0387300952 - -0.0387297671 - -0.0387293541 - -0.038728834 - -0.0387281793 - -0.038727355 - -0.0387263172 - -0.0387250106 - -0.0387233654 - -0.038721294 - -0.0387186857 - -0.0387154013 - -0.0387112652 - -0.0387060562 - -0.0386994953 - -0.0386912306 - -0.0386808181 - -0.0386676972 - -0.0386511591 - -0.0386303077 - -0.0386040078 - -0.0385708201 - -0.0385289156 - -0.0384759657 - -0.0384089975 - -0.0383242034 - -0.0382166885 - -0.0380801321 - -0.0379063309 - -0.0376845775 - -0.03740081 - -0.0370364434 - -0.0365667636 - -0.0359587333 - -0.0351680405 - -0.0341352479 - -0.0327810635 - -0.0310012188 - -0.0286625694 - -0.0256044391 - -0.0216538356 - -0.016670671 - -0.0106477262 - -0.0038886425 - 0.0027586536 - 0.00779040993 - 0.00950895058 - 0.00749965502 - 0.00410359693 - 0.00242316144 - 0.00183038361 - 0.001045977 - 0.000686627756 - 0.000423610674 - 0.000264058459 - 0.000165192709 - 0.000103507118 - 6.49662767E-05 - -0.0313069799 - -0.0313068733 - -0.031306739 - -0.0313065699 - -0.0313063571 - -0.0313060892 - -0.0313057519 - -0.0313053272 - -0.0313047926 - -0.0313041194 - -0.0313032718 - -0.0313022047 - -0.0313008611 - -0.0312991692 - -0.0312970386 - -0.0312943556 - -0.0312909765 - -0.0312867202 - -0.0312813585 - -0.0312746031 - -0.0312660899 - -0.0312553587 - -0.0312418274 - -0.0312247582 - -0.0312032153 - -0.0311760087 - -0.0311416221 - -0.0310981181 - -0.031043012 - -0.030973105 - -0.0308842584 - -0.0307710884 - -0.0306265472 - -0.0304413454 - -0.0302031493 - -0.0298954632 - -0.0294960757 - -0.0289749146 - -0.0282911458 - -0.0273893901 - -0.0261951365 - -0.0246099981 - -0.022508805 - -0.0197433702 - -0.016163045 - -0.0116702471 - -0.00633621799 - -0.000591153733 - 0.00457256432 - 0.00764940496 - 0.00743162351 - 0.00464972385 - 0.00228603081 - 0.00172007495 - 0.00109964644 - 0.000676361792 - 0.000415376428 - 0.000262923966 - 0.000164857236 - 0.000103524336 - 6.49625585E-05 - -0.025218839 - -0.0252187702 - -0.0252186836 - -0.0252185746 - -0.0252184373 - -0.0252182644 - -0.0252180468 - -0.0252177729 - -0.0252174279 - -0.0252169937 - -0.0252164469 - -0.0252157584 - -0.0252148916 - -0.0252138001 - -0.0252124256 - -0.0252106946 - -0.0252085144 - -0.0252057684 - -0.0252023089 - -0.02519795 - -0.0251924567 - -0.0251855317 - -0.0251767991 - -0.0251657821 - -0.0251518759 - -0.0251343108 - -0.0251121057 - -0.0250840058 - -0.0250484004 - -0.0250032132 - -0.024945754 - -0.0248725165 - -0.0247788997 - -0.0246588217 - -0.0245041777 - -0.0243040786 - -0.0240437763 - -0.0237031555 - -0.0232546375 - -0.0226603377 - -0.0218683816 - -0.0208085394 - -0.0193880341 - -0.0174899897 - -0.0149803087 - -0.011734711 - -0.00770581902 - -0.0030537607 - 0.00166256066 - 0.00534975021 - 0.00665709896 - 0.00512067935 - 0.00252804782 - 0.00145125973 - 0.00119157426 - 0.00062877411 - 0.000433001243 - 0.000267106412 - 0.000165855663 - 0.000103575936 - 6.49621079E-05 - -0.0202579455 - -0.0202579013 - -0.0202578457 - -0.0202577756 - -0.0202576875 - -0.0202575764 - -0.0202574367 - -0.0202572607 - -0.0202570392 - -0.0202567602 - -0.0202564091 - -0.0202559669 - -0.0202554101 - -0.020254709 - -0.0202538261 - -0.0202527143 - -0.0202513139 - -0.02024955 - -0.0202473278 - -0.0202445278 - -0.0202409988 - -0.0202365499 - -0.0202309394 - -0.0202238606 - -0.0202149244 - -0.0202036356 - -0.0201893624 - -0.0201712963 - -0.0201483987 - -0.0201193296 - -0.0200823503 - -0.0200351916 - -0.0199748701 - -0.0198974325 - -0.0197975958 - -0.0196682356 - -0.0194996583 - -0.0192785646 - -0.0189865818 - -0.0185982169 - -0.0180780865 - -0.0173773694 - -0.0164297553 - -0.0151480081 - -0.0134241823 - -0.0111403739 - -0.00820336192 - -0.00462392404 - -0.00065874671 - 0.00301551476 - 0.00528245122 - 0.00514291342 - 0.00303991091 - 0.00132284185 - 0.00110351096 - 0.000681581696 - 0.00042879058 - 0.000254163159 - 0.000162928904 - 0.000102920096 - 6.50514404E-05 - -0.016236342 - -0.0162363137 - -0.0162362781 - -0.0162362332 - -0.0162361768 - -0.0162361058 - -0.0162360163 - -0.0162359037 - -0.0162357619 - -0.0162355834 - -0.0162353586 - -0.0162350756 - -0.0162347193 - -0.0162342706 - -0.0162337055 - -0.0162329939 - -0.0162320976 - -0.0162309686 - -0.0162295463 - -0.016227754 - -0.0162254951 - -0.0162226473 - -0.0162190556 - -0.0162145237 - -0.0162088023 - -0.0162015738 - -0.0161924331 - -0.0161808614 - -0.0161661921 - -0.0161475639 - -0.0161238587 - -0.0160936153 - -0.0160549094 - -0.0160051869 - -0.0159410261 - -0.0158577995 - -0.0157491874 - -0.0156064792 - -0.0154175686 - -0.015165525 - -0.0148265997 - -0.0143675432 - -0.0137422418 - -0.0128880885 - -0.0117235365 - -0.0101505496 - -0.00807003062 - -0.00542503035 - -0.00229188322 - 0.000973994676 - 0.00360847307 - 0.00458851203 - 0.00346759999 - 0.00154125735 - 0.000859747348 - 0.000784056353 - 0.000372568331 - 0.000274466109 - 0.000170524097 - 0.000105019837 - 6.49916721E-05 - -0.0129896004 - -0.0129895824 - -0.0129895597 - -0.0129895311 - -0.012989495 - -0.0129894497 - -0.0129893926 - -0.0129893207 - -0.0129892303 - -0.0129891163 - -0.0129889729 - -0.0129887923 - -0.0129885649 - -0.0129882785 - -0.0129879179 - -0.0129874638 - -0.0129868917 - -0.0129861712 - -0.0129852634 - -0.0129841195 - -0.0129826778 - -0.0129808601 - -0.0129785675 - -0.0129756747 - -0.0129720222 - -0.0129674073 - -0.012961571 - -0.0129541815 - -0.0129448123 - -0.012932912 - -0.0129177644 - -0.0128984321 - -0.0128736797 - -0.0128418647 - -0.0128007825 - -0.0127474449 - -0.012677759 - -0.0125860621 - -0.0124644472 - -0.012301787 - -0.0120823439 - -0.0117838336 - -0.011374853 - -0.0108117552 - -0.0100355706 - -0.00897081893 - -0.00753071047 - -0.00563804821 - -0.00327758792 - -0.000596793933 - 0.00195722158 - 0.00358844377 - 0.00351515496 - 0.00197862903 - 0.000749023555 - 0.000712797149 - 0.000420843741 - 0.000275454489 - 0.000153880434 - 0.000100031783 - 6.40722038E-05 - -0.0103770545 - -0.010377043 - -0.0103770286 - -0.0103770104 - -0.0103769874 - -0.0103769586 - -0.0103769222 - -0.0103768764 - -0.0103768188 - -0.0103767463 - -0.010376655 - -0.01037654 - -0.0103763952 - -0.0103762128 - -0.0103759832 - -0.0103756941 - -0.0103753298 - -0.0103748711 - -0.010374293 - -0.0103735646 - -0.0103726466 - -0.0103714891 - -0.0103700292 - -0.0103681869 - -0.0103658607 - -0.0103629214 - -0.0103592039 - -0.0103544965 - -0.0103485271 - -0.0103409439 - -0.0103312891 - -0.0103189639 - -0.0103031776 - -0.010282878 - -0.0102566507 - -0.0102225751 - -0.0101780143 - -0.0101193094 - -0.010041332 - -0.00993682982 - -0.00979547865 - -0.00960253027 - -0.00933694398 - -0.0089689507 - -0.00845723301 - -0.00774654542 - -0.00676809283 - -0.00544802881 - -0.00373453545 - -0.00165919219 - 0.000557558761 - 0.00239759497 - 0.00311699391 - 0.00232892561 - 0.000933901854 - 0.000504341999 - 0.000519915745 - 0.000217136491 - 0.000174726784 - 0.000110460304 - 6.72475231E-05 - -0.00828035496 - -0.00828034766 - -0.00828033847 - -0.00828032689 - -0.00828031232 - -0.00828029397 - -0.00828027087 - -0.00828024179 - -0.00828020517 - -0.00828015907 - -0.00828010103 - -0.00828002794 - -0.00827993592 - -0.00827982004 - -0.00827967411 - -0.00827949033 - -0.00827925885 - -0.00827896725 - -0.00827859988 - -0.00827813694 - -0.00827755343 - -0.00827681772 - -0.00827588976 - -0.00827471873 - -0.00827324007 - -0.00827137155 - -0.00826900811 - -0.00826601515 - -0.00826221939 - -0.00825739676 - -0.0082512557 - -0.00824341426 - -0.00823336808 - -0.00822044514 - -0.00820374112 - -0.00818202605 - -0.00815360832 - -0.00811613519 - -0.00806629902 - -0.00799940433 - -0.00790873237 - -0.00778461884 - -0.00761314353 - -0.00737434115 - -0.00703993509 - -0.00657090227 - -0.00591596593 - -0.00501388128 - -0.00380578191 - -0.00226889301 - -0.000485555428 - 0.00125526589 - 0.00240312966 - 0.00237407194 - 0.00128357078 - 0.000415929718 - 0.000462196817 - 0.000259218718 - 0.000178971001 - 9.19211857E-05 - 6.05480865E-05 - -0.00660118066 - -0.00660117603 - -0.00660117019 - -0.00660116285 - -0.0066011536 - -0.00660114195 - -0.0066011273 - -0.00660110884 - -0.0066010856 - -0.00660105635 - -0.00660101951 - -0.00660097313 - -0.00660091473 - -0.00660084119 - -0.00660074859 - -0.00660063195 - -0.00660048505 - -0.0066003 - -0.00660006685 - -0.00659977305 - -0.00659940273 - -0.00659893581 - -0.00659834686 - -0.00659760363 - -0.00659666511 - -0.00659547909 - -0.00659397885 - -0.00659207887 - -0.00658966907 - -0.00658660699 - -0.00658270725 - -0.00657772685 - -0.00657134471 - -0.00656313271 - -0.00655251417 - -0.00653870386 - -0.00652062019 - -0.00649675613 - -0.00646498792 - -0.00642229148 - -0.00636432214 - -0.0062847965 - -0.0061745962 - -0.00602050432 - -0.00580351109 - -0.00549675864 - -0.00506358476 - -0.00445708756 - -0.00362468519 - -0.00252480336 - -0.00116720203 - 0.000313552899 - 0.00157385044 - 0.0020899996 - 0.00155148019 - 0.000564574026 - 0.000293436919 - 0.000346074477 - 0.000124347334 - 0.000111651063 - 7.25853257E-05 - -0.00525863897 - -0.00525863603 - -0.00525863233 - -0.00525862767 - -0.00525862181 - -0.00525861443 - -0.00525860514 - -0.00525859344 - -0.00525857871 - -0.00525856017 - -0.00525853682 - -0.00525850742 - -0.0052584704 - -0.00525842379 - -0.00525836509 - -0.00525829116 - -0.00525819804 - -0.00525808074 - -0.00525793295 - -0.00525774672 - -0.00525751198 - -0.005257216 - -0.00525684265 - -0.0052563715 - -0.00525577653 - -0.00525502464 - -0.0052540735 - -0.00525286886 - -0.00525134087 - -0.00524939913 - -0.00524692593 - -0.00524376694 - -0.00523971812 - -0.00523450727 - -0.00522776745 - -0.00521899853 - -0.00520751085 - -0.00519234204 - -0.00517213336 - -0.00514494533 - -0.00510798266 - -0.00505718534 - -0.00498662695 - -0.00488764636 - -0.00474763759 - -0.00454847126 - -0.00426469967 - -0.00386219092 - -0.00329898918 - -0.00253252021 - -0.00154095706 - -0.000369331761 - 0.000798340435 - 0.00159018942 - 0.00158583023 - 0.000830293875 - 0.000227115713 - 0.000299965746 - 0.000159573504 - 0.000117165664 - 5.40822968E-05 - -0.00418667495 - -0.00418667309 - -0.00418667075 - -0.0041866678 - -0.00418666409 - -0.00418665942 - -0.00418665353 - -0.00418664612 - -0.0041866368 - -0.00418662505 - -0.00418661027 - -0.00418659165 - -0.00418656821 - -0.00418653869 - -0.00418650152 - -0.0041864547 - -0.00418639573 - -0.00418632145 - -0.00418622786 - -0.00418610992 - -0.00418596126 - -0.00418577381 - -0.00418553737 - -0.00418523898 - -0.00418486217 - -0.00418438596 - -0.00418378353 - -0.00418302052 - -0.00418205264 - -0.00418082259 - -0.00417925573 - -0.00417725418 - -0.00417468846 - -0.00417138578 - -0.00416711305 - -0.00416155235 - -0.00415426486 - -0.00414463753 - -0.00413180354 - -0.00411452317 - -0.00409100517 - -0.00405863903 - -0.0040135966 - -0.00395024713 - -0.00386031951 - -0.00373175575 - -0.00354727328 - -0.00328289059 - -0.00290728058 - -0.00238416877 - -0.00168252306 - -0.000802624622 - 0.000174109163 - 0.00102337488 - 0.00138570517 - 0.0010255081 - 0.0003415301 - 0.00016970804 - 0.000230360839 - 6.99858855E-05 - 7.1574776E-05 - -0.00333166495 - -0.00333166377 - -0.00333166229 - -0.00333166043 - -0.00333165808 - -0.00333165512 - -0.0033316514 - -0.00333164671 - -0.00333164081 - -0.00333163338 - -0.00333162402 - -0.00333161224 - -0.0033315974 - -0.00333157872 - -0.0033315552 - -0.00333152557 - -0.00333148826 - -0.00333144125 - -0.00333138203 - -0.00333130739 - -0.00333121332 - -0.0033310947 - -0.00333094508 - -0.00333075624 - -0.00333051778 - -0.00333021641 - -0.00332983515 - -0.00332935223 - -0.00332873964 - -0.00332796106 - -0.00332696923 - -0.00332570212 - -0.00332407768 - -0.00332198634 - -0.00331928025 - -0.00331575761 - -0.00331113971 - -0.00330503678 - -0.00329689705 - -0.00328593022 - -0.00327099209 - -0.00325041067 - -0.00322172519 - -0.00318129783 - -0.00312374644 - -0.00304114187 - -0.00292193762 - -0.0027497046 - -0.00250204859 - -0.0021508285 - -0.00166634065 - -0.00103073235 - -0.000268273197 - 0.000504935658 - 0.00104199489 - 0.00104895196 - 0.000535623193 - 0.000122295781 - 0.000194416868 - 9.83438366E-05 - 7.69578216E-05 - -0.00265027615 - -0.00265027541 - -0.00265027447 - -0.00265027329 - -0.00265027181 - -0.00265026994 - -0.00265026758 - -0.00265026462 - -0.00265026088 - -0.00265025618 - -0.00265025027 - -0.00265024282 - -0.00265023344 - -0.00265022162 - -0.00265020675 - -0.00265018801 - -0.00265016441 - -0.00265013468 - -0.00265009723 - -0.00265005003 - -0.00264999053 - -0.00264991551 - -0.00264982088 - -0.00264970146 - -0.00264955064 - -0.00264936003 - -0.00264911889 - -0.00264881344 - -0.00264842596 - -0.00264793347 - -0.00264730605 - -0.00264650444 - -0.00264547668 - -0.00264415336 - -0.0026424408 - -0.00264021108 - -0.0026372874 - -0.00263342234 - -0.00262826533 - -0.0026213136 - -0.00261183812 - -0.00259877133 - -0.00258053749 - -0.0025547979 - -0.00251807293 - -0.0024651943 - -0.00238854364 - -0.00227707442 - -0.00211525737 - -0.001882473 - -0.0015542539 - -0.0011084832 - -0.000542071904 - 9.59001206E-05 - 0.000660617269 - 0.000910078991 - 0.000672942245 - 0.000207163534 - 9.78186479E-05 - 0.000152889984 - 3.87607951E-05 - -0.00210761756 - -0.00210761709 - -0.0021076165 - -0.00210761575 - -0.00210761482 - -0.00210761363 - -0.00210761215 - -0.00210761027 - -0.00210760791 - -0.00210760494 - -0.0021076012 - -0.00210759649 - -0.00210759056 - -0.00210758309 - -0.00210757369 - -0.00210756185 - -0.00210754693 - -0.00210752814 - -0.00210750446 - -0.00210747462 - -0.00210743701 - -0.00210738959 - -0.00210732977 - -0.00210725428 - -0.00210715894 - -0.00210703844 - -0.002106886 - -0.00210669291 - -0.00210644794 - -0.00210613657 - -0.00210573989 - -0.00210523304 - -0.00210458315 - -0.00210374629 - -0.00210266316 - -0.00210125274 - -0.002099403 - -0.00209695707 - -0.00209369254 - -0.00208929011 - -0.00208328619 - -0.00207500081 - -0.00206342805 - -0.00204707023 - -0.00202368914 - -0.00198993917 - -0.00194084192 - -0.00186907407 - -0.00176410158 - -0.00161138158 - -0.0013923246 - -0.00108672448 - -0.000681137402 - -0.000188515856 - 0.00031827922 - 0.000677418117 - 0.000687958126 - 0.000344602632 - 6.51212147E-05 - 0.000125673571 - 6.07498303E-05 - -0.00167567492 - -0.00167567462 - -0.00167567425 - -0.00167567378 - -0.00167567318 - -0.00167567244 - -0.0016756715 - -0.00167567031 - -0.00167566882 - -0.00167566694 - -0.00167566458 - -0.0016756616 - -0.00167565786 - -0.00167565314 - -0.0016756472 - -0.00167563971 - -0.00167563029 - -0.00167561841 - -0.00167560345 - -0.0016755846 - -0.00167556083 - -0.00167553087 - -0.00167549307 - -0.00167544536 - -0.00167538512 - -0.00167530897 - -0.00167521264 - -0.00167509062 - -0.00167493581 - -0.00167473904 - -0.00167448834 - -0.001674168 - -0.00167375724 - -0.00167322827 - -0.00167254356 - -0.00167165185 - -0.00167048222 - -0.0016689353 - -0.00166687015 - -0.00166408425 - -0.00166028329 - -0.00165503502 - -0.0016476988 - -0.00163731849 - -0.00162246019 - -0.00160096978 - -0.00156961826 - -0.00152360272 - -0.00145589372 - -0.00135650627 - -0.00121201185 - -0.00100617391 - -0.000723717698 - -0.000360927725 - 5.2610552E-05 - 0.000424105431 - 0.000593036399 - 0.000438713326 - 0.000126150965 - 5.63449905E-05 - 0.000100991581 - -0.00133200557 - -0.00133200539 - -0.00133200515 - -0.00133200485 - -0.00133200448 - -0.00133200401 - -0.00133200341 - -0.00133200266 - -0.00133200172 - -0.00133200054 - -0.00133199904 - -0.00133199716 - -0.0013319948 - -0.00133199182 - -0.00133198806 - -0.00133198333 - -0.00133197738 - -0.00133196988 - -0.00133196043 - -0.00133194852 - -0.00133193351 - -0.00133191458 - -0.0013318907 - -0.00133186056 - -0.00133182251 - -0.00133177441 - -0.00133171355 - -0.00133163646 - -0.00133153867 - -0.00133141436 - -0.00133125597 - -0.00133105358 - -0.00133079405 - -0.00133045981 - -0.00133002714 - -0.00132946361 - -0.00132872435 - -0.00132774648 - -0.00132644076 - -0.00132467887 - -0.00132227422 - -0.00131895243 - -0.00131430631 - -0.00130772691 - -0.00129829851 - -0.00128464004 - -0.00126466932 - -0.00123526255 - -0.00119178671 - -0.00112751937 - -0.00103308572 - -0.000896341904 - -0.00070379119 - -0.000445806719 - -0.000129260776 - 0.00020024485 - 0.000437641774 - 0.000447959742 - 0.000221125486 - 3.4380488E-05 - 8.0976694E-05 - -0.00105866211 - -0.00105866199 - -0.00105866184 - -0.00105866165 - -0.00105866142 - -0.00105866112 - -0.00105866074 - -0.00105866027 - -0.00105865968 - -0.00105865893 - -0.00105865798 - -0.0010586568 - -0.0010586553 - -0.00105865342 - -0.00105865105 - -0.00105864806 - -0.0010586443 - -0.00105863957 - -0.0010586336 - -0.00105862608 - -0.00105861659 - -0.00105860464 - -0.00105858956 - -0.00105857053 - -0.00105854649 - -0.00105851611 - -0.00105847768 - -0.00105842899 - -0.00105836723 - -0.00105828871 - -0.00105818867 - -0.00105806084 - -0.00105789691 - -0.00105768578 - -0.00105741245 - -0.00105705644 - -0.00105658936 - -0.00105597145 - -0.00105514623 - -0.0010540325 - -0.00105251204 - -0.00105041093 - -0.00104747073 - -0.00104330436 - -0.0010373285 - -0.00102866063 - -0.00101596424 - -0.00099722068 - -0.000969405272 - -0.000928057824 - -0.000866790354 - -0.000776924872 - -0.00064781521 - -0.000469144243 - -0.000237630697 - 2.88491055E-05 - 0.000271142084 - 0.000383973289 - 0.000284382088 - 7.71585685E-05 - 3.25176116E-05 + 60 + 80 + 0.0001 -9.21034037 + 0.000125892541 -8.98008186 + 0.000158489319 -8.74982335 + 0.000199526231 -8.51956484 + 0.000251188643 -8.28930633 + 0.000316227766 -8.05904783 + 0.000398107171 -7.82878932 + 0.000501187234 -7.59853081 + 0.000630957344 -7.3682723 + 0.000794328235 -7.13801379 + 0.001 -6.90775528 + 0.00125892541 -6.67749677 + 0.00158489319 -6.44723826 + 0.00199526231 -6.21697975 + 0.00251188643 -5.98672124 + 0.00316227766 -5.75646273 + 0.00398107171 -5.52620422 + 0.00501187234 -5.29594571 + 0.00630957344 -5.0656872 + 0.00794328235 -4.8354287 + 0.01 -4.60517019 + 0.0125892541 -4.37491168 + 0.0158489319 -4.14465317 + 0.0199526231 -3.91439466 + 0.0251188643 -3.68413615 + 0.0316227766 -3.45387764 + 0.0398107171 -3.22361913 + 0.0501187234 -2.99336062 + 0.0630957344 -2.76310211 + 0.0794328235 -2.5328436 + 0.1 -2.30258509 + 0.125892541 -2.07232658 + 0.158489319 -1.84206807 + 0.199526231 -1.61180957 + 0.251188643 -1.38155106 + 0.316227766 -1.15129255 + 0.398107171 -0.921034037 + 0.501187234 -0.690775528 + 0.630957344 -0.460517019 + 0.794328235 -0.230258509 + 1. 0. + 1.25892541 0.230258509 + 1.58489319 0.460517019 + 1.99526231 0.690775528 + 2.51188643 0.921034037 + 3.16227766 1.15129255 + 3.98107171 1.38155106 + 5.01187234 1.61180957 + 6.30957344 1.84206807 + 7.94328235 2.07232658 + 10. 2.30258509 + 12.5892541 2.5328436 + 15.8489319 2.76310211 + 19.9526231 2.99336062 + 25.1188643 3.22361913 + 31.6227766 3.45387764 + 39.8107171 3.68413615 + 50.1187234 3.91439466 + 63.0957344 4.14465317 + 79.4328235 4.37491168 + 100. 4.60517019 + 0.001 -6.90775528 + 0.00112201845 -6.79262602 + 0.00125892541 -6.67749677 + 0.00141253754 -6.56236752 + 0.00158489319 -6.44723826 + 0.00177827941 -6.33210901 + 0.00199526231 -6.21697975 + 0.00223872114 -6.1018505 + 0.00251188643 -5.98672124 + 0.00281838293 -5.87159199 + 0.00316227766 -5.75646273 + 0.00354813389 -5.64133348 + 0.00398107171 -5.52620422 + 0.00446683592 -5.41107497 + 0.00501187234 -5.29594571 + 0.00562341325 -5.18081646 + 0.00630957344 -5.0656872 + 0.00707945784 -4.95055795 + 0.00794328235 -4.8354287 + 0.00891250938 -4.72029944 + 0.01 -4.60517019 + 0.0112201845 -4.49004093 + 0.0125892541 -4.37491168 + 0.0141253754 -4.25978242 + 0.0158489319 -4.14465317 + 0.0177827941 -4.02952391 + 0.0199526231 -3.91439466 + 0.0223872114 -3.7992654 + 0.0251188643 -3.68413615 + 0.0281838293 -3.56900689 + 0.0316227766 -3.45387764 + 0.0354813389 -3.33874838 + 0.0398107171 -3.22361913 + 0.0446683592 -3.10848988 + 0.0501187234 -2.99336062 + 0.0562341325 -2.87823137 + 0.0630957344 -2.76310211 + 0.0707945784 -2.64797286 + 0.0794328235 -2.5328436 + 0.0891250938 -2.41771435 + 0.1 -2.30258509 + 0.112201845 -2.18745584 + 0.125892541 -2.07232658 + 0.141253754 -1.95719733 + 0.158489319 -1.84206807 + 0.177827941 -1.72693882 + 0.199526231 -1.61180957 + 0.223872114 -1.49668031 + 0.251188643 -1.38155106 + 0.281838293 -1.2664218 + 0.316227766 -1.15129255 + 0.354813389 -1.03616329 + 0.398107171 -0.921034037 + 0.446683592 -0.805904783 + 0.501187234 -0.690775528 + 0.562341325 -0.575646273 + 0.630957344 -0.460517019 + 0.707945784 -0.345387764 + 0.794328235 -0.230258509 + 0.891250938 -0.115129255 + 1. 0. + 1.12201845 0.115129255 + 1.25892541 0.230258509 + 1.41253754 0.345387764 + 1.58489319 0.460517019 + 1.77827941 0.575646273 + 1.99526231 0.690775528 + 2.23872114 0.805904783 + 2.51188643 0.921034037 + 2.81838293 1.03616329 + 3.16227766 1.15129255 + 3.54813389 1.2664218 + 3.98107171 1.38155106 + 4.46683592 1.49668031 + 5.01187234 1.61180957 + 5.62341325 1.72693882 + 6.30957344 1.84206807 + 7.07945784 1.95719733 + 7.94328235 2.07232658 + 8.91250938 2.18745584 + 10. 2.30258509 + 26.1649637 + 26.1652789 + 26.1656735 + 26.1661666 + 26.1667818 + 26.1675472 + 26.1684966 + 26.1696694 + 26.1711103 + 26.1728682 + 26.1749926 + 26.1775273 + 26.180498 + 26.1838913 + 26.1876193 + 26.1914606 + 26.1949666 + 26.1973126 + 26.1970677 + 26.1918452 + 26.1777842 + 26.1488031 + 26.0955694 + 26.004154 + 25.8544286 + 25.6184534 + 25.2594425 + 24.7323852 + 23.9879433 + 22.9812173 + 21.6855492 + 20.1076351 + 18.2949959 + 16.3261541 + 14.2854038 + 12.2417977 + 10.2489045 + 8.35437038 + 6.60255292 + 5.03255272 + 3.67586322 + 2.55333738 + 1.67193012 + 1.02228613 + 0.578563848 + 0.301619759 + 0.145695492 + 0.0670601251 + 0.0333193933 + 0.0210231159 + 0.0132646894 + 0.0083694532 + 0.00528076797 + 0.00333193933 + 0.00210231159 + 0.00132646894 + 0.00083694532 + 0.000528076797 + 0.000333193933 + 0.000210231159 + 0.000132646894 + 24.0270715 + 24.0273681 + 24.0277396 + 24.0282042 + 24.0287843 + 24.0295072 + 24.0304052 + 24.0315168 + 24.0328863 + 24.0345632 + 24.0365995 + 24.0390453 + 24.0419387 + 24.045289 + 24.0490477 + 24.0530604 + 24.0569881 + 24.0601834 + 24.0614961 + 24.0589776 + 24.0494375 + 24.0278014 + 23.9862115 + 23.9128347 + 23.7904017 + 23.5946559 + 23.2931688 + 22.8454201 + 22.2055513 + 21.329397 + 20.1864789 + 18.7745782 + 17.129571 + 15.3207136 + 13.4292442 + 11.5253533 + 9.66287747 + 7.88789382 + 6.24309985 + 4.76621931 + 3.4876948 + 2.42788673 + 1.59402992 + 0.977965689 + 0.555928628 + 0.291503431 + 0.141893842 + 0.0659126311 + 0.0317145617 + 0.0218519652 + 0.0137876579 + 0.00869942402 + 0.00548896548 + 0.00346330308 + 0.00218519652 + 0.00137876579 + 0.000869942402 + 0.000548896548 + 0.000346330308 + 0.000218519652 + 0.000137876579 + 22.0501145 + 22.0503934 + 22.050743 + 22.0511805 + 22.0517273 + 22.0524093 + 22.0532578 + 22.0543101 + 22.0556096 + 22.0572058 + 22.0591524 + 22.0615038 + 22.0643074 + 22.0675906 + 22.0713365 + 22.075445 + 22.0796677 + 22.0835039 + 22.0860384 + 22.0856905 + 22.0798365 + 22.0642583 + 22.032363 + 21.9741287 + 21.8747873 + 21.7133575 + 21.4613844 + 21.0826172 + 20.5348378 + 19.7753741 + 18.7713146 + 17.5131141 + 16.025882 + 14.3690457 + 12.6193913 + 10.8476229 + 9.10830861 + 7.44630634 + 5.90268937 + 4.51387061 + 3.3092999 + 2.30886431 + 1.52005399 + 0.935828289 + 0.534376655 + 0.281858926 + 0.138230107 + 0.0647938818 + 0.0305555545 + 0.0192792515 + 0.0121643853 + 0.00767520827 + 0.00484272903 + 0.00305555545 + 0.00192792515 + 0.00121643853 + 0.000767520827 + 0.000484272903 + 0.000305555545 + 0.000192792515 + 0.000121643853 + 20.2226768 + 20.222939 + 20.2232678 + 20.2236795 + 20.2241945 + 20.2248375 + 20.2256384 + 20.2266334 + 20.2278648 + 20.2293814 + 20.2312378 + 20.2334911 + 20.2361959 + 20.2393934 + 20.2430919 + 20.2472355 + 20.2516497 + 20.2559556 + 20.2594332 + 20.2608102 + 20.2579413 + 20.2473355 + 20.2234797 + 20.1779153 + 20.0980542 + 19.9658136 + 19.7563348 + 19.4373732 + 18.9703936 + 18.3147791 + 17.436364 + 16.319801 + 14.9805183 + 13.4679374 + 11.8531343 + 10.2064492 + 8.58345254 + 7.02821709 + 5.5802574 + 4.27472599 + 3.14013172 + 2.19590946 + 1.44978297 + 0.895751247 + 0.513848281 + 0.27265364 + 0.13473659 + 0.0636837675 + 0.0301230881 + 0.019814614 + 0.0125021762 + 0.00788833993 + 0.00497720601 + 0.00314040469 + 0.0019814614 + 0.00125021762 + 0.000788833993 + 0.000497720601 + 0.000314040469 + 0.00019814614 + 0.000125021762 + 18.5341152 + 18.5343616 + 18.5346707 + 18.535058 + 18.5355427 + 18.5361485 + 18.5369039 + 18.5378437 + 18.5390089 + 18.5404476 + 18.5422141 + 18.5443676 + 18.5469674 + 18.5500652 + 18.5536895 + 18.5578196 + 18.5623414 + 18.5669761 + 18.5711662 + 18.5738974 + 18.5734265 + 18.5668785 + 18.5496616 + 18.5146609 + 18.4511826 + 18.3436978 + 18.17058 + 17.9033033 + 17.5069636 + 16.9433924 + 16.1781458 + 15.1914821 + 13.9903683 + 12.6143908 + 11.127886 + 9.59977593 + 8.08666305 + 6.63231252 + 5.27480006 + 4.04804782 + 2.97967463 + 2.08868315 + 1.38300707 + 0.857620668 + 0.494285939 + 0.263863094 + 0.131383431 + 0.0626390925 + 0.0300666276 + 0.0179939035 + 0.0113533856 + 0.00716350202 + 0.00451986421 + 0.00285184152 + 0.00179939035 + 0.00113533856 + 0.000716350202 + 0.000451986421 + 0.000285184152 + 0.000179939035 + 0.000113533856 + 16.9745109 + 16.9747424 + 16.9750328 + 16.9753969 + 16.975853 + 16.9764233 + 16.9771352 + 16.978022 + 16.9791233 + 16.9804861 + 16.982164 + 16.9842171 + 16.9867079 + 16.9896956 + 16.9932249 + 16.997303 + 17.0018647 + 17.0067141 + 17.0114265 + 17.0152037 + 17.0166402 + 17.0133808 + 17.0016189 + 16.975391 + 16.9256442 + 16.8390905 + 16.696992 + 16.4742396 + 16.1394396 + 15.6571224 + 14.9933486 + 14.1252485 + 13.0526028 + 11.80563 + 10.4411831 + 9.02563601 + 7.61638931 + 6.25735581 + 4.98536859 + 3.83313817 + 2.82744172 + 1.98686465 + 1.31953078 + 0.821326177 + 0.475633485 + 0.255464231 + 0.128174668 + 0.0616612263 + 0.0298543177 + 0.015403983 + 0.00971925622 + 0.0061324361 + 0.0038693056 + 0.00244136678 + 0.0015403983 + 0.000971925622 + 0.00061324361 + 0.00038693056 + 0.000244136678 + 0.00015403983 + 9.71925622E-05 + 15.5346205 + 15.5348379 + 15.5351107 + 15.5354529 + 15.5358817 + 15.5364183 + 15.5370887 + 15.5379248 + 15.5389647 + 15.5402538 + 15.5418449 + 15.543798 + 15.5461779 + 15.5490494 + 15.5524683 + 15.5564644 + 15.561012 + 15.5659815 + 15.5710603 + 15.5756285 + 15.5785633 + 15.5779485 + 15.5706423 + 15.5516677 + 15.5133884 + 15.444475 + 15.3287559 + 15.1442368 + 14.8628633 + 14.4519948 + 13.8788036 + 13.1184013 + 12.1646498 + 11.0391045 + 9.7906956 + 8.48214512 + 7.17116379 + 5.90218268 + 4.71106756 + 3.62934121 + 2.68297316 + 1.89015041 + 1.25917468 + 0.786762696 + 0.457838983 + 0.247434294 + 0.125096883 + 0.0606980395 + 0.0295993088 + 0.0152589564 + 0.0101334241 + 0.00639375836 + 0.0040341888 + 0.00254540105 + 0.00160603949 + 0.00101334241 + 0.000639375836 + 0.00040341888 + 0.000254540105 + 0.000160603949 + 0.000101334241 + 14.2058328 + 14.2060368 + 14.206293 + 14.2066144 + 14.2070173 + 14.2075219 + 14.2081529 + 14.2089405 + 14.2099214 + 14.2111393 + 14.212646 + 14.2145005 + 14.2167687 + 14.2195192 + 14.2228166 + 14.2267077 + 14.2311984 + 14.2362134 + 14.2415314 + 14.2466799 + 14.2507732 + 14.2522633 + 14.2485727 + 14.2355646 + 14.2068234 + 14.1527245 + 14.0593669 + 13.9075721 + 13.67242 + 13.3241366 + 12.8314572 + 12.1684161 + 11.3241717 + 10.3124876 + 9.17423569 + 7.96749444 + 6.74959196 + 5.56569667 + 4.45105218 + 3.43603612 + 2.54583489 + 1.79825544 + 1.2017454 + 0.753833174 + 0.440854374 + 0.239750702 + 0.122143762 + 0.0597701255 + 0.0293782461 + 0.0151826155 + 0.0106334365 + 0.00670924486 + 0.00423324732 + 0.00267099849 + 0.00168528611 + 0.00106334365 + 0.000670924486 + 0.000423324732 + 0.000267099849 + 0.000168528611 + 0.000106334365 + 12.9801254 + 12.9803168 + 12.9805572 + 12.980859 + 12.981238 + 12.9817122 + 12.9823056 + 12.983047 + 12.9839709 + 12.9851205 + 12.9865452 + 12.9883032 + 12.9904603 + 12.9930878 + 12.9962558 + 13.0000247 + 13.0044253 + 13.0094258 + 13.0148791 + 13.0204354 + 13.0254054 + 13.0285506 + 13.0277692 + 13.0196412 + 12.9987972 + 12.9570932 + 12.8826259 + 12.7587476 + 12.5634455 + 12.2697756 + 11.8483523 + 11.2729121 + 10.529036 + 9.6236686 + 8.58976621 + 7.47995296 + 6.35034249 + 5.24686679 + 4.20452429 + 3.25263659 + 2.41561682 + 1.71090972 + 1.14709608 + 0.722445555 + 0.424633204 + 0.232394344 + 0.119307494 + 0.0588761487 + 0.0291516576 + 0.0151597245 + 0.00842477705 + 0.00531567496 + 0.00335396415 + 0.00211620832 + 0.00133523718 + 0.000842477705 + 0.000531567496 + 0.000335396415 + 0.000211620832 + 0.000133523718 + 8.42477705E-05 + 11.8500275 + 11.8502071 + 11.8504327 + 11.8507159 + 11.8510713 + 11.8515168 + 11.8520746 + 11.852772 + 11.8536424 + 11.8547263 + 11.8560719 + 11.8577359 + 11.8597836 + 11.8622868 + 11.8653206 + 11.8689548 + 11.8732394 + 11.8781779 + 11.8836832 + 11.8895062 + 11.8951206 + 11.8995466 + 11.9010834 + 11.8969192 + 11.8825806 + 11.851204 + 11.7926374 + 11.6924919 + 11.5314267 + 11.2852344 + 10.9266117 + 10.4296237 + 9.7772851 + 8.97074018 + 8.03540779 + 7.01787167 + 5.97213866 + 4.94472053 + 3.97073291 + 3.07858988 + 2.29193273 + 1.62785717 + 1.09506463 + 0.692511929 + 0.409130913 + 0.2253456 + 0.116579793 + 0.0580126558 + 0.0289477931 + 0.0151278576 + 0.00841075529 + 0.00492179651 + 0.00310544366 + 0.00195940248 + 0.00123629939 + 0.000780052179 + 0.000492179651 + 0.000310544366 + 0.000195940248 + 0.000123629939 + 7.80052179E-05 + 10.8085819 + 10.8087503 + 10.8089619 + 10.8092276 + 10.8095611 + 10.8099794 + 10.8105034 + 10.8111591 + 10.8119781 + 10.8129992 + 10.8142686 + 10.8158416 + 10.817782 + 10.8201618 + 10.8230588 + 10.8265498 + 10.8306994 + 10.8355386 + 10.8410293 + 10.8470041 + 10.853072 + 10.8584686 + 10.8618301 + 10.8608587 + 10.8518479 + 10.8290362 + 10.783801 + 10.7037595 + 10.5720041 + 10.3669319 + 10.0634294 + 9.63637758 + 9.06710913 + 8.35198174 + 7.50944176 + 6.57968941 + 5.61375222 + 4.65833791 + 3.74897148 + 2.91337313 + 2.17441718 + 1.54885865 + 1.04550381 + 0.663949935 + 0.394306698 + 0.21858646 + 0.113954836 + 0.0571782126 + 0.0287406795 + 0.0150799523 + 0.00838809431 + 0.00559767958 + 0.00353189704 + 0.00222847638 + 0.00140607354 + 0.000887172426 + 0.000559767958 + 0.000353189704 + 0.000222847638 + 0.000140607354 + 8.87172426E-05 + 9.84931108 + 9.84946893 + 9.8496673 + 9.84991651 + 9.85022938 + 9.85062191 + 9.85111393 + 9.85172996 + 9.85250013 + 9.85346121 + 9.8546577 + 9.85614273 + 9.85797871 + 9.86023704 + 9.86299652 + 9.86633882 + 9.87033948 + 9.87505117 + 9.88047429 + 9.88650865 + 9.89287379 + 9.89898459 + 9.90375956 + 9.90533573 + 9.90065722 + 9.88491208 + 9.85080673 + 9.78773063 + 9.68097585 + 9.51138325 + 9.25606257 + 8.89107287 + 8.39681843 + 7.76584049 + 7.01031005 + 6.16394188 + 5.27400113 + 4.3868429 + 3.53857556 + 2.75649309 + 2.06272585 + 1.47368618 + 0.998274201 + 0.636681371 + 0.380121387 + 0.212099296 + 0.111426978 + 0.0563698768 + 0.028539381 + 0.0150461497 + 0.0083876929 + 0.00491582846 + 0.00151736168 + 0.000957390496 + 0.000604072565 + 0.000381144022 + 0.00024048562 + 0.000151736168 + 9.57390496E-05 + 6.04072565E-05 + 3.81144022E-05 + 8.96618645 + 8.96633437 + 8.9665203 + 8.96675392 + 8.96704732 + 8.96741554 + 8.9678773 + 8.96845576 + 8.96917948 + 8.97008342 + 8.97121028 + 8.97261077 + 8.97434557 + 8.97648488 + 8.97910762 + 8.98229838 + 8.98614058 + 8.99070331 + 8.99601782 + 9.00203764 + 9.00857317 + 9.0151875 + 9.02103492 + 9.02461806 + 9.02343436 + 9.01348468 + 8.98862723 + 8.93980964 + 8.85429871 + 8.71520272 + 8.50182782 + 8.19166682 + 7.76481933 + 7.21090894 + 6.53660993 + 5.76926956 + 4.95175054 + 4.12939706 + 3.33892095 + 2.6074847 + 1.95653293 + 1.40212583 + 0.953244606 + 0.610632998 + 0.366537602 + 0.205868159 + 0.108988504 + 0.0555866803 + 0.0283416518 + 0.0150076716 + 0.00838620514 + 0.00493668711 + 0.00353773777 + 0.00223216163 + 0.00140839877 + 0.00088863955 + 0.000560693651 + 0.000353773777 + 0.000223216163 + 0.000140839877 + 8.8863955E-05 + 8.153598 + 8.15373657 + 8.15391078 + 8.15412972 + 8.15440475 + 8.15475001 + 8.15518317 + 8.15572607 + 8.15640572 + 8.15725526 + 8.15831534 + 8.15963477 + 8.16127201 + 8.16329548 + 8.16578342 + 8.16882185 + 8.17249959 + 8.17689796 + 8.18207215 + 8.1880189 + 8.19462249 + 8.20156801 + 8.20820583 + 8.21334577 + 8.21495354 + 8.2097239 + 8.19250998 + 8.15562329 + 8.08809214 + 7.97510701 + 7.79810071 + 7.53616387 + 7.16959348 + 6.68590334 + 6.08708491 + 5.3944232 + 4.6459168 + 3.88519277 + 3.14941933 + 2.46591016 + 1.85553151 + 1.33397503 + 0.910290781 + 0.585734979 + 0.353520521 + 0.199877718 + 0.106634445 + 0.0548262964 + 0.0281491974 + 0.0149709845 + 0.00838166385 + 0.00490482416 + 0.00509966305 + 0.00395590895 + 0.00249600981 + 0.00157487572 + 0.000993679402 + 0.000626969317 + 0.000395590895 + 0.000249600981 + 0.000157487572 + 7.40632504 + 7.40645482 + 7.406618 + 7.40682311 + 7.40708082 + 7.40740444 + 7.40781051 + 7.40831979 + 7.40895771 + 7.40975572 + 7.41075232 + 7.41199425 + 7.41353764 + 7.41544889 + 7.41780486 + 7.42069196 + 7.42420207 + 7.42842547 + 7.43343576 + 7.43926361 + 7.44585341 + 7.45298997 + 7.46018637 + 7.46650901 + 7.47031892 + 7.46890219 + 7.45796762 + 7.43101571 + 7.3786373 + 7.28791851 + 7.14231618 + 6.92260831 + 6.60967972 + 6.18964191 + 5.66061271 + 5.03826823 + 4.35547422 + 3.65344942 + 2.96951328 + 2.33135779 + 1.75943086 + 1.26904276 + 0.869295911 + 0.561921584 + 0.341037019 + 0.194113027 + 0.104359136 + 0.0540871639 + 0.0279604738 + 0.0149337794 + 0.00837700982 + 0.00489659124 + 0.00286425263 + 0.00548095688 + 0.0615575851 + 0.0388402104 + 0.024506516 + 0.0154625663 + 0.00975621975 + 0.00615575851 + 0.00388402104 + 6.71951225 + 6.71963376 + 6.71978655 + 6.71997864 + 6.72022003 + 6.72052325 + 6.7209039 + 6.7213814 + 6.72197983 + 6.72272893 + 6.72366521 + 6.7248332 + 6.72628667 + 6.72808971 + 6.73031733 + 6.73305508 + 6.73639671 + 6.74043847 + 6.74526769 + 6.75094186 + 6.75745277 + 6.76466719 + 6.77223218 + 6.77942815 + 6.78494858 + 6.78658133 + 6.78076946 + 6.76204555 + 6.72237918 + 6.65056869 + 6.53197051 + 6.34907944 + 6.08366019 + 5.72102384 + 5.25619031 + 4.6997844 + 4.07946159 + 3.43341231 + 2.79867114 + 2.20344213 + 1.66795731 + 1.20714855 + 0.830149003 + 0.53913081 + 0.329055795 + 0.188560153 + 0.102157527 + 0.0533673496 + 0.0277755197 + 0.014899945 + 0.00837189984 + 0.00489500261 + 0.00292400599 + 0.00202530697 + 0.00127788231 + 0.000806289226 + 0.000508734109 + 0.000320989523 + 0.000202530697 + 0.000127788231 + 8.06289226E-05 + 6.08864399 + 6.08875772 + 6.08890075 + 6.08908059 + 6.08930662 + 6.08959061 + 6.08994723 + 6.09039474 + 6.09095585 + 6.09165863 + 6.09253766 + 6.09363528 + 6.0950028 + 6.09670184 + 6.09880515 + 6.10139684 + 6.10457099 + 6.10842762 + 6.113064 + 6.11855812 + 6.12493967 + 6.13214146 + 6.13992047 + 6.147735 + 6.15455701 + 6.15859909 + 6.15693192 + 6.14498067 + 6.1159255 + 6.06010041 + 5.96462391 + 5.81368987 + 5.59014906 + 5.27901178 + 4.87291769 + 4.37806293 + 3.81698971 + 3.22435396 + 2.63638144 + 2.0818003 + 1.58085242 + 1.14812228 + 0.792745809 + 0.517303925 + 0.317546855 + 0.183206168 + 0.100024188 + 0.0526657133 + 0.0275934923 + 0.0148645861 + 0.00836734802 + 0.0048963336 + 0.00291657952 + 0.00200517933 + 0.00232836919 + 0.0150446033 + 0.00949250295 + 0.00598936446 + 0.00377903349 + 0.00238440894 + 0.00150446033 + 5.50952141 + 5.50962783 + 5.50976168 + 5.50992999 + 5.51014158 + 5.51040747 + 5.51074144 + 5.51116067 + 5.51168653 + 5.51234551 + 5.5131703 + 5.51420104 + 5.51548661 + 5.51708601 + 5.51906949 + 5.52151911 + 5.52452822 + 5.5281988 + 5.53263496 + 5.53793004 + 5.54414343 + 5.55126084 + 5.55912918 + 5.5673534 + 5.57513842 + 5.58105502 + 5.5827081 + 5.57629233 + 5.55604585 + 5.51367121 + 5.43790436 + 5.31458542 + 5.12778494 + 4.86261512 + 4.5099808 + 4.07229975 + 3.56724669 + 3.02557781 + 2.48214894 + 1.96609164 + 1.49787306 + 1.0918028 + 0.756987623 + 0.496385399 + 0.306482838 + 0.178038526 + 0.0979543256 + 0.0519803885 + 0.0274140085 + 0.0148293044 + 0.00836258747 + 0.00489567842 + 0.00293783192 + 0.00174431162 + 0.00124009692 + 0.0152486166 + 0.00962122663 + 0.00607058361 + 0.00383027931 + 0.00241674286 + 0.00152486166 + 4.97824174 + 4.97834128 + 4.9784665 + 4.97862399 + 4.97882198 + 4.97907084 + 4.97938349 + 4.97977607 + 4.98026868 + 4.98088628 + 4.98165973 + 4.98262703 + 4.98383463 + 4.98533886 + 4.98720722 + 4.98951933 + 4.99236701 + 4.99585268 + 5.00008476 + 5.00516775 + 5.01118391 + 5.01816098 + 5.02601863 + 5.03448268 + 5.04295154 + 5.05029707 + 5.05457792 + 5.05264915 + 5.03966954 + 5.00855413 + 4.94951041 + 4.84994602 + 4.69522561 + 4.47087673 + 4.16663525 + 3.78178683 + 3.32950151 + 2.83642419 + 2.33549149 + 1.85599215 + 1.41879174 + 1.03803813 + 0.722781373 + 0.476322918 + 0.295836773 + 0.173045256 + 0.0959437135 + 0.0513097233 + 0.0272370068 + 0.0147943879 + 0.00835766896 + 0.00489549681 + 0.00293674338 + 0.0017908797 + 0.00129381553 + 0.00462269196 + 0.0212959642 + 0.013436845 + 0.00847807605 + 0.00534930435 + 0.00337518287 + 4.49117962 + 4.49127272 + 4.49138983 + 4.49153714 + 4.49172236 + 4.4919552 + 4.49224779 + 4.49261527 + 4.49307653 + 4.49365507 + 4.49437999 + 4.4952872 + 4.49642074 + 4.49783425 + 4.49959237 + 4.50177195 + 4.50446262 + 4.50776612 + 4.51179309 + 4.51665579 + 4.52245363 + 4.52924736 + 4.53701518 + 4.54558157 + 4.5545053 + 4.56291027 + 4.56923896 + 4.57091129 + 4.56388381 + 4.54213992 + 4.49721514 + 4.41798848 + 4.29114498 + 4.10286279 + 3.8421903 + 3.50590038 + 3.10310442 + 2.65627613 + 2.19593996 + 1.75119222 + 1.34339518 + 0.986684604 + 0.690039158 + 0.457066884 + 0.285583478 + 0.168215035 + 0.0939877131 + 0.0506525253 + 0.027061463 + 0.0147590591 + 0.00835272277 + 0.00489468575 + 0.00293835804 + 0.0017908618 + 0.00118556692 + 0.00136811865 + 0.0180735029 + 0.0114036094 + 0.0071951911 + 0.00453985867 + 0.00286445717 + 4.04496928 + 4.04505632 + 4.04516582 + 4.04530356 + 4.04547678 + 4.04569456 + 4.04596827 + 4.04631212 + 4.04674386 + 4.04728557 + 4.04796465 + 4.048815 + 4.04987831 + 4.05120553 + 4.05285834 + 4.05491063 + 4.05744937 + 4.06057464 + 4.0643977 + 4.06903578 + 4.07460075 + 4.08117883 + 4.08879484 + 4.09735332 + 4.10654517 + 4.11570441 + 4.12359706 + 4.12812438 + 4.12593134 + 4.11193793 + 4.07886959 + 4.01696977 + 3.91423281 + 3.75765426 + 3.53599507 + 3.24408885 + 2.88748527 + 2.48456552 + 2.06303938 + 1.65139161 + 1.27148393 + 0.937606959 + 0.658677825 + 0.438570611 + 0.27569929 + 0.163537412 + 0.0920820429 + 0.0500072991 + 0.0268872752 + 0.0147234781 + 0.00834749967 + 0.00489440789 + 0.0029380571 + 0.00179069444 + 0.00110396008 + 0.0006324403 + 0.000399042852 + 0.000251779018 + 0.000158861821 + 0.000100235033 + 6.324403E-05 + 3.63648523 + 3.63656658 + 3.63666894 + 3.63679769 + 3.63695964 + 3.63716327 + 3.63741923 + 3.63774087 + 3.63814481 + 3.6386518 + 3.63928763 + 3.64008425 + 3.64108105 + 3.64232631 + 3.64387878 + 3.64580919 + 3.64820149 + 3.65115343 + 3.6547756 + 3.6591878 + 3.66451071 + 3.6708497 + 3.67826614 + 3.68672922 + 3.69603795 + 3.70570075 + 3.71475526 + 3.7215114 + 3.72320583 + 3.71557556 + 3.69240528 + 3.64519041 + 3.56319516 + 3.43434177 + 3.24742668 + 2.99586004 + 2.68214868 + 2.32077806 + 1.93635285 + 1.55629724 + 1.20287021 + 0.890678244 + 0.628618811 + 0.420789784 + 0.266161696 + 0.159002035 + 0.0902227763 + 0.0493724453 + 0.0267141325 + 0.0146876527 + 0.00834212574 + 0.00489384014 + 0.0029382967 + 0.00179103419 + 0.00109706737 + 0.000689210129 + 0.000434862193 + 0.000274379494 + 0.000173121757 + 0.000109232444 + 6.89210129E-05 + 3.26281979 + 3.2628958 + 3.26299145 + 3.26311178 + 3.26326313 + 3.26345347 + 3.26369277 + 3.2639935 + 3.26437129 + 3.26484561 + 3.26544068 + 3.26618659 + 3.2671205 + 3.26828809 + 3.26974516 + 3.27155922 + 3.27381095 + 3.27659523 + 3.28002093 + 3.28420866 + 3.28928472 + 3.29536854 + 3.30254983 + 3.31084918 + 3.32015366 + 3.33011568 + 3.33999993 + 3.34846193 + 3.3532448 + 3.35079506 + 3.33583441 + 3.30099651 + 3.23675546 + 3.132022 + 2.97588018 + 2.7607686 + 2.48666762 + 2.16445631 + 1.81546593 + 1.46562096 + 1.13737568 + 0.845779763 + 0.59978762 + 0.403682669 + 0.256949345 + 0.154599199 + 0.0884061065 + 0.0487468004 + 0.0265414939 + 0.0146511972 + 0.00833655397 + 0.00489330983 + 0.00293836859 + 0.00179006879 + 0.00110013643 + 0.000677445281 + 0.000427439076 + 0.000269695824 + 0.000170166561 + 0.000107367841 + 6.77445281E-05 + 2.92126017 + 2.92133118 + 2.92142054 + 2.92153297 + 2.9216744 + 2.92185227 + 2.92207593 + 2.92235706 + 2.92271029 + 2.92315389 + 2.92371062 + 2.92440876 + 2.92528333 + 2.9263775 + 2.92774413 + 2.9294475 + 2.93156487 + 2.93418783 + 2.93742279 + 2.94138971 + 2.946218 + 2.95203696 + 2.95895775 + 2.96704152 + 2.97624643 + 2.98634308 + 2.99678509 + 3.00651905 + 3.01371991 + 3.01544742 + 3.00724753 + 2.98278014 + 2.933655 + 2.84979474 + 2.72076046 + 2.53840465 + 2.30067535 + 2.01520118 + 1.69999233 + 1.37907938 + 1.07482835 + 0.802800976 + 0.572114139 + 0.387209612 + 0.248042042 + 0.150319737 + 0.0866282177 + 0.0481289606 + 0.0263691264 + 0.0146143207 + 0.00833084503 + 0.00489273662 + 0.00293815859 + 0.0017902894 + 0.00110539606 + 0.000664655516 + 0.000419369279 + 0.000264604127 + 0.000166953917 + 0.0001053408 + 6.64655516E-05 + 2.60927255 + 2.60933889 + 2.60942237 + 2.6095274 + 2.60965954 + 2.60982575 + 2.61003476 + 2.61029753 + 2.61062775 + 2.61104254 + 2.61156328 + 2.61221654 + 2.61303529 + 2.61406024 + 2.61534143 + 2.6169399 + 2.61892941 + 2.62139803 + 2.62444908 + 2.6282008 + 2.6327837 + 2.63833354 + 2.6449773 + 2.65280769 + 2.6618397 + 2.6719404 + 2.68271988 + 2.69336884 + 2.70242884 + 2.70748737 + 2.70481146 + 2.68897924 + 2.65265308 + 2.58676067 + 2.48147493 + 2.32838223 + 2.12385601 + 1.87267101 + 1.58957925 + 1.29639568 + 1.01505996 + 0.761638773 + 0.545532145 + 0.371333418 + 0.239420688 + 0.146154898 + 0.0848855107 + 0.0475176575 + 0.026196224 + 0.0145768513 + 0.00832477968 + 0.00489197115 + 0.00293820136 + 0.00179015834 + 0.00110112529 + 0.000681650813 + 0.000430092587 + 0.000271370076 + 0.000171222943 + 0.000108034373 + 6.81650813E-05 + 2.3245018 + 2.32456377 + 2.32464176 + 2.32473989 + 2.32486336 + 2.32501867 + 2.325214 + 2.32545959 + 2.32576828 + 2.32615613 + 2.32664316 + 2.32725434 + 2.32802069 + 2.32898058 + 2.33018128 + 2.33168066 + 2.33354897 + 2.33587059 + 2.33874536 + 2.34228894 + 2.34663138 + 2.35191216 + 2.35826953 + 2.36582022 + 2.37462426 + 2.38462689 + 2.39556705 + 2.4068393 + 2.41729519 + 2.42497444 + 2.42677165 + 2.4180809 + 2.39252954 + 2.3420207 + 2.25742753 + 2.13032846 + 1.95593368 + 1.73657765 + 1.48391138 + 1.21730253 + 0.957903452 + 0.722196189 + 0.519979757 + 0.356018544 + 0.231067171 + 0.142096348 + 0.0831745527 + 0.0469114675 + 0.0260225652 + 0.0145383165 + 0.0083185797 + 0.00489122722 + 0.00293811222 + 0.00179015305 + 0.0011013634 + 0.000680111719 + 0.000429121484 + 0.000270757352 + 0.00017083634 + 0.000107790443 + 6.80111719E-05 + 2.06478787 + 2.06484577 + 2.06491863 + 2.06501032 + 2.06512568 + 2.06527081 + 2.06545335 + 2.0656829 + 2.06597146 + 2.06633408 + 2.06678956 + 2.06736131 + 2.06807849 + 2.06897728 + 2.07010223 + 2.07150814 + 2.07326177 + 2.07544372 + 2.07815007 + 2.08149325 + 2.08560162 + 2.09061622 + 2.09668277 + 2.10393592 + 2.11247086 + 2.1222956 + 2.13325462 + 2.14491187 + 2.15637992 + 2.16608436 + 2.17146346 + 2.16863184 + 2.15209324 + 2.11468022 + 2.04801671 + 1.94387468 + 1.79666085 + 1.60668026 + 1.38271321 + 1.14154611 + 0.903191975 + 0.684380594 + 0.495399454 + 0.341231528 + 0.222964456 + 0.138136101 + 0.0814920819 + 0.046309142 + 0.0258476014 + 0.0144988151 + 0.00831201367 + 0.00489041217 + 0.00293804955 + 0.0017901088 + 0.00110094336 + 0.000679425389 + 0.000428688439 + 0.000270484119 + 0.000170663942 + 0.000107681667 + 6.79425389E-05 + 1.82818831 + 1.82824239 + 1.82831045 + 1.8283961 + 1.82850387 + 1.82863946 + 1.82881001 + 1.8290245 + 1.82929418 + 1.82963313 + 1.83005897 + 1.83059367 + 1.83126462 + 1.83210581 + 1.83315929 + 1.83447682 + 1.8361217 + 1.83817074 + 1.840716 + 1.84386623 + 1.84774712 + 1.85249941 + 1.85827328 + 1.86521615 + 1.87345014 + 1.8830331 + 1.89389522 + 1.90574045 + 1.9179002 + 1.92912789 + 1.93733062 + 1.93925592 + 1.93019709 + 1.90385944 + 1.85263835 + 1.76865117 + 1.64580805 + 1.48277675 + 1.28574874 + 1.06889008 + 0.850758941 + 0.648101653 + 0.471738221 + 0.326940745 + 0.215096364 + 0.134266656 + 0.0798346938 + 0.0457094397 + 0.0256708483 + 0.0144581549 + 0.00830500348 + 0.004889644 + 0.00293791584 + 0.00179012714 + 0.00109719049 + 0.000681258089 + 0.000429844795 + 0.00027121373 + 0.000171124295 + 0.000107972131 + 6.81258089E-05 + 1.61298708 + 1.61303756 + 1.61310109 + 1.61318104 + 1.61328165 + 1.61340823 + 1.61356747 + 1.61376775 + 1.61401959 + 1.61433618 + 1.614734 + 1.61523364 + 1.61586079 + 1.61664738 + 1.61763297 + 1.61886639 + 1.62040753 + 1.62232931 + 1.62471966 + 1.62768321 + 1.63134213 + 1.63583542 + 1.64131508 + 1.64793703 + 1.65584332 + 1.66513071 + 1.67579829 + 1.68766479 + 1.70024403 + 1.71256676 + 1.7229427 + 1.72867252 + 1.72575603 + 1.70870858 + 1.67069497 + 1.604288 + 1.50315701 + 1.36469564 + 1.19281895 + 0.999118875 + 0.800439389 + 0.61326942 + 0.448946969 + 0.313116559 + 0.207447637 + 0.130480761 + 0.0781993155 + 0.0451110551 + 0.0254918071 + 0.0144161676 + 0.00829759133 + 0.00488951539 + 0.00293781279 + 0.00179008515 + 0.0011009588 + 0.000681310995 + 0.000429878176 + 0.000271234792 + 0.000171137584 + 0.000107980516 + 6.81310995E-05 + 1.41766991 + 1.41771696 + 1.41777618 + 1.41785071 + 1.41794449 + 1.41806249 + 1.41821095 + 1.41839769 + 1.41863253 + 1.41892778 + 1.41929885 + 1.41976501 + 1.42035029 + 1.42108464 + 1.42200518 + 1.42315786 + 1.42459914 + 1.42639808 + 1.42863827 + 1.43141983 + 1.43486074 + 1.43909695 + 1.44428005 + 1.45057079 + 1.45812522 + 1.46706963 + 1.47745758 + 1.48920106 + 1.50196479 + 1.51501285 + 1.52699899 + 1.53570503 + 1.53775917 + 1.52842137 + 1.50160734 + 1.45042077 + 1.36849931 + 1.25229055 + 1.10375876 + 0.932039913 + 0.752071971 + 0.579792964 + 0.42698003 + 0.299731565 + 0.200003781 + 0.126771608 + 0.0765828994 + 0.044512597 + 0.0253100308 + 0.014372568 + 0.00828970646 + 0.00488756396 + 0.00293776718 + 0.00179002797 + 0.00110094535 + 0.000681289726 + 0.000429864756 + 0.000271226325 + 0.000171132242 + 0.000107977145 + 6.81289726E-05 + 1.24085909 + 1.24090285 + 1.24095793 + 1.24102725 + 1.24111448 + 1.24122425 + 1.24136235 + 1.24153608 + 1.24175459 + 1.24202933 + 1.24237468 + 1.24280862 + 1.24335359 + 1.24403756 + 1.24489531 + 1.2459699 + 1.24731443 + 1.24899396 + 1.25108766 + 1.2536908 + 1.25691653 + 1.26089662 + 1.26578039 + 1.27173021 + 1.2789111 + 1.28747082 + 1.29750511 + 1.30900053 + 1.32174558 + 1.33519914 + 1.34830736 + 1.35926824 + 1.36526556 + 1.36223781 + 1.34482099 + 1.30669695 + 1.24163886 + 1.14543877 + 1.01843594 + 0.867485808 + 0.705501537 + 0.547579231 + 0.405793937 + 0.286760831 + 0.192751033 + 0.123132623 + 0.0749824791 + 0.0439128517 + 0.0251248796 + 0.0143272646 + 0.00828124833 + 0.00488639877 + 0.00293762921 + 0.00179003376 + 0.00110090151 + 0.000681115389 + 0.000429754757 + 0.00027115692 + 0.00017108845 + 0.000107949514 + 6.81115389E-05 + 1.0812188 + 1.0812594 + 1.0813105 + 1.08137481 + 1.08145574 + 1.08155758 + 1.08168573 + 1.08184694 + 1.08204972 + 1.08230471 + 1.08262529 + 1.08302817 + 1.08353425 + 1.08416959 + 1.08496664 + 1.08596564 + 1.0872163 + 1.08877973 + 1.0907305 + 1.09315882 + 1.09617248 + 1.09989817 + 1.10448135 + 1.11008339 + 1.11687398 + 1.12501561 + 1.13463561 + 1.1457792 + 1.15833508 + 1.17192345 + 1.18573708 + 1.19833167 + 1.20737877 + 1.2094297 + 1.19980089 + 1.17277609 + 1.12239363 + 1.04404232 + 0.936752202 + 0.805317762 + 0.660582523 + 0.516532837 + 0.385345894 + 0.274182013 + 0.185676429 + 0.119557528 + 0.0733950476 + 0.043310475 + 0.0249357971 + 0.0142800046 + 0.00827214821 + 0.00488508471 + 0.00293746431 + 0.00179008871 + 0.00110077856 + 0.000681261813 + 0.000429847145 + 0.000271215213 + 0.00017112523 + 0.000107972721 + 6.81261813E-05 + 0.937358464 + 0.937396041 + 0.937443338 + 0.937502867 + 0.937577785 + 0.937672065 + 0.937790696 + 0.937939949 + 0.938127698 + 0.938363823 + 0.938660712 + 0.939033879 + 0.939502728 + 0.940091483 + 0.940830326 + 0.941756743 + 0.942917136 + 0.944368663 + 0.946181306 + 0.948440067 + 0.951247068 + 0.954723272 + 0.959009075 + 0.964262803 + 0.97065537 + 0.978358413 + 0.987522097 + 0.998236803 + 1.01047128 + 1.02397793 + 1.03815577 + 1.05186549 + 1.06320331 + 1.06926849 + 1.06601058 + 1.04831855 + 1.01059106 + 0.948027098 + 0.858645418 + 0.745430586 + 0.617184033 + 0.486556694 + 0.365591941 + 0.261975155 + 0.178767845 + 0.116040324 + 0.0718177812 + 0.0427041112 + 0.0247422107 + 0.0142305115 + 0.00826239243 + 0.00488358983 + 0.00293727661 + 0.00179006079 + 0.00110085704 + 0.000681264237 + 0.000429848674 + 0.000271216178 + 0.000171125839 + 0.000107973105 + 6.81264237E-05 + 0.807767075 + 0.807801819 + 0.807845553 + 0.807900597 + 0.807969872 + 0.808057054 + 0.808166758 + 0.808304788 + 0.808478432 + 0.808696837 + 0.808971477 + 0.809316728 + 0.809750581 + 0.810295517 + 0.810979562 + 0.811837584 + 0.8129128 + 0.814258562 + 0.81594037 + 0.81803806 + 0.820648028 + 0.823885188 + 0.827884159 + 0.832798813 + 0.838798739 + 0.846060452 + 0.854749922 + 0.864991636 + 0.876817481 + 0.890087078 + 0.904370417 + 0.918785895 + 0.9317959 + 0.94098397 + 0.942879431 + 0.932961702 + 0.906052731 + 0.857335258 + 0.784088884 + 0.687757853 + 0.575196708 + 0.457554492 + 0.34648511 + 0.250121978 + 0.172014229 + 0.112575157 + 0.0702478723 + 0.0420924131 + 0.024543515 + 0.014178522 + 0.0082518256 + 0.00488194209 + 0.00293707115 + 0.00178998335 + 0.00110084718 + 0.000681259642 + 0.000429845774 + 0.000271214348 + 0.000171124685 + 0.000107972377 + 6.81259642E-05 + 0.690803152 + 0.690835311 + 0.690875791 + 0.69092674 + 0.690990865 + 0.691071566 + 0.691173121 + 0.691300905 + 0.691461668 + 0.691663888 + 0.691918203 + 0.692237943 + 0.692639803 + 0.693144658 + 0.693778556 + 0.694573935 + 0.695571064 + 0.696819745 + 0.698381265 + 0.700330566 + 0.702758512 + 0.70577404 + 0.709505789 + 0.714102455 + 0.719730749 + 0.726569048 + 0.734793907 + 0.744555244 + 0.755934353 + 0.768877213 + 0.783094421 + 0.797920231 + 0.812129568 + 0.823728652 + 0.829768825 + 0.826289671 + 0.80856945 + 0.77190759 + 0.7130832 + 0.632273825 + 0.53454046 + 0.429435717 + 0.327974358 + 0.238604583 + 0.165405844 + 0.109156284 + 0.0686825269 + 0.0414739901 + 0.0243390181 + 0.0141238102 + 0.00824032123 + 0.00488009955 + 0.00293683112 + 0.00178995802 + 0.00110080691 + 0.000681297415 + 0.000429869608 + 0.000271229386 + 0.000171134173 + 0.000107978363 + 6.81297415E-05 + 0.584746675 + 0.584776557 + 0.58481417 + 0.584861514 + 0.584921101 + 0.584996095 + 0.585090471 + 0.585209226 + 0.58535864 + 0.585546598 + 0.585782998 + 0.58608025 + 0.586453901 + 0.586923403 + 0.587513051 + 0.588253126 + 0.589181271 + 0.590344114 + 0.591799163 + 0.593616935 + 0.595883249 + 0.59870151 + 0.602194656 + 0.606506177 + 0.611799251 + 0.618252376 + 0.626049172 + 0.635358628 + 0.646300796 + 0.658891115 + 0.672955354 + 0.688007383 + 0.703086419 + 0.716563122 + 0.725951023 + 0.727807444 + 0.717873435 + 0.691658096 + 0.645638609 + 0.578988033 + 0.495169999 + 0.402122736 + 0.310005364 + 0.227403553 + 0.158934283 + 0.105778171 + 0.0671189811 + 0.0408474611 + 0.0241280391 + 0.0140660397 + 0.00822784624 + 0.00487799498 + 0.0029365472 + 0.00178991961 + 0.0011007929 + 0.000681291629 + 0.000429865957 + 0.000271227083 + 0.00017113272 + 0.000107977446 + 6.81291629E-05 + 0.487898048 + 0.487926007 + 0.487961201 + 0.4880055 + 0.488061256 + 0.488131429 + 0.488219742 + 0.488330873 + 0.488470702 + 0.488646614 + 0.488867881 + 0.489146135 + 0.489495952 + 0.489935581 + 0.490487828 + 0.491181148 + 0.492050944 + 0.493141162 + 0.494506079 + 0.496212435 + 0.4983417 + 0.500992497 + 0.504282774 + 0.508351354 + 0.513358 + 0.51948071 + 0.526908144 + 0.535824093 + 0.546379548 + 0.558646275 + 0.572544568 + 0.587737363 + 0.603485978 + 0.618472072 + 0.63061228 + 0.636931348 + 0.633618171 + 0.616447699 + 0.581750188 + 0.527930598 + 0.457074281 + 0.375557963 + 0.292523899 + 0.21649643 + 0.152591979 + 0.102435689 + 0.0655544701 + 0.0402113778 + 0.0239098378 + 0.0140048508 + 0.00821421129 + 0.0048755908 + 0.00293620032 + 0.00178986767 + 0.00110067428 + 0.00068125308 + 0.000429841634 + 0.000271211736 + 0.000171123037 + 0.000107971337 + 6.8125308E-05 + 0.398696083 + 0.398722494 + 0.398755739 + 0.398797586 + 0.398850257 + 0.398916549 + 0.39899998 + 0.399104971 + 0.399237081 + 0.399403293 + 0.399612375 + 0.399875331 + 0.400205957 + 0.40062153 + 0.401143662 + 0.401799334 + 0.40262216 + 0.403653902 + 0.404946249 + 0.40656289 + 0.408581822 + 0.411097812 + 0.414224806 + 0.41809789 + 0.422874136 + 0.428731233 + 0.435862066 + 0.444462683 + 0.454709607 + 0.466721144 + 0.480495901 + 0.495820933 + 0.512143822 + 0.52840995 + 0.542883437 + 0.553003023 + 0.555375429 + 0.546066848 + 0.521372836 + 0.479130493 + 0.420267747 + 0.349707732 + 0.275481008 + 0.205857448 + 0.146371274 + 0.0991241894 + 0.0639862133 + 0.0395642891 + 0.0236836666 + 0.0139398994 + 0.0081993016 + 0.0048728883 + 0.00293579036 + 0.00178983188 + 0.00110078291 + 0.000681286008 + 0.000429862411 + 0.000271224845 + 0.000171131308 + 0.000107976556 + 6.81286008E-05 + 0.315825579 + 0.315850806 + 0.31588256 + 0.315922531 + 0.315972842 + 0.316036166 + 0.316115863 + 0.316216158 + 0.316342366 + 0.31650116 + 0.316700926 + 0.316952187 + 0.317268143 + 0.317665333 + 0.318164456 + 0.318791375 + 0.31957834 + 0.320565467 + 0.321802487 + 0.323350801 + 0.325285803 + 0.327699417 + 0.330702688 + 0.334428101 + 0.339031074 + 0.344689677 + 0.35160105 + 0.359972184 + 0.370001611 + 0.381847118 + 0.395573248 + 0.411071358 + 0.427945848 + 0.445365442 + 0.461891907 + 0.475325761 + 0.482653266 + 0.480234422 + 0.464404615 + 0.432592861 + 0.384774475 + 0.324560038 + 0.258837949 + 0.195459111 + 0.140263376 + 0.0958395795 + 0.062411466 + 0.0389047157 + 0.0234487038 + 0.0138707917 + 0.0081829422 + 0.00486978259 + 0.00293530758 + 0.00178974778 + 0.00110077117 + 0.000681259082 + 0.000429845421 + 0.000271214125 + 0.000171124544 + 0.000107972288 + 6.81259082E-05 + 0.238293782 + 0.238318148 + 0.238348819 + 0.238387427 + 0.238436024 + 0.238497191 + 0.238574175 + 0.238671061 + 0.238792982 + 0.23894639 + 0.239139393 + 0.239382167 + 0.239687482 + 0.240071345 + 0.240553797 + 0.241159899 + 0.241920927 + 0.242875827 + 0.244072952 + 0.245572103 + 0.247446889 + 0.249787335 + 0.252702638 + 0.256323801 + 0.260805682 + 0.26632764 + 0.273091472 + 0.281314561 + 0.291215182 + 0.302985558 + 0.316746893 + 0.332479409 + 0.349920724 + 0.368429592 + 0.386822707 + 0.403214846 + 0.414931421 + 0.41861452 + 0.410684383 + 0.388282868 + 0.35061004 + 0.300116184 + 0.24256813 + 0.185274957 + 0.134257976 + 0.0925780926 + 0.0608275138 + 0.0382311587 + 0.0232041118 + 0.0137971014 + 0.00816497887 + 0.0048662557 + 0.00293471549 + 0.00178964648 + 0.00110076323 + 0.000681261528 + 0.000429846964 + 0.000271215099 + 0.000171125159 + 0.000107972676 + 6.81261528E-05 + 0.165468163 + 0.165491927 + 0.165521842 + 0.165559497 + 0.165606896 + 0.165666556 + 0.165741645 + 0.165836148 + 0.165955075 + 0.166104724 + 0.166293008 + 0.166529863 + 0.16682776 + 0.16720234 + 0.167673194 + 0.168264833 + 0.169007873 + 0.169940473 + 0.171110069 + 0.172575428 + 0.174409031 + 0.176699771 + 0.17955586 + 0.183107749 + 0.18751066 + 0.192946035 + 0.199620756 + 0.207762302 + 0.217607108 + 0.229378099 + 0.24324605 + 0.259268093 + 0.277296484 + 0.296853291 + 0.316975032 + 0.336050064 + 0.351705241 + 0.360846587 + 0.360004078 + 0.346120714 + 0.317766982 + 0.276378993 + 0.226655042 + 0.175282032 + 0.128343623 + 0.0893359265 + 0.0592318228 + 0.0375420409 + 0.0229489915 + 0.0137183618 + 0.00814519069 + 0.00486222964 + 0.00293402081 + 0.00178953286 + 0.00110073904 + 0.000681261946 + 0.000429847228 + 0.000271215266 + 0.000171125264 + 0.000107972742 + 6.81261946E-05 + 0.0970784885 + 0.0971018274 + 0.0971312069 + 0.0971681893 + 0.097214741 + 0.097273336 + 0.0973470864 + 0.0974399071 + 0.0975567208 + 0.0977037173 + 0.0978886716 + 0.0981213537 + 0.0984140273 + 0.0987820763 + 0.0992447807 + 0.0998262751 + 0.100556725 + 0.101473763 + 0.102624222 + 0.104066203 + 0.105871505 + 0.108128393 + 0.110944657 + 0.114450788 + 0.118802938 + 0.12418507 + 0.130809291 + 0.138912744 + 0.148748564 + 0.16056726 + 0.174583492 + 0.190921849 + 0.209534622 + 0.230086187 + 0.251805053 + 0.273320316 + 0.292528457 + 0.306581041 + 0.31213148 + 0.305988135 + 0.286207794 + 0.253341696 + 0.211086795 + 0.165461769 + 0.122508803 + 0.0861090486 + 0.0576219875 + 0.0368357899 + 0.0226824085 + 0.0136340662 + 0.00812336247 + 0.00485763225 + 0.00293319306 + 0.00178940469 + 0.00110071551 + 0.000681249662 + 0.000429839478 + 0.000271210375 + 0.000171122178 + 0.000107970795 + 6.81249662E-05 + 0.0331912137 + 0.0332142102 + 0.0332431588 + 0.0332795993 + 0.0333254692 + 0.0333832069 + 0.0334558797 + 0.0335473463 + 0.0336624592 + 0.0338073197 + 0.0339895962 + 0.034218923 + 0.0345073974 + 0.0348701994 + 0.0353263609 + 0.0358997172 + 0.0366200786 + 0.0375246629 + 0.0386598343 + 0.0400831873 + 0.0418660097 + 0.0440961285 + 0.0468810987 + 0.0503516061 + 0.0546648085 + 0.0600071026 + 0.0665954306 + 0.0746756917 + 0.0845159587 + 0.0963912667 + 0.110555108 + 0.127191647 + 0.146341508 + 0.167794955 + 0.190951104 + 0.214654737 + 0.237047722 + 0.255512914 + 0.266837125 + 0.267743217 + 0.255866058 + 0.230980677 + 0.195849573 + 0.155798808 + 0.116742879 + 0.082893283 + 0.0559956979 + 0.0361107898 + 0.0224034116 + 0.0135436841 + 0.00809922826 + 0.00485235499 + 0.00293221314 + 0.00178923187 + 0.0011006785 + 0.00068124301 + 0.00042983528 + 0.000271207727 + 0.000171120507 + 0.000107969741 + 6.8124301E-05 + -0.0258360013 + -0.0258133616 + -0.025784862 + -0.0257489865 + -0.0257038272 + -0.0256469832 + -0.0255754341 + -0.02548538 + -0.0253720417 + -0.0252294096 + -0.0250499294 + -0.0248241087 + -0.0245400258 + -0.0241827166 + -0.0237334136 + -0.0231686023 + -0.0224588572 + -0.0215674143 + -0.0204484339 + -0.0190449069 + -0.0172861651 + -0.0150849786 + -0.0123342568 + -0.00890345392 + -0.00463489983 + 0.000659504549 + 0.00720045477 + 0.0152409874 + 0.0250617718 + 0.0369588648 + 0.0512195668 + 0.0680804796 + 0.0876607154 + 0.109863397 + 0.134242092 + 0.159839288 + 0.185025995 + 0.207408865 + 0.223919956 + 0.23123888 + 0.226653885 + 0.209252962 + 0.180921977 + 0.146278434 + 0.111036473 + 0.0796845875 + 0.0543507391 + 0.0353654193 + 0.0221109575 + 0.0134466237 + 0.00807254263 + 0.00484629863 + 0.00293105533 + 0.00178902517 + 0.0011006375 + 0.000681244613 + 0.000423548461 + 0.000264227561 + 0.000165233749 + 0.000103422532 + 6.49761327E-05 + -0.0794153344 + -0.0793931601 + -0.0793652462 + -0.0793301076 + -0.0792858755 + -0.0792301981 + -0.0791601161 + -0.0790719069 + -0.0789608877 + -0.0788211699 + -0.0786453501 + -0.078424124 + -0.078145804 + -0.0777957159 + -0.0773554502 + -0.0768019314 + -0.0761062684 + -0.0752323417 + -0.0741350779 + -0.0727583611 + -0.0710325371 + -0.068871477 + -0.0661692046 + -0.0627961527 + -0.0585952268 + -0.0533780431 + -0.0469220091 + -0.0389693788 + -0.0292301084 + -0.0173913091 + -0.00313737563 + 0.0138136248 + 0.0336503321 + 0.0563778652 + 0.0816919465 + 0.108820571 + 0.136355092 + 0.16212631 + 0.183228988 + 0.19634162 + 0.198472745 + 0.188097836 + 0.166271182 + 0.136883425 + 0.105381161 + 0.0764794394 + 0.0526849874 + 0.0345980268 + 0.0218039829 + 0.0133422755 + 0.00804299033 + 0.0048393632 + 0.00292966535 + 0.00178876003 + 0.00110058897 + 0.000681222751 + 0.000423551969 + 0.000264225789 + 0.000165220501 + 0.000103537486 + 6.49600558E-05 + -0.126804812 + -0.126783295 + -0.126756208 + -0.126722111 + -0.12667919 + -0.126625161 + -0.126557154 + -0.126471554 + -0.126363817 + -0.126228225 + -0.126057592 + -0.125842882 + -0.125572744 + -0.125232923 + -0.124805529 + -0.124268132 + -0.123592632 + -0.12274388 + -0.121677977 + -0.120340218 + -0.118662614 + -0.116560958 + -0.113931425 + -0.110646734 + -0.106552016 + -0.101460683 + -0.0951508678 + -0.0873634112 + -0.0778030202 + -0.0661451139 + -0.0520520965 + -0.035204326 + -0.0153525614 + 0.00760040684 + 0.0334824881 + 0.0616990788 + 0.0910591155 + 0.119625424 + 0.144680535 + 0.162948946 + 0.171225814 + 0.16744109 + 0.151850898 + 0.127590858 + 0.0997685065 + 0.0732751918 + 0.0509965207 + 0.0338069567 + 0.0214813754 + 0.0132299456 + 0.00801024759 + 0.00483140096 + 0.00292800077 + 0.00178844661 + 0.00110052761 + 0.000681208413 + 0.000423536386 + 0.000264216453 + 0.000161113561 + 0.000103519852 + 6.49653739E-05 + -0.167200696 + -0.167180094 + -0.167154158 + -0.16712151 + -0.167080411 + -0.167028677 + -0.166963557 + -0.16688159 + -0.166778422 + -0.166648578 + -0.166485172 + -0.166279547 + -0.166020824 + -0.165695341 + -0.165285944 + -0.164771119 + -0.164123901 + -0.163310541 + -0.162288859 + -0.161006242 + -0.159397221 + -0.157380588 + -0.154856019 + -0.15170021 + -0.147762635 + -0.142861149 + -0.136777897 + -0.129256385 + -0.120001088 + -0.108681834 + -0.0949463603 + -0.0784458705 + -0.0588801367 + -0.0360699484 + -0.0100644974 + 0.0187129472 + 0.0492899732 + 0.0799752459 + 0.108271853 + 0.131005724 + 0.144831297 + 0.147201241 + 0.137600622 + 0.118368864 + 0.0941885767 + 0.070070303 + 0.0492838415 + 0.0329904709 + 0.0211419787 + 0.013108929 + 0.00797393079 + 0.00482228018 + 0.00292603702 + 0.00178804901 + 0.0011004462 + 0.000681197709 + 0.000423524496 + 0.000264343202 + 0.000165243916 + 0.00010353024 + 6.4983364E-05 + -0.199846404 + -0.199827011 + -0.199802598 + -0.199771865 + -0.199733179 + -0.19968448 + -0.19962318 + -0.199546019 + -0.1994489 + -0.199326664 + -0.199172828 + -0.198979237 + -0.198735643 + -0.198429171 + -0.198043654 + -0.197558805 + -0.196949189 + -0.196182952 + -0.195220254 + -0.194011354 + -0.192494288 + -0.190592081 + -0.188209455 + -0.185229024 + -0.18150703 + -0.176868795 + -0.171104243 + -0.163964204 + -0.15515864 + -0.144358754 + -0.131205926 + -0.115331904 + -0.0963963173 + -0.0741492557 + -0.0485272605 + -0.0197886857 + 0.011314684 + 0.0433541121 + 0.0740919475 + 0.100520317 + 0.119237481 + 0.127297915 + 0.123446037 + 0.109173005 + 0.0886276304 + 0.0668644755 + 0.0475462743 + 0.0321467918 + 0.0207845753 + 0.0129784462 + 0.00793364068 + 0.00481181528 + 0.00292369876 + 0.00178757017 + 0.00110034516 + 0.000681170374 + 0.000423525989 + 0.00026420365 + 0.000165233091 + 0.000103549318 + 6.49697828E-05 + -0.224153268 + -0.224135384 + -0.22411287 + -0.224084528 + -0.22404885 + -0.224003938 + -0.223947404 + -0.223876242 + -0.22378667 + -0.223673932 + -0.223532042 + -0.223353478 + -0.22312878 + -0.222846062 + -0.222490395 + -0.22204304 + -0.221480489 + -0.220773288 + -0.219884573 + -0.218768273 + -0.217366933 + -0.215609074 + -0.213406058 + -0.210648416 + -0.207201673 + -0.202901764 + -0.197550341 + -0.190910473 + -0.182703714 + -0.172610133 + -0.160273854 + -0.145317953 + -0.127374263 + -0.106135464 + -0.0814381791 + -0.0533850607 + -0.0225079028 + 0.010042633 + 0.0423287457 + 0.0715810074 + 0.0944408702 + 0.107664016 + 0.109301405 + 0.0999420899 + 0.0830644235 + 0.0636584465 + 0.0457846042 + 0.0312740739 + 0.0204078759 + 0.0128376937 + 0.00788893198 + 0.00479981506 + 0.00292092455 + 0.00178698327 + 0.00110022208 + 0.000681145802 + 0.000423525442 + 0.000264204341 + 0.000165230353 + 0.000103555649 + 6.49886899E-05 + -0.239820824 + -0.239804715 + -0.239784434 + -0.239758904 + -0.239726766 + -0.239686309 + -0.239635383 + -0.239571277 + -0.239490587 + -0.239389023 + -0.239261194 + -0.239100318 + -0.238897866 + -0.238643122 + -0.238322619 + -0.237919449 + -0.237412392 + -0.236774846 + -0.23597349 + -0.234966648 + -0.233702282 + -0.232115563 + -0.230125946 + -0.227633722 + -0.224516031 + -0.22062239 + -0.21576993 + -0.209738711 + -0.202267884 + -0.193053942 + -0.181753148 + -0.16799143 + -0.151386559 + -0.131589418 + -0.108353007 + -0.0816384823 + -0.0517645122 + -0.0195946805 + 0.0132693811 + 0.0443710654 + 0.0705080122 + 0.0882638164 + 0.095076174 + 0.090594055 + 0.0774642231 + 0.0604528421 + 0.0440022482 + 0.0303705177 + 0.0200104617 + 0.0126858093 + 0.00783931308 + 0.00478606168 + 0.00291763598 + 0.00178627202 + 0.00110006559 + 0.000681108375 + 0.000423513476 + 0.000264203861 + 0.000165238564 + 0.000103533344 + 6.49660605E-05 + -0.246936498 + -0.24692236 + -0.246904562 + -0.246882156 + -0.24685395 + -0.246818443 + -0.246773746 + -0.246717483 + -0.246646661 + -0.246557517 + -0.246445315 + -0.2463041 + -0.246126381 + -0.245902742 + -0.24562135 + -0.24526734 + -0.24482205 + -0.24426207 + -0.243558057 + -0.242673277 + -0.241561814 + -0.240166376 + -0.238415656 + -0.236221173 + -0.233473571 + -0.230038386 + -0.225751389 + -0.220413749 + -0.213787569 + -0.205592727 + -0.195506653 + -0.183169692 + -0.168200087 + -0.150224578 + -0.128932701 + -0.104164675 + -0.0760421328 + -0.045144277 + -0.0127121896 + 0.019177825 + 0.0475992483 + 0.0691188312 + 0.0806894583 + 0.0810242158 + 0.0717699268 + 0.0572446522 + 0.042206948 + 0.0294348309 + 0.0195905631 + 0.0125219354 + 0.00778424738 + 0.00477031786 + 0.00291374518 + 0.00178539808 + 0.00109987929 + 0.000681064273 + 0.000423503349 + 0.000264203032 + 0.000165236267 + 0.000103534286 + 6.49759968E-05 + -0.246030697 + -0.246018631 + -0.246003442 + -0.24598432 + -0.245960248 + -0.245929944 + -0.245891797 + -0.245843778 + -0.245783332 + -0.245707246 + -0.245611476 + -0.245490936 + -0.24533923 + -0.245148312 + -0.24490807 + -0.244605796 + -0.244225531 + -0.243747241 + -0.2431458 + -0.242389724 + -0.241439612 + -0.240246235 + -0.238748207 + -0.23686918 + -0.234514513 + -0.231567393 + -0.22788444 + -0.223290952 + -0.217576129 + -0.210488935 + -0.201735795 + -0.190982128 + -0.177860955 + -0.16199353 + -0.14302921 + -0.120714126 + -0.0949996284 + -0.0661988702 + -0.0351875064 + -0.00361252156 + 0.0259883401 + 0.0503404528 + 0.0660965835 + 0.0711109017 + 0.0658910295 + 0.0540189905 + 0.0404124949 + 0.0284677373 + 0.0191456599 + 0.0123452555 + 0.00772315269 + 0.00475229783 + 0.00290914104 + 0.00178433634 + 0.00109963813 + 0.000681008942 + 0.000423489108 + 0.000264199407 + 0.000165234639 + 0.000103536157 + 6.49714587E-05 + -0.238067421 + -0.238057419 + -0.238044829 + -0.238028978 + -0.238009025 + -0.237983906 + -0.237952284 + -0.237912479 + -0.237862371 + -0.237799297 + -0.237719902 + -0.237619969 + -0.23749419 + -0.23733589 + -0.237136676 + -0.236885998 + -0.236570598 + -0.236173827 + -0.235674788 + -0.235047273 + -0.234258449 + -0.233267233 + -0.232022306 + -0.230459695 + -0.22849987 + -0.226044303 + -0.222971481 + -0.219132429 + -0.214345939 + -0.208393903 + -0.201017575 + -0.191916169 + -0.180750208 + -0.16715351 + -0.150759792 + -0.131252515 + -0.108449176 + -0.0824319618 + -0.0537308691 + -0.0235443381 + 0.00606684937 + 0.032162622 + 0.0513293227 + 0.0607361126 + 0.0596951219 + 0.0507333806 + 0.0386380869 + 0.0274757267 + 0.0186717156 + 0.0121550229 + 0.00765537302 + 0.00473170091 + 0.00290370731 + 0.00178304658 + 0.00109934533 + 0.000680940477 + 0.000423469554 + 0.000264195315 + 0.000165232362 + 0.000103536688 + 6.49706068E-05 + -0.224363924 + -0.224355875 + -0.224345743 + -0.224332988 + -0.22431693 + -0.224296715 + -0.224271268 + -0.224239233 + -0.224198906 + -0.224148143 + -0.224084243 + -0.224003809 + -0.223902567 + -0.22377514 + -0.223614765 + -0.223412938 + -0.223158969 + -0.222839425 + -0.222437434 + -0.22193182 + -0.221296024 + -0.220496767 + -0.219492408 + -0.218230924 + -0.216647462 + -0.214661387 + -0.212172802 + -0.209058518 + -0.205167543 + -0.200316332 + -0.194284251 + -0.1868102 + -0.177592042 + -0.166291686 + -0.15255044 + -0.136021812 + -0.116432042 + -0.0936814699 + -0.0679992281 + -0.0401528774 + -0.0116805669 + 0.014960042 + 0.0365440015 + 0.0498282256 + 0.0530126 + 0.0472947839 + 0.0368994546 + 0.0264781428 + 0.0181629321 + 0.0119502215 + 0.00758024769 + 0.00470819688 + 0.00289730414 + 0.00178147879 + 0.00109897917 + 0.000680852958 + 0.000423448694 + 0.00026418554 + 0.000165231445 + 0.000103536183 + 6.49761364E-05 + -0.206452057 + -0.206445766 + -0.206437847 + -0.206427878 + -0.206415328 + -0.206399528 + -0.206379638 + -0.2063546 + -0.206323079 + -0.2062834 + -0.206233451 + -0.206170576 + -0.206091431 + -0.20599181 + -0.205866421 + -0.205708607 + -0.205509997 + -0.205260065 + -0.204945586 + -0.204549943 + -0.204052276 + -0.203426412 + -0.20263955 + -0.201650622 + -0.2004083 + -0.198848549 + -0.196891701 + -0.194438968 + -0.191368417 + -0.187530463 + -0.18274313 + -0.176787601 + -0.169405098 + -0.160296997 + -0.149131472 + -0.135562172 + -0.1192675 + -0.100022823 + -0.0778207629 + -0.0530519003 + -0.0267393407 + -0.000767397508 + 0.0220597536 + 0.0384253389 + 0.0456699312 + 0.0435388586 + 0.0351834995 + 0.0255147454 + 0.0176154254 + 0.0117275886 + 0.00749752161 + 0.00468138678 + 0.00288976371 + 0.00177958148 + 0.00109852515 + 0.000680743204 + 0.000423422536 + 0.00026417845 + 0.000165227288 + 0.000103535527 + 6.49743821E-05 + -0.185910995 + -0.185906214 + -0.185900197 + -0.185892621 + -0.185883083 + -0.185871077 + -0.185855962 + -0.185836933 + -0.185812979 + -0.185782824 + -0.185744862 + -0.185697075 + -0.185636919 + -0.185561196 + -0.185465879 + -0.185345902 + -0.185194892 + -0.185004833 + -0.184765645 + -0.184464655 + -0.184085936 + -0.183609485 + -0.183010191 + -0.182256555 + -0.181309112 + -0.180118475 + -0.178622955 + -0.176745676 + -0.174391138 + -0.171441207 + -0.167750621 + -0.163142225 + -0.157402526 + -0.150278694 + -0.141479177 + -0.130681764 + -0.11755563 + -0.101807638 + -0.0832676421 + -0.0620300087 + -0.0386619848 + -0.0144581615 + 0.0083598587 + 0.0267401955 + 0.0375607301 + 0.0392347556 + 0.0334045488 + 0.0246409527 + 0.0170412092 + 0.0114766979 + 0.00740851454 + 0.00465056998 + 0.00288090954 + 0.00177729014 + 0.00109796694 + 0.000680608965 + 0.00042338709 + 0.000264169616 + 0.000165224911 + 0.000103535793 + 6.49720216E-05 + -0.164208161 + -0.164204623 + -0.164200169 + -0.164194562 + -0.164187503 + -0.164178616 + -0.164167428 + -0.164153344 + -0.164135613 + -0.164113292 + -0.164085192 + -0.164049817 + -0.164005285 + -0.163949225 + -0.163878654 + -0.163789819 + -0.163677993 + -0.163537232 + -0.163360055 + -0.16313705 + -0.16285638 + -0.16250316 + -0.162058678 + -0.161499424 + -0.160795871 + -0.159910969 + -0.158798273 + -0.15739964 + -0.155642422 + -0.153436093 + -0.15066827 + -0.147200201 + -0.142861938 + -0.137447799 + -0.130713354 + -0.122376414 + -0.112126471 + -0.0996503785 + -0.0846866143 + -0.0671255862 + -0.0471749468 + -0.0255958661 + -0.00396618721 + 0.0151898909 + 0.0287402098 + 0.0341433817 + 0.0313635319 + 0.0238888781 + 0.0164927832 + 0.0111772687 + 0.00731569643 + 0.0046144985 + 0.00287066322 + 0.00177453123 + 0.00109727733 + 0.000680437111 + 0.000423343352 + 0.000264159367 + 0.000165221768 + 0.000103534628 + 6.49752712E-05 + -0.142579368 + -0.142576812 + -0.142573594 + -0.142569542 + -0.142564442 + -0.142558022 + -0.142549939 + -0.142539763 + -0.142526952 + -0.142510824 + -0.14249052 + -0.142464959 + -0.14243278 + -0.142392269 + -0.142341269 + -0.142277064 + -0.142196236 + -0.142094481 + -0.141966381 + -0.141805116 + -0.141602101 + -0.141346531 + -0.141024806 + -0.140619808 + -0.140110001 + -0.139468291 + -0.138660606 + -0.137644119 + -0.136365051 + -0.134755948 + -0.132732377 + -0.130188976 + -0.126994901 + -0.122988889 + -0.117974544 + -0.111717245 + -0.103945453 + -0.0943616922 + -0.0826724407 + -0.0686517322 + -0.0522588095 + -0.0338294919 + -0.0143375513 + 0.0043545657 + 0.0194968086 + 0.0281322926 + 0.0287590711 + 0.0231889751 + 0.0160713063 + 0.0108186227 + 0.00721197958 + 0.00457415589 + 0.00285901231 + 0.00177116832 + 0.00109642775 + 0.000680226379 + 0.00042328906 + 0.000264144705 + 0.000165217683 + 0.000103533095 + 6.4973768E-05 + -0.121964072 + -0.121962265 + -0.12195999 + -0.121957126 + -0.12195352 + -0.12194898 + -0.121943266 + -0.121936071 + -0.121927013 + -0.12191561 + -0.121901254 + -0.121883181 + -0.121860427 + -0.121831781 + -0.121795716 + -0.121750309 + -0.121693142 + -0.121621165 + -0.121530542 + -0.121416436 + -0.121272759 + -0.121091839 + -0.120864009 + -0.120577086 + -0.120215715 + -0.119760537 + -0.119187136 + -0.118464719 + -0.117554444 + -0.11640732 + -0.114961587 + -0.113139471 + -0.110843257 + -0.107950673 + -0.104309802 + -0.0997341773 + -0.0939995879 + -0.0868458238 + -0.0779895657 + -0.0671594302 + -0.0541707026 + -0.0390628838 + -0.0223181995 + -0.005139871 + 0.0103449112 + 0.021298999 + 0.0252911087 + 0.0223025182 + 0.0158669683 + 0.0104540666 + 0.00706049831 + 0.00454012185 + 0.00284360571 + 0.00176698338 + 0.00109538878 + 0.000679961164 + 0.00042322012 + 0.000264126049 + 0.000165212714 + 0.000103531227 + 6.49743181E-05 + -0.102994758 + -0.102993504 + -0.102991926 + -0.10298994 + -0.102987439 + -0.10298429 + -0.102980326 + -0.102975335 + -0.102969052 + -0.102961142 + -0.102951184 + -0.102938646 + -0.102922861 + -0.102902988 + -0.102877967 + -0.102846463 + -0.102806795 + -0.102756848 + -0.102693953 + -0.10261475 + -0.102515001 + -0.102389367 + -0.102231111 + -0.102031733 + -0.101780505 + -0.101463873 + -0.101064705 + -0.100561328 + -0.0999262986 + -0.0991248397 + -0.0981128416 + -0.0968343327 + -0.0952182981 + -0.0931747542 + -0.0905900638 + -0.0873216961 + -0.0831931368 + -0.0779906893 + -0.071465918 + -0.0633510744 + -0.0534005725 + -0.0414789936 + -0.0277208427 + -0.0127748344 + 0.00191760684 + 0.014020627 + 0.020829046 + 0.0208565125 + 0.0158276551 + 0.0102339484 + 0.00681337452 + 0.00452034985 + 0.00281980186 + 0.00176330184 + 0.00109422804 + 0.000679639562 + 0.000423135068 + 0.000264103536 + 0.000165207875 + 0.000103529636 + 6.4972819E-05 + -0.0860273261 + -0.0860264708 + -0.0860253941 + -0.0860240387 + -0.0860223322 + -0.0860201838 + -0.0860174791 + -0.086014074 + -0.0860097871 + -0.08600439 + -0.0859975951 + -0.0859890402 + -0.0859782693 + -0.0859647081 + -0.0859476332 + -0.0859261335 + -0.0858990613 + -0.0858649702 + -0.0858220375 + -0.0857679656 + -0.0856998569 + -0.0856140558 + -0.0855059483 + -0.0853697068 + -0.0851979647 + -0.0849814021 + -0.0847082141 + -0.0843634283 + -0.0839280262 + -0.0833778078 + -0.0826819244 + -0.0818009795 + -0.0806845812 + -0.0792682146 + -0.0774693167 + -0.0751825228 + -0.0722742962 + -0.0685777274 + -0.0638895152 + -0.057973531 + -0.0505796527 + -0.0414932585 + -0.0306387982 + -0.0182632252 + -0.00520041313 + 0.00687880022 + 0.0155397772 + 0.018514876 + 0.0156682513 + 0.0103112136 + 0.00651343026 + 0.00446670909 + 0.00280335719 + 0.00175963011 + 0.00109202658 + 0.000679160397 + 0.000423025577 + 0.000264074067 + 0.000165198761 + 0.000103527406 + 6.49714969E-05 + -0.0711947261 + -0.0711941507 + -0.0711934264 + -0.0711925145 + -0.0711913664 + -0.0711899211 + -0.0711881015 + -0.0711858107 + -0.0711829265 + -0.0711792955 + -0.0711747239 + -0.0711689681 + -0.0711617213 + -0.0711525968 + -0.0711411079 + -0.0711266411 + -0.0711084235 + -0.0710854813 + -0.0710565866 + -0.0710201909 + -0.0709743409 + -0.0709165708 + -0.0708437661 + -0.0707519898 + -0.07063626 + -0.070490265 + -0.0703059966 + -0.0700732762 + -0.0697791398 + -0.0694070361 + -0.0689357769 + -0.0683381592 + -0.0675791545 + -0.0666135359 + -0.065382797 + -0.0638112288 + -0.0618011137 + -0.0592272753 + -0.0559318947 + -0.0517219482 + -0.0463744694 + -0.0396598906 + -0.0314013826 + -0.0215961563 + -0.0106222355 + 0.000489308121 + 0.00987706917 + 0.0151871679 + 0.0149588676 + 0.010641152 + 0.00636144751 + 0.00428366893 + 0.00282899163 + 0.00174074207 + 0.00109019602 + 0.000678964586 + 0.000422908986 + 0.000264036364 + 0.000165188913 + 0.000103525405 + 6.49707209E-05 + -0.0584676741 + -0.0584672916 + -0.0584668101 + -0.0584662038 + -0.0584654405 + -0.0584644796 + -0.0584632699 + -0.0584617468 + -0.0584598293 + -0.0584574151 + -0.0584543757 + -0.0584505488 + -0.0584457305 + -0.0584396636 + -0.0584320244 + -0.0584224047 + -0.0584102906 + -0.0583950337 + -0.058375817 + -0.0583516096 + -0.0583211105 + -0.0582826767 + -0.058234232 + -0.0581731496 + -0.0580961028 + -0.0579988723 + -0.0578760968 + -0.0577209501 + -0.0575247187 + -0.0572762467 + -0.0569612032 + -0.0565611088 + -0.0560520371 + -0.0554028824 + -0.0545730527 + -0.0535094317 + -0.0521424645 + -0.0503813297 + -0.0481084885 + -0.0451746917 + -0.0413972426 + -0.0365676771 + -0.0304809131 + -0.0230063847 + -0.0142286617 + -0.00467406643 + 0.00443118954 + 0.01111844 + 0.013369494 + 0.0108906792 + 0.00656421404 + 0.00399859991 + 0.00284470096 + 0.00171989906 + 0.00109551739 + 0.000678004135 + 0.000422664438 + 0.000264005045 + 0.000165174526 + 0.000103521209 + 6.49699083E-05 + -0.0477111505 + -0.0477108987 + -0.0477105817 + -0.0477101825 + -0.0477096801 + -0.0477090475 + -0.0477082511 + -0.0477072484 + -0.0477059861 + -0.0477043968 + -0.0477023958 + -0.0476998764 + -0.0476967042 + -0.04769271 + -0.0476876805 + -0.047681347 + -0.0476733707 + -0.0476633248 + -0.0476506707 + -0.047634729 + -0.0476146422 + -0.0475893266 + -0.0475574122 + -0.0475171648 + -0.0474663865 + -0.047402287 + -0.0473213166 + -0.0472189492 + -0.0470893965 + -0.0469252313 + -0.0467168848 + -0.0464519745 + -0.0461143963 + -0.0456830963 + -0.0451304058 + -0.0444197939 + -0.0435028714 + -0.0423154982 + -0.0407729779 + -0.038764708 + -0.0361496001 + -0.0327556173 + -0.0283907318 + -0.022879339 + -0.0161470591 + -0.00838100913 + -0.000267747729 + 0.0067972578 + 0.0108789841 + 0.0106068361 + 0.00706651903 + 0.00385961313 + 0.00270403434 + 0.00176675459 + 0.00108010792 + 0.000674063795 + 0.000422506454 + 0.000263880888 + 0.000165157315 + 0.00010351582 + 6.49687108E-05 + -0.0387307273 + -0.0387305628 + -0.0387303558 + -0.0387300952 + -0.0387297671 + -0.0387293541 + -0.038728834 + -0.0387281793 + -0.038727355 + -0.0387263172 + -0.0387250106 + -0.0387233654 + -0.038721294 + -0.0387186857 + -0.0387154013 + -0.0387112652 + -0.0387060562 + -0.0386994953 + -0.0386912306 + -0.0386808181 + -0.0386676972 + -0.0386511591 + -0.0386303077 + -0.0386040078 + -0.0385708201 + -0.0385289156 + -0.0384759657 + -0.0384089975 + -0.0383242034 + -0.0382166885 + -0.0380801321 + -0.0379063309 + -0.0376845775 + -0.03740081 + -0.0370364434 + -0.0365667636 + -0.0359587333 + -0.0351680405 + -0.0341352479 + -0.0327810635 + -0.0310012188 + -0.0286625694 + -0.0256044391 + -0.0216538356 + -0.016670671 + -0.0106477262 + -0.0038886425 + 0.0027586536 + 0.00779040993 + 0.00950895058 + 0.00749965502 + 0.00410359693 + 0.00242316144 + 0.00183038361 + 0.001045977 + 0.000686627756 + 0.000423610674 + 0.000264058459 + 0.000165192709 + 0.000103507118 + 6.49662767E-05 + -0.0313069799 + -0.0313068733 + -0.031306739 + -0.0313065699 + -0.0313063571 + -0.0313060892 + -0.0313057519 + -0.0313053272 + -0.0313047926 + -0.0313041194 + -0.0313032718 + -0.0313022047 + -0.0313008611 + -0.0312991692 + -0.0312970386 + -0.0312943556 + -0.0312909765 + -0.0312867202 + -0.0312813585 + -0.0312746031 + -0.0312660899 + -0.0312553587 + -0.0312418274 + -0.0312247582 + -0.0312032153 + -0.0311760087 + -0.0311416221 + -0.0310981181 + -0.031043012 + -0.030973105 + -0.0308842584 + -0.0307710884 + -0.0306265472 + -0.0304413454 + -0.0302031493 + -0.0298954632 + -0.0294960757 + -0.0289749146 + -0.0282911458 + -0.0273893901 + -0.0261951365 + -0.0246099981 + -0.022508805 + -0.0197433702 + -0.016163045 + -0.0116702471 + -0.00633621799 + -0.000591153733 + 0.00457256432 + 0.00764940496 + 0.00743162351 + 0.00464972385 + 0.00228603081 + 0.00172007495 + 0.00109964644 + 0.000676361792 + 0.000415376428 + 0.000262923966 + 0.000164857236 + 0.000103524336 + 6.49625585E-05 + -0.025218839 + -0.0252187702 + -0.0252186836 + -0.0252185746 + -0.0252184373 + -0.0252182644 + -0.0252180468 + -0.0252177729 + -0.0252174279 + -0.0252169937 + -0.0252164469 + -0.0252157584 + -0.0252148916 + -0.0252138001 + -0.0252124256 + -0.0252106946 + -0.0252085144 + -0.0252057684 + -0.0252023089 + -0.02519795 + -0.0251924567 + -0.0251855317 + -0.0251767991 + -0.0251657821 + -0.0251518759 + -0.0251343108 + -0.0251121057 + -0.0250840058 + -0.0250484004 + -0.0250032132 + -0.024945754 + -0.0248725165 + -0.0247788997 + -0.0246588217 + -0.0245041777 + -0.0243040786 + -0.0240437763 + -0.0237031555 + -0.0232546375 + -0.0226603377 + -0.0218683816 + -0.0208085394 + -0.0193880341 + -0.0174899897 + -0.0149803087 + -0.011734711 + -0.00770581902 + -0.0030537607 + 0.00166256066 + 0.00534975021 + 0.00665709896 + 0.00512067935 + 0.00252804782 + 0.00145125973 + 0.00119157426 + 0.00062877411 + 0.000433001243 + 0.000267106412 + 0.000165855663 + 0.000103575936 + 6.49621079E-05 + -0.0202579455 + -0.0202579013 + -0.0202578457 + -0.0202577756 + -0.0202576875 + -0.0202575764 + -0.0202574367 + -0.0202572607 + -0.0202570392 + -0.0202567602 + -0.0202564091 + -0.0202559669 + -0.0202554101 + -0.020254709 + -0.0202538261 + -0.0202527143 + -0.0202513139 + -0.02024955 + -0.0202473278 + -0.0202445278 + -0.0202409988 + -0.0202365499 + -0.0202309394 + -0.0202238606 + -0.0202149244 + -0.0202036356 + -0.0201893624 + -0.0201712963 + -0.0201483987 + -0.0201193296 + -0.0200823503 + -0.0200351916 + -0.0199748701 + -0.0198974325 + -0.0197975958 + -0.0196682356 + -0.0194996583 + -0.0192785646 + -0.0189865818 + -0.0185982169 + -0.0180780865 + -0.0173773694 + -0.0164297553 + -0.0151480081 + -0.0134241823 + -0.0111403739 + -0.00820336192 + -0.00462392404 + -0.00065874671 + 0.00301551476 + 0.00528245122 + 0.00514291342 + 0.00303991091 + 0.00132284185 + 0.00110351096 + 0.000681581696 + 0.00042879058 + 0.000254163159 + 0.000162928904 + 0.000102920096 + 6.50514404E-05 + -0.016236342 + -0.0162363137 + -0.0162362781 + -0.0162362332 + -0.0162361768 + -0.0162361058 + -0.0162360163 + -0.0162359037 + -0.0162357619 + -0.0162355834 + -0.0162353586 + -0.0162350756 + -0.0162347193 + -0.0162342706 + -0.0162337055 + -0.0162329939 + -0.0162320976 + -0.0162309686 + -0.0162295463 + -0.016227754 + -0.0162254951 + -0.0162226473 + -0.0162190556 + -0.0162145237 + -0.0162088023 + -0.0162015738 + -0.0161924331 + -0.0161808614 + -0.0161661921 + -0.0161475639 + -0.0161238587 + -0.0160936153 + -0.0160549094 + -0.0160051869 + -0.0159410261 + -0.0158577995 + -0.0157491874 + -0.0156064792 + -0.0154175686 + -0.015165525 + -0.0148265997 + -0.0143675432 + -0.0137422418 + -0.0128880885 + -0.0117235365 + -0.0101505496 + -0.00807003062 + -0.00542503035 + -0.00229188322 + 0.000973994676 + 0.00360847307 + 0.00458851203 + 0.00346759999 + 0.00154125735 + 0.000859747348 + 0.000784056353 + 0.000372568331 + 0.000274466109 + 0.000170524097 + 0.000105019837 + 6.49916721E-05 + -0.0129896004 + -0.0129895824 + -0.0129895597 + -0.0129895311 + -0.012989495 + -0.0129894497 + -0.0129893926 + -0.0129893207 + -0.0129892303 + -0.0129891163 + -0.0129889729 + -0.0129887923 + -0.0129885649 + -0.0129882785 + -0.0129879179 + -0.0129874638 + -0.0129868917 + -0.0129861712 + -0.0129852634 + -0.0129841195 + -0.0129826778 + -0.0129808601 + -0.0129785675 + -0.0129756747 + -0.0129720222 + -0.0129674073 + -0.012961571 + -0.0129541815 + -0.0129448123 + -0.012932912 + -0.0129177644 + -0.0128984321 + -0.0128736797 + -0.0128418647 + -0.0128007825 + -0.0127474449 + -0.012677759 + -0.0125860621 + -0.0124644472 + -0.012301787 + -0.0120823439 + -0.0117838336 + -0.011374853 + -0.0108117552 + -0.0100355706 + -0.00897081893 + -0.00753071047 + -0.00563804821 + -0.00327758792 + -0.000596793933 + 0.00195722158 + 0.00358844377 + 0.00351515496 + 0.00197862903 + 0.000749023555 + 0.000712797149 + 0.000420843741 + 0.000275454489 + 0.000153880434 + 0.000100031783 + 6.40722038E-05 + -0.0103770545 + -0.010377043 + -0.0103770286 + -0.0103770104 + -0.0103769874 + -0.0103769586 + -0.0103769222 + -0.0103768764 + -0.0103768188 + -0.0103767463 + -0.010376655 + -0.01037654 + -0.0103763952 + -0.0103762128 + -0.0103759832 + -0.0103756941 + -0.0103753298 + -0.0103748711 + -0.010374293 + -0.0103735646 + -0.0103726466 + -0.0103714891 + -0.0103700292 + -0.0103681869 + -0.0103658607 + -0.0103629214 + -0.0103592039 + -0.0103544965 + -0.0103485271 + -0.0103409439 + -0.0103312891 + -0.0103189639 + -0.0103031776 + -0.010282878 + -0.0102566507 + -0.0102225751 + -0.0101780143 + -0.0101193094 + -0.010041332 + -0.00993682982 + -0.00979547865 + -0.00960253027 + -0.00933694398 + -0.0089689507 + -0.00845723301 + -0.00774654542 + -0.00676809283 + -0.00544802881 + -0.00373453545 + -0.00165919219 + 0.000557558761 + 0.00239759497 + 0.00311699391 + 0.00232892561 + 0.000933901854 + 0.000504341999 + 0.000519915745 + 0.000217136491 + 0.000174726784 + 0.000110460304 + 6.72475231E-05 + -0.00828035496 + -0.00828034766 + -0.00828033847 + -0.00828032689 + -0.00828031232 + -0.00828029397 + -0.00828027087 + -0.00828024179 + -0.00828020517 + -0.00828015907 + -0.00828010103 + -0.00828002794 + -0.00827993592 + -0.00827982004 + -0.00827967411 + -0.00827949033 + -0.00827925885 + -0.00827896725 + -0.00827859988 + -0.00827813694 + -0.00827755343 + -0.00827681772 + -0.00827588976 + -0.00827471873 + -0.00827324007 + -0.00827137155 + -0.00826900811 + -0.00826601515 + -0.00826221939 + -0.00825739676 + -0.0082512557 + -0.00824341426 + -0.00823336808 + -0.00822044514 + -0.00820374112 + -0.00818202605 + -0.00815360832 + -0.00811613519 + -0.00806629902 + -0.00799940433 + -0.00790873237 + -0.00778461884 + -0.00761314353 + -0.00737434115 + -0.00703993509 + -0.00657090227 + -0.00591596593 + -0.00501388128 + -0.00380578191 + -0.00226889301 + -0.000485555428 + 0.00125526589 + 0.00240312966 + 0.00237407194 + 0.00128357078 + 0.000415929718 + 0.000462196817 + 0.000259218718 + 0.000178971001 + 9.19211857E-05 + 6.05480865E-05 + -0.00660118066 + -0.00660117603 + -0.00660117019 + -0.00660116285 + -0.0066011536 + -0.00660114195 + -0.0066011273 + -0.00660110884 + -0.0066010856 + -0.00660105635 + -0.00660101951 + -0.00660097313 + -0.00660091473 + -0.00660084119 + -0.00660074859 + -0.00660063195 + -0.00660048505 + -0.0066003 + -0.00660006685 + -0.00659977305 + -0.00659940273 + -0.00659893581 + -0.00659834686 + -0.00659760363 + -0.00659666511 + -0.00659547909 + -0.00659397885 + -0.00659207887 + -0.00658966907 + -0.00658660699 + -0.00658270725 + -0.00657772685 + -0.00657134471 + -0.00656313271 + -0.00655251417 + -0.00653870386 + -0.00652062019 + -0.00649675613 + -0.00646498792 + -0.00642229148 + -0.00636432214 + -0.0062847965 + -0.0061745962 + -0.00602050432 + -0.00580351109 + -0.00549675864 + -0.00506358476 + -0.00445708756 + -0.00362468519 + -0.00252480336 + -0.00116720203 + 0.000313552899 + 0.00157385044 + 0.0020899996 + 0.00155148019 + 0.000564574026 + 0.000293436919 + 0.000346074477 + 0.000124347334 + 0.000111651063 + 7.25853257E-05 + -0.00525863897 + -0.00525863603 + -0.00525863233 + -0.00525862767 + -0.00525862181 + -0.00525861443 + -0.00525860514 + -0.00525859344 + -0.00525857871 + -0.00525856017 + -0.00525853682 + -0.00525850742 + -0.0052584704 + -0.00525842379 + -0.00525836509 + -0.00525829116 + -0.00525819804 + -0.00525808074 + -0.00525793295 + -0.00525774672 + -0.00525751198 + -0.005257216 + -0.00525684265 + -0.0052563715 + -0.00525577653 + -0.00525502464 + -0.0052540735 + -0.00525286886 + -0.00525134087 + -0.00524939913 + -0.00524692593 + -0.00524376694 + -0.00523971812 + -0.00523450727 + -0.00522776745 + -0.00521899853 + -0.00520751085 + -0.00519234204 + -0.00517213336 + -0.00514494533 + -0.00510798266 + -0.00505718534 + -0.00498662695 + -0.00488764636 + -0.00474763759 + -0.00454847126 + -0.00426469967 + -0.00386219092 + -0.00329898918 + -0.00253252021 + -0.00154095706 + -0.000369331761 + 0.000798340435 + 0.00159018942 + 0.00158583023 + 0.000830293875 + 0.000227115713 + 0.000299965746 + 0.000159573504 + 0.000117165664 + 5.40822968E-05 + -0.00418667495 + -0.00418667309 + -0.00418667075 + -0.0041866678 + -0.00418666409 + -0.00418665942 + -0.00418665353 + -0.00418664612 + -0.0041866368 + -0.00418662505 + -0.00418661027 + -0.00418659165 + -0.00418656821 + -0.00418653869 + -0.00418650152 + -0.0041864547 + -0.00418639573 + -0.00418632145 + -0.00418622786 + -0.00418610992 + -0.00418596126 + -0.00418577381 + -0.00418553737 + -0.00418523898 + -0.00418486217 + -0.00418438596 + -0.00418378353 + -0.00418302052 + -0.00418205264 + -0.00418082259 + -0.00417925573 + -0.00417725418 + -0.00417468846 + -0.00417138578 + -0.00416711305 + -0.00416155235 + -0.00415426486 + -0.00414463753 + -0.00413180354 + -0.00411452317 + -0.00409100517 + -0.00405863903 + -0.0040135966 + -0.00395024713 + -0.00386031951 + -0.00373175575 + -0.00354727328 + -0.00328289059 + -0.00290728058 + -0.00238416877 + -0.00168252306 + -0.000802624622 + 0.000174109163 + 0.00102337488 + 0.00138570517 + 0.0010255081 + 0.0003415301 + 0.00016970804 + 0.000230360839 + 6.99858855E-05 + 7.1574776E-05 + -0.00333166495 + -0.00333166377 + -0.00333166229 + -0.00333166043 + -0.00333165808 + -0.00333165512 + -0.0033316514 + -0.00333164671 + -0.00333164081 + -0.00333163338 + -0.00333162402 + -0.00333161224 + -0.0033315974 + -0.00333157872 + -0.0033315552 + -0.00333152557 + -0.00333148826 + -0.00333144125 + -0.00333138203 + -0.00333130739 + -0.00333121332 + -0.0033310947 + -0.00333094508 + -0.00333075624 + -0.00333051778 + -0.00333021641 + -0.00332983515 + -0.00332935223 + -0.00332873964 + -0.00332796106 + -0.00332696923 + -0.00332570212 + -0.00332407768 + -0.00332198634 + -0.00331928025 + -0.00331575761 + -0.00331113971 + -0.00330503678 + -0.00329689705 + -0.00328593022 + -0.00327099209 + -0.00325041067 + -0.00322172519 + -0.00318129783 + -0.00312374644 + -0.00304114187 + -0.00292193762 + -0.0027497046 + -0.00250204859 + -0.0021508285 + -0.00166634065 + -0.00103073235 + -0.000268273197 + 0.000504935658 + 0.00104199489 + 0.00104895196 + 0.000535623193 + 0.000122295781 + 0.000194416868 + 9.83438366E-05 + 7.69578216E-05 + -0.00265027615 + -0.00265027541 + -0.00265027447 + -0.00265027329 + -0.00265027181 + -0.00265026994 + -0.00265026758 + -0.00265026462 + -0.00265026088 + -0.00265025618 + -0.00265025027 + -0.00265024282 + -0.00265023344 + -0.00265022162 + -0.00265020675 + -0.00265018801 + -0.00265016441 + -0.00265013468 + -0.00265009723 + -0.00265005003 + -0.00264999053 + -0.00264991551 + -0.00264982088 + -0.00264970146 + -0.00264955064 + -0.00264936003 + -0.00264911889 + -0.00264881344 + -0.00264842596 + -0.00264793347 + -0.00264730605 + -0.00264650444 + -0.00264547668 + -0.00264415336 + -0.0026424408 + -0.00264021108 + -0.0026372874 + -0.00263342234 + -0.00262826533 + -0.0026213136 + -0.00261183812 + -0.00259877133 + -0.00258053749 + -0.0025547979 + -0.00251807293 + -0.0024651943 + -0.00238854364 + -0.00227707442 + -0.00211525737 + -0.001882473 + -0.0015542539 + -0.0011084832 + -0.000542071904 + 9.59001206E-05 + 0.000660617269 + 0.000910078991 + 0.000672942245 + 0.000207163534 + 9.78186479E-05 + 0.000152889984 + 3.87607951E-05 + -0.00210761756 + -0.00210761709 + -0.0021076165 + -0.00210761575 + -0.00210761482 + -0.00210761363 + -0.00210761215 + -0.00210761027 + -0.00210760791 + -0.00210760494 + -0.0021076012 + -0.00210759649 + -0.00210759056 + -0.00210758309 + -0.00210757369 + -0.00210756185 + -0.00210754693 + -0.00210752814 + -0.00210750446 + -0.00210747462 + -0.00210743701 + -0.00210738959 + -0.00210732977 + -0.00210725428 + -0.00210715894 + -0.00210703844 + -0.002106886 + -0.00210669291 + -0.00210644794 + -0.00210613657 + -0.00210573989 + -0.00210523304 + -0.00210458315 + -0.00210374629 + -0.00210266316 + -0.00210125274 + -0.002099403 + -0.00209695707 + -0.00209369254 + -0.00208929011 + -0.00208328619 + -0.00207500081 + -0.00206342805 + -0.00204707023 + -0.00202368914 + -0.00198993917 + -0.00194084192 + -0.00186907407 + -0.00176410158 + -0.00161138158 + -0.0013923246 + -0.00108672448 + -0.000681137402 + -0.000188515856 + 0.00031827922 + 0.000677418117 + 0.000687958126 + 0.000344602632 + 6.51212147E-05 + 0.000125673571 + 6.07498303E-05 + -0.00167567492 + -0.00167567462 + -0.00167567425 + -0.00167567378 + -0.00167567318 + -0.00167567244 + -0.0016756715 + -0.00167567031 + -0.00167566882 + -0.00167566694 + -0.00167566458 + -0.0016756616 + -0.00167565786 + -0.00167565314 + -0.0016756472 + -0.00167563971 + -0.00167563029 + -0.00167561841 + -0.00167560345 + -0.0016755846 + -0.00167556083 + -0.00167553087 + -0.00167549307 + -0.00167544536 + -0.00167538512 + -0.00167530897 + -0.00167521264 + -0.00167509062 + -0.00167493581 + -0.00167473904 + -0.00167448834 + -0.001674168 + -0.00167375724 + -0.00167322827 + -0.00167254356 + -0.00167165185 + -0.00167048222 + -0.0016689353 + -0.00166687015 + -0.00166408425 + -0.00166028329 + -0.00165503502 + -0.0016476988 + -0.00163731849 + -0.00162246019 + -0.00160096978 + -0.00156961826 + -0.00152360272 + -0.00145589372 + -0.00135650627 + -0.00121201185 + -0.00100617391 + -0.000723717698 + -0.000360927725 + 5.2610552E-05 + 0.000424105431 + 0.000593036399 + 0.000438713326 + 0.000126150965 + 5.63449905E-05 + 0.000100991581 + -0.00133200557 + -0.00133200539 + -0.00133200515 + -0.00133200485 + -0.00133200448 + -0.00133200401 + -0.00133200341 + -0.00133200266 + -0.00133200172 + -0.00133200054 + -0.00133199904 + -0.00133199716 + -0.0013319948 + -0.00133199182 + -0.00133198806 + -0.00133198333 + -0.00133197738 + -0.00133196988 + -0.00133196043 + -0.00133194852 + -0.00133193351 + -0.00133191458 + -0.0013318907 + -0.00133186056 + -0.00133182251 + -0.00133177441 + -0.00133171355 + -0.00133163646 + -0.00133153867 + -0.00133141436 + -0.00133125597 + -0.00133105358 + -0.00133079405 + -0.00133045981 + -0.00133002714 + -0.00132946361 + -0.00132872435 + -0.00132774648 + -0.00132644076 + -0.00132467887 + -0.00132227422 + -0.00131895243 + -0.00131430631 + -0.00130772691 + -0.00129829851 + -0.00128464004 + -0.00126466932 + -0.00123526255 + -0.00119178671 + -0.00112751937 + -0.00103308572 + -0.000896341904 + -0.00070379119 + -0.000445806719 + -0.000129260776 + 0.00020024485 + 0.000437641774 + 0.000447959742 + 0.000221125486 + 3.4380488E-05 + 8.0976694E-05 + -0.00105866211 + -0.00105866199 + -0.00105866184 + -0.00105866165 + -0.00105866142 + -0.00105866112 + -0.00105866074 + -0.00105866027 + -0.00105865968 + -0.00105865893 + -0.00105865798 + -0.0010586568 + -0.0010586553 + -0.00105865342 + -0.00105865105 + -0.00105864806 + -0.0010586443 + -0.00105863957 + -0.0010586336 + -0.00105862608 + -0.00105861659 + -0.00105860464 + -0.00105858956 + -0.00105857053 + -0.00105854649 + -0.00105851611 + -0.00105847768 + -0.00105842899 + -0.00105836723 + -0.00105828871 + -0.00105818867 + -0.00105806084 + -0.00105789691 + -0.00105768578 + -0.00105741245 + -0.00105705644 + -0.00105658936 + -0.00105597145 + -0.00105514623 + -0.0010540325 + -0.00105251204 + -0.00105041093 + -0.00104747073 + -0.00104330436 + -0.0010373285 + -0.00102866063 + -0.00101596424 + -0.00099722068 + -0.000969405272 + -0.000928057824 + -0.000866790354 + -0.000776924872 + -0.00064781521 + -0.000469144243 + -0.000237630697 + 2.88491055E-05 + 0.000271142084 + 0.000383973289 + 0.000284382088 + 7.71585685E-05 + 3.25176116E-05 diff --git a/PYTHIA8/pythia8170/examples/softsusy.spc b/PYTHIA8/pythia8170/examples/softsusy.spc index 9a88be4bdd6..09fb519d3af 100644 --- a/PYTHIA8/pythia8170/examples/softsusy.spc +++ b/PYTHIA8/pythia8170/examples/softsusy.spc @@ -1,151 +1,151 @@ -# SOFTSUSY1.9 -# B.C. Allanach, Comput. Phys. Commun. 143 (2002) 305-331, hep-ph/0104145 -Block SPINFO # Program information - 1 SOFTSUSY # spectrum calculator - 2 1.9.1 # version number -Block MODSEL # Select model - 1 1 # sugra -Block SMINPUTS # Standard Model inputs - 1 1.27934000e+02 # alpha_em^(-1)(MZ) SM MSbar - 2 1.16637000e-05 # G_Fermi - 3 1.17200000e-01 # alpha_s(MZ)MSbar - 4 9.11876000e+01 # MZ(pole) - 5 4.25000000e+00 # Mb(mb) - 6 1.74300000e+02 # Mtop(pole) - 7 1.77700000e+00 # Mtau(pole) -Block MINPAR # SUSY breaking input parameters - 3 1.00000000e+01 # tanb - 4 1.00000000e+00 # sign(mu) - 1 1.00000000e+02 # m0 - 2 2.50000000e+02 # m12 - 5 -1.00000000e+02 # A0 -# Low energy data in SOFTSUSY: MIXING=-1 TOLERANCE=1.00000000e-03 -# mgut=2.45916471e+16 GeV -Block MASS # Mass spectrum -#PDG code mass particle - 24 8.04191121e+01 # MW - 25 1.10762378e+02 # h0 - 35 4.00599584e+02 # H0 - 36 4.00231463e+02 # A0 - 37 4.08513284e+02 # H+ - 1000001 5.72700955e+02 # ~d_L - 1000002 5.67251814e+02 # ~u_L - 1000003 5.72700955e+02 # ~s_L - 1000004 5.67251814e+02 # ~c_L - 1000005 5.15211952e+02 # ~b_1 - 1000006 3.95920984e+02 # ~t_1 - 1000011 2.04276615e+02 # ~e_L - 1000012 1.88657729e+02 # ~nue_L - 1000013 2.04276615e+02 # ~mu_L - 1000014 1.88657729e+02 # ~numu_L - 1000015 1.36227147e+02 # ~stau_1 - 1000016 1.87773326e+02 # ~nu_tau_L - 1000021 6.07604198e+02 # ~g - 1000022 9.72852615e+01 # ~neutralino(1) - 1000023 1.80961862e+02 # ~neutralino(2) - 1000024 1.80378828e+02 # ~chargino(1) - 1000025 -3.64435115e+02 # ~neutralino(3) - 1000035 3.83135773e+02 # ~neutralino(4) - 1000037 3.83371870e+02 # ~chargino(2) - 2000001 5.46070490e+02 # ~d_R - 2000002 5.46999685e+02 # ~u_R - 2000003 5.46070490e+02 # ~s_R - 2000004 5.46999685e+02 # ~c_R - 2000005 5.43966766e+02 # ~b_2 - 2000006 5.85698733e+02 # ~t_2 - 2000011 1.45526717e+02 # ~e_R - 2000013 1.45526717e+02 # ~mu_R - 2000015 2.08222793e+02 # ~stau_2 -# Higgs mixing -Block alpha # Effective Higgs mixing parameter - -1.13732831e-01 # alpha -Block stopmix # stop mixing matrix - 1 1 5.38083886e-01 # O_{11} - 1 2 8.42891293e-01 # O_{12} - 2 1 8.42891293e-01 # O_{21} - 2 2 -5.38083886e-01 # O_{22} -Block sbotmix # sbottom mixing matrix - 1 1 9.47744273e-01 # O_{11} - 1 2 3.19031021e-01 # O_{12} - 2 1 -3.19031021e-01 # O_{21} - 2 2 9.47744273e-01 # O_{22} -Block staumix # stau mixing matrix - 1 1 2.80956141e-01 # O_{11} - 1 2 9.59720609e-01 # O_{12} - 2 1 9.59720609e-01 # O_{21} - 2 2 -2.80956141e-01 # O_{22} -Block nmix # neutralino mixing matrix - 1 1 9.86066377e-01 # N_{1,1} - 1 2 -5.46292061e-02 # N_{1,2} - 1 3 1.47649927e-01 # N_{1,3} - 1 4 -5.37424305e-02 # N_{1,4} - 2 1 1.02062420e-01 # N_{2,1} - 2 2 9.42721210e-01 # N_{2,2} - 2 3 -2.74985600e-01 # N_{2,3} - 2 4 1.58880154e-01 # N_{2,4} - 3 1 -6.04575099e-02 # N_{3,1} - 3 2 8.97030908e-02 # N_{3,2} - 3 3 6.95501068e-01 # N_{3,3} - 3 4 7.10335491e-01 # N_{3,4} - 4 1 -1.16624405e-01 # N_{4,1} - 4 2 3.16616055e-01 # N_{4,2} - 4 3 6.47194471e-01 # N_{4,3} - 4 4 -6.83587843e-01 # N_{4,4} -Block Umix # chargino U mixing matrix - 1 1 9.15531658e-01 # U_{1,1} - 1 2 -4.02245924e-01 # U_{1,2} - 2 1 4.02245924e-01 # U_{2,1} - 2 2 9.15531658e-01 # U_{2,2} -Block Vmix # chargino V mixing matrix - 1 1 9.72345994e-01 # V_{1,1} - 1 2 -2.33545003e-01 # V_{1,2} - 2 1 2.33545003e-01 # V_{2,1} - 2 2 9.72345994e-01 # V_{2,2} -Block gauge Q= 4.64231969e+02 - 1 3.60968173e-01 # g'(Q)MSSM DRbar - 2 6.46474399e-01 # g(Q)MSSM DRbar - 3 1.09626470e+00 # g3(Q)MSSM DRbar -Block yu Q= 4.64231969e+02 - 3 3 8.89731484e-01 # Yt(Q)MSSM DRbar -Block yd Q= 4.64231969e+02 - 3 3 1.39732269e-01 # Yb(Q)MSSM DRbar -Block ye Q= 4.64231969e+02 - 3 3 1.00914051e-01 # Ytau(Q)MSSM DRbar -Block hmix Q= 4.64231969e+02 # Higgs mixing parameters - 1 3.58339654e+02 # mu(Q)MSSM DRbar - 2 9.75145219e+00 # tan beta(Q)MSSM DRbar - 3 2.44923803e+02 # higgs vev(Q)MSSM DRbar - 4 1.67100152e+05 # mA^2(Q)MSSM DRbar -Block msoft Q=4.64231969e+02 # MSSM DRbar SUSY breaking parameters - 1 1.01439997e+02 # M_1(Q) - 2 1.91579315e+02 # M_2(Q) - 3 5.86586195e+02 # M_3(Q) - 21 3.23914077e+04 # mH1^2(Q) - 22 -1.29413007e+05 # mH2^2(Q) - 31 1.99042560e+02 # meL(Q) - 32 1.99042560e+02 # mmuL(Q) - 33 1.98204510e+02 # mtauL(Q) - 34 1.38811933e+02 # meR(Q) - 35 1.38811933e+02 # mmuR(Q) - 36 1.36392545e+02 # mtauR(Q) - 41 5.50815976e+02 # mqL1(Q) - 42 5.50815976e+02 # mqL2(Q) - 43 4.99361608e+02 # mqL3(Q) - 44 5.28861326e+02 # muR(Q) - 45 5.28861326e+02 # mcR(Q) - 46 4.18454191e+02 # mtR(Q) - 47 5.26100270e+02 # mdR(Q) - 48 5.26100270e+02 # msR(Q) - 49 5.22780488e+02 # mbR(Q) -Block au Q= 4.64231969e+02 - 1 1 0.00000000e+00 # Au(Q)MSSM DRbar - 2 2 0.00000000e+00 # Ac(Q)MSSM DRbar - 3 3 -5.04520155e+02 # At(Q)MSSM DRbar -Block ad Q= 4.64231969e+02 - 1 1 0.00000000e+00 # Ad(Q)MSSM DRbar - 2 2 0.00000000e+00 # As(Q)MSSM DRbar - 3 3 -7.97104366e+02 # Ab(Q)MSSM DRbar -Block ae Q= 4.64231969e+02 - 1 1 0.00000000e+00 # Ae(Q)MSSM DRbar - 2 2 0.00000000e+00 # Amu(Q)MSSM DRbar - 3 3 -2.56146632e+02 # Atau(Q)MSSM DRbar +# SOFTSUSY1.9 +# B.C. Allanach, Comput. Phys. Commun. 143 (2002) 305-331, hep-ph/0104145 +Block SPINFO # Program information + 1 SOFTSUSY # spectrum calculator + 2 1.9.1 # version number +Block MODSEL # Select model + 1 1 # sugra +Block SMINPUTS # Standard Model inputs + 1 1.27934000e+02 # alpha_em^(-1)(MZ) SM MSbar + 2 1.16637000e-05 # G_Fermi + 3 1.17200000e-01 # alpha_s(MZ)MSbar + 4 9.11876000e+01 # MZ(pole) + 5 4.25000000e+00 # Mb(mb) + 6 1.74300000e+02 # Mtop(pole) + 7 1.77700000e+00 # Mtau(pole) +Block MINPAR # SUSY breaking input parameters + 3 1.00000000e+01 # tanb + 4 1.00000000e+00 # sign(mu) + 1 1.00000000e+02 # m0 + 2 2.50000000e+02 # m12 + 5 -1.00000000e+02 # A0 +# Low energy data in SOFTSUSY: MIXING=-1 TOLERANCE=1.00000000e-03 +# mgut=2.45916471e+16 GeV +Block MASS # Mass spectrum +#PDG code mass particle + 24 8.04191121e+01 # MW + 25 1.10762378e+02 # h0 + 35 4.00599584e+02 # H0 + 36 4.00231463e+02 # A0 + 37 4.08513284e+02 # H+ + 1000001 5.72700955e+02 # ~d_L + 1000002 5.67251814e+02 # ~u_L + 1000003 5.72700955e+02 # ~s_L + 1000004 5.67251814e+02 # ~c_L + 1000005 5.15211952e+02 # ~b_1 + 1000006 3.95920984e+02 # ~t_1 + 1000011 2.04276615e+02 # ~e_L + 1000012 1.88657729e+02 # ~nue_L + 1000013 2.04276615e+02 # ~mu_L + 1000014 1.88657729e+02 # ~numu_L + 1000015 1.36227147e+02 # ~stau_1 + 1000016 1.87773326e+02 # ~nu_tau_L + 1000021 6.07604198e+02 # ~g + 1000022 9.72852615e+01 # ~neutralino(1) + 1000023 1.80961862e+02 # ~neutralino(2) + 1000024 1.80378828e+02 # ~chargino(1) + 1000025 -3.64435115e+02 # ~neutralino(3) + 1000035 3.83135773e+02 # ~neutralino(4) + 1000037 3.83371870e+02 # ~chargino(2) + 2000001 5.46070490e+02 # ~d_R + 2000002 5.46999685e+02 # ~u_R + 2000003 5.46070490e+02 # ~s_R + 2000004 5.46999685e+02 # ~c_R + 2000005 5.43966766e+02 # ~b_2 + 2000006 5.85698733e+02 # ~t_2 + 2000011 1.45526717e+02 # ~e_R + 2000013 1.45526717e+02 # ~mu_R + 2000015 2.08222793e+02 # ~stau_2 +# Higgs mixing +Block alpha # Effective Higgs mixing parameter + -1.13732831e-01 # alpha +Block stopmix # stop mixing matrix + 1 1 5.38083886e-01 # O_{11} + 1 2 8.42891293e-01 # O_{12} + 2 1 8.42891293e-01 # O_{21} + 2 2 -5.38083886e-01 # O_{22} +Block sbotmix # sbottom mixing matrix + 1 1 9.47744273e-01 # O_{11} + 1 2 3.19031021e-01 # O_{12} + 2 1 -3.19031021e-01 # O_{21} + 2 2 9.47744273e-01 # O_{22} +Block staumix # stau mixing matrix + 1 1 2.80956141e-01 # O_{11} + 1 2 9.59720609e-01 # O_{12} + 2 1 9.59720609e-01 # O_{21} + 2 2 -2.80956141e-01 # O_{22} +Block nmix # neutralino mixing matrix + 1 1 9.86066377e-01 # N_{1,1} + 1 2 -5.46292061e-02 # N_{1,2} + 1 3 1.47649927e-01 # N_{1,3} + 1 4 -5.37424305e-02 # N_{1,4} + 2 1 1.02062420e-01 # N_{2,1} + 2 2 9.42721210e-01 # N_{2,2} + 2 3 -2.74985600e-01 # N_{2,3} + 2 4 1.58880154e-01 # N_{2,4} + 3 1 -6.04575099e-02 # N_{3,1} + 3 2 8.97030908e-02 # N_{3,2} + 3 3 6.95501068e-01 # N_{3,3} + 3 4 7.10335491e-01 # N_{3,4} + 4 1 -1.16624405e-01 # N_{4,1} + 4 2 3.16616055e-01 # N_{4,2} + 4 3 6.47194471e-01 # N_{4,3} + 4 4 -6.83587843e-01 # N_{4,4} +Block Umix # chargino U mixing matrix + 1 1 9.15531658e-01 # U_{1,1} + 1 2 -4.02245924e-01 # U_{1,2} + 2 1 4.02245924e-01 # U_{2,1} + 2 2 9.15531658e-01 # U_{2,2} +Block Vmix # chargino V mixing matrix + 1 1 9.72345994e-01 # V_{1,1} + 1 2 -2.33545003e-01 # V_{1,2} + 2 1 2.33545003e-01 # V_{2,1} + 2 2 9.72345994e-01 # V_{2,2} +Block gauge Q= 4.64231969e+02 + 1 3.60968173e-01 # g'(Q)MSSM DRbar + 2 6.46474399e-01 # g(Q)MSSM DRbar + 3 1.09626470e+00 # g3(Q)MSSM DRbar +Block yu Q= 4.64231969e+02 + 3 3 8.89731484e-01 # Yt(Q)MSSM DRbar +Block yd Q= 4.64231969e+02 + 3 3 1.39732269e-01 # Yb(Q)MSSM DRbar +Block ye Q= 4.64231969e+02 + 3 3 1.00914051e-01 # Ytau(Q)MSSM DRbar +Block hmix Q= 4.64231969e+02 # Higgs mixing parameters + 1 3.58339654e+02 # mu(Q)MSSM DRbar + 2 9.75145219e+00 # tan beta(Q)MSSM DRbar + 3 2.44923803e+02 # higgs vev(Q)MSSM DRbar + 4 1.67100152e+05 # mA^2(Q)MSSM DRbar +Block msoft Q=4.64231969e+02 # MSSM DRbar SUSY breaking parameters + 1 1.01439997e+02 # M_1(Q) + 2 1.91579315e+02 # M_2(Q) + 3 5.86586195e+02 # M_3(Q) + 21 3.23914077e+04 # mH1^2(Q) + 22 -1.29413007e+05 # mH2^2(Q) + 31 1.99042560e+02 # meL(Q) + 32 1.99042560e+02 # mmuL(Q) + 33 1.98204510e+02 # mtauL(Q) + 34 1.38811933e+02 # meR(Q) + 35 1.38811933e+02 # mmuR(Q) + 36 1.36392545e+02 # mtauR(Q) + 41 5.50815976e+02 # mqL1(Q) + 42 5.50815976e+02 # mqL2(Q) + 43 4.99361608e+02 # mqL3(Q) + 44 5.28861326e+02 # muR(Q) + 45 5.28861326e+02 # mcR(Q) + 46 4.18454191e+02 # mtR(Q) + 47 5.26100270e+02 # mdR(Q) + 48 5.26100270e+02 # msR(Q) + 49 5.22780488e+02 # mbR(Q) +Block au Q= 4.64231969e+02 + 1 1 0.00000000e+00 # Au(Q)MSSM DRbar + 2 2 0.00000000e+00 # Ac(Q)MSSM DRbar + 3 3 -5.04520155e+02 # At(Q)MSSM DRbar +Block ad Q= 4.64231969e+02 + 1 1 0.00000000e+00 # Ad(Q)MSSM DRbar + 2 2 0.00000000e+00 # As(Q)MSSM DRbar + 3 3 -7.97104366e+02 # Ab(Q)MSSM DRbar +Block ae Q= 4.64231969e+02 + 1 1 0.00000000e+00 # Ae(Q)MSSM DRbar + 2 2 0.00000000e+00 # Amu(Q)MSSM DRbar + 3 3 -2.56146632e+02 # Atau(Q)MSSM DRbar diff --git a/PYTHIA8/pythia8170/htmldoc/pythia.css b/PYTHIA8/pythia8170/htmldoc/pythia.css index 59949098d36..4d30d2b6e46 100644 --- a/PYTHIA8/pythia8170/htmldoc/pythia.css +++ b/PYTHIA8/pythia8170/htmldoc/pythia.css @@ -1,77 +1,77 @@ -a:link {color:#bb4444;text-decoration:none;} -a:visited {color:#bb4444;text-decoration:none;} -a:active {color:#ff0000; text-decoration:underline;} -a:hover {color:#ff0000; text-decoration:underline;} - -body, td, div, span { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#000000; - line-height:1.25; -} - -h1 { - font-size:40px; - font-family:verdana,verdana,helvetica; - font-weight:normal; - color:#000000; -} - -h2 { - font-size:24px; - font-family:arial,helvetica; - font-weight:normal; - color:#000000; -} - -h3 { - font-size:20px; - font-family:verdana,geneva,arial,helvetica; - font-weight:normal; - color:#000000; -} - -h4 { - font-size:18px; - font-family:verdana,arial,helvetica; - font-weight:normal; - color:#000000; -} - -code { - color:#0000bb; -} - -pre { - color:#0000bb; - margin-top:0.25em; - margin-bottom:0.25em; -} - -strong { - color:#0000bb; -} - -input { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#bb00ff; -} - -i, dt { - color:#006600; -} - -p { - margin-bottom:0.5em; -} - -li { - margin-top:0.5em; - margin-bottom:0.5em; -} - -ul, ol { - margin-top:0.5em; - margin-bottom:0.5em; -} +a:link {color:#bb4444;text-decoration:none;} +a:visited {color:#bb4444;text-decoration:none;} +a:active {color:#ff0000; text-decoration:underline;} +a:hover {color:#ff0000; text-decoration:underline;} + +body, td, div, span { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#000000; + line-height:1.25; +} + +h1 { + font-size:40px; + font-family:verdana,verdana,helvetica; + font-weight:normal; + color:#000000; +} + +h2 { + font-size:24px; + font-family:arial,helvetica; + font-weight:normal; + color:#000000; +} + +h3 { + font-size:20px; + font-family:verdana,geneva,arial,helvetica; + font-weight:normal; + color:#000000; +} + +h4 { + font-size:18px; + font-family:verdana,arial,helvetica; + font-weight:normal; + color:#000000; +} + +code { + color:#0000bb; +} + +pre { + color:#0000bb; + margin-top:0.25em; + margin-bottom:0.25em; +} + +strong { + color:#0000bb; +} + +input { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#bb00ff; +} + +i, dt { + color:#006600; +} + +p { + margin-bottom:0.5em; +} + +li { + margin-top:0.5em; + margin-bottom:0.5em; +} + +ul, ol { + margin-top:0.5em; + margin-bottom:0.5em; +} diff --git a/PYTHIA8/pythia8170/phpdoc/pythia.css b/PYTHIA8/pythia8170/phpdoc/pythia.css index 59949098d36..4d30d2b6e46 100644 --- a/PYTHIA8/pythia8170/phpdoc/pythia.css +++ b/PYTHIA8/pythia8170/phpdoc/pythia.css @@ -1,77 +1,77 @@ -a:link {color:#bb4444;text-decoration:none;} -a:visited {color:#bb4444;text-decoration:none;} -a:active {color:#ff0000; text-decoration:underline;} -a:hover {color:#ff0000; text-decoration:underline;} - -body, td, div, span { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#000000; - line-height:1.25; -} - -h1 { - font-size:40px; - font-family:verdana,verdana,helvetica; - font-weight:normal; - color:#000000; -} - -h2 { - font-size:24px; - font-family:arial,helvetica; - font-weight:normal; - color:#000000; -} - -h3 { - font-size:20px; - font-family:verdana,geneva,arial,helvetica; - font-weight:normal; - color:#000000; -} - -h4 { - font-size:18px; - font-family:verdana,arial,helvetica; - font-weight:normal; - color:#000000; -} - -code { - color:#0000bb; -} - -pre { - color:#0000bb; - margin-top:0.25em; - margin-bottom:0.25em; -} - -strong { - color:#0000bb; -} - -input { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#bb00ff; -} - -i, dt { - color:#006600; -} - -p { - margin-bottom:0.5em; -} - -li { - margin-top:0.5em; - margin-bottom:0.5em; -} - -ul, ol { - margin-top:0.5em; - margin-bottom:0.5em; -} +a:link {color:#bb4444;text-decoration:none;} +a:visited {color:#bb4444;text-decoration:none;} +a:active {color:#ff0000; text-decoration:underline;} +a:hover {color:#ff0000; text-decoration:underline;} + +body, td, div, span { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#000000; + line-height:1.25; +} + +h1 { + font-size:40px; + font-family:verdana,verdana,helvetica; + font-weight:normal; + color:#000000; +} + +h2 { + font-size:24px; + font-family:arial,helvetica; + font-weight:normal; + color:#000000; +} + +h3 { + font-size:20px; + font-family:verdana,geneva,arial,helvetica; + font-weight:normal; + color:#000000; +} + +h4 { + font-size:18px; + font-family:verdana,arial,helvetica; + font-weight:normal; + color:#000000; +} + +code { + color:#0000bb; +} + +pre { + color:#0000bb; + margin-top:0.25em; + margin-bottom:0.25em; +} + +strong { + color:#0000bb; +} + +input { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#bb00ff; +} + +i, dt { + color:#006600; +} + +p { + margin-bottom:0.5em; +} + +li { + margin-top:0.5em; + margin-bottom:0.5em; +} + +ul, ol { + margin-top:0.5em; + margin-bottom:0.5em; +} diff --git a/PYTHIA8/pythia8175/examples/softsusy.spc b/PYTHIA8/pythia8175/examples/softsusy.spc index 9a88be4bdd6..09fb519d3af 100644 --- a/PYTHIA8/pythia8175/examples/softsusy.spc +++ b/PYTHIA8/pythia8175/examples/softsusy.spc @@ -1,151 +1,151 @@ -# SOFTSUSY1.9 -# B.C. Allanach, Comput. Phys. Commun. 143 (2002) 305-331, hep-ph/0104145 -Block SPINFO # Program information - 1 SOFTSUSY # spectrum calculator - 2 1.9.1 # version number -Block MODSEL # Select model - 1 1 # sugra -Block SMINPUTS # Standard Model inputs - 1 1.27934000e+02 # alpha_em^(-1)(MZ) SM MSbar - 2 1.16637000e-05 # G_Fermi - 3 1.17200000e-01 # alpha_s(MZ)MSbar - 4 9.11876000e+01 # MZ(pole) - 5 4.25000000e+00 # Mb(mb) - 6 1.74300000e+02 # Mtop(pole) - 7 1.77700000e+00 # Mtau(pole) -Block MINPAR # SUSY breaking input parameters - 3 1.00000000e+01 # tanb - 4 1.00000000e+00 # sign(mu) - 1 1.00000000e+02 # m0 - 2 2.50000000e+02 # m12 - 5 -1.00000000e+02 # A0 -# Low energy data in SOFTSUSY: MIXING=-1 TOLERANCE=1.00000000e-03 -# mgut=2.45916471e+16 GeV -Block MASS # Mass spectrum -#PDG code mass particle - 24 8.04191121e+01 # MW - 25 1.10762378e+02 # h0 - 35 4.00599584e+02 # H0 - 36 4.00231463e+02 # A0 - 37 4.08513284e+02 # H+ - 1000001 5.72700955e+02 # ~d_L - 1000002 5.67251814e+02 # ~u_L - 1000003 5.72700955e+02 # ~s_L - 1000004 5.67251814e+02 # ~c_L - 1000005 5.15211952e+02 # ~b_1 - 1000006 3.95920984e+02 # ~t_1 - 1000011 2.04276615e+02 # ~e_L - 1000012 1.88657729e+02 # ~nue_L - 1000013 2.04276615e+02 # ~mu_L - 1000014 1.88657729e+02 # ~numu_L - 1000015 1.36227147e+02 # ~stau_1 - 1000016 1.87773326e+02 # ~nu_tau_L - 1000021 6.07604198e+02 # ~g - 1000022 9.72852615e+01 # ~neutralino(1) - 1000023 1.80961862e+02 # ~neutralino(2) - 1000024 1.80378828e+02 # ~chargino(1) - 1000025 -3.64435115e+02 # ~neutralino(3) - 1000035 3.83135773e+02 # ~neutralino(4) - 1000037 3.83371870e+02 # ~chargino(2) - 2000001 5.46070490e+02 # ~d_R - 2000002 5.46999685e+02 # ~u_R - 2000003 5.46070490e+02 # ~s_R - 2000004 5.46999685e+02 # ~c_R - 2000005 5.43966766e+02 # ~b_2 - 2000006 5.85698733e+02 # ~t_2 - 2000011 1.45526717e+02 # ~e_R - 2000013 1.45526717e+02 # ~mu_R - 2000015 2.08222793e+02 # ~stau_2 -# Higgs mixing -Block alpha # Effective Higgs mixing parameter - -1.13732831e-01 # alpha -Block stopmix # stop mixing matrix - 1 1 5.38083886e-01 # O_{11} - 1 2 8.42891293e-01 # O_{12} - 2 1 8.42891293e-01 # O_{21} - 2 2 -5.38083886e-01 # O_{22} -Block sbotmix # sbottom mixing matrix - 1 1 9.47744273e-01 # O_{11} - 1 2 3.19031021e-01 # O_{12} - 2 1 -3.19031021e-01 # O_{21} - 2 2 9.47744273e-01 # O_{22} -Block staumix # stau mixing matrix - 1 1 2.80956141e-01 # O_{11} - 1 2 9.59720609e-01 # O_{12} - 2 1 9.59720609e-01 # O_{21} - 2 2 -2.80956141e-01 # O_{22} -Block nmix # neutralino mixing matrix - 1 1 9.86066377e-01 # N_{1,1} - 1 2 -5.46292061e-02 # N_{1,2} - 1 3 1.47649927e-01 # N_{1,3} - 1 4 -5.37424305e-02 # N_{1,4} - 2 1 1.02062420e-01 # N_{2,1} - 2 2 9.42721210e-01 # N_{2,2} - 2 3 -2.74985600e-01 # N_{2,3} - 2 4 1.58880154e-01 # N_{2,4} - 3 1 -6.04575099e-02 # N_{3,1} - 3 2 8.97030908e-02 # N_{3,2} - 3 3 6.95501068e-01 # N_{3,3} - 3 4 7.10335491e-01 # N_{3,4} - 4 1 -1.16624405e-01 # N_{4,1} - 4 2 3.16616055e-01 # N_{4,2} - 4 3 6.47194471e-01 # N_{4,3} - 4 4 -6.83587843e-01 # N_{4,4} -Block Umix # chargino U mixing matrix - 1 1 9.15531658e-01 # U_{1,1} - 1 2 -4.02245924e-01 # U_{1,2} - 2 1 4.02245924e-01 # U_{2,1} - 2 2 9.15531658e-01 # U_{2,2} -Block Vmix # chargino V mixing matrix - 1 1 9.72345994e-01 # V_{1,1} - 1 2 -2.33545003e-01 # V_{1,2} - 2 1 2.33545003e-01 # V_{2,1} - 2 2 9.72345994e-01 # V_{2,2} -Block gauge Q= 4.64231969e+02 - 1 3.60968173e-01 # g'(Q)MSSM DRbar - 2 6.46474399e-01 # g(Q)MSSM DRbar - 3 1.09626470e+00 # g3(Q)MSSM DRbar -Block yu Q= 4.64231969e+02 - 3 3 8.89731484e-01 # Yt(Q)MSSM DRbar -Block yd Q= 4.64231969e+02 - 3 3 1.39732269e-01 # Yb(Q)MSSM DRbar -Block ye Q= 4.64231969e+02 - 3 3 1.00914051e-01 # Ytau(Q)MSSM DRbar -Block hmix Q= 4.64231969e+02 # Higgs mixing parameters - 1 3.58339654e+02 # mu(Q)MSSM DRbar - 2 9.75145219e+00 # tan beta(Q)MSSM DRbar - 3 2.44923803e+02 # higgs vev(Q)MSSM DRbar - 4 1.67100152e+05 # mA^2(Q)MSSM DRbar -Block msoft Q=4.64231969e+02 # MSSM DRbar SUSY breaking parameters - 1 1.01439997e+02 # M_1(Q) - 2 1.91579315e+02 # M_2(Q) - 3 5.86586195e+02 # M_3(Q) - 21 3.23914077e+04 # mH1^2(Q) - 22 -1.29413007e+05 # mH2^2(Q) - 31 1.99042560e+02 # meL(Q) - 32 1.99042560e+02 # mmuL(Q) - 33 1.98204510e+02 # mtauL(Q) - 34 1.38811933e+02 # meR(Q) - 35 1.38811933e+02 # mmuR(Q) - 36 1.36392545e+02 # mtauR(Q) - 41 5.50815976e+02 # mqL1(Q) - 42 5.50815976e+02 # mqL2(Q) - 43 4.99361608e+02 # mqL3(Q) - 44 5.28861326e+02 # muR(Q) - 45 5.28861326e+02 # mcR(Q) - 46 4.18454191e+02 # mtR(Q) - 47 5.26100270e+02 # mdR(Q) - 48 5.26100270e+02 # msR(Q) - 49 5.22780488e+02 # mbR(Q) -Block au Q= 4.64231969e+02 - 1 1 0.00000000e+00 # Au(Q)MSSM DRbar - 2 2 0.00000000e+00 # Ac(Q)MSSM DRbar - 3 3 -5.04520155e+02 # At(Q)MSSM DRbar -Block ad Q= 4.64231969e+02 - 1 1 0.00000000e+00 # Ad(Q)MSSM DRbar - 2 2 0.00000000e+00 # As(Q)MSSM DRbar - 3 3 -7.97104366e+02 # Ab(Q)MSSM DRbar -Block ae Q= 4.64231969e+02 - 1 1 0.00000000e+00 # Ae(Q)MSSM DRbar - 2 2 0.00000000e+00 # Amu(Q)MSSM DRbar - 3 3 -2.56146632e+02 # Atau(Q)MSSM DRbar +# SOFTSUSY1.9 +# B.C. Allanach, Comput. Phys. Commun. 143 (2002) 305-331, hep-ph/0104145 +Block SPINFO # Program information + 1 SOFTSUSY # spectrum calculator + 2 1.9.1 # version number +Block MODSEL # Select model + 1 1 # sugra +Block SMINPUTS # Standard Model inputs + 1 1.27934000e+02 # alpha_em^(-1)(MZ) SM MSbar + 2 1.16637000e-05 # G_Fermi + 3 1.17200000e-01 # alpha_s(MZ)MSbar + 4 9.11876000e+01 # MZ(pole) + 5 4.25000000e+00 # Mb(mb) + 6 1.74300000e+02 # Mtop(pole) + 7 1.77700000e+00 # Mtau(pole) +Block MINPAR # SUSY breaking input parameters + 3 1.00000000e+01 # tanb + 4 1.00000000e+00 # sign(mu) + 1 1.00000000e+02 # m0 + 2 2.50000000e+02 # m12 + 5 -1.00000000e+02 # A0 +# Low energy data in SOFTSUSY: MIXING=-1 TOLERANCE=1.00000000e-03 +# mgut=2.45916471e+16 GeV +Block MASS # Mass spectrum +#PDG code mass particle + 24 8.04191121e+01 # MW + 25 1.10762378e+02 # h0 + 35 4.00599584e+02 # H0 + 36 4.00231463e+02 # A0 + 37 4.08513284e+02 # H+ + 1000001 5.72700955e+02 # ~d_L + 1000002 5.67251814e+02 # ~u_L + 1000003 5.72700955e+02 # ~s_L + 1000004 5.67251814e+02 # ~c_L + 1000005 5.15211952e+02 # ~b_1 + 1000006 3.95920984e+02 # ~t_1 + 1000011 2.04276615e+02 # ~e_L + 1000012 1.88657729e+02 # ~nue_L + 1000013 2.04276615e+02 # ~mu_L + 1000014 1.88657729e+02 # ~numu_L + 1000015 1.36227147e+02 # ~stau_1 + 1000016 1.87773326e+02 # ~nu_tau_L + 1000021 6.07604198e+02 # ~g + 1000022 9.72852615e+01 # ~neutralino(1) + 1000023 1.80961862e+02 # ~neutralino(2) + 1000024 1.80378828e+02 # ~chargino(1) + 1000025 -3.64435115e+02 # ~neutralino(3) + 1000035 3.83135773e+02 # ~neutralino(4) + 1000037 3.83371870e+02 # ~chargino(2) + 2000001 5.46070490e+02 # ~d_R + 2000002 5.46999685e+02 # ~u_R + 2000003 5.46070490e+02 # ~s_R + 2000004 5.46999685e+02 # ~c_R + 2000005 5.43966766e+02 # ~b_2 + 2000006 5.85698733e+02 # ~t_2 + 2000011 1.45526717e+02 # ~e_R + 2000013 1.45526717e+02 # ~mu_R + 2000015 2.08222793e+02 # ~stau_2 +# Higgs mixing +Block alpha # Effective Higgs mixing parameter + -1.13732831e-01 # alpha +Block stopmix # stop mixing matrix + 1 1 5.38083886e-01 # O_{11} + 1 2 8.42891293e-01 # O_{12} + 2 1 8.42891293e-01 # O_{21} + 2 2 -5.38083886e-01 # O_{22} +Block sbotmix # sbottom mixing matrix + 1 1 9.47744273e-01 # O_{11} + 1 2 3.19031021e-01 # O_{12} + 2 1 -3.19031021e-01 # O_{21} + 2 2 9.47744273e-01 # O_{22} +Block staumix # stau mixing matrix + 1 1 2.80956141e-01 # O_{11} + 1 2 9.59720609e-01 # O_{12} + 2 1 9.59720609e-01 # O_{21} + 2 2 -2.80956141e-01 # O_{22} +Block nmix # neutralino mixing matrix + 1 1 9.86066377e-01 # N_{1,1} + 1 2 -5.46292061e-02 # N_{1,2} + 1 3 1.47649927e-01 # N_{1,3} + 1 4 -5.37424305e-02 # N_{1,4} + 2 1 1.02062420e-01 # N_{2,1} + 2 2 9.42721210e-01 # N_{2,2} + 2 3 -2.74985600e-01 # N_{2,3} + 2 4 1.58880154e-01 # N_{2,4} + 3 1 -6.04575099e-02 # N_{3,1} + 3 2 8.97030908e-02 # N_{3,2} + 3 3 6.95501068e-01 # N_{3,3} + 3 4 7.10335491e-01 # N_{3,4} + 4 1 -1.16624405e-01 # N_{4,1} + 4 2 3.16616055e-01 # N_{4,2} + 4 3 6.47194471e-01 # N_{4,3} + 4 4 -6.83587843e-01 # N_{4,4} +Block Umix # chargino U mixing matrix + 1 1 9.15531658e-01 # U_{1,1} + 1 2 -4.02245924e-01 # U_{1,2} + 2 1 4.02245924e-01 # U_{2,1} + 2 2 9.15531658e-01 # U_{2,2} +Block Vmix # chargino V mixing matrix + 1 1 9.72345994e-01 # V_{1,1} + 1 2 -2.33545003e-01 # V_{1,2} + 2 1 2.33545003e-01 # V_{2,1} + 2 2 9.72345994e-01 # V_{2,2} +Block gauge Q= 4.64231969e+02 + 1 3.60968173e-01 # g'(Q)MSSM DRbar + 2 6.46474399e-01 # g(Q)MSSM DRbar + 3 1.09626470e+00 # g3(Q)MSSM DRbar +Block yu Q= 4.64231969e+02 + 3 3 8.89731484e-01 # Yt(Q)MSSM DRbar +Block yd Q= 4.64231969e+02 + 3 3 1.39732269e-01 # Yb(Q)MSSM DRbar +Block ye Q= 4.64231969e+02 + 3 3 1.00914051e-01 # Ytau(Q)MSSM DRbar +Block hmix Q= 4.64231969e+02 # Higgs mixing parameters + 1 3.58339654e+02 # mu(Q)MSSM DRbar + 2 9.75145219e+00 # tan beta(Q)MSSM DRbar + 3 2.44923803e+02 # higgs vev(Q)MSSM DRbar + 4 1.67100152e+05 # mA^2(Q)MSSM DRbar +Block msoft Q=4.64231969e+02 # MSSM DRbar SUSY breaking parameters + 1 1.01439997e+02 # M_1(Q) + 2 1.91579315e+02 # M_2(Q) + 3 5.86586195e+02 # M_3(Q) + 21 3.23914077e+04 # mH1^2(Q) + 22 -1.29413007e+05 # mH2^2(Q) + 31 1.99042560e+02 # meL(Q) + 32 1.99042560e+02 # mmuL(Q) + 33 1.98204510e+02 # mtauL(Q) + 34 1.38811933e+02 # meR(Q) + 35 1.38811933e+02 # mmuR(Q) + 36 1.36392545e+02 # mtauR(Q) + 41 5.50815976e+02 # mqL1(Q) + 42 5.50815976e+02 # mqL2(Q) + 43 4.99361608e+02 # mqL3(Q) + 44 5.28861326e+02 # muR(Q) + 45 5.28861326e+02 # mcR(Q) + 46 4.18454191e+02 # mtR(Q) + 47 5.26100270e+02 # mdR(Q) + 48 5.26100270e+02 # msR(Q) + 49 5.22780488e+02 # mbR(Q) +Block au Q= 4.64231969e+02 + 1 1 0.00000000e+00 # Au(Q)MSSM DRbar + 2 2 0.00000000e+00 # Ac(Q)MSSM DRbar + 3 3 -5.04520155e+02 # At(Q)MSSM DRbar +Block ad Q= 4.64231969e+02 + 1 1 0.00000000e+00 # Ad(Q)MSSM DRbar + 2 2 0.00000000e+00 # As(Q)MSSM DRbar + 3 3 -7.97104366e+02 # Ab(Q)MSSM DRbar +Block ae Q= 4.64231969e+02 + 1 1 0.00000000e+00 # Ae(Q)MSSM DRbar + 2 2 0.00000000e+00 # Amu(Q)MSSM DRbar + 3 3 -2.56146632e+02 # Atau(Q)MSSM DRbar diff --git a/PYTHIA8/pythia8175/htmldoc/pythia.css b/PYTHIA8/pythia8175/htmldoc/pythia.css index 59949098d36..4d30d2b6e46 100644 --- a/PYTHIA8/pythia8175/htmldoc/pythia.css +++ b/PYTHIA8/pythia8175/htmldoc/pythia.css @@ -1,77 +1,77 @@ -a:link {color:#bb4444;text-decoration:none;} -a:visited {color:#bb4444;text-decoration:none;} -a:active {color:#ff0000; text-decoration:underline;} -a:hover {color:#ff0000; text-decoration:underline;} - -body, td, div, span { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#000000; - line-height:1.25; -} - -h1 { - font-size:40px; - font-family:verdana,verdana,helvetica; - font-weight:normal; - color:#000000; -} - -h2 { - font-size:24px; - font-family:arial,helvetica; - font-weight:normal; - color:#000000; -} - -h3 { - font-size:20px; - font-family:verdana,geneva,arial,helvetica; - font-weight:normal; - color:#000000; -} - -h4 { - font-size:18px; - font-family:verdana,arial,helvetica; - font-weight:normal; - color:#000000; -} - -code { - color:#0000bb; -} - -pre { - color:#0000bb; - margin-top:0.25em; - margin-bottom:0.25em; -} - -strong { - color:#0000bb; -} - -input { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#bb00ff; -} - -i, dt { - color:#006600; -} - -p { - margin-bottom:0.5em; -} - -li { - margin-top:0.5em; - margin-bottom:0.5em; -} - -ul, ol { - margin-top:0.5em; - margin-bottom:0.5em; -} +a:link {color:#bb4444;text-decoration:none;} +a:visited {color:#bb4444;text-decoration:none;} +a:active {color:#ff0000; text-decoration:underline;} +a:hover {color:#ff0000; text-decoration:underline;} + +body, td, div, span { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#000000; + line-height:1.25; +} + +h1 { + font-size:40px; + font-family:verdana,verdana,helvetica; + font-weight:normal; + color:#000000; +} + +h2 { + font-size:24px; + font-family:arial,helvetica; + font-weight:normal; + color:#000000; +} + +h3 { + font-size:20px; + font-family:verdana,geneva,arial,helvetica; + font-weight:normal; + color:#000000; +} + +h4 { + font-size:18px; + font-family:verdana,arial,helvetica; + font-weight:normal; + color:#000000; +} + +code { + color:#0000bb; +} + +pre { + color:#0000bb; + margin-top:0.25em; + margin-bottom:0.25em; +} + +strong { + color:#0000bb; +} + +input { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#bb00ff; +} + +i, dt { + color:#006600; +} + +p { + margin-bottom:0.5em; +} + +li { + margin-top:0.5em; + margin-bottom:0.5em; +} + +ul, ol { + margin-top:0.5em; + margin-bottom:0.5em; +} diff --git a/PYTHIA8/pythia8175/include/History.h b/PYTHIA8/pythia8175/include/History.h index 1ce1c0ff235..37b5de121b9 100644 --- a/PYTHIA8/pythia8175/include/History.h +++ b/PYTHIA8/pythia8175/include/History.h @@ -1,775 +1,775 @@ -// History.h is a part of the PYTHIA event generator. -// Copyright (C) 2013 Torbjorn Sjostrand. -// PYTHIA is licenced under the GNU GPL version 2, see COPYING for details. -// Please respect the MCnet Guidelines, see GUIDELINES for details. - -// This file is written by Stefan Prestel. -// It contains the main class for matrix element merging. -// Header file for the Clustering and History classes. - -#ifndef Pythia8_History_H -#define Pythia8_History_H - -#include "Basics.h" -#include "BeamParticle.h" -#include "Event.h" -#include "Info.h" -#include "ParticleData.h" -#include "PythiaStdlib.h" -#include "Settings.h" -#include "PartonLevel.h" - -namespace Pythia8 { - -//========================================================================== - -// Declaration of Clustering class. -// This class holds information about one radiator, recoiler, emitted system. -// This class is a container class for History class use. - -class Clustering { - -public: - - // The emitted parton location. - int emitted; - // The emittor parton - int emittor; - // The recoiler parton. - int recoiler; - // The colour connected recoiler (Can be different for ISR) - int partner; - // The scale associated with this clustering. - double pTscale; - - // Default constructor - Clustering(){ - emitted = 0; - emittor = 0; - recoiler = 0; - partner = 0; - pTscale = 0.0; - } - - // Default destructor - ~Clustering(){} - - // Copy constructor - Clustering( const Clustering& inSystem ){ - emitted = inSystem.emitted; - emittor = inSystem.emittor; - recoiler = inSystem.recoiler; - partner = inSystem.partner; - pTscale = inSystem.pTscale; - } - - // Constructor with input - Clustering( int emtIn, int radIn, int recIn, int partnerIn, - double pTscaleIn ){ - emitted = emtIn; - emittor = radIn; - recoiler = recIn; - partner = partnerIn; - pTscale = pTscaleIn; - } - - // Function to return pythia pT scale of clustering - double pT() const { return pTscale; } - - // print for debug - void list() const; - -}; - -//========================================================================== - -// Declaration of History class -// -// A History object represents an event in a given step in the CKKW-L -// clustering procedure. It defines a tree-like recursive structure, -// where the root node represents the state with n jets as given by -// the matrix element generator, and is characterized by the member -// variable mother being null. The leaves on the tree corresponds to a -// fully clustered paths where the original n-jets has been clustered -// down to the Born-level state. Also states which cannot be clustered -// down to the Born-level are possible - these will be called -// incomplete. The leaves are characterized by the vector of children -// being empty. - -class History { - -public: - - // The only constructor. Default arguments are used when creating - // the initial history node. The \a depth is the maximum number of - // clusterings requested. \a scalein is the scale at which the \a - // statein was clustered (should be set to the merging scale for the - // initial history node. \a beamAIn and beamBIn are needed to - // calcutate PDF ratios, \a particleDataIn to have access to the - // correct masses of particles. If \a isOrdered is true, the previous - // clusterings has been ordered. \a is the PDF ratio for this - // clustering (=1 for FSR clusterings). \a probin is the accumulated - // probabilities for the previous clusterings, and \ mothin is the - // previous history node (null for the initial node). - History( int depth, - double scalein, - Event statein, - Clustering c, - MergingHooks* mergingHooksPtrIn, - BeamParticle beamAIn, - BeamParticle beamBIn, - ParticleData* particleDataPtrIn, - Info* infoPtrIn, - bool isOrdered, - bool isStronglyOrdered, - bool isAllowed, - bool isNextInInput, - double probin, - History * mothin); - - // The destructor deletes each child. - ~History() { - for ( int i = 0, N = children.size(); i < N; ++i ) delete children[i]; - } - - // Function to project paths onto desired paths. - bool projectOntoDesiredHistories(); - - // For CKKW-L, NL3 and UMEPS: - // In the initial history node, select one of the paths according to - // the probabilities. This function should be called for the initial - // history node. - // IN trialShower* : Previously initialised trialShower object, - // to perform trial showering and as - // repository of pointers to initialise alphaS - // PartonSystems* : PartonSystems object needed to initialise - // shower objects - // OUT double : (Sukadov) , (alpha_S ratios) , (PDF ratios) - double weightTREE(PartonLevel* trial, AlphaStrong * asFSR, - AlphaStrong * asISR, double RN); - - // For default NL3: - // Return weight of virtual correction and subtractive for NL3 merging - double weightLOOP(PartonLevel* trial, double RN); - // Return O(\alpha_s)-term of CKKWL-weight for NL3 merging - double weightFIRST(PartonLevel* trial, AlphaStrong* asFSR, - AlphaStrong* asISR, double RN, Rndm* rndmPtr ); - - // For UMEPS: - double weight_UMEPS_TREE(PartonLevel* trial, AlphaStrong * asFSR, - AlphaStrong * asISR, double RN); - double weight_UMEPS_SUBT(PartonLevel* trial, AlphaStrong * asFSR, - AlphaStrong * asISR, double RN); - - // For unitary NL3: - double weight_UNLOPS_TREE(PartonLevel* trial, AlphaStrong * asFSR, - AlphaStrong * asISR, double RN); - double weight_UNLOPS_SUBT(PartonLevel* trial, AlphaStrong * asFSR, - AlphaStrong * asISR, double RN); - double weight_UNLOPS_LOOP(PartonLevel* trial, double RN); - double weight_UNLOPS_SUBTNLO(PartonLevel* trial, double RN); - double weight_UNLOPS_CORRECTION( int order, PartonLevel* trial, - AlphaStrong* asFSR, AlphaStrong* asISR, - double RN, Rndm* rndmPtr ); - - // Function to check if any allowed histories were found - bool foundAllowedHistories() { - return (children.size() > 0 && foundAllowedPath); } - // Function to check if any ordered histories were found - bool foundOrderedHistories() { - return (children.size() > 0 && foundOrderedPath); } - // Function to check if any ordered histories were found - bool foundCompleteHistories() { - return (children.size() > 0 && foundCompletePath); } - - // Function to set the state with complete scales for evolution - void getStartingConditions( const double RN, Event& outState ); - // Function to get the state with complete scales for evolution - bool getClusteredEvent( const double RN, int nSteps, Event& outState); - // Function to get the first reclustered state above the merging scale. - bool getFirstClusteredEventAboveTMS( const double RN, int nDesired, - Event& process, int & nPerformed, bool updateProcess = true ); - // Function to return the depth of the history (i.e. the number of - // reclustered splittings) - int nClusterings(); - - // Function to get the lowest multiplicity reclustered event - Event lowestMultProc( const double RN) { - // Return lowest multiplicity state - return (select(RN)->state); - } - - // Calculate and return pdf ratio - double getPDFratio( int side, bool forSudakov, bool useHardPDF, - int flavNum, double xNum, double muNum, - int flavDen, double xDen, double muDen); - - // Make Pythia class friend - friend class Pythia; - // Make Merging class friend - friend class Merging; - -private: - - // Number of trial emission to use for calculating the average number of - // emissions - static const int NTRIAL; - - // Function to set all scales in the sequence of states. This is a - // wrapper routine for setScales and setEventScales methods - void setScalesInHistory(); - - // Function to find the index (in the mother histories) of the - // child history, thus providing a way access the path from both - // initial history (mother == 0) and final history (all children == 0) - // IN vector : The index of each child in the children vector - // of the current history node will be saved in - // this vector - // NO OUTPUT - void findPath(vector& out); - - // Functions to set the parton production scales and enforce - // ordering on the scales of the respective clusterings stored in - // the History node: - // Method will start from lowest multiplicity state and move to - // higher states, setting the production scales the shower would - // have used. - // When arriving at the highest multiplicity, the method will switch - // and go back in direction of lower states to check and enforce - // ordering for unordered histories. - // IN vector : Vector of positions of the chosen child - // in the mother history to allow to move - // in direction initial->final along path - // bool : True: Move in direction low->high - // multiplicity and set production scales - // False: Move in direction high->low - // multiplicity and check and enforce - // ordering - // NO OUTPUT - void setScales( vector index, bool forward); - - // Function to find a particle in all higher multiplicity events - // along the history path and set its production scale to the input - // scale - // IN int iPart : Parton in refEvent to be checked / rescaled - // Event& refEvent : Reference event for iPart - // double scale : Scale to be set as production scale for - // unchanged copies of iPart in subsequent steps - void scaleCopies(int iPart, const Event& refEvent, double rho); - - // Function to set the OVERALL EVENT SCALES [=state.scale()] to - // the scale of the last clustering - // NO INPUT - // NO OUTPUT - void setEventScales(); - - // Function to print information on the reconstructed scales in one path. - // For debug only. - void printScales() { if ( mother ) mother->printScales(); - cout << " size " << state.size() << " scale " << scale << " clusterIn " - << clusterIn.pT() << " state.scale() " << state.scale() << endl; } - - // Function to project paths onto desired paths. - bool trimHistories(); - // Function to tag history for removal. - void remove(){ doInclude = false; } - // Function to return flag of allowed histories to choose from. - bool keep(){ return doInclude; } - // Function implementing checks on a paths, for deciding if the path should - // be considered valid or not. - bool keepHistory(); - // Function to check if a path is ordered in evolution pT. - bool isOrderedPath( double maxscale ); - - bool followsInputPath(); - - // Function to check if all reconstucted states in a path pass the merging - // scale cut. - bool allIntermediateAboveRhoMS( double rhoms, bool good = true ); - // Function to check if any ordered paths were found (and kept). - bool foundAnyOrderedPaths(); - - // Functions to return the z value of the last ISR splitting - // NO INPUT - // OUTPUT double : z value of last ISR splitting in history - double zISR(); - - // Functions to return the z value of the last FSR splitting - // NO INPUT - // OUTPUT double : z value of last FSR splitting in history - double zFSR(); - - // Functions to return the pT scale of the last ISR splitting - // NO INPUT - // OUTPUT double : pT scale of last ISR splitting in history - double pTISR(); - - // Functions to return the pT scale of the last FSR splitting - // NO INPUT - // OUTPUT double : pT scale of last FSR splitting in history - double pTFSR(); - - // Functions to return the event with nSteps additional partons - // INPUT int : Number of splittings in the event, - // as counted from core 2->2 process - // OUTPUT Event : event with nSteps additional partons - Event clusteredState( int nSteps); - - // Function to choose a path from all paths in the tree - // according to their splitting probabilities - // IN double : Random number - // OUT History* : Leaf of history path chosen - History * select(double rnd); - - // For a full path, find the weight calculated from the ratio of - // couplings, the no-emission probabilities, and possible PDF - // ratios. This function should only be called for the last history - // node of a full path. - // IN TimeShower : Already initialised shower object to be used as - // trial shower - // double : alpha_s value used in ME calculation - // double : Maximal mass scale of the problem (e.g. E_CM) - // AlphaStrong: Initialised shower alpha_s object for FSR alpha_s - // ratio calculation - // AlphaStrong: Initialised shower alpha_s object for ISR alpha_s - // ratio calculation (can be different from previous) - double weightTree(PartonLevel* trial, double as0, double maxscale, - double pdfScale, AlphaStrong * asFSR, AlphaStrong * asISR, - double& asWeight, double& pdfWeight); - - // Function to return the \alpha_s-ratio part of the CKKWL weight. - double weightTreeALPHAS( double as0, AlphaStrong * asFSR, - AlphaStrong * asISR ); - // Function to return the PDF-ratio part of the CKKWL weight. - double weightTreePDFs( double maxscale, double pdfScale ); - // Function to return the no-emission probability part of the CKKWL weight. - double weightTreeEmissions( PartonLevel* trial, int type, int njetMax, - double maxscale ); - - // Function to generate the O(\alpha_s)-term of the CKKWL-weight - double weightFirst(PartonLevel* trial, double as0, double muR, - double maxscale, AlphaStrong * asFSR, AlphaStrong * asISR, Rndm* rndmPtr ); - - // Function to generate the O(\alpha_s)-term of the \alpha_s-ratios - // appearing in the CKKWL-weight. - double weightFirstALPHAS( double as0, double muR, AlphaStrong * asFSR, - AlphaStrong * asISR); - // Function to generate the O(\alpha_s)-term of the PDF-ratios - // appearing in the CKKWL-weight. - double weightFirstPDFs( double as0, double maxscale, double pdfScale, - Rndm* rndmPtr ); - // Function to generate the O(\alpha_s)-term of the no-emission - // probabilities appearing in the CKKWL-weight. - double weightFirstEmissions(PartonLevel* trial, double as0, double maxscale, - AlphaStrong * asFSR, AlphaStrong * asISR, bool fixpdf, bool fixas ); - - // Function to return the default factorisation scale of the hard process. - double hardFacScale(const Event& event); - // Function to return the default renormalisation scale of the hard process. - double hardRenScale(const Event& event); - - // Perform a trial shower using the \a pythia object between - // maxscale down to this scale and return the corresponding Sudakov - // form factor. - // IN trialShower : Shower object used as trial shower - // double : Maximum scale for trial shower branching - // OUT 0.0 : trial shower emission outside allowed pT range - // 1.0 : trial shower successful (any emission was below - // the minimal scale ) - double doTrialShower(PartonLevel* trial, int type, double maxscale, - double minscale = 0.); - - // Function to bookkeep the indices of weights generated in countEmissions - bool updateind(vector & ind, int i, int N); - - // Function to count number of emissions between two scales for NLO merging - vector countEmissions(PartonLevel* trial, double maxscale, - double minscale, int showerType, double as0, AlphaStrong * asFSR, - AlphaStrong * asISR, int N, bool fixpdf, bool fixas); - - // Function to integrate PDF ratios between two scales over x and t, - // where the PDFs are always evaluated at the lower t-integration limit - double monteCarloPDFratios(int flav, double x, double maxScale, - double minScale, double pdfScale, double asME, Rndm* rndmPtr); - - // Default: Check if a ordered (and complete) path has been found in - // the initial node, in which case we will no longer be interested in - // any unordered paths. - bool onlyOrderedPaths(); - - // Check if a strongly ordered (and complete) path has been found in the - // initial node, in which case we will no longer be interested in - // any unordered paths. - bool onlyStronglyOrderedPaths(); - - // Check if an allowed (according to user-criterion) path has been found in - // the initial node, in which case we will no longer be interested in - // any forbidden paths. - bool onlyAllowedPaths(); - - // When a full path has been found, register it with the initial - // history node. - // IN History : History to be registered as path - // bool : Specifying if clusterings so far were ordered - // bool : Specifying if path is complete down to 2->2 process - // OUT true if History object forms a plausible path (eg prob>0 ...) - bool registerPath(History & l, bool isOrdered, bool isStronglyOrdered, - bool isAllowed, bool isComplete); - - // For the history-defining state (and if necessary interfering - // states), find all possible clusterings. - // NO INPUT - // OUT vector of all (rad,rec,emt) systems - vector getAllQCDClusterings(); - - // For one given state, find all possible clusterings. - // IN Event : state to be investigated - // OUT vector of all (rad,rec,emt) systems in the state - vector getQCDClusterings( const Event& event); - - // Function to construct (rad,rec,emt) triples from the event - // IN int : Position of Emitted in event record for which - // dipoles should be constructed - // int : Colour topogy to be tested - // 1= g -> qqbar, causing 2 -> 2 dipole splitting - // 2= q(bar) -> q(bar) g && g -> gg, - // causing a 2 -> 3 dipole splitting - // Event : event record to be checked for ptential partners - // OUT vector of all allowed radiator+recoiler+emitted triples - vector findQCDTriple (int EmtTagIn, int colTopIn, - const Event& event, vector PosFinalPartn, - vector PosInitPartn ); - - vector getAllEWClusterings(); - vector getEWClusterings( const Event& event); - vector findEWTriple( int EmtTagIn, const Event& event, - vector PosFinalPartn ); - - vector getAllSQCDClusterings(); - vector getSQCDClusterings( const Event& event); - vector findSQCDTriple (int EmtTagIn, int colTopIn, - const Event& event, vector PosFinalPartn, - vector PosInitPartn ); - - // Calculate and return the probability of a clustering. - // IN Clustering : rad,rec,emt - System for which the splitting - // probability should be calcuated - // OUT splitting probability - double getProb(const Clustering & SystemIn); - - // Set up the beams (fill the beam particles with the correct - // current incoming particles) to allow calculation of splitting - // probability. - // For interleaved evolution, set assignments dividing PDFs into - // sea and valence content. This assignment is, until a history path - // is chosen and a first trial shower performed, not fully correct - // (since content is chosen form too high x and too low scale). The - // assignment used for reweighting will be corrected after trial - // showering - void setupBeams(); - - // Calculate the PDF ratio used in the argument of the no-emission - // probability. - double pdfForSudakov(); - - // Calculate the hard process matrix element to include in the selection - // probability. - double hardProcessME( const Event& event); - - // Perform the clustering of the current state and return the - // clustered state. - // IN Clustering : rad,rec,emt triple to be clustered to two partons - // OUT clustered state - Event cluster(const Clustering & inSystem); - - // Function to get the flavour of the radiator before the splitting - // for clustering - // IN int : Position of the radiator after the splitting, in the event - // int : Position of the emitted after the splitting, in the event - // Event : Reference event - // OUT int : Flavour of the radiator before the splitting - int getRadBeforeFlav(const int RadAfter, const int EmtAfter, - const Event& event); - - // Function to get the colour of the radiator before the splitting - // for clustering - // IN int : Position of the radiator after the splitting, in the event - // int : Position of the emitted after the splitting, in the event - // Event : Reference event - // OUT int : Colour of the radiator before the splitting - int getRadBeforeCol(const int RadAfter, const int EmtAfter, - const Event& event); - - // Function to get the anticolour of the radiator before the splitting - // for clustering - // IN int : Position of the radiator after the splitting, in the event - // int : Position of the emitted after the splitting, in the event - // Event : Reference event - // OUT int : Anticolour of the radiator before the splitting - int getRadBeforeAcol(const int RadAfter, const int EmtAfter, - const Event& event); - - // Function to get the parton connected to in by a colour line - // IN int : Position of parton for which partner should be found - // Event : Reference event - // OUT int : If a colour line connects the "in" parton with another - // parton, return the Position of the partner, else return 0 - int getColPartner(const int in, const Event& event); - - // Function to get the parton connected to in by an anticolour line - // IN int : Position of parton for which partner should be found - // Event : Reference event - // OUT int : If an anticolour line connects the "in" parton with another - // parton, return the Position of the partner, else return 0 - int getAcolPartner(const int in, const Event& event); - - // Function to get the list of partons connected to the particle - // formed by reclusterinf emt and rad by colour and anticolour lines - // IN int : Position of radiator in the clustering - // IN int : Position of emitted in the clustering - // Event : Reference event - // OUT vector : List of positions of all partons that are connected - // to the parton that will be formed - // by clustering emt and rad. - vector getReclusteredPartners(const int rad, const int emt, - const Event& event); - - // Function to extract a chain of colour-connected partons in - // the event - // IN int : Type of parton from which to start extracting a - // parton chain. If the starting point is a quark - // i.e. flavType = 1, a chain of partons that are - // consecutively connected by colour-lines will be - // extracted. If the starting point is an antiquark - // i.e. flavType =-1, a chain of partons that are - // consecutively connected by anticolour-lines - // will be extracted. - // IN int : Position of the parton from which a - // colour-connected chain should be derived - // IN Event : Refernence event - // IN/OUT vector : Partons that should be excluded from the search. - // OUT vector : Positions of partons along the chain - // OUT bool : Found singlet / did not find singlet - bool getColSinglet(const int flavType, const int iParton, - const Event& event, vector& exclude, - vector& colSinglet); - - // Function to check that a set of partons forms a colour singlet - // IN Event : Reference event - // IN vector : Positions of the partons in the set - // OUT bool : Is a colour singlet / is not - bool isColSinglet( const Event& event, vector system); - // Function to check that a set of partons forms a flavour singlet - // IN Event : Reference event - // IN vector : Positions of the partons in the set - // IN int : Flavour of all the quarks in the set, if - // all quarks in a set should have a fixed flavour - // OUT bool : Is a flavour singlet / is not - bool isFlavSinglet( const Event& event, - vector system, int flav=0); - - // Function to properly colour-connect the radiator to the rest of - // the event, as needed during clustering - // IN Particle& : Particle to be connected - // Particle : Recoiler forming a dipole with Radiator - // Event : event to which Radiator shall be appended - // OUT true : Radiator could be connected to the event - // false : Radiator could not be connected to the - // event or the resulting event was - // non-valid - bool connectRadiator( Particle& Radiator, const int RadType, - const Particle& Recoiler, const int RecType, - const Event& event ); - - // Function to find a colour (anticolour) index in the input event - // IN int col : Colour tag to be investigated - // int iExclude1 : Identifier of first particle to be excluded - // from search - // int iExclude2 : Identifier of second particle to be excluded - // from search - // Event event : event to be searched for colour tag - // int type : Tag to define if col should be counted as - // colour (type = 1) [->find anti-colour index - // contracted with col] - // anticolour (type = 2) [->find colour index - // contracted with col] - // OUT int : Position of particle in event record - // contraced with col [0 if col is free tag] - int FindCol(int col, int iExclude1, int iExclude2, - const Event& event, int type, bool isHardIn); - - // Function to in the input event find a particle with quantum - // numbers matching those of the input particle - // IN Particle : Particle to be searched for - // Event : Event to be searched in - // OUT int : > 0 : Position of matching particle in event - // < 0 : No match in event - int FindParticle( const Particle& particle, const Event& event, - bool checkStatus = true ); - - // Function to check if rad,emt,rec triple is allowed for clustering - // IN int rad,emt,rec,partner : Positions (in event record) of the three - // particles considered for clustering, and the - // correct colour-connected recoiler (=partner) - // Event event : Reference event - bool allowedClustering( int rad, int emt, int rec, int partner, - const Event& event ); - - // Function to check if rad,emt,rec triple is results in - // colour singlet radBefore+recBefore - // IN int rad,emt,rec : Positions (in event record) of the three - // particles considered for clustering - // Event event : Reference event - bool isSinglett( int rad, int emt, int rec, const Event& event ); - - // Function to check if event is sensibly constructed: Meaning - // that all colour indices are contracted and that the charge in - // initial and final states matches - // IN event : event to be checked - // OUT TRUE : event is properly construced - // FALSE : event not valid - bool validEvent( const Event& event ); - - // Function to check whether two clusterings are identical, used - // for finding the history path in the mother -> children direction - bool equalClustering( Clustering clus1 , Clustering clus2 ); - - // Chose dummy scale for event construction. By default, choose - // sHat for 2->Boson(->2)+ n partons processes and - // M_Boson for 2->Boson(->) processes - double choseHardScale( const Event& event ) const; - - // If the state has an incoming hadron return the flavour of the - // parton entering the hard interaction. Otherwise return 0 - int getCurrentFlav(const int) const; - - // If the state has an incoming hadron return the x-value for the - // parton entering the hard interaction. Otherwise return 0. - double getCurrentX(const int) const; - - double getCurrentZ(const int rad, const int rec, const int emt) const; - - // Function to compute "pythia pT separation" from Particle input - double pTLund(const Particle& RadAfterBranch,const Particle& EmtAfterBranch, - const Particle& RecAfterBranch, int ShowerType); - - // Function to return the position of the initial line before (or after) - // a single (!) splitting. - int posChangedIncoming(const Event& event, bool before); - - // Function to give back the ratio of PDFs and PDF * splitting kernels - // needed to convert a splitting at scale pdfScale, chosen with running - // PDFs, to a splitting chosen with PDFs at a fixed scale mu. As needed to - // properly count emissions. - double pdfFactor( const Event& event, const int type, double pdfScale, - double mu ); - - // Function giving the product of splitting kernels and PDFs so that the - // resulting flavour is given by flav. This is used as a helper routine - // to dgauss - double integrand(int flav, double x, double scaleInt, double z); - - //----------------------------------------------------------------------// - // Class members. - //----------------------------------------------------------------------// - - // The state of the event correponding to this step in the - // reconstruction. - Event state; - - // The previous step from which this step has been clustered. If - // null, this is the initial step with the n-jet state generated by - // the matrix element. - History * mother; - - // The different steps corresponding to possible clusterings of this - // state. - vector children; - - // The different paths which have been reconstructed indexed with - // the (incremental) corresponding probability. This map is empty - // unless this is the initial step (mother == 0). - map paths; - - // The sum of the probabilities of the full paths. This is zero - // unless this is the initial step (mother == 0). - double sumpath; - - // The different allowed paths after projection, indexed with - // the (incremental) corresponding probability. This map is empty - // unless this is the initial step (mother == 0). - map goodBranches, badBranches; - // The sum of the probabilities of allowed paths after projection. This is - // zero unless this is the initial step (mother == 0). - double sumGoodBranches, sumBadBranches; - - // This is set true if an ordered (and complete) path has been found - // and inserted in paths. - bool foundOrderedPath; - - // This is set true if a strongly ordered (and complete) path has been found - // and inserted in paths. - bool foundStronglyOrderedPath; - - // This is set true if an allowed (according to a user criterion) path has - // been found and inserted in paths. - bool foundAllowedPath; - - // This is set true if a complete (with the required number of - // clusterings) path has been found and inserted in paths. - bool foundCompletePath; - - // The scale of this step, corresponding to clustering which - // constructed the corresponding state (or the merging scale in case - // mother == 0). - double scale; - - // Flag indicating if a clustering in the construction of all histories is - // the next clustering demanded by inout clusterings in LesHouches 2.0 - // accord. - bool nextInInput; - - // The probability associated with this step and the previous steps. - double prob; - - // The partons and scale of the last clustering. - Clustering clusterIn; - int iReclusteredOld, iReclusteredNew; - - // Flag to include the path amongst allowed paths. - bool doInclude; - - // Pointer to MergingHooks object to get all the settings. - MergingHooks* mergingHooksPtr; - - // The default constructor is private. - History() {} - - // The copy-constructor is private. - History(const History &) {} - - // The assignment operator is private. - History & operator=(const History &) { - return *this; - } - - // BeamParticle to get access to PDFs - BeamParticle beamA; - BeamParticle beamB; - // ParticleData needed to initialise the shower AND to get the - // correct masses of partons needed in calculation of probability - ParticleData* particleDataPtr; - - // Info object to have access to all information read from LHE file - Info* infoPtr; - - // Minimal scalar sum of pT used in Herwig to choose history - double sumScalarPT; - -}; - -//========================================================================== - -} // end namespace Pythia8 - -#endif // end Pythia8_History_H +// History.h is a part of the PYTHIA event generator. +// Copyright (C) 2013 Torbjorn Sjostrand. +// PYTHIA is licenced under the GNU GPL version 2, see COPYING for details. +// Please respect the MCnet Guidelines, see GUIDELINES for details. + +// This file is written by Stefan Prestel. +// It contains the main class for matrix element merging. +// Header file for the Clustering and History classes. + +#ifndef Pythia8_History_H +#define Pythia8_History_H + +#include "Basics.h" +#include "BeamParticle.h" +#include "Event.h" +#include "Info.h" +#include "ParticleData.h" +#include "PythiaStdlib.h" +#include "Settings.h" +#include "PartonLevel.h" + +namespace Pythia8 { + +//========================================================================== + +// Declaration of Clustering class. +// This class holds information about one radiator, recoiler, emitted system. +// This class is a container class for History class use. + +class Clustering { + +public: + + // The emitted parton location. + int emitted; + // The emittor parton + int emittor; + // The recoiler parton. + int recoiler; + // The colour connected recoiler (Can be different for ISR) + int partner; + // The scale associated with this clustering. + double pTscale; + + // Default constructor + Clustering(){ + emitted = 0; + emittor = 0; + recoiler = 0; + partner = 0; + pTscale = 0.0; + } + + // Default destructor + ~Clustering(){} + + // Copy constructor + Clustering( const Clustering& inSystem ){ + emitted = inSystem.emitted; + emittor = inSystem.emittor; + recoiler = inSystem.recoiler; + partner = inSystem.partner; + pTscale = inSystem.pTscale; + } + + // Constructor with input + Clustering( int emtIn, int radIn, int recIn, int partnerIn, + double pTscaleIn ){ + emitted = emtIn; + emittor = radIn; + recoiler = recIn; + partner = partnerIn; + pTscale = pTscaleIn; + } + + // Function to return pythia pT scale of clustering + double pT() const { return pTscale; } + + // print for debug + void list() const; + +}; + +//========================================================================== + +// Declaration of History class +// +// A History object represents an event in a given step in the CKKW-L +// clustering procedure. It defines a tree-like recursive structure, +// where the root node represents the state with n jets as given by +// the matrix element generator, and is characterized by the member +// variable mother being null. The leaves on the tree corresponds to a +// fully clustered paths where the original n-jets has been clustered +// down to the Born-level state. Also states which cannot be clustered +// down to the Born-level are possible - these will be called +// incomplete. The leaves are characterized by the vector of children +// being empty. + +class History { + +public: + + // The only constructor. Default arguments are used when creating + // the initial history node. The \a depth is the maximum number of + // clusterings requested. \a scalein is the scale at which the \a + // statein was clustered (should be set to the merging scale for the + // initial history node. \a beamAIn and beamBIn are needed to + // calcutate PDF ratios, \a particleDataIn to have access to the + // correct masses of particles. If \a isOrdered is true, the previous + // clusterings has been ordered. \a is the PDF ratio for this + // clustering (=1 for FSR clusterings). \a probin is the accumulated + // probabilities for the previous clusterings, and \ mothin is the + // previous history node (null for the initial node). + History( int depth, + double scalein, + Event statein, + Clustering c, + MergingHooks* mergingHooksPtrIn, + BeamParticle beamAIn, + BeamParticle beamBIn, + ParticleData* particleDataPtrIn, + Info* infoPtrIn, + bool isOrdered, + bool isStronglyOrdered, + bool isAllowed, + bool isNextInInput, + double probin, + History * mothin); + + // The destructor deletes each child. + ~History() { + for ( int i = 0, N = children.size(); i < N; ++i ) delete children[i]; + } + + // Function to project paths onto desired paths. + bool projectOntoDesiredHistories(); + + // For CKKW-L, NL3 and UMEPS: + // In the initial history node, select one of the paths according to + // the probabilities. This function should be called for the initial + // history node. + // IN trialShower* : Previously initialised trialShower object, + // to perform trial showering and as + // repository of pointers to initialise alphaS + // PartonSystems* : PartonSystems object needed to initialise + // shower objects + // OUT double : (Sukadov) , (alpha_S ratios) , (PDF ratios) + double weightTREE(PartonLevel* trial, AlphaStrong * asFSR, + AlphaStrong * asISR, double RN); + + // For default NL3: + // Return weight of virtual correction and subtractive for NL3 merging + double weightLOOP(PartonLevel* trial, double RN); + // Return O(\alpha_s)-term of CKKWL-weight for NL3 merging + double weightFIRST(PartonLevel* trial, AlphaStrong* asFSR, + AlphaStrong* asISR, double RN, Rndm* rndmPtr ); + + // For UMEPS: + double weight_UMEPS_TREE(PartonLevel* trial, AlphaStrong * asFSR, + AlphaStrong * asISR, double RN); + double weight_UMEPS_SUBT(PartonLevel* trial, AlphaStrong * asFSR, + AlphaStrong * asISR, double RN); + + // For unitary NL3: + double weight_UNLOPS_TREE(PartonLevel* trial, AlphaStrong * asFSR, + AlphaStrong * asISR, double RN); + double weight_UNLOPS_SUBT(PartonLevel* trial, AlphaStrong * asFSR, + AlphaStrong * asISR, double RN); + double weight_UNLOPS_LOOP(PartonLevel* trial, double RN); + double weight_UNLOPS_SUBTNLO(PartonLevel* trial, double RN); + double weight_UNLOPS_CORRECTION( int order, PartonLevel* trial, + AlphaStrong* asFSR, AlphaStrong* asISR, + double RN, Rndm* rndmPtr ); + + // Function to check if any allowed histories were found + bool foundAllowedHistories() { + return (children.size() > 0 && foundAllowedPath); } + // Function to check if any ordered histories were found + bool foundOrderedHistories() { + return (children.size() > 0 && foundOrderedPath); } + // Function to check if any ordered histories were found + bool foundCompleteHistories() { + return (children.size() > 0 && foundCompletePath); } + + // Function to set the state with complete scales for evolution + void getStartingConditions( const double RN, Event& outState ); + // Function to get the state with complete scales for evolution + bool getClusteredEvent( const double RN, int nSteps, Event& outState); + // Function to get the first reclustered state above the merging scale. + bool getFirstClusteredEventAboveTMS( const double RN, int nDesired, + Event& process, int & nPerformed, bool updateProcess = true ); + // Function to return the depth of the history (i.e. the number of + // reclustered splittings) + int nClusterings(); + + // Function to get the lowest multiplicity reclustered event + Event lowestMultProc( const double RN) { + // Return lowest multiplicity state + return (select(RN)->state); + } + + // Calculate and return pdf ratio + double getPDFratio( int side, bool forSudakov, bool useHardPDF, + int flavNum, double xNum, double muNum, + int flavDen, double xDen, double muDen); + + // Make Pythia class friend + friend class Pythia; + // Make Merging class friend + friend class Merging; + +private: + + // Number of trial emission to use for calculating the average number of + // emissions + static const int NTRIAL; + + // Function to set all scales in the sequence of states. This is a + // wrapper routine for setScales and setEventScales methods + void setScalesInHistory(); + + // Function to find the index (in the mother histories) of the + // child history, thus providing a way access the path from both + // initial history (mother == 0) and final history (all children == 0) + // IN vector : The index of each child in the children vector + // of the current history node will be saved in + // this vector + // NO OUTPUT + void findPath(vector& out); + + // Functions to set the parton production scales and enforce + // ordering on the scales of the respective clusterings stored in + // the History node: + // Method will start from lowest multiplicity state and move to + // higher states, setting the production scales the shower would + // have used. + // When arriving at the highest multiplicity, the method will switch + // and go back in direction of lower states to check and enforce + // ordering for unordered histories. + // IN vector : Vector of positions of the chosen child + // in the mother history to allow to move + // in direction initial->final along path + // bool : True: Move in direction low->high + // multiplicity and set production scales + // False: Move in direction high->low + // multiplicity and check and enforce + // ordering + // NO OUTPUT + void setScales( vector index, bool forward); + + // Function to find a particle in all higher multiplicity events + // along the history path and set its production scale to the input + // scale + // IN int iPart : Parton in refEvent to be checked / rescaled + // Event& refEvent : Reference event for iPart + // double scale : Scale to be set as production scale for + // unchanged copies of iPart in subsequent steps + void scaleCopies(int iPart, const Event& refEvent, double rho); + + // Function to set the OVERALL EVENT SCALES [=state.scale()] to + // the scale of the last clustering + // NO INPUT + // NO OUTPUT + void setEventScales(); + + // Function to print information on the reconstructed scales in one path. + // For debug only. + void printScales() { if ( mother ) mother->printScales(); + cout << " size " << state.size() << " scale " << scale << " clusterIn " + << clusterIn.pT() << " state.scale() " << state.scale() << endl; } + + // Function to project paths onto desired paths. + bool trimHistories(); + // Function to tag history for removal. + void remove(){ doInclude = false; } + // Function to return flag of allowed histories to choose from. + bool keep(){ return doInclude; } + // Function implementing checks on a paths, for deciding if the path should + // be considered valid or not. + bool keepHistory(); + // Function to check if a path is ordered in evolution pT. + bool isOrderedPath( double maxscale ); + + bool followsInputPath(); + + // Function to check if all reconstucted states in a path pass the merging + // scale cut. + bool allIntermediateAboveRhoMS( double rhoms, bool good = true ); + // Function to check if any ordered paths were found (and kept). + bool foundAnyOrderedPaths(); + + // Functions to return the z value of the last ISR splitting + // NO INPUT + // OUTPUT double : z value of last ISR splitting in history + double zISR(); + + // Functions to return the z value of the last FSR splitting + // NO INPUT + // OUTPUT double : z value of last FSR splitting in history + double zFSR(); + + // Functions to return the pT scale of the last ISR splitting + // NO INPUT + // OUTPUT double : pT scale of last ISR splitting in history + double pTISR(); + + // Functions to return the pT scale of the last FSR splitting + // NO INPUT + // OUTPUT double : pT scale of last FSR splitting in history + double pTFSR(); + + // Functions to return the event with nSteps additional partons + // INPUT int : Number of splittings in the event, + // as counted from core 2->2 process + // OUTPUT Event : event with nSteps additional partons + Event clusteredState( int nSteps); + + // Function to choose a path from all paths in the tree + // according to their splitting probabilities + // IN double : Random number + // OUT History* : Leaf of history path chosen + History * select(double rnd); + + // For a full path, find the weight calculated from the ratio of + // couplings, the no-emission probabilities, and possible PDF + // ratios. This function should only be called for the last history + // node of a full path. + // IN TimeShower : Already initialised shower object to be used as + // trial shower + // double : alpha_s value used in ME calculation + // double : Maximal mass scale of the problem (e.g. E_CM) + // AlphaStrong: Initialised shower alpha_s object for FSR alpha_s + // ratio calculation + // AlphaStrong: Initialised shower alpha_s object for ISR alpha_s + // ratio calculation (can be different from previous) + double weightTree(PartonLevel* trial, double as0, double maxscale, + double pdfScale, AlphaStrong * asFSR, AlphaStrong * asISR, + double& asWeight, double& pdfWeight); + + // Function to return the \alpha_s-ratio part of the CKKWL weight. + double weightTreeALPHAS( double as0, AlphaStrong * asFSR, + AlphaStrong * asISR ); + // Function to return the PDF-ratio part of the CKKWL weight. + double weightTreePDFs( double maxscale, double pdfScale ); + // Function to return the no-emission probability part of the CKKWL weight. + double weightTreeEmissions( PartonLevel* trial, int type, int njetMax, + double maxscale ); + + // Function to generate the O(\alpha_s)-term of the CKKWL-weight + double weightFirst(PartonLevel* trial, double as0, double muR, + double maxscale, AlphaStrong * asFSR, AlphaStrong * asISR, Rndm* rndmPtr ); + + // Function to generate the O(\alpha_s)-term of the \alpha_s-ratios + // appearing in the CKKWL-weight. + double weightFirstALPHAS( double as0, double muR, AlphaStrong * asFSR, + AlphaStrong * asISR); + // Function to generate the O(\alpha_s)-term of the PDF-ratios + // appearing in the CKKWL-weight. + double weightFirstPDFs( double as0, double maxscale, double pdfScale, + Rndm* rndmPtr ); + // Function to generate the O(\alpha_s)-term of the no-emission + // probabilities appearing in the CKKWL-weight. + double weightFirstEmissions(PartonLevel* trial, double as0, double maxscale, + AlphaStrong * asFSR, AlphaStrong * asISR, bool fixpdf, bool fixas ); + + // Function to return the default factorisation scale of the hard process. + double hardFacScale(const Event& event); + // Function to return the default renormalisation scale of the hard process. + double hardRenScale(const Event& event); + + // Perform a trial shower using the \a pythia object between + // maxscale down to this scale and return the corresponding Sudakov + // form factor. + // IN trialShower : Shower object used as trial shower + // double : Maximum scale for trial shower branching + // OUT 0.0 : trial shower emission outside allowed pT range + // 1.0 : trial shower successful (any emission was below + // the minimal scale ) + double doTrialShower(PartonLevel* trial, int type, double maxscale, + double minscale = 0.); + + // Function to bookkeep the indices of weights generated in countEmissions + bool updateind(vector & ind, int i, int N); + + // Function to count number of emissions between two scales for NLO merging + vector countEmissions(PartonLevel* trial, double maxscale, + double minscale, int showerType, double as0, AlphaStrong * asFSR, + AlphaStrong * asISR, int N, bool fixpdf, bool fixas); + + // Function to integrate PDF ratios between two scales over x and t, + // where the PDFs are always evaluated at the lower t-integration limit + double monteCarloPDFratios(int flav, double x, double maxScale, + double minScale, double pdfScale, double asME, Rndm* rndmPtr); + + // Default: Check if a ordered (and complete) path has been found in + // the initial node, in which case we will no longer be interested in + // any unordered paths. + bool onlyOrderedPaths(); + + // Check if a strongly ordered (and complete) path has been found in the + // initial node, in which case we will no longer be interested in + // any unordered paths. + bool onlyStronglyOrderedPaths(); + + // Check if an allowed (according to user-criterion) path has been found in + // the initial node, in which case we will no longer be interested in + // any forbidden paths. + bool onlyAllowedPaths(); + + // When a full path has been found, register it with the initial + // history node. + // IN History : History to be registered as path + // bool : Specifying if clusterings so far were ordered + // bool : Specifying if path is complete down to 2->2 process + // OUT true if History object forms a plausible path (eg prob>0 ...) + bool registerPath(History & l, bool isOrdered, bool isStronglyOrdered, + bool isAllowed, bool isComplete); + + // For the history-defining state (and if necessary interfering + // states), find all possible clusterings. + // NO INPUT + // OUT vector of all (rad,rec,emt) systems + vector getAllQCDClusterings(); + + // For one given state, find all possible clusterings. + // IN Event : state to be investigated + // OUT vector of all (rad,rec,emt) systems in the state + vector getQCDClusterings( const Event& event); + + // Function to construct (rad,rec,emt) triples from the event + // IN int : Position of Emitted in event record for which + // dipoles should be constructed + // int : Colour topogy to be tested + // 1= g -> qqbar, causing 2 -> 2 dipole splitting + // 2= q(bar) -> q(bar) g && g -> gg, + // causing a 2 -> 3 dipole splitting + // Event : event record to be checked for ptential partners + // OUT vector of all allowed radiator+recoiler+emitted triples + vector findQCDTriple (int EmtTagIn, int colTopIn, + const Event& event, vector PosFinalPartn, + vector PosInitPartn ); + + vector getAllEWClusterings(); + vector getEWClusterings( const Event& event); + vector findEWTriple( int EmtTagIn, const Event& event, + vector PosFinalPartn ); + + vector getAllSQCDClusterings(); + vector getSQCDClusterings( const Event& event); + vector findSQCDTriple (int EmtTagIn, int colTopIn, + const Event& event, vector PosFinalPartn, + vector PosInitPartn ); + + // Calculate and return the probability of a clustering. + // IN Clustering : rad,rec,emt - System for which the splitting + // probability should be calcuated + // OUT splitting probability + double getProb(const Clustering & SystemIn); + + // Set up the beams (fill the beam particles with the correct + // current incoming particles) to allow calculation of splitting + // probability. + // For interleaved evolution, set assignments dividing PDFs into + // sea and valence content. This assignment is, until a history path + // is chosen and a first trial shower performed, not fully correct + // (since content is chosen form too high x and too low scale). The + // assignment used for reweighting will be corrected after trial + // showering + void setupBeams(); + + // Calculate the PDF ratio used in the argument of the no-emission + // probability. + double pdfForSudakov(); + + // Calculate the hard process matrix element to include in the selection + // probability. + double hardProcessME( const Event& event); + + // Perform the clustering of the current state and return the + // clustered state. + // IN Clustering : rad,rec,emt triple to be clustered to two partons + // OUT clustered state + Event cluster(const Clustering & inSystem); + + // Function to get the flavour of the radiator before the splitting + // for clustering + // IN int : Position of the radiator after the splitting, in the event + // int : Position of the emitted after the splitting, in the event + // Event : Reference event + // OUT int : Flavour of the radiator before the splitting + int getRadBeforeFlav(const int RadAfter, const int EmtAfter, + const Event& event); + + // Function to get the colour of the radiator before the splitting + // for clustering + // IN int : Position of the radiator after the splitting, in the event + // int : Position of the emitted after the splitting, in the event + // Event : Reference event + // OUT int : Colour of the radiator before the splitting + int getRadBeforeCol(const int RadAfter, const int EmtAfter, + const Event& event); + + // Function to get the anticolour of the radiator before the splitting + // for clustering + // IN int : Position of the radiator after the splitting, in the event + // int : Position of the emitted after the splitting, in the event + // Event : Reference event + // OUT int : Anticolour of the radiator before the splitting + int getRadBeforeAcol(const int RadAfter, const int EmtAfter, + const Event& event); + + // Function to get the parton connected to in by a colour line + // IN int : Position of parton for which partner should be found + // Event : Reference event + // OUT int : If a colour line connects the "in" parton with another + // parton, return the Position of the partner, else return 0 + int getColPartner(const int in, const Event& event); + + // Function to get the parton connected to in by an anticolour line + // IN int : Position of parton for which partner should be found + // Event : Reference event + // OUT int : If an anticolour line connects the "in" parton with another + // parton, return the Position of the partner, else return 0 + int getAcolPartner(const int in, const Event& event); + + // Function to get the list of partons connected to the particle + // formed by reclusterinf emt and rad by colour and anticolour lines + // IN int : Position of radiator in the clustering + // IN int : Position of emitted in the clustering + // Event : Reference event + // OUT vector : List of positions of all partons that are connected + // to the parton that will be formed + // by clustering emt and rad. + vector getReclusteredPartners(const int rad, const int emt, + const Event& event); + + // Function to extract a chain of colour-connected partons in + // the event + // IN int : Type of parton from which to start extracting a + // parton chain. If the starting point is a quark + // i.e. flavType = 1, a chain of partons that are + // consecutively connected by colour-lines will be + // extracted. If the starting point is an antiquark + // i.e. flavType =-1, a chain of partons that are + // consecutively connected by anticolour-lines + // will be extracted. + // IN int : Position of the parton from which a + // colour-connected chain should be derived + // IN Event : Refernence event + // IN/OUT vector : Partons that should be excluded from the search. + // OUT vector : Positions of partons along the chain + // OUT bool : Found singlet / did not find singlet + bool getColSinglet(const int flavType, const int iParton, + const Event& event, vector& exclude, + vector& colSinglet); + + // Function to check that a set of partons forms a colour singlet + // IN Event : Reference event + // IN vector : Positions of the partons in the set + // OUT bool : Is a colour singlet / is not + bool isColSinglet( const Event& event, vector system); + // Function to check that a set of partons forms a flavour singlet + // IN Event : Reference event + // IN vector : Positions of the partons in the set + // IN int : Flavour of all the quarks in the set, if + // all quarks in a set should have a fixed flavour + // OUT bool : Is a flavour singlet / is not + bool isFlavSinglet( const Event& event, + vector system, int flav=0); + + // Function to properly colour-connect the radiator to the rest of + // the event, as needed during clustering + // IN Particle& : Particle to be connected + // Particle : Recoiler forming a dipole with Radiator + // Event : event to which Radiator shall be appended + // OUT true : Radiator could be connected to the event + // false : Radiator could not be connected to the + // event or the resulting event was + // non-valid + bool connectRadiator( Particle& Radiator, const int RadType, + const Particle& Recoiler, const int RecType, + const Event& event ); + + // Function to find a colour (anticolour) index in the input event + // IN int col : Colour tag to be investigated + // int iExclude1 : Identifier of first particle to be excluded + // from search + // int iExclude2 : Identifier of second particle to be excluded + // from search + // Event event : event to be searched for colour tag + // int type : Tag to define if col should be counted as + // colour (type = 1) [->find anti-colour index + // contracted with col] + // anticolour (type = 2) [->find colour index + // contracted with col] + // OUT int : Position of particle in event record + // contraced with col [0 if col is free tag] + int FindCol(int col, int iExclude1, int iExclude2, + const Event& event, int type, bool isHardIn); + + // Function to in the input event find a particle with quantum + // numbers matching those of the input particle + // IN Particle : Particle to be searched for + // Event : Event to be searched in + // OUT int : > 0 : Position of matching particle in event + // < 0 : No match in event + int FindParticle( const Particle& particle, const Event& event, + bool checkStatus = true ); + + // Function to check if rad,emt,rec triple is allowed for clustering + // IN int rad,emt,rec,partner : Positions (in event record) of the three + // particles considered for clustering, and the + // correct colour-connected recoiler (=partner) + // Event event : Reference event + bool allowedClustering( int rad, int emt, int rec, int partner, + const Event& event ); + + // Function to check if rad,emt,rec triple is results in + // colour singlet radBefore+recBefore + // IN int rad,emt,rec : Positions (in event record) of the three + // particles considered for clustering + // Event event : Reference event + bool isSinglett( int rad, int emt, int rec, const Event& event ); + + // Function to check if event is sensibly constructed: Meaning + // that all colour indices are contracted and that the charge in + // initial and final states matches + // IN event : event to be checked + // OUT TRUE : event is properly construced + // FALSE : event not valid + bool validEvent( const Event& event ); + + // Function to check whether two clusterings are identical, used + // for finding the history path in the mother -> children direction + bool equalClustering( Clustering clus1 , Clustering clus2 ); + + // Chose dummy scale for event construction. By default, choose + // sHat for 2->Boson(->2)+ n partons processes and + // M_Boson for 2->Boson(->) processes + double choseHardScale( const Event& event ) const; + + // If the state has an incoming hadron return the flavour of the + // parton entering the hard interaction. Otherwise return 0 + int getCurrentFlav(const int) const; + + // If the state has an incoming hadron return the x-value for the + // parton entering the hard interaction. Otherwise return 0. + double getCurrentX(const int) const; + + double getCurrentZ(const int rad, const int rec, const int emt) const; + + // Function to compute "pythia pT separation" from Particle input + double pTLund(const Particle& RadAfterBranch,const Particle& EmtAfterBranch, + const Particle& RecAfterBranch, int ShowerType); + + // Function to return the position of the initial line before (or after) + // a single (!) splitting. + int posChangedIncoming(const Event& event, bool before); + + // Function to give back the ratio of PDFs and PDF * splitting kernels + // needed to convert a splitting at scale pdfScale, chosen with running + // PDFs, to a splitting chosen with PDFs at a fixed scale mu. As needed to + // properly count emissions. + double pdfFactor( const Event& event, const int type, double pdfScale, + double mu ); + + // Function giving the product of splitting kernels and PDFs so that the + // resulting flavour is given by flav. This is used as a helper routine + // to dgauss + double integrand(int flav, double x, double scaleInt, double z); + + //----------------------------------------------------------------------// + // Class members. + //----------------------------------------------------------------------// + + // The state of the event correponding to this step in the + // reconstruction. + Event state; + + // The previous step from which this step has been clustered. If + // null, this is the initial step with the n-jet state generated by + // the matrix element. + History * mother; + + // The different steps corresponding to possible clusterings of this + // state. + vector children; + + // The different paths which have been reconstructed indexed with + // the (incremental) corresponding probability. This map is empty + // unless this is the initial step (mother == 0). + map paths; + + // The sum of the probabilities of the full paths. This is zero + // unless this is the initial step (mother == 0). + double sumpath; + + // The different allowed paths after projection, indexed with + // the (incremental) corresponding probability. This map is empty + // unless this is the initial step (mother == 0). + map goodBranches, badBranches; + // The sum of the probabilities of allowed paths after projection. This is + // zero unless this is the initial step (mother == 0). + double sumGoodBranches, sumBadBranches; + + // This is set true if an ordered (and complete) path has been found + // and inserted in paths. + bool foundOrderedPath; + + // This is set true if a strongly ordered (and complete) path has been found + // and inserted in paths. + bool foundStronglyOrderedPath; + + // This is set true if an allowed (according to a user criterion) path has + // been found and inserted in paths. + bool foundAllowedPath; + + // This is set true if a complete (with the required number of + // clusterings) path has been found and inserted in paths. + bool foundCompletePath; + + // The scale of this step, corresponding to clustering which + // constructed the corresponding state (or the merging scale in case + // mother == 0). + double scale; + + // Flag indicating if a clustering in the construction of all histories is + // the next clustering demanded by inout clusterings in LesHouches 2.0 + // accord. + bool nextInInput; + + // The probability associated with this step and the previous steps. + double prob; + + // The partons and scale of the last clustering. + Clustering clusterIn; + int iReclusteredOld, iReclusteredNew; + + // Flag to include the path amongst allowed paths. + bool doInclude; + + // Pointer to MergingHooks object to get all the settings. + MergingHooks* mergingHooksPtr; + + // The default constructor is private. + History() {} + + // The copy-constructor is private. + History(const History &) {} + + // The assignment operator is private. + History & operator=(const History &) { + return *this; + } + + // BeamParticle to get access to PDFs + BeamParticle beamA; + BeamParticle beamB; + // ParticleData needed to initialise the shower AND to get the + // correct masses of partons needed in calculation of probability + ParticleData* particleDataPtr; + + // Info object to have access to all information read from LHE file + Info* infoPtr; + + // Minimal scalar sum of pT used in Herwig to choose history + double sumScalarPT; + +}; + +//========================================================================== + +} // end namespace Pythia8 + +#endif // end Pythia8_History_H diff --git a/PYTHIA8/pythia8175/phpdoc/pythia.css b/PYTHIA8/pythia8175/phpdoc/pythia.css index 59949098d36..4d30d2b6e46 100644 --- a/PYTHIA8/pythia8175/phpdoc/pythia.css +++ b/PYTHIA8/pythia8175/phpdoc/pythia.css @@ -1,77 +1,77 @@ -a:link {color:#bb4444;text-decoration:none;} -a:visited {color:#bb4444;text-decoration:none;} -a:active {color:#ff0000; text-decoration:underline;} -a:hover {color:#ff0000; text-decoration:underline;} - -body, td, div, span { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#000000; - line-height:1.25; -} - -h1 { - font-size:40px; - font-family:verdana,verdana,helvetica; - font-weight:normal; - color:#000000; -} - -h2 { - font-size:24px; - font-family:arial,helvetica; - font-weight:normal; - color:#000000; -} - -h3 { - font-size:20px; - font-family:verdana,geneva,arial,helvetica; - font-weight:normal; - color:#000000; -} - -h4 { - font-size:18px; - font-family:verdana,arial,helvetica; - font-weight:normal; - color:#000000; -} - -code { - color:#0000bb; -} - -pre { - color:#0000bb; - margin-top:0.25em; - margin-bottom:0.25em; -} - -strong { - color:#0000bb; -} - -input { - font-size:16px; - font-family:arial,verdana,geneva,helvetica; - color:#bb00ff; -} - -i, dt { - color:#006600; -} - -p { - margin-bottom:0.5em; -} - -li { - margin-top:0.5em; - margin-bottom:0.5em; -} - -ul, ol { - margin-top:0.5em; - margin-bottom:0.5em; -} +a:link {color:#bb4444;text-decoration:none;} +a:visited {color:#bb4444;text-decoration:none;} +a:active {color:#ff0000; text-decoration:underline;} +a:hover {color:#ff0000; text-decoration:underline;} + +body, td, div, span { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#000000; + line-height:1.25; +} + +h1 { + font-size:40px; + font-family:verdana,verdana,helvetica; + font-weight:normal; + color:#000000; +} + +h2 { + font-size:24px; + font-family:arial,helvetica; + font-weight:normal; + color:#000000; +} + +h3 { + font-size:20px; + font-family:verdana,geneva,arial,helvetica; + font-weight:normal; + color:#000000; +} + +h4 { + font-size:18px; + font-family:verdana,arial,helvetica; + font-weight:normal; + color:#000000; +} + +code { + color:#0000bb; +} + +pre { + color:#0000bb; + margin-top:0.25em; + margin-bottom:0.25em; +} + +strong { + color:#0000bb; +} + +input { + font-size:16px; + font-family:arial,verdana,geneva,helvetica; + color:#bb00ff; +} + +i, dt { + color:#006600; +} + +p { + margin-bottom:0.5em; +} + +li { + margin-top:0.5em; + margin-bottom:0.5em; +} + +ul, ol { + margin-top:0.5em; + margin-bottom:0.5em; +} diff --git a/RAW/AliCaloFastAltroFitv0.h b/RAW/AliCaloFastAltroFitv0.h index 7d3d7d2ac58..a9ea99d1777 100644 --- a/RAW/AliCaloFastAltroFitv0.h +++ b/RAW/AliCaloFastAltroFitv0.h @@ -1,112 +1,112 @@ -//_________________________________________________________________________ -// Procedure of fast altro fitting -// -//*-- Author: Aleksei Pavlinov; IHEP, Protvino, Russia & WSU, Detroit, USA - -#ifndef ALICALOFASTALTROFITV0_H -#define ALICALOFASTALTROFITV0_H -/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ -/* $Id: $ */ - -/* History of svn commits - * $Log$ - */ - -#include -// --- ROOT system --- -class TCanvas; -class TVirtualPad; -class TF1; -class TH1F; - -class AliCaloFastAltroFitv0 : public TNamed { - -public: - - AliCaloFastAltroFitv0(); - AliCaloFastAltroFitv0(const char* name, const char* title, - const Double_t sig=1.3, const Double_t tau=2.35, const Double_t n=2.); - virtual ~AliCaloFastAltroFitv0(); - - virtual void FastFit(Int_t* t, Int_t* y, Int_t nPoints, Double_t sig, Double_t tau, - Double_t n, Double_t ped, Double_t tMax); - - void FastFit(TH1F* h, Double_t sig, Double_t tau, - Double_t n, Double_t ped, Double_t tMax); - - void Reset(); - void SetSig(const Double_t sig) {fSig = sig;} - void SetTau(const Double_t tau) {fTau = tau;} - void SetN(const Double_t n) {fN = n;} - void SetParameters(const Double_t sig, const Double_t tau, const Double_t n) - {fSig = sig; fTau = tau; fN = n;} - - Double_t GetSig() const {return fSig;} - Double_t GetTau() const {return fTau;} - Double_t GetN() const {return fN;} - Double_t GetPed() const {return fPed;} - - Double_t GetEnergy() const {return fAmp;} - Double_t GetAmp() const {return GetEnergy();} - Double_t GetAmpErr() const {return fAmpErr;} - Double_t GetTime() const {return fT0;} - Double_t GetT0() const {return GetTime();} - Double_t GetT0Err() const {return fT0Err;} - Double_t GetChi2() const {return fChi2;} - Int_t GetNDF() const {return fNDF;} - Int_t GetNfit() const {return fNfit;} - Int_t GetNoFit() const {return fNoFit;} - - void GetFitResult(Double_t &, Double_t &eamp, Double_t &t0, Double_t &et0, - Double_t &chi2,Int_t &ndf) const; - void GetFittedPoints(Int_t &nfit, Double_t* ar[2]) const; - - // Drawing for QA - TCanvas* DrawFastFunction(); // *MENU* - static Double_t StdResponseFunction(const Double_t *x, const Double_t *par); - - static void CutRightPart(Int_t *t,Int_t *y,Int_t nPoints, Double_t tMax, Int_t &ii); - static void DeductPedestal(Int_t* t, Int_t* y, Int_t nPointsIn, Double_t ped, Double_t tau, - Double_t* tn, Double_t* yn, Int_t &nPointsOut); - - static void FastFit(const Double_t* t, const Double_t* y, const Int_t nPoints, - const Double_t sig, const Double_t tau, - Double_t &, Double_t &eamp, Double_t &t0, Double_t &et0, Double_t &chi2); - static Bool_t QuadraticRoots(const Double_t a, const Double_t b, const Double_t c, - Double_t &x1, Double_t &x2); - static void Amplitude(const Double_t* t, const Double_t* y, const Int_t nPoints, - const Double_t sig, const Double_t tau, - Double_t t0, Double_t &, Double_t &chi2); - static void CalculateParsErrors(const Double_t* t, const Double_t* y, const Int_t nPoints, - const Double_t sig, const Double_t tau, - Double_t &, Double_t &t0, Double_t &eamp, Double_t &et0); -protected: - Double_t fSig; // error in amplitude - used in chi2 calculation - Double_t fTau; // first fixed parameter od fitting function (should be - filter time response - Double_t fN; // second fixed parameter od fitting function (should be positive) - Double_t fPed; // pedestal - - Double_t fAmp; // amplitude - Double_t fAmpErr; // amplitude error - Double_t fT0; // time - Double_t fT0Err; // time error - Double_t fChi2; // chi square - Int_t fNDF; // number degree of freedom - Int_t fNoFit; // no solution for square equation - - // Working variable - Int_t fNfit; //! number points for fit - Double_t* fTfit; //! points for fit after selection - time bins - Double_t* fAmpfit; //! - amplitudes - // - TF1* fStdFun; //! function for drawing - -private: - AliCaloFastAltroFitv0(const AliCaloFastAltroFitv0 &obj); - AliCaloFastAltroFitv0& operator= (const AliCaloFastAltroFitv0 &obj); - - ClassDef(AliCaloFastAltroFitv0,1) // Class for fast altro fitting -}; - -#endif // ALICALOFASTALTROFITV0_H +//_________________________________________________________________________ +// Procedure of fast altro fitting +// +//*-- Author: Aleksei Pavlinov; IHEP, Protvino, Russia & WSU, Detroit, USA + +#ifndef ALICALOFASTALTROFITV0_H +#define ALICALOFASTALTROFITV0_H +/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ +/* $Id: $ */ + +/* History of svn commits + * $Log$ + */ + +#include +// --- ROOT system --- +class TCanvas; +class TVirtualPad; +class TF1; +class TH1F; + +class AliCaloFastAltroFitv0 : public TNamed { + +public: + + AliCaloFastAltroFitv0(); + AliCaloFastAltroFitv0(const char* name, const char* title, + const Double_t sig=1.3, const Double_t tau=2.35, const Double_t n=2.); + virtual ~AliCaloFastAltroFitv0(); + + virtual void FastFit(Int_t* t, Int_t* y, Int_t nPoints, Double_t sig, Double_t tau, + Double_t n, Double_t ped, Double_t tMax); + + void FastFit(TH1F* h, Double_t sig, Double_t tau, + Double_t n, Double_t ped, Double_t tMax); + + void Reset(); + void SetSig(const Double_t sig) {fSig = sig;} + void SetTau(const Double_t tau) {fTau = tau;} + void SetN(const Double_t n) {fN = n;} + void SetParameters(const Double_t sig, const Double_t tau, const Double_t n) + {fSig = sig; fTau = tau; fN = n;} + + Double_t GetSig() const {return fSig;} + Double_t GetTau() const {return fTau;} + Double_t GetN() const {return fN;} + Double_t GetPed() const {return fPed;} + + Double_t GetEnergy() const {return fAmp;} + Double_t GetAmp() const {return GetEnergy();} + Double_t GetAmpErr() const {return fAmpErr;} + Double_t GetTime() const {return fT0;} + Double_t GetT0() const {return GetTime();} + Double_t GetT0Err() const {return fT0Err;} + Double_t GetChi2() const {return fChi2;} + Int_t GetNDF() const {return fNDF;} + Int_t GetNfit() const {return fNfit;} + Int_t GetNoFit() const {return fNoFit;} + + void GetFitResult(Double_t &, Double_t &eamp, Double_t &t0, Double_t &et0, + Double_t &chi2,Int_t &ndf) const; + void GetFittedPoints(Int_t &nfit, Double_t* ar[2]) const; + + // Drawing for QA + TCanvas* DrawFastFunction(); // *MENU* + static Double_t StdResponseFunction(const Double_t *x, const Double_t *par); + + static void CutRightPart(Int_t *t,Int_t *y,Int_t nPoints, Double_t tMax, Int_t &ii); + static void DeductPedestal(Int_t* t, Int_t* y, Int_t nPointsIn, Double_t ped, Double_t tau, + Double_t* tn, Double_t* yn, Int_t &nPointsOut); + + static void FastFit(const Double_t* t, const Double_t* y, const Int_t nPoints, + const Double_t sig, const Double_t tau, + Double_t &, Double_t &eamp, Double_t &t0, Double_t &et0, Double_t &chi2); + static Bool_t QuadraticRoots(const Double_t a, const Double_t b, const Double_t c, + Double_t &x1, Double_t &x2); + static void Amplitude(const Double_t* t, const Double_t* y, const Int_t nPoints, + const Double_t sig, const Double_t tau, + Double_t t0, Double_t &, Double_t &chi2); + static void CalculateParsErrors(const Double_t* t, const Double_t* y, const Int_t nPoints, + const Double_t sig, const Double_t tau, + Double_t &, Double_t &t0, Double_t &eamp, Double_t &et0); +protected: + Double_t fSig; // error in amplitude - used in chi2 calculation + Double_t fTau; // first fixed parameter od fitting function (should be - filter time response + Double_t fN; // second fixed parameter od fitting function (should be positive) + Double_t fPed; // pedestal + + Double_t fAmp; // amplitude + Double_t fAmpErr; // amplitude error + Double_t fT0; // time + Double_t fT0Err; // time error + Double_t fChi2; // chi square + Int_t fNDF; // number degree of freedom + Int_t fNoFit; // no solution for square equation + + // Working variable + Int_t fNfit; //! number points for fit + Double_t* fTfit; //! points for fit after selection - time bins + Double_t* fAmpfit; //! - amplitudes + // + TF1* fStdFun; //! function for drawing + +private: + AliCaloFastAltroFitv0(const AliCaloFastAltroFitv0 &obj); + AliCaloFastAltroFitv0& operator= (const AliCaloFastAltroFitv0 &obj); + + ClassDef(AliCaloFastAltroFitv0,1) // Class for fast altro fitting +}; + +#endif // ALICALOFASTALTROFITV0_H diff --git a/STEER/AOD/AliAODPWG4Particle.cxx b/STEER/AOD/AliAODPWG4Particle.cxx index 6fea46b231f..fdce8d0ae5e 100755 --- a/STEER/AOD/AliAODPWG4Particle.cxx +++ b/STEER/AOD/AliAODPWG4Particle.cxx @@ -1,191 +1,191 @@ -/************************************************************************** - * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id: AliAODPWG4Particle.h $ */ - -//------------------------------------------------------------------------- -// AOD class for photon and other particles storage and -// correlation studies -// Author: Yves Schutz, CERN, Gustavo Conesa, INFN -//------------------------------------------------------------------------- - -//-- ROOT system -- - -//-- Analysis system -#include "AliAODPWG4Particle.h" - -ClassImp(AliAODPWG4Particle) - - -//______________________________________________________________________________ -AliAODPWG4Particle::AliAODPWG4Particle() : -AliVParticle(), -fMomentum(0),fPdg(-1), fTag(0), fBtag(-1), fLabel(-1), fCaloLabel(), fTrackLabel(), -fDetector(""), fDisp(0), fTof(0), fCharged(0), fTagged(0), fBadDist(0), fFidArea(0), fInputFileIndex(0) -{ - // constructor - fCaloLabel [0] = -1; - fCaloLabel [1] = -1; - fTrackLabel[0] = -1; - fTrackLabel[1] = -1; - fTrackLabel[2] = -1; - fTrackLabel[3] = -1; -} - -//______________________________________________________________________________ -AliAODPWG4Particle::AliAODPWG4Particle(Double_t px, Double_t py, Double_t pz, Double_t e): - AliVParticle(), - fMomentum(0),fPdg(-1), fTag(0), fBtag(-1), fLabel(-1),fCaloLabel(), fTrackLabel(), - fDetector(""), fDisp(0), fTof(0),fCharged(0), fTagged(0), fBadDist(0), fFidArea(0), fInputFileIndex(0) -{ - // constructor - fMomentum = new TLorentzVector(px, py, pz, e); - - fCaloLabel [0] = -1; - fCaloLabel [1] = -1; - fTrackLabel[0] = -1; - fTrackLabel[1] = -1; - fTrackLabel[2] = -1; - fTrackLabel[3] = -1; -} - -//______________________________________________________________________________ -AliAODPWG4Particle::AliAODPWG4Particle(TLorentzVector & p): - AliVParticle(), - fMomentum(0),fPdg(-1), fTag(0), fBtag(-1), fLabel(-1),fCaloLabel(), fTrackLabel(), - fDetector(""), fDisp(0), fTof(0), fCharged(0), fTagged(0), fBadDist(0), fFidArea(0), fInputFileIndex(0) -{ - // constructor - fMomentum = new TLorentzVector(p); - - fCaloLabel [0] = -1; - fCaloLabel [1] = -1; - fTrackLabel[0] = -1; - fTrackLabel[1] = -1; - fTrackLabel[2] = -1; - fTrackLabel[3] = -1; -} - - -//______________________________________________________________________________ -AliAODPWG4Particle::~AliAODPWG4Particle() -{ - // destructor - delete fMomentum; -} - -//______________________________________________________________________________ -void AliAODPWG4Particle::Clear(const Option_t* /*opt*/) -{ - //clear - delete fMomentum; -} - -//______________________________________________________________________________ -AliAODPWG4Particle::AliAODPWG4Particle(const AliAODPWG4Particle& part) : - AliVParticle(part), - fMomentum(0), fPdg(part.fPdg), fTag(part.fTag), fBtag(part.fBtag), fLabel(part.fLabel), - fCaloLabel(), fTrackLabel(), fDetector(part.fDetector),fDisp(part.fDisp), - fTof(part.fTof), fCharged(part.fCharged), fTagged(part.fTagged), fBadDist(part.fBadDist), - fFidArea(part.fFidArea), fInputFileIndex(part.fInputFileIndex) -{ - // Copy constructor - fMomentum = new TLorentzVector(*part.fMomentum); - - fCaloLabel [0] = part.fCaloLabel[0]; - fCaloLabel [1] = part.fCaloLabel[1]; - fTrackLabel[0] = part.fTrackLabel[0]; - fTrackLabel[1] = part.fTrackLabel[1]; - fTrackLabel[2] = part.fTrackLabel[2]; - fTrackLabel[3] = part.fTrackLabel[3]; -} - -//______________________________________________________________________________ -AliAODPWG4Particle& AliAODPWG4Particle::operator=(const AliAODPWG4Particle& part) -{ - // Assignment operator - if(this!=&part) { - - fPdg = part.fPdg; - fTag = part.fTag; - fBtag = part.fBtag; - fLabel = part.fLabel; - - fCaloLabel [0] = part.fCaloLabel[0]; - fCaloLabel [1] = part.fCaloLabel[1]; - fTrackLabel[0] = part.fTrackLabel[0]; - fTrackLabel[1] = part.fTrackLabel[1]; - - fDetector = part.fDetector; - fDisp = part.fDisp; - fTof = part.fTof; - fCharged = part.fCharged; - fTagged = part.fTagged; - fBadDist = part.fBadDist; - fFidArea = part.fFidArea; - fInputFileIndex = part.fInputFileIndex; - - if (fMomentum ) delete fMomentum; - fMomentum = new TLorentzVector(*part.fMomentum); - } - - return *this; -} - - -//_______________________________________________________________ -Bool_t AliAODPWG4Particle::IsPIDOK(const Int_t ipid, const Int_t pdgwanted) const{ - // returns true if particle satisfies given PID criterium - switch(ipid){ - case 0: return kTRUE ; //No PID at all - case 1: - { - if (fPdg == pdgwanted) return kTRUE; - else return kFALSE; //Overall PID calculated with bayesian methods. - } - case 2: return fDisp ; //only dispersion cut - case 3: return fTof ; //Only TOF cut - case 4: return fCharged ; //Only Charged cut - case 5: return fDisp && fTof ; //Dispersion and TOF - case 6: return fDisp && fCharged ; //Dispersion and Charged - case 7: return fTof && fCharged ; //TOF and Charged - case 8: return fDisp && fTof && fCharged ; // all 3 cuts - default: return kFALSE ; //Not known combination - } -} - -//______________________________________________________________________________ -void AliAODPWG4Particle::Print(Option_t* /*option*/) const -{ - // Print information of all data members - printf("Particle 4-vector:\n"); - printf(" E = %13.3f", E() ); - printf(" Px = %13.3f", Px()); - printf(" Py = %13.3f", Py()); - printf(" Pz = %13.3f\n", Pz()); - printf("PID bits :\n"); - printf(" TOF : %d",fTof); - printf(" Charged : %d",fCharged); - printf(" Dispersion : %d\n",fDisp); - printf("PDG : %d\n",fPdg); - printf("Tag : %d\n",fTag); - printf("Btag : %d\n",fBtag); - printf("Pi0 Tag : %d\n",fTagged); - printf("Dist. to bad channel : %d\n",fBadDist); - printf("Fid Area : %d\n",fFidArea); - printf("Input File Index : %d\n",fInputFileIndex); - printf("Detector : %s\n",fDetector.Data()); - -} +/************************************************************************** + * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id: AliAODPWG4Particle.h $ */ + +//------------------------------------------------------------------------- +// AOD class for photon and other particles storage and +// correlation studies +// Author: Yves Schutz, CERN, Gustavo Conesa, INFN +//------------------------------------------------------------------------- + +//-- ROOT system -- + +//-- Analysis system +#include "AliAODPWG4Particle.h" + +ClassImp(AliAODPWG4Particle) + + +//______________________________________________________________________________ +AliAODPWG4Particle::AliAODPWG4Particle() : +AliVParticle(), +fMomentum(0),fPdg(-1), fTag(0), fBtag(-1), fLabel(-1), fCaloLabel(), fTrackLabel(), +fDetector(""), fDisp(0), fTof(0), fCharged(0), fTagged(0), fBadDist(0), fFidArea(0), fInputFileIndex(0) +{ + // constructor + fCaloLabel [0] = -1; + fCaloLabel [1] = -1; + fTrackLabel[0] = -1; + fTrackLabel[1] = -1; + fTrackLabel[2] = -1; + fTrackLabel[3] = -1; +} + +//______________________________________________________________________________ +AliAODPWG4Particle::AliAODPWG4Particle(Double_t px, Double_t py, Double_t pz, Double_t e): + AliVParticle(), + fMomentum(0),fPdg(-1), fTag(0), fBtag(-1), fLabel(-1),fCaloLabel(), fTrackLabel(), + fDetector(""), fDisp(0), fTof(0),fCharged(0), fTagged(0), fBadDist(0), fFidArea(0), fInputFileIndex(0) +{ + // constructor + fMomentum = new TLorentzVector(px, py, pz, e); + + fCaloLabel [0] = -1; + fCaloLabel [1] = -1; + fTrackLabel[0] = -1; + fTrackLabel[1] = -1; + fTrackLabel[2] = -1; + fTrackLabel[3] = -1; +} + +//______________________________________________________________________________ +AliAODPWG4Particle::AliAODPWG4Particle(TLorentzVector & p): + AliVParticle(), + fMomentum(0),fPdg(-1), fTag(0), fBtag(-1), fLabel(-1),fCaloLabel(), fTrackLabel(), + fDetector(""), fDisp(0), fTof(0), fCharged(0), fTagged(0), fBadDist(0), fFidArea(0), fInputFileIndex(0) +{ + // constructor + fMomentum = new TLorentzVector(p); + + fCaloLabel [0] = -1; + fCaloLabel [1] = -1; + fTrackLabel[0] = -1; + fTrackLabel[1] = -1; + fTrackLabel[2] = -1; + fTrackLabel[3] = -1; +} + + +//______________________________________________________________________________ +AliAODPWG4Particle::~AliAODPWG4Particle() +{ + // destructor + delete fMomentum; +} + +//______________________________________________________________________________ +void AliAODPWG4Particle::Clear(const Option_t* /*opt*/) +{ + //clear + delete fMomentum; +} + +//______________________________________________________________________________ +AliAODPWG4Particle::AliAODPWG4Particle(const AliAODPWG4Particle& part) : + AliVParticle(part), + fMomentum(0), fPdg(part.fPdg), fTag(part.fTag), fBtag(part.fBtag), fLabel(part.fLabel), + fCaloLabel(), fTrackLabel(), fDetector(part.fDetector),fDisp(part.fDisp), + fTof(part.fTof), fCharged(part.fCharged), fTagged(part.fTagged), fBadDist(part.fBadDist), + fFidArea(part.fFidArea), fInputFileIndex(part.fInputFileIndex) +{ + // Copy constructor + fMomentum = new TLorentzVector(*part.fMomentum); + + fCaloLabel [0] = part.fCaloLabel[0]; + fCaloLabel [1] = part.fCaloLabel[1]; + fTrackLabel[0] = part.fTrackLabel[0]; + fTrackLabel[1] = part.fTrackLabel[1]; + fTrackLabel[2] = part.fTrackLabel[2]; + fTrackLabel[3] = part.fTrackLabel[3]; +} + +//______________________________________________________________________________ +AliAODPWG4Particle& AliAODPWG4Particle::operator=(const AliAODPWG4Particle& part) +{ + // Assignment operator + if(this!=&part) { + + fPdg = part.fPdg; + fTag = part.fTag; + fBtag = part.fBtag; + fLabel = part.fLabel; + + fCaloLabel [0] = part.fCaloLabel[0]; + fCaloLabel [1] = part.fCaloLabel[1]; + fTrackLabel[0] = part.fTrackLabel[0]; + fTrackLabel[1] = part.fTrackLabel[1]; + + fDetector = part.fDetector; + fDisp = part.fDisp; + fTof = part.fTof; + fCharged = part.fCharged; + fTagged = part.fTagged; + fBadDist = part.fBadDist; + fFidArea = part.fFidArea; + fInputFileIndex = part.fInputFileIndex; + + if (fMomentum ) delete fMomentum; + fMomentum = new TLorentzVector(*part.fMomentum); + } + + return *this; +} + + +//_______________________________________________________________ +Bool_t AliAODPWG4Particle::IsPIDOK(const Int_t ipid, const Int_t pdgwanted) const{ + // returns true if particle satisfies given PID criterium + switch(ipid){ + case 0: return kTRUE ; //No PID at all + case 1: + { + if (fPdg == pdgwanted) return kTRUE; + else return kFALSE; //Overall PID calculated with bayesian methods. + } + case 2: return fDisp ; //only dispersion cut + case 3: return fTof ; //Only TOF cut + case 4: return fCharged ; //Only Charged cut + case 5: return fDisp && fTof ; //Dispersion and TOF + case 6: return fDisp && fCharged ; //Dispersion and Charged + case 7: return fTof && fCharged ; //TOF and Charged + case 8: return fDisp && fTof && fCharged ; // all 3 cuts + default: return kFALSE ; //Not known combination + } +} + +//______________________________________________________________________________ +void AliAODPWG4Particle::Print(Option_t* /*option*/) const +{ + // Print information of all data members + printf("Particle 4-vector:\n"); + printf(" E = %13.3f", E() ); + printf(" Px = %13.3f", Px()); + printf(" Py = %13.3f", Py()); + printf(" Pz = %13.3f\n", Pz()); + printf("PID bits :\n"); + printf(" TOF : %d",fTof); + printf(" Charged : %d",fCharged); + printf(" Dispersion : %d\n",fDisp); + printf("PDG : %d\n",fPdg); + printf("Tag : %d\n",fTag); + printf("Btag : %d\n",fBtag); + printf("Pi0 Tag : %d\n",fTagged); + printf("Dist. to bad channel : %d\n",fBadDist); + printf("Fid Area : %d\n",fFidArea); + printf("Input File Index : %d\n",fInputFileIndex); + printf("Detector : %s\n",fDetector.Data()); + +} diff --git a/STEER/CDB/AliCDBHandler.cxx b/STEER/CDB/AliCDBHandler.cxx index 3404400266e..89bb50a18b6 100644 --- a/STEER/CDB/AliCDBHandler.cxx +++ b/STEER/CDB/AliCDBHandler.cxx @@ -1,197 +1,197 @@ -/************************************************************************* - * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * - * * * - * * Author: The ALICE Off-line Project. * - * * Contributors are mentioned in the code where appropriate. * - * * * - * * Permission to use, copy, modify and distribute this software and its * - * * documentation strictly for non-commercial purposes is hereby granted * - * * without fee, provided that the above copyright notice appears in all * - * * copies and that both the copyright notice and this permission notice * - * * appear in the supporting documentation. The authors make no claims * - * * about the suitability of this software for any purpose. It is * - * * provided "as is" without express or implied warranty. * - * **************************************************************************/ - -//////////////////////////////////////////////////////////////////////////// -// // -// The SAX XML file handler used in the CDBManager // -// // -// Author: // -// Chiara Zampolli (Chiara.Zampolli@cern.ch) // -// // -//////////////////////////////////////////////////////////////////////////// - -#include -#include - -#include -#include -#include -#include - -#include "AliLog.h" -#include "AliCDBHandler.h" - -ClassImp(AliCDBHandler) - - -//_____________________________________________________________________________ -AliCDBHandler::AliCDBHandler() - :TObject(), - fRun(-1), - fStartRunRange(-1), - fEndRunRange(-1), - fOCDBFolder("") -{ - // - // AliCDBHandler default constructor - // -} - -//_____________________________________________________________________________ -AliCDBHandler::AliCDBHandler(Int_t run) - :TObject(), - fRun(run), - fStartRunRange(-1), - fEndRunRange(-1), - fOCDBFolder("") -{ - // - // AliCDBHandler constructor with requested run - // -} - -//_____________________________________________________________________________ -AliCDBHandler::AliCDBHandler(const AliCDBHandler &sh) - :TObject(sh), - fRun(sh.fRun), - fStartRunRange(sh.fStartRunRange), - fEndRunRange(sh.fEndRunRange), - fOCDBFolder(sh.fOCDBFolder) -{ - // - // AliCDBHandler copy constructor - // -} - -//_____________________________________________________________________________ -AliCDBHandler &AliCDBHandler::operator=(const AliCDBHandler &sh) -{ - // - // Assignment operator - // - if (&sh == this) return *this; - - new (this) AliCDBHandler(sh); - return *this; -} - -//_____________________________________________________________________________ -AliCDBHandler::~AliCDBHandler() -{ - // - // AliCDBHandler destructor - // -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnStartDocument() -{ - // if something should happen right at the beginning of the - // XML document, this must happen here - AliInfo("Reading XML file for LHCPeriod <-> Run Range correspondence"); -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnEndDocument() -{ - // if something should happen at the end of the XML document - // this must be done here -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnStartElement(const char *name, const TList *attributes) -{ - // when a new XML element is found, it is processed here - - // set the current system if necessary - TString strName(name); - AliDebug(2,Form("name = %s",strName.Data())); - Int_t startRun=-1; - Int_t endRun=-1; - TXMLAttr* attr; - TIter next(attributes); - while ((attr = (TXMLAttr*) next())) { - TString attrName = attr->GetName(); - AliDebug(2,Form("Name = %s",attrName.Data())); - if (attrName == "StartRunRange"){ - startRun = (Int_t)(((TString)(attr->GetValue())).Atoi()); - AliDebug(2,Form("startRun = %d",startRun)); - } - if (attrName == "EndRunRange"){ - endRun = (Int_t)(((TString)(attr->GetValue())).Atoi()); - AliDebug(2,Form("endRun = %d",endRun)); - } - if (attrName == "OCDBFolder"){ - if (fRun>=startRun && fRun<=endRun && startRun!=-1 && endRun!=-1){ - fOCDBFolder = (TString)(attr->GetValue()); - AliDebug(2,Form("OCDBFolder = %s",fOCDBFolder.Data())); - fStartRunRange = startRun; - fEndRunRange = endRun; - } - } - } - return; -} -//_____________________________________________________________________________ -void AliCDBHandler::OnEndElement(const char *name) -{ - // do everything that needs to be done when an end tag of an element is found - TString strName(name); - AliDebug(2,Form("name = %s",strName.Data())); -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnCharacters(const char *characters) -{ - // copy the text content of an XML element - //fContent = characters; - TString strCharacters(characters); - AliDebug(2,Form("characters = %s",strCharacters.Data())); -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnComment(const char* /*text*/) -{ - // comments within the XML file are ignored -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnWarning(const char *text) -{ - // process warnings here - AliInfo(Form("Warning: %s",text)); -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnError(const char *text) -{ - // process errors here - AliError(Form("Error: %s",text)); -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnFatalError(const char *text) -{ - // process fatal errors here - AliFatal(Form("Fatal error: %s",text)); -} - -//_____________________________________________________________________________ -void AliCDBHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) -{ - // process character data blocks here - // not implemented and should not be used here -} - +/************************************************************************* + * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * + * * * + * * Author: The ALICE Off-line Project. * + * * Contributors are mentioned in the code where appropriate. * + * * * + * * Permission to use, copy, modify and distribute this software and its * + * * documentation strictly for non-commercial purposes is hereby granted * + * * without fee, provided that the above copyright notice appears in all * + * * copies and that both the copyright notice and this permission notice * + * * appear in the supporting documentation. The authors make no claims * + * * about the suitability of this software for any purpose. It is * + * * provided "as is" without express or implied warranty. * + * **************************************************************************/ + +//////////////////////////////////////////////////////////////////////////// +// // +// The SAX XML file handler used in the CDBManager // +// // +// Author: // +// Chiara Zampolli (Chiara.Zampolli@cern.ch) // +// // +//////////////////////////////////////////////////////////////////////////// + +#include +#include + +#include +#include +#include +#include + +#include "AliLog.h" +#include "AliCDBHandler.h" + +ClassImp(AliCDBHandler) + + +//_____________________________________________________________________________ +AliCDBHandler::AliCDBHandler() + :TObject(), + fRun(-1), + fStartRunRange(-1), + fEndRunRange(-1), + fOCDBFolder("") +{ + // + // AliCDBHandler default constructor + // +} + +//_____________________________________________________________________________ +AliCDBHandler::AliCDBHandler(Int_t run) + :TObject(), + fRun(run), + fStartRunRange(-1), + fEndRunRange(-1), + fOCDBFolder("") +{ + // + // AliCDBHandler constructor with requested run + // +} + +//_____________________________________________________________________________ +AliCDBHandler::AliCDBHandler(const AliCDBHandler &sh) + :TObject(sh), + fRun(sh.fRun), + fStartRunRange(sh.fStartRunRange), + fEndRunRange(sh.fEndRunRange), + fOCDBFolder(sh.fOCDBFolder) +{ + // + // AliCDBHandler copy constructor + // +} + +//_____________________________________________________________________________ +AliCDBHandler &AliCDBHandler::operator=(const AliCDBHandler &sh) +{ + // + // Assignment operator + // + if (&sh == this) return *this; + + new (this) AliCDBHandler(sh); + return *this; +} + +//_____________________________________________________________________________ +AliCDBHandler::~AliCDBHandler() +{ + // + // AliCDBHandler destructor + // +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnStartDocument() +{ + // if something should happen right at the beginning of the + // XML document, this must happen here + AliInfo("Reading XML file for LHCPeriod <-> Run Range correspondence"); +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnEndDocument() +{ + // if something should happen at the end of the XML document + // this must be done here +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnStartElement(const char *name, const TList *attributes) +{ + // when a new XML element is found, it is processed here + + // set the current system if necessary + TString strName(name); + AliDebug(2,Form("name = %s",strName.Data())); + Int_t startRun=-1; + Int_t endRun=-1; + TXMLAttr* attr; + TIter next(attributes); + while ((attr = (TXMLAttr*) next())) { + TString attrName = attr->GetName(); + AliDebug(2,Form("Name = %s",attrName.Data())); + if (attrName == "StartRunRange"){ + startRun = (Int_t)(((TString)(attr->GetValue())).Atoi()); + AliDebug(2,Form("startRun = %d",startRun)); + } + if (attrName == "EndRunRange"){ + endRun = (Int_t)(((TString)(attr->GetValue())).Atoi()); + AliDebug(2,Form("endRun = %d",endRun)); + } + if (attrName == "OCDBFolder"){ + if (fRun>=startRun && fRun<=endRun && startRun!=-1 && endRun!=-1){ + fOCDBFolder = (TString)(attr->GetValue()); + AliDebug(2,Form("OCDBFolder = %s",fOCDBFolder.Data())); + fStartRunRange = startRun; + fEndRunRange = endRun; + } + } + } + return; +} +//_____________________________________________________________________________ +void AliCDBHandler::OnEndElement(const char *name) +{ + // do everything that needs to be done when an end tag of an element is found + TString strName(name); + AliDebug(2,Form("name = %s",strName.Data())); +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnCharacters(const char *characters) +{ + // copy the text content of an XML element + //fContent = characters; + TString strCharacters(characters); + AliDebug(2,Form("characters = %s",strCharacters.Data())); +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnComment(const char* /*text*/) +{ + // comments within the XML file are ignored +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnWarning(const char *text) +{ + // process warnings here + AliInfo(Form("Warning: %s",text)); +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnError(const char *text) +{ + // process errors here + AliError(Form("Error: %s",text)); +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnFatalError(const char *text) +{ + // process fatal errors here + AliFatal(Form("Fatal error: %s",text)); +} + +//_____________________________________________________________________________ +void AliCDBHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) +{ + // process character data blocks here + // not implemented and should not be used here +} + diff --git a/STEER/ESD/AliESDACORDE.cxx b/STEER/ESD/AliESDACORDE.cxx index e46563965de..15e621f3710 100644 --- a/STEER/ESD/AliESDACORDE.cxx +++ b/STEER/ESD/AliESDACORDE.cxx @@ -1,76 +1,76 @@ - - -// Last update: October 2th 2009 - -#include "AliESDACORDE.h" - -ClassImp(AliESDACORDE) - -AliESDACORDE::AliESDACORDE():TObject() -{ - //Default constructor - for(Int_t i=0;i<60;i++) - { - fACORDEBitPattern[i] = 0; - } -} - - -AliESDACORDE::AliESDACORDE(const AliESDACORDE &o) - :TObject(o) - -{ - //Default constructor - for(Int_t i=0;i<60;i++) - { - fACORDEBitPattern[i] = o.fACORDEBitPattern[i]; - } -} - - -AliESDACORDE::AliESDACORDE(Bool_t* MACORDEBitPattern):TObject() -{ - - //Constructor - - for(Int_t i=0;i<60;i++) - { - fACORDEBitPattern[i] = MACORDEBitPattern[i]; - } -} - -AliESDACORDE& AliESDACORDE::operator=(const AliESDACORDE& o) -{ -// Copy Constructor - if(this==&o)return *this; - TObject::operator=(o); - - // Assignment operator - for(Int_t i=0; i<60; i++) - { - fACORDEBitPattern[i] = o.fACORDEBitPattern[i]; - } - - return *this; -} - - -Bool_t AliESDACORDE::GetHitChannel(Int_t i) const -{ - return fACORDEBitPattern[i]; -} - -void AliESDACORDE::Copy(TObject &obj) const { - - // this overwrites the virtual TOBject::Copy() - // to allow run time copying without casting - // in AliESDEvent - - if(this==&obj)return; - AliESDACORDE *robj = dynamic_cast(&obj); - if(!robj)return; // not an AliESDACRDE - *robj = *this; - -} - - + + +// Last update: October 2th 2009 + +#include "AliESDACORDE.h" + +ClassImp(AliESDACORDE) + +AliESDACORDE::AliESDACORDE():TObject() +{ + //Default constructor + for(Int_t i=0;i<60;i++) + { + fACORDEBitPattern[i] = 0; + } +} + + +AliESDACORDE::AliESDACORDE(const AliESDACORDE &o) + :TObject(o) + +{ + //Default constructor + for(Int_t i=0;i<60;i++) + { + fACORDEBitPattern[i] = o.fACORDEBitPattern[i]; + } +} + + +AliESDACORDE::AliESDACORDE(Bool_t* MACORDEBitPattern):TObject() +{ + + //Constructor + + for(Int_t i=0;i<60;i++) + { + fACORDEBitPattern[i] = MACORDEBitPattern[i]; + } +} + +AliESDACORDE& AliESDACORDE::operator=(const AliESDACORDE& o) +{ +// Copy Constructor + if(this==&o)return *this; + TObject::operator=(o); + + // Assignment operator + for(Int_t i=0; i<60; i++) + { + fACORDEBitPattern[i] = o.fACORDEBitPattern[i]; + } + + return *this; +} + + +Bool_t AliESDACORDE::GetHitChannel(Int_t i) const +{ + return fACORDEBitPattern[i]; +} + +void AliESDACORDE::Copy(TObject &obj) const { + + // this overwrites the virtual TOBject::Copy() + // to allow run time copying without casting + // in AliESDEvent + + if(this==&obj)return; + AliESDACORDE *robj = dynamic_cast(&obj); + if(!robj)return; // not an AliESDACRDE + *robj = *this; + +} + + diff --git a/STEER/ESD/AliESDACORDE.h b/STEER/ESD/AliESDACORDE.h index d094c5ad04d..e3c343063f6 100644 --- a/STEER/ESD/AliESDACORDE.h +++ b/STEER/ESD/AliESDACORDE.h @@ -1,38 +1,38 @@ -#ifndef AliESDACORDE_H -#define AliESDACORDE_H - -#include -// Send comments to: -// Mario Rodriguez -// Luciano Diaz -// Last update: October 2th 2009 - -class AliESDACORDE : public TObject -{ - - public: - AliESDACORDE(); - AliESDACORDE(const AliESDACORDE&); - AliESDACORDE(Bool_t *ACORDEBitPattern); - virtual ~AliESDACORDE() {}; - virtual void Copy(TObject &) const; - - // We define the "setters" for ACORDE - - void SetACORDEBitPattern(Bool_t ACORDEBitPattern[60]){for (Int_t i=0;i<60;i++){fACORDEBitPattern[i]=ACORDEBitPattern[i];}} - - - - // Getters - Bool_t GetHitChannel(Int_t i) const; - AliESDACORDE &operator=(const AliESDACORDE& source); - - protected: - - Bool_t fACORDEBitPattern[60]; // Array with the ACORDE's bitpattern - - ClassDef(AliESDACORDE, 3) - -}; - -#endif +#ifndef AliESDACORDE_H +#define AliESDACORDE_H + +#include +// Send comments to: +// Mario Rodriguez +// Luciano Diaz +// Last update: October 2th 2009 + +class AliESDACORDE : public TObject +{ + + public: + AliESDACORDE(); + AliESDACORDE(const AliESDACORDE&); + AliESDACORDE(Bool_t *ACORDEBitPattern); + virtual ~AliESDACORDE() {}; + virtual void Copy(TObject &) const; + + // We define the "setters" for ACORDE + + void SetACORDEBitPattern(Bool_t ACORDEBitPattern[60]){for (Int_t i=0;i<60;i++){fACORDEBitPattern[i]=ACORDEBitPattern[i];}} + + + + // Getters + Bool_t GetHitChannel(Int_t i) const; + AliESDACORDE &operator=(const AliESDACORDE& source); + + protected: + + Bool_t fACORDEBitPattern[60]; // Array with the ACORDE's bitpattern + + ClassDef(AliESDACORDE, 3) + +}; + +#endif diff --git a/STEER/ESD/AliTriggerScalersESD.cxx b/STEER/ESD/AliTriggerScalersESD.cxx index 3f0ec7df778..365daf81cc2 100644 --- a/STEER/ESD/AliTriggerScalersESD.cxx +++ b/STEER/ESD/AliTriggerScalersESD.cxx @@ -1,128 +1,128 @@ -/************************************************************************* -* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -/////////////////////////////////////////////////////////////////////////////// -// -// Class to define the ALICE Trigger Scalers -// -// For each trigger class there are six scalers: -// -// LOCB L0 triggers before any vetos -// LOCA L0 triggers after all vetos -// L1CB L1 triggers before any vetos -// L1CA L1 triggers after all vetos -// L2CB L2 triggers before any vetos -// L2CA L2 triggers after all vetos -// -////////////////////////////////////////////////////////////////////////////// - -#include - -#include "AliLog.h" -#include "AliTriggerScalersESD.h" - -using std::endl; -using std::cout; -ClassImp( AliTriggerScalersESD ) - -//_____________________________________________________________________________ -AliTriggerScalersESD::AliTriggerScalersESD(): - TObject(), - fClassIndex(0), - fLOCB(0), - fLOCA(0), - fL1CB(0), - fL1CA(0), - fL2CB(0), - fL2CA(0) -{ - // Default constructor -} - -//_____________________________________________________________________________ -AliTriggerScalersESD::AliTriggerScalersESD( UChar_t classIndex, ULong64_t LOCB, ULong64_t LOCA, - ULong64_t L1CB, ULong64_t L1CA, ULong64_t L2CB, ULong64_t L2CA ): - TObject(), - fClassIndex( classIndex ), - fLOCB(LOCB), - fLOCA(LOCA), - fL1CB(L1CB), - fL1CA(L1CA), - fL2CB(L2CB), - fL2CA(L2CA) -{ - // Default constructor -} -//_____________________________________________________________________________ -AliTriggerScalersESD::AliTriggerScalersESD(UChar_t classIndex,ULong64_t* s64): -TObject(), -fClassIndex( classIndex ), -fLOCB(s64[0]), -fLOCA(s64[1]), -fL1CB(s64[2]), -fL1CA(s64[3]), -fL2CB(s64[4]), -fL2CA(s64[5]) -{ - // Construct from array -} -//_____________________________________________________________________________ -AliTriggerScalersESD::AliTriggerScalersESD(const AliTriggerScalersESD& scal ): - TObject(scal), - fClassIndex( scal.fClassIndex ), - fLOCB(scal.fLOCB), - fLOCA(scal.fLOCA), - fL1CB(scal.fL1CB), - fL1CA(scal.fL1CA), - fL2CB(scal.fL2CB), - fL2CA(scal.fL2CA) -{ - // Copy constructor -} -//_____________________________________________________________________________ -AliTriggerScalersESD& AliTriggerScalersESD::operator=(const AliTriggerScalersESD& scal) -{ -if(&scal == this) return *this; -((TObject *)this)->operator=(scal); - - fClassIndex = scal.fClassIndex; - fLOCB = scal.fLOCB; - fLOCA = scal.fLOCA; - fL1CB = scal.fL1CB; - fL1CA = scal.fL1CA; - fL2CB = scal.fL2CB; - fL2CA = scal.fL2CA; - -return *this; -} -//____________________________________________________________________________ -void AliTriggerScalersESD::GetAllScalers(ULong64_t *scalers) const -{ - scalers[0]=fLOCB; - scalers[1]=fLOCA; - scalers[2]=fL1CB; - scalers[3]=fL1CA; - scalers[4]=fL2CB; - scalers[5]=fL2CA; -} -//_____________________________________________________________________________ -void AliTriggerScalersESD::Print( const Option_t* ) const -{ - // Print - cout << "Trigger Scalers for Class: " << (Int_t)fClassIndex << endl; - cout << " LOCB: " << fLOCB << " LOCA: " << fLOCA; //<< endl; - cout << " L1CB: " << fL1CB << " L1CA: " << fL1CA; //<< endl; - cout << " L2CB: " << fL2CB << " L2CA: " << fL2CA << endl; -} +/************************************************************************* +* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +/////////////////////////////////////////////////////////////////////////////// +// +// Class to define the ALICE Trigger Scalers +// +// For each trigger class there are six scalers: +// +// LOCB L0 triggers before any vetos +// LOCA L0 triggers after all vetos +// L1CB L1 triggers before any vetos +// L1CA L1 triggers after all vetos +// L2CB L2 triggers before any vetos +// L2CA L2 triggers after all vetos +// +////////////////////////////////////////////////////////////////////////////// + +#include + +#include "AliLog.h" +#include "AliTriggerScalersESD.h" + +using std::endl; +using std::cout; +ClassImp( AliTriggerScalersESD ) + +//_____________________________________________________________________________ +AliTriggerScalersESD::AliTriggerScalersESD(): + TObject(), + fClassIndex(0), + fLOCB(0), + fLOCA(0), + fL1CB(0), + fL1CA(0), + fL2CB(0), + fL2CA(0) +{ + // Default constructor +} + +//_____________________________________________________________________________ +AliTriggerScalersESD::AliTriggerScalersESD( UChar_t classIndex, ULong64_t LOCB, ULong64_t LOCA, + ULong64_t L1CB, ULong64_t L1CA, ULong64_t L2CB, ULong64_t L2CA ): + TObject(), + fClassIndex( classIndex ), + fLOCB(LOCB), + fLOCA(LOCA), + fL1CB(L1CB), + fL1CA(L1CA), + fL2CB(L2CB), + fL2CA(L2CA) +{ + // Default constructor +} +//_____________________________________________________________________________ +AliTriggerScalersESD::AliTriggerScalersESD(UChar_t classIndex,ULong64_t* s64): +TObject(), +fClassIndex( classIndex ), +fLOCB(s64[0]), +fLOCA(s64[1]), +fL1CB(s64[2]), +fL1CA(s64[3]), +fL2CB(s64[4]), +fL2CA(s64[5]) +{ + // Construct from array +} +//_____________________________________________________________________________ +AliTriggerScalersESD::AliTriggerScalersESD(const AliTriggerScalersESD& scal ): + TObject(scal), + fClassIndex( scal.fClassIndex ), + fLOCB(scal.fLOCB), + fLOCA(scal.fLOCA), + fL1CB(scal.fL1CB), + fL1CA(scal.fL1CA), + fL2CB(scal.fL2CB), + fL2CA(scal.fL2CA) +{ + // Copy constructor +} +//_____________________________________________________________________________ +AliTriggerScalersESD& AliTriggerScalersESD::operator=(const AliTriggerScalersESD& scal) +{ +if(&scal == this) return *this; +((TObject *)this)->operator=(scal); + + fClassIndex = scal.fClassIndex; + fLOCB = scal.fLOCB; + fLOCA = scal.fLOCA; + fL1CB = scal.fL1CB; + fL1CA = scal.fL1CA; + fL2CB = scal.fL2CB; + fL2CA = scal.fL2CA; + +return *this; +} +//____________________________________________________________________________ +void AliTriggerScalersESD::GetAllScalers(ULong64_t *scalers) const +{ + scalers[0]=fLOCB; + scalers[1]=fLOCA; + scalers[2]=fL1CB; + scalers[3]=fL1CA; + scalers[4]=fL2CB; + scalers[5]=fL2CA; +} +//_____________________________________________________________________________ +void AliTriggerScalersESD::Print( const Option_t* ) const +{ + // Print + cout << "Trigger Scalers for Class: " << (Int_t)fClassIndex << endl; + cout << " LOCB: " << fLOCB << " LOCA: " << fLOCA; //<< endl; + cout << " L1CB: " << fL1CB << " L1CA: " << fL1CA; //<< endl; + cout << " L2CB: " << fL2CB << " L2CA: " << fL2CA << endl; +} diff --git a/STEER/ESD/AliTriggerScalersESD.h b/STEER/ESD/AliTriggerScalersESD.h index b3eea26c207..2ec1c946cab 100644 --- a/STEER/ESD/AliTriggerScalersESD.h +++ b/STEER/ESD/AliTriggerScalersESD.h @@ -1,65 +1,65 @@ -#ifndef ALITRIGGERSCALERSESD_H -#define ALITRIGGERSCALERSESD_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * -* See cxx source for full Copyright notice */ -/* $Id$ */ - -/////////////////////////////////////////////////////////////////////////////// -// -// Class to define the ALICE Trigger Scalers -// -// For each trigger class there are six scalers: -// -// LOCB L0 triggers before any vetos -// LOCA L0 triggers after all vetos -// L1CB L1 triggers before any vetos -// L1CA L1 triggers after all vetos -// L2CB L2 triggers before any vetos -// L2CA L2 triggers after all vetos -// -////////////////////////////////////////////////////////////////////////////// - -class AliTriggerScalersESD : public TObject { - -public: - AliTriggerScalersESD(); - AliTriggerScalersESD( - UChar_t classIndex, - ULong64_t LOCB, - ULong64_t LOCA, - ULong64_t L1CB, - ULong64_t L1CA, - ULong64_t L2CB, - ULong64_t L2CA - ); - AliTriggerScalersESD(UChar_t xlassIndex,ULong64_t* s64); - virtual ~AliTriggerScalersESD() {} - virtual void Print( const Option_t* opt ="" ) const; - - AliTriggerScalersESD( const AliTriggerScalersESD &scal ); - AliTriggerScalersESD& operator=(const AliTriggerScalersESD& scal); - - ULong64_t GetLOCB() const { return fLOCB; } - ULong64_t GetLOCA() const { return fLOCA; } - ULong64_t GetL1CB() const { return fL1CB; } - ULong64_t GetL1CA() const { return fL1CA; } - ULong64_t GetL2CB() const { return fL2CB; } - ULong64_t GetL2CA() const { return fL2CA; } - void GetAllScalers(ULong64_t *scalers) const; - - UChar_t GetClassIndex() const { return fClassIndex; } - -private: - UChar_t fClassIndex; // number of triggered classes - ULong64_t fLOCB; // L0 triggers before any vetos (64 bits) - ULong64_t fLOCA; // L0 triggers after all vetos (64 bits) - ULong64_t fL1CB; // L1 triggers before any vetos (64 bits) - ULong64_t fL1CA; // L1 triggers after all vetos (64 bits) - ULong64_t fL2CB; // L2 triggers before any vetos (64 bits) - ULong64_t fL2CA; // L2 triggers after all vetos (64 bits) - - ClassDef( AliTriggerScalersESD, 1 ) // Define a Run Trigger Scalers (Scalers) -}; - -#endif +#ifndef ALITRIGGERSCALERSESD_H +#define ALITRIGGERSCALERSESD_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* See cxx source for full Copyright notice */ +/* $Id$ */ + +/////////////////////////////////////////////////////////////////////////////// +// +// Class to define the ALICE Trigger Scalers +// +// For each trigger class there are six scalers: +// +// LOCB L0 triggers before any vetos +// LOCA L0 triggers after all vetos +// L1CB L1 triggers before any vetos +// L1CA L1 triggers after all vetos +// L2CB L2 triggers before any vetos +// L2CA L2 triggers after all vetos +// +////////////////////////////////////////////////////////////////////////////// + +class AliTriggerScalersESD : public TObject { + +public: + AliTriggerScalersESD(); + AliTriggerScalersESD( + UChar_t classIndex, + ULong64_t LOCB, + ULong64_t LOCA, + ULong64_t L1CB, + ULong64_t L1CA, + ULong64_t L2CB, + ULong64_t L2CA + ); + AliTriggerScalersESD(UChar_t xlassIndex,ULong64_t* s64); + virtual ~AliTriggerScalersESD() {} + virtual void Print( const Option_t* opt ="" ) const; + + AliTriggerScalersESD( const AliTriggerScalersESD &scal ); + AliTriggerScalersESD& operator=(const AliTriggerScalersESD& scal); + + ULong64_t GetLOCB() const { return fLOCB; } + ULong64_t GetLOCA() const { return fLOCA; } + ULong64_t GetL1CB() const { return fL1CB; } + ULong64_t GetL1CA() const { return fL1CA; } + ULong64_t GetL2CB() const { return fL2CB; } + ULong64_t GetL2CA() const { return fL2CA; } + void GetAllScalers(ULong64_t *scalers) const; + + UChar_t GetClassIndex() const { return fClassIndex; } + +private: + UChar_t fClassIndex; // number of triggered classes + ULong64_t fLOCB; // L0 triggers before any vetos (64 bits) + ULong64_t fLOCA; // L0 triggers after all vetos (64 bits) + ULong64_t fL1CB; // L1 triggers before any vetos (64 bits) + ULong64_t fL1CA; // L1 triggers after all vetos (64 bits) + ULong64_t fL2CB; // L2 triggers before any vetos (64 bits) + ULong64_t fL2CA; // L2 triggers after all vetos (64 bits) + + ClassDef( AliTriggerScalersESD, 1 ) // Define a Run Trigger Scalers (Scalers) +}; + +#endif diff --git a/STEER/ESD/AliTriggerScalersRecordESD.cxx b/STEER/ESD/AliTriggerScalersRecordESD.cxx index 7c93fd6134a..9f2947e9064 100644 --- a/STEER/ESD/AliTriggerScalersRecordESD.cxx +++ b/STEER/ESD/AliTriggerScalersRecordESD.cxx @@ -1,111 +1,111 @@ -/************************************************************************* -* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - - -#include -#include -#include -#include "AliLog.h" -#include "AliTriggerScalersESD.h" -#include "AliTriggerScalersRecordESD.h" - -using std::endl; -using std::cout; -ClassImp( AliTriggerScalersRecordESD ) -//_____________________________________________________________________________ -AliTriggerScalersRecordESD::AliTriggerScalersRecordESD(): -TObject(), -fTimestamp(), -fScalers(), -fTimeGroup(0) -{ -} - -//_____________________________________________________________________________ -void AliTriggerScalersRecordESD::AddTriggerScalers( AliTriggerScalersESD* scaler ) -{ - fScalers.AddLast( scaler ); -} - -//_____________________________________________________________________________ -void AliTriggerScalersRecordESD::AddTriggerScalers( UChar_t classIndex, ULong64_t LOCB, ULong64_t LOCA, - ULong64_t L1CB, ULong64_t L1CA, ULong64_t L2CB, ULong64_t L2CA ) -{ - AddTriggerScalers( new AliTriggerScalersESD( classIndex, LOCB, LOCA, L1CB, L1CA, L2CB, L2CA ) ); -} - -//_____________________________________________________________________________ -AliTriggerScalersRecordESD::AliTriggerScalersRecordESD( const AliTriggerScalersRecordESD &rec ) : -TObject(rec), -fTimestamp(rec.fTimestamp), -fScalers(), -fTimeGroup(rec.fTimeGroup) -{ -//copy constructor -for (Int_t i = 0; i < rec.fScalers.GetEntriesFast(); i++) { - if (rec.fScalers[i]) fScalers.Add(rec.fScalers[i]->Clone()); - } -} -//_____________________________________________________________________________ -AliTriggerScalersRecordESD& AliTriggerScalersRecordESD:: operator=(const AliTriggerScalersRecordESD& rec) -{ -//asignment operator -if(&rec == this) return *this; -((TObject *)this)->operator=(rec); -fTimestamp=rec.fTimestamp; -fScalers.Delete(); -for (Int_t i = 0; i < rec.fScalers.GetEntriesFast(); i++) { - if (rec.fScalers[i]) fScalers.Add(rec.fScalers[i]->Clone()); - } -fTimeGroup=rec.fTimeGroup; -return *this; -} - -//_____________________________________________________________________________ -void AliTriggerScalersRecordESD::Reset() -{ -fScalers.SetOwner(); -fScalers.Clear(); -fTimeGroup=0; -} - -//_____________________________________________________________________________ -const AliTriggerScalersESD* AliTriggerScalersRecordESD::GetTriggerScalersForClass( const Int_t classindex ) const -{ - // Find Trigger scaler with class ID = classmask using a binary search. - - Int_t base, last; - AliTriggerScalersESD *op2 = NULL; - - base = 0; - last = fScalers.GetEntriesFast(); - - while (base < last) { - op2 = (AliTriggerScalersESD *)fScalers.At(base); - if( op2->GetClassIndex() == classindex ) return op2; - base++; - } - return op2; -} - -//_____________________________________________________________________________ -void AliTriggerScalersRecordESD::Print( const Option_t* ) const -{ - // Print - cout << "Trigger Scalers Record, time group: "<< fTimeGroup << endl; - fTimestamp.Print(); - for( Int_t i=0; iPrint(); -} +/************************************************************************* +* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + + +#include +#include +#include +#include "AliLog.h" +#include "AliTriggerScalersESD.h" +#include "AliTriggerScalersRecordESD.h" + +using std::endl; +using std::cout; +ClassImp( AliTriggerScalersRecordESD ) +//_____________________________________________________________________________ +AliTriggerScalersRecordESD::AliTriggerScalersRecordESD(): +TObject(), +fTimestamp(), +fScalers(), +fTimeGroup(0) +{ +} + +//_____________________________________________________________________________ +void AliTriggerScalersRecordESD::AddTriggerScalers( AliTriggerScalersESD* scaler ) +{ + fScalers.AddLast( scaler ); +} + +//_____________________________________________________________________________ +void AliTriggerScalersRecordESD::AddTriggerScalers( UChar_t classIndex, ULong64_t LOCB, ULong64_t LOCA, + ULong64_t L1CB, ULong64_t L1CA, ULong64_t L2CB, ULong64_t L2CA ) +{ + AddTriggerScalers( new AliTriggerScalersESD( classIndex, LOCB, LOCA, L1CB, L1CA, L2CB, L2CA ) ); +} + +//_____________________________________________________________________________ +AliTriggerScalersRecordESD::AliTriggerScalersRecordESD( const AliTriggerScalersRecordESD &rec ) : +TObject(rec), +fTimestamp(rec.fTimestamp), +fScalers(), +fTimeGroup(rec.fTimeGroup) +{ +//copy constructor +for (Int_t i = 0; i < rec.fScalers.GetEntriesFast(); i++) { + if (rec.fScalers[i]) fScalers.Add(rec.fScalers[i]->Clone()); + } +} +//_____________________________________________________________________________ +AliTriggerScalersRecordESD& AliTriggerScalersRecordESD:: operator=(const AliTriggerScalersRecordESD& rec) +{ +//asignment operator +if(&rec == this) return *this; +((TObject *)this)->operator=(rec); +fTimestamp=rec.fTimestamp; +fScalers.Delete(); +for (Int_t i = 0; i < rec.fScalers.GetEntriesFast(); i++) { + if (rec.fScalers[i]) fScalers.Add(rec.fScalers[i]->Clone()); + } +fTimeGroup=rec.fTimeGroup; +return *this; +} + +//_____________________________________________________________________________ +void AliTriggerScalersRecordESD::Reset() +{ +fScalers.SetOwner(); +fScalers.Clear(); +fTimeGroup=0; +} + +//_____________________________________________________________________________ +const AliTriggerScalersESD* AliTriggerScalersRecordESD::GetTriggerScalersForClass( const Int_t classindex ) const +{ + // Find Trigger scaler with class ID = classmask using a binary search. + + Int_t base, last; + AliTriggerScalersESD *op2 = NULL; + + base = 0; + last = fScalers.GetEntriesFast(); + + while (base < last) { + op2 = (AliTriggerScalersESD *)fScalers.At(base); + if( op2->GetClassIndex() == classindex ) return op2; + base++; + } + return op2; +} + +//_____________________________________________________________________________ +void AliTriggerScalersRecordESD::Print( const Option_t* ) const +{ + // Print + cout << "Trigger Scalers Record, time group: "<< fTimeGroup << endl; + fTimestamp.Print(); + for( Int_t i=0; iPrint(); +} diff --git a/STEER/ESD/AliTriggerScalersRecordESD.h b/STEER/ESD/AliTriggerScalersRecordESD.h index 9b88af14029..1b50e57e7a9 100644 --- a/STEER/ESD/AliTriggerScalersRecordESD.h +++ b/STEER/ESD/AliTriggerScalersRecordESD.h @@ -1,51 +1,51 @@ -#ifndef ALITRIGGERSCALERSRECORDESD_H -#define ALITRIGGERSCALERSRECORDESD_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * -* See cxx source for full Copyright notice */ -/* $Id$ */ - -/////////////////////////////////////////////////////////////////////////////// -// -// Class to define the ALICE Trigger Scalers Record -// -// Each record consists of 1 time stamp (4 words) (AliTimeStamp) -// and an array with the scalers (AliTriggerScalers) for each trigger class -// in partition -// -////////////////////////////////////////////////////////////////////////////// -#include -#include "AliTimeStamp.h" -class TObjArray; -class AliTimeStamp; -class AliTriggerScalersESD; - -class AliTriggerScalersRecordESD : public TObject { - -public: - AliTriggerScalersRecordESD(); - virtual ~AliTriggerScalersRecordESD() { fScalers.SetOwner(); fScalers.Delete(); } - void Reset(); - void AddTriggerScalers( AliTriggerScalersESD* scaler ); - void AddTriggerScalers( UChar_t classIndex, ULong64_t LOCB, ULong64_t LOCA, - ULong64_t L1CB, ULong64_t L1CA, ULong64_t L2CB, ULong64_t L2CA ); - const TObjArray* GetTriggerScalers() const { return &fScalers; } -const AliTriggerScalersESD* GetTriggerScalersForClass( const Int_t classindex ) const; - const AliTimeStamp* GetTimeStamp() const {return &fTimestamp;}; - UInt_t GetTimeGroup() const {return fTimeGroup; }; - void SetTimeStamp(const AliTimeStamp *stamp){fTimestamp = *stamp;}; - void SetTimeGroup(const UInt_t group){fTimeGroup = group;}; - virtual void Print( const Option_t* opt ="" ) const; - - AliTriggerScalersRecordESD( const AliTriggerScalersRecordESD &rec ); - AliTriggerScalersRecordESD& operator=(const AliTriggerScalersRecordESD& rec); - - -private: - AliTimeStamp fTimestamp; // record timestamp - TObjArray fScalers; // Array of scalers (AliTriggerScalersESD) - UInt_t fTimeGroup; // Active time group - ClassDef( AliTriggerScalersRecordESD, 3 ) // Define a Record of Trigger Scalers -}; - -#endif +#ifndef ALITRIGGERSCALERSRECORDESD_H +#define ALITRIGGERSCALERSRECORDESD_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* See cxx source for full Copyright notice */ +/* $Id$ */ + +/////////////////////////////////////////////////////////////////////////////// +// +// Class to define the ALICE Trigger Scalers Record +// +// Each record consists of 1 time stamp (4 words) (AliTimeStamp) +// and an array with the scalers (AliTriggerScalers) for each trigger class +// in partition +// +////////////////////////////////////////////////////////////////////////////// +#include +#include "AliTimeStamp.h" +class TObjArray; +class AliTimeStamp; +class AliTriggerScalersESD; + +class AliTriggerScalersRecordESD : public TObject { + +public: + AliTriggerScalersRecordESD(); + virtual ~AliTriggerScalersRecordESD() { fScalers.SetOwner(); fScalers.Delete(); } + void Reset(); + void AddTriggerScalers( AliTriggerScalersESD* scaler ); + void AddTriggerScalers( UChar_t classIndex, ULong64_t LOCB, ULong64_t LOCA, + ULong64_t L1CB, ULong64_t L1CA, ULong64_t L2CB, ULong64_t L2CA ); + const TObjArray* GetTriggerScalers() const { return &fScalers; } +const AliTriggerScalersESD* GetTriggerScalersForClass( const Int_t classindex ) const; + const AliTimeStamp* GetTimeStamp() const {return &fTimestamp;}; + UInt_t GetTimeGroup() const {return fTimeGroup; }; + void SetTimeStamp(const AliTimeStamp *stamp){fTimestamp = *stamp;}; + void SetTimeGroup(const UInt_t group){fTimeGroup = group;}; + virtual void Print( const Option_t* opt ="" ) const; + + AliTriggerScalersRecordESD( const AliTriggerScalersRecordESD &rec ); + AliTriggerScalersRecordESD& operator=(const AliTriggerScalersRecordESD& rec); + + +private: + AliTimeStamp fTimestamp; // record timestamp + TObjArray fScalers; // Array of scalers (AliTriggerScalersESD) + UInt_t fTimeGroup; // Active time group + ClassDef( AliTriggerScalersRecordESD, 3 ) // Define a Record of Trigger Scalers +}; + +#endif diff --git a/STEER/STEER/AliGRPObject.h b/STEER/STEER/AliGRPObject.h index 039bc5bb8d8..9efbaf9eafa 100644 --- a/STEER/STEER/AliGRPObject.h +++ b/STEER/STEER/AliGRPObject.h @@ -1,231 +1,231 @@ -#ifndef ALIGRPOBJECT_H -#define ALIGRPOBJECT_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id$ */ - -// -// AliGRPObject -// class to store the information -// coming from the GRP preprocessor -// - -#include -#include -#include -#include - -class TMap; - -class AliDCSSensor; -class AliSplineFit; -class AliLog; - -class AliGRPObject : public TObject { - public: - - enum Stats {kMean = 0, kTruncMean = 1, kMedian = 2, kSDMean = 3, kSDMedian = 4}; - - enum StatusBits {kPolConvLHC = BIT(14), kUniformBMap = BIT(15),kConvSqrtSHalfGeV = BIT(16)}; - - enum DP_HallProbes { - khpL3bsf17H1= 0 , khpL3bsf17H2, khpL3bsf17H3, khpL3bsf17Temperature, - khpL3bsf4H1, khpL3bsf4H2, khpL3bsf4H3, khpL3bsf4Temperature, - khpL3bkf17H1, khpL3bkf17H2, khpL3bkf17H3, khpL3bkf17Temperature, - khpL3bkf4H1, khpL3bkf4H2, khpL3bkf4H3, khpL3bkf4Temperature, - khpL3bsf13H1, khpL3bsf13H2, khpL3bsf13H3, khpL3bsf13Temperature, - khpL3bsf8H1, khpL3bsf8H2, khpL3bsf8H3, khpL3bsfy8Temperature, - khpL3bkf13H1, khpL3bkf13H2, khpL3bkf13H3, khpL3bkf13Temperature, - khpL3bkf8H1, khpL3bkf8H2, khpL3bkf8H3, khpL3bkf8Temperature, - khpDipoleInsideH1, khpDipoleInsideH2, khpDipoleInsideH3, khpDipoleInsideTemperature, - khpDipoleOutsideH1, khpDipoleOutsideH2, khpDipoleOutsideH3, khpDipoleOutsideTemperature}; - - - AliGRPObject(); - AliGRPObject(const AliGRPObject & obj); - AliGRPObject& operator=(const AliGRPObject & obj); - ~AliGRPObject(); - - // getters - Bool_t IsBeamEnergyIsSqrtSHalfGeV() const {return TestBit(kConvSqrtSHalfGeV);} - Bool_t IsPolarityConventionLHC() const {return TestBit(kPolConvLHC);} - Bool_t IsUniformBMap() const {return TestBit(kUniformBMap);} - time_t GetTimeStart() const {return fTimeStart;} - time_t GetTimeEnd() const {return fTimeEnd;} - Float_t GetBeamEnergy() const; - TString GetBeamType() const {return fBeamType;} - Char_t GetNumberOfDetectors() const {return fNumberOfDetectors;} - UInt_t GetDetectorMask() const {return fDetectorMask;} - TString GetLHCPeriod() const {return fLHCPeriod;} - TString GetRunType() const {return fRunType;} - TString GetLHCState() const {return fLHCState;} - TString GetMachineMode() const {return fMachineMode;} - TObjArray* GetLHCStateArray() const {return fLHCStateArray;} - TObjArray* GetMachineModeArray() const {return fMachineModeArray;} - Char_t GetL3Polarity() const {return fL3Polarity;} - Char_t GetDipolePolarity() const {return fDipolePolarity;} - Float_t* GetL3Current() const {return fL3Current;} - Float_t GetL3Current(Stats stat) const {return fL3Current[stat];} - Float_t* GetDipoleCurrent() const {return fDipoleCurrent;} - Float_t GetDipoleCurrent(Stats stat) const {return fDipoleCurrent[stat];} - Float_t* GetCavernTemperature() const {return fCavernTemperature;} - Float_t GetCavernTemperature(Stats stat) const {return fCavernTemperature[stat];} - AliDCSSensor* GetCavernAtmosPressure() const {return fCavernAtmosPressure;} - AliDCSSensor* GetCavernAtmosPressure2() const {return fCavernAtmosPressure2;} - AliDCSSensor* GetSurfaceAtmosPressure() const {return fSurfaceAtmosPressure;} - AliDCSSensor* GetBestCavernAtmosPressure() const ; - AliDCSSensor* GetBestCavernAtmosPressure(const TTimeStamp& time) const; - static AliDCSSensor* GetBestCavernAtmosPressure(AliDCSSensor* cavern1, - AliDCSSensor* cavern2, AliDCSSensor* surface, const TTimeStamp& time); - - - Float_t* GetHallProbesArray(DP_HallProbes hp) const; - Float_t GetHallProbes(Int_t hp) const {return fHallProbes[hp];} - Float_t GetHallProbes(DP_HallProbes hp, Stats stat) const {return fHallProbes[hp*fPoints+stat];} - - Int_t GetPoints() const {return fPoints;} - Int_t GetDimension() const {return fDimension;} - - Double_t GetMaxTimeLHCValidity() const {return fMaxTimeLHCValidity;} - // - TObjArray* GetQATrigClasses() const {return (TObjArray*)fQATrigClasses;} - TObjArray* GetQACloningRequest() const {return (TObjArray*)fQACloningRequest;} - // - // setters - void SetBeamEnergyIsSqrtSHalfGeV(Bool_t v=kTRUE) {SetBit(kConvSqrtSHalfGeV,v);} - void SetPolarityConventionLHC(Bool_t v=kTRUE) {return SetBit(kPolConvLHC,v);} - void SetUniformBMap(Bool_t v=kTRUE) {return SetBit(kUniformBMap,v);} - void SetTimeStart(time_t timeStart) {fTimeStart = timeStart;} - void SetTimeEnd(time_t timeEnd) {fTimeEnd = timeEnd;} - void SetBeamEnergy(Float_t beamEnergy) {fBeamEnergy = beamEnergy;} - void SetBeamType(TString beamType) {fBeamType = beamType;} - void SetNumberOfDetectors(Char_t numberOfDetectors) {fNumberOfDetectors = numberOfDetectors;} - void SetDetectorMask(UInt_t detectorMask) {fDetectorMask = detectorMask;} - void SetLHCPeriod(TString lhcPeriod) {fLHCPeriod = lhcPeriod;} - void SetRunType(TString runType) {fRunType = runType;} - void SetLHCState(TString lhcState) {fLHCState = lhcState;} - void SetMachineMode(TString machineMode) {fMachineMode = machineMode;} - void SetLHCStateArray(TObjArray* lhcStateArray) {fLHCStateArray = lhcStateArray;} - void SetMachineModeArray(TObjArray* machineModeArray) {fMachineModeArray = machineModeArray;} - void SetL3Polarity(Char_t l3Polarity) {fL3Polarity = l3Polarity;} - void SetDipolePolarity(Char_t dipolePolarity) {fDipolePolarity = dipolePolarity;} - void SetL3Current(const Float_t* l3Current) { - for (Int_t i = 0;i +#include +#include +#include + +class TMap; + +class AliDCSSensor; +class AliSplineFit; +class AliLog; + +class AliGRPObject : public TObject { + public: + + enum Stats {kMean = 0, kTruncMean = 1, kMedian = 2, kSDMean = 3, kSDMedian = 4}; + + enum StatusBits {kPolConvLHC = BIT(14), kUniformBMap = BIT(15),kConvSqrtSHalfGeV = BIT(16)}; + + enum DP_HallProbes { + khpL3bsf17H1= 0 , khpL3bsf17H2, khpL3bsf17H3, khpL3bsf17Temperature, + khpL3bsf4H1, khpL3bsf4H2, khpL3bsf4H3, khpL3bsf4Temperature, + khpL3bkf17H1, khpL3bkf17H2, khpL3bkf17H3, khpL3bkf17Temperature, + khpL3bkf4H1, khpL3bkf4H2, khpL3bkf4H3, khpL3bkf4Temperature, + khpL3bsf13H1, khpL3bsf13H2, khpL3bsf13H3, khpL3bsf13Temperature, + khpL3bsf8H1, khpL3bsf8H2, khpL3bsf8H3, khpL3bsfy8Temperature, + khpL3bkf13H1, khpL3bkf13H2, khpL3bkf13H3, khpL3bkf13Temperature, + khpL3bkf8H1, khpL3bkf8H2, khpL3bkf8H3, khpL3bkf8Temperature, + khpDipoleInsideH1, khpDipoleInsideH2, khpDipoleInsideH3, khpDipoleInsideTemperature, + khpDipoleOutsideH1, khpDipoleOutsideH2, khpDipoleOutsideH3, khpDipoleOutsideTemperature}; + + + AliGRPObject(); + AliGRPObject(const AliGRPObject & obj); + AliGRPObject& operator=(const AliGRPObject & obj); + ~AliGRPObject(); + + // getters + Bool_t IsBeamEnergyIsSqrtSHalfGeV() const {return TestBit(kConvSqrtSHalfGeV);} + Bool_t IsPolarityConventionLHC() const {return TestBit(kPolConvLHC);} + Bool_t IsUniformBMap() const {return TestBit(kUniformBMap);} + time_t GetTimeStart() const {return fTimeStart;} + time_t GetTimeEnd() const {return fTimeEnd;} + Float_t GetBeamEnergy() const; + TString GetBeamType() const {return fBeamType;} + Char_t GetNumberOfDetectors() const {return fNumberOfDetectors;} + UInt_t GetDetectorMask() const {return fDetectorMask;} + TString GetLHCPeriod() const {return fLHCPeriod;} + TString GetRunType() const {return fRunType;} + TString GetLHCState() const {return fLHCState;} + TString GetMachineMode() const {return fMachineMode;} + TObjArray* GetLHCStateArray() const {return fLHCStateArray;} + TObjArray* GetMachineModeArray() const {return fMachineModeArray;} + Char_t GetL3Polarity() const {return fL3Polarity;} + Char_t GetDipolePolarity() const {return fDipolePolarity;} + Float_t* GetL3Current() const {return fL3Current;} + Float_t GetL3Current(Stats stat) const {return fL3Current[stat];} + Float_t* GetDipoleCurrent() const {return fDipoleCurrent;} + Float_t GetDipoleCurrent(Stats stat) const {return fDipoleCurrent[stat];} + Float_t* GetCavernTemperature() const {return fCavernTemperature;} + Float_t GetCavernTemperature(Stats stat) const {return fCavernTemperature[stat];} + AliDCSSensor* GetCavernAtmosPressure() const {return fCavernAtmosPressure;} + AliDCSSensor* GetCavernAtmosPressure2() const {return fCavernAtmosPressure2;} + AliDCSSensor* GetSurfaceAtmosPressure() const {return fSurfaceAtmosPressure;} + AliDCSSensor* GetBestCavernAtmosPressure() const ; + AliDCSSensor* GetBestCavernAtmosPressure(const TTimeStamp& time) const; + static AliDCSSensor* GetBestCavernAtmosPressure(AliDCSSensor* cavern1, + AliDCSSensor* cavern2, AliDCSSensor* surface, const TTimeStamp& time); + + + Float_t* GetHallProbesArray(DP_HallProbes hp) const; + Float_t GetHallProbes(Int_t hp) const {return fHallProbes[hp];} + Float_t GetHallProbes(DP_HallProbes hp, Stats stat) const {return fHallProbes[hp*fPoints+stat];} + + Int_t GetPoints() const {return fPoints;} + Int_t GetDimension() const {return fDimension;} + + Double_t GetMaxTimeLHCValidity() const {return fMaxTimeLHCValidity;} + // + TObjArray* GetQATrigClasses() const {return (TObjArray*)fQATrigClasses;} + TObjArray* GetQACloningRequest() const {return (TObjArray*)fQACloningRequest;} + // + // setters + void SetBeamEnergyIsSqrtSHalfGeV(Bool_t v=kTRUE) {SetBit(kConvSqrtSHalfGeV,v);} + void SetPolarityConventionLHC(Bool_t v=kTRUE) {return SetBit(kPolConvLHC,v);} + void SetUniformBMap(Bool_t v=kTRUE) {return SetBit(kUniformBMap,v);} + void SetTimeStart(time_t timeStart) {fTimeStart = timeStart;} + void SetTimeEnd(time_t timeEnd) {fTimeEnd = timeEnd;} + void SetBeamEnergy(Float_t beamEnergy) {fBeamEnergy = beamEnergy;} + void SetBeamType(TString beamType) {fBeamType = beamType;} + void SetNumberOfDetectors(Char_t numberOfDetectors) {fNumberOfDetectors = numberOfDetectors;} + void SetDetectorMask(UInt_t detectorMask) {fDetectorMask = detectorMask;} + void SetLHCPeriod(TString lhcPeriod) {fLHCPeriod = lhcPeriod;} + void SetRunType(TString runType) {fRunType = runType;} + void SetLHCState(TString lhcState) {fLHCState = lhcState;} + void SetMachineMode(TString machineMode) {fMachineMode = machineMode;} + void SetLHCStateArray(TObjArray* lhcStateArray) {fLHCStateArray = lhcStateArray;} + void SetMachineModeArray(TObjArray* machineModeArray) {fMachineModeArray = machineModeArray;} + void SetL3Polarity(Char_t l3Polarity) {fL3Polarity = l3Polarity;} + void SetDipolePolarity(Char_t dipolePolarity) {fDipolePolarity = dipolePolarity;} + void SetL3Current(const Float_t* l3Current) { + for (Int_t i = 0;iGetSize(); * -* for (int i=0;i -#include -#include - -ClassImp(AliLHCData) - -const Char_t* AliLHCData::fgkDCSNames[] = { - "LHC_IntensityBeam%1d_totalIntensity", - "LHC_BeamIntensityPerBunchBeam%1d_averageBeamIntensity", - "LHC_BeamIntensityPerBunchBeam%1d_Average_BunchIntensities", - // - "LHC_LumAverageBRANB_4%c2_acqMode", - "LHC_LumAverageBRANB_4%c2_meanLuminosity", - "LHC_LumAverageBRANB_4%c2_meanLuminosityError", - "LHC_BeamLuminosityPerBunchBRANB_4%c2_Average_BunchLuminosity", - "LHC_BeamLuminosityPerBunchBRANB_4%c2_BunchLuminosityError", - "LHC_LumAverageBRANB_4%c2_meanCrossingAngle", - "LHC_LumAverageBRANB_4%c2_meanCrossingAngleError", - "LHC_CirculatingBunchConfig_Beam%d", - "LHC_FillNumber", - // - "LHC_BunchLengthBeam%1d_nBunches", - "LHC_BunchLengthBeam%1d_bunchesLenghts", - "LHC_BunchLengthBeam%1d_filledBuckets", - // - "LHC_RunControl_ActiveInjectionScheme", - "LHC_RunControl_BetaStar", - "LHC_RunControl_IP2_Xing_Murad", - "LHC_RunControl_IP2_ALICE_Murad", - - "LHC_BeamSizeBeam%1d_acqMode", - "LHC_BeamSizeBeam%1d_sigmaH", - "LHC_BeamSizeBeam%1d_sigmaV", - "LHC_BeamSizeBeam%1d_emittanceH", - "LHC_BeamSizeBeam%1d_emittanceV", - "LHC_BeamSizeBeam%1d_errorSigmaH", - "LHC_BeamSizeBeam%1d_errorSigmaV", - // - "LHC_CollimatorPos_%s_lvdt_%s", - "ALICE_LumiIntFill", - "ALICE_BckgIntFill" -}; - -const Char_t* AliLHCData::fgkDCSColNames[] = { - "TCTVB_4L2", - "TCTVB_4R2", - "TCLIA_4R2" -}; - -const Char_t* AliLHCData::fgkDCSColJaws[] = { - "gap_downstream","gap_upstream","left_downstream", - "left_upstream","right_downstream","right_upstream"}; - -//___________________________________________________________________ -AliLHCData::AliLHCData(const TMap* dcsMap, double tmin, double tmax) - : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(0),fkMap2Process(0) -{ - FillData(dcsMap,tmin,tmax); -} - -//___________________________________________________________________ -AliLHCData::AliLHCData(const Char_t* dcsFile, double tmin, double tmax) - : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(dcsFile),fkMap2Process(0) -{ - FillData(dcsFile,tmin,tmax); -} - -//___________________________________________________________________ -Bool_t AliLHCData::FillData(const TMap* dcsMap,double tmin, double tmax) -{ - // process DCS map and fill all fields. - Clear(); - fkMap2Process = dcsMap; - FillData(tmin,tmax); - return kTRUE; -} - -//___________________________________________________________________ -Bool_t AliLHCData::FillData(const Char_t* dcsFile,double tmin, double tmax) -{ - // process DCS file and fill all fields. - Clear(); - fkFile2Process = dcsFile; - FillData(tmin,tmax); - return kTRUE; -} - -//___________________________________________________________________ -Bool_t AliLHCData::FillData(double tmin, double tmax) -{ - // process DCS map and fill all fields. - // Accept only entries with timestamp between tmin and tmax - // - char buff[100],buff1[100]; - // - SetTMin(tmin); - SetTMax(tmax); - // - // -------------------------- extract Fill Number - int iFirst=0,iLast=0; - TObjArray* arr = GetDCSEntry(fgkDCSNames[kFillNum],iFirst,iLast,fTMin,fTMax); - if (arr) SetFillNumber( ExtractInt( (AliDCSArray*)arr->At(iFirst), 0) ); - if (fkFile2Process) delete arr; // array was created on demand - // - for (int ibm=0;ibm<2;ibm++) { - // - snprintf(buff,99,fgkDCSNames[kBunchConf],ibm+1); // ----- declared bunch configuration - FillBunchConfig(fBunchConfDecl[ibm], buff); - // - snprintf(buff,99,fgkDCSNames[kBunchLgtFillB],ibm+1); // ----- measured bunch configuration - FillBunchConfig(fBunchConfMeas[ibm], buff); - // - snprintf(buff,99,fgkDCSNames[kBunchLgt],ibm+1); // ----- measured bunch lenghts - FillBunchInfo(fBunchLengths[ibm],buff,ibm,kFALSE); - // - snprintf(buff,99,fgkDCSNames[kIntBunchAv],ibm+1); // ----- B-by-B intensities - FillBunchInfo(fIntensPerBunch[ibm],buff,ibm,kTRUE); - // - // - snprintf(buff,99,fgkDCSNames[kIntTot],ibm+1); // ----- total intensities for beam 1 and 2 - FillScalarRecord(fIntensTotal[ibm], buff); - // - snprintf(buff,99,fgkDCSNames[kIntTotAv],ibm+1); // ----- total intensities for beam 1 and 2 from B-by-B average - FillScalarRecord(fIntensTotalAv[ibm], buff); - // - snprintf(buff,99,fgkDCSNames[kBeamSzEmittH],ibm+1); // ----- H emittance for beam 1 and 2 - FillScalarRecord(fEmittanceH[ibm], buff); - // - snprintf(buff,99,fgkDCSNames[kBeamSzEmittV],ibm+1); // ----- V emittance for beam 1 and 2 - FillScalarRecord(fEmittanceV[ibm], buff); - // - snprintf(buff,99 ,fgkDCSNames[kBeamSzSigH], ibm+1); // ----- H sigmas and errors for beam 1 and 2 - snprintf(buff1,99,fgkDCSNames[kBeamSzSigHErr],ibm+1); - FillScalarRecord(fBeamSigmaH[ibm], buff, buff1); - // - snprintf(buff,99 ,fgkDCSNames[kBeamSzSigV], ibm+1); // ----- V sigmas and errors for beam 1 and 2 - snprintf(buff1,99,fgkDCSNames[kBeamSzSigVErr],ibm+1); - FillScalarRecord(fBeamSigmaV[ibm], buff, buff1); - // - } - // - FlagInteractingBunches(fBunchConfMeas[0],fBunchConfMeas[1]); - FlagInteractingBunches(fBunchConfDecl[0],fBunchConfDecl[1]); - // - for (int ilr=0;ilr<2;ilr++) { - // - snprintf(buff,99 ,fgkDCSNames[kLumBunch], ilr ? 'R':'L'); // ---- BC-by-BC luminosity at IP2 and its error - snprintf(buff1,99,fgkDCSNames[kLumBunchErr], ilr ? 'R':'L'); - FillBCLuminosities(fLuminPerBC[ilr], buff, buff1, 0); // BRAN L uses beam2 as a reference, BRAN R - beam1 - // - snprintf(buff,99 ,fgkDCSNames[kLumTot] , ilr ? 'R':'L'); // ---- total luminosity at IP2 and its error - snprintf(buff1,99,fgkDCSNames[kLumTotErr], ilr ? 'R':'L'); - FillScalarRecord(fLuminTotal[ilr], buff, buff1); - // - snprintf(buff,99 ,fgkDCSNames[kLumAcqMode], ilr ? 'R':'L'); // ---- luminosity acquisition mode - FillAcqMode(fLuminAcqMode[ilr], buff); - // - snprintf(buff,99, fgkDCSNames[kLumCrossAng] , ilr ? 'R':'L'); //----- crossing angle at IP2 and its error - snprintf(buff1,99,fgkDCSNames[kLumCrossAngErr], ilr ? 'R':'L'); - FillScalarRecord(fCrossAngle[ilr], buff, buff1); - // - } - // - for (int icl=0;iclGetValue(key); - else if (fkFile2Process) { - AliLHCReader rd; - arr = rd.ReadSingleLHCDP(fkFile2Process,key); - } - else { - AliError("Neither DCS map nor DCS filename are set"); - return 0; - } - // - if (!arr || !arr->GetEntriesFast()) { - AliWarning(Form("No data for %s",key)); - if (fkMap2Process) delete arr; // created on demand - return 0; - } - int ntot = arr->GetEntriesFast(); - // - // search 1st entry before or at tmin - AliDCSArray* ent = 0; - Bool_t found = kFALSE; - for (entry=0;entryAt(entry); - if (ent->GetTimeStamp()>=tmin-kMarginSOR && ent->GetTimeStamp()<=tmax+kMarginEOR) { - found = kTRUE; - if (ent->GetTimeStamp()>tmin) break; - } - } - if (!found) { - entry = -1; - TString str; - str += AliLHCDipValF::TimeAsString(tmin); - str += " : "; - str += AliLHCDipValF::TimeAsString(tmax); - AliWarning(Form("All entries for %s are outside the requested range:\n%s",key,str.Data())); - if (fkMap2Process) delete arr; // created on demand - return 0; - } - if (entry>0) entry--; - // - // search last entry at or after tmin - ent = 0; - for (last=entry;lastAt(last); - if (ent->GetTimeStamp()>tmax) break; - } - if (last == ntot) last--; - else if (ent->GetTimeStamp()>tmax+kMarginEOR) last--; - // - return arr; -} - -//___________________________________________________________________ -Int_t AliLHCData::TimeDifference(double v1,double v2,double tol) const -{ - // return 0 if the times are the same within the tolerance - // 1 if v1>v2 - // -1 if v1tol) return 1; - if (v1<-tol) return -1; - return 0; -} - -//___________________________________________________________________ -Bool_t AliLHCData::GoodPairID(int beam) const -{ - // check for correct beam identifier - if (beam>kBeam2||beam<0) {AliError(Form("BeamID can be 0 or 1, %d requested",beam)); return kFALSE;} - return kTRUE; -} - -//___________________________________________________________________ -AliLHCDipValI* AliLHCData::GetBunchConfigMeasured(int beam,double tstamp) const -{ - // find measured bunch configuration valid for given tstamp - if (!GoodPairID(beam)) return 0; - return (AliLHCDipValI*)FindRecValidFor(fBunchConfMeas[beam][kStart],fBunchConfMeas[beam][kNStor],tstamp); -} - -//___________________________________________________________________ -AliLHCDipValI* AliLHCData::GetBunchConfigDeclared(int beam,double tstamp) const -{ - // find declared bunch configuration valid for given tstamp - if (!GoodPairID(beam)) return 0; - return (AliLHCDipValI*)FindRecValidFor(fBunchConfDecl[beam][kStart],fBunchConfDecl[beam][kNStor],tstamp); -} - -//___________________________________________________________________ -TObject* AliLHCData::FindRecValidFor(int start,int nrec, double tstamp) const -{ - // find record within this limits valid for given tstamp (i.e. the last one before or equal to tstamp) - AliLHCDipValI *prevObj = 0; - for (int i=0;iGetTimeStamp())<=0) break; - prevObj = curObj; - } - if (!prevObj && nrec>0) prevObj = (AliLHCDipValI*)fData[start]; // if no exact match, return the 1st one - return prevObj; -} - -//___________________________________________________________________ -Int_t AliLHCData::FillScalarRecord(int refs[2], const char* rec, const char* recErr, Double_t maxAbsVal) -{ - // fill record for scalar value, optionally accompanied by measurement error - // - AliInfo(Form("Acquiring record: %s",rec)); - // - TObjArray *arr=0,*arrE=0; - Int_t iLast=0,iLastE=0,iFirst=0,iFirstE=0; - // - refs[kStart] = fData.GetEntriesFast(); - refs[kNStor] = 0; - // - if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; - // - int dim = 1; - if (recErr) { - arrE = GetDCSEntry(recErr,iFirstE,iLastE,fTMin,fTMax); - dim += 1; - } - // - // Bool_t last = kFALSE; - while (iFirst<=iLast) { - AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); - double tstamp = dcsVal->GetTimeStamp(); - // - AliLHCDipValF* curValD = new AliLHCDipValF(dim,tstamp); // start new period - double vcheck = ExtractDouble(dcsVal,0); // value - if (TMath::Abs(vcheck) > maxAbsVal) { - AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, 0, rec, maxAbsVal)); - vcheck = 0.; - } - (*curValD)[0] = vcheck; - // - if (recErr) { - double errVal = -1; - while (iFirstE<=iLastE) { // try to find corresponding error - AliDCSArray *dcsValE = (AliDCSArray*) arrE->At(iFirstE); - double tstampE = dcsValE->GetTimeStamp(); - int tdif = TimeDifference(tstamp,tstampE); - if (!tdif) { // error matches to value - errVal = ExtractDouble(dcsVal,0); // value - if (TMath::Abs(errVal) > maxAbsVal) { - AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",errVal, 0, recErr, maxAbsVal)); - errVal = 0.; - } - iFirstE++; - break; - } - else if (tdif>0) iFirstE++; // error time lags behind, read the next one - else break; // error time is ahead of value, no error associated - } - (*curValD)[dim-1] = errVal; // error - curValD->SetLastSpecial(); // lable the last entry as an error - } - // - fData.Add(curValD); - refs[kNStor]++; - // if (last) break; - } - // - if (fkFile2Process) { - delete arr; - delete arrE; - } - return refs[kNStor]; -} - -//___________________________________________________________________ -Int_t AliLHCData::FillBunchConfig(int refs[2],const char* rec) -{ - // fill record for bunch configuration - // - AliInfo(Form("Acquiring record: %s",rec)); - TObjArray *arr; - Int_t iLast,iFirst; - // - refs[kStart] = fData.GetEntriesFast(); - refs[kNStor] = 0; - // - if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; - // - AliLHCDipValI* prevRecI=0; - // - while (iFirst<=iLast) { - AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); - double tstamp = dcsVal->GetTimeStamp(); - // - int bucket=0, nbunch=0, ndiff=0; - int nSlots = dcsVal->GetNEntries(); // count number of actual bunches (non-zeros) - int* dcsArr = dcsVal->GetInt(); - while(nbunchGetSize()>nbunch && bucket!=prevRecI->GetValue(nbunch)) ndiff++; - nbunch++; - } - if (!nbunch) AliWarning(Form("%s record is present but empty: no beam?",rec)); - if (prevRecI && !ndiff && nbunch==prevRecI->GetSize()) continue; // record similar to previous one - AliLHCDipValI* curValI = new AliLHCDipValI(nbunch,tstamp); - for (int i=nbunch;i--;) (*curValI)[i] = dcsArr[i]; - fData.Add(curValI); - refs[kNStor]++; - prevRecI = curValI; - } - // - if (fkFile2Process) delete arr; - return refs[kNStor]; -} - -//___________________________________________________________________ -Int_t AliLHCData::FillAcqMode(int refs[2],const char* rec) -{ - // fill acquisition mode - // - AliInfo(Form("Acquiring record: %s",rec)); - TObjArray *arr; - Int_t iLast,iFirst; - // - refs[kStart] = fData.GetEntriesFast(); - refs[kNStor] = 0; - // - if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; - // - AliLHCDipValI* prevRecI=0; - while (iFirst<=iLast) { - AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); - double tstamp = dcsVal->GetTimeStamp(); - // - int nSlots = dcsVal->GetNEntries(); - if (nSlots<1) continue; - int acqMode = dcsVal->GetInt()[0]; - if (prevRecI && (*prevRecI)[0] == acqMode) continue; // record similar to previous one - AliLHCDipValI* curValI = new AliLHCDipValI(1,tstamp); - (*curValI)[0] = acqMode; - fData.Add(curValI); - refs[kNStor]++; - prevRecI = curValI; - } - // - if (fkFile2Process) delete arr; - return refs[kNStor]; -} - -//___________________________________________________________________ -Int_t AliLHCData::FillStringRecord(int refs[2],const char* rec) -{ - // fill record with string value - // - AliInfo(Form("Acquiring record: %s",rec)); - TString prevRec; - TObjArray *arr; - Int_t iLast,iFirst; - // - refs[kStart] = fData.GetEntriesFast(); - refs[kNStor] = 0; - // - if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; - // - while (iFirst<=iLast) { - AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); - double tstamp = dcsVal->GetTimeStamp(); - // - TString &str = ExtractString(dcsVal); - if (!prevRec.IsNull()) {if (str == prevRec) continue;} // skip similar record - else prevRec = str; - // - AliLHCDipValC* curValS = new AliLHCDipValC(1,tstamp); - curValS->SetValues(str.Data(),str.Length()+1); - // - fData.Add(curValS); - refs[kNStor]++; - } - if (fkFile2Process) delete arr; - return refs[kNStor]; -} - -//___________________________________________________________________ -Int_t AliLHCData::FillBunchInfo(int refs[2],const char* rec, int ibm, Bool_t inRealSlots, Double_t maxAbsVal) -{ - // fill bunch properties for beam ibm - // if inRealSlots = true, then the value is taken from bunchRFbucket/10, otherwise, the value - // for the i-th bunch is taken from the i-th element - // - AliInfo(Form("Acquiring record: %s",rec)); - TObjArray *arr; - Int_t iLast,iFirst; - // - refs[kStart] = fData.GetEntriesFast(); - refs[kNStor] = 0; - // - if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; - // - while (iFirst<=iLast) { - AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); - double tstamp = dcsVal->GetTimeStamp(); - // - AliLHCDipValI *bconf = GetBunchConfigMeasured(ibm,tstamp); - if (!bconf) { - AliWarning(Form("Mearured bunch configuration for beam %d at t=%.1f is not available, trying declared one",ibm+1,tstamp)); - bconf = GetBunchConfigDeclared(ibm,tstamp); - } - if (!bconf) { - AliWarning(Form("Declared bunch configuration for beam %d at t=%.1f is not available, skip this record",ibm+1,tstamp)); - return -1; - } - int nSlots = dcsVal->GetNEntries(); // count number of actual bunches (non-zeros) - int nbunch = bconf->GetSize(); - if (nbunch>nSlots) { - AliWarning(Form("More N bunches than slots in %s at time %.1f",rec,tstamp)); - continue; - } - double* dcsArr = dcsVal->GetDouble(); - AliLHCDipValF* curValD = new AliLHCDipValF(nbunch,tstamp); - for (int i=nbunch;i--;) { - int ind = inRealSlots ? (*bconf)[i]/10 : i; - if (ind>nSlots) { - AliError(Form("Bunch %d refers to wrong slot %d, set to -1",i,(*bconf)[i])); - (*curValD)[i] = -1; - } - else { - double vcheck = dcsArr[ind]; - if (TMath::Abs(vcheck) > maxAbsVal) { - AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, ind, rec, maxAbsVal)); - vcheck = 0.; - } - (*curValD)[i] = vcheck; - } - } - fData.Add(curValD); - refs[kNStor]++; - } - if (fkFile2Process) delete arr; - return refs[kNStor]; - // -} - -//___________________________________________________________________ -Int_t AliLHCData::FillBCLuminosities(int refs[2],const char* rec, const char* recErr, int useBeam, Double_t maxAbsVal) -{ - // fill luminosities per bunch crossing - // - AliInfo(Form("Acquiring record: %s",rec)); - TObjArray *arr,*arrE=0; - Int_t iLast=0,iLastE=0,iFirst=0,iFirstE=0; - // - refs[kStart] = fData.GetEntriesFast(); - refs[kNStor] = 0; - // - if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; - // - while (iFirst<=iLast) { - AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); - double tstamp = dcsVal->GetTimeStamp(); - // - AliLHCDipValI *bconf; - bconf = GetBunchConfigMeasured(useBeam,tstamp); // luminosities are stored according to beam bunches - if (!bconf) { - AliWarning(Form("Mearured bunch configuration for beam%d at t=%.1f is not available, trying declared one",useBeam,tstamp)); - bconf = GetBunchConfigDeclared(useBeam,tstamp); - } - if (!bconf) { - AliWarning(Form("Declared bunch configuration for beam%i at t=%.1f is not available, skip this record",useBeam,tstamp)); - return -1; - } - int nSlots = dcsVal->GetNEntries(); // count number of actual bunches (non-zeros) - int nbunch = bconf->GetSize(); - double* dcsArr = dcsVal->GetDouble(); - // - if (nbunch>nSlots) { - AliWarning(Form("More N bunches than slots in %s at time %.1f",rec,tstamp)); - continue; - } - int dim = 0; - if (!bconf->IsProcessed1()) { - AliWarning(Form("Bunch conf. for beam%d has no marked interacting bunches, store all luminosity for all filled bunches",useBeam)); - dim = nbunch; - } - else { // count number of interacting bunches - for (int i=nbunch;i--;) if ((*bconf)[i]<0) dim++; - } - // - if (recErr) { - arrE=GetDCSEntry(recErr,iFirstE,iLastE,fTMin,fTMax); - dim += 1; - } - AliLHCDipValF* curValD = new AliLHCDipValF(dim,tstamp); - int cnt = 0; - for (int i=0;iIsProcessed1() && slot>0) continue; - // - int ind = TMath::Abs(slot)/10; - if (ind>nSlots) { - AliError(Form("Bunch %d refers to wrong slot %d, set to -1",cnt,slot)); - (*curValD)[cnt] = -1; - } - else { - double vcheck = dcsArr[ind]; - if (TMath::Abs(vcheck) > maxAbsVal) { - AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, ind, rec, maxAbsVal)); - vcheck = 0.; - } - (*curValD)[i] = vcheck; - } - cnt++; - } - // - if (recErr) { - double errVal = -1; - while (iFirstE<=iLastE) { // try to find corresponding error - AliDCSArray *dcsValE = (AliDCSArray*) arrE->At(iFirstE); - double tstamp1 = dcsValE->GetTimeStamp(); - int tdif = TimeDifference(tstamp,tstamp1); - if (!tdif) { // error matches to value - errVal = dcsValE->GetDouble()[0]; - if (TMath::Abs(errVal) > maxAbsVal) { - AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",errVal,0, rec, maxAbsVal)); - errVal = 0.; - } - iFirstE++; - break; - } - else if (tdif>0) iFirstE++; // error time lags behind, read the next one - else break; // error time is ahead of value, no error associated - } - (*curValD)[dim-1] = errVal; // error - curValD->SetLastSpecial(); // lable the last entry as an error - } - // - fData.Add(curValD); - refs[kNStor]++; - } - if (fkFile2Process) { - delete arr; - delete arrE; - } - return refs[kNStor]; - // -} - -//___________________________________________________________________ -Int_t AliLHCData::ExtractInt(AliDCSArray* dcsArray,Int_t el) const -{ - // extract integer from the dcsArray - int val = -1; - // - int sz = dcsArray->GetNEntries(); - if (sz<=el) return val; - // - if (dcsArray->GetType()==AliDCSArray::kInt) val = dcsArray->GetInt(el); - else if (dcsArray->GetType()==AliDCSArray::kString) { - TObjString *stro = dcsArray->GetStringArray(el); - if (stro) val = stro->GetString().Atoi(); - else AliError(Form("DCSArray TObjString for element %d is missing",el)); - } - else if (dcsArray->GetType()==AliDCSArray::kUInt) val = dcsArray->GetUInt(el); - else AliError(Form("Integer requested from DCSArray of type %d",dcsArray->GetType())); - return val; -} - -//___________________________________________________________________ -Double_t AliLHCData::ExtractDouble(AliDCSArray* dcsArray,Int_t el) const -{ - // extract double from the dcsArray - double val = 0; - // - int sz = dcsArray->GetNEntries(); - if (sz<=el) return val; - // - if (dcsArray->GetType()==AliDCSArray::kDouble) val = dcsArray->GetDouble(el); - else if (dcsArray->GetType()==AliDCSArray::kFloat) val = dcsArray->GetFloat(el); - else if (dcsArray->GetType()==AliDCSArray::kString) { - TObjString *stro = dcsArray->GetStringArray(el); - if (stro) val = stro->GetString().Atof(); - else AliError(Form("DCSArray has TObjString for element %d is missing",el)); - } - else if (dcsArray->GetType()==AliDCSArray::kChar) val = dcsArray->GetChar(el); - else if (dcsArray->GetType()==AliDCSArray::kInt) val = dcsArray->GetInt(el); - else if (dcsArray->GetType()==AliDCSArray::kUInt) val = dcsArray->GetUInt(el); - else AliError(Form("Double requested from DCSArray of type %d",dcsArray->GetType())); - return val; -} - -//___________________________________________________________________ -TString& AliLHCData::ExtractString(AliDCSArray* dcsArray) const -{ - // extract string from the dcsArray - static TString str; - str = ""; - // - int sz = dcsArray->GetNEntries(); - if (dcsArray->GetType()!=AliDCSArray::kString) { - AliError(Form("String requested from DCSArray of type %d",dcsArray->GetType())); - return str; - } - // - for (int i=0;iGetStringArray(i)->GetString(); - if (i(number of records): for 1st record only\n"); - full = kFALSE; - } - TString sdtmn = AliLHCDipValI::TimeAsString(fTMin,utcTime); - TString sdtmx = AliLHCDipValI::TimeAsString(fTMax,utcTime); - printf("Fill#%6d Validity: %s - %s (%s)\n",fFillNumber,sdtmn.Data(),sdtmx.Data(),utcTime ? "UTC":"LOC"); - // - printf("********** SETTINGS FROM RUN CONTROL **********\n"); - // - printf("* %-38s","Injection Scheme"); - PrintAux(full,fRCInjScheme,opts); - // - printf("* %-38s","Beta Star"); - PrintAux(full,fRCBeta,opts); - // - printf("* %-38s","Horisontal Crossing Angle"); - PrintAux(full,fRCAngH,opts); - // - printf("* %-38s","Vertical Crossing Angle"); - PrintAux(full,fRCAngV,opts); - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d filling [- interacts at IR2!] ",ib+1); - PrintAux(full,fBunchConfDecl[ib],opts); - } - // - printf("\n********** MEASURED DATA **********\n"); - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d filling [- interacts at IR2!] ",ib+1); - PrintAux(full,fBunchConfMeas[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d total intensity ",ib+1); - PrintAux(full,fIntensTotal[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d total intensity (bunch average) ",ib+1); - PrintAux(full,fIntensTotalAv[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d intensity per bunch ",ib+1); - PrintAux(full,fIntensPerBunch[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d bunch lengths ",ib+1); - PrintAux(full,fBunchLengths[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d Horisontal emittance ",ib+1); - PrintAux(full,fEmittanceH[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d Vertical emittance ",ib+1); - PrintAux(full,fEmittanceV[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d Horisontal sigma ",ib+1); - PrintAux(full,fBeamSigmaH[ib],opts); - } - // - for (int ib=0;ib<2;ib++) { - printf("* Beam%d Vertical sigma ",ib+1); - PrintAux(full,fBeamSigmaV[ib],opts); - } - // - for (int lr=0;lr<2;lr++) { - printf("* Total luminosity from BRANB_4%c2 ",lr ? 'R':'L'); - PrintAux(full,fLuminTotal[lr],opts); - } - // - for (int lr=0;lr<2;lr++) { - printf("* Luminosity acq.mode, BRANB_4%c2 ",lr ? 'R':'L'); - PrintAux(full,fLuminAcqMode[lr],opts+"bit"); - } - // - for (int lr=0;lr<2;lr++) { - printf("* Luminosity per BC from BRANB_4%c2 ",lr ? 'R':'L'); - PrintAux(full,fLuminPerBC[lr],opts); - } - // - for (int lr=0;lr<2;lr++) { - printf("* Crossing angle, side %c ",lr ? 'R':'L'); - PrintAux(full,fCrossAngle[lr],opts); - } - // - for (int coll=0;collGetSizeTotal(); // dimension of the record - Bool_t isStr = ((AliLHCDipValI*)fData[refs[kStart]])->IsTypeC(); - if ((!isStr && sz>2) || nrec>1) printf("\n"); // long record, open new line - for (int i=0;iPrint(opt); - // -} - -//___________________________________________________________________ -void AliLHCData::Clear(const Option_t *) -{ - // clear all info - fData.Delete(); - fFillNumber = 0; - fTMin = 0; - fTMax = 1e10; - fkFile2Process = 0; - fkMap2Process = 0; - // - for (int i=2;i--;) { - fRCInjScheme[i] = 0; - fRCBeta[i] = 0; - fRCAngH[i] = 0; - fRCAngV[i] = 0; - fLumiAlice[i] = 0; - fBckgAlice[i] = 0; - // - for (int icl=kNCollimators;icl--;) for (int jaw=kNJaws;jaw--;) fCollimators[icl][jaw][i]=0; - // - for (int j=2;j--;) { - fBunchConfDecl[j][i] = 0; - fBunchConfMeas[j][i] = 0; - fBunchLengths[j][i] = 0; - fIntensTotal[j][i] = 0; - fIntensTotalAv[j][i] = 0; - fIntensPerBunch[j][i] = 0; - fCrossAngle[j][i] = 0; - fEmittanceH[j][i] = 0; - fEmittanceV[j][i] = 0; - fBeamSigmaH[j][i] = 0; - fBeamSigmaV[j][i] = 0; - fLuminTotal[j][i] = 0; - fLuminPerBC[j][i] = 0; - fLuminAcqMode[j][i] = 0; - } - } -} - -//___________________________________________________________________ -Int_t AliLHCData::GetNInteractingBunchesMeasured(int i) const -{ - // get number of interacting bunches at IR2 - AliLHCDipValI* rec = GetBunchConfigMeasured(kBeam1,i); - if (!rec) {AliInfo(Form("No record %d found",i)); return -1;} - if (!rec->IsProcessed1()) { AliInfo("Interacting bunches were not marked"); return -1;} - int n = 0; - for (int j=rec->GetSize();j--;) if ( (*rec)[j]<0 ) n++; - return n; -} - -//___________________________________________________________________ -Int_t AliLHCData::GetNInteractingBunchesDeclared(int i) const -{ - // get number of interacting bunches at IR2 - AliLHCDipValI* rec = GetBunchConfigMeasured(kBeam1,i); - if (!rec) {AliInfo(Form("No record %d found",i)); return -1;} - if (!rec->IsProcessed1()) { AliInfo("Interacting bunches were not marked"); return -1; } - int n = 0; - for (int j=rec->GetSize();j--;) if ( (*rec)[j]<0 ) n++; - return n; -} - -//___________________________________________________________________ -Int_t AliLHCData::IsPilotPresent(int i) const -{ - // check in the filling scheme is the pilot bunch is present - AliLHCDipValC* rec = GetInjectionScheme(); - if (!rec) {AliInfo(Form("No record %d found",i)); return -1;} - TString scheme = rec->GetValues(); - return scheme.Contains("wp",TString::kIgnoreCase); -} - -//___________________________________________________________________ -void AliLHCData::FlagInteractingBunches(const Int_t beam1[2],const Int_t beam2[2]) -{ - // assign - sign to interacting bunches - // - for (int ib1=0;ib1GetTimeStamp()); - if (!bm2) continue; - // - int nb1 = bm1->GetSize(); - int nb2 = bm2->GetSize(); - int i1,i2; - for (i1=0;i1SetProcessed1(); - bm2->SetProcessed1(); - } - } -} - -//___________________________________________________________________ -Int_t AliLHCData::GetMeanIntensity(int beamID, Double_t &colliding, Double_t &noncolliding, const TObjArray* bcmasks) const -{ - // get average intensity for all, colliding and non-colliding bunches - // on success returns number of intensity records used (1 per ~10 min) - // If triggered BC masks are provided, calculation is done for Triggered BC only - colliding = noncolliding = -1.; - if (beamID<0||beamID>1) { - AliError(Form("BeamID must be either 0 or 1, %d requested",beamID)); - return -10; - } - // - AliTriggerBCMask *bcMaskBoth=0,*bcMaskSingle=0; - int nbcm = 0; - if (bcmasks && (nbcm=bcmasks->GetEntries())) { - if (nbcm>1) bcMaskBoth = (AliTriggerBCMask*)bcmasks->At(1); - if (nbcm>0 && beamID==kBeam1) bcMaskSingle = (AliTriggerBCMask*)bcmasks->At(0); - else if (nbcm>2 && beamID==kBeam2) bcMaskSingle = (AliTriggerBCMask*)bcmasks->At(2); - // - if (!bcMaskSingle) AliError(Form("Only triggered BSs are requested but %c mask is not provided",beamID ? 'C':'A')); - if (!bcMaskBoth) AliError("Only triggered BSs are requested but B mask is not provided"); - } - else { - AliWarning("No BC masks are provided"); - } - // - int nrec = GetNIntensityPerBunch(beamID); - if (nrec<1) return -1; - AliLHCDipValI *conf = GetBunchConfigMeasured(beamID); - if (!conf) conf = GetBunchConfigDeclared(beamID); - if (!conf) return -2; - int nb = conf->GetSize(); - // - for (int irec=0;irecIsA() == AliLHCDipValD::Class()) {rIntD=(AliLHCDipValD*)rIntF; rIntF=0;} - if (!rIntF && !rIntD) { - AliError(Form("Failed to get GetIntensityPerBunch(%d,%d)",beamID,irec)); - continue; - } - for (int ib=0;ibGetValue(ib); - else if (rIntD) val = rIntD->GetValue(ib); - if (val<0) continue; - int bID = conf->GetValue(ib); - // check if this is a triggered bunch - int bcID = GetBCId(bID, beamID); - if (bID<0) { // interacting - if (bcMaskBoth && bcMaskBoth->GetMask(bcID)) continue; // masked - colliding += val; - } - else { - if (bcMaskSingle && bcMaskSingle->GetMask(bcID)) continue; // masked - noncolliding += val; - } - } - } - colliding /= nrec; - noncolliding /= nrec; - return nrec; -} - -//___________________________________________________________________ -void AliLHCData::FillLumiAlice(Int_t nrec, Int_t* timeArr, Double_t* valArr) -{ - // Create a record for lumi integrated from the beginning of fill - // We need dedicated method since this info comes from Alice (not LHCDip) as instantaneous values - // and is retrofitted for past runs - fLumiAlice[kStart] = fData.GetEntriesFast(); - fLumiAlice[kNStor] = 0; - if (nrec<2 || !timeArr || !valArr) return; - double tprv,period,currTime; - if ((currTime=double(UInt_t(timeArr[0])))>fTMin) { - AliError(Form("TimeStamp of 1st record: %s > TimeStamp of SOR: %s, STOP", - AliLHCDipValI::TimeAsString(currTime),AliLHCDipValI::TimeAsString(fTMin))); - return; - } - // - if ((tprv=double(UInt_t(timeArr[nrec-1])))0) period = currTime - tprv; - if (currTime-period>fTMax) continue; - lumiInt += valArr[i]*period; - // printf("%d %.2f V:%f Int:%f\n",i,period,valArr[i],lumiInt); - if (currTime+periodfTMin) { - AliError(Form("TimeStamp of 1st record: %s > TimeStamp of SOR: %s, STOP", - AliLHCDipValI::TimeAsString(currTime),AliLHCDipValI::TimeAsString(fTMin))); - return; - } - // - if ((tprv=double(UInt_t(timeArr[nrec-1])))0) period = currTime - tprv; - if (currTime-period>fTMax) continue; - bckgInt += valArr[i]*period; - if (currTime+period0 ? idx-1:idx+1); - if (!rec || !rec1) return -1; - double dt = rec->GetTimeStamp() - rec1->GetTimeStamp(); - return TMath::Abs(dt)>1e-6 ? (rec->GetValue()-rec1->GetValue())/dt : -1; -} - -//_____________________________________________________________________________ -Float_t AliLHCData::GetBckgInstAlice(Double_t tStamp) const -{ - // get closest in time value on inst luminosity - int idx = FindEntryValidFor(fBckgAlice[kStart],fBckgAlice[kNStor],tStamp); - if (idx<0) return -1; - AliLHCDipValF *rec=GetBckgAliceRecord(idx),*rec1=GetBckgAliceRecord(idx>0 ? idx-1:idx+1); - if (!rec || !rec1) return -1; - double dt = rec->GetTimeStamp() - rec1->GetTimeStamp(); - return TMath::Abs(dt)>1e-6 ? (rec->GetValue()-rec1->GetValue())/dt : -1; -} - -//_____________________________________________________________________________ -TGraph* AliLHCData::ExportGraph(Int_t *coord, Int_t elID) const -{ - // export time/values to graph: - // coord: int[2] array with 1st entry and number of entries stored, obtained via GetOffs... method - // elID - element of the AliLHCDipValT array to extract - if (!coord || coord[1]<1) return 0; - TGraph* gr = new TGraph(coord[1]); - for (int i=0;iIsA()==AliLHCDipValD::Class()) { - AliLHCDipValD* objD = (AliLHCDipValD*)obj; - gr->SetPoint(i,objD->GetTimeStamp(),objD->GetValue(elID)); - } - else if (obj->IsA()==AliLHCDipValF::Class()) { - AliLHCDipValF* objF = (AliLHCDipValF*)obj; - gr->SetPoint(i,objF->GetTimeStamp(),objF->GetValue(elID)); - } - else if (obj->IsA()==AliLHCDipValI::Class()) { - AliLHCDipValI* objI = (AliLHCDipValI*)obj; - gr->SetPoint(i,objI->GetTimeStamp(),objI->GetValue(elID)); - } - else if (obj->IsA()==AliLHCDipValC::Class()) { - AliLHCDipValC* objC = (AliLHCDipValC*)obj; - gr->SetPoint(i,objC->GetTimeStamp(),objC->GetValue(elID)); - } - else { - AliError(Form("Graph cannot be exported for records of type %s",obj->IsA()->GetName())); - } - } - return gr; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + * * + **************************************************************************/ + +/******************************************************************************** +* * +* AliLHCData: summary of the LHC related information from LHC DIP. * +* Created from the TMap provided by the AliLHCReader with optional beginning * +* * +* The data are (wrapped in the AliLHCDipValT): * +* made of TimeStamp (double) and array of values * +* * +* Multiple entries for each type of data are possible. To obtaine number of * +* records (with distinct timestamp) for give type od records use: * +* int GetNBunchConfigMeasured(int beam) (with beam=0,1) etc. * +* * +* To get i-th entry, use brec= AliLHCDipValI* GetBunchConfigMeasured(bm,i); * +* Note: exact type of templated AliLHCDipValT pointer depends on the record * +* type, concult getters to know it. * +* * +* Then, once the pointer is obtained, details can be accessed: * +* int nBunches = brec->GetSize(); * +* for (int i=0;i +#include +#include + +ClassImp(AliLHCData) + +const Char_t* AliLHCData::fgkDCSNames[] = { + "LHC_IntensityBeam%1d_totalIntensity", + "LHC_BeamIntensityPerBunchBeam%1d_averageBeamIntensity", + "LHC_BeamIntensityPerBunchBeam%1d_Average_BunchIntensities", + // + "LHC_LumAverageBRANB_4%c2_acqMode", + "LHC_LumAverageBRANB_4%c2_meanLuminosity", + "LHC_LumAverageBRANB_4%c2_meanLuminosityError", + "LHC_BeamLuminosityPerBunchBRANB_4%c2_Average_BunchLuminosity", + "LHC_BeamLuminosityPerBunchBRANB_4%c2_BunchLuminosityError", + "LHC_LumAverageBRANB_4%c2_meanCrossingAngle", + "LHC_LumAverageBRANB_4%c2_meanCrossingAngleError", + "LHC_CirculatingBunchConfig_Beam%d", + "LHC_FillNumber", + // + "LHC_BunchLengthBeam%1d_nBunches", + "LHC_BunchLengthBeam%1d_bunchesLenghts", + "LHC_BunchLengthBeam%1d_filledBuckets", + // + "LHC_RunControl_ActiveInjectionScheme", + "LHC_RunControl_BetaStar", + "LHC_RunControl_IP2_Xing_Murad", + "LHC_RunControl_IP2_ALICE_Murad", + + "LHC_BeamSizeBeam%1d_acqMode", + "LHC_BeamSizeBeam%1d_sigmaH", + "LHC_BeamSizeBeam%1d_sigmaV", + "LHC_BeamSizeBeam%1d_emittanceH", + "LHC_BeamSizeBeam%1d_emittanceV", + "LHC_BeamSizeBeam%1d_errorSigmaH", + "LHC_BeamSizeBeam%1d_errorSigmaV", + // + "LHC_CollimatorPos_%s_lvdt_%s", + "ALICE_LumiIntFill", + "ALICE_BckgIntFill" +}; + +const Char_t* AliLHCData::fgkDCSColNames[] = { + "TCTVB_4L2", + "TCTVB_4R2", + "TCLIA_4R2" +}; + +const Char_t* AliLHCData::fgkDCSColJaws[] = { + "gap_downstream","gap_upstream","left_downstream", + "left_upstream","right_downstream","right_upstream"}; + +//___________________________________________________________________ +AliLHCData::AliLHCData(const TMap* dcsMap, double tmin, double tmax) + : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(0),fkMap2Process(0) +{ + FillData(dcsMap,tmin,tmax); +} + +//___________________________________________________________________ +AliLHCData::AliLHCData(const Char_t* dcsFile, double tmin, double tmax) + : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(dcsFile),fkMap2Process(0) +{ + FillData(dcsFile,tmin,tmax); +} + +//___________________________________________________________________ +Bool_t AliLHCData::FillData(const TMap* dcsMap,double tmin, double tmax) +{ + // process DCS map and fill all fields. + Clear(); + fkMap2Process = dcsMap; + FillData(tmin,tmax); + return kTRUE; +} + +//___________________________________________________________________ +Bool_t AliLHCData::FillData(const Char_t* dcsFile,double tmin, double tmax) +{ + // process DCS file and fill all fields. + Clear(); + fkFile2Process = dcsFile; + FillData(tmin,tmax); + return kTRUE; +} + +//___________________________________________________________________ +Bool_t AliLHCData::FillData(double tmin, double tmax) +{ + // process DCS map and fill all fields. + // Accept only entries with timestamp between tmin and tmax + // + char buff[100],buff1[100]; + // + SetTMin(tmin); + SetTMax(tmax); + // + // -------------------------- extract Fill Number + int iFirst=0,iLast=0; + TObjArray* arr = GetDCSEntry(fgkDCSNames[kFillNum],iFirst,iLast,fTMin,fTMax); + if (arr) SetFillNumber( ExtractInt( (AliDCSArray*)arr->At(iFirst), 0) ); + if (fkFile2Process) delete arr; // array was created on demand + // + for (int ibm=0;ibm<2;ibm++) { + // + snprintf(buff,99,fgkDCSNames[kBunchConf],ibm+1); // ----- declared bunch configuration + FillBunchConfig(fBunchConfDecl[ibm], buff); + // + snprintf(buff,99,fgkDCSNames[kBunchLgtFillB],ibm+1); // ----- measured bunch configuration + FillBunchConfig(fBunchConfMeas[ibm], buff); + // + snprintf(buff,99,fgkDCSNames[kBunchLgt],ibm+1); // ----- measured bunch lenghts + FillBunchInfo(fBunchLengths[ibm],buff,ibm,kFALSE); + // + snprintf(buff,99,fgkDCSNames[kIntBunchAv],ibm+1); // ----- B-by-B intensities + FillBunchInfo(fIntensPerBunch[ibm],buff,ibm,kTRUE); + // + // + snprintf(buff,99,fgkDCSNames[kIntTot],ibm+1); // ----- total intensities for beam 1 and 2 + FillScalarRecord(fIntensTotal[ibm], buff); + // + snprintf(buff,99,fgkDCSNames[kIntTotAv],ibm+1); // ----- total intensities for beam 1 and 2 from B-by-B average + FillScalarRecord(fIntensTotalAv[ibm], buff); + // + snprintf(buff,99,fgkDCSNames[kBeamSzEmittH],ibm+1); // ----- H emittance for beam 1 and 2 + FillScalarRecord(fEmittanceH[ibm], buff); + // + snprintf(buff,99,fgkDCSNames[kBeamSzEmittV],ibm+1); // ----- V emittance for beam 1 and 2 + FillScalarRecord(fEmittanceV[ibm], buff); + // + snprintf(buff,99 ,fgkDCSNames[kBeamSzSigH], ibm+1); // ----- H sigmas and errors for beam 1 and 2 + snprintf(buff1,99,fgkDCSNames[kBeamSzSigHErr],ibm+1); + FillScalarRecord(fBeamSigmaH[ibm], buff, buff1); + // + snprintf(buff,99 ,fgkDCSNames[kBeamSzSigV], ibm+1); // ----- V sigmas and errors for beam 1 and 2 + snprintf(buff1,99,fgkDCSNames[kBeamSzSigVErr],ibm+1); + FillScalarRecord(fBeamSigmaV[ibm], buff, buff1); + // + } + // + FlagInteractingBunches(fBunchConfMeas[0],fBunchConfMeas[1]); + FlagInteractingBunches(fBunchConfDecl[0],fBunchConfDecl[1]); + // + for (int ilr=0;ilr<2;ilr++) { + // + snprintf(buff,99 ,fgkDCSNames[kLumBunch], ilr ? 'R':'L'); // ---- BC-by-BC luminosity at IP2 and its error + snprintf(buff1,99,fgkDCSNames[kLumBunchErr], ilr ? 'R':'L'); + FillBCLuminosities(fLuminPerBC[ilr], buff, buff1, 0); // BRAN L uses beam2 as a reference, BRAN R - beam1 + // + snprintf(buff,99 ,fgkDCSNames[kLumTot] , ilr ? 'R':'L'); // ---- total luminosity at IP2 and its error + snprintf(buff1,99,fgkDCSNames[kLumTotErr], ilr ? 'R':'L'); + FillScalarRecord(fLuminTotal[ilr], buff, buff1); + // + snprintf(buff,99 ,fgkDCSNames[kLumAcqMode], ilr ? 'R':'L'); // ---- luminosity acquisition mode + FillAcqMode(fLuminAcqMode[ilr], buff); + // + snprintf(buff,99, fgkDCSNames[kLumCrossAng] , ilr ? 'R':'L'); //----- crossing angle at IP2 and its error + snprintf(buff1,99,fgkDCSNames[kLumCrossAngErr], ilr ? 'R':'L'); + FillScalarRecord(fCrossAngle[ilr], buff, buff1); + // + } + // + for (int icl=0;iclGetValue(key); + else if (fkFile2Process) { + AliLHCReader rd; + arr = rd.ReadSingleLHCDP(fkFile2Process,key); + } + else { + AliError("Neither DCS map nor DCS filename are set"); + return 0; + } + // + if (!arr || !arr->GetEntriesFast()) { + AliWarning(Form("No data for %s",key)); + if (fkMap2Process) delete arr; // created on demand + return 0; + } + int ntot = arr->GetEntriesFast(); + // + // search 1st entry before or at tmin + AliDCSArray* ent = 0; + Bool_t found = kFALSE; + for (entry=0;entryAt(entry); + if (ent->GetTimeStamp()>=tmin-kMarginSOR && ent->GetTimeStamp()<=tmax+kMarginEOR) { + found = kTRUE; + if (ent->GetTimeStamp()>tmin) break; + } + } + if (!found) { + entry = -1; + TString str; + str += AliLHCDipValF::TimeAsString(tmin); + str += " : "; + str += AliLHCDipValF::TimeAsString(tmax); + AliWarning(Form("All entries for %s are outside the requested range:\n%s",key,str.Data())); + if (fkMap2Process) delete arr; // created on demand + return 0; + } + if (entry>0) entry--; + // + // search last entry at or after tmin + ent = 0; + for (last=entry;lastAt(last); + if (ent->GetTimeStamp()>tmax) break; + } + if (last == ntot) last--; + else if (ent->GetTimeStamp()>tmax+kMarginEOR) last--; + // + return arr; +} + +//___________________________________________________________________ +Int_t AliLHCData::TimeDifference(double v1,double v2,double tol) const +{ + // return 0 if the times are the same within the tolerance + // 1 if v1>v2 + // -1 if v1tol) return 1; + if (v1<-tol) return -1; + return 0; +} + +//___________________________________________________________________ +Bool_t AliLHCData::GoodPairID(int beam) const +{ + // check for correct beam identifier + if (beam>kBeam2||beam<0) {AliError(Form("BeamID can be 0 or 1, %d requested",beam)); return kFALSE;} + return kTRUE; +} + +//___________________________________________________________________ +AliLHCDipValI* AliLHCData::GetBunchConfigMeasured(int beam,double tstamp) const +{ + // find measured bunch configuration valid for given tstamp + if (!GoodPairID(beam)) return 0; + return (AliLHCDipValI*)FindRecValidFor(fBunchConfMeas[beam][kStart],fBunchConfMeas[beam][kNStor],tstamp); +} + +//___________________________________________________________________ +AliLHCDipValI* AliLHCData::GetBunchConfigDeclared(int beam,double tstamp) const +{ + // find declared bunch configuration valid for given tstamp + if (!GoodPairID(beam)) return 0; + return (AliLHCDipValI*)FindRecValidFor(fBunchConfDecl[beam][kStart],fBunchConfDecl[beam][kNStor],tstamp); +} + +//___________________________________________________________________ +TObject* AliLHCData::FindRecValidFor(int start,int nrec, double tstamp) const +{ + // find record within this limits valid for given tstamp (i.e. the last one before or equal to tstamp) + AliLHCDipValI *prevObj = 0; + for (int i=0;iGetTimeStamp())<=0) break; + prevObj = curObj; + } + if (!prevObj && nrec>0) prevObj = (AliLHCDipValI*)fData[start]; // if no exact match, return the 1st one + return prevObj; +} + +//___________________________________________________________________ +Int_t AliLHCData::FillScalarRecord(int refs[2], const char* rec, const char* recErr, Double_t maxAbsVal) +{ + // fill record for scalar value, optionally accompanied by measurement error + // + AliInfo(Form("Acquiring record: %s",rec)); + // + TObjArray *arr=0,*arrE=0; + Int_t iLast=0,iLastE=0,iFirst=0,iFirstE=0; + // + refs[kStart] = fData.GetEntriesFast(); + refs[kNStor] = 0; + // + if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; + // + int dim = 1; + if (recErr) { + arrE = GetDCSEntry(recErr,iFirstE,iLastE,fTMin,fTMax); + dim += 1; + } + // + // Bool_t last = kFALSE; + while (iFirst<=iLast) { + AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); + double tstamp = dcsVal->GetTimeStamp(); + // + AliLHCDipValF* curValD = new AliLHCDipValF(dim,tstamp); // start new period + double vcheck = ExtractDouble(dcsVal,0); // value + if (TMath::Abs(vcheck) > maxAbsVal) { + AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, 0, rec, maxAbsVal)); + vcheck = 0.; + } + (*curValD)[0] = vcheck; + // + if (recErr) { + double errVal = -1; + while (iFirstE<=iLastE) { // try to find corresponding error + AliDCSArray *dcsValE = (AliDCSArray*) arrE->At(iFirstE); + double tstampE = dcsValE->GetTimeStamp(); + int tdif = TimeDifference(tstamp,tstampE); + if (!tdif) { // error matches to value + errVal = ExtractDouble(dcsVal,0); // value + if (TMath::Abs(errVal) > maxAbsVal) { + AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",errVal, 0, recErr, maxAbsVal)); + errVal = 0.; + } + iFirstE++; + break; + } + else if (tdif>0) iFirstE++; // error time lags behind, read the next one + else break; // error time is ahead of value, no error associated + } + (*curValD)[dim-1] = errVal; // error + curValD->SetLastSpecial(); // lable the last entry as an error + } + // + fData.Add(curValD); + refs[kNStor]++; + // if (last) break; + } + // + if (fkFile2Process) { + delete arr; + delete arrE; + } + return refs[kNStor]; +} + +//___________________________________________________________________ +Int_t AliLHCData::FillBunchConfig(int refs[2],const char* rec) +{ + // fill record for bunch configuration + // + AliInfo(Form("Acquiring record: %s",rec)); + TObjArray *arr; + Int_t iLast,iFirst; + // + refs[kStart] = fData.GetEntriesFast(); + refs[kNStor] = 0; + // + if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; + // + AliLHCDipValI* prevRecI=0; + // + while (iFirst<=iLast) { + AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); + double tstamp = dcsVal->GetTimeStamp(); + // + int bucket=0, nbunch=0, ndiff=0; + int nSlots = dcsVal->GetNEntries(); // count number of actual bunches (non-zeros) + int* dcsArr = dcsVal->GetInt(); + while(nbunchGetSize()>nbunch && bucket!=prevRecI->GetValue(nbunch)) ndiff++; + nbunch++; + } + if (!nbunch) AliWarning(Form("%s record is present but empty: no beam?",rec)); + if (prevRecI && !ndiff && nbunch==prevRecI->GetSize()) continue; // record similar to previous one + AliLHCDipValI* curValI = new AliLHCDipValI(nbunch,tstamp); + for (int i=nbunch;i--;) (*curValI)[i] = dcsArr[i]; + fData.Add(curValI); + refs[kNStor]++; + prevRecI = curValI; + } + // + if (fkFile2Process) delete arr; + return refs[kNStor]; +} + +//___________________________________________________________________ +Int_t AliLHCData::FillAcqMode(int refs[2],const char* rec) +{ + // fill acquisition mode + // + AliInfo(Form("Acquiring record: %s",rec)); + TObjArray *arr; + Int_t iLast,iFirst; + // + refs[kStart] = fData.GetEntriesFast(); + refs[kNStor] = 0; + // + if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; + // + AliLHCDipValI* prevRecI=0; + while (iFirst<=iLast) { + AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); + double tstamp = dcsVal->GetTimeStamp(); + // + int nSlots = dcsVal->GetNEntries(); + if (nSlots<1) continue; + int acqMode = dcsVal->GetInt()[0]; + if (prevRecI && (*prevRecI)[0] == acqMode) continue; // record similar to previous one + AliLHCDipValI* curValI = new AliLHCDipValI(1,tstamp); + (*curValI)[0] = acqMode; + fData.Add(curValI); + refs[kNStor]++; + prevRecI = curValI; + } + // + if (fkFile2Process) delete arr; + return refs[kNStor]; +} + +//___________________________________________________________________ +Int_t AliLHCData::FillStringRecord(int refs[2],const char* rec) +{ + // fill record with string value + // + AliInfo(Form("Acquiring record: %s",rec)); + TString prevRec; + TObjArray *arr; + Int_t iLast,iFirst; + // + refs[kStart] = fData.GetEntriesFast(); + refs[kNStor] = 0; + // + if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; + // + while (iFirst<=iLast) { + AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); + double tstamp = dcsVal->GetTimeStamp(); + // + TString &str = ExtractString(dcsVal); + if (!prevRec.IsNull()) {if (str == prevRec) continue;} // skip similar record + else prevRec = str; + // + AliLHCDipValC* curValS = new AliLHCDipValC(1,tstamp); + curValS->SetValues(str.Data(),str.Length()+1); + // + fData.Add(curValS); + refs[kNStor]++; + } + if (fkFile2Process) delete arr; + return refs[kNStor]; +} + +//___________________________________________________________________ +Int_t AliLHCData::FillBunchInfo(int refs[2],const char* rec, int ibm, Bool_t inRealSlots, Double_t maxAbsVal) +{ + // fill bunch properties for beam ibm + // if inRealSlots = true, then the value is taken from bunchRFbucket/10, otherwise, the value + // for the i-th bunch is taken from the i-th element + // + AliInfo(Form("Acquiring record: %s",rec)); + TObjArray *arr; + Int_t iLast,iFirst; + // + refs[kStart] = fData.GetEntriesFast(); + refs[kNStor] = 0; + // + if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; + // + while (iFirst<=iLast) { + AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); + double tstamp = dcsVal->GetTimeStamp(); + // + AliLHCDipValI *bconf = GetBunchConfigMeasured(ibm,tstamp); + if (!bconf) { + AliWarning(Form("Mearured bunch configuration for beam %d at t=%.1f is not available, trying declared one",ibm+1,tstamp)); + bconf = GetBunchConfigDeclared(ibm,tstamp); + } + if (!bconf) { + AliWarning(Form("Declared bunch configuration for beam %d at t=%.1f is not available, skip this record",ibm+1,tstamp)); + return -1; + } + int nSlots = dcsVal->GetNEntries(); // count number of actual bunches (non-zeros) + int nbunch = bconf->GetSize(); + if (nbunch>nSlots) { + AliWarning(Form("More N bunches than slots in %s at time %.1f",rec,tstamp)); + continue; + } + double* dcsArr = dcsVal->GetDouble(); + AliLHCDipValF* curValD = new AliLHCDipValF(nbunch,tstamp); + for (int i=nbunch;i--;) { + int ind = inRealSlots ? (*bconf)[i]/10 : i; + if (ind>nSlots) { + AliError(Form("Bunch %d refers to wrong slot %d, set to -1",i,(*bconf)[i])); + (*curValD)[i] = -1; + } + else { + double vcheck = dcsArr[ind]; + if (TMath::Abs(vcheck) > maxAbsVal) { + AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, ind, rec, maxAbsVal)); + vcheck = 0.; + } + (*curValD)[i] = vcheck; + } + } + fData.Add(curValD); + refs[kNStor]++; + } + if (fkFile2Process) delete arr; + return refs[kNStor]; + // +} + +//___________________________________________________________________ +Int_t AliLHCData::FillBCLuminosities(int refs[2],const char* rec, const char* recErr, int useBeam, Double_t maxAbsVal) +{ + // fill luminosities per bunch crossing + // + AliInfo(Form("Acquiring record: %s",rec)); + TObjArray *arr,*arrE=0; + Int_t iLast=0,iLastE=0,iFirst=0,iFirstE=0; + // + refs[kStart] = fData.GetEntriesFast(); + refs[kNStor] = 0; + // + if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1; + // + while (iFirst<=iLast) { + AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++); + double tstamp = dcsVal->GetTimeStamp(); + // + AliLHCDipValI *bconf; + bconf = GetBunchConfigMeasured(useBeam,tstamp); // luminosities are stored according to beam bunches + if (!bconf) { + AliWarning(Form("Mearured bunch configuration for beam%d at t=%.1f is not available, trying declared one",useBeam,tstamp)); + bconf = GetBunchConfigDeclared(useBeam,tstamp); + } + if (!bconf) { + AliWarning(Form("Declared bunch configuration for beam%i at t=%.1f is not available, skip this record",useBeam,tstamp)); + return -1; + } + int nSlots = dcsVal->GetNEntries(); // count number of actual bunches (non-zeros) + int nbunch = bconf->GetSize(); + double* dcsArr = dcsVal->GetDouble(); + // + if (nbunch>nSlots) { + AliWarning(Form("More N bunches than slots in %s at time %.1f",rec,tstamp)); + continue; + } + int dim = 0; + if (!bconf->IsProcessed1()) { + AliWarning(Form("Bunch conf. for beam%d has no marked interacting bunches, store all luminosity for all filled bunches",useBeam)); + dim = nbunch; + } + else { // count number of interacting bunches + for (int i=nbunch;i--;) if ((*bconf)[i]<0) dim++; + } + // + if (recErr) { + arrE=GetDCSEntry(recErr,iFirstE,iLastE,fTMin,fTMax); + dim += 1; + } + AliLHCDipValF* curValD = new AliLHCDipValF(dim,tstamp); + int cnt = 0; + for (int i=0;iIsProcessed1() && slot>0) continue; + // + int ind = TMath::Abs(slot)/10; + if (ind>nSlots) { + AliError(Form("Bunch %d refers to wrong slot %d, set to -1",cnt,slot)); + (*curValD)[cnt] = -1; + } + else { + double vcheck = dcsArr[ind]; + if (TMath::Abs(vcheck) > maxAbsVal) { + AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, ind, rec, maxAbsVal)); + vcheck = 0.; + } + (*curValD)[i] = vcheck; + } + cnt++; + } + // + if (recErr) { + double errVal = -1; + while (iFirstE<=iLastE) { // try to find corresponding error + AliDCSArray *dcsValE = (AliDCSArray*) arrE->At(iFirstE); + double tstamp1 = dcsValE->GetTimeStamp(); + int tdif = TimeDifference(tstamp,tstamp1); + if (!tdif) { // error matches to value + errVal = dcsValE->GetDouble()[0]; + if (TMath::Abs(errVal) > maxAbsVal) { + AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",errVal,0, rec, maxAbsVal)); + errVal = 0.; + } + iFirstE++; + break; + } + else if (tdif>0) iFirstE++; // error time lags behind, read the next one + else break; // error time is ahead of value, no error associated + } + (*curValD)[dim-1] = errVal; // error + curValD->SetLastSpecial(); // lable the last entry as an error + } + // + fData.Add(curValD); + refs[kNStor]++; + } + if (fkFile2Process) { + delete arr; + delete arrE; + } + return refs[kNStor]; + // +} + +//___________________________________________________________________ +Int_t AliLHCData::ExtractInt(AliDCSArray* dcsArray,Int_t el) const +{ + // extract integer from the dcsArray + int val = -1; + // + int sz = dcsArray->GetNEntries(); + if (sz<=el) return val; + // + if (dcsArray->GetType()==AliDCSArray::kInt) val = dcsArray->GetInt(el); + else if (dcsArray->GetType()==AliDCSArray::kString) { + TObjString *stro = dcsArray->GetStringArray(el); + if (stro) val = stro->GetString().Atoi(); + else AliError(Form("DCSArray TObjString for element %d is missing",el)); + } + else if (dcsArray->GetType()==AliDCSArray::kUInt) val = dcsArray->GetUInt(el); + else AliError(Form("Integer requested from DCSArray of type %d",dcsArray->GetType())); + return val; +} + +//___________________________________________________________________ +Double_t AliLHCData::ExtractDouble(AliDCSArray* dcsArray,Int_t el) const +{ + // extract double from the dcsArray + double val = 0; + // + int sz = dcsArray->GetNEntries(); + if (sz<=el) return val; + // + if (dcsArray->GetType()==AliDCSArray::kDouble) val = dcsArray->GetDouble(el); + else if (dcsArray->GetType()==AliDCSArray::kFloat) val = dcsArray->GetFloat(el); + else if (dcsArray->GetType()==AliDCSArray::kString) { + TObjString *stro = dcsArray->GetStringArray(el); + if (stro) val = stro->GetString().Atof(); + else AliError(Form("DCSArray has TObjString for element %d is missing",el)); + } + else if (dcsArray->GetType()==AliDCSArray::kChar) val = dcsArray->GetChar(el); + else if (dcsArray->GetType()==AliDCSArray::kInt) val = dcsArray->GetInt(el); + else if (dcsArray->GetType()==AliDCSArray::kUInt) val = dcsArray->GetUInt(el); + else AliError(Form("Double requested from DCSArray of type %d",dcsArray->GetType())); + return val; +} + +//___________________________________________________________________ +TString& AliLHCData::ExtractString(AliDCSArray* dcsArray) const +{ + // extract string from the dcsArray + static TString str; + str = ""; + // + int sz = dcsArray->GetNEntries(); + if (dcsArray->GetType()!=AliDCSArray::kString) { + AliError(Form("String requested from DCSArray of type %d",dcsArray->GetType())); + return str; + } + // + for (int i=0;iGetStringArray(i)->GetString(); + if (i(number of records): for 1st record only\n"); + full = kFALSE; + } + TString sdtmn = AliLHCDipValI::TimeAsString(fTMin,utcTime); + TString sdtmx = AliLHCDipValI::TimeAsString(fTMax,utcTime); + printf("Fill#%6d Validity: %s - %s (%s)\n",fFillNumber,sdtmn.Data(),sdtmx.Data(),utcTime ? "UTC":"LOC"); + // + printf("********** SETTINGS FROM RUN CONTROL **********\n"); + // + printf("* %-38s","Injection Scheme"); + PrintAux(full,fRCInjScheme,opts); + // + printf("* %-38s","Beta Star"); + PrintAux(full,fRCBeta,opts); + // + printf("* %-38s","Horisontal Crossing Angle"); + PrintAux(full,fRCAngH,opts); + // + printf("* %-38s","Vertical Crossing Angle"); + PrintAux(full,fRCAngV,opts); + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d filling [- interacts at IR2!] ",ib+1); + PrintAux(full,fBunchConfDecl[ib],opts); + } + // + printf("\n********** MEASURED DATA **********\n"); + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d filling [- interacts at IR2!] ",ib+1); + PrintAux(full,fBunchConfMeas[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d total intensity ",ib+1); + PrintAux(full,fIntensTotal[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d total intensity (bunch average) ",ib+1); + PrintAux(full,fIntensTotalAv[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d intensity per bunch ",ib+1); + PrintAux(full,fIntensPerBunch[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d bunch lengths ",ib+1); + PrintAux(full,fBunchLengths[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d Horisontal emittance ",ib+1); + PrintAux(full,fEmittanceH[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d Vertical emittance ",ib+1); + PrintAux(full,fEmittanceV[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d Horisontal sigma ",ib+1); + PrintAux(full,fBeamSigmaH[ib],opts); + } + // + for (int ib=0;ib<2;ib++) { + printf("* Beam%d Vertical sigma ",ib+1); + PrintAux(full,fBeamSigmaV[ib],opts); + } + // + for (int lr=0;lr<2;lr++) { + printf("* Total luminosity from BRANB_4%c2 ",lr ? 'R':'L'); + PrintAux(full,fLuminTotal[lr],opts); + } + // + for (int lr=0;lr<2;lr++) { + printf("* Luminosity acq.mode, BRANB_4%c2 ",lr ? 'R':'L'); + PrintAux(full,fLuminAcqMode[lr],opts+"bit"); + } + // + for (int lr=0;lr<2;lr++) { + printf("* Luminosity per BC from BRANB_4%c2 ",lr ? 'R':'L'); + PrintAux(full,fLuminPerBC[lr],opts); + } + // + for (int lr=0;lr<2;lr++) { + printf("* Crossing angle, side %c ",lr ? 'R':'L'); + PrintAux(full,fCrossAngle[lr],opts); + } + // + for (int coll=0;collGetSizeTotal(); // dimension of the record + Bool_t isStr = ((AliLHCDipValI*)fData[refs[kStart]])->IsTypeC(); + if ((!isStr && sz>2) || nrec>1) printf("\n"); // long record, open new line + for (int i=0;iPrint(opt); + // +} + +//___________________________________________________________________ +void AliLHCData::Clear(const Option_t *) +{ + // clear all info + fData.Delete(); + fFillNumber = 0; + fTMin = 0; + fTMax = 1e10; + fkFile2Process = 0; + fkMap2Process = 0; + // + for (int i=2;i--;) { + fRCInjScheme[i] = 0; + fRCBeta[i] = 0; + fRCAngH[i] = 0; + fRCAngV[i] = 0; + fLumiAlice[i] = 0; + fBckgAlice[i] = 0; + // + for (int icl=kNCollimators;icl--;) for (int jaw=kNJaws;jaw--;) fCollimators[icl][jaw][i]=0; + // + for (int j=2;j--;) { + fBunchConfDecl[j][i] = 0; + fBunchConfMeas[j][i] = 0; + fBunchLengths[j][i] = 0; + fIntensTotal[j][i] = 0; + fIntensTotalAv[j][i] = 0; + fIntensPerBunch[j][i] = 0; + fCrossAngle[j][i] = 0; + fEmittanceH[j][i] = 0; + fEmittanceV[j][i] = 0; + fBeamSigmaH[j][i] = 0; + fBeamSigmaV[j][i] = 0; + fLuminTotal[j][i] = 0; + fLuminPerBC[j][i] = 0; + fLuminAcqMode[j][i] = 0; + } + } +} + +//___________________________________________________________________ +Int_t AliLHCData::GetNInteractingBunchesMeasured(int i) const +{ + // get number of interacting bunches at IR2 + AliLHCDipValI* rec = GetBunchConfigMeasured(kBeam1,i); + if (!rec) {AliInfo(Form("No record %d found",i)); return -1;} + if (!rec->IsProcessed1()) { AliInfo("Interacting bunches were not marked"); return -1;} + int n = 0; + for (int j=rec->GetSize();j--;) if ( (*rec)[j]<0 ) n++; + return n; +} + +//___________________________________________________________________ +Int_t AliLHCData::GetNInteractingBunchesDeclared(int i) const +{ + // get number of interacting bunches at IR2 + AliLHCDipValI* rec = GetBunchConfigMeasured(kBeam1,i); + if (!rec) {AliInfo(Form("No record %d found",i)); return -1;} + if (!rec->IsProcessed1()) { AliInfo("Interacting bunches were not marked"); return -1; } + int n = 0; + for (int j=rec->GetSize();j--;) if ( (*rec)[j]<0 ) n++; + return n; +} + +//___________________________________________________________________ +Int_t AliLHCData::IsPilotPresent(int i) const +{ + // check in the filling scheme is the pilot bunch is present + AliLHCDipValC* rec = GetInjectionScheme(); + if (!rec) {AliInfo(Form("No record %d found",i)); return -1;} + TString scheme = rec->GetValues(); + return scheme.Contains("wp",TString::kIgnoreCase); +} + +//___________________________________________________________________ +void AliLHCData::FlagInteractingBunches(const Int_t beam1[2],const Int_t beam2[2]) +{ + // assign - sign to interacting bunches + // + for (int ib1=0;ib1GetTimeStamp()); + if (!bm2) continue; + // + int nb1 = bm1->GetSize(); + int nb2 = bm2->GetSize(); + int i1,i2; + for (i1=0;i1SetProcessed1(); + bm2->SetProcessed1(); + } + } +} + +//___________________________________________________________________ +Int_t AliLHCData::GetMeanIntensity(int beamID, Double_t &colliding, Double_t &noncolliding, const TObjArray* bcmasks) const +{ + // get average intensity for all, colliding and non-colliding bunches + // on success returns number of intensity records used (1 per ~10 min) + // If triggered BC masks are provided, calculation is done for Triggered BC only + colliding = noncolliding = -1.; + if (beamID<0||beamID>1) { + AliError(Form("BeamID must be either 0 or 1, %d requested",beamID)); + return -10; + } + // + AliTriggerBCMask *bcMaskBoth=0,*bcMaskSingle=0; + int nbcm = 0; + if (bcmasks && (nbcm=bcmasks->GetEntries())) { + if (nbcm>1) bcMaskBoth = (AliTriggerBCMask*)bcmasks->At(1); + if (nbcm>0 && beamID==kBeam1) bcMaskSingle = (AliTriggerBCMask*)bcmasks->At(0); + else if (nbcm>2 && beamID==kBeam2) bcMaskSingle = (AliTriggerBCMask*)bcmasks->At(2); + // + if (!bcMaskSingle) AliError(Form("Only triggered BSs are requested but %c mask is not provided",beamID ? 'C':'A')); + if (!bcMaskBoth) AliError("Only triggered BSs are requested but B mask is not provided"); + } + else { + AliWarning("No BC masks are provided"); + } + // + int nrec = GetNIntensityPerBunch(beamID); + if (nrec<1) return -1; + AliLHCDipValI *conf = GetBunchConfigMeasured(beamID); + if (!conf) conf = GetBunchConfigDeclared(beamID); + if (!conf) return -2; + int nb = conf->GetSize(); + // + for (int irec=0;irecIsA() == AliLHCDipValD::Class()) {rIntD=(AliLHCDipValD*)rIntF; rIntF=0;} + if (!rIntF && !rIntD) { + AliError(Form("Failed to get GetIntensityPerBunch(%d,%d)",beamID,irec)); + continue; + } + for (int ib=0;ibGetValue(ib); + else if (rIntD) val = rIntD->GetValue(ib); + if (val<0) continue; + int bID = conf->GetValue(ib); + // check if this is a triggered bunch + int bcID = GetBCId(bID, beamID); + if (bID<0) { // interacting + if (bcMaskBoth && bcMaskBoth->GetMask(bcID)) continue; // masked + colliding += val; + } + else { + if (bcMaskSingle && bcMaskSingle->GetMask(bcID)) continue; // masked + noncolliding += val; + } + } + } + colliding /= nrec; + noncolliding /= nrec; + return nrec; +} + +//___________________________________________________________________ +void AliLHCData::FillLumiAlice(Int_t nrec, Int_t* timeArr, Double_t* valArr) +{ + // Create a record for lumi integrated from the beginning of fill + // We need dedicated method since this info comes from Alice (not LHCDip) as instantaneous values + // and is retrofitted for past runs + fLumiAlice[kStart] = fData.GetEntriesFast(); + fLumiAlice[kNStor] = 0; + if (nrec<2 || !timeArr || !valArr) return; + double tprv,period,currTime; + if ((currTime=double(UInt_t(timeArr[0])))>fTMin) { + AliError(Form("TimeStamp of 1st record: %s > TimeStamp of SOR: %s, STOP", + AliLHCDipValI::TimeAsString(currTime),AliLHCDipValI::TimeAsString(fTMin))); + return; + } + // + if ((tprv=double(UInt_t(timeArr[nrec-1])))0) period = currTime - tprv; + if (currTime-period>fTMax) continue; + lumiInt += valArr[i]*period; + // printf("%d %.2f V:%f Int:%f\n",i,period,valArr[i],lumiInt); + if (currTime+periodfTMin) { + AliError(Form("TimeStamp of 1st record: %s > TimeStamp of SOR: %s, STOP", + AliLHCDipValI::TimeAsString(currTime),AliLHCDipValI::TimeAsString(fTMin))); + return; + } + // + if ((tprv=double(UInt_t(timeArr[nrec-1])))0) period = currTime - tprv; + if (currTime-period>fTMax) continue; + bckgInt += valArr[i]*period; + if (currTime+period0 ? idx-1:idx+1); + if (!rec || !rec1) return -1; + double dt = rec->GetTimeStamp() - rec1->GetTimeStamp(); + return TMath::Abs(dt)>1e-6 ? (rec->GetValue()-rec1->GetValue())/dt : -1; +} + +//_____________________________________________________________________________ +Float_t AliLHCData::GetBckgInstAlice(Double_t tStamp) const +{ + // get closest in time value on inst luminosity + int idx = FindEntryValidFor(fBckgAlice[kStart],fBckgAlice[kNStor],tStamp); + if (idx<0) return -1; + AliLHCDipValF *rec=GetBckgAliceRecord(idx),*rec1=GetBckgAliceRecord(idx>0 ? idx-1:idx+1); + if (!rec || !rec1) return -1; + double dt = rec->GetTimeStamp() - rec1->GetTimeStamp(); + return TMath::Abs(dt)>1e-6 ? (rec->GetValue()-rec1->GetValue())/dt : -1; +} + +//_____________________________________________________________________________ +TGraph* AliLHCData::ExportGraph(Int_t *coord, Int_t elID) const +{ + // export time/values to graph: + // coord: int[2] array with 1st entry and number of entries stored, obtained via GetOffs... method + // elID - element of the AliLHCDipValT array to extract + if (!coord || coord[1]<1) return 0; + TGraph* gr = new TGraph(coord[1]); + for (int i=0;iIsA()==AliLHCDipValD::Class()) { + AliLHCDipValD* objD = (AliLHCDipValD*)obj; + gr->SetPoint(i,objD->GetTimeStamp(),objD->GetValue(elID)); + } + else if (obj->IsA()==AliLHCDipValF::Class()) { + AliLHCDipValF* objF = (AliLHCDipValF*)obj; + gr->SetPoint(i,objF->GetTimeStamp(),objF->GetValue(elID)); + } + else if (obj->IsA()==AliLHCDipValI::Class()) { + AliLHCDipValI* objI = (AliLHCDipValI*)obj; + gr->SetPoint(i,objI->GetTimeStamp(),objI->GetValue(elID)); + } + else if (obj->IsA()==AliLHCDipValC::Class()) { + AliLHCDipValC* objC = (AliLHCDipValC*)obj; + gr->SetPoint(i,objC->GetTimeStamp(),objC->GetValue(elID)); + } + else { + AliError(Form("Graph cannot be exported for records of type %s",obj->IsA()->GetName())); + } + } + return gr; +} diff --git a/STEER/STEER/AliLHCData.h b/STEER/STEER/AliLHCData.h index c1738837879..3d802221e31 100755 --- a/STEER/STEER/AliLHCData.h +++ b/STEER/STEER/AliLHCData.h @@ -1,375 +1,375 @@ -#ifndef ALILHCDATA_H -#define ALILHCDATA_H - -/******************************************************************************** -* * -* AliLHCData: summary of the LHC related information from LHC DIP. * -* Created from the TMap provided by the AliLHCReader with optional beginning * -* * -* The data are (wrapped in the AliLHCDipValT): * -* made of TimeStamp (double) and array of values * -* * -* Multiple entries for each type of data are possible. To obtaine number of * -* records (with distinct timestamp) for give type od records use: * -* int GetNBunchConfigMeasured(int beam) (with beam=0,1) etc. * -* * -* To get i-th entry, use brec= AliLHCDipValI* GetBunchConfigMeasured(bm,i); * -* Note: exact type of templated AliLHCDipValT pointer depends on the record * -* type, concult getters to know it. * -* * -* Then, once the pointer is obtained, details can be accessed: * -* int nBunches = brec->GetSize(); * -* for (int i=0;i1e10?1e10:t);} - void SetTMax(Double_t t) {fTMax = t<0?0:(t>1e10?1e10:t);} - // - virtual void Print(const Option_t *opt="") const; - TGraph* ExportGraph(Int_t *coord, Int_t elID=0) const; - // - Int_t GetNBunchConfigMeasured(int bm) const {return GoodPairID(bm)?fBunchConfMeas[bm][kNStor]:-1;} - Int_t GetNBunchConfigDeclared(int bm) const {return GoodPairID(bm)?fBunchConfDecl[bm][kNStor]:-1;} - Int_t GetNBunchLengths(int bm) const {return GoodPairID(bm)?fBunchLengths[bm][kNStor]:-1;} - Int_t GetNTotalIntensity(int bm) const {return GoodPairID(bm)?fIntensTotal[bm][kNStor]:-1;} - Int_t GetNTotalIntensityAv(int bm) const {return GoodPairID(bm)?fIntensTotalAv[bm][kNStor]:-1;} - Int_t GetNIntensityPerBunch(int bm) const {return GoodPairID(bm)?fIntensPerBunch[bm][kNStor]:-1;} - Int_t GetNEmittanceH(int bm) const {return GoodPairID(bm)?fEmittanceH[bm][kNStor]:-1;} - Int_t GetNEmittanceV(int bm) const {return GoodPairID(bm)?fEmittanceV[bm][kNStor]:-1;} - Int_t GetNBeamSigmaH(int bm) const {return GoodPairID(bm)?fBeamSigmaH[bm][kNStor]:-1;} - Int_t GetNBeamSigmaV(int bm) const {return GoodPairID(bm)?fBeamSigmaV[bm][kNStor]:-1;} - // - Int_t GetNLuminosityTotal(int lr) const {return GoodPairID(lr)?fLuminTotal[lr][kNStor]:-1;} - Int_t GetNLuminosityPerBunch(int lr) const {return GoodPairID(lr)?fLuminPerBC[lr][kNStor]:-1;} - Int_t GetNLuminosityAcqMode(int lr) const {return GoodPairID(lr)?fLuminAcqMode[lr][kNStor]:-1;} - Int_t GetNCrossingAngle(int lr) const {return GoodPairID(lr)?fCrossAngle[lr][kNStor]:-1;} - // - Int_t GetNInjectionScheme() const {return fRCInjScheme[kNStor];} - Int_t GetNRCBetaStar() const {return fRCBeta[kNStor];} - Int_t GetNRCAngleH() const {return fRCAngH[kNStor];} - Int_t GetNRCAngleV() const {return fRCAngV[kNStor];} - // - Int_t GetNLumiAlice() const {return fLumiAlice[kNStor];} - Int_t GetNBckgAlice() const {return fBckgAlice[kNStor];} - // - Int_t GetNCollimatorJawPos(int coll,int jaw) const; - // - AliLHCDipValI* GetBunchConfigMeasured(int bm, int i=0) const; - AliLHCDipValF* GetBunchLengths(int bm, int i=0) const; - AliLHCDipValI* GetBunchConfigDeclared(int bm, int i=0) const; - AliLHCDipValF* GetTotalIntensity(int bm, int i=0) const; - AliLHCDipValF* GetTotalIntensityAv(int bm, int i=0) const; - AliLHCDipValF* GetIntensityPerBunch(int bm, int i=0) const; - AliLHCDipValF* GetEmittanceH(int bm, int i=0) const; - AliLHCDipValF* GetEmittanceV(int bm, int i=0) const; - AliLHCDipValF* GetBeamSigmaH(int bm, int i=0) const; - AliLHCDipValF* GetBeamSigmaV(int bm, int i=0) const; - AliLHCDipValF* GetLuminosityTotal(int lr, int i=0) const; - AliLHCDipValF* GetLuminosityPerBunch(int lr, int i=0) const; - AliLHCDipValI* GetLuminosityAcqMode(int lr, int i=0) const; - AliLHCDipValF* GetCrossAngle(int lr, int i=0) const; - AliLHCDipValC* GetInjectionScheme(int i=0) const; - AliLHCDipValF* GetRCBetaStar(int i=0) const; - AliLHCDipValF* GetRCAngleH(int i=0) const; - AliLHCDipValF* GetRCAngleV(int i=0) const; - AliLHCDipValF* GetCollimJawPos(int coll, int jaw, int i=0) const; - // - AliLHCDipValF* GetLumiAliceRecord(int i=0) const; - AliLHCDipValF* GetBckgAliceRecord(int i=0) const; - // - Float_t GetLumiAlice(Double_t tstamp) const; - Float_t GetBckgAlice(Double_t tstamp) const; - // - Float_t GetLumiInstAlice(Double_t tstamp) const; - Float_t GetBckgInstAlice(Double_t tstamp) const; - // - void FlagInteractingBunches(const Int_t beam1[2],const Int_t beam2[2]); - TObject* FindRecValidFor(int start,int nrec, double tstamp) const; - Int_t FindEntryValidFor(int start,int nrec, double tstamp) const; - AliLHCDipValI* GetBunchConfigMeasured(int beam,double tstamp) const; - AliLHCDipValI* GetBunchConfigDeclared(int beam,double tstamp) const; - Int_t GetNInteractingBunchesMeasured(int i=0) const; - Int_t GetNInteractingBunchesDeclared(int i=0) const; - Int_t IsPilotPresent(int i=0) const; - // - // return array with beginning [0] and number of records for corresponding info (in the fData) - const Int_t* GetOffsBunchConfigMeasured(int bm) const {return GoodPairID(bm)?fBunchConfMeas[bm]:0;} - const Int_t* GetOffsBunchConfigDeclared(int bm) const {return GoodPairID(bm)?fBunchConfDecl[bm]:0;} - const Int_t* GetOffsBunchLengths(int bm) const {return GoodPairID(bm)?fBunchLengths[bm]:0;} - const Int_t* GetOffsTotalIntensity(int bm) const {return GoodPairID(bm)?fIntensTotal[bm]:0;} - const Int_t* GetOffsTotalIntensityAv(int bm) const {return GoodPairID(bm)?fIntensTotalAv[bm]:0;} - const Int_t* GetOffsIntensityPerBunch(int bm) const {return GoodPairID(bm)?fIntensPerBunch[bm]:0;} - const Int_t* GetOffsEmittanceH(int bm) const {return GoodPairID(bm)?fEmittanceH[bm]:0;} - const Int_t* GetOffsEmittanceV(int bm) const {return GoodPairID(bm)?fEmittanceV[bm]:0;} - const Int_t* GetOffsBeamSigmaH(int bm) const {return GoodPairID(bm)?fBeamSigmaH[bm]:0;} - const Int_t* GetOffsBeamSigmaV(int bm) const {return GoodPairID(bm)?fBeamSigmaV[bm]:0;} - // - const Int_t* GetOffsLuminosityTotal(int lr) const {return GoodPairID(lr)?fLuminTotal[lr]:0;} - const Int_t* GetOffsLuminosityPerBunch(int lr) const {return GoodPairID(lr)?fLuminPerBC[lr]:0;} - const Int_t* GetOffsLuminosityAcqMode(int lr) const {return GoodPairID(lr)?fLuminAcqMode[lr]:0;} - const Int_t* GetOffsCrossingAngle(int lr) const {return GoodPairID(lr)?fCrossAngle[lr]:0;} - // - const Int_t* GetOffsInjectionScheme() const {return fRCInjScheme;} - const Int_t* GetOffsRCBetaStar() const {return fRCBeta;} - const Int_t* GetOffsRCAngleH() const {return fRCAngH;} - const Int_t* GetOffsRCAngleV() const {return fRCAngV;} - const Int_t* GetOffsLumiAlice() const {return fLumiAlice;} - const Int_t* GetOffsBckgAlice() const {return fBckgAlice;} - // - const Int_t* GetOffsCollimatorJawPos(int coll,int jaw) const; - // - const TObjArray& GetData() const {return fData;} - // - // analysis methods - Int_t GetMeanIntensity(int beamID, Double_t &colliding, Double_t &noncolliding, const TObjArray* bcmasks=0) const; - static Int_t GetBCId(int bucket, int beamID) {return (TMath::Abs(bucket)/10 + (beamID==0 ? kOffsBeam1:kOffsBeam2))%kMaxBSlots;} - // - // for retrofitting, these methods has to be public - void FillLumiAlice(Int_t nrec, Int_t* time, Double_t* val); - void FillBckgAlice(Int_t nrec, Int_t* time, Double_t* val); - - - protected: - // - Bool_t FillData(double tmin=0, double tmax=1.e20); - virtual void Clear(const Option_t *opt=""); - void PrintAux(Bool_t full,const Int_t refs[2],const Option_t *opt="") const; - TObjArray* GetDCSEntry(const char* key,int &entry,int &last,double tmin,double tmax) const; - Int_t FillScalarRecord( int refs[2], const char* rec, const char* recErr=0, Double_t maxAbsVal=1.e30); - Int_t FillBunchConfig( int refs[2], const char* rec); - Int_t FillStringRecord( int refs[2], const char* rec); - Int_t FillAcqMode( int refs[2], const char* rec); - Int_t FillBunchInfo( int refs[2], const char* rec,int ibm, Bool_t inRealSlots, Double_t maxAbsVal=1.e30); - Int_t FillBCLuminosities(int refs[2], const char* rec, const char* recErr, Int_t useBeam, Double_t maxAbsVal=1.e30); - // - Int_t ExtractInt(AliDCSArray* dcsArray,Int_t el) const; - Double_t ExtractDouble(AliDCSArray* dcsArray,Int_t el) const; - TString& ExtractString(AliDCSArray* dcsArray) const; - AliLHCData(const AliLHCData& src) : TObject(src),fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(0),fkMap2Process(0) { /*dummy*/ } - AliLHCData& operator=(const AliLHCData& ) { /*dummy*/ return *this;} - Int_t TimeDifference(double v1,double v2,double tol=0.9) const; - Bool_t IzZero(double val, double tol=1e-16) const {return TMath::Abs(val)=0&&coll=0&&jaw=0&&coll=0&&jaw=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && coll=0 && jaw=0 && i=0 && i=0 && iGetValue(); -} - -inline Float_t AliLHCData::GetBckgAlice(Double_t tStamp) const { // get closest in time value on integrated bckg - int idx = FindEntryValidFor(fBckgAlice[kStart],fBckgAlice[kNStor],tStamp); - return idx<0 ? -1 : ((AliLHCDipValF*)fData[fBckgAlice[kStart]+idx])->GetValue(); -} - -inline Int_t AliLHCData::FindEntryValidFor(int start,int nrec, double tstamp) const -{ - // find index of record within this limits valid for given tstamp (i.e. the last one before or equal to tstamp) - int idx; - for (idx=0;idxGetTimeStamp())<=0) break; - } - return (idxGetSize(); * +* for (int i=0;i1e10?1e10:t);} + void SetTMax(Double_t t) {fTMax = t<0?0:(t>1e10?1e10:t);} + // + virtual void Print(const Option_t *opt="") const; + TGraph* ExportGraph(Int_t *coord, Int_t elID=0) const; + // + Int_t GetNBunchConfigMeasured(int bm) const {return GoodPairID(bm)?fBunchConfMeas[bm][kNStor]:-1;} + Int_t GetNBunchConfigDeclared(int bm) const {return GoodPairID(bm)?fBunchConfDecl[bm][kNStor]:-1;} + Int_t GetNBunchLengths(int bm) const {return GoodPairID(bm)?fBunchLengths[bm][kNStor]:-1;} + Int_t GetNTotalIntensity(int bm) const {return GoodPairID(bm)?fIntensTotal[bm][kNStor]:-1;} + Int_t GetNTotalIntensityAv(int bm) const {return GoodPairID(bm)?fIntensTotalAv[bm][kNStor]:-1;} + Int_t GetNIntensityPerBunch(int bm) const {return GoodPairID(bm)?fIntensPerBunch[bm][kNStor]:-1;} + Int_t GetNEmittanceH(int bm) const {return GoodPairID(bm)?fEmittanceH[bm][kNStor]:-1;} + Int_t GetNEmittanceV(int bm) const {return GoodPairID(bm)?fEmittanceV[bm][kNStor]:-1;} + Int_t GetNBeamSigmaH(int bm) const {return GoodPairID(bm)?fBeamSigmaH[bm][kNStor]:-1;} + Int_t GetNBeamSigmaV(int bm) const {return GoodPairID(bm)?fBeamSigmaV[bm][kNStor]:-1;} + // + Int_t GetNLuminosityTotal(int lr) const {return GoodPairID(lr)?fLuminTotal[lr][kNStor]:-1;} + Int_t GetNLuminosityPerBunch(int lr) const {return GoodPairID(lr)?fLuminPerBC[lr][kNStor]:-1;} + Int_t GetNLuminosityAcqMode(int lr) const {return GoodPairID(lr)?fLuminAcqMode[lr][kNStor]:-1;} + Int_t GetNCrossingAngle(int lr) const {return GoodPairID(lr)?fCrossAngle[lr][kNStor]:-1;} + // + Int_t GetNInjectionScheme() const {return fRCInjScheme[kNStor];} + Int_t GetNRCBetaStar() const {return fRCBeta[kNStor];} + Int_t GetNRCAngleH() const {return fRCAngH[kNStor];} + Int_t GetNRCAngleV() const {return fRCAngV[kNStor];} + // + Int_t GetNLumiAlice() const {return fLumiAlice[kNStor];} + Int_t GetNBckgAlice() const {return fBckgAlice[kNStor];} + // + Int_t GetNCollimatorJawPos(int coll,int jaw) const; + // + AliLHCDipValI* GetBunchConfigMeasured(int bm, int i=0) const; + AliLHCDipValF* GetBunchLengths(int bm, int i=0) const; + AliLHCDipValI* GetBunchConfigDeclared(int bm, int i=0) const; + AliLHCDipValF* GetTotalIntensity(int bm, int i=0) const; + AliLHCDipValF* GetTotalIntensityAv(int bm, int i=0) const; + AliLHCDipValF* GetIntensityPerBunch(int bm, int i=0) const; + AliLHCDipValF* GetEmittanceH(int bm, int i=0) const; + AliLHCDipValF* GetEmittanceV(int bm, int i=0) const; + AliLHCDipValF* GetBeamSigmaH(int bm, int i=0) const; + AliLHCDipValF* GetBeamSigmaV(int bm, int i=0) const; + AliLHCDipValF* GetLuminosityTotal(int lr, int i=0) const; + AliLHCDipValF* GetLuminosityPerBunch(int lr, int i=0) const; + AliLHCDipValI* GetLuminosityAcqMode(int lr, int i=0) const; + AliLHCDipValF* GetCrossAngle(int lr, int i=0) const; + AliLHCDipValC* GetInjectionScheme(int i=0) const; + AliLHCDipValF* GetRCBetaStar(int i=0) const; + AliLHCDipValF* GetRCAngleH(int i=0) const; + AliLHCDipValF* GetRCAngleV(int i=0) const; + AliLHCDipValF* GetCollimJawPos(int coll, int jaw, int i=0) const; + // + AliLHCDipValF* GetLumiAliceRecord(int i=0) const; + AliLHCDipValF* GetBckgAliceRecord(int i=0) const; + // + Float_t GetLumiAlice(Double_t tstamp) const; + Float_t GetBckgAlice(Double_t tstamp) const; + // + Float_t GetLumiInstAlice(Double_t tstamp) const; + Float_t GetBckgInstAlice(Double_t tstamp) const; + // + void FlagInteractingBunches(const Int_t beam1[2],const Int_t beam2[2]); + TObject* FindRecValidFor(int start,int nrec, double tstamp) const; + Int_t FindEntryValidFor(int start,int nrec, double tstamp) const; + AliLHCDipValI* GetBunchConfigMeasured(int beam,double tstamp) const; + AliLHCDipValI* GetBunchConfigDeclared(int beam,double tstamp) const; + Int_t GetNInteractingBunchesMeasured(int i=0) const; + Int_t GetNInteractingBunchesDeclared(int i=0) const; + Int_t IsPilotPresent(int i=0) const; + // + // return array with beginning [0] and number of records for corresponding info (in the fData) + const Int_t* GetOffsBunchConfigMeasured(int bm) const {return GoodPairID(bm)?fBunchConfMeas[bm]:0;} + const Int_t* GetOffsBunchConfigDeclared(int bm) const {return GoodPairID(bm)?fBunchConfDecl[bm]:0;} + const Int_t* GetOffsBunchLengths(int bm) const {return GoodPairID(bm)?fBunchLengths[bm]:0;} + const Int_t* GetOffsTotalIntensity(int bm) const {return GoodPairID(bm)?fIntensTotal[bm]:0;} + const Int_t* GetOffsTotalIntensityAv(int bm) const {return GoodPairID(bm)?fIntensTotalAv[bm]:0;} + const Int_t* GetOffsIntensityPerBunch(int bm) const {return GoodPairID(bm)?fIntensPerBunch[bm]:0;} + const Int_t* GetOffsEmittanceH(int bm) const {return GoodPairID(bm)?fEmittanceH[bm]:0;} + const Int_t* GetOffsEmittanceV(int bm) const {return GoodPairID(bm)?fEmittanceV[bm]:0;} + const Int_t* GetOffsBeamSigmaH(int bm) const {return GoodPairID(bm)?fBeamSigmaH[bm]:0;} + const Int_t* GetOffsBeamSigmaV(int bm) const {return GoodPairID(bm)?fBeamSigmaV[bm]:0;} + // + const Int_t* GetOffsLuminosityTotal(int lr) const {return GoodPairID(lr)?fLuminTotal[lr]:0;} + const Int_t* GetOffsLuminosityPerBunch(int lr) const {return GoodPairID(lr)?fLuminPerBC[lr]:0;} + const Int_t* GetOffsLuminosityAcqMode(int lr) const {return GoodPairID(lr)?fLuminAcqMode[lr]:0;} + const Int_t* GetOffsCrossingAngle(int lr) const {return GoodPairID(lr)?fCrossAngle[lr]:0;} + // + const Int_t* GetOffsInjectionScheme() const {return fRCInjScheme;} + const Int_t* GetOffsRCBetaStar() const {return fRCBeta;} + const Int_t* GetOffsRCAngleH() const {return fRCAngH;} + const Int_t* GetOffsRCAngleV() const {return fRCAngV;} + const Int_t* GetOffsLumiAlice() const {return fLumiAlice;} + const Int_t* GetOffsBckgAlice() const {return fBckgAlice;} + // + const Int_t* GetOffsCollimatorJawPos(int coll,int jaw) const; + // + const TObjArray& GetData() const {return fData;} + // + // analysis methods + Int_t GetMeanIntensity(int beamID, Double_t &colliding, Double_t &noncolliding, const TObjArray* bcmasks=0) const; + static Int_t GetBCId(int bucket, int beamID) {return (TMath::Abs(bucket)/10 + (beamID==0 ? kOffsBeam1:kOffsBeam2))%kMaxBSlots;} + // + // for retrofitting, these methods has to be public + void FillLumiAlice(Int_t nrec, Int_t* time, Double_t* val); + void FillBckgAlice(Int_t nrec, Int_t* time, Double_t* val); + + + protected: + // + Bool_t FillData(double tmin=0, double tmax=1.e20); + virtual void Clear(const Option_t *opt=""); + void PrintAux(Bool_t full,const Int_t refs[2],const Option_t *opt="") const; + TObjArray* GetDCSEntry(const char* key,int &entry,int &last,double tmin,double tmax) const; + Int_t FillScalarRecord( int refs[2], const char* rec, const char* recErr=0, Double_t maxAbsVal=1.e30); + Int_t FillBunchConfig( int refs[2], const char* rec); + Int_t FillStringRecord( int refs[2], const char* rec); + Int_t FillAcqMode( int refs[2], const char* rec); + Int_t FillBunchInfo( int refs[2], const char* rec,int ibm, Bool_t inRealSlots, Double_t maxAbsVal=1.e30); + Int_t FillBCLuminosities(int refs[2], const char* rec, const char* recErr, Int_t useBeam, Double_t maxAbsVal=1.e30); + // + Int_t ExtractInt(AliDCSArray* dcsArray,Int_t el) const; + Double_t ExtractDouble(AliDCSArray* dcsArray,Int_t el) const; + TString& ExtractString(AliDCSArray* dcsArray) const; + AliLHCData(const AliLHCData& src) : TObject(src),fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(0),fkMap2Process(0) { /*dummy*/ } + AliLHCData& operator=(const AliLHCData& ) { /*dummy*/ return *this;} + Int_t TimeDifference(double v1,double v2,double tol=0.9) const; + Bool_t IzZero(double val, double tol=1e-16) const {return TMath::Abs(val)=0&&coll=0&&jaw=0&&coll=0&&jaw=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && i=0 && coll=0 && jaw=0 && i=0 && i=0 && iGetValue(); +} + +inline Float_t AliLHCData::GetBckgAlice(Double_t tStamp) const { // get closest in time value on integrated bckg + int idx = FindEntryValidFor(fBckgAlice[kStart],fBckgAlice[kNStor],tStamp); + return idx<0 ? -1 : ((AliLHCDipValF*)fData[fBckgAlice[kStart]+idx])->GetValue(); +} + +inline Int_t AliLHCData::FindEntryValidFor(int start,int nrec, double tstamp) const +{ + // find index of record within this limits valid for given tstamp (i.e. the last one before or equal to tstamp) + int idx; + for (idx=0;idxGetTimeStamp())<=0) break; + } + return (idx(GetInputData(0)); - if (!tree) { - printf("ERROR: Could not read chain from input slot 0"); - } - else { - AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - if (!esdH) { - printf ("ERROR: Could not get ESDInputHandler"); - } - else { - fESD = esdH->GetEvent(); - printf ("*** CONNECTED NEW EVENT ****"); - } - } -} -*/ -//________________________________________________________________________ -void AliT0CalibOffsetChannelsTask::UserCreateOutputObjects() -{ - // Create histograms - Float_t low = fCDBcfds[fRefPMTC] - 500; - Float_t high = fCDBcfds[fRefPMTA] + 500; - for (Int_t i=0; i<24; i++) { - fTimeDiff[i] = new TH1F (Form("CFD1minCFD%d",i+1),"fTimeDiff",150, -300, 300); - fCFD[i] = new TH1F(Form("CFD%d",i+1),"CFD",250,low, high);//6000, 7000); - // fCFD[i] = new TH1F(Form("CFD%d",i+1),"CFD",250, -1000, 1000);//6000, 7000); - } - - fTzeroORAplusORC = new TH1F("fTzeroORAplusORC","ORA+ORC /2",200,-4000,4000); //or A plus or C - fResolution = new TH1F("fResolution","fResolution",200,-2000,2000);// or A minus or C spectrum - fTzeroORA = new TH1F("fTzeroORA","fTzeroORA",200,-4000,4000);// or A spectrum - fTzeroORC = new TH1F("fTzeroORC","fTzeroORC",200,-4000,4000);// or C spectrum - - - fTzeroObject = new TObjArray(0); - fTzeroObject->SetOwner(kTRUE); - - for (Int_t i=0; i<24; i++) - fTzeroObject->AddAtAndExpand(fTimeDiff[i],i); - - for (Int_t i=0; i<24; i++) - fTzeroObject->AddAtAndExpand(fCFD[i],i+24); //24 - 48 - - fTzeroObject->AddAtAndExpand(fTzeroORAplusORC, 48); - fTzeroObject->AddAtAndExpand(fResolution, 49); - fTzeroObject->AddAtAndExpand(fTzeroORA, 50); - fTzeroObject->AddAtAndExpand(fTzeroORC, 51); - - PostData(1, fTzeroObject); - // Called once -} - -//________________________________________________________________________ -void AliT0CalibOffsetChannelsTask::UserExec(Option_t *) -{ - // Main loop - // Called for each event - - // Post output data. - - fESD = dynamic_cast(InputEvent()); - if (!fESD) { - printf("ERROR: fESD not available\n"); - return; - } - Int_t trigT0 = fESD->GetT0Trig(); - Bool_t eq = kTRUE; - fRunNumber = fESD->GetRunNumber() ; - if( fRunNumber<165747) eq = kFALSE; - - const Double32_t* time = fESD->GetT0time(); - const Double32_t* amp = fESD->GetT0amplitude(); - - Double32_t diff; - for (Int_t i=0; i<24; i++) { - if( time[i] > 0 && amp[i]>0.1 ){ - if (eq) { - fCFD[i]->Fill( time[i] );//////!!!!! - if( time[fRefPMTC] > 0 && i<12) { - diff = time[i]-time[fRefPMTC]; - fTimeDiff[i]->Fill( diff); - } - if( time[fRefPMTA] >0 && i>11) { - diff = time[i]-time[fRefPMTA] ; - fTimeDiff[i]->Fill( diff); - } - } //eq=1 - else { - fCFD[i]->Fill( time[i] + fCDBdelays[i] ); - if( time[fRefPMTC] > 0 && i<12) { - diff = time[i]-time[fRefPMTC] + fCDBdelays[i]; - fTimeDiff[i]->Fill( diff); - } //C - if( time[fRefPMTA] >0 && i>11) { - diff = time[i]-time[fRefPMTA] + fCDBdelays[i]; - fTimeDiff[i]->Fill( diff); - } //A - } //eq=0 - } - - } - if (trigT0>5) { - const Double32_t* mean = fESD->GetT0TOF(); - Double32_t meanTOF = mean[0] + fCDBT0s[0] ; - Double32_t orA = mean[1] + fCDBT0s[1] ; - Double32_t orC = mean[2] + fCDBT0s[2] ; - - if(orA<99999) fTzeroORA->Fill(orA); - if(orC<99999) fTzeroORC->Fill(orC); - if(orA<99999 && orC<99999) fResolution->Fill((orA-orC)/2.); - if(orA<99999 && orC<99999) fTzeroORAplusORC->Fill(meanTOF); - } //if TVDC on - // printf("%f %f %f\n",orA,orC,meanTOF); - PostData(1, fTzeroObject); - } - //________________________________________________________________________ - void AliT0CalibOffsetChannelsTask::Terminate(Option_t *) -{ - - // Called once at the end of the query -} - +#include "TChain.h" +#include "TTree.h" +#include "TH1D.h" +#include "TF1.h" +#include "TCanvas.h" +#include "TObjArray.h" + +#include "AliAnalysisTask.h" +#include "AliAnalysisManager.h" + +#include "AliESDEvent.h" +#include "AliESDInputHandler.h" + +#include "AliT0CalibOffsetChannelsTask.h" + +//#include "AliCDBMetaData.h" +//#include "AliCDBId.h" +//#include "AliCDBEntry.h" +//#include "AliCDBManager.h" +//#include "AliCDBStorage.h" + +// Task should calculate channels offset +// Authors: Alla + +ClassImp(AliT0CalibOffsetChannelsTask) +//________________________________________________________________________ +AliT0CalibOffsetChannelsTask::AliT0CalibOffsetChannelsTask() + : AliAnalysisTaskSE(), fESD(0x0), fTzeroObject(0x0), + fTzeroORA(0x0), fTzeroORC(0x0), fResolution(0x0), fTzeroORAplusORC(0x0), + fRunNumber(0),fRefPMTA(12), fRefPMTC(0) +{ + // Constructor + + for( int ip=0; ip < 24; ip++){ + fTimeDiff[ip] = 0; + fCFD[ip] = 0; + fCDBdelays[ip]= 0; + fCDBcfds[ip]= 0; + if (ip<4 ) fCDBT0s[ip]= 0; + } + + // Define input and output slots here + // Input slot #0 works with a TChain + // DefineInput(0, TChain::Class()); + // DefineOutput(1, TObjArray::Class()); +} + + +//________________________________________________________________________ +AliT0CalibOffsetChannelsTask::AliT0CalibOffsetChannelsTask(const char *name) + : AliAnalysisTaskSE(name), fESD(0), fTzeroObject(0), + fTzeroORA(0x0), fTzeroORC(0x0), fResolution(0x0), fTzeroORAplusORC(0x0), + fRunNumber(0),fRefPMTA(12), fRefPMTC(0) +{ + // Constructor + + for( int ip=0; ip < 24; ip++){ + fTimeDiff[ip] = 0; + fCFD[ip] = 0; + fCDBdelays[ip]= 0; + fCDBcfds[ip]= 0; + if (ip<4 ) fCDBT0s[ip]= 0; + + } + + // Define input and output slots here + // Input slot #0 works with a TChain + DefineInput(0, TChain::Class()); + DefineOutput(1, TObjArray::Class()); + // Output slot #0 id reserved by the base class for AOD + // Output slot #1 writes into a TH1 container +} + +//________________________________________________________________________ +AliT0CalibOffsetChannelsTask::~AliT0CalibOffsetChannelsTask() +{ + // Destructor + // printf("AliT0CalibOffsetChannels~AliT0CalibOffsetChannels() "); + delete fTzeroORA; + delete fTzeroORC; + delete fResolution; + delete fTzeroORAplusORC; + for( Int_t ip=0; ip < 24; ip++){ + delete fTimeDiff[ip]; + delete fCFD[ip]; + } + + delete fTzeroObject; +} + +//________________________________________________________________________ +/*void AliT0CalibOffsetChannelsTaskX::ConnectInputData(Option_t *) { + // + // + // + TTree* tree=dynamic_cast(GetInputData(0)); + if (!tree) { + printf("ERROR: Could not read chain from input slot 0"); + } + else { + AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!esdH) { + printf ("ERROR: Could not get ESDInputHandler"); + } + else { + fESD = esdH->GetEvent(); + printf ("*** CONNECTED NEW EVENT ****"); + } + } +} +*/ +//________________________________________________________________________ +void AliT0CalibOffsetChannelsTask::UserCreateOutputObjects() +{ + // Create histograms + Float_t low = fCDBcfds[fRefPMTC] - 500; + Float_t high = fCDBcfds[fRefPMTA] + 500; + for (Int_t i=0; i<24; i++) { + fTimeDiff[i] = new TH1F (Form("CFD1minCFD%d",i+1),"fTimeDiff",150, -300, 300); + fCFD[i] = new TH1F(Form("CFD%d",i+1),"CFD",250,low, high);//6000, 7000); + // fCFD[i] = new TH1F(Form("CFD%d",i+1),"CFD",250, -1000, 1000);//6000, 7000); + } + + fTzeroORAplusORC = new TH1F("fTzeroORAplusORC","ORA+ORC /2",200,-4000,4000); //or A plus or C + fResolution = new TH1F("fResolution","fResolution",200,-2000,2000);// or A minus or C spectrum + fTzeroORA = new TH1F("fTzeroORA","fTzeroORA",200,-4000,4000);// or A spectrum + fTzeroORC = new TH1F("fTzeroORC","fTzeroORC",200,-4000,4000);// or C spectrum + + + fTzeroObject = new TObjArray(0); + fTzeroObject->SetOwner(kTRUE); + + for (Int_t i=0; i<24; i++) + fTzeroObject->AddAtAndExpand(fTimeDiff[i],i); + + for (Int_t i=0; i<24; i++) + fTzeroObject->AddAtAndExpand(fCFD[i],i+24); //24 - 48 + + fTzeroObject->AddAtAndExpand(fTzeroORAplusORC, 48); + fTzeroObject->AddAtAndExpand(fResolution, 49); + fTzeroObject->AddAtAndExpand(fTzeroORA, 50); + fTzeroObject->AddAtAndExpand(fTzeroORC, 51); + + PostData(1, fTzeroObject); + // Called once +} + +//________________________________________________________________________ +void AliT0CalibOffsetChannelsTask::UserExec(Option_t *) +{ + // Main loop + // Called for each event + + // Post output data. + + fESD = dynamic_cast(InputEvent()); + if (!fESD) { + printf("ERROR: fESD not available\n"); + return; + } + Int_t trigT0 = fESD->GetT0Trig(); + Bool_t eq = kTRUE; + fRunNumber = fESD->GetRunNumber() ; + if( fRunNumber<165747) eq = kFALSE; + + const Double32_t* time = fESD->GetT0time(); + const Double32_t* amp = fESD->GetT0amplitude(); + + Double32_t diff; + for (Int_t i=0; i<24; i++) { + if( time[i] > 0 && amp[i]>0.1 ){ + if (eq) { + fCFD[i]->Fill( time[i] );//////!!!!! + if( time[fRefPMTC] > 0 && i<12) { + diff = time[i]-time[fRefPMTC]; + fTimeDiff[i]->Fill( diff); + } + if( time[fRefPMTA] >0 && i>11) { + diff = time[i]-time[fRefPMTA] ; + fTimeDiff[i]->Fill( diff); + } + } //eq=1 + else { + fCFD[i]->Fill( time[i] + fCDBdelays[i] ); + if( time[fRefPMTC] > 0 && i<12) { + diff = time[i]-time[fRefPMTC] + fCDBdelays[i]; + fTimeDiff[i]->Fill( diff); + } //C + if( time[fRefPMTA] >0 && i>11) { + diff = time[i]-time[fRefPMTA] + fCDBdelays[i]; + fTimeDiff[i]->Fill( diff); + } //A + } //eq=0 + } + + } + if (trigT0>5) { + const Double32_t* mean = fESD->GetT0TOF(); + Double32_t meanTOF = mean[0] + fCDBT0s[0] ; + Double32_t orA = mean[1] + fCDBT0s[1] ; + Double32_t orC = mean[2] + fCDBT0s[2] ; + + if(orA<99999) fTzeroORA->Fill(orA); + if(orC<99999) fTzeroORC->Fill(orC); + if(orA<99999 && orC<99999) fResolution->Fill((orA-orC)/2.); + if(orA<99999 && orC<99999) fTzeroORAplusORC->Fill(meanTOF); + } //if TVDC on + // printf("%f %f %f\n",orA,orC,meanTOF); + PostData(1, fTzeroObject); + } + //________________________________________________________________________ + void AliT0CalibOffsetChannelsTask::Terminate(Option_t *) +{ + + // Called once at the end of the query +} + diff --git a/T0/AliT0CalibOffsetChannelsTask.h b/T0/AliT0CalibOffsetChannelsTask.h index 152def40ecc..57ee2c930ed 100644 --- a/T0/AliT0CalibOffsetChannelsTask.h +++ b/T0/AliT0CalibOffsetChannelsTask.h @@ -1,58 +1,58 @@ -#ifndef AliT0CalibOffsetChannelsTask_cxx -#define AliT0CalibOffsetChannelsTask_cxx - -// task determines mean and sigma of T0 signals ORA, ORC, ORA-ORC, ORA+ORC/2 -// Authors: FK - -class TH1F; -class TObjArray; -class AliESDEvent; - -#include "AliAnalysisTaskSE.h" - -class AliT0CalibOffsetChannelsTask : public AliAnalysisTaskSE { - public: - AliT0CalibOffsetChannelsTask(); - AliT0CalibOffsetChannelsTask(const char *name); - virtual ~AliT0CalibOffsetChannelsTask(); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - TObjArray* GetOffsetHistos() {return fTzeroObject;} - - Float_t GetCFDvalue(Int_t channel) const {return fCDBcfds[channel];} - Float_t* GetCFDvalue() const {return (float*)fCDBcfds;} - Float_t GetTimeEq(Int_t channel) const {return fCDBdelays[channel];} - Float_t* GetTimeEq() const {return (float*)fCDBdelays;} - void SetCFDvalue(Int_t channel, Float_t val) {fCDBcfds[channel]=val;} - void SetTimeEq(Int_t channel, Float_t val) {fCDBdelays[channel]=val;} - Float_t *GetT0Means() { return fCDBT0s;} - void SetT0Means(Int_t ihist, Float_t mean ) {fCDBT0s[ihist]=mean;}; - void SetRefPMT(Int_t refPMTA = 12, Int_t refPMTC=0) {fRefPMTA = refPMTA; fRefPMTC = refPMTC;}; -private: - AliESDEvent *fESD; //! ESD object - TObjArray *fTzeroObject; // array with CFDi-CFD1 and CFDi - TH1F *fTimeDiff[24]; //! CFDi-CFD1 vs Npmt - TH1F *fCFD[24]; //! CFDi vs Npmt - TH1F *fTzeroORA; //! or A spectrum - TH1F *fTzeroORC; //! or C spectrum - TH1F *fResolution; //! or A minus or C spectrum - TH1F *fTzeroORAplusORC; //! ORA+ORC /2 - int fRunNumber; - Float_t fCDBdelays[24]; //time delays from OCDB - Float_t fCDBcfds[24]; // mean CFD from OCDB - Float_t fCDBT0s[4]; //position T0AC, T0A, T0A, resolution - Int_t fRefPMTA; // ref. PMT A side - Int_t fRefPMTC; // ref. PMT C side - - - - - AliT0CalibOffsetChannelsTask(const AliT0CalibOffsetChannelsTask&); // not implemented - AliT0CalibOffsetChannelsTask& operator=(const AliT0CalibOffsetChannelsTask&); // not implemented - - ClassDef(AliT0CalibOffsetChannelsTask, 2); // example of analysis -}; - -#endif +#ifndef AliT0CalibOffsetChannelsTask_cxx +#define AliT0CalibOffsetChannelsTask_cxx + +// task determines mean and sigma of T0 signals ORA, ORC, ORA-ORC, ORA+ORC/2 +// Authors: FK + +class TH1F; +class TObjArray; +class AliESDEvent; + +#include "AliAnalysisTaskSE.h" + +class AliT0CalibOffsetChannelsTask : public AliAnalysisTaskSE { + public: + AliT0CalibOffsetChannelsTask(); + AliT0CalibOffsetChannelsTask(const char *name); + virtual ~AliT0CalibOffsetChannelsTask(); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + TObjArray* GetOffsetHistos() {return fTzeroObject;} + + Float_t GetCFDvalue(Int_t channel) const {return fCDBcfds[channel];} + Float_t* GetCFDvalue() const {return (float*)fCDBcfds;} + Float_t GetTimeEq(Int_t channel) const {return fCDBdelays[channel];} + Float_t* GetTimeEq() const {return (float*)fCDBdelays;} + void SetCFDvalue(Int_t channel, Float_t val) {fCDBcfds[channel]=val;} + void SetTimeEq(Int_t channel, Float_t val) {fCDBdelays[channel]=val;} + Float_t *GetT0Means() { return fCDBT0s;} + void SetT0Means(Int_t ihist, Float_t mean ) {fCDBT0s[ihist]=mean;}; + void SetRefPMT(Int_t refPMTA = 12, Int_t refPMTC=0) {fRefPMTA = refPMTA; fRefPMTC = refPMTC;}; +private: + AliESDEvent *fESD; //! ESD object + TObjArray *fTzeroObject; // array with CFDi-CFD1 and CFDi + TH1F *fTimeDiff[24]; //! CFDi-CFD1 vs Npmt + TH1F *fCFD[24]; //! CFDi vs Npmt + TH1F *fTzeroORA; //! or A spectrum + TH1F *fTzeroORC; //! or C spectrum + TH1F *fResolution; //! or A minus or C spectrum + TH1F *fTzeroORAplusORC; //! ORA+ORC /2 + int fRunNumber; + Float_t fCDBdelays[24]; //time delays from OCDB + Float_t fCDBcfds[24]; // mean CFD from OCDB + Float_t fCDBT0s[4]; //position T0AC, T0A, T0A, resolution + Int_t fRefPMTA; // ref. PMT A side + Int_t fRefPMTC; // ref. PMT C side + + + + + AliT0CalibOffsetChannelsTask(const AliT0CalibOffsetChannelsTask&); // not implemented + AliT0CalibOffsetChannelsTask& operator=(const AliT0CalibOffsetChannelsTask&); // not implemented + + ClassDef(AliT0CalibOffsetChannelsTask, 2); // example of analysis +}; + +#endif diff --git a/T0/AliT0HIanalysisTask.h b/T0/AliT0HIanalysisTask.h index 6bfaccc1b7c..0710eae6cb3 100644 --- a/T0/AliT0HIanalysisTask.h +++ b/T0/AliT0HIanalysisTask.h @@ -1,89 +1,89 @@ -#ifndef AliT0HIanalysisTask_cxx -#define AliT0HIanalysisTask_cxx - -// example of an analysis task creating a p_t spectrum -// Authors: Panos Cristakoglou, Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing - -#include "TH1F.h" -#include "TH2F.h" -#include "TList.h" -#include "TTree.h" -#include "TString.h" - -#define NPMT0 24 //number T0 of photomultipliers - -class AliESDEvent; -#include "AliAnalysisTaskSE.h" - -class AliT0HIanalysisTask : public AliAnalysisTaskSE { - public: - AliT0HIanalysisTask() : AliAnalysisTaskSE(), - fESD(0), fOutputList(0), fT0OutTree(0) {}; - AliT0HIanalysisTask(const char *name); - virtual ~AliT0HIanalysisTask(); - - virtual void UserCreateOutputObjects(); - virtual void UserExec(Option_t *option); - virtual void Terminate(Option_t *); - Bool_t UserNotify(); - private: - AliESDEvent *fESD; //! ESD object - TList *fOutputList; //! Output list - TTree *fT0OutTree; //output tree - Int_t fEvent; - Int_t fOrbit; - Int_t fBC; - Int_t fTrackletSPD; - Int_t fClustersSPD; - Int_t fNcont; - Int_t fNcontTPC; - Float_t fVertex; - Float_t fVertexPrim; - Float_t fVertexSPD; - Float_t fVertexTPC; - Float_t fMeanAC; - Float_t fMeanA; - Float_t fMeanC; - Float_t fMeanACcalc; - Float_t fMeanAcalc; - Float_t fMeanCcalc; - Float_t fMultV0A; - Float_t fMultV0C; - Float_t fTimeV0A; - Float_t fTimeV0C; - Float_t fSumampA; - Float_t fSumampC; - UInt_t ftimestamp; - Float_t fSep2; - Bool_t fZDCcut; - Int_t fT0Trigger; - Bool_t fpileup; - TObjString fTrigger; - TH1F **fT0_amplitude; //! Amplitudes - TH1F **fT0_time; //! Time - Float_t fcentralityV0M; - Float_t fcentralityZDC; - Float_t fcentralityTRK; - Float_t fcentralityCLA; - Int_t fESDtracks; - Float_t fOrA[5]; - Float_t fOrC[5]; - Float_t fTVDC[5]; - - Float_t famp[24]; - Float_t ftime[24]; - Float_t fRawTime[24][5]; - Bool_t fT0pileup[3]; - Int_t fMultiplicity; - TObjString fTriggerinput ; - Int_t fTOFtracks; - Float_t t0tofTrack; - AliESDpid* fESDpid; //! esd pid - - AliT0HIanalysisTask(const AliT0HIanalysisTask&); // not implemented - AliT0HIanalysisTask& operator=(const AliT0HIanalysisTask&); // not implemented - - ClassDef(AliT0HIanalysisTask, 3); // example of analysis -}; - -#endif +#ifndef AliT0HIanalysisTask_cxx +#define AliT0HIanalysisTask_cxx + +// example of an analysis task creating a p_t spectrum +// Authors: Panos Cristakoglou, Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing + +#include "TH1F.h" +#include "TH2F.h" +#include "TList.h" +#include "TTree.h" +#include "TString.h" + +#define NPMT0 24 //number T0 of photomultipliers + +class AliESDEvent; +#include "AliAnalysisTaskSE.h" + +class AliT0HIanalysisTask : public AliAnalysisTaskSE { + public: + AliT0HIanalysisTask() : AliAnalysisTaskSE(), + fESD(0), fOutputList(0), fT0OutTree(0) {}; + AliT0HIanalysisTask(const char *name); + virtual ~AliT0HIanalysisTask(); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t *option); + virtual void Terminate(Option_t *); + Bool_t UserNotify(); + private: + AliESDEvent *fESD; //! ESD object + TList *fOutputList; //! Output list + TTree *fT0OutTree; //output tree + Int_t fEvent; + Int_t fOrbit; + Int_t fBC; + Int_t fTrackletSPD; + Int_t fClustersSPD; + Int_t fNcont; + Int_t fNcontTPC; + Float_t fVertex; + Float_t fVertexPrim; + Float_t fVertexSPD; + Float_t fVertexTPC; + Float_t fMeanAC; + Float_t fMeanA; + Float_t fMeanC; + Float_t fMeanACcalc; + Float_t fMeanAcalc; + Float_t fMeanCcalc; + Float_t fMultV0A; + Float_t fMultV0C; + Float_t fTimeV0A; + Float_t fTimeV0C; + Float_t fSumampA; + Float_t fSumampC; + UInt_t ftimestamp; + Float_t fSep2; + Bool_t fZDCcut; + Int_t fT0Trigger; + Bool_t fpileup; + TObjString fTrigger; + TH1F **fT0_amplitude; //! Amplitudes + TH1F **fT0_time; //! Time + Float_t fcentralityV0M; + Float_t fcentralityZDC; + Float_t fcentralityTRK; + Float_t fcentralityCLA; + Int_t fESDtracks; + Float_t fOrA[5]; + Float_t fOrC[5]; + Float_t fTVDC[5]; + + Float_t famp[24]; + Float_t ftime[24]; + Float_t fRawTime[24][5]; + Bool_t fT0pileup[3]; + Int_t fMultiplicity; + TObjString fTriggerinput ; + Int_t fTOFtracks; + Float_t t0tofTrack; + AliESDpid* fESDpid; //! esd pid + + AliT0HIanalysisTask(const AliT0HIanalysisTask&); // not implemented + AliT0HIanalysisTask& operator=(const AliT0HIanalysisTask&); // not implemented + + ClassDef(AliT0HIanalysisTask, 3); // example of analysis +}; + +#endif diff --git a/TEvtGen/EvtGen/DecayTable/BTOD.DEC b/TEvtGen/EvtGen/DecayTable/BTOD.DEC index 9bf2f7fbf22..15969502307 100644 --- a/TEvtGen/EvtGen/DecayTable/BTOD.DEC +++ b/TEvtGen/EvtGen/DecayTable/BTOD.DEC @@ -1,397 +1,397 @@ -## -Decay anti-B0 -# b -> c semileptonic -# -0.0529 D*+ e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0208 D+ e- anti-nu_e PHOTOS ISGW2; -0.0052 D_1+ e- anti-nu_e PHOTOS ISGW2; -0.0045 D_0*+ e- anti-nu_e PHOTOS ISGW2; -0.0083 D'_1+ e- anti-nu_e PHOTOS ISGW2; -0.0023 D_2*+ e- anti-nu_e PHOTOS ISGW2; -0.0003 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0065 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0010 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0032 D0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; -# -0.0529 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0208 D+ mu- anti-nu_mu PHOTOS ISGW2; -0.0052 D_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0045 D_0*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0083 D'_1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0023 D_2*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0003 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0065 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0032 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0202 D*+ tau- anti-nu_tau ISGW2; -0.0088 D+ tau- anti-nu_tau ISGW2; -0.0013 D_1+ tau- anti-nu_tau ISGW2; -0.0013 D_0*+ tau- anti-nu_tau ISGW2; -0.0020 D'_1+ tau- anti-nu_tau ISGW2; -0.0020 D_2*+ tau- anti-nu_tau ISGW2; -# -# -# b->u hadronic -# Ref. [B1]: -# Lange Nov 14, 2004 (flip D_s K -- is opposite of D_s pi) -0.000015 D_s- pi+ PHSP; -0.000028 D_s+ K- PHSP; -0.000029 D_s*- pi+ SVS; -0.000022 D_s*+ K- SVS; -# -0.000016 rho+ D_s- SVS; -0.000016 K*- D_s+ SVS; -0.000016 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000016 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -Enddecay - -Decay B0 -# b -> c semileptonic -# =10.4% total non-D and D* = 3.4% (changing to 2.7) -0.0529 D*- e+ nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0208 D- e+ nu_e PHOTOS ISGW2; -0.0052 D_1- e+ nu_e PHOTOS ISGW2; -0.0045 D_0*- e+ nu_e PHOTOS ISGW2; -0.0083 D'_1- e+ nu_e PHOTOS ISGW2; -0.0023 D_2*- e+ nu_e PHOTOS ISGW2; -0.0003 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0065 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; -0.0010 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0032 anti-D0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; -0.0529 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0208 D- mu+ nu_mu PHOTOS ISGW2; -0.0052 D_1- mu+ nu_mu PHOTOS ISGW2; -0.0045 D_0*- mu+ nu_mu PHOTOS ISGW2; -0.0083 D'_1- mu+ nu_mu PHOTOS ISGW2; -0.0023 D_2*- mu+ nu_mu PHOTOS ISGW2; -0.0003 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0065 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0032 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0202 D*- tau+ nu_tau ISGW2; # taken from Belle- Phys. Rev. Lett. 99, 191807 (2007) -0.0088 D- tau+ nu_tau ISGW2; -0.0013 D_1- tau+ nu_tau ISGW2; -0.0013 D_0*- tau+ nu_tau ISGW2; -0.0020 D'_1- tau+ nu_tau ISGW2; -0.0020 D_2*- tau+ nu_tau ISGW2; -# -# b->u hadronic -# Ref. [B1]: -# Lange Nov14,2004 (flip D_s K --opposite of D_s pi) -0.000015 D_s+ pi- PHSP; -0.000028 D_s- K+ PHSP; -0.000029 D_s*+ pi- SVS; -0.000022 D_s*- K+ SVS; -# -0.000016 rho- D_s+ SVS; -0.000016 K*+ D_s- SVS; -0.000016 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.000016 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -Enddecay - -Decay B+ -# -# b -> c semileptonic -0.0650 anti-D*0 e+ nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0215 anti-D0 e+ nu_e PHOTOS ISGW2; -0.0056 anti-D_10 e+ nu_e PHOTOS ISGW2; -0.0049 anti-D_0*0 e+ nu_e PHOTOS ISGW2; -0.009 anti-D'_10 e+ nu_e PHOTOS ISGW2; -0.003 anti-D_2*0 e+ nu_e PHOTOS ISGW2; -0.0063 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; -0.0003 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -0.0052 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; -# -0.0650 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0215 anti-D0 mu+ nu_mu PHOTOS ISGW2; -0.0056 anti-D_10 mu+ nu_mu PHOTOS ISGW2; -0.0049 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; -0.009 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; -0.003 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; -0.0063 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0003 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0052 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; -0.0010 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0208 anti-D*0 tau+ nu_tau ISGW2; -0.0088 anti-D0 tau+ nu_tau ISGW2; -0.0013 anti-D_10 tau+ nu_tau ISGW2; -0.0013 anti-D_0*0 tau+ nu_tau ISGW2; -0.0020 anti-D'_10 tau+ nu_tau ISGW2; -0.0020 anti-D_2*0 tau+ nu_tau ISGW2; -# -# -# b->u hadronic -# Ref. [B1]: -# -0.000016 D_s+ pi0 PHSP; -0.000020 D_s*+ pi0 SVS; -# -0.000028 rho0 D_s+ SVS; -0.000028 D_s*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - -Enddecay - - - - -Decay B- -# -# b -> c semileptonic -# -0.0650 D*0 e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; -0.0215 D0 e- anti-nu_e PHOTOS ISGW2; -0.0056 D_10 e- anti-nu_e PHOTOS ISGW2; -0.0049 D_0*0 e- anti-nu_e PHOTOS ISGW2; -0.009 D'_10 e- anti-nu_e PHOTOS ISGW2; -0.003 D_2*0 e- anti-nu_e PHOTOS ISGW2; -0.0063 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0052 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; -0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; -# -0.0650 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; -0.0215 D0 mu- anti-nu_mu PHOTOS ISGW2; -0.0056 D_10 mu- anti-nu_mu PHOTOS ISGW2; -0.0049 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; -0.009 D'_10 mu- anti-nu_mu PHOTOS ISGW2; -0.003 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; -0.0063 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0052 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; -# -# b -> c tau nu -# -0.0208 D*0 tau- anti-nu_tau ISGW2;# equel to B0-> D*- tau+ nu -0.0088 D0 tau- anti-nu_tau ISGW2; -0.0013 D_10 tau- anti-nu_tau ISGW2; -0.0013 D_0*0 tau- anti-nu_tau ISGW2; -0.0020 D'_10 tau- anti-nu_tau ISGW2; -0.0020 D_2*0 tau- anti-nu_tau ISGW2; -# -# b->u hadronic -# Ref. [B1]: -# -0.000016 D_s- pi0 PHSP; -0.000020 D_s*- pi0 SVS; -# -0.000028 rho0 D_s- SVS; -0.000028 D_s*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; - -Enddecay - -Decay B_s0 -0.0210 D_s- e+ nu_e PHOTOS ISGW2; -0.0490 D_s*- e+ nu_e PHOTOS ISGW2; -0.0040 D_s1- e+ nu_e PHOTOS ISGW2; -0.0040 D_s0*- e+ nu_e PHOTOS ISGW2; -0.0070 D'_s1- e+ nu_e PHOTOS ISGW2; -0.0070 D_s2*- e+ nu_e PHOTOS ISGW2; -0.0210 D_s- mu+ nu_mu PHOTOS ISGW2; -0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2; -0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2; -0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2; -0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2; -0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2; -#fkw 5/04/01 changed these to account for taking out non-res -#0.0070 D_s- tau+ nu_tau ISGW2; -#0.0150 D_s*- tau+ nu_tau ISGW2; -#0.0013 D_s1- tau+ nu_tau ISGW2; -#0.0013 D_s0*- tau+ nu_tau ISGW2; -#0.0023 D'_s1- tau+ nu_tau ISGW2; -#0.0023 D_s2*- tau+ nu_tau ISGW2; -0.0080 D_s- tau+ nu_tau ISGW2; -0.0160 D_s*- tau+ nu_tau ISGW2; -0.0018 D_s1- tau+ nu_tau ISGW2; -0.0018 D_s0*- tau+ nu_tau ISGW2; -0.0028 D'_s1- tau+ nu_tau ISGW2; -0.0028 D_s2*- tau+ nu_tau ISGW2; -Enddecay - -Decay anti-B_s0 -# b --> c (l nu) -# Sum = 24.5% -0.0210 D_s+ e- anti-nu_e PHOTOS ISGW2; -0.0490 D_s*+ e- anti-nu_e PHOTOS ISGW2; -0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2; -0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2; -0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2; -0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2; -# -0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2; -0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2; -0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2; -0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; -# -#0.0070 D_s+ tau- anti-nu_tau ISGW2; -#0.0150 D_s*+ tau- anti-nu_tau ISGW2; -#0.0013 D_s1+ tau- anti-nu_tau ISGW2; -#0.0013 D_s0*+ tau- anti-nu_tau ISGW2; -#0.0023 D'_s1+ tau- anti-nu_tau ISGW2; -#0.0023 D_s2*+ tau- anti-nu_tau ISGW2; -# fkw 5/04/01 changed the above to account for the non-res part that I -# had to take out. -0.0080 D_s+ tau- anti-nu_tau ISGW2; -0.0160 D_s*+ tau- anti-nu_tau ISGW2; -0.0018 D_s1+ tau- anti-nu_tau ISGW2; -0.0018 D_s0*+ tau- anti-nu_tau ISGW2; -0.0028 D'_s1+ tau- anti-nu_tau ISGW2; -0.0028 D_s2*+ tau- anti-nu_tau ISGW2; -Enddecay - -Decay B_c- -0.00004 anti-D0 e- anti-nu_e PHOTOS PHSP; -0.00018 anti-D*0 e- anti-nu_e PHOTOS PHSP; -0.00004 anti-D0 mu- anti-nu_mu PHOTOS PHSP; -0.00018 anti-D*0 mu- anti-nu_mu PHOTOS PHSP; -0.00002 anti-D0 tau- anti-nu_tau PHSP; -0.00008 anti-D*0 tau- anti-nu_tau PHSP; -0.000053 D- D0 PHSP; -0.000075 D*0 D- SVS; -0.000049 D*- D0 SVS; -0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000048 D_s- D0 PHSP; -0.0000071 D*0 D_s- SVS; -0.0000045 D_s*- D0 SVS; -0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0000003 D- anti-D0 PHSP; -0.0000003 anti-D*0 D- SVS; -0.0000004 D*- anti-D0 SVS; -0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000066 D_s- anti-D0 PHSP; -0.0000063 anti-D*0 D_s- SVS; -0.0000085 D_s*- anti-D0 SVS; -0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.00280 eta_c D_s- PHSP; -0.00270 D_s*- eta_c SVS; -0.00015 eta_c D- PHSP; -0.00010 D*- eta_c SVS; -0.00170 J/psi D_s- SVS; -0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00009 J/psi D- SVS; -0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -Enddecay - -Decay B_c+ -0.00004 D0 e+ nu_e PHOTOS PHSP; -0.00018 D*0 e+ nu_e PHOTOS PHSP; -0.00004 D0 mu+ nu_mu PHOTOS PHSP; -0.00018 D*0 mu+ nu_mu PHOTOS PHSP; -0.00002 D0 tau+ nu_tau PHSP; -0.00008 D*0 tau+ nu_tau PHSP; -# -0.000053 D+ anti-D0 PHSP; -0.000075 anti-D*0 D+ SVS; -0.000049 D*+ anti-D0 SVS; -0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000048 D_s+ anti-D0 PHSP; -0.0000071 anti-D*0 D_s+ SVS; -0.0000045 D_s*+ anti-D0 SVS; -0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.0000003 D+ D0 PHSP; -0.0000003 D*0 D+ SVS; -0.0000004 D*+ D0 SVS; -0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.0000066 D_s+ D0 PHSP; -0.0000063 D*0 D_s+ SVS; -0.0000085 D_s*+ D0 SVS; -0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -# -0.00280 eta_c D_s+ PHSP; -0.00270 D_s*+ eta_c SVS; -0.00015 eta_c D+ PHSP; -0.00010 D*+ eta_c SVS; -0.00170 J/psi D_s+ SVS; -0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -0.00009 J/psi D+ SVS; -0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; -Enddecay - -#Decay anti-D*0 -#Enddecay - -#Decay D*0 -#Enddecay - -Decay anti-D0 -Enddecay - -Decay D0 -Enddecay - -#Decay anti-D_10 -#Enddecay - -#Decay D_10 -#Enddecay - -#Decay anti-D_0*0 -#Enddecay - -#Decay D_0*0 -#Enddecay - -#Decay anti-D'_10 -#Enddecay - -#Decay D'_10 -#Enddecay - -#Decay anti-D_2*0 -#Enddecay - -#Decay D_2*0 -#Enddecay - -#Decay D*+ -#Enddecay - -#Decay D*- -#Enddecay - -Decay D+ -Enddecay - -Decay D- -Enddecay - -#Decay D_1+ -#Enddecay - -Decay J/psi -Enddecay - -Decay eta_c -Enddecay - -#Decay D_s*+ -#Enddecay - -#Decay D_s*- -#Enddecay - -Decay D_s+ -Enddecay - -Decay D_s- -Enddecay -# -Decay pi0 -Enddecay - -End +## +Decay anti-B0 +# b -> c semileptonic +# +0.0529 D*+ e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; +0.0208 D+ e- anti-nu_e PHOTOS ISGW2; +0.0052 D_1+ e- anti-nu_e PHOTOS ISGW2; +0.0045 D_0*+ e- anti-nu_e PHOTOS ISGW2; +0.0083 D'_1+ e- anti-nu_e PHOTOS ISGW2; +0.0023 D_2*+ e- anti-nu_e PHOTOS ISGW2; +0.0003 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; +0.0065 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; +0.0010 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; +0.0032 D0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; +# +0.0529 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; +0.0208 D+ mu- anti-nu_mu PHOTOS ISGW2; +0.0052 D_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0045 D_0*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0083 D'_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0023 D_2*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0003 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0065 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0010 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0032 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.0202 D*+ tau- anti-nu_tau ISGW2; +0.0088 D+ tau- anti-nu_tau ISGW2; +0.0013 D_1+ tau- anti-nu_tau ISGW2; +0.0013 D_0*+ tau- anti-nu_tau ISGW2; +0.0020 D'_1+ tau- anti-nu_tau ISGW2; +0.0020 D_2*+ tau- anti-nu_tau ISGW2; +# +# +# b->u hadronic +# Ref. [B1]: +# Lange Nov 14, 2004 (flip D_s K -- is opposite of D_s pi) +0.000015 D_s- pi+ PHSP; +0.000028 D_s+ K- PHSP; +0.000029 D_s*- pi+ SVS; +0.000022 D_s*+ K- SVS; +# +0.000016 rho+ D_s- SVS; +0.000016 K*- D_s+ SVS; +0.000016 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000016 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +Enddecay + +Decay B0 +# b -> c semileptonic +# =10.4% total non-D and D* = 3.4% (changing to 2.7) +0.0529 D*- e+ nu_e PHOTOS HQET 0.77 1.33 0.92; +0.0208 D- e+ nu_e PHOTOS ISGW2; +0.0052 D_1- e+ nu_e PHOTOS ISGW2; +0.0045 D_0*- e+ nu_e PHOTOS ISGW2; +0.0083 D'_1- e+ nu_e PHOTOS ISGW2; +0.0023 D_2*- e+ nu_e PHOTOS ISGW2; +0.0003 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; +0.0065 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; +0.0010 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; +0.0032 anti-D0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; +0.0529 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; +0.0208 D- mu+ nu_mu PHOTOS ISGW2; +0.0052 D_1- mu+ nu_mu PHOTOS ISGW2; +0.0045 D_0*- mu+ nu_mu PHOTOS ISGW2; +0.0083 D'_1- mu+ nu_mu PHOTOS ISGW2; +0.0023 D_2*- mu+ nu_mu PHOTOS ISGW2; +0.0003 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0065 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0010 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0032 anti-D0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.0202 D*- tau+ nu_tau ISGW2; # taken from Belle- Phys. Rev. Lett. 99, 191807 (2007) +0.0088 D- tau+ nu_tau ISGW2; +0.0013 D_1- tau+ nu_tau ISGW2; +0.0013 D_0*- tau+ nu_tau ISGW2; +0.0020 D'_1- tau+ nu_tau ISGW2; +0.0020 D_2*- tau+ nu_tau ISGW2; +# +# b->u hadronic +# Ref. [B1]: +# Lange Nov14,2004 (flip D_s K --opposite of D_s pi) +0.000015 D_s+ pi- PHSP; +0.000028 D_s- K+ PHSP; +0.000029 D_s*+ pi- SVS; +0.000022 D_s*- K+ SVS; +# +0.000016 rho- D_s+ SVS; +0.000016 K*+ D_s- SVS; +0.000016 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000016 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +Enddecay + +Decay B+ +# +# b -> c semileptonic +0.0650 anti-D*0 e+ nu_e PHOTOS HQET 0.77 1.33 0.92; +0.0215 anti-D0 e+ nu_e PHOTOS ISGW2; +0.0056 anti-D_10 e+ nu_e PHOTOS ISGW2; +0.0049 anti-D_0*0 e+ nu_e PHOTOS ISGW2; +0.009 anti-D'_10 e+ nu_e PHOTOS ISGW2; +0.003 anti-D_2*0 e+ nu_e PHOTOS ISGW2; +0.0063 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; +0.0003 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; +0.0052 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; +0.0010 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; +# +0.0650 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; +0.0215 anti-D0 mu+ nu_mu PHOTOS ISGW2; +0.0056 anti-D_10 mu+ nu_mu PHOTOS ISGW2; +0.0049 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; +0.009 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; +0.003 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; +0.0063 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0003 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0052 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.0010 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.0208 anti-D*0 tau+ nu_tau ISGW2; +0.0088 anti-D0 tau+ nu_tau ISGW2; +0.0013 anti-D_10 tau+ nu_tau ISGW2; +0.0013 anti-D_0*0 tau+ nu_tau ISGW2; +0.0020 anti-D'_10 tau+ nu_tau ISGW2; +0.0020 anti-D_2*0 tau+ nu_tau ISGW2; +# +# +# b->u hadronic +# Ref. [B1]: +# +0.000016 D_s+ pi0 PHSP; +0.000020 D_s*+ pi0 SVS; +# +0.000028 rho0 D_s+ SVS; +0.000028 D_s*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; + +Enddecay + + + + +Decay B- +# +# b -> c semileptonic +# +0.0650 D*0 e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; +0.0215 D0 e- anti-nu_e PHOTOS ISGW2; +0.0056 D_10 e- anti-nu_e PHOTOS ISGW2; +0.0049 D_0*0 e- anti-nu_e PHOTOS ISGW2; +0.009 D'_10 e- anti-nu_e PHOTOS ISGW2; +0.003 D_2*0 e- anti-nu_e PHOTOS ISGW2; +0.0063 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; +0.0003 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; +0.0052 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; +0.0010 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; +# +0.0650 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; +0.0215 D0 mu- anti-nu_mu PHOTOS ISGW2; +0.0056 D_10 mu- anti-nu_mu PHOTOS ISGW2; +0.0049 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; +0.009 D'_10 mu- anti-nu_mu PHOTOS ISGW2; +0.003 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; +0.0063 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0003 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0052 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.0010 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.0208 D*0 tau- anti-nu_tau ISGW2;# equel to B0-> D*- tau+ nu +0.0088 D0 tau- anti-nu_tau ISGW2; +0.0013 D_10 tau- anti-nu_tau ISGW2; +0.0013 D_0*0 tau- anti-nu_tau ISGW2; +0.0020 D'_10 tau- anti-nu_tau ISGW2; +0.0020 D_2*0 tau- anti-nu_tau ISGW2; +# +# b->u hadronic +# Ref. [B1]: +# +0.000016 D_s- pi0 PHSP; +0.000020 D_s*- pi0 SVS; +# +0.000028 rho0 D_s- SVS; +0.000028 D_s*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; + +Enddecay + +Decay B_s0 +0.0210 D_s- e+ nu_e PHOTOS ISGW2; +0.0490 D_s*- e+ nu_e PHOTOS ISGW2; +0.0040 D_s1- e+ nu_e PHOTOS ISGW2; +0.0040 D_s0*- e+ nu_e PHOTOS ISGW2; +0.0070 D'_s1- e+ nu_e PHOTOS ISGW2; +0.0070 D_s2*- e+ nu_e PHOTOS ISGW2; +0.0210 D_s- mu+ nu_mu PHOTOS ISGW2; +0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2; +0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2; +0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2; +0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2; +0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2; +#fkw 5/04/01 changed these to account for taking out non-res +#0.0070 D_s- tau+ nu_tau ISGW2; +#0.0150 D_s*- tau+ nu_tau ISGW2; +#0.0013 D_s1- tau+ nu_tau ISGW2; +#0.0013 D_s0*- tau+ nu_tau ISGW2; +#0.0023 D'_s1- tau+ nu_tau ISGW2; +#0.0023 D_s2*- tau+ nu_tau ISGW2; +0.0080 D_s- tau+ nu_tau ISGW2; +0.0160 D_s*- tau+ nu_tau ISGW2; +0.0018 D_s1- tau+ nu_tau ISGW2; +0.0018 D_s0*- tau+ nu_tau ISGW2; +0.0028 D'_s1- tau+ nu_tau ISGW2; +0.0028 D_s2*- tau+ nu_tau ISGW2; +Enddecay + +Decay anti-B_s0 +# b --> c (l nu) +# Sum = 24.5% +0.0210 D_s+ e- anti-nu_e PHOTOS ISGW2; +0.0490 D_s*+ e- anti-nu_e PHOTOS ISGW2; +0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2; +0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2; +0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2; +0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2; +# +0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2; +0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; +# +#0.0070 D_s+ tau- anti-nu_tau ISGW2; +#0.0150 D_s*+ tau- anti-nu_tau ISGW2; +#0.0013 D_s1+ tau- anti-nu_tau ISGW2; +#0.0013 D_s0*+ tau- anti-nu_tau ISGW2; +#0.0023 D'_s1+ tau- anti-nu_tau ISGW2; +#0.0023 D_s2*+ tau- anti-nu_tau ISGW2; +# fkw 5/04/01 changed the above to account for the non-res part that I +# had to take out. +0.0080 D_s+ tau- anti-nu_tau ISGW2; +0.0160 D_s*+ tau- anti-nu_tau ISGW2; +0.0018 D_s1+ tau- anti-nu_tau ISGW2; +0.0018 D_s0*+ tau- anti-nu_tau ISGW2; +0.0028 D'_s1+ tau- anti-nu_tau ISGW2; +0.0028 D_s2*+ tau- anti-nu_tau ISGW2; +Enddecay + +Decay B_c- +0.00004 anti-D0 e- anti-nu_e PHOTOS PHSP; +0.00018 anti-D*0 e- anti-nu_e PHOTOS PHSP; +0.00004 anti-D0 mu- anti-nu_mu PHOTOS PHSP; +0.00018 anti-D*0 mu- anti-nu_mu PHOTOS PHSP; +0.00002 anti-D0 tau- anti-nu_tau PHSP; +0.00008 anti-D*0 tau- anti-nu_tau PHSP; +0.000053 D- D0 PHSP; +0.000075 D*0 D- SVS; +0.000049 D*- D0 SVS; +0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s- D0 PHSP; +0.0000071 D*0 D_s- SVS; +0.0000045 D_s*- D0 SVS; +0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D- anti-D0 PHSP; +0.0000003 anti-D*0 D- SVS; +0.0000004 D*- anti-D0 SVS; +0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s- anti-D0 PHSP; +0.0000063 anti-D*0 D_s- SVS; +0.0000085 D_s*- anti-D0 SVS; +0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s- PHSP; +0.00270 D_s*- eta_c SVS; +0.00015 eta_c D- PHSP; +0.00010 D*- eta_c SVS; +0.00170 J/psi D_s- SVS; +0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D- SVS; +0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +Enddecay + +Decay B_c+ +0.00004 D0 e+ nu_e PHOTOS PHSP; +0.00018 D*0 e+ nu_e PHOTOS PHSP; +0.00004 D0 mu+ nu_mu PHOTOS PHSP; +0.00018 D*0 mu+ nu_mu PHOTOS PHSP; +0.00002 D0 tau+ nu_tau PHSP; +0.00008 D*0 tau+ nu_tau PHSP; +# +0.000053 D+ anti-D0 PHSP; +0.000075 anti-D*0 D+ SVS; +0.000049 D*+ anti-D0 SVS; +0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s+ anti-D0 PHSP; +0.0000071 anti-D*0 D_s+ SVS; +0.0000045 D_s*+ anti-D0 SVS; +0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D+ D0 PHSP; +0.0000003 D*0 D+ SVS; +0.0000004 D*+ D0 SVS; +0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s+ D0 PHSP; +0.0000063 D*0 D_s+ SVS; +0.0000085 D_s*+ D0 SVS; +0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s+ PHSP; +0.00270 D_s*+ eta_c SVS; +0.00015 eta_c D+ PHSP; +0.00010 D*+ eta_c SVS; +0.00170 J/psi D_s+ SVS; +0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D+ SVS; +0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +Enddecay + +#Decay anti-D*0 +#Enddecay + +#Decay D*0 +#Enddecay + +Decay anti-D0 +Enddecay + +Decay D0 +Enddecay + +#Decay anti-D_10 +#Enddecay + +#Decay D_10 +#Enddecay + +#Decay anti-D_0*0 +#Enddecay + +#Decay D_0*0 +#Enddecay + +#Decay anti-D'_10 +#Enddecay + +#Decay D'_10 +#Enddecay + +#Decay anti-D_2*0 +#Enddecay + +#Decay D_2*0 +#Enddecay + +#Decay D*+ +#Enddecay + +#Decay D*- +#Enddecay + +Decay D+ +Enddecay + +Decay D- +Enddecay + +#Decay D_1+ +#Enddecay + +Decay J/psi +Enddecay + +Decay eta_c +Enddecay + +#Decay D_s*+ +#Enddecay + +#Decay D_s*- +#Enddecay + +Decay D_s+ +Enddecay + +Decay D_s- +Enddecay +# +Decay pi0 +Enddecay + +End diff --git a/TOF/AliTOFCableLengthMap.h b/TOF/AliTOFCableLengthMap.h index 0c4f34c6d39..0438e1ebdef 100644 --- a/TOF/AliTOFCableLengthMap.h +++ b/TOF/AliTOFCableLengthMap.h @@ -1,36 +1,36 @@ -#ifndef ALITOFCABLELENGTHMAP_H -#define ALITOFCABLELENGTHMAP_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: $ */ - -/////////////////////////////////////////////////////////////////////////////// -// // -// TOF Cable Length Map class // -// // -/////////////////////////////////////////////////////////////////////////////// - -#include "TObject.h" -#include "AliTOFGeometry.h" - -class AliTOFCableLengthMap: public TObject{ - - public: - AliTOFCableLengthMap(); - virtual ~AliTOFCableLengthMap(); - static Float_t GetCableLength(Int_t icrate, Int_t islot, Int_t ichain, Int_t itdc); - static Float_t GetCableTimeShift(Int_t icrate, Int_t islot, Int_t ichain, Int_t itdc); - static Int_t GetCableTimeShiftBin(Int_t icrate, Int_t islot, Int_t ichain, Int_t itdc); - static Float_t GetPropagationDelay() {return fgkPropagationDelay;}; - - private: - - static const Float_t fgkCableLength[72][10][2][5];//Cable Length - static const Float_t fgkPropagationDelay;// Propagation delay [ns/cm] - - ClassDef(AliTOFCableLengthMap,0) // TOF Cable Length Map class - }; - -#endif +#ifndef ALITOFCABLELENGTHMAP_H +#define ALITOFCABLELENGTHMAP_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: $ */ + +/////////////////////////////////////////////////////////////////////////////// +// // +// TOF Cable Length Map class // +// // +/////////////////////////////////////////////////////////////////////////////// + +#include "TObject.h" +#include "AliTOFGeometry.h" + +class AliTOFCableLengthMap: public TObject{ + + public: + AliTOFCableLengthMap(); + virtual ~AliTOFCableLengthMap(); + static Float_t GetCableLength(Int_t icrate, Int_t islot, Int_t ichain, Int_t itdc); + static Float_t GetCableTimeShift(Int_t icrate, Int_t islot, Int_t ichain, Int_t itdc); + static Int_t GetCableTimeShiftBin(Int_t icrate, Int_t islot, Int_t ichain, Int_t itdc); + static Float_t GetPropagationDelay() {return fgkPropagationDelay;}; + + private: + + static const Float_t fgkCableLength[72][10][2][5];//Cable Length + static const Float_t fgkPropagationDelay;// Propagation delay [ns/cm] + + ClassDef(AliTOFCableLengthMap,0) // TOF Cable Length Map class + }; + +#endif diff --git a/TOF/AliTOFChannelOnlineStatus.h b/TOF/AliTOFChannelOnlineStatus.h index 37b5e28b22d..8284cf5d7b0 100644 --- a/TOF/AliTOFChannelOnlineStatus.h +++ b/TOF/AliTOFChannelOnlineStatus.h @@ -1,42 +1,42 @@ -#ifndef ALITOFCHANNELONLINESTATUS_H -#define ALITOFCHANNELONLINESTATUS_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -////////////////////////////////////////////////////// -// class for TOF Online calibration for noise run // -////////////////////////////////////////////////////// - -#include "TObject.h" - -class AliTOFChannelOnlineStatus: public TObject { - -public: - AliTOFChannelOnlineStatus(); - AliTOFChannelOnlineStatus(UChar_t status); - AliTOFChannelOnlineStatus(const AliTOFChannelOnlineStatus &chan); - AliTOFChannelOnlineStatus& operator= (const AliTOFChannelOnlineStatus &chan); - virtual ~AliTOFChannelOnlineStatus(){}; - UChar_t GetStatus() const {return fStatus;} - void SetStatus(UChar_t status) {fStatus=status;} - - enum{ - kTOFOnlineUnknown=0x0, kTOFOnlineOk=0x15, kTOFOnlineBad=0x2a, - kTOFHWOk=0x1, kTOFHWBad=0x2, kTOFHVUnknown=0x0, - kTOFPulserOk=0x4, kTOFPulserBad=0x8, kTOFPulserUnknown=0x0, - kTOFNoiseOk=0x10, kTOFNoiseBad=0x20, kTOFNoiseUnknown=0x0 - }; - - enum{ - kRightShiftHW=0,kRightShiftPulser=2,kRightShiftNoise=4 - }; - -private: - UChar_t fStatus; // Status of the channel - - ClassDef(AliTOFChannelOnlineStatus,1) // TOF Online Calibration object - // setting status -}; - -#endif +#ifndef ALITOFCHANNELONLINESTATUS_H +#define ALITOFCHANNELONLINESTATUS_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +////////////////////////////////////////////////////// +// class for TOF Online calibration for noise run // +////////////////////////////////////////////////////// + +#include "TObject.h" + +class AliTOFChannelOnlineStatus: public TObject { + +public: + AliTOFChannelOnlineStatus(); + AliTOFChannelOnlineStatus(UChar_t status); + AliTOFChannelOnlineStatus(const AliTOFChannelOnlineStatus &chan); + AliTOFChannelOnlineStatus& operator= (const AliTOFChannelOnlineStatus &chan); + virtual ~AliTOFChannelOnlineStatus(){}; + UChar_t GetStatus() const {return fStatus;} + void SetStatus(UChar_t status) {fStatus=status;} + + enum{ + kTOFOnlineUnknown=0x0, kTOFOnlineOk=0x15, kTOFOnlineBad=0x2a, + kTOFHWOk=0x1, kTOFHWBad=0x2, kTOFHVUnknown=0x0, + kTOFPulserOk=0x4, kTOFPulserBad=0x8, kTOFPulserUnknown=0x0, + kTOFNoiseOk=0x10, kTOFNoiseBad=0x20, kTOFNoiseUnknown=0x0 + }; + + enum{ + kRightShiftHW=0,kRightShiftPulser=2,kRightShiftNoise=4 + }; + +private: + UChar_t fStatus; // Status of the channel + + ClassDef(AliTOFChannelOnlineStatus,1) // TOF Online Calibration object + // setting status +}; + +#endif diff --git a/TOF/AliTOFDaConfigHandler.old.cxx b/TOF/AliTOFDaConfigHandler.old.cxx index 3a9f54b90ba..43d0566faa4 100644 --- a/TOF/AliTOFDaConfigHandler.old.cxx +++ b/TOF/AliTOFDaConfigHandler.old.cxx @@ -1,180 +1,180 @@ -/************************************************************************* - * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * - * * * - * * Author: The ALICE Off-line Project. * - * * Contributors are mentioned in the code where appropriate. * - * * * - * * Permission to use, copy, modify and distribute this software and its * - * * documentation strictly for non-commercial purposes is hereby granted * - * * without fee, provided that the above copyright notice appears in all * - * * copies and that both the copyright notice and this permission notice * - * * appear in the supporting documentation. The authors make no claims * - * * about the suitability of this software for any purpose. It is * - * * provided "as is" without express or implied warranty. * - * **************************************************************************/ - -//////////////////////////////////////////////////////////////////////////// -// // -// The SAX XML file handler used in the TOFda // -// // -// Author: // -// Chiara Zampolli (Chiara.Zampolli@cern.ch) // -// // -//////////////////////////////////////////////////////////////////////////// - -#include -#include - -#include -#include -#include -#include - -#include "AliLog.h" -#include "AliTOFDaConfigHandler.h" - -ClassImp(AliTOFDaConfigHandler) - - -//_____________________________________________________________________________ -AliTOFDaConfigHandler::AliTOFDaConfigHandler() - :TObject(), - fDebugFlag(0), - fT0Flag(0) -{ - // - // AliTOFDaConfigHandler default constructor - // -} - -//_____________________________________________________________________________ -AliTOFDaConfigHandler::AliTOFDaConfigHandler(const AliTOFDaConfigHandler &sh) - :TObject(sh), - fDebugFlag(sh.fDebugFlag), - fT0Flag(sh.fT0Flag) -{ - // - // AliTOFDaConfigHandler copy constructor - // -} - -//_____________________________________________________________________________ -AliTOFDaConfigHandler &AliTOFDaConfigHandler::operator=(const AliTOFDaConfigHandler &sh) -{ - // - // Assignment operator - // - if (&sh == this) return *this; - - new (this) AliTOFDaConfigHandler(sh); - return *this; -} - -//_____________________________________________________________________________ -AliTOFDaConfigHandler::~AliTOFDaConfigHandler() -{ - // - // AliTOFDaConfigHandler destructor - // -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnStartDocument() -{ - // if something should happen right at the beginning of the - // XML document, this must happen here - AliInfo("Reading XML file for TOF da Config"); -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnEndDocument() -{ - // if something should happen at the end of the XML document - // this must be done here -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnStartElement(const char *name, const TList *attributes) -{ - // when a new XML element is found, it is processed here - - // set the current system if necessary - TString strName(name); - AliDebug(2,Form("name = %s",strName.Data())); - TXMLAttr* attr; - TIter next(attributes); - while ((attr = (TXMLAttr*) next())) { - TString attrName = attr->GetName(); - AliDebug(2,Form("Name = %s",attrName.Data())); - if (attrName == "DebugFlag"){ - fDebugFlag = ((TString)(attr->GetValue())).Atoi(); - } - if (attrName == "t0Flag"){ - TString t0Flag = (TString)(attr->GetValue()); - if (t0Flag == "ON" || t0Flag == "On" || t0Flag == "on"){ - fT0Flag = 1; - } - else if (t0Flag == "OFF" || t0Flag == "Off"|| t0Flag == "off"){ - fT0Flag = 0; - } - else { - AliWarning("Invalid T0 Flag. Keeping t0 off"); - fT0Flag = 0; - } - } - } - AliDebug(2,Form("Debug Flag = %i",fDebugFlag)); - AliDebug(2,Form("T0 Flag = %i",fT0Flag)); - return; -} -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnEndElement(const char *name) -{ - // do everything that needs to be done when an end tag of an element is found - TString strName(name); - AliDebug(2,Form("name = %s",strName.Data())); -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnCharacters(const char *characters) -{ - // copy the text content of an XML element - //fContent = characters; - TString strCharacters(characters); - AliDebug(2,Form("characters = %s",strCharacters.Data())); -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnComment(const char* /*text*/) -{ - // comments within the XML file are ignored -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnWarning(const char *text) -{ - // process warnings here - AliInfo(Form("Warning: %s",text)); -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnError(const char *text) -{ - // process errors here - AliError(Form("Error: %s",text)); -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnFatalError(const char *text) -{ - // process fatal errors here - AliFatal(Form("Fatal error: %s",text)); -} - -//_____________________________________________________________________________ -void AliTOFDaConfigHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) -{ - // process character data blocks here - // not implemented and should not be used here -} - +/************************************************************************* + * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * + * * * + * * Author: The ALICE Off-line Project. * + * * Contributors are mentioned in the code where appropriate. * + * * * + * * Permission to use, copy, modify and distribute this software and its * + * * documentation strictly for non-commercial purposes is hereby granted * + * * without fee, provided that the above copyright notice appears in all * + * * copies and that both the copyright notice and this permission notice * + * * appear in the supporting documentation. The authors make no claims * + * * about the suitability of this software for any purpose. It is * + * * provided "as is" without express or implied warranty. * + * **************************************************************************/ + +//////////////////////////////////////////////////////////////////////////// +// // +// The SAX XML file handler used in the TOFda // +// // +// Author: // +// Chiara Zampolli (Chiara.Zampolli@cern.ch) // +// // +//////////////////////////////////////////////////////////////////////////// + +#include +#include + +#include +#include +#include +#include + +#include "AliLog.h" +#include "AliTOFDaConfigHandler.h" + +ClassImp(AliTOFDaConfigHandler) + + +//_____________________________________________________________________________ +AliTOFDaConfigHandler::AliTOFDaConfigHandler() + :TObject(), + fDebugFlag(0), + fT0Flag(0) +{ + // + // AliTOFDaConfigHandler default constructor + // +} + +//_____________________________________________________________________________ +AliTOFDaConfigHandler::AliTOFDaConfigHandler(const AliTOFDaConfigHandler &sh) + :TObject(sh), + fDebugFlag(sh.fDebugFlag), + fT0Flag(sh.fT0Flag) +{ + // + // AliTOFDaConfigHandler copy constructor + // +} + +//_____________________________________________________________________________ +AliTOFDaConfigHandler &AliTOFDaConfigHandler::operator=(const AliTOFDaConfigHandler &sh) +{ + // + // Assignment operator + // + if (&sh == this) return *this; + + new (this) AliTOFDaConfigHandler(sh); + return *this; +} + +//_____________________________________________________________________________ +AliTOFDaConfigHandler::~AliTOFDaConfigHandler() +{ + // + // AliTOFDaConfigHandler destructor + // +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnStartDocument() +{ + // if something should happen right at the beginning of the + // XML document, this must happen here + AliInfo("Reading XML file for TOF da Config"); +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnEndDocument() +{ + // if something should happen at the end of the XML document + // this must be done here +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnStartElement(const char *name, const TList *attributes) +{ + // when a new XML element is found, it is processed here + + // set the current system if necessary + TString strName(name); + AliDebug(2,Form("name = %s",strName.Data())); + TXMLAttr* attr; + TIter next(attributes); + while ((attr = (TXMLAttr*) next())) { + TString attrName = attr->GetName(); + AliDebug(2,Form("Name = %s",attrName.Data())); + if (attrName == "DebugFlag"){ + fDebugFlag = ((TString)(attr->GetValue())).Atoi(); + } + if (attrName == "t0Flag"){ + TString t0Flag = (TString)(attr->GetValue()); + if (t0Flag == "ON" || t0Flag == "On" || t0Flag == "on"){ + fT0Flag = 1; + } + else if (t0Flag == "OFF" || t0Flag == "Off"|| t0Flag == "off"){ + fT0Flag = 0; + } + else { + AliWarning("Invalid T0 Flag. Keeping t0 off"); + fT0Flag = 0; + } + } + } + AliDebug(2,Form("Debug Flag = %i",fDebugFlag)); + AliDebug(2,Form("T0 Flag = %i",fT0Flag)); + return; +} +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnEndElement(const char *name) +{ + // do everything that needs to be done when an end tag of an element is found + TString strName(name); + AliDebug(2,Form("name = %s",strName.Data())); +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnCharacters(const char *characters) +{ + // copy the text content of an XML element + //fContent = characters; + TString strCharacters(characters); + AliDebug(2,Form("characters = %s",strCharacters.Data())); +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnComment(const char* /*text*/) +{ + // comments within the XML file are ignored +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnWarning(const char *text) +{ + // process warnings here + AliInfo(Form("Warning: %s",text)); +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnError(const char *text) +{ + // process errors here + AliError(Form("Error: %s",text)); +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnFatalError(const char *text) +{ + // process fatal errors here + AliFatal(Form("Fatal error: %s",text)); +} + +//_____________________________________________________________________________ +void AliTOFDaConfigHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) +{ + // process character data blocks here + // not implemented and should not be used here +} + diff --git a/TOF/AliTOFNoiseConfigHandler.cxx b/TOF/AliTOFNoiseConfigHandler.cxx index caac1aa8a0f..f0e05ae648f 100644 --- a/TOF/AliTOFNoiseConfigHandler.cxx +++ b/TOF/AliTOFNoiseConfigHandler.cxx @@ -1,174 +1,174 @@ -/************************************************************************* - * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * - * * * - * * Author: The ALICE Off-line Project. * - * * Contributors are mentioned in the code where appropriate. * - * * * - * * Permission to use, copy, modify and distribute this software and its * - * * documentation strictly for non-commercial purposes is hereby granted * - * * without fee, provided that the above copyright notice appears in all * - * * copies and that both the copyright notice and this permission notice * - * * appear in the supporting documentation. The authors make no claims * - * * about the suitability of this software for any purpose. It is * - * * provided "as is" without express or implied warranty. * - * **************************************************************************/ - -//////////////////////////////////////////////////////////////////////////// -// // -// The SAX XML file handler used in the TOFnoiseda // -// // -// Author: // -// Chiara Zampolli (Chiara.Zampolli@cern.ch) // -// // -//////////////////////////////////////////////////////////////////////////// - -#include -#include - -#include -#include -#include -#include - -#include "AliLog.h" -#include "AliTOFNoiseConfigHandler.h" - -ClassImp(AliTOFNoiseConfigHandler) - - -//_____________________________________________________________________________ -AliTOFNoiseConfigHandler::AliTOFNoiseConfigHandler() - :TObject(), - fDebugFlag(0) -{ - // - // AliTOFNoiseConfigHandler default constructor - // -} - -//_____________________________________________________________________________ -AliTOFNoiseConfigHandler::AliTOFNoiseConfigHandler(const AliTOFNoiseConfigHandler &sh) - :TObject(sh), - fDebugFlag(sh.fDebugFlag) -{ - // - // AliTOFNoiseConfigHandler copy constructor - // -} - -//_____________________________________________________________________________ -AliTOFNoiseConfigHandler &AliTOFNoiseConfigHandler::operator=(const AliTOFNoiseConfigHandler &sh) -{ - // - // Assignment operator - // - if (&sh == this) return *this; - - new (this) AliTOFNoiseConfigHandler(sh); - return *this; -} - -//_____________________________________________________________________________ -AliTOFNoiseConfigHandler::~AliTOFNoiseConfigHandler() -{ - // - // AliTOFNoiseConfigHandler destructor - // -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnStartDocument() -{ - // if something should happen right at the beginning of the - // XML document, this must happen here - AliInfo("Reading XML file for TOFnoiseda Config"); -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnEndDocument() -{ - // if something should happen at the end of the XML document - // this must be done here -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnStartElement(const char *name, const TList *attributes) -{ - // when a new XML element is found, it is processed here - - // set the current system if necessary - TString strName(name); - AliDebug(2,Form("name = %s",strName.Data())); - TXMLAttr* attr; - TIter next(attributes); - while ((attr = (TXMLAttr*) next())) { - TString attrName = attr->GetName(); - AliDebug(2,Form("Name = %s",attrName.Data())); - if (attrName == "DebugFlag"){ - TString debugFlag = (TString)(attr->GetValue()); - if (debugFlag == "ON" || debugFlag == "On" || debugFlag == "on"){ - fDebugFlag = 1; - } - else if (debugFlag == "OFF" || debugFlag == "Off"|| debugFlag == "off"){ - fDebugFlag = 0; - } - else { - AliWarning("Invalid Debug Flag. Keeping debug off"); - fDebugFlag = 0; - } - } - } - AliDebug(2,Form("Debug Flag = %i",fDebugFlag)); - return; -} -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnEndElement(const char *name) -{ - // do everything that needs to be done when an end tag of an element is found - TString strName(name); - AliDebug(2,Form("name = %s",strName.Data())); -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnCharacters(const char *characters) -{ - // copy the text content of an XML element - //fContent = characters; - TString strCharacters(characters); - AliDebug(2,Form("characters = %s",strCharacters.Data())); -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnComment(const char* /*text*/) -{ - // comments within the XML file are ignored -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnWarning(const char *text) -{ - // process warnings here - AliInfo(Form("Warning: %s",text)); -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnError(const char *text) -{ - // process errors here - AliError(Form("Error: %s",text)); -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnFatalError(const char *text) -{ - // process fatal errors here - AliFatal(Form("Fatal error: %s",text)); -} - -//_____________________________________________________________________________ -void AliTOFNoiseConfigHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) -{ - // process character data blocks here - // not implemented and should not be used here -} - +/************************************************************************* + * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * + * * * + * * Author: The ALICE Off-line Project. * + * * Contributors are mentioned in the code where appropriate. * + * * * + * * Permission to use, copy, modify and distribute this software and its * + * * documentation strictly for non-commercial purposes is hereby granted * + * * without fee, provided that the above copyright notice appears in all * + * * copies and that both the copyright notice and this permission notice * + * * appear in the supporting documentation. The authors make no claims * + * * about the suitability of this software for any purpose. It is * + * * provided "as is" without express or implied warranty. * + * **************************************************************************/ + +//////////////////////////////////////////////////////////////////////////// +// // +// The SAX XML file handler used in the TOFnoiseda // +// // +// Author: // +// Chiara Zampolli (Chiara.Zampolli@cern.ch) // +// // +//////////////////////////////////////////////////////////////////////////// + +#include +#include + +#include +#include +#include +#include + +#include "AliLog.h" +#include "AliTOFNoiseConfigHandler.h" + +ClassImp(AliTOFNoiseConfigHandler) + + +//_____________________________________________________________________________ +AliTOFNoiseConfigHandler::AliTOFNoiseConfigHandler() + :TObject(), + fDebugFlag(0) +{ + // + // AliTOFNoiseConfigHandler default constructor + // +} + +//_____________________________________________________________________________ +AliTOFNoiseConfigHandler::AliTOFNoiseConfigHandler(const AliTOFNoiseConfigHandler &sh) + :TObject(sh), + fDebugFlag(sh.fDebugFlag) +{ + // + // AliTOFNoiseConfigHandler copy constructor + // +} + +//_____________________________________________________________________________ +AliTOFNoiseConfigHandler &AliTOFNoiseConfigHandler::operator=(const AliTOFNoiseConfigHandler &sh) +{ + // + // Assignment operator + // + if (&sh == this) return *this; + + new (this) AliTOFNoiseConfigHandler(sh); + return *this; +} + +//_____________________________________________________________________________ +AliTOFNoiseConfigHandler::~AliTOFNoiseConfigHandler() +{ + // + // AliTOFNoiseConfigHandler destructor + // +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnStartDocument() +{ + // if something should happen right at the beginning of the + // XML document, this must happen here + AliInfo("Reading XML file for TOFnoiseda Config"); +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnEndDocument() +{ + // if something should happen at the end of the XML document + // this must be done here +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnStartElement(const char *name, const TList *attributes) +{ + // when a new XML element is found, it is processed here + + // set the current system if necessary + TString strName(name); + AliDebug(2,Form("name = %s",strName.Data())); + TXMLAttr* attr; + TIter next(attributes); + while ((attr = (TXMLAttr*) next())) { + TString attrName = attr->GetName(); + AliDebug(2,Form("Name = %s",attrName.Data())); + if (attrName == "DebugFlag"){ + TString debugFlag = (TString)(attr->GetValue()); + if (debugFlag == "ON" || debugFlag == "On" || debugFlag == "on"){ + fDebugFlag = 1; + } + else if (debugFlag == "OFF" || debugFlag == "Off"|| debugFlag == "off"){ + fDebugFlag = 0; + } + else { + AliWarning("Invalid Debug Flag. Keeping debug off"); + fDebugFlag = 0; + } + } + } + AliDebug(2,Form("Debug Flag = %i",fDebugFlag)); + return; +} +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnEndElement(const char *name) +{ + // do everything that needs to be done when an end tag of an element is found + TString strName(name); + AliDebug(2,Form("name = %s",strName.Data())); +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnCharacters(const char *characters) +{ + // copy the text content of an XML element + //fContent = characters; + TString strCharacters(characters); + AliDebug(2,Form("characters = %s",strCharacters.Data())); +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnComment(const char* /*text*/) +{ + // comments within the XML file are ignored +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnWarning(const char *text) +{ + // process warnings here + AliInfo(Form("Warning: %s",text)); +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnError(const char *text) +{ + // process errors here + AliError(Form("Error: %s",text)); +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnFatalError(const char *text) +{ + // process fatal errors here + AliFatal(Form("Fatal error: %s",text)); +} + +//_____________________________________________________________________________ +void AliTOFNoiseConfigHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) +{ + // process character data blocks here + // not implemented and should not be used here +} + diff --git a/TPC/Calib/AliTPCCalibKr.cxx b/TPC/Calib/AliTPCCalibKr.cxx index 8ecdbbd858a..3b07e1383d8 100644 --- a/TPC/Calib/AliTPCCalibKr.cxx +++ b/TPC/Calib/AliTPCCalibKr.cxx @@ -1,664 +1,664 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - - -//Root includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//AliRoot includes -#include "AliRawReader.h" -#include "AliRawReaderRoot.h" -#include "AliRawReaderDate.h" -#include "AliTPCCalROC.h" -#include "AliTPCCalPad.h" -#include "AliTPCROC.h" -#include "AliMathBase.h" -#include "TTreeStream.h" - -//date -#include "event.h" - -//header file -#include "AliTPCCalibKr.h" - -//---------------------------------------------------------------------------- -// The AliTPCCalibKr class description (TPC Kr calibration). -// -// -// The AliTPCCalibKr keeps the array of TH3F histograms (TPC_max_padraw,TPC_max_pad,TPC_ADC_cluster), -// its data memebers and is filled by AliTPCCalibKrTask under conditions (Accept()). -// -// The ouput TH3F histograms are later used to determine the calibration parameters of TPC chambers. -// These calculations are done by using AliTPCCalibKr::Analyse() function. The ouput calibration -// parameters (details in AliTPCCalibKr::Analyse()) are stored in the calibKr.root file for each TPC pad. -// In addition the debugCalibKr.root file with debug information is created. -// - -/* - -// Usage example: -// - -// 1. Analyse output histograms: -TFile f("outHistFile.root"); -AliTPCCalibKr *obj = (AliTPCCalibKr*) cOutput.FindObject("AliTPCCalibKr"); -obj->SetRadius(0,0); -obj->SetStep(1,1); -obj->Analyse(); - -// 2. See calibration parameters e.g.: -TFile f("calibKr.root"); -spectrMean->GetCalROC(70)->GetValue(40,40); -fitMean->GetCalROC(70)->GetValue(40,40); - -// 3. See debug information e.g.: -TFile f("debugCalibKr.root"); -.ls; - -// -- Print calibKr TTree content -calibKr->Print(); - -// -- Draw calibKr TTree variables -calibKr.Draw("fitMean"); - -*/ - - -// -// Author: Jacek Otwinowski (J.Otwinowski@gsi.de) and Stafan Geartner (S.Gaertner@gsi.de) -//----------------------------------------------------------------------------- - -ClassImp(AliTPCCalibKr) - -AliTPCCalibKr::AliTPCCalibKr() : - TObject(), - fASide(kTRUE), - fCSide(kTRUE), - fHistoKrArray(72), - fADCOverClustSizeMin(0.0), - fADCOverClustSizeMax(1.0e9), - fMaxADCOverClustADCMin(0.0), - fMaxADCOverClustADCMax(1.0e9), - fTimeMin(0.0), - fTimeMax(1.0e9), - fClustSizeMin(0.0), - fClustSizeMax(1.0e9), - fTimebinRmsIrocMin(0.0), - fPadRmsIrocMin(0.0), - fRowRmsIrocMin(0.0), - fClusterPadSize1DIrocMax(200), - fCurveCoefficientIroc(1.0e9), - fTimebinRmsOrocMin(0.0), - fPadRmsOrocMin(0.0), - fRowRmsOrocMin(0.0), - fClusterPadSize1DOrocMax(200), - fCurveCoefficientOroc(1.0e9), - fIrocHistogramMin(100.), - fIrocHistogramMax(6000.), - fIrocHistogramNbins(200), - fOrocHistogramMin(100.), - fOrocHistogramMax(5500.), - fOrocHistogramNbins(200), - fRowRadius(0), - fPadRadius(0), - fRowStep(1), - fPadStep(1) - -{ - // - // default constructor - // - - // TObjArray with histograms - fHistoKrArray.SetOwner(kTRUE); // is owner of histograms - fHistoKrArray.Clear(); - - // init cuts (by Stefan) -// SetADCOverClustSizeRange(7,200); -// SetMaxADCOverClustADCRange(0.01,0.4); -// SetTimeRange(200,600); -// SetClustSizeRange(6,200); - - //init cuts (by Adam) - SetTimebinRmsMin(1.6,0.8); - SetPadRmsMin(0.825,0.55); - SetRowRmsMin(0.1,0.1); - SetClusterPadSize1DMax(15,11); - SetCurveCoefficient(1.,2.); - - //set histograms settings - SetIrocHistogram(200,100,6000); - SetOrocHistogram(200,100,5500); - - // init histograms - //Init(); -} - -//_____________________________________________________________________ -AliTPCCalibKr::AliTPCCalibKr(const AliTPCCalibKr& pad) : - TObject(pad), - - fASide(pad.fASide), - fCSide(pad.fCSide), - fHistoKrArray(72), - fADCOverClustSizeMin(pad.fADCOverClustSizeMin), - fADCOverClustSizeMax(pad.fADCOverClustSizeMax), - fMaxADCOverClustADCMin(pad.fMaxADCOverClustADCMin), - fMaxADCOverClustADCMax(pad.fMaxADCOverClustADCMax), - fTimeMin(pad.fTimeMin), - fTimeMax(pad.fTimeMax), - fClustSizeMin(pad.fClustSizeMin), - fClustSizeMax(pad.fClustSizeMax), - fTimebinRmsIrocMin(pad.fTimebinRmsIrocMin), - fPadRmsIrocMin(pad.fPadRmsIrocMin), - fRowRmsIrocMin(pad.fRowRmsIrocMin), - fClusterPadSize1DIrocMax(pad.fClusterPadSize1DIrocMax), - fCurveCoefficientIroc(pad.fCurveCoefficientIroc), - fTimebinRmsOrocMin(pad.fTimebinRmsOrocMin), - fPadRmsOrocMin(pad.fPadRmsOrocMin), - fRowRmsOrocMin(pad.fRowRmsOrocMin), - fClusterPadSize1DOrocMax(pad.fClusterPadSize1DOrocMax), - fCurveCoefficientOroc(pad.fCurveCoefficientOroc), - fIrocHistogramMin(pad.fIrocHistogramMin), - fIrocHistogramMax(pad.fIrocHistogramMax), - fIrocHistogramNbins(pad.fIrocHistogramNbins), - fOrocHistogramMin(pad.fOrocHistogramMin), - fOrocHistogramMax(pad.fOrocHistogramMax), - fOrocHistogramNbins(pad.fOrocHistogramNbins), - fRowRadius(pad.fRowRadius), - fPadRadius(pad.fPadRadius), - fRowStep(pad.fRowStep), - fPadStep(pad.fPadStep) - -{ - // copy constructor - - // TObjArray with histograms - fHistoKrArray.SetOwner(kTRUE); // is owner of histograms - fHistoKrArray.Clear(); - - for (Int_t iSec = 0; iSec < 72; ++iSec) - { - TH3F *hOld = pad.GetHistoKr(iSec); - if(hOld) { - TH3F *hNew = new TH3F( *pad.GetHistoKr(iSec) ); - fHistoKrArray.AddAt(hNew,iSec); - } - } -} - -//_____________________________________________________________________ -AliTPCCalibKr::~AliTPCCalibKr() -{ - // - // destructor - // - - // for (Int_t iSec = 0; iSec < 72; ++iSec) { - // if (fHistoKrArray.At(iSec)) delete fHistoKrArray.RemoveAt(iSec); - // } - fHistoKrArray.Delete(); -} - -//_____________________________________________________________________ -AliTPCCalibKr& AliTPCCalibKr::operator = (const AliTPCCalibKr &source) -{ - // assignment operator - - if (&source == this) return *this; - new (this) AliTPCCalibKr(source); - - return *this; -} - -//_____________________________________________________________________ -void AliTPCCalibKr::Init() -{ - // - // init output histograms - // - - // add histograms to the TObjArray - for(Int_t i=0; i<72; ++i) { - - // C - side - if(IsCSide(i) == kTRUE && fCSide == kTRUE) { - TH3F *hist = CreateHisto(i); - if(hist) fHistoKrArray.AddAt(hist,i); - } - - // A - side - if(IsCSide(i) == kFALSE && fASide == kTRUE) { - TH3F *hist = CreateHisto(i); - if(hist) fHistoKrArray.AddAt(hist,i); - } - } -} - -//_____________________________________________________________________ -Bool_t AliTPCCalibKr::Process(AliTPCclusterKr *cluster) -{ - // - // process events - // call event by event - // - - if(cluster) Update(cluster); - else return kFALSE; - - return kTRUE; -} - -//_____________________________________________________________________ -TH3F* AliTPCCalibKr::CreateHisto(Int_t chamber) -{ - // - // create new histogram - // - char name[256]; - TH3F *h; - - snprintf(name,256,"ADCcluster_ch%d",chamber); - - if( IsIROC(chamber) == kTRUE ) - { - h = new TH3F(name,name,63,0,63,108,0,108,fIrocHistogramNbins,fIrocHistogramMin,fIrocHistogramMax); - } else { - h = new TH3F(name,name,96,0,96,140,0,140,fOrocHistogramNbins,fOrocHistogramMin,fOrocHistogramMax); - } - h->SetXTitle("padrow"); - h->SetYTitle("pad"); - h->SetZTitle("fADC"); - -return h; -} - -//_____________________________________________________________________ -Bool_t AliTPCCalibKr::IsIROC(Int_t chamber) -{ -// check if IROCs -// returns kTRUE if IROCs and kFALSE if OROCs - - if(chamber>=0 && chamber<36) return kTRUE; - -return kFALSE; -} - -//_____________________________________________________________________ -Bool_t AliTPCCalibKr::IsCSide(Int_t chamber) -{ -// check if C side -// returns kTRUE if C side and kFALSE if A side - - if((chamber>=18 && chamber<36) || (chamber>=54 && chamber<72)) return kTRUE; - -return kFALSE; -} - -//_____________________________________________________________________ -Bool_t AliTPCCalibKr::Update(AliTPCclusterKr *cl) -{ - // - // fill existing histograms - // - - if (!Accept(cl)) return kFALSE; - TH3F *h = (TH3F*)fHistoKrArray.At(cl->GetSec()); - if(!h) return kFALSE; - - h->Fill(cl->GetMax().GetRow(),cl->GetMax().GetPad(),cl->GetADCcluster()); - - return kTRUE; -} - -//_____________________________________________________________________ -Bool_t AliTPCCalibKr::Accept(AliTPCclusterKr *cl){ - // - // cuts - // - /* - TCut cutR0("cutR0","fADCcluster/fSize<200"); // adjust it according v seetings - - TCut cutR1("cutR1","fADCcluster/fSize>7"); // cosmic tracks and noise removal - TCut cutR2("cutR2","fMax.fAdc/fADCcluster<0.4"); // digital noise removal - TCut cutR3("cutR3","fMax.fAdc/fADCcluster>0.01"); // noise removal - TCut cutR4("cutR4","fMax.fTime>200"); // noise removal - TCut cutR5("cutR5","fMax.fTime<600"); // noise removal - TCut cutS1("cutS1","fSize<200"); // adjust it according v seetings - cosmic tracks - TCut cutAll = cutR0+cutR1+cutR2+cutR3+cutR4+cutR5+cutS1; - */ - /* - //R0 - if ((float)cl->GetADCcluster()/ cl->GetSize() >200) return kFALSE; - // R1 - if ((float)cl->GetADCcluster()/ cl->GetSize() <7) return kFALSE; - //R2 - if ((float)cl->GetMax().GetAdc()/ cl->GetADCcluster() >0.4) return kFALSE; - //R3 - if ((float)cl->GetMax().GetAdc()/ cl->GetADCcluster() <0.01) return kFALSE; - //R4 - if (cl->GetMax().GetTime() < 200) return kFALSE; - //R5 - if (cl->GetMax().GetTime() > 600) return kFALSE; - //S1 - if (cl->GetSize()>200) return kFALSE; - if (cl->GetSize()<6) return kFALSE; - - SetADCOverClustSizeRange(7,200); - SetMaxADCOverClustADCRange(0.01,0.4); - SetTimeRange(200,600); - SetClustSizeRange(6,200); - */ - - //R0 - if ((float)cl->GetADCcluster()/ cl->GetSize() >fADCOverClustSizeMax) return kFALSE; - // R1 - if ((float)cl->GetADCcluster()/ cl->GetSize() GetMax().GetAdc()/ cl->GetADCcluster() >fMaxADCOverClustADCMax) return kFALSE; - //R3 - if ((float)cl->GetMax().GetAdc()/ cl->GetADCcluster() GetMax().GetTime() > fTimeMax) return kFALSE; - //R5 - if (cl->GetMax().GetTime() < fTimeMin) return kFALSE; - //S1 - if (cl->GetSize()>fClustSizeMax) return kFALSE; - if (cl->GetSize()1.6"); - TCut cutAI1("cutAI1","fPadRMS>0.825"); - TCut cutAI2("cutAI2","fRowRMS>0.1"); - TCut cutAI3("cutAI3","fPads1D<15"); - TCut cutAI4("cutAI4","fTimebinRMS+11.9-2.15*TMath::Log(1.*fADCcluster)<0"); - - TCut cutAIAll = cutAI0+cutAI1+cutAI2+cutAI3+cutAI4; - - TCut cutAO0("cutAO0","fTimebinRMS>0.8"); - TCut cutAO1("cutAO1","fPadRMS>0.55"); - TCut cutAO2("cutAO2","fRowRMS>0.1"); - TCut cutAO3("cutAO3","fPads1D<11"); - TCut cutAO4("cutAO4","fTimebinRMS+11.9-2.15*TMath::Log(2.*fADCcluster)<0"); - - TCut cutAOAll = cutAO0+cutAO1+cutAO2+cutAO3+cutAO4; - TCut cutAll("cutAll","(fSec<36&&cutAIAll)||(fSec>=36&&cutAOAll)"); - - */ - if(cl->GetSec()<36){ //IROCs - //AI0 - if((float)cl->GetTimebinRMS() <= fTimebinRmsIrocMin) return kFALSE; - //AI1 - if((float)cl->GetPadRMS() <= fPadRmsIrocMin) return kFALSE; - //AI2 - if((float)cl->GetRowRMS() <= fRowRmsIrocMin) return kFALSE; - //AI3 - if(cl->GetPads1D() >= fClusterPadSize1DIrocMax) return kFALSE; - //AI4 - if((float)cl->GetTimebinRMS()+11.9-2.15*TMath::Log(fCurveCoefficientIroc*(float)cl->GetADCcluster()) >= 0) return kFALSE; - }else{ //OROCs - //AO0 - if((float)cl->GetTimebinRMS() <= fTimebinRmsOrocMin) return kFALSE; - //AO1 - if((float)cl->GetPadRMS() <= fPadRmsOrocMin) return kFALSE; - //AO2 - if((float)cl->GetRowRMS() <= fRowRmsOrocMin) return kFALSE; - //AO3 - if(cl->GetPads1D() >= fClusterPadSize1DOrocMax) return kFALSE; - //AO4 - if((float)cl->GetTimebinRMS()+11.9-2.15*TMath::Log(fCurveCoefficientOroc*(float)cl->GetADCcluster()) >= 0) return kFALSE; - } - - return kTRUE; - -} - -//_____________________________________________________________________ -TH3F* AliTPCCalibKr::GetHistoKr(Int_t chamber) const -{ - // get histograms from fHistoKrArray - return (TH3F*) fHistoKrArray.At(chamber); -} - -//_____________________________________________________________________ -void AliTPCCalibKr::Analyse() -{ - // - // analyse the histograms and extract krypton calibration parameters - // - - // AliTPCCalPads that will contain the calibration parameters - AliTPCCalPad* spectrMeanCalPad = new AliTPCCalPad("spectrMean", "spectrMean"); - AliTPCCalPad* spectrRMSCalPad = new AliTPCCalPad("spectrRMS", "spectrRMS"); - AliTPCCalPad* fitMeanCalPad = new AliTPCCalPad("fitMean", "fitMean"); - AliTPCCalPad* fitRMSCalPad = new AliTPCCalPad("fitRMS", "fitRMS"); - AliTPCCalPad* fitNormChi2CalPad = new AliTPCCalPad("fitNormChi2", "fitNormChi2"); - AliTPCCalPad* entriesCalPad = new AliTPCCalPad("entries", "entries"); - - // file stream for debugging purposes - TTreeSRedirector* debugStream = new TTreeSRedirector("debugCalibKr.root"); - - // if entries in spectrum less than minEntries, then the fit won't be performed - Int_t minEntries = 1; //300; - - Double_t windowFrac = 0.12; - // the 3d histogram will be projected on the pads given by the following window size - // set the numbers to 0 if you want to do a pad-by-pad calibration - UInt_t rowRadius = fRowRadius;//4; - UInt_t padRadius = fPadRadius;//4; - - // the step size by which pad and row are incremented is given by the following numbers - // set them to 1 if you want the finest granularity - UInt_t rowStep = fRowStep;//1;//2 // formerly: 2*rowRadius - UInt_t padStep = fPadStep;//1;//4 // formerly: 2*padRadius - - for (Int_t chamber = 0; chamber < 72; chamber++) { - //if (chamber != 71) continue; - AliTPCCalROC roc(chamber); // I need this only for GetNrows() and GetNPads() - - // Usually I would traverse each pad, take the spectrum for its neighbourhood and - // obtain the calibration parameters. This takes very long, so instead I assign the same - // calibration values to the whole neighbourhood and then go on to the next neighbourhood. - UInt_t nRows = roc.GetNrows(); - for (UInt_t iRow = 0; iRow < nRows; iRow += rowStep) { - UInt_t nPads = roc.GetNPads(iRow); - //if (iRow >= 10) break; - for (UInt_t iPad = 0; iPad < nPads; iPad += padStep) { - //if (iPad >= 20) break; - TH3F* h = GetHistoKr(chamber); - if (!h) continue; - - // the 3d histogram will be projected on the pads given by the following bounds - // for rows and pads - Int_t rowLow = iRow - rowRadius; - UInt_t rowUp = iRow + rowRadius + rowStep-1; - Int_t padLow = iPad - padRadius; - UInt_t padUp = iPad + padRadius + padStep-1; - // if window goes out of chamber - if (rowLow < 0) rowLow = 0; - if (rowUp >= nRows) rowUp = nRows - 1; - if (padLow < 0) padLow = 0; - if (padUp >= nPads) padUp = nPads - 1; - - // project the histogram - //TH1D* projH = h->ProjectionZ("projH", rowLow+1, rowUp+1, padLow+1, padUp+1); // SLOW - TH1D* projH = ProjectHisto(h, "projH", rowLow+1, rowUp+1, padLow+1, padUp+1); - - // get the number of entries in the spectrum - Double_t entries = projH->GetEntries(); - if (entries < minEntries) { delete projH; continue; } - - // get the two calibration parameters mean of spectrum and RMS of spectrum - Double_t histMean = projH->GetMean(); - Double_t histRMS = (histMean != 0) ? projH->GetRMS() / histMean : 0.; - - // find maximum in spectrum to define a range (given by windowFrac) for which a Gauss is fitted - Double_t maxEntries = projH->GetBinCenter(projH->GetMaximumBin()); - Int_t minBin = projH->FindBin((1.-windowFrac) * maxEntries); - Int_t maxBin = projH->FindBin((1.+windowFrac) * maxEntries); - Double_t integCharge = projH->Integral(minBin,maxBin); - - Int_t fitResult = projH->Fit("gaus", "Q0", "", (1.-windowFrac) * maxEntries, (1.+windowFrac) * maxEntries); - - if (fitResult != 0) { - Error("Analyse", "Error while fitting spectrum for chamber %i, rows %i - %i, pads %i - %i, integrated charge %f.", chamber, rowLow, rowUp, padLow, padUp, integCharge); - //printf("[ch%i r%i, p%i] entries = %f, maxEntries = %f, %f\n", chamber, iRow, iPad, entries, maxEntries); - - delete projH; - continue; - } - - // get the two calibration parameters mean of gauss fit and sigma of gauss fit - TF1* gausFit = projH->GetFunction("gaus"); - Double_t fitMean = gausFit->GetParameter(1); - Double_t fitRMS = gausFit->GetParameter(2); - Int_t numberFitPoints = gausFit->GetNumberFitPoints(); - if (numberFitPoints == 0) continue; - Double_t fitNormChi2 = gausFit->GetChisquare() / numberFitPoints; - delete gausFit; - delete projH; - if (fitMean <= 0) continue; - //printf("[ch%i r%i, p%i] entries = %f, maxEntries = %f, fitMean = %f, fitRMS = %f\n", chamber, iRow, iPad, entries, maxEntries, fitMean, fitRMS); - - // write the calibration parameters for each pad that the 3d histogram was projected onto - // (with considering the step size) to the CalPads - // rowStep (padStep) odd: round down s/2 and fill this # of rows (pads) in both directions - // rowStep (padStep) even: fill s/2 rows (pads) in ascending direction, s/2-1 in descending direction - for (Int_t r = iRow - (rowStep/2 - (rowStep+1)%2); r <= (Int_t)(iRow + rowStep/2); r++) { - if (r < 0 || r >= (Int_t)nRows) continue; - UInt_t nPadsR = roc.GetNPads(r); - for (Int_t p = iPad - (padStep/2 - (padStep+1)%2); p <= (Int_t)(iPad + padStep/2); p++) { - if (p < 0 || p >= (Int_t)nPadsR) continue; - spectrMeanCalPad->GetCalROC(chamber)->SetValue(r, p, histMean); - spectrRMSCalPad->GetCalROC(chamber)->SetValue(r, p, histRMS); - fitMeanCalPad->GetCalROC(chamber)->SetValue(r, p, fitMean); - fitRMSCalPad->GetCalROC(chamber)->SetValue(r, p, fitRMS); - fitNormChi2CalPad->GetCalROC(chamber)->SetValue(r, p, fitNormChi2); - entriesCalPad->GetCalROC(chamber)->SetValue(r, p, entries); - - (*debugStream) << "calibKr" << - "sector=" << chamber << // chamber number - "row=" << r << // row number - "pad=" << p << // pad number - "histMean=" << histMean << // mean of the spectrum - "histRMS=" << histRMS << // RMS of the spectrum divided by the mean - "fitMean=" << fitMean << // Gauss fitted mean of the 41.6 keV Kr peak - "fitRMS=" << fitRMS << // Gauss fitted sigma of the 41.6 keV Kr peak - "fitNormChi2" << fitNormChi2 << // normalized chi square of the Gauss fit - "entries=" << entries << // number of entries for the spectrum - "\n"; - } - } - } - } - } - - TFile f("calibKr.root", "recreate"); - spectrMeanCalPad->Write(); - spectrRMSCalPad->Write(); - fitMeanCalPad->Write(); - fitRMSCalPad->Write(); - fitNormChi2CalPad->Write(); - entriesCalPad->Write(); - f.Close(); - delete spectrMeanCalPad; - delete spectrRMSCalPad; - delete fitMeanCalPad; - delete fitRMSCalPad; - delete fitNormChi2CalPad; - delete entriesCalPad; - delete debugStream; -} - -//_____________________________________________________________________ -TH1D* AliTPCCalibKr::ProjectHisto(TH3F* histo3D, const char* name, Int_t xMin, Int_t xMax, Int_t yMin, Int_t yMax) -{ - // project the z-axis of a 3d histo to a specific range of the x- and y-axes, - // replaces TH3F::ProjectZ() to gain more speed - - TAxis* xAxis = histo3D->GetXaxis(); - TAxis* yAxis = histo3D->GetYaxis(); - TAxis* zAxis = histo3D->GetZaxis(); - Double_t zMinVal = zAxis->GetXmin(); - Double_t zMaxVal = zAxis->GetXmax(); - - Int_t nBinsZ = zAxis->GetNbins(); - TH1D* projH = new TH1D(name, name, nBinsZ, zMinVal, zMaxVal); - - Int_t nx = xAxis->GetNbins()+2; - Int_t ny = yAxis->GetNbins()+2; - Int_t bin = 0; - Double_t entries = 0.; - for (Int_t x = xMin; x <= xMax; x++) { - for (Int_t y = yMin; y <= yMax; y++) { - for (Int_t z = 0; z <= nBinsZ+1; z++) { - bin = x + nx * (y + ny * z); - Double_t val = histo3D->GetBinContent(bin); - projH->Fill(zAxis->GetBinCenter(z), val); - entries += val; - } - } - } - projH->SetEntries((Long64_t)entries); - return projH; -} - -//_____________________________________________________________________ -Long64_t AliTPCCalibKr::Merge(TCollection* list) { -// merge function -// - -if (!list) -return 0; - -if (list->IsEmpty()) -return 1; - -TIterator* iter = list->MakeIterator(); -TObject* obj = 0; - - iter->Reset(); - Int_t count=0; - while((obj = iter->Next()) != 0) - { - AliTPCCalibKr* entry = dynamic_cast(obj); - if (entry == 0) continue; - - for(int i=0; i<72; ++i) { - if(IsCSide(i) == kTRUE && fCSide == kTRUE) { - ((TH3F*)fHistoKrArray.At(i))->Add( ((TH3F*)entry->fHistoKrArray.At(i)) ); - } - - if(IsCSide(i) == kFALSE && fASide == kTRUE) { - ((TH3F*)fHistoKrArray.At(i))->Add( ((TH3F*)entry->fHistoKrArray.At(i)) ); - } - } - - count++; - } - -return count; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + + +//Root includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//AliRoot includes +#include "AliRawReader.h" +#include "AliRawReaderRoot.h" +#include "AliRawReaderDate.h" +#include "AliTPCCalROC.h" +#include "AliTPCCalPad.h" +#include "AliTPCROC.h" +#include "AliMathBase.h" +#include "TTreeStream.h" + +//date +#include "event.h" + +//header file +#include "AliTPCCalibKr.h" + +//---------------------------------------------------------------------------- +// The AliTPCCalibKr class description (TPC Kr calibration). +// +// +// The AliTPCCalibKr keeps the array of TH3F histograms (TPC_max_padraw,TPC_max_pad,TPC_ADC_cluster), +// its data memebers and is filled by AliTPCCalibKrTask under conditions (Accept()). +// +// The ouput TH3F histograms are later used to determine the calibration parameters of TPC chambers. +// These calculations are done by using AliTPCCalibKr::Analyse() function. The ouput calibration +// parameters (details in AliTPCCalibKr::Analyse()) are stored in the calibKr.root file for each TPC pad. +// In addition the debugCalibKr.root file with debug information is created. +// + +/* + +// Usage example: +// + +// 1. Analyse output histograms: +TFile f("outHistFile.root"); +AliTPCCalibKr *obj = (AliTPCCalibKr*) cOutput.FindObject("AliTPCCalibKr"); +obj->SetRadius(0,0); +obj->SetStep(1,1); +obj->Analyse(); + +// 2. See calibration parameters e.g.: +TFile f("calibKr.root"); +spectrMean->GetCalROC(70)->GetValue(40,40); +fitMean->GetCalROC(70)->GetValue(40,40); + +// 3. See debug information e.g.: +TFile f("debugCalibKr.root"); +.ls; + +// -- Print calibKr TTree content +calibKr->Print(); + +// -- Draw calibKr TTree variables +calibKr.Draw("fitMean"); + +*/ + + +// +// Author: Jacek Otwinowski (J.Otwinowski@gsi.de) and Stafan Geartner (S.Gaertner@gsi.de) +//----------------------------------------------------------------------------- + +ClassImp(AliTPCCalibKr) + +AliTPCCalibKr::AliTPCCalibKr() : + TObject(), + fASide(kTRUE), + fCSide(kTRUE), + fHistoKrArray(72), + fADCOverClustSizeMin(0.0), + fADCOverClustSizeMax(1.0e9), + fMaxADCOverClustADCMin(0.0), + fMaxADCOverClustADCMax(1.0e9), + fTimeMin(0.0), + fTimeMax(1.0e9), + fClustSizeMin(0.0), + fClustSizeMax(1.0e9), + fTimebinRmsIrocMin(0.0), + fPadRmsIrocMin(0.0), + fRowRmsIrocMin(0.0), + fClusterPadSize1DIrocMax(200), + fCurveCoefficientIroc(1.0e9), + fTimebinRmsOrocMin(0.0), + fPadRmsOrocMin(0.0), + fRowRmsOrocMin(0.0), + fClusterPadSize1DOrocMax(200), + fCurveCoefficientOroc(1.0e9), + fIrocHistogramMin(100.), + fIrocHistogramMax(6000.), + fIrocHistogramNbins(200), + fOrocHistogramMin(100.), + fOrocHistogramMax(5500.), + fOrocHistogramNbins(200), + fRowRadius(0), + fPadRadius(0), + fRowStep(1), + fPadStep(1) + +{ + // + // default constructor + // + + // TObjArray with histograms + fHistoKrArray.SetOwner(kTRUE); // is owner of histograms + fHistoKrArray.Clear(); + + // init cuts (by Stefan) +// SetADCOverClustSizeRange(7,200); +// SetMaxADCOverClustADCRange(0.01,0.4); +// SetTimeRange(200,600); +// SetClustSizeRange(6,200); + + //init cuts (by Adam) + SetTimebinRmsMin(1.6,0.8); + SetPadRmsMin(0.825,0.55); + SetRowRmsMin(0.1,0.1); + SetClusterPadSize1DMax(15,11); + SetCurveCoefficient(1.,2.); + + //set histograms settings + SetIrocHistogram(200,100,6000); + SetOrocHistogram(200,100,5500); + + // init histograms + //Init(); +} + +//_____________________________________________________________________ +AliTPCCalibKr::AliTPCCalibKr(const AliTPCCalibKr& pad) : + TObject(pad), + + fASide(pad.fASide), + fCSide(pad.fCSide), + fHistoKrArray(72), + fADCOverClustSizeMin(pad.fADCOverClustSizeMin), + fADCOverClustSizeMax(pad.fADCOverClustSizeMax), + fMaxADCOverClustADCMin(pad.fMaxADCOverClustADCMin), + fMaxADCOverClustADCMax(pad.fMaxADCOverClustADCMax), + fTimeMin(pad.fTimeMin), + fTimeMax(pad.fTimeMax), + fClustSizeMin(pad.fClustSizeMin), + fClustSizeMax(pad.fClustSizeMax), + fTimebinRmsIrocMin(pad.fTimebinRmsIrocMin), + fPadRmsIrocMin(pad.fPadRmsIrocMin), + fRowRmsIrocMin(pad.fRowRmsIrocMin), + fClusterPadSize1DIrocMax(pad.fClusterPadSize1DIrocMax), + fCurveCoefficientIroc(pad.fCurveCoefficientIroc), + fTimebinRmsOrocMin(pad.fTimebinRmsOrocMin), + fPadRmsOrocMin(pad.fPadRmsOrocMin), + fRowRmsOrocMin(pad.fRowRmsOrocMin), + fClusterPadSize1DOrocMax(pad.fClusterPadSize1DOrocMax), + fCurveCoefficientOroc(pad.fCurveCoefficientOroc), + fIrocHistogramMin(pad.fIrocHistogramMin), + fIrocHistogramMax(pad.fIrocHistogramMax), + fIrocHistogramNbins(pad.fIrocHistogramNbins), + fOrocHistogramMin(pad.fOrocHistogramMin), + fOrocHistogramMax(pad.fOrocHistogramMax), + fOrocHistogramNbins(pad.fOrocHistogramNbins), + fRowRadius(pad.fRowRadius), + fPadRadius(pad.fPadRadius), + fRowStep(pad.fRowStep), + fPadStep(pad.fPadStep) + +{ + // copy constructor + + // TObjArray with histograms + fHistoKrArray.SetOwner(kTRUE); // is owner of histograms + fHistoKrArray.Clear(); + + for (Int_t iSec = 0; iSec < 72; ++iSec) + { + TH3F *hOld = pad.GetHistoKr(iSec); + if(hOld) { + TH3F *hNew = new TH3F( *pad.GetHistoKr(iSec) ); + fHistoKrArray.AddAt(hNew,iSec); + } + } +} + +//_____________________________________________________________________ +AliTPCCalibKr::~AliTPCCalibKr() +{ + // + // destructor + // + + // for (Int_t iSec = 0; iSec < 72; ++iSec) { + // if (fHistoKrArray.At(iSec)) delete fHistoKrArray.RemoveAt(iSec); + // } + fHistoKrArray.Delete(); +} + +//_____________________________________________________________________ +AliTPCCalibKr& AliTPCCalibKr::operator = (const AliTPCCalibKr &source) +{ + // assignment operator + + if (&source == this) return *this; + new (this) AliTPCCalibKr(source); + + return *this; +} + +//_____________________________________________________________________ +void AliTPCCalibKr::Init() +{ + // + // init output histograms + // + + // add histograms to the TObjArray + for(Int_t i=0; i<72; ++i) { + + // C - side + if(IsCSide(i) == kTRUE && fCSide == kTRUE) { + TH3F *hist = CreateHisto(i); + if(hist) fHistoKrArray.AddAt(hist,i); + } + + // A - side + if(IsCSide(i) == kFALSE && fASide == kTRUE) { + TH3F *hist = CreateHisto(i); + if(hist) fHistoKrArray.AddAt(hist,i); + } + } +} + +//_____________________________________________________________________ +Bool_t AliTPCCalibKr::Process(AliTPCclusterKr *cluster) +{ + // + // process events + // call event by event + // + + if(cluster) Update(cluster); + else return kFALSE; + + return kTRUE; +} + +//_____________________________________________________________________ +TH3F* AliTPCCalibKr::CreateHisto(Int_t chamber) +{ + // + // create new histogram + // + char name[256]; + TH3F *h; + + snprintf(name,256,"ADCcluster_ch%d",chamber); + + if( IsIROC(chamber) == kTRUE ) + { + h = new TH3F(name,name,63,0,63,108,0,108,fIrocHistogramNbins,fIrocHistogramMin,fIrocHistogramMax); + } else { + h = new TH3F(name,name,96,0,96,140,0,140,fOrocHistogramNbins,fOrocHistogramMin,fOrocHistogramMax); + } + h->SetXTitle("padrow"); + h->SetYTitle("pad"); + h->SetZTitle("fADC"); + +return h; +} + +//_____________________________________________________________________ +Bool_t AliTPCCalibKr::IsIROC(Int_t chamber) +{ +// check if IROCs +// returns kTRUE if IROCs and kFALSE if OROCs + + if(chamber>=0 && chamber<36) return kTRUE; + +return kFALSE; +} + +//_____________________________________________________________________ +Bool_t AliTPCCalibKr::IsCSide(Int_t chamber) +{ +// check if C side +// returns kTRUE if C side and kFALSE if A side + + if((chamber>=18 && chamber<36) || (chamber>=54 && chamber<72)) return kTRUE; + +return kFALSE; +} + +//_____________________________________________________________________ +Bool_t AliTPCCalibKr::Update(AliTPCclusterKr *cl) +{ + // + // fill existing histograms + // + + if (!Accept(cl)) return kFALSE; + TH3F *h = (TH3F*)fHistoKrArray.At(cl->GetSec()); + if(!h) return kFALSE; + + h->Fill(cl->GetMax().GetRow(),cl->GetMax().GetPad(),cl->GetADCcluster()); + + return kTRUE; +} + +//_____________________________________________________________________ +Bool_t AliTPCCalibKr::Accept(AliTPCclusterKr *cl){ + // + // cuts + // + /* + TCut cutR0("cutR0","fADCcluster/fSize<200"); // adjust it according v seetings - + TCut cutR1("cutR1","fADCcluster/fSize>7"); // cosmic tracks and noise removal + TCut cutR2("cutR2","fMax.fAdc/fADCcluster<0.4"); // digital noise removal + TCut cutR3("cutR3","fMax.fAdc/fADCcluster>0.01"); // noise removal + TCut cutR4("cutR4","fMax.fTime>200"); // noise removal + TCut cutR5("cutR5","fMax.fTime<600"); // noise removal + TCut cutS1("cutS1","fSize<200"); // adjust it according v seetings - cosmic tracks + TCut cutAll = cutR0+cutR1+cutR2+cutR3+cutR4+cutR5+cutS1; + */ + /* + //R0 + if ((float)cl->GetADCcluster()/ cl->GetSize() >200) return kFALSE; + // R1 + if ((float)cl->GetADCcluster()/ cl->GetSize() <7) return kFALSE; + //R2 + if ((float)cl->GetMax().GetAdc()/ cl->GetADCcluster() >0.4) return kFALSE; + //R3 + if ((float)cl->GetMax().GetAdc()/ cl->GetADCcluster() <0.01) return kFALSE; + //R4 + if (cl->GetMax().GetTime() < 200) return kFALSE; + //R5 + if (cl->GetMax().GetTime() > 600) return kFALSE; + //S1 + if (cl->GetSize()>200) return kFALSE; + if (cl->GetSize()<6) return kFALSE; + + SetADCOverClustSizeRange(7,200); + SetMaxADCOverClustADCRange(0.01,0.4); + SetTimeRange(200,600); + SetClustSizeRange(6,200); + */ + + //R0 + if ((float)cl->GetADCcluster()/ cl->GetSize() >fADCOverClustSizeMax) return kFALSE; + // R1 + if ((float)cl->GetADCcluster()/ cl->GetSize() GetMax().GetAdc()/ cl->GetADCcluster() >fMaxADCOverClustADCMax) return kFALSE; + //R3 + if ((float)cl->GetMax().GetAdc()/ cl->GetADCcluster() GetMax().GetTime() > fTimeMax) return kFALSE; + //R5 + if (cl->GetMax().GetTime() < fTimeMin) return kFALSE; + //S1 + if (cl->GetSize()>fClustSizeMax) return kFALSE; + if (cl->GetSize()1.6"); + TCut cutAI1("cutAI1","fPadRMS>0.825"); + TCut cutAI2("cutAI2","fRowRMS>0.1"); + TCut cutAI3("cutAI3","fPads1D<15"); + TCut cutAI4("cutAI4","fTimebinRMS+11.9-2.15*TMath::Log(1.*fADCcluster)<0"); + + TCut cutAIAll = cutAI0+cutAI1+cutAI2+cutAI3+cutAI4; + + TCut cutAO0("cutAO0","fTimebinRMS>0.8"); + TCut cutAO1("cutAO1","fPadRMS>0.55"); + TCut cutAO2("cutAO2","fRowRMS>0.1"); + TCut cutAO3("cutAO3","fPads1D<11"); + TCut cutAO4("cutAO4","fTimebinRMS+11.9-2.15*TMath::Log(2.*fADCcluster)<0"); + + TCut cutAOAll = cutAO0+cutAO1+cutAO2+cutAO3+cutAO4; + TCut cutAll("cutAll","(fSec<36&&cutAIAll)||(fSec>=36&&cutAOAll)"); + + */ + if(cl->GetSec()<36){ //IROCs + //AI0 + if((float)cl->GetTimebinRMS() <= fTimebinRmsIrocMin) return kFALSE; + //AI1 + if((float)cl->GetPadRMS() <= fPadRmsIrocMin) return kFALSE; + //AI2 + if((float)cl->GetRowRMS() <= fRowRmsIrocMin) return kFALSE; + //AI3 + if(cl->GetPads1D() >= fClusterPadSize1DIrocMax) return kFALSE; + //AI4 + if((float)cl->GetTimebinRMS()+11.9-2.15*TMath::Log(fCurveCoefficientIroc*(float)cl->GetADCcluster()) >= 0) return kFALSE; + }else{ //OROCs + //AO0 + if((float)cl->GetTimebinRMS() <= fTimebinRmsOrocMin) return kFALSE; + //AO1 + if((float)cl->GetPadRMS() <= fPadRmsOrocMin) return kFALSE; + //AO2 + if((float)cl->GetRowRMS() <= fRowRmsOrocMin) return kFALSE; + //AO3 + if(cl->GetPads1D() >= fClusterPadSize1DOrocMax) return kFALSE; + //AO4 + if((float)cl->GetTimebinRMS()+11.9-2.15*TMath::Log(fCurveCoefficientOroc*(float)cl->GetADCcluster()) >= 0) return kFALSE; + } + + return kTRUE; + +} + +//_____________________________________________________________________ +TH3F* AliTPCCalibKr::GetHistoKr(Int_t chamber) const +{ + // get histograms from fHistoKrArray + return (TH3F*) fHistoKrArray.At(chamber); +} + +//_____________________________________________________________________ +void AliTPCCalibKr::Analyse() +{ + // + // analyse the histograms and extract krypton calibration parameters + // + + // AliTPCCalPads that will contain the calibration parameters + AliTPCCalPad* spectrMeanCalPad = new AliTPCCalPad("spectrMean", "spectrMean"); + AliTPCCalPad* spectrRMSCalPad = new AliTPCCalPad("spectrRMS", "spectrRMS"); + AliTPCCalPad* fitMeanCalPad = new AliTPCCalPad("fitMean", "fitMean"); + AliTPCCalPad* fitRMSCalPad = new AliTPCCalPad("fitRMS", "fitRMS"); + AliTPCCalPad* fitNormChi2CalPad = new AliTPCCalPad("fitNormChi2", "fitNormChi2"); + AliTPCCalPad* entriesCalPad = new AliTPCCalPad("entries", "entries"); + + // file stream for debugging purposes + TTreeSRedirector* debugStream = new TTreeSRedirector("debugCalibKr.root"); + + // if entries in spectrum less than minEntries, then the fit won't be performed + Int_t minEntries = 1; //300; + + Double_t windowFrac = 0.12; + // the 3d histogram will be projected on the pads given by the following window size + // set the numbers to 0 if you want to do a pad-by-pad calibration + UInt_t rowRadius = fRowRadius;//4; + UInt_t padRadius = fPadRadius;//4; + + // the step size by which pad and row are incremented is given by the following numbers + // set them to 1 if you want the finest granularity + UInt_t rowStep = fRowStep;//1;//2 // formerly: 2*rowRadius + UInt_t padStep = fPadStep;//1;//4 // formerly: 2*padRadius + + for (Int_t chamber = 0; chamber < 72; chamber++) { + //if (chamber != 71) continue; + AliTPCCalROC roc(chamber); // I need this only for GetNrows() and GetNPads() + + // Usually I would traverse each pad, take the spectrum for its neighbourhood and + // obtain the calibration parameters. This takes very long, so instead I assign the same + // calibration values to the whole neighbourhood and then go on to the next neighbourhood. + UInt_t nRows = roc.GetNrows(); + for (UInt_t iRow = 0; iRow < nRows; iRow += rowStep) { + UInt_t nPads = roc.GetNPads(iRow); + //if (iRow >= 10) break; + for (UInt_t iPad = 0; iPad < nPads; iPad += padStep) { + //if (iPad >= 20) break; + TH3F* h = GetHistoKr(chamber); + if (!h) continue; + + // the 3d histogram will be projected on the pads given by the following bounds + // for rows and pads + Int_t rowLow = iRow - rowRadius; + UInt_t rowUp = iRow + rowRadius + rowStep-1; + Int_t padLow = iPad - padRadius; + UInt_t padUp = iPad + padRadius + padStep-1; + // if window goes out of chamber + if (rowLow < 0) rowLow = 0; + if (rowUp >= nRows) rowUp = nRows - 1; + if (padLow < 0) padLow = 0; + if (padUp >= nPads) padUp = nPads - 1; + + // project the histogram + //TH1D* projH = h->ProjectionZ("projH", rowLow+1, rowUp+1, padLow+1, padUp+1); // SLOW + TH1D* projH = ProjectHisto(h, "projH", rowLow+1, rowUp+1, padLow+1, padUp+1); + + // get the number of entries in the spectrum + Double_t entries = projH->GetEntries(); + if (entries < minEntries) { delete projH; continue; } + + // get the two calibration parameters mean of spectrum and RMS of spectrum + Double_t histMean = projH->GetMean(); + Double_t histRMS = (histMean != 0) ? projH->GetRMS() / histMean : 0.; + + // find maximum in spectrum to define a range (given by windowFrac) for which a Gauss is fitted + Double_t maxEntries = projH->GetBinCenter(projH->GetMaximumBin()); + Int_t minBin = projH->FindBin((1.-windowFrac) * maxEntries); + Int_t maxBin = projH->FindBin((1.+windowFrac) * maxEntries); + Double_t integCharge = projH->Integral(minBin,maxBin); + + Int_t fitResult = projH->Fit("gaus", "Q0", "", (1.-windowFrac) * maxEntries, (1.+windowFrac) * maxEntries); + + if (fitResult != 0) { + Error("Analyse", "Error while fitting spectrum for chamber %i, rows %i - %i, pads %i - %i, integrated charge %f.", chamber, rowLow, rowUp, padLow, padUp, integCharge); + //printf("[ch%i r%i, p%i] entries = %f, maxEntries = %f, %f\n", chamber, iRow, iPad, entries, maxEntries); + + delete projH; + continue; + } + + // get the two calibration parameters mean of gauss fit and sigma of gauss fit + TF1* gausFit = projH->GetFunction("gaus"); + Double_t fitMean = gausFit->GetParameter(1); + Double_t fitRMS = gausFit->GetParameter(2); + Int_t numberFitPoints = gausFit->GetNumberFitPoints(); + if (numberFitPoints == 0) continue; + Double_t fitNormChi2 = gausFit->GetChisquare() / numberFitPoints; + delete gausFit; + delete projH; + if (fitMean <= 0) continue; + //printf("[ch%i r%i, p%i] entries = %f, maxEntries = %f, fitMean = %f, fitRMS = %f\n", chamber, iRow, iPad, entries, maxEntries, fitMean, fitRMS); + + // write the calibration parameters for each pad that the 3d histogram was projected onto + // (with considering the step size) to the CalPads + // rowStep (padStep) odd: round down s/2 and fill this # of rows (pads) in both directions + // rowStep (padStep) even: fill s/2 rows (pads) in ascending direction, s/2-1 in descending direction + for (Int_t r = iRow - (rowStep/2 - (rowStep+1)%2); r <= (Int_t)(iRow + rowStep/2); r++) { + if (r < 0 || r >= (Int_t)nRows) continue; + UInt_t nPadsR = roc.GetNPads(r); + for (Int_t p = iPad - (padStep/2 - (padStep+1)%2); p <= (Int_t)(iPad + padStep/2); p++) { + if (p < 0 || p >= (Int_t)nPadsR) continue; + spectrMeanCalPad->GetCalROC(chamber)->SetValue(r, p, histMean); + spectrRMSCalPad->GetCalROC(chamber)->SetValue(r, p, histRMS); + fitMeanCalPad->GetCalROC(chamber)->SetValue(r, p, fitMean); + fitRMSCalPad->GetCalROC(chamber)->SetValue(r, p, fitRMS); + fitNormChi2CalPad->GetCalROC(chamber)->SetValue(r, p, fitNormChi2); + entriesCalPad->GetCalROC(chamber)->SetValue(r, p, entries); + + (*debugStream) << "calibKr" << + "sector=" << chamber << // chamber number + "row=" << r << // row number + "pad=" << p << // pad number + "histMean=" << histMean << // mean of the spectrum + "histRMS=" << histRMS << // RMS of the spectrum divided by the mean + "fitMean=" << fitMean << // Gauss fitted mean of the 41.6 keV Kr peak + "fitRMS=" << fitRMS << // Gauss fitted sigma of the 41.6 keV Kr peak + "fitNormChi2" << fitNormChi2 << // normalized chi square of the Gauss fit + "entries=" << entries << // number of entries for the spectrum + "\n"; + } + } + } + } + } + + TFile f("calibKr.root", "recreate"); + spectrMeanCalPad->Write(); + spectrRMSCalPad->Write(); + fitMeanCalPad->Write(); + fitRMSCalPad->Write(); + fitNormChi2CalPad->Write(); + entriesCalPad->Write(); + f.Close(); + delete spectrMeanCalPad; + delete spectrRMSCalPad; + delete fitMeanCalPad; + delete fitRMSCalPad; + delete fitNormChi2CalPad; + delete entriesCalPad; + delete debugStream; +} + +//_____________________________________________________________________ +TH1D* AliTPCCalibKr::ProjectHisto(TH3F* histo3D, const char* name, Int_t xMin, Int_t xMax, Int_t yMin, Int_t yMax) +{ + // project the z-axis of a 3d histo to a specific range of the x- and y-axes, + // replaces TH3F::ProjectZ() to gain more speed + + TAxis* xAxis = histo3D->GetXaxis(); + TAxis* yAxis = histo3D->GetYaxis(); + TAxis* zAxis = histo3D->GetZaxis(); + Double_t zMinVal = zAxis->GetXmin(); + Double_t zMaxVal = zAxis->GetXmax(); + + Int_t nBinsZ = zAxis->GetNbins(); + TH1D* projH = new TH1D(name, name, nBinsZ, zMinVal, zMaxVal); + + Int_t nx = xAxis->GetNbins()+2; + Int_t ny = yAxis->GetNbins()+2; + Int_t bin = 0; + Double_t entries = 0.; + for (Int_t x = xMin; x <= xMax; x++) { + for (Int_t y = yMin; y <= yMax; y++) { + for (Int_t z = 0; z <= nBinsZ+1; z++) { + bin = x + nx * (y + ny * z); + Double_t val = histo3D->GetBinContent(bin); + projH->Fill(zAxis->GetBinCenter(z), val); + entries += val; + } + } + } + projH->SetEntries((Long64_t)entries); + return projH; +} + +//_____________________________________________________________________ +Long64_t AliTPCCalibKr::Merge(TCollection* list) { +// merge function +// + +if (!list) +return 0; + +if (list->IsEmpty()) +return 1; + +TIterator* iter = list->MakeIterator(); +TObject* obj = 0; + + iter->Reset(); + Int_t count=0; + while((obj = iter->Next()) != 0) + { + AliTPCCalibKr* entry = dynamic_cast(obj); + if (entry == 0) continue; + + for(int i=0; i<72; ++i) { + if(IsCSide(i) == kTRUE && fCSide == kTRUE) { + ((TH3F*)fHistoKrArray.At(i))->Add( ((TH3F*)entry->fHistoKrArray.At(i)) ); + } + + if(IsCSide(i) == kFALSE && fASide == kTRUE) { + ((TH3F*)fHistoKrArray.At(i))->Add( ((TH3F*)entry->fHistoKrArray.At(i)) ); + } + } + + count++; + } + +return count; +} diff --git a/TPC/Calib/AliTPCCalibKr.h b/TPC/Calib/AliTPCCalibKr.h index 4bfbfc54ad1..488df13cdb6 100644 --- a/TPC/Calib/AliTPCCalibKr.h +++ b/TPC/Calib/AliTPCCalibKr.h @@ -1,112 +1,112 @@ -#ifndef ALITPCCALIBKR_H -#define ALITPCCALIBKR_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -#include -#include -#include -#include -#include - -#include "AliTPCclusterKr.h" - -class TH3F; -class TH1D; - -class AliTPCCalibKr : public TObject { - -public: - AliTPCCalibKr(); - AliTPCCalibKr(const AliTPCCalibKr&); // copy constructor - virtual ~AliTPCCalibKr(); - - AliTPCCalibKr& operator=(const AliTPCCalibKr&); - - // - void Init(); - Bool_t Process(AliTPCclusterKr *cluster); - Bool_t Accept(AliTPCclusterKr *cluster); - Bool_t Update(AliTPCclusterKr *cluster); - TH3F* CreateHisto(Int_t chamber); - - const TObjArray* GetHistoKrArray () {return &fHistoKrArray;} // get calibration object - TH3F* GetHistoKr(Int_t sector) const; // get refernce histogram - - Bool_t IsCSide(Int_t chamber); - Bool_t IsIROC(Int_t chamber); - - void Analyse(); - static TH1D* ProjectHisto(TH3F* histo3D, const char* name = "_pz", Int_t firstxbin = 0, Int_t lastxbin = 0, Int_t firstybin = 0, Int_t lastybin = 0); - - void SetASide(Bool_t bA = kTRUE) {fASide = bA;} // fill histo only A TPC side - void SetBSide(Bool_t bC = kTRUE) {fCSide = bC;} // fill histo only C TPC side - - //Merge output objects (needed by PROOF) - virtual Long64_t Merge(TCollection* list); - - // Setters - void SetADCOverClustSizeRange(Float_t min=0.0,Float_t max=1.0e9) {fADCOverClustSizeMin = min ; fADCOverClustSizeMax = max; } - void SetMaxADCOverClustADCRange(Float_t min=0.0,Float_t max=1.0e9) {fMaxADCOverClustADCMin = min ; fMaxADCOverClustADCMax = max; } - void SetTimeRange(Float_t min=0.0, Float_t max=1.0e9) {fTimeMin = min ; fTimeMax = max; } - void SetClustSizeRange(Float_t min=0.0, Float_t max=1.0e9) {fClustSizeMin = min ; fClustSizeMax = max; } - - void SetTimebinRmsMin(Float_t iroc=0.0,Float_t oroc=0.0) {fTimebinRmsIrocMin = iroc ; fTimebinRmsOrocMin = oroc; } - void SetPadRmsMin(Float_t iroc=0.0,Float_t oroc=0.0) {fPadRmsIrocMin = iroc ; fPadRmsOrocMin = oroc; } - void SetRowRmsMin(Float_t iroc=0.0,Float_t oroc=0.0) {fRowRmsIrocMin = iroc ; fRowRmsOrocMin = oroc; } - void SetClusterPadSize1DMax(Short_t iroc=200,Short_t oroc=200) {fClusterPadSize1DIrocMax = iroc ; fClusterPadSize1DOrocMax = oroc; } - void SetCurveCoefficient(Float_t iroc=1.0e9,Float_t oroc=1.0e9) {fCurveCoefficientIroc = iroc ; fCurveCoefficientOroc = oroc; } - - void SetIrocHistogram(Int_t nbins=200,Float_t min=100,Float_t max=6000) {fIrocHistogramNbins = nbins ; fIrocHistogramMin = min ; fIrocHistogramMax = max; } - void SetOrocHistogram(Int_t nbins=200,Float_t min=100,Float_t max=5500) {fOrocHistogramNbins = nbins ; fOrocHistogramMin = min ; fOrocHistogramMax = max; } - - void SetRadius(UInt_t row=0, UInt_t pad=0) {fRowRadius = row ; fPadRadius = pad; } - void SetStep(UInt_t row=1, UInt_t pad=1) {fRowStep = (row>=1?row:1) ; fPadStep = (pad>=1?pad:1) ; } - -private: - - Bool_t fASide; //! Only A side - Bool_t fCSide; //! Only C side - TObjArray fHistoKrArray; // Calibration histograms for Kr distribution - - Float_t fADCOverClustSizeMin; // min ADCcluster over Cluster size ratio - Float_t fADCOverClustSizeMax; // max ADCcluster over Cluster size ratio - Float_t fMaxADCOverClustADCMin; // min MaxADC over ADCcluster ratio - Float_t fMaxADCOverClustADCMax; // max MaxADC over ADCcluster ratio - Float_t fTimeMin; // min time bin for MaxADC - Float_t fTimeMax; // max time bin for MaxADC - Float_t fClustSizeMin; // min cluster size - Float_t fClustSizeMax; // max cluster size - - Float_t fTimebinRmsIrocMin; // min Timebin RMS for IROCs - Float_t fPadRmsIrocMin; // min Pad RMS for IROCs - Float_t fRowRmsIrocMin; // min Row RMS for IROCs - Short_t fClusterPadSize1DIrocMax; // max size of cluster in pad dir. for IROCs - Float_t fCurveCoefficientIroc; // A coefficient in curve function for IROCs - - Float_t fTimebinRmsOrocMin; // min Timebin RMS for OROCs - Float_t fPadRmsOrocMin; // min Pad RMS for OROCs - Float_t fRowRmsOrocMin; // min Row RMS for OROCs - Short_t fClusterPadSize1DOrocMax; // max size of cluster in pad dir. for OROCs - Float_t fCurveCoefficientOroc; // A coefficient in curve function for OROCs - - Float_t fIrocHistogramMin; // minimal range of histogram for IROCs - Float_t fIrocHistogramMax; // maximal range of histogram for IROCs - Int_t fIrocHistogramNbins; // number of bins in IROC histogram - Float_t fOrocHistogramMin; // minimal range of histogram for OROCs - Float_t fOrocHistogramMax; // maximal range of histogram for OROCs - Int_t fOrocHistogramNbins; // number of bins in OROC histogram - - UInt_t fRowRadius; // window size around pad +/-; set to 0 for pad-by-pad calib - UInt_t fPadRadius; // window size around pad +/-; set to 0 for pad-by-pad calib - UInt_t fRowStep; // step size; set to 1 for finest granularity - UInt_t fPadStep; // step size; set to 1 for finest granularity - - - -public: - ClassDef(AliTPCCalibKr, 4) // Implementation of the TPC krypton calibration -}; - -#endif - +#ifndef ALITPCCALIBKR_H +#define ALITPCCALIBKR_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +#include +#include +#include +#include +#include + +#include "AliTPCclusterKr.h" + +class TH3F; +class TH1D; + +class AliTPCCalibKr : public TObject { + +public: + AliTPCCalibKr(); + AliTPCCalibKr(const AliTPCCalibKr&); // copy constructor + virtual ~AliTPCCalibKr(); + + AliTPCCalibKr& operator=(const AliTPCCalibKr&); + + // + void Init(); + Bool_t Process(AliTPCclusterKr *cluster); + Bool_t Accept(AliTPCclusterKr *cluster); + Bool_t Update(AliTPCclusterKr *cluster); + TH3F* CreateHisto(Int_t chamber); + + const TObjArray* GetHistoKrArray () {return &fHistoKrArray;} // get calibration object + TH3F* GetHistoKr(Int_t sector) const; // get refernce histogram + + Bool_t IsCSide(Int_t chamber); + Bool_t IsIROC(Int_t chamber); + + void Analyse(); + static TH1D* ProjectHisto(TH3F* histo3D, const char* name = "_pz", Int_t firstxbin = 0, Int_t lastxbin = 0, Int_t firstybin = 0, Int_t lastybin = 0); + + void SetASide(Bool_t bA = kTRUE) {fASide = bA;} // fill histo only A TPC side + void SetBSide(Bool_t bC = kTRUE) {fCSide = bC;} // fill histo only C TPC side + + //Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* list); + + // Setters + void SetADCOverClustSizeRange(Float_t min=0.0,Float_t max=1.0e9) {fADCOverClustSizeMin = min ; fADCOverClustSizeMax = max; } + void SetMaxADCOverClustADCRange(Float_t min=0.0,Float_t max=1.0e9) {fMaxADCOverClustADCMin = min ; fMaxADCOverClustADCMax = max; } + void SetTimeRange(Float_t min=0.0, Float_t max=1.0e9) {fTimeMin = min ; fTimeMax = max; } + void SetClustSizeRange(Float_t min=0.0, Float_t max=1.0e9) {fClustSizeMin = min ; fClustSizeMax = max; } + + void SetTimebinRmsMin(Float_t iroc=0.0,Float_t oroc=0.0) {fTimebinRmsIrocMin = iroc ; fTimebinRmsOrocMin = oroc; } + void SetPadRmsMin(Float_t iroc=0.0,Float_t oroc=0.0) {fPadRmsIrocMin = iroc ; fPadRmsOrocMin = oroc; } + void SetRowRmsMin(Float_t iroc=0.0,Float_t oroc=0.0) {fRowRmsIrocMin = iroc ; fRowRmsOrocMin = oroc; } + void SetClusterPadSize1DMax(Short_t iroc=200,Short_t oroc=200) {fClusterPadSize1DIrocMax = iroc ; fClusterPadSize1DOrocMax = oroc; } + void SetCurveCoefficient(Float_t iroc=1.0e9,Float_t oroc=1.0e9) {fCurveCoefficientIroc = iroc ; fCurveCoefficientOroc = oroc; } + + void SetIrocHistogram(Int_t nbins=200,Float_t min=100,Float_t max=6000) {fIrocHistogramNbins = nbins ; fIrocHistogramMin = min ; fIrocHistogramMax = max; } + void SetOrocHistogram(Int_t nbins=200,Float_t min=100,Float_t max=5500) {fOrocHistogramNbins = nbins ; fOrocHistogramMin = min ; fOrocHistogramMax = max; } + + void SetRadius(UInt_t row=0, UInt_t pad=0) {fRowRadius = row ; fPadRadius = pad; } + void SetStep(UInt_t row=1, UInt_t pad=1) {fRowStep = (row>=1?row:1) ; fPadStep = (pad>=1?pad:1) ; } + +private: + + Bool_t fASide; //! Only A side + Bool_t fCSide; //! Only C side + TObjArray fHistoKrArray; // Calibration histograms for Kr distribution + + Float_t fADCOverClustSizeMin; // min ADCcluster over Cluster size ratio + Float_t fADCOverClustSizeMax; // max ADCcluster over Cluster size ratio + Float_t fMaxADCOverClustADCMin; // min MaxADC over ADCcluster ratio + Float_t fMaxADCOverClustADCMax; // max MaxADC over ADCcluster ratio + Float_t fTimeMin; // min time bin for MaxADC + Float_t fTimeMax; // max time bin for MaxADC + Float_t fClustSizeMin; // min cluster size + Float_t fClustSizeMax; // max cluster size + + Float_t fTimebinRmsIrocMin; // min Timebin RMS for IROCs + Float_t fPadRmsIrocMin; // min Pad RMS for IROCs + Float_t fRowRmsIrocMin; // min Row RMS for IROCs + Short_t fClusterPadSize1DIrocMax; // max size of cluster in pad dir. for IROCs + Float_t fCurveCoefficientIroc; // A coefficient in curve function for IROCs + + Float_t fTimebinRmsOrocMin; // min Timebin RMS for OROCs + Float_t fPadRmsOrocMin; // min Pad RMS for OROCs + Float_t fRowRmsOrocMin; // min Row RMS for OROCs + Short_t fClusterPadSize1DOrocMax; // max size of cluster in pad dir. for OROCs + Float_t fCurveCoefficientOroc; // A coefficient in curve function for OROCs + + Float_t fIrocHistogramMin; // minimal range of histogram for IROCs + Float_t fIrocHistogramMax; // maximal range of histogram for IROCs + Int_t fIrocHistogramNbins; // number of bins in IROC histogram + Float_t fOrocHistogramMin; // minimal range of histogram for OROCs + Float_t fOrocHistogramMax; // maximal range of histogram for OROCs + Int_t fOrocHistogramNbins; // number of bins in OROC histogram + + UInt_t fRowRadius; // window size around pad +/-; set to 0 for pad-by-pad calib + UInt_t fPadRadius; // window size around pad +/-; set to 0 for pad-by-pad calib + UInt_t fRowStep; // step size; set to 1 for finest granularity + UInt_t fPadStep; // step size; set to 1 for finest granularity + + + +public: + ClassDef(AliTPCCalibKr, 4) // Implementation of the TPC krypton calibration +}; + +#endif + diff --git a/TPC/FindKrClusters.C b/TPC/FindKrClusters.C index d00b9ccc07f..39336ad241e 100644 --- a/TPC/FindKrClusters.C +++ b/TPC/FindKrClusters.C @@ -1,135 +1,135 @@ - -/**************************************************************************** - * Origin: A.Matyja amatyja@cern.ch * - ****************************************************************************/ - -/* - - macro to create array of clusters from TPC digits - input files - galice.root - digits.root - file with digits - usualy use link to galice.root - - in splitted mode - neccesary to create link to proper file - - output file - TPC.RecPoints.root - - -// Warning - if cluster file AliTPCclusters.root already exist - macro exit and don't produce anything - - -*/ - - -#ifndef __CINT__ -#include -#include "AliRun.h" -#include "AliTPCv4.h" -#include "AliTPCParam.h" -#include "AliTPCclusterKr.h" -#include "AliTPCclustererKr.h" -#include "TFile.h" -#include "TStopwatch.h" -#include "TTree.h" -#endif - -Int_t FindKrClusters(){ - - // - //Load DataBase - // - //char *ocdbpath ="local:///afs/cern.ch/alice/tpctest/OCDB"; - //char *ocdbpath ="local:///home/matyja/baza/OCDB"; - char *ocdbpath ="local:///data/baza/OCDB"; - if (ocdbpath==0){ - ocdbpath="alien://folder=/alice/data/2007/LHC07w/OCDB/"; - } - printf("OCDB PATH = %s\n",ocdbpath); - AliCDBManager * man = AliCDBManager::Instance(); - man->SetDefaultStorage(ocdbpath); - man->SetRun(0); - - AliRunLoader* rl = AliRunLoader::Open("galice.root"); - if (rl == 0x0) { - cerr<<"Can not open session"<GetLoader("TPCLoader"); - if (tpcl == 0x0) { - cerr<<"Can not get TPC Loader"<LoadDigits()) { - cerr<<"Error occured while loading digits"<LoadgAlice()) { - cerr<<"Error occured while LoadgAlice"<GetAliRun(); - if (!gAlice) { - cerr<<"Can't get gAlice !\n"; - return 1; - } - - TDirectory *cwd = gDirectory; - - AliTPCv4 *tpc = (AliTPCv4*)gAlice->GetDetector("TPC"); - Int_t ver = tpc->IsVersion(); - cerr<<"TPC version "<CdGAFile(); - - AliTPCParam *param=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); - if (!param) {cerr<<"TPC parameters have not been found !\n"; return 4;} - - AliTPCDigitsArray *digarr=new AliTPCDigitsArray; - digarr->Setup(param); - - cerr<<"It has begun"<cd(); - - TTree *output_tree; - - AliTPCclustererKr *clusters = new AliTPCclustererKr(); - clusters->SetParam(param); - clusters->SetOutput(output_tree); - - clusters->SetMinAdc(3);//signal threshold (everything below is treated as 0) - clusters->SetMinTimeBins(2);//number of neighbouring timebins - clusters->SetMaxPadRangeCm(5.);//distance of the cluster center to the center of a pad (in cm) - clusters->SetMaxRowRangeCm(5.);//distance of the cluster center to the center of a padrow (in cm) - clusters->SetMaxTimeRange(7.);//distance of the cluster center to the max time bin on a pad (in tackts) - //ie. fabs(centerT - time)<7 - - clusters->SetIsolCut(3);//set isolation cut threshold - clusters->SetValueToSize(3.1);//cut reduce peak at 0 - - Int_t nevmax=rl->GetNumberOfEvents();//number of events in run - for(Int_t nev=0;nevGetEvent(nev); - - TTree* input_tree= tpcl->TreeD();//tree with digits - if (input_tree == 0x0){ - cerr << "Can not get TreeD for event " <ConnectTree(input_tree); - clusters->SetInput(input_tree); - clusters->SetDigArr(digarr); - cout<<"Processing event "<FinderIO(); - - } - delete clusters; - timer.Stop(); timer.Print(); - - delete rl;//cleans everything - - return 0; -} + +/**************************************************************************** + * Origin: A.Matyja amatyja@cern.ch * + ****************************************************************************/ + +/* + + macro to create array of clusters from TPC digits + input files - galice.root + digits.root - file with digits - usualy use link to galice.root + - in splitted mode - neccesary to create link to proper file + + output file - TPC.RecPoints.root + + +// Warning - if cluster file AliTPCclusters.root already exist - macro exit and don't produce anything + + +*/ + + +#ifndef __CINT__ +#include +#include "AliRun.h" +#include "AliTPCv4.h" +#include "AliTPCParam.h" +#include "AliTPCclusterKr.h" +#include "AliTPCclustererKr.h" +#include "TFile.h" +#include "TStopwatch.h" +#include "TTree.h" +#endif + +Int_t FindKrClusters(){ + + // + //Load DataBase + // + //char *ocdbpath ="local:///afs/cern.ch/alice/tpctest/OCDB"; + //char *ocdbpath ="local:///home/matyja/baza/OCDB"; + char *ocdbpath ="local:///data/baza/OCDB"; + if (ocdbpath==0){ + ocdbpath="alien://folder=/alice/data/2007/LHC07w/OCDB/"; + } + printf("OCDB PATH = %s\n",ocdbpath); + AliCDBManager * man = AliCDBManager::Instance(); + man->SetDefaultStorage(ocdbpath); + man->SetRun(0); + + AliRunLoader* rl = AliRunLoader::Open("galice.root"); + if (rl == 0x0) { + cerr<<"Can not open session"<GetLoader("TPCLoader"); + if (tpcl == 0x0) { + cerr<<"Can not get TPC Loader"<LoadDigits()) { + cerr<<"Error occured while loading digits"<LoadgAlice()) { + cerr<<"Error occured while LoadgAlice"<GetAliRun(); + if (!gAlice) { + cerr<<"Can't get gAlice !\n"; + return 1; + } + + TDirectory *cwd = gDirectory; + + AliTPCv4 *tpc = (AliTPCv4*)gAlice->GetDetector("TPC"); + Int_t ver = tpc->IsVersion(); + cerr<<"TPC version "<CdGAFile(); + + AliTPCParam *param=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); + if (!param) {cerr<<"TPC parameters have not been found !\n"; return 4;} + + AliTPCDigitsArray *digarr=new AliTPCDigitsArray; + digarr->Setup(param); + + cerr<<"It has begun"<cd(); + + TTree *output_tree; + + AliTPCclustererKr *clusters = new AliTPCclustererKr(); + clusters->SetParam(param); + clusters->SetOutput(output_tree); + + clusters->SetMinAdc(3);//signal threshold (everything below is treated as 0) + clusters->SetMinTimeBins(2);//number of neighbouring timebins + clusters->SetMaxPadRangeCm(5.);//distance of the cluster center to the center of a pad (in cm) + clusters->SetMaxRowRangeCm(5.);//distance of the cluster center to the center of a padrow (in cm) + clusters->SetMaxTimeRange(7.);//distance of the cluster center to the max time bin on a pad (in tackts) + //ie. fabs(centerT - time)<7 + + clusters->SetIsolCut(3);//set isolation cut threshold + clusters->SetValueToSize(3.1);//cut reduce peak at 0 + + Int_t nevmax=rl->GetNumberOfEvents();//number of events in run + for(Int_t nev=0;nevGetEvent(nev); + + TTree* input_tree= tpcl->TreeD();//tree with digits + if (input_tree == 0x0){ + cerr << "Can not get TreeD for event " <ConnectTree(input_tree); + clusters->SetInput(input_tree); + clusters->SetDigArr(digarr); + cout<<"Processing event "<FinderIO(); + + } + delete clusters; + timer.Stop(); timer.Print(); + + delete rl;//cleans everything + + return 0; +} diff --git a/TPC/FindKrClustersRaw.C b/TPC/FindKrClustersRaw.C index 5c426d4ae10..b3df0ba74ec 100644 --- a/TPC/FindKrClustersRaw.C +++ b/TPC/FindKrClustersRaw.C @@ -1,164 +1,164 @@ -// - -Int_t FindKrClusterCheck(const char *fileName="data.root"); - - -Int_t FindKrClustersRaw(const char *fileName="data.root"){ - - - - // - // remove Altro warnings - // - AliLog::SetClassDebugLevel("AliRawReaderDate",-5); - AliLog::SetClassDebugLevel("AliTPCAltroMapping",-5); - AliLog::SetModuleDebugLevel("RAW",-5); - // - // Get calibration - // - char *ocdbpath = gSystem->Getenv("OCDB_PATH"); - //char *ocdbpath ="local:///afs/cern.ch/alice/tpctest/OCDB"; - if (ocdbpath==0){ - ocdbpath="alien://folder=/alice/data/2007/LHC07w/OCDB/"; - } - printf("OCDB PATH = %s\n",ocdbpath); - AliCDBManager * man = AliCDBManager::Instance(); - man->SetDefaultStorage(ocdbpath); - man->SetRun(100000000); - - AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise(); - AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping(); - // - // - - - //define tree - TFile *hfile=new TFile("adc.root","RECREATE","ADC file"); - // Create a ROOT Tree - TTree *mytree = new TTree("Kr","Krypton cluster tree"); - - - Int_t debugLevel=1; - if(debugLevel>0){ - TH1F *histoRow =new TH1F("histoRow","rows",100,0.,100.); - TH1F *histoPad =new TH1F("histoPad","pads",150,0.,150.); - TH1F *histoTime =new TH1F("histoTime","timebins",100,0.,1000.); - TH2F *histoRowPad=new TH2F("histoRowPad","pads-vs-rows" ,150,0.,150.,100,0.,100.); - } - - - //one general output - AliTPCclustererKr *clusters = new AliTPCclustererKr(); - clusters->SetOutput(mytree); - clusters->SetRecoParam(0); - - if(debugLevel>0){ - clusters->SetDebugLevel(debugLevel); - clusters->SetHistoRow(histoRow ); - clusters->SetHistoPad(histoPad ); - clusters->SetHistoTime(histoTime ); - clusters->SetHistoRowPad(histoRowPad); - } - - - AliTPCParamSR *param=new AliTPCParamSR(); - //only for geometry parameters loading - temporarly -// AliRunLoader* rl = AliRunLoader::Open("galice.root"); -// AliTPCParam *param=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); - //if (!param) {cerr<<"TPC parameters have not been found !\n"; return 4;} - - clusters->SetParam(param); - - //set cluster finder parameters (from data) - clusters->SetZeroSup(param->GetZeroSup());//zero suppression parameter - clusters->SetFirstBin(60);//first bin - clusters->SetLastBin(950);//last bin - clusters->SetMaxNoiseAbs(2);//maximal noise - clusters->SetMaxNoiseSigma(3);//maximal amount of sigma of noise - - //set cluster finder parameters (from MC) - clusters->SetMinAdc(3);//signal threshold (everything below is treated as 0) - clusters->SetMinTimeBins(2);//number of neighbouring timebins - clusters->SetMaxPadRangeCm(5.);//distance of the cluster center to the center of a pad (in cm) - clusters->SetMaxRowRangeCm(5.);//distance of the cluster center to the center of a padrow (in cm) - clusters->SetMaxTimeRange(5.);//distance of the cluster center to the max time bin on a pad (in tackts) - //ie. fabs(centerT - time)<7 - clusters->SetValueToSize(7.);//cut reduce peak at 0 - clusters->SetIsolCut(3);//set isolation cut threshold - - AliRawReader *reader = new AliRawReaderRoot(fileName); - reader->Reset(); - - TStopwatch timer; - timer.Start(); - - AliAltroRawStreamFast* stream = new AliAltroRawStreamFast(reader); - stream->SelectRawData("TPC"); - - Int_t evtnr=0; - while (reader->NextEvent()) { - //output for each event - - //if(evtnr>4) break; - cout<<"Evt = "<FinderIO(reader); - evtnr++; - AliSysInfo::AddStamp(Form("Event%d",evtnr),evtnr); - } - - - mytree->Print();//print rootuple summary - // Save all objects in this file - hfile->Write(); - // Close the file - hfile->Close(); - - timer.Stop(); - timer.Print(); - printf("Deleting clusterer\n"); - delete clusters; - printf("Deleting stream\n"); - delete stream; - printf("Deleting raw reader\n"); - delete reader; - -// TCanvas *c2=new TCanvas("c2","title",800,800); -// c2->SetHighLightColor(2); -// c2->Range(-458.9552,-2948.238,3296.642,26856.6); -// c2->SetBorderSize(2); -// c2->SetLeftMargin(0.15); -// c2->SetRightMargin(0.06); -// c2->SetFrameFillColor(0); - -// gStyle->SetOptStat(111111); -// histoRow->Draw(); -// c2->Print("rows.ps"); -// histoPad->Draw(); -// c2->Print("pads.ps"); -// histoTime->Draw(); -// c2->Print("timebins.ps"); -// histoRowPad->Draw(); -// c2->Print("row-pad.ps"); - - return 0; -} - - -Int_t FindKrClusterCheck(const char *fileName){ - // - // - gSystem->Load("$ROOTSYS/lib/libGui.so"); - gSystem->Load("$ROOTSYS/lib/libTree.so"); - gSystem->Load("$MEMSTAT/libMemStat.so"); - { - TMemStat memstat(1000000,100000,kTRUE); - AliSysInfo::AddCallBack(TMemStatManager::GetInstance()->fStampCallBack); - FindKrClustersRaw(fileName); - } - // the output memstat.root file - TMemStat draw("memstat.root"); - // Print some information - // code info - draw.MakeReport(0,0); - -} +// + +Int_t FindKrClusterCheck(const char *fileName="data.root"); + + +Int_t FindKrClustersRaw(const char *fileName="data.root"){ + + + + // + // remove Altro warnings + // + AliLog::SetClassDebugLevel("AliRawReaderDate",-5); + AliLog::SetClassDebugLevel("AliTPCAltroMapping",-5); + AliLog::SetModuleDebugLevel("RAW",-5); + // + // Get calibration + // + char *ocdbpath = gSystem->Getenv("OCDB_PATH"); + //char *ocdbpath ="local:///afs/cern.ch/alice/tpctest/OCDB"; + if (ocdbpath==0){ + ocdbpath="alien://folder=/alice/data/2007/LHC07w/OCDB/"; + } + printf("OCDB PATH = %s\n",ocdbpath); + AliCDBManager * man = AliCDBManager::Instance(); + man->SetDefaultStorage(ocdbpath); + man->SetRun(100000000); + + AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise(); + AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping(); + // + // + + + //define tree + TFile *hfile=new TFile("adc.root","RECREATE","ADC file"); + // Create a ROOT Tree + TTree *mytree = new TTree("Kr","Krypton cluster tree"); + + + Int_t debugLevel=1; + if(debugLevel>0){ + TH1F *histoRow =new TH1F("histoRow","rows",100,0.,100.); + TH1F *histoPad =new TH1F("histoPad","pads",150,0.,150.); + TH1F *histoTime =new TH1F("histoTime","timebins",100,0.,1000.); + TH2F *histoRowPad=new TH2F("histoRowPad","pads-vs-rows" ,150,0.,150.,100,0.,100.); + } + + + //one general output + AliTPCclustererKr *clusters = new AliTPCclustererKr(); + clusters->SetOutput(mytree); + clusters->SetRecoParam(0); + + if(debugLevel>0){ + clusters->SetDebugLevel(debugLevel); + clusters->SetHistoRow(histoRow ); + clusters->SetHistoPad(histoPad ); + clusters->SetHistoTime(histoTime ); + clusters->SetHistoRowPad(histoRowPad); + } + + + AliTPCParamSR *param=new AliTPCParamSR(); + //only for geometry parameters loading - temporarly +// AliRunLoader* rl = AliRunLoader::Open("galice.root"); +// AliTPCParam *param=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); + //if (!param) {cerr<<"TPC parameters have not been found !\n"; return 4;} + + clusters->SetParam(param); + + //set cluster finder parameters (from data) + clusters->SetZeroSup(param->GetZeroSup());//zero suppression parameter + clusters->SetFirstBin(60);//first bin + clusters->SetLastBin(950);//last bin + clusters->SetMaxNoiseAbs(2);//maximal noise + clusters->SetMaxNoiseSigma(3);//maximal amount of sigma of noise + + //set cluster finder parameters (from MC) + clusters->SetMinAdc(3);//signal threshold (everything below is treated as 0) + clusters->SetMinTimeBins(2);//number of neighbouring timebins + clusters->SetMaxPadRangeCm(5.);//distance of the cluster center to the center of a pad (in cm) + clusters->SetMaxRowRangeCm(5.);//distance of the cluster center to the center of a padrow (in cm) + clusters->SetMaxTimeRange(5.);//distance of the cluster center to the max time bin on a pad (in tackts) + //ie. fabs(centerT - time)<7 + clusters->SetValueToSize(7.);//cut reduce peak at 0 + clusters->SetIsolCut(3);//set isolation cut threshold + + AliRawReader *reader = new AliRawReaderRoot(fileName); + reader->Reset(); + + TStopwatch timer; + timer.Start(); + + AliAltroRawStreamFast* stream = new AliAltroRawStreamFast(reader); + stream->SelectRawData("TPC"); + + Int_t evtnr=0; + while (reader->NextEvent()) { + //output for each event + + //if(evtnr>4) break; + cout<<"Evt = "<FinderIO(reader); + evtnr++; + AliSysInfo::AddStamp(Form("Event%d",evtnr),evtnr); + } + + + mytree->Print();//print rootuple summary + // Save all objects in this file + hfile->Write(); + // Close the file + hfile->Close(); + + timer.Stop(); + timer.Print(); + printf("Deleting clusterer\n"); + delete clusters; + printf("Deleting stream\n"); + delete stream; + printf("Deleting raw reader\n"); + delete reader; + +// TCanvas *c2=new TCanvas("c2","title",800,800); +// c2->SetHighLightColor(2); +// c2->Range(-458.9552,-2948.238,3296.642,26856.6); +// c2->SetBorderSize(2); +// c2->SetLeftMargin(0.15); +// c2->SetRightMargin(0.06); +// c2->SetFrameFillColor(0); + +// gStyle->SetOptStat(111111); +// histoRow->Draw(); +// c2->Print("rows.ps"); +// histoPad->Draw(); +// c2->Print("pads.ps"); +// histoTime->Draw(); +// c2->Print("timebins.ps"); +// histoRowPad->Draw(); +// c2->Print("row-pad.ps"); + + return 0; +} + + +Int_t FindKrClusterCheck(const char *fileName){ + // + // + gSystem->Load("$ROOTSYS/lib/libGui.so"); + gSystem->Load("$ROOTSYS/lib/libTree.so"); + gSystem->Load("$MEMSTAT/libMemStat.so"); + { + TMemStat memstat(1000000,100000,kTRUE); + AliSysInfo::AddCallBack(TMemStatManager::GetInstance()->fStampCallBack); + FindKrClustersRaw(fileName); + } + // the output memstat.root file + TMemStat draw("memstat.root"); + // Print some information + // code info + draw.MakeReport(0,0); + +} diff --git a/TPC/Rec/AliTPCclustererKr.cxx b/TPC/Rec/AliTPCclustererKr.cxx index 9ab8eba26d0..c6fa655bd82 100644 --- a/TPC/Rec/AliTPCclustererKr.cxx +++ b/TPC/Rec/AliTPCclustererKr.cxx @@ -1,986 +1,986 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id: AliTPCclustererKr.cxx,v 1.7 2008/02/06 17:24:53 matyja Exp $ */ - -//----------------------------------------------------------------- -// Implementation of the TPC Kr cluster class -// -// Origin: Adam Matyja, INP PAN, adam.matyja@ifj.edu.pl -//----------------------------------------------------------------- - -/* -Instruction - how to use that: -There are two macros prepared. One is for preparing clusters from MC -samples: FindKrClusters.C. The output is kept in TPC.RecPoints.root. -The other macro is prepared for data analysis: FindKrClustersRaw.C. -The output is created for each processed file in root file named adc.root. -For each data subsample the same named file is created. So be careful -do not overwrite them. - -Additional selection criteria to select the GOLD cluster -Example: -// open file with clusters -TFile f("Krypton.root"); -TTree * tree = (TTree*)f.Get("Kr") -TCut cutR0("cutR0","fADCcluster/fSize<100"); // adjust it according v seetings - -TCut cutR1("cutR1","fADCcluster/fSize>7"); // cosmic tracks and noise removal -TCut cutR2("cutR2","fMax.fAdc/fADCcluster<0.2"); // digital noise removal -TCut cutR3("cutR3","fMax.fAdc/fADCcluster>0.01"); // noise removal -TCut cutS1("cutS1","fSize<200"); // adjust it according v seetings - cosmic tracks -TCut cutAll = cutR0+cutR1+cutR2+cutR3+cutS1; -This values are typical values to be applied in selectors - - -* -**** MC **** -* - -To run clusterizaton for MC type: -.x FindKrClusters.C - -If you don't want to use the standard selection criteria then you -have to do following: - -// load the standard setup -AliRunLoader* rl = AliRunLoader::Open("galice.root"); -AliTPCLoader *tpcl = (AliTPCLoader*)rl->GetLoader("TPCLoader"); -tpcl->LoadDigits(); -rl->LoadgAlice(); -gAlice=rl->GetAliRun(); -TDirectory *cwd = gDirectory; -AliTPCv4 *tpc = (AliTPCv4*)gAlice->GetDetector("TPC"); -Int_t ver = tpc->IsVersion(); -rl->CdGAFile(); -AliTPCParam *param=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); -AliTPCDigitsArray *digarr=new AliTPCDigitsArray; -digarr->Setup(param); -cwd->cd(); - -//loop over events -Int_t nevmax=rl->GetNumberOfEvents(); -for(Int_t nev=0;nevGetEvent(nev); - TTree* input_tree= tpcl->TreeD();//load tree with digits - digarr->ConnectTree(input_tree); - TTree *output_tree =tpcl->TreeR();//load output tree - - AliTPCclustererKr *clusters = new AliTPCclustererKr(); - clusters->SetParam(param); - clusters->SetInput(input_tree); - clusters->SetOutput(output_tree); - clusters->SetDigArr(digarr); - -//If you want to change the cluster finder parameters for MC there are -//several of them: - -//1. signal threshold (everything below the given number is treated as 0) - clusters->SetMinAdc(3); - -//2. number of neighbouring timebins to be considered - clusters->SetMinTimeBins(2); - -//3. distance of the cluster center to the center of a pad in pad-padrow plane -//(in cm). Remenber that this is still quantified by pad size. - clusters->SetMaxPadRangeCm(2.5); - -//4. distance of the cluster center to the center of a padrow in pad-padrow -//plane (in cm). Remenber that this is still quantified by pad size. - clusters->SetMaxRowRangeCm(3.5); - -//5. distance of the cluster center to the max time bin on a pad (in tackts) -//ie. fabs(centerT - time)<7 - clusters->SetMaxTimeRange(7); - -//6. cut reduce peak at 0. There are noises which appear mostly as two -//timebins on one pad. - clusters->SetValueToSize(3.5); - - - clusters->finderIO(); - tpcl->WriteRecPoints("OVERWRITE"); -} -delete rl;//cleans everything - -* -********* DATA ********* -* - -To run clusterizaton for DATA for file named raw_data.root type: -.x FindKrClustersRaw.C("raw_data.root") - -If you want to change some criteria do the following: - -// -// remove Altro warnings -// -AliLog::SetClassDebugLevel("AliRawReaderDate",-5); -AliLog::SetClassDebugLevel("AliTPCAltroMapping",-5); -AliLog::SetModuleDebugLevel("RAW",-5); - -// -// Get database with noises -// -// char *ocdbpath = gSystem->Getenv("OCDB_PATH"); -char *ocdbpath ="local:///afs/cern.ch/alice/tpctest/OCDB"; -if (ocdbpath==0){ -ocdbpath="alien://folder=/alice/data/2007/LHC07w/OCDB/"; -} -AliCDBManager * man = AliCDBManager::Instance(); -man->SetDefaultStorage(ocdbpath); -man->SetRun(0); -AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise(); -AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping(); - -//define tree -TFile *hfile=new TFile("adc.root","RECREATE","ADC file"); -// Create a ROOT Tree -TTree *mytree = new TTree("Kr","Krypton cluster tree"); - -//define infput file -const char *fileName="data.root"; -AliRawReader *reader = new AliRawReaderRoot(fileName); -//AliRawReader *reader = new AliRawReaderDate(fileName); -reader->Reset(); -AliAltroRawStreamFast* stream = new AliAltroRawStreamFast(reader); -stream->SelectRawData("TPC"); - -//one general output -AliTPCclustererKr *clusters = new AliTPCclustererKr(); -clusters->SetOutput(mytree); -clusters->SetRecoParam(0);//standard reco parameters -AliTPCParamSR *param=new AliTPCParamSR(); -clusters->SetParam(param);//TPC parameters(sectors, timebins, etc.) - -//set cluster finder parameters (from data): -//1. zero suppression parameter - clusters->SetZeroSup(param->GetZeroSup()); - -//2. first bin - clusters->SetFirstBin(60); - -//3. last bin - clusters->SetLastBin(950); - -//4. maximal noise - clusters->SetMaxNoiseAbs(2); - -//5. maximal amount of sigma of noise - clusters->SetMaxNoiseSigma(3); - -//The remaining parameters are the same paramters as for MC (see MC section -//points 1-6) - clusters->SetMinAdc(3); - clusters->SetMinTimeBins(2); - clusters->SetMaxPadRangeCm(2.5); - clusters->SetMaxRowRangeCm(3.5); - clusters->SetMaxTimeRange(7); - clusters->SetValueToSize(3.5); - -while (reader->NextEvent()) { - clusters->FinderIO(reader); -} - -hfile->Write(); -hfile->Close(); -delete stream; - - -*/ - -#include "AliTPCclustererKr.h" -#include "AliTPCclusterKr.h" -//#include -#include -#include "TObject.h" -#include "AliPadMax.h" -#include "AliSimDigits.h" -#include "AliTPCv4.h" -#include "AliTPCParam.h" -#include "AliTPCDigitsArray.h" -#include "AliTPCvtpr.h" -#include "AliTPCClustersRow.h" -#include "TTree.h" -#include "TH1F.h" -#include "TH2F.h" -#include "TTreeStream.h" - -#include "AliTPCTransform.h" - -//used in raw data finder -#include "AliTPCROC.h" -#include "AliTPCCalPad.h" -#include "AliTPCAltroMapping.h" -#include "AliTPCcalibDB.h" -#include "AliTPCRawStreamV3.h" -#include "AliTPCRecoParam.h" -#include "AliTPCReconstructor.h" -#include "AliRawReader.h" -#include "AliTPCCalROC.h" -#include "AliRawEventHeaderBase.h" - -using std::cerr; -using std::cout; -using std::endl; -using std::list; -ClassImp(AliTPCclustererKr) - - -AliTPCclustererKr::AliTPCclustererKr() - :TObject(), - fRawData(kFALSE), - fInput(0), - fOutput(0), - fParam(0), - fDigarr(0), - fRecoParam(0), - fZeroSup(2), - fFirstBin(60), - fLastBin(950), - fMaxNoiseAbs(2), - fMaxNoiseSigma(3), - fMinAdc(3), - fMinTimeBins(2), -// fMaxPadRange(4), -// fMaxRowRange(3), - fMaxTimeRange(7), - fValueToSize(3.5), - fMaxPadRangeCm(2.5), - fMaxRowRangeCm(3.5), - fIsolCut(3), - fDebugLevel(-1), - fHistoRow(0), - fHistoPad(0), - fHistoTime(0), - fHistoRowPad(0), - fTimeStamp(0), - fRun(0) -{ -// -// default constructor -// -} - -AliTPCclustererKr::AliTPCclustererKr(const AliTPCclustererKr ¶m) - :TObject(), - fRawData(kFALSE), - fInput(0), - fOutput(0), - fParam(0), - fDigarr(0), - fRecoParam(0), - fZeroSup(2), - fFirstBin(60), - fLastBin(950), - fMaxNoiseAbs(2), - fMaxNoiseSigma(3), - fMinAdc(3), - fMinTimeBins(2), -// fMaxPadRange(4), -// fMaxRowRange(3), - fMaxTimeRange(7), - fValueToSize(3.5), - fMaxPadRangeCm(2.5), - fMaxRowRangeCm(3.5), - fIsolCut(3), - fDebugLevel(-1), - fHistoRow(0), - fHistoPad(0), - fHistoTime(0), - fHistoRowPad(0), - fTimeStamp(0), - fRun(0) -{ -// -// copy constructor -// - fParam = param.fParam; - fRecoParam = param.fRecoParam; - fRawData = param.fRawData; - fInput = param.fInput ; - fOutput = param.fOutput; - fDigarr = param.fDigarr; - fZeroSup = param.fZeroSup ; - fFirstBin = param.fFirstBin ; - fLastBin = param.fLastBin ; - fMaxNoiseAbs = param.fMaxNoiseAbs ; - fMaxNoiseSigma = param.fMaxNoiseSigma ; - fMinAdc = param.fMinAdc; - fMinTimeBins = param.fMinTimeBins; -// fMaxPadRange = param.fMaxPadRange ; -// fMaxRowRange = param.fMaxRowRange ; - fMaxTimeRange = param.fMaxTimeRange; - fValueToSize = param.fValueToSize; - fMaxPadRangeCm = param.fMaxPadRangeCm; - fMaxRowRangeCm = param.fMaxRowRangeCm; - fIsolCut = param.fIsolCut; - fDebugLevel = param.fDebugLevel; - fHistoRow = param.fHistoRow ; - fHistoPad = param.fHistoPad ; - fHistoTime = param.fHistoTime; - fHistoRowPad = param.fHistoRowPad; - fTimeStamp = param.fTimeStamp; - fRun = param.fRun; - -} - -AliTPCclustererKr & AliTPCclustererKr::operator = (const AliTPCclustererKr & param) -{ - // - // assignment operator - // - if (this == ¶m) return (*this); - - fParam = param.fParam; - fRecoParam = param.fRecoParam; - fRawData = param.fRawData; - fInput = param.fInput ; - fOutput = param.fOutput; - fDigarr = param.fDigarr; - fZeroSup = param.fZeroSup ; - fFirstBin = param.fFirstBin ; - fLastBin = param.fLastBin ; - fMaxNoiseAbs = param.fMaxNoiseAbs ; - fMaxNoiseSigma = param.fMaxNoiseSigma ; - fMinAdc = param.fMinAdc; - fMinTimeBins = param.fMinTimeBins; -// fMaxPadRange = param.fMaxPadRange ; -// fMaxRowRange = param.fMaxRowRange ; - fMaxTimeRange = param.fMaxTimeRange; - fValueToSize = param.fValueToSize; - fMaxPadRangeCm = param.fMaxPadRangeCm; - fMaxRowRangeCm = param.fMaxRowRangeCm; - fIsolCut = param.fIsolCut; - fDebugLevel = param.fDebugLevel; - fHistoRow = param.fHistoRow ; - fHistoPad = param.fHistoPad ; - fHistoTime = param.fHistoTime; - fHistoRowPad = param.fHistoRowPad; - fTimeStamp = param.fTimeStamp; - fRun = param.fRun; - return (*this); -} - -AliTPCclustererKr::~AliTPCclustererKr() -{ - // - // destructor - // - delete fOutput; -} - -void AliTPCclustererKr::SetRecoParam(AliTPCRecoParam *recoParam) -{ - // - // set reconstruction parameters - // - if (recoParam) { - fRecoParam = recoParam; - }else{ - //set default parameters if not specified - fRecoParam = AliTPCReconstructor::GetRecoParam(); - if (!fRecoParam) fRecoParam = AliTPCRecoParam::GetLowFluxParam(); - } - return; -} - - -////____________________________________________________________________________ -//// I/O -void AliTPCclustererKr::SetInput(TTree * tree) -{ - // - // set input tree with digits - // - fInput = tree; - if (!fInput->GetBranch("Segment")){ - cerr<<"AliTPCclusterKr::FindClusterKr(): no proper input tree !\n"; - fInput=0; - return; - } -} - -void AliTPCclustererKr::SetOutput(TTree * /*tree*/) -{ - // - //dummy - // - fOutput = new TTreeSRedirector("Krypton.root"); -} - -////____________________________________________________________________________ -//// with new I/O -Int_t AliTPCclustererKr::FinderIO() -{ - // Krypton cluster finder for simulated events from MC - - if (!fInput) { - Error("Digits2Clusters", "input tree not initialised"); - return 10; - } - - if (!fOutput) { - Error("Digits2Clusters", "output tree not initialised"); - return 11; - } - - FindClusterKrIO(); - return 0; -} - - - -Int_t AliTPCclustererKr::FinderIO(AliRawReader* rawReader) -{ - // Krypton cluster finder for the TPC raw data - // this method is unsing AliAltroRawStreamV3 - // fParam must be defined before - if (!rawReader) return 1; - // - fRawData=kTRUE; //set flag to data - - if (!fOutput) { - Error("Digits2Clusters", "output tree not initialised"); - return 11; - } - - fParam->SetMaxTBin(fRecoParam->GetLastBin());//set number of timebins from reco -> param - // used later for memory allocation - - AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader(); - if (eventHeader){ - fTimeStamp = eventHeader->Get("Timestamp"); - fRun = rawReader->GetRunNumber(); - } - - - Bool_t isAltro=kFALSE; - - AliTPCROC * roc = AliTPCROC::Instance(); - AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise(); - AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping(); - // - AliTPCRawStreamV3 input(rawReader,(AliAltroMapping**)mapping); - - const Int_t kNIS = fParam->GetNInnerSector();//number of inner sectors - const Int_t kNOS = fParam->GetNOuterSector();//number of outer sectors - const Int_t kNS = kNIS + kNOS;//all sectors - - - //crate TPC view - AliTPCDigitsArray *digarr=new AliTPCDigitsArray(kFALSE);//data not sim - digarr->Setup(fParam);//as usually parameters - - for(Int_t iSec = 0; iSec < kNS; iSec++) { - AliTPCCalROC * noiseROC; - AliTPCCalROC noiseDummy(iSec); - if(noiseTPC==0x0){ - noiseROC = &noiseDummy;//noise=0 - }else{ - noiseROC = noiseTPC->GetCalROC(iSec); // noise per given sector - } - Int_t nRows = 0; //number of rows in sector - Int_t nDDLs = 0; //number of DDLs - Int_t indexDDL = 0; //DDL index - if (iSec < kNIS) { - nRows = fParam->GetNRowLow(); - nDDLs = 2; - indexDDL = iSec * 2; - }else { - nRows = fParam->GetNRowUp(); - nDDLs = 4; - indexDDL = (iSec-kNIS) * 4 + kNIS * 2; - } - - // - // Load the raw data for corresponding DDLs - // - rawReader->Reset(); - rawReader->Select("TPC",indexDDL,indexDDL+nDDLs-1); - - - while (input.NextDDL()){ - // Allocate memory for rows in sector (pads(depends on row) x timebins) - if (!digarr->GetRow(iSec,0)){ - for(Int_t iRow = 0; iRow < nRows; iRow++) { - digarr->CreateRow(iSec,iRow); - }//end loop over rows - } - //loop over pads - while ( input.NextChannel() ) { - Int_t iRow = input.GetRow(); - Int_t iPad = input.GetPad(); - //check row consistency - if (iRow < 0 ) continue; - if (iRow < 0 || iRow >= nRows){ - AliError(Form("Pad-row index (%d) outside the range (%d -> %d) !", - iRow, 0, nRows -1)); - continue; - } - - //check pad consistency - if (iPad < 0 || iPad >= (Int_t)(roc->GetNPads(iSec,iRow))) { - AliError(Form("Pad index (%d) outside the range (%d -> %d) !", - iPad, 0, roc->GetNPads(iSec,iRow) )); - continue; - } - - //loop over bunches - while ( input.NextBunch() ){ - Int_t startTbin = (Int_t)input.GetStartTimeBin(); - Int_t bunchlength = (Int_t)input.GetBunchLength(); - const UShort_t *sig = input.GetSignals(); - isAltro=kTRUE; - for (Int_t iTime = 0; iTimeFill(iRow); - fHistoPad->Fill(iPad); - fHistoTime->Fill(iTimeBin); - fHistoRowPad->Fill(iPad,iRow); - }else if(fDebugLevel>=0&&fDebugLevel<72){ - if(iSec==fDebugLevel){ - fHistoRow->Fill(iRow); - fHistoPad->Fill(iPad); - fHistoTime->Fill(iTimeBin); - fHistoRowPad->Fill(iPad,iRow); - } - }else if(fDebugLevel==73){ - if(iSec<36){ - fHistoRow->Fill(iRow); - fHistoPad->Fill(iPad); - fHistoTime->Fill(iTimeBin); - fHistoRowPad->Fill(iPad,iRow); - } - }else if(fDebugLevel==74){ - if(iSec>=36){ - fHistoRow->Fill(iRow); - fHistoPad->Fill(iPad); - fHistoTime->Fill(iTimeBin); - fHistoRowPad->Fill(iPad,iRow); - } - } - - //check time consistency - if ( iTimeBin < fRecoParam->GetFirstBin() || iTimeBin >= fRecoParam->GetLastBin()){ - //cout< %d) !", - iTimeBin, 0, fRecoParam->GetLastBin() -1)); - } - //signal - Float_t signal=(Float_t)sig[iTime]; - if (signal <= fZeroSup || - iTimeBin < fFirstBin || - iTimeBin > fLastBin - ) { - digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad); - continue; - } - if (!noiseROC) continue; - Double_t noiseOnPad = noiseROC->GetValue(iRow,iPad);//noise on given pad and row in sector - if (noiseOnPad > fMaxNoiseAbs){ - digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad); - continue; // consider noisy pad as dead - } - if(signal <= fMaxNoiseSigma * noiseOnPad){ - digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad); - continue; - } - digarr->GetRow(iSec,iRow)->SetDigitFast(TMath::Nint(signal),iTimeBin,iPad); - }// end loop signals in bunch - }// end loop bunches - } // end loop pads - }// end ddl loop - }// end sector loop - SetDigArr(digarr); - if(isAltro) FindClusterKrIO(); - delete digarr; - - return 0; -} - -void AliTPCclustererKr::CleanSector(Int_t sector){ - // - // clean isolated digits - // - const Int_t kNRows=fParam->GetNRow(sector);//number of rows in sector - for(Int_t iRow=0; iRowGetRow(sector,iRow);//real data - }else{ - digrow = (AliSimDigits*)fDigarr->LoadRow(sector,iRow);//MC - } - if(!digrow) continue; - digrow->ExpandBuffer(); //decrunch - const Int_t kNPads = digrow->GetNCols(); // number of pads - const Int_t kNTime = digrow->GetNRows(); // number of timebins - for(Int_t iPad=1;iPadGetDigitsColumn(iPad); - - for(Int_t iTimeBin=1;iTimeBinGetNSector();//number of sectors - for(Int_t iSec=0; iSec maximaInSector; - TObjArray *maximaInSector=new TObjArray();//to store AliPadMax* - - // - // looking for the maxima on the pad - // - - const Int_t kNRows=fParam->GetNRow(iSec);//number of rows in sector - for(Int_t iRow=0; iRowGetRow(iSec,iRow);//real data - }else{ - digrow = (AliSimDigits*)fDigarr->LoadRow(iSec,iRow);//MC - } - if(digrow){//if pointer exist - digrow->ExpandBuffer(); //decrunch - const Int_t kNPads = digrow->GetNCols(); // number of pads - const Int_t kNTime = digrow->GetNRows(); // number of timebins - for(Int_t iPad=0;iPadGetDigitsColumn(iPad); - for(Int_t iTimeBin=1;iTimeBinGetTransform() ; - - transform->Transform(x,i,0,1); - - AliPadMax *oneMaximum = new AliPadMax(AliTPCvtpr(valueMaximum, - timeBinMax, - iPad, - iRow, - x[0],//xCord, - x[1],//yCord, - x[2]/*timeBinMax*/), - increaseBegin, - iTimeBin-1, - sumAdc); - maximaInSector->AddLast(oneMaximum); - - timeBinMax=-1; - valueMaximum=-1; - increaseBegin=-1; - sumAdc=0; - ifIncreaseBegin=true; - ifMaximum=false; - } - continue; - } - - - - - - - if(ifIncreaseBegin){ - ifIncreaseBegin=false; - increaseBegin=iTimeBin; - } - - if(adc>valueMaximum){ - timeBinMax=iTimeBin; - valueMaximum=adc; - ifMaximum=true; - } - sumAdc+=adc; - if(iTimeBin==kNTime-1 && ifMaximum && kNTime-increaseBegin>fMinTimeBins){//on the edge - //at least 3 timebins - //insert maximum, default values and set flags - //Double_t xCord,yCord; - //GetXY(iSec,iRow,iPad,xCord,yCord); - Double_t x[]={iRow,iPad,iTimeBin}; - Int_t i[]={iSec}; - //AliTPCTransform trafo; - //trafo.Transform(x,i,0,1); - - AliTPCTransform *transform = AliTPCcalibDB::Instance()->GetTransform() ; - - transform->Transform(x,i,0,1); - - AliPadMax *oneMaximum = new AliPadMax(AliTPCvtpr(valueMaximum, - timeBinMax, - iPad, - iRow, - x[0],//xCord, - x[1],//yCord, - x[2]/*timeBinMax*/), - increaseBegin, - iTimeBin-1, - sumAdc); - maximaInSector->AddLast(oneMaximum); - - timeBinMax=-1; - valueMaximum=-1; - increaseBegin=-1; - sumAdc=0; - ifIncreaseBegin=true; - ifMaximum=false; - continue; - } - - }//end loop over timebins - }//end loop over pads -// }else{ -// cout<<"Pointer does not exist!!"<SetOwner(kTRUE); - maximaInSector->Delete(); - delete maximaInSector; - }//end sector for - cout<<"Number of clusters in event: "<GetEntriesFast(); - for(Int_t it1 = 0; it1 < entriesArr; ++it1 ) { - - AliPadMax *mp1=(AliPadMax *)maximaInSector->UncheckedAt(it1); - if (!mp1) continue; - AliTPCclusterKr clusterKr; - - Int_t nUsedPads=1; - Int_t clusterValue=0; - clusterValue+=(mp1)->GetSum(); - list nUsedRows; - nUsedRows.push_back((mp1)->GetRow()); - - maxDig =(mp1)->GetAdc() ; - maxSumAdc =(mp1)->GetSum() ; - maxTimeBin =(mp1)->GetTime(); - maxPad =(mp1)->GetPad() ; - maxRow =(mp1)->GetRow() ; - maxX =(mp1)->GetX(); - maxY =(mp1)->GetY(); - maxT =(mp1)->GetT(); - - AliSimDigits *digrowTmp; - if(fRawData){ - digrowTmp = (AliSimDigits*)fDigarr->GetRow(iSec,(mp1)->GetRow()); - }else{ - digrowTmp = (AliSimDigits*)fDigarr->LoadRow(iSec,(mp1)->GetRow()); - } - - digrowTmp->ExpandBuffer(); //decrunch - - for(Int_t itb=(mp1)->GetBegin(); itb<((mp1)->GetEnd())+1; itb++){ - Int_t adcTmp = digrowTmp->GetDigitUnchecked(itb,(mp1)->GetPad()); - AliTPCvtpr *vtpr=new AliTPCvtpr(adcTmp,itb,(mp1)->GetPad(),(mp1)->GetRow(),(mp1)->GetX(),(mp1)->GetY(),(mp1)->GetT()); - clusterKr.AddDigitToCluster(vtpr); - } - clusterKr.SetCenter();//set centr of the cluster - - for(Int_t it2 = it1+1; it2 < entriesArr; ++it2 ) { - AliPadMax *mp2=(AliPadMax *)maximaInSector->UncheckedAt(it2); - if (!mp2) continue; - if (TMath::Abs(clusterKr.GetCenterX() - (mp2)->GetX()) > fMaxPadRangeCm) continue; - if (TMath::Abs(clusterKr.GetCenterY() - (mp2)->GetY()) > fMaxRowRangeCm) continue; - if (TMath::Abs(clusterKr.GetCenterT() - (mp2)->GetT()) > fMaxTimeRange) continue; - - { - clusterValue+=(mp2)->GetSum(); - - nUsedPads++; - nUsedRows.push_back((mp2)->GetRow()); - - AliSimDigits *digrowTmp1; - if(fRawData){ - digrowTmp1 = (AliSimDigits*)fDigarr->GetRow(iSec,(mp2)->GetRow()); - }else{ - digrowTmp1 = (AliSimDigits*)fDigarr->LoadRow(iSec,(mp2)->GetRow()); - } - digrowTmp1->ExpandBuffer(); //decrunch - - for(Int_t itb=(mp2)->GetBegin(); itb<(mp2)->GetEnd()+1; itb++){ - Int_t adcTmp = digrowTmp1->GetDigitUnchecked(itb,(mp2)->GetPad()); - AliTPCvtpr *vtpr=new AliTPCvtpr(adcTmp,itb,(mp2)->GetPad(),(mp2)->GetRow(),(mp2)->GetX(),(mp2)->GetY(),(mp2)->GetT()); - clusterKr.AddDigitToCluster(vtpr); - } - - clusterKr.SetCenter();//set center of the cluster - - //which one is bigger - if( (mp2)->GetAdc() > maxDig ){ - maxDig =(mp2)->GetAdc() ; - maxSumAdc =(mp2)->GetSum() ; - maxTimeBin =(mp2)->GetTime(); - maxPad =(mp2)->GetPad() ; - maxRow =(mp2)->GetRow() ; - maxX =(mp2)->GetX() ; - maxY =(mp2)->GetY() ; - maxT =(mp2)->GetT() ; - } else if ( (mp2)->GetAdc() == maxDig ){ - if( (mp2)->GetSum() > maxSumAdc){ - maxDig =(mp2)->GetAdc() ; - maxSumAdc =(mp2)->GetSum() ; - maxTimeBin =(mp2)->GetTime(); - maxPad =(mp2)->GetPad() ; - maxRow =(mp2)->GetRow() ; - maxX =(mp2)->GetX() ; - maxY =(mp2)->GetY() ; - maxT =(mp2)->GetT() ; - } - } - delete maximaInSector->RemoveAt(it2); - } - }//inside loop - delete maximaInSector->RemoveAt(it1); - clusterKr.SetSize(); - //through out clusters on the edge and noise - //if(clusterValue/clusterKr.fCluster.size()GetPadRowRadii(sec,row);//radius of row in sector in cm - - Int_t padmax = fParam->GetNPads(sec,row);//number of pads in a given row - Float_t padXSize; - if(secGetNInnerSector())padXSize=0.4; - else padXSize=0.6; - Double_t xLocal=(pad+0.5-padmax/2.)*padXSize;//x-value of the center of pad - - Float_t sin,cos; - fParam->AdjustCosSin((Int_t)sec,cos,sin);//return sinus and cosinus of the sector - - Double_t xGlob1 = xLocal * cos + yLocal * sin; - Double_t yGlob1 = -xLocal * sin + yLocal * cos; - - - Double_t rot=0; - rot=TMath::Pi()/2.; - - xGlob = xGlob1 * TMath::Cos(rot) + yGlob1 * TMath::Sin(rot); - yGlob = -xGlob1 * TMath::Sin(rot) + yGlob1 * TMath::Cos(rot); - - yGlob=-1*yGlob; - if(sec<18||(sec>=36&&sec<54)) xGlob =-1*xGlob; - - - return; -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id: AliTPCclustererKr.cxx,v 1.7 2008/02/06 17:24:53 matyja Exp $ */ + +//----------------------------------------------------------------- +// Implementation of the TPC Kr cluster class +// +// Origin: Adam Matyja, INP PAN, adam.matyja@ifj.edu.pl +//----------------------------------------------------------------- + +/* +Instruction - how to use that: +There are two macros prepared. One is for preparing clusters from MC +samples: FindKrClusters.C. The output is kept in TPC.RecPoints.root. +The other macro is prepared for data analysis: FindKrClustersRaw.C. +The output is created for each processed file in root file named adc.root. +For each data subsample the same named file is created. So be careful +do not overwrite them. + +Additional selection criteria to select the GOLD cluster +Example: +// open file with clusters +TFile f("Krypton.root"); +TTree * tree = (TTree*)f.Get("Kr") +TCut cutR0("cutR0","fADCcluster/fSize<100"); // adjust it according v seetings - +TCut cutR1("cutR1","fADCcluster/fSize>7"); // cosmic tracks and noise removal +TCut cutR2("cutR2","fMax.fAdc/fADCcluster<0.2"); // digital noise removal +TCut cutR3("cutR3","fMax.fAdc/fADCcluster>0.01"); // noise removal +TCut cutS1("cutS1","fSize<200"); // adjust it according v seetings - cosmic tracks +TCut cutAll = cutR0+cutR1+cutR2+cutR3+cutS1; +This values are typical values to be applied in selectors + + +* +**** MC **** +* + +To run clusterizaton for MC type: +.x FindKrClusters.C + +If you don't want to use the standard selection criteria then you +have to do following: + +// load the standard setup +AliRunLoader* rl = AliRunLoader::Open("galice.root"); +AliTPCLoader *tpcl = (AliTPCLoader*)rl->GetLoader("TPCLoader"); +tpcl->LoadDigits(); +rl->LoadgAlice(); +gAlice=rl->GetAliRun(); +TDirectory *cwd = gDirectory; +AliTPCv4 *tpc = (AliTPCv4*)gAlice->GetDetector("TPC"); +Int_t ver = tpc->IsVersion(); +rl->CdGAFile(); +AliTPCParam *param=(AliTPCParamSR *)gDirectory->Get("75x40_100x60_150x60"); +AliTPCDigitsArray *digarr=new AliTPCDigitsArray; +digarr->Setup(param); +cwd->cd(); + +//loop over events +Int_t nevmax=rl->GetNumberOfEvents(); +for(Int_t nev=0;nevGetEvent(nev); + TTree* input_tree= tpcl->TreeD();//load tree with digits + digarr->ConnectTree(input_tree); + TTree *output_tree =tpcl->TreeR();//load output tree + + AliTPCclustererKr *clusters = new AliTPCclustererKr(); + clusters->SetParam(param); + clusters->SetInput(input_tree); + clusters->SetOutput(output_tree); + clusters->SetDigArr(digarr); + +//If you want to change the cluster finder parameters for MC there are +//several of them: + +//1. signal threshold (everything below the given number is treated as 0) + clusters->SetMinAdc(3); + +//2. number of neighbouring timebins to be considered + clusters->SetMinTimeBins(2); + +//3. distance of the cluster center to the center of a pad in pad-padrow plane +//(in cm). Remenber that this is still quantified by pad size. + clusters->SetMaxPadRangeCm(2.5); + +//4. distance of the cluster center to the center of a padrow in pad-padrow +//plane (in cm). Remenber that this is still quantified by pad size. + clusters->SetMaxRowRangeCm(3.5); + +//5. distance of the cluster center to the max time bin on a pad (in tackts) +//ie. fabs(centerT - time)<7 + clusters->SetMaxTimeRange(7); + +//6. cut reduce peak at 0. There are noises which appear mostly as two +//timebins on one pad. + clusters->SetValueToSize(3.5); + + + clusters->finderIO(); + tpcl->WriteRecPoints("OVERWRITE"); +} +delete rl;//cleans everything + +* +********* DATA ********* +* + +To run clusterizaton for DATA for file named raw_data.root type: +.x FindKrClustersRaw.C("raw_data.root") + +If you want to change some criteria do the following: + +// +// remove Altro warnings +// +AliLog::SetClassDebugLevel("AliRawReaderDate",-5); +AliLog::SetClassDebugLevel("AliTPCAltroMapping",-5); +AliLog::SetModuleDebugLevel("RAW",-5); + +// +// Get database with noises +// +// char *ocdbpath = gSystem->Getenv("OCDB_PATH"); +char *ocdbpath ="local:///afs/cern.ch/alice/tpctest/OCDB"; +if (ocdbpath==0){ +ocdbpath="alien://folder=/alice/data/2007/LHC07w/OCDB/"; +} +AliCDBManager * man = AliCDBManager::Instance(); +man->SetDefaultStorage(ocdbpath); +man->SetRun(0); +AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise(); +AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping(); + +//define tree +TFile *hfile=new TFile("adc.root","RECREATE","ADC file"); +// Create a ROOT Tree +TTree *mytree = new TTree("Kr","Krypton cluster tree"); + +//define infput file +const char *fileName="data.root"; +AliRawReader *reader = new AliRawReaderRoot(fileName); +//AliRawReader *reader = new AliRawReaderDate(fileName); +reader->Reset(); +AliAltroRawStreamFast* stream = new AliAltroRawStreamFast(reader); +stream->SelectRawData("TPC"); + +//one general output +AliTPCclustererKr *clusters = new AliTPCclustererKr(); +clusters->SetOutput(mytree); +clusters->SetRecoParam(0);//standard reco parameters +AliTPCParamSR *param=new AliTPCParamSR(); +clusters->SetParam(param);//TPC parameters(sectors, timebins, etc.) + +//set cluster finder parameters (from data): +//1. zero suppression parameter + clusters->SetZeroSup(param->GetZeroSup()); + +//2. first bin + clusters->SetFirstBin(60); + +//3. last bin + clusters->SetLastBin(950); + +//4. maximal noise + clusters->SetMaxNoiseAbs(2); + +//5. maximal amount of sigma of noise + clusters->SetMaxNoiseSigma(3); + +//The remaining parameters are the same paramters as for MC (see MC section +//points 1-6) + clusters->SetMinAdc(3); + clusters->SetMinTimeBins(2); + clusters->SetMaxPadRangeCm(2.5); + clusters->SetMaxRowRangeCm(3.5); + clusters->SetMaxTimeRange(7); + clusters->SetValueToSize(3.5); + +while (reader->NextEvent()) { + clusters->FinderIO(reader); +} + +hfile->Write(); +hfile->Close(); +delete stream; + + +*/ + +#include "AliTPCclustererKr.h" +#include "AliTPCclusterKr.h" +//#include +#include +#include "TObject.h" +#include "AliPadMax.h" +#include "AliSimDigits.h" +#include "AliTPCv4.h" +#include "AliTPCParam.h" +#include "AliTPCDigitsArray.h" +#include "AliTPCvtpr.h" +#include "AliTPCClustersRow.h" +#include "TTree.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TTreeStream.h" + +#include "AliTPCTransform.h" + +//used in raw data finder +#include "AliTPCROC.h" +#include "AliTPCCalPad.h" +#include "AliTPCAltroMapping.h" +#include "AliTPCcalibDB.h" +#include "AliTPCRawStreamV3.h" +#include "AliTPCRecoParam.h" +#include "AliTPCReconstructor.h" +#include "AliRawReader.h" +#include "AliTPCCalROC.h" +#include "AliRawEventHeaderBase.h" + +using std::cerr; +using std::cout; +using std::endl; +using std::list; +ClassImp(AliTPCclustererKr) + + +AliTPCclustererKr::AliTPCclustererKr() + :TObject(), + fRawData(kFALSE), + fInput(0), + fOutput(0), + fParam(0), + fDigarr(0), + fRecoParam(0), + fZeroSup(2), + fFirstBin(60), + fLastBin(950), + fMaxNoiseAbs(2), + fMaxNoiseSigma(3), + fMinAdc(3), + fMinTimeBins(2), +// fMaxPadRange(4), +// fMaxRowRange(3), + fMaxTimeRange(7), + fValueToSize(3.5), + fMaxPadRangeCm(2.5), + fMaxRowRangeCm(3.5), + fIsolCut(3), + fDebugLevel(-1), + fHistoRow(0), + fHistoPad(0), + fHistoTime(0), + fHistoRowPad(0), + fTimeStamp(0), + fRun(0) +{ +// +// default constructor +// +} + +AliTPCclustererKr::AliTPCclustererKr(const AliTPCclustererKr ¶m) + :TObject(), + fRawData(kFALSE), + fInput(0), + fOutput(0), + fParam(0), + fDigarr(0), + fRecoParam(0), + fZeroSup(2), + fFirstBin(60), + fLastBin(950), + fMaxNoiseAbs(2), + fMaxNoiseSigma(3), + fMinAdc(3), + fMinTimeBins(2), +// fMaxPadRange(4), +// fMaxRowRange(3), + fMaxTimeRange(7), + fValueToSize(3.5), + fMaxPadRangeCm(2.5), + fMaxRowRangeCm(3.5), + fIsolCut(3), + fDebugLevel(-1), + fHistoRow(0), + fHistoPad(0), + fHistoTime(0), + fHistoRowPad(0), + fTimeStamp(0), + fRun(0) +{ +// +// copy constructor +// + fParam = param.fParam; + fRecoParam = param.fRecoParam; + fRawData = param.fRawData; + fInput = param.fInput ; + fOutput = param.fOutput; + fDigarr = param.fDigarr; + fZeroSup = param.fZeroSup ; + fFirstBin = param.fFirstBin ; + fLastBin = param.fLastBin ; + fMaxNoiseAbs = param.fMaxNoiseAbs ; + fMaxNoiseSigma = param.fMaxNoiseSigma ; + fMinAdc = param.fMinAdc; + fMinTimeBins = param.fMinTimeBins; +// fMaxPadRange = param.fMaxPadRange ; +// fMaxRowRange = param.fMaxRowRange ; + fMaxTimeRange = param.fMaxTimeRange; + fValueToSize = param.fValueToSize; + fMaxPadRangeCm = param.fMaxPadRangeCm; + fMaxRowRangeCm = param.fMaxRowRangeCm; + fIsolCut = param.fIsolCut; + fDebugLevel = param.fDebugLevel; + fHistoRow = param.fHistoRow ; + fHistoPad = param.fHistoPad ; + fHistoTime = param.fHistoTime; + fHistoRowPad = param.fHistoRowPad; + fTimeStamp = param.fTimeStamp; + fRun = param.fRun; + +} + +AliTPCclustererKr & AliTPCclustererKr::operator = (const AliTPCclustererKr & param) +{ + // + // assignment operator + // + if (this == ¶m) return (*this); + + fParam = param.fParam; + fRecoParam = param.fRecoParam; + fRawData = param.fRawData; + fInput = param.fInput ; + fOutput = param.fOutput; + fDigarr = param.fDigarr; + fZeroSup = param.fZeroSup ; + fFirstBin = param.fFirstBin ; + fLastBin = param.fLastBin ; + fMaxNoiseAbs = param.fMaxNoiseAbs ; + fMaxNoiseSigma = param.fMaxNoiseSigma ; + fMinAdc = param.fMinAdc; + fMinTimeBins = param.fMinTimeBins; +// fMaxPadRange = param.fMaxPadRange ; +// fMaxRowRange = param.fMaxRowRange ; + fMaxTimeRange = param.fMaxTimeRange; + fValueToSize = param.fValueToSize; + fMaxPadRangeCm = param.fMaxPadRangeCm; + fMaxRowRangeCm = param.fMaxRowRangeCm; + fIsolCut = param.fIsolCut; + fDebugLevel = param.fDebugLevel; + fHistoRow = param.fHistoRow ; + fHistoPad = param.fHistoPad ; + fHistoTime = param.fHistoTime; + fHistoRowPad = param.fHistoRowPad; + fTimeStamp = param.fTimeStamp; + fRun = param.fRun; + return (*this); +} + +AliTPCclustererKr::~AliTPCclustererKr() +{ + // + // destructor + // + delete fOutput; +} + +void AliTPCclustererKr::SetRecoParam(AliTPCRecoParam *recoParam) +{ + // + // set reconstruction parameters + // + if (recoParam) { + fRecoParam = recoParam; + }else{ + //set default parameters if not specified + fRecoParam = AliTPCReconstructor::GetRecoParam(); + if (!fRecoParam) fRecoParam = AliTPCRecoParam::GetLowFluxParam(); + } + return; +} + + +////____________________________________________________________________________ +//// I/O +void AliTPCclustererKr::SetInput(TTree * tree) +{ + // + // set input tree with digits + // + fInput = tree; + if (!fInput->GetBranch("Segment")){ + cerr<<"AliTPCclusterKr::FindClusterKr(): no proper input tree !\n"; + fInput=0; + return; + } +} + +void AliTPCclustererKr::SetOutput(TTree * /*tree*/) +{ + // + //dummy + // + fOutput = new TTreeSRedirector("Krypton.root"); +} + +////____________________________________________________________________________ +//// with new I/O +Int_t AliTPCclustererKr::FinderIO() +{ + // Krypton cluster finder for simulated events from MC + + if (!fInput) { + Error("Digits2Clusters", "input tree not initialised"); + return 10; + } + + if (!fOutput) { + Error("Digits2Clusters", "output tree not initialised"); + return 11; + } + + FindClusterKrIO(); + return 0; +} + + + +Int_t AliTPCclustererKr::FinderIO(AliRawReader* rawReader) +{ + // Krypton cluster finder for the TPC raw data + // this method is unsing AliAltroRawStreamV3 + // fParam must be defined before + if (!rawReader) return 1; + // + fRawData=kTRUE; //set flag to data + + if (!fOutput) { + Error("Digits2Clusters", "output tree not initialised"); + return 11; + } + + fParam->SetMaxTBin(fRecoParam->GetLastBin());//set number of timebins from reco -> param + // used later for memory allocation + + AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader(); + if (eventHeader){ + fTimeStamp = eventHeader->Get("Timestamp"); + fRun = rawReader->GetRunNumber(); + } + + + Bool_t isAltro=kFALSE; + + AliTPCROC * roc = AliTPCROC::Instance(); + AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise(); + AliTPCAltroMapping** mapping =AliTPCcalibDB::Instance()->GetMapping(); + // + AliTPCRawStreamV3 input(rawReader,(AliAltroMapping**)mapping); + + const Int_t kNIS = fParam->GetNInnerSector();//number of inner sectors + const Int_t kNOS = fParam->GetNOuterSector();//number of outer sectors + const Int_t kNS = kNIS + kNOS;//all sectors + + + //crate TPC view + AliTPCDigitsArray *digarr=new AliTPCDigitsArray(kFALSE);//data not sim + digarr->Setup(fParam);//as usually parameters + + for(Int_t iSec = 0; iSec < kNS; iSec++) { + AliTPCCalROC * noiseROC; + AliTPCCalROC noiseDummy(iSec); + if(noiseTPC==0x0){ + noiseROC = &noiseDummy;//noise=0 + }else{ + noiseROC = noiseTPC->GetCalROC(iSec); // noise per given sector + } + Int_t nRows = 0; //number of rows in sector + Int_t nDDLs = 0; //number of DDLs + Int_t indexDDL = 0; //DDL index + if (iSec < kNIS) { + nRows = fParam->GetNRowLow(); + nDDLs = 2; + indexDDL = iSec * 2; + }else { + nRows = fParam->GetNRowUp(); + nDDLs = 4; + indexDDL = (iSec-kNIS) * 4 + kNIS * 2; + } + + // + // Load the raw data for corresponding DDLs + // + rawReader->Reset(); + rawReader->Select("TPC",indexDDL,indexDDL+nDDLs-1); + + + while (input.NextDDL()){ + // Allocate memory for rows in sector (pads(depends on row) x timebins) + if (!digarr->GetRow(iSec,0)){ + for(Int_t iRow = 0; iRow < nRows; iRow++) { + digarr->CreateRow(iSec,iRow); + }//end loop over rows + } + //loop over pads + while ( input.NextChannel() ) { + Int_t iRow = input.GetRow(); + Int_t iPad = input.GetPad(); + //check row consistency + if (iRow < 0 ) continue; + if (iRow < 0 || iRow >= nRows){ + AliError(Form("Pad-row index (%d) outside the range (%d -> %d) !", + iRow, 0, nRows -1)); + continue; + } + + //check pad consistency + if (iPad < 0 || iPad >= (Int_t)(roc->GetNPads(iSec,iRow))) { + AliError(Form("Pad index (%d) outside the range (%d -> %d) !", + iPad, 0, roc->GetNPads(iSec,iRow) )); + continue; + } + + //loop over bunches + while ( input.NextBunch() ){ + Int_t startTbin = (Int_t)input.GetStartTimeBin(); + Int_t bunchlength = (Int_t)input.GetBunchLength(); + const UShort_t *sig = input.GetSignals(); + isAltro=kTRUE; + for (Int_t iTime = 0; iTimeFill(iRow); + fHistoPad->Fill(iPad); + fHistoTime->Fill(iTimeBin); + fHistoRowPad->Fill(iPad,iRow); + }else if(fDebugLevel>=0&&fDebugLevel<72){ + if(iSec==fDebugLevel){ + fHistoRow->Fill(iRow); + fHistoPad->Fill(iPad); + fHistoTime->Fill(iTimeBin); + fHistoRowPad->Fill(iPad,iRow); + } + }else if(fDebugLevel==73){ + if(iSec<36){ + fHistoRow->Fill(iRow); + fHistoPad->Fill(iPad); + fHistoTime->Fill(iTimeBin); + fHistoRowPad->Fill(iPad,iRow); + } + }else if(fDebugLevel==74){ + if(iSec>=36){ + fHistoRow->Fill(iRow); + fHistoPad->Fill(iPad); + fHistoTime->Fill(iTimeBin); + fHistoRowPad->Fill(iPad,iRow); + } + } + + //check time consistency + if ( iTimeBin < fRecoParam->GetFirstBin() || iTimeBin >= fRecoParam->GetLastBin()){ + //cout< %d) !", + iTimeBin, 0, fRecoParam->GetLastBin() -1)); + } + //signal + Float_t signal=(Float_t)sig[iTime]; + if (signal <= fZeroSup || + iTimeBin < fFirstBin || + iTimeBin > fLastBin + ) { + digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad); + continue; + } + if (!noiseROC) continue; + Double_t noiseOnPad = noiseROC->GetValue(iRow,iPad);//noise on given pad and row in sector + if (noiseOnPad > fMaxNoiseAbs){ + digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad); + continue; // consider noisy pad as dead + } + if(signal <= fMaxNoiseSigma * noiseOnPad){ + digarr->GetRow(iSec,iRow)->SetDigitFast(0,iTimeBin,iPad); + continue; + } + digarr->GetRow(iSec,iRow)->SetDigitFast(TMath::Nint(signal),iTimeBin,iPad); + }// end loop signals in bunch + }// end loop bunches + } // end loop pads + }// end ddl loop + }// end sector loop + SetDigArr(digarr); + if(isAltro) FindClusterKrIO(); + delete digarr; + + return 0; +} + +void AliTPCclustererKr::CleanSector(Int_t sector){ + // + // clean isolated digits + // + const Int_t kNRows=fParam->GetNRow(sector);//number of rows in sector + for(Int_t iRow=0; iRowGetRow(sector,iRow);//real data + }else{ + digrow = (AliSimDigits*)fDigarr->LoadRow(sector,iRow);//MC + } + if(!digrow) continue; + digrow->ExpandBuffer(); //decrunch + const Int_t kNPads = digrow->GetNCols(); // number of pads + const Int_t kNTime = digrow->GetNRows(); // number of timebins + for(Int_t iPad=1;iPadGetDigitsColumn(iPad); + + for(Int_t iTimeBin=1;iTimeBinGetNSector();//number of sectors + for(Int_t iSec=0; iSec maximaInSector; + TObjArray *maximaInSector=new TObjArray();//to store AliPadMax* + + // + // looking for the maxima on the pad + // + + const Int_t kNRows=fParam->GetNRow(iSec);//number of rows in sector + for(Int_t iRow=0; iRowGetRow(iSec,iRow);//real data + }else{ + digrow = (AliSimDigits*)fDigarr->LoadRow(iSec,iRow);//MC + } + if(digrow){//if pointer exist + digrow->ExpandBuffer(); //decrunch + const Int_t kNPads = digrow->GetNCols(); // number of pads + const Int_t kNTime = digrow->GetNRows(); // number of timebins + for(Int_t iPad=0;iPadGetDigitsColumn(iPad); + for(Int_t iTimeBin=1;iTimeBinGetTransform() ; + + transform->Transform(x,i,0,1); + + AliPadMax *oneMaximum = new AliPadMax(AliTPCvtpr(valueMaximum, + timeBinMax, + iPad, + iRow, + x[0],//xCord, + x[1],//yCord, + x[2]/*timeBinMax*/), + increaseBegin, + iTimeBin-1, + sumAdc); + maximaInSector->AddLast(oneMaximum); + + timeBinMax=-1; + valueMaximum=-1; + increaseBegin=-1; + sumAdc=0; + ifIncreaseBegin=true; + ifMaximum=false; + } + continue; + } + + + + + + + if(ifIncreaseBegin){ + ifIncreaseBegin=false; + increaseBegin=iTimeBin; + } + + if(adc>valueMaximum){ + timeBinMax=iTimeBin; + valueMaximum=adc; + ifMaximum=true; + } + sumAdc+=adc; + if(iTimeBin==kNTime-1 && ifMaximum && kNTime-increaseBegin>fMinTimeBins){//on the edge + //at least 3 timebins + //insert maximum, default values and set flags + //Double_t xCord,yCord; + //GetXY(iSec,iRow,iPad,xCord,yCord); + Double_t x[]={iRow,iPad,iTimeBin}; + Int_t i[]={iSec}; + //AliTPCTransform trafo; + //trafo.Transform(x,i,0,1); + + AliTPCTransform *transform = AliTPCcalibDB::Instance()->GetTransform() ; + + transform->Transform(x,i,0,1); + + AliPadMax *oneMaximum = new AliPadMax(AliTPCvtpr(valueMaximum, + timeBinMax, + iPad, + iRow, + x[0],//xCord, + x[1],//yCord, + x[2]/*timeBinMax*/), + increaseBegin, + iTimeBin-1, + sumAdc); + maximaInSector->AddLast(oneMaximum); + + timeBinMax=-1; + valueMaximum=-1; + increaseBegin=-1; + sumAdc=0; + ifIncreaseBegin=true; + ifMaximum=false; + continue; + } + + }//end loop over timebins + }//end loop over pads +// }else{ +// cout<<"Pointer does not exist!!"<SetOwner(kTRUE); + maximaInSector->Delete(); + delete maximaInSector; + }//end sector for + cout<<"Number of clusters in event: "<GetEntriesFast(); + for(Int_t it1 = 0; it1 < entriesArr; ++it1 ) { + + AliPadMax *mp1=(AliPadMax *)maximaInSector->UncheckedAt(it1); + if (!mp1) continue; + AliTPCclusterKr clusterKr; + + Int_t nUsedPads=1; + Int_t clusterValue=0; + clusterValue+=(mp1)->GetSum(); + list nUsedRows; + nUsedRows.push_back((mp1)->GetRow()); + + maxDig =(mp1)->GetAdc() ; + maxSumAdc =(mp1)->GetSum() ; + maxTimeBin =(mp1)->GetTime(); + maxPad =(mp1)->GetPad() ; + maxRow =(mp1)->GetRow() ; + maxX =(mp1)->GetX(); + maxY =(mp1)->GetY(); + maxT =(mp1)->GetT(); + + AliSimDigits *digrowTmp; + if(fRawData){ + digrowTmp = (AliSimDigits*)fDigarr->GetRow(iSec,(mp1)->GetRow()); + }else{ + digrowTmp = (AliSimDigits*)fDigarr->LoadRow(iSec,(mp1)->GetRow()); + } + + digrowTmp->ExpandBuffer(); //decrunch + + for(Int_t itb=(mp1)->GetBegin(); itb<((mp1)->GetEnd())+1; itb++){ + Int_t adcTmp = digrowTmp->GetDigitUnchecked(itb,(mp1)->GetPad()); + AliTPCvtpr *vtpr=new AliTPCvtpr(adcTmp,itb,(mp1)->GetPad(),(mp1)->GetRow(),(mp1)->GetX(),(mp1)->GetY(),(mp1)->GetT()); + clusterKr.AddDigitToCluster(vtpr); + } + clusterKr.SetCenter();//set centr of the cluster + + for(Int_t it2 = it1+1; it2 < entriesArr; ++it2 ) { + AliPadMax *mp2=(AliPadMax *)maximaInSector->UncheckedAt(it2); + if (!mp2) continue; + if (TMath::Abs(clusterKr.GetCenterX() - (mp2)->GetX()) > fMaxPadRangeCm) continue; + if (TMath::Abs(clusterKr.GetCenterY() - (mp2)->GetY()) > fMaxRowRangeCm) continue; + if (TMath::Abs(clusterKr.GetCenterT() - (mp2)->GetT()) > fMaxTimeRange) continue; + + { + clusterValue+=(mp2)->GetSum(); + + nUsedPads++; + nUsedRows.push_back((mp2)->GetRow()); + + AliSimDigits *digrowTmp1; + if(fRawData){ + digrowTmp1 = (AliSimDigits*)fDigarr->GetRow(iSec,(mp2)->GetRow()); + }else{ + digrowTmp1 = (AliSimDigits*)fDigarr->LoadRow(iSec,(mp2)->GetRow()); + } + digrowTmp1->ExpandBuffer(); //decrunch + + for(Int_t itb=(mp2)->GetBegin(); itb<(mp2)->GetEnd()+1; itb++){ + Int_t adcTmp = digrowTmp1->GetDigitUnchecked(itb,(mp2)->GetPad()); + AliTPCvtpr *vtpr=new AliTPCvtpr(adcTmp,itb,(mp2)->GetPad(),(mp2)->GetRow(),(mp2)->GetX(),(mp2)->GetY(),(mp2)->GetT()); + clusterKr.AddDigitToCluster(vtpr); + } + + clusterKr.SetCenter();//set center of the cluster + + //which one is bigger + if( (mp2)->GetAdc() > maxDig ){ + maxDig =(mp2)->GetAdc() ; + maxSumAdc =(mp2)->GetSum() ; + maxTimeBin =(mp2)->GetTime(); + maxPad =(mp2)->GetPad() ; + maxRow =(mp2)->GetRow() ; + maxX =(mp2)->GetX() ; + maxY =(mp2)->GetY() ; + maxT =(mp2)->GetT() ; + } else if ( (mp2)->GetAdc() == maxDig ){ + if( (mp2)->GetSum() > maxSumAdc){ + maxDig =(mp2)->GetAdc() ; + maxSumAdc =(mp2)->GetSum() ; + maxTimeBin =(mp2)->GetTime(); + maxPad =(mp2)->GetPad() ; + maxRow =(mp2)->GetRow() ; + maxX =(mp2)->GetX() ; + maxY =(mp2)->GetY() ; + maxT =(mp2)->GetT() ; + } + } + delete maximaInSector->RemoveAt(it2); + } + }//inside loop + delete maximaInSector->RemoveAt(it1); + clusterKr.SetSize(); + //through out clusters on the edge and noise + //if(clusterValue/clusterKr.fCluster.size()GetPadRowRadii(sec,row);//radius of row in sector in cm + + Int_t padmax = fParam->GetNPads(sec,row);//number of pads in a given row + Float_t padXSize; + if(secGetNInnerSector())padXSize=0.4; + else padXSize=0.6; + Double_t xLocal=(pad+0.5-padmax/2.)*padXSize;//x-value of the center of pad + + Float_t sin,cos; + fParam->AdjustCosSin((Int_t)sec,cos,sin);//return sinus and cosinus of the sector + + Double_t xGlob1 = xLocal * cos + yLocal * sin; + Double_t yGlob1 = -xLocal * sin + yLocal * cos; + + + Double_t rot=0; + rot=TMath::Pi()/2.; + + xGlob = xGlob1 * TMath::Cos(rot) + yGlob1 * TMath::Sin(rot); + yGlob = -xGlob1 * TMath::Sin(rot) + yGlob1 * TMath::Cos(rot); + + yGlob=-1*yGlob; + if(sec<18||(sec>=36&&sec<54)) xGlob =-1*xGlob; + + + return; +} diff --git a/TPC/Rec/AliTPCclustererKr.h b/TPC/Rec/AliTPCclustererKr.h index 491580142bb..49cd59c2d01 100644 --- a/TPC/Rec/AliTPCclustererKr.h +++ b/TPC/Rec/AliTPCclustererKr.h @@ -1,169 +1,169 @@ -#ifndef ALITPCCLUSTERERKR_H -#define ALITPCCLUSTERERKR_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: AliTPCclustererKr.h,v 1.8 2008/02/07 16:07:15 matyja Exp $ */ - -//------------------------------------------------------- -// TPC Kr Clusterer Class -// -// Origin: Adam Matyja, INP PAN, adam.matyja@ifj.edu.pl -//------------------------------------------------------- - -#include "TObject.h" - -class AliTPCclusterKr; -class AliPadMax; -class AliSimDigits; -class AliTPCv4; -class AliTPCParam; -class AliTPCDigitsArray; -class AliTPCvtpr; -class AliTPCClustersRow; -class TTree; -class TH1F; -class TH2F; - -class AliTPCTransform; - -//used in raw data finder -class AliTPCROC; -class AliTPCCalPad; -class AliTPCAltroMapping; -class AliTPCcalibDB; -class AliTPCRecoParam; -class AliTPCReconstructor; -class AliRawReader; -class AliTPCCalROC; -class TTreeSRedirector; -class AliRawEventHeaderBase; -//_____________________________________________________________________________ -class AliTPCclustererKr: public TObject{ -public: - AliTPCclustererKr(); - AliTPCclustererKr(const AliTPCclustererKr ¶m);//copy constructor - AliTPCclustererKr &operator = (const AliTPCclustererKr & param); - virtual ~AliTPCclustererKr(); - - //finders - virtual Int_t FinderIO();//for MC - virtual Int_t FinderIO(AliRawReader* rawReader);//for data - virtual Int_t FindClusterKrIO();//main routine for finding clusters - virtual void CleanSector(Int_t sector); // clean isolated digits - - //other - void GetXY(Int_t sec,Int_t row,Int_t pad,Double_t& xGlob,Double_t& yGlob);//give XY coordinate of the pad - - virtual void SetInput(TTree * tree); //set input tree with digits - virtual void SetOutput(TTree * tree); //set output tree with clusters - virtual void SetParam(AliTPCParam *param){fParam=param;}//set TPC parameters - virtual void SetDigArr(AliTPCDigitsArray *digarr){fDigarr=digarr;}//set current array of digits - virtual void SetRecoParam(AliTPCRecoParam *recoParam=0);//set reconstruction parameters - - virtual void SetTimeStamp(UInt_t timestamp){ fTimeStamp = timestamp; } - virtual void SetRun(UInt_t run){ fRun = run; } - - //setters for cluster finder parameters - virtual void SetZeroSup(Int_t v){fZeroSup=v;}//set zero suppresion parameter - virtual void SetFirstBin(Int_t v){fFirstBin=v;}//set first considered timebin - virtual void SetLastBin(Int_t v){fLastBin=v;}//set last considered timebin - virtual void SetMaxNoiseAbs(Float_t v){fMaxNoiseAbs=v;}//set maximal noise value - virtual void SetMaxNoiseSigma(Float_t v){fMaxNoiseSigma=v;}//set maximal noise sigma - - virtual void SetMinAdc(Int_t v){v<=0?fMinAdc=1:fMinAdc=v;}//set fMinAdc - virtual void SetMinTimeBins(Int_t v){fMinTimeBins=v;}//set fMinTimeBins -// virtual void SetMaxPadRange(Int_t v){fMaxPadRange=v;}//set fMaxPadRange -// virtual void SetMaxRowRange(Int_t v){fMaxRowRange=v;}//set fMaxRowRange - virtual void SetMaxTimeRange(Int_t v){fMaxTimeRange=v;}//set fMaxTimeRange - virtual void SetValueToSize(Float_t v){fValueToSize=v;}//set fValueToSize - - virtual void SetMaxPadRangeCm(Double_t v){fMaxPadRangeCm=v;}//set fMaxPadRangeCm - virtual void SetMaxRowRangeCm(Double_t v){fMaxRowRangeCm=v;}//set fMaxRowRangeCm - - virtual void SetIsolCut(Short_t v){fIsolCut=v;} - - virtual void SetDebugLevel(Int_t debug){fDebugLevel=debug;} - //debug = 0 to 71 -sector number to print - // = 72 - all sectors - // = 73 - inners - // = 74 - outers - - virtual void SetHistoRow(TH1F *histo) {fHistoRow =histo;} - virtual void SetHistoPad(TH1F *histo) {fHistoPad =histo;} - virtual void SetHistoTime(TH1F *histo) {fHistoTime =histo;} - virtual void SetHistoRowPad(TH2F *histo){fHistoRowPad=histo;} - - //getters for cluster finder parameters - Int_t GetZeroSup() const {return fZeroSup;}//get zero suppresion parameter - Int_t GetFirstBin() const {return fFirstBin;}//get first considered timebin - Int_t GetLastBin() const {return fLastBin;}//get last considered timebin - Float_t GetMaxNoiseAbs() const {return fMaxNoiseAbs;}//get maximal noise value - Float_t GetMaxNoiseSigma() const {return fMaxNoiseSigma;}//get maximal noise sigma - - Int_t GetMinAdc() const {return fMinAdc;}//get fMinAdc - Int_t GetMinTimeBins() const {return fMinTimeBins;}//get fMinTimeBins -// Int_t GetMaxPadRange() const {return fMaxPadRange;}//get fMaxPadRange -// Int_t GetMaxRowRange() const {return fMaxRowRange;}//get fMaxRowRange - Int_t GetMaxTimeRange() const {return fMaxTimeRange;}//get fMaxTimeRange - Float_t GetValueToSize() const {return fValueToSize;}//get fValueToSize - - Double_t GetMaxPadRangeCm() const {return fMaxPadRangeCm;}//get fMaxPadRangeCm - Double_t GetMaxRowRangeCm() const {return fMaxRowRangeCm;}//get fMaxRowRangeCm - - Short_t GetIsolCut() const {return fIsolCut;} - - Int_t GetDebugLevel() const {return fDebugLevel;} - TH1F * GetHistoRow(){return fHistoRow;} - TH1F * GetHistoPad(){return fHistoPad;} - TH1F * GetHistoTime(){return fHistoTime;} - TH2F * GetHistoRowPad(){return fHistoRowPad;} - - UInt_t GetTimeStamp() const {return fTimeStamp;} - UInt_t GetRun() const {return fRun;} - -private: - void MakeClusters(TObjArray * maximaInSector, Int_t iSec, Int_t &clusterCounter); - Bool_t fRawData; //flag =0 for MC =1 for real data - - TTree * fInput; //!input tree with digits - object not owner - TTreeSRedirector * fOutput; //!output tree with clusters - object not owner - - AliTPCParam * fParam;//!TPC parameters - AliTPCDigitsArray *fDigarr;//! pointer to current array if digits - - //only for raw data :) - const AliTPCRecoParam * fRecoParam; //! reconstruction parameters - - //cluster finder parameters - Int_t fZeroSup;//zero suppresion parameter = 2 def. - Int_t fFirstBin;//first considered time bin used by cluster finder = 60 def. - Int_t fLastBin;//last considered time bin used by cluster finder = 950 def. - Float_t fMaxNoiseAbs;// maximal noise value on pad used in cluster finder = 2 def. - Float_t fMaxNoiseSigma;// maximal noise sigma on pad used in cluster finder = 3 def. - - Int_t fMinAdc;//minimal value of acd count in each timebin = 3 def. - Int_t fMinTimeBins;//minimal value of time bins one after each other = 2 def. -// Int_t fMaxPadRange;//maximal pad range from maximum = 4 def. -// Int_t fMaxRowRange;//maximal row range from maximum = 3 def. - Int_t fMaxTimeRange;//maximal time bin range from maximum = 7 def. - Float_t fValueToSize;//ratio cluster value to cluster size = 3.5 def. - - Double_t fMaxPadRangeCm;//maximal pad range in cm from maximum = 2.5cm def. - Double_t fMaxRowRangeCm;//maximal row range in cm from maximum = 3.5cm def. - - Short_t fIsolCut;//isolation cut in 3D = 5 def. - - Int_t fDebugLevel;//! debug level variable - TH1F *fHistoRow;//!debug histo for rows - TH1F *fHistoPad;//!debug histo for pads - TH1F *fHistoTime;//!debug histo for timebins - TH2F *fHistoRowPad;//!debug histo for rows and pads - - UInt_t fTimeStamp; //!time stamp from event header - UInt_t fRun; //!run from event header - ClassDef(AliTPCclustererKr,8) // Time Projection Chamber Kr clusters -}; - - -#endif +#ifndef ALITPCCLUSTERERKR_H +#define ALITPCCLUSTERERKR_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: AliTPCclustererKr.h,v 1.8 2008/02/07 16:07:15 matyja Exp $ */ + +//------------------------------------------------------- +// TPC Kr Clusterer Class +// +// Origin: Adam Matyja, INP PAN, adam.matyja@ifj.edu.pl +//------------------------------------------------------- + +#include "TObject.h" + +class AliTPCclusterKr; +class AliPadMax; +class AliSimDigits; +class AliTPCv4; +class AliTPCParam; +class AliTPCDigitsArray; +class AliTPCvtpr; +class AliTPCClustersRow; +class TTree; +class TH1F; +class TH2F; + +class AliTPCTransform; + +//used in raw data finder +class AliTPCROC; +class AliTPCCalPad; +class AliTPCAltroMapping; +class AliTPCcalibDB; +class AliTPCRecoParam; +class AliTPCReconstructor; +class AliRawReader; +class AliTPCCalROC; +class TTreeSRedirector; +class AliRawEventHeaderBase; +//_____________________________________________________________________________ +class AliTPCclustererKr: public TObject{ +public: + AliTPCclustererKr(); + AliTPCclustererKr(const AliTPCclustererKr ¶m);//copy constructor + AliTPCclustererKr &operator = (const AliTPCclustererKr & param); + virtual ~AliTPCclustererKr(); + + //finders + virtual Int_t FinderIO();//for MC + virtual Int_t FinderIO(AliRawReader* rawReader);//for data + virtual Int_t FindClusterKrIO();//main routine for finding clusters + virtual void CleanSector(Int_t sector); // clean isolated digits + + //other + void GetXY(Int_t sec,Int_t row,Int_t pad,Double_t& xGlob,Double_t& yGlob);//give XY coordinate of the pad + + virtual void SetInput(TTree * tree); //set input tree with digits + virtual void SetOutput(TTree * tree); //set output tree with clusters + virtual void SetParam(AliTPCParam *param){fParam=param;}//set TPC parameters + virtual void SetDigArr(AliTPCDigitsArray *digarr){fDigarr=digarr;}//set current array of digits + virtual void SetRecoParam(AliTPCRecoParam *recoParam=0);//set reconstruction parameters + + virtual void SetTimeStamp(UInt_t timestamp){ fTimeStamp = timestamp; } + virtual void SetRun(UInt_t run){ fRun = run; } + + //setters for cluster finder parameters + virtual void SetZeroSup(Int_t v){fZeroSup=v;}//set zero suppresion parameter + virtual void SetFirstBin(Int_t v){fFirstBin=v;}//set first considered timebin + virtual void SetLastBin(Int_t v){fLastBin=v;}//set last considered timebin + virtual void SetMaxNoiseAbs(Float_t v){fMaxNoiseAbs=v;}//set maximal noise value + virtual void SetMaxNoiseSigma(Float_t v){fMaxNoiseSigma=v;}//set maximal noise sigma + + virtual void SetMinAdc(Int_t v){v<=0?fMinAdc=1:fMinAdc=v;}//set fMinAdc + virtual void SetMinTimeBins(Int_t v){fMinTimeBins=v;}//set fMinTimeBins +// virtual void SetMaxPadRange(Int_t v){fMaxPadRange=v;}//set fMaxPadRange +// virtual void SetMaxRowRange(Int_t v){fMaxRowRange=v;}//set fMaxRowRange + virtual void SetMaxTimeRange(Int_t v){fMaxTimeRange=v;}//set fMaxTimeRange + virtual void SetValueToSize(Float_t v){fValueToSize=v;}//set fValueToSize + + virtual void SetMaxPadRangeCm(Double_t v){fMaxPadRangeCm=v;}//set fMaxPadRangeCm + virtual void SetMaxRowRangeCm(Double_t v){fMaxRowRangeCm=v;}//set fMaxRowRangeCm + + virtual void SetIsolCut(Short_t v){fIsolCut=v;} + + virtual void SetDebugLevel(Int_t debug){fDebugLevel=debug;} + //debug = 0 to 71 -sector number to print + // = 72 - all sectors + // = 73 - inners + // = 74 - outers + + virtual void SetHistoRow(TH1F *histo) {fHistoRow =histo;} + virtual void SetHistoPad(TH1F *histo) {fHistoPad =histo;} + virtual void SetHistoTime(TH1F *histo) {fHistoTime =histo;} + virtual void SetHistoRowPad(TH2F *histo){fHistoRowPad=histo;} + + //getters for cluster finder parameters + Int_t GetZeroSup() const {return fZeroSup;}//get zero suppresion parameter + Int_t GetFirstBin() const {return fFirstBin;}//get first considered timebin + Int_t GetLastBin() const {return fLastBin;}//get last considered timebin + Float_t GetMaxNoiseAbs() const {return fMaxNoiseAbs;}//get maximal noise value + Float_t GetMaxNoiseSigma() const {return fMaxNoiseSigma;}//get maximal noise sigma + + Int_t GetMinAdc() const {return fMinAdc;}//get fMinAdc + Int_t GetMinTimeBins() const {return fMinTimeBins;}//get fMinTimeBins +// Int_t GetMaxPadRange() const {return fMaxPadRange;}//get fMaxPadRange +// Int_t GetMaxRowRange() const {return fMaxRowRange;}//get fMaxRowRange + Int_t GetMaxTimeRange() const {return fMaxTimeRange;}//get fMaxTimeRange + Float_t GetValueToSize() const {return fValueToSize;}//get fValueToSize + + Double_t GetMaxPadRangeCm() const {return fMaxPadRangeCm;}//get fMaxPadRangeCm + Double_t GetMaxRowRangeCm() const {return fMaxRowRangeCm;}//get fMaxRowRangeCm + + Short_t GetIsolCut() const {return fIsolCut;} + + Int_t GetDebugLevel() const {return fDebugLevel;} + TH1F * GetHistoRow(){return fHistoRow;} + TH1F * GetHistoPad(){return fHistoPad;} + TH1F * GetHistoTime(){return fHistoTime;} + TH2F * GetHistoRowPad(){return fHistoRowPad;} + + UInt_t GetTimeStamp() const {return fTimeStamp;} + UInt_t GetRun() const {return fRun;} + +private: + void MakeClusters(TObjArray * maximaInSector, Int_t iSec, Int_t &clusterCounter); + Bool_t fRawData; //flag =0 for MC =1 for real data + + TTree * fInput; //!input tree with digits - object not owner + TTreeSRedirector * fOutput; //!output tree with clusters - object not owner + + AliTPCParam * fParam;//!TPC parameters + AliTPCDigitsArray *fDigarr;//! pointer to current array if digits + + //only for raw data :) + const AliTPCRecoParam * fRecoParam; //! reconstruction parameters + + //cluster finder parameters + Int_t fZeroSup;//zero suppresion parameter = 2 def. + Int_t fFirstBin;//first considered time bin used by cluster finder = 60 def. + Int_t fLastBin;//last considered time bin used by cluster finder = 950 def. + Float_t fMaxNoiseAbs;// maximal noise value on pad used in cluster finder = 2 def. + Float_t fMaxNoiseSigma;// maximal noise sigma on pad used in cluster finder = 3 def. + + Int_t fMinAdc;//minimal value of acd count in each timebin = 3 def. + Int_t fMinTimeBins;//minimal value of time bins one after each other = 2 def. +// Int_t fMaxPadRange;//maximal pad range from maximum = 4 def. +// Int_t fMaxRowRange;//maximal row range from maximum = 3 def. + Int_t fMaxTimeRange;//maximal time bin range from maximum = 7 def. + Float_t fValueToSize;//ratio cluster value to cluster size = 3.5 def. + + Double_t fMaxPadRangeCm;//maximal pad range in cm from maximum = 2.5cm def. + Double_t fMaxRowRangeCm;//maximal row range in cm from maximum = 3.5cm def. + + Short_t fIsolCut;//isolation cut in 3D = 5 def. + + Int_t fDebugLevel;//! debug level variable + TH1F *fHistoRow;//!debug histo for rows + TH1F *fHistoPad;//!debug histo for pads + TH1F *fHistoTime;//!debug histo for timebins + TH2F *fHistoRowPad;//!debug histo for rows and pads + + UInt_t fTimeStamp; //!time stamp from event header + UInt_t fRun; //!run from event header + ClassDef(AliTPCclustererKr,8) // Time Projection Chamber Kr clusters +}; + + +#endif diff --git a/TPC/doc/Definitions/naming_convention.tex b/TPC/doc/Definitions/naming_convention.tex index 2775d1d24a9..430231450d8 100644 --- a/TPC/doc/Definitions/naming_convention.tex +++ b/TPC/doc/Definitions/naming_convention.tex @@ -1,158 +1,158 @@ -\documentclass[11pt,a4paper]{article} -\usepackage[latin1]{inputenc} -\usepackage[english]{babel} -\usepackage{amsmath} -\usepackage{amsfonts} -\usepackage{amssymb} -\usepackage{hyperref} -\usepackage[a4paper, left=1.5cm, right=1cm, top=2cm]{geometry} -%\author{Marian Ivano, Nicole Martin, Patrick Reichelt and Jens Wiechula} -%\title{Naming conventions for trending variables and QA WEB directory} -\begin{document} -\title{Naming conventions for trending variables and QA WEB directory} -\author{Marian Ivano, Nicole Martin, Patrick Riechelt and Jens Wiechula} -\maketitle - -This file explains the definition of the naming convention for trending variables and the QA WEB directory. You can also find a presentation explaining the naming conventions for the trending variables here: -\url{https://indico.cern.ch/getFile.py/access?contribId=4&resId=0&materialId=slides&confId=171449} . -As well as a presentation explaining the naming conventions for the QA WEB directory here: -\url{https://indico.cern.ch/getFile.py/access?contribId=3&resId=0&materialId=slides&confId=235865}. - -\section{Trending variables} - -\subsection{General} - -\begin{itemize} - -\item Seperate `properties' by a `\_' : \\ \setlength{\parskip}{1pt} - -Variable name as main identifyer \hspace*{3cm} Statisctics and fit propertie \\ -\hspace*{0.3cm} $ \downarrow $ \hspace*{10cm} $ \downarrow $ - - \small{Type\_ SideA/C\_ ChargePlus/Minus\_ StatisicType(StatMean/StatRMS/StatChi2/FitSlope/FitMean/FitSigma)\_ Err} \\ - \hspace*{1.5cm} $ \uparrow $\hspace*{2cm} $ \uparrow $ \hspace*{13.1cm} $ \uparrow $ \\ - \hspace*{1cm} Further type specifications \hspace*{10cm} Error of an-\hspace*{15.5cm} other variable - -\item Further description: \\ - Type: Variable name as main identifyer \\ - SideA/C and ChargePlus/Minus: Further type specifications $ \rightarrow $ Side and particle type \\ - StatisicType: Statisctics and fit properties \\ - Err: Indicates that this is an error of another variable with the same name \\ - - \item IROC vs OROC: Differentiate variables which are different for IRCO's and OROC's by: \_ IROC\_ or \_OROC \_ - -\end{itemize} - -\subsection{Special variables} - -To avoid confusions between similar short cuts for variables please respect the following capital and small letters!!! - -\begin{itemize} - -\item velocity vs voltage - -v = velocity (small) \\ -V = voltage (capital) - -\item time vs temperature - -t = time (small)\\ -T = temperature (capital) - -\item momentum vs pressure - -p = momentum (small) \\ -P = pressure (capital) - -\end{itemize} - - -\subsection{Statistic vs Gau\ss{} fit variables} - -Please use the prefix 'Stat' or 'Fit' to diffenrentiate between statistic and Gau\ss{} fit variables: \\ \setlength{\parskip}{1pt} - -StatMean --- FitMean \\ -\hspace*{0.5cm} StatRMS --- FitSigma - -\subsection{Examples} - -The following examples should illustrate the naming convention and help you to implement it. - -\subsubsection{QA tree} -\begin{tabular}{l l} -%\hline -Old & New \\ -\hline - & \\ -%\hline -meanTPCnclF & TPCnclF\_ StatMean \\ -%\hline -slopeATPCnclF & TPCnclF\_ SideA\_ FitSlope\\ -%\hline -SlopeATPCnclFErr & TPCnclF\_ SideA\_ FitSlope\_ Err\\ -%\hline -SlopedZAErrPos & dZ\_ SideA\_ ChargePlus\_ FitSlope\_ Err\\ -%\hline -\end{tabular} - -\subsubsection{OCDB tree} -\begin{tabular}{ l l} -%\hline -Old & New \\ -\hline - & \\ -%\hline -VIROC & V\_ IROC\\ -%\hline -medianVIROC & V\_ IROC\_ StatMedian \\ -%\hline -rocGainIROC & rocGain\_ IROC \\ -%\hline -rocGAinERRIROC & rocGain\_ IROC\_ Err\\ -%\hline -\end{tabular} - -% -% Old ------------------ New -% -% meanTPCnclF ------------------ TPCnclF_StatMean -% slopeATPCnclF ------------------ TPCnclF_SideA_FitSlope -% SlopeATPCnclFErr ------------------ TPCnclF_SideA_FitSlope_Err -% SlopedZAErrPos ------------------ dZ_SideA_ChargePlus_FitSlope_Err -% -%4.2) OCDB tree -% -% Old ------------------ New -% -% VIROC ------------------ V_IROC -% medianVIROC ------------------ V_IROC_StatMedian -% rocGainIROC ------------------ rocGain_IROC -% rocGAinERRIROC ------------------ rocGain_IROC_Err - -\section{QA WEB directory} - -The generic path, where everything goes, has to follow this convention: \\ -\parindent0pt - -\framebox{PATH=\${prefix}/\${datatype}/\${year}/\${period}/\${recopass}/\${suffix}} \\ - -\begin{itemize} - -\item with prefix according to the website of the respective institute and detector -\item e.g. at GSI: - -\subitem Official: prefix $=$ http://www-alice.gsi.de/TPC/PWG1train \\ -\subitem Development: prefix $=$ http://web-docs.gsi.de/{\raise.17ex\hbox{$\scriptstyle\mathtt{\sim}$}}username/TPC/PWG1train \\ - -\item datatype: datatype $=$ data or datatype $=$ sim (nothing like data\_year anymore!) \\ -\item suffix: StandardQA or ExpertQA or CalibrationQA or ExpertCalibrationQA \\ - -\end{itemize} - -\underline{Also to be used by all detectors which will merge trending trees with the TPC} -\begin{itemize} -\item rootfiles with the trees should have a static name, e.g. trending.root, TRDtree.root, ... - -\end{itemize} - +\documentclass[11pt,a4paper]{article} +\usepackage[latin1]{inputenc} +\usepackage[english]{babel} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{hyperref} +\usepackage[a4paper, left=1.5cm, right=1cm, top=2cm]{geometry} +%\author{Marian Ivano, Nicole Martin, Patrick Reichelt and Jens Wiechula} +%\title{Naming conventions for trending variables and QA WEB directory} +\begin{document} +\title{Naming conventions for trending variables and QA WEB directory} +\author{Marian Ivano, Nicole Martin, Patrick Riechelt and Jens Wiechula} +\maketitle + +This file explains the definition of the naming convention for trending variables and the QA WEB directory. You can also find a presentation explaining the naming conventions for the trending variables here: +\url{https://indico.cern.ch/getFile.py/access?contribId=4&resId=0&materialId=slides&confId=171449} . +As well as a presentation explaining the naming conventions for the QA WEB directory here: +\url{https://indico.cern.ch/getFile.py/access?contribId=3&resId=0&materialId=slides&confId=235865}. + +\section{Trending variables} + +\subsection{General} + +\begin{itemize} + +\item Seperate `properties' by a `\_' : \\ \setlength{\parskip}{1pt} + +Variable name as main identifyer \hspace*{3cm} Statisctics and fit propertie \\ +\hspace*{0.3cm} $ \downarrow $ \hspace*{10cm} $ \downarrow $ + + \small{Type\_ SideA/C\_ ChargePlus/Minus\_ StatisicType(StatMean/StatRMS/StatChi2/FitSlope/FitMean/FitSigma)\_ Err} \\ + \hspace*{1.5cm} $ \uparrow $\hspace*{2cm} $ \uparrow $ \hspace*{13.1cm} $ \uparrow $ \\ + \hspace*{1cm} Further type specifications \hspace*{10cm} Error of an-\hspace*{15.5cm} other variable + +\item Further description: \\ + Type: Variable name as main identifyer \\ + SideA/C and ChargePlus/Minus: Further type specifications $ \rightarrow $ Side and particle type \\ + StatisicType: Statisctics and fit properties \\ + Err: Indicates that this is an error of another variable with the same name \\ + + \item IROC vs OROC: Differentiate variables which are different for IRCO's and OROC's by: \_ IROC\_ or \_OROC \_ + +\end{itemize} + +\subsection{Special variables} + +To avoid confusions between similar short cuts for variables please respect the following capital and small letters!!! + +\begin{itemize} + +\item velocity vs voltage + +v = velocity (small) \\ +V = voltage (capital) + +\item time vs temperature + +t = time (small)\\ +T = temperature (capital) + +\item momentum vs pressure + +p = momentum (small) \\ +P = pressure (capital) + +\end{itemize} + + +\subsection{Statistic vs Gau\ss{} fit variables} + +Please use the prefix 'Stat' or 'Fit' to diffenrentiate between statistic and Gau\ss{} fit variables: \\ \setlength{\parskip}{1pt} + +StatMean --- FitMean \\ +\hspace*{0.5cm} StatRMS --- FitSigma + +\subsection{Examples} + +The following examples should illustrate the naming convention and help you to implement it. + +\subsubsection{QA tree} +\begin{tabular}{l l} +%\hline +Old & New \\ +\hline + & \\ +%\hline +meanTPCnclF & TPCnclF\_ StatMean \\ +%\hline +slopeATPCnclF & TPCnclF\_ SideA\_ FitSlope\\ +%\hline +SlopeATPCnclFErr & TPCnclF\_ SideA\_ FitSlope\_ Err\\ +%\hline +SlopedZAErrPos & dZ\_ SideA\_ ChargePlus\_ FitSlope\_ Err\\ +%\hline +\end{tabular} + +\subsubsection{OCDB tree} +\begin{tabular}{ l l} +%\hline +Old & New \\ +\hline + & \\ +%\hline +VIROC & V\_ IROC\\ +%\hline +medianVIROC & V\_ IROC\_ StatMedian \\ +%\hline +rocGainIROC & rocGain\_ IROC \\ +%\hline +rocGAinERRIROC & rocGain\_ IROC\_ Err\\ +%\hline +\end{tabular} + +% +% Old ------------------ New +% +% meanTPCnclF ------------------ TPCnclF_StatMean +% slopeATPCnclF ------------------ TPCnclF_SideA_FitSlope +% SlopeATPCnclFErr ------------------ TPCnclF_SideA_FitSlope_Err +% SlopedZAErrPos ------------------ dZ_SideA_ChargePlus_FitSlope_Err +% +%4.2) OCDB tree +% +% Old ------------------ New +% +% VIROC ------------------ V_IROC +% medianVIROC ------------------ V_IROC_StatMedian +% rocGainIROC ------------------ rocGain_IROC +% rocGAinERRIROC ------------------ rocGain_IROC_Err + +\section{QA WEB directory} + +The generic path, where everything goes, has to follow this convention: \\ +\parindent0pt + +\framebox{PATH=\${prefix}/\${datatype}/\${year}/\${period}/\${recopass}/\${suffix}} \\ + +\begin{itemize} + +\item with prefix according to the website of the respective institute and detector +\item e.g. at GSI: + +\subitem Official: prefix $=$ http://www-alice.gsi.de/TPC/PWG1train \\ +\subitem Development: prefix $=$ http://web-docs.gsi.de/{\raise.17ex\hbox{$\scriptstyle\mathtt{\sim}$}}username/TPC/PWG1train \\ + +\item datatype: datatype $=$ data or datatype $=$ sim (nothing like data\_year anymore!) \\ +\item suffix: StandardQA or ExpertQA or CalibrationQA or ExpertCalibrationQA \\ + +\end{itemize} + +\underline{Also to be used by all detectors which will merge trending trees with the TPC} +\begin{itemize} +\item rootfiles with the trees should have a static name, e.g. trending.root, TRDtree.root, ... + +\end{itemize} + \end{document} \ No newline at end of file diff --git a/TPC/doc/calib/clusterParam/clusterParam.tex b/TPC/doc/calib/clusterParam/clusterParam.tex index 941eeab97bc..cca57ac85c8 100644 --- a/TPC/doc/calib/clusterParam/clusterParam.tex +++ b/TPC/doc/calib/clusterParam/clusterParam.tex @@ -1,750 +1,750 @@ -\RequirePackage{ifpdf} - -\documentclass[a4paper,12pt]{article} -\ifpdf - \usepackage[pdftex]{graphicx} -\else - \usepackage[dvips]{graphicx} -\fi -\usepackage{epsfig} -\usepackage{rotating} -\usepackage{listings} -\usepackage{booktabs} -\usepackage{fancyhdr} -\usepackage{float} -\floatplacement{figure}{H} -\floatplacement{table}{H} - - - -\begin{document} - - -\section{Accuracy of local coordinate measurement} - - -\begin{figure}[t] -%\centering -\includegraphics[width=60mm,angle=-90]{picCluster/pic2.eps} -\includegraphics[width=60mm,angle=-90]{picCluster/pic1.eps} -\caption{Schematic view of the detection process in TPC (upper -part - perspective view, lower part - side view).} \label{figTPC} -\end{figure} - -The accuracy of the coordinate measurement is limited by a track -angle which spreads ionization and by diffusion which amplifies -this spread. - -The track direction with respect to pad plane is given by two -angles $\alpha$ and $\beta$ (see fig.~\ref{figTPC}). For the -measurement along the pad-row, the angle $\alpha$ between the -track projected onto the pad plane and pad-row is relevant. For -the measurement of the the drift coordinate ({\it{z}}--direction) -it is the angle $\beta$ between the track and {\it{z}} axis -(fig.~\ref{figTPC}). - -The ionization electrons are randomly distributed along the -particle trajectory. Fixing the reference {\it{x}} position of an -electron at the middle of pad-row, the {\it{y}} (resp. {\it{z}}) -position of the electron is a random variable characterized by -uniform distribution with the width $L_{\rm{a}}$, where -$L_{\rm{a}}$ is given by the pad length $L_{\rm{pad}}$ and the -angle $\alpha$ (resp. $\beta$): -\[L_{\rm{a}}=L_{\rm{pad}}\tan\alpha\] - -The diffusion smears out the position of the electron with -gaussian probability distribution with $\sigma_{\rm{D}}$. -Contribution of the $\mathbf{E{\times}B}$ and unisochronity -effects for the Alice TPC are negligible. The typical resolution -in the case of ALICE TPC is on the level of -$\sigma_{y}\sim$~0.8~mm and $\sigma_{z}\sim$~1.0~mm integrating -over all clusters in the TPC. - - - -\subsection{Gas gain fluctuation effect} - -Being collected on sense wire, electron is "multiplied" in strong -electric field. This multiplication is subject of a large -fluctuations, contributing to the cluster position resolution. -Because of these fluctuations the center of gravity of the -electron cloud can be shifted. - -Each electron is amplified independently. However, in the -reconstruction electrons are not treated separately. The Centre Of -Gravity (COG) of the cluster is usually used as an estimation for -the local track position. The influence of the gas gain -fluctuation to the reconstructed point characteristic can be -described by a simple model, introducing a weighted COG -$X_{\rm{COG}}$ -\begin{eqnarray} - X_{\rm{COG}}=\frac{\sum_{i=1}^{N}{g_ix_i}}{\sum_{i=1}^N{g_i}}, -\label{eqCOGdefGG} -\end{eqnarray} -where {\it{N}} is the total number of electrons in the cluster and -$g_i$ is a random variable equal to a gas amplification for given -electron. - -The mean value of $X_{\rm{COG}}$ is equal to the mean value -$\overline{x}$ of the original distribution of electrons -\begin{eqnarray} - \overline{X_{COG}}= - \overline{\frac{\sum_{i=1}^{N}{g_ix_i}}{\sum_{i=1}^N{g_i}}} - =\overline{x}\overline{\frac{\sum_{i=1}^{N}{g_i}} - {\sum_{i=1}^N{g_i}}} =\overline{x}. -\label{eqCOGMeanGG} -\end{eqnarray} - -However, the same is not true for the dispersion of the position, -%$\sigma^2_{X_{COG}}\sigma_x^2$: -%\begin {center} -\begin{eqnarray} - \lefteqn{ \sigma^2_{X_{\rm{COG}}} - =\overline{X_{\rm{COG}}^2}-\overline{X_{\rm{COG}}}^2=}\nonumber\\&&{} - =\overline{\left(\frac{1}{\sum_{i=1}^N{g_i}}\sum_{i=1}^{N}{g_ix_i} - \right)^2}-\overline{x}^2= - \nonumber\\ - &&{}=\overline{\frac{{\sum\sum{x_ix_jg_ig_j}}}{{\sum\sum{g_ig_j}}}}- - \overline{x}^2= - \nonumber\\&&{}= - \overline{x^2}\overline{\frac{\sum_i{g_i^2}}{\sum\sum{g_ig_j}}}- - \overline{x}^2 - \overline{\frac{\sum\sum{g_ig_j}-\sum\sum_{i\ne{j}}{g_ig_j}} - {\sum\sum{g_ig_j}}}= \nonumber\\&& - =\left(\overline{x^2}-\overline{x}^2\right) - \overline{\frac{\sum{g_i^2}}{\sum\sum{g_ig_j}}}= - \sigma_x^2\overline{\frac{\sum{g_i^2}}{\sum\sum{g_ig_j}}}= - \nonumber\\ - &&{}=\frac{\sigma_x^2}{N}{\times}G_{\rm{gfactor}}^2 -\label{eqCOGSigmaGG} -\end{eqnarray} - -where -\begin{eqnarray} - G_{\rm{gfactor}}^2 = N\overline{\frac{\sum{g_i^2}}{\sum\sum{g_ig_j}}} -\label{eqCOGGGfactor0} -\end{eqnarray} - -The diffusion term is effectively multiplied by gas gain factor -$G_{\rm{gfactor}}$. For sufficiently large number of electrons, -when $g_i^2$ and $\sum\sum{g_ig_j}$ are quasi independent -variables, equation (\ref{eqCOGGGfactor0}) can be transformed to -the following - -\begin{eqnarray} - \lefteqn{G_{\rm{gfactor}}^2 \approx - N\frac{\overline{\sum{g_i^2}}} - {\overline{\sum\sum{g_ig_j}}}}\nonumber\\ - &&{} = - N\frac{N\overline{g^2}}{N(N-1)\overline{g}^2+N\overline{g^2}}= - \nonumber\\ - &&{} =N\frac{ \left(\sigma_g^2/\overline{g}^2+1 \right)} - {N+\sigma_g^2/\overline{g}^2} -\label{eqCOGGGfactorE} -\end{eqnarray} - -Gas gain fluctuation of the gas detector working in proportional -regime is described with the exponential distribution with the -mean value $\bar{g}$ and r.m.s. -\begin{eqnarray} - \sigma_{\rm{g}} =\bar{g} -\label{eqSigmaexp} -\end{eqnarray} - -Substituting $\sigma_{\rm{g}}$ into equation -(\ref{eqCOGGGfactorE}) -\begin{eqnarray} - G_{\rm{gfactor}}^2 =\frac{2N}{N+1}. -\label{eqCOGGGfactorR} -\end{eqnarray} - -Gas multiplication fluctuation in chamber deteriorates -$\sigma_{X_{\rm{COG}}}$ by a factor of about ${\sqrt{2}}$. The -prediction of this model is in good agreement with results from -the simulation. - - -\subsection{Secondary ionization effect} - -Charged particle penetrating the gas of the detector produces -{\it{N}} primary electrons. Primary electron {\it{i}} produces -$n_{\rm{s}}^i-1$ secondary electrons. Each of these electrons is -amplified in the electric field by a factor of $g_j$. - -Each primary cluster is characterized by a position $x_i$ with -mean value $\overline{x}$ and $\sigma_x$. The COG given by -equation (\ref{eqCOGdefGG}) is modified to the following form: - -\begin{eqnarray} - X_{\rm{COG}}=\frac{1}{\sum_{i=1}^N\sum_{j=1}^{n_i}{g_j^{i}}} - \sum_{i=1}^{N}{x_i}\sum_{j=1}^{n_i}{g_j^{i}}. -\label{eqCOGdefGGPIO} -\end{eqnarray} -A new variable $G_n$ is introduced as the total electron gain: -\begin{eqnarray} - G_n=\sum_{j=1}^{n}{g_j}. -\label{eqGNdef} -\end{eqnarray} - - -Knowing the distribution of {\it{n}} and {\it{g}} and assuming -that {\it{n}} and {\it{g}} are independent variables the mean -value and variance of the $G_n$ can be expressed as: - -\begin{eqnarray} - \lefteqn{ - \overline{G_n}=\overline{n}\overline{g}} \\ - &&{} - \frac{\sigma^2_{G_n}}{\overline{G_n^2}}= - \frac{\sigma^2_n}{\overline{n}^2}+ - \frac{\sigma^2_g}{\overline{g}^2} - \frac{1}{\overline{n}} -\label{eqGNsigma} -\end{eqnarray} - -Inserting $G_n$ into equation (\ref{eqCOGdefGGPIO}) results in an -equation similar to the equation (\ref{eqCOGdefGG}). - -Multiplicative factor $G_{\rm{Lfactor}}$ is defined as an analog -of $G_{\rm{gfactor}}$, from the equation (\ref{eqCOGGGfactor0}) -\begin{eqnarray} - G_{\rm{Lfactor}}^2 = N\frac{\overline{\sum{G_i^2}}} - {\overline{\sum\sum{G_iG_j}}}. -\label{eqCOGLfactor0} -\end{eqnarray} - -Using the new variable $G_n$ and simply replacing gas gain -{\it{g}} by $G_n$ in the similar way as in equation -(\ref{eqCOGGGfactorE}) does not work. For $1/E^{2}$ -parametrization of secondary ionization process -$\sigma^2_{G_n}/\overline{G_n}$ goes to infinity and thus -$\sigma^2_{X_{COG}}=\sigma_x^2$. Moreover $G_i^2$ and -$\sum\sum{G_iG_j}$ are not quasi independent as the sum -$\sum\sum{G_iG_j}$ could be given by one "exotic" electron -cluster. Approximations used for deriving the equation -(\ref{eqCOGGGfactorE}) are not valid for secondary ionization -effect. - -In order to estimate the impact of this effect on COG equation -(\ref{eqCOGLfactor0}) has to be solved numerically. Simulation -showed that $G_{\rm{Lfactor}}$ does not depend strongly on the cut -used for maximum number of electrons created in the process of -secondary ionization. A change of the cut, from 1000 electrons up -produces a change of about 3\% in $G_{\rm{Lfactor}}$. - -Equation (\ref{eqCOGGGfactorE}) is not applicable in this -situation because of the infinity of the $\sigma_G$. According to -the simulation, the threshold on the number of electrons in the -cluster has a little influence to the resulting -$G_{\rm{Lfactor}}$. Therefore we fit simulated $G_{\rm{Lfactor}}$ -with formula (\ref{eqCOGGGfactorE}) where -$\sigma_G^2/\overline{G}^2$ was a free parameter. However, this -parametrization does not describe the data for wide enough range -of {\it{N}}. In further study the linear parametrization of the -COG factor was used. This parametrization was validated on -reasonable interval of {\it{N}}. - - - -\section{Center-of-gravity error parametrization} - -Detected position of charged particle is a random variable given -by several stochastic processes: diffusion, angular effect, gas -gain fluctuation, Landau fluctuation of the secondary ionization, -$\mathbf{E{\times}B}$ effect, electronic noise and systematic -effects (like space charge, etc.). The relative influence of these -processes to the resulting distortion of position determination -depends on the detector parameters. In the big drift detectors -like the ALICE TPC the main contribution is given by diffusion, -gas gain fluctuation, angular effect and secondary ionization -fluctuation. - -Furthermore we will use following assumptions: -\begin{itemize} -\item $N_{\rm{prim}}$ primary electrons are produced at a random -positions $x_i$ along the particle trajectory. \item $n_i-1$ -electrons are produced in the process of secondary ionization. -\item Displacement of produced electrons due to the thermalization -is neglected. -\end{itemize} - -Each of electrons is characterized by a random vector -$\vec{z}^i_j$ -\begin{eqnarray} - \vec{z}^i_j =\vec{x}^i+\vec{y}^i_j, -\label{eqZtot} -\end{eqnarray} -where {\it{i}} is the index of primary electron cluster and -{\it{j}} is the index of the secondary electron inside of the -primary electron cluster. Random variable $\vec{x}^i$ is a -position where the primary electron was created. The position -$\vec{y}^i_j$ is a random variable specific for each electron. It -is given mainly by a diffusion. - -The center of gravity of the electron cloud is given: -\begin{eqnarray} - \lefteqn{\vec{z}_{\rm{COG}}=\frac{1}{\sum_{i=1}^{N_{\rm{prim}}} - \sum_{j=1}^{n_i}{g_j^i}} - \sum_{i=1}^{N_{\rm{prim}}}\sum_{j=1}^{n_i}{g_j^i\vec{z}_j^i}=} - \nonumber\\ - &&{}\frac{1}{\sum_{i=1}^{N_{\rm{prim}}} - \sum_{j=1}^{n_i}{g_j^i}} - \sum_{i=1}^{N_{\rm{prim}}}\vec{x}^i\sum_{j=1}^{n_i}{g_j^i}+\nonumber\\ - &&{}\frac{1}{\sum_{i=1}^{N_{\rm{prim}}} - \sum_{j=1}^{n_i}{g_j^i}} - \sum_{i=1}^{N_{\rm{prim}}}\sum_{j=1}^{n_i}{g_j^i\vec{y}_j^i}= - \nonumber\\ \nonumber\\ - &&{} - \vec{x}_{\rm{COG}}+\vec{y}_{\rm{COG}}. -\label{eqCOGSec} -\end{eqnarray} - -The mean value $\overline{\vec{z}_{\rm{COG}}}$ is equal to the sum -of mean values $\overline{\vec{x}_{\rm{COG}}}$ and -$\overline{\vec{y}_{\rm{COG}}}$. - -The sigma of COG in one of the dimension of vector -$\vec{z}_{1COG}$ is given by following equation -\begin{eqnarray} - \lefteqn{\sigma_{z_{\rm{1COG}}}^2=\sigma_{x_{\rm{1COG}}}^2+ - \sigma_{y_{\rm{1COG}}}^2+}\nonumber\\ - &&{} - 2\left(\overline{x_{\rm{1COG}}y_{\rm{1COG}}}-\bar{x}_{\rm{1COG}} - \bar{y}_{1COG}\right). -\label{eqCOGSigSec} -\end{eqnarray} - -If the vectors $\vec{x}$ and $\vec{y}$ are independent random -variables the last term in the equation (\ref{eqCOGSigSec}) is -equal to zero. -\begin{eqnarray} - \sigma_{z_{1COG}}^2=\sigma_{x_{\rm{1COG}}}^2+ - \sigma_{y_{\rm{1COG}}}^2, -\label{eqCOGSigSecIn} -\end{eqnarray} -r.m.s. of COG distribution is given by the sum of r.m.s of -{\it{x}} and {\it{y}} components. - -In order to estimate the influence of the $\mathbf{E{\times}B}$ -and unisochronity effect to the space resolution two additional -random vectors are added to the initial electron position. - - -\begin{eqnarray} -\vec{z}^i_j =\vec{x}^i+\vec{y}^i_j+ - \vec{X}_{\mathbf{E{\times}B}}(\vec{x}^i+\vec{y}^i_j)+ - \vec{X}_{\rm{Unisochron}}(\vec{x}^i+\vec{y}^i_j). -\label{eqZtotplus} -\end{eqnarray} -The probability distributions of $\vec{X}_{\mathbf{E{\times}B}}$ -and $\vec{X}_{\rm{Unisochron}}$ are functions of random vectors -$\vec{x^i}$ and $\vec{y^i_j}$, and they are strongly correlated. -However, simulation indicates that in large drift detectors -distortions, due to these effects, are negligible compared with a -previous one. - -Combining previous equation and neglecting $\mathbf{E{\times}B}$ -and unisochronity -effects, the COG distortion parametrization appears as:\\ -{$\sigma_{z}$} of cluster center in {\it{z}} (time) direction -\begin{eqnarray}\ - \lefteqn{\sigma^2_{{z_{\rm{COG}}}} = \frac{D^2_{\rm{L}} - L_{\rm{Drift}}}{N_{\rm{ch}}}G_{\rm{g}}+}\nonumber\\&&{} - \frac{{\tan^2\alpha}~L_{\rm{pad}}^2G_{\rm{Lfactor}}(N_{\rm{chprim}})}{12N_{\rm{chprim}}}+ - \sigma^2_{\rm{noise}}, - \label{eqResZ1} -\end{eqnarray} - -and {$\sigma_{y}$} of cluster center in {\it{y}}(pad) direction - \begin{eqnarray} - \lefteqn{\sigma^2_{y_{\rm{COG}}} = \frac{D^2_{\rm{T}}L_{\rm{Drift}}}{N_{\rm{ch}}}G_{\rm{g}}+}\nonumber\\&&{} - \frac{{\tan^2\beta}~L_{\rm{pad}}^2G_{\rm{Lfactor}}(N_{\rm{chprim}})}{12N_{\rm{chprim}}}+ - \sigma^2_{\rm{noise}}, - \label{eqResY1} - \end{eqnarray} - where -${N_{\rm{ch}}}$ is the total number of electrons in the cluster, -${N_{\rm{chprim}}}$ is the number of primary electrons in the -cluster, ${G_{\rm{g}}}$ is the gas gain fluctuation factor, -${G_{\rm{Lfactor}}}$ is the secondary ionization fluctuation -factor and $\sigma_{\rm{noise}}$ describe the contribution of the -electronic noise to the resulting sigma of the COG. - -\section{Precision of cluster COG determination using measured -amplitude} - -We have derived parametrization using as parameters the total -number of electrons ${N_{\rm{ch}}}$ and the number of primary -electrons ${N_{\rm{chprim}}}$. This parametrization is in good -agreement with simulated data, where the ${N_{\rm{ch}}}$ and -${N_{\rm{chprim}}}$ are known. It can be used as an estimate for -the limits of accuracy, if the mean values -$\overline{N}_{\rm{ch}}$ and $\overline{N}_{\rm{chprim}}$ are used -instead. - -The ${N_{\rm{ch}}}$ and ${N_{\rm{chprim}}}$ are random variables -described by a Landau distribution, and Poisson distribution -respectively . - -In order to use previously derived formulas (\ref{eqResZ1}, -\ref{eqResY1}), the number of electrons can be estimated assuming -their proportionality to the total measured charge $A$ in the -cluster. However, it turns out that an empirical parametrization -of the factors $G(N)/N=G(A)/(kA)$ gives better results. -Formulas (\ref{eqResZ1}) and (\ref{eqResY1}) are transformed to following form:\\ - -{$\sigma_{z}$} of cluster center in {\it{z}} (time) direction: - \begin{eqnarray} - \lefteqn{\sigma^2_{z_{\rm{COG}}} = - \frac{D^2_{\rm{L}}L_{\rm{Drift}}}{A}{\times}\frac{G_g(A)}{k_{\rm{ch}}}+}\nonumber\\ - &&{} - \frac{\tan^2\alpha~L_{\rm{pad}}^2}{12A}{\times}\frac{G_{Lfactor}(A)}{k_{\rm{prim}}}+\sigma^2_{\rm{noise}} - \label{eqZtotAmp} - \end{eqnarray} - -and {$\sigma_{y}$} of cluster center in {\it{y}}(pad) direction: - \begin{eqnarray} - \lefteqn{\sigma_{y_{\rm{COG}}} = - \frac{D^2_{\rm{T}}L_{\rm{Drift}}}{A}{\times}\frac{G_g(A)}{k_{\rm{ch}}}+}\nonumber\\ - &&{} - \frac{\tan^2\beta~L_{\rm{pad}}^2}{12A}{\times}\frac{G_{Lfactor}(A)}{k_{\rm{prim}}}+\sigma^2_{\rm{noise}} - \label{eqYtotAmp} - \end{eqnarray} - -\section{Estimation of the precision of cluster position -determination using measured cluster shape} - -The shape of the cluster is given by the convolution of the -responses to the electron avalanches. The time response function -and the pad response function are almost gaussian, as well as the -spread of electrons due to the diffusion. The spread due to the -angular effect is uniform. Assuming that the contribution of the -angular spread does not dominate the cluster width, the cluster -shape is not far from gaussian. Therefore, we can use the -parametrization - -\begin{equation} - f(t,p) = K_{\rm{Max}}.\exp\left(-\frac{(t-t_{\rm{0}})^2}{2\sigma_{\rm{t}}^2}- - \frac{(p-p_{\rm{0}})^2}{2\sigma_{\rm{p}}^2}\right), - \label{eq:GaussTP} -\end{equation} -where ${K_{\rm{Max}}}$ is the normalization factor, $t$ and $p$ -are time and pad bins, $t_0$ and $p_0$ are centers of the cluster -in time and pad direction and $\sigma_{\rm{t}}$ and -$\sigma_{\rm{p}}$ are the r.m.s. of the time and pad cluster -distribution. - - The mean width of the cluster distribution is given by: -\begin{equation} - \sigma_{\rm{t}} = \sqrt{D{\rm{^2_L}}L_{\rm{drift}}+\sigma^2_{\rm{preamp}}+ - \frac{\tan^2\alpha~L_{\rm{pad}}^2}{12}}, -\end{equation} - - -\begin{equation} - \sigma_{\rm{p}} = \sqrt{D{\rm{^2_T}}L_{\rm{drift}}+\sigma^2_{\rm{PRF}}+ - \frac{\tan^2\beta~L_{\rm{pad}}^2}{12}}, -\end{equation} -where ${\sigma_{\rm{preamp}}}$ and ${\sigma_{\rm{PRF}}}$ are the -r.m.s. of the time response function and pad response function, -respectively. - -The fluctuation of the shape depends on the contribution of the -random diffusion and angular spread, and on the contribution given -by a gas gain fluctuation and secondary ionization. The -fluctuation of the time and pad response functions is small -compared with the previous one. - -The measured r.m.s of the cluster is influenced by a threshold -effect. -\begin{equation} - \sigma_{\rm{t}}^2 = \sum_{A(t,p)>\rm{threshold}}{(t-t_{\rm{0}})^2{\times}A(t,p)} -\end{equation} -The threshold effect can be eliminated using two dimensional -gaussian fit instead of the simple COG method. However, this -approach is slow and, moreover, the result is very sensitive to -the gain fluctuation. - -To eliminate the threshold effect in r.m.s. method, the bins -bellow threshold are replaced with a virtual charge using -gaussian interpolation of the cluster shape. The introduction of -the virtual charge improves the precision of the COG measurement. -Large systematic shifts in the estimate of the cluster position -(depending on the local track position relative to pad--time) due -to the threshold are no longer observed. - -Measuring the r.m.s. of the cluster, the local diffusion and -angular spread of the electron cloud can be estimated. This -provides additional information for the estimation of -distortions. A simple additional correction function is used: -\begin{eqnarray} - \sigma_{\rm{COG}} \rightarrow - \sigma_{\rm{COG}}(A){\times}(1+{\rm{const} {\times}\frac{\delta - \rm{RMS}}{\rm{teorRMS}}}), -\label{eqResUsingRMS} -\end{eqnarray} -where $\sigma_{\rm{COG}}(A)$ is calculated according formulas -\ref{eqResY1} and \ref{eqResZ1}, and the -$\delta\rm{RMS}/\rm{teorRMS}$ is the relative distortion of the -signal shape from the expected one. - - - - - - -\section{TPC cluster finder} - -The classical approach for the beginning of the tracking was -chosen. Before the tracking itself, two-dimensional clusters in -pad-row--time planes are found. Then the positions of the -corresponding space points are reconstructed, which are -interpreted as the crossing points of the tracks and the centers -of the pad rows. We investigate the region 5$\times$5 bins in -pad-row--time plane around the central bin with maximum amplitude. -The size of region, 5$\times$5 bins, is bigger than typical size -of cluster as the $\sigma_{\rm{t}}$ and $\sigma_{\rm{pad}}$ are -about 0.75 bins. - -The COG and r.m.s are used to characterize cluster. The COG and -r.m.s are affected by systematic distortions induced by the -threshold effect. Depending on the number of time bins and pads in -clusters the COG and r.m.s. are affected in different ways. -Unfortunately, the number of bins in cluster is the function of -local track position. To get rid of this effect, two-dimensional -gaussian fitting can be used. - -Similar results can be achieved by so called r.m.s. fitting using -virtual charge. The signal below threshold is replaced by the -virtual charge, its expected value according a interpolation. If -the virtual charge is above the threshold value, then it is -replaced with amplitude equal to the threshold value. The signal -r.m.s is used for later error estimation and as a criteria for -cluster unfolding. This method gives comparable results as -gaussian fit of the cluster but is much faster. Moreover, the COG -position is less sensitive to the gain fluctuations. - -The cluster shape depends on the track parameters. The response -function contribution and diffusion contribution to the cluster -r.m.s. are known during clustering. This is not true for a angular -contribution to the cluster width. The cluster finder should be -optimised for high momentum particle coming from the primary -vertex. Therefore, a conservative approach was chosen, assuming -angle $\alpha$ to be zero. The tangent of the angle $\beta$ is -given by {\it{z}}-position and pad-row radius, which is known -during clustering. - - -\subsection{Cluster unfolding} - -The estimated width of the cluster is used as criteria for cluster -unfolding. If the r.m.s. in one of the directions is greater then -critical r.m.s, cluster is considered for unfolding. The fast -spline method is used here. We require the charge to be conserved -in this method. Overlapped clusters are supposed to have the same -r.m.s., which is equivalent to the same track angles. If this -assumption is not fulfilled, tracks diverge very rapidly. - - -\begin{figure}[t] -\centering -\includegraphics[width=60mm,angle=-90]{picCluster/unfolding1.eps} -\caption{ -Schematic view of unfolding principle.} \label{figUnfolding1} -\end{figure} -\begin{figure}[t] -\centering -\includegraphics[width=60mm,angle=-90]{picCluster/unfoldingres.eps} -\caption{ Dependence of the position residual as function of the -distance to the second cluster.} \label{figUnfoldingRes} -\end{figure} - -The unfolding algorithm has the following steps: -\begin{itemize} - -\item Six amplitudes $C_i$ are investigated (see fig. -\ref{figUnfolding1}). First (left) local maxima, corresponding to -the first cluster is placed at position 3, second (right) local -maxima corresponding to the second cluster is at position 5. - -\item In the first iteration, amplitude in bin 4 corresponding to -the cluster on left side $A_{\rm{L4}}$ is calculated using -polynomial interpolation, assuming virtual amplitude at -$A_{\rm{L5}}$ and derivation at $A_{\rm{L5}}^{'}$ to be 0. -Amplitudes $A_{\rm{L2}}$ and $A_{\rm{L3}}$ are considered to be -not influenced by overlap ($A_{\rm{L2}}=C_2$ and -$A_{\rm{L3}}=C_3)$. - -\item The amplitude $A_{\rm{R4}}$ is calculated in similar way. In -the next iteration the amplitude $A_{\rm{L4}}$ is calculated -requiring charge conservation -$C_{\rm{4}}=A_{\rm{R4}}+A_{\rm{L4}}$. Consequently -\begin{eqnarray} - A_{\rm{L4}} \rightarrow - C_{\rm{4}}\frac{A_{\rm{L4}}}{A_{\rm{L4}}+A_{\rm{R4}}} -\end{eqnarray} -and -\begin{eqnarray} - A_{\rm{R4}} \rightarrow - C_{\rm{4}}\frac{A_{\rm{R4}}}{A_{\rm{L4}}+A_{\rm{R4}}}. -\end{eqnarray} -\end{itemize} - - -Two cluster resolution depends on the distance between the two -tracks. Until the shape of cluster triggers unfolding, there is a -systematic shifts towards to the COG of two tracks (see fig. -\ref{figUnfoldingRes}), only one cluster is reconstructed. -Afterwards, no systematic shift is observed. - - -\subsection{Cluster characteristics} - -The cluster is characterized by the COG in {\it{y}} and {\it{z}} -directions (fY and fZ) and by the cluster width (fSigmaY, -fSigmaZ). The deposited charge is described by the signal at -maximum (fMax), and total charge in cluster (fQ). The cluster type -is characterized by the data member fCType which is defined as a -ratio of the charge supposed to be deposited by the track and -total charge in cluster in investigated region 5$\times$5. The -error of the cluster position is assigned to the cluster only -during tracking according formulas - (\ref{eqZtotAmp}) and (\ref{eqYtotAmp}), when track - angles $\alpha$ and $\beta$ are known with sufficient precision. - - -Obviously, measuring the position of each electron separately the -effect of the gas gain fluctuation can be removed, however this is -not easy to implement in the large TPC detectors. Additional -information about cluster asymmetry can be used, but the resulting -improvement of around 5\% in precision on simulated data is -negligible, and it is questionable, how successful will be such -correction for the cluster asymmetry on real data. - -However, a cluster asymmetry can be used as additional criteria -for cluster unfolding. Let's denote $\mu_i$ the {\it{i}}-th -central momentum of the cluster, which was created by overlapping -from two sub-clusters with unknown positions and deposited energy -(with momenta $^1\mu_i$ and $^2\mu_i$). - -Let $r_1$ is the ratio of two clusters amplitudes: -\[r_1={^1\mu_0}/({^1\mu_0}+{^2\mu_0})\] and the track distance {\it{d}} is equal to -\[d = {^1\mu_1} -{^2\mu_1}.\] - -Assuming that the second moments for both sub-clusters are the -same (${^0\mu_2}={^1\mu_2}={^2\mu_2}$), two sub-clusters distance -{\it{d}} and amplitude ratio $r_1$ can be estimated: -\begin{eqnarray} - R = \frac{(\mu_3^6)}{(\mu_2^2-{^0\mu_2^2})^3}\\ - r_{\rm{1}} =0.5\pm0.5{\times}\sqrt{\frac{1}{1-4/R}} \\ - d = \sqrt{(4+R){\times}(\mu_2^2-{^0\mu_2^2})} -\label{eqMeas} -\end{eqnarray} - -In order to trigger unfolding using the shape information -additional information about track and mean cluster shape over -several pad-rows are needed. This information is available only -during tracking procedure. - - - -\subsection{Space point resolution parameterization} - -The space point resolution is the function of many parameters but for the ALICE TPC the dominant one are the diffusion, track inclination angle and deposited charge. -The space point resolution was extracted from the data in bins of these variables. - -In the first approximation the angular part and diffusion part are independent. The -paramaterization is obtained fitting parameters $p_{0}$,$p_L$ and $p_A$ -\begin{eqnarray}\ - \sigma^2_{{\rm{COG}}} \approx p^2_0+p^2_{L}L_{\rm{Drift}}+p^2_{A}\tan^2\alpha - \label{eqResCOG0} - \nonumber\\ - p^2_L \approx \frac{\sigma^2_DG_{\rm{g}}}{N_{\rm{ch}}} - \nonumber\\ - p^2_A \approx \frac{L_{\rm{pad}}^2G_{\rm{Lfactor}}}{N_{\rm{chprim}}} -\end{eqnarray} - - - -\begin{table} -\caption{Resolution parameterization} -\begin{tabular}{|l|l|l|l|} \hline -Pad size & 0.75x0.4 $cm^2$ & 1.0x0.6$cm^2$ & 1.5x0.6$cm^2$ \\ \hline -$p_{0y}$ & 0.026 cm & 0.031 cm & 0.023 cm \\ \hline -$p_{0z}$ & 0.032 cm & 0.032 cm & 0.028 cm \\ \hline -$p_{Ly}\sqrt{L_{pad}}$ & 0.0051 & 0.0060 & 0.0059 \\ \hline -$p_{Lz}\sqrt{L_{pad}}$ & 0.0056 & 0.0056 & 0.0059 \\ \hline -$p_{Ay}/\sqrt{L_{pad}}$ & 0.13 $cm^{1/2}$ & 0.15 $cm^{1/2}$ & 0.15 $cm^{1/2}$ \\ \hline -$p_{Az}/\sqrt{L_{pad}}$ & 0.15 $cm^{1/2}$ & 0.16 $cm^{1/2}$ & 0.17 $cm^{1/2}$ \\ \hline - -\end{tabular} -\label{table:PointResolFitParam} -\end{table} - - -\begin{eqnarray}\ - N_{\rm{ch}} \approx {L_{\rm{pad}}} \nonumber \\ - N_{\rm{chprim}} \approx {L_{\rm{pad}}} \nonumber \\ - \nonumber\\ - p_L \approx \frac{1}{\sqrt{L_{\rm{pad}}}} - \nonumber\\ - p_A \approx \sqrt{L_{\rm{pad}}} -\label{eq:ResolScaling} -\end{eqnarray} - - -The TPC space resolution is scaling with the number of contributed electrons -$N_{\rm{chprim}}$ and ${N_{\rm{ch}}}$, therefore is scaling with pad length. -In ALICE TPC three different pad gemetries are used. -The space point resolution was fitted for separatelly for each geometry. The fitted parameters $p_0$ $p_L$ and $p_A$ are shown in the table \ref{table:PointResolFitParam} rescaled with the pad length. - - -The agreement between previously mentioned fit and the data is on thel level of the -$\approx10-20\%$. In previous formula we assumed that all of the electrons created in ionization are contibuting to the measured signal. Because of the threshold effect the -part of the signal is cut-off. The fraction of the signal bellow threshold is proportional to the response function witdth and is incresing with drift length and inclination angle. The following correction functions are used: -\begin{eqnarray}\ - \nonumber\\ - p_L \approx p_{L0}p_{LC}=p_{L0}(1+p_{L1}L_{\rm{Drift}}+p_{L2}\tan^2\alpha) - \nonumber\\ - p_A \approx p_{A0}p_{AC}=p_{A0}(1+p_{A1}L_{\rm{Drift}}+p_{A2}\tan^2\alpha) -\label{eq:PointResolFitCorrection} -\end{eqnarray} - -To estimate the number of electrons contibuted to creation of the signal, the cluster charge can be used. Additional correction was tested. Terms proportional to $1/Q$ can be added to the formula \ref{eq:PointResolFitCorrection}. However the space point resolution is improving only until some limit (see fig.\ref{figPointResolYQ}) determined by the range of the secondary delta electrons. Q dependent - -\begin{figure} - \centering\epsfig{figure=picClusterResol/QresolY_mag.eps,width=0.7\linewidth} - \centering\epsfig{figure=picClusterResol/QresolY.eps,width=0.7\linewidth} - \label{figPointResolYQ} -\caption{Space point resolution in Y direcition as function of deposited charge $Q_{max}$. -Upper part-with magnetic field, lower part without magnetic field. Space point resolution is improving increasing deposited charge $Q_{max}$. Starting from some critical charge the resolution is worsening. The effect can be explained to be due to the secondary electrons - delta rays. The range of the delta rays is much smaller in presence of the magnetic field. -} - -\end{figure} - - -The measured resolution in Y and Z direction and corresponding fits are shown on picure \ref{figPointResolYDRTAN} and \ref{figPointResolZDRTAN}. The agrement with the data is on the level of about 2\%. - - - - -\begin{figure} - \centering\epsfig{figure=picClusterResol/YResol_Pad0.eps,width=0.7\linewidth} - \centering\epsfig{figure=picClusterResol/YResol_Pad1.eps,width=0.7\linewidth} - \centering\epsfig{figure=picClusterResol/YResol_Pad2.eps,width=0.7\linewidth} - \caption{Space point resolution in Y direcition as function of the drift length and the inlination angle.} - \label{figPointResolYDRTAN} -\end{figure} - -\begin{figure} - \centering\epsfig{figure=picClusterResol/ZResol_Pad0.eps,width=0.7\linewidth} - \centering\epsfig{figure=picClusterResol/ZResol_Pad1.eps,width=0.7\linewidth} - \centering\epsfig{figure=picClusterResol/ZResol_Pad2.eps,width=0.7\linewidth} - \caption{Space point resolution in Z direcition as function of the drift length and the inlination angle.} - \label{figPointResolZDRTAN} -\end{figure} - - - - -\end{document} +\RequirePackage{ifpdf} + +\documentclass[a4paper,12pt]{article} +\ifpdf + \usepackage[pdftex]{graphicx} +\else + \usepackage[dvips]{graphicx} +\fi +\usepackage{epsfig} +\usepackage{rotating} +\usepackage{listings} +\usepackage{booktabs} +\usepackage{fancyhdr} +\usepackage{float} +\floatplacement{figure}{H} +\floatplacement{table}{H} + + + +\begin{document} + + +\section{Accuracy of local coordinate measurement} + + +\begin{figure}[t] +%\centering +\includegraphics[width=60mm,angle=-90]{picCluster/pic2.eps} +\includegraphics[width=60mm,angle=-90]{picCluster/pic1.eps} +\caption{Schematic view of the detection process in TPC (upper +part - perspective view, lower part - side view).} \label{figTPC} +\end{figure} + +The accuracy of the coordinate measurement is limited by a track +angle which spreads ionization and by diffusion which amplifies +this spread. + +The track direction with respect to pad plane is given by two +angles $\alpha$ and $\beta$ (see fig.~\ref{figTPC}). For the +measurement along the pad-row, the angle $\alpha$ between the +track projected onto the pad plane and pad-row is relevant. For +the measurement of the the drift coordinate ({\it{z}}--direction) +it is the angle $\beta$ between the track and {\it{z}} axis +(fig.~\ref{figTPC}). + +The ionization electrons are randomly distributed along the +particle trajectory. Fixing the reference {\it{x}} position of an +electron at the middle of pad-row, the {\it{y}} (resp. {\it{z}}) +position of the electron is a random variable characterized by +uniform distribution with the width $L_{\rm{a}}$, where +$L_{\rm{a}}$ is given by the pad length $L_{\rm{pad}}$ and the +angle $\alpha$ (resp. $\beta$): +\[L_{\rm{a}}=L_{\rm{pad}}\tan\alpha\] + +The diffusion smears out the position of the electron with +gaussian probability distribution with $\sigma_{\rm{D}}$. +Contribution of the $\mathbf{E{\times}B}$ and unisochronity +effects for the Alice TPC are negligible. The typical resolution +in the case of ALICE TPC is on the level of +$\sigma_{y}\sim$~0.8~mm and $\sigma_{z}\sim$~1.0~mm integrating +over all clusters in the TPC. + + + +\subsection{Gas gain fluctuation effect} + +Being collected on sense wire, electron is "multiplied" in strong +electric field. This multiplication is subject of a large +fluctuations, contributing to the cluster position resolution. +Because of these fluctuations the center of gravity of the +electron cloud can be shifted. + +Each electron is amplified independently. However, in the +reconstruction electrons are not treated separately. The Centre Of +Gravity (COG) of the cluster is usually used as an estimation for +the local track position. The influence of the gas gain +fluctuation to the reconstructed point characteristic can be +described by a simple model, introducing a weighted COG +$X_{\rm{COG}}$ +\begin{eqnarray} + X_{\rm{COG}}=\frac{\sum_{i=1}^{N}{g_ix_i}}{\sum_{i=1}^N{g_i}}, +\label{eqCOGdefGG} +\end{eqnarray} +where {\it{N}} is the total number of electrons in the cluster and +$g_i$ is a random variable equal to a gas amplification for given +electron. + +The mean value of $X_{\rm{COG}}$ is equal to the mean value +$\overline{x}$ of the original distribution of electrons +\begin{eqnarray} + \overline{X_{COG}}= + \overline{\frac{\sum_{i=1}^{N}{g_ix_i}}{\sum_{i=1}^N{g_i}}} + =\overline{x}\overline{\frac{\sum_{i=1}^{N}{g_i}} + {\sum_{i=1}^N{g_i}}} =\overline{x}. +\label{eqCOGMeanGG} +\end{eqnarray} + +However, the same is not true for the dispersion of the position, +%$\sigma^2_{X_{COG}}\sigma_x^2$: +%\begin {center} +\begin{eqnarray} + \lefteqn{ \sigma^2_{X_{\rm{COG}}} + =\overline{X_{\rm{COG}}^2}-\overline{X_{\rm{COG}}}^2=}\nonumber\\&&{} + =\overline{\left(\frac{1}{\sum_{i=1}^N{g_i}}\sum_{i=1}^{N}{g_ix_i} + \right)^2}-\overline{x}^2= + \nonumber\\ + &&{}=\overline{\frac{{\sum\sum{x_ix_jg_ig_j}}}{{\sum\sum{g_ig_j}}}}- + \overline{x}^2= + \nonumber\\&&{}= + \overline{x^2}\overline{\frac{\sum_i{g_i^2}}{\sum\sum{g_ig_j}}}- + \overline{x}^2 + \overline{\frac{\sum\sum{g_ig_j}-\sum\sum_{i\ne{j}}{g_ig_j}} + {\sum\sum{g_ig_j}}}= \nonumber\\&& + =\left(\overline{x^2}-\overline{x}^2\right) + \overline{\frac{\sum{g_i^2}}{\sum\sum{g_ig_j}}}= + \sigma_x^2\overline{\frac{\sum{g_i^2}}{\sum\sum{g_ig_j}}}= + \nonumber\\ + &&{}=\frac{\sigma_x^2}{N}{\times}G_{\rm{gfactor}}^2 +\label{eqCOGSigmaGG} +\end{eqnarray} + +where +\begin{eqnarray} + G_{\rm{gfactor}}^2 = N\overline{\frac{\sum{g_i^2}}{\sum\sum{g_ig_j}}} +\label{eqCOGGGfactor0} +\end{eqnarray} + +The diffusion term is effectively multiplied by gas gain factor +$G_{\rm{gfactor}}$. For sufficiently large number of electrons, +when $g_i^2$ and $\sum\sum{g_ig_j}$ are quasi independent +variables, equation (\ref{eqCOGGGfactor0}) can be transformed to +the following + +\begin{eqnarray} + \lefteqn{G_{\rm{gfactor}}^2 \approx + N\frac{\overline{\sum{g_i^2}}} + {\overline{\sum\sum{g_ig_j}}}}\nonumber\\ + &&{} = + N\frac{N\overline{g^2}}{N(N-1)\overline{g}^2+N\overline{g^2}}= + \nonumber\\ + &&{} =N\frac{ \left(\sigma_g^2/\overline{g}^2+1 \right)} + {N+\sigma_g^2/\overline{g}^2} +\label{eqCOGGGfactorE} +\end{eqnarray} + +Gas gain fluctuation of the gas detector working in proportional +regime is described with the exponential distribution with the +mean value $\bar{g}$ and r.m.s. +\begin{eqnarray} + \sigma_{\rm{g}} =\bar{g} +\label{eqSigmaexp} +\end{eqnarray} + +Substituting $\sigma_{\rm{g}}$ into equation +(\ref{eqCOGGGfactorE}) +\begin{eqnarray} + G_{\rm{gfactor}}^2 =\frac{2N}{N+1}. +\label{eqCOGGGfactorR} +\end{eqnarray} + +Gas multiplication fluctuation in chamber deteriorates +$\sigma_{X_{\rm{COG}}}$ by a factor of about ${\sqrt{2}}$. The +prediction of this model is in good agreement with results from +the simulation. + + +\subsection{Secondary ionization effect} + +Charged particle penetrating the gas of the detector produces +{\it{N}} primary electrons. Primary electron {\it{i}} produces +$n_{\rm{s}}^i-1$ secondary electrons. Each of these electrons is +amplified in the electric field by a factor of $g_j$. + +Each primary cluster is characterized by a position $x_i$ with +mean value $\overline{x}$ and $\sigma_x$. The COG given by +equation (\ref{eqCOGdefGG}) is modified to the following form: + +\begin{eqnarray} + X_{\rm{COG}}=\frac{1}{\sum_{i=1}^N\sum_{j=1}^{n_i}{g_j^{i}}} + \sum_{i=1}^{N}{x_i}\sum_{j=1}^{n_i}{g_j^{i}}. +\label{eqCOGdefGGPIO} +\end{eqnarray} +A new variable $G_n$ is introduced as the total electron gain: +\begin{eqnarray} + G_n=\sum_{j=1}^{n}{g_j}. +\label{eqGNdef} +\end{eqnarray} + + +Knowing the distribution of {\it{n}} and {\it{g}} and assuming +that {\it{n}} and {\it{g}} are independent variables the mean +value and variance of the $G_n$ can be expressed as: + +\begin{eqnarray} + \lefteqn{ + \overline{G_n}=\overline{n}\overline{g}} \\ + &&{} + \frac{\sigma^2_{G_n}}{\overline{G_n^2}}= + \frac{\sigma^2_n}{\overline{n}^2}+ + \frac{\sigma^2_g}{\overline{g}^2} + \frac{1}{\overline{n}} +\label{eqGNsigma} +\end{eqnarray} + +Inserting $G_n$ into equation (\ref{eqCOGdefGGPIO}) results in an +equation similar to the equation (\ref{eqCOGdefGG}). + +Multiplicative factor $G_{\rm{Lfactor}}$ is defined as an analog +of $G_{\rm{gfactor}}$, from the equation (\ref{eqCOGGGfactor0}) +\begin{eqnarray} + G_{\rm{Lfactor}}^2 = N\frac{\overline{\sum{G_i^2}}} + {\overline{\sum\sum{G_iG_j}}}. +\label{eqCOGLfactor0} +\end{eqnarray} + +Using the new variable $G_n$ and simply replacing gas gain +{\it{g}} by $G_n$ in the similar way as in equation +(\ref{eqCOGGGfactorE}) does not work. For $1/E^{2}$ +parametrization of secondary ionization process +$\sigma^2_{G_n}/\overline{G_n}$ goes to infinity and thus +$\sigma^2_{X_{COG}}=\sigma_x^2$. Moreover $G_i^2$ and +$\sum\sum{G_iG_j}$ are not quasi independent as the sum +$\sum\sum{G_iG_j}$ could be given by one "exotic" electron +cluster. Approximations used for deriving the equation +(\ref{eqCOGGGfactorE}) are not valid for secondary ionization +effect. + +In order to estimate the impact of this effect on COG equation +(\ref{eqCOGLfactor0}) has to be solved numerically. Simulation +showed that $G_{\rm{Lfactor}}$ does not depend strongly on the cut +used for maximum number of electrons created in the process of +secondary ionization. A change of the cut, from 1000 electrons up +produces a change of about 3\% in $G_{\rm{Lfactor}}$. + +Equation (\ref{eqCOGGGfactorE}) is not applicable in this +situation because of the infinity of the $\sigma_G$. According to +the simulation, the threshold on the number of electrons in the +cluster has a little influence to the resulting +$G_{\rm{Lfactor}}$. Therefore we fit simulated $G_{\rm{Lfactor}}$ +with formula (\ref{eqCOGGGfactorE}) where +$\sigma_G^2/\overline{G}^2$ was a free parameter. However, this +parametrization does not describe the data for wide enough range +of {\it{N}}. In further study the linear parametrization of the +COG factor was used. This parametrization was validated on +reasonable interval of {\it{N}}. + + + +\section{Center-of-gravity error parametrization} + +Detected position of charged particle is a random variable given +by several stochastic processes: diffusion, angular effect, gas +gain fluctuation, Landau fluctuation of the secondary ionization, +$\mathbf{E{\times}B}$ effect, electronic noise and systematic +effects (like space charge, etc.). The relative influence of these +processes to the resulting distortion of position determination +depends on the detector parameters. In the big drift detectors +like the ALICE TPC the main contribution is given by diffusion, +gas gain fluctuation, angular effect and secondary ionization +fluctuation. + +Furthermore we will use following assumptions: +\begin{itemize} +\item $N_{\rm{prim}}$ primary electrons are produced at a random +positions $x_i$ along the particle trajectory. \item $n_i-1$ +electrons are produced in the process of secondary ionization. +\item Displacement of produced electrons due to the thermalization +is neglected. +\end{itemize} + +Each of electrons is characterized by a random vector +$\vec{z}^i_j$ +\begin{eqnarray} + \vec{z}^i_j =\vec{x}^i+\vec{y}^i_j, +\label{eqZtot} +\end{eqnarray} +where {\it{i}} is the index of primary electron cluster and +{\it{j}} is the index of the secondary electron inside of the +primary electron cluster. Random variable $\vec{x}^i$ is a +position where the primary electron was created. The position +$\vec{y}^i_j$ is a random variable specific for each electron. It +is given mainly by a diffusion. + +The center of gravity of the electron cloud is given: +\begin{eqnarray} + \lefteqn{\vec{z}_{\rm{COG}}=\frac{1}{\sum_{i=1}^{N_{\rm{prim}}} + \sum_{j=1}^{n_i}{g_j^i}} + \sum_{i=1}^{N_{\rm{prim}}}\sum_{j=1}^{n_i}{g_j^i\vec{z}_j^i}=} + \nonumber\\ + &&{}\frac{1}{\sum_{i=1}^{N_{\rm{prim}}} + \sum_{j=1}^{n_i}{g_j^i}} + \sum_{i=1}^{N_{\rm{prim}}}\vec{x}^i\sum_{j=1}^{n_i}{g_j^i}+\nonumber\\ + &&{}\frac{1}{\sum_{i=1}^{N_{\rm{prim}}} + \sum_{j=1}^{n_i}{g_j^i}} + \sum_{i=1}^{N_{\rm{prim}}}\sum_{j=1}^{n_i}{g_j^i\vec{y}_j^i}= + \nonumber\\ \nonumber\\ + &&{} + \vec{x}_{\rm{COG}}+\vec{y}_{\rm{COG}}. +\label{eqCOGSec} +\end{eqnarray} + +The mean value $\overline{\vec{z}_{\rm{COG}}}$ is equal to the sum +of mean values $\overline{\vec{x}_{\rm{COG}}}$ and +$\overline{\vec{y}_{\rm{COG}}}$. + +The sigma of COG in one of the dimension of vector +$\vec{z}_{1COG}$ is given by following equation +\begin{eqnarray} + \lefteqn{\sigma_{z_{\rm{1COG}}}^2=\sigma_{x_{\rm{1COG}}}^2+ + \sigma_{y_{\rm{1COG}}}^2+}\nonumber\\ + &&{} + 2\left(\overline{x_{\rm{1COG}}y_{\rm{1COG}}}-\bar{x}_{\rm{1COG}} + \bar{y}_{1COG}\right). +\label{eqCOGSigSec} +\end{eqnarray} + +If the vectors $\vec{x}$ and $\vec{y}$ are independent random +variables the last term in the equation (\ref{eqCOGSigSec}) is +equal to zero. +\begin{eqnarray} + \sigma_{z_{1COG}}^2=\sigma_{x_{\rm{1COG}}}^2+ + \sigma_{y_{\rm{1COG}}}^2, +\label{eqCOGSigSecIn} +\end{eqnarray} +r.m.s. of COG distribution is given by the sum of r.m.s of +{\it{x}} and {\it{y}} components. + +In order to estimate the influence of the $\mathbf{E{\times}B}$ +and unisochronity effect to the space resolution two additional +random vectors are added to the initial electron position. + + +\begin{eqnarray} +\vec{z}^i_j =\vec{x}^i+\vec{y}^i_j+ + \vec{X}_{\mathbf{E{\times}B}}(\vec{x}^i+\vec{y}^i_j)+ + \vec{X}_{\rm{Unisochron}}(\vec{x}^i+\vec{y}^i_j). +\label{eqZtotplus} +\end{eqnarray} +The probability distributions of $\vec{X}_{\mathbf{E{\times}B}}$ +and $\vec{X}_{\rm{Unisochron}}$ are functions of random vectors +$\vec{x^i}$ and $\vec{y^i_j}$, and they are strongly correlated. +However, simulation indicates that in large drift detectors +distortions, due to these effects, are negligible compared with a +previous one. + +Combining previous equation and neglecting $\mathbf{E{\times}B}$ +and unisochronity +effects, the COG distortion parametrization appears as:\\ +{$\sigma_{z}$} of cluster center in {\it{z}} (time) direction +\begin{eqnarray}\ + \lefteqn{\sigma^2_{{z_{\rm{COG}}}} = \frac{D^2_{\rm{L}} + L_{\rm{Drift}}}{N_{\rm{ch}}}G_{\rm{g}}+}\nonumber\\&&{} + \frac{{\tan^2\alpha}~L_{\rm{pad}}^2G_{\rm{Lfactor}}(N_{\rm{chprim}})}{12N_{\rm{chprim}}}+ + \sigma^2_{\rm{noise}}, + \label{eqResZ1} +\end{eqnarray} + +and {$\sigma_{y}$} of cluster center in {\it{y}}(pad) direction + \begin{eqnarray} + \lefteqn{\sigma^2_{y_{\rm{COG}}} = \frac{D^2_{\rm{T}}L_{\rm{Drift}}}{N_{\rm{ch}}}G_{\rm{g}}+}\nonumber\\&&{} + \frac{{\tan^2\beta}~L_{\rm{pad}}^2G_{\rm{Lfactor}}(N_{\rm{chprim}})}{12N_{\rm{chprim}}}+ + \sigma^2_{\rm{noise}}, + \label{eqResY1} + \end{eqnarray} + where +${N_{\rm{ch}}}$ is the total number of electrons in the cluster, +${N_{\rm{chprim}}}$ is the number of primary electrons in the +cluster, ${G_{\rm{g}}}$ is the gas gain fluctuation factor, +${G_{\rm{Lfactor}}}$ is the secondary ionization fluctuation +factor and $\sigma_{\rm{noise}}$ describe the contribution of the +electronic noise to the resulting sigma of the COG. + +\section{Precision of cluster COG determination using measured +amplitude} + +We have derived parametrization using as parameters the total +number of electrons ${N_{\rm{ch}}}$ and the number of primary +electrons ${N_{\rm{chprim}}}$. This parametrization is in good +agreement with simulated data, where the ${N_{\rm{ch}}}$ and +${N_{\rm{chprim}}}$ are known. It can be used as an estimate for +the limits of accuracy, if the mean values +$\overline{N}_{\rm{ch}}$ and $\overline{N}_{\rm{chprim}}$ are used +instead. + +The ${N_{\rm{ch}}}$ and ${N_{\rm{chprim}}}$ are random variables +described by a Landau distribution, and Poisson distribution +respectively . + +In order to use previously derived formulas (\ref{eqResZ1}, +\ref{eqResY1}), the number of electrons can be estimated assuming +their proportionality to the total measured charge $A$ in the +cluster. However, it turns out that an empirical parametrization +of the factors $G(N)/N=G(A)/(kA)$ gives better results. +Formulas (\ref{eqResZ1}) and (\ref{eqResY1}) are transformed to following form:\\ + +{$\sigma_{z}$} of cluster center in {\it{z}} (time) direction: + \begin{eqnarray} + \lefteqn{\sigma^2_{z_{\rm{COG}}} = + \frac{D^2_{\rm{L}}L_{\rm{Drift}}}{A}{\times}\frac{G_g(A)}{k_{\rm{ch}}}+}\nonumber\\ + &&{} + \frac{\tan^2\alpha~L_{\rm{pad}}^2}{12A}{\times}\frac{G_{Lfactor}(A)}{k_{\rm{prim}}}+\sigma^2_{\rm{noise}} + \label{eqZtotAmp} + \end{eqnarray} + +and {$\sigma_{y}$} of cluster center in {\it{y}}(pad) direction: + \begin{eqnarray} + \lefteqn{\sigma_{y_{\rm{COG}}} = + \frac{D^2_{\rm{T}}L_{\rm{Drift}}}{A}{\times}\frac{G_g(A)}{k_{\rm{ch}}}+}\nonumber\\ + &&{} + \frac{\tan^2\beta~L_{\rm{pad}}^2}{12A}{\times}\frac{G_{Lfactor}(A)}{k_{\rm{prim}}}+\sigma^2_{\rm{noise}} + \label{eqYtotAmp} + \end{eqnarray} + +\section{Estimation of the precision of cluster position +determination using measured cluster shape} + +The shape of the cluster is given by the convolution of the +responses to the electron avalanches. The time response function +and the pad response function are almost gaussian, as well as the +spread of electrons due to the diffusion. The spread due to the +angular effect is uniform. Assuming that the contribution of the +angular spread does not dominate the cluster width, the cluster +shape is not far from gaussian. Therefore, we can use the +parametrization + +\begin{equation} + f(t,p) = K_{\rm{Max}}.\exp\left(-\frac{(t-t_{\rm{0}})^2}{2\sigma_{\rm{t}}^2}- + \frac{(p-p_{\rm{0}})^2}{2\sigma_{\rm{p}}^2}\right), + \label{eq:GaussTP} +\end{equation} +where ${K_{\rm{Max}}}$ is the normalization factor, $t$ and $p$ +are time and pad bins, $t_0$ and $p_0$ are centers of the cluster +in time and pad direction and $\sigma_{\rm{t}}$ and +$\sigma_{\rm{p}}$ are the r.m.s. of the time and pad cluster +distribution. + + The mean width of the cluster distribution is given by: +\begin{equation} + \sigma_{\rm{t}} = \sqrt{D{\rm{^2_L}}L_{\rm{drift}}+\sigma^2_{\rm{preamp}}+ + \frac{\tan^2\alpha~L_{\rm{pad}}^2}{12}}, +\end{equation} + + +\begin{equation} + \sigma_{\rm{p}} = \sqrt{D{\rm{^2_T}}L_{\rm{drift}}+\sigma^2_{\rm{PRF}}+ + \frac{\tan^2\beta~L_{\rm{pad}}^2}{12}}, +\end{equation} +where ${\sigma_{\rm{preamp}}}$ and ${\sigma_{\rm{PRF}}}$ are the +r.m.s. of the time response function and pad response function, +respectively. + +The fluctuation of the shape depends on the contribution of the +random diffusion and angular spread, and on the contribution given +by a gas gain fluctuation and secondary ionization. The +fluctuation of the time and pad response functions is small +compared with the previous one. + +The measured r.m.s of the cluster is influenced by a threshold +effect. +\begin{equation} + \sigma_{\rm{t}}^2 = \sum_{A(t,p)>\rm{threshold}}{(t-t_{\rm{0}})^2{\times}A(t,p)} +\end{equation} +The threshold effect can be eliminated using two dimensional +gaussian fit instead of the simple COG method. However, this +approach is slow and, moreover, the result is very sensitive to +the gain fluctuation. + +To eliminate the threshold effect in r.m.s. method, the bins +bellow threshold are replaced with a virtual charge using +gaussian interpolation of the cluster shape. The introduction of +the virtual charge improves the precision of the COG measurement. +Large systematic shifts in the estimate of the cluster position +(depending on the local track position relative to pad--time) due +to the threshold are no longer observed. + +Measuring the r.m.s. of the cluster, the local diffusion and +angular spread of the electron cloud can be estimated. This +provides additional information for the estimation of +distortions. A simple additional correction function is used: +\begin{eqnarray} + \sigma_{\rm{COG}} \rightarrow + \sigma_{\rm{COG}}(A){\times}(1+{\rm{const} {\times}\frac{\delta + \rm{RMS}}{\rm{teorRMS}}}), +\label{eqResUsingRMS} +\end{eqnarray} +where $\sigma_{\rm{COG}}(A)$ is calculated according formulas +\ref{eqResY1} and \ref{eqResZ1}, and the +$\delta\rm{RMS}/\rm{teorRMS}$ is the relative distortion of the +signal shape from the expected one. + + + + + + +\section{TPC cluster finder} + +The classical approach for the beginning of the tracking was +chosen. Before the tracking itself, two-dimensional clusters in +pad-row--time planes are found. Then the positions of the +corresponding space points are reconstructed, which are +interpreted as the crossing points of the tracks and the centers +of the pad rows. We investigate the region 5$\times$5 bins in +pad-row--time plane around the central bin with maximum amplitude. +The size of region, 5$\times$5 bins, is bigger than typical size +of cluster as the $\sigma_{\rm{t}}$ and $\sigma_{\rm{pad}}$ are +about 0.75 bins. + +The COG and r.m.s are used to characterize cluster. The COG and +r.m.s are affected by systematic distortions induced by the +threshold effect. Depending on the number of time bins and pads in +clusters the COG and r.m.s. are affected in different ways. +Unfortunately, the number of bins in cluster is the function of +local track position. To get rid of this effect, two-dimensional +gaussian fitting can be used. + +Similar results can be achieved by so called r.m.s. fitting using +virtual charge. The signal below threshold is replaced by the +virtual charge, its expected value according a interpolation. If +the virtual charge is above the threshold value, then it is +replaced with amplitude equal to the threshold value. The signal +r.m.s is used for later error estimation and as a criteria for +cluster unfolding. This method gives comparable results as +gaussian fit of the cluster but is much faster. Moreover, the COG +position is less sensitive to the gain fluctuations. + +The cluster shape depends on the track parameters. The response +function contribution and diffusion contribution to the cluster +r.m.s. are known during clustering. This is not true for a angular +contribution to the cluster width. The cluster finder should be +optimised for high momentum particle coming from the primary +vertex. Therefore, a conservative approach was chosen, assuming +angle $\alpha$ to be zero. The tangent of the angle $\beta$ is +given by {\it{z}}-position and pad-row radius, which is known +during clustering. + + +\subsection{Cluster unfolding} + +The estimated width of the cluster is used as criteria for cluster +unfolding. If the r.m.s. in one of the directions is greater then +critical r.m.s, cluster is considered for unfolding. The fast +spline method is used here. We require the charge to be conserved +in this method. Overlapped clusters are supposed to have the same +r.m.s., which is equivalent to the same track angles. If this +assumption is not fulfilled, tracks diverge very rapidly. + + +\begin{figure}[t] +\centering +\includegraphics[width=60mm,angle=-90]{picCluster/unfolding1.eps} +\caption{ +Schematic view of unfolding principle.} \label{figUnfolding1} +\end{figure} +\begin{figure}[t] +\centering +\includegraphics[width=60mm,angle=-90]{picCluster/unfoldingres.eps} +\caption{ Dependence of the position residual as function of the +distance to the second cluster.} \label{figUnfoldingRes} +\end{figure} + +The unfolding algorithm has the following steps: +\begin{itemize} + +\item Six amplitudes $C_i$ are investigated (see fig. +\ref{figUnfolding1}). First (left) local maxima, corresponding to +the first cluster is placed at position 3, second (right) local +maxima corresponding to the second cluster is at position 5. + +\item In the first iteration, amplitude in bin 4 corresponding to +the cluster on left side $A_{\rm{L4}}$ is calculated using +polynomial interpolation, assuming virtual amplitude at +$A_{\rm{L5}}$ and derivation at $A_{\rm{L5}}^{'}$ to be 0. +Amplitudes $A_{\rm{L2}}$ and $A_{\rm{L3}}$ are considered to be +not influenced by overlap ($A_{\rm{L2}}=C_2$ and +$A_{\rm{L3}}=C_3)$. + +\item The amplitude $A_{\rm{R4}}$ is calculated in similar way. In +the next iteration the amplitude $A_{\rm{L4}}$ is calculated +requiring charge conservation +$C_{\rm{4}}=A_{\rm{R4}}+A_{\rm{L4}}$. Consequently +\begin{eqnarray} + A_{\rm{L4}} \rightarrow + C_{\rm{4}}\frac{A_{\rm{L4}}}{A_{\rm{L4}}+A_{\rm{R4}}} +\end{eqnarray} +and +\begin{eqnarray} + A_{\rm{R4}} \rightarrow + C_{\rm{4}}\frac{A_{\rm{R4}}}{A_{\rm{L4}}+A_{\rm{R4}}}. +\end{eqnarray} +\end{itemize} + + +Two cluster resolution depends on the distance between the two +tracks. Until the shape of cluster triggers unfolding, there is a +systematic shifts towards to the COG of two tracks (see fig. +\ref{figUnfoldingRes}), only one cluster is reconstructed. +Afterwards, no systematic shift is observed. + + +\subsection{Cluster characteristics} + +The cluster is characterized by the COG in {\it{y}} and {\it{z}} +directions (fY and fZ) and by the cluster width (fSigmaY, +fSigmaZ). The deposited charge is described by the signal at +maximum (fMax), and total charge in cluster (fQ). The cluster type +is characterized by the data member fCType which is defined as a +ratio of the charge supposed to be deposited by the track and +total charge in cluster in investigated region 5$\times$5. The +error of the cluster position is assigned to the cluster only +during tracking according formulas + (\ref{eqZtotAmp}) and (\ref{eqYtotAmp}), when track + angles $\alpha$ and $\beta$ are known with sufficient precision. + + +Obviously, measuring the position of each electron separately the +effect of the gas gain fluctuation can be removed, however this is +not easy to implement in the large TPC detectors. Additional +information about cluster asymmetry can be used, but the resulting +improvement of around 5\% in precision on simulated data is +negligible, and it is questionable, how successful will be such +correction for the cluster asymmetry on real data. + +However, a cluster asymmetry can be used as additional criteria +for cluster unfolding. Let's denote $\mu_i$ the {\it{i}}-th +central momentum of the cluster, which was created by overlapping +from two sub-clusters with unknown positions and deposited energy +(with momenta $^1\mu_i$ and $^2\mu_i$). + +Let $r_1$ is the ratio of two clusters amplitudes: +\[r_1={^1\mu_0}/({^1\mu_0}+{^2\mu_0})\] and the track distance {\it{d}} is equal to +\[d = {^1\mu_1} -{^2\mu_1}.\] + +Assuming that the second moments for both sub-clusters are the +same (${^0\mu_2}={^1\mu_2}={^2\mu_2}$), two sub-clusters distance +{\it{d}} and amplitude ratio $r_1$ can be estimated: +\begin{eqnarray} + R = \frac{(\mu_3^6)}{(\mu_2^2-{^0\mu_2^2})^3}\\ + r_{\rm{1}} =0.5\pm0.5{\times}\sqrt{\frac{1}{1-4/R}} \\ + d = \sqrt{(4+R){\times}(\mu_2^2-{^0\mu_2^2})} +\label{eqMeas} +\end{eqnarray} + +In order to trigger unfolding using the shape information +additional information about track and mean cluster shape over +several pad-rows are needed. This information is available only +during tracking procedure. + + + +\subsection{Space point resolution parameterization} + +The space point resolution is the function of many parameters but for the ALICE TPC the dominant one are the diffusion, track inclination angle and deposited charge. +The space point resolution was extracted from the data in bins of these variables. + +In the first approximation the angular part and diffusion part are independent. The +paramaterization is obtained fitting parameters $p_{0}$,$p_L$ and $p_A$ +\begin{eqnarray}\ + \sigma^2_{{\rm{COG}}} \approx p^2_0+p^2_{L}L_{\rm{Drift}}+p^2_{A}\tan^2\alpha + \label{eqResCOG0} + \nonumber\\ + p^2_L \approx \frac{\sigma^2_DG_{\rm{g}}}{N_{\rm{ch}}} + \nonumber\\ + p^2_A \approx \frac{L_{\rm{pad}}^2G_{\rm{Lfactor}}}{N_{\rm{chprim}}} +\end{eqnarray} + + + +\begin{table} +\caption{Resolution parameterization} +\begin{tabular}{|l|l|l|l|} \hline +Pad size & 0.75x0.4 $cm^2$ & 1.0x0.6$cm^2$ & 1.5x0.6$cm^2$ \\ \hline +$p_{0y}$ & 0.026 cm & 0.031 cm & 0.023 cm \\ \hline +$p_{0z}$ & 0.032 cm & 0.032 cm & 0.028 cm \\ \hline +$p_{Ly}\sqrt{L_{pad}}$ & 0.0051 & 0.0060 & 0.0059 \\ \hline +$p_{Lz}\sqrt{L_{pad}}$ & 0.0056 & 0.0056 & 0.0059 \\ \hline +$p_{Ay}/\sqrt{L_{pad}}$ & 0.13 $cm^{1/2}$ & 0.15 $cm^{1/2}$ & 0.15 $cm^{1/2}$ \\ \hline +$p_{Az}/\sqrt{L_{pad}}$ & 0.15 $cm^{1/2}$ & 0.16 $cm^{1/2}$ & 0.17 $cm^{1/2}$ \\ \hline + +\end{tabular} +\label{table:PointResolFitParam} +\end{table} + + +\begin{eqnarray}\ + N_{\rm{ch}} \approx {L_{\rm{pad}}} \nonumber \\ + N_{\rm{chprim}} \approx {L_{\rm{pad}}} \nonumber \\ + \nonumber\\ + p_L \approx \frac{1}{\sqrt{L_{\rm{pad}}}} + \nonumber\\ + p_A \approx \sqrt{L_{\rm{pad}}} +\label{eq:ResolScaling} +\end{eqnarray} + + +The TPC space resolution is scaling with the number of contributed electrons +$N_{\rm{chprim}}$ and ${N_{\rm{ch}}}$, therefore is scaling with pad length. +In ALICE TPC three different pad gemetries are used. +The space point resolution was fitted for separatelly for each geometry. The fitted parameters $p_0$ $p_L$ and $p_A$ are shown in the table \ref{table:PointResolFitParam} rescaled with the pad length. + + +The agreement between previously mentioned fit and the data is on thel level of the +$\approx10-20\%$. In previous formula we assumed that all of the electrons created in ionization are contibuting to the measured signal. Because of the threshold effect the +part of the signal is cut-off. The fraction of the signal bellow threshold is proportional to the response function witdth and is incresing with drift length and inclination angle. The following correction functions are used: +\begin{eqnarray}\ + \nonumber\\ + p_L \approx p_{L0}p_{LC}=p_{L0}(1+p_{L1}L_{\rm{Drift}}+p_{L2}\tan^2\alpha) + \nonumber\\ + p_A \approx p_{A0}p_{AC}=p_{A0}(1+p_{A1}L_{\rm{Drift}}+p_{A2}\tan^2\alpha) +\label{eq:PointResolFitCorrection} +\end{eqnarray} + +To estimate the number of electrons contibuted to creation of the signal, the cluster charge can be used. Additional correction was tested. Terms proportional to $1/Q$ can be added to the formula \ref{eq:PointResolFitCorrection}. However the space point resolution is improving only until some limit (see fig.\ref{figPointResolYQ}) determined by the range of the secondary delta electrons. Q dependent + +\begin{figure} + \centering\epsfig{figure=picClusterResol/QresolY_mag.eps,width=0.7\linewidth} + \centering\epsfig{figure=picClusterResol/QresolY.eps,width=0.7\linewidth} + \label{figPointResolYQ} +\caption{Space point resolution in Y direcition as function of deposited charge $Q_{max}$. +Upper part-with magnetic field, lower part without magnetic field. Space point resolution is improving increasing deposited charge $Q_{max}$. Starting from some critical charge the resolution is worsening. The effect can be explained to be due to the secondary electrons - delta rays. The range of the delta rays is much smaller in presence of the magnetic field. +} + +\end{figure} + + +The measured resolution in Y and Z direction and corresponding fits are shown on picure \ref{figPointResolYDRTAN} and \ref{figPointResolZDRTAN}. The agrement with the data is on the level of about 2\%. + + + + +\begin{figure} + \centering\epsfig{figure=picClusterResol/YResol_Pad0.eps,width=0.7\linewidth} + \centering\epsfig{figure=picClusterResol/YResol_Pad1.eps,width=0.7\linewidth} + \centering\epsfig{figure=picClusterResol/YResol_Pad2.eps,width=0.7\linewidth} + \caption{Space point resolution in Y direcition as function of the drift length and the inlination angle.} + \label{figPointResolYDRTAN} +\end{figure} + +\begin{figure} + \centering\epsfig{figure=picClusterResol/ZResol_Pad0.eps,width=0.7\linewidth} + \centering\epsfig{figure=picClusterResol/ZResol_Pad1.eps,width=0.7\linewidth} + \centering\epsfig{figure=picClusterResol/ZResol_Pad2.eps,width=0.7\linewidth} + \caption{Space point resolution in Z direcition as function of the drift length and the inlination angle.} + \label{figPointResolZDRTAN} +\end{figure} + + + + +\end{document} diff --git a/TPC/scripts/calibPassX/recPass0GSI.C b/TPC/scripts/calibPassX/recPass0GSI.C index 5530178f077..b4fab696f18 100644 --- a/TPC/scripts/calibPassX/recPass0GSI.C +++ b/TPC/scripts/calibPassX/recPass0GSI.C @@ -1,43 +1,43 @@ -// -// rec.C to be used for pass0 -// - -void rec(const char *filename="raw.root",Int_t nevents=-1) -{ - // Load some system libs for Grid and monitoring - // Set the CDB storage location - AliCDBManager * man = AliCDBManager::Instance(); - //man->SetDefaultStorage("raw://"); - man->SetDefaultStorage("local:///lustre/alice/alien/alice/data/2010/OCDB/"); - // Reconstruction settings - AliReconstruction rec; - - // Set protection against too many events in a chunk (should not happen) - if (nevents>0) rec.SetEventRange(0,nevents); - - // Switch off HLT until the problem with schema evolution resolved - //rec.SetRunReconstruction("ALL-HLT"); - // - // QA options - // - AliQAManager *qam = AliQAManager::QAManager(AliQAv1::kRECMODE) ; - rec.SetRunQA(":"); - rec.SetRunGlobalQA(kFALSE); - - // AliReconstruction settings - rec.SetWriteESDfriend(kTRUE); - rec.SetWriteAlignmentData(); - rec.SetInput(filename); - rec.SetUseTrackingErrorsForAlignment("ITS"); - rec.SetRunReconstruction("ITS TPC TRD TOF"); - rec.SetFillESD("ITS TPC TRD TOF"); - - // switch off cleanESD - rec.SetCleanESD(kFALSE); - - AliLog::Flush(); - rec.Run(); - -} - - +// +// rec.C to be used for pass0 +// + +void rec(const char *filename="raw.root",Int_t nevents=-1) +{ + // Load some system libs for Grid and monitoring + // Set the CDB storage location + AliCDBManager * man = AliCDBManager::Instance(); + //man->SetDefaultStorage("raw://"); + man->SetDefaultStorage("local:///lustre/alice/alien/alice/data/2010/OCDB/"); + // Reconstruction settings + AliReconstruction rec; + + // Set protection against too many events in a chunk (should not happen) + if (nevents>0) rec.SetEventRange(0,nevents); + + // Switch off HLT until the problem with schema evolution resolved + //rec.SetRunReconstruction("ALL-HLT"); + // + // QA options + // + AliQAManager *qam = AliQAManager::QAManager(AliQAv1::kRECMODE) ; + rec.SetRunQA(":"); + rec.SetRunGlobalQA(kFALSE); + + // AliReconstruction settings + rec.SetWriteESDfriend(kTRUE); + rec.SetWriteAlignmentData(); + rec.SetInput(filename); + rec.SetUseTrackingErrorsForAlignment("ITS"); + rec.SetRunReconstruction("ITS TPC TRD TOF"); + rec.SetFillESD("ITS TPC TRD TOF"); + + // switch off cleanESD + rec.SetCleanESD(kFALSE); + + AliLog::Flush(); + rec.Run(); + +} + + diff --git a/TRD/AliTRDSaxHandler.cxx b/TRD/AliTRDSaxHandler.cxx index 30acf532b14..f397c945adb 100644 --- a/TRD/AliTRDSaxHandler.cxx +++ b/TRD/AliTRDSaxHandler.cxx @@ -1,568 +1,568 @@ -/************************************************************************* - * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * - * * * - * * Author: The ALICE Off-line Project. * - * * Contributors are mentioned in the code where appropriate. * - * * * - * * Permission to use, copy, modify and distribute this software and its * - * * documentation strictly for non-commercial purposes is hereby granted * - * * without fee, provided that the above copyright notice appears in all * - * * copies and that both the copyright notice and this permission notice * - * * appear in the supporting documentation. The authors make no claims * - * * about the suitability of this software for any purpose. It is * - * * provided "as is" without express or implied warranty. * - * **************************************************************************/ - -/* $Id: AliTRDSaxHandler.cxx 26327 2008-06-02 15:36:18Z cblume $ */ - -//////////////////////////////////////////////////////////////////////////// -// // -// The SAX XML file handler used in the TRD preprocessor // -// // -// Authors: // -// Frederick Kramer (kramer@ikf.uni-frankfurt.de) // -// Thomas Bird (thomas@thomasbird.com) // -// // -//////////////////////////////////////////////////////////////////////////// - - -#include -#include -#include "AliLog.h" -#include "Cal/AliTRDCalDCSGTUTgu.h" -#include "Cal/AliTRDCalDCSPTR.h" - -#include -#include -#include "AliTRDSaxHandler.h" -#include "AliTRDgeometry.h" -#include "AliTRDcalibDB.h" -#include "Cal/AliTRDCalDCSv2.h" -#include "Cal/AliTRDCalDCSFEEv2.h" -#include "Cal/AliTRDCalDCSGTU.h" - -ClassImp(AliTRDSaxHandler) - -//_____________________________________________________________________________ -AliTRDSaxHandler::AliTRDSaxHandler() - :TObject() - ,fHandlerStatus(0) - ,fNDCSPTR(0) - ,fNDCSGTU(0) - ,fFEEArr(new TObjArray(540)) - ,fPTRArr(new TObjArray(6)) - ,fSystem(0) - ,fInsideRstate(0) - ,fCurrentSM(0) - ,fCurrentStack(0) - ,fCurrentROB(-1) - ,fCurrentMCM(-1) - ,fCurrentADC(-1) - ,fContent(0) - ,fDCSFEEObj(0) - ,fDCSPTRObj(0) - ,fDCSGTUObj(0) - ,fCalDCSObj(new AliTRDCalDCSv2()) - ,fLevel1Tag(-2) - ,fLevel2Tag(-2) - ,fInsideBoardInfo(false) - ,fTmu(0) - ,fCtpOpc(0) - ,fSegment(0) - ,fBoardInfo(0) -{ - // AliTRDSaxHandler default constructor - fFEEArr->SetOwner(); - fPTRArr->SetOwner(); -} - -//_____________________________________________________________________________ -AliTRDSaxHandler::AliTRDSaxHandler(const AliTRDSaxHandler &sh) - :TObject(sh) - ,fHandlerStatus(0) - ,fNDCSPTR(0) - ,fNDCSGTU(0) - ,fFEEArr(0) - ,fPTRArr(0) - ,fSystem(0) - ,fInsideRstate(0) - ,fCurrentSM(0) - ,fCurrentStack(0) - ,fCurrentROB(-1) - ,fCurrentMCM(-1) - ,fCurrentADC(-1) - ,fContent(0) - ,fDCSFEEObj(0) - ,fDCSPTRObj(0) - ,fDCSGTUObj(0) - ,fCalDCSObj(0) - ,fLevel1Tag(-2) - ,fLevel2Tag(-2) - ,fInsideBoardInfo(false) - ,fTmu(0) - ,fCtpOpc(0) - ,fSegment(0) - ,fBoardInfo(0) -{ - // AliTRDSaxHandler copy constructor -} - -//_____________________________________________________________________________ -AliTRDSaxHandler &AliTRDSaxHandler::operator=(const AliTRDSaxHandler &sh) -{ - // Assignment operator - if (&sh == this) return *this; - new (this) AliTRDSaxHandler(sh); - return *this; -} - -//_____________________________________________________________________________ -AliTRDSaxHandler::~AliTRDSaxHandler() -{ - // AliTRDSaxHandler destructor - if (fFEEArr) { - delete fFEEArr; - fFEEArr = 0x0; - } - if (fPTRArr) { - delete fPTRArr; - fPTRArr = 0x0; - } - if (fDCSGTUObj) { - delete fDCSGTUObj; - fDCSGTUObj = 0x0; - } - if (fCalDCSObj) { - delete fCalDCSObj; - fCalDCSObj = 0x0; - } -} - -//_____________________________________________________________________________ -AliTRDCalDCSv2* AliTRDSaxHandler::GetCalDCSObj() -{ - // put the arrays in the global calibration object and return this - - fCalDCSObj->SetFEEArr(fFEEArr); - fCalDCSObj->SetPTRArr(fPTRArr); - fCalDCSObj->SetGTUObj(fDCSGTUObj); - return fCalDCSObj; -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::ParseConfigName(TString cfgname) const -{ - // Evaluate the config name and set the individual parameters - - // protect - if (!AliTRDcalibDB::Instance()) { - AliError("Could not create an instance of AliTRDcalibDB!"); - return; - } - - TString cfg = "", par = "", pars = ""; - Int_t nPar = AliTRDcalibDB::Instance()->GetNumberOfParsDCS(cfgname); - if (nPar == 0) return; - - for (Int_t i=1; i<=nPar; i++) { - // Get the configuration parameter - AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, 0, cfg); - - // Set Parameters accordingly - if (i == AliTRDcalibDB::kFltrSet) fDCSFEEObj->SetFilterType(cfg); - if (i == AliTRDcalibDB::kTrigSet) fDCSFEEObj->SetTriggerSetup(cfg); - if (i == AliTRDcalibDB::kAddOpti) fDCSFEEObj->SetAddOptions(cfg); - if (i == AliTRDcalibDB::kTimebin) fDCSFEEObj->SetNumberOfTimeBins(AliTRDcalibDB::Instance()->ExtractTimeBinsFromString(cfg)); - if (i == AliTRDcalibDB::kReadout) fDCSFEEObj->SetReadoutParam(cfg); - if (i == AliTRDcalibDB::kTrkMode) fDCSFEEObj->SetTrackletMode(cfg); - - // Set options of parameters accordingly - Int_t nOpt = AliTRDcalibDB::Instance()->GetNumberOfOptsDCS(cfgname, i); - if (nOpt == 0) continue; - - for (Int_t j=1; j<=nOpt; j++) { - // Get the parameter option - AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, j, par); - - if (i == AliTRDcalibDB::kReadout) { - if (par.EqualTo("stat")) fDCSFEEObj->SetFastStatNoise(1); - } - if (i == AliTRDcalibDB::kTrkMode) { - if ((j > 1) && (par.Length() != 0)) pars += "-"; - pars += par; - } - // SetTCFilterWeight, SetTCFilterShortDecPar, SetTCFilterLongDecPar might be filled here, too - // SetSingleHitThres, SetThreePadClustThres, SetSelectiveNoZS, SetTestPattern might be filled here, too - } - - fDCSFEEObj->SetTrackletDef(pars); - } -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnStartDocument() const -{ - // if something should happen right at the beginning of the - // XML document, this must happen here -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnEndDocument() const -{ - // if something should happen at the end of the XML document - // this must be done here -} - -//_____________________________________________________________________________ -bool AliTRDSaxHandler::CompareString(TString str, const char *str2) -{ - // compre strings, ignoring case - // returns true if they are the same, else false - return !(bool)str.CompareTo(str2,str.kIgnoreCase); -} - - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnStartElement(const char *name, const TList *attributes) -{ - // when a new XML element is found, it is processed here - fContent = ""; // Technically

This is ok but would be a problem here

- Int_t dcsId = 0; - TString tagName = name; - TString dcsTitle = ""; - - // set the current system if necessary - if (CompareString(tagName, "FEE")) fSystem = kInsideFEE; - if (CompareString(tagName, "PTR")) fSystem = kInsidePTR; - if (CompareString(tagName, "GTU")) { - fSystem = kInsideGTU; - fDCSGTUObj = new AliTRDCalDCSGTU(tagName,tagName); - } - - if (fSystem == kInsideGTU) { - if (CompareString(tagName, "tgu")) fLevel1Tag = kInsideTgu; - if (CompareString(tagName, "board_info")) { - fInsideBoardInfo = true; - fBoardInfo = new AliTRDCalDCSGTUBoardInfo(tagName,tagName); - } - if (CompareString(tagName(0,tagName.Length()-3), "segment")) { - fSegment = new AliTRDCalDCSGTUSegment(tagName,tagName); - fSegment->SetId(TString(tagName(8,2)).Atoi()); - fLevel1Tag = kInsideSegment; - } - if (fLevel1Tag == kInsideTgu) { - if (CompareString(tagName, "ctp_opc")) fCtpOpc = new AliTRDCalDCSGTUCtpOpc(tagName,tagName); - } else if (fLevel1Tag == kInsideSegment) { - if (CompareString(tagName, "smu")) { - fLevel2Tag = kInsideSmu; - } - if (CompareString(tagName(0,3), "tmu")) { - fTmu = new AliTRDCalDCSGTUTmu(tagName,tagName); - fTmu->SetId(TString(tagName(4,2)).Atoi()); - fLevel2Tag = kInsideTmu; - } - } - } else if (fSystem == kInsideFEE) { - if (CompareString(tagName, "gaintbl")) fLevel1Tag = kInsideGainTable; - } - - // set if we are inside rstate - // (in principle not necessary - just to be more safe against stupid tags) - if (CompareString(tagName, "rstate")) fInsideRstate = 1; - - // get the attributes of the element - TXMLAttr *attr; - TIter next(attributes); - while ((attr = (TXMLAttr*) next())) { - TString attribName = attr->GetName(); - TString attribValue = attr->GetValue(); - if (fSystem == kInsideFEE && fLevel1Tag == kInsideNone) { - if (CompareString(attribName, "id") && CompareString(tagName, "DCS")) { - dcsTitle = name; - dcsId = atoi(attr->GetValue()); - } - if (CompareString(attribName, "roc") && CompareString(tagName, "ack")) { - if (attribValue.Atoi() != fDCSFEEObj->GetDCSid()) - fDCSFEEObj->SetStatusBit(4); // consistency check - } - if (CompareString(attribName, "rob") && CompareString(tagName, "ro-board") && (fInsideRstate == 1)) { - fCurrentROB = attribValue.Atoi(); - } - if (CompareString(attribName, "mcm") && CompareString(tagName, "m") && (fInsideRstate == 1)) { - fCurrentMCM = attribValue.Atoi(); - } - if (CompareString(attribName, "sm") && CompareString(tagName, "DCS")) { - fCurrentSM = attribValue.Atoi(); // only for GTU/PTR - } - if (CompareString(attribName, "id") && CompareString(tagName, "STACK")) {// hmmmm not exist? - fCurrentStack = attribValue.Atoi(); // only for GTU/PTR - } - } else if (fSystem == kInsideFEE && fLevel1Tag == kInsideGainTable) { - if (CompareString(tagName, "roc") && CompareString(attribName, "type")) fDCSFEEObj->SetGainTableRocType(attribValue); - if (CompareString(tagName, "roc") && CompareString(attribName, "serial")) fDCSFEEObj->SetGainTableRocSerial(attribValue.Atoi()); - if (CompareString(tagName, "mcm") && CompareString(attribName, "rob")) fCurrentROB = attribValue.Atoi(); - if (CompareString(tagName, "mcm") && CompareString(attribName, "pos")) fCurrentMCM = attribValue.Atoi(); - if (CompareString(tagName, "adc") && CompareString(attribName, "id")) fCurrentADC = attribValue.Atoi(); - - } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideNone) { - if (CompareString(tagName, "publisher")) { - if (CompareString(attribName, "at")) fDCSGTUObj->SetSORFlag(attribValue.Atoi()); - if (CompareString(attribName, "serial")) fDCSGTUObj->SetSerial(attribValue.Atoi()); - if (CompareString(attribName, "runnr")) fDCSGTUObj->SetRunNumber(attribValue.Atoi()); - } - } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideTgu) { - if (CompareString(tagName, "from")) { - if (CompareString(attribName, "at")) fDCSGTUObj->GetTgu()->SetFromSORFlag(attribValue.Atoi()); - if (CompareString(attribName, "runnr")) fDCSGTUObj->GetTgu()->SetFromRunNumber(attribValue.Atoi()); - if (CompareString(attribName, "child")) fDCSGTUObj->GetTgu()->SetFromChild(attribValue.Atoi()); - } - if (CompareString(tagName, "segmentmask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetSegmentMask(attribValue); - if (CompareString(tagName, "busymask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetBusyMask(attribValue); - if (CompareString(tagName, "contribmask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetContribMask(attribValue); - - if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "id")) fCtpOpc->SetId(attribValue.Atoi()); - if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "opcode")) fCtpOpc->SetOpcode(attribValue.Atoi()); - if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "direction")) fCtpOpc->SetDirection(attribValue.Atoi()); - if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "inverted")) fCtpOpc->SetInverted(attribValue.Atoi()); - if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "delay")) fCtpOpc->SetDelay(attribValue.Atoi()); - if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "connected")) fCtpOpc->SetConnected(attribValue.Atoi()); - - } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideSegment) { - if (CompareString(tagName, "from")) { - if (CompareString(attribName, "at")) fSegment->SetFromSORFlag(attribValue.Atoi()); - if (CompareString(attribName, "runnr")) fSegment->SetFromRunNumber(attribValue.Atoi()); - if (CompareString(attribName, "child")) fSegment->SetFromChild(attribValue.Atoi()); - } - if (fLevel2Tag == kInsideSmu) { - if (CompareString(tagName, "stackmask") && CompareString(attribName, "value")) fSegment->SetSmuStackMask(attribValue); - if (CompareString(tagName, "tracklets") && CompareString(attribName, "send")) fSegment->SetSmuTracklets(attribValue.Atoi()); - if (CompareString(tagName, "tracks") && CompareString(attribName, "send")) fSegment->SetSmuTracks(attribValue.Atoi()); - if (CompareString(tagName, "idelay") && CompareString(attribName, "value")) fSegment->SetSmuIdelay(attribValue.Atoi()); - if (CompareString(tagName, "ttc_emulator") && CompareString(attribName, "enable")) fSegment->SetSmuTtcEmulatorEnable(attribValue.Atoi()); - - if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_low")) - fSegment->SetSmuTriggerWindowL1Low(attribValue.Atoi()); - if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_high")) - fSegment->SetSmuTriggerWindowL1High(attribValue.Atoi()); - if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_low")) - fSegment->SetSmuTriggerWindowL2Low(attribValue.Atoi()); - if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_high")) - fSegment->SetSmuTriggerWindowL2High(attribValue.Atoi()); - - } else if (fLevel2Tag == kInsideTmu) { - if (CompareString(tagName, "linkmask") && CompareString(attribName, "value")) fTmu->SetLinkMask(attribValue); - if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "enable")) - fTmu->SetPatternGeneratorEnable(attribValue.Atoi()); - if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "datawords")) - fTmu->SetPatternGeneratorDataWords(attribValue.Atoi()); - if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "trackletwords")) - fTmu->SetPatternGeneratorTrackletWords(attribValue.Atoi()); - } - } - - if (fInsideBoardInfo) { - if (CompareString(tagName, "board_info") && CompareString(attribName, "board_id")) fBoardInfo->SetId(attribValue); - if (CompareString(tagName, "board_info") && CompareString(attribName, "design_type")) fBoardInfo->SetType(attribValue.Atoi()); - if (CompareString(tagName, "board_info") && CompareString(attribName, "pci_ga")) fBoardInfo->SetPciGa(attribValue.Atoi()); - if (CompareString(tagName, "hardware") && CompareString(attribName, "date")) fBoardInfo->SetHwDate(attribValue); - if (CompareString(tagName, "hardware") && CompareString(attribName, "rev")) fBoardInfo->SetHwRev(attribValue.Atoi()); - if (CompareString(tagName, "hardware") && CompareString(attribName, "clean")) fBoardInfo->SetHwClean(attribValue.Atoi()); - if (CompareString(tagName, "software") && CompareString(attribName, "date")) fBoardInfo->SetSwDate(attribValue); - if (CompareString(tagName, "software") && CompareString(attribName, "rev")) fBoardInfo->SetSwRev(attribValue.Atoi()); - if (CompareString(tagName, "software") && CompareString(attribName, "clean")) fBoardInfo->SetSwClean(attribValue.Atoi()); - } - } - - // if there is a new DCS element put it in the correct array - if (CompareString(tagName, "DCS")) { - if (fSystem == kInsideFEE) { - fDCSFEEObj = new AliTRDCalDCSFEEv2(); - fDCSFEEObj->SetDCSid(dcsId); - } - if (fSystem == kInsidePTR) { -// fDCSPTRObj = new AliTRDCalDCSPTR(name,dcsTitle); -// fDCSPTRObj->SetDCSid(dcsId); - } - if (fSystem == kInsideGTU) { -// fDCSGTUObj = new AliTRDCalDCSGTU(name,dcsTitle); -// fDCSGTUObj->SetDCSid(dcsId); - } - } -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnEndElement(const char *name) -{ - // do everything that needs to be done when an end tag of an element is found - TString tagName = name; - - // if done with this DCS board, put it in the correct array - // no check for necessary since this check is done during XML validation - if (CompareString(tagName, "DCS")) { - if (fSystem == kInsideFEE) { - Int_t detID = 0; - if (fDCSFEEObj->GetStatusBit() == 0) { - // if there were no errors (StatusBit==0) the following should match - detID = fDCSFEEObj->GetDCSid(); - AliTRDgeometry aliGeo; - Int_t calDetID = aliGeo.GetDetector(fDCSFEEObj->GetLayer(), - fDCSFEEObj->GetStack(), - fDCSFEEObj->GetSM()); - if (detID != calDetID) fDCSFEEObj->SetStatusBit(4); - } else { - // if the dcs board didn't properly respond, don't compare - detID = fDCSFEEObj->GetDCSid(); - } - fFEEArr->AddAt(fDCSFEEObj,detID); - } - if (fSystem == kInsidePTR) { - fPTRArr->AddAt(fDCSPTRObj,fNDCSPTR); - fNDCSPTR++; - } -// if (fSystem == kInsideGTU) { -// fGTUArr->AddAt(fDCSGTUObj,fNDCSGTU); -// fNDCSGTU++; -// } - fCurrentSM = 99; // 99 for no SM set - fDCSFEEObj = 0; // just to be sure - return; - } - - // done with this stack? - if (CompareString(tagName, "STACK")) {// TODO: errrrm ???? always 99? - fCurrentStack = 99; // 99 for no stack set - } - - // outside of rstate again? - if (CompareString(tagName, "rstate")) { - fInsideRstate = 0; - fCurrentROB = -1; - fCurrentMCM = -1; - } - if (CompareString(tagName, "ro-board")) fCurrentROB = -1; - - // store informations of the FEE DCS-Board - if (fSystem == kInsideFEE) { - if (CompareString(tagName, "DNR")) fDCSFEEObj->SetStatusBit(fContent.Atoi()); - if (CompareString(tagName, "CFGTAG")) fDCSFEEObj->SetConfigTag(fContent.Atoi()); - if (CompareString(tagName, "CFGVRSN")) fDCSFEEObj->SetConfigVersion(fContent); - if (CompareString(tagName, "SM-ID")) fDCSFEEObj->SetSM(fContent.Atoi()); - if (CompareString(tagName, "STACK-ID")) fDCSFEEObj->SetStack(fContent.Atoi()); - if (CompareString(tagName, "LAYER-ID")) fDCSFEEObj->SetLayer(fContent.Atoi()); - if (CompareString(tagName, "CFGNME")) { - fDCSFEEObj->SetConfigName(fContent); - ParseConfigName(fContent); - } - if (CompareString(tagName, "gaintbl")) { - fLevel1Tag = kInsideNone; - fCurrentROB = -1; - fCurrentMCM = -1; - fCurrentADC = -1; - } - if (fLevel1Tag == kInsideGainTable) { - if (CompareString(tagName, "name")) fDCSFEEObj->SetGainTableName(fContent); - if (CompareString(tagName, "desc")) fDCSFEEObj->SetGainTableDesc(fContent); - if (fCurrentROB>=0 && fCurrentMCM>=0) { - if (CompareString(tagName, "adcdac")) fDCSFEEObj->SetGainTableAdcdac(fCurrentROB, fCurrentMCM, fContent.Atoi()); - if (fCurrentADC>=0) { - if (CompareString(tagName, "fgfn")) fDCSFEEObj->SetGainTableFgfn(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi()); - if (CompareString(tagName, "fgan")) fDCSFEEObj->SetGainTableFgan(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi()); - } - } - } - if (fInsideRstate == 1) { - if (fCurrentROB>=0 && fCurrentMCM>=0) { - if (CompareString(tagName, "gsm")) fDCSFEEObj->SetMCMGlobalState(fCurrentROB, fCurrentMCM, fContent.Atoi()); - if (CompareString(tagName, "ni")) fDCSFEEObj->SetMCMStateNI(fCurrentROB, fCurrentMCM, fContent.Atoi()); - if (CompareString(tagName, "ev")) fDCSFEEObj->SetMCMEventCnt(fCurrentROB, fCurrentMCM, fContent.Atoi()); - if (CompareString(tagName, "ptrg")) fDCSFEEObj->SetMCMPtCnt(fCurrentROB, fCurrentMCM, fContent.Atoi()); - } - } - } - - if (fSystem == kInsideGTU) { -// if (CompareString(tagName, "run")) { -// fDCSGTUObj->SetSORFlag(TString(fContent(fContent.Length()-1,1)).Atoi()); -// fDCSGTUObj->SetRunNumber(TString(fContent(0,fContent.Length()-2)).Atoi()); -// } -// if (CompareString(tagName, "serial")) fDCSGTUObj->SetSerial(fContent.Atoi()); - if (CompareString(tagName, "board_info")) { - fInsideBoardInfo = false; - if (fLevel1Tag == kInsideTgu) fDCSGTUObj->GetTgu()->SetBoardInfo(fBoardInfo); - if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideSmu) fSegment->SetSmuBoardInfo(fBoardInfo); - if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideTmu) fTmu->SetBoardInfo(fBoardInfo); - } - if (CompareString(tagName, "dnr")) fDCSGTUObj->SetDNR(fContent.Atoi()); - if (CompareString(tagName, "tgu")) fLevel1Tag = kInsideNone; - if (CompareString(tagName(0,tagName.Length()-3), "segment")) { - fDCSGTUObj->GetSegmentArray()->Add(fSegment); - fLevel1Tag = kInsideNone; - } - if (fLevel1Tag == kInsideTgu) { - if (CompareString(tagName, "ctp_opc")) fDCSGTUObj->GetTgu()->GetCtpOpcArray()->Add(fCtpOpc); - } else if (fLevel1Tag == kInsideSegment) { - if (CompareString(tagName, "smu")) fLevel2Tag = kInsideNone; - if (CompareString(tagName(0,3), "tmu")) { - fSegment->GetTmuArray()->Add(fTmu); - fLevel2Tag = kInsideNone; - } - } - } - - - // store pretrigger informations - if (fSystem == kInsidePTR) { - // no informations available yet - } -// // store GTU informations -// if (fSystem == kInsideGTU) { -// if (CompareString(tagName, "SMMASK")) -// fHandlerStatus = fDCSGTUObj->SetSMMask(fContent); -// if (CompareString(tagName, "LINKMASK")) -// fHandlerStatus = fDCSGTUObj->SetLinkMask(fCurrentSM, fCurrentStack, fContent); -// if (CompareString(tagName, "STMASK")) -// fDCSGTUObj->SetStackMaskBit(fCurrentSM, fCurrentStack, fContent.Atoi()); -// } -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnCharacters(const char *characters) -{ - // copy the the text content of an XML element - fContent = characters; -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnComment(const char* /*text*/) const -{ - // comments within the XML file are ignored -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnWarning(const char *text) -{ - // process warnings here - AliInfo(Form("Warning: %s",text)); -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnError(const char *text) -{ - // process errors here - AliError(Form("Error: %s",text)); -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnFatalError(const char *text) -{ - // process fatal errors here - AliError(Form("Fatal error: %s",text)); // use AliFatal? -} - -//_____________________________________________________________________________ -void AliTRDSaxHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) const -{ - // process character data blocks here - // not implemented and should not be used here -} - +/************************************************************************* + * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * + * * * + * * Author: The ALICE Off-line Project. * + * * Contributors are mentioned in the code where appropriate. * + * * * + * * Permission to use, copy, modify and distribute this software and its * + * * documentation strictly for non-commercial purposes is hereby granted * + * * without fee, provided that the above copyright notice appears in all * + * * copies and that both the copyright notice and this permission notice * + * * appear in the supporting documentation. The authors make no claims * + * * about the suitability of this software for any purpose. It is * + * * provided "as is" without express or implied warranty. * + * **************************************************************************/ + +/* $Id: AliTRDSaxHandler.cxx 26327 2008-06-02 15:36:18Z cblume $ */ + +//////////////////////////////////////////////////////////////////////////// +// // +// The SAX XML file handler used in the TRD preprocessor // +// // +// Authors: // +// Frederick Kramer (kramer@ikf.uni-frankfurt.de) // +// Thomas Bird (thomas@thomasbird.com) // +// // +//////////////////////////////////////////////////////////////////////////// + + +#include +#include +#include "AliLog.h" +#include "Cal/AliTRDCalDCSGTUTgu.h" +#include "Cal/AliTRDCalDCSPTR.h" + +#include +#include +#include "AliTRDSaxHandler.h" +#include "AliTRDgeometry.h" +#include "AliTRDcalibDB.h" +#include "Cal/AliTRDCalDCSv2.h" +#include "Cal/AliTRDCalDCSFEEv2.h" +#include "Cal/AliTRDCalDCSGTU.h" + +ClassImp(AliTRDSaxHandler) + +//_____________________________________________________________________________ +AliTRDSaxHandler::AliTRDSaxHandler() + :TObject() + ,fHandlerStatus(0) + ,fNDCSPTR(0) + ,fNDCSGTU(0) + ,fFEEArr(new TObjArray(540)) + ,fPTRArr(new TObjArray(6)) + ,fSystem(0) + ,fInsideRstate(0) + ,fCurrentSM(0) + ,fCurrentStack(0) + ,fCurrentROB(-1) + ,fCurrentMCM(-1) + ,fCurrentADC(-1) + ,fContent(0) + ,fDCSFEEObj(0) + ,fDCSPTRObj(0) + ,fDCSGTUObj(0) + ,fCalDCSObj(new AliTRDCalDCSv2()) + ,fLevel1Tag(-2) + ,fLevel2Tag(-2) + ,fInsideBoardInfo(false) + ,fTmu(0) + ,fCtpOpc(0) + ,fSegment(0) + ,fBoardInfo(0) +{ + // AliTRDSaxHandler default constructor + fFEEArr->SetOwner(); + fPTRArr->SetOwner(); +} + +//_____________________________________________________________________________ +AliTRDSaxHandler::AliTRDSaxHandler(const AliTRDSaxHandler &sh) + :TObject(sh) + ,fHandlerStatus(0) + ,fNDCSPTR(0) + ,fNDCSGTU(0) + ,fFEEArr(0) + ,fPTRArr(0) + ,fSystem(0) + ,fInsideRstate(0) + ,fCurrentSM(0) + ,fCurrentStack(0) + ,fCurrentROB(-1) + ,fCurrentMCM(-1) + ,fCurrentADC(-1) + ,fContent(0) + ,fDCSFEEObj(0) + ,fDCSPTRObj(0) + ,fDCSGTUObj(0) + ,fCalDCSObj(0) + ,fLevel1Tag(-2) + ,fLevel2Tag(-2) + ,fInsideBoardInfo(false) + ,fTmu(0) + ,fCtpOpc(0) + ,fSegment(0) + ,fBoardInfo(0) +{ + // AliTRDSaxHandler copy constructor +} + +//_____________________________________________________________________________ +AliTRDSaxHandler &AliTRDSaxHandler::operator=(const AliTRDSaxHandler &sh) +{ + // Assignment operator + if (&sh == this) return *this; + new (this) AliTRDSaxHandler(sh); + return *this; +} + +//_____________________________________________________________________________ +AliTRDSaxHandler::~AliTRDSaxHandler() +{ + // AliTRDSaxHandler destructor + if (fFEEArr) { + delete fFEEArr; + fFEEArr = 0x0; + } + if (fPTRArr) { + delete fPTRArr; + fPTRArr = 0x0; + } + if (fDCSGTUObj) { + delete fDCSGTUObj; + fDCSGTUObj = 0x0; + } + if (fCalDCSObj) { + delete fCalDCSObj; + fCalDCSObj = 0x0; + } +} + +//_____________________________________________________________________________ +AliTRDCalDCSv2* AliTRDSaxHandler::GetCalDCSObj() +{ + // put the arrays in the global calibration object and return this + + fCalDCSObj->SetFEEArr(fFEEArr); + fCalDCSObj->SetPTRArr(fPTRArr); + fCalDCSObj->SetGTUObj(fDCSGTUObj); + return fCalDCSObj; +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::ParseConfigName(TString cfgname) const +{ + // Evaluate the config name and set the individual parameters + + // protect + if (!AliTRDcalibDB::Instance()) { + AliError("Could not create an instance of AliTRDcalibDB!"); + return; + } + + TString cfg = "", par = "", pars = ""; + Int_t nPar = AliTRDcalibDB::Instance()->GetNumberOfParsDCS(cfgname); + if (nPar == 0) return; + + for (Int_t i=1; i<=nPar; i++) { + // Get the configuration parameter + AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, 0, cfg); + + // Set Parameters accordingly + if (i == AliTRDcalibDB::kFltrSet) fDCSFEEObj->SetFilterType(cfg); + if (i == AliTRDcalibDB::kTrigSet) fDCSFEEObj->SetTriggerSetup(cfg); + if (i == AliTRDcalibDB::kAddOpti) fDCSFEEObj->SetAddOptions(cfg); + if (i == AliTRDcalibDB::kTimebin) fDCSFEEObj->SetNumberOfTimeBins(AliTRDcalibDB::Instance()->ExtractTimeBinsFromString(cfg)); + if (i == AliTRDcalibDB::kReadout) fDCSFEEObj->SetReadoutParam(cfg); + if (i == AliTRDcalibDB::kTrkMode) fDCSFEEObj->SetTrackletMode(cfg); + + // Set options of parameters accordingly + Int_t nOpt = AliTRDcalibDB::Instance()->GetNumberOfOptsDCS(cfgname, i); + if (nOpt == 0) continue; + + for (Int_t j=1; j<=nOpt; j++) { + // Get the parameter option + AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, j, par); + + if (i == AliTRDcalibDB::kReadout) { + if (par.EqualTo("stat")) fDCSFEEObj->SetFastStatNoise(1); + } + if (i == AliTRDcalibDB::kTrkMode) { + if ((j > 1) && (par.Length() != 0)) pars += "-"; + pars += par; + } + // SetTCFilterWeight, SetTCFilterShortDecPar, SetTCFilterLongDecPar might be filled here, too + // SetSingleHitThres, SetThreePadClustThres, SetSelectiveNoZS, SetTestPattern might be filled here, too + } + + fDCSFEEObj->SetTrackletDef(pars); + } +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnStartDocument() const +{ + // if something should happen right at the beginning of the + // XML document, this must happen here +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnEndDocument() const +{ + // if something should happen at the end of the XML document + // this must be done here +} + +//_____________________________________________________________________________ +bool AliTRDSaxHandler::CompareString(TString str, const char *str2) +{ + // compre strings, ignoring case + // returns true if they are the same, else false + return !(bool)str.CompareTo(str2,str.kIgnoreCase); +} + + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnStartElement(const char *name, const TList *attributes) +{ + // when a new XML element is found, it is processed here + fContent = ""; // Technically

This is ok but would be a problem here

+ Int_t dcsId = 0; + TString tagName = name; + TString dcsTitle = ""; + + // set the current system if necessary + if (CompareString(tagName, "FEE")) fSystem = kInsideFEE; + if (CompareString(tagName, "PTR")) fSystem = kInsidePTR; + if (CompareString(tagName, "GTU")) { + fSystem = kInsideGTU; + fDCSGTUObj = new AliTRDCalDCSGTU(tagName,tagName); + } + + if (fSystem == kInsideGTU) { + if (CompareString(tagName, "tgu")) fLevel1Tag = kInsideTgu; + if (CompareString(tagName, "board_info")) { + fInsideBoardInfo = true; + fBoardInfo = new AliTRDCalDCSGTUBoardInfo(tagName,tagName); + } + if (CompareString(tagName(0,tagName.Length()-3), "segment")) { + fSegment = new AliTRDCalDCSGTUSegment(tagName,tagName); + fSegment->SetId(TString(tagName(8,2)).Atoi()); + fLevel1Tag = kInsideSegment; + } + if (fLevel1Tag == kInsideTgu) { + if (CompareString(tagName, "ctp_opc")) fCtpOpc = new AliTRDCalDCSGTUCtpOpc(tagName,tagName); + } else if (fLevel1Tag == kInsideSegment) { + if (CompareString(tagName, "smu")) { + fLevel2Tag = kInsideSmu; + } + if (CompareString(tagName(0,3), "tmu")) { + fTmu = new AliTRDCalDCSGTUTmu(tagName,tagName); + fTmu->SetId(TString(tagName(4,2)).Atoi()); + fLevel2Tag = kInsideTmu; + } + } + } else if (fSystem == kInsideFEE) { + if (CompareString(tagName, "gaintbl")) fLevel1Tag = kInsideGainTable; + } + + // set if we are inside rstate + // (in principle not necessary - just to be more safe against stupid tags) + if (CompareString(tagName, "rstate")) fInsideRstate = 1; + + // get the attributes of the element + TXMLAttr *attr; + TIter next(attributes); + while ((attr = (TXMLAttr*) next())) { + TString attribName = attr->GetName(); + TString attribValue = attr->GetValue(); + if (fSystem == kInsideFEE && fLevel1Tag == kInsideNone) { + if (CompareString(attribName, "id") && CompareString(tagName, "DCS")) { + dcsTitle = name; + dcsId = atoi(attr->GetValue()); + } + if (CompareString(attribName, "roc") && CompareString(tagName, "ack")) { + if (attribValue.Atoi() != fDCSFEEObj->GetDCSid()) + fDCSFEEObj->SetStatusBit(4); // consistency check + } + if (CompareString(attribName, "rob") && CompareString(tagName, "ro-board") && (fInsideRstate == 1)) { + fCurrentROB = attribValue.Atoi(); + } + if (CompareString(attribName, "mcm") && CompareString(tagName, "m") && (fInsideRstate == 1)) { + fCurrentMCM = attribValue.Atoi(); + } + if (CompareString(attribName, "sm") && CompareString(tagName, "DCS")) { + fCurrentSM = attribValue.Atoi(); // only for GTU/PTR + } + if (CompareString(attribName, "id") && CompareString(tagName, "STACK")) {// hmmmm not exist? + fCurrentStack = attribValue.Atoi(); // only for GTU/PTR + } + } else if (fSystem == kInsideFEE && fLevel1Tag == kInsideGainTable) { + if (CompareString(tagName, "roc") && CompareString(attribName, "type")) fDCSFEEObj->SetGainTableRocType(attribValue); + if (CompareString(tagName, "roc") && CompareString(attribName, "serial")) fDCSFEEObj->SetGainTableRocSerial(attribValue.Atoi()); + if (CompareString(tagName, "mcm") && CompareString(attribName, "rob")) fCurrentROB = attribValue.Atoi(); + if (CompareString(tagName, "mcm") && CompareString(attribName, "pos")) fCurrentMCM = attribValue.Atoi(); + if (CompareString(tagName, "adc") && CompareString(attribName, "id")) fCurrentADC = attribValue.Atoi(); + + } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideNone) { + if (CompareString(tagName, "publisher")) { + if (CompareString(attribName, "at")) fDCSGTUObj->SetSORFlag(attribValue.Atoi()); + if (CompareString(attribName, "serial")) fDCSGTUObj->SetSerial(attribValue.Atoi()); + if (CompareString(attribName, "runnr")) fDCSGTUObj->SetRunNumber(attribValue.Atoi()); + } + } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideTgu) { + if (CompareString(tagName, "from")) { + if (CompareString(attribName, "at")) fDCSGTUObj->GetTgu()->SetFromSORFlag(attribValue.Atoi()); + if (CompareString(attribName, "runnr")) fDCSGTUObj->GetTgu()->SetFromRunNumber(attribValue.Atoi()); + if (CompareString(attribName, "child")) fDCSGTUObj->GetTgu()->SetFromChild(attribValue.Atoi()); + } + if (CompareString(tagName, "segmentmask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetSegmentMask(attribValue); + if (CompareString(tagName, "busymask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetBusyMask(attribValue); + if (CompareString(tagName, "contribmask") && CompareString(attribName, "value")) fDCSGTUObj->GetTgu()->SetContribMask(attribValue); + + if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "id")) fCtpOpc->SetId(attribValue.Atoi()); + if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "opcode")) fCtpOpc->SetOpcode(attribValue.Atoi()); + if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "direction")) fCtpOpc->SetDirection(attribValue.Atoi()); + if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "inverted")) fCtpOpc->SetInverted(attribValue.Atoi()); + if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "delay")) fCtpOpc->SetDelay(attribValue.Atoi()); + if (CompareString(tagName, "ctp_opc") && CompareString(attribName, "connected")) fCtpOpc->SetConnected(attribValue.Atoi()); + + } else if (fSystem == kInsideGTU && fLevel1Tag == kInsideSegment) { + if (CompareString(tagName, "from")) { + if (CompareString(attribName, "at")) fSegment->SetFromSORFlag(attribValue.Atoi()); + if (CompareString(attribName, "runnr")) fSegment->SetFromRunNumber(attribValue.Atoi()); + if (CompareString(attribName, "child")) fSegment->SetFromChild(attribValue.Atoi()); + } + if (fLevel2Tag == kInsideSmu) { + if (CompareString(tagName, "stackmask") && CompareString(attribName, "value")) fSegment->SetSmuStackMask(attribValue); + if (CompareString(tagName, "tracklets") && CompareString(attribName, "send")) fSegment->SetSmuTracklets(attribValue.Atoi()); + if (CompareString(tagName, "tracks") && CompareString(attribName, "send")) fSegment->SetSmuTracks(attribValue.Atoi()); + if (CompareString(tagName, "idelay") && CompareString(attribName, "value")) fSegment->SetSmuIdelay(attribValue.Atoi()); + if (CompareString(tagName, "ttc_emulator") && CompareString(attribName, "enable")) fSegment->SetSmuTtcEmulatorEnable(attribValue.Atoi()); + + if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_low")) + fSegment->SetSmuTriggerWindowL1Low(attribValue.Atoi()); + if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l1_high")) + fSegment->SetSmuTriggerWindowL1High(attribValue.Atoi()); + if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_low")) + fSegment->SetSmuTriggerWindowL2Low(attribValue.Atoi()); + if (CompareString(tagName, "trigger_window") && CompareString(attribName, "l2_high")) + fSegment->SetSmuTriggerWindowL2High(attribValue.Atoi()); + + } else if (fLevel2Tag == kInsideTmu) { + if (CompareString(tagName, "linkmask") && CompareString(attribName, "value")) fTmu->SetLinkMask(attribValue); + if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "enable")) + fTmu->SetPatternGeneratorEnable(attribValue.Atoi()); + if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "datawords")) + fTmu->SetPatternGeneratorDataWords(attribValue.Atoi()); + if (CompareString(tagName, "pattern_generator") && CompareString(attribName, "trackletwords")) + fTmu->SetPatternGeneratorTrackletWords(attribValue.Atoi()); + } + } + + if (fInsideBoardInfo) { + if (CompareString(tagName, "board_info") && CompareString(attribName, "board_id")) fBoardInfo->SetId(attribValue); + if (CompareString(tagName, "board_info") && CompareString(attribName, "design_type")) fBoardInfo->SetType(attribValue.Atoi()); + if (CompareString(tagName, "board_info") && CompareString(attribName, "pci_ga")) fBoardInfo->SetPciGa(attribValue.Atoi()); + if (CompareString(tagName, "hardware") && CompareString(attribName, "date")) fBoardInfo->SetHwDate(attribValue); + if (CompareString(tagName, "hardware") && CompareString(attribName, "rev")) fBoardInfo->SetHwRev(attribValue.Atoi()); + if (CompareString(tagName, "hardware") && CompareString(attribName, "clean")) fBoardInfo->SetHwClean(attribValue.Atoi()); + if (CompareString(tagName, "software") && CompareString(attribName, "date")) fBoardInfo->SetSwDate(attribValue); + if (CompareString(tagName, "software") && CompareString(attribName, "rev")) fBoardInfo->SetSwRev(attribValue.Atoi()); + if (CompareString(tagName, "software") && CompareString(attribName, "clean")) fBoardInfo->SetSwClean(attribValue.Atoi()); + } + } + + // if there is a new DCS element put it in the correct array + if (CompareString(tagName, "DCS")) { + if (fSystem == kInsideFEE) { + fDCSFEEObj = new AliTRDCalDCSFEEv2(); + fDCSFEEObj->SetDCSid(dcsId); + } + if (fSystem == kInsidePTR) { +// fDCSPTRObj = new AliTRDCalDCSPTR(name,dcsTitle); +// fDCSPTRObj->SetDCSid(dcsId); + } + if (fSystem == kInsideGTU) { +// fDCSGTUObj = new AliTRDCalDCSGTU(name,dcsTitle); +// fDCSGTUObj->SetDCSid(dcsId); + } + } +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnEndElement(const char *name) +{ + // do everything that needs to be done when an end tag of an element is found + TString tagName = name; + + // if done with this DCS board, put it in the correct array + // no check for necessary since this check is done during XML validation + if (CompareString(tagName, "DCS")) { + if (fSystem == kInsideFEE) { + Int_t detID = 0; + if (fDCSFEEObj->GetStatusBit() == 0) { + // if there were no errors (StatusBit==0) the following should match + detID = fDCSFEEObj->GetDCSid(); + AliTRDgeometry aliGeo; + Int_t calDetID = aliGeo.GetDetector(fDCSFEEObj->GetLayer(), + fDCSFEEObj->GetStack(), + fDCSFEEObj->GetSM()); + if (detID != calDetID) fDCSFEEObj->SetStatusBit(4); + } else { + // if the dcs board didn't properly respond, don't compare + detID = fDCSFEEObj->GetDCSid(); + } + fFEEArr->AddAt(fDCSFEEObj,detID); + } + if (fSystem == kInsidePTR) { + fPTRArr->AddAt(fDCSPTRObj,fNDCSPTR); + fNDCSPTR++; + } +// if (fSystem == kInsideGTU) { +// fGTUArr->AddAt(fDCSGTUObj,fNDCSGTU); +// fNDCSGTU++; +// } + fCurrentSM = 99; // 99 for no SM set + fDCSFEEObj = 0; // just to be sure + return; + } + + // done with this stack? + if (CompareString(tagName, "STACK")) {// TODO: errrrm ???? always 99? + fCurrentStack = 99; // 99 for no stack set + } + + // outside of rstate again? + if (CompareString(tagName, "rstate")) { + fInsideRstate = 0; + fCurrentROB = -1; + fCurrentMCM = -1; + } + if (CompareString(tagName, "ro-board")) fCurrentROB = -1; + + // store informations of the FEE DCS-Board + if (fSystem == kInsideFEE) { + if (CompareString(tagName, "DNR")) fDCSFEEObj->SetStatusBit(fContent.Atoi()); + if (CompareString(tagName, "CFGTAG")) fDCSFEEObj->SetConfigTag(fContent.Atoi()); + if (CompareString(tagName, "CFGVRSN")) fDCSFEEObj->SetConfigVersion(fContent); + if (CompareString(tagName, "SM-ID")) fDCSFEEObj->SetSM(fContent.Atoi()); + if (CompareString(tagName, "STACK-ID")) fDCSFEEObj->SetStack(fContent.Atoi()); + if (CompareString(tagName, "LAYER-ID")) fDCSFEEObj->SetLayer(fContent.Atoi()); + if (CompareString(tagName, "CFGNME")) { + fDCSFEEObj->SetConfigName(fContent); + ParseConfigName(fContent); + } + if (CompareString(tagName, "gaintbl")) { + fLevel1Tag = kInsideNone; + fCurrentROB = -1; + fCurrentMCM = -1; + fCurrentADC = -1; + } + if (fLevel1Tag == kInsideGainTable) { + if (CompareString(tagName, "name")) fDCSFEEObj->SetGainTableName(fContent); + if (CompareString(tagName, "desc")) fDCSFEEObj->SetGainTableDesc(fContent); + if (fCurrentROB>=0 && fCurrentMCM>=0) { + if (CompareString(tagName, "adcdac")) fDCSFEEObj->SetGainTableAdcdac(fCurrentROB, fCurrentMCM, fContent.Atoi()); + if (fCurrentADC>=0) { + if (CompareString(tagName, "fgfn")) fDCSFEEObj->SetGainTableFgfn(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi()); + if (CompareString(tagName, "fgan")) fDCSFEEObj->SetGainTableFgan(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi()); + } + } + } + if (fInsideRstate == 1) { + if (fCurrentROB>=0 && fCurrentMCM>=0) { + if (CompareString(tagName, "gsm")) fDCSFEEObj->SetMCMGlobalState(fCurrentROB, fCurrentMCM, fContent.Atoi()); + if (CompareString(tagName, "ni")) fDCSFEEObj->SetMCMStateNI(fCurrentROB, fCurrentMCM, fContent.Atoi()); + if (CompareString(tagName, "ev")) fDCSFEEObj->SetMCMEventCnt(fCurrentROB, fCurrentMCM, fContent.Atoi()); + if (CompareString(tagName, "ptrg")) fDCSFEEObj->SetMCMPtCnt(fCurrentROB, fCurrentMCM, fContent.Atoi()); + } + } + } + + if (fSystem == kInsideGTU) { +// if (CompareString(tagName, "run")) { +// fDCSGTUObj->SetSORFlag(TString(fContent(fContent.Length()-1,1)).Atoi()); +// fDCSGTUObj->SetRunNumber(TString(fContent(0,fContent.Length()-2)).Atoi()); +// } +// if (CompareString(tagName, "serial")) fDCSGTUObj->SetSerial(fContent.Atoi()); + if (CompareString(tagName, "board_info")) { + fInsideBoardInfo = false; + if (fLevel1Tag == kInsideTgu) fDCSGTUObj->GetTgu()->SetBoardInfo(fBoardInfo); + if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideSmu) fSegment->SetSmuBoardInfo(fBoardInfo); + if (fLevel1Tag == kInsideSegment && fLevel2Tag == kInsideTmu) fTmu->SetBoardInfo(fBoardInfo); + } + if (CompareString(tagName, "dnr")) fDCSGTUObj->SetDNR(fContent.Atoi()); + if (CompareString(tagName, "tgu")) fLevel1Tag = kInsideNone; + if (CompareString(tagName(0,tagName.Length()-3), "segment")) { + fDCSGTUObj->GetSegmentArray()->Add(fSegment); + fLevel1Tag = kInsideNone; + } + if (fLevel1Tag == kInsideTgu) { + if (CompareString(tagName, "ctp_opc")) fDCSGTUObj->GetTgu()->GetCtpOpcArray()->Add(fCtpOpc); + } else if (fLevel1Tag == kInsideSegment) { + if (CompareString(tagName, "smu")) fLevel2Tag = kInsideNone; + if (CompareString(tagName(0,3), "tmu")) { + fSegment->GetTmuArray()->Add(fTmu); + fLevel2Tag = kInsideNone; + } + } + } + + + // store pretrigger informations + if (fSystem == kInsidePTR) { + // no informations available yet + } +// // store GTU informations +// if (fSystem == kInsideGTU) { +// if (CompareString(tagName, "SMMASK")) +// fHandlerStatus = fDCSGTUObj->SetSMMask(fContent); +// if (CompareString(tagName, "LINKMASK")) +// fHandlerStatus = fDCSGTUObj->SetLinkMask(fCurrentSM, fCurrentStack, fContent); +// if (CompareString(tagName, "STMASK")) +// fDCSGTUObj->SetStackMaskBit(fCurrentSM, fCurrentStack, fContent.Atoi()); +// } +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnCharacters(const char *characters) +{ + // copy the the text content of an XML element + fContent = characters; +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnComment(const char* /*text*/) const +{ + // comments within the XML file are ignored +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnWarning(const char *text) +{ + // process warnings here + AliInfo(Form("Warning: %s",text)); +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnError(const char *text) +{ + // process errors here + AliError(Form("Error: %s",text)); +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnFatalError(const char *text) +{ + // process fatal errors here + AliError(Form("Fatal error: %s",text)); // use AliFatal? +} + +//_____________________________________________________________________________ +void AliTRDSaxHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/) const +{ + // process character data blocks here + // not implemented and should not be used here +} + diff --git a/TRD/AliTRDarrayDictionary.h b/TRD/AliTRDarrayDictionary.h index 54d9916ac18..769c3155ed1 100644 --- a/TRD/AliTRDarrayDictionary.h +++ b/TRD/AliTRDarrayDictionary.h @@ -1,58 +1,58 @@ -#ifndef ALITRDARRAYDICTIONARY_H -#define ALITRDARRAYDICTIONARY_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: AliTRDarrayDictionary.h 23387 2008-01-17 17:25:16Z cblume $ */ - -/////////////////////////////////////////////////// -// // -// Container Class for Dictionary Info // -// // -/////////////////////////////////////////////////// - -#include - -class AliTRDarrayDictionary: public TObject -{ - - public: - - AliTRDarrayDictionary(); - AliTRDarrayDictionary(Int_t nrow, Int_t ncol, Int_t ntime); - AliTRDarrayDictionary(const AliTRDarrayDictionary &a); - ~AliTRDarrayDictionary(); - AliTRDarrayDictionary &operator=(const AliTRDarrayDictionary &a); - - void Allocate(Int_t nrow, Int_t ncol, Int_t ntime); - void SetNdet(Int_t ndet) {fNdet=ndet;}; - Int_t GetNdet() const {return fNdet;}; - void SetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime, Int_t value) - {fDictionary[(nrow*fNumberOfChannels+ncol)*fNtime+ntime]=value;}; - Int_t GetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime) const - {return fDictionary[(nrow*fNumberOfChannels+ncol)*fNtime+ntime];}; - Int_t GetDim() const {return fNDdim;}; - void Compress(); - void Expand(); - void Reset(); - Int_t GetData(Int_t nrow, Int_t ncol, Int_t ntime) const; - void SetData(Int_t nrow, Int_t ncol, Int_t ntime, Int_t value); - static void CreateLut(); - Bool_t WasExpandCalled() const {return fFlag;}; - - protected: - - Int_t fNdet; //ID number of the chamber - Int_t fNrow; //Number of rows - Int_t fNcol; //Number of columns - Int_t fNumberOfChannels; // Number of MCM channels per row - Int_t fNtime; //Number of time bins - Int_t fNDdim; //Dimension of the Dictionary array - Int_t* fDictionary; //[fNDdim] //Pointer to integers array - Bool_t fFlag; //! Has Expand() being called before? - static Short_t *fgLutPadNumbering; // [fNcol] Look Up Table - - ClassDef(AliTRDarrayDictionary,7) //Dictionary container class - -}; -#endif +#ifndef ALITRDARRAYDICTIONARY_H +#define ALITRDARRAYDICTIONARY_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: AliTRDarrayDictionary.h 23387 2008-01-17 17:25:16Z cblume $ */ + +/////////////////////////////////////////////////// +// // +// Container Class for Dictionary Info // +// // +/////////////////////////////////////////////////// + +#include + +class AliTRDarrayDictionary: public TObject +{ + + public: + + AliTRDarrayDictionary(); + AliTRDarrayDictionary(Int_t nrow, Int_t ncol, Int_t ntime); + AliTRDarrayDictionary(const AliTRDarrayDictionary &a); + ~AliTRDarrayDictionary(); + AliTRDarrayDictionary &operator=(const AliTRDarrayDictionary &a); + + void Allocate(Int_t nrow, Int_t ncol, Int_t ntime); + void SetNdet(Int_t ndet) {fNdet=ndet;}; + Int_t GetNdet() const {return fNdet;}; + void SetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime, Int_t value) + {fDictionary[(nrow*fNumberOfChannels+ncol)*fNtime+ntime]=value;}; + Int_t GetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime) const + {return fDictionary[(nrow*fNumberOfChannels+ncol)*fNtime+ntime];}; + Int_t GetDim() const {return fNDdim;}; + void Compress(); + void Expand(); + void Reset(); + Int_t GetData(Int_t nrow, Int_t ncol, Int_t ntime) const; + void SetData(Int_t nrow, Int_t ncol, Int_t ntime, Int_t value); + static void CreateLut(); + Bool_t WasExpandCalled() const {return fFlag;}; + + protected: + + Int_t fNdet; //ID number of the chamber + Int_t fNrow; //Number of rows + Int_t fNcol; //Number of columns + Int_t fNumberOfChannels; // Number of MCM channels per row + Int_t fNtime; //Number of time bins + Int_t fNDdim; //Dimension of the Dictionary array + Int_t* fDictionary; //[fNDdim] //Pointer to integers array + Bool_t fFlag; //! Has Expand() being called before? + static Short_t *fgLutPadNumbering; // [fNcol] Look Up Table + + ClassDef(AliTRDarrayDictionary,7) //Dictionary container class + +}; +#endif diff --git a/TRD/AliTRDtrackingSector.cxx b/TRD/AliTRDtrackingSector.cxx index 6b7419f7065..2145cb2b37e 100644 --- a/TRD/AliTRDtrackingSector.cxx +++ b/TRD/AliTRDtrackingSector.cxx @@ -1,176 +1,176 @@ -/************************************************************************** -* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * -* * -* Author: The ALICE Off-line Project. * -* Contributors are mentioned in the code where appropriate. * -* * -* Permission to use, copy, modify and distribute this software and its * -* documentation strictly for non-commercial purposes is hereby granted * -* without fee, provided that the above copyright notice appears in all * -* copies and that both the copyright notice and this permission notice * -* appear in the supporting documentation. The authors make no claims * -* about the suitability of this software for any purpose. It is * -* provided "as is" without express or implied warranty. * -**************************************************************************/ - -/* $Id: AliTRDtrackingSector.cxx 23810 2008-02-08 09:00:27Z hristov $ */ - -/////////////////////////////////////////////////////////////////////////////// -// // -// Tracking data container for one sector // -// // -// Authors: // -// Alex Bercuci // -// Markus Fasel // -// // -/////////////////////////////////////////////////////////////////////////////// - -#include "AliTRDReconstructor.h" -#include "AliTRDtrackingSector.h" -#include "AliTRDtrackingChamber.h" - - -ClassImp(AliTRDtrackingSector) - -//_____________________________________________________________________________ -AliTRDtrackingSector::AliTRDtrackingSector() - :fSector(-1) - ,fN(0) - ,fGeom(NULL) -{ - // Default constructor - - memset(fChamber, 0, AliTRDgeometry::kNdets*sizeof(AliTRDtrackingChamber*)); - memset(fStack, 0, AliTRDgeometry::kNlayer*sizeof(AliTRDtrackingChamber*)); - memset(fIndex, -1, AliTRDgeometry::kNdets*sizeof(Char_t)); - memset(fX0, 0, AliTRDgeometry::kNlayer*sizeof(Float_t)); -} - -//_____________________________________________________________________________ -AliTRDtrackingSector::AliTRDtrackingSector(AliTRDgeometry *geo, Int_t gs) - :fSector(gs) - ,fN(0) - ,fGeom(geo) -{ - // - // AliTRDtrackingSector Constructor - // - - memset(fChamber, 0, AliTRDgeometry::kNdets*sizeof(AliTRDtrackingChamber*)); - memset(fStack, 0, AliTRDgeometry::kNlayer*sizeof(AliTRDtrackingChamber*)); - memset(fIndex, -1, AliTRDgeometry::kNdets*sizeof(Char_t)); - memset(fX0, 0, AliTRDgeometry::kNlayer*sizeof(Float_t)); -} - - -//_____________________________________________________________________________ -void AliTRDtrackingSector::Init(const AliTRDReconstructor *rec) -{ -// Steer building of tracking chambers and build tracking sector. -// Propagate radial position information (calibration/alignment aware) from chambers to sector level -// - - AliTRDchamberTimeBin *tb = NULL; - AliTRDtrackingChamber **tc = &fChamber[0]; - for(Int_t ic = 0; (icGetTB(itb))) continue; - tb->SetReconstructor(rec); - } - (*tc)->Build(fGeom, rec->IsHLT()); - } - - Int_t nl; - for(int il=0; ilGetX(); - nl++; - } - if(!nl){ - //printf("Could not estimate radial position of plane %d in sector %d.\n", ip, fSector); - continue; - } - fX0[il] /= Float_t(nl); - } -} - - - -//_____________________________________________________________________________ -void AliTRDtrackingSector::Clear(const Option_t *opt) -{ -// Reset counters and steer chamber clear - - AliTRDtrackingChamber **tc = &fChamber[0]; - for(Int_t ich=0; ichClear(opt); - delete (*tc); (*tc) = NULL; // I would avoid - } - memset(fIndex, -1, AliTRDgeometry::kNdets*sizeof(Char_t)); - fN = 0; -} - -//_____________________________________________________________________________ -AliTRDtrackingChamber* AliTRDtrackingSector::GetChamber(Int_t stack, Int_t layer, Bool_t build) -{ -// Return chamber at position (stack, plane) in current -// sector or build a new one if it is not already created - - Int_t ch = stack*AliTRDgeometry::kNlayer + layer; - if(fIndex[ch] >= 0) return fChamber[Int_t(fIndex[ch])]; - else if(!build) return NULL; - - // CHAMBER HAS TO BE BUILD - Int_t rch = ch;do rch--; while(rch>=0 && fIndex[rch]<0); - fIndex[ch] = rch >=0 ? fIndex[rch]+1 : 0; - fN++; - - memmove(&fChamber[Int_t(fIndex[ch])+1], &fChamber[Int_t(fIndex[ch])], (AliTRDgeometry::kNdets-fIndex[ch]-1)*sizeof(void*)); - for(Int_t ic = ch+1; ic= 0 ? 1 : 0; - - AliTRDtrackingChamber *chmb = fChamber[Int_t(fIndex[ch])] = new AliTRDtrackingChamber(); - chmb->SetDetector(AliTRDgeometry::GetDetector(layer, stack, fSector)); - return chmb; -} - -//_____________________________________________________________________________ -AliTRDtrackingChamber** AliTRDtrackingSector::GetStack(Int_t stack) -{ -// Return chamber at position (stack, plane) in current -// sector or build a new one if it is not already created - - if(stack<0 || stack>=AliTRDgeometry::kNstack) return NULL; - - Int_t ich, n = 0; - for(int il=0; ilPrint(opt); - else printf("%2d[%2d] ", fIndex[ch], fIndex[ch]>=0 ? fChamber[Int_t(fIndex[ch])]->GetNClusters() : 0); - } - if(!opt) printf("\n"); - } - -} +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ + +/* $Id: AliTRDtrackingSector.cxx 23810 2008-02-08 09:00:27Z hristov $ */ + +/////////////////////////////////////////////////////////////////////////////// +// // +// Tracking data container for one sector // +// // +// Authors: // +// Alex Bercuci // +// Markus Fasel // +// // +/////////////////////////////////////////////////////////////////////////////// + +#include "AliTRDReconstructor.h" +#include "AliTRDtrackingSector.h" +#include "AliTRDtrackingChamber.h" + + +ClassImp(AliTRDtrackingSector) + +//_____________________________________________________________________________ +AliTRDtrackingSector::AliTRDtrackingSector() + :fSector(-1) + ,fN(0) + ,fGeom(NULL) +{ + // Default constructor + + memset(fChamber, 0, AliTRDgeometry::kNdets*sizeof(AliTRDtrackingChamber*)); + memset(fStack, 0, AliTRDgeometry::kNlayer*sizeof(AliTRDtrackingChamber*)); + memset(fIndex, -1, AliTRDgeometry::kNdets*sizeof(Char_t)); + memset(fX0, 0, AliTRDgeometry::kNlayer*sizeof(Float_t)); +} + +//_____________________________________________________________________________ +AliTRDtrackingSector::AliTRDtrackingSector(AliTRDgeometry *geo, Int_t gs) + :fSector(gs) + ,fN(0) + ,fGeom(geo) +{ + // + // AliTRDtrackingSector Constructor + // + + memset(fChamber, 0, AliTRDgeometry::kNdets*sizeof(AliTRDtrackingChamber*)); + memset(fStack, 0, AliTRDgeometry::kNlayer*sizeof(AliTRDtrackingChamber*)); + memset(fIndex, -1, AliTRDgeometry::kNdets*sizeof(Char_t)); + memset(fX0, 0, AliTRDgeometry::kNlayer*sizeof(Float_t)); +} + + +//_____________________________________________________________________________ +void AliTRDtrackingSector::Init(const AliTRDReconstructor *rec) +{ +// Steer building of tracking chambers and build tracking sector. +// Propagate radial position information (calibration/alignment aware) from chambers to sector level +// + + AliTRDchamberTimeBin *tb = NULL; + AliTRDtrackingChamber **tc = &fChamber[0]; + for(Int_t ic = 0; (icGetTB(itb))) continue; + tb->SetReconstructor(rec); + } + (*tc)->Build(fGeom, rec->IsHLT()); + } + + Int_t nl; + for(int il=0; ilGetX(); + nl++; + } + if(!nl){ + //printf("Could not estimate radial position of plane %d in sector %d.\n", ip, fSector); + continue; + } + fX0[il] /= Float_t(nl); + } +} + + + +//_____________________________________________________________________________ +void AliTRDtrackingSector::Clear(const Option_t *opt) +{ +// Reset counters and steer chamber clear + + AliTRDtrackingChamber **tc = &fChamber[0]; + for(Int_t ich=0; ichClear(opt); + delete (*tc); (*tc) = NULL; // I would avoid + } + memset(fIndex, -1, AliTRDgeometry::kNdets*sizeof(Char_t)); + fN = 0; +} + +//_____________________________________________________________________________ +AliTRDtrackingChamber* AliTRDtrackingSector::GetChamber(Int_t stack, Int_t layer, Bool_t build) +{ +// Return chamber at position (stack, plane) in current +// sector or build a new one if it is not already created + + Int_t ch = stack*AliTRDgeometry::kNlayer + layer; + if(fIndex[ch] >= 0) return fChamber[Int_t(fIndex[ch])]; + else if(!build) return NULL; + + // CHAMBER HAS TO BE BUILD + Int_t rch = ch;do rch--; while(rch>=0 && fIndex[rch]<0); + fIndex[ch] = rch >=0 ? fIndex[rch]+1 : 0; + fN++; + + memmove(&fChamber[Int_t(fIndex[ch])+1], &fChamber[Int_t(fIndex[ch])], (AliTRDgeometry::kNdets-fIndex[ch]-1)*sizeof(void*)); + for(Int_t ic = ch+1; ic= 0 ? 1 : 0; + + AliTRDtrackingChamber *chmb = fChamber[Int_t(fIndex[ch])] = new AliTRDtrackingChamber(); + chmb->SetDetector(AliTRDgeometry::GetDetector(layer, stack, fSector)); + return chmb; +} + +//_____________________________________________________________________________ +AliTRDtrackingChamber** AliTRDtrackingSector::GetStack(Int_t stack) +{ +// Return chamber at position (stack, plane) in current +// sector or build a new one if it is not already created + + if(stack<0 || stack>=AliTRDgeometry::kNstack) return NULL; + + Int_t ich, n = 0; + for(int il=0; ilPrint(opt); + else printf("%2d[%2d] ", fIndex[ch], fIndex[ch]>=0 ? fChamber[Int_t(fIndex[ch])]->GetNClusters() : 0); + } + if(!opt) printf("\n"); + } + +} diff --git a/TRD/AliTRDtrackletBase.h b/TRD/AliTRDtrackletBase.h index 4f9475e5bc5..c34ffbe920f 100644 --- a/TRD/AliTRDtrackletBase.h +++ b/TRD/AliTRDtrackletBase.h @@ -1,65 +1,65 @@ -#ifndef ALITRDTRACKLETBASE_H -#define ALITRDTRACKLETBASE_H - -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: AliTRDtrackletBase.h 26327 2008-06-02 15:36:18Z cblume $ */ - -//////////////////////////////////////////////////////////////////////////// -// // -// TRD tracklet // -// abstract base class for TRD tracklets // -// // -// Authors // -// Alex Bercuci (A.Bercuci@gsi.de) // -// Jochen Klein (jochen.klein@cern.ch) // -// // -//////////////////////////////////////////////////////////////////////////// - -#ifndef ROOT_TObject -#include "TObject.h" -#endif - -class AliTRDtrackletBase : public TObject { - - public: - - AliTRDtrackletBase() : TObject() {} - AliTRDtrackletBase(const AliTRDtrackletBase &o) : TObject(o) {} - virtual ~AliTRDtrackletBase() {} - - AliTRDtrackletBase& operator=(const AliTRDtrackletBase &o) { TObject::operator=(o); return *this; } - - virtual Bool_t CookPID() = 0; - - virtual Int_t GetDetector() const = 0 ; - virtual Int_t GetHCId() const { return 2 * GetDetector() + (GetYbin() > 0 ? 1 : 0); } - - virtual Float_t GetX() const = 0; - virtual Float_t GetY() const = 0; - virtual Float_t GetZ() const = 0; - virtual Float_t GetdYdX() const = 0; - virtual Float_t GetdZdX() const { return 0; } - - virtual Int_t GetdY() const = 0; // in units of 140um - virtual Int_t GetYbin() const = 0; // in units of 160um - virtual Int_t GetZbin() const = 0; // in pad length units - - virtual Double_t GetPID(Int_t is=-1) const = 0; - - virtual void LocalToGlobal(Float_t&, Float_t&, Float_t&, Float_t&) {} - - virtual void Print(Option_t * /*option=""*/) const {} - - virtual UInt_t GetTrackletWord() const = 0; - - virtual void SetDetector(Int_t id) = 0; - - protected: - - ClassDef(AliTRDtrackletBase, 1); // Base class for TRD on- and offline tracklets - -}; - -#endif +#ifndef ALITRDTRACKLETBASE_H +#define ALITRDTRACKLETBASE_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: AliTRDtrackletBase.h 26327 2008-06-02 15:36:18Z cblume $ */ + +//////////////////////////////////////////////////////////////////////////// +// // +// TRD tracklet // +// abstract base class for TRD tracklets // +// // +// Authors // +// Alex Bercuci (A.Bercuci@gsi.de) // +// Jochen Klein (jochen.klein@cern.ch) // +// // +//////////////////////////////////////////////////////////////////////////// + +#ifndef ROOT_TObject +#include "TObject.h" +#endif + +class AliTRDtrackletBase : public TObject { + + public: + + AliTRDtrackletBase() : TObject() {} + AliTRDtrackletBase(const AliTRDtrackletBase &o) : TObject(o) {} + virtual ~AliTRDtrackletBase() {} + + AliTRDtrackletBase& operator=(const AliTRDtrackletBase &o) { TObject::operator=(o); return *this; } + + virtual Bool_t CookPID() = 0; + + virtual Int_t GetDetector() const = 0 ; + virtual Int_t GetHCId() const { return 2 * GetDetector() + (GetYbin() > 0 ? 1 : 0); } + + virtual Float_t GetX() const = 0; + virtual Float_t GetY() const = 0; + virtual Float_t GetZ() const = 0; + virtual Float_t GetdYdX() const = 0; + virtual Float_t GetdZdX() const { return 0; } + + virtual Int_t GetdY() const = 0; // in units of 140um + virtual Int_t GetYbin() const = 0; // in units of 160um + virtual Int_t GetZbin() const = 0; // in pad length units + + virtual Double_t GetPID(Int_t is=-1) const = 0; + + virtual void LocalToGlobal(Float_t&, Float_t&, Float_t&, Float_t&) {} + + virtual void Print(Option_t * /*option=""*/) const {} + + virtual UInt_t GetTrackletWord() const = 0; + + virtual void SetDetector(Int_t id) = 0; + + protected: + + ClassDef(AliTRDtrackletBase, 1); // Base class for TRD on- and offline tracklets + +}; + +#endif diff --git a/TRD/Cal/AliTRDCalDCSFEE.cxx b/TRD/Cal/AliTRDCalDCSFEE.cxx index 1d1a4c42ba8..53b4b547002 100644 --- a/TRD/Cal/AliTRDCalDCSFEE.cxx +++ b/TRD/Cal/AliTRDCalDCSFEE.cxx @@ -1,135 +1,135 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -/* $Id: AliTRDCalDCSFEE.cxx 18952 2007-06-08 11:36:12Z cblume $ */ - -/////////////////////////////////////////////////////////////////////////////// -// // -// TRD calibration class for TRD DCS FEE configuration parameters // -// // -/////////////////////////////////////////////////////////////////////////////// - -// fStatusBit: -// 0: no errors for that ROC -// 1: ROC sent invalid or corrupted data. -// 2: ROC was not in state CONFIGURED or STANDBY_INIT (most probably it was in STANDBY) -// 3: No new data received from that ROC. -// 4: DCS id from XML attributes and and the one calculated from SM, S, L do not match -// 5: ROC has not responded at all, most probably it was off. - -#include "AliTRDCalDCSFEE.h" - -ClassImp(AliTRDCalDCSFEE) - -//_____________________________________________________________________________ -AliTRDCalDCSFEE::AliTRDCalDCSFEE() - :TNamed() - ,fStatusBit(0) - ,fDCSID(-1) - ,fSM(-1) - ,fStack(-1) - ,fLayer(-1) - ,fNumberOfTimeBins(-1) - ,fConfigTag(-1) - ,fSingleHitThres(-1) - ,fThrPdClsThres(-1) - ,fSelNoZS(-1) - ,fTCFilterWeight(-1) - ,fTCFilterShortDecPar(-1) - ,fTCFilterLongDecPar(-1) - ,fFastStatNoise(-1) - ,fGainTableRocType("") - ,fGainTableRocSerial(0) - ,fFilterType(0) - ,fReadoutParam(0) - ,fTestPattern(0) - ,fTrackletMode(0) - ,fTrackletDef(0) - ,fTriggerSetup(0) - ,fAddOptions(0) - ,fConfigName(0) - ,fConfigVersion(0) - ,fGainTableName("") - ,fGainTableDesc("") -{ - // - // AliTRDCalDCSFEE default constructor - // - for(Int_t i=0; i and and the one calculated from SM, S, L do not match +// 5: ROC has not responded at all, most probably it was off. + +#include "AliTRDCalDCSFEE.h" + +ClassImp(AliTRDCalDCSFEE) + +//_____________________________________________________________________________ +AliTRDCalDCSFEE::AliTRDCalDCSFEE() + :TNamed() + ,fStatusBit(0) + ,fDCSID(-1) + ,fSM(-1) + ,fStack(-1) + ,fLayer(-1) + ,fNumberOfTimeBins(-1) + ,fConfigTag(-1) + ,fSingleHitThres(-1) + ,fThrPdClsThres(-1) + ,fSelNoZS(-1) + ,fTCFilterWeight(-1) + ,fTCFilterShortDecPar(-1) + ,fTCFilterLongDecPar(-1) + ,fFastStatNoise(-1) + ,fGainTableRocType("") + ,fGainTableRocSerial(0) + ,fFilterType(0) + ,fReadoutParam(0) + ,fTestPattern(0) + ,fTrackletMode(0) + ,fTrackletDef(0) + ,fTriggerSetup(0) + ,fAddOptions(0) + ,fConfigName(0) + ,fConfigVersion(0) + ,fGainTableName("") + ,fGainTableDesc("") +{ + // + // AliTRDCalDCSFEE default constructor + // + for(Int_t i=0; i and and the one calculated from SM, S, L do not match -// 5: ROC has not responded at all, most probably it was off. - -#include "AliTRDCalDCSFEEv2.h" - -ClassImp(AliTRDCalDCSFEEv2) - -//_____________________________________________________________________________ -AliTRDCalDCSFEEv2::AliTRDCalDCSFEEv2() - :TObject() - ,fStatusBit(0) - ,fSM(-1) - ,fStack(-1) - ,fLayer(-1) - ,fGainTableRocSerial(0) - ,fDCSID(-1) - ,fNumberOfTimeBins(-1) - ,fConfigTag(-1) - ,fSingleHitThres(-1) - ,fThrPdClsThres(-1) - ,fSelNoZS(-1) - ,fTCFilterWeight(-1) - ,fTCFilterShortDecPar(-1) - ,fTCFilterLongDecPar(-1) - ,fFastStatNoise(-1) - ,fGainTableRocType("") - ,fFilterType("") - ,fReadoutParam("") - ,fTestPattern("") - ,fTrackletMode("") - ,fTrackletDef("") - ,fTriggerSetup("") - ,fAddOptions("") - ,fConfigName("") - ,fConfigVersion("") - ,fGainTableName("") - ,fGainTableDesc("") -{ - // - // AliTRDCalDCSFEEv2 default constructor - // - for(Int_t i=0; i<(Int_t)fgkROB; i++) { - for(Int_t j=0; j<(Int_t)fgkMCM; j++) { - fRStateGSM[i][j] = -1; - fRStateNI[i][j] = -1; - fRStateEV[i][j] = -1; - fRStatePTRG[i][j] = -1; - fGainTableAdcdac[i][j] = -1; - for(Int_t k=0; k<(Int_t)fgkADC; k++) { - fGainTableFgfn[i][j][k] = -1; - fGainTableFgan[i][j][k] = -1; - } - } - } -} - - -//_____________________________________________________________________________ -AliTRDCalDCSFEEv2::AliTRDCalDCSFEEv2(const AliTRDCalDCSFEEv2 &c) - :TObject(c) - ,fStatusBit(c.fStatusBit) - ,fSM(c.fSM) - ,fStack(c.fStack) - ,fLayer(c.fLayer) - ,fGainTableRocSerial(c.fGainTableRocSerial) - ,fDCSID(c.fDCSID) - ,fNumberOfTimeBins(c.fNumberOfTimeBins) - ,fConfigTag(c.fConfigTag) - ,fSingleHitThres(c.fSingleHitThres) - ,fThrPdClsThres(c.fThrPdClsThres) - ,fSelNoZS(c.fSelNoZS) - ,fTCFilterWeight(c.fTCFilterWeight) - ,fTCFilterShortDecPar(c.fTCFilterShortDecPar) - ,fTCFilterLongDecPar(c.fTCFilterLongDecPar) - ,fFastStatNoise(c.fFastStatNoise) - ,fGainTableRocType(c.fGainTableRocType) - ,fFilterType(c.fFilterType) - ,fReadoutParam(c.fReadoutParam) - ,fTestPattern(c.fTestPattern) - ,fTrackletMode(c.fTrackletMode) - ,fTrackletDef(c.fTrackletDef) - ,fTriggerSetup(c.fTriggerSetup) - ,fAddOptions(c.fAddOptions) - ,fConfigName(c.fConfigName) - ,fConfigVersion(c.fConfigVersion) - ,fGainTableName(c.fGainTableName) - ,fGainTableDesc(c.fGainTableDesc) -{ - // - // AliTRDCalDCSFEEv2 copy constructor - // - for(Int_t i=0; i<(Int_t)fgkROB; i++) { - for(Int_t j=0; j<(Int_t)fgkMCM; j++) { - fRStateGSM[i][j] = c.fRStateGSM[i][j]; - fRStateNI[i][j] = c.fRStateNI[i][j]; - fRStateEV[i][j] = c.fRStateEV[i][j]; - fRStatePTRG[i][j] = c.fRStatePTRG[i][j]; - fGainTableAdcdac[i][j] = c.fGainTableAdcdac[i][j]; - for(Int_t k=0; k<(Int_t)fgkADC; k++) { - fGainTableFgfn[i][j][k] = c.fGainTableFgfn[i][j][k]; - fGainTableFgan[i][j][k] = c.fGainTableFgan[i][j][k]; - } - } - } -} - - -//_____________________________________________________________________________ -AliTRDCalDCSFEEv2 &AliTRDCalDCSFEEv2::operator=(const AliTRDCalDCSFEEv2 &c) -{ - // - // Assignment operator - // - if (&c == this) return *this; - - new (this) AliTRDCalDCSFEEv2(c); - return *this; -} - +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id: AliTRDCalDCSFEEv2.cxx 18952 2007-06-08 11:36:12Z cblume $ */ + +/////////////////////////////////////////////////////////////////////////////// +// // +// TRD calibration class for TRD DCS FEE configuration parameters // +// // +/////////////////////////////////////////////////////////////////////////////// + +// fStatusBit: +// 0: no errors for that ROC +// 1: ROC sent invalid or corrupted data. +// 2: ROC was not in state CONFIGURED or STANDBY_INIT (most probably it was in STANDBY) +// 3: No new data received from that ROC. +// 4: DCS id from XML attributes and and the one calculated from SM, S, L do not match +// 5: ROC has not responded at all, most probably it was off. + +#include "AliTRDCalDCSFEEv2.h" + +ClassImp(AliTRDCalDCSFEEv2) + +//_____________________________________________________________________________ +AliTRDCalDCSFEEv2::AliTRDCalDCSFEEv2() + :TObject() + ,fStatusBit(0) + ,fSM(-1) + ,fStack(-1) + ,fLayer(-1) + ,fGainTableRocSerial(0) + ,fDCSID(-1) + ,fNumberOfTimeBins(-1) + ,fConfigTag(-1) + ,fSingleHitThres(-1) + ,fThrPdClsThres(-1) + ,fSelNoZS(-1) + ,fTCFilterWeight(-1) + ,fTCFilterShortDecPar(-1) + ,fTCFilterLongDecPar(-1) + ,fFastStatNoise(-1) + ,fGainTableRocType("") + ,fFilterType("") + ,fReadoutParam("") + ,fTestPattern("") + ,fTrackletMode("") + ,fTrackletDef("") + ,fTriggerSetup("") + ,fAddOptions("") + ,fConfigName("") + ,fConfigVersion("") + ,fGainTableName("") + ,fGainTableDesc("") +{ + // + // AliTRDCalDCSFEEv2 default constructor + // + for(Int_t i=0; i<(Int_t)fgkROB; i++) { + for(Int_t j=0; j<(Int_t)fgkMCM; j++) { + fRStateGSM[i][j] = -1; + fRStateNI[i][j] = -1; + fRStateEV[i][j] = -1; + fRStatePTRG[i][j] = -1; + fGainTableAdcdac[i][j] = -1; + for(Int_t k=0; k<(Int_t)fgkADC; k++) { + fGainTableFgfn[i][j][k] = -1; + fGainTableFgan[i][j][k] = -1; + } + } + } +} + + +//_____________________________________________________________________________ +AliTRDCalDCSFEEv2::AliTRDCalDCSFEEv2(const AliTRDCalDCSFEEv2 &c) + :TObject(c) + ,fStatusBit(c.fStatusBit) + ,fSM(c.fSM) + ,fStack(c.fStack) + ,fLayer(c.fLayer) + ,fGainTableRocSerial(c.fGainTableRocSerial) + ,fDCSID(c.fDCSID) + ,fNumberOfTimeBins(c.fNumberOfTimeBins) + ,fConfigTag(c.fConfigTag) + ,fSingleHitThres(c.fSingleHitThres) + ,fThrPdClsThres(c.fThrPdClsThres) + ,fSelNoZS(c.fSelNoZS) + ,fTCFilterWeight(c.fTCFilterWeight) + ,fTCFilterShortDecPar(c.fTCFilterShortDecPar) + ,fTCFilterLongDecPar(c.fTCFilterLongDecPar) + ,fFastStatNoise(c.fFastStatNoise) + ,fGainTableRocType(c.fGainTableRocType) + ,fFilterType(c.fFilterType) + ,fReadoutParam(c.fReadoutParam) + ,fTestPattern(c.fTestPattern) + ,fTrackletMode(c.fTrackletMode) + ,fTrackletDef(c.fTrackletDef) + ,fTriggerSetup(c.fTriggerSetup) + ,fAddOptions(c.fAddOptions) + ,fConfigName(c.fConfigName) + ,fConfigVersion(c.fConfigVersion) + ,fGainTableName(c.fGainTableName) + ,fGainTableDesc(c.fGainTableDesc) +{ + // + // AliTRDCalDCSFEEv2 copy constructor + // + for(Int_t i=0; i<(Int_t)fgkROB; i++) { + for(Int_t j=0; j<(Int_t)fgkMCM; j++) { + fRStateGSM[i][j] = c.fRStateGSM[i][j]; + fRStateNI[i][j] = c.fRStateNI[i][j]; + fRStateEV[i][j] = c.fRStateEV[i][j]; + fRStatePTRG[i][j] = c.fRStatePTRG[i][j]; + fGainTableAdcdac[i][j] = c.fGainTableAdcdac[i][j]; + for(Int_t k=0; k<(Int_t)fgkADC; k++) { + fGainTableFgfn[i][j][k] = c.fGainTableFgfn[i][j][k]; + fGainTableFgan[i][j][k] = c.fGainTableFgan[i][j][k]; + } + } + } +} + + +//_____________________________________________________________________________ +AliTRDCalDCSFEEv2 &AliTRDCalDCSFEEv2::operator=(const AliTRDCalDCSFEEv2 &c) +{ + // + // Assignment operator + // + if (&c == this) return *this; + + new (this) AliTRDCalDCSFEEv2(c); + return *this; +} + diff --git a/TRD/Cal/AliTRDCalDCSFEEv2.h b/TRD/Cal/AliTRDCalDCSFEEv2.h index ac9b96ff126..a87ee66cd2c 100644 --- a/TRD/Cal/AliTRDCalDCSFEEv2.h +++ b/TRD/Cal/AliTRDCalDCSFEEv2.h @@ -1,141 +1,141 @@ -#ifndef ALITRDCALDCSFEEV2_H -#define ALITRDCALDCSFEEV2_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -/* $Id: AliTRDCalDCSFEEv2.h 18952 2007-06-08 11:36:12Z cblume $ */ - -/////////////////////////////////////////////////////////////////////////////// -// // -// TRD calibration class for FEE configuration parameters // -// // -/////////////////////////////////////////////////////////////////////////////// - -#include "TObject.h" -#include "TString.h" - -//class TString; - -class AliTRDCalDCSFEEv2 : public TObject { - - public: - - AliTRDCalDCSFEEv2(); - AliTRDCalDCSFEEv2(const AliTRDCalDCSFEEv2 &c); - virtual ~AliTRDCalDCSFEEv2() { }; - AliTRDCalDCSFEEv2 &operator=(const AliTRDCalDCSFEEv2 &c); - - void SetStatusBit(Int_t stbit) { fStatusBit = (Char_t)stbit; } - void SetDCSid(Int_t dcsid) { fDCSID = (Short_t)dcsid; } - void SetSM(Int_t smid) { fSM = (Char_t)smid; } - void SetStack(Int_t stid) { fStack = (Char_t)stid; } - void SetLayer(Int_t lyid) { fLayer = (Char_t)lyid; } - void SetNumberOfTimeBins(Int_t value) { fNumberOfTimeBins = (Short_t)value; } - void SetConfigTag(Int_t cfgt) { fConfigTag = (Short_t)cfgt; } - void SetSingleHitThres(Int_t sht) { fSingleHitThres = (Short_t)sht; } - void SetThreePadClustThres(Int_t tpct) { fThrPdClsThres = (Short_t)tpct; } - void SetSelectiveNoZS(Int_t snzs) { fSelNoZS = (Short_t)snzs; } - void SetFastStatNoise(Int_t fstn) { fFastStatNoise = (Short_t)fstn; } - void SetTCFilterWeight(Int_t tcfw) { fTCFilterWeight = (Short_t)tcfw; } - void SetTCFilterShortDecPar(Int_t sdp) { fTCFilterShortDecPar = (Short_t)sdp; } - void SetTCFilterLongDecPar(Int_t ldp) { fTCFilterLongDecPar = (Short_t)ldp; } - void SetGainTableRocSerial(Int_t gts) { fGainTableRocSerial = (UChar_t)gts; } - void SetFilterType(TString fity) { fFilterType = fity; } - void SetReadoutParam(TString rpar) { fReadoutParam = rpar; } - void SetTestPattern(TString tpat) { fTestPattern = tpat; } - void SetTrackletMode(TString tmde) { fTrackletMode = tmde; } - void SetTrackletDef(TString tdef) { fTrackletDef = tdef; } - void SetTriggerSetup(TString trse) { fTriggerSetup = trse; } - void SetAddOptions(TString adop) { fAddOptions = adop; } - void SetConfigName(TString cfgn) { fConfigName = cfgn; } - void SetConfigVersion(TString cfgv) { fConfigVersion = cfgv; } - void SetGainTableName(TString gt) { fGainTableName = gt; } - void SetGainTableDesc(TString gd) { fGainTableDesc = gd; } - void SetGainTableRocType(TString gr) { fGainTableRocType = gr; } - void SetMCMGlobalState(Int_t r,Int_t m,Int_t g) { fRStateGSM[r][m] = (Char_t)g; } - void SetMCMStateNI(Int_t r,Int_t m,Int_t v) { fRStateNI[r][m] = (Char_t)v; } - void SetMCMEventCnt(Int_t r,Int_t m,Int_t v) { fRStateEV[r][m] = v; } - void SetMCMPtCnt(Int_t r,Int_t m,Int_t v) { fRStatePTRG[r][m] = v; } - void SetGainTableAdcdac(Int_t r,Int_t m,Int_t v){ fGainTableAdcdac[r][m] = (Char_t)v; } - void SetGainTableFgfn(Int_t r,Int_t m,Int_t a,Int_t v) { fGainTableFgfn[r][m][a] = (Short_t)v; } - void SetGainTableFgan(Int_t r,Int_t m,Int_t a,Int_t v) { fGainTableFgan[r][m][a] = (Char_t)v; } - - Int_t GetStatusBit() const { return (Int_t)fStatusBit; } - Int_t GetDCSid() const { return (Int_t)fDCSID; } - Int_t GetSM() const { return (Int_t)fSM; } - Int_t GetStack() const { return (Int_t)fStack; } - Int_t GetLayer() const { return (Int_t)fLayer; } - Int_t GetNumberOfTimeBins() const { return (Int_t)fNumberOfTimeBins; } - Int_t GetConfigTag() const { return (Int_t)fConfigTag; } - Int_t GetSingleHitThres() const { return (Int_t)fSingleHitThres; } - Int_t GetThreePadClustThres() const { return (Int_t)fThrPdClsThres; } - Int_t GetSelectiveNoZS() const { return (Int_t)fSelNoZS; } - Int_t GetTCFilterWeight() const { return (Int_t)fTCFilterWeight; } - Int_t GetTCFilterShortDecPar() const { return (Int_t)fTCFilterShortDecPar; } - Int_t GetTCFilterLongDecPar() const { return (Int_t)fTCFilterLongDecPar; } - Int_t GetFastStatNoise() const { return (Int_t)fFastStatNoise; } - Int_t GetGainTableRocSerial() const { return (Int_t)fGainTableRocSerial; } - TString GetFilterType() const { return fFilterType; } - TString GetReadoutParam() const { return fReadoutParam; } - TString GetTestPattern() const { return fTestPattern; } - TString GetTrackletMode() const { return fTrackletMode; } - TString GetTrackletDef() const { return fTrackletDef; } - TString GetTriggerSetup() const { return fTriggerSetup; } - TString GetAddOptions() const { return fAddOptions; } - TString GetConfigName() const { return fConfigName; } - TString GetConfigVersion() const { return fConfigVersion; } - TString GetGainTableName() const { return fGainTableName; } - TString GetGainTableDesc() const { return fGainTableDesc; } - TString GetGainTableRocType() const { return fGainTableRocType; } - Int_t GetMCMGlobalState(Int_t r,Int_t m) const { return (Char_t)fRStateGSM[r][m]; } - Int_t GetMCMStateNI(Int_t r,Int_t m) const { return (Char_t)fRStateNI[r][m]; } - Int_t GetMCMEventCnt(Int_t r,Int_t m) const { return fRStateEV[r][m]; } - Int_t GetMCMPtCnt(Int_t r,Int_t m) const { return fRStatePTRG[r][m]; } - Int_t GetGainTableAdcdac(Int_t r,Int_t m) const { return (Int_t)fGainTableAdcdac[r][m]; } - Int_t GetGainTableFgfn(Int_t r,Int_t m,Int_t a) const { return (Int_t)fGainTableFgfn[r][m][a]; } - Int_t GetGainTableFgan(Int_t r,Int_t m,Int_t a) const { return (Int_t)fGainTableFgan[r][m][a]; } - - protected: - - static const Char_t fgkROB = 8; // Number of readout boards - static const Char_t fgkMCM = 18; // Number of MCMs - static const Char_t fgkADC = 21; // Number of ADC channels - - Char_t fStatusBit; // 0 if everything is OK, otherwise !=0 (see impl. file) - Char_t fSM; // the number of the supermode 0..17 - Char_t fStack; // the number of the stack 0..4 - Char_t fLayer; // the number of the layer 0..5 - Char_t fGainTableFgan[(Int_t)fgkROB][(Int_t)fgkMCM][(Int_t)fgkADC]; // array of gain table fgan values - Char_t fGainTableAdcdac[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of gain table adcdac values - Char_t fRStateGSM[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the global states of the MCMs - Char_t fRStateNI[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the network interface states of the MCMs - UChar_t fGainTableRocSerial; // the roc serial of the chamber from the gain table - Short_t fDCSID; // ID of the DCS-Board - Short_t fNumberOfTimeBins; // Number of timebins - Short_t fConfigTag; // Configuration tag - Short_t fSingleHitThres; // threshold of single hits (arg of readout param) - Short_t fThrPdClsThres; // threshold of 3-pad clusters (arg of readout param) - Short_t fSelNoZS; // write every fSelNoZS'th event without ZS - Short_t fTCFilterWeight; // tail cancellation filter weight - Short_t fTCFilterShortDecPar; // tail cancellation filter short decay parameter - Short_t fTCFilterLongDecPar; // tail cancellation filter long decay parameter - Short_t fFastStatNoise; // collect statistics for fast noise mode - Short_t fGainTableFgfn[(Int_t)fgkROB][(Int_t)fgkMCM][(Int_t)fgkADC]; // array of gain table fgfn values - Int_t fRStateEV[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the event counters of the MCMs - Int_t fRStatePTRG[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the pretrigger counters of the MCMs - TString fGainTableRocType; // the roc type from the gain table - TString fFilterType; // filter type (p, pgt, nf) - TString fReadoutParam; // readout parameter (zs, nozs, testpattern) - TString fTestPattern; // value of testpattern (for readout param) - TString fTrackletMode; // tracklet mode (trk, csmtrk, notrk) - TString fTrackletDef; // definition for tracklet mode trk - TString fTriggerSetup; // trigger setup (ptrg, autotrg, autol0) - TString fAddOptions; // additional options (nopm, nion) - TString fConfigName; // Configuration name - TString fConfigVersion; // Configuration version - TString fGainTableName; // the name of the gain table - TString fGainTableDesc; // the description of the gain table - - ClassDef(AliTRDCalDCSFEEv2,2) // TRD calibration class for TRD FEE parameters -}; -#endif +#ifndef ALITRDCALDCSFEEV2_H +#define ALITRDCALDCSFEEV2_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id: AliTRDCalDCSFEEv2.h 18952 2007-06-08 11:36:12Z cblume $ */ + +/////////////////////////////////////////////////////////////////////////////// +// // +// TRD calibration class for FEE configuration parameters // +// // +/////////////////////////////////////////////////////////////////////////////// + +#include "TObject.h" +#include "TString.h" + +//class TString; + +class AliTRDCalDCSFEEv2 : public TObject { + + public: + + AliTRDCalDCSFEEv2(); + AliTRDCalDCSFEEv2(const AliTRDCalDCSFEEv2 &c); + virtual ~AliTRDCalDCSFEEv2() { }; + AliTRDCalDCSFEEv2 &operator=(const AliTRDCalDCSFEEv2 &c); + + void SetStatusBit(Int_t stbit) { fStatusBit = (Char_t)stbit; } + void SetDCSid(Int_t dcsid) { fDCSID = (Short_t)dcsid; } + void SetSM(Int_t smid) { fSM = (Char_t)smid; } + void SetStack(Int_t stid) { fStack = (Char_t)stid; } + void SetLayer(Int_t lyid) { fLayer = (Char_t)lyid; } + void SetNumberOfTimeBins(Int_t value) { fNumberOfTimeBins = (Short_t)value; } + void SetConfigTag(Int_t cfgt) { fConfigTag = (Short_t)cfgt; } + void SetSingleHitThres(Int_t sht) { fSingleHitThres = (Short_t)sht; } + void SetThreePadClustThres(Int_t tpct) { fThrPdClsThres = (Short_t)tpct; } + void SetSelectiveNoZS(Int_t snzs) { fSelNoZS = (Short_t)snzs; } + void SetFastStatNoise(Int_t fstn) { fFastStatNoise = (Short_t)fstn; } + void SetTCFilterWeight(Int_t tcfw) { fTCFilterWeight = (Short_t)tcfw; } + void SetTCFilterShortDecPar(Int_t sdp) { fTCFilterShortDecPar = (Short_t)sdp; } + void SetTCFilterLongDecPar(Int_t ldp) { fTCFilterLongDecPar = (Short_t)ldp; } + void SetGainTableRocSerial(Int_t gts) { fGainTableRocSerial = (UChar_t)gts; } + void SetFilterType(TString fity) { fFilterType = fity; } + void SetReadoutParam(TString rpar) { fReadoutParam = rpar; } + void SetTestPattern(TString tpat) { fTestPattern = tpat; } + void SetTrackletMode(TString tmde) { fTrackletMode = tmde; } + void SetTrackletDef(TString tdef) { fTrackletDef = tdef; } + void SetTriggerSetup(TString trse) { fTriggerSetup = trse; } + void SetAddOptions(TString adop) { fAddOptions = adop; } + void SetConfigName(TString cfgn) { fConfigName = cfgn; } + void SetConfigVersion(TString cfgv) { fConfigVersion = cfgv; } + void SetGainTableName(TString gt) { fGainTableName = gt; } + void SetGainTableDesc(TString gd) { fGainTableDesc = gd; } + void SetGainTableRocType(TString gr) { fGainTableRocType = gr; } + void SetMCMGlobalState(Int_t r,Int_t m,Int_t g) { fRStateGSM[r][m] = (Char_t)g; } + void SetMCMStateNI(Int_t r,Int_t m,Int_t v) { fRStateNI[r][m] = (Char_t)v; } + void SetMCMEventCnt(Int_t r,Int_t m,Int_t v) { fRStateEV[r][m] = v; } + void SetMCMPtCnt(Int_t r,Int_t m,Int_t v) { fRStatePTRG[r][m] = v; } + void SetGainTableAdcdac(Int_t r,Int_t m,Int_t v){ fGainTableAdcdac[r][m] = (Char_t)v; } + void SetGainTableFgfn(Int_t r,Int_t m,Int_t a,Int_t v) { fGainTableFgfn[r][m][a] = (Short_t)v; } + void SetGainTableFgan(Int_t r,Int_t m,Int_t a,Int_t v) { fGainTableFgan[r][m][a] = (Char_t)v; } + + Int_t GetStatusBit() const { return (Int_t)fStatusBit; } + Int_t GetDCSid() const { return (Int_t)fDCSID; } + Int_t GetSM() const { return (Int_t)fSM; } + Int_t GetStack() const { return (Int_t)fStack; } + Int_t GetLayer() const { return (Int_t)fLayer; } + Int_t GetNumberOfTimeBins() const { return (Int_t)fNumberOfTimeBins; } + Int_t GetConfigTag() const { return (Int_t)fConfigTag; } + Int_t GetSingleHitThres() const { return (Int_t)fSingleHitThres; } + Int_t GetThreePadClustThres() const { return (Int_t)fThrPdClsThres; } + Int_t GetSelectiveNoZS() const { return (Int_t)fSelNoZS; } + Int_t GetTCFilterWeight() const { return (Int_t)fTCFilterWeight; } + Int_t GetTCFilterShortDecPar() const { return (Int_t)fTCFilterShortDecPar; } + Int_t GetTCFilterLongDecPar() const { return (Int_t)fTCFilterLongDecPar; } + Int_t GetFastStatNoise() const { return (Int_t)fFastStatNoise; } + Int_t GetGainTableRocSerial() const { return (Int_t)fGainTableRocSerial; } + TString GetFilterType() const { return fFilterType; } + TString GetReadoutParam() const { return fReadoutParam; } + TString GetTestPattern() const { return fTestPattern; } + TString GetTrackletMode() const { return fTrackletMode; } + TString GetTrackletDef() const { return fTrackletDef; } + TString GetTriggerSetup() const { return fTriggerSetup; } + TString GetAddOptions() const { return fAddOptions; } + TString GetConfigName() const { return fConfigName; } + TString GetConfigVersion() const { return fConfigVersion; } + TString GetGainTableName() const { return fGainTableName; } + TString GetGainTableDesc() const { return fGainTableDesc; } + TString GetGainTableRocType() const { return fGainTableRocType; } + Int_t GetMCMGlobalState(Int_t r,Int_t m) const { return (Char_t)fRStateGSM[r][m]; } + Int_t GetMCMStateNI(Int_t r,Int_t m) const { return (Char_t)fRStateNI[r][m]; } + Int_t GetMCMEventCnt(Int_t r,Int_t m) const { return fRStateEV[r][m]; } + Int_t GetMCMPtCnt(Int_t r,Int_t m) const { return fRStatePTRG[r][m]; } + Int_t GetGainTableAdcdac(Int_t r,Int_t m) const { return (Int_t)fGainTableAdcdac[r][m]; } + Int_t GetGainTableFgfn(Int_t r,Int_t m,Int_t a) const { return (Int_t)fGainTableFgfn[r][m][a]; } + Int_t GetGainTableFgan(Int_t r,Int_t m,Int_t a) const { return (Int_t)fGainTableFgan[r][m][a]; } + + protected: + + static const Char_t fgkROB = 8; // Number of readout boards + static const Char_t fgkMCM = 18; // Number of MCMs + static const Char_t fgkADC = 21; // Number of ADC channels + + Char_t fStatusBit; // 0 if everything is OK, otherwise !=0 (see impl. file) + Char_t fSM; // the number of the supermode 0..17 + Char_t fStack; // the number of the stack 0..4 + Char_t fLayer; // the number of the layer 0..5 + Char_t fGainTableFgan[(Int_t)fgkROB][(Int_t)fgkMCM][(Int_t)fgkADC]; // array of gain table fgan values + Char_t fGainTableAdcdac[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of gain table adcdac values + Char_t fRStateGSM[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the global states of the MCMs + Char_t fRStateNI[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the network interface states of the MCMs + UChar_t fGainTableRocSerial; // the roc serial of the chamber from the gain table + Short_t fDCSID; // ID of the DCS-Board + Short_t fNumberOfTimeBins; // Number of timebins + Short_t fConfigTag; // Configuration tag + Short_t fSingleHitThres; // threshold of single hits (arg of readout param) + Short_t fThrPdClsThres; // threshold of 3-pad clusters (arg of readout param) + Short_t fSelNoZS; // write every fSelNoZS'th event without ZS + Short_t fTCFilterWeight; // tail cancellation filter weight + Short_t fTCFilterShortDecPar; // tail cancellation filter short decay parameter + Short_t fTCFilterLongDecPar; // tail cancellation filter long decay parameter + Short_t fFastStatNoise; // collect statistics for fast noise mode + Short_t fGainTableFgfn[(Int_t)fgkROB][(Int_t)fgkMCM][(Int_t)fgkADC]; // array of gain table fgfn values + Int_t fRStateEV[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the event counters of the MCMs + Int_t fRStatePTRG[(Int_t)fgkROB][(Int_t)fgkMCM]; // array of the pretrigger counters of the MCMs + TString fGainTableRocType; // the roc type from the gain table + TString fFilterType; // filter type (p, pgt, nf) + TString fReadoutParam; // readout parameter (zs, nozs, testpattern) + TString fTestPattern; // value of testpattern (for readout param) + TString fTrackletMode; // tracklet mode (trk, csmtrk, notrk) + TString fTrackletDef; // definition for tracklet mode trk + TString fTriggerSetup; // trigger setup (ptrg, autotrg, autol0) + TString fAddOptions; // additional options (nopm, nion) + TString fConfigName; // Configuration name + TString fConfigVersion; // Configuration version + TString fGainTableName; // the name of the gain table + TString fGainTableDesc; // the description of the gain table + + ClassDef(AliTRDCalDCSFEEv2,2) // TRD calibration class for TRD FEE parameters +}; +#endif diff --git a/TRD/Cal/AliTRDmakeRecoParamFirstPhysics.C b/TRD/Cal/AliTRDmakeRecoParamFirstPhysics.C index 6b8d0030a4d..74ef4e470cd 100644 --- a/TRD/Cal/AliTRDmakeRecoParamFirstPhysics.C +++ b/TRD/Cal/AliTRDmakeRecoParamFirstPhysics.C @@ -1,88 +1,88 @@ -//____________________________________________________ -void AliTRDmakeRecoParamFirstPhysics() -{ - AliCDBMetaData *metaData= new AliCDBMetaData(); - metaData->SetObjectClassName("TObjArray"); - metaData->SetResponsible("Alexandru Bercuci / Markus Fasel"); - metaData->SetBeamPeriod(1); - metaData->SetAliRootVersion("05-27-06b"); //root version - metaData->SetComment( - "Reconstruction parameters for low, high, cosmic and calibration runs.\n" - "Issue date 24th Feb 2011. TRD not updating tracks."); - AliCDBId id("TRD/Calib/RecoParam", 95352, AliCDBRunRange::Infinity()); - AliCDBManager *man = AliCDBManager::Instance(); - AliCDBStorage *gStorLoc = man->GetStorage("local://$ALICE_ROOT/OCDB"); - if (!gStorLoc) { - return; - } - gStorLoc->Put(CreateRecoParamObject(), id, metaData); - - return; -} - - -//____________________________________________________ -TObjArray* CreateRecoParamObject() -{ - TObjArray *recos = new TObjArray(5); - - AliTRDrecoParam *rec = 0x0; - Double_t cov[]={1., 1., 0., 0., 0.}; - recos->AddLast(rec = AliTRDrecoParam::GetLowFluxParam()); - rec->SetEventSpecie(AliRecoParam::kLowMult); - rec->SetNameTitle("Default", "TRD Default Reco Param"); - rec->SetNameTitle("LOW", "TRD Low Flux Reco Param"); - rec->SetRawStreamVersion("DEFAULT"); - rec->SetPIDmethod(AliTRDPIDResponse::kLQ1D); - rec->SetXenon(); - rec->SetVertexConstrained(); - rec->SetSysCovMatrix(cov); - rec->SetChi2YSlope(0.11853); - rec->SetChi2ZSlope(0.04527); - rec->SetChi2YCut(1.); - rec->SetPhiSlope(10.); //3.17954; - rec->SetMaxTheta(2.1445); - rec->SetMaxPhi(2.7475); - rec->SetNMeanClusters(12.89); - rec->SetNSigmaClusters(2.095); - rec->SetRoadzMultiplicator(3.); - rec->SetPtThreshold(0.2);//100.); - rec->SetStreamLevel(AliTRDrecoParam::kTracker, 1); - rec->SetAsDefault(); - - recos->AddLast(rec = AliTRDrecoParam::GetHighFluxParam()); - rec->SetEventSpecie(AliRecoParam::kHighMult); - rec->SetNameTitle("HIGH", "TRD High Flux Reco Param"); - rec->SetRawStreamVersion("DEFAULT"); - rec->SetPIDmethod(AliTRDPIDResponse::kLQ1D); - rec->SetXenon(); - rec->SetVertexConstrained(); - rec->SetSysCovMatrix(cov); - rec->SetChi2YSlope(0.11853); - rec->SetChi2ZSlope(0.04527); - rec->SetChi2YCut(1.); - rec->SetPhiSlope(10.); //3.17954; - rec->SetMaxTheta(2.1445); - rec->SetMaxPhi(2.7475); - rec->SetNMeanClusters(12.89); - rec->SetNSigmaClusters(2.095); - rec->SetPtThreshold(0.2);//100.); - rec->SetStreamLevel(AliTRDrecoParam::kTracker, 1); - - recos->AddLast(rec = AliTRDrecoParam::GetCosmicTestParam()); - rec->SetEventSpecie(AliRecoParam::kCosmic); - rec->SetNameTitle("COSMIC", "TRD Cosmic Reco Param"); - rec->SetRawStreamVersion("DEFAULT"); - rec->SetPIDmethod(AliTRDPIDResponse::kLQ1D); - rec->SetXenon(); - rec->SetPtThreshold(0.2); - rec->SetStreamLevel(AliTRDrecoParam::kTracker, 1); - - recos->AddLast(rec = AliTRDrecoParam::GetCosmicTestParam()); - rec->SetEventSpecie(AliRecoParam::kCalib); - rec->SetNameTitle("CALIBRATION", "TRD Calibration Reco Param"); - rec->SetRawStreamVersion("DEFAULT"); - rec->SetXenon(); - - return recos; -} +//____________________________________________________ +void AliTRDmakeRecoParamFirstPhysics() +{ + AliCDBMetaData *metaData= new AliCDBMetaData(); + metaData->SetObjectClassName("TObjArray"); + metaData->SetResponsible("Alexandru Bercuci / Markus Fasel"); + metaData->SetBeamPeriod(1); + metaData->SetAliRootVersion("05-27-06b"); //root version + metaData->SetComment( + "Reconstruction parameters for low, high, cosmic and calibration runs.\n" + "Issue date 24th Feb 2011. TRD not updating tracks."); + AliCDBId id("TRD/Calib/RecoParam", 95352, AliCDBRunRange::Infinity()); + AliCDBManager *man = AliCDBManager::Instance(); + AliCDBStorage *gStorLoc = man->GetStorage("local://$ALICE_ROOT/OCDB"); + if (!gStorLoc) { + return; + } + gStorLoc->Put(CreateRecoParamObject(), id, metaData); + + return; +} + + +//____________________________________________________ +TObjArray* CreateRecoParamObject() +{ + TObjArray *recos = new TObjArray(5); + + AliTRDrecoParam *rec = 0x0; + Double_t cov[]={1., 1., 0., 0., 0.}; + recos->AddLast(rec = AliTRDrecoParam::GetLowFluxParam()); + rec->SetEventSpecie(AliRecoParam::kLowMult); + rec->SetNameTitle("Default", "TRD Default Reco Param"); + rec->SetNameTitle("LOW", "TRD Low Flux Reco Param"); + rec->SetRawStreamVersion("DEFAULT"); + rec->SetPIDmethod(AliTRDPIDResponse::kLQ1D); + rec->SetXenon(); + rec->SetVertexConstrained(); + rec->SetSysCovMatrix(cov); + rec->SetChi2YSlope(0.11853); + rec->SetChi2ZSlope(0.04527); + rec->SetChi2YCut(1.); + rec->SetPhiSlope(10.); //3.17954; + rec->SetMaxTheta(2.1445); + rec->SetMaxPhi(2.7475); + rec->SetNMeanClusters(12.89); + rec->SetNSigmaClusters(2.095); + rec->SetRoadzMultiplicator(3.); + rec->SetPtThreshold(0.2);//100.); + rec->SetStreamLevel(AliTRDrecoParam::kTracker, 1); + rec->SetAsDefault(); + + recos->AddLast(rec = AliTRDrecoParam::GetHighFluxParam()); + rec->SetEventSpecie(AliRecoParam::kHighMult); + rec->SetNameTitle("HIGH", "TRD High Flux Reco Param"); + rec->SetRawStreamVersion("DEFAULT"); + rec->SetPIDmethod(AliTRDPIDResponse::kLQ1D); + rec->SetXenon(); + rec->SetVertexConstrained(); + rec->SetSysCovMatrix(cov); + rec->SetChi2YSlope(0.11853); + rec->SetChi2ZSlope(0.04527); + rec->SetChi2YCut(1.); + rec->SetPhiSlope(10.); //3.17954; + rec->SetMaxTheta(2.1445); + rec->SetMaxPhi(2.7475); + rec->SetNMeanClusters(12.89); + rec->SetNSigmaClusters(2.095); + rec->SetPtThreshold(0.2);//100.); + rec->SetStreamLevel(AliTRDrecoParam::kTracker, 1); + + recos->AddLast(rec = AliTRDrecoParam::GetCosmicTestParam()); + rec->SetEventSpecie(AliRecoParam::kCosmic); + rec->SetNameTitle("COSMIC", "TRD Cosmic Reco Param"); + rec->SetRawStreamVersion("DEFAULT"); + rec->SetPIDmethod(AliTRDPIDResponse::kLQ1D); + rec->SetXenon(); + rec->SetPtThreshold(0.2); + rec->SetStreamLevel(AliTRDrecoParam::kTracker, 1); + + recos->AddLast(rec = AliTRDrecoParam::GetCosmicTestParam()); + rec->SetEventSpecie(AliRecoParam::kCalib); + rec->SetNameTitle("CALIBRATION", "TRD Calibration Reco Param"); + rec->SetRawStreamVersion("DEFAULT"); + rec->SetXenon(); + + return recos; +} diff --git a/TRD/Cal/AliTRDmakeTrkDB.C b/TRD/Cal/AliTRDmakeTrkDB.C index 50ba824dd66..13ed334cac1 100644 --- a/TRD/Cal/AliTRDmakeTrkDB.C +++ b/TRD/Cal/AliTRDmakeTrkDB.C @@ -1,28 +1,28 @@ -//____________________________________________________ -void AliTRDmakeTrkDB(const Char_t *file) -{ - AliCDBManager *man = AliCDBManager::Instance(); - AliCDBStorage *gStorLoc = man->GetStorage("local://$ALICE_ROOT/OCDB"); - if (!gStorLoc) return; - - // Attach clusters likelihoods - AliCDBMetaData *metaData= new AliCDBMetaData(); - metaData->SetObjectClassName("TObjArray"); - metaData->SetResponsible("Alexandru Bercuci"); - metaData->SetBeamPeriod(1); - metaData->SetAliRootVersion("05-30-02"); //root version - metaData->SetComment( - "Likelihoods for Attach Cluster.\n" - " Tunned on p-p run 159580."); - AliCDBId id("TRD/Calib/TrkAttach", 151536, AliCDBRunRange::Infinity()); - AliTRDCalTrkAttach attach; - if(!attach.LoadReferences(file)) return; -// attach.SetNsgmDy(Int_t ns0, Int_t ns1); -// attach.SetLikeMinRelDecrease(Float_t p0, Float_t p1); -// attach.SetRClikeLimit(Float_t rc); - attach.SetScaleCov(5.); - gStorLoc->Put(&attach, id, metaData); - - return; -} - +//____________________________________________________ +void AliTRDmakeTrkDB(const Char_t *file) +{ + AliCDBManager *man = AliCDBManager::Instance(); + AliCDBStorage *gStorLoc = man->GetStorage("local://$ALICE_ROOT/OCDB"); + if (!gStorLoc) return; + + // Attach clusters likelihoods + AliCDBMetaData *metaData= new AliCDBMetaData(); + metaData->SetObjectClassName("TObjArray"); + metaData->SetResponsible("Alexandru Bercuci"); + metaData->SetBeamPeriod(1); + metaData->SetAliRootVersion("05-30-02"); //root version + metaData->SetComment( + "Likelihoods for Attach Cluster.\n" + " Tunned on p-p run 159580."); + AliCDBId id("TRD/Calib/TrkAttach", 151536, AliCDBRunRange::Infinity()); + AliTRDCalTrkAttach attach; + if(!attach.LoadReferences(file)) return; +// attach.SetNsgmDy(Int_t ns0, Int_t ns1); +// attach.SetLikeMinRelDecrease(Float_t p0, Float_t p1); +// attach.SetRClikeLimit(Float_t rc); + attach.SetScaleCov(5.); + gStorLoc->Put(&attach, id, metaData); + + return; +} + diff --git a/TRD/Cal/AliTRDplotNoiseBaseline.C b/TRD/Cal/AliTRDplotNoiseBaseline.C index c8d9755d47b..3db8f8798f9 100644 --- a/TRD/Cal/AliTRDplotNoiseBaseline.C +++ b/TRD/Cal/AliTRDplotNoiseBaseline.C @@ -1,159 +1,159 @@ -#if !defined( __CINT__) || defined(__MAKECINT__) - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#include "AliCDBManager.h" -#include "AliCDBStorage.h" -#include "AliCDBEntry.h" - - -#include "../TRD/AliTRDarrayF.h" -#include "../TRD/AliTRDCalibPadStatus.h" -#include "../TRD/Cal/AliTRDCalPadStatus.h" -#include "../TRD/Cal/AliTRDCalDet.h" -#include "../TRD/Cal/AliTRDCalPad.h" -#include "../TRD/Cal/AliTRDCalROC.h" -#include "../TRD/AliTRDcalibDB.h" - - -#endif - - -//void PlotNoiseBaseline(Int_t run, Int_t sm, Int_t det, const char * pathdatabase="local:///d/alice12/bailhache/TestShuttle/database/", const char * pathreferencefile="local:///d/alice12/bailhache/TestShuttle/reference") -//void PlotNoiseBaseline(Int_t run=34529, Int_t sm=0, Int_t det=0, const char * pathdatabase="alien://Folder=/alice/data/2008/LHC08b/OCDB/", const char * pathreferencedatabase="alien://Folder=/alice/data/2008/LHC08b/Reference/") -//void PlotNoiseBaseline(Int_t run=1, Int_t sm=0, Int_t det=0, const char * pathdatabase="local:///d/alice12/bailhache/AliAnalysisTask/v4-13-Head/SHUTTLE/TestShuttle/TestCDB/", const char * pathreferencedatabase="local:///d/alice12/bailhache/AliAnalysisTask/v4-13-Head/SHUTTLE/TestShuttle/TestReference/") -void AliTRDplotNoiseBaseline(Int_t run=34529, Int_t sm=0, Int_t det=0, const char * pathdatabase="alien://Folder=/alice/data/2008/LHC08b/OCDB/", const char * pathreferencedatabase="alien://Folder=/alice/data/2008/LHC08b/Reference/") -{ - - //TGrid::Connect("alien://",0,0,"t"); - - AliCDBManager *CDB = AliCDBManager::Instance(); - CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); - CDB->SetSpecificStorage("TRD/Calib/PadNoise",pathdatabase); - CDB->SetSpecificStorage("TRD/Calib/DetNoise",pathdatabase); - CDB->SetSpecificStorage("TRD/Calib/PadStatus",pathdatabase); - CDB->SetRun(run); - - AliTRDcalibDB *cal = AliTRDcalibDB::Instance(); - - //const AliTRDCalDet *u = cal->GetNoiseDet(); - - AliTRDCalDet *u = new AliTRDCalDet("u","u"); - for(Int_t k = 0; k < 540; k++){ - u->SetValue(k,10.0); - } - - //Style - //************************ - gStyle->SetPalette(1); - gStyle->SetOptStat(1111); - gStyle->SetPadBorderMode(0); - gStyle->SetCanvasColor(10); - gStyle->SetPadLeftMargin(0.13); - gStyle->SetPadRightMargin(0.13); - - //Build the Cal Pad - //******************************** - Int_t smi = sm*30; - AliTRDCalPad *ki = new AliTRDCalPad("testnoise","testnoise"); - for(Int_t k = 0; k < 540; k++){ - ki->SetCalROC(k,(AliTRDCalROC *) cal->GetNoiseROC(k)); - } - - // padstatus 2D - Int_t smn = (Int_t) det/30; - if((smn==0) || (smn==1) || (smn==2) || (smn==9) || (smn==10) || (smn==11)) smn = 1; - if((smn==3) || (smn==4) || (smn==5) || (smn==12) || (smn==13) || (smn==14)) smn = 2; - if((smn==6) || (smn==7) || (smn==8) || (smn==15) || (smn==16) || (smn==17)) smn = 3; - TString name("TRD/DAQData/PadStatus"); - name += smn; - //name += 3; - AliCDBEntry *entrypadstatus = AliCDBManager::Instance()->Get("TRD/Calib/PadStatus",run); - if(!entrypadstatus) return; - AliTRDCalPadStatus *lo = (AliTRDCalPadStatus *)entrypadstatus->GetObject(); - AliCDBEntry *entryo = AliCDBManager::Instance()->GetStorage(pathreferencedatabase)->Get(name, run); - if(!entryo) return; - AliTRDCalibPadStatus *calpad = (AliTRDCalibPadStatus *) entryo->GetObject(); - if(!calpad) return; - - - // Plot - //*********** - - - // noise 2D - TCanvas *cnoise = new TCanvas((const char*)"noise1",(const char*)"noise1",50,50,600,800); - cnoise->Divide(3,2); - cnoise->cd(1); - ((TH2F *)ki->MakeHisto2DSmPl(sm,0,u,0,0.0,3.5,-1))->Draw("colz"); - cnoise->cd(2); - ((TH2F *)ki->MakeHisto2DSmPl(sm,1,u,0,0.0,3.5,-1))->Draw("colz"); - cnoise->cd(3); - ((TH2F *)ki->MakeHisto2DSmPl(sm,2,u,0,0.0,3.5,-1))->Draw("colz"); - cnoise->cd(4); - ((TH2F *)ki->MakeHisto2DSmPl(sm,3,u,0,0.0,3.5,-1))->Draw("colz"); - cnoise->cd(5); - ((TH2F *)ki->MakeHisto2DSmPl(sm,4,u,0,0.0,3.5,-1))->Draw("colz"); - cnoise->cd(6); - ((TH2F *)ki->MakeHisto2DSmPl(sm,5,u,0,0.0,3.5,-1))->Draw("colz"); - - - // Pad Status - TCanvas *cpadstatus = new TCanvas((const char*)"padstatus",(const char*)"padstatus",50,50,600,800); - cpadstatus->Divide(3,2); - cpadstatus->cd(1); - ((TH2F *)lo->MakeHisto2DSmPl(sm,0))->Draw("colz"); - cpadstatus->cd(2); - ((TH2F *)lo->MakeHisto2DSmPl(sm,1))->Draw("colz"); - cpadstatus->cd(3); - ((TH2F *)lo->MakeHisto2DSmPl(sm,2))->Draw("colz"); - cpadstatus->cd(4); - ((TH2F *)lo->MakeHisto2DSmPl(sm,3))->Draw("colz"); - cpadstatus->cd(5); - ((TH2F *)lo->MakeHisto2DSmPl(sm,4))->Draw("colz"); - cpadstatus->cd(6); - ((TH2F *)lo->MakeHisto2DSmPl(sm,5))->Draw("colz"); - - - - // reference data - - TCanvas *cpoui = new TCanvas((const char*)"cpoui",(const char*)"cpoui",50,50,600,800); - cpoui->cd(); - ((TH2F *)calpad->GetHisto(det))->Draw("lego"); - - - AliTRDCalROC *ouip = calpad->GetCalRocMean(det); - TCanvas *cpouilo = new TCanvas((const char*)"cpouilo",(const char*)"cpouilo",50,50,600,800); - cpouilo->Divide(2,1); - cpouilo->cd(1); - ((TH1F *)ouip->MakeHisto1D(8.5,10.5,-1,10.0))->Draw(); - //((TH1F *)ouip->MakeHisto1D(0.85,1.05,-1))->Draw(); - cpouilo->cd(2); - ((TH2F *)ouip->MakeHisto2D(8.5,10.5,-1,10.0))->Draw("colz"); - //((TH2F *)ouip->MakeHisto2D(0.85,1.05,-1))->Draw("colz"); - - AliTRDCalROC *ouiphy = calpad->GetCalRocRMS(det); - TCanvas *cpouiloh = new TCanvas((const char*)"cpouiloh",(const char*)"cpouiloh",50,50,600,800); - cpouiloh->Divide(2,1); - cpouiloh->cd(1); - ((TH1F *)ouiphy->MakeHisto1D(0.1,4.5,-1,10.0))->Draw(); - //((TH1F *)ouiphy->MakeHisto1D(0.01,0.45,-1))->Draw(); - cpouiloh->cd(2); - ((TH2F *)ouiphy->MakeHisto2D(0.1,4.5,-1,10.0))->Draw("colz"); - //((TH2F *)ouiphy->MakeHisto2D(0.01,0.45,-1))->Draw("colz"); - - - - -} +#if !defined( __CINT__) || defined(__MAKECINT__) + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "AliCDBManager.h" +#include "AliCDBStorage.h" +#include "AliCDBEntry.h" + + +#include "../TRD/AliTRDarrayF.h" +#include "../TRD/AliTRDCalibPadStatus.h" +#include "../TRD/Cal/AliTRDCalPadStatus.h" +#include "../TRD/Cal/AliTRDCalDet.h" +#include "../TRD/Cal/AliTRDCalPad.h" +#include "../TRD/Cal/AliTRDCalROC.h" +#include "../TRD/AliTRDcalibDB.h" + + +#endif + + +//void PlotNoiseBaseline(Int_t run, Int_t sm, Int_t det, const char * pathdatabase="local:///d/alice12/bailhache/TestShuttle/database/", const char * pathreferencefile="local:///d/alice12/bailhache/TestShuttle/reference") +//void PlotNoiseBaseline(Int_t run=34529, Int_t sm=0, Int_t det=0, const char * pathdatabase="alien://Folder=/alice/data/2008/LHC08b/OCDB/", const char * pathreferencedatabase="alien://Folder=/alice/data/2008/LHC08b/Reference/") +//void PlotNoiseBaseline(Int_t run=1, Int_t sm=0, Int_t det=0, const char * pathdatabase="local:///d/alice12/bailhache/AliAnalysisTask/v4-13-Head/SHUTTLE/TestShuttle/TestCDB/", const char * pathreferencedatabase="local:///d/alice12/bailhache/AliAnalysisTask/v4-13-Head/SHUTTLE/TestShuttle/TestReference/") +void AliTRDplotNoiseBaseline(Int_t run=34529, Int_t sm=0, Int_t det=0, const char * pathdatabase="alien://Folder=/alice/data/2008/LHC08b/OCDB/", const char * pathreferencedatabase="alien://Folder=/alice/data/2008/LHC08b/Reference/") +{ + + //TGrid::Connect("alien://",0,0,"t"); + + AliCDBManager *CDB = AliCDBManager::Instance(); + CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + CDB->SetSpecificStorage("TRD/Calib/PadNoise",pathdatabase); + CDB->SetSpecificStorage("TRD/Calib/DetNoise",pathdatabase); + CDB->SetSpecificStorage("TRD/Calib/PadStatus",pathdatabase); + CDB->SetRun(run); + + AliTRDcalibDB *cal = AliTRDcalibDB::Instance(); + + //const AliTRDCalDet *u = cal->GetNoiseDet(); + + AliTRDCalDet *u = new AliTRDCalDet("u","u"); + for(Int_t k = 0; k < 540; k++){ + u->SetValue(k,10.0); + } + + //Style + //************************ + gStyle->SetPalette(1); + gStyle->SetOptStat(1111); + gStyle->SetPadBorderMode(0); + gStyle->SetCanvasColor(10); + gStyle->SetPadLeftMargin(0.13); + gStyle->SetPadRightMargin(0.13); + + //Build the Cal Pad + //******************************** + Int_t smi = sm*30; + AliTRDCalPad *ki = new AliTRDCalPad("testnoise","testnoise"); + for(Int_t k = 0; k < 540; k++){ + ki->SetCalROC(k,(AliTRDCalROC *) cal->GetNoiseROC(k)); + } + + // padstatus 2D + Int_t smn = (Int_t) det/30; + if((smn==0) || (smn==1) || (smn==2) || (smn==9) || (smn==10) || (smn==11)) smn = 1; + if((smn==3) || (smn==4) || (smn==5) || (smn==12) || (smn==13) || (smn==14)) smn = 2; + if((smn==6) || (smn==7) || (smn==8) || (smn==15) || (smn==16) || (smn==17)) smn = 3; + TString name("TRD/DAQData/PadStatus"); + name += smn; + //name += 3; + AliCDBEntry *entrypadstatus = AliCDBManager::Instance()->Get("TRD/Calib/PadStatus",run); + if(!entrypadstatus) return; + AliTRDCalPadStatus *lo = (AliTRDCalPadStatus *)entrypadstatus->GetObject(); + AliCDBEntry *entryo = AliCDBManager::Instance()->GetStorage(pathreferencedatabase)->Get(name, run); + if(!entryo) return; + AliTRDCalibPadStatus *calpad = (AliTRDCalibPadStatus *) entryo->GetObject(); + if(!calpad) return; + + + // Plot + //*********** + + + // noise 2D + TCanvas *cnoise = new TCanvas((const char*)"noise1",(const char*)"noise1",50,50,600,800); + cnoise->Divide(3,2); + cnoise->cd(1); + ((TH2F *)ki->MakeHisto2DSmPl(sm,0,u,0,0.0,3.5,-1))->Draw("colz"); + cnoise->cd(2); + ((TH2F *)ki->MakeHisto2DSmPl(sm,1,u,0,0.0,3.5,-1))->Draw("colz"); + cnoise->cd(3); + ((TH2F *)ki->MakeHisto2DSmPl(sm,2,u,0,0.0,3.5,-1))->Draw("colz"); + cnoise->cd(4); + ((TH2F *)ki->MakeHisto2DSmPl(sm,3,u,0,0.0,3.5,-1))->Draw("colz"); + cnoise->cd(5); + ((TH2F *)ki->MakeHisto2DSmPl(sm,4,u,0,0.0,3.5,-1))->Draw("colz"); + cnoise->cd(6); + ((TH2F *)ki->MakeHisto2DSmPl(sm,5,u,0,0.0,3.5,-1))->Draw("colz"); + + + // Pad Status + TCanvas *cpadstatus = new TCanvas((const char*)"padstatus",(const char*)"padstatus",50,50,600,800); + cpadstatus->Divide(3,2); + cpadstatus->cd(1); + ((TH2F *)lo->MakeHisto2DSmPl(sm,0))->Draw("colz"); + cpadstatus->cd(2); + ((TH2F *)lo->MakeHisto2DSmPl(sm,1))->Draw("colz"); + cpadstatus->cd(3); + ((TH2F *)lo->MakeHisto2DSmPl(sm,2))->Draw("colz"); + cpadstatus->cd(4); + ((TH2F *)lo->MakeHisto2DSmPl(sm,3))->Draw("colz"); + cpadstatus->cd(5); + ((TH2F *)lo->MakeHisto2DSmPl(sm,4))->Draw("colz"); + cpadstatus->cd(6); + ((TH2F *)lo->MakeHisto2DSmPl(sm,5))->Draw("colz"); + + + + // reference data + + TCanvas *cpoui = new TCanvas((const char*)"cpoui",(const char*)"cpoui",50,50,600,800); + cpoui->cd(); + ((TH2F *)calpad->GetHisto(det))->Draw("lego"); + + + AliTRDCalROC *ouip = calpad->GetCalRocMean(det); + TCanvas *cpouilo = new TCanvas((const char*)"cpouilo",(const char*)"cpouilo",50,50,600,800); + cpouilo->Divide(2,1); + cpouilo->cd(1); + ((TH1F *)ouip->MakeHisto1D(8.5,10.5,-1,10.0))->Draw(); + //((TH1F *)ouip->MakeHisto1D(0.85,1.05,-1))->Draw(); + cpouilo->cd(2); + ((TH2F *)ouip->MakeHisto2D(8.5,10.5,-1,10.0))->Draw("colz"); + //((TH2F *)ouip->MakeHisto2D(0.85,1.05,-1))->Draw("colz"); + + AliTRDCalROC *ouiphy = calpad->GetCalRocRMS(det); + TCanvas *cpouiloh = new TCanvas((const char*)"cpouiloh",(const char*)"cpouiloh",50,50,600,800); + cpouiloh->Divide(2,1); + cpouiloh->cd(1); + ((TH1F *)ouiphy->MakeHisto1D(0.1,4.5,-1,10.0))->Draw(); + //((TH1F *)ouiphy->MakeHisto1D(0.01,0.45,-1))->Draw(); + cpouiloh->cd(2); + ((TH2F *)ouiphy->MakeHisto2D(0.1,4.5,-1,10.0))->Draw("colz"); + //((TH2F *)ouiphy->MakeHisto2D(0.01,0.45,-1))->Draw("colz"); + + + + +} diff --git a/TRD/Macros/AliTRDcheckConfig.C b/TRD/Macros/AliTRDcheckConfig.C index 7693bd143ec..dc58322d495 100644 --- a/TRD/Macros/AliTRDcheckConfig.C +++ b/TRD/Macros/AliTRDcheckConfig.C @@ -1,676 +1,676 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -//=================================================================================== -// This is a macro to analyze TRD/Calib/DCS OCDB objects either -// from the grid for a given run number or from a local object. -// -// Arguments: -// Either provide a run number as the first argument to access the -// corresponding file on the grid -// or the path + filename as the second argument (and an arbitrary number as the first) -// to access a local file. -// -// Please note that leading zeros in the run number are not supported. -// -// Examples: -// .x AliTRDcheckConfig.C (60111) -// .x AliTRDcheckConfig.C (0, "$ALICE_ROOT/TRD/Calib/DCS/Run0_999999999_v0_s0.root") -// -// Original author: -// Frederick Kramer -// Current maintainer: -// Hans Beck -//=================================================================================== - -// Make the macro compile. -#if !defined(__CINT__) || defined(__MAKECINT__) -// Compile me in aliroot with .L AliTRDcheckConfig.C+ or with -// clang -lXMLParser -lGui -lProof -lRAWDatabase -lVMC -lMinuit -lSTEERbase -lANALYSIS -lSTEER -lESD -L$ALICE_BUILD/lib/tgt_`root-config --arch` -lTRDbase -lCDB -lstdc++ `root-config --libs` -I`root-config --incdir` -I$ALICE_ROOT/include AliTRDcheckConfig.C -#include -#include -#include -#include -#include -#include -#include "../../STEER/CDB/AliCDBEntry.h" -#include "../../STEER/CDB/AliCDBManager.h" -#include "../Cal/AliTRDCalDCS.h" -#include "../Cal/AliTRDCalDCSv2.h" -#include "../Cal/AliTRDCalDCSFEE.h" -#include "../Cal/AliTRDCalDCSFEEv2.h" - -// Not sure where to put it? -using namespace std; -#endif - -const Int_t nROC = 540; -const Int_t nROB = 8; -const Int_t nMCM = 18; -const Int_t cArraySize = 1000; - -Bool_t errors; -Int_t calVer; -//______________________________________________________________________ -Int_t AnalyzeArray(Int_t states[cArraySize], Int_t occur[cArraySize]) { - Int_t srtIndx[cArraySize] = {0}; - - TMath::Sort(cArraySize, occur, srtIndx); - - Int_t totalSum = 0, subSum = 0, iIndex = 0; - for (Int_t i=0; i 999) { - cout << "E : out of bounds." << endl; - break; - } - Printf(" Next: %7d (%d)", states[srtIndx[iIndex]], occur[srtIndx[iIndex]]); - subSum += occur[srtIndx[iIndex]]; - } - return states[srtIndx[0]]; -} -//______________________________________________________________________ -void FillItemInArray(Int_t states[cArraySize], Int_t occur[cArraySize], Int_t item, Bool_t allowNeg) { - for (Int_t iArrPos=0; iArrPosGetFEEArr()) - feeArrSiz = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize(); - } - else if (calVer == 2) { - if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()) - feeArrSiz = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize(); - } - - TObject* idcsfee; - for (Int_t i=0; iGetCalDCSFEEObj(i); - else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i); - - if (idcsfee == NULL) continue; - - Int_t sbit(-9999); - if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); - else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); - if (sbit != 0) continue; - - for (Int_t j=0; jGetMCMGlobalState(j,k); - inim = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k); - inev = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k); - inpt = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k); - } - else if (calVer == 2) { - igsm = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k); - inim = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k); - inev = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k); - inpt = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k); - } - - FillItemInArray(gsmStates, gsmOccur, igsm, false); - FillItemInArray(nimStates, nimOccur, inim, false); - FillItemInArray(nevStates, nevOccur, inev, false); - FillItemInArray(nptStates, nptOccur, inpt, false); - } // End of loop over MCMs - } // End of loop over ROBs - } // End of loop over ROCs - } // End of scoped declaration - - cout << "I : Global MCM state statistics:" << endl; - AnalyzeArray(gsmStates, gsmOccur); - cout << "I : Network interface state statistics:" << endl; - AnalyzeArray(nimStates, nimOccur); - cout << "I : MCM Event counter reading statistics:" << endl; - AnalyzeArray(nevStates, nevOccur); - cout << "I : MCM PreTrigger counter reading statistics:" << endl; - AnalyzeArray(nptStates, nptOccur); - - return; -} -//______________________________________________________________________ -void GetMajorityDifferences(TObject* calDCSObj, TObject* calDCSObj2) { - - // Initializes full array with zeros - Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0}; - Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0}; - Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0}; - Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0}; - - - { // Scoped declaration - Int_t feeArrSiz1 = 0; - Int_t feeArrSiz2 = 0; - if (calVer == 1) { - if(((AliTRDCalDCS*)calDCSObj)->GetFEEArr()) - feeArrSiz1 = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize(); - if(((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()) - feeArrSiz2 = ((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()->GetSize(); - } - else if (calVer == 2) { - if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()) - feeArrSiz1 = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize(); - if(((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()) - feeArrSiz2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()->GetSize(); - } - - TObject* idcsfee; - TObject* idcsfee2; - for (Int_t i=0; iGetCalDCSFEEObj(i); - idcsfee2 = ((AliTRDCalDCS*)calDCSObj2)->GetCalDCSFEEObj(i); - } - else if (calVer == 2) { - idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i); - idcsfee2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetCalDCSFEEObj(i); - } - if ((idcsfee == NULL) || (idcsfee2 == NULL)) continue; - - Int_t sbit(-9999); - if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); - else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); - if (sbit != 0) continue; - - for (Int_t j=0; jGetMCMGlobalState(j,k); - inim1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k); - inev1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k); - inpt1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k); - igsm2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMGlobalState(j,k); - inim2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMStateNI(j,k); - inev2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMEventCnt(j,k); - inpt2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMPtCnt(j,k); - } - else if (calVer == 2) { - igsm1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k); - inim1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k); - inev1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k); - inpt1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k); - igsm2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMGlobalState(j,k); - inim2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMStateNI(j,k); - inev2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMEventCnt(j,k); - inpt2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMPtCnt(j,k); - } - - igsm = igsm1 - igsm2; - inim = inim1 - inim2; - inev = inev2 - inev1; - inpt = inpt2 - inpt1; - - // if they were set to -1, it means they were not actauuly set - // change -1 to -100 to mean they werent set since the above - // can give negatives - if (igsm1 == -1 && igsm == 0) igsm =-100000; - if (inim1 == -1 && inim == 0) inim =-100000; - if (inev1 == -1 && inev == 0) inev =-100000; - if (inpt1 == -1 && inpt == 0) inpt =-100000; - - FillItemInArray(gsmStates, gsmOccur, igsm, true); - FillItemInArray(nimStates, nimOccur, inim, true); - FillItemInArray(nevStates, nevOccur, inev, true); - FillItemInArray(nptStates, nptOccur, inpt, true); - } // End of loop over MCMs - } // End of loop over ROBs - } // End of loop over ROCs - } // End of scoped declaration - - cout << "I : Global MCM state difference statistics:" << endl; - AnalyzeArray(gsmStates, gsmOccur); - cout << "I : Network interface state difference statistics:" << endl; - AnalyzeArray(nimStates, nimOccur); - cout << "I : MCM Event counter difference statistics:" << endl; - if (AnalyzeArray(nevStates, nevOccur) < 1) { - cout << "E : There should have been some events recorded, but there weren't" << endl; - errors = true; - } - cout << "I : MCM PreTrigger counter difference statistics:" << endl; - if (AnalyzeArray(nptStates, nptOccur) < 1) { - cout << "E : There should have been some events recorded, but there weren't" << endl; - errors = true; - } - - return; -} -//______________________________________________________________________ -void WrappedAliTRDcheckConfig(Int_t runNr, const char *pathfile,TFile *f){ - // Reset the 'errors occured' bool as it's global - errors=false; - - AliCDBEntry *entry=0; - TString pathfilets(pathfile); - - // get the source - if(pathfilets.Contains("nopathgiven")) { - cout << "I : Accessing grid storage for run number " << runNr << endl; - cout << "I : Get CDBManager instance." << endl; - AliCDBManager *man = AliCDBManager::Instance(); - cout << "I : SetDefaultStorage." << endl; - man->SetDefaultStorageFromRun(runNr); - - cout << "I : Get OCDB Entry." << endl; - entry = man->Get("TRD/Calib/DCS", runNr); - if (entry == NULL) { - cout << endl << "ERROR: Unable to get the AliTRDCalDCS object" - << "from the OCDB for run number " << runNr << "." << endl; - return; - } - } else { - cout << "I : Accessing file directly" << endl; - // Might be we want to check a file on the grid - if(pathfilets.BeginsWith("alien://")) - TGrid::Connect("alien://"); - f = TFile::Open(pathfile); - if(f != NULL) { - entry = (AliCDBEntry*) f->Get("AliCDBEntry"); - if(!entry){ - cout << "E : Can not get the OCDB entry"<GetObject(); - if(!objArrayCDB){ - cout << "E : Can not get the OCDB object"<At(iesor)) break; - if (iesor > 1) { - cout << "E : Neither the start or end of run objects were in the root file."; - return; - } - - Bool_t hasSOR = (objArrayCDB->At(0)); - Bool_t hasEOR = (objArrayCDB->At(1)); - printf("SOR entry: %d, EOR entry: %d\n", hasSOR, hasEOR); - - if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCS")) calVer = 1; - else if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCSv2")) calVer = 2; - else { - cout << "E : Object types undefined."; - return; - } - - Bool_t sorandeor = true; - TObject *caldcs = objArrayCDB->At(0); - TObject *caldcs2 = objArrayCDB->At(1); - - if (caldcs == NULL && caldcs2 == NULL) { - cout << "E : Neither the start or end of run objects were in the root file."; - return; - } else if (caldcs != NULL && caldcs2 == NULL) { - cout << "E : The EOR file was not in the root file."; - errors = true; - sorandeor = false; - } else if (caldcs == NULL && caldcs2 != NULL) { - cout << "E : The SOR file was not in the root file."; - errors = true; - sorandeor = false; - caldcs = caldcs2; - } - - cout << endl << "============ Non responding ROC Summary: ============" << endl; - TString bitfivestr = " ROCs with status bit 5. These havn't responded to communication\nattempts over DIM. Most probably they just were off this is ok.\n DCS IDs: "; - Int_t lengthfive = bitfivestr.Length(); - TString bitfourstr = " ROCs with status bit 4! BAD! This might be due to a communication problem between fxsproxy and the feeserver(s) \n DCS IDs: "; - Int_t lengthfour = bitfourstr.Length(); - TString bitthreestr = " ROCs with status bit 3! BAD! data from fee server was old or corrupt.\n DCS IDs: "; - Int_t lengththree = bitthreestr.Length(); - TString bittwostr = " ROCs with status bit 2. These have been in states in which they cannot be read out, e.g. Standby.\n DCS IDs: "; - Int_t lengthtwo = bittwostr.Length(); - TString bitonestr = " ROCs with status bit 1! BAD! This means the chamber(s) didn't respont even though is should have been in a good state.\n DCS IDs: "; - Int_t lengthone = bitonestr.Length(); - - - Int_t nSB1=0, nSB2=0, nSB3=0, nSB4=0, nSB5=0, nTot=0, nChanged=0; - { // Scoped declaration - - // Determine the size of the array - Int_t feeArrSiz = 0; - if (calVer == 1) { - if(((AliTRDCalDCS*)caldcs)->GetFEEArr()) - feeArrSiz = ((AliTRDCalDCS*)caldcs)->GetFEEArr()->GetSize(); - } - else if (calVer == 2) { - if(((AliTRDCalDCSv2*)caldcs)->GetFEEArr()) - feeArrSiz = ((AliTRDCalDCSv2*)caldcs)->GetFEEArr()->GetSize(); - } - - // Check the status/error bist for each ROC - TObject* idcsfee; - TObject* idcsfee2; - // Loop over the ROCs / the array - for (Int_t i=0; iGetCalDCSFEEObj(i); - else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i); - if (idcsfee != NULL) { - Int_t sb; - if (calVer == 1) sb = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); - else if (calVer == 2) sb = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); - if (sb == 5) { bitfivestr += i; bitfivestr += " "; nSB5++; } - else if (sb == 4) { bitfourstr += i; bitfourstr += " "; nSB4++; errors = true; } - else if (sb == 3) { bitthreestr += i; bitthreestr += " "; nSB3++; errors = true; } - else if (sb == 2) { bittwostr += i; bittwostr += " "; nSB2++; } - else if (sb == 1) { bitonestr += i; bitonestr += " "; nSB1++; errors = true; } - nTot += 1; - } - } // End of loop over ROCs - - // Print the statistcs for the status/error bits - if (lengthfive < bitfivestr.Length()) cout << nSB5 << bitfivestr.Data() << endl << endl; - if (lengthfour < bitfourstr.Length()) cout << nSB4 << bitfourstr.Data() << endl << endl; - if (lengththree < bitthreestr.Length()) cout << nSB3 << bitthreestr.Data() << endl << endl; - if (lengthtwo < bittwostr.Length()) cout << nSB2 << bittwostr.Data() << endl << endl; - if (lengthone < bitonestr.Length()) cout << nSB1 << bitonestr.Data() << endl << endl; - - cout << "The remaining " << nTot-(nSB1+nSB2+nSB3+nSB4+nSB5) << " ROCs responded correctly in the start of run."<GetCalDCSFEEObj(i); - if (caldcs2) idcsfee2 = ((AliTRDCalDCS*)caldcs2)->GetCalDCSFEEObj(i); - } - else if (calVer == 2) { - if (caldcs) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i); - if (caldcs2) idcsfee2 = ((AliTRDCalDCSv2*)caldcs2)->GetCalDCSFEEObj(i); - } - if (idcsfee != NULL && idcsfee2 != NULL) { - Int_t sbd1 = 0; - Int_t sbd2 = 0; - if (calVer == 1) { - sbd1 = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); - sbd2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetStatusBit(); - } - if (calVer == 2) { - sbd1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); - sbd2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetStatusBit(); - } - Int_t sbd = sbd1 - sbd2; - if (sbd != 0) { - cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl; - cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl; - nChanged++; - } - nTot += 1; - } - } // End of loop over ROCs - } // End of scoped declaration - if (nChanged == 0) { - cout << "No ROCs changed state between the start and end of the run" << endl; - } else { - cout << "E : " << nChanged << " out of " << nTot << " ROCs changed state during the run" << endl; - errors = true; - } - - cout << endl << "============ Statistics from RSTATE: ============" << endl; - cout<<"I : The majority entry is given as well as all other values," << endl; - cout<<" sorted according to their occurrence." << endl << endl; - GetMajoritys(caldcs); - if (sorandeor) GetMajorityDifferences(caldcs,caldcs2); - - cout << endl << "============ Global Configuraton: ============" << endl; - cout<<"I : Anything not listed is not set, mixed numbers are indicated with a" << endl; - cout<<" value of -2 and strings are set to 'mixed' if they're mixed." << endl << endl; - - Int_t gtb, gct, gsh, gtc, gsz, gfw, gfs, gfl, gsn; - TString gcv, gcn, gft, grp, gtp, gtm, gtd, gts, gao; - - if (calVer == 1) { - gtb = ((AliTRDCalDCS*)caldcs)->GetGlobalNumberOfTimeBins(); - gct = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigTag(); - gsh = ((AliTRDCalDCS*)caldcs)->GetGlobalSingleHitThres(); - gtc = ((AliTRDCalDCS*)caldcs)->GetGlobalThreePadClustThres(); - gsz = ((AliTRDCalDCS*)caldcs)->GetGlobalSelectiveNoZS(); - gfw = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterWeight(); - gfs = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterShortDecPar(); - gfl = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterLongDecPar(); - gsn = ((AliTRDCalDCS*)caldcs)->GetGlobalModeFastStatNoise(); - gcv = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigVersion(); - gcn = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigName(); - gft = ((AliTRDCalDCS*)caldcs)->GetGlobalFilterType(); - grp = ((AliTRDCalDCS*)caldcs)->GetGlobalReadoutParam(); - gtp = ((AliTRDCalDCS*)caldcs)->GetGlobalTestPattern(); - gtm = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletMode(); - gtd = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletDef(); - gts = ((AliTRDCalDCS*)caldcs)->GetGlobalTriggerSetup(); - gao = ((AliTRDCalDCS*)caldcs)->GetGlobalAddOptions(); - } - else if (calVer == 2) { - gtb = ((AliTRDCalDCSv2*)caldcs)->GetGlobalNumberOfTimeBins(); - gct = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigTag(); - gsh = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSingleHitThres(); - gtc = ((AliTRDCalDCSv2*)caldcs)->GetGlobalThreePadClustThres(); - gsz = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSelectiveNoZS(); - gfw = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterWeight(); - gfs = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterShortDecPar(); - gfl = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterLongDecPar(); - gsn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalModeFastStatNoise(); - gcv = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigVersion(); - gcn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigName(); - gft = ((AliTRDCalDCSv2*)caldcs)->GetGlobalFilterType(); - grp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalReadoutParam(); - gtp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTestPattern(); - gtm = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletMode(); - gtd = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletDef(); - gts = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTriggerSetup(); - gao = ((AliTRDCalDCSv2*)caldcs)->GetGlobalAddOptions(); - } - - - if (gtb != -1) cout<<"Global number of time bins.........................: "<< gtb << endl; - if (gct != -1) cout<<"Global configuration tag...........................: "<< gct << endl; - if (gsh != -1) cout<<"Global single hit threshold........................: "<< gsh << endl; - if (gtc != -1) cout<<"Global three pad cluster threshold.................: "<< gtc << endl; - if (gsz != -1) cout<<"Global selective ZS (every i'th event).............: "<< gsz << endl; - if (gfw != -1) cout<<"Global tail cancellation filter weight.............: "<< gfs << endl; - if (gfs != -1) cout<<"Global tail cancellat. filter short decay parameter: "<< gfs << endl; - if (gfl != -1) cout<<"Global tail cancellation filt. long decay parameter: "<< gfl << endl; - if (gsn != -1) cout<<"Global fast statistics mode?.......................: "<< gsn << endl; - if (gcv != "") cout<<"Global configuration tag version...................: "<< gcv << endl; - if (gcn != "") cout<<"Global configuration tag name......................: "<< gcn << endl; - if (gft != "") cout<<"Global filter type.................................: "<< gft << endl; - if (grp != "") cout<<"Global readout parameter...........................: "<< grp << endl; - if (gtp != "") cout<<"Global test pattern................................: "<< gtp << endl; - if (gtm != "") cout<<"Global tracklet mode...............................: "<< gtm << endl; - if (gtd != "") cout<<"Global tracklet definition.........................: "<< gtd << endl; - if (gts != "") cout<<"Global trigger setup...............................: "<< gts << endl; - if (gao != "") cout<<"Global additional options..........................: "<< gao << endl; - - cout << endl << "============ Error Summary: ============" << endl; - if (errors) { - cout<<" I noticed some errors, please see above for the specifics." << endl; - } else { - cout<<" I didn't notice any errors, but that doesn't mean there weren't any!" << endl; - } -//______________________________________________________________________ -} -void AliTRDcheckConfig(Int_t runNr=0, const char *pathfile="nopathgiven"){ - // Wrapping the function to be able to clean up - TFile *f=0; - WrappedAliTRDcheckConfig(runNr,pathfile,f); - AliCDBManager::Destroy(); - if(f){ - delete f; // Destructor calls TFile::Close() - f=0; - } -} -//______________________________________________________________________ -// -// The stuff below is only for compiling a standalone program, -// i.e., without root / aliroot -// -#if !defined(__CINT__) -//______________________________________________________________________ -void reduceTimeOuts(){ - // Reduces the grid timeouts - gEnv->SetValue("XNet.ConnectTimeout" , 20); - gEnv->SetValue("XNet.RequestTimeout" , 40); - gEnv->SetValue("XNet.MaxRedirectCount" , 2); - gEnv->SetValue("XNet.ReconnectWait" , 2); - gEnv->SetValue("XNet.FirstConnectMaxCnt", 3); - gEnv->SetValue("XNet.TransactionTimeout",300); -} -//______________________________________________________________________ -void printHelp(const char* argv0){ - cout <<"Usuage: "< gets treated as run number"< gets treated as list of run numbers"< gets treated as OCDB entry"< displays this help"< reduces grid timeouts"<3){ - cout << "Too many arguments!"<2){ - if( (!strcmp("-f",argv[2])) || - (!strcmp("--fast",argv[2])) ){ - reduceTimeOuts(); - } - else { - cout <<"Couldn't recognize your argument " - <1){ - // Convert to TString for easier handling - TString input(argv[1]); - // Help message - if( (!strcmp("-h",argv[1])) || - (!strcmp("--help",argv[1])) ) { - printHelp(argv[0]); - return 0; - } - // int aka run number provided - else if(input.IsDigit()){ - AliTRDcheckConfig(input.Atoi()); - return 0; - } - // .root aka OCDB file provided - else if(input.EndsWith(".root")){ - AliTRDcheckConfig(0,input.Data()); - return 0; - } - // .txt aka list of root files provided - else if(input.EndsWith(".txt")){ - // Open the text file - ifstream in; - in.open(Form("%s",input.Data())); - if (!in.is_open()){ - cout << "F: Could not open file "<1 - - // Without arguments - AliTRDcheckConfig(); - return 0; -}// End of main - -// End of the non-root part -#endif +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +//=================================================================================== +// This is a macro to analyze TRD/Calib/DCS OCDB objects either +// from the grid for a given run number or from a local object. +// +// Arguments: +// Either provide a run number as the first argument to access the +// corresponding file on the grid +// or the path + filename as the second argument (and an arbitrary number as the first) +// to access a local file. +// +// Please note that leading zeros in the run number are not supported. +// +// Examples: +// .x AliTRDcheckConfig.C (60111) +// .x AliTRDcheckConfig.C (0, "$ALICE_ROOT/TRD/Calib/DCS/Run0_999999999_v0_s0.root") +// +// Original author: +// Frederick Kramer +// Current maintainer: +// Hans Beck +//=================================================================================== + +// Make the macro compile. +#if !defined(__CINT__) || defined(__MAKECINT__) +// Compile me in aliroot with .L AliTRDcheckConfig.C+ or with +// clang -lXMLParser -lGui -lProof -lRAWDatabase -lVMC -lMinuit -lSTEERbase -lANALYSIS -lSTEER -lESD -L$ALICE_BUILD/lib/tgt_`root-config --arch` -lTRDbase -lCDB -lstdc++ `root-config --libs` -I`root-config --incdir` -I$ALICE_ROOT/include AliTRDcheckConfig.C +#include +#include +#include +#include +#include +#include +#include "../../STEER/CDB/AliCDBEntry.h" +#include "../../STEER/CDB/AliCDBManager.h" +#include "../Cal/AliTRDCalDCS.h" +#include "../Cal/AliTRDCalDCSv2.h" +#include "../Cal/AliTRDCalDCSFEE.h" +#include "../Cal/AliTRDCalDCSFEEv2.h" + +// Not sure where to put it? +using namespace std; +#endif + +const Int_t nROC = 540; +const Int_t nROB = 8; +const Int_t nMCM = 18; +const Int_t cArraySize = 1000; + +Bool_t errors; +Int_t calVer; +//______________________________________________________________________ +Int_t AnalyzeArray(Int_t states[cArraySize], Int_t occur[cArraySize]) { + Int_t srtIndx[cArraySize] = {0}; + + TMath::Sort(cArraySize, occur, srtIndx); + + Int_t totalSum = 0, subSum = 0, iIndex = 0; + for (Int_t i=0; i 999) { + cout << "E : out of bounds." << endl; + break; + } + Printf(" Next: %7d (%d)", states[srtIndx[iIndex]], occur[srtIndx[iIndex]]); + subSum += occur[srtIndx[iIndex]]; + } + return states[srtIndx[0]]; +} +//______________________________________________________________________ +void FillItemInArray(Int_t states[cArraySize], Int_t occur[cArraySize], Int_t item, Bool_t allowNeg) { + for (Int_t iArrPos=0; iArrPosGetFEEArr()) + feeArrSiz = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize(); + } + else if (calVer == 2) { + if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()) + feeArrSiz = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize(); + } + + TObject* idcsfee; + for (Int_t i=0; iGetCalDCSFEEObj(i); + else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i); + + if (idcsfee == NULL) continue; + + Int_t sbit(-9999); + if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); + else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); + if (sbit != 0) continue; + + for (Int_t j=0; jGetMCMGlobalState(j,k); + inim = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k); + inev = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k); + inpt = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k); + } + else if (calVer == 2) { + igsm = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k); + inim = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k); + inev = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k); + inpt = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k); + } + + FillItemInArray(gsmStates, gsmOccur, igsm, false); + FillItemInArray(nimStates, nimOccur, inim, false); + FillItemInArray(nevStates, nevOccur, inev, false); + FillItemInArray(nptStates, nptOccur, inpt, false); + } // End of loop over MCMs + } // End of loop over ROBs + } // End of loop over ROCs + } // End of scoped declaration + + cout << "I : Global MCM state statistics:" << endl; + AnalyzeArray(gsmStates, gsmOccur); + cout << "I : Network interface state statistics:" << endl; + AnalyzeArray(nimStates, nimOccur); + cout << "I : MCM Event counter reading statistics:" << endl; + AnalyzeArray(nevStates, nevOccur); + cout << "I : MCM PreTrigger counter reading statistics:" << endl; + AnalyzeArray(nptStates, nptOccur); + + return; +} +//______________________________________________________________________ +void GetMajorityDifferences(TObject* calDCSObj, TObject* calDCSObj2) { + + // Initializes full array with zeros + Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0}; + Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0}; + Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0}; + Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0}; + + + { // Scoped declaration + Int_t feeArrSiz1 = 0; + Int_t feeArrSiz2 = 0; + if (calVer == 1) { + if(((AliTRDCalDCS*)calDCSObj)->GetFEEArr()) + feeArrSiz1 = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize(); + if(((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()) + feeArrSiz2 = ((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()->GetSize(); + } + else if (calVer == 2) { + if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()) + feeArrSiz1 = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize(); + if(((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()) + feeArrSiz2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()->GetSize(); + } + + TObject* idcsfee; + TObject* idcsfee2; + for (Int_t i=0; iGetCalDCSFEEObj(i); + idcsfee2 = ((AliTRDCalDCS*)calDCSObj2)->GetCalDCSFEEObj(i); + } + else if (calVer == 2) { + idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i); + idcsfee2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetCalDCSFEEObj(i); + } + if ((idcsfee == NULL) || (idcsfee2 == NULL)) continue; + + Int_t sbit(-9999); + if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); + else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); + if (sbit != 0) continue; + + for (Int_t j=0; jGetMCMGlobalState(j,k); + inim1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k); + inev1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k); + inpt1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k); + igsm2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMGlobalState(j,k); + inim2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMStateNI(j,k); + inev2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMEventCnt(j,k); + inpt2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMPtCnt(j,k); + } + else if (calVer == 2) { + igsm1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k); + inim1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k); + inev1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k); + inpt1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k); + igsm2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMGlobalState(j,k); + inim2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMStateNI(j,k); + inev2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMEventCnt(j,k); + inpt2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMPtCnt(j,k); + } + + igsm = igsm1 - igsm2; + inim = inim1 - inim2; + inev = inev2 - inev1; + inpt = inpt2 - inpt1; + + // if they were set to -1, it means they were not actauuly set + // change -1 to -100 to mean they werent set since the above + // can give negatives + if (igsm1 == -1 && igsm == 0) igsm =-100000; + if (inim1 == -1 && inim == 0) inim =-100000; + if (inev1 == -1 && inev == 0) inev =-100000; + if (inpt1 == -1 && inpt == 0) inpt =-100000; + + FillItemInArray(gsmStates, gsmOccur, igsm, true); + FillItemInArray(nimStates, nimOccur, inim, true); + FillItemInArray(nevStates, nevOccur, inev, true); + FillItemInArray(nptStates, nptOccur, inpt, true); + } // End of loop over MCMs + } // End of loop over ROBs + } // End of loop over ROCs + } // End of scoped declaration + + cout << "I : Global MCM state difference statistics:" << endl; + AnalyzeArray(gsmStates, gsmOccur); + cout << "I : Network interface state difference statistics:" << endl; + AnalyzeArray(nimStates, nimOccur); + cout << "I : MCM Event counter difference statistics:" << endl; + if (AnalyzeArray(nevStates, nevOccur) < 1) { + cout << "E : There should have been some events recorded, but there weren't" << endl; + errors = true; + } + cout << "I : MCM PreTrigger counter difference statistics:" << endl; + if (AnalyzeArray(nptStates, nptOccur) < 1) { + cout << "E : There should have been some events recorded, but there weren't" << endl; + errors = true; + } + + return; +} +//______________________________________________________________________ +void WrappedAliTRDcheckConfig(Int_t runNr, const char *pathfile,TFile *f){ + // Reset the 'errors occured' bool as it's global + errors=false; + + AliCDBEntry *entry=0; + TString pathfilets(pathfile); + + // get the source + if(pathfilets.Contains("nopathgiven")) { + cout << "I : Accessing grid storage for run number " << runNr << endl; + cout << "I : Get CDBManager instance." << endl; + AliCDBManager *man = AliCDBManager::Instance(); + cout << "I : SetDefaultStorage." << endl; + man->SetDefaultStorageFromRun(runNr); + + cout << "I : Get OCDB Entry." << endl; + entry = man->Get("TRD/Calib/DCS", runNr); + if (entry == NULL) { + cout << endl << "ERROR: Unable to get the AliTRDCalDCS object" + << "from the OCDB for run number " << runNr << "." << endl; + return; + } + } else { + cout << "I : Accessing file directly" << endl; + // Might be we want to check a file on the grid + if(pathfilets.BeginsWith("alien://")) + TGrid::Connect("alien://"); + f = TFile::Open(pathfile); + if(f != NULL) { + entry = (AliCDBEntry*) f->Get("AliCDBEntry"); + if(!entry){ + cout << "E : Can not get the OCDB entry"<GetObject(); + if(!objArrayCDB){ + cout << "E : Can not get the OCDB object"<At(iesor)) break; + if (iesor > 1) { + cout << "E : Neither the start or end of run objects were in the root file."; + return; + } + + Bool_t hasSOR = (objArrayCDB->At(0)); + Bool_t hasEOR = (objArrayCDB->At(1)); + printf("SOR entry: %d, EOR entry: %d\n", hasSOR, hasEOR); + + if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCS")) calVer = 1; + else if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCSv2")) calVer = 2; + else { + cout << "E : Object types undefined."; + return; + } + + Bool_t sorandeor = true; + TObject *caldcs = objArrayCDB->At(0); + TObject *caldcs2 = objArrayCDB->At(1); + + if (caldcs == NULL && caldcs2 == NULL) { + cout << "E : Neither the start or end of run objects were in the root file."; + return; + } else if (caldcs != NULL && caldcs2 == NULL) { + cout << "E : The EOR file was not in the root file."; + errors = true; + sorandeor = false; + } else if (caldcs == NULL && caldcs2 != NULL) { + cout << "E : The SOR file was not in the root file."; + errors = true; + sorandeor = false; + caldcs = caldcs2; + } + + cout << endl << "============ Non responding ROC Summary: ============" << endl; + TString bitfivestr = " ROCs with status bit 5. These havn't responded to communication\nattempts over DIM. Most probably they just were off this is ok.\n DCS IDs: "; + Int_t lengthfive = bitfivestr.Length(); + TString bitfourstr = " ROCs with status bit 4! BAD! This might be due to a communication problem between fxsproxy and the feeserver(s) \n DCS IDs: "; + Int_t lengthfour = bitfourstr.Length(); + TString bitthreestr = " ROCs with status bit 3! BAD! data from fee server was old or corrupt.\n DCS IDs: "; + Int_t lengththree = bitthreestr.Length(); + TString bittwostr = " ROCs with status bit 2. These have been in states in which they cannot be read out, e.g. Standby.\n DCS IDs: "; + Int_t lengthtwo = bittwostr.Length(); + TString bitonestr = " ROCs with status bit 1! BAD! This means the chamber(s) didn't respont even though is should have been in a good state.\n DCS IDs: "; + Int_t lengthone = bitonestr.Length(); + + + Int_t nSB1=0, nSB2=0, nSB3=0, nSB4=0, nSB5=0, nTot=0, nChanged=0; + { // Scoped declaration + + // Determine the size of the array + Int_t feeArrSiz = 0; + if (calVer == 1) { + if(((AliTRDCalDCS*)caldcs)->GetFEEArr()) + feeArrSiz = ((AliTRDCalDCS*)caldcs)->GetFEEArr()->GetSize(); + } + else if (calVer == 2) { + if(((AliTRDCalDCSv2*)caldcs)->GetFEEArr()) + feeArrSiz = ((AliTRDCalDCSv2*)caldcs)->GetFEEArr()->GetSize(); + } + + // Check the status/error bist for each ROC + TObject* idcsfee; + TObject* idcsfee2; + // Loop over the ROCs / the array + for (Int_t i=0; iGetCalDCSFEEObj(i); + else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i); + if (idcsfee != NULL) { + Int_t sb; + if (calVer == 1) sb = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); + else if (calVer == 2) sb = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); + if (sb == 5) { bitfivestr += i; bitfivestr += " "; nSB5++; } + else if (sb == 4) { bitfourstr += i; bitfourstr += " "; nSB4++; errors = true; } + else if (sb == 3) { bitthreestr += i; bitthreestr += " "; nSB3++; errors = true; } + else if (sb == 2) { bittwostr += i; bittwostr += " "; nSB2++; } + else if (sb == 1) { bitonestr += i; bitonestr += " "; nSB1++; errors = true; } + nTot += 1; + } + } // End of loop over ROCs + + // Print the statistcs for the status/error bits + if (lengthfive < bitfivestr.Length()) cout << nSB5 << bitfivestr.Data() << endl << endl; + if (lengthfour < bitfourstr.Length()) cout << nSB4 << bitfourstr.Data() << endl << endl; + if (lengththree < bitthreestr.Length()) cout << nSB3 << bitthreestr.Data() << endl << endl; + if (lengthtwo < bittwostr.Length()) cout << nSB2 << bittwostr.Data() << endl << endl; + if (lengthone < bitonestr.Length()) cout << nSB1 << bitonestr.Data() << endl << endl; + + cout << "The remaining " << nTot-(nSB1+nSB2+nSB3+nSB4+nSB5) << " ROCs responded correctly in the start of run."<GetCalDCSFEEObj(i); + if (caldcs2) idcsfee2 = ((AliTRDCalDCS*)caldcs2)->GetCalDCSFEEObj(i); + } + else if (calVer == 2) { + if (caldcs) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i); + if (caldcs2) idcsfee2 = ((AliTRDCalDCSv2*)caldcs2)->GetCalDCSFEEObj(i); + } + if (idcsfee != NULL && idcsfee2 != NULL) { + Int_t sbd1 = 0; + Int_t sbd2 = 0; + if (calVer == 1) { + sbd1 = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); + sbd2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetStatusBit(); + } + if (calVer == 2) { + sbd1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); + sbd2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetStatusBit(); + } + Int_t sbd = sbd1 - sbd2; + if (sbd != 0) { + cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl; + cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl; + nChanged++; + } + nTot += 1; + } + } // End of loop over ROCs + } // End of scoped declaration + if (nChanged == 0) { + cout << "No ROCs changed state between the start and end of the run" << endl; + } else { + cout << "E : " << nChanged << " out of " << nTot << " ROCs changed state during the run" << endl; + errors = true; + } + + cout << endl << "============ Statistics from RSTATE: ============" << endl; + cout<<"I : The majority entry is given as well as all other values," << endl; + cout<<" sorted according to their occurrence." << endl << endl; + GetMajoritys(caldcs); + if (sorandeor) GetMajorityDifferences(caldcs,caldcs2); + + cout << endl << "============ Global Configuraton: ============" << endl; + cout<<"I : Anything not listed is not set, mixed numbers are indicated with a" << endl; + cout<<" value of -2 and strings are set to 'mixed' if they're mixed." << endl << endl; + + Int_t gtb, gct, gsh, gtc, gsz, gfw, gfs, gfl, gsn; + TString gcv, gcn, gft, grp, gtp, gtm, gtd, gts, gao; + + if (calVer == 1) { + gtb = ((AliTRDCalDCS*)caldcs)->GetGlobalNumberOfTimeBins(); + gct = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigTag(); + gsh = ((AliTRDCalDCS*)caldcs)->GetGlobalSingleHitThres(); + gtc = ((AliTRDCalDCS*)caldcs)->GetGlobalThreePadClustThres(); + gsz = ((AliTRDCalDCS*)caldcs)->GetGlobalSelectiveNoZS(); + gfw = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterWeight(); + gfs = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterShortDecPar(); + gfl = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterLongDecPar(); + gsn = ((AliTRDCalDCS*)caldcs)->GetGlobalModeFastStatNoise(); + gcv = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigVersion(); + gcn = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigName(); + gft = ((AliTRDCalDCS*)caldcs)->GetGlobalFilterType(); + grp = ((AliTRDCalDCS*)caldcs)->GetGlobalReadoutParam(); + gtp = ((AliTRDCalDCS*)caldcs)->GetGlobalTestPattern(); + gtm = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletMode(); + gtd = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletDef(); + gts = ((AliTRDCalDCS*)caldcs)->GetGlobalTriggerSetup(); + gao = ((AliTRDCalDCS*)caldcs)->GetGlobalAddOptions(); + } + else if (calVer == 2) { + gtb = ((AliTRDCalDCSv2*)caldcs)->GetGlobalNumberOfTimeBins(); + gct = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigTag(); + gsh = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSingleHitThres(); + gtc = ((AliTRDCalDCSv2*)caldcs)->GetGlobalThreePadClustThres(); + gsz = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSelectiveNoZS(); + gfw = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterWeight(); + gfs = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterShortDecPar(); + gfl = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterLongDecPar(); + gsn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalModeFastStatNoise(); + gcv = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigVersion(); + gcn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigName(); + gft = ((AliTRDCalDCSv2*)caldcs)->GetGlobalFilterType(); + grp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalReadoutParam(); + gtp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTestPattern(); + gtm = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletMode(); + gtd = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletDef(); + gts = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTriggerSetup(); + gao = ((AliTRDCalDCSv2*)caldcs)->GetGlobalAddOptions(); + } + + + if (gtb != -1) cout<<"Global number of time bins.........................: "<< gtb << endl; + if (gct != -1) cout<<"Global configuration tag...........................: "<< gct << endl; + if (gsh != -1) cout<<"Global single hit threshold........................: "<< gsh << endl; + if (gtc != -1) cout<<"Global three pad cluster threshold.................: "<< gtc << endl; + if (gsz != -1) cout<<"Global selective ZS (every i'th event).............: "<< gsz << endl; + if (gfw != -1) cout<<"Global tail cancellation filter weight.............: "<< gfs << endl; + if (gfs != -1) cout<<"Global tail cancellat. filter short decay parameter: "<< gfs << endl; + if (gfl != -1) cout<<"Global tail cancellation filt. long decay parameter: "<< gfl << endl; + if (gsn != -1) cout<<"Global fast statistics mode?.......................: "<< gsn << endl; + if (gcv != "") cout<<"Global configuration tag version...................: "<< gcv << endl; + if (gcn != "") cout<<"Global configuration tag name......................: "<< gcn << endl; + if (gft != "") cout<<"Global filter type.................................: "<< gft << endl; + if (grp != "") cout<<"Global readout parameter...........................: "<< grp << endl; + if (gtp != "") cout<<"Global test pattern................................: "<< gtp << endl; + if (gtm != "") cout<<"Global tracklet mode...............................: "<< gtm << endl; + if (gtd != "") cout<<"Global tracklet definition.........................: "<< gtd << endl; + if (gts != "") cout<<"Global trigger setup...............................: "<< gts << endl; + if (gao != "") cout<<"Global additional options..........................: "<< gao << endl; + + cout << endl << "============ Error Summary: ============" << endl; + if (errors) { + cout<<" I noticed some errors, please see above for the specifics." << endl; + } else { + cout<<" I didn't notice any errors, but that doesn't mean there weren't any!" << endl; + } +//______________________________________________________________________ +} +void AliTRDcheckConfig(Int_t runNr=0, const char *pathfile="nopathgiven"){ + // Wrapping the function to be able to clean up + TFile *f=0; + WrappedAliTRDcheckConfig(runNr,pathfile,f); + AliCDBManager::Destroy(); + if(f){ + delete f; // Destructor calls TFile::Close() + f=0; + } +} +//______________________________________________________________________ +// +// The stuff below is only for compiling a standalone program, +// i.e., without root / aliroot +// +#if !defined(__CINT__) +//______________________________________________________________________ +void reduceTimeOuts(){ + // Reduces the grid timeouts + gEnv->SetValue("XNet.ConnectTimeout" , 20); + gEnv->SetValue("XNet.RequestTimeout" , 40); + gEnv->SetValue("XNet.MaxRedirectCount" , 2); + gEnv->SetValue("XNet.ReconnectWait" , 2); + gEnv->SetValue("XNet.FirstConnectMaxCnt", 3); + gEnv->SetValue("XNet.TransactionTimeout",300); +} +//______________________________________________________________________ +void printHelp(const char* argv0){ + cout <<"Usuage: "< gets treated as run number"< gets treated as list of run numbers"< gets treated as OCDB entry"< displays this help"< reduces grid timeouts"<3){ + cout << "Too many arguments!"<2){ + if( (!strcmp("-f",argv[2])) || + (!strcmp("--fast",argv[2])) ){ + reduceTimeOuts(); + } + else { + cout <<"Couldn't recognize your argument " + <1){ + // Convert to TString for easier handling + TString input(argv[1]); + // Help message + if( (!strcmp("-h",argv[1])) || + (!strcmp("--help",argv[1])) ) { + printHelp(argv[0]); + return 0; + } + // int aka run number provided + else if(input.IsDigit()){ + AliTRDcheckConfig(input.Atoi()); + return 0; + } + // .root aka OCDB file provided + else if(input.EndsWith(".root")){ + AliTRDcheckConfig(0,input.Data()); + return 0; + } + // .txt aka list of root files provided + else if(input.EndsWith(".txt")){ + // Open the text file + ifstream in; + in.open(Form("%s",input.Data())); + if (!in.is_open()){ + cout << "F: Could not open file "<1 + + // Without arguments + AliTRDcheckConfig(); + return 0; +}// End of main + +// End of the non-root part +#endif diff --git a/TRD/doc/alicedefs.tex b/TRD/doc/alicedefs.tex index 67710d022eb..08a43fe2864 100644 --- a/TRD/doc/alicedefs.tex +++ b/TRD/doc/alicedefs.tex @@ -1,168 +1,168 @@ -% -% --------------------------------------------------------------- -% define new commands/symbols -% --------------------------------------------------------------- -% -% General stuff -% -\hyphenation{ALICE} -\hyphenation{ATLAS} -\hyphenation{ALSIM} -\hyphenation{SPSLC} -\hyphenation{between} -\hyphenation{basis} -\hyphenation{robust} -\hyphenation{cables} -\hyphenation{below} -\hyphenation{because} -\hyphenation{every rectan-gular} -\newcommand{\Lumi}{\ensuremath{\cal{L}}} -% -\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} -\newcommand{\HRule}{\rule{0.4\linewidth}{0.3mm}} -\newcommand{\cinst}[2]{$^{\protect\mathrm{#1)}}$~#2\par} -\newcommand{\crefi}[1]{$^{\protect\mathrm{#1)}}$} -\newcommand{\crefii}[2]{$^{\protect\mathrm{#1,#2)}}$} -\newcommand{\Rule}{\rule[-.7ex]{0ex}{2.9ex}} -\newcommand{\rbox}[1]{\raisebox{1.5ex}[-1.5ex]{#1}} -% -% symbols... -% -\newcommand{\mrm}{\mathrm} -\newcommand{\pt}{\ensuremath{p_{\mathrm{t}}} } -\newcommand{\et}{\ensuremath{E_{\mathrm{T}}}} -%\newcommand {\pT} {\mbox{$p_{\rm t}$}} -\newcommand{\mt}{\ensuremath{m_{\mathrm{t}}}} -\newcommand{\minv}{\mbox{$m_{\ee}$}} -\newcommand{\ee}{\mbox{e$^+$e$^-$}} -\newcommand {\rap} {\mbox{$\left | y \right | $}} -%\newcommand{\sigee}{\raisebox{0.2ex}{$\sigma_E$}/\raisebox{-0.4ex}{\kern0.1em$E$}} -\newcommand{\sigee}{$\sigma_E$/$E$} -\newcommand{\dd}{\mrm{d}} -% ... & -\newcommand{\eg}{{e.g.~\@\xspace}} -\newcommand{\ie}{i.e.\@\xspace} -\newcommand{\elm}{e.m.\@\xspace} - -%\def\mt{\relax \ifmmode m_{\mathrm{t}} \else $m_{\mathrm{t}}$\@\xspace\fi} -%\def\pt{\relax \ifmmode p_{\mathrm{t}} \else \mbox{$p_{\mathrm{t}}$}\xspace\fi} -% -% units of measure -% -\newcommand {\lum} {\, \mbox{${\rm cm}^{-2} {\rm s}^{-1}$}} -\newcommand {\barn} {\, \mbox{${\rm barn}$}} -\newcommand {\m} {\, \mbox{${\rm m}$}} -\newcommand {\bstar} {\, \mbox{$\beta^{*}$}} -\newcommand {\hour} {\, \mbox{${\rm h}$}} -\newcommand{\dg}{\mbox{$^\circ$}} -%\newcommand {\grad} {\mbox{$^{\circ}$}} -\newcommand {\mass} {\mbox{\rm GeV$\kern-0.15em /\kern-0.12em c^2$}} -\newcommand {\tev} {\mbox{${\rm TeV}$}} -\newcommand {\gev} {\mbox{${\rm GeV}$}} -\newcommand {\mev} {\mbox{${\rm MeV}$}} -\newcommand {\kev} {\mbox{${\rm keV}$}} -\newcommand {\mom} {\mbox{\rm GeV$\kern-0.15em /\kern-0.12em c$}} -\newcommand {\mum} {\mbox{$\mu {\rm m}$}} -\newcommand {\gmom} {\mbox{\rm GeV$\kern-0.15em /\kern-0.12em c$}} -\newcommand {\mmass} {\mbox{\rm MeV$\kern-0.15em /\kern-0.12em c^2$}} -\newcommand {\mmom} {\mbox{\rm MeV$\kern-0.15em /\kern-0.12em c$}} -\newcommand {\nb} {\mbox{\rm nb}} -\newcommand {\musec} {\mbox{$\mu {\rm s}$}} -\newcommand {\cm} {\mbox{${\rm cm}$}} -\newcommand {\mm} {\mbox{${\rm mm}$}} -\newcommand {\cmq} {\mbox{${\rm cm}^{2}$}} -\newcommand {\dens} {\mbox{${\rm g}/{\rm cm}^{3}$}} -% -% Particles -% -\newcommand{\pizero}{\mbox{$\mathrm {\pi^0}$}} -\newcommand{\K}{\mbox{$\mathrm {K}$}} -\newcommand{\Kzs}{\mbox{$\mathrm {K^0_S}$}} -\newcommand{\KzS}{\mbox{$\mathrm {K^0_S}$}} -\newcommand{\KzL}{\mbox{$\mathrm {K^0_L}$}} -\newcommand{\Jpsi} {\mbox{J\kern-0.05em /\kern-0.05em$\psi$}\xspace} -\newcommand{\psip} {\mbox{$\psi^\prime$}\xspace} -\newcommand{\Ups} {\mbox{$\Upsilon$}\xspace} -\newcommand{\Upsp} {\mbox{$\Upsilon^\prime$}\xspace} -\newcommand{\Upspp} {\mbox{$\Upsilon^{\prime\prime}$}\xspace} -\newcommand{\qqbar} {\mbox{$q\bar{q}$}\xspace} - -%\newcommand{\qqbar}{\mbox{$\mathrm {q\overline{q}}$}} -\newcommand{\ppbar}{\mbox{$\mathrm {p\overline{p}}$}} -\newcommand{\ccbar}{\mbox{$\mathrm {c\overline{c}}$}} -\newcommand{\bbbar}{\mbox{$\mathrm {b\overline{b}}$}} -\newcommand{\sbbbar}{\mbox{$\scriptstyle\mathrm {b\overline{b}}$}} -\newcommand{\ttbar}{\mbox{$\mathrm {t\overline{t}}$}} -\newcommand{\sttbar}{\mbox{$\scriptstyle\mathrm {t\overline{t}}$}} -\newcommand{\BBbar}{\mbox{$\mathrm {B\overline{B}}$}} -\newcommand{\Bzd}{\mbox{$\mathrm {B^0_d}$}} -\newcommand{\Bbzd}{\mbox{$\mathrm {\overline{B}^0_d}$}} -\newcommand{\Bzs}{\mbox{$\mathrm {B^0_s}$}} -\newcommand{\Bbzs}{\mbox{$\mathrm {\overline{B}^0_s}$}} -\newcommand{\gaga}{\mbox{$\mathrm {\gamma\gamma}$}} -% -% Bibliography stuff -% -\def\NIM#1#2#3{Nucl. Instr. Meth. {\bf #1}\ (#2)\ #3} -\def\IEEE#1#2#3{IEEE Trans. Nucl. Sci. {\bf #1}\ (#2)\ #3} -\def\NP#1#2#3{Nucl. Phys. {\bf #1}\ (#2)\ #3} -\def\PL#1#2#3{Phys. Lett. {\bf #1}\ (#2)\ #3} -\def\PR#1#2#3{Phys. Rev. {\bf #1}\ (#2)\ #3} -\def\PRL#1#2#3{Phys. Rev. Lett. {\bf #1}\ (#2)\ #3} -\def\ZP#1#2#3{Z. Phys. {\bf #1}\ (#2)\ #3} -\def\EJP#1#2#3{Eur. J. Phys. {\bf #1}\ (#2)\ #3} -\def\JPG#1#2#3{J. Phys. G: Nucl. Part. Phys. {\bf #1}\ (#2)\ #3} -\def\RMP#1#2#3{Rev. Mod. Phys. {\bf #1}\ (#2)\ #3} -\def\ARNPS#1#2#3{Ann. Rev. Nucl. Part. Sc. {\bf #1}\ (#2)\ #3} -\def\PRP#1#2#3{Phys. Rep. {\bf #1}\ (#2)\ #3} -\def\RPP#1#2#3{Rep. on Progr. in Phys. {\bf #1}\ (#2)\ #3} -%\def\#1#2#3{ {\bf #1}\ (#2)\ #3} - -\def\ALI#1#2{ALICE Internal Note {\sc #1--#2}} -\def\ALIC#1#2#3{ALICE Internal Note {\sc #1--#2 (#3)}} -\def\subNIM{submitted to Nucl. Instr. Meth.} -\def\subIEEE{submitted to IEEE Trans. Nucl. Sci.} -\def\subNP{submitted to Nucl. Phys.} -\def\subPL{submitted to Phys. Lett.} -\def\subPR{submitted to Phys. Rev.} -\def\subPRL{submitted to Phys. Rev. Lett.} -\def\subEJP{submitted to Eur. J. Phys.} -%\def\tosubNIM{to be submitted to Nucl. Instrum. Methods} -%\def\tosubNP{to be submitted to Nucl. Phys.} -%\def\tosubPL{to be submitted to Phys. Lett.} -%\def\tosubPR{to be submitted to Phys. Rev.} -%\def\tosubPRL{to be submitted to Phys. Rev. Lett.} -%\def\tosubZP{to be submitted to Z. Phys.} -% -% Gases -% -\def\xea{\mbox{Xe,CH$_4$ (10\%)}} -\def\xeb{\mbox{Xe,CO$_2$ (10\%)}} -\def\xec{\mbox{Xe,CO$_2$ (15\%)}} -\def\xed{\mbox{Xe,CO$_2$ (20\%)}} -% -% other things... -% -\def\tvi{\vrule height 12pt depth 5pt width 0pt} -\def\vphant{\vphantom{{{1\over{2}}\over{{1\over{2}}}}}} -\def\dis{\displaystyle} - -\newlength{\digitwidth} \settowidth{\digitwidth}{\rm 0} -\newlength{\ql} \newlength{\qll} \newlength{\qlll} \newlength{\qllll} -\newlength{\qlp} \newlength{\qllp} \newlength{\qlllp} \newlength{\qllllp} -\settowidth{\ql}{0} \settowidth{\qll}{00} \settowidth{\qlll}{000} \settowidth{\qllll}{0000} -\settowidth{\qlp}{.0} \settowidth{\qllp}{.00} \settowidth{\qlllp}{.000} \settowidth{\qllllp}{.0000} -\newlength{\qlup} \newlength{\qlupp} -\settowidth{\qlup}{$^{\prime}$} \settowidth{\qlupp}{$^{\prime\prime}$} -% -% --------------------------------------------------------- -% - End of Definitions -% --------------------------------------------------------- - - - - - - - - +% +% --------------------------------------------------------------- +% define new commands/symbols +% --------------------------------------------------------------- +% +% General stuff +% +\hyphenation{ALICE} +\hyphenation{ATLAS} +\hyphenation{ALSIM} +\hyphenation{SPSLC} +\hyphenation{between} +\hyphenation{basis} +\hyphenation{robust} +\hyphenation{cables} +\hyphenation{below} +\hyphenation{because} +\hyphenation{every rectan-gular} +\newcommand{\Lumi}{\ensuremath{\cal{L}}} +% +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +\newcommand{\HRule}{\rule{0.4\linewidth}{0.3mm}} +\newcommand{\cinst}[2]{$^{\protect\mathrm{#1)}}$~#2\par} +\newcommand{\crefi}[1]{$^{\protect\mathrm{#1)}}$} +\newcommand{\crefii}[2]{$^{\protect\mathrm{#1,#2)}}$} +\newcommand{\Rule}{\rule[-.7ex]{0ex}{2.9ex}} +\newcommand{\rbox}[1]{\raisebox{1.5ex}[-1.5ex]{#1}} +% +% symbols... +% +\newcommand{\mrm}{\mathrm} +\newcommand{\pt}{\ensuremath{p_{\mathrm{t}}} } +\newcommand{\et}{\ensuremath{E_{\mathrm{T}}}} +%\newcommand {\pT} {\mbox{$p_{\rm t}$}} +\newcommand{\mt}{\ensuremath{m_{\mathrm{t}}}} +\newcommand{\minv}{\mbox{$m_{\ee}$}} +\newcommand{\ee}{\mbox{e$^+$e$^-$}} +\newcommand {\rap} {\mbox{$\left | y \right | $}} +%\newcommand{\sigee}{\raisebox{0.2ex}{$\sigma_E$}/\raisebox{-0.4ex}{\kern0.1em$E$}} +\newcommand{\sigee}{$\sigma_E$/$E$} +\newcommand{\dd}{\mrm{d}} +% ... & +\newcommand{\eg}{{e.g.~\@\xspace}} +\newcommand{\ie}{i.e.\@\xspace} +\newcommand{\elm}{e.m.\@\xspace} + +%\def\mt{\relax \ifmmode m_{\mathrm{t}} \else $m_{\mathrm{t}}$\@\xspace\fi} +%\def\pt{\relax \ifmmode p_{\mathrm{t}} \else \mbox{$p_{\mathrm{t}}$}\xspace\fi} +% +% units of measure +% +\newcommand {\lum} {\, \mbox{${\rm cm}^{-2} {\rm s}^{-1}$}} +\newcommand {\barn} {\, \mbox{${\rm barn}$}} +\newcommand {\m} {\, \mbox{${\rm m}$}} +\newcommand {\bstar} {\, \mbox{$\beta^{*}$}} +\newcommand {\hour} {\, \mbox{${\rm h}$}} +\newcommand{\dg}{\mbox{$^\circ$}} +%\newcommand {\grad} {\mbox{$^{\circ}$}} +\newcommand {\mass} {\mbox{\rm GeV$\kern-0.15em /\kern-0.12em c^2$}} +\newcommand {\tev} {\mbox{${\rm TeV}$}} +\newcommand {\gev} {\mbox{${\rm GeV}$}} +\newcommand {\mev} {\mbox{${\rm MeV}$}} +\newcommand {\kev} {\mbox{${\rm keV}$}} +\newcommand {\mom} {\mbox{\rm GeV$\kern-0.15em /\kern-0.12em c$}} +\newcommand {\mum} {\mbox{$\mu {\rm m}$}} +\newcommand {\gmom} {\mbox{\rm GeV$\kern-0.15em /\kern-0.12em c$}} +\newcommand {\mmass} {\mbox{\rm MeV$\kern-0.15em /\kern-0.12em c^2$}} +\newcommand {\mmom} {\mbox{\rm MeV$\kern-0.15em /\kern-0.12em c$}} +\newcommand {\nb} {\mbox{\rm nb}} +\newcommand {\musec} {\mbox{$\mu {\rm s}$}} +\newcommand {\cm} {\mbox{${\rm cm}$}} +\newcommand {\mm} {\mbox{${\rm mm}$}} +\newcommand {\cmq} {\mbox{${\rm cm}^{2}$}} +\newcommand {\dens} {\mbox{${\rm g}/{\rm cm}^{3}$}} +% +% Particles +% +\newcommand{\pizero}{\mbox{$\mathrm {\pi^0}$}} +\newcommand{\K}{\mbox{$\mathrm {K}$}} +\newcommand{\Kzs}{\mbox{$\mathrm {K^0_S}$}} +\newcommand{\KzS}{\mbox{$\mathrm {K^0_S}$}} +\newcommand{\KzL}{\mbox{$\mathrm {K^0_L}$}} +\newcommand{\Jpsi} {\mbox{J\kern-0.05em /\kern-0.05em$\psi$}\xspace} +\newcommand{\psip} {\mbox{$\psi^\prime$}\xspace} +\newcommand{\Ups} {\mbox{$\Upsilon$}\xspace} +\newcommand{\Upsp} {\mbox{$\Upsilon^\prime$}\xspace} +\newcommand{\Upspp} {\mbox{$\Upsilon^{\prime\prime}$}\xspace} +\newcommand{\qqbar} {\mbox{$q\bar{q}$}\xspace} + +%\newcommand{\qqbar}{\mbox{$\mathrm {q\overline{q}}$}} +\newcommand{\ppbar}{\mbox{$\mathrm {p\overline{p}}$}} +\newcommand{\ccbar}{\mbox{$\mathrm {c\overline{c}}$}} +\newcommand{\bbbar}{\mbox{$\mathrm {b\overline{b}}$}} +\newcommand{\sbbbar}{\mbox{$\scriptstyle\mathrm {b\overline{b}}$}} +\newcommand{\ttbar}{\mbox{$\mathrm {t\overline{t}}$}} +\newcommand{\sttbar}{\mbox{$\scriptstyle\mathrm {t\overline{t}}$}} +\newcommand{\BBbar}{\mbox{$\mathrm {B\overline{B}}$}} +\newcommand{\Bzd}{\mbox{$\mathrm {B^0_d}$}} +\newcommand{\Bbzd}{\mbox{$\mathrm {\overline{B}^0_d}$}} +\newcommand{\Bzs}{\mbox{$\mathrm {B^0_s}$}} +\newcommand{\Bbzs}{\mbox{$\mathrm {\overline{B}^0_s}$}} +\newcommand{\gaga}{\mbox{$\mathrm {\gamma\gamma}$}} +% +% Bibliography stuff +% +\def\NIM#1#2#3{Nucl. Instr. Meth. {\bf #1}\ (#2)\ #3} +\def\IEEE#1#2#3{IEEE Trans. Nucl. Sci. {\bf #1}\ (#2)\ #3} +\def\NP#1#2#3{Nucl. Phys. {\bf #1}\ (#2)\ #3} +\def\PL#1#2#3{Phys. Lett. {\bf #1}\ (#2)\ #3} +\def\PR#1#2#3{Phys. Rev. {\bf #1}\ (#2)\ #3} +\def\PRL#1#2#3{Phys. Rev. Lett. {\bf #1}\ (#2)\ #3} +\def\ZP#1#2#3{Z. Phys. {\bf #1}\ (#2)\ #3} +\def\EJP#1#2#3{Eur. J. Phys. {\bf #1}\ (#2)\ #3} +\def\JPG#1#2#3{J. Phys. G: Nucl. Part. Phys. {\bf #1}\ (#2)\ #3} +\def\RMP#1#2#3{Rev. Mod. Phys. {\bf #1}\ (#2)\ #3} +\def\ARNPS#1#2#3{Ann. Rev. Nucl. Part. Sc. {\bf #1}\ (#2)\ #3} +\def\PRP#1#2#3{Phys. Rep. {\bf #1}\ (#2)\ #3} +\def\RPP#1#2#3{Rep. on Progr. in Phys. {\bf #1}\ (#2)\ #3} +%\def\#1#2#3{ {\bf #1}\ (#2)\ #3} + +\def\ALI#1#2{ALICE Internal Note {\sc #1--#2}} +\def\ALIC#1#2#3{ALICE Internal Note {\sc #1--#2 (#3)}} +\def\subNIM{submitted to Nucl. Instr. Meth.} +\def\subIEEE{submitted to IEEE Trans. Nucl. Sci.} +\def\subNP{submitted to Nucl. Phys.} +\def\subPL{submitted to Phys. Lett.} +\def\subPR{submitted to Phys. Rev.} +\def\subPRL{submitted to Phys. Rev. Lett.} +\def\subEJP{submitted to Eur. J. Phys.} +%\def\tosubNIM{to be submitted to Nucl. Instrum. Methods} +%\def\tosubNP{to be submitted to Nucl. Phys.} +%\def\tosubPL{to be submitted to Phys. Lett.} +%\def\tosubPR{to be submitted to Phys. Rev.} +%\def\tosubPRL{to be submitted to Phys. Rev. Lett.} +%\def\tosubZP{to be submitted to Z. Phys.} +% +% Gases +% +\def\xea{\mbox{Xe,CH$_4$ (10\%)}} +\def\xeb{\mbox{Xe,CO$_2$ (10\%)}} +\def\xec{\mbox{Xe,CO$_2$ (15\%)}} +\def\xed{\mbox{Xe,CO$_2$ (20\%)}} +% +% other things... +% +\def\tvi{\vrule height 12pt depth 5pt width 0pt} +\def\vphant{\vphantom{{{1\over{2}}\over{{1\over{2}}}}}} +\def\dis{\displaystyle} + +\newlength{\digitwidth} \settowidth{\digitwidth}{\rm 0} +\newlength{\ql} \newlength{\qll} \newlength{\qlll} \newlength{\qllll} +\newlength{\qlp} \newlength{\qllp} \newlength{\qlllp} \newlength{\qllllp} +\settowidth{\ql}{0} \settowidth{\qll}{00} \settowidth{\qlll}{000} \settowidth{\qllll}{0000} +\settowidth{\qlp}{.0} \settowidth{\qllp}{.00} \settowidth{\qlllp}{.000} \settowidth{\qllllp}{.0000} +\newlength{\qlup} \newlength{\qlupp} +\settowidth{\qlup}{$^{\prime}$} \settowidth{\qlupp}{$^{\prime\prime}$} +% +% --------------------------------------------------------- +% - End of Definitions +% --------------------------------------------------------- + + + + + + + + diff --git a/TRD/doc/plots/trgsim_ov.eps b/TRD/doc/plots/trgsim_ov.eps index cde29aee03d..e837c788002 100644 --- a/TRD/doc/plots/trgsim_ov.eps +++ b/TRD/doc/plots/trgsim_ov.eps @@ -1,190 +1,190 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: trgsim_ov.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Wed May 27 11:02:53 2009 -%%For: jklein@pcalicejs (Jochen KLEIN) -%%BoundingBox: 0 0 758 128 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 128 moveto 0 0 lineto 758 0 lineto 758 128 lineto closepath clip newpath --53.3 144.7 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 50 -/Times-Roman ff 300.00 scf sf -3982 1275 m -gs 1 -1 sc (digitized) col0 sh gr -/Times-Roman ff 300.00 scf sf -4102 1605 m -gs 1 -1 sc (values) col0 sh gr -/Times-Roman ff 300.00 scf sf -6802 1275 m -gs 1 -1 sc (digital) col0 sh gr -/Times-Roman ff 300.00 scf sf -6705 1605 m -gs 1 -1 sc (filtering) col0 sh gr -/Times-Roman ff 300.00 scf sf -9427 1275 m -gs 1 -1 sc (tracklet) col0 sh gr -/Times-Roman ff 300.00 scf sf -9232 1605 m -gs 1 -1 sc (calculation) col0 sh gr -/Times-Roman ff 300.00 scf sf -12292 1200 m -gs 1 -1 sc (global) col0 sh gr -/Times-Roman ff 300.00 scf sf -12165 1530 m -gs 1 -1 sc (tracking) col0 sh gr -% Polyline -7.500 slw -n 900 1800 m 2700 1800 l 2700 900 l 900 900 l - cp gs col0 s gr -% Polyline -n 3600 1800 m 5400 1800 l 5400 900 l 3600 900 l - cp gs col0 s gr -% Polyline -n 6300 1800 m 8100 1800 l 8100 900 l 6300 900 l - cp gs col0 s gr -% Polyline -n 9000 1800 m 10800 1800 l 10800 900 l 9000 900 l - cp gs col0 s gr -% Polyline -n 11700 1800 m 13500 1800 l 13500 900 l 11700 900 l - cp gs col0 s gr -% Polyline -n 3000 300 m 11400 300 l 11400 2400 l 3000 2400 l - cp gs col0 s gr -% Polyline -n 6000 600 m 11100 600 l 11100 2100 l 6000 2100 l - cp gs col0 s gr -% Polyline -15.000 slw -gs clippath -3615 1410 m 3615 1290 l 3327 1290 l 3567 1350 l 3327 1410 l cp -eoclip -n 2700 1350 m - 3600 1350 l gs col0 s gr gr - -% arrowhead -n 3327 1410 m 3567 1350 l 3327 1290 l col0 s -% Polyline -gs clippath -6315 1410 m 6315 1290 l 6027 1290 l 6267 1350 l 6027 1410 l cp -eoclip -n 5400 1350 m - 6300 1350 l gs col0 s gr gr - -% arrowhead -n 6027 1410 m 6267 1350 l 6027 1290 l col0 s -% Polyline -gs clippath -9015 1410 m 9015 1290 l 8727 1290 l 8967 1350 l 8727 1410 l cp -eoclip -n 8100 1350 m - 9000 1350 l gs col0 s gr gr - -% arrowhead -n 8727 1410 m 8967 1350 l 8727 1290 l col0 s -% Polyline -gs clippath -11715 1410 m 11715 1290 l 11427 1290 l 11667 1350 l 11427 1410 l cp -eoclip -n 10800 1350 m - 11700 1350 l gs col0 s gr gr - -% arrowhead -n 11427 1410 m 11667 1350 l 11427 1290 l col0 s -/Times-Roman ff 300.00 scf sf -1575 1425 m -gs 1 -1 sc (Hits) col0 sh gr -/Times-Roman ff 300.00 scf sf -7650 825 m -gs 1 -1 sc (AliTRDmcmSim) col0 sh gr -/Times-Roman ff 300.00 scf sf -5925 525 m -gs 1 -1 sc (AliTRDdigitzer) col0 sh gr -% here ends figure; -$F2psEnd -rs +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: trgsim_ov.fig +%%Creator: fig2dev Version 3.2 Patchlevel 4 +%%CreationDate: Wed May 27 11:02:53 2009 +%%For: jklein@pcalicejs (Jochen KLEIN) +%%BoundingBox: 0 0 758 128 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 128 moveto 0 0 lineto 758 0 lineto 758 128 lineto closepath clip newpath +-53.3 144.7 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 50 +/Times-Roman ff 300.00 scf sf +3982 1275 m +gs 1 -1 sc (digitized) col0 sh gr +/Times-Roman ff 300.00 scf sf +4102 1605 m +gs 1 -1 sc (values) col0 sh gr +/Times-Roman ff 300.00 scf sf +6802 1275 m +gs 1 -1 sc (digital) col0 sh gr +/Times-Roman ff 300.00 scf sf +6705 1605 m +gs 1 -1 sc (filtering) col0 sh gr +/Times-Roman ff 300.00 scf sf +9427 1275 m +gs 1 -1 sc (tracklet) col0 sh gr +/Times-Roman ff 300.00 scf sf +9232 1605 m +gs 1 -1 sc (calculation) col0 sh gr +/Times-Roman ff 300.00 scf sf +12292 1200 m +gs 1 -1 sc (global) col0 sh gr +/Times-Roman ff 300.00 scf sf +12165 1530 m +gs 1 -1 sc (tracking) col0 sh gr +% Polyline +7.500 slw +n 900 1800 m 2700 1800 l 2700 900 l 900 900 l + cp gs col0 s gr +% Polyline +n 3600 1800 m 5400 1800 l 5400 900 l 3600 900 l + cp gs col0 s gr +% Polyline +n 6300 1800 m 8100 1800 l 8100 900 l 6300 900 l + cp gs col0 s gr +% Polyline +n 9000 1800 m 10800 1800 l 10800 900 l 9000 900 l + cp gs col0 s gr +% Polyline +n 11700 1800 m 13500 1800 l 13500 900 l 11700 900 l + cp gs col0 s gr +% Polyline +n 3000 300 m 11400 300 l 11400 2400 l 3000 2400 l + cp gs col0 s gr +% Polyline +n 6000 600 m 11100 600 l 11100 2100 l 6000 2100 l + cp gs col0 s gr +% Polyline +15.000 slw +gs clippath +3615 1410 m 3615 1290 l 3327 1290 l 3567 1350 l 3327 1410 l cp +eoclip +n 2700 1350 m + 3600 1350 l gs col0 s gr gr + +% arrowhead +n 3327 1410 m 3567 1350 l 3327 1290 l col0 s +% Polyline +gs clippath +6315 1410 m 6315 1290 l 6027 1290 l 6267 1350 l 6027 1410 l cp +eoclip +n 5400 1350 m + 6300 1350 l gs col0 s gr gr + +% arrowhead +n 6027 1410 m 6267 1350 l 6027 1290 l col0 s +% Polyline +gs clippath +9015 1410 m 9015 1290 l 8727 1290 l 8967 1350 l 8727 1410 l cp +eoclip +n 8100 1350 m + 9000 1350 l gs col0 s gr gr + +% arrowhead +n 8727 1410 m 8967 1350 l 8727 1290 l col0 s +% Polyline +gs clippath +11715 1410 m 11715 1290 l 11427 1290 l 11667 1350 l 11427 1410 l cp +eoclip +n 10800 1350 m + 11700 1350 l gs col0 s gr gr + +% arrowhead +n 11427 1410 m 11667 1350 l 11427 1290 l col0 s +/Times-Roman ff 300.00 scf sf +1575 1425 m +gs 1 -1 sc (Hits) col0 sh gr +/Times-Roman ff 300.00 scf sf +7650 825 m +gs 1 -1 sc (AliTRDmcmSim) col0 sh gr +/Times-Roman ff 300.00 scf sf +5925 525 m +gs 1 -1 sc (AliTRDdigitzer) col0 sh gr +% here ends figure; +$F2psEnd +rs showpage \ No newline at end of file diff --git a/TUHKMgen/UHKM/EquationSolver.icc b/TUHKMgen/UHKM/EquationSolver.icc index b794e5cc181..32e56c353f4 100644 --- a/TUHKMgen/UHKM/EquationSolver.icc +++ b/TUHKMgen/UHKM/EquationSolver.icc @@ -1,123 +1,123 @@ -/* - - Nikolai Amelin, Ludmila Malinina, Timur Pocheptsov (C) JINR/Dubna - amelin@sunhe.jinr.ru, malinina@sunhe.jinr.ru, pocheptsov@sunhe.jinr.ru - November. 2, 2006 - -*/ -//This equation solver class is taken from GEANT4 and modified!! - -#include -#include - -template -Bool_t EquationSolver::Brent(Function& theFunction) { - const Double_t precision = 3.0e-8; - - // Check the interval before start - if(fA > fB || TMath::Abs(fA-fB) <= fTolerance) { - std::cerr << "EquationSolver::Brent: The interval must be properly set." << std::endl; - return false; - } - Double_t fa = theFunction(fA); - Double_t fb = theFunction(fB); - if(fa*fb > 0.0) { - std::cerr << "EquationSolver::Brent: The interval must include a root." << std::endl; - return false; - } - - Double_t c = fB; - Double_t fc = fb; - Double_t d = 0.0; - //Double_t fd = 0.0; - Double_t e = 0.0; - //Double_t fe = 0.0; - - for(Int_t i=0; i < fMaxIter; i++) { - // Rename a,b,c and adjust bounding interval d - if(fb*fc > 0.0) { - c = fA; - fc = fa; - d = fB - fA; - e = d; - } - if(TMath::Abs(fc) < TMath::Abs(fb)) { - fA = fB; - fB = c; - c = fA; - fa = fb; - fb = fc; - fc = fa; - } - Double_t Tol1 = 2.0*precision*TMath::Abs(fB) + 0.5*fTolerance; - Double_t xm = 0.5*(c-fB); - if(TMath::Abs(xm) <= Tol1 || fb == 0.0) { - fRoot = fB; - return true; - } - // Inverse quadratic interpolation - if(TMath::Abs(e) >= Tol1 && TMath::Abs(fa) > TMath::Abs(fb)) { - Double_t s = fb/fa; - Double_t p = 0.0; - Double_t q = 0.0; - if(fA == c) { - p = 2.0*xm*s; - q = 1.0 - s; - } - else { - q = fa/fc; - Double_t r = fb/fc; - p = s*(2.0*xm*q*(q-r)-(fB-fA)*(r-1.0)); - q = (q-1.0)*(r-1.0)*(s-1.0); - } - // Check bounds - if(p > 0.0) q = -q; - p = TMath::Abs(p); - Double_t min1 = 3.0*xm*q-TMath::Abs(Tol1*q); - Double_t min2 = TMath::Abs(e*q); - if (2.0*p < TMath::Min(min1,min2)) { - // Interpolation - e = d; - d = p/q; - } - else { - // Bisection - d = xm; - e = d; - } - } - else { - // Bounds decreasing too slowly, use bisection - d = xm; - e = d; - } - // Move last guess to a - fA = fB; - fa = fb; - if (TMath::Abs(d) > Tol1) fB += d; - else { - if (xm >= 0.0) fB += TMath::Abs(Tol1); - else fB -= TMath::Abs(Tol1); - } - fb = theFunction(fB); - } - std::cerr << "EquationSolver::Brent: Number of iterations exceeded." << std::endl; - return false; -} - -template -void EquationSolver::SetIntervalLimits(const Double_t Limit1, const Double_t Limit2) { - if(TMath::Abs(Limit1-Limit2) <= fTolerance) { - std::cerr << "EquationSolver::SetIntervalLimits: Interval must be wider than tolerance." << std::endl; - return; - } - if(Limit1 < Limit2) { - fA = Limit1; - fB = Limit2; - } - else { - fA = Limit2; - fB = Limit1; - } - return; -} +/* + + Nikolai Amelin, Ludmila Malinina, Timur Pocheptsov (C) JINR/Dubna + amelin@sunhe.jinr.ru, malinina@sunhe.jinr.ru, pocheptsov@sunhe.jinr.ru + November. 2, 2006 + +*/ +//This equation solver class is taken from GEANT4 and modified!! + +#include +#include + +template +Bool_t EquationSolver::Brent(Function& theFunction) { + const Double_t precision = 3.0e-8; + + // Check the interval before start + if(fA > fB || TMath::Abs(fA-fB) <= fTolerance) { + std::cerr << "EquationSolver::Brent: The interval must be properly set." << std::endl; + return false; + } + Double_t fa = theFunction(fA); + Double_t fb = theFunction(fB); + if(fa*fb > 0.0) { + std::cerr << "EquationSolver::Brent: The interval must include a root." << std::endl; + return false; + } + + Double_t c = fB; + Double_t fc = fb; + Double_t d = 0.0; + //Double_t fd = 0.0; + Double_t e = 0.0; + //Double_t fe = 0.0; + + for(Int_t i=0; i < fMaxIter; i++) { + // Rename a,b,c and adjust bounding interval d + if(fb*fc > 0.0) { + c = fA; + fc = fa; + d = fB - fA; + e = d; + } + if(TMath::Abs(fc) < TMath::Abs(fb)) { + fA = fB; + fB = c; + c = fA; + fa = fb; + fb = fc; + fc = fa; + } + Double_t Tol1 = 2.0*precision*TMath::Abs(fB) + 0.5*fTolerance; + Double_t xm = 0.5*(c-fB); + if(TMath::Abs(xm) <= Tol1 || fb == 0.0) { + fRoot = fB; + return true; + } + // Inverse quadratic interpolation + if(TMath::Abs(e) >= Tol1 && TMath::Abs(fa) > TMath::Abs(fb)) { + Double_t s = fb/fa; + Double_t p = 0.0; + Double_t q = 0.0; + if(fA == c) { + p = 2.0*xm*s; + q = 1.0 - s; + } + else { + q = fa/fc; + Double_t r = fb/fc; + p = s*(2.0*xm*q*(q-r)-(fB-fA)*(r-1.0)); + q = (q-1.0)*(r-1.0)*(s-1.0); + } + // Check bounds + if(p > 0.0) q = -q; + p = TMath::Abs(p); + Double_t min1 = 3.0*xm*q-TMath::Abs(Tol1*q); + Double_t min2 = TMath::Abs(e*q); + if (2.0*p < TMath::Min(min1,min2)) { + // Interpolation + e = d; + d = p/q; + } + else { + // Bisection + d = xm; + e = d; + } + } + else { + // Bounds decreasing too slowly, use bisection + d = xm; + e = d; + } + // Move last guess to a + fA = fB; + fa = fb; + if (TMath::Abs(d) > Tol1) fB += d; + else { + if (xm >= 0.0) fB += TMath::Abs(Tol1); + else fB -= TMath::Abs(Tol1); + } + fb = theFunction(fB); + } + std::cerr << "EquationSolver::Brent: Number of iterations exceeded." << std::endl; + return false; +} + +template +void EquationSolver::SetIntervalLimits(const Double_t Limit1, const Double_t Limit2) { + if(TMath::Abs(Limit1-Limit2) <= fTolerance) { + std::cerr << "EquationSolver::SetIntervalLimits: Interval must be wider than tolerance." << std::endl; + return; + } + if(Limit1 < Limit2) { + fA = Limit1; + fB = Limit2; + } + else { + fA = Limit2; + fB = Limit1; + } + return; +} diff --git a/VZERO/AliVZERODataFEE.cxx b/VZERO/AliVZERODataFEE.cxx index 7e73042180a..98ca09f8a25 100644 --- a/VZERO/AliVZERODataFEE.cxx +++ b/VZERO/AliVZERODataFEE.cxx @@ -1,194 +1,194 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ -// --------------------- -// Class AliVZERODataFEE -// --------------------- -// Used to process the TMap of DCS values comming from the shuttle. -// It stores into a TMap the FEE parameters for the given run number -// - -#include -#include -#include - -#include "AliDCSValue.h" -#include "AliLog.h" -#include "AliVZERODataFEE.h" - -ClassImp(AliVZERODataFEE) - -//_____________________________________________________________________________ -AliVZERODataFEE::AliVZERODataFEE() : - TObject(), - fRun(0), - fStartTime(0), - fEndTime(0), - fIsProcessed(kFALSE), - fParameters(NULL) -{ - // Default constructor -} - -//_____________________________________________________________________________ -AliVZERODataFEE::AliVZERODataFEE(Int_t nRun, UInt_t startTime, UInt_t endTime) : - TObject(), - fRun(nRun), - fStartTime(startTime), - fEndTime(endTime), - fIsProcessed(kFALSE), - fParameters(new TMap()) -{ - // Constructor - AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", nRun, - TTimeStamp(startTime).AsString(), - TTimeStamp(endTime).AsString())); - fParameters->SetOwnerValue(); - Init(); -} - -//_____________________________________________________________________________ -AliVZERODataFEE::~AliVZERODataFEE() -{ - delete fParameters; -} - -//_____________________________________________________________________________ -void AliVZERODataFEE::Init(){ - // Initialization of DCS aliases - int iAlias = 0; - - // CCIU Parameters - - fAliasNames[iAlias++] = "V00/FEE/CCIU/BBAThreshold"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/BBCThreshold"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/BGAThreshold"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/BGCThreshold"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/BBAForBGThreshold"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/BBCForBGThreshold"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0AThrLow"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0AThrHigh"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0CThrLow"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0CThrHigh"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0AThrLow"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0AThrHigh"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0CThrLow"; - fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0CThrHigh"; - for(int i=1;i<=5;i++) { - fAliasNames[iAlias] = "V00/FEE/CCIU/TriggerSelect"; - fAliasNames[iAlias++] += Form("%d",i); - } - - // CIU Parameters - - for(int iCIU = 0; iCIU<8 ; iCIU++){ - for(int iParam=0; iParamGetEntries()<1){ - AliError(Form("Alias %s has no entries!", fAliasNames[iAlias].Data())); - continue; - } - - TIter iterarray(aliasArr); - - AliDCSValue * lastVal = NULL; - while((aValue = (AliDCSValue*) iterarray.Next())) lastVal = aValue; // Take only the last value - - fParameters->Add(new TObjString(fAliasNames[iAlias].Data()),lastVal); - - } - - fIsProcessed=kTRUE; - -} -//_____________________________________________________________________________ - -TString AliVZERODataFEE::GetFEEParamName(Int_t iParam){ -// Return the name of the FEE Parameter iParam - TString result; - if(iParam>kNCIUParam + kNChannelParam -1) { - AliError(Form("Requesting FEE parameter number %d. Max parameter number is : %d",iParam,kNCIUParam + kNChannelParam-1)); - return result; - } - switch (iParam) { - case 0: result = "Clk1Win1"; break; - case 1: result = "Clk2Win1"; break; - case 2: result = "Clk1Win2"; break; - case 3: result = "Clk2Win2"; break; - case 4: result = "DelayClk1Win1"; break; - case 5: result = "DelayClk2Win1"; break; - case 6: result = "DelayClk1Win2"; break; - case 7: result = "DelayClk2Win2"; break; - case 8: result = "LatchWin1"; break; - case 9: result = "LatchWin2"; break; - case 10: result = "ResetWin1"; break; - case 11: result = "ResetWin2"; break; - case 12: result = "PedestalSubtraction"; break; - case 13: result = "EnableCharge"; break; - case 14: result = "EnableTiming"; break; - case 15: result = "PedEven"; break; - case 16: result = "PedOdd"; break; - case 17: result = "PedCutEven"; break; - case 18: result = "PedCutOdd"; break; - case 19: result = "DelayHit"; break; - case 20: result = "DiscriThr"; break; - } - return result; -} - -void AliVZERODataFEE::PrintAliases(){ - for(int i=0;i +#include +#include + +#include "AliDCSValue.h" +#include "AliLog.h" +#include "AliVZERODataFEE.h" + +ClassImp(AliVZERODataFEE) + +//_____________________________________________________________________________ +AliVZERODataFEE::AliVZERODataFEE() : + TObject(), + fRun(0), + fStartTime(0), + fEndTime(0), + fIsProcessed(kFALSE), + fParameters(NULL) +{ + // Default constructor +} + +//_____________________________________________________________________________ +AliVZERODataFEE::AliVZERODataFEE(Int_t nRun, UInt_t startTime, UInt_t endTime) : + TObject(), + fRun(nRun), + fStartTime(startTime), + fEndTime(endTime), + fIsProcessed(kFALSE), + fParameters(new TMap()) +{ + // Constructor + AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", nRun, + TTimeStamp(startTime).AsString(), + TTimeStamp(endTime).AsString())); + fParameters->SetOwnerValue(); + Init(); +} + +//_____________________________________________________________________________ +AliVZERODataFEE::~AliVZERODataFEE() +{ + delete fParameters; +} + +//_____________________________________________________________________________ +void AliVZERODataFEE::Init(){ + // Initialization of DCS aliases + int iAlias = 0; + + // CCIU Parameters + + fAliasNames[iAlias++] = "V00/FEE/CCIU/BBAThreshold"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/BBCThreshold"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/BGAThreshold"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/BGCThreshold"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/BBAForBGThreshold"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/BBCForBGThreshold"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0AThrLow"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0AThrHigh"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0CThrLow"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/CentralityV0CThrHigh"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0AThrLow"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0AThrHigh"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0CThrLow"; + fAliasNames[iAlias++] = "V00/FEE/CCIU/MultV0CThrHigh"; + for(int i=1;i<=5;i++) { + fAliasNames[iAlias] = "V00/FEE/CCIU/TriggerSelect"; + fAliasNames[iAlias++] += Form("%d",i); + } + + // CIU Parameters + + for(int iCIU = 0; iCIU<8 ; iCIU++){ + for(int iParam=0; iParamGetEntries()<1){ + AliError(Form("Alias %s has no entries!", fAliasNames[iAlias].Data())); + continue; + } + + TIter iterarray(aliasArr); + + AliDCSValue * lastVal = NULL; + while((aValue = (AliDCSValue*) iterarray.Next())) lastVal = aValue; // Take only the last value + + fParameters->Add(new TObjString(fAliasNames[iAlias].Data()),lastVal); + + } + + fIsProcessed=kTRUE; + +} +//_____________________________________________________________________________ + +TString AliVZERODataFEE::GetFEEParamName(Int_t iParam){ +// Return the name of the FEE Parameter iParam + TString result; + if(iParam>kNCIUParam + kNChannelParam -1) { + AliError(Form("Requesting FEE parameter number %d. Max parameter number is : %d",iParam,kNCIUParam + kNChannelParam-1)); + return result; + } + switch (iParam) { + case 0: result = "Clk1Win1"; break; + case 1: result = "Clk2Win1"; break; + case 2: result = "Clk1Win2"; break; + case 3: result = "Clk2Win2"; break; + case 4: result = "DelayClk1Win1"; break; + case 5: result = "DelayClk2Win1"; break; + case 6: result = "DelayClk1Win2"; break; + case 7: result = "DelayClk2Win2"; break; + case 8: result = "LatchWin1"; break; + case 9: result = "LatchWin2"; break; + case 10: result = "ResetWin1"; break; + case 11: result = "ResetWin2"; break; + case 12: result = "PedestalSubtraction"; break; + case 13: result = "EnableCharge"; break; + case 14: result = "EnableTiming"; break; + case 15: result = "PedEven"; break; + case 16: result = "PedOdd"; break; + case 17: result = "PedCutEven"; break; + case 18: result = "PedCutOdd"; break; + case 19: result = "DelayHit"; break; + case 20: result = "DiscriThr"; break; + } + return result; +} + +void AliVZERODataFEE::PrintAliases(){ + for(int i=0;i - -// -// Class AliVZERODataFEE -// --------------------- -// Used to process the TMap of DCS values comming from the shuttle. -// It stores into a TMap the FEE parameters for the given run number -// - - -class AliVZERODataFEE : public TObject { -public: - //enum {kNAliases=64}; - AliVZERODataFEE(); - AliVZERODataFEE(Int_t nRun, UInt_t startTime, UInt_t endTime); - virtual ~AliVZERODataFEE(); - - void SetRun(Int_t run) {fRun = run;} - void SetStartTime(Int_t startTime) {fStartTime = startTime;} - void SetEndTime(Int_t endTime) {fEndTime = endTime;} - Int_t GetRun() const {return fRun;} - Int_t GetStartTime() const {return fStartTime;} - Int_t GetEndTime() const {return fEndTime;} - - void ProcessData(TMap& aliasMap); - void Init(); - void PrintAliases(); - - TMap * GetParameters() const {return fParameters;}; - - enum { kNCIUBoards = 8, kNCIUParam = 13, kNChannelParam = 8, kNCCIUParam = 19, kNAliases = kNChannelParam*8*kNCIUBoards +kNCIUParam*kNCIUBoards + kNCCIUParam }; - -private: - - AliVZERODataFEE(const AliVZERODataFEE & /*dataFEE*/); // Not implemented - AliVZERODataFEE& operator= (const AliVZERODataFEE &/*dataFEE*/); // Not implemented - - Int_t fRun; // Run number - Int_t fStartTime; // Start time - Int_t fEndTime; // End time - TString fAliasNames[kNAliases]; // aliases for DCS data - Bool_t fIsProcessed; // bool to know processing status - TMap * fParameters; // TMap holding the FEE parameters - - TString GetFEEParamName(Int_t iParam); - - - ClassDef( AliVZERODataFEE, 1 ) - -}; - - -#endif // ALIVZERODATAFEE_H - +#ifndef ALIVZERODATAFEE_H +#define ALIVZERODATAFEE_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights + * reserved. + * + * See cxx source for full Copyright notice + */ +class TMap; +class TString; + +#include + +// +// Class AliVZERODataFEE +// --------------------- +// Used to process the TMap of DCS values comming from the shuttle. +// It stores into a TMap the FEE parameters for the given run number +// + + +class AliVZERODataFEE : public TObject { +public: + //enum {kNAliases=64}; + AliVZERODataFEE(); + AliVZERODataFEE(Int_t nRun, UInt_t startTime, UInt_t endTime); + virtual ~AliVZERODataFEE(); + + void SetRun(Int_t run) {fRun = run;} + void SetStartTime(Int_t startTime) {fStartTime = startTime;} + void SetEndTime(Int_t endTime) {fEndTime = endTime;} + Int_t GetRun() const {return fRun;} + Int_t GetStartTime() const {return fStartTime;} + Int_t GetEndTime() const {return fEndTime;} + + void ProcessData(TMap& aliasMap); + void Init(); + void PrintAliases(); + + TMap * GetParameters() const {return fParameters;}; + + enum { kNCIUBoards = 8, kNCIUParam = 13, kNChannelParam = 8, kNCCIUParam = 19, kNAliases = kNChannelParam*8*kNCIUBoards +kNCIUParam*kNCIUBoards + kNCCIUParam }; + +private: + + AliVZERODataFEE(const AliVZERODataFEE & /*dataFEE*/); // Not implemented + AliVZERODataFEE& operator= (const AliVZERODataFEE &/*dataFEE*/); // Not implemented + + Int_t fRun; // Run number + Int_t fStartTime; // Start time + Int_t fEndTime; // End time + TString fAliasNames[kNAliases]; // aliases for DCS data + Bool_t fIsProcessed; // bool to know processing status + TMap * fParameters; // TMap holding the FEE parameters + + TString GetFEEParamName(Int_t iParam); + + + ClassDef( AliVZERODataFEE, 1 ) + +}; + + +#endif // ALIVZERODATAFEE_H + diff --git a/VZERO/AliVZEROLogicalSignal.cxx b/VZERO/AliVZEROLogicalSignal.cxx index be4d292fe1e..257ce34049e 100644 --- a/VZERO/AliVZEROLogicalSignal.cxx +++ b/VZERO/AliVZEROLogicalSignal.cxx @@ -1,125 +1,125 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -// -// Class AliVZEROLogicalSignal -// --------------------------- -// Describes a logical signal in the electronics. -// Use it to generate observation windows -// which are used by AliVZEROTriggerSimulator class -// - -#include "AliLog.h" -#include "AliVZEROLogicalSignal.h" - -ClassImp(AliVZEROLogicalSignal) - -//_____________________________________________________________________________ -AliVZEROLogicalSignal::AliVZEROLogicalSignal() : TObject(), fStart(0.), fStop(0.) -{ - // Default constructor -} -//_____________________________________________________________________________ -AliVZEROLogicalSignal::AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay) : TObject(), fStart(0.), fStop(0.) -{ - // Constructor using the profilClock and delay parameters comming from the FEE - - Bool_t word; - Bool_t up=kFALSE; - Bool_t down=kFALSE; - - for(int i=0 ; i<5 ; i++) { - Int_t shift = (i<4) ? (3-i) : 4; - word = (profilClock >> shift) & 0x1; - if(word&&!up) { - fStart = 5. * (i + 1); - up = kTRUE; - } - if(!word&&up&&!down) { - fStop = 5. * (i + 1); - down = kTRUE; - } - } - if(!down) fStop = 30.; - - fStart += delay*1e-2; // Add 10 ps par register unit - fStop += delay*1e-2; -} -//_____________________________________________________________________________ -AliVZEROLogicalSignal::AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal) : - TObject(), fStart(signal.fStart), - fStop(signal.fStop) -{ - // Copy constructor -} - -//_____________________________________________________________________________ -AliVZEROLogicalSignal::~AliVZEROLogicalSignal(){ - // Destructor -} - -//_____________________________________________________________________________ -AliVZEROLogicalSignal& AliVZEROLogicalSignal::operator = -(const AliVZEROLogicalSignal& signal) -{ - // Operator = - if(&signal == this) return *this; - fStart = signal.fStart; - fStop = signal.fStop; - return *this; -} - -//_____________________________________________________________________________ -AliVZEROLogicalSignal AliVZEROLogicalSignal::operator|(const AliVZEROLogicalSignal& signal) const -{ - // Perform the Logical OR of two signals: C = A or B - if((fStart>signal.fStop) || (signal.fStart>fStop)) - AliError(Form("Both signal do not superpose in time.\n Start(A) = %f Stop(A) = %f\n Start(B) = %f Stop(B) = %f",fStart, fStop, signal.fStart,signal.fStop)); - - AliVZEROLogicalSignal result; - if(fStartsignal.fStop) result.fStop = fStop; - else result.fStop = signal.fStop; - - return result; -} -//_____________________________________________________________________________ -AliVZEROLogicalSignal AliVZEROLogicalSignal::operator&(const AliVZEROLogicalSignal& signal) const -{ - // Perform the Logical AND of two signals: C = A and B - if((fStart>signal.fStop) || (signal.fStart>fStop)) - AliError(Form("Both signal do not superpose in time.\n Start(A) = %f Stop(A) = %f\n Start(B) = %f Stop(B) = %f",fStart, fStop, signal.fStart,signal.fStop)); - - AliVZEROLogicalSignal result; - if(fStart>signal.fStart) result.fStart = fStart; - else result.fStart = signal.fStart; - - if(fStopfStart) && (time> shift) & 0x1; + if(word&&!up) { + fStart = 5. * (i + 1); + up = kTRUE; + } + if(!word&&up&&!down) { + fStop = 5. * (i + 1); + down = kTRUE; + } + } + if(!down) fStop = 30.; + + fStart += delay*1e-2; // Add 10 ps par register unit + fStop += delay*1e-2; +} +//_____________________________________________________________________________ +AliVZEROLogicalSignal::AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal) : + TObject(), fStart(signal.fStart), + fStop(signal.fStop) +{ + // Copy constructor +} + +//_____________________________________________________________________________ +AliVZEROLogicalSignal::~AliVZEROLogicalSignal(){ + // Destructor +} + +//_____________________________________________________________________________ +AliVZEROLogicalSignal& AliVZEROLogicalSignal::operator = +(const AliVZEROLogicalSignal& signal) +{ + // Operator = + if(&signal == this) return *this; + fStart = signal.fStart; + fStop = signal.fStop; + return *this; +} + +//_____________________________________________________________________________ +AliVZEROLogicalSignal AliVZEROLogicalSignal::operator|(const AliVZEROLogicalSignal& signal) const +{ + // Perform the Logical OR of two signals: C = A or B + if((fStart>signal.fStop) || (signal.fStart>fStop)) + AliError(Form("Both signal do not superpose in time.\n Start(A) = %f Stop(A) = %f\n Start(B) = %f Stop(B) = %f",fStart, fStop, signal.fStart,signal.fStop)); + + AliVZEROLogicalSignal result; + if(fStartsignal.fStop) result.fStop = fStop; + else result.fStop = signal.fStop; + + return result; +} +//_____________________________________________________________________________ +AliVZEROLogicalSignal AliVZEROLogicalSignal::operator&(const AliVZEROLogicalSignal& signal) const +{ + // Perform the Logical AND of two signals: C = A and B + if((fStart>signal.fStop) || (signal.fStart>fStop)) + AliError(Form("Both signal do not superpose in time.\n Start(A) = %f Stop(A) = %f\n Start(B) = %f Stop(B) = %f",fStart, fStop, signal.fStart,signal.fStop)); + + AliVZEROLogicalSignal result; + if(fStart>signal.fStart) result.fStart = fStart; + else result.fStart = signal.fStart; + + if(fStopfStart) && (time - -class AliVZEROLogicalSignal : public TObject { -public: - AliVZEROLogicalSignal(); - AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay); - virtual ~AliVZEROLogicalSignal(); - AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal); - AliVZEROLogicalSignal& operator= (const AliVZEROLogicalSignal &signal); - AliVZEROLogicalSignal operator& (const AliVZEROLogicalSignal &signal) const; - AliVZEROLogicalSignal operator| (const AliVZEROLogicalSignal &signal) const; - // Print method - virtual void Print(Option_t* opt="") const { AliInfo(Form("\t%s -> Start %f Stop %f\n ",opt,fStart,fStop));} - - Float_t GetStartTime() const {return fStart;}; - Float_t GetStopTime() const {return fStop;}; - Float_t GetWidth() const {return (fStop - fStart);}; - - void SetStartTime(Float_t time){fStart = time;}; - void SetStopTime(Float_t time){fStop = time;}; - - Bool_t IsInCoincidence(Float_t time) const; - -private: - - Float_t fStart; // Start Time of the signal with respect to the LHC Clock - Float_t fStop; // Stop Time of the signal with respect to the LHC Clock - - - ClassDef( AliVZEROLogicalSignal, 1 ) - -}; - -#endif // ALIVZEROLOGICALSIGNAL_H - - +#ifndef ALIVZEROLOGICALSIGNAL_H +#define ALIVZEROLOGICALSIGNAL_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights + * reserved. + * + * See cxx source for full Copyright notice + */ + + +// +// Class AliVZEROLogicalSignal +// --------------------------- +// Describes a logical signal in the electronics. +// Use it to generate observation windows +// which are used by AliVZEROTriggerSimulator class +// + + +#include + +class AliVZEROLogicalSignal : public TObject { +public: + AliVZEROLogicalSignal(); + AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay); + virtual ~AliVZEROLogicalSignal(); + AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal); + AliVZEROLogicalSignal& operator= (const AliVZEROLogicalSignal &signal); + AliVZEROLogicalSignal operator& (const AliVZEROLogicalSignal &signal) const; + AliVZEROLogicalSignal operator| (const AliVZEROLogicalSignal &signal) const; + // Print method + virtual void Print(Option_t* opt="") const { AliInfo(Form("\t%s -> Start %f Stop %f\n ",opt,fStart,fStop));} + + Float_t GetStartTime() const {return fStart;}; + Float_t GetStopTime() const {return fStop;}; + Float_t GetWidth() const {return (fStop - fStart);}; + + void SetStartTime(Float_t time){fStart = time;}; + void SetStopTime(Float_t time){fStop = time;}; + + Bool_t IsInCoincidence(Float_t time) const; + +private: + + Float_t fStart; // Start Time of the signal with respect to the LHC Clock + Float_t fStop; // Stop Time of the signal with respect to the LHC Clock + + + ClassDef( AliVZEROLogicalSignal, 1 ) + +}; + +#endif // ALIVZEROLOGICALSIGNAL_H + + diff --git a/VZERO/AliVZEROTrending.cxx b/VZERO/AliVZEROTrending.cxx index a14644c6d44..22360a22bed 100644 --- a/VZERO/AliVZEROTrending.cxx +++ b/VZERO/AliVZEROTrending.cxx @@ -1,150 +1,150 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -// -// Class AliVZEROTrending -// --------------------------- -// -// class used in QA to publish variables evolution versus time in AMORE. -// These histo are the one which will be looked at by QA Shifter -// -#include "TGraph.h" -#include "TMultiGraph.h" -#include "TLegend.h" -#include "TString.h" - -#include "AliLog.h" -#include "AliVZEROTrending.h" - -ClassImp(AliVZEROTrending) - -//_____________________________________________________________________________ -AliVZEROTrending::AliVZEROTrending() : TH1(), fNEntries(0), fMultiGraphs(NULL) -{ - // Default constructor - for(int i=0; i<8;i++) fGraphs[i] = NULL; - for (int i = 0; i < kDataSize; i++) { - fTime[i] = 0; - for (int j = 0; j < 8; j++) { - fData[j][i] = 0; - } - } -} -//_____________________________________________________________________________ -AliVZEROTrending::AliVZEROTrending(const char* name, const char* title) : TH1(), fNEntries(0), fMultiGraphs(NULL) -{ - SetName(name); - SetTitle(title); - for(int i=0; i<8;i++) fGraphs[i] = NULL; - for (int i = 0; i < kDataSize; i++) { - fTime[i] = 0; - for (int j = 0; j < 8; j++) { - fData[j][i] = 0; - } - } -} -//_____________________________________________________________________________ -AliVZEROTrending::AliVZEROTrending(const AliVZEROTrending &trend) : - TH1(), fNEntries(trend.fNEntries), fMultiGraphs(NULL) -{ - // Copy constructor - for(int i=0; i<8;i++) fGraphs[i] = NULL; - SetName(trend.GetName()); - SetTitle(trend.GetTitle()); - for (int i = 0; i < kDataSize; i++) { - fTime[i] = trend.fTime[i]; - for (int j = 0; j < 8; j++) { - fData[j][i] = trend.fData[j][i]; - } - } -} - -//_____________________________________________________________________________ -AliVZEROTrending::~AliVZEROTrending(){ - for (Int_t i=0; i<8; ++i) delete fGraphs[i]; - delete fMultiGraphs; -} -// ----------------------------------------------------------------- -void AliVZEROTrending::AddEntry(Double_t * data, UInt_t time) -{ - - if(fNEntries=fNEntries){ - AliError(Form("maximum entry is %d\n",fNEntries-1)); - }else{ - AliInfo(Form("Entry %d @ %f : %f %f %f %f %f %f %f %f \n",entry, fTime[entry], - fData[0][entry],fData[1][entry],fData[2][entry],fData[3][entry],fData[4][entry],fData[5][entry],fData[6][entry],fData[7][entry])); - - } -} - -// ----------------------------------------------------------------- -void AliVZEROTrending::Draw(Option_t *option){ - TString opt = option; - fMultiGraphs = new TMultiGraph(); - fMultiGraphs->SetTitle(GetTitle()); - - for(int i=0;i<8;i++) { - fGraphs[i] = new TGraph(GetNEntries(), GetTime(), GetChannel(i)); - fGraphs[i]->SetLineWidth(2); - fGraphs[i]->SetLineColor(i<4 ? i+1 : i -3); - fGraphs[i]->SetLineStyle(i<4 ? 1 : 2); - fMultiGraphs->Add(fGraphs[i]); - } - - fMultiGraphs->Draw("AL"); - fMultiGraphs->GetXaxis()->SetTimeDisplay(1); - fMultiGraphs->GetXaxis()->SetNdivisions(505,kFALSE); - fMultiGraphs->Draw("AL"); - TLegend * legend = new TLegend(0.7,0.65,0.86,0.88); - legend->AddEntry(fGraphs[4],"V0A - Ring0","l"); - legend->AddEntry(fGraphs[5],"V0A - Ring1","l"); - legend->AddEntry(fGraphs[6],"V0A - Ring2","l"); - legend->AddEntry(fGraphs[7],"V0A - Ring3","l"); - legend->AddEntry(fGraphs[0],"V0C - Ring0","l"); - legend->AddEntry(fGraphs[1],"V0C - Ring1","l"); - legend->AddEntry(fGraphs[2],"V0C - Ring2","l"); - legend->AddEntry(fGraphs[3],"V0C - Ring3","l"); - legend->Draw(); -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +// +// Class AliVZEROTrending +// --------------------------- +// +// class used in QA to publish variables evolution versus time in AMORE. +// These histo are the one which will be looked at by QA Shifter +// +#include "TGraph.h" +#include "TMultiGraph.h" +#include "TLegend.h" +#include "TString.h" + +#include "AliLog.h" +#include "AliVZEROTrending.h" + +ClassImp(AliVZEROTrending) + +//_____________________________________________________________________________ +AliVZEROTrending::AliVZEROTrending() : TH1(), fNEntries(0), fMultiGraphs(NULL) +{ + // Default constructor + for(int i=0; i<8;i++) fGraphs[i] = NULL; + for (int i = 0; i < kDataSize; i++) { + fTime[i] = 0; + for (int j = 0; j < 8; j++) { + fData[j][i] = 0; + } + } +} +//_____________________________________________________________________________ +AliVZEROTrending::AliVZEROTrending(const char* name, const char* title) : TH1(), fNEntries(0), fMultiGraphs(NULL) +{ + SetName(name); + SetTitle(title); + for(int i=0; i<8;i++) fGraphs[i] = NULL; + for (int i = 0; i < kDataSize; i++) { + fTime[i] = 0; + for (int j = 0; j < 8; j++) { + fData[j][i] = 0; + } + } +} +//_____________________________________________________________________________ +AliVZEROTrending::AliVZEROTrending(const AliVZEROTrending &trend) : + TH1(), fNEntries(trend.fNEntries), fMultiGraphs(NULL) +{ + // Copy constructor + for(int i=0; i<8;i++) fGraphs[i] = NULL; + SetName(trend.GetName()); + SetTitle(trend.GetTitle()); + for (int i = 0; i < kDataSize; i++) { + fTime[i] = trend.fTime[i]; + for (int j = 0; j < 8; j++) { + fData[j][i] = trend.fData[j][i]; + } + } +} + +//_____________________________________________________________________________ +AliVZEROTrending::~AliVZEROTrending(){ + for (Int_t i=0; i<8; ++i) delete fGraphs[i]; + delete fMultiGraphs; +} +// ----------------------------------------------------------------- +void AliVZEROTrending::AddEntry(Double_t * data, UInt_t time) +{ + + if(fNEntries=fNEntries){ + AliError(Form("maximum entry is %d\n",fNEntries-1)); + }else{ + AliInfo(Form("Entry %d @ %f : %f %f %f %f %f %f %f %f \n",entry, fTime[entry], + fData[0][entry],fData[1][entry],fData[2][entry],fData[3][entry],fData[4][entry],fData[5][entry],fData[6][entry],fData[7][entry])); + + } +} + +// ----------------------------------------------------------------- +void AliVZEROTrending::Draw(Option_t *option){ + TString opt = option; + fMultiGraphs = new TMultiGraph(); + fMultiGraphs->SetTitle(GetTitle()); + + for(int i=0;i<8;i++) { + fGraphs[i] = new TGraph(GetNEntries(), GetTime(), GetChannel(i)); + fGraphs[i]->SetLineWidth(2); + fGraphs[i]->SetLineColor(i<4 ? i+1 : i -3); + fGraphs[i]->SetLineStyle(i<4 ? 1 : 2); + fMultiGraphs->Add(fGraphs[i]); + } + + fMultiGraphs->Draw("AL"); + fMultiGraphs->GetXaxis()->SetTimeDisplay(1); + fMultiGraphs->GetXaxis()->SetNdivisions(505,kFALSE); + fMultiGraphs->Draw("AL"); + TLegend * legend = new TLegend(0.7,0.65,0.86,0.88); + legend->AddEntry(fGraphs[4],"V0A - Ring0","l"); + legend->AddEntry(fGraphs[5],"V0A - Ring1","l"); + legend->AddEntry(fGraphs[6],"V0A - Ring2","l"); + legend->AddEntry(fGraphs[7],"V0A - Ring3","l"); + legend->AddEntry(fGraphs[0],"V0C - Ring0","l"); + legend->AddEntry(fGraphs[1],"V0C - Ring1","l"); + legend->AddEntry(fGraphs[2],"V0C - Ring2","l"); + legend->AddEntry(fGraphs[3],"V0C - Ring3","l"); + legend->Draw(); +} diff --git a/VZERO/AliVZEROTrending.h b/VZERO/AliVZEROTrending.h index afd3268d285..0ada23d965d 100644 --- a/VZERO/AliVZEROTrending.h +++ b/VZERO/AliVZEROTrending.h @@ -1,55 +1,55 @@ -#ifndef ALIVZEROTRENDING_H -#define ALIVZEROTRENDING_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights - * reserved. - * - * See cxx source for full Copyright notice - */ - - -// -// Class AliVZEROTrending -// --------------------------- -// -// class used in QA to publish variables evolution versus time in AMORE. -// These histo are the one which will be looked at by QA Shifter -// - - -#include - -class TGraph; -class TMultiGraph; - -class AliVZEROTrending : public TH1 { -public: - AliVZEROTrending(); - AliVZEROTrending(const char* name, const char* title); - virtual ~AliVZEROTrending(); - AliVZEROTrending(const AliVZEROTrending &trend); - - Double_t * GetTime(){return fTime;}; - Double_t * GetChannel(Int_t i){return fData[i];}; - Double_t GetLastTime(){return fTime[fNEntries-1];}; - Double_t GetLastChannel(Int_t i){return fData[i][fNEntries];}; - UInt_t GetNEntries(){return fNEntries;}; - void AddEntry(Double_t * data, UInt_t time); - void PrintEntry(UInt_t entry); - virtual void Draw(Option_t *option=""); - -private: - - AliVZEROTrending& operator= (const AliVZEROTrending & /*trend*/); // Not implemented - enum{kDataSize = 500}; - Double_t fData[8][kDataSize]; - Double_t fTime[kDataSize]; - UInt_t fNEntries; - TMultiGraph *fMultiGraphs; - TGraph * fGraphs[8]; - - ClassDef( AliVZEROTrending, 2 ) - -}; - -#endif // ALIVZEROTRENDING_H - +#ifndef ALIVZEROTRENDING_H +#define ALIVZEROTRENDING_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights + * reserved. + * + * See cxx source for full Copyright notice + */ + + +// +// Class AliVZEROTrending +// --------------------------- +// +// class used in QA to publish variables evolution versus time in AMORE. +// These histo are the one which will be looked at by QA Shifter +// + + +#include + +class TGraph; +class TMultiGraph; + +class AliVZEROTrending : public TH1 { +public: + AliVZEROTrending(); + AliVZEROTrending(const char* name, const char* title); + virtual ~AliVZEROTrending(); + AliVZEROTrending(const AliVZEROTrending &trend); + + Double_t * GetTime(){return fTime;}; + Double_t * GetChannel(Int_t i){return fData[i];}; + Double_t GetLastTime(){return fTime[fNEntries-1];}; + Double_t GetLastChannel(Int_t i){return fData[i][fNEntries];}; + UInt_t GetNEntries(){return fNEntries;}; + void AddEntry(Double_t * data, UInt_t time); + void PrintEntry(UInt_t entry); + virtual void Draw(Option_t *option=""); + +private: + + AliVZEROTrending& operator= (const AliVZEROTrending & /*trend*/); // Not implemented + enum{kDataSize = 500}; + Double_t fData[8][kDataSize]; + Double_t fTime[kDataSize]; + UInt_t fNEntries; + TMultiGraph *fMultiGraphs; + TGraph * fGraphs[8]; + + ClassDef( AliVZEROTrending, 2 ) + +}; + +#endif // ALIVZEROTRENDING_H + diff --git a/VZERO/AliVZEROTriggerData.cxx b/VZERO/AliVZEROTriggerData.cxx index d51567631ad..429dca1fa08 100644 --- a/VZERO/AliVZEROTriggerData.cxx +++ b/VZERO/AliVZEROTriggerData.cxx @@ -1,556 +1,556 @@ - -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -// Class AliVZEROTriggerData -// ------------------------- -// Retrieves and hold the FEE parameters -// The parameters are recieved from the shuttle -// AliVZEROTriggerData is then used in the AliVZEROTriggerSimulator -// - -#include -#include - -#include "AliLog.h" -#include "AliDCSValue.h" -#include "AliVZEROTriggerData.h" - -ClassImp(AliVZEROTriggerData) -//________________________________________________________________ - -AliVZEROTriggerData::AliVZEROTriggerData() : - TNamed(), - fBBAThreshold(0), - fBBCThreshold(0) , - fBGAThreshold(0) , - fBGCThreshold(0) , - fBBAForBGThreshold(0) , - fBBCForBGThreshold(0) , - fCentralityVOAThrLow(0) , - fCentralityVOAThrHigh(0) , - fCentralityVOCThrLow(0) , - fCentralityVOCThrHigh(0) , - fMultV0AThrLow(0) , - fMultV0AThrHigh(0) , - fMultV0CThrLow(0) , - fMultV0CThrHigh(0), - fRun(0), - fStartTime(0), - fEndTime(0), - fIsProcessed(kFALSE) - -{ - // default constructor - for(int i=0; iGetParameters(); - TIter iter(params); - TObjString* aliasName; - - while (( aliasName = (TObjString*) iter.Next() )) { - AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName); - Int_t val; - if(aValue) { - val = aValue->GetUInt(); - AliInfo(Form("%s : %d",aliasName->String().Data(), val)); - SetParameter(aliasName->String(),val); - } - } -} - -//_____________________________________________________________________________ -void AliVZEROTriggerData::SetParameter(TString name, Int_t val){ - // Set given parameter - - Int_t iBoard = -1; - Int_t iChannel = -1; - - TSeqCollection* nameSplit = name.Tokenize("/"); - TObjString * boardName = (TObjString *)nameSplit->At(2); - if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard); - - TString paramName = ((TObjString *)nameSplit->At(3))->String(); - Char_t channel[2] ; channel[1] = '\0'; - channel[0] = paramName[paramName.Sizeof()-2]; - sscanf(channel,"%d",&iChannel); - - if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard); - else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard); - else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard); - else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard); - else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard); - else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard); - else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard); - else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard); - else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard); - else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard); - else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard); - else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard); - else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard); - else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val); - else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val); - else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val); - else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val); - else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val); - else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val); - else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val); - else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val); - else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val); - else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val); - else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val); - else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val); - else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val); - else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val); - else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iChannel-1 ); - else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard , iChannel-1); - else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard , iChannel-1); - else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard, iChannel-1); - else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard, iChannel-1); - else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard, iChannel-1); - else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard, iChannel-1); - else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard, iChannel-1); - else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard, iChannel-1); - else AliError(Form("No Setter found for FEE parameter : %s",name.Data())); - // - delete nameSplit; -} -//________________________________________________________________ -void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel) -{ - // Set Pedestal Cut of individual channel - if((board>=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && output=0) && (board=0) && (board=0) && (board=0) && (board1023){ - AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); - delay = delay & 0x3FF; - } - if((board>=0) && (board1023){ - AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); - delay = delay & 0x3FF; - } - if((board>=0) && (board1023){ - AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); - delay = delay & 0x3FF; - } - if((board>=0) && (board1023){ - AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); - delay = delay & 0x3FF; - } - if((board>=0) && (board=0) && (board=0) && (board=0) && (board=0) && (board=0) && (board> i) & 0x1; - - if(word[0] != word[4]){ - if(word[4]) fallingEdge++; - else risingEdge++; - } - for(int i=1 ; i<5 ; i++){ - if(word[i] != word[i-1]) { - if(word[i-1]) fallingEdge++; - else risingEdge++; - } - } - if((fallingEdge>1)||(risingEdge>1)) isValid = kFALSE; - if(((risingEdge==0)&&(fallingEdge==0)) &&(!word[0])) isValid = kFALSE; - return isValid; -} - - - + +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +// Class AliVZEROTriggerData +// ------------------------- +// Retrieves and hold the FEE parameters +// The parameters are recieved from the shuttle +// AliVZEROTriggerData is then used in the AliVZEROTriggerSimulator +// + +#include +#include + +#include "AliLog.h" +#include "AliDCSValue.h" +#include "AliVZEROTriggerData.h" + +ClassImp(AliVZEROTriggerData) +//________________________________________________________________ + +AliVZEROTriggerData::AliVZEROTriggerData() : + TNamed(), + fBBAThreshold(0), + fBBCThreshold(0) , + fBGAThreshold(0) , + fBGCThreshold(0) , + fBBAForBGThreshold(0) , + fBBCForBGThreshold(0) , + fCentralityVOAThrLow(0) , + fCentralityVOAThrHigh(0) , + fCentralityVOCThrLow(0) , + fCentralityVOCThrHigh(0) , + fMultV0AThrLow(0) , + fMultV0AThrHigh(0) , + fMultV0CThrLow(0) , + fMultV0CThrHigh(0), + fRun(0), + fStartTime(0), + fEndTime(0), + fIsProcessed(kFALSE) + +{ + // default constructor + for(int i=0; iGetParameters(); + TIter iter(params); + TObjString* aliasName; + + while (( aliasName = (TObjString*) iter.Next() )) { + AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName); + Int_t val; + if(aValue) { + val = aValue->GetUInt(); + AliInfo(Form("%s : %d",aliasName->String().Data(), val)); + SetParameter(aliasName->String(),val); + } + } +} + +//_____________________________________________________________________________ +void AliVZEROTriggerData::SetParameter(TString name, Int_t val){ + // Set given parameter + + Int_t iBoard = -1; + Int_t iChannel = -1; + + TSeqCollection* nameSplit = name.Tokenize("/"); + TObjString * boardName = (TObjString *)nameSplit->At(2); + if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard); + + TString paramName = ((TObjString *)nameSplit->At(3))->String(); + Char_t channel[2] ; channel[1] = '\0'; + channel[0] = paramName[paramName.Sizeof()-2]; + sscanf(channel,"%d",&iChannel); + + if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard); + else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard); + else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard); + else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard); + else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard); + else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard); + else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard); + else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard); + else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard); + else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard); + else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard); + else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard); + else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard); + else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val); + else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val); + else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val); + else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val); + else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val); + else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val); + else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val); + else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val); + else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val); + else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val); + else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val); + else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val); + else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val); + else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val); + else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iChannel-1 ); + else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard , iChannel-1); + else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard , iChannel-1); + else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard, iChannel-1); + else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard, iChannel-1); + else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard, iChannel-1); + else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard, iChannel-1); + else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard, iChannel-1); + else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard, iChannel-1); + else AliError(Form("No Setter found for FEE parameter : %s",name.Data())); + // + delete nameSplit; +} +//________________________________________________________________ +void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel) +{ + // Set Pedestal Cut of individual channel + if((board>=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && board=0 && channel=0 && output=0) && (board=0) && (board=0) && (board=0) && (board1023){ + AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); + delay = delay & 0x3FF; + } + if((board>=0) && (board1023){ + AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); + delay = delay & 0x3FF; + } + if((board>=0) && (board1023){ + AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); + delay = delay & 0x3FF; + } + if((board>=0) && (board1023){ + AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay)); + delay = delay & 0x3FF; + } + if((board>=0) && (board=0) && (board=0) && (board=0) && (board=0) && (board=0) && (board> i) & 0x1; + + if(word[0] != word[4]){ + if(word[4]) fallingEdge++; + else risingEdge++; + } + for(int i=1 ; i<5 ; i++){ + if(word[i] != word[i-1]) { + if(word[i-1]) fallingEdge++; + else risingEdge++; + } + } + if((fallingEdge>1)||(risingEdge>1)) isValid = kFALSE; + if(((risingEdge==0)&&(fallingEdge==0)) &&(!word[0])) isValid = kFALSE; + return isValid; +} + + + diff --git a/VZERO/AliVZEROTriggerData.h b/VZERO/AliVZEROTriggerData.h index 0f49a0c990f..0e6144215cb 100644 --- a/VZERO/AliVZEROTriggerData.h +++ b/VZERO/AliVZEROTriggerData.h @@ -1,224 +1,224 @@ -#ifndef ALIVZEROTRIGGERDATA_H -#define ALIVZEROTRIGGERDATA_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights - * reserved. - * - * See cxx source for full Copyright notice - */ - -// Class AliVZEROTriggerData -// ------------------------- -// Retrieves and hold the FEE parameters -// The parameters are recieved from the shuttle -// AliVZEROTriggerData is then used in the AliVZEROTriggerSimulator -// - -#include - -#include "AliVZERODataFEE.h" - - -class AliVZEROTriggerData : public TNamed { -public: - AliVZEROTriggerData(); - AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime); - ~AliVZEROTriggerData(); - - void FillData(AliVZERODataFEE * data); - - // ----- Setters ----- - - void SetClk1Win1(UShort_t* clks); - void SetClk1Win1(UShort_t clk, Int_t board); - void SetClk2Win1(UShort_t* clks); - void SetClk2Win1(UShort_t clk, Int_t board); - - void SetClk1Win2(UShort_t* clks); - void SetClk1Win2(UShort_t clk, Int_t board); - void SetClk2Win2(UShort_t* clks); - void SetClk2Win2(UShort_t clk, Int_t board); - - void SetDelayClk1Win1(UShort_t* delays); - void SetDelayClk1Win1(UShort_t delay, Int_t board); - void SetDelayClk2Win1(UShort_t* delays); - void SetDelayClk2Win1(UShort_t delay, Int_t board); - - void SetDelayClk1Win2(UShort_t* delays); - void SetDelayClk1Win2(UShort_t delay, Int_t board); - void SetDelayClk2Win2(UShort_t* delays); - void SetDelayClk2Win2(UShort_t delay, Int_t board); - - void SetLatchWin1(UShort_t *latchs); - void SetLatchWin1(UShort_t latch, Int_t board); - void SetLatchWin2(UShort_t *latchs); - void SetLatchWin2(UShort_t latch, Int_t board); - - void SetResetWin1(UShort_t *resets); - void SetResetWin1(UShort_t reset, Int_t board); - void SetResetWin2(UShort_t *resets); - void SetResetWin2(UShort_t reset, Int_t board); - - void SetPedestalSubtraction(Bool_t *peds); - void SetPedestalSubtraction(Bool_t ped, Int_t board); - - void SetBBAThreshold(UShort_t th) {fBBAThreshold = th;}; - void SetBBCThreshold(UShort_t th) {fBBCThreshold = th;}; - - void SetBGAThreshold(UShort_t th) {fBGAThreshold = th;}; - void SetBGCThreshold(UShort_t th) {fBGCThreshold = th;}; - - void SetBBAForBGThreshold(UShort_t th) {fBBAForBGThreshold = th;}; - void SetBBCForBGThreshold(UShort_t th) {fBBCForBGThreshold = th;}; - - void SetCentralityV0AThrLow(UShort_t th) {fCentralityVOAThrLow = th;}; - void SetCentralityV0AThrHigh(UShort_t th) {fCentralityVOAThrHigh = th;}; - - void SetCentralityV0CThrLow(UShort_t th) {fCentralityVOCThrLow = th;}; - void SetCentralityV0CThrHigh(UShort_t th) {fCentralityVOCThrHigh = th;}; - - void SetMultV0AThrLow(UShort_t th) {fMultV0AThrLow = th;}; - void SetMultV0AThrHigh(UShort_t th) {fMultV0AThrHigh = th;}; - - void SetMultV0CThrLow(UShort_t th) {fMultV0CThrLow = th;}; - void SetMultV0CThrHigh(UShort_t th) {fMultV0CThrHigh = th;}; - - void SetTriggerSelected(UShort_t trigger, Int_t output); - - void SetEnableCharge(Bool_t val, Int_t board, Int_t channel); - void SetEnableTiming(Bool_t val, Int_t board, Int_t channel); - void SetDiscriThr(UShort_t val, Int_t board, Int_t channel); - void SetDelayHit(UShort_t val, Int_t board, Int_t channel); - void SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel); - void SetPedestalCut(UShort_t val, Int_t integrator, Int_t board, Int_t channel); - - - // ----- Getters ----- - - UShort_t * GetClk1Win1() const {return (UShort_t*)fClk1Win1;}; - UShort_t GetClk1Win1(Int_t board ) const {return ((board>=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && output + +#include "AliVZERODataFEE.h" + + +class AliVZEROTriggerData : public TNamed { +public: + AliVZEROTriggerData(); + AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime); + ~AliVZEROTriggerData(); + + void FillData(AliVZERODataFEE * data); + + // ----- Setters ----- + + void SetClk1Win1(UShort_t* clks); + void SetClk1Win1(UShort_t clk, Int_t board); + void SetClk2Win1(UShort_t* clks); + void SetClk2Win1(UShort_t clk, Int_t board); + + void SetClk1Win2(UShort_t* clks); + void SetClk1Win2(UShort_t clk, Int_t board); + void SetClk2Win2(UShort_t* clks); + void SetClk2Win2(UShort_t clk, Int_t board); + + void SetDelayClk1Win1(UShort_t* delays); + void SetDelayClk1Win1(UShort_t delay, Int_t board); + void SetDelayClk2Win1(UShort_t* delays); + void SetDelayClk2Win1(UShort_t delay, Int_t board); + + void SetDelayClk1Win2(UShort_t* delays); + void SetDelayClk1Win2(UShort_t delay, Int_t board); + void SetDelayClk2Win2(UShort_t* delays); + void SetDelayClk2Win2(UShort_t delay, Int_t board); + + void SetLatchWin1(UShort_t *latchs); + void SetLatchWin1(UShort_t latch, Int_t board); + void SetLatchWin2(UShort_t *latchs); + void SetLatchWin2(UShort_t latch, Int_t board); + + void SetResetWin1(UShort_t *resets); + void SetResetWin1(UShort_t reset, Int_t board); + void SetResetWin2(UShort_t *resets); + void SetResetWin2(UShort_t reset, Int_t board); + + void SetPedestalSubtraction(Bool_t *peds); + void SetPedestalSubtraction(Bool_t ped, Int_t board); + + void SetBBAThreshold(UShort_t th) {fBBAThreshold = th;}; + void SetBBCThreshold(UShort_t th) {fBBCThreshold = th;}; + + void SetBGAThreshold(UShort_t th) {fBGAThreshold = th;}; + void SetBGCThreshold(UShort_t th) {fBGCThreshold = th;}; + + void SetBBAForBGThreshold(UShort_t th) {fBBAForBGThreshold = th;}; + void SetBBCForBGThreshold(UShort_t th) {fBBCForBGThreshold = th;}; + + void SetCentralityV0AThrLow(UShort_t th) {fCentralityVOAThrLow = th;}; + void SetCentralityV0AThrHigh(UShort_t th) {fCentralityVOAThrHigh = th;}; + + void SetCentralityV0CThrLow(UShort_t th) {fCentralityVOCThrLow = th;}; + void SetCentralityV0CThrHigh(UShort_t th) {fCentralityVOCThrHigh = th;}; + + void SetMultV0AThrLow(UShort_t th) {fMultV0AThrLow = th;}; + void SetMultV0AThrHigh(UShort_t th) {fMultV0AThrHigh = th;}; + + void SetMultV0CThrLow(UShort_t th) {fMultV0CThrLow = th;}; + void SetMultV0CThrHigh(UShort_t th) {fMultV0CThrHigh = th;}; + + void SetTriggerSelected(UShort_t trigger, Int_t output); + + void SetEnableCharge(Bool_t val, Int_t board, Int_t channel); + void SetEnableTiming(Bool_t val, Int_t board, Int_t channel); + void SetDiscriThr(UShort_t val, Int_t board, Int_t channel); + void SetDelayHit(UShort_t val, Int_t board, Int_t channel); + void SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel); + void SetPedestalCut(UShort_t val, Int_t integrator, Int_t board, Int_t channel); + + + // ----- Getters ----- + + UShort_t * GetClk1Win1() const {return (UShort_t*)fClk1Win1;}; + UShort_t GetClk1Win1(Int_t board ) const {return ((board>=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && board=0 && output -#include -#include - -#include "AliLog.h" -#include "AliCDBManager.h" -#include "AliCDBEntry.h" -#include "AliCDBStorage.h" -#include "AliCDBId.h" -#include "AliVZEROTriggerData.h" -#include "AliVZEROLogicalSignal.h" -#include "AliVZEROTriggerSimulator.h" -#include "AliVZEROdigit.h" -#include "AliVZEROCalibData.h" -#include "AliVZEROConst.h" -#include "AliCTPTimeParams.h" - -ClassImp(AliVZEROTriggerSimulator) - -//_____________________________________________________________________________ -AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits) : -TObject(),fTriggerData(NULL),fDigitsTree(digitsTree),fDigits(digits),fTriggerWord(0) -{ - // constructor - fTriggerData = LoadTriggerData(); - LoadClockOffset(); - - for(int i=0;i<64;i++) { - fBBFlags[i] = fBGFlags[i] = kFALSE; - fCharges[i] = 0.; - } - GenerateBBWindows(); - GenerateBGWindows(); - for (int i=0; iGetLatchWin1(i),0); - fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); - fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0); - fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0); - } -} -//_____________________________________________________________________________ -AliVZEROTriggerSimulator::AliVZEROTriggerSimulator() : -TObject(),fTriggerData(NULL),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0) -{ - // Default constructor - fTriggerData = LoadTriggerData(); - LoadClockOffset(); - - for(int i=0;i<64;i++) { - fBBFlags[i] = fBGFlags[i] = kFALSE; - fCharges[i] = 0; - } - GenerateBBWindows(); - GenerateBGWindows(); - for (int i=0; iGetLatchWin1(i),0); - fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); - fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0); - fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0); - } -} - -//_____________________________________________________________________________ -AliVZEROTriggerSimulator::~AliVZEROTriggerSimulator(){ -// Destructor - for (Int_t i=0; iSetStartTime(0.); - fBBGate[i]->SetStopTime(25.0); - } - } - else { - for (int i=0; iGetClk1Win1(i),fTriggerData->GetDelayClk1Win1(i)); - AliVZEROLogicalSignal clk2BB(fTriggerData->GetClk2Win1(i),fTriggerData->GetDelayClk2Win1(i)); - fBBGate[i] = new AliVZEROLogicalSignal(clk1BB & clk2BB); - } - } -} -//_____________________________________________________________________________ -void AliVZEROTriggerSimulator::GenerateBGWindows() -{ - // Generates the BG observation window - // In case gates are open the windows are equal to 25ns - if (AreGatesOpen()) { - for (int i=0; iSetStartTime(0.); - fBGGate[i]->SetStopTime(25.0); - } - } - else { - for (int i=0; iGetClk1Win2(i),fTriggerData->GetDelayClk1Win2(i)); - AliVZEROLogicalSignal clk2BG(fTriggerData->GetClk2Win2(i),fTriggerData->GetDelayClk2Win2(i)); - fBGGate[i] = new AliVZEROLogicalSignal(clk1BG & clk2BG); - // In VZERO-A we have a shift by -25ns which is controlled by - // 'Delay Win2' = 7 instead of default 6. - // The flag is not stored in OCDB so we have manually shift the - // trigger windows - if (i < 4) { - fBGGate[i]->SetStartTime(fBGGate[i]->GetStartTime()-25.0); - fBGGate[i]->SetStopTime(fBGGate[i]->GetStopTime()-25.0); - } - } - } -} - -//_____________________________________________________________________________ -AliVZEROTriggerData * AliVZEROTriggerSimulator::LoadTriggerData() const -{ - // Gets Trigger object for VZERO set - AliDebug(1,"Loading Trigger parameters"); - AliCDBManager *man = AliCDBManager::Instance(); - - - AliCDBEntry *entry=0; - - entry = man->Get("VZERO/Trigger/Data"); - if(!entry){ - AliFatal("Load of trigger calibration data from default storage failed!"); - return NULL; - } - - // Retrieval of data in directory VZERO/Calib/Trigger: - - AliVZEROTriggerData *triggerData = NULL; - - if (entry) triggerData = (AliVZEROTriggerData*) entry->GetObject(); - if (!triggerData) AliError("No Trigger data from database !"); - - return triggerData; -} - - -//_____________________________________________________________________________ -void AliVZEROTriggerSimulator::LoadClockOffset() -{ - // This method is used in order to - // retrieve the TDC clock offset including - // roll-over, trig count and CTP L0->L1 delay - - AliCDBEntry *entry0 = AliCDBManager::Instance()->Get("VZERO/Calib/Data"); - if (!entry0) { - AliFatal("V0 Calib object is not found in OCDB !"); - return; - } - AliVZEROCalibData *calibdata = (AliVZEROCalibData*) entry0->GetObject(); - - AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/CTP/CTPtiming"); - if (!entry) { - AliFatal("CTP timing parameters are not found in OCDB !"); - return; - } - AliCTPTimeParams *ctpParams = (AliCTPTimeParams*)entry->GetObject(); - Float_t l1Delay = (Float_t)ctpParams->GetDelayL1L0()*25.0; - - AliCDBEntry *entry1 = AliCDBManager::Instance()->Get("GRP/CTP/TimeAlign"); - if (!entry1) { - AliFatal("CTP time-alignment is not found in OCDB !"); - return; - } - AliCTPTimeParams *ctpTimeAlign = (AliCTPTimeParams*)entry1->GetObject(); - l1Delay += ((Float_t)ctpTimeAlign->GetDelayL1L0()*25.0); - - for(Int_t board = 0; board < AliVZEROTriggerData::kNCIUBoards; ++board) { - fClockOffset[board] = (((Float_t)calibdata->GetRollOver(board)- - (Float_t)calibdata->GetTriggerCountOffset(board))*25.0- - l1Delay+ - kV0Offset); - AliDebug(1,Form("Board %d Offset %f",board,fClockOffset[board])); - } -} - -//_____________________________________________________________________________ -void AliVZEROTriggerSimulator::Run() { - //AliInfo("Generating VZERO Triggers"); - - // Loop over VZERO entries - Int_t nEntries = (Int_t)fDigitsTree->GetEntries(); - for (Int_t ievt=0; ievtGetEvent(ievt); - - Int_t nDigits = fDigits->GetEntriesFast(); - - for (Int_t iDigit=0; iDigitAt(iDigit); - - Int_t integrator = digit->Integrator(); - Int_t pmNumber = digit->PMNumber(); - Int_t board = AliVZEROCalibData::GetBoardNumber(pmNumber); - Int_t channel = AliVZEROCalibData::GetFEEChannelNumber(pmNumber); - if (board < 0 || channel < 0) continue; - - if(fTriggerData->GetEnableCharge(board,channel)) { - fCharges[pmNumber] = digit->ChargeADC(AliVZEROdigit::kNClocks/2); - if(fTriggerData->GetPedestalSubtraction(board)) { - if(fCharges[pmNumber]>=(Float_t) fTriggerData->GetPedestalCut(integrator,board,channel)){ - fCharges[pmNumber] -= (Float_t) fTriggerData->GetPedestal(integrator,board,channel); - } else { - fCharges[pmNumber] = 0.; - } - } - } else { - fCharges[pmNumber] = 0.; - } - - Float_t time = digit->Time(); - time -= fClockOffset[board]; - - AliDebug(10,Form(" Digit: %f %d %d %d %d %d %d %d %d",digit->Time(), - digit->ChargeADC(8),digit->ChargeADC(9),digit->ChargeADC(10), - digit->ChargeADC(11),digit->ChargeADC(12),digit->ChargeADC(13), - digit->ChargeADC(14),digit->ChargeADC(15))); - AliDebug(10,Form(" PM nb : %d ; TDC= %f(%f) Enable Time %d charge %d inCoin %d charge %f", - pmNumber,time,digit->Time(), - fTriggerData->GetEnableTiming(board,channel),fTriggerData->GetEnableCharge(board,channel), - fBBGate[board]->IsInCoincidence(time),fCharges[pmNumber])); - fBBFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBBGate[board]->IsInCoincidence(time); - fBGFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBGGate[board]->IsInCoincidence(time); - - } // end of loop over digits - } // end of loop over events in digits tree - - Int_t nBBflagsV0A = 0; - Int_t nBBflagsV0C = 0; - Int_t nBGflagsV0A = 0; - Int_t nBGflagsV0C = 0; - Float_t chargeV0A = 0.; - Float_t chargeV0C = 0.; - Int_t aBBflagsV0A = 0; - Int_t aBBflagsV0C = 0; - Int_t aBGflagsV0A = 0; - Int_t aBGflagsV0C = 0; - - for(int i=0;i<64;i++) { - if(i<32) { - nBBflagsV0C += fBBFlags[i]; - nBGflagsV0C += fBGFlags[i]; - chargeV0C += fCharges[i]; - if (fBBFlags[i]) aBBflagsV0C |= (1 << i); - if (fBGFlags[i]) aBGflagsV0C |= (1 << i); - } else { - nBBflagsV0A += fBBFlags[i]; - nBGflagsV0A += fBGFlags[i]; - chargeV0A += fCharges[i]; - if (fBBFlags[i]) aBBflagsV0A |= (1 << (i-32)); - if (fBGFlags[i]) aBGflagsV0A |= (1 << (i-32)); - } - //AliInfo(Form("Ch %d BB=%d BG=%d",i,fBBFlags[i],fBGFlags[i] )); - } - - // Store the BB and BG flags in the digits tree (user info) - fDigitsTree->GetUserInfo()->Add(new TParameter("BBflagsV0A",aBBflagsV0A)); - fDigitsTree->GetUserInfo()->Add(new TParameter("BBflagsV0C",aBBflagsV0C)); - fDigitsTree->GetUserInfo()->Add(new TParameter("BGflagsV0A",aBGflagsV0A)); - fDigitsTree->GetUserInfo()->Add(new TParameter("BGflagsV0C",aBGflagsV0C)); - - // BBA - if(nBBflagsV0A>=fTriggerData->GetBBAThreshold()) SetBBA(); - - // BBC - if(nBBflagsV0C>=fTriggerData->GetBBCThreshold()) SetBBC(); - - // BBA_AND_BBC - if(GetBBA() && GetBBC()) SetBBAandBBC(); - - // BBA_OR_BBC - if(GetBBA() || GetBBC()) SetBBAorBBC(); - - // BGA - if(nBGflagsV0A>=fTriggerData->GetBGAThreshold()) SetBGA(); - - // BGC - if(nBGflagsV0C>=fTriggerData->GetBGCThreshold()) SetBGC(); - - // BGA_AND_BBC (Beam Gas from RB24 side) - if(nBBflagsV0C>=fTriggerData->GetBBCForBGThreshold() && GetBGA()) SetBGAandBBC(); - - // BGC_AND_BBA (Beam Gas from RB26 side) - if(nBBflagsV0A>=fTriggerData->GetBBAForBGThreshold() && GetBGC()) SetBGCandBBA(); - - // CTA1_AND_CTC1 (Centrality trigger 1) - if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() && chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1andCTC1(); - - // CTA1_OR_CTC1 (Centrality trigger 1) - if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() || chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1orCTC1(); - - // CTA2_AND_CTC2 (Centrality trigger 2) - if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() && chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2andCTC2(); - - // CTA2_OR_CTC2 (Centrality trigger 2) - if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() || chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2orCTC2(); - - // MTA_AND_MTC (Multiplicity Trigger) - if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow()) - && (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) - SetMTAandMTC(); - - // MTA_OR_MTC (Multiplicity Trigger) - if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow()) - || (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) - SetMTAorMTC(); - - // BGA_OR_BGC - if(GetBGA() || GetBGC()) SetBGAorBGC(); - - // (BGA and BBC) or (BGC and BBA) (Beam Gas from one of the two sides) - if(GetBGAandBBC() || GetBGCandBBA()) SetBeamGas(); - -// AliInfo(Form("BB Flags : V0A = %d V0C = %d ",nBBflagsV0A, nBBflagsV0C )); -// AliInfo(Form("BG Flags : V0A = %d V0C = %d ",nBGflagsV0A, nBGflagsV0C )); -// AliInfo(Form("Charges : V0A = %d V0C = %d ",chargeV0A, chargeV0C )); - -} - -//_____________________________________________________________________________ -Bool_t AliVZEROTriggerSimulator::AreGatesOpen() const { - // The method check if the gates are suppossed to be open - // (corresponding to 'Test Window' flag in DCS). - // Since the flag is not stored in OCDB, we just check if - // all the clock delays are 0 or not. - // This rules should be followed when setting up the detector - // at the level of DCS - - for (int i=0; iGetDelayClk1Win1(i)!=0 || - fTriggerData->GetDelayClk2Win1(i)!=0 || - fTriggerData->GetDelayClk1Win2(i)!=0 || - fTriggerData->GetDelayClk2Win2(i)!=0) - return kFALSE; - } - return kTRUE; -} - -//_____________________________________________________________________________ -void AliVZEROTriggerSimulator::Print(Option_t* /* opt */) const -{ - // Prints the trigger windows as - // initialized from the OCDB - for (int i=0; iGetStartTime() << " -> " << fBBGate[i]->GetStopTime() << ") BG (" << fBGGate[i]->GetStartTime() << " -> " << fBGGate[i]->GetStopTime() << ")" << std::endl; - } - std::cout << std::endl; -} - - +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +// +// Class AliVZEROTriggerSimulator +// ------------------------------ +// Simulate the VZERO Trigger response +// Use FEE parameters stored in Database +// Can work on real data or in simulation +// + +#include +#include +#include + +#include "AliLog.h" +#include "AliCDBManager.h" +#include "AliCDBEntry.h" +#include "AliCDBStorage.h" +#include "AliCDBId.h" +#include "AliVZEROTriggerData.h" +#include "AliVZEROLogicalSignal.h" +#include "AliVZEROTriggerSimulator.h" +#include "AliVZEROdigit.h" +#include "AliVZEROCalibData.h" +#include "AliVZEROConst.h" +#include "AliCTPTimeParams.h" + +ClassImp(AliVZEROTriggerSimulator) + +//_____________________________________________________________________________ +AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits) : +TObject(),fTriggerData(NULL),fDigitsTree(digitsTree),fDigits(digits),fTriggerWord(0) +{ + // constructor + fTriggerData = LoadTriggerData(); + LoadClockOffset(); + + for(int i=0;i<64;i++) { + fBBFlags[i] = fBGFlags[i] = kFALSE; + fCharges[i] = 0.; + } + GenerateBBWindows(); + GenerateBGWindows(); + for (int i=0; iGetLatchWin1(i),0); + fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); + fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0); + fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0); + } +} +//_____________________________________________________________________________ +AliVZEROTriggerSimulator::AliVZEROTriggerSimulator() : +TObject(),fTriggerData(NULL),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0) +{ + // Default constructor + fTriggerData = LoadTriggerData(); + LoadClockOffset(); + + for(int i=0;i<64;i++) { + fBBFlags[i] = fBGFlags[i] = kFALSE; + fCharges[i] = 0; + } + GenerateBBWindows(); + GenerateBGWindows(); + for (int i=0; iGetLatchWin1(i),0); + fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); + fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0); + fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0); + } +} + +//_____________________________________________________________________________ +AliVZEROTriggerSimulator::~AliVZEROTriggerSimulator(){ +// Destructor + for (Int_t i=0; iSetStartTime(0.); + fBBGate[i]->SetStopTime(25.0); + } + } + else { + for (int i=0; iGetClk1Win1(i),fTriggerData->GetDelayClk1Win1(i)); + AliVZEROLogicalSignal clk2BB(fTriggerData->GetClk2Win1(i),fTriggerData->GetDelayClk2Win1(i)); + fBBGate[i] = new AliVZEROLogicalSignal(clk1BB & clk2BB); + } + } +} +//_____________________________________________________________________________ +void AliVZEROTriggerSimulator::GenerateBGWindows() +{ + // Generates the BG observation window + // In case gates are open the windows are equal to 25ns + if (AreGatesOpen()) { + for (int i=0; iSetStartTime(0.); + fBGGate[i]->SetStopTime(25.0); + } + } + else { + for (int i=0; iGetClk1Win2(i),fTriggerData->GetDelayClk1Win2(i)); + AliVZEROLogicalSignal clk2BG(fTriggerData->GetClk2Win2(i),fTriggerData->GetDelayClk2Win2(i)); + fBGGate[i] = new AliVZEROLogicalSignal(clk1BG & clk2BG); + // In VZERO-A we have a shift by -25ns which is controlled by + // 'Delay Win2' = 7 instead of default 6. + // The flag is not stored in OCDB so we have manually shift the + // trigger windows + if (i < 4) { + fBGGate[i]->SetStartTime(fBGGate[i]->GetStartTime()-25.0); + fBGGate[i]->SetStopTime(fBGGate[i]->GetStopTime()-25.0); + } + } + } +} + +//_____________________________________________________________________________ +AliVZEROTriggerData * AliVZEROTriggerSimulator::LoadTriggerData() const +{ + // Gets Trigger object for VZERO set + AliDebug(1,"Loading Trigger parameters"); + AliCDBManager *man = AliCDBManager::Instance(); + + + AliCDBEntry *entry=0; + + entry = man->Get("VZERO/Trigger/Data"); + if(!entry){ + AliFatal("Load of trigger calibration data from default storage failed!"); + return NULL; + } + + // Retrieval of data in directory VZERO/Calib/Trigger: + + AliVZEROTriggerData *triggerData = NULL; + + if (entry) triggerData = (AliVZEROTriggerData*) entry->GetObject(); + if (!triggerData) AliError("No Trigger data from database !"); + + return triggerData; +} + + +//_____________________________________________________________________________ +void AliVZEROTriggerSimulator::LoadClockOffset() +{ + // This method is used in order to + // retrieve the TDC clock offset including + // roll-over, trig count and CTP L0->L1 delay + + AliCDBEntry *entry0 = AliCDBManager::Instance()->Get("VZERO/Calib/Data"); + if (!entry0) { + AliFatal("V0 Calib object is not found in OCDB !"); + return; + } + AliVZEROCalibData *calibdata = (AliVZEROCalibData*) entry0->GetObject(); + + AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/CTP/CTPtiming"); + if (!entry) { + AliFatal("CTP timing parameters are not found in OCDB !"); + return; + } + AliCTPTimeParams *ctpParams = (AliCTPTimeParams*)entry->GetObject(); + Float_t l1Delay = (Float_t)ctpParams->GetDelayL1L0()*25.0; + + AliCDBEntry *entry1 = AliCDBManager::Instance()->Get("GRP/CTP/TimeAlign"); + if (!entry1) { + AliFatal("CTP time-alignment is not found in OCDB !"); + return; + } + AliCTPTimeParams *ctpTimeAlign = (AliCTPTimeParams*)entry1->GetObject(); + l1Delay += ((Float_t)ctpTimeAlign->GetDelayL1L0()*25.0); + + for(Int_t board = 0; board < AliVZEROTriggerData::kNCIUBoards; ++board) { + fClockOffset[board] = (((Float_t)calibdata->GetRollOver(board)- + (Float_t)calibdata->GetTriggerCountOffset(board))*25.0- + l1Delay+ + kV0Offset); + AliDebug(1,Form("Board %d Offset %f",board,fClockOffset[board])); + } +} + +//_____________________________________________________________________________ +void AliVZEROTriggerSimulator::Run() { + //AliInfo("Generating VZERO Triggers"); + + // Loop over VZERO entries + Int_t nEntries = (Int_t)fDigitsTree->GetEntries(); + for (Int_t ievt=0; ievtGetEvent(ievt); + + Int_t nDigits = fDigits->GetEntriesFast(); + + for (Int_t iDigit=0; iDigitAt(iDigit); + + Int_t integrator = digit->Integrator(); + Int_t pmNumber = digit->PMNumber(); + Int_t board = AliVZEROCalibData::GetBoardNumber(pmNumber); + Int_t channel = AliVZEROCalibData::GetFEEChannelNumber(pmNumber); + if (board < 0 || channel < 0) continue; + + if(fTriggerData->GetEnableCharge(board,channel)) { + fCharges[pmNumber] = digit->ChargeADC(AliVZEROdigit::kNClocks/2); + if(fTriggerData->GetPedestalSubtraction(board)) { + if(fCharges[pmNumber]>=(Float_t) fTriggerData->GetPedestalCut(integrator,board,channel)){ + fCharges[pmNumber] -= (Float_t) fTriggerData->GetPedestal(integrator,board,channel); + } else { + fCharges[pmNumber] = 0.; + } + } + } else { + fCharges[pmNumber] = 0.; + } + + Float_t time = digit->Time(); + time -= fClockOffset[board]; + + AliDebug(10,Form(" Digit: %f %d %d %d %d %d %d %d %d",digit->Time(), + digit->ChargeADC(8),digit->ChargeADC(9),digit->ChargeADC(10), + digit->ChargeADC(11),digit->ChargeADC(12),digit->ChargeADC(13), + digit->ChargeADC(14),digit->ChargeADC(15))); + AliDebug(10,Form(" PM nb : %d ; TDC= %f(%f) Enable Time %d charge %d inCoin %d charge %f", + pmNumber,time,digit->Time(), + fTriggerData->GetEnableTiming(board,channel),fTriggerData->GetEnableCharge(board,channel), + fBBGate[board]->IsInCoincidence(time),fCharges[pmNumber])); + fBBFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBBGate[board]->IsInCoincidence(time); + fBGFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBGGate[board]->IsInCoincidence(time); + + } // end of loop over digits + } // end of loop over events in digits tree + + Int_t nBBflagsV0A = 0; + Int_t nBBflagsV0C = 0; + Int_t nBGflagsV0A = 0; + Int_t nBGflagsV0C = 0; + Float_t chargeV0A = 0.; + Float_t chargeV0C = 0.; + Int_t aBBflagsV0A = 0; + Int_t aBBflagsV0C = 0; + Int_t aBGflagsV0A = 0; + Int_t aBGflagsV0C = 0; + + for(int i=0;i<64;i++) { + if(i<32) { + nBBflagsV0C += fBBFlags[i]; + nBGflagsV0C += fBGFlags[i]; + chargeV0C += fCharges[i]; + if (fBBFlags[i]) aBBflagsV0C |= (1 << i); + if (fBGFlags[i]) aBGflagsV0C |= (1 << i); + } else { + nBBflagsV0A += fBBFlags[i]; + nBGflagsV0A += fBGFlags[i]; + chargeV0A += fCharges[i]; + if (fBBFlags[i]) aBBflagsV0A |= (1 << (i-32)); + if (fBGFlags[i]) aBGflagsV0A |= (1 << (i-32)); + } + //AliInfo(Form("Ch %d BB=%d BG=%d",i,fBBFlags[i],fBGFlags[i] )); + } + + // Store the BB and BG flags in the digits tree (user info) + fDigitsTree->GetUserInfo()->Add(new TParameter("BBflagsV0A",aBBflagsV0A)); + fDigitsTree->GetUserInfo()->Add(new TParameter("BBflagsV0C",aBBflagsV0C)); + fDigitsTree->GetUserInfo()->Add(new TParameter("BGflagsV0A",aBGflagsV0A)); + fDigitsTree->GetUserInfo()->Add(new TParameter("BGflagsV0C",aBGflagsV0C)); + + // BBA + if(nBBflagsV0A>=fTriggerData->GetBBAThreshold()) SetBBA(); + + // BBC + if(nBBflagsV0C>=fTriggerData->GetBBCThreshold()) SetBBC(); + + // BBA_AND_BBC + if(GetBBA() && GetBBC()) SetBBAandBBC(); + + // BBA_OR_BBC + if(GetBBA() || GetBBC()) SetBBAorBBC(); + + // BGA + if(nBGflagsV0A>=fTriggerData->GetBGAThreshold()) SetBGA(); + + // BGC + if(nBGflagsV0C>=fTriggerData->GetBGCThreshold()) SetBGC(); + + // BGA_AND_BBC (Beam Gas from RB24 side) + if(nBBflagsV0C>=fTriggerData->GetBBCForBGThreshold() && GetBGA()) SetBGAandBBC(); + + // BGC_AND_BBA (Beam Gas from RB26 side) + if(nBBflagsV0A>=fTriggerData->GetBBAForBGThreshold() && GetBGC()) SetBGCandBBA(); + + // CTA1_AND_CTC1 (Centrality trigger 1) + if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() && chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1andCTC1(); + + // CTA1_OR_CTC1 (Centrality trigger 1) + if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() || chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1orCTC1(); + + // CTA2_AND_CTC2 (Centrality trigger 2) + if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() && chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2andCTC2(); + + // CTA2_OR_CTC2 (Centrality trigger 2) + if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() || chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2orCTC2(); + + // MTA_AND_MTC (Multiplicity Trigger) + if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow()) + && (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) + SetMTAandMTC(); + + // MTA_OR_MTC (Multiplicity Trigger) + if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow()) + || (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) + SetMTAorMTC(); + + // BGA_OR_BGC + if(GetBGA() || GetBGC()) SetBGAorBGC(); + + // (BGA and BBC) or (BGC and BBA) (Beam Gas from one of the two sides) + if(GetBGAandBBC() || GetBGCandBBA()) SetBeamGas(); + +// AliInfo(Form("BB Flags : V0A = %d V0C = %d ",nBBflagsV0A, nBBflagsV0C )); +// AliInfo(Form("BG Flags : V0A = %d V0C = %d ",nBGflagsV0A, nBGflagsV0C )); +// AliInfo(Form("Charges : V0A = %d V0C = %d ",chargeV0A, chargeV0C )); + +} + +//_____________________________________________________________________________ +Bool_t AliVZEROTriggerSimulator::AreGatesOpen() const { + // The method check if the gates are suppossed to be open + // (corresponding to 'Test Window' flag in DCS). + // Since the flag is not stored in OCDB, we just check if + // all the clock delays are 0 or not. + // This rules should be followed when setting up the detector + // at the level of DCS + + for (int i=0; iGetDelayClk1Win1(i)!=0 || + fTriggerData->GetDelayClk2Win1(i)!=0 || + fTriggerData->GetDelayClk1Win2(i)!=0 || + fTriggerData->GetDelayClk2Win2(i)!=0) + return kFALSE; + } + return kTRUE; +} + +//_____________________________________________________________________________ +void AliVZEROTriggerSimulator::Print(Option_t* /* opt */) const +{ + // Prints the trigger windows as + // initialized from the OCDB + for (int i=0; iGetStartTime() << " -> " << fBBGate[i]->GetStopTime() << ") BG (" << fBGGate[i]->GetStartTime() << " -> " << fBGGate[i]->GetStopTime() << ")" << std::endl; + } + std::cout << std::endl; +} + + diff --git a/VZERO/AliVZEROTriggerSimulator.h b/VZERO/AliVZEROTriggerSimulator.h index 000ec31b2c8..37ce63fc12b 100644 --- a/VZERO/AliVZEROTriggerSimulator.h +++ b/VZERO/AliVZEROTriggerSimulator.h @@ -1,107 +1,107 @@ -#ifndef ALIVZEROTRIGGERSIMULATOR_H -#define ALIVZEROTRIGGERSIMULATOR_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights - * reserved. - * - * See cxx source for full Copyright notice - */ -// -// Class AliVZEROTriggerSimulator -// ------------------------------ -// Simulate the VZERO Trigger response -// Use FEE parameters stored in Database -// Can work on real data or in simulation -// - -#include - -#include "AliVZEROTriggerData.h" - -class AliVZEROLogicalSignal; -class TTree; -class TClonesArray; - -class AliVZEROTriggerSimulator : public TObject { -public: - AliVZEROTriggerSimulator(); - AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits); - ~AliVZEROTriggerSimulator(); - - AliVZEROTriggerData * GetTriggerData() const {return fTriggerData;}; - - Bool_t GetBBAandBBC() const {return (fTriggerWord & 0x1);}; - Bool_t GetBBAorBBC() const {return (fTriggerWord>>1 & 0x1);}; - Bool_t GetBGAandBBC() const {return (fTriggerWord>>2 & 0x1);}; - Bool_t GetBGA() const {return (fTriggerWord>>3 & 0x1);}; - Bool_t GetBGCandBBA() const {return (fTriggerWord>>4 & 0x1);}; - Bool_t GetBGC() const {return (fTriggerWord>>5 & 0x1);}; - Bool_t GetCTA1andCTC1() const {return (fTriggerWord>>6 & 0x1);}; - Bool_t GetCTA1orCTC1() const {return (fTriggerWord>>7 & 0x1);}; - Bool_t GetCTA2andCTC2() const {return (fTriggerWord>>8 & 0x1);}; - Bool_t GetCTA2orCTC2() const {return (fTriggerWord>>9 & 0x1);}; - Bool_t GetMTAandMTC() const {return (fTriggerWord>>10 & 0x1);}; - Bool_t GetMTAorMTC() const {return (fTriggerWord>>11 & 0x1);}; - Bool_t GetBBA() const {return (fTriggerWord>>12 & 0x1);}; - Bool_t GetBBC() const {return (fTriggerWord>>13 & 0x1);}; - Bool_t GetBGAorBGC() const {return (fTriggerWord>>14 & 0x1);}; - Bool_t GetBeamGas() const {return (fTriggerWord>>15 & 0x1);}; - - void SetBBAandBBC() { (fTriggerWord += 0x1);}; - void SetBBAorBBC() { (fTriggerWord += 0x1<<1);}; - void SetBGAandBBC() { (fTriggerWord += 0x1<<2);}; - void SetBGA() { (fTriggerWord += 0x1<<3);}; - void SetBGCandBBA() { (fTriggerWord += 0x1<<4);}; - void SetBGC() { (fTriggerWord += 0x1<<5);}; - void SetCTA1andCTC1() { (fTriggerWord += 0x1<<6);}; - void SetCTA1orCTC1() { (fTriggerWord += 0x1<<7);}; - void SetCTA2andCTC2() { (fTriggerWord += 0x1<<8);}; - void SetCTA2orCTC2() { (fTriggerWord += 0x1<<9);}; - void SetMTAandMTC() { (fTriggerWord += 0x1<<10);}; - void SetMTAorMTC() { (fTriggerWord += 0x1<<11);}; - void SetBBA() { (fTriggerWord += 0x1<<12);}; - void SetBBC() { (fTriggerWord += 0x1<<13);}; - void SetBGAorBGC() { (fTriggerWord += 0x1<<14);}; - void SetBeamGas() { (fTriggerWord += 0x1<<15);}; - - void Run(); - virtual void Print(Option_t* /* opt */) const; - -private: - // Private methods - AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator &/*triggerSim*/); - AliVZEROTriggerSimulator& operator= (const AliVZEROTriggerSimulator & /*triggerSim*/); - AliVZEROTriggerData * LoadTriggerData() const ; - void LoadClockOffset(); - void GenerateBBWindows(); - void GenerateBGWindows(); - Bool_t AreGatesOpen() const; - - // Members - AliVZEROLogicalSignal * fBBGate[AliVZEROTriggerData::kNCIUBoards]; // BB Observation window - AliVZEROLogicalSignal * fBBLatch[AliVZEROTriggerData::kNCIUBoards]; // BB Latch window - AliVZEROLogicalSignal * fBBReset[AliVZEROTriggerData::kNCIUBoards]; // BB Reset Window - - AliVZEROLogicalSignal * fBGGate[AliVZEROTriggerData::kNCIUBoards]; // BG Observation window - AliVZEROLogicalSignal * fBGLatch[AliVZEROTriggerData::kNCIUBoards]; // BG Latch Window - AliVZEROLogicalSignal * fBGReset[AliVZEROTriggerData::kNCIUBoards]; // BG Reset Window - - AliVZEROTriggerData *fTriggerData; // Object holding the trigger configuration parameters - Float_t fClockOffset[AliVZEROTriggerData::kNCIUBoards]; // TDC clock offset including roll-over, trig count and L0->L1 delay - - TTree* fDigitsTree; //Pointer to VZERO digit tree - TClonesArray* fDigits; //Pointer to VZERO digit array - - Bool_t fBBFlags[64]; // Individual BB Flags - Bool_t fBGFlags[64]; // Individual BG Flags - Float_t fCharges[64]; // Individual Charge - - UShort_t fTriggerWord; // Word holding the 16 triggers return by the FEE - - ClassDef( AliVZEROTriggerSimulator, 3 ) - -}; - - -#endif // ALIVZEROTRIGGERSIMULATOR_H - - +#ifndef ALIVZEROTRIGGERSIMULATOR_H +#define ALIVZEROTRIGGERSIMULATOR_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights + * reserved. + * + * See cxx source for full Copyright notice + */ +// +// Class AliVZEROTriggerSimulator +// ------------------------------ +// Simulate the VZERO Trigger response +// Use FEE parameters stored in Database +// Can work on real data or in simulation +// + +#include + +#include "AliVZEROTriggerData.h" + +class AliVZEROLogicalSignal; +class TTree; +class TClonesArray; + +class AliVZEROTriggerSimulator : public TObject { +public: + AliVZEROTriggerSimulator(); + AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits); + ~AliVZEROTriggerSimulator(); + + AliVZEROTriggerData * GetTriggerData() const {return fTriggerData;}; + + Bool_t GetBBAandBBC() const {return (fTriggerWord & 0x1);}; + Bool_t GetBBAorBBC() const {return (fTriggerWord>>1 & 0x1);}; + Bool_t GetBGAandBBC() const {return (fTriggerWord>>2 & 0x1);}; + Bool_t GetBGA() const {return (fTriggerWord>>3 & 0x1);}; + Bool_t GetBGCandBBA() const {return (fTriggerWord>>4 & 0x1);}; + Bool_t GetBGC() const {return (fTriggerWord>>5 & 0x1);}; + Bool_t GetCTA1andCTC1() const {return (fTriggerWord>>6 & 0x1);}; + Bool_t GetCTA1orCTC1() const {return (fTriggerWord>>7 & 0x1);}; + Bool_t GetCTA2andCTC2() const {return (fTriggerWord>>8 & 0x1);}; + Bool_t GetCTA2orCTC2() const {return (fTriggerWord>>9 & 0x1);}; + Bool_t GetMTAandMTC() const {return (fTriggerWord>>10 & 0x1);}; + Bool_t GetMTAorMTC() const {return (fTriggerWord>>11 & 0x1);}; + Bool_t GetBBA() const {return (fTriggerWord>>12 & 0x1);}; + Bool_t GetBBC() const {return (fTriggerWord>>13 & 0x1);}; + Bool_t GetBGAorBGC() const {return (fTriggerWord>>14 & 0x1);}; + Bool_t GetBeamGas() const {return (fTriggerWord>>15 & 0x1);}; + + void SetBBAandBBC() { (fTriggerWord += 0x1);}; + void SetBBAorBBC() { (fTriggerWord += 0x1<<1);}; + void SetBGAandBBC() { (fTriggerWord += 0x1<<2);}; + void SetBGA() { (fTriggerWord += 0x1<<3);}; + void SetBGCandBBA() { (fTriggerWord += 0x1<<4);}; + void SetBGC() { (fTriggerWord += 0x1<<5);}; + void SetCTA1andCTC1() { (fTriggerWord += 0x1<<6);}; + void SetCTA1orCTC1() { (fTriggerWord += 0x1<<7);}; + void SetCTA2andCTC2() { (fTriggerWord += 0x1<<8);}; + void SetCTA2orCTC2() { (fTriggerWord += 0x1<<9);}; + void SetMTAandMTC() { (fTriggerWord += 0x1<<10);}; + void SetMTAorMTC() { (fTriggerWord += 0x1<<11);}; + void SetBBA() { (fTriggerWord += 0x1<<12);}; + void SetBBC() { (fTriggerWord += 0x1<<13);}; + void SetBGAorBGC() { (fTriggerWord += 0x1<<14);}; + void SetBeamGas() { (fTriggerWord += 0x1<<15);}; + + void Run(); + virtual void Print(Option_t* /* opt */) const; + +private: + // Private methods + AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator &/*triggerSim*/); + AliVZEROTriggerSimulator& operator= (const AliVZEROTriggerSimulator & /*triggerSim*/); + AliVZEROTriggerData * LoadTriggerData() const ; + void LoadClockOffset(); + void GenerateBBWindows(); + void GenerateBGWindows(); + Bool_t AreGatesOpen() const; + + // Members + AliVZEROLogicalSignal * fBBGate[AliVZEROTriggerData::kNCIUBoards]; // BB Observation window + AliVZEROLogicalSignal * fBBLatch[AliVZEROTriggerData::kNCIUBoards]; // BB Latch window + AliVZEROLogicalSignal * fBBReset[AliVZEROTriggerData::kNCIUBoards]; // BB Reset Window + + AliVZEROLogicalSignal * fBGGate[AliVZEROTriggerData::kNCIUBoards]; // BG Observation window + AliVZEROLogicalSignal * fBGLatch[AliVZEROTriggerData::kNCIUBoards]; // BG Latch Window + AliVZEROLogicalSignal * fBGReset[AliVZEROTriggerData::kNCIUBoards]; // BG Reset Window + + AliVZEROTriggerData *fTriggerData; // Object holding the trigger configuration parameters + Float_t fClockOffset[AliVZEROTriggerData::kNCIUBoards]; // TDC clock offset including roll-over, trig count and L0->L1 delay + + TTree* fDigitsTree; //Pointer to VZERO digit tree + TClonesArray* fDigits; //Pointer to VZERO digit array + + Bool_t fBBFlags[64]; // Individual BB Flags + Bool_t fBGFlags[64]; // Individual BG Flags + Float_t fCharges[64]; // Individual Charge + + UShort_t fTriggerWord; // Word holding the 16 triggers return by the FEE + + ClassDef( AliVZEROTriggerSimulator, 3 ) + +}; + + +#endif // ALIVZEROTRIGGERSIMULATOR_H + + diff --git a/ZDC/AliZDCQADataMakerSim.cxx b/ZDC/AliZDCQADataMakerSim.cxx index 949fbcc2f1e..5a4d41c9a33 100644 --- a/ZDC/AliZDCQADataMakerSim.cxx +++ b/ZDC/AliZDCQADataMakerSim.cxx @@ -1,331 +1,331 @@ -/************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ - -// --- Standard library --- -#include -// --- ROOT system --- -#include -#include -#include -#include -#include -#include -// --- AliRoot header files --- -#include "AliLog.h" -#include "AliQAChecker.h" -#include "AliZDCQADataMakerSim.h" -#include "AliZDCHit.h" -#include "AliZDCDigit.h" - -ClassImp(AliZDCQADataMakerSim) - -//____________________________________________________________________________ - AliZDCQADataMakerSim::AliZDCQADataMakerSim() : - AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kZDC), "ZDC Quality Assurance Data Maker") -{ - // ctor -} - -//____________________________________________________________________________ -AliZDCQADataMakerSim::AliZDCQADataMakerSim(const AliZDCQADataMakerSim& qadm) : - AliQADataMakerSim() -{ - //copy ctor - SetName((const char*)qadm.GetName()); - SetTitle((const char*)qadm.GetTitle()); -} - -//__________________________________________________________________ -AliZDCQADataMakerSim& AliZDCQADataMakerSim::operator = (const AliZDCQADataMakerSim& qadm ) -{ - // Equal operator. - this->~AliZDCQADataMakerSim(); - new(this) AliZDCQADataMakerSim(qadm); - return *this; -} - -//____________________________________________________________________________ -void AliZDCQADataMakerSim::InitHits() -{ - // create Hits histograms in Hits subdir - // - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - - TH1F * hHitsZNCTot = new TH1F("hHitsZNCTot", "Signal in ZNC; N_{phe}", 100, 0., 6000.); - TH1F * hHitsZNATot = new TH1F("hHitsZNATot", "Signal in ZNA; N_{phe}", 100, 0., 6000.); - TH1F * hHitsZPCTot = new TH1F("hHitsZPCTot", "Signal in ZPC; N_{phe}", 100, 0., 6000.); - TH1F * hHitsZPATot = new TH1F("hHitsZPATot", "Signal in ZPA; N_{phe}", 100, 0., 6000.); - Add2HitsList(hHitsZNCTot, 0, !expert, image); - Add2HitsList(hHitsZNATot, 1, !expert, image); - Add2HitsList(hHitsZPCTot, 2, !expert, image); - Add2HitsList(hHitsZPATot, 3, !expert, image); - // - TH1F * hHitsSumQZNC = new TH1F("hHitsSumQZNC", "Signal in 4 ZNC PMQ; N_{phe}",100, 0., 4000.); - TH1F * hHitsSumQZNA = new TH1F("hHitsSumQZNA", "Signal in 4 ZNA PMQ; N_{phe}",100, 0., 4000.); - TH1F * hHitsSumQZPC = new TH1F("hHitsSumQZPC", "Signal in 4 ZPC PMQ; N_{phe}",100, 0., 4000.); - TH1F * hHitsSumQZPA = new TH1F("hHitsSumQZPA", "Signal in 4 ZPA PMQ; N_{phe}",100, 0., 4000.); - Add2HitsList(hHitsSumQZNC, 4, expert, !image); - Add2HitsList(hHitsSumQZNA, 5, expert, !image); - Add2HitsList(hHitsSumQZPC, 6, expert, !image); - Add2HitsList(hHitsSumQZPA, 7, expert, !image); - // - TH1F * hHitsPMCZNC = new TH1F("hHitsPMCZNC", "Signal in ZNC PMC; N_{phe}",100, 0., 4000.); - TH1F * hHitsPMCZNA = new TH1F("hHitsPMCZNA", "Signal in ZNA PMC; N_{phe}",100, 0., 4000.); - TH1F * hHitsPMCZPC = new TH1F("hHitsPMCZPC", "Signal in ZPC PMC; N_{phe}",100, 0., 4000.); - TH1F * hHitsPMCZPA = new TH1F("hHitsPMCZPA", "Signal in ZPA PMC; N_{phe}",100, 0., 4000.); - Add2HitsList(hHitsPMCZNC, 8, expert, !image); - Add2HitsList(hHitsPMCZNA, 9, expert, !image); - Add2HitsList(hHitsPMCZPC, 10, expert, !image); - Add2HitsList(hHitsPMCZPA, 11, expert, !image); - - ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line -} - - -//____________________________________________________________________________ -void AliZDCQADataMakerSim::InitDigits() -{ - // create Digits histograms in Digits subdir - // - const Bool_t expert = kTRUE ; - const Bool_t image = kTRUE ; - - // ------------------- HIGH GAIN CHAIN --------------------------- - TH1F * hDigZNCTot = new TH1F("hDigZNCTot", "Signal in ZNC;Amplitude [ADC counts];Counts", 100, 0., 6000.); - TH1F * hDigZNATot = new TH1F("hDigZNATot", "Signal in ZNA;Amplitude [ADC counts];Counts", 100, 0., 6000.); - TH1F * hDigZPCTot = new TH1F("hDigZPCTot", "Signal in ZPC;Amplitude [ADC counts];Counts", 100, 0., 6000.); - TH1F * hDigZPATot = new TH1F("hDigZPATot", "Signal in ZPA;Amplitude [ADC counts];Counts", 100, 0., 6000.); - Add2DigitsList(hDigZNCTot, 0, !expert, image); - Add2DigitsList(hDigZNATot, 1, !expert, image); - Add2DigitsList(hDigZPCTot, 2, !expert, image); - Add2DigitsList(hDigZPATot, 3, !expert, image); - // - TH1F * hDigSumQZNC = new TH1F("hDigSumQZNC", "Signal in 4 ZNC PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); - TH1F * hDigSumQZNA = new TH1F("hDigSumQZNA", "Signal in 4 ZNA PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); - TH1F * hDigSumQZPC = new TH1F("hDigSumQZPC", "Signal in 4 ZPC PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); - TH1F * hDigSumQZPA = new TH1F("hDigSumQZPA", "Signal in 4 ZPA PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); - Add2DigitsList(hDigSumQZNC, 4, expert, !image); - Add2DigitsList(hDigSumQZNA, 5, expert, !image); - Add2DigitsList(hDigSumQZPC, 6, expert, !image); - Add2DigitsList(hDigSumQZPA, 7, expert, !image); - // - TH1F * hDigPMCZNC = new TH1F("hDigPMCZNC", "Signal in ZNC PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); - TH1F * hDigPMCZNA = new TH1F("hDigPMCZNA", "Signal in ZNA PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); - TH1F * hDigPMCZPC = new TH1F("hDigPMCZPC", "Signal in ZPC PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); - TH1F * hDigPMCZPA = new TH1F("hDigPMCZPA", "Signal in ZPA PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); - Add2DigitsList(hDigPMCZNC, 8, expert, !image); - Add2DigitsList(hDigPMCZNA, 9, expert, !image); - Add2DigitsList(hDigPMCZPC, 10, expert, !image); - Add2DigitsList(hDigPMCZPA, 11, expert, !image); - // - // - ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line -} - -//____________________________________________________________________________ -void AliZDCQADataMakerSim::MakeHits() -{ - //filling QA histos for Hits - - // Check id histograms already created for this Event Specie - if( !GetHitsData(0) ) InitHits(); - - TIter next(fHitsArray); - AliZDCHit * hit; - Float_t adcSum_ZNC=0., adcSum_ZNA=0., adcSum_ZPC=0., adcSum_ZPA=0.; - Float_t adcSumQ_ZNC=0., adcSumQ_ZNA=0., adcSumQ_ZPC=0., adcSumQ_ZPA=0.; - while((hit = dynamic_cast(next()))){ - if(hit->GetVolume(0)==1){ - adcSumQ_ZNC += hit->GetLightPMQ(); - adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); - // - FillHitsData(8,hit->GetLightPMC()); - } - else if(hit->GetVolume(0)==4){ - adcSumQ_ZNA += hit->GetLightPMQ(); - adcSum_ZNA += hit->GetLightPMC() + hit->GetLightPMQ(); - // - FillHitsData(9,hit->GetLightPMC()); - } - else if(hit->GetVolume(0)==2){ - adcSumQ_ZNC += hit->GetLightPMQ(); - adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); - // - FillHitsData(10,hit->GetLightPMC()); - } - else if(hit->GetVolume(0)==5){ - adcSumQ_ZNC += hit->GetLightPMQ(); - adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); - // - FillHitsData(11,hit->GetLightPMC()); - } - // - FillHitsData(0,adcSum_ZNC); - FillHitsData(1,adcSum_ZNA); - FillHitsData(2,adcSum_ZPC); - FillHitsData(3,adcSum_ZPA); - // - FillHitsData(4,adcSumQ_ZNC); - FillHitsData(5,adcSumQ_ZNA); - FillHitsData(6,adcSumQ_ZPC); - FillHitsData(7,adcSumQ_ZPA); - } -} - -//___________________________________________________________________________ -void AliZDCQADataMakerSim::MakeHits(TTree * hitTree) -{ - // make QA data from Hit Tree - if(!hitTree){ - AliError("Can't get ZDC hit tree!!"); - return; - } - - TBranch * branch = hitTree->GetBranch("ZDC") ; - - if(!branch){ - AliError("ZDC branch in Hit Tree not found!"); - return; - } - - if(fHitsArray) fHitsArray->Clear() ; - else fHitsArray = new TClonesArray("AliZDCHit", 1000); - - branch->SetAddress(&fHitsArray) ; - for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) { - branch->GetEntry(ientry) ; - MakeHits() ; - fHitsArray->Clear() ; - } - // - IncEvCountCycleHits(); - IncEvCountTotalHits(); - // -} - -//___________________________________________________________________________ -void AliZDCQADataMakerSim::MakeDigits(TTree *digitTree) -{ - // makes data from Digit Tree - if( !GetDigitsData(0) ) InitDigits(); - - if(!digitTree){ - AliError("Can't get ZDC digit tree!!"); - return; - } - - TBranch * branch = digitTree->GetBranch("ZDC"); - if(!branch){ - AliError("ZDC branch in digit tree not found"); - return; - } - - AliZDCDigit *digit = 0x0; - branch->SetAddress(&digit); - - Float_t adcSum_ZNC=0., adcSum_ZNA=0., adcSum_ZPC=0., adcSum_ZPA=0.; - Float_t adcSumQ_ZNC=0., adcSumQ_ZNA=0., adcSumQ_ZPC=0., adcSumQ_ZPA=0.; - // Float_t adcSum_ZNC_lg=0., adcSum_ZNA_lg=0., adcSum_ZPC_lg=0., adcSum_ZPA_lg=0.; - // Float_t adcSumQ_ZNC_lg=0., adcSumQ_ZNA_lg=0., adcSumQ_ZPC_lg=0., adcSumQ_ZPA_lg=0.; - - Int_t ndig = digitTree->GetEntries(); - for(Int_t i=0; iGetEntry(i); - - if(digit->GetSector(0)==1 && digit->GetSector(1)!=5){ - adcSum_ZNC += digit->GetADCValue(0); - //adcSum_ZNC_lg += digit->GetADCValue(1); - // - if(digit->GetSector(1)!=0){ - adcSumQ_ZNC += digit->GetADCValue(0); - //adcSumQ_ZNC_lg+= digit->GetADCValue(1); - } - else{ - FillDigitsData(8,digit->GetADCValue(0)); - //FillDigitsData(20,digit->GetADCValue(1)); - } - } - else if(digit->GetSector(0)==2){ - adcSum_ZPC += digit->GetADCValue(0); - //adcSum_ZPC_lg += digit->GetADCValue(1); - // - if(digit->GetSector(1)!=0){ - adcSumQ_ZPC += digit->GetADCValue(0); - //adcSumQ_ZPC_lg+= digit->GetADCValue(1); - } - else{ - FillDigitsData(10,digit->GetADCValue(0)); - //FillDigitsData(22,digit->GetADCValue(1)); - } - } - else if(digit->GetSector(0)==4 && digit->GetSector(1)!=5){ - adcSum_ZNA += digit->GetADCValue(0); - //adcSum_ZNA_lg += digit->GetADCValue(1); - // - if(digit->GetSector(1)!=0){ - adcSumQ_ZNA += digit->GetADCValue(0); - //adcSumQ_ZNA_lg+= digit->GetADCValue(1); - } - else{ - FillDigitsData(9,digit->GetADCValue(0)); - //FillDigitsData(21,digit->GetADCValue(1)); - } - } - else if(digit->GetSector(0)==5){ - adcSum_ZPA += digit->GetADCValue(0); - //adcSum_ZPA_lg += digit->GetADCValue(1); - // - if(digit->GetSector(1)!=0){ - adcSumQ_ZPA += digit->GetADCValue(0); - //adcSumQ_ZPA_lg+= digit->GetADCValue(1); - } - else{ - FillDigitsData(11,digit->GetADCValue(0)); - //FillDigitsData(23,digit->GetADCValue(1)); - } - } - } - // - FillDigitsData(0,adcSum_ZNC); - FillDigitsData(1,adcSum_ZNA); - FillDigitsData(2,adcSum_ZPC); - FillDigitsData(3,adcSum_ZPA); - // - FillDigitsData(4,adcSumQ_ZNC); - FillDigitsData(5,adcSumQ_ZNA); - FillDigitsData(6,adcSumQ_ZPC); - FillDigitsData(7,adcSumQ_ZPA); - // - IncEvCountCycleDigits(); - IncEvCountTotalDigits(); - // -} - -//____________________________________________________________________________ -void AliZDCQADataMakerSim::StartOfDetectorCycle() -{ - //Detector specific actions at start of cycle - -} - -//____________________________________________________________________________ -void AliZDCQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list) -{ - // Detector specific actions at end of cycle - // do the QA checking - ResetEventTrigClasses(); - AliQAChecker::Instance()->Run(AliQAv1::kZDC, task, list); -} +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +// --- Standard library --- +#include +// --- ROOT system --- +#include +#include +#include +#include +#include +#include +// --- AliRoot header files --- +#include "AliLog.h" +#include "AliQAChecker.h" +#include "AliZDCQADataMakerSim.h" +#include "AliZDCHit.h" +#include "AliZDCDigit.h" + +ClassImp(AliZDCQADataMakerSim) + +//____________________________________________________________________________ + AliZDCQADataMakerSim::AliZDCQADataMakerSim() : + AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kZDC), "ZDC Quality Assurance Data Maker") +{ + // ctor +} + +//____________________________________________________________________________ +AliZDCQADataMakerSim::AliZDCQADataMakerSim(const AliZDCQADataMakerSim& qadm) : + AliQADataMakerSim() +{ + //copy ctor + SetName((const char*)qadm.GetName()); + SetTitle((const char*)qadm.GetTitle()); +} + +//__________________________________________________________________ +AliZDCQADataMakerSim& AliZDCQADataMakerSim::operator = (const AliZDCQADataMakerSim& qadm ) +{ + // Equal operator. + this->~AliZDCQADataMakerSim(); + new(this) AliZDCQADataMakerSim(qadm); + return *this; +} + +//____________________________________________________________________________ +void AliZDCQADataMakerSim::InitHits() +{ + // create Hits histograms in Hits subdir + // + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + + TH1F * hHitsZNCTot = new TH1F("hHitsZNCTot", "Signal in ZNC; N_{phe}", 100, 0., 6000.); + TH1F * hHitsZNATot = new TH1F("hHitsZNATot", "Signal in ZNA; N_{phe}", 100, 0., 6000.); + TH1F * hHitsZPCTot = new TH1F("hHitsZPCTot", "Signal in ZPC; N_{phe}", 100, 0., 6000.); + TH1F * hHitsZPATot = new TH1F("hHitsZPATot", "Signal in ZPA; N_{phe}", 100, 0., 6000.); + Add2HitsList(hHitsZNCTot, 0, !expert, image); + Add2HitsList(hHitsZNATot, 1, !expert, image); + Add2HitsList(hHitsZPCTot, 2, !expert, image); + Add2HitsList(hHitsZPATot, 3, !expert, image); + // + TH1F * hHitsSumQZNC = new TH1F("hHitsSumQZNC", "Signal in 4 ZNC PMQ; N_{phe}",100, 0., 4000.); + TH1F * hHitsSumQZNA = new TH1F("hHitsSumQZNA", "Signal in 4 ZNA PMQ; N_{phe}",100, 0., 4000.); + TH1F * hHitsSumQZPC = new TH1F("hHitsSumQZPC", "Signal in 4 ZPC PMQ; N_{phe}",100, 0., 4000.); + TH1F * hHitsSumQZPA = new TH1F("hHitsSumQZPA", "Signal in 4 ZPA PMQ; N_{phe}",100, 0., 4000.); + Add2HitsList(hHitsSumQZNC, 4, expert, !image); + Add2HitsList(hHitsSumQZNA, 5, expert, !image); + Add2HitsList(hHitsSumQZPC, 6, expert, !image); + Add2HitsList(hHitsSumQZPA, 7, expert, !image); + // + TH1F * hHitsPMCZNC = new TH1F("hHitsPMCZNC", "Signal in ZNC PMC; N_{phe}",100, 0., 4000.); + TH1F * hHitsPMCZNA = new TH1F("hHitsPMCZNA", "Signal in ZNA PMC; N_{phe}",100, 0., 4000.); + TH1F * hHitsPMCZPC = new TH1F("hHitsPMCZPC", "Signal in ZPC PMC; N_{phe}",100, 0., 4000.); + TH1F * hHitsPMCZPA = new TH1F("hHitsPMCZPA", "Signal in ZPA PMC; N_{phe}",100, 0., 4000.); + Add2HitsList(hHitsPMCZNC, 8, expert, !image); + Add2HitsList(hHitsPMCZNA, 9, expert, !image); + Add2HitsList(hHitsPMCZPC, 10, expert, !image); + Add2HitsList(hHitsPMCZPA, 11, expert, !image); + + ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line +} + + +//____________________________________________________________________________ +void AliZDCQADataMakerSim::InitDigits() +{ + // create Digits histograms in Digits subdir + // + const Bool_t expert = kTRUE ; + const Bool_t image = kTRUE ; + + // ------------------- HIGH GAIN CHAIN --------------------------- + TH1F * hDigZNCTot = new TH1F("hDigZNCTot", "Signal in ZNC;Amplitude [ADC counts];Counts", 100, 0., 6000.); + TH1F * hDigZNATot = new TH1F("hDigZNATot", "Signal in ZNA;Amplitude [ADC counts];Counts", 100, 0., 6000.); + TH1F * hDigZPCTot = new TH1F("hDigZPCTot", "Signal in ZPC;Amplitude [ADC counts];Counts", 100, 0., 6000.); + TH1F * hDigZPATot = new TH1F("hDigZPATot", "Signal in ZPA;Amplitude [ADC counts];Counts", 100, 0., 6000.); + Add2DigitsList(hDigZNCTot, 0, !expert, image); + Add2DigitsList(hDigZNATot, 1, !expert, image); + Add2DigitsList(hDigZPCTot, 2, !expert, image); + Add2DigitsList(hDigZPATot, 3, !expert, image); + // + TH1F * hDigSumQZNC = new TH1F("hDigSumQZNC", "Signal in 4 ZNC PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); + TH1F * hDigSumQZNA = new TH1F("hDigSumQZNA", "Signal in 4 ZNA PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); + TH1F * hDigSumQZPC = new TH1F("hDigSumQZPC", "Signal in 4 ZPC PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); + TH1F * hDigSumQZPA = new TH1F("hDigSumQZPA", "Signal in 4 ZPA PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); + Add2DigitsList(hDigSumQZNC, 4, expert, !image); + Add2DigitsList(hDigSumQZNA, 5, expert, !image); + Add2DigitsList(hDigSumQZPC, 6, expert, !image); + Add2DigitsList(hDigSumQZPA, 7, expert, !image); + // + TH1F * hDigPMCZNC = new TH1F("hDigPMCZNC", "Signal in ZNC PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); + TH1F * hDigPMCZNA = new TH1F("hDigPMCZNA", "Signal in ZNA PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); + TH1F * hDigPMCZPC = new TH1F("hDigPMCZPC", "Signal in ZPC PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); + TH1F * hDigPMCZPA = new TH1F("hDigPMCZPA", "Signal in ZPA PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); + Add2DigitsList(hDigPMCZNC, 8, expert, !image); + Add2DigitsList(hDigPMCZNA, 9, expert, !image); + Add2DigitsList(hDigPMCZPC, 10, expert, !image); + Add2DigitsList(hDigPMCZPA, 11, expert, !image); + // + // + ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line +} + +//____________________________________________________________________________ +void AliZDCQADataMakerSim::MakeHits() +{ + //filling QA histos for Hits + + // Check id histograms already created for this Event Specie + if( !GetHitsData(0) ) InitHits(); + + TIter next(fHitsArray); + AliZDCHit * hit; + Float_t adcSum_ZNC=0., adcSum_ZNA=0., adcSum_ZPC=0., adcSum_ZPA=0.; + Float_t adcSumQ_ZNC=0., adcSumQ_ZNA=0., adcSumQ_ZPC=0., adcSumQ_ZPA=0.; + while((hit = dynamic_cast(next()))){ + if(hit->GetVolume(0)==1){ + adcSumQ_ZNC += hit->GetLightPMQ(); + adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); + // + FillHitsData(8,hit->GetLightPMC()); + } + else if(hit->GetVolume(0)==4){ + adcSumQ_ZNA += hit->GetLightPMQ(); + adcSum_ZNA += hit->GetLightPMC() + hit->GetLightPMQ(); + // + FillHitsData(9,hit->GetLightPMC()); + } + else if(hit->GetVolume(0)==2){ + adcSumQ_ZNC += hit->GetLightPMQ(); + adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); + // + FillHitsData(10,hit->GetLightPMC()); + } + else if(hit->GetVolume(0)==5){ + adcSumQ_ZNC += hit->GetLightPMQ(); + adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); + // + FillHitsData(11,hit->GetLightPMC()); + } + // + FillHitsData(0,adcSum_ZNC); + FillHitsData(1,adcSum_ZNA); + FillHitsData(2,adcSum_ZPC); + FillHitsData(3,adcSum_ZPA); + // + FillHitsData(4,adcSumQ_ZNC); + FillHitsData(5,adcSumQ_ZNA); + FillHitsData(6,adcSumQ_ZPC); + FillHitsData(7,adcSumQ_ZPA); + } +} + +//___________________________________________________________________________ +void AliZDCQADataMakerSim::MakeHits(TTree * hitTree) +{ + // make QA data from Hit Tree + if(!hitTree){ + AliError("Can't get ZDC hit tree!!"); + return; + } + + TBranch * branch = hitTree->GetBranch("ZDC") ; + + if(!branch){ + AliError("ZDC branch in Hit Tree not found!"); + return; + } + + if(fHitsArray) fHitsArray->Clear() ; + else fHitsArray = new TClonesArray("AliZDCHit", 1000); + + branch->SetAddress(&fHitsArray) ; + for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) { + branch->GetEntry(ientry) ; + MakeHits() ; + fHitsArray->Clear() ; + } + // + IncEvCountCycleHits(); + IncEvCountTotalHits(); + // +} + +//___________________________________________________________________________ +void AliZDCQADataMakerSim::MakeDigits(TTree *digitTree) +{ + // makes data from Digit Tree + if( !GetDigitsData(0) ) InitDigits(); + + if(!digitTree){ + AliError("Can't get ZDC digit tree!!"); + return; + } + + TBranch * branch = digitTree->GetBranch("ZDC"); + if(!branch){ + AliError("ZDC branch in digit tree not found"); + return; + } + + AliZDCDigit *digit = 0x0; + branch->SetAddress(&digit); + + Float_t adcSum_ZNC=0., adcSum_ZNA=0., adcSum_ZPC=0., adcSum_ZPA=0.; + Float_t adcSumQ_ZNC=0., adcSumQ_ZNA=0., adcSumQ_ZPC=0., adcSumQ_ZPA=0.; + // Float_t adcSum_ZNC_lg=0., adcSum_ZNA_lg=0., adcSum_ZPC_lg=0., adcSum_ZPA_lg=0.; + // Float_t adcSumQ_ZNC_lg=0., adcSumQ_ZNA_lg=0., adcSumQ_ZPC_lg=0., adcSumQ_ZPA_lg=0.; + + Int_t ndig = digitTree->GetEntries(); + for(Int_t i=0; iGetEntry(i); + + if(digit->GetSector(0)==1 && digit->GetSector(1)!=5){ + adcSum_ZNC += digit->GetADCValue(0); + //adcSum_ZNC_lg += digit->GetADCValue(1); + // + if(digit->GetSector(1)!=0){ + adcSumQ_ZNC += digit->GetADCValue(0); + //adcSumQ_ZNC_lg+= digit->GetADCValue(1); + } + else{ + FillDigitsData(8,digit->GetADCValue(0)); + //FillDigitsData(20,digit->GetADCValue(1)); + } + } + else if(digit->GetSector(0)==2){ + adcSum_ZPC += digit->GetADCValue(0); + //adcSum_ZPC_lg += digit->GetADCValue(1); + // + if(digit->GetSector(1)!=0){ + adcSumQ_ZPC += digit->GetADCValue(0); + //adcSumQ_ZPC_lg+= digit->GetADCValue(1); + } + else{ + FillDigitsData(10,digit->GetADCValue(0)); + //FillDigitsData(22,digit->GetADCValue(1)); + } + } + else if(digit->GetSector(0)==4 && digit->GetSector(1)!=5){ + adcSum_ZNA += digit->GetADCValue(0); + //adcSum_ZNA_lg += digit->GetADCValue(1); + // + if(digit->GetSector(1)!=0){ + adcSumQ_ZNA += digit->GetADCValue(0); + //adcSumQ_ZNA_lg+= digit->GetADCValue(1); + } + else{ + FillDigitsData(9,digit->GetADCValue(0)); + //FillDigitsData(21,digit->GetADCValue(1)); + } + } + else if(digit->GetSector(0)==5){ + adcSum_ZPA += digit->GetADCValue(0); + //adcSum_ZPA_lg += digit->GetADCValue(1); + // + if(digit->GetSector(1)!=0){ + adcSumQ_ZPA += digit->GetADCValue(0); + //adcSumQ_ZPA_lg+= digit->GetADCValue(1); + } + else{ + FillDigitsData(11,digit->GetADCValue(0)); + //FillDigitsData(23,digit->GetADCValue(1)); + } + } + } + // + FillDigitsData(0,adcSum_ZNC); + FillDigitsData(1,adcSum_ZNA); + FillDigitsData(2,adcSum_ZPC); + FillDigitsData(3,adcSum_ZPA); + // + FillDigitsData(4,adcSumQ_ZNC); + FillDigitsData(5,adcSumQ_ZNA); + FillDigitsData(6,adcSumQ_ZPC); + FillDigitsData(7,adcSumQ_ZPA); + // + IncEvCountCycleDigits(); + IncEvCountTotalDigits(); + // +} + +//____________________________________________________________________________ +void AliZDCQADataMakerSim::StartOfDetectorCycle() +{ + //Detector specific actions at start of cycle + +} + +//____________________________________________________________________________ +void AliZDCQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list) +{ + // Detector specific actions at end of cycle + // do the QA checking + ResetEventTrigClasses(); + AliQAChecker::Instance()->Run(AliQAv1::kZDC, task, list); +} diff --git a/ZDC/AliZDCQADataMakerSim.h b/ZDC/AliZDCQADataMakerSim.h index 604ae22c30c..d6454726f01 100644 --- a/ZDC/AliZDCQADataMakerSim.h +++ b/ZDC/AliZDCQADataMakerSim.h @@ -1,39 +1,39 @@ -#ifndef AliZDCQADataMakerSim_H -#define AliZDCQADataMakerSim_H -/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * See cxx source for full Copyright notice */ - -////////////////////////////////////////////////////// -// // -// Produces the data needed for quality assurance. // -// C. Oppedisano Chiara.Oppedisano@to.infn.it // -// // -////////////////////////////////////////////////////// - -#include "AliQADataMakerSim.h" -class AliZDCQADataMakerSim: public AliQADataMakerSim { - -public: - AliZDCQADataMakerSim(); // ctor - AliZDCQADataMakerSim(const AliZDCQADataMakerSim& qadm); - AliZDCQADataMakerSim& operator = (const AliZDCQADataMakerSim& qadm) ; - virtual ~AliZDCQADataMakerSim() {;} // dtor - -private: - virtual void InitHits(); - virtual void InitDigits(); - virtual void InitSDigits() {;} - virtual void MakeHits(); - virtual void MakeHits(TTree * hitTree); - virtual void MakeDigits() {;} - virtual void MakeDigits(TTree * digTree); - virtual void MakeSDigits() {;} - virtual void MakeSDigits(TTree * /*sdigTree*/) {;} - virtual void StartOfDetectorCycle(); - virtual void EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list); - - ClassDef(AliZDCQADataMakerSim, 3) // description - -}; - -#endif // AliZDCQADataMakerSim_H +#ifndef AliZDCQADataMakerSim_H +#define AliZDCQADataMakerSim_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +////////////////////////////////////////////////////// +// // +// Produces the data needed for quality assurance. // +// C. Oppedisano Chiara.Oppedisano@to.infn.it // +// // +////////////////////////////////////////////////////// + +#include "AliQADataMakerSim.h" +class AliZDCQADataMakerSim: public AliQADataMakerSim { + +public: + AliZDCQADataMakerSim(); // ctor + AliZDCQADataMakerSim(const AliZDCQADataMakerSim& qadm); + AliZDCQADataMakerSim& operator = (const AliZDCQADataMakerSim& qadm) ; + virtual ~AliZDCQADataMakerSim() {;} // dtor + +private: + virtual void InitHits(); + virtual void InitDigits(); + virtual void InitSDigits() {;} + virtual void MakeHits(); + virtual void MakeHits(TTree * hitTree); + virtual void MakeDigits() {;} + virtual void MakeDigits(TTree * digTree); + virtual void MakeSDigits() {;} + virtual void MakeSDigits(TTree * /*sdigTree*/) {;} + virtual void StartOfDetectorCycle(); + virtual void EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list); + + ClassDef(AliZDCQADataMakerSim, 3) // description + +}; + +#endif // AliZDCQADataMakerSim_H diff --git a/ZDC/ZDCMAPPINGda.cxx b/ZDC/ZDCMAPPINGda.cxx index 4625e05a9d9..22488938f82 100644 --- a/ZDC/ZDCMAPPINGda.cxx +++ b/ZDC/ZDCMAPPINGda.cxx @@ -1,399 +1,399 @@ -/* - -This program reads the DAQ data files passed as argument using the monitoring library. - -The program reports about its processing progress. - -Messages on stdout are exported to DAQ log system. - -DA to write mapping for ADC modules and VME scaler - -Contact: Chiara.Oppedisano@to.infn.it -Link: -Run Type: PHYSICS -DA Type: MON -Number of events needed: at least 50% -Input Files: none -Output Files: ZDCChMapping.dat -Trigger Types Used: different trigger types are used - -*/ - -#define MAPDATA_FILE "ZDCChMapping.dat" -#define TDCDATA_FILE "ZDCTDCCalib.dat" -#define TDCHISTO_FILE "ZDCTDCHisto.root" - -#include -#include -#include -#include - -// DATE -#include -#include -#include - -//ROOT -#include -#include -#include -#include -#include -#include -#include -#include -#include "TMinuitMinimizer.h" - -//AliRoot -#include -#include -#include - -int main(int argc, char **argv) { - - // needed for streamer application - gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo", - "*", - "TStreamerInfo", - "RIO", - "TStreamerInfo()"); - // needed for Minuit plugin - gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer", - "Minuit", - "TMinuitMinimizer", - "Minuit", - "TMinuitMinimizer(const char*)"); - - //TMinuitMinimizer m; - TVirtualFitter::SetDefaultFitter("Minuit"); - - char *monitor_table[] = { "ALL", "no", "PHY", "yes", "SOD", "all", NULL }; - int err = monitorDeclareTable(monitor_table); - if(err){ - printf("monitorDeclareTable() failed: %s\n", monitorDecodeError(err)); - return -1; - } - - int status=0, nphys=0; - int const kNModules = 9; - int const kNChannels = 24; - int const kNScChannels = 32; - int const kZDCTDCGeo = 4; - - int itdc=0, iprevtdc=-1, ihittdc=0; - float tdcData[6], tdcL0=-999.; - for(int ij=0; ij<6; ij++) tdcData[ij]=-999.; - - Int_t iMod=-1; - Int_t modGeo[kNModules], modType[kNModules],modNCh[kNModules]; - for(Int_t kl=0; kl 50000) break; - - struct eventHeaderStruct *event; - eventTypeType eventT; - - /* check shutdown condition */ - if (daqDA_checkShutdown()) {break;} - - /* get next event */ - status=monitorGetEventDynamic((void **)&event); - if(status==MON_ERR_EOF){ - printf ("End of File detected\n"); - break; /* end of monitoring file has been reached */ - } - if(status!=0) { - printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status)); - return -1; - } - - /* retry if got no event */ - if(event==NULL) continue; - - // Initalize raw-data reading and decoding - AliRawReader *reader = new AliRawReaderDate((void*)event); - reader->Reset(); - reader->Select("ZDC"); - // --- Reading event header - //UInt_t evtype = reader->GetType(); - //printf("\t ZDCMAPPINGda -> run # %d\n",reader->GetRunNumber()); - // - AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader); - - - /* use event - here, just write event id to result file */ - eventT=event->eventType; - - if(eventT==START_OF_DATA){ - - rawStreamZDC->SetSODReading(kTRUE); - - // -------------------------------------------------------- - // --- Writing ascii data file for the Shuttle preprocessor - mapFile4Shuttle = fopen(MAPDATA_FILE,"w"); - //if(rawStreamZDC->Next()){ - while((rawStreamZDC->Next())){ - if(rawStreamZDC->IsHeaderMapping()){ // mapping header - iMod++; - modGeo[iMod] = rawStreamZDC->GetADCModule(); - modType[iMod] = rawStreamZDC->GetModType(); - modNCh[iMod] = rawStreamZDC->GetADCNChannels(); - } - if(rawStreamZDC->IsChMapping()){ - if(modType[iMod]==1){ // ADC mapping ---------------------- - adcMod[ich] = rawStreamZDC->GetADCModFromMap(ich); - adcCh[ich] = rawStreamZDC->GetADCChFromMap(ich); - sigCode[ich] = rawStreamZDC->GetADCSignFromMap(ich); - det[ich] = rawStreamZDC->GetDetectorFromMap(ich); - sec[ich] = rawStreamZDC->GetTowerFromMap(ich); - ich++; - } - else if(modType[iMod]==2){ // VME scaler mapping ------------- - scMod[iScCh] = rawStreamZDC->GetScalerModFromMap(iScCh); - scCh[iScCh] = rawStreamZDC->GetScalerChFromMap(iScCh); - scSigCode[iScCh] = rawStreamZDC->GetScalerSignFromMap(iScCh); - scDet[iScCh] = rawStreamZDC->GetScDetectorFromMap(iScCh); - scSec[iScCh] = rawStreamZDC->GetScTowerFromMap(iScCh); - iScCh++; - } - else if(modType[iMod]==6 && modGeo[iMod]==4){ // ZDC TDC mapping -------------------- - tdcMod[itdcCh] = rawStreamZDC->GetTDCModFromMap(itdcCh); - tdcCh[itdcCh] = rawStreamZDC->GetTDCChFromMap(itdcCh); - tdcSigCode[itdcCh] = rawStreamZDC->GetTDCSignFromMap(itdcCh); - itdcCh++; - } - } - } - // Writing data on output FXS file - for(Int_t is=0; is<2*kNChannels; is++){ - fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n", - is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]); - //printf(" Mapping DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n", - //is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]); - } - for(Int_t is=0; is %d Scaler: mod %d ch %d, code %d det %d, sec %d\n", - //is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]); - } - for(Int_t is=0; is %d TDC: mod %d ch %d, code %d\n", - //is,tdcMod[is],tdcCh[is],tdcSigCode[is]); - } - for(Int_t is=0; is Module mapping: geo %d type %d #ch %d\n", - //modGeo[is],modType[is],modNCh[is]); - } - - //} //if (rawstream) - fclose(mapFile4Shuttle); - }// SOD event - else if(eventT==PHYSICS_EVENT){ - - for(int ij=0; ij<6; ij++) tdcData[ij]=-999.; - rawStreamZDC->SetSODReading(kTRUE); - - // ----- Setting ch. mapping ----- - for(int jk=0; jk<2*kNChannels; jk++){ - rawStreamZDC->SetMapADCMod(jk, adcMod[jk]); - rawStreamZDC->SetMapADCCh(jk, adcCh[jk]); - rawStreamZDC->SetMapADCSig(jk, sigCode[jk]); - rawStreamZDC->SetMapDet(jk, det[jk]); - rawStreamZDC->SetMapTow(jk, sec[jk]); - } - - while(rawStreamZDC->Next()){ - if(rawStreamZDC->GetADCModule()!=kZDCTDCGeo) continue; //skipping ADCs, scalers and trigger cards - - if(rawStreamZDC->GetADCModule()==kZDCTDCGeo && rawStreamZDC->IsZDCTDCDatum()==kTRUE){ - // - itdc = rawStreamZDC->GetChannel(); - if(itdc==iprevtdc) ihittdc++; - else ihittdc=0; - iprevtdc=itdc; - // - if(((itdc>=8 && itdc<=13) || itdc==15) && ihittdc==0){ - if(itdc!=15){ - tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum(); - // - //printf(" ev.%d **** TDC%d %1.0f ns \n",nphys,itdc, tdcData[itdc-8]); - } - // - else if(itdc==15){ - tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum(); - // - //printf(" ev.%d ++++ TDCL0 %1.0f ns \n",nphys,tdcL0); - // - for(int ic=0; ic<6; ic++){ - if(tdcData[ic]!=-999. && tdcL0!=-999.){ - hTDC[ic]->Fill(tdcData[ic]-tdcL0); - //printf(" ev.%d -> Filling histo%d: %f ns\n",nphys,ic, tdcData[ic]-tdcL0); - } - } - } - } - } - } - - nphys++; - - delete rawStreamZDC; - rawStreamZDC = 0x0; - delete reader; - - }//(if PHYSICS_EVENT) - else if(eventT==END_OF_RUN){ - printf("End Of Run detected\n"); - break; - } - - iev++; - - /* free resources */ - free(event); - - } // event loop - - } - printf(" \n # of physics events analyzed = %d\n\n", nphys); - - /* Analysis of the histograms */ - // - FILE *fileShuttle; - fileShuttle = fopen(TDCDATA_FILE,"w"); - // - Float_t xUp=0., xLow=0., deltaX=0; - Int_t binMax=0, nBinsx=0; - Float_t mean[6]={0.,0.,0.,0.,0.,0.}, sigma[6]={0.,0.,0.,0.,0.,0.}; - TF1 *fitfun[6]={0x0,0x0,0x0,0x0,0x0,0x0}; - for(int k=0; k<6; k++){ - if(hTDC[k]->GetEntries()!=0){ - binMax = hTDC[k]->GetMaximumBin(); - if(binMax<=1){ - printf("\n WARNING! Something wrong with det %d histo \n\n", k); - continue; - } - // - xUp = (hTDC[k]->GetXaxis())->GetXmax(); - xLow = (hTDC[k]->GetXaxis())->GetXmin(); - deltaX = xUp-xLow; - nBinsx = (hTDC[k]->GetXaxis())->GetNbins(); - //printf(" xMax = %f\n", xLow+binMax*deltaX/nBinsx); - hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.75,xLow+binMax*deltaX/nBinsx*1.25); - fitfun[k] = hTDC[k]->GetFunction("gaus"); - mean[k] = (Float_t) (fitfun[k]->GetParameter(1)); - sigma[k] = (Float_t) (fitfun[k]->GetParameter(2)); - //printf("\t Mean value from fit = %1.2f ns\n", mean[k]); - // - fprintf(fileShuttle,"\t%f\t%f\n",mean[k], sigma[k]); - } - else printf(" WARNING! TDC histo %d has no entries and can't be processed!\n",k); - } - // - fclose(fileShuttle); - - TFile *histofile = new TFile(TDCHISTO_FILE,"RECREATE"); - histofile->cd(); - for(int k=0; k<6; k++) hTDC[k]->Write(); - histofile->Close(); - // - for(Int_t j=0; j<6; j++) delete hTDC[j]; - - /* store the result files on FES */ - // [1] File with mapping - status = daqDA_FES_storeFile(MAPDATA_FILE, "MAPPING"); - if(status){ - printf("Failed to export file : %d\n",status); - return -1; - } - // [2] File with TDC data - status = daqDA_FES_storeFile(TDCDATA_FILE, "TDCDATA"); - if(status){ - printf("Failed to export TDC data file to DAQ FES\n"); - return -1; - } - // [3] File with TDC histos - status = daqDA_FES_storeFile(TDCHISTO_FILE, "TDCHISTOS"); - if(status){ - printf("Failed to export TDC histos file to DAQ FES\n"); - return -1; - } - - return status; -} +/* + +This program reads the DAQ data files passed as argument using the monitoring library. + +The program reports about its processing progress. + +Messages on stdout are exported to DAQ log system. + +DA to write mapping for ADC modules and VME scaler + +Contact: Chiara.Oppedisano@to.infn.it +Link: +Run Type: PHYSICS +DA Type: MON +Number of events needed: at least 50% +Input Files: none +Output Files: ZDCChMapping.dat +Trigger Types Used: different trigger types are used + +*/ + +#define MAPDATA_FILE "ZDCChMapping.dat" +#define TDCDATA_FILE "ZDCTDCCalib.dat" +#define TDCHISTO_FILE "ZDCTDCHisto.root" + +#include +#include +#include +#include + +// DATE +#include +#include +#include + +//ROOT +#include +#include +#include +#include +#include +#include +#include +#include +#include "TMinuitMinimizer.h" + +//AliRoot +#include +#include +#include + +int main(int argc, char **argv) { + + // needed for streamer application + gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo", + "*", + "TStreamerInfo", + "RIO", + "TStreamerInfo()"); + // needed for Minuit plugin + gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer", + "Minuit", + "TMinuitMinimizer", + "Minuit", + "TMinuitMinimizer(const char*)"); + + //TMinuitMinimizer m; + TVirtualFitter::SetDefaultFitter("Minuit"); + + char *monitor_table[] = { "ALL", "no", "PHY", "yes", "SOD", "all", NULL }; + int err = monitorDeclareTable(monitor_table); + if(err){ + printf("monitorDeclareTable() failed: %s\n", monitorDecodeError(err)); + return -1; + } + + int status=0, nphys=0; + int const kNModules = 9; + int const kNChannels = 24; + int const kNScChannels = 32; + int const kZDCTDCGeo = 4; + + int itdc=0, iprevtdc=-1, ihittdc=0; + float tdcData[6], tdcL0=-999.; + for(int ij=0; ij<6; ij++) tdcData[ij]=-999.; + + Int_t iMod=-1; + Int_t modGeo[kNModules], modType[kNModules],modNCh[kNModules]; + for(Int_t kl=0; kl 50000) break; + + struct eventHeaderStruct *event; + eventTypeType eventT; + + /* check shutdown condition */ + if (daqDA_checkShutdown()) {break;} + + /* get next event */ + status=monitorGetEventDynamic((void **)&event); + if(status==MON_ERR_EOF){ + printf ("End of File detected\n"); + break; /* end of monitoring file has been reached */ + } + if(status!=0) { + printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status)); + return -1; + } + + /* retry if got no event */ + if(event==NULL) continue; + + // Initalize raw-data reading and decoding + AliRawReader *reader = new AliRawReaderDate((void*)event); + reader->Reset(); + reader->Select("ZDC"); + // --- Reading event header + //UInt_t evtype = reader->GetType(); + //printf("\t ZDCMAPPINGda -> run # %d\n",reader->GetRunNumber()); + // + AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader); + + + /* use event - here, just write event id to result file */ + eventT=event->eventType; + + if(eventT==START_OF_DATA){ + + rawStreamZDC->SetSODReading(kTRUE); + + // -------------------------------------------------------- + // --- Writing ascii data file for the Shuttle preprocessor + mapFile4Shuttle = fopen(MAPDATA_FILE,"w"); + //if(rawStreamZDC->Next()){ + while((rawStreamZDC->Next())){ + if(rawStreamZDC->IsHeaderMapping()){ // mapping header + iMod++; + modGeo[iMod] = rawStreamZDC->GetADCModule(); + modType[iMod] = rawStreamZDC->GetModType(); + modNCh[iMod] = rawStreamZDC->GetADCNChannels(); + } + if(rawStreamZDC->IsChMapping()){ + if(modType[iMod]==1){ // ADC mapping ---------------------- + adcMod[ich] = rawStreamZDC->GetADCModFromMap(ich); + adcCh[ich] = rawStreamZDC->GetADCChFromMap(ich); + sigCode[ich] = rawStreamZDC->GetADCSignFromMap(ich); + det[ich] = rawStreamZDC->GetDetectorFromMap(ich); + sec[ich] = rawStreamZDC->GetTowerFromMap(ich); + ich++; + } + else if(modType[iMod]==2){ // VME scaler mapping ------------- + scMod[iScCh] = rawStreamZDC->GetScalerModFromMap(iScCh); + scCh[iScCh] = rawStreamZDC->GetScalerChFromMap(iScCh); + scSigCode[iScCh] = rawStreamZDC->GetScalerSignFromMap(iScCh); + scDet[iScCh] = rawStreamZDC->GetScDetectorFromMap(iScCh); + scSec[iScCh] = rawStreamZDC->GetScTowerFromMap(iScCh); + iScCh++; + } + else if(modType[iMod]==6 && modGeo[iMod]==4){ // ZDC TDC mapping -------------------- + tdcMod[itdcCh] = rawStreamZDC->GetTDCModFromMap(itdcCh); + tdcCh[itdcCh] = rawStreamZDC->GetTDCChFromMap(itdcCh); + tdcSigCode[itdcCh] = rawStreamZDC->GetTDCSignFromMap(itdcCh); + itdcCh++; + } + } + } + // Writing data on output FXS file + for(Int_t is=0; is<2*kNChannels; is++){ + fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n", + is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]); + //printf(" Mapping DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n", + //is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]); + } + for(Int_t is=0; is %d Scaler: mod %d ch %d, code %d det %d, sec %d\n", + //is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]); + } + for(Int_t is=0; is %d TDC: mod %d ch %d, code %d\n", + //is,tdcMod[is],tdcCh[is],tdcSigCode[is]); + } + for(Int_t is=0; is Module mapping: geo %d type %d #ch %d\n", + //modGeo[is],modType[is],modNCh[is]); + } + + //} //if (rawstream) + fclose(mapFile4Shuttle); + }// SOD event + else if(eventT==PHYSICS_EVENT){ + + for(int ij=0; ij<6; ij++) tdcData[ij]=-999.; + rawStreamZDC->SetSODReading(kTRUE); + + // ----- Setting ch. mapping ----- + for(int jk=0; jk<2*kNChannels; jk++){ + rawStreamZDC->SetMapADCMod(jk, adcMod[jk]); + rawStreamZDC->SetMapADCCh(jk, adcCh[jk]); + rawStreamZDC->SetMapADCSig(jk, sigCode[jk]); + rawStreamZDC->SetMapDet(jk, det[jk]); + rawStreamZDC->SetMapTow(jk, sec[jk]); + } + + while(rawStreamZDC->Next()){ + if(rawStreamZDC->GetADCModule()!=kZDCTDCGeo) continue; //skipping ADCs, scalers and trigger cards + + if(rawStreamZDC->GetADCModule()==kZDCTDCGeo && rawStreamZDC->IsZDCTDCDatum()==kTRUE){ + // + itdc = rawStreamZDC->GetChannel(); + if(itdc==iprevtdc) ihittdc++; + else ihittdc=0; + iprevtdc=itdc; + // + if(((itdc>=8 && itdc<=13) || itdc==15) && ihittdc==0){ + if(itdc!=15){ + tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum(); + // + //printf(" ev.%d **** TDC%d %1.0f ns \n",nphys,itdc, tdcData[itdc-8]); + } + // + else if(itdc==15){ + tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum(); + // + //printf(" ev.%d ++++ TDCL0 %1.0f ns \n",nphys,tdcL0); + // + for(int ic=0; ic<6; ic++){ + if(tdcData[ic]!=-999. && tdcL0!=-999.){ + hTDC[ic]->Fill(tdcData[ic]-tdcL0); + //printf(" ev.%d -> Filling histo%d: %f ns\n",nphys,ic, tdcData[ic]-tdcL0); + } + } + } + } + } + } + + nphys++; + + delete rawStreamZDC; + rawStreamZDC = 0x0; + delete reader; + + }//(if PHYSICS_EVENT) + else if(eventT==END_OF_RUN){ + printf("End Of Run detected\n"); + break; + } + + iev++; + + /* free resources */ + free(event); + + } // event loop + + } + printf(" \n # of physics events analyzed = %d\n\n", nphys); + + /* Analysis of the histograms */ + // + FILE *fileShuttle; + fileShuttle = fopen(TDCDATA_FILE,"w"); + // + Float_t xUp=0., xLow=0., deltaX=0; + Int_t binMax=0, nBinsx=0; + Float_t mean[6]={0.,0.,0.,0.,0.,0.}, sigma[6]={0.,0.,0.,0.,0.,0.}; + TF1 *fitfun[6]={0x0,0x0,0x0,0x0,0x0,0x0}; + for(int k=0; k<6; k++){ + if(hTDC[k]->GetEntries()!=0){ + binMax = hTDC[k]->GetMaximumBin(); + if(binMax<=1){ + printf("\n WARNING! Something wrong with det %d histo \n\n", k); + continue; + } + // + xUp = (hTDC[k]->GetXaxis())->GetXmax(); + xLow = (hTDC[k]->GetXaxis())->GetXmin(); + deltaX = xUp-xLow; + nBinsx = (hTDC[k]->GetXaxis())->GetNbins(); + //printf(" xMax = %f\n", xLow+binMax*deltaX/nBinsx); + hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.75,xLow+binMax*deltaX/nBinsx*1.25); + fitfun[k] = hTDC[k]->GetFunction("gaus"); + mean[k] = (Float_t) (fitfun[k]->GetParameter(1)); + sigma[k] = (Float_t) (fitfun[k]->GetParameter(2)); + //printf("\t Mean value from fit = %1.2f ns\n", mean[k]); + // + fprintf(fileShuttle,"\t%f\t%f\n",mean[k], sigma[k]); + } + else printf(" WARNING! TDC histo %d has no entries and can't be processed!\n",k); + } + // + fclose(fileShuttle); + + TFile *histofile = new TFile(TDCHISTO_FILE,"RECREATE"); + histofile->cd(); + for(int k=0; k<6; k++) hTDC[k]->Write(); + histofile->Close(); + // + for(Int_t j=0; j<6; j++) delete hTDC[j]; + + /* store the result files on FES */ + // [1] File with mapping + status = daqDA_FES_storeFile(MAPDATA_FILE, "MAPPING"); + if(status){ + printf("Failed to export file : %d\n",status); + return -1; + } + // [2] File with TDC data + status = daqDA_FES_storeFile(TDCDATA_FILE, "TDCDATA"); + if(status){ + printf("Failed to export TDC data file to DAQ FES\n"); + return -1; + } + // [3] File with TDC histos + status = daqDA_FES_storeFile(TDCHISTO_FILE, "TDCHISTOS"); + if(status){ + printf("Failed to export TDC histos file to DAQ FES\n"); + return -1; + } + + return status; +} -- 2.39.3