Removed overlaps. Geometry as installed, i.e. the drift length in both direction...
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 24 Apr 2007 11:30:01 +0000 (11:30 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 24 Apr 2007 11:30:01 +0000 (11:30 +0000)
15 files changed:
EVE/Alieve/TPCSectorData.cxx
HLT/TPCLib/AliHLTTPCTransform.cxx
HLT/src/AliHLTTransform.cxx
TPC/AliTPC.cxx
TPC/AliTPCFast.cxx
TPC/AliTPCParam.cxx
TPC/AliTPCParam.h
TPC/AliTPCROC.h
TPC/AliTPCclusterer.cxx
TPC/AliTPCclustererMI.cxx
TPC/AliTPCtrackerMI.cxx
TPC/AliTPCv0.cxx
TPC/AliTPCv1.cxx
TPC/AliTPCv2.cxx
TPC/AliTPCv3.cxx

index dc482ce..98c6bca 100644 (file)
@@ -44,7 +44,7 @@ void TPCSectorData::InitStatics()
   if(fgParam != 0) return;
 
   fgParam    = new AliTPCParamSR;
-  fgZLength  = fgParam->GetZLength();
+  fgZLength  = fgParam->GetZLength(0)+0.275;
   fgNAllRows = fgParam->GetNRowLow() + fgParam->GetNRowUp();
   fgNAllPads = 0;
   fgRowBegs  = new Int_t[fgNAllRows + 1];
index ef92151..5862917 100644 (file)
@@ -978,7 +978,7 @@ Bool_t AliHLTTPCTransform::Init(AliRunLoader *runLoader)
   fgPadPitchWidthUp=param->GetOuterPadPitchWidth();
   fgZWidth=param->GetZWidth();
   fgZSigma=param->GetZSigma();
-  fgZLength=param->GetZLength();
+  fgZLength=param->GetZLength(0)+0.275;
   fgZOffset=param->GetZOffset();
   fgDiffT=param->GetDiffT();
   fgDiffL=param->GetDiffL();
@@ -1321,7 +1321,7 @@ Bool_t AliHLTTPCTransform::MakeInitFile(Char_t *rootfilename,Char_t *filename)
   fgPadPitchWidthUp=param->GetOuterPadPitchWidth();
   fgZWidth=param->GetZWidth();
   fgZSigma=param->GetZSigma();
-  fgZLength=param->GetZLength();
+  fgZLength=param->GetZLength(0)+0.275;
   fgZOffset=param->GetZOffset();
   fgDiffT=param->GetDiffT();
   fgDiffL=param->GetDiffL();
@@ -1669,9 +1669,9 @@ Double_t AliHLTTPCTransform::GetParSigmaZ2(Int_t padrow,Float_t z,Float_t tgl)
 
   Double_t drift;
   if(z > 0)
-    drift = AliHLTTPCTransform::GetZLength() - z;
+    drift = AliHLTTPCTransform::GetZLength()-0.275 - z;
   else
-    drift = AliHLTTPCTransform::GetZLength() + z;
+    drift = AliHLTTPCTransform::GetZLength()-0.302 + z;
   
   Double_t t1 = fgZSigma*fgZSigma;
   Double_t t2 = fgDiffL*fgDiffL*drift;
index 2410085..e3626a2 100644 (file)
@@ -799,7 +799,7 @@ Bool_t AliHLTTransform::Init(AliRunLoader *runLoader)
   fgPadPitchWidthUp=param->GetOuterPadPitchWidth();
   fgZWidth=param->GetZWidth();
   fgZSigma=param->GetZSigma();
-  fgZLength=param->GetZLength();
+  fgZLength=param->GetZLength(0)+0.275;
   fgZOffset=param->GetZOffset();
   fgDiffT=param->GetDiffT();
   fgDiffL=param->GetDiffL();
@@ -1142,7 +1142,7 @@ Bool_t AliHLTTransform::MakeInitFile(Char_t *rootfilename,Char_t *filename)
   fgPadPitchWidthUp=param->GetOuterPadPitchWidth();
   fgZWidth=param->GetZWidth();
   fgZSigma=param->GetZSigma();
-  fgZLength=param->GetZLength();
+  fgZLength=param->GetZLength(0);
   fgZOffset=param->GetZOffset();
   fgDiffT=param->GetDiffT();
   fgDiffL=param->GetDiffL();
@@ -1486,9 +1486,9 @@ Double_t AliHLTTransform::GetParSigmaZ2(Int_t padrow,Float_t z,Float_t tgl)
 
   Double_t drift;
   if(z > 0)
-    drift = AliHLTTransform::GetZLength() - z;
+    drift = AliHLTTransform::GetZLength()-0.275 - z;
   else
-    drift = AliHLTTransform::GetZLength() + z;
+    drift = AliHLTTransform::GetZLength()-0.302 + z;
   
   Double_t t1 = fgZSigma*fgZSigma;
   Double_t t2 = fgDiffL*fgDiffL*drift;
index 231ecae..dfa085e 100644 (file)
@@ -1818,7 +1818,7 @@ void AliTPC::MakeSector(Int_t isec,Int_t nrows,TTree *TH,
       }
 
       // Remove hits which arrive before the TPC opening gate signal
-      if(((fTPCParam->GetZLength()-TMath::Abs(tpcHit->Z()))
+      if(((fTPCParam->GetZLength(isec)-TMath::Abs(tpcHit->Z()))
          /fTPCParam->GetDriftV()+tpcHit->Time())<fTPCParam->GetGateDelay()) {
        tpcHit = (AliTPChit*) NextHit();
        continue;
@@ -1859,7 +1859,7 @@ void AliTPC::MakeSector(Int_t isec,Int_t nrows,TTree *TH,
       //---------------------------------------------------
 
 
-      Float_t time = 1.e6*(fTPCParam->GetZLength()-TMath::Abs(tpcHit->Z()))
+      Float_t time = 1.e6*(fTPCParam->GetZLength(isec)-TMath::Abs(tpcHit->Z()))
        /fTPCParam->GetDriftV(); 
       // in microseconds!      
       Float_t attProb = fTPCParam->GetAttCoef()*
index 7d800a9..c4f3c09 100644 (file)
@@ -233,7 +233,7 @@ void AliTPCFast::Hits2Clusters(AliRunLoader* runLoader) const
           Float_t ymax=xprim*TMath::Tan(0.5*alpha);
           if (TMath::Abs(xyz[0])>ymax) xyz[0]=yprim; 
        xyz[1]=gRandom->Gaus(tpcHit->Z(),TMath::Sqrt(sigmaZ)); // z
-          if (TMath::Abs(xyz[1])>param->GetZLength()) xyz[1]=tpcHit->Z(); 
+          if (TMath::Abs(xyz[1])>param->GetZLength(isec)) xyz[1]=tpcHit->Z(); 
        xyz[2]=sigmaRphi;                                     // fSigmaY2
        xyz[3]=sigmaZ;                                        // fSigmaZ2
        xyz[4]=tpcHit->fQ;                                    // q
@@ -523,8 +523,8 @@ void AliTPCFast::Hits2ExactClustersSector(AliRunLoader* runLoader,
          sigmay2 = TMath::Min(sigmay2,1.);
          //
          //
-         z = sign*(param->GetZLength() - z);
-         if (TMath::Abs(z)< param->GetZLength()-1){
+         z = sign*(param->GetZLength(isec) - z);
+         if (TMath::Abs(z)< param->GetZLength(isec)-1){
            AliTPCClustersRow * row = (clustersArray->GetRow(isec,lastrow));
            if (row!=0) {
              AliTPCclusterMI* cl = new((AliTPCclusterMI*)row->Append()) AliTPCclusterMI ;
index cedd07c..af21dcf 100644 (file)
@@ -675,7 +675,7 @@ Bool_t AliTPCParam::ReadGeoMatrices(){
       mirrorZ.SetAngles(90,0,90,90,180,0);
       fClusterMatrix[isec]->Multiply(&mirrorZ);
     }
-    TGeoTranslation trans(0,0,GetZLength());
+    TGeoTranslation trans(0,0,GetZLength(isec));
     fClusterMatrix[isec]->MultiplyLeft(&trans);
     fClusterMatrix[isec]->MultiplyLeft((GetGlobalMatrix(isec)));       
     fClusterMatrix[isec]->MultiplyLeft(&(rotMatrix.Inverse()));
index daac13e..ad851ea 100644 (file)
@@ -219,7 +219,7 @@ public:
   Int_t    GetNInnerSector() const {return fNInnerSector;}
   Int_t    GetNOuterSector() const {return fNOuterSector;}
   Int_t    GetNSector() const {return fNSector;}
-  Float_t  GetZLength() const {return fZLength;}
+  Float_t  GetZLength(Int_t sector) const {return (sector<35) ? fZLength-0.275 : fZLength-0.302;}
   Int_t    GetGeometryType() const {return fGeometryType;}
 
   //
index 042eafa..8ad315a 100644 (file)
@@ -47,7 +47,7 @@ class AliTPCROC : public TObject {
   UInt_t    GetNInnerSector() const {return fNSectors[0];}
   UInt_t    GetNOuterSector() const {return fNSectors[1];}
   UInt_t    GetNSector() const {return fNSectorsAll;}
-  Float_t  GetZLength() const {return fZLength;}
+  Float_t  GetZLength(Int_t sector) const {return (sector<35) ? fZLength-0.275 : fZLength-0.302;}
   //
   // get pad row parameters
   //
index f2e5815..f9849eb 100644 (file)
@@ -233,7 +233,7 @@ Int_t AliTPCclusterer::Digits2Clusters(TTree *dTree, TTree *cTree) {
          c.SetY((c.GetY() - 0.5 - 0.5*npads)*fPar->GetPadPitchWidth(sec));
          c.SetZ(fPar->GetZWidth()*(c.GetZ()-1)); 
          c.SetZ(c.GetZ() - 3.*fPar->GetZSigma()); // PASA delay 
-         c.SetZ(sign*(fPar->GetZLength() - c.GetZ()));
+         c.SetZ(sign*(fPar->GetZLength(sec) - c.GetZ()));
 
          if (rx<230./250.*TMath::Abs(c.GetZ())) continue;
 
index 779f918..ed26f3c 100644 (file)
@@ -202,7 +202,7 @@ Float_t  AliTPCclustererMI::GetSigmaZ2(Int_t iz){
   //sigma z2 = in digits - angle estimated supposing vertex constraint
   Float_t z = iz*fZWidth+fParam->GetNTBinsL1()*fParam->GetZWidth();
   Float_t sd2 = (z*fParam->GetDiffL()*fParam->GetDiffL())/(fZWidth*fZWidth);
-  Float_t angular = fPadLength*(fParam->GetZLength()-z)/(fRx*fZWidth);
+  Float_t angular = fPadLength*(fParam->GetZLength(fSector)-z)/(fRx*fZWidth);
   angular*=angular;
   angular/=12.;
   Float_t sres = fParam->GetZSigma()/fZWidth;
@@ -557,7 +557,7 @@ void AliTPCclustererMI::AddCluster(AliTPCclusterMI &c, Float_t * matrix, Int_t p
   }
   c.SetZ(fZWidth*(meanj-3)); 
   c.SetZ(c.GetZ() - 3.*fParam->GetZSigma() + fParam->GetNTBinsL1()*fParam->GetZWidth()); // PASA delay + L1 delay
-  c.SetZ(fSign*(fParam->GetZLength() - c.GetZ()));
+  c.SetZ(fSign*(fParam->GetZLength(fSector) - c.GetZ()));
   c.SetX(fRx);
   c.SetDetector(fSector);
   c.SetRow(fRow);
@@ -928,7 +928,7 @@ void AliTPCclustererMI::FindClusters(AliTPCCalROC * noiseROC)
   fNcluster=0;
   fLoop=1;
   Float_t *b=&fBins[-1]+2*fMaxTime;
-  Int_t crtime = Int_t((fParam->GetZLength()-fRecoParam->GetCtgRange()*fRx)/fZWidth-fParam->GetNTBinsL1()-5);
+  Int_t crtime = Int_t((fParam->GetZLength(fSector)-fRecoParam->GetCtgRange()*fRx)/fZWidth-fParam->GetNTBinsL1()-5);
   Float_t minMaxCutAbs       = fRecoParam->GetMinMaxCutAbs();
   Float_t minLeftRightCutAbs = fRecoParam->GetMinLeftRightCutAbs();
   Float_t minUpDownCutAbs    = fRecoParam->GetMinUpDownCutAbs();
index d62e100..0fff3dd 100644 (file)
@@ -687,7 +687,7 @@ Double_t AliTPCtrackerMI::ErrY2(AliTPCseed* seed, AliTPCclusterMI * cl){
     return 1.;
   }
   Float_t snoise2;
-  Float_t z = TMath::Abs(fParam->GetZLength()-TMath::Abs(seed->GetZ()));
+  Float_t z = TMath::Abs(fParam->GetZLength(0)-TMath::Abs(seed->GetZ()));
   Int_t ctype = cl->GetType();  
   Float_t padlength= GetPadPitchLength(seed->GetRow());
   Double_t angle2 = seed->GetSnp()*seed->GetSnp();
@@ -821,7 +821,7 @@ Double_t AliTPCtrackerMI::ErrZ2(AliTPCseed* seed, AliTPCclusterMI * cl){
     return 1.;
   }
   Float_t snoise2;
-  Float_t z = TMath::Abs(fParam->GetZLength()-TMath::Abs(seed->GetZ()));
+  Float_t z = TMath::Abs(fParam->GetZLength(0)-TMath::Abs(seed->GetZ()));
   Int_t ctype = cl->GetType();  
   Float_t padlength= GetPadPitchLength(seed->GetRow());
   //
@@ -889,7 +889,7 @@ Double_t AliTPCtrackerMI::ErrZ2(AliTPCseed* seed, AliTPCclusterMI * cl){
   //return 0.1;
 
   Float_t snoise2;
-  Float_t z = TMath::Abs(fParam->GetZLength()-TMath::Abs(seed->GetZ()));
+  Float_t z = TMath::Abs(fParam->GetZLength(0)-TMath::Abs(seed->GetZ()));
   //
   Float_t rsigmaz = cl->GetSigmaZ2()/(seed->fCurrentSigmaZ2);
   Int_t ctype = cl->GetType();
@@ -1517,7 +1517,7 @@ Int_t AliTPCtrackerMI::FollowToNext(AliTPCseed& t, Int_t nr) {
   } 
   else
     {
-      if (TMath::Abs(z)<(AliTPCReconstructor::GetCtgRange()*x+10) && TMath::Abs(z)<fParam->GetZLength() && (TMath::Abs(t.GetSnp())<AliTPCReconstructor::GetMaxSnpTracker())) 
+      if (TMath::Abs(z)<(AliTPCReconstructor::GetCtgRange()*x+10) && TMath::Abs(z)<fParam->GetZLength(0) && (TMath::Abs(t.GetSnp())<AliTPCReconstructor::GetMaxSnpTracker())) 
        t.SetNFoundable(t.GetNFoundable()+1);
       else
        return 0;
@@ -6194,7 +6194,7 @@ void  AliTPCtrackerMI::GetShape(AliTPCseed * seed, Int_t row)
 {
   //
   //
-  Float_t sd2 = TMath::Abs((fParam->GetZLength()-TMath::Abs(seed->GetZ())))*fParam->GetDiffL()*fParam->GetDiffL();
+  Float_t sd2 = TMath::Abs((fParam->GetZLength(0)-TMath::Abs(seed->GetZ())))*fParam->GetDiffL()*fParam->GetDiffL();
   //  Float_t padlength =  fParam->GetPadPitchLength(seed->fSector);
   Float_t padlength =  GetPadPitchLength(row);
   //
@@ -6222,7 +6222,7 @@ Float_t  AliTPCtrackerMI::GetSigmaY(AliTPCseed * seed)
 {
   //
   //  
-  Float_t sd2 = TMath::Abs((fParam->GetZLength()-TMath::Abs(seed->GetZ())))*fParam->GetDiffL()*fParam->GetDiffL();
+  Float_t sd2 = TMath::Abs((fParam->GetZLength(0)-TMath::Abs(seed->GetZ())))*fParam->GetDiffL()*fParam->GetDiffL();
   Float_t padlength =  fParam->GetPadPitchLength(seed->GetSector());
   Float_t sres = (seed->GetSector() < fParam->GetNSector()/2) ? 0.2 :0.3;
   Float_t angular  = seed->GetSnp();
@@ -6236,7 +6236,7 @@ Float_t  AliTPCtrackerMI::GetSigmaZ(AliTPCseed * seed)
 {
   //
   //
-  Float_t sd2 = TMath::Abs((fParam->GetZLength()-TMath::Abs(seed->GetZ())))*fParam->GetDiffL()*fParam->GetDiffL();
+  Float_t sd2 = TMath::Abs((fParam->GetZLength(0)-TMath::Abs(seed->GetZ())))*fParam->GetDiffL()*fParam->GetDiffL();
   Float_t padlength =  fParam->GetPadPitchLength(seed->GetSector());
   Float_t sres = fParam->GetZSigma();
   Float_t angular  = seed->GetTgl();
index 686dd05..08d7c9c 100644 (file)
@@ -413,8 +413,8 @@ void AliTPCv0::CreateGeometry()
   //
   cd1v->AddNode(cd2v,1); cd2v->AddNode(cd3v,1); cflv->AddNode(cd1v,1);
   //
-  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-70.1));
-  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,70.1));
+  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-69.9));
+  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,69.9));
   v1->AddNode(sev,1); v1->AddNode(sev,2,ref); v1->AddNode(cflv,1);
   //
   // central membrane - 2 rings and a mylar membrane - assembly
@@ -671,6 +671,9 @@ void AliTPCv0::CreateGeometry()
    // 
    // now iroc and oroc are placed into a sector...
    //
+   TGeoVolumeAssembly *secta = new TGeoVolumeAssembly("TPC_SECT"); // a-side
+   TGeoVolumeAssembly *sectc = new TGeoVolumeAssembly("TPC_SECT"); // c-side
+   //
    TGeoVolumeAssembly *sect = new TGeoVolumeAssembly("TPC_SECT");
    TGeoRotation rot1("rot1",90.,90.,0.);
    TGeoRotation rot2("rot2");
@@ -681,31 +684,41 @@ void AliTPCv0::CreateGeometry()
    Double_t x0,y0;
    x0=110.2*TMath::Cos(openingAngle);
    y0=110.2*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi1 = new TGeoCombiTrans("combi1",x0,y0,1.09,rot);
+   TGeoCombiTrans *combi1a = new TGeoCombiTrans("combi1",x0,y0,1.09+0.222,rot); //a-side 
+   TGeoCombiTrans *combi1c = new TGeoCombiTrans("combi1",x0,y0,1.09+0.195,rot); //c-side
    x0=188.45*TMath::Cos(openingAngle);
    y0=188.45*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi2 = new TGeoCombiTrans("combi2",x0,y0,0.99,rot);
+   TGeoCombiTrans *combi2a = new TGeoCombiTrans("combi2",x0,y0,0.99+0.222,rot); //a-side
+   TGeoCombiTrans *combi2c = new TGeoCombiTrans("combi2",x0,y0,0.99+0.195,rot); //c-side
+   //
+   // A-side
+   //
+   secta->AddNode(ch,1);
+   secta->AddNode(iroc,1,combi1a);
+   secta->AddNode(oroc,1,combi2a);
+   //
+   // C-side
    //
-   sect->AddNode(ch,1);
-   sect->AddNode(iroc,1,combi1);
-   sect->AddNode(oroc,1,combi2);
+   sectc->AddNode(ch,1);
+   sectc->AddNode(iroc,1,combi1c);
+   sectc->AddNode(oroc,1,combi2c);
    //
-   // segment is ready...
-   // now I try to make a wheel...
+   // now I try to make  wheels...
    //
-   TGeoVolumeAssembly *wheel = new TGeoVolumeAssembly("TPC_ENDCAP");
+   TGeoVolumeAssembly *wheela = new TGeoVolumeAssembly("TPC_ENDCAP");
+   TGeoVolumeAssembly *wheelc = new TGeoVolumeAssembly("TPC_ENDCAP");
    //
    for(Int_t i =0;i<18;i++){
      Double_t phi = (20.*i);
      TGeoRotation *r = new TGeoRotation();
      r->RotateZ(phi);
-     wheel->AddNode(sect,i+1,r);
-    
+     wheela->AddNode(secta,i+1,r);
+     wheelc->AddNode(sectc,i+1,r);    
    }
    // wheels in the drift volume!
    TGeoCombiTrans *combi3 = new TGeoCombiTrans("combi3",0.,0.,256.6,ref);
-   v9->AddNode(wheel,1,combi3);
-   v9->AddNode(wheel,2,new TGeoTranslation(0.,0.,-256.6));
+   v9->AddNode(wheela,1,combi3);
+   v9->AddNode(wheelc,2,new TGeoTranslation(0.,0.,-256.6));
    //_____________________________________________________________
    // service support wheel
    //_____________________________________________________________
index 0209c58..42c386c 100644 (file)
@@ -431,8 +431,8 @@ void AliTPCv1::CreateGeometry()
   //
   cd1v->AddNode(cd2v,1); cd2v->AddNode(cd3v,1); cflv->AddNode(cd1v,1);
   //
-  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-70.1));
-  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,70.1));
+  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-69.9));
+  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,69.9));
   v1->AddNode(sev,1); v1->AddNode(sev,2,ref); v1->AddNode(cflv,1);
   //
   // central membrane - 2 rings and a mylar membrane - assembly
@@ -689,7 +689,8 @@ void AliTPCv1::CreateGeometry()
    // 
    // now iroc and oroc are placed into a sector...
    //
-   TGeoVolumeAssembly *sect = new TGeoVolumeAssembly("TPC_SECT");
+   TGeoVolumeAssembly *secta = new TGeoVolumeAssembly("TPC_SECT"); // a-side
+   TGeoVolumeAssembly *sectc = new TGeoVolumeAssembly("TPC_SECT"); // c-side
    TGeoRotation rot1("rot1",90.,90.,0.);
    TGeoRotation rot2("rot2");
    rot2.RotateY(10.);
@@ -699,31 +700,42 @@ void AliTPCv1::CreateGeometry()
    Double_t x0,y0;
    x0=110.2*TMath::Cos(openingAngle);
    y0=110.2*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi1 = new TGeoCombiTrans("combi1",x0,y0,1.09,rot);
+   TGeoCombiTrans *combi1a = new TGeoCombiTrans("combi1",x0,y0,1.09+0.222,rot); //a-side 
+   TGeoCombiTrans *combi1c = new TGeoCombiTrans("combi1",x0,y0,1.09+0.195,rot); //c-side
    x0=188.45*TMath::Cos(openingAngle);
    y0=188.45*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi2 = new TGeoCombiTrans("combi2",x0,y0,0.99,rot);
+   TGeoCombiTrans *combi2a = new TGeoCombiTrans("combi2",x0,y0,0.99+0.222,rot); //a-side
+   TGeoCombiTrans *combi2c = new TGeoCombiTrans("combi2",x0,y0,0.99+0.195,rot); //c-side
    //
-   sect->AddNode(ch,1);
-   sect->AddNode(iroc,1,combi1);
-   sect->AddNode(oroc,1,combi2);
+   // A-side
    //
-   // segment is ready...
-   // now I try to make a wheel...
+   secta->AddNode(ch,1);
+   secta->AddNode(iroc,1,combi1a);
+   secta->AddNode(oroc,1,combi2a);
    //
-   TGeoVolumeAssembly *wheel = new TGeoVolumeAssembly("TPC_ENDCAP");
+   // C-side
+   //
+   sectc->AddNode(ch,1);
+   sectc->AddNode(iroc,1,combi1c);
+   sectc->AddNode(oroc,1,combi2c);
+   //
+   // now I try to make  wheels...
+   //
+   TGeoVolumeAssembly *wheela = new TGeoVolumeAssembly("TPC_ENDCAP");
+   TGeoVolumeAssembly *wheelc = new TGeoVolumeAssembly("TPC_ENDCAP");
    //
    for(Int_t i =0;i<18;i++){
      Double_t phi = (20.*i);
      TGeoRotation *r = new TGeoRotation();
      r->RotateZ(phi);
-     wheel->AddNode(sect,i+1,r);
+     wheela->AddNode(secta,i+1,r);
+     wheelc->AddNode(sectc,i+1,r); 
     
    }
    // wheels in the drift volume!
    TGeoCombiTrans *combi3 = new TGeoCombiTrans("combi3",0.,0.,256.6,ref);
-   v9->AddNode(wheel,1,combi3);
-   v9->AddNode(wheel,2,new TGeoTranslation(0.,0.,-256.6));
+   v9->AddNode(wheela,1,combi3);
+   v9->AddNode(wheelc,2,new TGeoTranslation(0.,0.,-256.6));
    
    //_____________________________________________________________
    // service support wheel
index 0260d40..6832f29 100644 (file)
@@ -409,8 +409,8 @@ void AliTPCv2::CreateGeometry()
   //
   cd1v->AddNode(cd2v,1); cd2v->AddNode(cd3v,1); cflv->AddNode(cd1v,1);
   //
-  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-70.1));
-  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,70.1));
+  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-69.9));
+  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,69.9));
   v1->AddNode(sev,1); v1->AddNode(sev,2,ref); v1->AddNode(cflv,1);
   //
   // central membrane - 2 rings and a mylar membrane - assembly
