// $Id$ /* * Example macro to run the Offline ITS Cluster Finding in HLT. * The reconstruction is done from the ITS raw data. * * Usage: *
 *   aliroot -b -q rec-its-cluster.C | tee rec-its-cluster.log
 *   aliroot -b -q rec-its-cluster.C'("./","spd")' | tee rec-its-cluster.log
 * 
* * The macro asumes raw data to be available in the rawx folders, either * simulated or real data. A different input can be specified as parameter *
 *   aliroot -b -q rec-its-cluster.C'("input.root")'
 * 
* * In the second parameter you can change the clusterfinders to run only * SPD, SDD, SSD or All: * - SPD runs only Silicon Pixels * - SDD runs only Silicon Drift * - SSD runs only Silicon Stips * - All will run the full ITS * * All is default. The chain ends in a histogram component. * * The reconstruction is steered by the AliReconstruction object in the * usual way. * * @ingroup alihlt_its * @author st05886@ift.uib.no */ void rec_its_cluster(const char* input="./", char* opt="All") { if(!gSystem->AccessPathName("galice.root")){ cerr << "please delete the galice.root or run at different place." << endl; return; } if (!input) { cerr << "please specify input or run without arguments" << endl; return; } /////////////////////////////////////////////////////////////////////////////////////////////////// // // init the HLT system in order to define the analysis chain below // AliHLTSystem* gHLT=AliHLTPluginBase::GetInstance(); int verbosity=1; // 1 higher verbosity, 0 reduced output /////////////////////////////////////////////////////////////////////////////////////////////////// // // Setting up which output to give // TString option; option+="libAliHLTUtil.so libAliHLTRCU.so libAliHLTITS.so libAliHLTSample.so "; option+="loglevel="; option+=verbosity>0?"0x7c":"0x79"; option+=" chains="; Bool_t runspd=kFALSE, runsdd=kFALSE, runssd=kFALSE; TString allArgs=opt; TString argument; TObjArray* pTokens=allArgs.Tokenize(" "); if (pTokens) { for (int i=0; iGetEntries(); i++) { argument=((TObjString*)pTokens->At(i))->GetString(); if (argument.IsNull()) continue; if (argument.CompareTo("spd", TString::kIgnoreCase)==0) { runspd=kTRUE; continue; } if (argument.CompareTo("sdd", TString::kIgnoreCase)==0) { runsdd=kTRUE; continue; } if (argument.CompareTo("ssd",TString::kIgnoreCase)==0) { runssd=kTRUE; continue; } if (argument.CompareTo("all",TString::kIgnoreCase)==0) { runspd=kTRUE; runsdd=kTRUE; runssd=kTRUE; continue; } else { break; } } } /////////////////////////////////////////////////////////////////////////////////////////////////// // // define the analysis chain to be run // //The spec starts from 0x1 in SPD, SDD and SSD. So 0x1 is ddl 0 for SPD, 0x10 is ddl 1, and so on //in SDD 0x1 is ddl 256, 0x10 is ddl 257, and so on. This means that the spec has to be set to 0x1 //before the loops over the clusterfinder int minddl=0; //min ddl number for SPD int maxddl=19; //max ddl number for SPD int spec=0x1; //spec for ddl's int ddlno=0; TString dummyInput=""; if(runspd){ for(ddlno=minddl;ddlno<=maxddl;ddlno++){ TString arg, publisher, cf; arg.Form("-minid %d -datatype 'DDL_RAW ' 'ISPD ' -dataspec 0x%08x %s",ddlno, spec, (verbosity>0?" -verbose":"")); publisher.Form("DP_%d", ddlno); AliHLTConfiguration pubconf(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data()); cf.Form("CF_%d",ddlno); AliHLTConfiguration cfconf(cf.Data(), "ITSClusterFinderSPD", publisher.Data(), ""); if (dummyInput.Length()>0) dummyInput+=" "; dummyInput+=cf; spec=spec<<1; } } if(runsdd){ minddl=256; //min ddl number for SDD maxddl=279; //max ddl number for SDD spec=0x1; //spec for ddl's for(ddlno=minddl;ddlno<=maxddl;ddlno++){ TString arg, publisher, cf; arg.Form("-minid %d -datatype 'DDL_RAW ' 'ISDD ' -dataspec 0x%08x %s",ddlno, spec, (verbosity>0?" -verbose":"")); publisher.Form("DP_%d", ddlno); AliHLTConfiguration pubconf(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data()); cf.Form("CF_%d",ddlno); AliHLTConfiguration cfconf(cf.Data(), "ITSClusterFinderSDD", publisher.Data(), ""); if (dummyInput.Length()>0) dummyInput+=" "; dummyInput+=cf; spec=spec<<1; } } if(runssd){ minddl=512; //min ddl number for SSD maxddl=527; //max ddl number for SSD spec=0x1; //spec for ddl's for(ddlno=minddl;ddlno<=maxddl;ddlno++){ TString arg, publisher, cf; arg.Form("-minid %d -datatype 'DDL_RAW ' 'ISSD ' -dataspec 0x%08x %s",ddlno, spec, (verbosity>0?" -verbose":"")); publisher.Form("DP_%d", ddlno); AliHLTConfiguration pubconf(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data()); cf.Form("CF_%d",ddlno); AliHLTConfiguration cfconf(cf.Data(), "ITSClusterFinderSSD", publisher.Data(), ""); if (dummyInput.Length()>0) dummyInput+=" "; dummyInput+=cf; spec=spec<<1; } } AliHLTConfiguration cfconf("clusterHisto","ITSClusterHisto",dummyInput.Data(),"-pushback-period=10"); AliHLTConfiguration fwconf("histFile","ROOTFileWriter", "clusterHisto","-datafile ClusterHisto -concatenate-events -overwrite"); option+="histFile"; /////////////////////////////////////////////////////////////////////////////////////////////////// // // Init and run the reconstruction // All but HLT reconstructio is switched off // AliReconstruction rec; rec.SetInput(input); rec.SetRunVertexFinder(kFALSE); rec.SetRunLocalReconstruction("HLT"); rec.SetRunTracking(""); rec.SetLoadAlignFromCDB(0); rec.SetRunQA(":"); // NOTE: FillESD is a step in the AliReconstruction sequence and has // nothing to do with the fact that this macro writes ESD output // HLT processes the HLTOUT during FillESD and extracts data which // has already been prepared. This step is currently not necessary for // this macro rec.SetFillESD(""); rec.SetOption("HLT", option); rec.Run(); }