ROOT logo
/**************************************************************************
 * 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$ */

// ROOT includes
#include <TString.h>
#include <TList.h>
#include <TGeoManager.h>
#include <TGeoGlobalMagField.h>
#include <TPRegexp.h>

// STEER includes
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliCDBManager.h"
#include "AliGRPManager.h"
#include "AliGRPObject.h"
#include "AliCDBStorage.h"
#include "AliGeomManager.h"
#include "AliMagF.h"

// ANALYSIS includes
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
#include "AliAnalysisTaskMuonRefit.h"

// MUON includes
#include "AliMUONCDB.h"
#include "AliMUONConstants.h"
#include "AliMUONRecoParam.h"
#include "AliMUONESDInterface.h"
#include "AliMUONRefitter.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackParam.h"
#include "AliMUONTrackExtrap.h"
#include "AliMUONVCluster.h"
#include "AliMUONVDigit.h"
#include "AliMUONVDigitStore.h"
#include "AliMUONVTrackStore.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONTriggerTrack.h"
#include "AliMUONVTriggerStore.h"
#include "AliMUONVTriggerTrackStore.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONTriggerCircuit.h"
#include "AliMUONTrackHitPattern.h"
#include "AliMUONVTrackReconstructor.h"

// MUON mapping includes
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "AliMpManuStore.h"
#include "AliMpPad.h"
#include "AliMpDetElement.h"
#include "AliMpCathodType.h"

#ifndef SafeDelete
#define SafeDelete(x) if (x != NULL) { delete x; x = NULL; }
#endif

ClassImp(AliAnalysisTaskMuonRefit)

//________________________________________________________________________
AliAnalysisTaskMuonRefit::AliAnalysisTaskMuonRefit() :
AliAnalysisTaskSE(),
fDefaultStorage(""),
fImproveTracks(kFALSE),
fSigmaCut(-1.),
fSigmaCutForTrigger(-1.),
fReAlign(kFALSE),
fOldAlignStorage(""),
fNewAlignStorage(""),
fOldGeoTransformer(NULL),
fNewGeoTransformer(NULL),
fField(""),
fRemoveMonoCathCl(kFALSE),
fCheckAllPads(kFALSE),
fTagBadTracks(kFALSE),
fKeepOldParam(kFALSE),
fTriggerCircuit(NULL),
fESDInterface(NULL),
fRefitter(NULL),
fTrackHitPattern(NULL)
{
  /// Default constructor
  for (Int_t i = 0; i < 10; i++) ResetClusterResolution(i, -1., -1.);
}

//________________________________________________________________________
AliAnalysisTaskMuonRefit::AliAnalysisTaskMuonRefit(const char *name) :
AliAnalysisTaskSE(name),
fDefaultStorage("raw://"),
fImproveTracks(kFALSE),
fSigmaCut(-1.),
fSigmaCutForTrigger(-1.),
fReAlign(kFALSE),
fOldAlignStorage(""),
fNewAlignStorage(""),
fOldGeoTransformer(NULL),
fNewGeoTransformer(NULL),
fField(""),
fRemoveMonoCathCl(kFALSE),
fCheckAllPads(kFALSE),
fTagBadTracks(kFALSE),
fKeepOldParam(kFALSE),
fTriggerCircuit(NULL),
fESDInterface(NULL),
fRefitter(NULL),
fTrackHitPattern(NULL)
{
  /// Constructor
  fBranchNames = "ESD:AliESDRun.,AliESDHeader.,MuonTracks,MuonClusters,MuonPads";
  for (Int_t i = 0; i < 10; i++) ResetClusterResolution(i, -1., -1.);
}

//________________________________________________________________________
AliAnalysisTaskMuonRefit::~AliAnalysisTaskMuonRefit()
{
  /// Destructor
  SafeDelete(fOldGeoTransformer);
  SafeDelete(fNewGeoTransformer);
  SafeDelete(fTriggerCircuit);
  SafeDelete(fESDInterface);
  SafeDelete(fRefitter);
  SafeDelete(fTrackHitPattern);
}

//___________________________________________________________________________
void AliAnalysisTaskMuonRefit::UserCreateOutputObjects()
{
}