@@ -667,7 +667,8 @@ void AliTPCv2::CreateGeometry()
    // 
    // now iroc and oroc are placed into a sector...
    //
-   TGeoVolumeAssembly *sect = new TGeoVolumeAssembly("TPC_SECT");
+   TGeoVolumeAssembly *secta = new TGeoVolumeAssembly("TPC_SECT"); // a-side
+   TGeoVolumeAssembly *sectc = new TGeoVolumeAssembly("TPC_SECT"); // c-side
    TGeoRotation rot1("rot1",90.,90.,0.);
    TGeoRotation rot2("rot2");
    rot2.RotateY(10.);
@@ -677,31 +678,44 @@ void AliTPCv2::CreateGeometry()
    Double_t x0,y0;
    x0=110.2*TMath::Cos(openingAngle);
    y0=110.2*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi1 = new TGeoCombiTrans("combi1",x0,y0,1.09,rot);
+   TGeoCombiTrans *combi1a = new TGeoCombiTrans("combi1",x0,y0,1.09+0.222,rot); //a-side 
+   TGeoCombiTrans *combi1c = new TGeoCombiTrans("combi1",x0,y0,1.09+0.195,rot); //c-side
    x0=188.45*TMath::Cos(openingAngle);
    y0=188.45*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi2 = new TGeoCombiTrans("combi2",x0,y0,0.99,rot);
