#include "AliHeader.h"
#include "AliLoader.h"
#include "AliStack.h"
+#include "AliTracker.h"
+#include "AliMagFMaps.h"
// MUON includes
#include "AliMUON.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONTrack.h"
#include "AliMUONTrackParam.h"
-#include "AliMUONTriggerConstants.h"
-#include "AliMUONTriggerCircuitNew.h"
+#include "AliMUONTrackExtrap.h"
+#include "AliMUONTriggerCircuit.h"
+#include "AliMUONTriggerCrateStore.h"
+#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliMpIntPair.h"
#include "AliMpDEManager.h"
-#include "AliMpSegFactory.h"
#endif
void MUONkine(Int_t event2Check=0, char * filename="galice.root")
if (event2Check!=0) ievent=nevents;
} // end event loop
MUONLoader->UnloadSDigits();
+
}
void MUONoccupancy(Int_t event2Check=0, Bool_t perDetEle =kFALSE, char * filename="galice.root") {
Int_t ievent, nevents;
nevents = RunLoader->GetNumberOfEvents();
AliMUONDigit * mDigit =0x0;
- AliMpVSegmentation * segbend = 0x0;
- AliMpVSegmentation * segnonbend = 0x0;
+ const AliMpVSegmentation * segbend = 0x0;
+ const AliMpVSegmentation * segnonbend = 0x0;
AliMpIntPair pad(0,0);
Int_t dEoccupancy_bending[14][26];
Int_t ichamber, nchambers,idetele, detele, ix, iy;
nchambers = AliMUONConstants::NCh(); ;
- AliMpSegFactory factory;
-
for (ichamber=0; ichamber<nchambers; ichamber++) {
cHchannels_bending[ichamber]=0;
cHchannels_nonbending[ichamber]=0;
dEoccupancy_nonbending[ichamber][idetele]=0;
if ( AliMpDEManager::IsValidDetElemId(detele) ) {
- segbend = factory.CreateMpSegmentation(detele, 0);
- segnonbend = factory.CreateMpSegmentation(detele, 1);
+ segbend = AliMpSegmentation::Instance()->GetMpSegmentation(detele, 0);
+ segnonbend = AliMpSegmentation::Instance()->GetMpSegmentation(detele, 1);
if (AliMpDEManager::GetPlaneType(detele, 0) != kBendingPlane ) {
- AliMpVSegmentation* tmp = segbend;
+ const AliMpVSegmentation* tmp = segbend;
segbend = segnonbend;
segnonbend = tmp;
}
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);
MUONLoader->UnloadRecPoints();
}
-void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t WRITE = 0)
+void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t WRITE = 0, Bool_t readFromRP = 0)
{
// reads and dumps trigger objects from MUON.RecPoints.root
Int_t PRINTOUT = (event2Check == 0 ) ? 0 : 1 ;
// Book a ntuple for more detailled studies
- TNtuple *TgtupleGlo = new TNtuple("TgtupleGlo","Global Trigger Ntuple","ev:global:spapt:smapt:undefapt:uplpt:uphpt:upapt:lpapt");
- TNtuple *TgtupleLoc = new TNtuple("TgtupleLoc","Local Trigger Ntuple","ev:LoCircuit:LoStripX:LoDev:StripY:LoLpt:LoHpt:LoApt:y11:y21:x11");
+ TNtuple *TgtupleGlo = new TNtuple("TgtupleGlo","Global Trigger Ntuple","ev:global:slpt:shpt:uplpt:uphpt:lplpt:lplpt");
+ TNtuple *TgtupleLoc = new TNtuple("TgtupleLoc","Local Trigger Ntuple","ev:LoCircuit:LoStripX:LoDev:StripY:LoLpt:LoHpt:y11:y21:x11");
// counters
- Int_t SPLowpt=0,SPHighpt=0,SPAllpt=0;
- Int_t SMLowpt=0,SMHighpt=0,SMAllpt=0;
- Int_t SULowpt=0,SUHighpt=0,SUAllpt=0;
- Int_t USLowpt=0,USHighpt=0,USAllpt=0;
- Int_t LSLowpt=0,LSHighpt=0,LSAllpt=0;
+ Int_t SLowpt=0,SHighpt=0;
+ Int_t USLowpt=0,USHighpt=0;
+ Int_t LSLowpt=0,LSHighpt=0;
// Creating Run Loader and openning file containing Hits
AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ");
return;
}
- // Loading MUON subsystem
- RunLoader->LoadgAlice();
- AliMUON* pMUON = (AliMUON*)RunLoader->GetAliRun()->GetModule("MUON");
+ AliMUONTriggerCrateStore* crateManager = new AliMUONTriggerCrateStore();
+ crateManager->ReadFromFile();
+
+ AliMUONGeometryTransformer* transformer = new AliMUONGeometryTransformer(kFALSE);
+ transformer->ReadGeometryData("volpath.dat", "geometry.root");
+
+ TClonesArray* triggerCircuit = new TClonesArray("AliMUONTriggerCircuit", 234);
+
+ for (Int_t i = 0; i < AliMUONConstants::NTriggerCircuit(); i++) {
+ AliMUONTriggerCircuit* c = new AliMUONTriggerCircuit();
+ c->SetTransformer(transformer);
+ c->Init(i,*crateManager);
+ TClonesArray& circuit = *triggerCircuit;
+ new(circuit[circuit.GetEntriesFast()])AliMUONTriggerCircuit(*c);
+ delete c;
+ }
+ Char_t fileName[30];
AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
- MUONLoader->LoadDigits("READ");
+ if (!readFromRP) {
+ cout << " reading from digits \n";
+ MUONLoader->LoadDigits("READ");
+ sprintf(fileName,"TriggerCheckFromDigits.root");
+ } else {
+ cout << " reading from RecPoints \n";
+ MUONLoader->LoadRecPoints("READ");
+ sprintf(fileName,"TriggerCheckFromRP.root");
+ }
+
// Creating MUON data container
AliMUONData muondata(MUONLoader,"MUON","MUON");
if (ievent%100==0 || event2Check) cout << "Processing event " << ievent << endl;
RunLoader->GetEvent(ievent);
- muondata.SetTreeAddress("D,GLT");
- muondata.GetTriggerD();
-
+ if (!readFromRP) {
+ muondata.SetTreeAddress("D,GLT");
+ muondata.GetTriggerD();
+ } else {
+ muondata.SetTreeAddress("RC,TC");
+ muondata.GetTrigger();
+ }
+
globalTrigger = muondata.GlobalTrigger();
localTrigger = muondata.LocalTrigger();
for (Int_t iglobal=0; iglobal<nglobals; iglobal++) { // Global Trigger
gloTrg = static_cast<AliMUONGlobalTrigger*>(globalTrigger->At(iglobal));
- SPLowpt+=gloTrg->SinglePlusLpt() ;
- SPHighpt+=gloTrg->SinglePlusHpt() ;
- SPAllpt+=gloTrg->SinglePlusApt() ;
- SMLowpt+=gloTrg->SingleMinusLpt();
- SMHighpt+=gloTrg->SingleMinusHpt();
- SMAllpt+=gloTrg->SingleMinusApt();
- SULowpt+=gloTrg->SingleUndefLpt();
- SUHighpt+=gloTrg->SingleUndefHpt();
- SUAllpt+=gloTrg->SingleUndefApt();
+ SLowpt+=gloTrg->SingleLpt() ;
+ SHighpt+=gloTrg->SingleHpt() ;
USLowpt+=gloTrg->PairUnlikeLpt();
USHighpt+=gloTrg->PairUnlikeHpt();
- USAllpt+=gloTrg->PairUnlikeApt();
LSLowpt+=gloTrg->PairLikeLpt();
LSHighpt+=gloTrg->PairLikeHpt();
- LSAllpt+=gloTrg->PairLikeApt();
if (PRINTOUT) gloTrg->Print("full");
} // end of loop on Global Trigger
-
+
for (Int_t ilocal=0; ilocal<nlocals; ilocal++) { // Local Trigger
locTrg = static_cast<AliMUONLocalTrigger*>(localTrigger->At(ilocal));
if (PRINTOUT) locTrg->Print("full");
- AliMUONTriggerCircuitNew * circuit = &(pMUON->TriggerCircuitNew(locTrg->LoCircuit()-1));
+ AliMUONTriggerCircuit* circuit = (AliMUONTriggerCircuit*)triggerCircuit->At(locTrg->LoCircuit()-1);
- TgtupleLoc->Fill(ievent,locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoDev(),locTrg->LoStripY(),locTrg->LoLpt(),locTrg->LoHpt(),locTrg->LoApt(),circuit->GetY11Pos(locTrg->LoStripX()),circuit->GetY21Pos(locTrg->LoStripX()+locTrg->LoDev()+1),circuit->GetX11Pos(locTrg->LoStripY()));
+ TgtupleLoc->Fill(ievent,locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoDev(),locTrg->LoStripY(),locTrg->LoLpt(),locTrg->LoHpt(),circuit->GetY11Pos(locTrg->LoStripX()),circuit->GetY21Pos(locTrg->LoStripX()+locTrg->LoDev()+1),circuit->GetX11Pos(locTrg->LoStripY()));
} // end of loop on Local Trigger
-
// fill ntuple
- //TNtuple *Tgtuple = new TNtuple("Tgtuple","Trigger Ntuple","ev:global:spapt:smapt:undefapt:uplpt:uphpt:upapt:lpapt");
- TgtupleGlo->Fill(ievent,nglobals,gloTrg->SinglePlusApt(),gloTrg->SingleMinusApt(),gloTrg->SingleUndefApt(),gloTrg->PairUnlikeLpt(),gloTrg->PairUnlikeHpt(),gloTrg->PairUnlikeApt(),gloTrg->PairLikeApt());
+ TgtupleGlo->Fill(ievent,nglobals,gloTrg->SingleLpt(),gloTrg->SingleHpt(),gloTrg->PairUnlikeLpt(),gloTrg->PairUnlikeHpt(),gloTrg->PairLikeLpt(),gloTrg->PairLikeHpt());
muondata.ResetTrigger();
if (event2Check!=0) ievent=nevents;
// Print out summary if loop ran over all event
if (!event2Check){
+
printf("\n");
- printf("===================================================\n");
- printf("=================== SUMMARY =====================\n");
+ printf("=============================================\n");
+ printf("================ SUMMARY ==================\n");
printf("\n");
printf("Total number of events processed %d \n", (event2Check==0) ? nevents : 1);
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",SPLowpt,SPHighpt,SPAllpt);
- printf("\n");
- printf(" number of Single Minus :\t");
- printf("%i\t%i\t%i\t",SMLowpt,SMHighpt,SMAllpt);
- printf("\n");
- printf(" number of Single Undefined :\t");
- printf("%i\t%i\t%i\t",SULowpt,SUHighpt,SUAllpt);
+ printf(" Global Trigger output Low pt High pt\n");
+ printf(" number of Single :\t");
+ printf("%i\t%i\t",SLowpt,SHighpt);
printf("\n");
printf(" number of UnlikeSign pair :\t");
- printf("%i\t%i\t%i\t",USLowpt,USHighpt,USAllpt);
+ printf("%i\t%i\t",USLowpt,USHighpt);
printf("\n");
printf(" number of LikeSign pair :\t");
- printf("%i\t%i\t%i\t",LSLowpt,LSHighpt, LSAllpt);
+ printf("%i\t%i\t",LSLowpt,LSHighpt);
printf("\n");
- printf("===================================================\n");
+ printf("=============================================\n");
+ fflush(stdout);
}
if (WRITE){
- TFile *myFile = new TFile("TriggerCheck.root", "RECREATE");
- TgtupleGlo->Write();
- TgtupleLoc->Write();
- myFile->Close();
+ TFile *myFile = new TFile(fileName, "RECREATE");
+ TgtupleGlo->Write();
+ TgtupleLoc->Write();
+ myFile->Close();
}
MUONLoader->UnloadRecPoints();
+
+ delete crateManager;
+ delete transformer;
+ delete triggerCircuit;
+
}
printf(">>> Error : Error Opening %s file \n",filename);
return;
}
-
+ // waiting for mag field in CDB
+ printf("Loading field map...\n");
+ if (!AliTracker::GetFieldMap()) {
+ AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
+ AliTracker::SetFieldMap(field, kFALSE);
+ }
AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
MUONLoader->LoadTracks("READ");
// Creating MUON data container
AliMUONTrack* recTrack = 0;
AliMUONTrackParam* trackParam = 0;
+ // set the magnetic field for track extrapolations
+ AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
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);
+ AliMUONTrackExtrap::ExtrapToZ(trackParam,0.);
recTrack->Print("full");
} // end loop tracks