//________________________________________________________________________
void AliAnalysisTaskMuonRefit::UserExec(Option_t *)
{
  /// Main event loop
  
  // check if refitter properly created (i.e. OCDB data properly loaded)
  if (!fRefitter) AliFatal("Problem occur while loading OCDB objects");
  
  AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!esd) return;
  
  LoadBranches();
  
  Int_t nTracks = (Int_t)esd->GetNumberOfMuonTracks();
  if (nTracks < 1) return;
  
  TList oldGhosts;
  oldGhosts.SetOwner(kFALSE);
  UInt_t firstGhostId = 0xFFFFFFFF - 1;
  
  TList esdTracksToRemove;
  esdTracksToRemove.SetOwner(kFALSE);
  
  // load the current event
  fESDInterface->LoadEvent(*esd, kFALSE);
  
  // remove clusters from ESD (keep digits as they will not change, just eventually not used anymore)
  esd->FindListObject("MuonClusters")->Clear("C");
  
  // modify clusters
  Int_t firstClusterIndex = 0;
  AliMUONVCluster* cluster = 0x0;
  TIter nextCluster(fESDInterface->CreateClusterIterator());
  while ((cluster = static_cast<AliMUONVCluster*>(nextCluster()))) {
    Int_t clIndex = cluster->GetClusterIndex(cluster->GetUniqueID());
    if (clIndex >= firstClusterIndex) firstClusterIndex = clIndex+1;
    ModifyCluster(*cluster);
  }
  
  // to do not mix with old clusters in case we re-clusterize
  fRefitter->SetFirstClusterIndex(firstClusterIndex);
  
  // refit the tracks from clusters
  AliMUONVTrackStore* newTrackStore = fRefitter->ReconstructFromClusters();
  
  // reset the trigger part
  TIter nextNewTrack(newTrackStore->CreateIterator());
  AliMUONTrack *newTrack = 0x0;
  while ((newTrack = static_cast<AliMUONTrack*>(nextNewTrack()))) {
    newTrack->SetMatchTrigger(0);
    newTrack->SetLocalTrigger(0,0,0,0,0,0,0);
    newTrack->SetChi2MatchTrigger(0.);
    newTrack->SetHitsPatternInTrigCh(0);
    newTrack->SetHitsPatternInTrigChTrk(0);
  }
  
  // reconstruct trigger tracks
  AliMUONVTriggerStore *trigStore = fESDInterface->GetTriggers();
  AliMUONVTriggerTrackStore *trigTrackStore = AliMUONESDInterface::NewTriggerTrackStore();
  if (!trigTrackStore) return;
  AliMUONVTrackReconstructor* tracker = AliMUONESDInterface::GetTracker();
  tracker->EventReconstructTrigger(*fTriggerCircuit, *trigStore, *trigTrackStore);
  
  // recover the hit pattern for all trigger tracks
  TClonesArray *esdTracks = (TClonesArray*) esd->FindListObject("MuonTracks");
  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
    AliESDMuonTrack* esdTrack = (AliESDMuonTrack*) esdTracks->UncheckedAt(iTrack);
    if (!esdTrack->ContainTriggerData()) continue;
    // use the UniqueID of the local trigger in case several tracks match the same trigger
    AliMUONLocalTrigger *locTrg = fESDInterface->FindLocalTrigger(esdTrack->LoCircuit());
    AliMUONTriggerTrack *trigTrack = (AliMUONTriggerTrack*) trigTrackStore->FindObject(locTrg->GetUniqueID());
    trigTrack->SetHitsPatternInTrigCh(esdTrack->GetHitsPatternInTrigCh());
  }
  
  // match tracker/trigger tracks
  const Int_t kFirstTrigCh = AliMUONConstants::NTrackingCh();
  const Float_t kZFilterOut = AliMUONConstants::MuonFilterZEnd();
  const Float_t kFilterThickness = kZFilterOut-AliMUONConstants::MuonFilterZBeg();
  nextNewTrack.Reset();
  while ((newTrack = static_cast<AliMUONTrack*>(nextNewTrack()))) {
    AliMUONTrackParam trackParam(*((AliMUONTrackParam*) (newTrack->GetTrackParamAtCluster()->Last())));
    AliMUONTrackExtrap::ExtrapToZCov(&trackParam, kZFilterOut);
    AliMUONTrackExtrap::AddMCSEffect(&trackParam, kFilterThickness, AliMUONConstants::MuonFilterX0());
    AliMUONTrackExtrap::ExtrapToZCov(&trackParam, AliMUONConstants::DefaultChamberZ(kFirstTrigCh));
    AliMUONTriggerTrack *matchedTriggerTrack = fTrackHitPattern->MatchTriggerTrack(newTrack, trackParam, *trigTrackStore, *trigStore);
    if ( matchedTriggerTrack ) newTrack->SetHitsPatternInTrigCh(matchedTriggerTrack->GetHitsPatternInTrigCh());
  }
  
  // loop over the list of ESD tracks
  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
    
    // get the ESD track
    AliESDMuonTrack* esdTrack = (AliESDMuonTrack*) esdTracks->UncheckedAt(iTrack);
    
    // keep the memory of old ghosts to concerve their Id if their are still ghosts after refitting
    // and remember to remove them before adding the new ghosts
    if (!esdTrack->ContainTrackerData()) {
      AliMUONLocalTrigger *locTrg = (esdTrack->ContainTriggerData()) ? fESDInterface->FindLocalTrigger(esdTrack->LoCircuit()) : 0x0;
      if (locTrg && !locTrg->IsNull()) oldGhosts.AddLast(locTrg);
      if (esdTrack->GetUniqueID() <= firstGhostId) firstGhostId = esdTrack->GetUniqueID()-1;
      esdTracksToRemove.AddLast(esdTrack);
      continue;
    }
    
    // Find the corresponding re-fitted MUON track
    newTrack = (AliMUONTrack*) newTrackStore->FindObject(esdTrack->GetUniqueID());
    
    // replace the content of the current ESD track or remove it
    if (newTrack && (!fImproveTracks || newTrack->IsImproved())) {
      
      // eventually tag the tracks which do not match the trigger while they were before
      Bool_t noLongerMatched = (fTagBadTracks && esdTrack->ContainTriggerData() && newTrack->GetMatchTrigger() <= 0);
      
      // find the corresponding trigger info and eventually restore the old one
      AliMUONLocalTrigger *locTrg = 0x0;
      if (newTrack->GetMatchTrigger() > 0) locTrg = fESDInterface->FindLocalTrigger(newTrack->LoCircuit());
      else if (noLongerMatched && !fKeepOldParam) {
	locTrg = fESDInterface->FindLocalTrigger(esdTrack->LoCircuit());
	newTrack->SetMatchTrigger(esdTrack->GetMatchTrigger());
	newTrack->SetChi2MatchTrigger(esdTrack->GetChi2MatchTrigger());
	newTrack->SetHitsPatternInTrigCh(esdTrack->GetHitsPatternInTrigCh());
	newTrack->SetHitsPatternInTrigChTrk(esdTrack->GetHitsPatternInTrigChTrk());
	newTrack->SetLocalTrigger(esdTrack->LoCircuit(), esdTrack->LoStripX(), esdTrack->LoStripY(),
				  esdTrack->LoDev(), esdTrack->LoLpt(), esdTrack->LoHpt(),
				  esdTrack->GetTriggerWithoutChamber());
      }
      if (locTrg && locTrg->IsNull()) locTrg = 0x0;
      
      // fill the new track/cluster info
      if (!(noLongerMatched && fKeepOldParam)) {
	
	// fill the track info
	Double_t vertex[3] = {esdTrack->GetNonBendingCoor(), esdTrack->GetBendingCoor(), esdTrack->GetZ()};
	AliMUONESDInterface::MUONToESD(*newTrack, *esdTrack, vertex, locTrg);
	
	// add the clusters if not already there
	for (Int_t i = 0; i < newTrack->GetNClusters(); i++) {
	  AliMUONVCluster *cl = static_cast<AliMUONTrackParam*>(newTrack->GetTrackParamAtCluster()->UncheckedAt(i))->GetClusterPtr();
	  if (esd->FindMuonCluster(cl->GetUniqueID())) continue;
	  AliESDMuonCluster *esdCl = esd->NewMuonCluster();
	  AliMUONESDInterface::MUONToESD(*cl, *esdCl, kTRUE);
	}
	
      } else {
	
	// restore the old clusters if not already done
	for (Int_t i = 0; i < esdTrack->GetNClusters(); i++) {
	  UInt_t clId = esdTrack->GetClusterId(i);
	  if (esd->FindMuonCluster(clId)) continue;
	  AliMUONVCluster *cl = fESDInterface->FindCluster(esdTrack->GetUniqueID(), clId);
	  if (!cl) continue;
	  AliESDMuonCluster *esdCl = esd->NewMuonCluster();
	  AliMUONESDInterface::MUONToESD(*cl, *esdCl, kTRUE);
	}
	
      }
      
      // eventually tag the trigger part as bad
      esdTrack->ResetBit(BIT(20));
      if (noLongerMatched) esdTrack->SetBit(BIT(21));
      else esdTrack->ResetBit(BIT(21));
      
    } else {
      
      // simply tag it or remember to remove that track (cannot remove it now as it will create a hole which
      // will eventually produce a crash in parallel track loop (AliESDEvent::MoveMuonObjects()))
      if (fTagBadTracks) {
	esdTrack->SetBit(BIT(20));
	if (esdTrack->ContainTriggerData()) esdTrack->SetBit(BIT(21));
	else esdTrack->ResetBit(BIT(21));
      }
      else esdTracksToRemove.AddLast(esdTrack);
      
    }
    
  }
  
  // free memory
  delete newTrackStore;
  
  // remove tracks to remove and compress the array of ESD tracks
  TIter nextTrackToRemove(&esdTracksToRemove);
  AliESDMuonTrack* esdTrack = 0x0;
  while ((esdTrack = static_cast<AliESDMuonTrack*>(nextTrackToRemove()))) esdTracks->Remove(esdTrack);
  esdTracks->Compress();
  
  // add new ghosts (ignoring tracks marked as bad or no longer matched)
  TIter nextGhost(trigStore->CreateIterator());
  AliMUONLocalTrigger *locTrg = 0x0;
  while ((locTrg = static_cast<AliMUONLocalTrigger*>(nextGhost()))) {
    Bool_t alreadyThere = kFALSE;
    for (Int_t iTrack = 0; iTrack < esdTracks->GetEntriesFast(); iTrack++) {
      esdTrack = (AliESDMuonTrack*) esdTracks->UncheckedAt(iTrack);
      alreadyThere = (esdTrack->LoCircuit() == locTrg->LoCircuit() && !esdTrack->TestBit(BIT(21)));
      if (alreadyThere) break;
    }
    if (!alreadyThere) {
      UInt_t ghostId = oldGhosts.Contains(locTrg) ? locTrg->GetUniqueID() : firstGhostId--;
      AliMUONTriggerTrack *trigTrack = (AliMUONTriggerTrack*) trigTrackStore->FindObject(locTrg->GetUniqueID());
      AliMUONESDInterface::MUONToESD(*locTrg, *esd, ghostId, trigTrack);
    }
  }
  
}