+   TGeoCombiTrans *combi2a = new TGeoCombiTrans("combi2",x0,y0,0.99+0.222,rot); //a-side
+   TGeoCombiTrans *combi2c = new TGeoCombiTrans("combi2",x0,y0,0.99+0.195,rot); //c-side
    //
-   sect->AddNode(ch,1);
-   sect->AddNode(iroc,1,combi1);
-   sect->AddNode(oroc,1,combi2);
    //
-   // segment is ready...
-   // now I try to make a wheel...
+   // A-side
    //
-   TGeoVolumeAssembly *wheel = new TGeoVolumeAssembly("TPC_ENDCAP");
+   secta->AddNode(ch,1);
+   secta->AddNode(iroc,1,combi1a);
+   secta->AddNode(oroc,1,combi2a);
+   //
+   // C-side
+   //
+   sectc->AddNode(ch,1);
+   sectc->AddNode(iroc,1,combi1c);
+   sectc->AddNode(oroc,1,combi2c);
+   //
+   // now I try to make  wheels...
+   //
+   TGeoVolumeAssembly *wheela = new TGeoVolumeAssembly("TPC_ENDCAP");
+   TGeoVolumeAssembly *wheelc = new TGeoVolumeAssembly("TPC_ENDCAP");
    //
    for(Int_t i =0;i<18;i++){
      Double_t phi = (20.*i);
      TGeoRotation *r = new TGeoRotation();
      r->RotateZ(phi);
-     wheel->AddNode(sect,i+1,r);
+     wheela->AddNode(secta,i+1,r);
+     wheelc->AddNode(sectc,i+1,r); 
     
    }
    // wheels in the drift volume!   
