#include "AliMUONConstants.h"
#include "AliMUONHitForRec.h"
#include "AliMUONTriggerTrack.h"
-#include "AliMUONTriggerCircuit.h"
#include "AliMUONTriggerCircuitNew.h"
#include "AliMUONRawCluster.h"
#include "AliMUONLocalTrigger.h"
#include "AliRunLoader.h"
#include "AliLoader.h"
#include "AliMUONTrackK.h"
-#include "AliMC.h"
#include "AliLog.h"
-#include "AliTrackReference.h"
//************* Defaults parameters for reconstruction
const Double_t AliMUONTrackReconstructor::fgkDefaultMinBendingMomentum = 3.0;
const Double_t AliMUONTrackReconstructor::fgkDefaultSimpleBValue = 7.0;
const Double_t AliMUONTrackReconstructor::fgkDefaultSimpleBLength = 428.0;
const Double_t AliMUONTrackReconstructor::fgkDefaultSimpleBPosition = 1019.0;
-const Int_t AliMUONTrackReconstructor::fgkDefaultRecTrackRefHits = 0;
const Double_t AliMUONTrackReconstructor::fgkDefaultEfficiency = 0.95;
ClassImp(AliMUONTrackReconstructor) // Class implementation in ROOT context
//__________________________________________________________________________
AliMUONTrackReconstructor::AliMUONTrackReconstructor(AliLoader* loader, AliMUONData* data)
- : TObject()
+ : TObject(),
+ fTrackMethod(1), //AZ - tracking method (1-default, 2-Kalman)
+ fMinBendingMomentum(fgkDefaultMinBendingMomentum),
+ fMaxBendingMomentum(fgkDefaultMaxBendingMomentum),
+ fMaxChi2(fgkDefaultMaxChi2),
+ fMaxSigma2Distance(fgkDefaultMaxSigma2Distance),
+ fBendingResolution(fgkDefaultBendingResolution),
+ fNonBendingResolution(fgkDefaultNonBendingResolution),
+ fChamberThicknessInX0(fgkDefaultChamberThicknessInX0),
+ fSimpleBValue(fgkDefaultSimpleBValue),
+ fSimpleBLength(fgkDefaultSimpleBLength),
+ fSimpleBPosition(fgkDefaultSimpleBPosition),
+ fEfficiency(fgkDefaultEfficiency),
+ fHitsForRecPtr(0x0),
+ fNHitsForRec(0),
+ fRecTracksPtr(0x0),
+ fNRecTracks(0),
+ fRecTrackHitsPtr(0x0),
+ fNRecTrackHits(0),
+ fMUONData(data),
+ fLoader(loader),
+ fMuons(0),
+ fTriggerTrack(new AliMUONTriggerTrack())
+
{
// Constructor for class AliMUONTrackReconstructor
SetReconstructionParametersToDefaults();
- fTrackMethod = 1; //AZ - tracking method (1-default, 2-Kalman)
+
// Memory allocation for the TClonesArray of hits for reconstruction
// Is 10000 the right size ????
fHitsForRecPtr = new TClonesArray("AliMUONHitForRec", 10000);
- fNHitsForRec = 0; // really needed or GetEntriesFast sufficient ????
+
// Memory allocation for the TClonesArray's of segments in stations
// Is 2000 the right size ????
for (Int_t st = 0; st < AliMUONConstants::NTrackingCh()/2; st++) {
// Memory allocation for the TClonesArray of reconstructed tracks
// Is 10 the right size ????
fRecTracksPtr = new TClonesArray("AliMUONTrack", 10);
- fNRecTracks = 0; // really needed or GetEntriesFast sufficient ????
+
// Memory allocation for the TClonesArray of hits on reconstructed tracks
// Is 100 the right size ????
fRecTrackHitsPtr = new TClonesArray("AliMUONTrackHit", 100);
- fNRecTrackHits = 0; // really needed or GetEntriesFast sufficient ????
// Sign of fSimpleBValue according to sign of Bx value at (50,50,-950).
Float_t b[3], x[3];
AliDebug(1,"Magnetic field from root file:");
if ( AliLog::GetGlobalDebugLevel()>0) gAlice->Field()->Dump();
-
- // Initializions for track ref. background events
- fBkgTrackRefFile = 0;
- fBkgTrackRefTK = 0;
- fBkgTrackRefParticles = 0;
- fBkgTrackRefTTR = 0;
- fBkgTrackRefEventNumber = -1;
-
- // initialize loader's
- fLoader = loader;
-
// initialize container
// fMUONData = new AliMUONData(fLoader,"MUON","MUON");
- fMUONData = data;
+ //fMUONData = data;
return;
}
- //__________________________________________________________________________
-AliMUONTrackReconstructor::AliMUONTrackReconstructor (const AliMUONTrackReconstructor& rhs)
- : TObject(rhs)
-{
-// Protected copy constructor
-
- AliFatal("Not implemented.");
-}
-
-AliMUONTrackReconstructor &
-AliMUONTrackReconstructor::operator=(const AliMUONTrackReconstructor& rhs)
-{
-// Protected assignement operator
-
- if (this == &rhs) return *this;
-
- AliFatal("Not implemented.");
-
- return *this;
-}
//__________________________________________________________________________
AliMUONTrackReconstructor::~AliMUONTrackReconstructor(void)
delete fHitsForRecPtr; // Correct destruction of everything ???? or delete [] ????
for (Int_t st = 0; st < AliMUONConstants::NTrackingCh()/2; st++)
delete fSegmentsPtr[st]; // Correct destruction of everything ????
- return;
+
+ delete fTriggerTrack;
}
//__________________________________________________________________________
{
// Set reconstruction parameters to default values
// Would be much more convenient with a structure (or class) ????
- fMinBendingMomentum = fgkDefaultMinBendingMomentum;
- fMaxBendingMomentum = fgkDefaultMaxBendingMomentum;
- fMaxChi2 = fgkDefaultMaxChi2;
- fMaxSigma2Distance = fgkDefaultMaxSigma2Distance;
// ******** Parameters for making HitsForRec
// minimum radius,
fSegmentMaxDistBending[4] = TMath::Abs( 6.0 *
(AliMUONConstants::DefaultChamberZ(9) - AliMUONConstants::DefaultChamberZ(8)) / 20.0);
-
- fBendingResolution = fgkDefaultBendingResolution;
- fNonBendingResolution = fgkDefaultNonBendingResolution;
- fChamberThicknessInX0 = fgkDefaultChamberThicknessInX0;
- fSimpleBValue = fgkDefaultSimpleBValue;
- fSimpleBLength = fgkDefaultSimpleBLength;
- fSimpleBPosition = fgkDefaultSimpleBPosition;
- fRecTrackRefHits = fgkDefaultRecTrackRefHits;
- fEfficiency = fgkDefaultEfficiency;
return;
}
ImpactParam);
}
-//__________________________________________________________________________
-void AliMUONTrackReconstructor::SetBkgTrackRefFile(Text_t *BkgTrackRefFileName)
-{
- // Set background file ... for track ref. hits
- // Must be called after having loaded the firts signal event
- AliDebug(1,Form("Enter SetBkgTrackRefFile with BkgTrackRefFileName %s",BkgTrackRefFileName));
-
- if (strlen(BkgTrackRefFileName)) {
- // BkgTrackRefFileName not empty: try to open the file
-
- if(AliLog::GetGlobalDebugLevel()>1) {
- cout << "Before File(Bkg)" << endl; gDirectory->Dump();
- }
- fBkgTrackRefFile = new TFile(BkgTrackRefFileName);
- if(AliLog::GetGlobalDebugLevel()>1) {
- cout << "After File(Bkg)" << endl; gDirectory->Dump();
- }
- if (fBkgTrackRefFile-> IsOpen()) {
- if(AliLog::GetGlobalDebugLevel()>0) {
- cout << "Background for Track ref. hits in file: ``" << BkgTrackRefFileName
- << "'' successfully opened" << endl;}
- }
- else {
- cout << "Background for Track Ref. hits in file: " << BkgTrackRefFileName << endl;
- cout << "NOT FOUND: EXIT" << endl;
- exit(0); // right instruction for exit ????
- }
- // Arrays for "particles" and "hits"
- fBkgTrackRefParticles = new TClonesArray("TParticle", 200);
- // Event number to -1 for initialization
- fBkgTrackRefEventNumber = -1;
- // Back to the signal file:
- // first signal event must have been loaded previously,
- // otherwise, Segmentation violation at the next instruction
- // How is it possible to do smething better ????
- ((gAlice->TreeK())->GetCurrentFile())->cd();
- if(AliLog::GetGlobalDebugLevel()>1) cout << "After cd(gAlice)" << endl; gDirectory->Dump();
- }
- return;
-}
-
-//__________________________________________________________________________
-void AliMUONTrackReconstructor::NextBkgTrackRefEvent(void)
-{
- // Get next event in background file for track ref. hits
- // Goes back to event number 0 when end of file is reached
- char treeName[20];
-
- AliDebug(1,"Enter NextBkgTrackRefEvent");
- // Clean previous event
- if(fBkgTrackRefTK) delete fBkgTrackRefTK;
- fBkgTrackRefTK = NULL;
- if(fBkgTrackRefParticles) fBkgTrackRefParticles->Clear();
- if(fBkgTrackRefTTR) delete fBkgTrackRefTTR;
- fBkgTrackRefTTR = NULL;
- // Increment event number
- fBkgTrackRefEventNumber++;
- // Get access to Particles and Hits for event from background file
- if (AliLog::GetGlobalDebugLevel()>1) cout << "Before cd(Bkg)" << endl; gDirectory->Dump();
- fBkgTrackRefFile->cd();
- if (AliLog::GetGlobalDebugLevel()>1) cout << "After cd(Bkg)" << endl; gDirectory->Dump();
- // Particles: TreeK for event and branch "Particles"
- sprintf(treeName, "TreeK%d", fBkgTrackRefEventNumber);
- fBkgTrackRefTK = (TTree*)gDirectory->Get(treeName);
- if (!fBkgTrackRefTK) {
-
- AliDebug(1,Form("Cannot find Kine Tree for background event: %d",fBkgTrackRefEventNumber));
- AliDebug(1,"Goes back to event 0");
-
- fBkgTrackRefEventNumber = 0;
- sprintf(treeName, "TreeK%d", fBkgTrackRefEventNumber);
- fBkgTrackRefTK = (TTree*)gDirectory->Get(treeName);
- if (!fBkgTrackRefTK) {
- AliError(Form("cannot find Kine Tree for background event: %d",fBkgTrackRefEventNumber));
- exit(0);
- }
- }
- if (fBkgTrackRefTK)
- fBkgTrackRefTK->SetBranchAddress("Particles", &fBkgTrackRefParticles);
- fBkgTrackRefTK->GetEvent(0); // why event 0 ???? necessary ????
- // Hits: TreeH for event and branch "MUON"
- sprintf(treeName, "TreeTR%d", fBkgTrackRefEventNumber);
- fBkgTrackRefTTR = (TTree*)gDirectory->Get(treeName);
- if (!fBkgTrackRefTTR) {
- AliError(Form("cannot find Hits Tree for background event: %d",fBkgTrackRefEventNumber));
- exit(0);
- }
- fBkgTrackRefTTR->GetEntries(); // necessary ????
- // Back to the signal file
- ((gAlice->TreeK())->GetCurrentFile())->cd();
- if (AliLog::GetGlobalDebugLevel()>1)
- cout << "After cd(gAlice)" << endl; gDirectory->Dump();
- return;
-}
-
//__________________________________________________________________________
void AliMUONTrackReconstructor::EventReconstruct(void)
{
// To reset the array and the number of HitsForRec,
// and also the number of HitsForRec
// and the index of the first HitForRec per chamber
- if (fHitsForRecPtr) fHitsForRecPtr->Clear();
+ if (fHitsForRecPtr) fHitsForRecPtr->Delete();
fNHitsForRec = 0;
for (Int_t ch = 0; ch < AliMUONConstants::NTrackingCh(); ch++)
fNHitsForRecPerChamber[ch] = fIndexOfFirstHitForRecPerChamber[ch] = 0;
AliDebug(1,"Enter MakeEventToBeReconstructed");
//AZ ResetHitsForRec();
- if (fRecTrackRefHits == 1) {
- // Reconstruction from track ref. hits
- // Back to the signal file
- TTree* treeTR = runLoader->TreeTR();
- if (treeTR == 0x0)
- {
- Int_t retval = runLoader->LoadTrackRefs("READ");
- if ( retval)
- {
- AliError("Error occured while loading hits.");
- return;
- }
- treeTR = runLoader->TreeTR();
- if (treeTR == 0x0)
- {
- AliError("Can not get TreeTR");
- return;
- }
- }
-
- AddHitsForRecFromTrackRef(treeTR,1);
-
- // Background hits
- AddHitsForRecFromTrackRef(fBkgTrackRefTTR,0);
- // Sort HitsForRec in increasing order with respect to chamber number
- SortHitsForRecWithIncreasingChamber();
- }
- else {
- // Reconstruction from raw clusters
- // AliMUON *MUON = (AliMUON*) gAlice->GetModule("MUON"); // necessary ????
- // Security on MUON ????
- // TreeR assumed to be be "prepared" in calling function
- // by "MUON->GetTreeR(nev)" ????
- TTree *treeR = fLoader->TreeR();
- //AZ? fMUONData->SetTreeAddress("RC");
- AddHitsForRecFromRawClusters(treeR);
- // No sorting: it is done automatically in the previous function
- }
+
+ // Reconstruction from raw clusters
+ // AliMUON *MUON = (AliMUON*) gAlice->GetModule("MUON"); // necessary ????
+ // Security on MUON ????
+ // TreeR assumed to be be "prepared" in calling function
+ // by "MUON->GetTreeR(nev)" ????
+ TTree *treeR = fLoader->TreeR();
+
+ //AZ? fMUONData->SetTreeAddress("RC");
+ AddHitsForRecFromRawClusters(treeR);
+ // No sorting: it is done automatically in the previous function
+
AliDebug(1,"End of MakeEventToBeReconstructed");
if (AliLog::GetGlobalDebugLevel() > 0) {
return;
}
- //__________________________________________________________________________
-void AliMUONTrackReconstructor::AddHitsForRecFromTrackRef(TTree *TTR, Int_t signal)
-{
- // To add to the list of hits for reconstruction
- // the signal hits from a track reference tree TreeTR.
- TClonesArray *listOfTrackRefs = NULL;
- AliTrackReference *trackRef;
-
- Int_t track = 0;
- AliDebug(2,Form("Enter AddHitsForRecFromTrackRef with TTR: %d", TTR));
- if (TTR == NULL) return;
-
- listOfTrackRefs = CleanTrackRefs(TTR);
-
- Int_t ntracks = listOfTrackRefs->GetEntriesFast();
-
- AliDebug(2,Form("ntracks: %d", ntracks));
-
- for (Int_t index = 0; index < ntracks; index++) {
- trackRef = (AliTrackReference*) listOfTrackRefs->At(index);
- track = trackRef->GetTrack();
-
- NewHitForRecFromTrackRef(trackRef,track,signal);
- } // end of track ref.
-
- listOfTrackRefs->Delete();
- delete listOfTrackRefs;
- return;
-}
-
-
- //__________________________________________________________________________
-AliMUONHitForRec* AliMUONTrackReconstructor::NewHitForRecFromTrackRef(AliTrackReference* Hit, Int_t TrackNumber, Int_t Signal)
-{
- // To make a new hit for reconstruction from a track ref. hit pointed to by "Hit",
- // with the track numbered "TrackNumber",
- // either from signal ("Signal" = 1) or background ("Signal" = 0) event.
- // Selects hits in tracking (not trigger) chambers.
- // Takes into account the efficiency (fEfficiency)
- // and the smearing from resolution (fBendingResolution and fNonBendingResolution).
- // Adds a condition on the radius between RMin and RMax
- // to better simulate the real chambers.
- // Returns the pointer to the new hit for reconstruction,
- // or NULL in case of inefficiency or non tracking chamber or bad radius.
- // No condition on at most 20 cm from a muon from a resonance
- // like in Fortran TRACKF_STAT.
- AliMUONHitForRec* hitForRec;
- Double_t bendCoor, nonBendCoor, radius;
- Int_t chamber = AliMUONConstants::ChamberNumber(Hit->Z()); // chamber(0...)
- if (chamber < 0) return NULL;
- // only in tracking chambers (fChamber starts at 1)
- if (chamber >= AliMUONConstants::NTrackingCh()) return NULL;
- // only if hit is efficient (keep track for checking ????)
- if (gRandom->Rndm() > fEfficiency) return NULL;
- // only if radius between RMin and RMax
- bendCoor = Hit->Y();
- nonBendCoor = Hit->X();
- radius = TMath::Sqrt((bendCoor * bendCoor) + (nonBendCoor * nonBendCoor));
- // This cut is not needed with a realistic chamber geometry !!!!
-// if ((radius < fRMin[chamber]) || (radius > fRMax[chamber])) return NULL;
- // new AliMUONHitForRec from track ref. hit and increment number of AliMUONHitForRec's
- hitForRec = new ((*fHitsForRecPtr)[fNHitsForRec]) AliMUONHitForRec(Hit);
- fNHitsForRec++;
- // add smearing from resolution
- hitForRec->SetBendingCoor(bendCoor + gRandom->Gaus(0., fBendingResolution));
- hitForRec->SetNonBendingCoor(nonBendCoor
- + gRandom->Gaus(0., fNonBendingResolution));
-// // !!!! without smearing
-// hitForRec->SetBendingCoor(bendCoor);
-// hitForRec->SetNonBendingCoor(nonBendCoor);
- // more information into HitForRec
- // resolution: angular effect to be added here ????
- hitForRec->SetBendingReso2(fBendingResolution * fBendingResolution);
- hitForRec->SetNonBendingReso2(fNonBendingResolution * fNonBendingResolution);
- // track ref. info
- hitForRec->SetTTRTrack(TrackNumber);
- hitForRec->SetTrackRefSignal(Signal);
- if (AliLog::GetGlobalDebugLevel()> 1) {
- AliDebug(2,Form("Track: %d", TrackNumber));
- Hit->Dump();
- cout << "AliMUONHitForRec number (1...): " << fNHitsForRec << endl;
- hitForRec->Dump();
- }
- return hitForRec;
-}
- //__________________________________________________________________________
-TClonesArray* AliMUONTrackReconstructor::CleanTrackRefs(TTree *treeTR)
-{
- // Make hits from track ref..
- // Re-calculate hits parameters because two AliTrackReferences are recorded for
- // each chamber (one when particle is entering + one when particle is leaving
- // the sensitive volume)
-
- AliTrackReference *trackReference;
- Float_t x1, y1, z1, pX1, pY1, pZ1;
- Float_t x2, y2, z2, pX2, pY2, pZ2;
- Int_t track1, track2;
- Int_t nRec = 0;
- Float_t maxGasGap = 1.; // cm
- Int_t iHit1 = 0;
- Int_t iHitMin = 0;
-
- AliTrackReference *trackReferenceNew = new AliTrackReference();
-
- TClonesArray* trackRefs = new TClonesArray("AliTrackReference", 10);
- TClonesArray* cleanTrackRefs = new TClonesArray("AliTrackReference", 10);
-
- if (treeTR == NULL) return NULL;
- TBranch* branch = treeTR->GetBranch("MUON");
- if (branch == NULL) return NULL;
- branch->SetAddress(&trackRefs);
-
- Int_t nTrack = (Int_t)treeTR->GetEntries();
- for (Int_t iTrack = 0; iTrack < nTrack; iTrack++) {
- treeTR->GetEntry(iTrack);
- iHitMin = 0;
- iHit1 = 0;
- while (iHit1 < trackRefs->GetEntries()) {
- trackReference = (AliTrackReference*)trackRefs->At(iHit1);
- x1 = trackReference->X();
- y1 = trackReference->Y();
- z1 = trackReference->Z();
- pX1 = trackReference->Px();
- pY1 = trackReference->Py();
- pZ1 = trackReference->Pz();
- track1 = trackReference->GetTrack();
- nRec = 1;
- iHitMin = iHit1+1;
- for (Int_t iHit2 = iHit1+1; iHit2 < trackRefs->GetEntries(); iHit2++) {
- trackReference = (AliTrackReference*)trackRefs->At(iHit2);
- x2 = trackReference->X();
- y2 = trackReference->Y();
- z2 = trackReference->Z();
- pX2 = trackReference->Px();
- pY2 = trackReference->Py();
- pZ2 = trackReference->Pz();
- track2 = trackReference->GetTrack();
- if (track2 == track1 && TMath::Abs(z2-z1) < maxGasGap ) {
- nRec++;
- x1 += x2;
- y1 += y2;
- z1 += z2;
- pX1 += pX2;
- pY1 += pY2;
- pZ1 += pZ2;
- iHitMin = iHit2+1;
- }
-
- } // for iHit2
- x1 /= (Float_t)nRec;
- y1 /= (Float_t)nRec;
- z1 /= (Float_t)nRec;
- pX1 /= (Float_t)nRec;
- pY1 /= (Float_t)nRec;
- pZ1 /= (Float_t)nRec;
- trackReferenceNew->SetPosition(x1,y1,z1);
- trackReferenceNew->SetMomentum(pX1,pY1,pZ1);
- trackReferenceNew->SetTrack(track1);
- {new ((*cleanTrackRefs)[cleanTrackRefs->GetEntriesFast()]) AliTrackReference(*trackReferenceNew);}
- iHit1 = iHitMin;
- } // while iHit1
- } // for track
-
- trackRefs->Delete();
- delete trackRefs;
- delete trackReferenceNew;
- return cleanTrackRefs;
-
-}
//__________________________________________________________________________
void AliMUONTrackReconstructor::SortHitsForRecWithIncreasingChamber()
{
AliMUONLocalTrigger *locTrg;
AliMUONGlobalTrigger *gloTrg;
- AliMUONTriggerTrack *recTriggerTrack = 0;
-
TTree* treeR = fLoader->TreeR();
// Loading MUON subsystem
AliMUON * pMUON = (AliMUON *) gAlice->GetDetector("MUON");
- // Not really clean, but for the moment we must check whether the
- // trigger uses new or old TriggerCircuit
- Bool_t newTrigger=kFALSE;
- if ( pMUON->DigitizerType().Contains("NewTrigger") ) newTrigger = kTRUE;
nTRentries = Int_t(treeR->GetEntries());
// global trigger for trigger pattern
gloTrigPat = 0;
globalTrigger = fMUONData->GlobalTrigger();
- gloTrg = (AliMUONGlobalTrigger*)globalTrigger->UncheckedAt(0);
- if (gloTrg) {
- if (gloTrg->SinglePlusLpt()) gloTrigPat|= 0x1;
- if (gloTrg->SinglePlusHpt()) gloTrigPat|= 0x2;
- if (gloTrg->SinglePlusApt()) gloTrigPat|= 0x4;
-
- if (gloTrg->SingleMinusLpt()) gloTrigPat|= 0x8;
- if (gloTrg->SingleMinusHpt()) gloTrigPat|= 0x10;
- if (gloTrg->SingleMinusApt()) gloTrigPat|= 0x20;
-
- if (gloTrg->SingleUndefLpt()) gloTrigPat|= 0x40;
- if (gloTrg->SingleUndefHpt()) gloTrigPat|= 0x80;
- if (gloTrg->SingleUndefApt()) gloTrigPat|= 0x100;
-
- if (gloTrg->PairUnlikeLpt()) gloTrigPat|= 0x200;
- if (gloTrg->PairUnlikeHpt()) gloTrigPat|= 0x400;
- if (gloTrg->PairUnlikeApt()) gloTrigPat|= 0x800;
-
- if (gloTrg->PairLikeLpt()) gloTrigPat|= 0x1000;
- if (gloTrg->PairLikeHpt()) gloTrigPat|= 0x2000;
- if (gloTrg->PairLikeApt()) gloTrigPat|= 0x4000;
- }
+ gloTrg = (AliMUONGlobalTrigger*)globalTrigger->UncheckedAt(0);
+
+ if (gloTrg)
+ gloTrigPat = gloTrg->GetGlobalPattern();
+
// local trigger for tracking
localTrigger = fMUONData->LocalTrigger();
for (Int_t i=0; i<nlocals; i++) { // loop on Local Trigger
locTrg = (AliMUONLocalTrigger*)localTrigger->UncheckedAt(i);
- if (!newTrigger) { // old trigger
-// printf("AliMUONTrackReconstructor::MakeTriggerTrack using OLD trigger \n");
- AliMUONTriggerCircuit * circuit = &(pMUON->TriggerCircuit(locTrg->LoCircuit()));
- y11 = circuit->GetY11Pos(locTrg->LoStripX());
- stripX21 = locTrg->LoStripX()+locTrg->LoDev()+1;
- y21 = circuit->GetY21Pos(stripX21);
- x11 = circuit->GetX11Pos(locTrg->LoStripY());
- } else { // new trigger
-// printf("AliMUONTrackReconstructor::MakeTriggerTrack using NEW trigger \n");
- AliMUONTriggerCircuitNew * circuit =
- &(pMUON->TriggerCircuitNew(locTrg->LoCircuit()-1)); // -1 !!!
- y11 = circuit->GetY11Pos(locTrg->LoStripX());
- stripX21 = locTrg->LoStripX()+locTrg->LoDev()+1;
- y21 = circuit->GetY21Pos(stripX21);
- x11 = circuit->GetX11Pos(locTrg->LoStripY());
- }
-// printf(" MakeTriggerTrack %d %d %d %d %d %f %f %f \n",i,locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoStripX()+locTrg->LoDev()+1,locTrg->LoStripY(),y11, y21, x11);
-
- Float_t thetax = TMath::ATan2( x11 , z11 );
- Float_t thetay = TMath::ATan2( (y21-y11) , (z21-z11) );
+ AliDebug(1, "AliMUONTrackReconstructor::MakeTriggerTrack using NEW trigger \n");
+ AliMUONTriggerCircuitNew * circuit =
+ &(pMUON->TriggerCircuitNew(locTrg->LoCircuit()-1)); // -1 !!!
+ y11 = circuit->GetY11Pos(locTrg->LoStripX());
+ stripX21 = locTrg->LoStripX()+locTrg->LoDev()+1;
+ y21 = circuit->GetY21Pos(stripX21);
+ x11 = circuit->GetX11Pos(locTrg->LoStripY());
- recTriggerTrack = new AliMUONTriggerTrack(x11,y11,thetax,thetay,gloTrigPat);
+ AliDebug(1, Form(" MakeTriggerTrack %d %d %d %d %d %f %f %f \n",i,locTrg->LoCircuit(),
+ locTrg->LoStripX(),locTrg->LoStripX()+locTrg->LoDev()+1,locTrg->LoStripY(),y11, y21, x11));
- // since static statement does not work, set gloTrigPat for each track
+ Float_t thetax = TMath::ATan2( x11 , z11 );
+ Float_t thetay = TMath::ATan2( (y21-y11) , (z21-z11) );
- fMUONData->AddRecTriggerTrack(*recTriggerTrack);
- delete recTriggerTrack;
+ fTriggerTrack->SetX11(x11);
+ fTriggerTrack->SetY11(y11);
+ fTriggerTrack->SetThetax(thetax);
+ fTriggerTrack->SetThetay(thetay);
+ fTriggerTrack->SetGTPattern(gloTrigPat);
+
+ fMUONData->AddRecTriggerTrack(*fTriggerTrack);
} // end of loop on Local Trigger
return kTRUE;
}
AliDebug(1, Form("track parameters at z= %f: X= %f Y= %f pX= %f pY= %f pZ= %f c= %f\n",
z, x, y, pX, pY, pZ, c));
}
- // informations about generated particles
- np = gAlice->GetMCApp()->GetNtrack();
- printf(" **** number of generated particles: %d \n", np);
+ // informations about generated particles NO !!!!!!!!
// for (Int_t iPart = 0; iPart < np; iPart++) {
// p = gAlice->Particle(iPart);
// Print hits
trackK = (AliMUONTrackK*) ((*fRecTracksPtr)[0]);
+
if (trackK->DebugLevel() > 0) {
for (Int_t i1=0; i1<fNHitsForRec; i1++) {
hit = (AliMUONHitForRec*) ((*fHitsForRecPtr)[i1]);
- //if (hit->GetTTRTrack() > 1 || hit->GetTrackRefSignal() == 0) continue;
printf(" Hit # %d %10.4f %10.4f %10.4f",
hit->GetChamberNumber(), hit->GetBendingCoor(),
hit->GetNonBendingCoor(), hit->GetZ());
- if (fRecTrackRefHits) {
- // from track ref hits
- printf(" %3d %3d \n", hit->GetTrackRefSignal(), hit->GetTTRTrack());
- } else {
- // from raw clusters
- rawclusters = fMUONData->RawClusters(hit->GetChamberNumber());
- clus = (AliMUONRawCluster*) rawclusters->UncheckedAt(hit->
- GetHitNumber());
- printf(" %d", clus->GetTrack(1));
- if (clus->GetTrack(2) != -1) printf(" %d \n", clus->GetTrack(2));
- else printf("\n");
- } // if (fRecTrackRefHits)
+
+ // from raw clusters
+ rawclusters = fMUONData->RawClusters(hit->GetChamberNumber());
+ clus = (AliMUONRawCluster*) rawclusters->UncheckedAt(hit->
+ GetHitNumber());
+ printf(" %d", clus->GetTrack(1));
+ if (clus->GetTrack(2) != -1) printf(" %d \n", clus->GetTrack(2));
+ else printf("\n");
+
}
} // if (trackK->DebugLevel() > 0)
*/
ok = kTRUE;
- if (trackK->GetRecover() == 0) hit = (AliMUONHitForRec*)
- trackK->GetTrackHits()->Last(); // last hit
- else hit = trackK->GetHitLastOk(); // hit where track stopped
+ if (trackK->GetRecover() == 0)
+ hit = (AliMUONHitForRec*) trackK->GetTrackHits()->Last(); // last hit
+ else
+ hit = trackK->GetHitLastOk(); // hit where track stopped
+
if (hit) ichamBeg = hit->GetChamberNumber();
ichamEnd = 0;
// Check propagation direction