21 #include <TClonesArray.h> 23 #include <TParticle.h> 25 #include <TVirtualMC.h> 70 AliInfo(
"Very good, V2 version is used!");
97 Int_t iparent, Float_t ienergy,
98 Int_t
id, Float_t * hits,Float_t *
p)
100 static Int_t hitCounter;
106 newHit =
new AliEMCALHit(shunt, primary, tracknumber, iparent, ienergy,
id, hits, p);
108 for ( hitCounter =
fNhits-1; hitCounter >= 0 && !deja; hitCounter-- )
117 if( *curHit == *newHit )
119 *curHit = *curHit + *newHit;
141 static Float_t xyzte[5]={0.,0.,0.,0.,0.};
142 static Float_t pmom[4]={0.,0.,0.,0.};
143 static TLorentzVector pos;
144 static TLorentzVector mom;
145 static Float_t ienergy = 0;
146 static TString curVolName=
"";
147 static int supModuleNumber=-1, moduleNumber=-1, yNumber=-1, xNumber=-1, absid=-1;
148 static int keyGeom=1;
149 static const char *vn =
"SCMX";
150 static Float_t depositedEnergy=0.0;
155 if(
fMC->VolId(
"PBMO")==0 ||
fMC->VolId(
"WSUC")==1)
161 printf(
"AliEMCALv2::StepManager(): keyGeom %i : Sensetive volume %s \n",
164 if(
fMC->VolId(
"WSUC")==1)
printf(
" WSUC - cosmic ray stand geometry \n");
171 curVolName =
fMC->CurrentVolName();
172 if(curVolName.Contains(vn) || curVolName.Contains(
"SCX"))
175 if( ((depositedEnergy =
fMC->Edep()) > 0.) && (
fMC->TrackTime() <
fTimeCut))
192 parent=part->GetFirstMother();
203 parent=part->GetFirstMother();
210 Error(
"StepManager",
"Cannot find parent");
215 ienergy = part->Energy();
225 parent=part->GetFirstMother();
232 fMC->TrackPosition(pos);
236 xyzte[3] =
fMC->TrackTime() ;
238 fMC->TrackMomentum(mom);
245 supModuleNumber = moduleNumber = yNumber = xNumber = absid = 0;
248 fMC->CurrentVolOffID(4, supModuleNumber);
249 fMC->CurrentVolOffID(3, moduleNumber);
250 fMC->CurrentVolOffID(1, yNumber);
251 fMC->CurrentVolOffID(0, xNumber);
253 Int_t CurrentSMType = 0;
263 supModuleNumber += preSM;
266 if(strcmp(
fMC->CurrentVolOffName(0),vn) != 0) {
267 if (strcmp(
fMC->CurrentVolOffName(0),
"SCX1")==0) xNumber=1;
268 else if(strcmp(
fMC->CurrentVolOffName(0),
"SCX2")==0) xNumber=2;
269 else if(strcmp(
fMC->CurrentVolOffName(0),
"SCX3")==0) xNumber=3;
270 else Fatal(
"StepManager()",
"Wrong name of sensitive volume in 3X3 case : %s ",
fMC->CurrentVolOffName(0));
275 fMC->CurrentVolOffID(5, supModuleNumber);
276 fMC->CurrentVolOffID(4, moduleNumber);
277 fMC->CurrentVolOffID(1, yNumber);
278 fMC->CurrentVolOffID(0, xNumber);
280 if (strcmp(
fMC->CurrentVolOffName(5),
"SMOP")==0) supModuleNumber = 2*(supModuleNumber-1)+1;
281 else if(strcmp(
fMC->CurrentVolOffName(5),
"SMON")==0) supModuleNumber = 2*(supModuleNumber-1)+2;
293 Int_t smNumber = supModuleNumber-1;
299 if(strcmp(
fMC->CurrentVolOffName(4),
"DCSM")==0) smType = 3;
305 if(strcmp(
fMC->CurrentVolOffName(4),
"SM10")==0) smType = 2 ;
306 if(strcmp(
fMC->CurrentVolOffName(4),
"SM3rd")==0) smType = 3 ;
307 if(strcmp(
fMC->CurrentVolOffName(4),
"DCEXT")==0) smType = 3 ;
316 printf(
" supModuleNumber %i : moduleNumber %i : yNumber %i : xNumber %i \n",
317 supModuleNumber, moduleNumber, yNumber, xNumber);
318 Fatal(
"StepManager()",
"Wrong id : %i ", absid) ;
321 Float_t lightYield = depositedEnergy ;
324 if (
fMC->TrackCharge()!=0)
326 Float_t birkC1Mod = 0;
329 if (TMath::Abs(
fMC->TrackCharge())>=2) birkC1Mod =
fBirkC1*7.2/12.6;
334 if (
fMC->TrackStep()>0) dedxcm=1000.*
fMC->Edep()/
fMC->TrackStep();
336 lightYield=lightYield/(1.+birkC1Mod*dedxcm+
fBirkC2*dedxcm*dedxcm);
341 xyzte[4] = lightYield;
344 printf(
"#sm %2i #m %3i #x %1i #z %1i -> absid %i : xyzte[4] = %f\n",
345 supModuleNumber,moduleNumber,yNumber,xNumber,absid, xyzte[4]);
TClonesArray * fHits
Counter for the hit iterator.
virtual void AddHit(Int_t shunt, Int_t primary, Int_t track, Int_t iparent, Float_t ienergy, Int_t id, Float_t *hits, Float_t *p)
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
virtual void StepManager(void)
Accumulates hits as long as the track stays in a tower.
TArrayD GetCentersOfCellsEtaDir() const
Int_t fCurTrack
Current track.
virtual Int_t GetPrimary(Int_t track) const
Int_t GetAbsCellIdFromCellIndexes(Int_t nSupMod, Int_t iphi, Int_t ieta) const
EMCal simulation manager class v1.
Int_t fCurParent
Current parent.
void GetCellPhiEtaIndexInSModule(Int_t nSupMod, Int_t nModule, Int_t nIphi, Int_t nIeta, Int_t &iphi, Int_t &ieta) const
virtual ~AliEMCALv2(void)
Int_t fCurPrimary
Current primary track.
AliEMCALv2(void)
Default Constructor.
Bool_t checkGeoAndRun
check or not the year to configure the detector
Int_t GetSMType(Int_t nSupMod) const
Int_t GetCurrentTrackNumber() const
Double_t fBirkC1
Constant 1 for Birk's Law implementation.
Int_t fBirkC0
Constant 0 for Birk's Law implementation.
Float_t fTimeCut
Cut to remove the background from the ALICE system.
virtual AliTrackReference * AddTrackReference(Int_t label, Int_t id=-999)
Int_t GetPrimary(void) const
#define AliError(message)
TArrayD GetCentersOfCellsPhiDir() const
Double_t fBirkC2
Constant 2 for Birk's Law implementation.
EMCal simulation manager class v2.
virtual void AddHitList(TCollection *hitList)
Int_t IsInEMCALOrDCAL(Double_t x, Double_t y, Double_t z) const
TParticle * Particle(Int_t i) const
AliEMCALGeometry * fGeometry
! EMCal geometry access