#if !defined(__CINT__) || defined(__MAKECINT__)
// MUON includes
+#include "AliMUONCDB.h"
#include "AliMUONTrackParam.h"
#include "AliMUONTrackExtrap.h"
-#include "AliESDMuonTrack.h"
+#include "AliMUONESDInterface.h"
// STEER includes
#include "AliRun.h"
#include "AliHeader.h"
#include "AliLoader.h"
#include "AliStack.h"
-#include "AliMagFMaps.h"
#include "AliESDEvent.h"
#include "AliESDVertex.h"
-#include "AliTracker.h"
#include "AliCDBManager.h"
+#include "AliESDMuonTrack.h"
// ROOT includes
#include "TTree.h"
#include "TNtuple.h"
-#include "TBranch.h"
-#include "TClonesArray.h"
#include "TLorentzVector.h"
#include "TFile.h"
#include "TH1.h"
#include "TH2.h"
#include "TParticle.h"
-#include "TTree.h"
#include "TString.h"
#include <Riostream.h>
#include <TGeoManager.h>
#include <TROOT.h>
+#include <TF1.h>
+#include <TMath.h>
#endif
-Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geometry.root", char* esdFileName = "AliESDs.root",
- Int_t ExtrapToVertex = -1, Int_t ResType = 553, Int_t FirstEvent = 0, Int_t LastEvent = 1000000 )
+Bool_t MUONefficiency(const char* filename = "generated/galice.root", const char* esdFileName = "AliESDs.root",
+ const char* geoFilename = "generated/geometry.root", const char* ocdbPath = "local://$ALICE_ROOT/OCDB",
+ Int_t ExtrapToVertex = -1, Int_t ResType = 553, Int_t FirstEvent = 0, Int_t LastEvent = 1000000 )
{
/// \param ExtrapToVertex (default -1)
/// - <0: no extrapolation;
// MUONefficiency starts
- // Set default CDB storage
- AliCDBManager* man = AliCDBManager::Instance();
- man->SetDefaultStorage("local://$ALICE_ROOT");
-
Double_t MUON_MASS = 0.105658369;
Double_t UPSILON_MASS = 9.4603 ;
Double_t JPSI_MASS = 3.097;
if (!gGeoManager) {
TGeoManager::Import(geoFilename);
if (!gGeoManager) {
- Error("MUONmass_ESD", "getting geometry from file %s failed", filename);
+ Error("MUONefficiency", "getting geometry from file %s failed", geoFilename);
return kFALSE;
}
}
- // set mag field
- // waiting for mag field in CDB
- printf("Loading field map...\n");
- AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
- AliTracker::SetFieldMap(field, kFALSE);
+ // open the ESD file
+ TFile* esdFile = TFile::Open(esdFileName);
+ if (!esdFile || !esdFile->IsOpen()) {
+ Error("MUONefficiency", "opening ESD file %s failed", esdFileName);
+ return kFALSE;
+ }
+
+ AliESDEvent* esd = new AliESDEvent();
+ TTree* tree = (TTree*) esdFile->Get("esdTree");
+ if (!tree) {
+ Error("MUONefficiency", "no ESD tree found");
+ return kFALSE;
+ }
+ esd->ReadFromTree(tree);
+
+ // get run number
+ if (tree->GetEvent(0) <= 0) {
+ Error("MUONefficiency", "no ESD object found for event 0");
+ return kFALSE;
+ }
+ Int_t runNumber = esd->GetRunNumber();
+
+ // load necessary data from OCDB
+ AliCDBManager::Instance()->SetDefaultStorage(ocdbPath);
+ AliCDBManager::Instance()->SetSpecificStorage("GRP/GRP/Data",
+ Form("local://%s",gSystem->pwd()));
+ AliCDBManager::Instance()->SetRun(runNumber);
+ if (!AliMUONCDB::LoadField()) return kFALSE;
+
+ // set the magnetic field for track extrapolations
+ AliMUONTrackExtrap::SetField();
// open run loader and load gAlice, kinematics and header
AliRunLoader* runLoader = AliRunLoader::Open(filename);
Error("MUONefficiency", "no galice object found");
return kFALSE;
}
-
- // open the ESD file
- TFile* esdFile = TFile::Open(esdFileName);
- if (!esdFile || !esdFile->IsOpen()) {
- Error("MUONefficiency", "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);
runLoader->LoadHeader();
- Int_t runNumber = runLoader->GetHeader()->GetRun();
- AliCDBManager::Instance()->SetRun(runNumber);
+ if (runNumber != runLoader->GetHeader()->GetRun()) {
+ Error("MUONefficiency", "mismatch between run number from ESD and from runLoader");
+ return kFALSE;
+ }
nevents = runLoader->GetNumberOfEvents();
AliMUONTrackParam trackParam;
// get the event summary data
- tree->GetEvent(iEvent);
- if (!esd) {
+ if (tree->GetEvent(iEvent) <= 0) {
Error("CheckESD", "no ESD object found for event %d", iEvent);
return kFALSE;
}
cout << " number of tracks: " << nTracks <<endl;
}
- // set the magnetic field for track extrapolations
- AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
// loop over all reconstructed tracks (also first track of combination)
for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
+ // skip ghosts
+ if (!esd->GetMuonTrack(iTrack)->ContainTrackerData()) continue;
+
AliESDMuonTrack* muonTrack = new AliESDMuonTrack(*(esd->GetMuonTrack(iTrack)));
// extrapolate to vertex if required and available
if (ExtrapToVertex > 0 && Vertex->GetNContributors()) {
- trackParam.GetParamFromUncorrected(*muonTrack);
+ AliMUONESDInterface::GetParamAtFirstCluster(*muonTrack, trackParam);
AliMUONTrackExtrap::ExtrapToVertex(&trackParam, fXVertex, fYVertex, fZVertex, errXVtx, errYVtx);
- trackParam.SetParamFor(*muonTrack); // put the new parameters in this copy of AliESDMuonTrack
+ AliMUONESDInterface::SetParamAtVertex(trackParam, *muonTrack); // put the new parameters in this copy of AliESDMuonTrack
} else if ((ExtrapToVertex > 0 && !Vertex->GetNContributors()) || ExtrapToVertex == 0){
- trackParam.GetParamFromUncorrected(*muonTrack);
+ AliMUONESDInterface::GetParamAtFirstCluster(*muonTrack, trackParam);
AliMUONTrackExtrap::ExtrapToVertex(&trackParam, 0., 0., 0., 0., 0.);
- trackParam.SetParamFor(*muonTrack); // put the new parameters in this copy of AliESDMuonTrack
+ AliMUONESDInterface::SetParamAtVertex(trackParam, *muonTrack); // put the new parameters in this copy of AliESDMuonTrack
}
// Trigger
// loop over second track of combination
for (Int_t iTrack2 = iTrack + 1; iTrack2 < nTracks; iTrack2++) {
+ // skip ghosts
+ if (!esd->GetMuonTrack(iTrack2)->ContainTrackerData()) continue;
+
AliESDMuonTrack* muonTrack2 = new AliESDMuonTrack(*(esd->GetMuonTrack(iTrack2)));
// extrapolate to vertex if required and available
if (ExtrapToVertex > 0 && Vertex->GetNContributors()) {
- trackParam.GetParamFromUncorrected(*muonTrack2);
+ AliMUONESDInterface::GetParamAtFirstCluster(*muonTrack2, trackParam);
AliMUONTrackExtrap::ExtrapToVertex(&trackParam, fXVertex, fYVertex, fZVertex, errXVtx, errYVtx);
- trackParam.SetParamFor(*muonTrack2); // put the new parameters in this copy of AliESDMuonTrack
+ AliMUONESDInterface::SetParamAtVertex(trackParam, *muonTrack2); // put the new parameters in this copy of AliESDMuonTrack
} else if ((ExtrapToVertex > 0 && !Vertex->GetNContributors()) || ExtrapToVertex == 0){
- trackParam.GetParamFromUncorrected(*muonTrack2);
+ AliMUONESDInterface::GetParamAtFirstCluster(*muonTrack2, trackParam);
AliMUONTrackExtrap::ExtrapToVertex(&trackParam, 0., 0., 0., 0., 0.);
- trackParam.SetParamFor(*muonTrack2); // put the new parameters in this copy of AliESDMuonTrack
+ AliMUONESDInterface::SetParamAtVertex(trackParam, *muonTrack2); // put the new parameters in this copy of AliESDMuonTrack
}
track2Trigger = muonTrack2->GetMatchTrigger();
cout << "Chi2Cut for muon tracks = " << Chi2Cut << endl;
cout << "PtCutMin for muon tracks = " << PtCutMin << endl;
cout << "PtCutMax for muon tracks = " << PtCutMax << endl;
- cout << "Entries (unlike sign dimuons) in the mass range ["<<invMassMinInPeak<<";"<<invMassMaxInPeak<<"] : " << EventInMass <<endl;
+
+ cout << "Entries (unlike sign dimuons) : " << hInvMassAll->GetEntries();
+
+ if (hInvMassAll->GetEntries() > 0) {
+ hInvMassAll->Fit("gaus","q0");
+ TF1* f1 = hInvMassAll->GetFunction("gaus");
+ cout << Form(". Rough sigma = %7.2f MeV/c2",f1->GetParameter(2)*1000.0);
+ }
+
+ cout << endl << "Entries (unlike sign dimuons) in the mass range ["<<invMassMinInPeak<<";"<<invMassMaxInPeak<<"] : " << EventInMass <<endl;
+
if (ptTrig==0x800) cout << "Unlike Pair - All Pt" ;
if (ptTrig==0x400) cout << "Unlike Pair - High Pt" ;
if (ptTrig==0x200) cout << "Unlike Pair - Low Pt" ;