Analysis code updated
authorauras <auras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 23 Nov 2012 18:36:50 +0000 (18:36 +0000)
committerauras <auras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 23 Nov 2012 18:36:50 +0000 (18:36 +0000)
MFT/AliMuonForwardTrack.h
MFT/AliMuonForwardTrackAnalysis.C
MFT/AliMuonForwardTrackAnalysis.cxx
MFT/AliMuonForwardTrackAnalysis.h

index d9ffe58..6c09996 100644 (file)
@@ -121,7 +121,7 @@ protected:
 
   TMatrixD fParamCovMatrix;
 
-  ClassDef(AliMuonForwardTrack,1)
+  ClassDef(AliMuonForwardTrack,2)
     
 };
 
index 33501a7..5628f2e 100644 (file)
@@ -14,7 +14,7 @@ void AliMuonForwardTrackAnalysis(const Char_t *readDir= ".",
                                 Double_t massMax = 10.,                           // upper limit for the cut on dimuon mass
                                 Double_t maxChi2SingleMuons = 1.5,                // upper limit for the cut on the single muon chi2
                                 Double_t maxOffsetSingleMuons = 250.,             // upper limit for the cut on the single muon offset w.r.t. the primary vtx
-                                Bool_t correlateCutOnOffsetChi2 = kTRUE,          // if true, the cur region in the chi2-offset plane for single muons is a quadrant aorund the origin
+                                Bool_t correlateCutOnOffsetChi2 = kTRUE,          // if true, the cut region in the chi2-offset plane for single muons is a quadrant aorund the origin
                                 Double_t maxWOffsetMuonPairsAtPrimaryVtx = 1.e9,  // upper limit for the cut on weighted offset of dimuond w.r.t. the primary vtx
                                 Double_t maxWOffsetMuonPairsAtPCA = 1.e9,         // upper limit for the cut on weighted offset of dimuond w.r.t. their PCA
                                 Double_t maxDistancePrimaryVtxPCA = 1.e9,         // upper limit for the cut on the distance between primary vtx and PCA
@@ -26,11 +26,14 @@ void AliMuonForwardTrackAnalysis(const Char_t *readDir= ".",
                                 Bool_t muonPairAnalysis = kTRUE,                  // if true, the aalysis of muon pairs will be performed
                                 Int_t firstEvent = -1,
                                 Int_t lastEvent = -1, 
-                                Int_t myRandom = 0,                               // number which will tag the name of the output file
+                                Int_t numTag = 0,                                 // number which will tag the name of the output file
                                 Double_t ptMinSingleMuons = 0.0,                  // lower limit for the cut on the single muon pt
                                 Double_t trueMass = 3.097,                        // used to evaluate the pseudo proper decay length, usually for J/psi only
                                 Bool_t evalDimuonVtxResolution=kFALSE,            // to be set true only if prompt dimuon sources are analyzed
-                                Int_t nEventsToMix = 0) {                         // if <1 or >100, mixing is not performed
+                                Int_t nEventsToMix = 0,                           // if <1 or >100, mixing is not performed
+                                const Char_t *tag = "noTag",                      // tag added to the output file name
+                                Double_t etaMinSingleMuons = -3.6,                // lower limit for the cut on the single muon eta
+                                Double_t etaMaxSingleMuons = -2.5) {              // upper limit for the cut on the single muon eta
   
   const Double_t mJpsi = TDatabasePDG::Instance()->GetParticle("J/psi")->Mass();
 
@@ -54,6 +57,7 @@ void AliMuonForwardTrackAnalysis(const Char_t *readDir= ".",
 
   myAnalysis->SetMaxNWrongClustersMC(maxNWrongClusters);
   myAnalysis->SetMinPtSingleMuons(ptMinSingleMuons);
+  //  myAnalysis->SetEtaRangeSingleMuons(etaMinSingleMuons, etaMaxSingleMuons);
   myAnalysis->SetMaxChi2SingleMuons(maxChi2SingleMuons);
   myAnalysis->SetMaxOffsetSingleMuons(maxOffsetSingleMuons);
   myAnalysis->CorrelateCutOnOffsetChi2(correlateCutOnOffsetChi2);
@@ -71,7 +75,7 @@ void AliMuonForwardTrackAnalysis(const Char_t *readDir= ".",
 
   if (myAnalysis->Init("MuonGlobalTracks.root")) {
     while (myAnalysis->LoadNextEvent()) continue;
-    myAnalysis->Terminate(Form("outFiles/outFile.%d.%d.%d.root", myAnalysis->GetFirstEvent(), myAnalysis->GetLastEvent(), myRandom));
+    myAnalysis->Terminate(Form("outFiles/outFile.%d.%s.root", numTag, tag));
   }
 
 }
index 1032a1c..ad3cfd1 100644 (file)
@@ -96,6 +96,8 @@ AliMuonForwardTrackAnalysis::AliMuonForwardTrackAnalysis():
   fPrimaryVtxZ(0.),
   fMaxNWrongClustersMC(999),
   fMinPtSingleMuons(0),
+  fMinEtaSingleMuons(-99999.),
+  fMaxEtaSingleMuons(+99999.),
   fUseBransonForCut(kFALSE),
   fUseBransonForKinematics(kFALSE),
   fCorrelateCutOnOffsetChi2(kFALSE),
@@ -196,9 +198,9 @@ Bool_t AliMuonForwardTrackAnalysis::LoadNextEvent() {
   fInputTreeWithBranson    -> GetEvent(fEv);
   fInputTreeWithoutBranson -> GetEvent(fEv);
 
-  AliDebug(2,Form("**** analyzing event # %4d (%3d tracks) ****", fEv+1, fMuonForwardTracksWithBranson->GetEntriesFast()));
+  AliDebug(2,Form("**** analyzing event # %4d (%3d tracks) ****", fEv, fMuonForwardTracksWithBranson->GetEntriesFast()));
 
-  AliInfo(Form("**** analyzing event # %6d of %6d ****", fEv+1, fLastEvent+1));
+  AliInfo(Form("**** analyzing event # %6d of %6d ****", fEv, fLastEvent));
 
   fPrimaryVtxX = gRandom->Gaus(0., fXVertResMC);
   fPrimaryVtxY = gRandom->Gaus(0., fYVertResMC);
@@ -225,7 +227,7 @@ Bool_t AliMuonForwardTrackAnalysis::LoadNextEvent() {
     while (AnalyzeMuonPair(kSingleEvent)) continue;
   }
 
-  AliDebug(2,Form("**** analyzed  event # %4d (%3d tracks and %3d pairs analyzed) ****", fEv+1, fNTracksAnalyzedOfEventAfterCut, fNPairsAnalyzedOfEventAfterCut));
+  AliDebug(2,Form("**** analyzed  event # %4d (%3d tracks and %3d pairs analyzed) ****", fEv, fNTracksAnalyzedOfEventAfterCut, fNPairsAnalyzedOfEventAfterCut));
   
   if (fMuonPairAnalysis && fMixing) {
     for (fEvMix=fEv+1; fEvMix<=fEv+fNEventsToMix; fEvMix++) {
@@ -256,8 +258,8 @@ Bool_t AliMuonForwardTrackAnalysis::LoadNextEvent() {
        fInputTreeWithoutBranson -> GetEvent(fEv);
 
        AliDebug(2,Form("**** mixing event # %4d (%3d tracks) with event # %4d (%3d tracks) ****", 
-                       fEv+1,    fMuonForwardTracksWithBranson->GetEntriesFast(),
-                       fEvMix+1, fMuonForwardTracksWithBransonMix ->GetEntriesFast()));          
+                       fEv,    fMuonForwardTracksWithBranson->GetEntriesFast(),
+                       fEvMix, fMuonForwardTracksWithBransonMix ->GetEntriesFast()));    
        if (fMuonForwardTrackPairsWithBranson || fMuonForwardTrackPairsWithoutBranson) {
          fMuonForwardTrackPairsWithBranson    -> Clear("C");
          fMuonForwardTrackPairsWithoutBranson -> Clear("C");
@@ -315,21 +317,20 @@ Bool_t AliMuonForwardTrackAnalysis::AnalyzeSingleMuon() {
     fHistZROriginSingleMuonsMC -> Fill(-1.*fMCRefTrack->Vz(), TMath::Sqrt(fMCRefTrack->Vx()*fMCRefTrack->Vx()+fMCRefTrack->Vy()*fMCRefTrack->Vy()));
   }
 
-  AliMUONTrackParam *param = fMFTTrack->GetTrackParamAtMFTCluster(0);
-  AliMUONTrackExtrap::ExtrapToZCov(param, fPrimaryVtxZ);
-
-  TLorentzVector pMu;
-  Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
-  Double_t energy = TMath::Sqrt(param->P()*param->P() + mMu*mMu);
-  pMu.SetPxPyPzE(param->Px(), param->Py(), param->Pz(), energy);
+  fMFTTrack -> EvalKinem(fPrimaryVtxZ);
 
   TMatrixD cov(5,5);
-  cov = param->GetCovariances();
+  cov = fMFTTrack->GetParamCovMatrix();
+
+  fHistXErrorSingleMuonsVsEtaVsP  -> Fill(1.e4*TMath::Sqrt(cov(0,0)), fMFTTrack->Eta(), fMFTTrack->P());
+  fHistYErrorSingleMuonsVsEtaVsP  -> Fill(1.e4*TMath::Sqrt(cov(2,2)), fMFTTrack->Eta(), fMFTTrack->P());
+  fHistXErrorSingleMuonsVsEtaVsPt -> Fill(1.e4*TMath::Sqrt(cov(0,0)), fMFTTrack->Eta(), fMFTTrack->Pt());
+  fHistYErrorSingleMuonsVsEtaVsPt -> Fill(1.e4*TMath::Sqrt(cov(2,2)), fMFTTrack->Eta(), fMFTTrack->Pt());
 
-  fHistXErrorSingleMuonsVsEtaVsP  -> Fill(1.e4*TMath::Sqrt(cov(0,0)), pMu.Eta(), pMu.P());
-  fHistYErrorSingleMuonsVsEtaVsP  -> Fill(1.e4*TMath::Sqrt(cov(2,2)), pMu.Eta(), pMu.P());
-  fHistXErrorSingleMuonsVsEtaVsPt -> Fill(1.e4*TMath::Sqrt(cov(0,0)), pMu.Eta(), pMu.Pt());
-  fHistYErrorSingleMuonsVsEtaVsPt -> Fill(1.e4*TMath::Sqrt(cov(2,2)), pMu.Eta(), pMu.Pt());
+  fHistXErrorSingleMuonsVsEtaVsP  -> Fill(1.e4*TMath::Sqrt(cov(0,0)), fMFTTrack->Eta(), fMFTTrack->P());
+  fHistYErrorSingleMuonsVsEtaVsP  -> Fill(1.e4*TMath::Sqrt(cov(2,2)), fMFTTrack->Eta(), fMFTTrack->P());
+  fHistXErrorSingleMuonsVsEtaVsPt -> Fill(1.e4*TMath::Sqrt(cov(0,0)), fMFTTrack->Eta(), fMFTTrack->Pt());
+  fHistYErrorSingleMuonsVsEtaVsPt -> Fill(1.e4*TMath::Sqrt(cov(2,2)), fMFTTrack->Eta(), fMFTTrack->Pt());
 
   Double_t dX = fMFTTrack->GetOffsetX(fPrimaryVtxX, fPrimaryVtxZ);
   Double_t dY = fMFTTrack->GetOffsetY(fPrimaryVtxY, fPrimaryVtxZ);
@@ -339,16 +340,16 @@ Bool_t AliMuonForwardTrackAnalysis::AnalyzeSingleMuon() {
 
   //  AliDebug(2, Form("pdg code = %d\n", fMCRefTrack->GetPdgCode()));
 
-  fHistXOffsetSingleMuonsVsEtaVsP  -> Fill(1.e4*dX,        pMu.Eta(), pMu.P());
-  fHistYOffsetSingleMuonsVsEtaVsP  -> Fill(1.e4*dY,        pMu.Eta(), pMu.P());
-  fHistOffsetSingleMuonsVsEtaVsP   -> Fill(1.e4*offset,    pMu.Eta(), pMu.P());
-  fHistWOffsetSingleMuonsVsEtaVsP  -> Fill(weightedOffset, pMu.Eta(), pMu.P());
-  fHistXOffsetSingleMuonsVsEtaVsPt -> Fill(1.e4*dX,        pMu.Eta(), pMu.Pt());
-  fHistYOffsetSingleMuonsVsEtaVsPt -> Fill(1.e4*dY,        pMu.Eta(), pMu.Pt());
-  fHistOffsetSingleMuonsVsEtaVsPt  -> Fill(1.e4*offset,    pMu.Eta(), pMu.Pt());
-  fHistWOffsetSingleMuonsVsEtaVsPt -> Fill(weightedOffset, pMu.Eta(), pMu.Pt());
+  fHistXOffsetSingleMuonsVsEtaVsP  -> Fill(1.e4*dX,        fMFTTrack->Eta(), fMFTTrack->P());
+  fHistYOffsetSingleMuonsVsEtaVsP  -> Fill(1.e4*dY,        fMFTTrack->Eta(), fMFTTrack->P());
+  fHistOffsetSingleMuonsVsEtaVsP   -> Fill(1.e4*offset,    fMFTTrack->Eta(), fMFTTrack->P());
+  fHistWOffsetSingleMuonsVsEtaVsP  -> Fill(weightedOffset, fMFTTrack->Eta(), fMFTTrack->P());
+  fHistXOffsetSingleMuonsVsEtaVsPt -> Fill(1.e4*dX,        fMFTTrack->Eta(), fMFTTrack->Pt());
+  fHistYOffsetSingleMuonsVsEtaVsPt -> Fill(1.e4*dY,        fMFTTrack->Eta(), fMFTTrack->Pt());
+  fHistOffsetSingleMuonsVsEtaVsPt  -> Fill(1.e4*offset,    fMFTTrack->Eta(), fMFTTrack->Pt());
+  fHistWOffsetSingleMuonsVsEtaVsPt -> Fill(weightedOffset, fMFTTrack->Eta(), fMFTTrack->Pt());
 
-  fHistSingleMuonsPtRapidity -> Fill(pMu.Rapidity(), pMu.Pt());
+  fHistSingleMuonsPtRapidity -> Fill(fMFTTrack->Rapidity(), fMFTTrack->Pt());
   Double_t chi2OverNdf = fMFTTrack->GetGlobalChi2()/Double_t(fMFTTrack->GetNMFTClusters()+fMFTTrack->GetNMUONClusters());
   fHistSingleMuonsOffsetChi2  -> Fill(1.e4*offset, chi2OverNdf);
 
@@ -526,10 +527,9 @@ void AliMuonForwardTrackAnalysis::BuildMuonPairsMix() {
 
 Bool_t AliMuonForwardTrackAnalysis::PassedCutSingleMuon(AliMuonForwardTrack *track) {
 
-  AliMUONTrackParam *param = track->GetTrackParamAtMFTCluster(0);
-  AliMUONTrackExtrap::ExtrapToZCov(param, fPrimaryVtxZ);
-
+  track -> EvalKinem(fPrimaryVtxZ);
   if (track->Pt()<fMinPtSingleMuons) return kFALSE;
+  if (track->Eta()<fMinEtaSingleMuons || track->Eta()>fMaxEtaSingleMuons) return kFALSE;
   
   Double_t offset = 1.e4*track->GetOffset(fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ);
   Double_t chi2OverNdf = track->GetGlobalChi2() / Double_t(track->GetNMFTClusters()+track->GetNMUONClusters()); 
index 883e818..fe22946 100644 (file)
@@ -73,6 +73,7 @@ public:
 
   void SetMaxNWrongClustersMC(Int_t nClusters) { fMaxNWrongClustersMC = nClusters; }
   void SetMinPtSingleMuons(Double_t ptMin) { fMinPtSingleMuons = ptMin; }
+  void SetEtaRangeSingleMuons(Double_t min, Double_t max) { fMinEtaSingleMuons=min; fMaxEtaSingleMuons=max; }
   void SetMaxChi2SingleMuons(Double_t chi2Max) { fMaxChi2SingleMuons = chi2Max; }
   void SetMaxOffsetSingleMuons(Double_t offsetMax) { fMaxOffsetSingleMuons = offsetMax; }
   void CorrelateCutOnOffsetChi2(Bool_t option) { fCorrelateCutOnOffsetChi2 = option; }
@@ -145,7 +146,7 @@ private:
   Double_t fXVertResMC, fYVertResMC, fZVertResMC;
   Double_t fPrimaryVtxX, fPrimaryVtxY, fPrimaryVtxZ;
   Int_t fMaxNWrongClustersMC;
-  Double_t fMinPtSingleMuons;
+  Double_t fMinPtSingleMuons, fMinEtaSingleMuons, fMaxEtaSingleMuons;
 
   Bool_t fUseBransonForCut, fUseBransonForKinematics, fCorrelateCutOnOffsetChi2;