X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONCheck.cxx;h=fd8c8dd441bb1186850fc63b926d535f9b360341;hb=252cb00e7f215af29022b94ff71d36584994be8a;hp=1c6282dea36f4829ad8d44bd224183204ca104ce;hpb=1b4d730c28432d6294fd33bdf7d988013d39f207;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONCheck.cxx b/MUON/AliMUONCheck.cxx index 1c6282dea36..fd8c8dd441b 100644 --- a/MUON/AliMUONCheck.cxx +++ b/MUON/AliMUONCheck.cxx @@ -15,6 +15,7 @@ // $Id$ +//----------------------------------------------------------------------------- /// \class AliMUONCheck /// /// This class check the ESD tree, providing the matching with the trigger @@ -27,17 +28,17 @@ /// 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" @@ -45,9 +46,10 @@ #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 @@ -61,16 +63,26 @@ 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 } //_____________________________________________________________________________ @@ -81,7 +93,8 @@ AliMUONCheck::AliMUONCheck(const char* galiceFile, const char* galiceFileSim, fFileName(galiceFile), fFileNameSim(galiceFileSim), fesdFileName(esdFile), -foutDir(outDir), +fkOutDir(outDir), +fOutFileName(GetDefaultOutFileName()), fFirstEvent(firstEvent), fLastEvent(lastEvent) { @@ -147,14 +160,13 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse) 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); @@ -169,8 +181,7 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse) 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 ; @@ -262,6 +273,10 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse) for ( Int_t iTrack1 = 0; iTrack1GetMuonTrack(iTrack1); + + // skip fake tracks (ghosts) + if (!muonTrack->ContainTrackerData()) continue; + ftracktot++; thetaX = muonTrack->GetThetaX(); @@ -271,7 +286,6 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse) 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 @@ -329,10 +343,9 @@ AliMUONCheck::CheckESD(Bool_t pdc06TriggerResponse) }//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"); @@ -445,7 +458,7 @@ AliMUONCheck::CheckKine() p->Print(""); Int_t pdg=p->GetPdgCode(); - if (abs(pdg) == 13) + if (TMath::Abs(pdg) == 13) { ++nmu2; } @@ -512,9 +525,8 @@ AliMUONCheck::CheckKine() 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"); @@ -657,7 +669,7 @@ AliMUONCheck::CheckTrackRef() }//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); @@ -754,7 +766,7 @@ AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const 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; @@ -774,16 +786,18 @@ AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const // 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 ) { @@ -796,65 +810,23 @@ AliMUONCheck::CheckOccupancy(Bool_t perDetEle) const 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) ); - -} - -//_____________________________________________________________________________ -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; ieventGetEvent(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)); + } } //_____________________________________________________________________________