// $Id$
+//-----------------------------------------------------------------------------
/// \class AliMUONCheck
///
/// This class check the ESD tree, providing the matching with the trigger
/// DumpDigit() as a replacement of the function from MUONCheck.C macro.
///
/// \author Frederic Yermia, INFN Torino
+//-----------------------------------------------------------------------------
#include "AliMUONCheck.h"
#include "AliMUONConstants.h"
-#include "AliMUONTrack.h"
-#include "AliMUONTrackParam.h"
-#include "AliMUONTrackExtrap.h"
#include "AliMUONMCDataInterface.h"
#include "AliMUONDataInterface.h"
+#include "AliMpCDB.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliMpDEManager.h"
+#include "AliMpCDB.h"
#include "AliMUONVDigitStore.h"
#include "AliRunLoader.h"
#include "AliStack.h"
#include "AliTrackReference.h"
#include "AliTracker.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
-#include "AliMagFMaps.h"
+#include "AliESDVertex.h"
+#include "AliMagF.h"
#include "AliLog.h"
#include <TSystem.h>
ClassImp(AliMUONCheck)
/// \endcond
+//_____________________________________________________________________________
+const TString& AliMUONCheck::GetDefaultOutFileName()
+{
+ /// Default output file name
+ static const TString kDefaultOutFileName = "output.txt";
+ return kDefaultOutFileName;
+}
+
+//_____________________________________________________________________________
AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* esdFile,Int_t firstEvent, Int_t lastEvent,const char* outDir)
: TObject(),
fFileName(galiceFile),
fFileNameSim(),
fesdFileName(esdFile),
-foutDir(outDir),
+fkOutDir(outDir),
+fOutFileName(GetDefaultOutFileName()),
fFirstEvent(firstEvent),
fLastEvent(lastEvent)
{
- /// ctor
+ /// ctor
}
//_____________________________________________________________________________
fFileName(galiceFile),
fFileNameSim(galiceFileSim),
fesdFileName(esdFile),
-foutDir(outDir),
+fkOutDir(outDir),
+fOutFileName(GetDefaultOutFileName()),
fFirstEvent(firstEvent),
fLastEvent(lastEvent)
{
Float_t muonMass = 0.105658389;
Double_t thetaX, thetaY, pYZ;
Double_t fPxRec1, fPyRec1, fPzRec1, fE1;
- Int_t fZ1;
- AliESD* fESD = new AliESD();
+ AliESDEvent* fESD = new AliESDEvent();
TTree* tree = (TTree*) esdFile->Get("esdTree");
if (!tree)
{
Error("CheckESD", "no ESD tree found");
- AliError(Form("CheckESD", "no ESD tree found"));
+ AliError(Form("no ESD tree found"));
return ;
}
fESD->ReadFromTree(tree);
for (ievent = fFirstEvent; ievent < endOfLoop; ++ievent )
{
nev++;
- tree->GetEvent(ievent);
- if (!fESD)
+ if (tree->GetEvent(ievent) <= 0)
{
Error("CheckESD", "no ESD object found for event %d", ievent);
return ;
for ( Int_t iTrack1 = 0; iTrack1<nTracks; ++iTrack1 )
{ //1st loop
AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack1);
+
+ // skip fake tracks (ghosts)
+ if (!muonTrack->ContainTrackerData()) continue;
+
ftracktot++;
thetaX = muonTrack->GetThetaX();
fPzRec1 = - pYZ / TMath::Sqrt(1.0 + TMath::Tan(thetaY)*TMath::Tan(thetaY));
fPxRec1 = fPzRec1 * TMath::Tan(thetaX);
fPyRec1 = fPzRec1 * TMath::Tan(thetaY);
- fZ1 = Int_t(TMath::Sign(1.,muonTrack->GetInverseBendingMomentum()));
fE1 = TMath::Sqrt(muonMass * muonMass + fPxRec1 * fPxRec1 + fPyRec1 * fPyRec1 + fPzRec1 * fPzRec1);
fV1.SetPxPyPzE(fPxRec1, fPyRec1, fPzRec1, fE1);
// -----------> transverse momentum
}//if(pdc06TriggerResponse)
- gSystem->cd(foutDir);
+ gSystem->cd(fkOutDir);
- FILE *outtxt=fopen("output.txt","a");
- freopen("output.txt","a",outtxt);
+ FILE *outtxt=fopen(fOutFileName.Data(),"a");
if(pdc06TriggerResponse){
fprintf(outtxt," \n");
p->Print("");
Int_t pdg=p->GetPdgCode();
- if (abs(pdg) == 13)
+ if (TMath::Abs(pdg) == 13)
{
++nmu2;
}
printf("*** Leaving MuonKine() *** \n");
printf("**************************************************************** \n");
- gSystem->cd(foutDir);
- FILE *outtxt=fopen("output.txt","a");
- freopen("output.txt","a",outtxt);
+ gSystem->cd(fkOutDir);
+ FILE *outtxt=fopen(fOutFileName.Data(),"a");
fprintf(outtxt," \n");
fprintf(outtxt,"=================================================================\n");
fprintf(outtxt,"================ MUONkine SUMMARY ================\n");
}//hits de tTR
- delete trackRefs;
-
}//entree de tTR
}//evt loop
- gSystem->cd(foutDir);
+ gSystem->cd(fkOutDir);
TCanvas *c6 = new TCanvas("c6","TOF",400,10,600,700);
c6->Divide(1,2);
c6->cd(1);
ndigits = digitStore->GetSize(detele,1-cathode);
dEchannelsNonBending[ichamber][idetele] = nchannels;
- dEoccupancyBending[ichamber][idetele] = ndigits;
+ dEoccupancyNonBending[ichamber][idetele] = ndigits;
cHchannelsNonBending[ichamber] += nchannels;
cHoccupancyNonBending[ichamber] += ndigits;
totalchannelsNonBending += nchannels;
// Output values
- for ( Int_t ichamber = 0; ichamber < 14; ++ichamber )
+ for ( Int_t ichamber = 0; ichamber < nchambers; ++ichamber )
{
printf(">>> Chamber %2d nChannels Bending %5d nChannels NonBending %5d \n",
ichamber+1,
cHoccupancyBending[ichamber],
- cHoccupancyNonBending[ichamber]);
- printf(">>> Chamber %2d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
- ichamber+1,
- 100.*((Float_t) cHoccupancyBending[ichamber])/((Float_t) cHchannelsBending[ichamber]),
- 100.*((Float_t) cHoccupancyNonBending[ichamber])/((Float_t) cHchannelsBending[ichamber]) );
+ cHoccupancyNonBending[ichamber]);
+ if ( cHchannelsBending[ichamber] != 0 && cHchannelsBending[ichamber] ) {
+ printf(">>> Chamber %2d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
+ ichamber+1,
+ 100.*((Float_t) cHoccupancyBending[ichamber])/((Float_t) cHchannelsBending[ichamber]),
+ 100.*((Float_t) cHoccupancyNonBending[ichamber])/((Float_t) cHchannelsBending[ichamber]));
+ }
if ( perDetEle )
{
idetele+100*(ichamber+1),
dEoccupancyBending[ichamber][idetele],
dEoccupancyNonBending[ichamber][idetele]);
- printf(">>> DetEle %4d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
- idetele+100*(ichamber+1),
- 100.*((Float_t) dEoccupancyBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]),
- 100.*((Float_t) dEoccupancyNonBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]));
+
+ if ( dEchannelsBending[ichamber][idetele] != 0 && dEchannelsBending[ichamber][idetele] !=0 ) {
+ printf(">>> DetEle %4d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
+ idetele+100*(ichamber+1),
+ 100.*((Float_t) dEoccupancyBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]),
+ 100.*((Float_t) dEoccupancyNonBending[ichamber][idetele])/((Float_t) dEchannelsBending[ichamber][idetele]));
+ }
}
}
}
}
- printf(">>> Muon Spectrometer Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
- 100.*((Float_t) totaloccupancyBending)/((Float_t) totalchannelsBending),
- 100.*((Float_t) totaloccupancyNonBending)/((Float_t) totalchannelsNonBending) );
-
- delete digitStore;
-}
-
-//_____________________________________________________________________________
-void
-AliMUONCheck::CheckRecTracks () const
-{
- /// Reads and dumps rec tracks objects
-
- AliWarning("Reimplement me ? or use AliMUONDumper simply ?");
-
- // // waiting for mag field in CDB
- // AliInfoStream() << "Loading field map...\n";
- // if (!AliTracker::GetFieldMap()) {
- // AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
- // AliTracker::SetFieldMap(field, kFALSE);
- // }
- //
- // // Loading data
- // fLoader->LoadTracks("READ");
- //
- // Int_t endOfLoop = fLastEvent+1;
- // if ( fLastEvent == -1 ) endOfLoop = fRunLoader->GetNumberOfEvents();
- //
- // for (Int_t ievent=fFirstEvent; ievent<endOfLoop; ievent++) {
- // fRunLoader->GetEvent(ievent);
- //
- // fRecData->SetTreeAddress("RT");
- // fRecData->GetRecTracks();
- // TClonesArray* recTracks = fRecData->RecTracks();
- //
- // Int_t nrectracks = (Int_t) recTracks->GetEntriesFast(); //
- // printf(">>> Event %d, Number of Recconstructed tracks %d \n",ievent, nrectracks);
- //
- // // Set the magnetic field for track extrapolations
- // AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
- //
- // // Loop over tracks
- // for (Int_t iRecTracks = 0; iRecTracks < nrectracks; iRecTracks++) {
- // AliMUONTrack* recTrack = (AliMUONTrack*) recTracks->At(iRecTracks);
- // AliMUONTrackParam* trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First();
- // AliMUONTrackExtrap::ExtrapToZ(trackParam,0.);
- // recTrack->Print("full");
- // }
- // fRecData->ResetRecTracks();
- // }
- // fLoader->UnloadTracks();
+ if ( totalchannelsBending != 0 && totalchannelsNonBending != 0 ) {
+ printf(">>> Muon Spectrometer Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
+ 100.*((Float_t) totaloccupancyBending)/((Float_t) totalchannelsBending),
+ 100.*((Float_t) totaloccupancyNonBending)/((Float_t) totalchannelsNonBending));
+ }
}
//_____________________________________________________________________________