-//
-// Macro for checking aliroot output and associated files contents
-// Gines Martinez, Subatech June 2003
-//
-#if !defined(__CINT__) || defined(__MAKECINT__)
-// ROOT includes
-#include "TBranch.h"
-#include "TClonesArray.h"
-#include "TFile.h"
-#include "TH1.h"
-#include "TMath.h"
-#include "TParticle.h"
-#include "TTree.h"
-#include "TNtuple.h"
-
-// STEER includes
-#include "AliRun.h"
-#include "AliRunLoader.h"
-#include "AliHeader.h"
-#include "AliLoader.h"
-#include "AliStack.h"
-#include "AliTracker.h"
-#include "AliMagFMaps.h"
-
-// MUON includes
-#include "AliMUON.h"
-#include "AliMUONData.h"
-#include "AliMUONHit.h"
-#include "AliMUONConstants.h"
-#include "AliMUONDigit.h"
-#include "AliMUONRawCluster.h"
-#include "AliMUONGlobalTrigger.h"
-#include "AliMUONLocalTrigger.h"
-#include "AliMUONTrack.h"
-#include "AliMUONTrackParam.h"
-#include "AliMUONTrackExtrap.h"
-#include "AliMUONTriggerCircuit.h"
-#include "AliMUONTriggerCrateStore.h"
-
-#include "AliMpSegmentation.h"
-#include "AliMpVSegmentation.h"
-#include "AliMpIntPair.h"
-#include "AliMpDEManager.h"
-#include "AliMpCathodType.h"
-#include "AliMpPlaneType.h"
-#endif
-
-void MUONkine(Int_t event2Check=0, char * filename="galice.root")
-{
- // Stack of particle for each event
- AliStack* stack;
- // Creating Run Loader and openning file containing Hits
- AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
- if (RunLoader ==0x0) {
- printf(">>> Error : Error Opening %s file \n",filename);
- return;
- }
-
- RunLoader->LoadKinematics("READ");
- Int_t ievent, nevents;
- nevents = RunLoader->GetNumberOfEvents();
-
- for(ievent=0; ievent<nevents; ievent++) { // Event loop
- if (event2Check!=0) ievent=event2Check;
- Int_t iparticle, nparticles;
- // Getting event ievent
- RunLoader->GetEvent(ievent);
- stack = RunLoader->Stack();
- nparticles = (Int_t) stack->GetNtrack();
- printf(">>> Event %d, Number of particles is %d \n",ievent, nparticles);
- for(iparticle=0; iparticle<nparticles; iparticle++) {
- stack->Particle(iparticle)->Print("");
- }
- if (event2Check!=0) ievent=nevents;
- }
- RunLoader->UnloadKinematics();
-}
-
-
-void MUONhits(Int_t event2Check=0, char * filename="galice.root")
-{
- // Creating Run Loader and openning file containing Hits
- AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
- if (RunLoader ==0x0) {
- printf(">>> Error : Error Opening %s file \n",filename);
- return;
- }
- // Loading MUON subsystem
- AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
- MUONLoader->LoadHits("READ"); // Loading Tree of hits for MUON
- AliMUONData muondata(MUONLoader,"MUON","MUON"); // Creating MUON data container
- Int_t ievent, nevents;
- nevents = RunLoader->GetNumberOfEvents();
-
- for(ievent=0; ievent<nevents; ievent++) { // Event loop
- if (event2Check!=0) ievent=event2Check;
- printf(">>> Event %d \n",ievent);
- // Getting event ievent
- RunLoader->GetEvent(ievent);
- muondata.SetTreeAddress("H");
- Int_t itrack, ntracks;
- ntracks = (Int_t) muondata.GetNtracks();
- for (itrack=0; itrack<ntracks; itrack++) { // Track loop
- //Getting List of Hits of Track itrack
- muondata.GetTrack(itrack);
- Int_t ihit, nhits;
- nhits = (Int_t) muondata.Hits()->GetEntriesFast();
- printf(">>> Track %d, Number of hits %d \n",itrack,nhits);
- AliMUONHit* mHit;
- for(ihit=0; ihit<nhits; ihit++) {
- mHit = static_cast<AliMUONHit*>(muondata.Hits()->At(ihit));
- mHit->Print("full");
- }
- muondata.ResetHits();
- } // end track loop
- if (event2Check!=0) ievent=nevents;
- } // end event loop
- MUONLoader->UnloadHits();
-}
-
-
-void MUONdigits(Int_t event2Check=0, char * filename="galice.root")
-{
- // Creating Run Loader and openning file containing Hits
- AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
- if (RunLoader ==0x0) {
- printf(">>> Error : Error Opening %s file \n",filename);
- return;
- }
- // Loading MUON subsystem
- AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
- MUONLoader->LoadDigits("READ");
- // Creating MUON data container
- AliMUONData muondata(MUONLoader,"MUON","MUON");
-
- Int_t ievent, nevents;
- nevents = RunLoader->GetNumberOfEvents();
- AliMUONDigit * mDigit;
-
- for(ievent=0; ievent<nevents; ievent++) {
- if (event2Check!=0) ievent=event2Check;
- printf(">>> Event %d \n",ievent);
- RunLoader->GetEvent(ievent);
-
- // Addressing
- Int_t ichamber, nchambers;
- nchambers = AliMUONConstants::NCh(); ;
- muondata.SetTreeAddress("D,GLT");
-
- muondata.GetDigits();
- // Loop on chambers
- for( ichamber=0; ichamber<nchambers; ichamber++) {
- Int_t idigit, ndigits;
- TClonesArray* digits = muondata.Digits(ichamber);
- digits->Sort();
- ndigits = (Int_t)digits->GetEntriesFast();
- for(idigit=0; idigit<ndigits; idigit++) {
- mDigit = static_cast<AliMUONDigit*>(digits->At(idigit));
- mDigit->Print("tracks");
- } // end digit loop
- } // end chamber loop
- muondata.ResetDigits();
- if (event2Check!=0) ievent=nevents;
- } // end event loop
- MUONLoader->UnloadDigits();
-}
-
-void MUONsdigits(Int_t event2Check=0, char * filename="galice.root")
-{
- // Creating Run Loader and openning file containing Hits
- AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
- if (RunLoader ==0x0) {
- printf(">>> Error : Error Opening %s file \n",filename);
- return;
- }
- // Loading MUON subsystem
- AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
- MUONLoader->LoadSDigits("READ");
- // Creating MUON data container
- AliMUONData muondata(MUONLoader,"MUON","MUON");
-
- Int_t ievent, nevents;
- nevents = RunLoader->GetNumberOfEvents();
- AliMUONDigit * mDigit;
-
- for(ievent=0; ievent<nevents; ievent++) {
- if (event2Check!=0) ievent=event2Check;
- printf(">>> Event %d \n",ievent);
- RunLoader->GetEvent(ievent);
-
- // Addressing
- Int_t ichamber, nchambers;
- nchambers = AliMUONConstants::NCh(); ;
- muondata.SetTreeAddress("S");
-
- muondata.GetSDigits();
- // Loop on chambers
- for( ichamber=0; ichamber<nchambers; ichamber++) {
- Int_t idigit, ndigits;
- TClonesArray* digits = muondata.SDigits(ichamber);
- ndigits = (Int_t)digits->GetEntriesFast();
- for(idigit=0; idigit<ndigits; idigit++) {
- mDigit = static_cast<AliMUONDigit*>(digits->At(idigit));
- mDigit->Print("tracks");
- } // end digit loop
- } // end chamber loop
- muondata.ResetSDigits();
- if (event2Check!=0) ievent=nevents;
- } // end event loop
- MUONLoader->UnloadSDigits();
-
-}
-
-void MUONoccupancy(Int_t event2Check=0, Bool_t perDetEle =kFALSE, char * filename="galice.root") {
- // Creating Run Loader and openning file containing Hits
- AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
- if (RunLoader ==0x0) {
- printf(">>> Error : Error Opening %s file \n",filename);
- return;
- }
- // Loading MUON subsystem
- AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
- MUONLoader->LoadDigits("READ");
- // Creating MUON data container
- AliMUONData muondata(MUONLoader,"MUON","MUON");
-
- Int_t ievent, nevents;
- nevents = RunLoader->GetNumberOfEvents();
- AliMUONDigit * mDigit =0x0;
- const AliMpVSegmentation * segbend = 0x0;
- const AliMpVSegmentation * segnonbend = 0x0;
- AliMpIntPair pad(0,0);
-
- Int_t dEoccupancy_bending[14][26];
- Int_t dEoccupancy_nonbending[14][26];
- Int_t cHoccupancy_bending[14];
- Int_t cHoccupancy_nonbending[14];
- Int_t totaloccupancy_bending =0;
- Int_t totaloccupancy_nonbending =0;
-
- Int_t dEchannels_bending[14][26];
- Int_t dEchannels_nonbending[14][26];
- Int_t cHchannels_bending[14];
- Int_t cHchannels_nonbending[14];
- Int_t totalchannels_bending =0;
- Int_t totalchannels_nonbending =0;
-
- Int_t ichamber, nchambers,idetele, detele, ix, iy;
- nchambers = AliMUONConstants::NCh(); ;
-
- for (ichamber=0; ichamber<nchambers; ichamber++) {
- cHchannels_bending[ichamber]=0;
- cHchannels_nonbending[ichamber]=0;
- for (idetele=0; idetele<26; idetele++) {
- detele= 100*(ichamber +1)+idetele;
- dEchannels_bending[ichamber][idetele]=0;
- dEchannels_nonbending[ichamber][idetele]=0;
- dEoccupancy_bending[ichamber][idetele]=0;
- dEoccupancy_nonbending[ichamber][idetele]=0;
- if ( AliMpDEManager::IsValidDetElemId(detele) ) {
- segbend = AliMpSegmentation::Instance()
- ->GetMpSegmentation(detele, AliMp::kCath0);
- segnonbend = AliMpSegmentation::Instance()
- ->GetMpSegmentation(detele, AliMp::kCath1);
- if (AliMpDEManager::GetPlaneType(detele, AliMp::kCath0) != AliMp::kBendingPlane ) {
- const AliMpVSegmentation* tmp = segbend;
- segbend = segnonbend;
- segnonbend = tmp;
- }
-
- for(ix=0; ix<=segbend->MaxPadIndexX(); ix++) {
- for(iy=0; iy<=segbend->MaxPadIndexY(); iy++) {
- pad.SetFirst(ix);
- pad.SetSecond(iy);
- if( segbend->HasPad(pad) ) {
- dEchannels_bending[ichamber][idetele]++;
- cHchannels_bending[ichamber]++;
- totalchannels_bending++;
- }
- }
- }
- for(ix=0; ix<=segnonbend->MaxPadIndexX(); ix++) {
- for(iy=0; iy<=segnonbend->MaxPadIndexY(); iy++) {
- pad.SetFirst(ix);
- pad.SetSecond(iy);
- if(segnonbend->HasPad(pad)) {
- dEchannels_nonbending[ichamber][idetele]++;
- cHchannels_nonbending[ichamber]++;
- totalchannels_nonbending++;
- }
- }
- }
- if (perDetEle) printf(">>> Detection element %4d has %5d channels in bending and %5d channels in nonbending \n",
- detele, dEchannels_bending[ichamber][idetele], dEchannels_nonbending[ichamber][idetele] );
- }
- }
- printf(">>> Chamber %2d has %6d channels in bending and %6d channels in nonbending \n",
- ichamber+1, cHchannels_bending[ichamber], cHchannels_nonbending[ichamber]);
- }
- printf(">>Spectrometer has %7d channels in bending and %7d channels in nonbending \n",
- totalchannels_bending, totalchannels_nonbending);
-
- ievent=event2Check;
- printf(">>> Event %d \n",ievent);
- RunLoader->GetEvent(ievent);
-
- // Addressing
- muondata.SetTreeAddress("D");
- muondata.GetDigits();
- // Loop on chambers
- for( ichamber=0; ichamber<nchambers; ichamber++) {
- cHoccupancy_bending[ichamber] = 0;
- cHoccupancy_nonbending[ichamber]= 0;
- Int_t idigit, ndigits;
- ndigits = (Int_t) muondata.Digits(ichamber)->GetEntriesFast();
- for(idigit=0; idigit<ndigits; idigit++) {
- mDigit = static_cast<AliMUONDigit*>(muondata.Digits(ichamber)->At(idigit));
- Int_t detele = mDigit->DetElemId();
- Int_t idetele = detele-(ichamber+1)*100;
- if ( mDigit->Cathode() == 0 ) {
-
- cHoccupancy_bending[ichamber]++;
- dEoccupancy_bending[ichamber][idetele]++;
- totaloccupancy_bending++;
- }
- else {
- cHoccupancy_nonbending[ichamber]++;
- dEoccupancy_nonbending[ichamber][idetele]++;
- totaloccupancy_nonbending++;
- }
- } // end digit loop
-
- printf(">>> Chamber %2d nChannels Bending %5d nChannels NonBending %5d \n",
- ichamber+1,
- cHoccupancy_bending[ichamber],
- cHoccupancy_nonbending[ichamber]);
- printf(">>> Chamber %2d Occupancy Bending %5.2f %% Occupancy NonBending %5.2f %% \n",
- ichamber+1,
- 100.*((Float_t) cHoccupancy_bending[ichamber])/((Float_t) cHchannels_bending[ichamber]),
- 100.*((Float_t) cHoccupancy_nonbending[ichamber])/((Float_t) cHchannels_bending[ichamber]) );