X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FMUONCheck.C;h=8bc1c5bc1fce9f4050af8dcf74586a56e977580d;hb=b7e6419d67cbb40308b1d0b6038f28c4f137343b;hp=d5aa0b0077b3d24b86767af13b7d53010c8200c7;hpb=6babe0581d07319867bb646c838ab273ace926c9;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/MUONCheck.C b/MUON/MUONCheck.C index d5aa0b0077b..8bc1c5bc1fc 100644 --- a/MUON/MUONCheck.C +++ b/MUON/MUONCheck.C @@ -15,582 +15,41 @@ /* $Id$ */ -// -// 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" - -// STEER includes -#include "AliRun.h" -#include "AliRunLoader.h" -#include "AliHeader.h" -#include "AliLoader.h" -#include "AliStack.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 "AliMpVSegmentation.h" -#include "AliMpIntPair.h" -#include "AliMpDEManager.h" -#include "AliMpSegFactory.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; - } +// Macro for data quality control +// +// Author: Frederic Yermia, INFN Torino - RunLoader->LoadKinematics("READ"); - Int_t ievent, nevents; - nevents = RunLoader->GetNumberOfEvents(); +#if !defined(__CINT__) || defined(__MAKECINT__) - for(ievent=0; ieventGetEvent(ievent); - stack = RunLoader->Stack(); - nparticles = (Int_t) stack->GetNtrack(); - printf(">>> Event %d, Number of particles is %d \n",ievent, nparticles); - for(iparticle=0; iparticleParticle(iparticle)->Print(""); - } - if (event2Check!=0) ievent=nevents; - } - RunLoader->UnloadKinematics(); -} +#include "AliMUONCheck.h" +#include "AliCDBManager.h" -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>> 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; itrackGetEntriesFast(); - printf(">>> Track %d, Number of hits %d \n",itrack,nhits); - AliMUONHit* mHit; - for(ihit=0; ihit(muondata.Hits()->At(ihit)); - Int_t detele = mHit-> DetElemId(); // Detection element if defined - Int_t hittrack = mHit->Track(); - Float_t x = mHit->X(); - Float_t y = mHit->Y(); - Float_t z = mHit->Z(); - Float_t elos = mHit->Eloss(); - Float_t momentum = mHit->Momentum(); - printf(">>> >>> Hit%4d DetEle %4d Track%4d (X,Y,Z)=(%7.2f,%7.2f,%8.2f)cm Elost=%7.2gGeV P=%6.1fGeV/c\n", - ihit, detele, hittrack,x,y,z,elos,momentum); - } - muondata.ResetHits(); - } // end track loop - if (event2Check!=0) ievent=nevents; - } // end event loop - MUONLoader->UnloadHits(); -} +#include +#endif -void MUONdigits(Int_t event2Check=0, char * filename="galice.root") +void MUONCheck(Int_t firstEvent, Int_t lastEvent, + TString fileNameSim="$ALICE_ROOT/MUON/test_out/galice_sim.root", + TString fileName="$ALICE_ROOT/MUON/test_out/galice.root", + TString esdsFileName="$ALICE_ROOT/MUON/test_out/AliESDs.root", + TString outDir="$ALICE_ROOT/MUON/test_out/DataQualityControl") { - // 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>> Event %d \n",ievent); - RunLoader->GetEvent(ievent); - - // Addressing - Int_t ichamber, nchambers; - nchambers = AliMUONConstants::NCh(); ; - muondata.SetTreeAddress("D,GLT"); - // char branchname[30]; - - muondata.GetDigits(); - // Loop on chambers - for( ichamber=0; ichamberGetEntriesFast(); - for(idigit=0; idigit(muondata.Digits(ichamber)->At(idigit)); - Int_t PadX = mDigit->PadX(); // Pad X number - Int_t PadY = mDigit->PadY(); // Pad Y number - Int_t Signal = mDigit->Signal(); // Physics Signal - Int_t Physics= mDigit->Physics(); // Physics contribution to signal - // Int_t Hit = mDigit->Hit(); // iHit - Int_t Cathode= mDigit->Cathode(); // Cathode - Int_t Track0 = mDigit->Track(0); - Int_t Track1 = mDigit->Track(1); - //Int_t Track2 = mDigit->Track(2); - Int_t TCharges0 = mDigit->TrackCharge(0); //charge per track making this digit (up to 10) - Int_t TCharges1 = mDigit->TrackCharge(1); - //Int_t TCharges2 = mDigit->TrackCharge(2); - Int_t idDE = mDigit->DetElemId(); - // printf(">>> Cathode %d\n",Cathode); - - printf(">>> DetEle %4d Digit%4d Cath %1d (Ix,Iy)=(%3d,%3d) Signal=%4d Physics=%4d Track0=%4d Charge0=%4d Track1=%4d Charge1=%4d \n", - idDE, idigit, Cathode, PadX, PadY, Signal, Physics, Track0, - TCharges0, Track1, TCharges1); - } // end digit loop - } // end chamber loop - muondata.ResetDigits(); - // } // end cathode loop - if (event2Check!=0) ievent=nevents; - } // end event loop - MUONLoader->UnloadDigits(); -} - -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; - AliMpVSegmentation * segbend = 0x0; - 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(); ; - - AliMpSegFactory factory; - - for (ichamber=0; ichamberMaxPadIndexX(); 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); - - factory.DeleteSegmentations(); - - ievent=event2Check; - printf(">>> Event %d \n",ievent); - RunLoader->GetEvent(ievent); - - // Addressing - muondata.SetTreeAddress("D"); - muondata.GetDigits(); - // Loop on chambers - for( ichamber=0; ichamberGetEntriesFast(); - for(idigit=0; idigit(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]) ); - + // Set default CDB storage + AliCDBManager* man = AliCDBManager::Instance(); + man->SetDefaultStorage("local://$ALICE_ROOT"); - for(Int_t idetele=0; idetele<26; idetele++) { - Int_t detele = idetele + 100*(ichamber+1); - if ( AliMpDEManager::IsValidDetElemId(detele) ) { - if (perDetEle) { - printf(">>> DetEle %4d nChannels Bending %5d nChannels NonBending %5d \n", - idetele+100*(ichamber+1), - dEoccupancy_bending[ichamber][idetele], - dEoccupancy_nonbending[ichamber][idetele]); - printf(">>> DetEle %4d Occupancy Bending %5.2f \% Occupancy NonBending %5.2f \% \n", - idetele+100*(ichamber+1), - 100.*((Float_t) dEoccupancy_bending[ichamber][idetele])/((Float_t) dEchannels_bending[ichamber][idetele]), - 100.*((Float_t) dEoccupancy_nonbending[ichamber][idetele])/((Float_t) dEchannels_bending[ichamber][idetele])); - } - } - } - } // end chamber loop - printf(">>> Muon Spectrometer Occupancy Bending %5.2f\% Occupancy NonBending %5.2f\% \n", - 100.*((Float_t) totaloccupancy_bending)/((Float_t) totalchannels_bending), - 100.*((Float_t) totaloccupancy_nonbending)/((Float_t) totalchannels_nonbending) ); - muondata.ResetDigits(); - // } // end cathode loop - MUONLoader->UnloadDigits(); -} - -void MUONrecpoints(Int_t event2Check=0, char * filename="galice.root") { + gSystem->Load("libMUONevaluation"); - // 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; - } - // Getting MUONloader - AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader"); - MUONLoader->LoadRecPoints("READ"); - // Creating MUON data container - AliMUONData muondata(MUONLoader,"MUON","MUON"); - - Int_t ievent, nevents; - nevents = RunLoader->GetNumberOfEvents(); - AliMUONRawCluster * mRecPoint = 0; - - for(ievent=0; ievent>> Event %d \n",ievent); - RunLoader->GetEvent(ievent); - // Addressing - Int_t ichamber, nchambers; - nchambers = AliMUONConstants::NTrackingCh(); - muondata.SetTreeAddress("RC,TC"); - char branchname[30]; - muondata.GetRawClusters(); - // Loop on chambers - for( ichamber=0; ichamber>> branchname %s\n",branchname); - Int_t irecpoint, nrecpoints; - nrecpoints = (Int_t) muondata.RawClusters(ichamber)->GetEntriesFast(); - // printf(">>> Chamber %2d, Number of recpoints = %6d \n",ichamber+1, nrecpoints); - for(irecpoint=0; irecpoint(muondata.RawClusters(ichamber)->At(irecpoint)); - Int_t Track0 = mRecPoint->GetTrack(0); - Int_t Track1 = mRecPoint->GetTrack(1); - Int_t Track2 = mRecPoint->GetTrack(2); - Int_t Q0 = mRecPoint->GetCharge(0); - Int_t Q1 = mRecPoint->GetCharge(1); - Float_t x0 = mRecPoint->GetX(0); - Float_t x1 = mRecPoint->GetX(1); - Float_t y0 = mRecPoint->GetY(0); - Float_t y1 = mRecPoint->GetY(1); - Float_t z0 = mRecPoint->GetZ(0); - Float_t z1 = mRecPoint->GetZ(1); - Float_t chi2_0 = mRecPoint->GetChi2(0); - //Float_t chi2_1 = mRecPoint->GetChi2(1); - Int_t de = mRecPoint->GetDetElemId(); - printf(">>> >>> RecPoint %4d DetEle %4d (X,Y,Z)=(%7.2f,%7.2f,%8.2f)cm Q0=%4d Q1=%4d Hit=%4d Track1=%4d Track2=%4d Chi2=%6.3f \n", - irecpoint,de,x0,y0,z0,Q0,Q1,Track0, Track1, Track2, chi2_0); - if( (x0!=x1) || (y0!=y1) || (z0!=z1) ) - printf(">>> >>> Warning (X0,Y0,Z0)=(%7.2f, %7.2f, %8.2f)cm != (X1,Y1,Z1)=(%7.2f,%7.2f,%8.2f)cm \n",x0,y0,z0,x1,y1,z1); - } // end recpoint loop - } // end chamber loop - muondata.ResetRawClusters(); - if (event2Check!=0) ievent=nevents; - } // end event loop - MUONLoader->UnloadRecPoints(); -} - -void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root"){ -// reads and dumps trigger objects from MUON.RecPoints.root - TClonesArray * globalTrigger; - TClonesArray * localTrigger; - - // 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; - } - - AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader"); - MUONLoader->LoadDigits("READ"); - // Creating MUON data container - AliMUONData muondata(MUONLoader,"MUON","MUON"); - - - Int_t ievent, nevents; - nevents = RunLoader->GetNumberOfEvents(); - - AliMUONGlobalTrigger *gloTrg; - AliMUONLocalTrigger *locTrg; - - for (ievent=0; ieventGetEvent(ievent); - - muondata.SetTreeAddress("D,GLT"); - muondata.GetTriggerD(); - - globalTrigger = muondata.GlobalTrigger(); - localTrigger = muondata.LocalTrigger(); - - Int_t nglobals = (Int_t) globalTrigger->GetEntriesFast(); // should be 1 - Int_t nlocals = (Int_t) localTrigger->GetEntriesFast(); // up to 234 - printf("###################################################\n"); - cout << " event " << ievent - << " nglobals nlocals: " << nglobals << " " << nlocals << "\n"; - - for (Int_t iglobal=0; iglobal(globalTrigger->At(iglobal)); - - printf("===================================================\n"); - printf(" Global Trigger output Low pt High pt All\n"); - printf(" number of Single Plus :\t"); - printf("%i\t%i\t%i\t",gloTrg->SinglePlusLpt(), - gloTrg->SinglePlusHpt(),gloTrg->SinglePlusApt()); - printf("\n"); - printf(" number of Single Minus :\t"); - printf("%i\t%i\t%i\t",gloTrg->SingleMinusLpt(), - gloTrg->SingleMinusHpt(),gloTrg->SingleMinusApt()); - printf("\n"); - printf(" number of Single Undefined :\t"); - printf("%i\t%i\t%i\t",gloTrg->SingleUndefLpt(), - gloTrg->SingleUndefHpt(),gloTrg->SingleUndefApt()); - printf("\n"); - printf(" number of UnlikeSign pair :\t"); - printf("%i\t%i\t%i\t",gloTrg->PairUnlikeLpt(), - gloTrg->PairUnlikeHpt(),gloTrg->PairUnlikeApt()); - printf("\n"); - printf(" number of LikeSign pair :\t"); - printf("%i\t%i\t%i\t",gloTrg->PairLikeLpt(), - gloTrg->PairLikeHpt(),gloTrg->PairLikeApt()); - printf("\n"); - printf("===================================================\n"); - - } // end of loop on Global Trigger - - for (Int_t ilocal=0; ilocal>> Output for Local Trigger " << ilocal << "\n"; + AliMUONCheck* check + = new AliMUONCheck(fileName.Data(), fileNameSim.Data(), esdsFileName.Data(), + firstEvent, lastEvent, outDir.Data()); - locTrg = static_cast(localTrigger->At(ilocal)); - - cout << "Circuit StripX Dev StripY: " - << locTrg->LoCircuit() << " " - << locTrg->LoStripX() << " " - << locTrg->LoDev() << " " - << locTrg->LoStripY() - << "\n"; - cout << "Lpt Hpt Apt: " - << locTrg->LoLpt() << " " - << locTrg->LoHpt() << " " - << locTrg->LoApt() << "\n"; - - } // end of loop on Local Trigger - muondata.ResetTrigger(); - if (event2Check!=0) ievent=nevents; - } // end loop on event - MUONLoader->UnloadRecPoints(); -} - - - -void MUONrectracks (Int_t event2Check=0, char * filename="galice.root"){ -// reads and dumps trigger objects from MUON.RecPoints.root - TClonesArray * RecTracks; - - // 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; - } - - AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader"); - MUONLoader->LoadTracks("READ"); - // Creating MUON data container - AliMUONData muondata(MUONLoader,"MUON","MUON"); - - Int_t ievent, nevents; - nevents = RunLoader->GetNumberOfEvents(); - - // AliMUONTrack * rectrack; - - for (ievent=0; ieventGetEvent(ievent); - - muondata.SetTreeAddress("RT"); - muondata.GetRecTracks(); - RecTracks = muondata.RecTracks(); - - - Int_t nrectracks = (Int_t) RecTracks->GetEntriesFast(); // - - printf(">>> Event %d, Number of Recconstructed tracks %d \n",ievent, nrectracks); - // loop over tracks - - - Int_t nTrackHits;// nPrimary; - Double_t fitFmin; - Double_t bendingSlope, nonBendingSlope, inverseBendingMomentum; - Double_t xRec, yRec, zRec, chi2MatchTrigger; - Bool_t matchTrigger; + check->CheckESD(); + check->CheckKine(); + check->CheckTrackRef(); + check->CheckOccupancy(); - // setting pointer for tracks, triggertracks & trackparam at vertex - AliMUONTrack* recTrack = 0; - AliMUONTrackParam* trackParam = 0; - - for (Int_t iRecTracks = 0; iRecTracks < nrectracks; iRecTracks++) { - // reading info from tracks - recTrack = (AliMUONTrack*) RecTracks->At(iRecTracks); - trackParam = (AliMUONTrackParam*) (recTrack->GetTrackParamAtHit())->First(); - trackParam->ExtrapToZ(0.0); - bendingSlope = trackParam->GetBendingSlope(); - nonBendingSlope = trackParam->GetNonBendingSlope(); - inverseBendingMomentum = trackParam->GetInverseBendingMomentum(); - xRec = trackParam->GetNonBendingCoor(); - yRec = trackParam->GetBendingCoor(); - zRec = trackParam->GetZ(); - - nTrackHits = recTrack->GetNTrackHits(); - fitFmin = recTrack->GetFitFMin(); - matchTrigger = recTrack->GetMatchTrigger(); - chi2MatchTrigger = recTrack->GetChi2MatchTrigger(); - - printf(">>> RecTrack %4d NofClusters=%2d BendMomentum=%7.2f NonBendSlope=%5.2f BendSlope=%5.2f Match2Trig=%1d (vertex@z=0)=(%5.2f,%5.2f,%5.1f)cm \n", iRecTracks, nTrackHits, 1/inverseBendingMomentum , nonBendingSlope*180./TMath::Pi(), bendingSlope*180./TMath::Pi(), matchTrigger, xRec,yRec,zRec); - } // end loop tracks - - muondata.ResetRecTracks(); - if (event2Check!=0) ievent=nevents; - } // end loop on event - MUONLoader->UnloadTracks(); + // delete check; } - - - - - - - - -