]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
o Make simulation factor 10 faster
authorwiechula <wiechula@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Jul 2013 19:08:00 +0000 (19:08 +0000)
committerwiechula <wiechula@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Jul 2013 19:08:00 +0000 (19:08 +0000)
o Add Simulation of Laser events
o Add visualisation of laser events, also for single layers, rods, bundles ...
o Fix warnings

18 files changed:
TPC/CMakelibTPCupgrade.pkg
TPC/Rec/AliTPCseed.h
TPC/TPCupgradeLinkDef.h
TPC/Upgrade/AliToyMCDrawer.cxx
TPC/Upgrade/AliToyMCDrawer.h
TPC/Upgrade/AliToyMCEvent.cxx
TPC/Upgrade/AliToyMCEvent.h
TPC/Upgrade/AliToyMCEventGenerator.cxx
TPC/Upgrade/AliToyMCEventGenerator.h
TPC/Upgrade/AliToyMCEventGeneratorSimple.cxx
TPC/Upgrade/AliToyMCEventGeneratorSimple.h
TPC/Upgrade/AliToyMCReconstruction.cxx
TPC/Upgrade/AliToyMCReconstruction.h
TPC/Upgrade/AliToyMCTrack.cxx
TPC/Upgrade/AliToyMCTrack.h
TPC/Upgrade/macros/CheckConsistency_DistCorr.C [new file with mode: 0644]
TPC/Upgrade/macros/runSimRec.C
TPC/Upgrade/macros/toyMCRecPlots.C

index 713a8bb31140c1c02718dbd8afea2912e73703d5..9023703ec708c4272c8d7b96a70f7ab46e3492f8 100644 (file)
@@ -33,6 +33,7 @@ set ( SRCS
     Upgrade/AliToyMCEventGenerator.cxx
     Upgrade/AliToyMCEventGeneratorSimple.cxx
     Upgrade/AliToyMCReconstruction.cxx
+    Upgrade/AliToyMCDrawer.cxx
 )
 
 string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
