]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/MUONCheck.C
Using AliMpSegmentation instead of AliMpSegFactory which was removed
[u/mrichter/AliRoot.git] / MUON / MUONCheck.C
index b42b40724ab0afc6a5a8b46adde277ac69254183..fb6c203a502187871acdbdeaf04f0fb7268fe8b4 100644 (file)
@@ -36,6 +36,8 @@
 #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")
@@ -220,6 +223,7 @@ void MUONsdigits(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") {
@@ -238,8 +242,8 @@ void MUONoccupancy(Int_t event2Check=0,  Bool_t perDetEle =kFALSE, char * filena
   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];
@@ -259,8 +263,6 @@ void MUONoccupancy(Int_t event2Check=0,  Bool_t perDetEle =kFALSE, char * filena
   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;
@@ -272,10 +274,10 @@ void MUONoccupancy(Int_t event2Check=0,  Bool_t perDetEle =kFALSE, char * filena
       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;
        }  
@@ -312,8 +314,6 @@ void MUONoccupancy(Int_t event2Check=0,  Bool_t perDetEle =kFALSE, char * filena
   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);
@@ -424,7 +424,7 @@ void MUONrecpoints(Int_t event2Check=0, char * filename="galice.root") {
   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
@@ -435,15 +435,13 @@ void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t W
   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");
@@ -452,12 +450,35 @@ void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t W
     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");
   
@@ -473,9 +494,14 @@ void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t W
     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();
     
@@ -487,39 +513,28 @@ void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t W
     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;
@@ -527,39 +542,40 @@ void MUONrectrigger (Int_t event2Check=0, char * filename="galice.root", Int_t W
   
   // 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;
+  
 }
 
 
@@ -573,7 +589,12 @@ void MUONrectracks (Int_t event2Check=0, char * filename="galice.root"){
     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
@@ -602,11 +623,13 @@ void MUONrectracks (Int_t event2Check=0, char * filename="galice.root"){
     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