X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FMUONefficiency.C;h=e799880cd7cb14e8a88d603ecf95f856085d69fa;hb=d5f99c2b086bdbd19c074a7c9be5d2d90cd0402e;hp=459a7747ea4afde7de44dc9e6a14d68b17dfec48;hpb=e54bf126132252878643a557c6d38c0cd67ceb96;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/MUONefficiency.C b/MUON/MUONefficiency.C index 459a7747ea4..e799880cd7c 100644 --- a/MUON/MUONefficiency.C +++ b/MUON/MUONefficiency.C @@ -33,9 +33,10 @@ #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" @@ -43,32 +44,31 @@ #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 #include #include +#include +#include #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(char* filename = "generated/galice.root", char* esdFileName = "AliESDs.root", + char* geoFilename = "geometry.root", 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; @@ -82,10 +82,6 @@ Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geom // 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; @@ -196,16 +192,40 @@ Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geom 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()->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); @@ -220,25 +240,12 @@ Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geom 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; @@ -319,8 +326,7 @@ Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geom // 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; } @@ -344,22 +350,23 @@ Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geom cout << " number of tracks: " << nTracks <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 @@ -412,17 +419,20 @@ Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geom // 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(); @@ -587,7 +597,17 @@ Bool_t MUONefficiency( char* filename = "galice.root", char* geoFilename = "geom 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 ["<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 ["<