+
    TGeoCombiTrans *combi3 = new TGeoCombiTrans("combi3",0.,0.,256.6,ref);
-   v9->AddNode(wheel,1,combi3);
-   v9->AddNode(wheel,2,new TGeoTranslation(0.,0.,-256.6));
+   v9->AddNode(wheela,1,combi3);
+   v9->AddNode(wheelc,2,new TGeoTranslation(0.,0.,-256.6));
    //_____________________________________________________________
    // service support wheel
    //_____________________________________________________________
index a6119da..147127d 100644 (file)
@@ -434,8 +434,8 @@ void AliTPCv3::CreateGeometry()
   //
   cd1v->AddNode(cd2v,1); cd2v->AddNode(cd3v,1); cflv->AddNode(cd1v,1);
   //
-  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-70.1));
-  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,70.1));
+  v1->AddNode(siv,1,new TGeoTranslation(0.,0.,-69.9));
+  v1->AddNode(siv,2,new TGeoTranslation(0.,0.,69.9));
   v1->AddNode(sev,1); v1->AddNode(sev,2,ref); v1->AddNode(cflv,1);
   //
   // central membrane - 2 rings and a mylar membrane - assembly
@@ -692,7 +692,8 @@ void AliTPCv3::CreateGeometry()
    // 
    // now iroc and oroc are placed into a sector...
    //