//________________________________________________________________________
void AliAnalysisTaskMuonRefit::NotifyRun()
{
  /// load necessary data from OCDB and create the refitter
  
  // do it only once
  if (fRefitter) return;
  
  // set OCDB location
  AliCDBManager* cdbm = AliCDBManager::Instance();
  if (cdbm->IsDefaultStorageSet()) printf("MuonRefit: CDB default storage already set!\n");
  else {
    cdbm->SetDefaultStorage(fDefaultStorage.Data());
    if (fOldAlignStorage != "none" && !fOldAlignStorage.IsNull())
      cdbm->SetSpecificStorage("MUON/Align/Data",fOldAlignStorage.Data());
  }
  if (cdbm->GetRun() > -1) printf("MuonRefit: run number already set!\n");
  else cdbm->SetRun(fCurrentRunNumber);
  
  // load magnetic field or create it for track extrapolation
  if (!TGeoGlobalMagField::Instance()->GetField()) {
    if (!fField.IsNull()) {
      if (!SetMagField()) return;
    } else if (!AliMUONCDB::LoadField()) return;
  }
  
  // load mapping
  if (!AliMpDDLStore::Instance(kFALSE) || !AliMpManuStore::Instance(kFALSE)) {
    if (!AliMUONCDB::LoadMapping()) return;
  }
  
  // load recoParam for refitting
  AliMUONRecoParam* recoParam = AliMUONCDB::LoadRecoParam();
  if (!recoParam) return;
  if (!AliMUONESDInterface::GetTracker()) AliMUONESDInterface::ResetTracker(recoParam);
  
  if (fImproveTracks) {
    if (fSigmaCut > 0.) recoParam->ImproveTracks(kTRUE, fSigmaCut);
    else recoParam->ImproveTracks(kTRUE);
  } else recoParam->ImproveTracks(kFALSE);
  
  if (fSigmaCutForTrigger > 0.) recoParam->SetSigmaCutForTrigger(fSigmaCutForTrigger);
  else fSigmaCutForTrigger = recoParam->GetSigmaCutForTrigger();
  
  for (Int_t i = 0; i < AliMUONConstants::NTrackingCh(); i++) {
    if (fClusterResNB[i] < 0.) fClusterResNB[i] = recoParam->GetDefaultNonBendingReso(i);
    if (fClusterResB[i] < 0.) fClusterResB[i] = recoParam->GetDefaultBendingReso(i);
  }
  
  // load geometry for track extrapolation to vertex and mono-cathod cluster finding
  if (!AliGeomManager::GetGeometry()) {
    
    if (fReAlign) {
      
      // get original geometry transformer
      AliGeomManager::LoadGeometry();
      if (!AliGeomManager::GetGeometry()) return;
      if (fOldAlignStorage != "none" && !AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return;
      fOldGeoTransformer = new AliMUONGeometryTransformer();
      fOldGeoTransformer->LoadGeometryData();
      
      // load the new geometry
      if (cdbm->GetEntryCache()->Contains("GRP/Geometry/Data")) cdbm->UnloadFromCache("GRP/Geometry/Data");
      AliGeomManager::GetGeometry()->UnlockGeometry();
      AliGeomManager::LoadGeometry();
      if (!AliGeomManager::GetGeometry()) return;
      if (cdbm->GetEntryCache()->Contains("MUON/Align/Data")) cdbm->UnloadFromCache("MUON/Align/Data");
      if (!fNewAlignStorage.IsNull()) cdbm->SetSpecificStorage("MUON/Align/Data",fNewAlignStorage.Data());
      else {
	// recover default storage full name (raw:// cannot be used to set specific storage)
	TString defaultStorage(cdbm->GetDefaultStorage()->GetType());
	if (defaultStorage == "alien") defaultStorage += Form("://folder=%s", cdbm->GetDefaultStorage()->GetBaseFolder().Data());
	else defaultStorage += Form("://%s", cdbm->GetDefaultStorage()->GetBaseFolder().Data());
	cdbm->SetSpecificStorage("MUON/Align/Data",defaultStorage.Data());
      }
      if (!AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return;
      
    } else {
      
      AliGeomManager::LoadGeometry();
      if (!AliGeomManager::GetGeometry()) return;
      if (!AliGeomManager::ApplyAlignObjsFromCDB("MUON")) return;
      
    }
    
  } else fReAlign = kFALSE; // disable the realignment if the geometry was already loaded
  
  fNewGeoTransformer = new AliMUONGeometryTransformer();
  fNewGeoTransformer->LoadGeometryData();
  
  fTriggerCircuit = new AliMUONTriggerCircuit(fNewGeoTransformer);
  
  fESDInterface = new AliMUONESDInterface();
  
  fRefitter = new AliMUONRefitter(recoParam);
  fRefitter->Connect(fESDInterface);
  
  AliMUONVDigitStore *digitStore = AliMUONESDInterface::NewDigitStore();
  fTrackHitPattern = new AliMUONTrackHitPattern(recoParam, *fNewGeoTransformer, *digitStore, 0x0);
  delete digitStore; // assume the digitStore is never used when we use AliMUONTrackHitPattern
}

//________________________________________________________________________
void AliAnalysisTaskMuonRefit::Terminate(Option_t *)
{
}

//________________________________________________________________________
void AliAnalysisTaskMuonRefit::ModifyCluster(AliMUONVCluster& cl)
{
  /// Reset the cluster resolution to the one given to the task and change
  /// the cluster position according to the new alignment parameters if required
  
  Double_t gX,gY,gZ,lX,lY,lZ;
  
  // change their resolution
  cl.SetErrXY(fClusterResNB[cl.GetChamberId()], fClusterResB[cl.GetChamberId()]);
  
  // change their position
  if (fReAlign) {
    gX = cl.GetX();
    gY = cl.GetY();
    gZ = cl.GetZ();
    fOldGeoTransformer->Global2Local(cl.GetDetElemId(),gX,gY,gZ,lX,lY,lZ);
    fNewGeoTransformer->Local2Global(cl.GetDetElemId(),lX,lY,lZ,gX,gY,gZ);
    cl.SetXYZ(gX,gY,gZ);
  }
  
  // "remove" mono-cathod clusters on stations 3-4-5 if required
  // (to be done after moving clusters to the new position)
  if (fRemoveMonoCathCl && cl.GetChamberId() > 3) {
    Bool_t hasBending, hasNonBending;
    if (fCheckAllPads) CheckPads(&cl, hasBending, hasNonBending);
    else CheckPadsBelow(&cl, hasBending, hasNonBending);
    if (!hasNonBending) cl.SetErrXY(10., cl.GetErrY());
    if (!hasBending) cl.SetErrXY(cl.GetErrX(), 10.);
  }
  
}

//________________________________________________________________________
void AliAnalysisTaskMuonRefit::CheckPads(AliMUONVCluster *cl, Bool_t &hasBending, Bool_t &hasNonBending) const
{
  /// Check that this cluster contains pads on both cathods
  
  // reset
  hasBending = kFALSE;
  hasNonBending = kFALSE;
  
  // loop over digits contained in the cluster
  for (Int_t iDigit = 0; iDigit < cl->GetNDigits(); iDigit++) {
    
    Int_t manuId = AliMUONVDigit::ManuId(cl->GetDigitId(iDigit));
    
    // check the location of the manu the digit belongs to
    if (manuId > 0) {
      if (manuId & AliMpConstants::ManuMask(AliMp::kNonBendingPlane)) hasNonBending = kTRUE;
      else hasBending = kTRUE;
    }
    
  }
  
}

//________________________________________________________________________
void AliAnalysisTaskMuonRefit::CheckPadsBelow(AliMUONVCluster *cl, Bool_t &hasBending, Bool_t &hasNonBending) const
{
  /// Check that this cluster contains pads on both cathods just under its position
  
  // reset
  hasBending = kFALSE;
  hasNonBending = kFALSE;
  
  // get the cathod corresponding to the bending/non-bending plane
  Int_t deId = cl->GetDetElemId();
  AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(deId, kFALSE);
  if (!de) return;
  AliMp::CathodType cath1 = de->GetCathodType(AliMp::kBendingPlane); 
  AliMp::CathodType cath2 = de->GetCathodType(AliMp::kNonBendingPlane); 
  
  // get the corresponding segmentation
  const AliMpVSegmentation* seg1 = AliMpSegmentation::Instance()->GetMpSegmentation(deId, cath1);
  const AliMpVSegmentation* seg2 = AliMpSegmentation::Instance()->GetMpSegmentation(deId, cath2);
  if (!seg1 || !seg2) return;
  
  // get local coordinate of the cluster
  Double_t lX,lY,lZ;
  Double_t gX = cl->GetX();
  Double_t gY = cl->GetY();
  Double_t gZ = cl->GetZ();
  fNewGeoTransformer->Global2Local(deId,gX,gY,gZ,lX,lY,lZ);
  
  // find pads below the cluster
  AliMpPad pad1 = seg1->PadByPosition(lX, lY, kFALSE);
  AliMpPad pad2 = seg2->PadByPosition(lX, lY, kFALSE);
  
  // build their ID if pads are valid
  UInt_t padId1 = (pad1.IsValid()) ? AliMUONVDigit::BuildUniqueID(deId, pad1.GetManuId(), pad1.GetManuChannel(), cath1) : 0;
  UInt_t padId2 = (pad2.IsValid()) ? AliMUONVDigit::BuildUniqueID(deId, pad2.GetManuId(), pad2.GetManuChannel(), cath2) : 0;
  
  // check if the cluster contains these pads 
  for (Int_t iDigit = 0; iDigit < cl->GetNDigits(); iDigit++) {
    
    UInt_t digitId = cl->GetDigitId(iDigit);
    
    if (digitId == padId1) {
      
      hasBending = kTRUE;
      if (hasNonBending) break;
      
    } else if (digitId == padId2) {
      
      hasNonBending = kTRUE;
      if (hasBending) break;
      
    }
    
  }
  
}

//________________________________________________________________________
Bool_t AliAnalysisTaskMuonRefit::SetMagField() const
{
  // Dealing with the magnetic field map assuming nominal current
  // Construct the mag field map from the data in GRP and the given field map
  // Set the global mag field instance
  
  if (TGeoGlobalMagField::Instance()->IsLocked()) delete TGeoGlobalMagField::Instance();
  
  AliGRPManager grpMan;
  if (!grpMan.ReadGRPEntry()) {
    AliError("failed to load GRP Data from OCDB");
    return kFALSE;
  }
  
  const AliGRPObject *grpData = grpMan.GetGRPData();
  if (!grpData) {
    AliError("GRP Data is not loaded");
    return kFALSE;
  }
  
  Char_t l3Polarity = grpData->GetL3Polarity();
  if (l3Polarity == AliGRPObject::GetInvalidChar()) {
    AliError("GRP/GRP/Data entry:  missing value for the L3 polarity !");
    return kFALSE;
  }
  
  Char_t diPolarity = grpData->GetDipolePolarity();
  if (diPolarity == AliGRPObject::GetInvalidChar()) {
    AliError("GRP/GRP/Data entry:  missing value for the dipole polarity !");
    return kFALSE;
  }
  
  TString beamType = grpData->GetBeamType();
  if (beamType==AliGRPObject::GetInvalidString()) {
    AliError("GRP/GRP/Data entry:  missing value for the beam type !");
    return kFALSE;
  }
  
  Float_t beamEnergy = grpData->GetBeamEnergy();
  if (beamEnergy==AliGRPObject::GetInvalidFloat()) {
    AliError("GRP/GRP/Data entry:  missing value for the beam energy !");
    return kFALSE;
  }
  
  AliMagF::BeamType_t btype = AliMagF::kNoBeamField;
  TString btypestr = beamType;
  btypestr.ToLower();
  TPRegexp protonBeam("(proton|p)\\s*-?\\s*\\1");
  TPRegexp ionBeam("(lead|pb|ion|a|A)\\s*-?\\s*\\1");
  TPRegexp protonionBeam("(proton|p)\\s*-?\\s*(lead|pb|ion|a|A)");
  TPRegexp ionprotonBeam("(lead|pb|ion|a|A)\\s*-?\\s*(proton|p)");
  if (btypestr.Contains(ionBeam)) btype = AliMagF::kBeamTypeAA;
  else if (btypestr.Contains(protonBeam)) btype = AliMagF::kBeamTypepp;
  else if (btypestr.Contains(protonionBeam)) btype = AliMagF::kBeamTypepA;
  else if (btypestr.Contains(ionprotonBeam)) btype = AliMagF::kBeamTypeAp;
  else AliInfoGeneral("AliMagF",Form("Assume no LHC magnet field for the beam type %s !",beamType.Data()));
  
  TGeoGlobalMagField::Instance()->SetField(new AliMagF("fld", "fld", l3Polarity ? -1:1, diPolarity ? -1:1,
						       AliMagF::k5kG, btype, beamEnergy, 2, 15., fField.Data()));
  TGeoGlobalMagField::Instance()->Lock();
  AliInfo("Running with the B field constructed out of GRP and custom field map !");
  
  return kTRUE;
  
}

 AliAnalysisTaskMuonRefit.cxx:1
 AliAnalysisTaskMuonRefit.cxx:2
 AliAnalysisTaskMuonRefit.cxx:3
 AliAnalysisTaskMuonRefit.cxx:4
 AliAnalysisTaskMuonRefit.cxx:5
 AliAnalysisTaskMuonRefit.cxx:6
 AliAnalysisTaskMuonRefit.cxx:7
 AliAnalysisTaskMuonRefit.cxx:8
 AliAnalysisTaskMuonRefit.cxx:9
 AliAnalysisTaskMuonRefit.cxx:10
 AliAnalysisTaskMuonRefit.cxx:11
 AliAnalysisTaskMuonRefit.cxx:12
 AliAnalysisTaskMuonRefit.cxx:13
 AliAnalysisTaskMuonRefit.cxx:14
 AliAnalysisTaskMuonRefit.cxx:15
 AliAnalysisTaskMuonRefit.cxx:16
 AliAnalysisTaskMuonRefit.cxx:17
 AliAnalysisTaskMuonRefit.cxx:18
 AliAnalysisTaskMuonRefit.cxx:19
 AliAnalysisTaskMuonRefit.cxx:20
 AliAnalysisTaskMuonRefit.cxx:21
 AliAnalysisTaskMuonRefit.cxx:22
 AliAnalysisTaskMuonRefit.cxx:23
 AliAnalysisTaskMuonRefit.cxx:24
 AliAnalysisTaskMuonRefit.cxx:25
 AliAnalysisTaskMuonRefit.cxx:26
 AliAnalysisTaskMuonRefit.cxx:27
 AliAnalysisTaskMuonRefit.cxx:28
 AliAnalysisTaskMuonRefit.cxx:29
 AliAnalysisTaskMuonRefit.cxx:30
 AliAnalysisTaskMuonRefit.cxx:31
 AliAnalysisTaskMuonRefit.cxx:32
 AliAnalysisTaskMuonRefit.cxx:33
 AliAnalysisTaskMuonRefit.cxx:34
 AliAnalysisTaskMuonRefit.cxx:35
 AliAnalysisTaskMuonRefit.cxx:36
 AliAnalysisTaskMuonRefit.cxx:37
 AliAnalysisTaskMuonRefit.cxx:38
 AliAnalysisTaskMuonRefit.cxx:39
 AliAnalysisTaskMuonRefit.cxx:40
 AliAnalysisTaskMuonRefit.cxx:41
 AliAnalysisTaskMuonRefit.cxx:42
 AliAnalysisTaskMuonRefit.cxx:43
 AliAnalysisTaskMuonRefit.cxx:44
 AliAnalysisTaskMuonRefit.cxx:45
 AliAnalysisTaskMuonRefit.cxx:46
 AliAnalysisTaskMuonRefit.cxx:47
 AliAnalysisTaskMuonRefit.cxx:48
 AliAnalysisTaskMuonRefit.cxx:49
 AliAnalysisTaskMuonRefit.cxx:50
 AliAnalysisTaskMuonRefit.cxx:51
 AliAnalysisTaskMuonRefit.cxx:52
 AliAnalysisTaskMuonRefit.cxx:53
 AliAnalysisTaskMuonRefit.cxx:54
 AliAnalysisTaskMuonRefit.cxx:55
 AliAnalysisTaskMuonRefit.cxx:56
 AliAnalysisTaskMuonRefit.cxx:57
 AliAnalysisTaskMuonRefit.cxx:58
 AliAnalysisTaskMuonRefit.cxx:59
 AliAnalysisTaskMuonRefit.cxx:60
 AliAnalysisTaskMuonRefit.cxx:61
 AliAnalysisTaskMuonRefit.cxx:62
 AliAnalysisTaskMuonRefit.cxx:63
 AliAnalysisTaskMuonRefit.cxx:64
 AliAnalysisTaskMuonRefit.cxx:65
 AliAnalysisTaskMuonRefit.cxx:66
 AliAnalysisTaskMuonRefit.cxx:67
 AliAnalysisTaskMuonRefit.cxx:68
 AliAnalysisTaskMuonRefit.cxx:69
 AliAnalysisTaskMuonRefit.cxx:70
 AliAnalysisTaskMuonRefit.cxx:71
 AliAnalysisTaskMuonRefit.cxx:72
 AliAnalysisTaskMuonRefit.cxx:73
 AliAnalysisTaskMuonRefit.cxx:74
 AliAnalysisTaskMuonRefit.cxx:75
 AliAnalysisTaskMuonRefit.cxx:76
 AliAnalysisTaskMuonRefit.cxx:77
 AliAnalysisTaskMuonRefit.cxx:78
 AliAnalysisTaskMuonRefit.cxx:79
 AliAnalysisTaskMuonRefit.cxx:80
 AliAnalysisTaskMuonRefit.cxx:81
 AliAnalysisTaskMuonRefit.cxx:82
 AliAnalysisTaskMuonRefit.cxx:83
 AliAnalysisTaskMuonRefit.cxx:84
 AliAnalysisTaskMuonRefit.cxx:85
 AliAnalysisTaskMuonRefit.cxx:86
 AliAnalysisTaskMuonRefit.cxx:87
 AliAnalysisTaskMuonRefit.cxx:88
 AliAnalysisTaskMuonRefit.cxx:89
 AliAnalysisTaskMuonRefit.cxx:90
 AliAnalysisTaskMuonRefit.cxx:91
 AliAnalysisTaskMuonRefit.cxx:92
 AliAnalysisTaskMuonRefit.cxx:93
 AliAnalysisTaskMuonRefit.cxx:94
 AliAnalysisTaskMuonRefit.cxx:95
 AliAnalysisTaskMuonRefit.cxx:96
 AliAnalysisTaskMuonRefit.cxx:97
 AliAnalysisTaskMuonRefit.cxx:98
 AliAnalysisTaskMuonRefit.cxx:99
 AliAnalysisTaskMuonRefit.cxx:100
 AliAnalysisTaskMuonRefit.cxx:101
 AliAnalysisTaskMuonRefit.cxx:102
 AliAnalysisTaskMuonRefit.cxx:103
 AliAnalysisTaskMuonRefit.cxx:104
 AliAnalysisTaskMuonRefit.cxx:105
 AliAnalysisTaskMuonRefit.cxx:106
 AliAnalysisTaskMuonRefit.cxx:107
 AliAnalysisTaskMuonRefit.cxx:108
 AliAnalysisTaskMuonRefit.cxx:109
 AliAnalysisTaskMuonRefit.cxx:110
 AliAnalysisTaskMuonRefit.cxx:111
 AliAnalysisTaskMuonRefit.cxx:112
 AliAnalysisTaskMuonRefit.cxx:113
 AliAnalysisTaskMuonRefit.cxx:114
 AliAnalysisTaskMuonRefit.cxx:115
 AliAnalysisTaskMuonRefit.cxx:116
 AliAnalysisTaskMuonRefit.cxx:117
 AliAnalysisTaskMuonRefit.cxx:118
 AliAnalysisTaskMuonRefit.cxx:119
 AliAnalysisTaskMuonRefit.cxx:120
 AliAnalysisTaskMuonRefit.cxx:121
 AliAnalysisTaskMuonRefit.cxx:122
 AliAnalysisTaskMuonRefit.cxx:123
 AliAnalysisTaskMuonRefit.cxx:124
 AliAnalysisTaskMuonRefit.cxx:125
 AliAnalysisTaskMuonRefit.cxx:126
 AliAnalysisTaskMuonRefit.cxx:127
 AliAnalysisTaskMuonRefit.cxx:128
 AliAnalysisTaskMuonRefit.cxx:129
 AliAnalysisTaskMuonRefit.cxx:130
 AliAnalysisTaskMuonRefit.cxx:131
 AliAnalysisTaskMuonRefit.cxx:132
 AliAnalysisTaskMuonRefit.cxx:133
 AliAnalysisTaskMuonRefit.cxx:134
 AliAnalysisTaskMuonRefit.cxx:135
 AliAnalysisTaskMuonRefit.cxx:136
 AliAnalysisTaskMuonRefit.cxx:137
 AliAnalysisTaskMuonRefit.cxx:138
 AliAnalysisTaskMuonRefit.cxx:139
 AliAnalysisTaskMuonRefit.cxx:140
 AliAnalysisTaskMuonRefit.cxx:141
 AliAnalysisTaskMuonRefit.cxx:142
 AliAnalysisTaskMuonRefit.cxx:143
 AliAnalysisTaskMuonRefit.cxx:144
 AliAnalysisTaskMuonRefit.cxx:145
 AliAnalysisTaskMuonRefit.cxx:146
 AliAnalysisTaskMuonRefit.cxx:147
 AliAnalysisTaskMuonRefit.cxx:148
 AliAnalysisTaskMuonRefit.cxx:149
 AliAnalysisTaskMuonRefit.cxx:150
 AliAnalysisTaskMuonRefit.cxx:151
 AliAnalysisTaskMuonRefit.cxx:152
 AliAnalysisTaskMuonRefit.cxx:153
 AliAnalysisTaskMuonRefit.cxx:154
 AliAnalysisTaskMuonRefit.cxx:155
 AliAnalysisTaskMuonRefit.cxx:156
 AliAnalysisTaskMuonRefit.cxx:157
 AliAnalysisTaskMuonRefit.cxx:158
 AliAnalysisTaskMuonRefit.cxx:159
 AliAnalysisTaskMuonRefit.cxx:160
 AliAnalysisTaskMuonRefit.cxx:161
 AliAnalysisTaskMuonRefit.cxx:162
 AliAnalysisTaskMuonRefit.cxx:163
 AliAnalysisTaskMuonRefit.cxx:164
 AliAnalysisTaskMuonRefit.cxx:165
 AliAnalysisTaskMuonRefit.cxx:166
 AliAnalysisTaskMuonRefit.cxx:167
 AliAnalysisTaskMuonRefit.cxx:168
 AliAnalysisTaskMuonRefit.cxx:169
 AliAnalysisTaskMuonRefit.cxx:170
 AliAnalysisTaskMuonRefit.cxx:171
 AliAnalysisTaskMuonRefit.cxx:172
 AliAnalysisTaskMuonRefit.cxx:173
 AliAnalysisTaskMuonRefit.cxx:174
 AliAnalysisTaskMuonRefit.cxx:175
 AliAnalysisTaskMuonRefit.cxx:176
 AliAnalysisTaskMuonRefit.cxx:177
 AliAnalysisTaskMuonRefit.cxx:178
 AliAnalysisTaskMuonRefit.cxx:179
 AliAnalysisTaskMuonRefit.cxx:180
 AliAnalysisTaskMuonRefit.cxx:181
 AliAnalysisTaskMuonRefit.cxx:182
 AliAnalysisTaskMuonRefit.cxx:183
 AliAnalysisTaskMuonRefit.cxx:184
 AliAnalysisTaskMuonRefit.cxx:185
 AliAnalysisTaskMuonRefit.cxx:186
 AliAnalysisTaskMuonRefit.cxx:187
 AliAnalysisTaskMuonRefit.cxx:188
 AliAnalysisTaskMuonRefit.cxx:189
 AliAnalysisTaskMuonRefit.cxx:190
 AliAnalysisTaskMuonRefit.cxx:191
 AliAnalysisTaskMuonRefit.cxx:192
 AliAnalysisTaskMuonRefit.cxx:193
 AliAnalysisTaskMuonRefit.cxx:194
 AliAnalysisTaskMuonRefit.cxx:195
 AliAnalysisTaskMuonRefit.cxx:196
 AliAnalysisTaskMuonRefit.cxx:197
 AliAnalysisTaskMuonRefit.cxx:198
 AliAnalysisTaskMuonRefit.cxx:199
 AliAnalysisTaskMuonRefit.cxx:200
 AliAnalysisTaskMuonRefit.cxx:201
 AliAnalysisTaskMuonRefit.cxx:202
 AliAnalysisTaskMuonRefit.cxx:203
 AliAnalysisTaskMuonRefit.cxx:204
 AliAnalysisTaskMuonRefit.cxx:205
 AliAnalysisTaskMuonRefit.cxx:206
 AliAnalysisTaskMuonRefit.cxx:207
 AliAnalysisTaskMuonRefit.cxx:208
 AliAnalysisTaskMuonRefit.cxx:209
 AliAnalysisTaskMuonRefit.cxx:210
 AliAnalysisTaskMuonRefit.cxx:211
 AliAnalysisTaskMuonRefit.cxx:212
 AliAnalysisTaskMuonRefit.cxx:213
 AliAnalysisTaskMuonRefit.cxx:214
 AliAnalysisTaskMuonRefit.cxx:215
 AliAnalysisTaskMuonRefit.cxx:216
 AliAnalysisTaskMuonRefit.cxx:217
 AliAnalysisTaskMuonRefit.cxx:218
 AliAnalysisTaskMuonRefit.cxx:219
 AliAnalysisTaskMuonRefit.cxx:220
 AliAnalysisTaskMuonRefit.cxx:221
 AliAnalysisTaskMuonRefit.cxx:222
 AliAnalysisTaskMuonRefit.cxx:223
 AliAnalysisTaskMuonRefit.cxx:224
 AliAnalysisTaskMuonRefit.cxx:225
 AliAnalysisTaskMuonRefit.cxx:226
 AliAnalysisTaskMuonRefit.cxx:227
 AliAnalysisTaskMuonRefit.cxx:228
 AliAnalysisTaskMuonRefit.cxx:229
 AliAnalysisTaskMuonRefit.cxx:230
 AliAnalysisTaskMuonRefit.cxx:231
 AliAnalysisTaskMuonRefit.cxx:232
 AliAnalysisTaskMuonRefit.cxx:233
 AliAnalysisTaskMuonRefit.cxx:234
 AliAnalysisTaskMuonRefit.cxx:235
 AliAnalysisTaskMuonRefit.cxx:236
 AliAnalysisTaskMuonRefit.cxx:237
 AliAnalysisTaskMuonRefit.cxx:238
 AliAnalysisTaskMuonRefit.cxx:239
 AliAnalysisTaskMuonRefit.cxx:240
 AliAnalysisTaskMuonRefit.cxx:241
 AliAnalysisTaskMuonRefit.cxx:242
 AliAnalysisTaskMuonRefit.cxx:243
 AliAnalysisTaskMuonRefit.cxx:244
 AliAnalysisTaskMuonRefit.cxx:245
 AliAnalysisTaskMuonRefit.cxx:246
 AliAnalysisTaskMuonRefit.cxx:247
 AliAnalysisTaskMuonRefit.cxx:248
 AliAnalysisTaskMuonRefit.cxx:249
 AliAnalysisTaskMuonRefit.cxx:250
 AliAnalysisTaskMuonRefit.cxx:251
 AliAnalysisTaskMuonRefit.cxx:252
 AliAnalysisTaskMuonRefit.cxx:253
 AliAnalysisTaskMuonRefit.cxx:254
 AliAnalysisTaskMuonRefit.cxx:255
 AliAnalysisTaskMuonRefit.cxx:256
 AliAnalysisTaskMuonRefit.cxx:257
 AliAnalysisTaskMuonRefit.cxx:258
 AliAnalysisTaskMuonRefit.cxx:259
 AliAnalysisTaskMuonRefit.cxx:260
 AliAnalysisTaskMuonRefit.cxx:261
 AliAnalysisTaskMuonRefit.cxx:262
 AliAnalysisTaskMuonRefit.cxx:263
 AliAnalysisTaskMuonRefit.cxx:264
 AliAnalysisTaskMuonRefit.cxx:265
 AliAnalysisTaskMuonRefit.cxx:266
 AliAnalysisTaskMuonRefit.cxx:267
 AliAnalysisTaskMuonRefit.cxx:268
 AliAnalysisTaskMuonRefit.cxx:269
 AliAnalysisTaskMuonRefit.cxx:270
 AliAnalysisTaskMuonRefit.cxx:271
 AliAnalysisTaskMuonRefit.cxx:272
 AliAnalysisTaskMuonRefit.cxx:273
 AliAnalysisTaskMuonRefit.cxx:274
 AliAnalysisTaskMuonRefit.cxx:275
 AliAnalysisTaskMuonRefit.cxx:276
 AliAnalysisTaskMuonRefit.cxx:277
 AliAnalysisTaskMuonRefit.cxx:278
 AliAnalysisTaskMuonRefit.cxx:279
 AliAnalysisTaskMuonRefit.cxx:280
 AliAnalysisTaskMuonRefit.cxx:281
 AliAnalysisTaskMuonRefit.cxx:282
 AliAnalysisTaskMuonRefit.cxx:283
 AliAnalysisTaskMuonRefit.cxx:284
 AliAnalysisTaskMuonRefit.cxx:285
 AliAnalysisTaskMuonRefit.cxx:286
 AliAnalysisTaskMuonRefit.cxx:287
 AliAnalysisTaskMuonRefit.cxx:288
 AliAnalysisTaskMuonRefit.cxx:289
 AliAnalysisTaskMuonRefit.cxx:290
 AliAnalysisTaskMuonRefit.cxx:291
 AliAnalysisTaskMuonRefit.cxx:292
 AliAnalysisTaskMuonRefit.cxx:293
 AliAnalysisTaskMuonRefit.cxx:294
 AliAnalysisTaskMuonRefit.cxx:295
 AliAnalysisTaskMuonRefit.cxx:296
 AliAnalysisTaskMuonRefit.cxx:297
 AliAnalysisTaskMuonRefit.cxx:298
 AliAnalysisTaskMuonRefit.cxx:299
 AliAnalysisTaskMuonRefit.cxx:300
 AliAnalysisTaskMuonRefit.cxx:301
 AliAnalysisTaskMuonRefit.cxx:302
 AliAnalysisTaskMuonRefit.cxx:303
 AliAnalysisTaskMuonRefit.cxx:304
 AliAnalysisTaskMuonRefit.cxx:305
 AliAnalysisTaskMuonRefit.cxx:306
 AliAnalysisTaskMuonRefit.cxx:307
 AliAnalysisTaskMuonRefit.cxx:308
 AliAnalysisTaskMuonRefit.cxx:309
 AliAnalysisTaskMuonRefit.cxx:310
 AliAnalysisTaskMuonRefit.cxx:311
 AliAnalysisTaskMuonRefit.cxx:312
 AliAnalysisTaskMuonRefit.cxx:313
 AliAnalysisTaskMuonRefit.cxx:314
 AliAnalysisTaskMuonRefit.cxx:315
 AliAnalysisTaskMuonRefit.cxx:316
 AliAnalysisTaskMuonRefit.cxx:317
 AliAnalysisTaskMuonRefit.cxx:318
 AliAnalysisTaskMuonRefit.cxx:319
 AliAnalysisTaskMuonRefit.cxx:320
 AliAnalysisTaskMuonRefit.cxx:321
 AliAnalysisTaskMuonRefit.cxx:322
 AliAnalysisTaskMuonRefit.cxx:323
 AliAnalysisTaskMuonRefit.cxx:324
 AliAnalysisTaskMuonRefit.cxx:325
 AliAnalysisTaskMuonRefit.cxx:326
 AliAnalysisTaskMuonRefit.cxx:327
 AliAnalysisTaskMuonRefit.cxx:328
 AliAnalysisTaskMuonRefit.cxx:329
 AliAnalysisTaskMuonRefit.cxx:330
 AliAnalysisTaskMuonRefit.cxx:331
 AliAnalysisTaskMuonRefit.cxx:332
 AliAnalysisTaskMuonRefit.cxx:333
 AliAnalysisTaskMuonRefit.cxx:334
 AliAnalysisTaskMuonRefit.cxx:335
 AliAnalysisTaskMuonRefit.cxx:336
 AliAnalysisTaskMuonRefit.cxx:337
 AliAnalysisTaskMuonRefit.cxx:338
 AliAnalysisTaskMuonRefit.cxx:339
 AliAnalysisTaskMuonRefit.cxx:340
 AliAnalysisTaskMuonRefit.cxx:341
 AliAnalysisTaskMuonRefit.cxx:342
 AliAnalysisTaskMuonRefit.cxx:343
 AliAnalysisTaskMuonRefit.cxx:344
 AliAnalysisTaskMuonRefit.cxx:345
 AliAnalysisTaskMuonRefit.cxx:346
 AliAnalysisTaskMuonRefit.cxx:347
 AliAnalysisTaskMuonRefit.cxx:348
 AliAnalysisTaskMuonRefit.cxx:349
 AliAnalysisTaskMuonRefit.cxx:350
 AliAnalysisTaskMuonRefit.cxx:351
 AliAnalysisTaskMuonRefit.cxx:352
 AliAnalysisTaskMuonRefit.cxx:353
 AliAnalysisTaskMuonRefit.cxx:354
 AliAnalysisTaskMuonRefit.cxx:355
 AliAnalysisTaskMuonRefit.cxx:356
 AliAnalysisTaskMuonRefit.cxx:357
 AliAnalysisTaskMuonRefit.cxx:358
 AliAnalysisTaskMuonRefit.cxx:359
 AliAnalysisTaskMuonRefit.cxx:360
 AliAnalysisTaskMuonRefit.cxx:361
 AliAnalysisTaskMuonRefit.cxx:362
 AliAnalysisTaskMuonRefit.cxx:363
 AliAnalysisTaskMuonRefit.cxx:364
 AliAnalysisTaskMuonRefit.cxx:365
 AliAnalysisTaskMuonRefit.cxx:366
 AliAnalysisTaskMuonRefit.cxx:367
 AliAnalysisTaskMuonRefit.cxx:368
 AliAnalysisTaskMuonRefit.cxx:369
 AliAnalysisTaskMuonRefit.cxx:370
 AliAnalysisTaskMuonRefit.cxx:371
 AliAnalysisTaskMuonRefit.cxx:372
 AliAnalysisTaskMuonRefit.cxx:373
 AliAnalysisTaskMuonRefit.cxx:374
 AliAnalysisTaskMuonRefit.cxx:375
 AliAnalysisTaskMuonRefit.cxx:376
 AliAnalysisTaskMuonRefit.cxx:377
 AliAnalysisTaskMuonRefit.cxx:378
 AliAnalysisTaskMuonRefit.cxx:379
 AliAnalysisTaskMuonRefit.cxx:380
 AliAnalysisTaskMuonRefit.cxx:381
 AliAnalysisTaskMuonRefit.cxx:382
 AliAnalysisTaskMuonRefit.cxx:383
 AliAnalysisTaskMuonRefit.cxx:384
 AliAnalysisTaskMuonRefit.cxx:385
 AliAnalysisTaskMuonRefit.cxx:386
 AliAnalysisTaskMuonRefit.cxx:387
 AliAnalysisTaskMuonRefit.cxx:388
 AliAnalysisTaskMuonRefit.cxx:389
 AliAnalysisTaskMuonRefit.cxx:390
 AliAnalysisTaskMuonRefit.cxx:391
 AliAnalysisTaskMuonRefit.cxx:392
 AliAnalysisTaskMuonRefit.cxx:393
 AliAnalysisTaskMuonRefit.cxx:394
 AliAnalysisTaskMuonRefit.cxx:395
 AliAnalysisTaskMuonRefit.cxx:396
 AliAnalysisTaskMuonRefit.cxx:397
 AliAnalysisTaskMuonRefit.cxx:398
 AliAnalysisTaskMuonRefit.cxx:399
 AliAnalysisTaskMuonRefit.cxx:400
 AliAnalysisTaskMuonRefit.cxx:401
 AliAnalysisTaskMuonRefit.cxx:402
 AliAnalysisTaskMuonRefit.cxx:403
 AliAnalysisTaskMuonRefit.cxx:404
 AliAnalysisTaskMuonRefit.cxx:405
 AliAnalysisTaskMuonRefit.cxx:406
 AliAnalysisTaskMuonRefit.cxx:407
 AliAnalysisTaskMuonRefit.cxx:408
 AliAnalysisTaskMuonRefit.cxx:409
 AliAnalysisTaskMuonRefit.cxx:410
 AliAnalysisTaskMuonRefit.cxx:411
 AliAnalysisTaskMuonRefit.cxx:412
 AliAnalysisTaskMuonRefit.cxx:413
 AliAnalysisTaskMuonRefit.cxx:414
 AliAnalysisTaskMuonRefit.cxx:415
 AliAnalysisTaskMuonRefit.cxx:416
 AliAnalysisTaskMuonRefit.cxx:417
 AliAnalysisTaskMuonRefit.cxx:418
 AliAnalysisTaskMuonRefit.cxx:419
 AliAnalysisTaskMuonRefit.cxx:420
 AliAnalysisTaskMuonRefit.cxx:421
 AliAnalysisTaskMuonRefit.cxx:422
 AliAnalysisTaskMuonRefit.cxx:423
 AliAnalysisTaskMuonRefit.cxx:424
 AliAnalysisTaskMuonRefit.cxx:425
 AliAnalysisTaskMuonRefit.cxx:426
 AliAnalysisTaskMuonRefit.cxx:427
 AliAnalysisTaskMuonRefit.cxx:428
 AliAnalysisTaskMuonRefit.cxx:429
 AliAnalysisTaskMuonRefit.cxx:430
 AliAnalysisTaskMuonRefit.cxx:431
 AliAnalysisTaskMuonRefit.cxx:432
 AliAnalysisTaskMuonRefit.cxx:433
 AliAnalysisTaskMuonRefit.cxx:434
 AliAnalysisTaskMuonRefit.cxx:435
 AliAnalysisTaskMuonRefit.cxx:436
 AliAnalysisTaskMuonRefit.cxx:437
 AliAnalysisTaskMuonRefit.cxx:438
 AliAnalysisTaskMuonRefit.cxx:439
 AliAnalysisTaskMuonRefit.cxx:440
 AliAnalysisTaskMuonRefit.cxx:441
 AliAnalysisTaskMuonRefit.cxx:442
 AliAnalysisTaskMuonRefit.cxx:443
 AliAnalysisTaskMuonRefit.cxx:444
 AliAnalysisTaskMuonRefit.cxx:445
 AliAnalysisTaskMuonRefit.cxx:446
 AliAnalysisTaskMuonRefit.cxx:447
 AliAnalysisTaskMuonRefit.cxx:448
 AliAnalysisTaskMuonRefit.cxx:449
 AliAnalysisTaskMuonRefit.cxx:450
 AliAnalysisTaskMuonRefit.cxx:451
 AliAnalysisTaskMuonRefit.cxx:452
 AliAnalysisTaskMuonRefit.cxx:453
 AliAnalysisTaskMuonRefit.cxx:454
 AliAnalysisTaskMuonRefit.cxx:455
 AliAnalysisTaskMuonRefit.cxx:456
 AliAnalysisTaskMuonRefit.cxx:457
 AliAnalysisTaskMuonRefit.cxx:458
 AliAnalysisTaskMuonRefit.cxx:459
 AliAnalysisTaskMuonRefit.cxx:460
 AliAnalysisTaskMuonRefit.cxx:461
 AliAnalysisTaskMuonRefit.cxx:462
 AliAnalysisTaskMuonRefit.cxx:463
 AliAnalysisTaskMuonRefit.cxx:464
 AliAnalysisTaskMuonRefit.cxx:465
 AliAnalysisTaskMuonRefit.cxx:466
 AliAnalysisTaskMuonRefit.cxx:467
 AliAnalysisTaskMuonRefit.cxx:468
 AliAnalysisTaskMuonRefit.cxx:469
 AliAnalysisTaskMuonRefit.cxx:470
 AliAnalysisTaskMuonRefit.cxx:471
 AliAnalysisTaskMuonRefit.cxx:472
 AliAnalysisTaskMuonRefit.cxx:473
 AliAnalysisTaskMuonRefit.cxx:474
 AliAnalysisTaskMuonRefit.cxx:475
 AliAnalysisTaskMuonRefit.cxx:476
 AliAnalysisTaskMuonRefit.cxx:477
 AliAnalysisTaskMuonRefit.cxx:478
 AliAnalysisTaskMuonRefit.cxx:479
 AliAnalysisTaskMuonRefit.cxx:480
 AliAnalysisTaskMuonRefit.cxx:481
 AliAnalysisTaskMuonRefit.cxx:482
 AliAnalysisTaskMuonRefit.cxx:483
 AliAnalysisTaskMuonRefit.cxx:484
 AliAnalysisTaskMuonRefit.cxx:485
 AliAnalysisTaskMuonRefit.cxx:486
 AliAnalysisTaskMuonRefit.cxx:487
 AliAnalysisTaskMuonRefit.cxx:488
 AliAnalysisTaskMuonRefit.cxx:489
 AliAnalysisTaskMuonRefit.cxx:490
 AliAnalysisTaskMuonRefit.cxx:491
 AliAnalysisTaskMuonRefit.cxx:492
 AliAnalysisTaskMuonRefit.cxx:493
 AliAnalysisTaskMuonRefit.cxx:494
 AliAnalysisTaskMuonRefit.cxx:495
 AliAnalysisTaskMuonRefit.cxx:496
 AliAnalysisTaskMuonRefit.cxx:497
 AliAnalysisTaskMuonRefit.cxx:498
 AliAnalysisTaskMuonRefit.cxx:499
 AliAnalysisTaskMuonRefit.cxx:500
 AliAnalysisTaskMuonRefit.cxx:501
 AliAnalysisTaskMuonRefit.cxx:502
 AliAnalysisTaskMuonRefit.cxx:503
 AliAnalysisTaskMuonRefit.cxx:504
 AliAnalysisTaskMuonRefit.cxx:505
 AliAnalysisTaskMuonRefit.cxx:506
 AliAnalysisTaskMuonRefit.cxx:507
 AliAnalysisTaskMuonRefit.cxx:508
 AliAnalysisTaskMuonRefit.cxx:509
 AliAnalysisTaskMuonRefit.cxx:510
 AliAnalysisTaskMuonRefit.cxx:511
 AliAnalysisTaskMuonRefit.cxx:512
 AliAnalysisTaskMuonRefit.cxx:513
 AliAnalysisTaskMuonRefit.cxx:514
 AliAnalysisTaskMuonRefit.cxx:515
 AliAnalysisTaskMuonRefit.cxx:516
 AliAnalysisTaskMuonRefit.cxx:517
 AliAnalysisTaskMuonRefit.cxx:518
 AliAnalysisTaskMuonRefit.cxx:519
 AliAnalysisTaskMuonRefit.cxx:520
 AliAnalysisTaskMuonRefit.cxx:521
 AliAnalysisTaskMuonRefit.cxx:522
 AliAnalysisTaskMuonRefit.cxx:523
 AliAnalysisTaskMuonRefit.cxx:524
 AliAnalysisTaskMuonRefit.cxx:525
 AliAnalysisTaskMuonRefit.cxx:526
 AliAnalysisTaskMuonRefit.cxx:527
 AliAnalysisTaskMuonRefit.cxx:528
 AliAnalysisTaskMuonRefit.cxx:529
 AliAnalysisTaskMuonRefit.cxx:530
 AliAnalysisTaskMuonRefit.cxx:531
 AliAnalysisTaskMuonRefit.cxx:532
 AliAnalysisTaskMuonRefit.cxx:533
 AliAnalysisTaskMuonRefit.cxx:534
 AliAnalysisTaskMuonRefit.cxx:535
 AliAnalysisTaskMuonRefit.cxx:536
 AliAnalysisTaskMuonRefit.cxx:537
 AliAnalysisTaskMuonRefit.cxx:538
 AliAnalysisTaskMuonRefit.cxx:539
 AliAnalysisTaskMuonRefit.cxx:540
 AliAnalysisTaskMuonRefit.cxx:541
 AliAnalysisTaskMuonRefit.cxx:542
 AliAnalysisTaskMuonRefit.cxx:543
 AliAnalysisTaskMuonRefit.cxx:544
 AliAnalysisTaskMuonRefit.cxx:545
 AliAnalysisTaskMuonRefit.cxx:546
 AliAnalysisTaskMuonRefit.cxx:547
 AliAnalysisTaskMuonRefit.cxx:548
 AliAnalysisTaskMuonRefit.cxx:549
 AliAnalysisTaskMuonRefit.cxx:550
 AliAnalysisTaskMuonRefit.cxx:551
 AliAnalysisTaskMuonRefit.cxx:552
 AliAnalysisTaskMuonRefit.cxx:553
 AliAnalysisTaskMuonRefit.cxx:554
 AliAnalysisTaskMuonRefit.cxx:555
 AliAnalysisTaskMuonRefit.cxx:556
 AliAnalysisTaskMuonRefit.cxx:557
 AliAnalysisTaskMuonRefit.cxx:558
 AliAnalysisTaskMuonRefit.cxx:559
 AliAnalysisTaskMuonRefit.cxx:560
 AliAnalysisTaskMuonRefit.cxx:561
 AliAnalysisTaskMuonRefit.cxx:562
 AliAnalysisTaskMuonRefit.cxx:563
 AliAnalysisTaskMuonRefit.cxx:564
 AliAnalysisTaskMuonRefit.cxx:565
 AliAnalysisTaskMuonRefit.cxx:566
 AliAnalysisTaskMuonRefit.cxx:567
 AliAnalysisTaskMuonRefit.cxx:568
 AliAnalysisTaskMuonRefit.cxx:569
 AliAnalysisTaskMuonRefit.cxx:570
 AliAnalysisTaskMuonRefit.cxx:571
 AliAnalysisTaskMuonRefit.cxx:572
 AliAnalysisTaskMuonRefit.cxx:573
 AliAnalysisTaskMuonRefit.cxx:574
 AliAnalysisTaskMuonRefit.cxx:575
 AliAnalysisTaskMuonRefit.cxx:576
 AliAnalysisTaskMuonRefit.cxx:577
 AliAnalysisTaskMuonRefit.cxx:578
 AliAnalysisTaskMuonRefit.cxx:579
 AliAnalysisTaskMuonRefit.cxx:580
 AliAnalysisTaskMuonRefit.cxx:581
 AliAnalysisTaskMuonRefit.cxx:582
 AliAnalysisTaskMuonRefit.cxx:583
 AliAnalysisTaskMuonRefit.cxx:584
 AliAnalysisTaskMuonRefit.cxx:585
 AliAnalysisTaskMuonRefit.cxx:586
 AliAnalysisTaskMuonRefit.cxx:587
 AliAnalysisTaskMuonRefit.cxx:588
 AliAnalysisTaskMuonRefit.cxx:589
 AliAnalysisTaskMuonRefit.cxx:590
 AliAnalysisTaskMuonRefit.cxx:591
 AliAnalysisTaskMuonRefit.cxx:592
 AliAnalysisTaskMuonRefit.cxx:593
 AliAnalysisTaskMuonRefit.cxx:594
 AliAnalysisTaskMuonRefit.cxx:595
 AliAnalysisTaskMuonRefit.cxx:596
 AliAnalysisTaskMuonRefit.cxx:597
 AliAnalysisTaskMuonRefit.cxx:598
 AliAnalysisTaskMuonRefit.cxx:599
 AliAnalysisTaskMuonRefit.cxx:600
 AliAnalysisTaskMuonRefit.cxx:601
 AliAnalysisTaskMuonRefit.cxx:602
 AliAnalysisTaskMuonRefit.cxx:603
 AliAnalysisTaskMuonRefit.cxx:604
 AliAnalysisTaskMuonRefit.cxx:605
 AliAnalysisTaskMuonRefit.cxx:606
 AliAnalysisTaskMuonRefit.cxx:607
 AliAnalysisTaskMuonRefit.cxx:608
 AliAnalysisTaskMuonRefit.cxx:609
 AliAnalysisTaskMuonRefit.cxx:610
 AliAnalysisTaskMuonRefit.cxx:611
 AliAnalysisTaskMuonRefit.cxx:612
 AliAnalysisTaskMuonRefit.cxx:613
 AliAnalysisTaskMuonRefit.cxx:614
 AliAnalysisTaskMuonRefit.cxx:615
 AliAnalysisTaskMuonRefit.cxx:616
 AliAnalysisTaskMuonRefit.cxx:617
 AliAnalysisTaskMuonRefit.cxx:618
 AliAnalysisTaskMuonRefit.cxx:619
 AliAnalysisTaskMuonRefit.cxx:620
 AliAnalysisTaskMuonRefit.cxx:621
 AliAnalysisTaskMuonRefit.cxx:622
 AliAnalysisTaskMuonRefit.cxx:623
 AliAnalysisTaskMuonRefit.cxx:624
 AliAnalysisTaskMuonRefit.cxx:625
 AliAnalysisTaskMuonRefit.cxx:626
 AliAnalysisTaskMuonRefit.cxx:627
 AliAnalysisTaskMuonRefit.cxx:628
 AliAnalysisTaskMuonRefit.cxx:629
 AliAnalysisTaskMuonRefit.cxx:630
 AliAnalysisTaskMuonRefit.cxx:631
 AliAnalysisTaskMuonRefit.cxx:632
 AliAnalysisTaskMuonRefit.cxx:633
 AliAnalysisTaskMuonRefit.cxx:634
 AliAnalysisTaskMuonRefit.cxx:635
 AliAnalysisTaskMuonRefit.cxx:636
 AliAnalysisTaskMuonRefit.cxx:637
 AliAnalysisTaskMuonRefit.cxx:638
 AliAnalysisTaskMuonRefit.cxx:639
 AliAnalysisTaskMuonRefit.cxx:640