index 06ac521daafd1b7d1da13fb5e33e07b74d4664e5..0965fc79a9c676eab432fdeb880b06144f369ab0 100644 (file)
@@ -51,6 +51,7 @@ class AliTPCseed : public AliTPCtrack {
      virtual Bool_t Update(const AliCluster* c2, Double_t chi2, Int_t i);
      AliTPCTrackerPoint * GetTrackPoint(Int_t i);
      AliTPCclusterMI * GetClusterFast(Int_t irow){ return fClusterPointer[irow];}
+     AliTPCclusterMI * GetClusterFast(Int_t irow) const { return fClusterPointer[irow];}
      void SetClusterPointer(Int_t irow, AliTPCclusterMI* cl) {fClusterPointer[irow]=cl;}
      Double_t GetDensityFirst(Int_t n);
      Double_t GetSigma2C() const {
index c50d5cb3ae4cb86cb4e5599587988c1c9592d8e0..6c75d9f772c6e3db76f7902d2cc24f21dfd1d43f 100644 (file)
@@ -13,5 +13,6 @@
 #pragma link C++ class AliToyMCEventGenerator+;
 #pragma link C++ class AliToyMCEventGeneratorSimple+;
 #pragma link C++ class AliToyMCReconstruction+;
+#pragma link C++ class AliToyMCDrawer;
 
 #endif
index 7def13260ebea03399e54e05c5176f132103d567..25bf1ed8fb6195f22baf88c6be6406591814973f 100644 (file)
@@ -1,5 +1,5 @@
 #include <iostream>
-#include <AliMagF.h>
+#include <TROOT.h>
 #include <TChain.h>
 #include <TMath.h>
 #include <TTree.h>
 #include <TAxis.h>
 #include <TLegend.h>
 #include <TPad.h>
+#include <TGeoGlobalMagField.h>
+
+#include <AliMagF.h>
+#include <AliCDBManager.h>
+#include <AliTPCParam.h>
+#include <AliGeomManager.h>
+#include <AliTPCcalibDB.h>
 #include <AliTrackPointArray.h>
 #include <AliCluster.h>
+#include <AliLog.h>
+#include <AliTPCLaserTrack.h>
+
+
 #include "AliToyMCDrawer.h"
 #include "AliToyMCEvent.h"
 #include "AliToyMCTrack.h"
-#include <AliCDBManager.h>
-#include <AliTPCParam.h>
-#include <AliGeomManager.h>
-#include <TGeoGlobalMagField.h>
-#include <AliTPCcalibDB.h>
-#include <AliTPCROC.h>
 
 // Visualization class. To use
 
 ClassImp(AliToyMCDrawer);
 
 AliToyMCDrawer::AliToyMCDrawer()
- : TObject()   
- ,fInputTree(0x0)
- ,inFile(0x0)
- ,fFileName(0x0)
- ,fEvent(0x0)
- ,fEventArray(0x0)
- ,fDispHist(0x0)
- ,fCenterTime(-1.)
- ,fDriftVel(-1.)
-   
- {
+  : TObject()   
+  ,fInputTree(0x0)
+  ,fInFile(0x0)
+  ,fFileName()
+  ,fEvent(0x0)
+  ,fEventArray(0x0)
+  ,fDispHist(0x0)
+  ,fCenterTime(-1.)
+  ,fDriftVel(-1.)
+  ,fTPCParam(0x0)
+  ,fMaxZ0(0.)
+  ,fIFCRadius(83.5)
+  ,fOFCRadius(254.5)
+  ,fTimeRange(0)
+  ,fRoc(AliTPCROC::Instance())
+  ,fPoints(0x0)
+  ,fDistPoints(0x0)
+  {
    fEventArray = new TClonesArray("AliToyMCEvent");
    
    fTPCParam = AliTPCcalibDB::Instance()->GetParameters();
    fTPCParam->ReadGeoMatrices();
-   fDriftVel = fTPCParam->GetDriftV();///1000000;
-   fMaxZ0=fTPCParam->GetZLength();
+   fDriftVel = fTPCParam->GetDriftV();
+   fMaxZ0    =fTPCParam->GetZLength();
    fTimeRange = 2*fMaxZ0/fDriftVel;
-   fIFCRadius=  83.5;
-   fOFCRadius= 254.5;   
  
-   fRoc  = AliTPCROC::Instance();
    fPoints = new TClonesArray("TPolyMarker3D");
    fDistPoints = new TClonesArray("TPolyMarker3D");
-   
  }
 //________________________________________________________________
 AliToyMCDrawer::AliToyMCDrawer(const AliToyMCDrawer &drawer)
   : TObject(drawer)
   ,fInputTree(drawer.fInputTree)
-  ,inFile(drawer.inFile)
+  ,fInFile(drawer.fInFile)
   ,fFileName(drawer.fFileName)
   ,fEvent(drawer.fEvent)
   ,fEventArray(drawer.fEventArray)
@@ -82,8 +90,8 @@ AliToyMCDrawer::AliToyMCDrawer(const AliToyMCDrawer &drawer)
   ,fDriftVel(drawer.fDriftVel)
   ,fTPCParam(drawer.fTPCParam)
   ,fMaxZ0(drawer.fMaxZ0)
-  ,fOFCRadius(drawer.fOFCRadius)
   ,fIFCRadius(drawer.fIFCRadius)
+  ,fOFCRadius(drawer.fOFCRadius)
   ,fTimeRange(drawer.fTimeRange)
   ,fRoc(drawer.fRoc)
   ,fPoints(drawer.fPoints)
@@ -107,20 +115,21 @@ AliToyMCDrawer::~AliToyMCDrawer()
   //destructor
   delete fEvent;
   delete fEventArray;
-  delete fDispHist;
   delete fPoints;
   delete fDistPoints; 
+  delete fDispHist;
 }
 //________________________________________________________________
 Int_t AliToyMCDrawer::FillEventArray(Double_t snapShotTime)
 {
-  if(!fFileName) {
+  if(fFileName.IsNull()) {
     std::cout << "no input file provided, using default (toyMC.root)" << std::endl;
     fFileName = "toyMC.root";
   }
   
-  inFile = new TFile(fFileName,"read");
-  fInputTree = dynamic_cast<TTree*> (inFile->Get("toyMCtree"));
+  fInFile = new TFile(fFileName.Data(),"read");
+  gROOT->cd();
+  fInputTree = dynamic_cast<TTree*> (fInFile->Get("toyMCtree"));
   fInputTree->SetBranchAddress("event",&fEvent);
   fEventArray->Clear();
   
@@ -197,14 +206,15 @@ Int_t AliToyMCDrawer::FillEventArray(Double_t snapShotTime)
 //________________________________________________________________
 Int_t AliToyMCDrawer::FillEventArray(Int_t middleEventNbr, Double_t snapShotTime)
 {
-  if(!fFileName) {
+  if(fFileName.IsNull()) {
     std::cout << "no input file provided, using default (toyMC.root)" << std::endl;
     fFileName = "toyMC.root";
   }
-  if(!inFile) inFile = new TFile(fFileName,"read");
+  if(!fInFile) fInFile = new TFile(fFileName.Data(),"read");
+  gROOT->cd();
   if(!fInputTree) 
     {
-      fInputTree = dynamic_cast<TTree*> (inFile->Get("toyMCtree"));
+      fInputTree = dynamic_cast<TTree*> (fInFile->Get("toyMCtree"));
       //   fInputTree->Add(fileName);
       fInputTree->SetBranchAddress("event",&fEvent);
     }
@@ -384,6 +394,48 @@ void AliToyMCDrawer::DrawEvent(AliToyMCEvent *currentEvent, Double_t centerTime,
 
 
 
+}
+
+//________________________________________________________________
+void AliToyMCDrawer::DrawLaserEvent(Int_t nLaserEvents, Int_t side, Int_t rod, Int_t bundle, Int_t beam)
+{
+  //
+  //
+  //
+
+  fPoints->Clear();
+  fDistPoints->Clear();
+  if (!ConnectInputTree()) return;
+
+  AliTPCLaserTrack::LoadTracks();
+  TObjArray *arr=AliTPCLaserTrack::GetTracks();
+  
+  DrawGeometry();
+
+  Int_t laserEvents=0;
+  for (Int_t iev=0;iev<fInputTree->GetEntries();++iev) {
+    fInputTree->GetEntry(iev);
+    if (fEvent->GetEventType()!=AliToyMCEvent::kLaser) continue;
+    if (fEvent->GetNumberOfTracks()!=arr->GetEntriesFast()) {
+      AliError(Form("Wrong number of tracks in the laser event: %d!=%d",fEvent->GetNumberOfTracks(),arr->GetEntriesFast()));
+      continue;
+    }
+
+    for (Int_t iTrack=0; iTrack<fEvent->GetNumberOfTracks();++iTrack){
+      AliTPCLaserTrack *laserTrack = (AliTPCLaserTrack*)arr->UncheckedAt(iTrack);
+      if (side  >-1 && laserTrack->GetSide()   != side   ) continue;
+      if (rod   >-1 && laserTrack->GetRod()    != rod    ) continue;
+      if (bundle>-1 && laserTrack->GetBundle() != bundle ) continue;
+      if (beam  >-1 && laserTrack->GetBeam()   != beam   ) continue;
+      const AliToyMCTrack *track = fEvent->GetTrack(iTrack);
+      DrawTrack(track,0,fEvent->GetT0(),kRed);
+    }
+
+    ++laserEvents;
+    if (laserEvents==nLaserEvents) break;
+  }
+  
+  
 }
 
 //________________________________________________________________
@@ -581,3 +633,40 @@ void AliToyMCDrawer::DrawGeometry() {
 
 }
 
+//________________________________________________________________
+Bool_t AliToyMCDrawer::ConnectInputTree()
+{
+  //
+  //
+  //
+
+  if(fFileName.IsNull()) {
+    AliError("no input file provided, using default (toyMC.root)");
+    fFileName = "toyMC.root";
+  }
+  if (fInFile && fInFile->GetName()==fFileName) return kTRUE;
+  delete fInFile;
+  fInFile=0x0;
+  delete fInputTree;
+  fInputTree=0x0;
+  
+  fInFile = new TFile(fFileName.Data(),"read");
+  if (!fInFile || !fInFile->IsOpen() || fInFile->IsZombie() ) {
+    delete fInFile;
+    return kFALSE;
+  }
+  
+  gROOT->cd();
+  
+  fInputTree = dynamic_cast<TTree*> (fInFile->Get("toyMCtree"));
+
+  if (!fInputTree){
+    AliError("Could not connect tree!\n");
+    delete fInFile;
+    fInFile=0x0;
+    return kFALSE;
+  }
+  
+  fInputTree->SetBranchAddress("event",&fEvent);
+  return kTRUE;
+}
\ No newline at end of file
index 9c6b62dee4467b43d79b0e3c0c176e3d04c0e745..668c629a0affb8e45f5f5fec6017aa70fcc2acaf 100644 (file)
@@ -5,12 +5,16 @@
 #include <TH3F.h>
 #include <TTree.h>
 #include <TFile.h>
-#include <TClonesArray.h>
+#include <TString.h>
+
 #include <AliTPCParam.h>
+#include <AliTPCROC.h>
+
 #include "AliToyMCEvent.h"
 #include "AliToyMCTrack.h"
+
 class TPolyMarker3D;
-class AliTPCROC;
+// class AliTPCROC;
 class TClonesArray;
 
 /* Visualization class. To use */
@@ -45,16 +49,17 @@ class AliToyMCDrawer : public TObject {
   void SetFileName(const Char_t* filename) {fFileName = filename;}
   void DrawEvent(AliToyMCEvent *currentEvent, Double_t centerTime, Int_t color);
   void DrawTrack(const AliToyMCTrack *track,  Double_t centerTime, Double_t currentEventTime, Int_t color);
+  void DrawLaserEvent(Int_t nLaserEvents=1, Int_t side=-1, Int_t rod=-1, Int_t bundle=-1, Int_t beam=-1);
   void DrawGeometry();
   void DrawEvents(Bool_t both = kFALSE, Bool_t before = kTRUE);
   //  void DrawEvents(Bool_t time = kTRUE, Bool_t both = kTRUE, Bool_t before = kTRUE);
  
   const AliToyMCEvent* GetEvent(Int_t eventnr) const {return static_cast<const AliToyMCEvent*>(fEventArray->At(eventnr));}
- private:
+private:
 
   TTree* fInputTree;
-  TFile* inFile;
-  const char* fFileName;
+  TFile* fInFile;
+  TString fFileName;
   AliToyMCEvent* fEvent;
   TClonesArray* fEventArray;
   TH3F* fDispHist;
@@ -63,12 +68,15 @@ class AliToyMCDrawer : public TObject {
   Double_t fDriftVel;
   AliTPCParam *fTPCParam;
   Double_t fMaxZ0;
-  Double_t fOFCRadius;
   Double_t fIFCRadius;
+  Double_t fOFCRadius;
   Double_t fTimeRange;
   AliTPCROC *fRoc;
   TClonesArray *fPoints;
-  TClonesArray *fDistPoints; 
+  TClonesArray *fDistPoints;
+
+  Bool_t ConnectInputTree();
+  
   ClassDef(AliToyMCDrawer, 1);
 
 };
index 3b355ee08d772b5bffe1dfc4637b822869d6bcea..3ec158d10d7f33264a25c9a85112cfdc86dd5fe6 100644 (file)
@@ -6,6 +6,7 @@ Int_t AliToyMCEvent::fgEvCounter = 0;
 AliToyMCEvent::AliToyMCEvent()
   :TObject()
   ,fEventNumber(0)
+  ,fEventType(kPhysics)
   ,fT0(-1.)
   ,fX(-1000.)
   ,fY(-1000.)
@@ -20,6 +21,7 @@ AliToyMCEvent::AliToyMCEvent()
 AliToyMCEvent::AliToyMCEvent(const AliToyMCEvent &event)
   : TObject(event)
   ,fEventNumber(event.fEventNumber)
+  ,fEventType(event.fEventType)
   ,fT0(event.fT0)
   ,fX(event.fX)
   ,fY(event.fY)
@@ -43,4 +45,10 @@ AliToyMCTrack* AliToyMCEvent::AddTrack(const AliToyMCTrack &track)
 {
   return new(fTracks[fTracks.GetEntriesFast()]) AliToyMCTrack(track);
 }
+//____________________________________________________
+AliToyMCTrack* AliToyMCEvent::AddTrack(Double_t xyz[3],Double_t pxpypz[3],
+                        Double_t cv[21],Short_t sign)
+{
+  return new(fTracks[fTracks.GetEntriesFast()]) AliToyMCTrack(xyz,pxpypz,cv,sign);
+}
 
index 7719a5e5fbcee72c4e88ec2554b57424461c4ba0..dc70ed5a8aed85e146a63ec6e43f21c07f406c4d 100644 (file)
@@ -12,10 +12,17 @@ class AliToyMCEvent : public TObject {
   virtual ~AliToyMCEvent() {}
   AliToyMCEvent& operator = (const AliToyMCEvent &event);
 
+  enum EEventType {
+    kPhysics=0,
+    kLaser
+  };
+  
   static void SetInitialEventCounter(Int_t iev) { fgEvCounter=iev; }
 
   AliToyMCTrack* AddTrack(const AliToyMCTrack &track);
-
+  AliToyMCTrack* AddTrack(Double_t xyz[3],Double_t pxpypz[3],
+                          Double_t cv[21],Short_t sign);
+  
   Int_t GetNumberOfTracks() const { return fTracks.GetEntriesFast(); }
   const AliToyMCTrack* GetTrack(Int_t track) const { return static_cast<const AliToyMCTrack*>(fTracks.At(track)); }
     
@@ -29,11 +36,16 @@ class AliToyMCEvent : public TObject {
   Float_t GetX()             const {return fX;            }
   Float_t GetY()             const {return fY;            }
   Float_t GetZ()             const {return fZ;            }
+
+  void SetEventType(EEventType type) { fEventType=type; }
+  EEventType GetEventType() const    { return fEventType; }
   
  private:
   static Int_t fgEvCounter;
     
   UInt_t fEventNumber;
+
+  EEventType fEventType;
     
   Float_t fT0;
   Float_t fX;
index 340d9a18286051e052b654e72040cf05babb427a..20f90f65c45698091d901037b970ee17034b65e2 100644 (file)
@@ -6,6 +6,7 @@
 #include <TGeoGlobalMagField.h>
 #include <TSpline.h>
 #include <TObjString.h>
+#include <TROOT.h>
 
 #include <AliLog.h>
 #include <AliTPCROC.h>
@@ -18,6 +19,7 @@
 #include <AliTPCclusterMI.h>
 #include <AliTPCSpaceCharge3D.h>
 #include <AliTPCROC.h>
+#include <AliExternalTrackParam.h>
 
 #include "AliToyMCEvent.h"
 #include "AliToyMCTrack.h"
@@ -39,6 +41,7 @@ AliToyMCEventGenerator::AliToyMCEventGenerator()
   ,fOutTree(0x0)
   ,fUseStepCorrection(kFALSE)
   ,fUseMaterialBudget(kFALSE)
+  ,fIsLaser(kTRUE)
 {
   fTPCParam = AliTPCcalibDB::Instance()->GetParameters();
   fTPCParam->ReadGeoMatrices();
@@ -57,6 +60,7 @@ AliToyMCEventGenerator::AliToyMCEventGenerator(const AliToyMCEventGenerator &gen
   ,fOutTree(0x0)
   ,fUseStepCorrection(gen.fUseStepCorrection)
   ,fUseMaterialBudget(gen.fUseMaterialBudget)
+  ,fIsLaser(gen.fIsLaser)
 {
   //
   gRandom->SetSeed();
@@ -83,7 +87,7 @@ Bool_t AliToyMCEventGenerator::DistortTrack(AliToyMCTrack &trackIn, Double_t t0)
   MakeTPCClusters(trackIn, t0);
   MakeTRDClusters(trackIn/*,t0*/);
 
-  return 1;
+  return kTRUE;
 }
 //________________________________________________________________
 void AliToyMCEventGenerator::MakeITSClusters(AliToyMCTrack &trackIn/*, Double_t t0*/)
@@ -97,7 +101,7 @@ void AliToyMCEventGenerator::MakeITSClusters(AliToyMCTrack &trackIn/*, Double_t
   const Double_t kMaxZ0  = fTPCParam->GetZLength();
   const Double_t kMass   = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
   
-  AliToyMCTrack track(trackIn);
+  AliExternalTrackParam track(trackIn);
   Double_t xyz[3]  = {0.,0.,0.};
       
   if (!AliTrackerBase::PropagateTrackTo(&track,ITSRadii[0],kMass,5,kTRUE,kMaxSnp,0,kFALSE,fUseMaterialBudget)) {
@@ -116,20 +120,10 @@ void AliToyMCEventGenerator::MakeITSClusters(AliToyMCTrack &trackIn/*, Double_t
     if (TMath::Abs(track.GetZ())>kMaxZ0) continue;
     if (TMath::Abs(track.GetZ())>lengthITS[iLayer]/2) continue;
     
-    AliCluster* tempCl = new AliCluster();
-
-    tempCl->SetX(xyz[0]);
-    tempCl->SetY(xyz[1]);
-    tempCl->SetZ(xyz[2]);
-    
-    Double_t sigmaY = 0.0004;
-    Double_t sigmaZ = 0.0004;
-    
-    tempCl->SetSigmaY2(sigmaY*sigmaY);
-    tempCl->SetSigmaZ2(sigmaZ*sigmaZ);
-
-    trackIn.AddITSPoint(*tempCl);
-    
+    const Double_t sigmaY = 0.0004;
+    const Double_t sigmaZ = 0.0004;
+    AliCluster* tempCl = trackIn.AddITSPoint(AliCluster(1000,xyz[0],xyz[1],xyz[2],sigmaY*sigmaY,sigmaZ*sigmaZ,0));
+    tempCl->SetLabel(trackIn.GetUniqueID(), 0);
   }
 
 }
@@ -148,7 +142,7 @@ void AliToyMCEventGenerator::MakeTRDClusters(AliToyMCTrack &trackIn/*, Double_t
   const Double_t kMaxZ0  = fTPCParam->GetZLength();
   const Double_t kMass   = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
   
-  AliToyMCTrack track(trackIn);
+  AliExternalTrackParam track(trackIn);
   Double_t xyz[3]  = {0.,0.,0.};
       
   if (!AliTrackerBase::PropagateTrackTo(&track,TRDRadii[0],kMass,5,kTRUE,kMaxSnp,0,kFALSE,fUseMaterialBudget)) {
@@ -167,20 +161,10 @@ void AliToyMCEventGenerator::MakeTRDClusters(AliToyMCTrack &trackIn/*, Double_t
     if (TMath::Abs(track.GetZ())>kMaxZ0) continue;
     if (TMath::Abs(track.GetZ())>lengthTRD[iLayer]/2) continue;
     
-    AliCluster* tempCl = new AliCluster();
-
-    tempCl->SetX(xyz[0]);
-    tempCl->SetY(xyz[1]);
-    tempCl->SetZ(xyz[2]);
-    
-    Double_t sigmaY = 0.06;
-    Double_t sigmaZ = 0.2;
-    
-    tempCl->SetSigmaY2(sigmaY*sigmaY);
-    tempCl->SetSigmaZ2(sigmaZ*sigmaZ);
-
-    trackIn.AddTRDPoint(*tempCl);
-    
+    const Double_t sigmaY = 0.06;
+    const Double_t sigmaZ = 0.2;
+    AliCluster* tempCl = trackIn.AddTRDPoint(AliCluster(1000,xyz[0],xyz[1],xyz[2],sigmaY*sigmaY,sigmaZ*sigmaZ,0));
+    tempCl->SetLabel(trackIn.GetUniqueID(), 0);
   }
 
 }
@@ -191,8 +175,8 @@ void AliToyMCEventGenerator::MakeTPCClusters(AliToyMCTrack &trackIn, Double_t t0
   // make it big enough to hold all points
   // store real number of generated points in the unique id
   const Int_t nMaxPoints=3000;
-  AliTrackPointArray pointArray0(nMaxPoints);  //undistorted
-  AliTrackPointArray pointArray1(nMaxPoints);  //distorted
+  static AliTrackPointArray pointArray0(nMaxPoints);  //undistorted
+  static AliTrackPointArray pointArray1(nMaxPoints);  //distorted
   
   //Create space point of undistorted and distorted clusters along the propagated track trajectory
   CreateSpacePoints(trackIn,pointArray0,pointArray1);
@@ -213,21 +197,22 @@ void AliToyMCEventGenerator::CreateSpacePoints(AliToyMCTrack &trackIn,
   // a graph is filled in local coordinates for later
   //
   
-  const Double_t kMaxSnp = 0.85;
+  Double_t kMaxSnp = 0.85;
+  if (fIsLaser) kMaxSnp=0.99;
   const Double_t kMaxZ0  = fTPCParam->GetZLength();
   const Double_t kMass   = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
   
   const Double_t iFCRadius =  83.5; //radius constants found in AliTPCCorrection.cxx
   const Double_t oFCRadius = 254.5;
   
-  AliToyMCTrack track(trackIn);
+  AliExternalTrackParam track(trackIn);
   //!!! TODO: make this adjustable perhaps
   const Double_t stepSize=0.1;
   Double_t xyz[3]  = {0.,0.,0.};
   Float_t  xyzf[3] = {0.,0.,0.};
   
   //!!! when does the propagation not work, how often does it happen?
-  if (!AliTrackerBase::PropagateTrackTo(&track,iFCRadius,kMass,5,kTRUE,kMaxSnp,0,kFALSE,fUseMaterialBudget)) {
+  if (!AliTrackerBase::PropagateTrackTo(&track,iFCRadius,kMass,5,kTRUE,kMaxSnp,0,kFALSE,fUseMaterialBudget) && !fIsLaser) {
     AliError(Form("Propagation to IFC: %.2f failed\n",iFCRadius));
     return;
   }
@@ -235,10 +220,9 @@ void AliToyMCEventGenerator::CreateSpacePoints(AliToyMCTrack &trackIn,
   Int_t npoints=0;
   
   for (Double_t radius=iFCRadius; radius<oFCRadius; radius+=stepSize){
-    
     //!!! changed from return 0 to continue -> Please check
     if (!AliTrackerBase::PropagateTrackTo(&track,radius,kMass,1,kTRUE,kMaxSnp,0,kFALSE,fUseMaterialBudget)) {
-      AliError(Form("Propagation to %.2f failed\n",radius));
+      AliError(Form("Propagation to r=%.2f (snp=%.2f) failed\n",radius,track.GetSnp()));
       continue;
     }
     track.GetXYZ(xyz);
@@ -327,7 +311,6 @@ void AliToyMCEventGenerator::ConvertTrackPointsToLocalClusters(AliTrackPointArra
   //
   //
 
-
   const Int_t npoints=Int_t(arrPoints.GetUniqueID());
   Int_t secOld=-1;
 
@@ -428,7 +411,7 @@ void AliToyMCEventGenerator::ConvertTrackPointsToLocalClusters(AliTrackPointArra
 
     if (!SetupCluster(tempCl,xyz,sec,t0)) continue;
     tempCl.SetLabel(tr.GetUniqueID(), 0);
-    
+
     if (type==0) tr.AddSpacePoint(tempCl);
     else tr.AddDistortedSpacePoint(tempCl);
 //     printf("SetupCluster %3d: (%.2f, %.2f, %.2f), %d, %.2f\n",irow,xyz[0],xyz[1],xyz[2],sec,t0);
@@ -503,6 +486,8 @@ Bool_t AliToyMCEventGenerator::ConnectOutputFile()
   fOutTree = new TTree("toyMCtree","Tree with toyMC simulation");
   fOutTree->Branch("event","AliToyMCEvent",&fEvent);
 
+  gROOT->cd();
+
   return kTRUE;
 }
 
@@ -525,7 +510,7 @@ Bool_t AliToyMCEventGenerator::CloseOutputFile()
 void AliToyMCEventGenerator::FillTree()
 {
   // fill the tree
-  if (fOutTree) fOutTree->Fill();
+  if (fOutTree&&fEvent) fOutTree->Fill();
 }
 
 //________________________________________________________________
index 37b44dd00277f0a31655840774f4b0c2f8117079..8c63a2b61cb0d0b78cd6a8f5e2a3306d32339484 100644 (file)
@@ -66,6 +66,9 @@ class AliToyMCEventGenerator : public TObject {
 
   void SetUseMaterialBudget(Bool_t use) { fUseMaterialBudget=use;    }
   Bool_t GetUseMaterialBudget() const   { return fUseMaterialBudget; }
+
+  void SetIsLaser(Bool_t use) { fIsLaser=use;    }
+  Bool_t GetIsLaser() const   { return fIsLaser; }
   
  protected:
   AliTPCParam *fTPCParam;
@@ -90,6 +93,7 @@ class AliToyMCEventGenerator : public TObject {
 
   Bool_t fUseStepCorrection;
   Bool_t fUseMaterialBudget;
+  Bool_t fIsLaser;
   
   ClassDef(AliToyMCEventGenerator, 1)
      
index ff35d25c8e8d8c5d687366ccff56c23226472fcc..5e37141447b43f83ac8b0e636cd762e5085e4916 100644 (file)
@@ -4,12 +4,14 @@
 #include <TRandom.h>
 #include <TF1.h>
 #include <TStopwatch.h>
-#include <AliESDtrackCuts.h>
-#include <AliESDtrack.h>
 #include <TFile.h>
 #include <TTree.h>
 #include <TRandom3.h>
 
+#include <AliESDtrackCuts.h>
+#include <AliESDtrack.h>
+#include <AliTPCLaserTrack.h>
+
 #include "AliToyMCEvent.h"
 
 #include "AliToyMCEventGeneratorSimple.h"
@@ -97,9 +99,12 @@ AliToyMCEvent* AliToyMCEventGeneratorSimple::Generate(Double_t time)
 
   Double_t etaCuts=.9;
   Double_t mass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
-  TF1 fpt("fpt",Form("x*(1+(sqrt(x*x+%f^2)-%f)/([0]*[1]))^(-[0])",mass,mass),0.4,10);
-  fpt.SetParameters(7.24,0.120);
-  fpt.SetNpx(10000);
+  static TF1 fpt("fpt",Form("x*(1+(sqrt(x*x+%f^2)-%f)/([0]*[1]))^(-[0])",mass,mass),0.4,10);
+  if (fpt.GetParameter(0)<1){
+    printf("Set Parameters\n");
+    fpt.SetParameters(7.24,0.120);
+    fpt.SetNpx(200);
+  }
 //   Int_t nTracks = 400; //TODO: draw from experim dist
 //   Int_t nTracks = 20; //TODO: draw from experim dist
    Int_t nTracksLocal = fNtracks;
@@ -136,15 +141,12 @@ AliToyMCEvent* AliToyMCEventGeneratorSimple::Generate(Double_t time)
     pxyz[2]=pt*TMath::Tan(theta);
     Double_t vertex[3]={0,0,retEvent->GetZ()};
     Double_t cv[21]={0};
-    AliToyMCTrack *tempTrack = new AliToyMCTrack(vertex,pxyz,cv,sign);
+    AliToyMCTrack *tempTrack = retEvent->AddTrack(vertex,pxyz,cv,sign);
     // use unique ID for track number
     // this will be used in DistortTrack track to set the cluster label
     // in one simulation the track id should be unique for performance studies
     tempTrack->SetUniqueID(fCurrentTrack++);
-
-    Bool_t trackDist = DistortTrack(*tempTrack, time);
-    if(trackDist) retEvent->AddTrack(*tempTrack);
-    delete tempTrack;
+    DistortTrack(*tempTrack, time);
   }
 
   return retEvent;
@@ -183,6 +185,37 @@ void AliToyMCEventGeneratorSimple::RunSimulation(const Int_t nevents/*=10*/, con
   CloseOutputFile();
 }
 
+//________________________________________________________________
+void AliToyMCEventGeneratorSimple::RunSimulationLaser(const Int_t nevents/*=1*/)
+{
+  //
+  // run simple simulation with equal event spacing
+  //
+  
+  if (!ConnectOutputFile()) return;
+  //initialise the space charge. Should be done after the tree was set up
+  InitSpaceCharge();
+  
+  // within one simulation the track count should be unique for effeciency studies
+  fCurrentTrack=0;
+  
+  Double_t eventTime=0.;
+  const Double_t eventSpacing=1./10.; //laser is running at 10Hz equally spaced
+  TStopwatch s;
+  for (Int_t ievent=0; ievent<nevents; ++ievent){
+    printf("Generating event %3d (%.3g)\n",ievent,eventTime);
+    fEvent = GenerateLaser(eventTime);
+    FillTree();
+    delete fEvent;
+    fEvent=0x0;
+    eventTime+=eventSpacing;
+  }
+  s.Stop();
+  s.Print();
+  
+  CloseOutputFile();
+}
+
 //________________________________________________________________
 AliToyMCEvent* AliToyMCEventGeneratorSimple::GenerateESD(AliESDEvent &esdEvent, Double_t time) {
 
@@ -211,20 +244,13 @@ AliToyMCEvent* AliToyMCEventGeneratorSimple::GenerateESD(AliESDEvent &esdEvent,
     
     Double_t cv[21]={0};
     Int_t sign = part->Charge();
-    AliToyMCTrack *tempTrack = new AliToyMCTrack(vertex,pxyz,cv,sign);
+    AliToyMCTrack *tempTrack = retEvent->AddTrack(vertex,pxyz,cv,sign);
     // use unique ID for track number
     // this will be used in DistortTrack track to set the cluster label
     // in one simulation the track id should be unique for performance studies
     tempTrack->SetUniqueID(fCurrentTrack++);
-
-
-    Bool_t trackDist = DistortTrack(*tempTrack, time);
-    if(trackDist) {
-      retEvent->AddTrack(*tempTrack);
-     
-      nUsedTracks++;
-    }
-    delete tempTrack;
+    DistortTrack(*tempTrack, time);
+    nUsedTracks++;
     
     if(nUsedTracks >= fNtracks) break;
   }
@@ -514,20 +540,13 @@ AliToyMCEvent* AliToyMCEventGeneratorSimple::GenerateESD2(Double_t time) {
     Double_t cv[21]={0};
     Int_t sign = part->Charge();
 
-    AliToyMCTrack *tempTrack = new AliToyMCTrack(vertex,pxyz,cv,sign);
+    AliToyMCTrack *tempTrack = retEvent->AddTrack(vertex,pxyz,cv,sign);
     // use unique ID for track number
     // this will be used in DistortTrack track to set the cluster label
     // in one simulation the track id should be unique for performance studies
     tempTrack->SetUniqueID(fCurrentTrack++);
-
-
-    Bool_t trackDist = DistortTrack(*tempTrack, time);
-    if(trackDist) {
-      retEvent->AddTrack(*tempTrack);
-     
-      nUsedTracks++;
-    }
-    delete tempTrack;
+    DistortTrack(*tempTrack, time);
+    
     
     if(nUsedTracks >= fNtracks) break;
   }
@@ -536,6 +555,42 @@ AliToyMCEvent* AliToyMCEventGeneratorSimple::GenerateESD2(Double_t time) {
   return retEvent;
 }
 
+//________________________________________________________________
+AliToyMCEvent* AliToyMCEventGeneratorSimple::GenerateLaser(Double_t time)
+{
+  //
+  // Generate an Event with laser tracks
+  //
+  
+  AliToyMCEvent *retEvent = new AliToyMCEvent();
+  retEvent->SetEventType(AliToyMCEvent::kLaser);
+  
+  retEvent->SetT0(time);
+  retEvent->SetX(0);
+  retEvent->SetX(0);
+  retEvent->SetZ(0);
+  
+  AliTPCLaserTrack::LoadTracks();
+  TObjArray *arr=AliTPCLaserTrack::GetTracks();
+
+  //since we have a laser track force no material budges
+  Bool_t materialBudget=GetUseMaterialBudget();
+  SetUseMaterialBudget(kFALSE);
+  SetIsLaser(kTRUE);
+  
+  for (Int_t iTrack=0; iTrack<arr->GetEntriesFast(); ++iTrack){
+    AliExternalTrackParam *track=(AliExternalTrackParam*)arr->At(iTrack);
+    AliToyMCTrack *tempTrack = retEvent->AddTrack(AliToyMCTrack(*track));
+    // for laser only TPC clusters exist
+    tempTrack->SetUniqueID(fCurrentTrack++);
+    MakeTPCClusters(*tempTrack, time);
+  }
+
+  SetIsLaser(kFALSE);
+  SetUseMaterialBudget(materialBudget);
+  return retEvent;
+}
+
 //________________________________________________________________
 void AliToyMCEventGeneratorSimple::GetNGeneratedEventsAndSpacing(const Bool_t equalSpacing, Int_t &ngen, Double_t &spacing)
 {
index 5bd80e51cf20e0c6df63ef96c242f67ee448ba89..fa032853dc0c4465c608b3c221361a2b723b66b3 100644 (file)
@@ -20,11 +20,14 @@ class AliToyMCEventGeneratorSimple : public AliToyMCEventGenerator {
   AliToyMCEvent* Generate(Double_t time);
   AliToyMCEvent* GenerateESD(AliESDEvent& esdEvent, Double_t time);
   AliToyMCEvent* GenerateESD2(Double_t time);
+  AliToyMCEvent* GenerateLaser(Double_t time);
   
-  void SetParametersToyGen(const Char_t* parfilename="files/params.root", Double_t vertexMean = 0., Double_t vertexSigma = 7.);
+  void SetParametersToyGen(const Char_t* parfilename="$ALICE_ROOT/TPC/Upgrade/files/params.root", Double_t vertexMean = 0., Double_t vertexSigma = 7.);
   void RunSimulation(const Int_t nevents=10, const Int_t ntracks=20);
   void RunSimulationBunchTrain(const Int_t nevents=10, const Int_t ntracks=20);
   void RunSimulationESD(const Int_t nevents=10, const Int_t ntracks=20);
+  void RunSimulationLaser(const Int_t nevents=1);
+  
   void SetInputESD(const Char_t* filename) {fInputFileNameESD = filename;}
   Int_t OpenInputAndGetMaxEvents(const Int_t type, const Int_t nevents);
   void RunSimulation2(const Bool_t equalspacing, const Int_t type, const Int_t nevents, const Int_t ntracks);
index 3ab28d4dd0f66ec36a0f8640e25f3ebeb2cc0488..720665fa1f0fcb3c4083817e5b35da4555560069 100644 (file)
@@ -127,7 +127,7 @@ void AliToyMCReconstruction::RunReco(const char* file, Int_t nmaxEv)
     printf("==============  Processing Event %6d =================\n",iev);
     fTree->GetEvent(iev);
     for (Int_t itr=0; itr<fEvent->GetNumberOfTracks(); ++itr){
-      printf(" > ======  Processing Track %6d ========  \n",itr);
+//       printf(" > ======  Processing Track %6d ========  \n",itr);
       const AliToyMCTrack *tr=fEvent->GetTrack(itr);
       tOrig = *tr;
 
@@ -752,9 +752,10 @@ void AliToyMCReconstruction::SetTrackPointFromCluster(const AliTPCclusterMI *cl,
   // voluem ID to add later ....
   //   p.SetXYZ(xyz);
   //   p.SetCov(cov);
-  AliTrackPoint *tp=const_cast<AliTPCclusterMI*>(cl)->MakePoint();
-  p=*tp;
-  delete tp;
+//   AliTrackPoint *tp=const_cast<AliTPCclusterMI*>(cl)->MakePoint(p);
+//   p=*tp;
+//   delete tp;
+  const_cast<AliTPCclusterMI*>(cl)->MakePoint(p);
   //   cl->Print();
   //   p.Print();
   p.SetVolumeID(cl->GetDetector());
@@ -1256,7 +1257,7 @@ TTree* AliToyMCReconstruction::ConnectTrees (const char* files) {
   return tFirst;
 }
 
-//_____________________________________________________________________________
+//____________________________________________________________________________________
 Int_t AliToyMCReconstruction::LoadOuterSectors() {
   //-----------------------------------------------------------------
   // This function fills outer TPC sectors with clusters.
@@ -1303,7 +1304,7 @@ Int_t AliToyMCReconstruction::LoadOuterSectors() {
 }
 
 
-//_____________________________________________________________________________
+//____________________________________________________________________________________
 Int_t  AliToyMCReconstruction::LoadInnerSectors() {
   //-----------------------------------------------------------------
   // This function fills inner TPC sectors with clusters.
@@ -1350,7 +1351,7 @@ Int_t  AliToyMCReconstruction::LoadInnerSectors() {
   return 0;
 }
 
-//_____________________________________________________________________________
+//____________________________________________________________________________________
 Int_t  AliToyMCReconstruction::GetSector(AliExternalTrackParam *track) {
   //-----------------------------------------------------------------
   // This function returns the sector number for a given track
@@ -1374,7 +1375,7 @@ Int_t  AliToyMCReconstruction::GetSector(AliExternalTrackParam *track) {
   return sector;
 }
 
-//_____________________________________________________________________________
+//____________________________________________________________________________________
 void  AliToyMCReconstruction::FillSectorStructure(Int_t maxev) {
   //-----------------------------------------------------------------
   // This function fills the sector structure of AliToyMCReconstruction
@@ -1408,10 +1409,15 @@ void  AliToyMCReconstruction::FillSectorStructure(Int_t maxev) {
        Int_t sec = cl->GetDetector();
        Int_t row = cl->GetRow();
 
+        // set Q of the cluster to 1, Q==0 does not work for the seeding
+        cl->SetQ(1);
+        
        // set cluster time to cluster Z (if not ideal tracking)
        if ( !fIdealTracking ) {
-         cl->SetZ(cl->GetTimeBin());
-       }
+          // a 'valid' position in z is needed for the seeding procedure
+//           cl->SetZ(cl->GetTimeBin()*GetVDrift());
+          cl->SetZ(cl->GetTimeBin());
+        }
        //Printf("Fill clusters (sector %d row %d): %.2f %.2f %.2f %.2f",sec,row,cl->GetX(),cl->GetY(),cl->GetZ(),cl->GetTimeBin());
 
        // fill arrays for inner and outer sectors (A/C side handled internally)
@@ -1447,3 +1453,34 @@ void  AliToyMCReconstruction::FillSectorStructure(Int_t maxev) {
   //   }
   // }
 }
+
+//____________________________________________________________________________________
+AliToyMCTrack *AliToyMCReconstruction::ConvertTPCSeedToToyMCTrack(const AliTPCseed &seed)
+{
+  //
+  //
+  //
+
+
+  AliToyMCTrack *tToy = new AliToyMCTrack(seed);
+
+  for (Int_t icl=0; icl<159; ++icl){
+    const AliTPCclusterMI * const cl=seed.GetClusterFast(icl);
+    tToy->AddDistortedSpacePoint(*cl);
+  }
+
+  return tToy;
+}
+
+//____________________________________________________________________________________
+AliExternalTrackParam* AliToyMCReconstruction::GetRefittedTrack(const AliTPCseed &seed)
+{
+  //
+  //
+  //
+
+  AliExternalTrackParam *track=new AliExternalTrackParam;
+
+
+  return track;
+}
index 7cf2171ca283cc2af38fc76a14d1b539262ae671..7211accbbc5df547ee5d8b1b5515c07c7bdc6d88 100644 (file)
@@ -56,6 +56,10 @@ public:
   AliExternalTrackParam* GetSeedFromTrack(const AliToyMCTrack * const tr);
   AliExternalTrackParam* GetFittedTrackFromSeed(const AliToyMCTrack *tr, const AliExternalTrackParam *seed);
   AliExternalTrackParam* GetFittedTrackFromSeedAllClusters(const AliToyMCTrack *tr, const AliExternalTrackParam *seed, Int_t &nClus);
+
+  AliToyMCTrack *ConvertTPCSeedToToyMCTrack(const AliTPCseed &seed);
+  AliExternalTrackParam* GetRefittedTrack(const AliTPCseed &seed);
+  
   AliExternalTrackParam* ClusterToTrackAssociation(const AliTPCseed *seed, Int_t trackID, Int_t &nClus);
 
   void InitSpaceCharge();
index 3f6105d88b6a9b70e47504a8d74a3565a817f50d..5a19fad6a24648a3e9eb046964cd50b796263548 100644 (file)
@@ -4,14 +4,14 @@ ClassImp(AliToyMCTrack);
 
 AliToyMCTrack::AliToyMCTrack()
   :AliExternalTrackParam()
-  ,fSpacePoints("AliTPCclusterMI")
-  ,fDistortedSpacePoints("AliTPCclusterMI")
-  ,fITSPoints("AliCluster")
-  ,fTRDPoints("AliCluster")
+  ,fSpacePoints("AliTPCclusterMI",160)
+  ,fDistortedSpacePoints("AliTPCclusterMI",160)
+  ,fITSPoints("AliCluster",7)
+  ,fTRDPoints("AliCluster",6)
 {
   //default constructor
 }
-//____________________________________________________
+//________________________________________________________________
 AliToyMCTrack::AliToyMCTrack(const AliToyMCTrack &track)
   : AliExternalTrackParam(track)
   ,fSpacePoints(track.fSpacePoints)
@@ -21,7 +21,20 @@ AliToyMCTrack::AliToyMCTrack(const AliToyMCTrack &track)
 {
   //copy constructor
 }
-//_____________________________________________________
+
+//________________________________________________________________
+AliToyMCTrack::AliToyMCTrack(const AliExternalTrackParam &param)
+  :AliExternalTrackParam(param)
+  ,fSpacePoints("AliTPCclusterMI",160)
+  ,fDistortedSpacePoints("AliTPCclusterMI",160)
+  ,fITSPoints("AliCluster",7)
+  ,fTRDPoints("AliCluster",6)
+{
+  //
+  // initialise from external track param
+  //
+}
+//________________________________________________________________
 AliToyMCTrack& AliToyMCTrack::operator = (const AliToyMCTrack &track)
 {
   //assignment operator
@@ -35,10 +48,10 @@ AliToyMCTrack::AliToyMCTrack(Double_t x, Double_t alpha,
                       const Double_t param[5], 
                       const Double_t covar[15])
   :AliExternalTrackParam(x,alpha,param,covar)
-  ,fSpacePoints("AliTPCclusterMI")
-  ,fDistortedSpacePoints("AliTPCclusterMI")
-  ,fITSPoints("AliCluster")
-  ,fTRDPoints("AliCluster")
+  ,fSpacePoints("AliTPCclusterMI",160)
+  ,fDistortedSpacePoints("AliTPCclusterMI",160)
+  ,fITSPoints("AliCluster",7)
+  ,fTRDPoints("AliCluster",6)
 {
   //create external track parameters from given arguments
 }
@@ -46,10 +59,10 @@ AliToyMCTrack::AliToyMCTrack(Double_t x, Double_t alpha,
 AliToyMCTrack::AliToyMCTrack(Double_t xyz[3],Double_t pxpypz[3],
                       Double_t cv[21],Short_t sign)
   :AliExternalTrackParam(xyz,pxpypz,cv,sign)
-  ,fSpacePoints("AliTPCclusterMI")
-  ,fDistortedSpacePoints("AliTPCclusterMI")
-  ,fITSPoints("AliCluster")
-  ,fTRDPoints("AliCluster")
+  ,fSpacePoints("AliTPCclusterMI",160)
+  ,fDistortedSpacePoints("AliTPCclusterMI",160)
+  ,fITSPoints("AliCluster",7)
+  ,fTRDPoints("AliCluster",6)
 {
 }
 //________________________________________________________________
index 5022ece0ad8d4ada671c2b76cde610e819dbbc5f..e789d4c856d069120b314727cfc5251bf8a6af12 100644 (file)
@@ -15,6 +15,7 @@ class AliToyMCTrack : public AliExternalTrackParam {
             const Double_t covar[15]);
   AliToyMCTrack(Double_t xyz[3],Double_t pxpypz[3],
             Double_t cv[21],Short_t sign);
+  AliToyMCTrack(const AliExternalTrackParam &param);
   AliToyMCTrack(const AliToyMCTrack &track);
   AliToyMCTrack& operator=(const AliToyMCTrack &track);
   virtual ~AliToyMCTrack() {}
diff --git a/TPC/Upgrade/macros/CheckConsistency_DistCorr.C b/TPC/Upgrade/macros/CheckConsistency_DistCorr.C
new file mode 100644 (file)
index 0000000..14703db
--- /dev/null
@@ -0,0 +1,135 @@
+void makeComparisonTree(TString filename, TString addToName)
+{
+  TFile fn(filename.Data());
+  gROOT->cd();
+  fTPCCorrection=(AliTPCCorrection*)fn.Get("map");
+  fn.Close();
+
+  TString outFile=addToName;
+  outFile.Append(".root");
+  TTreeSRedirector *sred=new TTreeSRedirector(outFile.Data());
+  
+  Float_t dx[3]={0,0,0};
+  
+  for (Float_t iz=-240; iz<=240; iz+=20) {
+    Short_t roc=(iz>=0)?0:18;
+    for (Float_t ir=86; ir<250; ir+=20) {
+      for (Float_t iphi=0; iphi<TMath::TwoPi(); iphi+=10*TMath::DegToRad()){
+        Float_t x=ir*(Float_t)TMath::Cos(iphi);
+        Float_t y=ir*(Float_t)TMath::Sin(iphi);
+        Float_t x3[3]={x,y,iz};
+        (*sred) << "t" <<
+        "r="   << ir <<
+        "phi=" << iphi <<
+        "x=" << x <<
+        "y=" << y <<
+        "z=" << iz;
+        
+        //distortions
+        fTPCCorrection->GetDistortion(x3,roc,dx);
+        Float_t xd   = x+dx[0];
+        Float_t yd   = y+dx[1];
+        Float_t zd   = iz+dx[2];
+        Float_t rd   = TMath::Sqrt(xd*xd+yd*yd);
+        Float_t phid = TMath::ATan2(yd,xd);
+        if (phid<0) phid+=TMath::TwoPi();
+        (*sred) << "t" <<
+        "xd="   << xd <<
+        "yd="   << yd <<
+        "zd="   << zd <<
+        "rd="   << rd <<
+        "phid=" << phid;
+        
+        // correct back distorted point
+        Float_t xd3[3]={xd,yd,zd};
+        
+        fTPCCorrection->GetCorrection(xd3,roc,dx);
+        Float_t xdc   = xd+dx[0];
+        Float_t ydc   = yd+dx[1];
+        Float_t zdc   = zd+dx[2];
+        Float_t rdc   = TMath::Sqrt(xdc*xdc+ydc*ydc);
+        Float_t phidc = TMath::ATan2(ydc,xdc);
+        if (phidc<0) phidc+=TMath::TwoPi();
+        
+        (*sred)  << "t" <<
+        "xdc="   << xdc <<
+        "ydc="   << ydc <<
+        "zdc="   << zdc <<
+        "rdc="   << rdc <<
+        "phidc=" << phidc;
+        
+        // write current point
+        (*sred) << "t" <<
+        "\n";
+        
+      }
+    }
+  }
+  
+  delete sred;
+}
+
+void makeAllComparisonTrees()
+{
+  makeComparisonTree("$ALICE_ROOT/TPC/Calib/maps/SC_NeCO2_eps5_50kHz_precal.lookup.root","LUT_05");
+  makeComparisonTree("$ALICE_ROOT/TPC/Calib/maps/SC_NeCO2_eps10_50kHz_precal.lookup.root","LUT_10");
+  makeComparisonTree("$ALICE_ROOT/TPC/Calib/maps/SC_NeCO2_eps20_50kHz_precal.lookup.root","LUT_20");
+}
+
+TCanvas *GetCanvas(TString addToName);
+
+void makeHistos(TString addToName) {
+  TString fileName; //("test_");
+  fileName.Append(addToName.Data());
+  fileName.Append(".root");
+  TFile f(fileName.Data());
+  gROOT->cd();
+  TTree *t=f.Get("t");
+  gStyle->SetTitleX(0.18);
+  gStyle->SetTitleW(1-.18-.1);
+
+  t->SetMarkerStyle(20);
+  t->SetMarkerSize(.8);
+
+  TCanvas *c=0x0;
+  c=GetCanvas(addToName+"_zRes");
+  t->Draw("zdc-z:z:r","","colz");
+  c->SaveAs(Form("%s_zRes.png",addToName.Data()));
+  //
+  c=GetCanvas(addToName+"_rRes");
+  t->Draw("rdc-r:z:r","","colz");
+  c->SaveAs(Form("%s_rRes.png",addToName.Data()));
+  //
+  c=GetCanvas(addToName+"_phiRes");
+  t->Draw("phidc-phi:z:r","abs(phidc-phi)<1","colz");
+  c->SaveAs(Form("%s_phiRes.png",addToName.Data()));
+  //
+  c=GetCanvas(addToName+"_rphiRes");
+  t->Draw("(phidc*rdc)-(phi*r):z+(r-84)/(254-84)*18:r","abs(phidc-phi)<1","colz");
+  c->SaveAs(Form("%s_rphiRes.png",addToName.Data()));
+
+  f.Close();
+}
+
+
+
+void makeAllHistos() {
+  makeHistos("LUT_05");
+  makeHistos("LUT_10");
+  makeHistos("LUT_20");
+
+}
+
+TCanvas *GetCanvas(TString addToName)
+{
+  TString cName(addToName);
+  cName.Prepend("c_");
+  TCanvas *c=gROOT->GetListOfCanvases()->FindObject(cName.Data());
+  if (!c) c=new TCanvas(cName.Data(),addToName.Data());
+  c->Clear();
+  c->cd();
+  return c;
+}
+
+
+
index 2aff9016b761bce40858afab329b26e4c2a2d7ea..f8a4e51ca110ca1d43424155b7d221a658f5d9c6 100644 (file)
@@ -20,7 +20,7 @@ void runSimRec(Int_t simtype, Int_t SCtype, Int_t nevents, Int_t ntracks)
       break;
   }
 
-  outputFile.Append(Form("_%04dev_%04dtr"));
+  outputFile.Append(Form("_%04dev_%04dtr",nevents,ntracks));
   outputFile.Append(".root");
   s.SetOutputFileName(outputFile.Data());
 
index 7c56137a624a3af6e0e05ad9b632b2635e93d339..c63cb312e8c3b28cc6a980520accb7244b0fb1cb 100644 (file)
@@ -125,11 +125,16 @@ void toyMCRecPlots(TString inFileName = "toyMC.debug.root",Bool_t doPlots = kFAL
   
   // plots
   if(doPlots){
-    TString outFileName = inFileName;
+    TString outFileName = gSystem->BaseName(inFileName.Data());
     outFileName.ReplaceAll(".root","");
     cT0->SaveAs(Form("%s_T0.eps",outFileName.Data()));
+    cZ0->SaveAs(Form("%s_Z0.eps",outFileName.Data()));
     cT02D->SaveAs(Form("%s_T02D.eps",outFileName.Data()));
     cTrackParams->SaveAs(Form("%s_TrackParams.eps",outFileName.Data()));
+    cT0->SaveAs(Form("%s_T0.png",outFileName.Data()));
+    cZ0->SaveAs(Form("%s_Z0.png",outFileName.Data()));
+    cT02D->SaveAs(Form("%s_T02D.png",outFileName.Data()));
+    cTrackParams->SaveAs(Form("%s_TrackParams.png",outFileName.Data()));
   }
 }