PHOSsize[1]=88;
PHOSsize[2]=4;
PHOScradlesA=0.;
- PHOSCPV[0]=1.;
- PHOSCPV[1]=2.;
- PHOSCPV[2]=0.;
- PHOSCPV[3]=0.;
- PHOSCPV[4]=0.;
- PHOSCPV[5]=0.;
- PHOSCPV[6]=0.;
- PHOSCPV[7]=0.;
- PHOSCPV[8]=0.;
PHOSextra[0]=0.001;
PHOSextra[1]=6.95;
PHOSextra[2]=4.;
AliMaterial(99, "Air$", 14.61, 7.3, .001205, 30420., 67500);
AliMedium(0, "PHOS Xtal $", 0, 1, ISXFLD, SXMGMX, 10., .1, .1, .1, .1);
- AliMedium(1, "CPV scint. $", 1, 1, ISXFLD, SXMGMX, 10., .1, .1, .1, .1);
AliMedium(2, "Al parts $", 2, 0, ISXFLD, SXMGMX, 10., .1, .1, .001, .001);
AliMedium(3, "Tyvek wrapper$", 3, 0, ISXFLD, SXMGMX, 10., .1, .1, .001, .001);
AliMedium(4, "Polyst. foam $", 4, 0, ISXFLD, SXMGMX, 10., .1, .1, .1, .1);
GetPIN_SideSize (),
GetPIN_Length (),
GetRadius (),
- GetCPV_Thickness (),
- GetCPV_PHOS_Distance (),
GetNz (),
GetNphi (),
GetCradleAngle (i)));
if( NULL==(fTreePHOS=(TTree*)gDirectory->Get((char*)(fTreeName.Data())) ) )
{
- Error("Can not find Tree \"%s\"\n",fTreeName.Data());
+ Error("SetTreeAddress","Can not find Tree \"%s\"\n",fTreeName.Data());
exit(1);
}
AliPHOSCradle *cradle = (AliPHOSCradle *)PHOS->fCradles->operator[](m);
float x,y,l;
- const float d = cradle->GetRadius()-cradle->GetCPV_PHOS_Distance()-cradle->GetCPV_Thikness();
+ const float d = cradle->GetRadius();
cradle->GetXY(p,v,d,x,y,l);
if( l>0 && TMath::Abs(x)<cradle->GetNz ()*cradle->GetCellSideSize()/2
PHOScradlesA=angle;
}
-//______________________________________________________________________________
-void AliPHOS::SetCPV(Float_t p1,Float_t p2,Float_t p3,Float_t p4,
- Float_t p5,Float_t p6,Float_t p7,Float_t p8,Float_t p9)
-{
- PHOSCPV[0] = p1;
- PHOSCPV[1] = p2;
- PHOSCPV[2] = p3;
- PHOSCPV[3] = p4;
- PHOSCPV[4] = p5;
- PHOSCPV[5] = p6;
- PHOSCPV[6] = p7;
- PHOSCPV[7] = p8;
- PHOSCPV[8] = p9;
-}
-
//______________________________________________________________________________
void AliPHOS::SetExtra(Float_t p1,Float_t p2,Float_t p3,Float_t p4,
Float_t p5,Float_t p6,Float_t p7,Float_t p8,Float_t p9)
float PIN_SideSize ,
float PIN_Length ,
float Radius ,
- float CPV_Thickness ,
- float CPV_PHOS_Distance ,
int Nz ,
int Nphi ,
float Angle ) :
fGeometry (Geometry),
// fCellEnergy (),
// fChargedTracksInPIN (),
-// fCPV_hitsX (),
-// fCPV_hitsY (),
fCrystalSideSize (CrystalSideSize),
fCrystalLength (CrystalLength),
fWrapThickness (WrapThickness),
fPIN_SideSize (PIN_SideSize),
fPIN_Length (PIN_Length),
fRadius (Radius),
- fCPV_PHOS_Distance (CPV_PHOS_Distance),
- fCPV_Thickness (CPV_Thickness),
fNz (Nz),
fNphi (Nphi),
fPhi (Angle)
GetGammasReconstructed() .Delete();
GetGammasReconstructed() .Compress();
- fCPV_hitsX.Set(0);
- fCPV_hitsY.Set(0);
-}
-
-//______________________________________________________________________________
-
-void AliPHOSCradle::AddCPVHit(float x,float y)
-{
-// Add this hit to the hits list in CPV detector.
-
- TArrayF a(fCPV_hitsX.GetSize()+1);
-
- memcpy(a.GetArray(),fCPV_hitsX.GetArray(),sizeof(Float_t)*fCPV_hitsX.GetSize());
- a[fCPV_hitsX.GetSize()] = x;
- fCPV_hitsX = a;
-
- // It must be: fCPV_hitsX.GetSize() == fCPV_hitsY.GetSize()
-
- memcpy(a.GetArray(),fCPV_hitsY.GetArray(),sizeof(Float_t)*fCPV_hitsY.GetSize());
- a[fCPV_hitsY.GetSize()] = y;
- fCPV_hitsY = a;
}
//______________________________________________________________________________
AliPHOSCradle *cr = (AliPHOSCradle *)this; // Removing 'const'...
- printf("AliPHOSCradle: Nz=%d Nphi=%d, fPhi=%f, E=%g, CPV hits amount = %d\n",fNz,fNphi,fPhi,
- cr->fCellEnergy.GetSumOfWeights(),fCPV_hitsX.GetSize());
+ printf("AliPHOSCradle: Nz=%d Nphi=%d, fPhi=%f, E=%g\n",fNz,fNphi,fPhi,
+ cr->fCellEnergy.GetSumOfWeights());
if( NULL!=strchr(opt,'d') )
{
float PIN_SideSize ,
float PIN_Length ,
float Radius ,
- float CPV_Thickness ,
- float CPV_PHOS_Distance ,
int Nz ,
int Nphi ,
float Angle );
-
- void AddCPVHit(float x, float y);
-
Float_t GetCrystalSideSize (void) const {return fCrystalSideSize;}
Float_t GetCellSideSize (void) const {return fCrystalSideSize+2*fWrapThickness+2*fAirThickness;}
Float_t GetCrystalLength (void) const {return fCrystalLength;}
Float_t GetPIN_SideSize (void) const {return fPIN_SideSize;}
Float_t GetPIN_Length (void) const {return fPIN_Length;}
Float_t GetRadius (void) const {return fRadius;}
- Float_t GetCPV_PHOS_Distance (void) const {return fCPV_PHOS_Distance;}
- Float_t GetCPV_Thikness (void) const {return fCPV_Thickness;}
Int_t GetNz (void) const {return fNz;}
Int_t GetNphi (void) const {return fNphi;}
Float_t GetPhi (void) const {return fPhi;}
TH2F fCellEnergy; // GeV. Energy in cells
TH2S fChargedTracksInPIN; // amount. hits in PIN
- TArrayF fCPV_hitsX; // cm. X-hits in CPV detector. (0 - cradle center)
- TArrayF fCPV_hitsY; // cm. Y-hits in CPV detector. (0 - cradle center)
private:
Float_t fRadius; // cm. Distance to PHOS
- Float_t fCPV_PHOS_Distance; // cm. Distance from CPV to PHOS.
- Float_t fCPV_Thickness; // cm. CPV thikness.
Int_t fNz; // Cells amount in beam direction
Int_t fNphi; // Cells amount around beam
virtual void SetRadius(Float_t radius);
virtual void SetCradleSize(Int_t nz, Int_t nphi, Int_t ncradles);
virtual void SetCradleA(Float_t angle);
- virtual void SetCPV(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
- Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
virtual void SetExtra(Float_t p1,Float_t p2=0,Float_t p3=0,Float_t p4=0,
Float_t p5=0,Float_t p6=0,Float_t p7=0,Float_t p8=0,Float_t p9=0);
virtual void SetTextolitWall(Float_t dx, Float_t dy, Float_t dz);
virtual void DefPars();
virtual void AddPHOSCradles();
- /*
-
- virtual Int_t GetPHOS_IDTMED_PbWO4 (void){return gAlice->Idtmed()[700-1];}
- virtual Int_t GetPHOS_IDTMED_CPV (void){return gAlice->Idtmed()[701-1];}
- virtual Int_t GetPHOS_IDTMED_Al (void){return gAlice->Idtmed()[702-1];}
- virtual Int_t GetPHOS_IDTMED_Tyvek (void){return gAlice->Idtmed()[703-1];}
- virtual Int_t GetPHOS_IDTMED_PIN (void){return gAlice->Idtmed()[706-1];}
- virtual Int_t GetPHOS_IDTMED_AIR (void){return gAlice->Idtmed()[799-1];}
-
- */
virtual Int_t GetPHOS_IDTMED_PbWO4 (void){return (*fIdtmed)[0];}
- virtual Int_t GetPHOS_IDTMED_CPV (void){return (*fIdtmed)[1];}
virtual Int_t GetPHOS_IDTMED_Al (void){return (*fIdtmed)[2];}
virtual Int_t GetPHOS_IDTMED_Tyvek (void){return (*fIdtmed)[3];}
virtual Int_t GetPHOS_IDTMED_PIN (void){return (*fIdtmed)[4];}
virtual Float_t GetPIN_SideSize (void) const {return PHOScell[4]; }
virtual Float_t GetPIN_Length (void) const {return PHOScell[5]; }
virtual Float_t GetRadius (void) const {return PHOSradius; }
- virtual Float_t GetCPV_Thickness (void) const {return PHOSCPV[0]; }
- virtual Float_t GetCPV_PHOS_Distance (void) const {return PHOSCPV[1]; }
virtual Int_t GetNz (void) const {return PHOSsize[0]; }
virtual Int_t GetNphi (void) const {return PHOSsize[1]; }
virtual Int_t GetCradlesAmount (void) const {return PHOSsize[2]; }
#define MAXCRAD 100
- Float_t PHOSflags[9], PHOScell[9], PHOSradius, PHOSCPV[9];
+ Float_t PHOSflags[9], PHOScell[9], PHOSradius;
Int_t PHOSsize[3];
Float_t PHOScradlesA,PHOSTXW[3],PHOSAIR[3],PHOSFTI[4],PHOSextra[9],
PHOSangle[MAXCRAD];
// ORIGIN : NICK VAN EIJNDHOVEN
Float_t pphi;
- Float_t r, dptcb[3], dpair[3], dphos[3], dpucp[3], dpasp[3], dpcpv[3];
+ Float_t r, dptcb[3], dpair[3], dphos[3], dpucp[3], dpasp[3];
Float_t dpxtl[3];
Float_t yo;
Int_t idrotm[99];
const Float_t XTL_Z=2.2;
// --- Tyvek wrapper thickness
const Float_t PAP_THICK=0.01;
-// --- CPV thickness ---
- const Float_t CPV_Y=0.5;
// --- Polystyrene Foam Outer Cover dimensions ---
const Float_t FOC_X=214.6;
const Float_t FOC_Y=80.;
yo = (FOC_Y-ASP_Y)/2. - (CBS_R-FOC_R+TCB_Y);
gMC->Gspos("PASP", 1, "PAIR", 0., yo, 0., 0, "ONLY");
-// --- Define CPV volume, DON'T PLACE IT YET ---
- dpcpv[0] = TCB_X/2.;
- dpcpv[1] = CPV_Y/2.;
- dpcpv[2] = TCB_Z/2.;
- gMC->Gsvolu("PCPV", "BOX ", idtmed[700], dpcpv, 3);
// --- Divide in X and Z direction (same way as PTCB) ---
- gMC->Gsdvn("PCSE", "PCPV", 11, 1);
gMC->Gsdvn("PCMO", "PCSE", 13, 3);
gMC->Gsdvn("PCST", "PCMO", 8, 1);
gMC->Gsdvn("PCCE", "PCST", 8, 3);
gMC->Gspos("PHOS", 3, "ALIC",-xp2, yp2, 0., idrotm[2], "ONLY");
gMC->Gspos("PHOS", 4, "ALIC",-xp1, yp1, 0., idrotm[3], "ONLY");
-// --- Now position PCPV so that its plates are right on top of ---
-// --- corresponding PHOS supermodules (previously called cradles) ---
- r = FOC_R-CPV_Y/2.;
- pphi = TMath::ATan(FOC_X/(2.*FOC_R));
- xp1 = -r * TMath::Sin(pphi * 3.);
- yp1 = -r * TMath::Cos(pphi * 3.);
- xp2 = -r * TMath::Sin(pphi);
- yp2 = -r * TMath::Cos(pphi);
- gMC->Gspos("PCPV", 1, "ALIC", xp1, yp1, 0., idrotm[0], "ONLY");
- gMC->Gspos("PCPV", 2, "ALIC", xp2, yp2, 0., idrotm[1], "ONLY");
- gMC->Gspos("PCPV", 3, "ALIC",-xp2, yp2, 0., idrotm[2], "ONLY");
- gMC->Gspos("PCPV", 4, "ALIC",-xp1, yp1, 0., idrotm[3], "ONLY");
-
// --- Set modules seen without tree for drawings ---
gMC->Gsatt("PMOD", "SEEN", -2);
gMC->Gsatt("PCMO", "SEEN", -2);
AliMaterial(9, "Air$", 14.61, 7.3, .001205, 30420., 67500);
AliMedium(0, "PHOS Xtal $", 0, 1, ISXFLD, SXMGMX, 10., .1, .1, .1, .1);
- AliMedium(1, "CPV scint. $", 1, 1, ISXFLD, SXMGMX, 10., .1, .1, .1, .1);
AliMedium(2, "Al parts $", 2, 0, ISXFLD, SXMGMX, 10., .1, .1, .001, .001);
AliMedium(3, "Tyvek wrapper$", 3, 0, ISXFLD, SXMGMX, 10., .1, .1, .001, .001);
AliMedium(4, "Polyst. foam $", 4, 0, ISXFLD, SXMGMX, 10., .1, .1, .1, .1);
const float cell_length = GetCrystalLength()+GetAirThickness()+GetWrapThickness()+GetPIN_Length(),
cell_side_size = GetCrystalSideSize()+2*GetAirThickness()+2*GetWrapThickness(),
-// cell_angle = 180/kPI * 2 * atan(cell_side_size/2 / GetRadius()), // radians
- cradle_thikness = cell_length + GetCPV_Thickness() + GetCPV_PHOS_Distance(),
- distance_to_CPV = GetRadius() - GetCPV_Thickness() - GetCPV_PHOS_Distance();
+ cradle_thikness = cell_length;
//////////////////////////////////////////////////////////////////////////////
// CELL volume and subvolumes creation
gMC->Gsvolu("PIN ","BOX ",GetPHOS_IDTMED_PIN(),par,3);
//////////////////////////////////////////////////////////////////////////////
- // CRADLE,CPV creation.
+ // CRADLE creation.
//////////////////////////////////////////////////////////////////////////////
par[0] = cell_side_size/2 * GetNz();
par[2] = cradle_thikness/2;
gMC->Gsvolu("PHOS","BOX ",GetPHOS_IDTMED_AIR(),par,3);
-//par[0] : the same as above
-//par[1] : the same as above
- par[2] = GetCPV_Thickness()/2;
- gMC->Gsvolu("CPV ","BOX ",GetPHOS_IDTMED_CPV(),par,3);
-
- x = 0;
- y = 0;
- z = (cell_length+GetCPV_PHOS_Distance())/2;
- gMC->Gspos("CPV ",1,"PHOS",x,y,z,0,"ONLY");
par[0] = cell_side_size/2 * GetNz();
par[1] = cell_side_size/2 * GetNphi();
// CELL has been created.
//////////////////////////////////////////////////////////////////////////////
-// int n=0;
-// z = -(GetCPV_Thickness()+GetCPV_PHOS_Distance())/2;
-//
-// for( int iy=0; iy<GetNphi(); iy++ )
-// {
-// y = (iy-(GetNphi()-1)/2.)*cell_side_size;
-// for( int ix=0; ix<GetNz(); ix++ )
-// {
-// x = (ix-(GetNz()-1)/2.)*cell_side_size;
-// gMC->Gspos("CELL",++n,"PHOS",x,y,z,0,"ONLY");
-// }
-// }
//////////////////////////////////////////////////////////////////////////////
// End of CRADLE creation.
for( int i=0; i<GetCradlesAmount(); i++ )
{
- float c = distance_to_CPV, // Distance to CPV
- l = cell_side_size*GetNphi()/2, // Cradle half size around beam (for rect. geom.)
- cradle_angle = 360/kPI*atan(l/c),
- cradle_angle_pos = -90+(i-(GetCradlesAmount()-1)/2.) * (cradle_angle+GetAngleBetweenCradles());
+ Float_t cradle_angle = 27.,
+ cradle_angle_pos = -90+(i-(GetCradlesAmount()-1)/2.) *
+ (cradle_angle+GetAngleBetweenCradles());
// Cradles are numerated in clock reversed order. (general way of angle increment)
- float r = GetRadius() + cradle_thikness/2;
+ Float_t r = GetRadius() + cradle_thikness/2;
x = r*cos(cradle_angle_pos*kPI/180);
y = r*sin(cradle_angle_pos*kPI/180);
z = 0;
gMC->Gspos("PHOS",i+1,"ALIC",x,y,z,rotation_matrix_number,"ONLY");
GetCradleAngle(i) = cradle_angle_pos;
-//
-// int n = PHOS.fCradles->GetEntries();
-// PHOS.fCradles->Add(new AliPHOSCradle( 1, // geometry.
-// GetCrystalSideSize (),
-// GetCrystalLength (),
-// GetWrapThickness (),
-// GetAirThickness (),
-// GetPIN_SideSize (),
-// GetPIN_Length (),
-// GetRadius (),
-// GetCPV_Thickness (),
-// GetCPV_PHOS_Distance (),
-// GetNz (),
-// GetNphi (),
-// cradle_angle_pos ));
-//
-// if( n+1 != PHOS.fCradles->GetEntries() ||
-// NULL == PHOS.fCradles->At(n) )
-// {
-// cout << " Can not create or add AliPHOSCradle.\n";
-// exit(1);
-// }
}
AddPHOSCradles();
//////////////////////////////////////////////////////////////////////////////
- if( gMC->GetMedium()==GetPHOS_IDTMED_CPV() && (gMC->IsTrackInside() || gMC->IsTrackExiting()) && inwold )
- {
- // GEANT particle just have entered into CPV detector.
-
- AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS");
-
- gMC->CurrentVolOffID(1,cradle_number);
- cradle_number--;
-// cradle_number = cvolu->number[cvolu->nlevel-2]-1;
-
- // Save CPV x,y hits position of charged particles.
-
- AliPHOSCradle &cradle = PHOS.GetCradle(cradle_number);
-
- TLorentzVector xyz;
- TVector3 v;
- gMC->TrackPosition(xyz);
-
- float x,y,l;
- float R = cradle.GetRadius() - cradle.GetCPV_PHOS_Distance() - cradle.GetCPV_Thikness();
- cradle.GetXY(xyz.Vect(),v,R,x,y,l);
- if( PHOS.fDebugLevel>0 )
- if( l<0 )
- printf("PHOS_STEP: warning: negative distance to CPV!! %f\n", l);
-
- // Store current particle in the list of Cradle particles.
- TLorentzVector pmom;
- gMC->TrackMomentum(pmom);
- float Px = pmom[0],
- Py = pmom[1],
- Pz = pmom[2];
- Int_t Ipart = gMC->TrackPid();
-
-// TClonesArray &P=cradle.GetParticles();
-// new( P[P.GetEntries()] ) AliPHOSgamma(x,0,y,0,ctrak->getot,0,Px,Py,Pz);
- cradle.GetParticles().Add(new AliPHOSgamma(x,y,gMC->Etot(),Px,Py,Pz,Ipart));
-
- if( gMC->TrackCharge()!=0 )
- cradle.AddCPVHit(x,y);
- }
inwold=gMC->IsTrackEntering(); // Save current status of GEANT variable.
}
+++ /dev/null
-/////////////////////////////////////////////////////////
-// Manager and hits classes for set:PHOS version 3 //
-/////////////////////////////////////////////////////////
-
-// --- ROOT system ---
-#include "TH1.h"
-#include "TRandom.h"
-#include "TFile.h"
-#include "TTree.h"
-#include "TBRIK.h"
-#include "TNode.h"
-
-// --- galice header files ---
-#include "AliPHOSv3.h"
-#include "AliRun.h"
-#include "AliMC.h"
-
-ClassImp(AliPHOSv3)
-
-//______________________________________________________________________________
-
-
-AliPHOSv3::AliPHOSv3()
-{
-}
-
-//______________________________________________________________________________
-
-AliPHOSv3::AliPHOSv3(const char *name, const char *title)
- : AliPHOS(name, title)
-{
-}
-
-//___________________________________________
-void AliPHOSv3::CreateGeometry()
-{
-
- cout << "AliPHOSv3::CreateGeometry() PHOS creation\n";
-
- AliPHOS *PHOS_tmp = (AliPHOS*)gAlice->GetModule("PHOS");
- if( NULL==PHOS_tmp )
- {
- printf("There isn't PHOS detector!\n");
- return;
- }
-// AliPHOS &PHOS = *PHOS_tmp;
-
- //////////////////////////////////////////////////////////////////////////////
-
- Int_t rotation_matrix_number=0;
- Float_t par[11],
- x,y,z;
-
- const float cell_length = GetCrystalLength()+GetAirThickness()+GetWrapThickness()+GetPIN_Length(),
- cell_side_size = GetCrystalSideSize()+2*GetAirThickness()+2*GetWrapThickness(),
-// cell_angle = 180/kPI * 2 * atan(cell_side_size/2 / GetRadius()), // radians
- cradle_thikness = cell_length + GetCPV_Thickness() + GetCPV_PHOS_Distance(),
- distance_to_CPV = GetRadius() - GetCPV_Thickness() - GetCPV_PHOS_Distance();
-
- //////////////////////////////////////////////////////////////////////////////
- // CELL volume and subvolumes creation
- //////////////////////////////////////////////////////////////////////////////
-
- par[0] = GetCrystalSideSize()/2 + GetWrapThickness();
- par[1] = GetCrystalSideSize()/2 + GetWrapThickness();
- par[2] = GetCrystalLength() /2 + GetWrapThickness()/2;
- gMC->Gsvolu("WRAP","BOX ",GetPHOS_IDTMED_Tyvek(),par,3);
-
- par[0] = GetCrystalSideSize()/2;
- par[1] = GetCrystalSideSize()/2;
- par[2] = GetCrystalLength()/2;
- gMC->Gsvolu("CRST","BOX ",GetPHOS_IDTMED_PbWO4(),par,3);
-
- // PIN
- par[0] = GetPIN_SideSize()/2;
- par[1] = GetPIN_SideSize()/2;
- par[2] = GetPIN_Length()/2;
- gMC->Gsvolu("PIN ","BOX ",GetPHOS_IDTMED_PIN(),par,3);
-
- //////////////////////////////////////////////////////////////////////////////
- // CRADLE,CPV creation.
- //////////////////////////////////////////////////////////////////////////////
-
- par[0] = cell_side_size/2 * GetNz();
- par[1] = cell_side_size/2 * GetNphi();
- par[2] = cradle_thikness/2;
- gMC->Gsvolu("PHOS","BOX ",GetPHOS_IDTMED_AIR(),par,3);
-
-//par[0] : the same as above
-//par[1] : the same as above
- par[2] = GetCPV_Thickness()/2;
- gMC->Gsvolu("CPV ","BOX ",GetPHOS_IDTMED_CPV(),par,3);
-
- x = 0;
- y = 0;
- z = (cell_length+GetCPV_PHOS_Distance())/2;
- gMC->Gspos("CPV ",1,"PHOS",x,y,z,0,"ONLY");
-
- par[0] = cell_side_size/2 * GetNz();
- par[1] = cell_side_size/2 * GetNphi();
- par[2] = cell_length/2;
- gMC->Gsvolu("CRS0","BOX ",GetPHOS_IDTMED_AIR(),par,3);
-
- x = 0;
- y = 0;
- z = -(cradle_thikness-cell_length)/2;
- gMC->Gspos("CRS0",1,"PHOS",x,y,z,0,"ONLY");
-
- gMC->Gsdvn("CRS1","CRS0",GetNphi(),2);
- gMC->Gsdvn("CELL","CRS1",GetNz() ,1);
-
- //////////////////////////////////////////////////////////////////////////////
- // CELL creation
- //////////////////////////////////////////////////////////////////////////////
-
- x = 0;
- y = 0;
- z = -GetWrapThickness()/2;
- gMC->Gspos("CRST",1,"WRAP",x,y,z,0,"ONLY");
-
- x = 0;
- y = 0;
- z = GetPIN_Length()/2;
- gMC->Gspos("WRAP",1,"CELL",x,y,z,0,"ONLY");
-
- x = 0;
- y = 0;
- z = -GetCrystalLength()/2-GetWrapThickness()/2;
- gMC->Gspos("PIN ",1,"CELL",x,y,z,0,"ONLY");
-
- //////////////////////////////////////////////////////////////////////////////
- // CELL has been created.
- //////////////////////////////////////////////////////////////////////////////
-
-// int n=0;
-// z = -(GetCPV_Thickness()+GetCPV_PHOS_Distance())/2;
-//
-// for( int iy=0; iy<GetNphi(); iy++ )
-// {
-// y = (iy-(GetNphi()-1)/2.)*cell_side_size;
-// for( int ix=0; ix<GetNz(); ix++ )
-// {
-// x = (ix-(GetNz()-1)/2.)*cell_side_size;
-// gMC->Gspos("CELL",++n,"PHOS",x,y,z,0,"ONLY");
-// }
-// }
-
- //////////////////////////////////////////////////////////////////////////////
- // End of CRADLE creation.
- //////////////////////////////////////////////////////////////////////////////
-
-
- //////////////////////////////////////////////////////////////////////////////
- // PHOS creation
- //////////////////////////////////////////////////////////////////////////////
-
- for( int i=0; i<GetCradlesAmount(); i++ )
- {
- float c = distance_to_CPV, // Distance to CPV
- l = cell_side_size*GetNphi()/2, // Cradle half size around beam (for rect. geom.)
- cradle_angle = 360/kPI*atan(l/c),
- cradle_angle_pos = -90+(i-(GetCradlesAmount()-1)/2.) * (cradle_angle+GetAngleBetweenCradles());
- // Cradles are numerated in clock reversed order. (general way of angle increment)
-
- float r = GetRadius() + cradle_thikness/2;
- x = r*cos(cradle_angle_pos*kPI/180);
- y = r*sin(cradle_angle_pos*kPI/180);
- z = 0;
- AliMatrix(rotation_matrix_number, 0,0 , 90,90+cradle_angle_pos , 90,180+cradle_angle_pos);
- gMC->Gspos("PHOS",i+1,"ALIC",x,y,z,rotation_matrix_number,"ONLY");
-
- GetCradleAngle(i) = cradle_angle_pos;
-//
-// int n = PHOS.fCradles->GetEntries();
-// PHOS.fCradles->Add(new AliPHOSCradle( 1, // geometry.
-// GetCrystalSideSize (),
-// GetCrystalLength (),
-// GetWrapThickness (),
-// GetAirThickness (),
-// GetPIN_SideSize (),
-// GetPIN_Length (),
-// GetRadius (),
-// GetCPV_Thickness (),
-// GetCPV_PHOS_Distance (),
-// GetNz (),
-// GetNphi (),
-// cradle_angle_pos ));
-//
-// if( n+1 != PHOS.fCradles->GetEntries() ||
-// NULL == PHOS.fCradles->At(n) )
-// {
-// cout << " Can not create or add AliPHOSCradle.\n";
-// exit(1);
-// }
- }
- AddPHOSCradles();
-
- //////////////////////////////////////////////////////////////////////////////
- // All is done.
- // Print some information.
- //////////////////////////////////////////////////////////////////////////////
-}
-
-void AliPHOSv3::StepManager()
-{
- static Bool_t inwold=0; // Status of previous ctrak->inwvol
- Int_t copy;
-
-// if( gMC->TrackEntering() ) {
-// Int_t Volume_ID = gMC->CurrentVol(Volume_name, copy);
-// cout << "AliPHOSv3::StepManager() entered to PHOS to the volume " << Volume_name << "!\n";
-// }
-
- int cradle_number, cell_Z, cell_Phi; // Variables that describe cell position.
-
- if( gMC->GetMedium()==GetPHOS_IDTMED_PIN() && gMC->IsTrackEntering() && gMC->TrackCharge()!=0 )
- {
- // GEANT particle just have entered into PIN diode.
-
- AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS");
-
- gMC->CurrentVolOffID(4,copy);
- cradle_number = copy-1;
- gMC->CurrentVolOffID(1,copy);
- cell_Z = copy-1;
- gMC->CurrentVolOffID(2,copy);
- cell_Phi = copy-1;
-
- TH2S &h = PHOS.GetCradle(cradle_number).fChargedTracksInPIN;
- h.AddBinContent(h.GetBin(cell_Z,cell_Phi));
-
-// cout << "AliPHOSv3::StepManager() entered to PHOS pin diode\n";
-// cout << " cradle_nimber = " << cradle_number << endl;
-// cout << " cell_z = " << cell_Z << endl;
-// cout << " cell_Phi = " << cell_Phi << endl;
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- if( gMC->GetMedium() == GetPHOS_IDTMED_PbWO4() )
- {
- // GEANT particle into crystal.
-
- AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS");
-
- gMC->CurrentVolOffID(5,copy);
- cradle_number = copy-1;
- gMC->CurrentVolOffID(2,copy);
- cell_Z = copy-1;
- gMC->CurrentVolOffID(3,copy);
- cell_Phi = copy-1;
-
- TH2F &h = PHOS.GetCradle(cradle_number).fCellEnergy;
- h.AddBinContent(h.GetBin(cell_Z,cell_Phi),gMC->Edep());
- }
-
- //////////////////////////////////////////////////////////////////////////////
-
- if( gMC->GetMedium()==GetPHOS_IDTMED_CPV() && gMC->IsTrackEntering() )
- {
- // GEANT particle just have entered into CPV detector.
-
- AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS");
-
- gMC->CurrentVolOffID(1,cradle_number);
- cradle_number--;
-
- // Save CPV x,y hits position of charged particles.
-
- AliPHOSCradle &cradle = PHOS.GetCradle(cradle_number);
-
- TLorentzVector p;
- gMC->TrackPosition(p);
- TVector3 v;
-
- float x,y,l;
- float R = cradle.GetRadius() - cradle.GetCPV_PHOS_Distance() - cradle.GetCPV_Thikness();
- cradle.GetXY(p.Vect(),v,R,x,y,l);
- if( PHOS.fDebugLevel>0 )
- if( l<0 )
- printf("PHOS_STEP: warning: negative distance to CPV!! %f\n", l);
-
- // Store current particle in the list of Cradle particles.
- TLorentzVector pmom;
- gMC->TrackMomentum(pmom);
- Float_t Px = pmom[0],
- Py = pmom[1],
- Pz = pmom[2];
- Float_t Getot = pmom[3];
- Int_t Ipart = gMC->TrackPid();
-
- cradle.GetParticles().Add(new AliPHOSgamma(x,y,Getot,Px,Py,Pz,Ipart));
-
- // printf ("Cradle %i, x,y = %8.3f, %8.3f cm, E,Px,Py,Pz = %8.3f, %8.3f, %8.3f GeV, %8.3f, Ipart = %i\n",
- // cradle_number,x,y,Getot,Px,Py,Pz,Ipart);
-
- }
-
- inwold=gMC->IsTrackEntering(); // Save current status of GEANT variable.
-}
+++ /dev/null
-#ifndef PHOSv3_H
-#define PHOSv3_H
-////////////////////////////////////////////////////////
-// Manager and hits classes for set:PHOS version 1 //
-////////////////////////////////////////////////////////
-
-// --- galice header files ---
-#include "AliPHOS.h"
-
-class AliPHOSv3 : public AliPHOS {
-
- public:
- AliPHOSv3();
- AliPHOSv3(const char *name, const char *title);
- virtual ~AliPHOSv3(){}
- virtual void CreateGeometry();
- virtual Int_t IsVersion() const {return 3;}
- virtual void StepManager();
-
- ClassDef(AliPHOSv3,1) //Hits manager for set:PHOS version 3
-};
-
-#endif
-
# C++ sources
-SRCS = AliPHOS.cxx AliPHOSv0.cxx AliPHOSv1.cxx AliPHOSv2.cxx AliPHOSv3.cxx
+SRCS = AliPHOS.cxx AliPHOSv0.cxx AliPHOSv1.cxx AliPHOSv2.cxx
# C++ Headers
#pragma link C++ class AliPHOSv0;
#pragma link C++ class AliPHOSv1;
#pragma link C++ class AliPHOSv2;
-#pragma link C++ class AliPHOSv3;
#pragma link C++ class AliPHOShitv2;
#pragma link C++ class AliPHOSCradle;
#pragma link C++ class AliPHOSgamma;