ROOT logo
const char * recoStorage="local:///cvmfs/alice.gsi.de/alice/data/2010/OCDB";
Int_t run=0;


void ModifyRecoParam(TObjArray* recoArray, Bool_t useIonTail, Double_t crossTalkCorrection, Int_t nrowsBellow=2){
  //
  // Modify reco param - and store it in the OCDB in local directory
  //
  AliCDBManager * man  =  AliCDBManager::Instance();
  for (Int_t i=0; i<4; i++){
    AliTPCRecoParam* p = ( AliTPCRecoParam*)recoArray->At(i);
    p->SetUseIonTailCorrection(useIonTail);
    p->SetCrosstalkCorrection(crossTalkCorrection);
    p->SetNeighborRowsDedx(nrowsBellow);
  }
  TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDBrec";
  AliCDBStorage*pocdbStorage = AliCDBManager::Instance()->GetStorage(localStorage.Data());  
  AliCDBMetaData *metaData= new AliCDBMetaData();
  AliCDBId*   id1=new AliCDBId("TPC/Calib/RecoParam/", man->GetRun(), man->GetRun());
  pocdbStorage->Put(recoArray, (*id1), metaData);
  AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/RecoParam/",localStorage.Data());
}


void rec(Bool_t useIonTail, Double_t crossTalkCorrection, Int_t nrowsBelow=2) {
  //
  // run reconstruction
  // Parameters:
  //   useIonTail - switch for using ion tail correction - OCDB entry will be overritten in  
  //
  // stard reco setting
  //
  AliCDBManager * man = AliCDBManager::Instance();
  man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  man->SetSpecificStorage("TPC/Calib/RecoParam/",recoStorage);
  man->SetRun(run);
  AliReconstruction reco;
  reco.SetWriteESDfriend();
  reco.SetWriteAlignmentData();
  reco.SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  reco.SetSpecificStorage("GRP/GRP/Data",
			  Form("local://%s",gSystem->pwd()));
  reco.SetRunPlaneEff(kTRUE);
  reco.SetRunQA(":"); 
  reco.SetRunGlobalQA(kFALSE);
  reco.ResetCheckRecoCDBvsSimuCDB();

  //
  //Switch Iontail in RecoParam. Creation of a new OCDB entry
  //
  AliCDBEntry* e = man->Get("TPC/Calib/RecoParam/",run); // get default
  // modify content
  TObjArray* recoArray = (TObjArray*)e->GetObject();
  ModifyRecoParam(recoArray, useIonTail, crossTalkCorrection, nrowsBelow);
  //
  //
  // Run reconstruction
  //
  AliTPCReconstructor::SetStreamLevel(AliTPCtracker::kStreamCrosstalkMatrix | AliTPCtracker::kStreamXtalk  | AliTPCtracker::kStreamIonTail);  // enable steaming of information for ion tail cancelation and crosstalk
  TStopwatch timer;
  timer.Start();
  reco.Run();
  timer.Stop();
  timer.Print();
  //
  // Print the OCDB setup which we used
  //
  AliCDBEntry* ocdbEntry = man->Get("TPC/Calib/RecoParam/",run);
  TObjArray* recoArray = (TObjArray*)ocdbEntry->GetObject();
  for (Int_t i=0; i<4; i++){
    AliTPCRecoParam* recoParam = ( AliTPCRecoParam*)recoArray->At(i);
    printf("ipar=%d\t%d\t%f\n",i,recoParam->GetUseIonTailCorrection(), recoParam->GetCrosstalkCorrection());
  } 
}
 rec.C:1
 rec.C:2
 rec.C:3
 rec.C:4
 rec.C:5
 rec.C:6
 rec.C:7
 rec.C:8
 rec.C:9
 rec.C:10
 rec.C:11
 rec.C:12
 rec.C:13
 rec.C:14
 rec.C:15
 rec.C:16
 rec.C:17
 rec.C:18
 rec.C:19
 rec.C:20
 rec.C:21
 rec.C:22
 rec.C:23
 rec.C:24
 rec.C:25
 rec.C:26
 rec.C:27
 rec.C:28
 rec.C:29
 rec.C:30
 rec.C:31
 rec.C:32
 rec.C:33
 rec.C:34
 rec.C:35
 rec.C:36
 rec.C:37
 rec.C:38
 rec.C:39
 rec.C:40
 rec.C:41
 rec.C:42
 rec.C:43
 rec.C:44
 rec.C:45
 rec.C:46
 rec.C:47
 rec.C:48
 rec.C:49
 rec.C:50
 rec.C:51
 rec.C:52
 rec.C:53
 rec.C:54
 rec.C:55
 rec.C:56
 rec.C:57
 rec.C:58
 rec.C:59
 rec.C:60
 rec.C:61
 rec.C:62
 rec.C:63
 rec.C:64
 rec.C:65
 rec.C:66
 rec.C:67
 rec.C:68
 rec.C:69
 rec.C:70
 rec.C:71
 rec.C:72
 rec.C:73
 rec.C:74
 rec.C:75