gAlice->AddHitList (fHits);
fIshunt = 0;
- fIdSens1 = 0;
- fIdSens2 = 0;
- fIdSens3 = 0;
- fIdSens4 = 0;
- fIdSens5 = 0;
// fMerger = 0;
SetMarkerColor (kRed);
}
}
//_____________________________________________________________________________
-Int_t AliFMD::DistanceToPrimitive (Int_t px, Int_t py)
+Int_t AliFMD::DistanceToPrimitive (Int_t /*px*/, Int_t /*py*/)
{
//
// Calculate the distance from the mouse to the FMD on the screen
}
//
//
- fIdSens1 = gMC->VolId ("GRN1"); //Si sensetive volume
- fIdSens2 = gMC->VolId ("GRN2"); //Si sensetive volume
- fIdSens3 = gMC->VolId ("GRN3"); //Si sensetive volume
- fIdSens4 = gMC->VolId ("GRN4"); //Si sensetive volume
- fIdSens5 = gMC->VolId ("GRN5"); //Si sensetive volume
-
+
}
//---------------------------------------------------------------------
void AliFMD::MakeBranch (Option_t * option)
}
}
-//---------------------------------------------------------------------
-
-void AliFMD::SetRingsSi1(Int_t ringsSi1)
-{
- fRingsSi1=512;
-}
-void AliFMD::SetSectorsSi1(Int_t sectorsSi1)
-{
- fSectorsSi1=20;
-}
-void AliFMD::SetRingsSi2(Int_t ringsSi2)
-{
- fRingsSi2=256;
-}
-void AliFMD::SetSectorsSi2(Int_t sectorsSi2)
-{
- fSectorsSi2=40;
-}
-
void
{
AliFMDReconstruction * reconstruction = new AliFMDReconstruction(fLoader->GetRunLoader());
cout<<" AliFMD::Digits2Reco >> "<<reconstruction<<endl;
- reconstruction->Exec("");
+ reconstruction->Exec();
delete reconstruction;
}
//-----------------------------------------------------------------------
virtual void ResetDigits();
virtual void DrawDetector()=0;
virtual void StepManager() {}
- // Granularity
- virtual void SetRingsSi1(Int_t ringsSi1=256);
- virtual void SetSectorsSi1(Int_t sectorsSi1=20);
- virtual void SetRingsSi2(Int_t ringsSi2=128);
- virtual void SetSectorsSi2(Int_t sectorsSi2=40);
void SetEventNumber(Int_t i) {fEvNrSig = i;}
void Eta2Radius(Float_t, Float_t, Float_t*);
virtual void SetHitsAddressBranch(TBranch *b){b->SetAddress(&fHits);}
protected:
- Int_t fIdSens1; //Si sensetive volume
- Int_t fIdSens2; //Si sensetive volume
- Int_t fIdSens3; //Si sensetive volume
- Int_t fIdSens4; //Si sensetive volume
- Int_t fIdSens5; //Si sensetive volume
- //Granularity
+//Granularity
Int_t fRingsSi1; // Number of rings
Int_t fSectorsSi1; // Number of sectors
Int_t fRingsSi2; // Number of rings
Int_t fSectorsSi2; // Number of sectors
- Int_t fNevents ; // Number of events to digitize
+ Int_t fNevents ; // Number of events to digitize
Int_t fEvNrSig; // signal event number
+
TClonesArray *fReconParticles;
ClassDef(AliFMD,5) //Class for the FMD detector
//---------------------------------------------------------------------
-void AliFMDDigitizer::Exec(Option_t* option)
+void AliFMDDigitizer::Exec(Option_t * option)
{
/*
fFMD->SetHitsAddressBranch(brHits);
}else{
Fatal("Exec","EXEC Branch FMD hit not found");
- }
+ }
TClonesArray *FMDhits = fFMD->Hits ();
+
Int_t ntracks = (Int_t) TH->GetEntries();
cout<<"Number of tracks TreeH"<<ntracks<<endl;
for (Int_t track = 0; track < ntracks; track++)
#include "TFile.h"
#include "TROOT.h"
#include "TFolder.h"
+#include "TH2F.h"
// --- Standard library ---
#include <stdlib.h>
//____________________________________________________________________________
-void AliFMDReconstruction::Exec(Option_t *option)
+void AliFMDReconstruction::Exec()
{
//Collects all digits in the same active volume into number of particles
/*
cout<<"\nStart AliFMDReconstruction::Exec(...)"<<endl;
Int_t const knumVolumes=5;
- Int_t const knumSectors=40;
- Int_t const knumRings=768;
- Int_t padADC[10][50][800];
+ Int_t padADC;
Float_t eta, etain,etaout,rad,theta;
Int_t ivol, iSector, iRing;
Float_t rin[5]={4.2,15.4,4.2,15.4,4.2};
Float_t rout[5]={17.4,28.4,17.4,28.4,17.4};
Float_t z[5]={62.8, 75.2, -83.4, -75.2, -340.};
- Int_t numberOfRings[5]={768,384,768,384,768};
+ Int_t numberOfRings[5]={512,256,512,256,512};
Int_t numberOfSectors[5]= {20,40,20,40,20};
Int_t numberOfEtaIntervals[5];
// number of ring for boundary 0.1 eta
Error("Exec","Run Loader loader is NULL - Session not opened");
return;
}
- AliLoader* gime = fRunLoader->GetLoader("FMDLoader");
+
+
+ AliLoader* gime = fRunLoader->GetLoader("FMDLoader");
if (gime == 0x0)
{
Fatal("AliFMDReconstruction","Can not find FMD (loader) in specified event");
}
fRunLoader->LoadgAlice();
+ fRunLoader->LoadHeader();
Int_t retval;
-
- retval = gime->LoadHits("READ");
- if (retval)
- {
- Error("Exec","Error occured while loading hits. Exiting.");
- return;
- }
-
- retval = gime->LoadDigits("READ");
- if (retval)
- {
- Error("Exec","Error occured while loading digits. Exiting.");
- return;
- }
-
- AliFMD * fFMD = (AliFMD *) gAlice->GetDetector("FMD");
- TClonesArray *fReconParticles=fFMD->ReconParticles();
-
- TTree* treeD = gime->TreeD();
- if (treeD == 0x0)
- {
- Error("Exec","Can not get Tree with Digits. Nothing to reconstruct - Exiting");
- return;
- }
- if(fNevents == 0) fNevents=(Int_t)treeD->GetEntries();
- //PH Do we use TreeE (kinematics), or TreeD (digits) toaccess the number
- //PH of events?
-//PH if(fNevents == 0) fNevents=(Int_t)gAlice->TreeE()->GetEntries();
-//PH cout<<" fNevents "<<fNevents<<endl;
-
- TBranch *brDigits=0;
-
- for(Int_t ievent=0;ievent<fNevents;ievent++)
+ TDirectory* cwd = gDirectory;
+ gDirectory = 0x0;
+ Text_t buf1[20];
+ TH2F* hTotal[10];
+ for (Int_t j=1; j<=5; j++){
+ sprintf(buf1,"hTotal%d",j);
+
+ hTotal[j] = new TH2F(buf1," Number of primary particles ",
+ numberOfSectors[j-1],1,numberOfSectors[j-1],
+ numberOfRings[j-1],1,numberOfRings[j-1]);
+ }
+ gDirectory = cwd;
+
+
+ if(fNevents == 0) fNevents=fRunLoader->TreeE()->GetEntries();
+ cout<<" fNevents "<<fNevents<<endl;
+ for(Int_t ievent=0;ievent<fNevents;ievent++)
{
fRunLoader->GetEvent(ievent) ;
- TTree* treeH = gime->TreeH();
- if (treeH == 0x0)
- {
- Error("Exec","Can not get TreeH");
- return;
- }
cout<<" ievent "<<ievent<<endl;
- for (Int_t i=0; i<knumVolumes; i++)
- for(Int_t j=0; j<knumSectors; j++)
- for(Int_t ij=0; ij<knumRings; ij++)
- padADC[i][j][ij]=0; //zhachem ???
-
- brDigits=treeD->GetBranch("FMD");
- if (!brDigits){
- cerr<<"EXEC Branch FMD digits not found"<<endl;
- return;
- }
+ for (Int_t i=0; i<5; i++)
+ hTotal[i+1]->Reset();
+
+ retval = gime->LoadDigits("READ");
+ if (retval)
+ {
+ Error("Exec","Error occured while loading digits. Exiting.");
+ return;
+ }
+
+ AliFMD * fFMD = (AliFMD *) gAlice->GetDetector("FMD");
+ TClonesArray *fReconParticles=fFMD->ReconParticles();
+ TClonesArray *fDigits=fFMD->Digits();
+ TTree* treeD = gime->TreeD();
+ if (treeD == 0x0)
+ {
+ Error("Exec","Can not get Tree with Digits. Nothing to reconstruct - Exiting");
+ return;
+ }
+
+ TBranch *brDigits=0;
+
+ brDigits=treeD->GetBranch("FMD");
+ cout<<" brDigits "<<brDigits<<endl;
+ if (brDigits) {
+ brDigits->SetAddress(&fDigits);
+ // fFMD->SetHitsAddressBranch(brHits);
+ }else{
+ cerr<<"EXEC Branch FMD digits not found"<<endl;
+ return;
+ }
+
if(gime->TreeR()==0) gime->MakeTree("R");
//Make branches
fFMD->MakeBranch("R");
- Int_t zeroADC=1;
+ Int_t zeroADC=6;
AliFMDdigit *fmdDigit;
if (fFMD)
{
gime->TreeD()->GetEvent(0);
- TClonesArray *fFMDdigits=fFMD->Digits();
- Int_t nDigits=fFMDdigits->GetEntries();
+
+ Int_t nDigits=fDigits->GetEntries();
cout<<" nDigits "<<nDigits<<endl;
- Int_t recParticles[6];
- Int_t nRecPart=0 ;
+ Int_t recParticles[6];
+ Int_t nRecPart=0 ;
Int_t zeroPads=0;
Int_t numberOfPads=0; //To avoid warning
Int_t pedestal;
Float_t channelWidth=(22400*50)/1024;
for (Int_t digit=0;digit<nDigits;digit++)
{
- fmdDigit=(AliFMDdigit*)fFMDdigits->UncheckedAt(digit);
+ fmdDigit=(AliFMDdigit*)fDigits->UncheckedAt(digit);
ivol=fmdDigit->Volume();
iSector=fmdDigit->NumberOfSector();
iRing=fmdDigit->NumberOfRing();
pedestal=Int_t(gRandom->Gaus(500,250));
- padADC[ivol-1][iSector-1][iRing-1]=
- fmdDigit->ADCsignal()
+ padADC= fmdDigit->ADCsignal()
-Int_t(Float_t(pedestal)/channelWidth);
- if (padADC[ivol-1][iSector-1][iRing-1]<0)
- padADC[ivol-1][iSector-1][iRing-1]=0;
- } //digit loop
+ if (padADC<0) padADC=0;
+ hTotal[ivol]->Fill(iSector,iRing,padADC);
+ } //digit loop
Int_t rmin=0; Int_t rmax=0; //To avoid warning
Int_t smin=0; Int_t smax=0; //To avoid warning
AliHeader *header = fRunLoader->GetHeader();
Float_t zVertex=o->At(2);
for (ivol=0; ivol<knumVolumes; ivol++)
{
- Float_t realZ=zVertex+z[ivol];
- theta=TMath::ATan(rin[ivol]/TMath::Abs(realZ));
- etain = - TMath::Log( TMath::Tan(theta/2.));
- theta=TMath::ATan(rout[ivol]/TMath::Abs(realZ));
- etaout=- TMath::Log( TMath::Tan(theta/2.));
- numberOfEtaIntervals[ivol]=Int_t ((etain-etaout)*10);
- eta=etain;
- for (Int_t e1=0;e1<=numberOfEtaIntervals[ivol];e1++)
- {
- theta = 2.*TMath::ATan (TMath::Exp (-eta));
- Float_t radmin = TMath::Abs(realZ) * (TMath::Tan (theta));
- rmin= Int_t ( (radmin-rin[ivol])*numberOfRings[ivol]/(rout[ivol]-rin[ivol]));
- eta=eta-0.1;
- theta = 2.*TMath::ATan (TMath::Exp (-eta));
- rad = TMath::Abs(realZ) * (TMath::Tan (theta));
- rmax=Int_t( (rad-rin[ivol])*numberOfRings[ivol]/(rout[ivol]-rin[ivol]));
- zeroPads=0;
- smin=0;
- smax=numberOfSectors[ivol];
- for (Int_t iring=rmin; iring<rmax; iring++)
- {
- numberOfPads=(rmax-rmin)*(smax-smin);
- for
- (Int_t isector=1;
- isector<=numberOfSectors[ivol];
- isector++)
- if(padADC[ivol][isector-1][iring-1]<zeroADC)
- zeroPads++;
- } //ring
- Float_t zerosRatio=
- (Float_t)zeroPads/(Float_t)numberOfPads;
- recParticles[0]=ivol;
- recParticles[1]=smin;
- recParticles[2]=smax;
- recParticles[3]=rmin;
- recParticles[4]=rmax;
- if (zerosRatio>0.1 )
- recParticles[5]=
- DeterminationByPoisson
- (padADC,ivol+1,rmin,rmax,smin,smax);
- else
- recParticles[5]=
- DeterminationByThresholds
- (padADC,ivol+1,rmin,rmax,smin,smax);
- new((*fReconParticles)[nRecPart++])
- AliFMDReconstParticles(recParticles);
+ Float_t ring2number=Float_t (numberOfRings[ivol])/
+ (rout[ivol]-rin[ivol]);
+ Float_t realZ=zVertex+z[ivol];
+ theta=TMath::ATan(rout[ivol]/TMath::Abs(realZ));
+ etain = - TMath::Log( TMath::Tan(theta/2.));
+ theta=TMath::ATan(rin[ivol]/TMath::Abs(realZ));
+ etaout=- TMath::Log( TMath::Tan(theta/2.));
+ numberOfEtaIntervals[ivol]=(etaout-etain)*10-1;
+ eta=etain;
+ for (Int_t e1=0;e1<=numberOfEtaIntervals[ivol];e1++)
+ {
+ theta = 2.*TMath::ATan (TMath::Exp (-eta));
+ Float_t radmin = TMath::Abs(realZ) * (TMath::Tan (theta));
+ rmax= Int_t ( (radmin-rin[ivol])*ring2number+0.5);
+ cout<<ivol<<" "<<" eta "<<eta<<" radmin "<<radmin<<
+
+ " Rmax "<<rmax<<" "<<endl;;
+ eta=eta+0.1;
+ theta = 2.*TMath::ATan (TMath::Exp (-eta));
+ rad = TMath::Abs(realZ) * (TMath::Tan (theta));
+ rmin=Int_t( (rad-rin[ivol])*ring2number+0.5);
+ cout<<"eta "<<eta<<" rad "<<rad<<" Rmin "<<rmin<<endl;
+ // if(ivol==2&&e1==13) rmin=0;
+ zeroPads=0;
+ smin=0;
+ smax=numberOfSectors[ivol];
+ numberOfPads=(rmax-rmin)*(smax-smin);
+ for (Int_t iring=rmin; iring<rmax; iring++)
+ {
+ for
+ (Int_t isector=0;
+ isector<numberOfSectors[ivol];
+ isector++)
+ {
+ if(hTotal[ivol+1]->GetBinContent(isector+1,iring+1)
+ <zeroADC) zeroPads++;}
+
+ } //ring
+ Float_t numberOfPads=Float_t(smax-smin)*Float_t(rmax-rmin);
+
+ cout<<" zero "<<zeroPads++<<" pads "<<numberOfPads;
+ Double_t lambda=-TMath::Log(Double_t(zeroPads)/numberOfPads);
+ Int_t fRecon=(lambda*numberOfPads+0.5);
+
+ Float_t zerosRatio=
+ (Float_t)zeroPads/(Float_t)numberOfPads;
+ cout<<" zerosRatio "<<zerosRatio<<" recon "<<fRecon<<endl;
+ recParticles[0]=ivol+1;
+ recParticles[1]=smin;
+ recParticles[2]=smax;
+ recParticles[3]=rmin;
+ recParticles[4]=rmax;
+ recParticles[5]= fRecon;
+ new((*fReconParticles)[nRecPart++])
+ AliFMDReconstParticles(recParticles);
+
+
} // eta
} // volume
cout<<"\nAliFMDReconstruction::Exec finished"<<endl;
}
-//------------------------------------------------------------
-Int_t AliFMDReconstruction::DeterminationByThresholds
-(Int_t padAdc[][50][800],Int_t volume, Int_t rmin, Int_t rmax,
- Int_t smin, Int_t smax)
-{
- /*
- reconstruct number of particles by
- energy deposited threshold method
- Using if number of empty pads less then 10%
-
-*/
- cout<<"\nStart threshold method\n";
-
- Int_t thresholdInner[30]={
- 0, 14, 28, 42, 57,
- 72, 89, 104, 124, 129,
- 164, 174, 179, 208, 228,
- 248, 268, 317, 337, 357,
- 392, 407, 416, 426, 436,
- 461, 468, 493, 506, 515};
-
- Int_t thresholdOuter[30]={0, 18, 48, 77, 105,
- 132, 165, 198, 231,
- 264, 286, 308, 334,
- 352, 374, 418, 440,
- 462, 484, 506, 528,
- 550, 572, 594, 616};
- Int_t threshold[30];
- for (Int_t it=0; it<30; it++) {
- if(volume==1||volume==3||volume==5) threshold[it]=thresholdInner[it];
- if(volume==2||volume==4) threshold[it]=thresholdOuter[it];
- }
- Int_t thresholdArraySize = 30;
- Int_t numPart=0;
- //Inner Si
- for (Int_t iring=rmin; iring<rmax; iring++)
- {
- for (Int_t isector=smin; isector<smax; isector++)
- {
- for (int i=0;i<thresholdArraySize-1;i++)
- {
- if(padAdc[volume-1][isector][iring]>threshold[i]
- &&padAdc[volume-1][isector][iring]<=threshold[i+1])
- {
- numPart+=i;
- break;
- }; // if in threshol interval
- }; //threshold_array_size
- }; //iring
- }; //sector
- cout<<"\nEnd threshol method"<<endl;
- return numPart;
-}
-
-//__________________________________________________________________
-
-Int_t AliFMDReconstruction::DeterminationByPoisson
-(Int_t padAdc[][50][800],
- Int_t vol, Int_t rmin, Int_t rmax,
- Int_t secmin, Int_t secmax)
-{
- /*
- reconstruct number of particles by Poisson statistic method
- according number of empty pad in chosen group of pads
- using if number of empty pads more then 10%
-
- */
-
- // cout<<"\nStart Poisson method";
- Int_t thresholdADC=1;
- Int_t zeropads=0;
- for (Int_t i=rmin;i<rmax;i++)
- {
- for (Int_t j=secmin;j<secmax;j++)
- {
- if (padAdc[vol-1][j][i]<thresholdADC) zeropads++;
- };
- };
- Float_t lambda=-TMath::Log(Float_t(zeropads)/
- ( Float_t(secmax-secmin)*
- Float_t(rmax-rmin))); //+1 zdes' ne nado
- Int_t fRecon=(Int_t)(lambda*(secmax-secmin)*(rmax-rmin)); //+1 zdes' ne nado
- // cout<<"\nEnd Poisson method"<<endl;
- return fRecon;
-}
-
-
AliFMDReconstruction() ;
AliFMDReconstruction(AliRunLoader* rl) ;
virtual ~AliFMDReconstruction();
- virtual void Exec(Option_t *option);
+ virtual void Exec();
void SetNEvents(Int_t Nevents){fNevents = Nevents;}
Stat_t GetNEvents() {return fNevents;}
TClonesArray *Digits() {return fDigits;}
void AliFMDv0::CreateGeometry()
{
- //
+//
// Create the geometry of Forward Multiplicity Detector version 0
- //Detector consists of 5 volumes:
- // 1st covered pseudorapidity interval from 3.58 to 2.03
- // and placed on 62.8cm in Z-direction;
- // 2nd - from 1.94 to 1.51 and Z=75.2 cm;
+ //
+ //Detector consists of 6 volumes:
+ // 1st covered pseudorapidity interval from 3.3 to 2.0
+ // and placed on 65cm in Z-direction;
+ // 2nd - from 2.0 to 1.6 and Z=85 cm;
// 3d - the same pseudorapidity interval as the 1st
- // but on the other side from the interaction point z=-62.8cm;
+ // but on the other side from the interaction point z=-65cm;
// 4th - simmetricaly with the 2nd :
- // pseudorapidity from 1.94 to 1.51, Z=-75.2cm
- // 5th - from 3.71 to 5.28, Z=-345cm
- // Each part has 300mkm Si (sensetive area, detector itself),
+ // pseudorapidity from 2.0 to 1.6, Z=-85cm
+ // 5th - from 3.6 to 4.7, Z=-270cm
+ // 6th - from 4.5 to 5.5 , Z=-630cm.
+ // Each part has 400mkm Si (sensetive area, detector itself),
// 0.75cm of plastic simulated electronics material,
// Al support ring 2cm thickness and 1cm width placed on
// the outer radius of each Si disk;
- //
+ //
// begin Html
/*
<img src="gif/AliFMDv0.gif">
*/
//
+
+
Int_t *idtmed = fIdtmed->GetArray();
+
Int_t ifmd;
Int_t idrotm[999];
- Float_t zfmd,par[3];
- char name[5], nameSi[5], nameSector[5], nameRing[5];
-
- Float_t rin[6], rout[6],zpos;
-
- Float_t etain[5]= {3.40, 2.29, 3.68, 2.29, 5.09};
- Float_t etaout[6]={2.01, 1.70, 2.28, 1.70, 3.68};
- // Float_t z[6]={64., 85., -64., -85., -270., -630};
- Float_t z[6]={62.8, 75.2, -83.4, -75.2, -340.};
- Float_t zDet=0.03;
- Float_t zElectronic=0.1;
- Float_t zSupport=1.;
+ Float_t zFMD,par[3],ppcon[15];
+ Float_t z[5]={62.8, 75.2, -83.4, -75.2, -340.};
+ Float_t NylonTube[3]={0.2,0.6,0.45};
+ Float_t zPCB=0.12; Float_t zHoneyComb=0.5;
+ Float_t zSi=0.03;
+
+ char nameFMD[5], nameSi[5], nameSector[5], nameRing[5];
+ Char_t nameHoney[5], nameHoneyIn[5], nameHoneyOut[5];
+ Char_t namePCB[5], nameCopper[5], nameChips[5], nameG10[5];
+ Char_t nameLPCB[5], nameLCopper[5], nameLChips[5], nameGL10[5];;
+ Float_t rin[5]={4.2,15.4,4.2,15.4,4.2};
+ Float_t rout[5]={17.4,28.4,17.4,28.4,17.4};
+ Float_t RinHoneyComb[5] ={ 5.15,16.4, 5.15,16.4, 5.15};
+ Float_t RoutHoneyComb[5]={20.63,34.92,22.3, 32.02,20.63};
+ Float_t zInside;
+ Float_t zCooper=0.01; Float_t zChips=0.01;
+ Float_t yNylonTube[5]={10,20,10,20,10};
- Float_t zFMD=1.;
-//-------------------------------------------------------------------
- // FMD
- //------------------------------------------------------------------
- cout<<" !!!!!!!!!!!New FMD geometry !!!!!!!!!"<<endl;
AliMatrix(idrotm[901], 90, 0, 90, 90, 180, 0);
-
- // gMC->Gsvolu("GSI","TUBE", idtmed[1], par, 0);
- gMC->Gsvolu("GEL ","TUBE", idtmed[4], par, 0);
- gMC->Gsvolu("GSUP","TUBE", idtmed[2], par, 0);
-
- for (ifmd =0; ifmd < 5; ifmd++){
-
- sprintf(name,"FMD%d",ifmd+1);
- sprintf(nameSi,"GSI%d",ifmd+1);
- sprintf(nameSector,"GSC%d",ifmd+1);
- sprintf(nameRing,"GRN%d",ifmd+1);
- printf(name,nameSi);
-
- zfmd=TMath::Abs(z[ifmd]);
- AliFMD::Eta2Radius(etain[ifmd],zfmd,&rin[ifmd]);
- AliFMD::Eta2Radius(etaout[ifmd],zfmd,&rout[ifmd]);
-
- par[0]=rin[ifmd]; // pipe size
- par[1]=rout[ifmd];
- par[2]=zFMD/2;
- gMC->Gsvolu(name,"TUBE", idtmed[3], par, 3);
- gMC->Gsvolu(nameSi,"TUBE", idtmed[1], par, 0);
-
- if (z[ifmd] < 0){
- gMC->Gspos(name,1,"ALIC",0,0,z[ifmd],0, "ONLY");}
- else {
- gMC->Gspos(name,1,"ALIC",0,0,z[ifmd],idrotm[901], "ONLY");}
- //Silicon detector
- par[2]=zDet/2;
- zpos=zFMD/2 -par[2];
- gMC->Gsposp(nameSi,ifmd+1,name,0,0,zpos,0, "ONLY",par,3);
+
+
+ // Nylon tubes
+ gMC->Gsvolu("GNYL","TUBE", idtmed[1], NylonTube, 3); //support nylon tube
+ Float_t wideSupport=zSi+3*zPCB+2*NylonTube[2]+zHoneyComb;
+ cout<<" wideSupport "<<wideSupport<<endl;
+
+ for (ifmd=0; ifmd<5; ifmd++)
+ {
+ sprintf(nameFMD,"FMD%d",ifmd+1);
+ ppcon[0]=0;
+ ppcon[1]=360;
+ ppcon[2]=4;
+
+ ppcon[3]=-wideSupport;
+ ppcon[4]=rin[ifmd]+0.1;
+ ppcon[5]=rout[ifmd]+0.1;
+
+ ppcon[6]=ppcon[3]+2*zSi+2*zPCB+2*NylonTube[2];
+ ppcon[7]=rin[ifmd]+0.1;
+ ppcon[8]=rout[ifmd]+0.1;
+
+ ppcon[9]=ppcon[6];
+ ppcon[10]=RinHoneyComb[ifmd]+0.1;
+ ppcon[11]=RoutHoneyComb[ifmd]+0.1;
+
+ ppcon[12]=ppcon[9]+2*zHoneyComb+zPCB;
+ ppcon[13]=RinHoneyComb[ifmd]+0.1;
+ ppcon[14]=RoutHoneyComb[ifmd]+0.1;
+ gMC->Gsvolu(nameFMD,"PCON",idtmed[0],ppcon,15);
+ if (z[ifmd] >0){
+ zFMD=z[ifmd]+wideSupport;
+ gMC->Gspos(nameFMD,1,"ALIC",0,0,zFMD,0, "ONLY");}
+ else {
+ zFMD=z[ifmd]-wideSupport;
+ gMC->Gspos(nameFMD,1,"ALIC",0,0,zFMD,idrotm[901], "ONLY");}
+ //silicon
+ sprintf(nameSi,"GSI%d",ifmd+1);
+ sprintf(nameSector,"GSC%d",ifmd+1);
+ sprintf(nameRing,"GRN%d",ifmd+1);
+
+ //honeycomb support
+ sprintf(nameHoney,"GSU%d",ifmd+1);
+ gMC->Gsvolu(nameHoney,"TUBE", idtmed[0], par, 0); //honeycomb
+ sprintf(nameHoneyIn,"GHI%d",ifmd+1);
+ gMC->Gsvolu(nameHoneyIn,"TUBE", idtmed[7], par, 0); //honey comb inside
+ sprintf(nameHoneyOut,"GHO%d",ifmd+1);
+ gMC->Gsvolu(nameHoneyOut,"TUBE", idtmed[6], par, 0); //honey comb skin
+ //PCB
+ sprintf(namePCB,"GPC%d",ifmd+1);
+ gMC->Gsvolu(namePCB,"TUBE", idtmed[0], par, 0); //PCB
+ sprintf(nameCopper,"GCO%d",ifmd+1);
+ gMC->Gsvolu(nameCopper,"TUBE", idtmed[3], par, 0); // Cooper
+ sprintf(nameChips,"GCH%d",ifmd+1);
+ gMC->Gsvolu(nameChips,"TUBE", idtmed[5], par, 0); // Si chips
+ sprintf(nameG10,"G10%d",ifmd+1);
+ gMC->Gsvolu(nameG10,"TUBE", idtmed[2], par, 0); //G10 plate
+ //last PCB
+ sprintf(nameLPCB,"GPL%d",ifmd+1);
+ gMC->Gsvolu(nameLPCB,"TUBE", idtmed[0], par, 0); //PCB
+ sprintf(nameLCopper,"GCL%d",ifmd+1);
+ gMC->Gsvolu(nameLCopper,"TUBE", idtmed[3], par, 0); // Cooper
+ sprintf(nameLChips,"GHL%d",ifmd+1);
+ gMC->Gsvolu(nameLChips,"TUBE", idtmed[5], par, 0); // Si chips
+ sprintf(nameGL10,"G1L%d",ifmd+1);
+ gMC->Gsvolu(nameGL10,"TUBE", idtmed[2], par, 0); // Last G10
+ par[0]=rin[ifmd]; // pipe size
+ par[1]=rout[ifmd];
+ par[2]=zSi/2;
+ gMC->Gsvolu(nameSi,"TUBE", idtmed[4], par, 3);
+ zInside=ppcon[3]+par[2];
+ gMC->Gspos(nameSi,ifmd+1,nameFMD,0,0,zInside,0, "ONLY");
+ //PCB 1
+ zInside += par[2]+zPCB/2;
+ par[2]=zPCB/2;
+ gMC->Gsposp(namePCB,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+ zInside += zPCB;
+ gMC->Gsposp(namePCB,2,nameFMD,0,0,zInside,0, "ONLY",par,3);
+ Float_t NulonTubeBegin=zInside+2.5*zPCB;
+ par[2]=zPCB/2-0.02;
+ Float_t zInPCB = -zPCB/2+par[2];
+ gMC->Gsposp(nameG10,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB+=par[2]+zCooper/2 ;
+ par[2]=zCooper/2;
+ gMC->Gsposp(nameCopper,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB += zCooper/2 + zChips/2;
+ par[2]=zChips/2;
+ gMC->Gsposp(nameChips,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+ //HoneyComb
+ zHoneyComb=0.8;
+ par[0] = RinHoneyComb[ifmd];
+ par[1] = RoutHoneyComb[ifmd];
+ par[2] = zHoneyComb/2;
+ zInside += 2*NylonTube[2]+par[2];
+ gMC->Gsposp(nameHoney,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+ par[2]=0.1/2;
+ Float_t zHoney=-zHoneyComb/2+par[2];
+ gMC->Gsposp(nameHoneyOut,1,nameHoney,0,0,zHoney,0,
+ "ONLY",par,3); //shkurki
+ zHoney=zHoneyComb/2-par[2];
+ gMC->Gsposp(nameHoneyOut,2,nameHoney,0,0,zHoney,0, "ONLY",par,3);
+ par[2]=(zHoneyComb-2.*0.1)/2; //soty vnutri
+ gMC->Gsposp(nameHoneyIn,1,nameHoney,0,0,0,0, "ONLY",par,3);
+
+ gMC->Gspos("GNYL",1,nameFMD,0,yNylonTube[ifmd],
+ NulonTubeBegin+NylonTube[2]/2.,0, "ONLY");
+ gMC->Gspos("GNYL",2,nameFMD,0,-yNylonTube[ifmd],
+ NulonTubeBegin+NylonTube[2]/2.,0, "ONLY");
+
+ //last PCB
+ par[0]=RoutHoneyComb[ifmd]-9;
+ par[1]=RoutHoneyComb[ifmd];
+ par[2]=zPCB/2;
+ zInside += zHoneyComb/2+par[2];
+ gMC->Gsposp(nameLPCB,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+
+ par[2]=zPCB/2-0.02;
+ zInPCB = -zPCB/2+par[2];
+ gMC->Gsposp(nameGL10,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB+=par[2]+zCooper/2 ;
+ par[2]=zCooper/2;
+ gMC->Gsposp(nameLCopper,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB += zCooper/2 + zChips/2;
+ par[2]=zChips/2;
+ gMC->Gsposp(nameLChips,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+
+
//Granularity
+ fSectorsSi1=20;
+ fRingsSi1=256*2;
+ // fRingsSi1=3; // for drawing only
+ fSectorsSi2=40;
+ fRingsSi2=128*2;
+ // fRingsSi2=3; //for drawing onl
if(ifmd==1||ifmd==3)
{
- gMC->Gsdvn(nameSector, nameSi , fSectorsSi2, 2);
- gMC->Gsdvn(nameRing, nameSector, fRingsSi2, 1);
+ gMC->Gsdvn(nameSector, nameSi , fSectorsSi2, 2);
+ gMC->Gsdvn(nameRing, nameSector, fRingsSi2, 1);
}
else
{
- gMC->Gsdvn(nameSector, nameSi , fSectorsSi1, 2);
- gMC->Gsdvn(nameRing, nameSector , fRingsSi1, 1);
+ gMC->Gsdvn(nameSector, nameSi , fSectorsSi1, 2);
+ gMC->Gsdvn(nameRing, nameSector , fRingsSi1, 1);
}
-
- //Plastic slice for electronics
- par[2]=zElectronic/2;
- zpos=zpos-zDet/2-par[2];
- gMC->Gsposp("GEL ",ifmd+1,name,0,0,zpos,0, "ONLY",par,3);
-
- //Simple Al support
- par[1]=rout[ifmd];
- par[0]=rout[ifmd]-2;
- par[2]=zSupport/2;
- zpos=zpos-zElectronic/2-par[2];
- // gMC->Gsposp("GSUP",ifmd+1,name,0,0,zpos,0, "ONLY",par,3);
-
-
- }
-
+
+ }
}
//------------------------------------------------------------------------
-void AliFMDv0::CreateMaterials()
+void AliFMDv0::CreateMaterials()
{
Int_t isxfld = gAlice->Field()->Integ();
Float_t sxmgmx = gAlice->Field()->Max();
Float_t wPlastic[2]={1,1};
Float_t denPlastic=1.03;
//
-
+ // 60% SiO2 , 40% G10FR4
+ // PC board
+ Float_t apcb[3] = { 28.0855,15.9994,17.749 };
+ Float_t zpcb[3] = { 14.,8.,8.875 };
+ Float_t wpcb[3] = { .28,.32,.4 };
+ Float_t denspcb = 1.8;
+ //
//*** Definition Of avaible FMD materials ***
- AliMaterial(0, "Si chip$", 28.0855,14.,2.33,9.36,999);
- AliMaterial(1, "Al supprt$", 26.980,13.,2.70,8.9,999);
- AliMaterial(2, "FMD Air$", 14.61, 7.3, .001205, 30423.,999);
- AliMixture( 5, "Plastic$",aPlastic,zPlastic,denPlastic,-2,wPlastic);
-
+ AliMaterial(0, "FMD Air$", 14.61, 7.3, .001205, 30423.,999);
+ AliMixture(1, "Plastic$",aPlastic,zPlastic,denPlastic,-2,wPlastic);
+ AliMixture(2, "SSD PCB$", apcb, zpcb, denspcb, 3, wpcb);
+ AliMaterial(3, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
+ AliMaterial(4, "SSD Si$", 28.0855, 14., 2.33, 9.36, 999.);
+ AliMaterial(5, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
+ AliMaterial(6, "SSD C$", 12.011, 6., 2.265,18.8, 999.);
+ AliMaterial(7, "SSD Kapton$", 12.011, 6., 0.01, 31.27, 999.);//honeycomb
+ AliMaterial(8, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
+
//**
- AliMedium(1, "Si chip$", 0, 1, isxfld, sxmgmx, 1., .001, 1., .001, .001);
- AliMedium(2, "Al support$", 1, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
- AliMedium(3, "FMD air$", 2, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
- AliMedium(4, "Plastic$", 5, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(0, "FMD air$", 0, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(1, "Plastic$", 1, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(2, "SSD PCB$", 2, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(3, "SSD Copper$", 3, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(4, "SSD Si$", 4, 1, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(5, "SSD Si chip$", 5, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(6, "SSD C$", 6, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(7, "SSD Kapton$", 7, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(8, "SSD G10FR4$", 8, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
fIdSens4=0;
fIdSens5=0;
// setBufferSize(128000);
-}
+ }
//-------------------------------------------------------------------------
void AliFMDv1::CreateGeometry()
{
*/
//
-
+
+
Int_t *idtmed = fIdtmed->GetArray();
Int_t ifmd;
Int_t idrotm[999];
- Float_t zfmd,par[3];
- char name[5], nameSi[5], nameSector[5], nameRing[5];
-
- Float_t rin[6], rout[6],zpos;
-
- Float_t etain[5]= {3.40, 2.29, 3.68, 2.29, 5.09};
- Float_t etaout[6]={2.01, 1.70, 2.28, 1.70, 3.68};
- // Float_t z[6]={64., 85., -64., -85., -270., -630};
- Float_t z[6]={62.8, 75.2, -83.4, -75.2, -340.};
- Float_t zDet=0.03;
- Float_t zElectronic=0.1;
- Float_t zSupport=1.;
+ Float_t zFMD,par[3],ppcon[15];
+ Float_t z[5]={62.8, 75.2, -83.4, -75.2, -340.};
+ Float_t NylonTube[3]={0.2,0.6,0.45};
+ Float_t zPCB=0.12; Float_t zHoneyComb=0.5;
+ Float_t zSi=0.03;
+
+ char nameFMD[5], nameSi[5], nameSector[5], nameRing[5];
+ Char_t nameHoney[5], nameHoneyIn[5], nameHoneyOut[5];
+ Char_t namePCB[5], nameCopper[5], nameChips[5], nameG10[5];
+ Char_t nameLPCB[5], nameLCopper[5], nameLChips[5], nameGL10[5];;
+ Float_t rin[5]={4.2,15.4,4.2,15.4,4.2};
+ Float_t rout[5]={17.4,28.4,17.4,28.4,17.4};
+ Float_t RinHoneyComb[5] ={ 5.15,16.4, 5.15,16.4, 5.15};
+ Float_t RoutHoneyComb[5]={20.63,34.92,22.3, 32.02,20.63};
+ Float_t zInside;
+ Float_t zCooper=0.01; Float_t zChips=0.01;
+ Float_t yNylonTube[5]={10,20,10,20,10};
- Float_t zFMD=1.;
-//-------------------------------------------------------------------
- // FMD
- //------------------------------------------------------------------
- cout<<" !!!!!!!!!!!New FMD geometry !!!!!!!!!"<<endl;
AliMatrix(idrotm[901], 90, 0, 90, 90, 180, 0);
-
- // gMC->Gsvolu("GSI","TUBE", idtmed[1], par, 0);
- gMC->Gsvolu("GEL ","TUBE", idtmed[4], par, 0);
- gMC->Gsvolu("GSUP","TUBE", idtmed[2], par, 0);
-
- for (ifmd =0; ifmd < 5; ifmd++){
-
- sprintf(name,"FMD%d",ifmd+1);
- sprintf(nameSi,"GSI%d",ifmd+1);
- sprintf(nameSector,"GSC%d",ifmd+1);
- sprintf(nameRing,"GRN%d",ifmd+1);
-
- zfmd=TMath::Abs(z[ifmd]);
-
- AliFMD::Eta2Radius(etain[ifmd],zfmd,&rin[ifmd]);
- AliFMD::Eta2Radius(etaout[ifmd],zfmd,&rout[ifmd]);
-
- par[0]=rin[ifmd]; // pipe size
- par[1]=rout[ifmd];
- par[2]=zFMD/2;
- gMC->Gsvolu(name,"TUBE", idtmed[3], par, 3);
- gMC->Gsvolu(nameSi,"TUBE", idtmed[1], par, 0);
-
- if (z[ifmd] < 0){
- gMC->Gspos(name,1,"ALIC",0,0,z[ifmd],0, "ONLY");}
- else {
- gMC->Gspos(name,1,"ALIC",0,0,z[ifmd],idrotm[901], "ONLY");}
- //Silicon detector
- par[2]=zDet/2;
- zpos=zFMD/2 -par[2];
- gMC->Gsposp(nameSi,ifmd+1,name,0,0,zpos,0, "ONLY",par,3);
-
- //Granularity
+
+
+ // Nylon tubes
+ gMC->Gsvolu("GNYL","TUBE", idtmed[1], NylonTube, 3); //support nylon tube
+ Float_t wideSupport=zSi+3*zPCB+2*NylonTube[2]+zHoneyComb;
+ cout<<" wideSupport "<<wideSupport<<endl;
+
+ for (ifmd=0; ifmd<5; ifmd++)
+ {
+ sprintf(nameFMD,"FMD%d",ifmd+1);
+ ppcon[0]=0;
+ ppcon[1]=360;
+ ppcon[2]=4;
+
+ ppcon[3]=-wideSupport;
+ ppcon[4]=rin[ifmd]+0.1;
+ ppcon[5]=rout[ifmd]+0.1;
+
+ ppcon[6]=ppcon[3]+2*zSi+2*zPCB+2*NylonTube[2];
+ ppcon[7]=rin[ifmd]+0.1;
+ ppcon[8]=rout[ifmd]+0.1;
+
+ ppcon[9]=ppcon[6];
+ ppcon[10]=RinHoneyComb[ifmd]+0.1;
+ ppcon[11]=RoutHoneyComb[ifmd]+0.1;
+
+ ppcon[12]=ppcon[9]+2*zHoneyComb+zPCB;
+ ppcon[13]=RinHoneyComb[ifmd]+0.1;
+ ppcon[14]=RoutHoneyComb[ifmd]+0.1;
+ gMC->Gsvolu(nameFMD,"PCON",idtmed[0],ppcon,15);
+ if (z[ifmd] >0){
+ zFMD=z[ifmd]+wideSupport;
+ gMC->Gspos(nameFMD,1,"ALIC",0,0,zFMD,0, "ONLY");}
+ else {
+ zFMD=z[ifmd]-wideSupport;
+ gMC->Gspos(nameFMD,1,"ALIC",0,0,zFMD,idrotm[901], "ONLY");}
+ //silicon
+ sprintf(nameSi,"GSI%d",ifmd+1);
+ sprintf(nameSector,"GSC%d",ifmd+1);
+ sprintf(nameRing,"GRN%d",ifmd+1);
+
+ //honeycomb support
+ sprintf(nameHoney,"GSU%d",ifmd+1);
+ gMC->Gsvolu(nameHoney,"TUBE", idtmed[0], par, 0); //honeycomb
+ sprintf(nameHoneyIn,"GHI%d",ifmd+1);
+ gMC->Gsvolu(nameHoneyIn,"TUBE", idtmed[7], par, 0); //honey comb inside
+ sprintf(nameHoneyOut,"GHO%d",ifmd+1);
+ gMC->Gsvolu(nameHoneyOut,"TUBE", idtmed[6], par, 0); //honey comb skin
+ //PCB
+ sprintf(namePCB,"GPC%d",ifmd+1);
+ gMC->Gsvolu(namePCB,"TUBE", idtmed[0], par, 0); //PCB
+ sprintf(nameCopper,"GCO%d",ifmd+1);
+ gMC->Gsvolu(nameCopper,"TUBE", idtmed[3], par, 0); // Cooper
+ sprintf(nameChips,"GCH%d",ifmd+1);
+ gMC->Gsvolu(nameChips,"TUBE", idtmed[5], par, 0); // Si chips
+ sprintf(nameG10,"G10%d",ifmd+1);
+ gMC->Gsvolu(nameG10,"TUBE", idtmed[2], par, 0); //G10 plate
+ //last PCB
+ sprintf(nameLPCB,"GPL%d",ifmd+1);
+ gMC->Gsvolu(nameLPCB,"TUBE", idtmed[0], par, 0); //PCB
+ sprintf(nameLCopper,"GCL%d",ifmd+1);
+ gMC->Gsvolu(nameLCopper,"TUBE", idtmed[3], par, 0); // Cooper
+ sprintf(nameLChips,"GHL%d",ifmd+1);
+ gMC->Gsvolu(nameLChips,"TUBE", idtmed[5], par, 0); // Si chips
+ sprintf(nameGL10,"G1L%d",ifmd+1);
+ gMC->Gsvolu(nameGL10,"TUBE", idtmed[2], par, 0); // Last G10
+ par[0]=rin[ifmd]; // pipe size
+ par[1]=rout[ifmd];
+ par[2]=zSi/2;
+ gMC->Gsvolu(nameSi,"TUBE", idtmed[4], par, 3);
+ zInside=ppcon[3]+par[2];
+ gMC->Gspos(nameSi,ifmd+1,nameFMD,0,0,zInside,0, "ONLY");
+ //PCB 1
+ zInside += par[2]+zPCB/2;
+ par[2]=zPCB/2;
+ gMC->Gsposp(namePCB,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+ zInside += zPCB;
+ gMC->Gsposp(namePCB,2,nameFMD,0,0,zInside,0, "ONLY",par,3);
+ Float_t NulonTubeBegin=zInside+2.5*zPCB;
+ par[2]=zPCB/2-0.02;
+ Float_t zInPCB = -zPCB/2+par[2];
+ gMC->Gsposp(nameG10,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB+=par[2]+zCooper/2 ;
+ par[2]=zCooper/2;
+ gMC->Gsposp(nameCopper,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB += zCooper/2 + zChips/2;
+ par[2]=zChips/2;
+ gMC->Gsposp(nameChips,1,namePCB,0,0,zInPCB,0, "ONLY",par,3);
+ //HoneyComb
+ zHoneyComb=0.8;
+ par[0] = RinHoneyComb[ifmd];
+ par[1] = RoutHoneyComb[ifmd];
+ par[2] = zHoneyComb/2;
+ zInside += 2*NylonTube[2]+par[2];
+ gMC->Gsposp(nameHoney,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+ par[2]=0.1/2;
+ Float_t zHoney=-zHoneyComb/2+par[2];
+ gMC->Gsposp(nameHoneyOut,1,nameHoney,0,0,zHoney,0,
+ "ONLY",par,3); //shkurki
+ zHoney=zHoneyComb/2-par[2];
+ gMC->Gsposp(nameHoneyOut,2,nameHoney,0,0,zHoney,0, "ONLY",par,3);
+ par[2]=(zHoneyComb-2.*0.1)/2; //soty vnutri
+ gMC->Gsposp(nameHoneyIn,1,nameHoney,0,0,0,0, "ONLY",par,3);
+
+ gMC->Gspos("GNYL",1,nameFMD,0,yNylonTube[ifmd],
+ NulonTubeBegin+NylonTube[2]/2.,0, "ONLY");
+ gMC->Gspos("GNYL",2,nameFMD,0,-yNylonTube[ifmd],
+ NulonTubeBegin+NylonTube[2]/2.,0, "ONLY");
+
+ //last PCB
+ par[0]=RoutHoneyComb[ifmd]-9;
+ par[1]=RoutHoneyComb[ifmd];
+ par[2]=zPCB/2;
+ zInside += zHoneyComb/2+par[2];
+ gMC->Gsposp(nameLPCB,1,nameFMD,0,0,zInside,0, "ONLY",par,3);
+
+ par[2]=zPCB/2-0.02;
+ zInPCB = -zPCB/2+par[2];
+ gMC->Gsposp(nameGL10,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB+=par[2]+zCooper/2 ;
+ par[2]=zCooper/2;
+ gMC->Gsposp(nameLCopper,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+ zInPCB += zCooper/2 + zChips/2;
+ par[2]=zChips/2;
+ gMC->Gsposp(nameLChips,1,nameLPCB,0,0,zInPCB,0, "ONLY",par,3);
+
+
+ //Granularity
fSectorsSi1=20;
- fRingsSi1=256;
+ fRingsSi1=256*2;
+ // fRingsSi1=3; // for drawing only
fSectorsSi2=40;
- fRingsSi2=128;
- if(ifmd==1||ifmd==3)
+ fRingsSi2=128*2;
+ // fRingsSi2=3; //for drawing onl
+ if(ifmd==1||ifmd==3)
{
- gMC->Gsdvn(nameSector, nameSi , fSectorsSi2, 2);
- gMC->Gsdvn(nameRing, nameSector, fRingsSi2, 1);
+ gMC->Gsdvn(nameSector, nameSi , fSectorsSi2, 2);
+ gMC->Gsdvn(nameRing, nameSector, fRingsSi2, 1);
}
else
{
- gMC->Gsdvn(nameSector, nameSi , fSectorsSi1, 2);
- gMC->Gsdvn(nameRing, nameSector , fRingsSi1, 1);
+ gMC->Gsdvn(nameSector, nameSi , fSectorsSi1, 2);
+ gMC->Gsdvn(nameRing, nameSector , fRingsSi1, 1);
}
-
- //Plastic slice for electronics
- par[2]=zElectronic/2;
- zpos=zpos-zDet/2-par[2];
- gMC->Gsposp("GEL ",ifmd+1,name,0,0,zpos,0, "ONLY",par,3);
-
- //Simple Al support
- par[1]=rout[ifmd];
- par[0]=rout[ifmd]-2;
- par[2]=zSupport/2;
- zpos=zpos-zElectronic/2-par[2];
- // gMC->Gsposp("GSUP",ifmd+1,name,0,0,zpos,0, "ONLY",par,3);
-
-
- }
-
+
+ }
}
+
//------------------------------------------------------------------------
-void AliFMDv1::CreateMaterials()
+void AliFMDv1::CreateMaterials()
{
Int_t isxfld = gAlice->Field()->Integ();
Float_t sxmgmx = gAlice->Field()->Max();
Float_t wPlastic[2]={1,1};
Float_t denPlastic=1.03;
//
-
+ // 60% SiO2 , 40% G10FR4
+ // PC board
+ Float_t apcb[3] = { 28.0855,15.9994,17.749 };
+ Float_t zpcb[3] = { 14.,8.,8.875 };
+ Float_t wpcb[3] = { .28,.32,.4 };
+ Float_t denspcb = 1.8;
+ //
//*** Definition Of avaible FMD materials ***
- AliMaterial(0, "Si chip$", 28.0855,14.,2.33,9.36,999);
- AliMaterial(1, "Al supprt$", 26.980,13.,2.70,8.9,999);
- AliMaterial(2, "FMD Air$", 14.61, 7.3, .001205, 30423.,999);
- AliMixture( 5, "Plastic$",aPlastic,zPlastic,denPlastic,-2,wPlastic);
-
+ AliMaterial(0, "FMD Air$", 14.61, 7.3, .001205, 30423.,999);
+ AliMixture(1, "Plastic$",aPlastic,zPlastic,denPlastic,-2,wPlastic);
+ AliMixture(2, "SSD PCB$", apcb, zpcb, denspcb, 3, wpcb);
+ AliMaterial(3, "SSD Copper$", 63.546, 29., 8.96, 1.43, 999.);
+ AliMaterial(4, "SSD Si$", 28.0855, 14., 2.33, 9.36, 999.);
+ AliMaterial(5, "SSD Si chip$", 28.0855, 14., 2.33, 9.36, 999.);
+ AliMaterial(6, "SSD C$", 12.011, 6., 2.265,18.8, 999.);
+ AliMaterial(7, "SSD Kapton$", 12.011, 6., 0.01, 31.27, 999.);//honeycomb
+ AliMaterial(8, "SSD G10FR4$", 17.749, 8.875, 1.8, 21.822, 999.);
+
//**
- AliMedium(1, "Si chip$", 0, 1, isxfld, sxmgmx, 1., .001, 1., .001, .001);
- AliMedium(2, "Al support$", 1, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
- AliMedium(3, "FMD air$", 2, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
- AliMedium(4, "Plastic$", 5, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(0, "FMD air$", 0, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(1, "Plastic$", 1, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(2, "SSD PCB$", 2, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(3, "SSD Copper$", 3, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(4, "SSD Si$", 4, 1, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(5, "SSD Si chip$", 5, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(6, "SSD C$", 6, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
+ AliMedium(7, "SSD Kapton$", 7, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
+ AliMedium(8, "SSD G10FR4$", 8, 0,isxfld, sxmgmx, 10., .01, 1., .003, .003);
Int_t fIdSens3; // Sensetive volume in FMD
Int_t fIdSens4; // Sensetive volume in FMD
Int_t fIdSens5; // Sensetive volume in FMD
+
// Background event for event mixing