-   TGeoVolumeAssembly *sect = new TGeoVolumeAssembly("TPC_SECT");
+   TGeoVolumeAssembly *secta = new TGeoVolumeAssembly("TPC_SECT"); // a-side
+   TGeoVolumeAssembly *sectc = new TGeoVolumeAssembly("TPC_SECT"); // c-side
    TGeoRotation rot1("rot1",90.,90.,0.);
    TGeoRotation rot2("rot2");
    rot2.RotateY(10.);
@@ -702,31 +703,42 @@ void AliTPCv3::CreateGeometry()
    Double_t x0,y0;
    x0=110.2*TMath::Cos(openingAngle);
    y0=110.2*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi1 = new TGeoCombiTrans("combi1",x0,y0,1.09,rot);
+   TGeoCombiTrans *combi1a = new TGeoCombiTrans("combi1",x0,y0,1.09+0.222,rot); //a-side 
+   TGeoCombiTrans *combi1c = new TGeoCombiTrans("combi1",x0,y0,1.09+0.195,rot); //c-side
    x0=188.45*TMath::Cos(openingAngle);
    y0=188.45*TMath::Sin(openingAngle);
-   TGeoCombiTrans *combi2 = new TGeoCombiTrans("combi2",x0,y0,0.99,rot);
+   TGeoCombiTrans *combi2a = new TGeoCombiTrans("combi2",x0,y0,0.99+0.222,rot); //a-side
+   TGeoCombiTrans *combi2c = new TGeoCombiTrans("combi2",x0,y0,0.99+0.195,rot); //c-side
    //
-   sect->AddNode(ch,1);
-   sect->AddNode(iroc,1,combi1);
-   sect->AddNode(oroc,1,combi2);
+   // A-side
    //
-   // segment is ready...
-   // now I try to make a wheel...
+   secta->AddNode(ch,1);
+   secta->AddNode(iroc,1,combi1a);
+   secta->AddNode(oroc,1,combi2a);
    //
-   TGeoVolumeAssembly *wheel = new TGeoVolumeAssembly("TPC_ENDCAP");
+   // C-side
+   //
+   sectc->AddNode(ch,1);
+   sectc->AddNode(iroc,1,combi1c);
+   sectc->AddNode(oroc,1,combi2c);
+   //
+   // now I try to make  wheels...
+   //
+   TGeoVolumeAssembly *wheela = new TGeoVolumeAssembly("TPC_ENDCAP");
+   TGeoVolumeAssembly *wheelc = new TGeoVolumeAssembly("TPC_ENDCAP");
    //
    for(Int_t i =0;i<18;i++){
      Double_t phi = (20.*i);
      TGeoRotation *r = new TGeoRotation();
      r->RotateZ(phi);
-     wheel->AddNode(sect,i+1,r);
+     wheela->AddNode(secta,i+1,r);
+     wheelc->AddNode(sectc,i+1,r);
     
    }
    // wheels in the drift volume!
    TGeoCombiTrans *combi3 = new TGeoCombiTrans("combi3",0.,0.,256.6,ref);
-   v9->AddNode(wheel,1,combi3);
-   v9->AddNode(wheel,2,new TGeoTranslation(0.,0.,-256.6));
+   v9->AddNode(wheela,1,combi3);
+   v9->AddNode(wheelc,2,new TGeoTranslation(0.,0.,-256.6));
    
    //_____________________________________________________________
    // service support wheel