X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FREADME;h=2916bd36d10955842cf8cba612de11e39557f16a;hb=64eb707f0868914ec79796b47b143a7d2c991a4c;hp=782858967f4a04bf04d9d9a2d51b0827edee49ea;hpb=cac2eb58594eab2dcee3185e3adc03a554dc4122;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/README b/MUON/README index 782858967f4..2916bd36d10 100644 --- a/MUON/README +++ b/MUON/README @@ -20,11 +20,50 @@ Please add to this README file all information concerning config files, simulation, digitalization, clusterization, reconstruction and macro analysis +========================================================== + How to check that your aliroot is working well +========================================================== +There is a script file AlirootRun_MUONtest.sh which +allows for simulating, reconstructing and making the +invariant analysis of the generated Upsilon (1S). +The used configuration file is Config.C in MUON +directory. +You have to type : +source $ALICE_ROOT/MUON/AlirootRun_MUONtest.sh +The results of this test are saved in test_out/ directory. +Please note that the CDB (Condition DataBase) is now always *required* +to perform either simulation or reconstruction. For the moment, a version + of that CDB is stored in CVS, so you should have one already in MUON/Calib +subdirectories. + +========================================================== + How to check that your aliroot is working VERY well +========================================================== +There is a script file AlirootRun_MUONlongtest.sh which +allows for simulating, reconstructing and making the +-+invariant analysis of the generated Upsilon (1S). +This script generates a large number of Upsilon (20k) +in order to access differential quantities. +The used configuration file is Config.C in MUON +directory. +One should really run this script to check if the MUON +code can process a large number of events WITHOUT errors, +in particular before making important commits !! + +You have to type : +$ALICE_ROOT/MUON/AlirootRun_MUONtestlong.sh +The results of this test are saved in testlong_out/ directory +and will be kept in CVS + +(NOTE: the macros performing the calculations/plots MUONefficiency.C +and MUONplotEfficiency.C are also able to handle J/Psi if +Config.C is modified accordingly ) + ========================================================== How to run a MUON generation ========================================================== aliroot -root [0] gAlice->Run(10,"$ALICE_ROOT/MUON/Config_MUON_test.C"); +root [0] gAlice->Run(10,"$ALICE_ROOT/MUON/Config.C"); 1 single muon of 7 GeV/c in the MUON spectrometer acceptance will be simulated using geant3. @@ -34,112 +73,6 @@ If you want to change the option or to define a new directory for hits, you have to do the following before: root [0] gAlice->SetConfigFunction("Config( \"/home/martinez/aliroot/work_NewIO/test/\" , \"box\" );"); -============================================================ - How to run MUON Hits to SDigits -============================================================ -AliRunDigitizer * manager = new AliRunDigitizer(1,1); -manager->SetInputStream(0,"galice.root"); -AliMUONDigitizer * dMUON = new AliMUONSDigitizerv1(manager); -manager->AddDigitizer(dMUON); -manager->Exec("deb"); - - -============================================================ - How to run MUON Digitalization from SDigits -============================================================ -To process the digitalization of hits the AliRunDigitizer -framework is used: - -AliRunDigitizer * manager = new AliRunDigitizer(1,1); -manager->SetInputStream(0,"galice.root"); -AliMUONDigitizerv2* dMUON = new AliMUONDigitizerv2(manager) -manager->AddDigitizer(dMUON); -manager->Exec("deb"); - - -============================================================ - How to run MUON Digitalization from Hits -============================================================ -To process the digitalization of hits the AliRunDigitizer -framework is used: - -AliRunDigitizer * manager = new AliRunDigitizer(1,1); -manager->SetInputStream(0,"galice.root"); -AliMUONDigitizerv1* dMUON = new AliMUONDigitizerv1(manager) -manager->AddDigitizer(dMUON); -manager->Exec("deb"); - -============================================================ - How to run MUON RecPoint clusterization -============================================================ -aliroot -b << EOF -.includepath $ALICE_ROOT/STEER -.includepath $ALICE_ROOT/MUON -.L $ALICE_ROOT/MUON/MUONrawclusters.C++ -MUONrawclusters("galice.root",0,9999); -to Load -gSystem->Load("$ALICE_ROOT/MUON/MUONrawclusters_C.so") - -============================================================ - How to run MUON Trigger -============================================================ -.includepath $ALICE_ROOT/STEER -.includepath $ALICE_ROOT/MUON -.L $ALICE_ROOT/MUON/MUONtrigger.C++ -MUONtrigger("galice.root",0,9999); -To Load -gSystem->Load("$ALICE_ROOT/MUON/MUONtrigger_C.so") - -============================================================ - How to run MUON Tracking reconstruction (old output) -=========================================================== -.includepath $ALICE_ROOT/STEER -.includepath $ALICE_ROOT/MUON -.L $ALICE_ROOT/MUON/MUONrecoNtuple.C++ -MUONrecoNtuple(0,9999,0,"galice.root") -To Load -gSystem->Load("$ALICE_ROOT/MUON/MUONrecoNtuple_C.so") -First event and last event are given by hand, but this will change. - -=========================================================== - How to run MUON Tracking reconstruction (new output) -=========================================================== -.includepath $ALICE_ROOT/STEER -.includepath $ALICE_ROOT/MUON -.L $ALICE_ROOT/MUON/MUONTracker.C++ -MUONTracker("galice.root",0,9999); -To Load -gSystem->Load("$ALICE_ROOT/MUON/MUONTracker_C.so") -Output in MUON.Tracks.root using the new IO -as a TClonesArray of AliMUONTrack - -Note1.In the actual version (dec-03) the following data -members of ALiMUONTrack: fgFitter, fEventReconstructor, -and fTrackHitsPtr are not saved in the MUON.Track.root file - - -=========================================================== - How to run MUON Trigger Track reconstruction (new output) -=========================================================== -.includepath $ALICE_ROOT/STEER -.includepath $ALICE_ROOT/MUON -.L $ALICE_ROOT/MUON/MUONTriggerTracker.C++ -MUONTriggerTracker("galice.root",0,10); -To Load -gSystem->Load("$ALICE_ROOT/MUON/MUONTriggerTracker_C.so") -Output in MUON.Tracks.root using the new IO -as a TClonesArray of AliMUONTriggerTrack - -========================================================== - How to run full MUON reconstruction -(clusterisation + trigger + tracking) -=========================================================== -.includepath $ALICE_ROOT/STEER -.includepath $ALICE_ROOT/MUON -.L $ALICE_ROOT/MUON/MUONChallengeTest.C++ -MUONRecoTest("galice.root"); - - ============================================================ How to run MUONCheck macro ============================================================ @@ -149,41 +82,59 @@ provides a ascii output on screen. To compile MUONCheck.C .includepath $ALICE_ROOT/STEER .includepath $ALICE_ROOT/MUON +.includepath $ALICE_ROOT/MUON/mapping .L $ALICE_ROOT/MUON/MUONCheck.C++ To Load gSystem->Load("$ALICE_ROOT/MUON/MUONCheck_C.so") To print Kine : (default file is galice.root ) -MUONkine() or MUONkine("galice.root",##) for the event number ## +MUONkine() or MUONkine(##,"galice.root") for the event number ## To print hits : (default file is galice.root if not MUONhits("toto.root""); ) -MUONhits() or MUONhits("galice.root",##) for the event number ## +MUONhits() or MUONhits(##,"galice.root") for the event number ## To print digits : (default file is galice.root) -MUONdigits() or MUONdigits("galice.root",##) for the event number ## +MUONdigits() or MUONdigits(##,"galice.root") for the event number ## + +To print sdigits : (default file is galice.root) +MUONsdigits() or MUONsdigits(##,"galice.root") for the event number ## To print rawcluster : (default file is galice.root) -MUONrecpoints() or MUONrecpoints("galice.root",##) for the event number ## +MUONrecpoints() or MUONrecpoints(##,"galice.root") for the event number ## To print trigger : (default file is galice.root) -MUONTestTrigger() or MUONTestTrigger("galice.root",##) for the event number ## +MUONrectrigger() or MUONrectrigger(##,"galice.root") for the event number ## .... - ============================================================ - How to check the Geometry + How to check the Geometry with the new Geometrical modeler + ftp://root.cern.ch/root/doc/chapter16.pdf + http://agenda.cern.ch/fullAgenda.php?ida=a05212 ============================================================ -gAlice->Init("$ALICE_ROOT/MUON/Config_MUON_test.C"); -.L $ALICE/geant3/TGeant3/G3GUI.C -G3GUI() +gAlice->Init("$ALICE_ROOT/MUON/Config.C"); +gGeoManager->GetMasterVolume()->Draw(); + +============================================================ + How to check the overlap with the new Geometrical modeler + ftp://root.cern.ch/root/doc/chapter16.pdf + http://agenda.cern.ch/fullAgenda.php?ida=a05212 +============================================================ +gAlice->Init("$ALICE_ROOT/MUON/Config.C"); +gGeoManager->CheckOverlaps(); +gGeoManager->PrintOverlaps(); ============================================================ How to run MUONdisplay ============================================================ First you need to perform a full simulation: generation, digitalisation and clusterisation +To run MUONdisplay with Root 5.04/00 you need to get a fix in +the gpad/src/TPad.cxx from Root CVS: + cvs update -r 1.200 gpad/src/TPad.cxx +and recompile root. + .L $ALICE_ROOT/MUON/MUONdisplay.C MUONdisplay(0,"galice.root") @@ -245,42 +196,321 @@ gener->SetYRange(-4.0,-2.4); gener->SetMuonPtCut(1.); gener->SetMuonThetaCut(171.,178.); gener->SetMuonMultiplicity(2); -gener->SetNumberOfCollisions(1950.); -gener->SetNumberOfParticipants(400.); +gener->SetImpactParameterRange(0.,5.); // 10% most centra PbPb collisions gener->SetVertexSmear(kPerTrack); gener->SetOrigin(0,0,0); // Vertex position gener->SetSigma(0,0,0.0); // Sigma in (X,Y,Z) (cm) on IP position gener->Init(); +================================================================ + csh Script for the full reconstruction with raw data generator +================================================================ +The rawdata generation and analysis is working with the new segmentation. +So the config file must use the version "AliMUONFactoryV3" + +Generation +The method AliSimulation::SetWriteRawData("MUON") enables on +the muon rawdata generation +aliroot -b << EOF +AliSimulation MuonSim("$ALICE_ROOT/MUON/Config.C") +MuonSim.SetMakeTrigger("MUON"); +MuonSim.SetWriteRawData("MUON") +MuonSim.Run(10) +.q +EOF + +Reconstruction +aliroot -b << EOF +AliReconstruction MuonRec("galice.root"); +MuonRec.SetInput("$YOUR_WORKING_DIRECTORY/"); Do not forget the slash at the end! +MuonRec.SetRunVertexFinder(kFALSE); +MuonRec.SetRunLocalReconstruction("MUON"); +MuonRec.SetRunTracking(""); +MuonRec.SetFillESD("MUON"); +MuonRec.SetOption("MUON", "VS"); // to use VS cluster finder +// MuonRec.SetOption("MUON", "VS Original"); // to run VS and original track finder +// MuonRec.SetOption("MUON", "Combi"); // to run combined cluster / track finder +MMuonRec.Run(); +.q +EOF + +============================================================ + How to read & decode raw data +============================================================ +These macros can read & decode DDL files, root and DATE files. +Nevertheless for the two latter, aliroot has to be compiled with DATE. + +For tracker raw data +.includepath $ALICE_ROOT/STEER +.includepath $ALICE_ROOT/MUON +.includepath $ALICE_ROOT/RAW +.L $ALICE_ROOT/MUON/MUONRawStreamTracker.C+ +MUONRawStreamTracker(maxEvent, firstDDL, lastDDL, rawFileName) + +For trigger raw data +.includepath $ALICE_ROOT/STEER +.includepath $ALICE_ROOT/MUON +.includepath $ALICE_ROOT/RAW +.L $ALICE_ROOT/MUON/MUONRawStreamTrigger.C+ +MUONRawStreamTrigger(maxEvent, firstDDL, lastDDL, rawFileName) + +Default wise the macro read all DDL files from the current directory for 1000 events. +For root file rawFileName must end with .root, for date file rawFileName +must be no extention. For DDL files you have to specified the directory +where the raw0...n subdirectories are located: +MUONRawStreamTracker(maxEvent, "$YOUR_WORKING_DIRECTORY/"); //Do not forget the slash at the end! + + +============================================================ + How to run MUONRecoCheck macro +============================================================ +To check the muon reconstruction by comparing the reconstructed tracks +with the reference tracks made of "AliTrackReference" for the hits and +kinematic informations (TParticle) for the vertex. +This macro can be used to check the track reconstruction e.g. efficiency, +momentum resolution ... but also to make physics analysis whenever +track identification is needed. + +To compile MUONRecoCheck.C +.includepath $ALICE_ROOT/STEER +.includepath $ALICE_ROOT/MUON +.L $ALICE_ROOT/MUON/MUONRecoCheck.C+ + +// To run MUONRecoCheck +MUONRecoCheck(nEvent,"galice.root"); // nEvent = nb of events + + +============================================================ + How to run MUONTracker macro +============================================================ +To make the track reconstruction directly from AliTrackReference hits +which are recorded in TrackRefs.root during the simulation. +It can be used to check the reconstruction without clusterization. + +To compile MUONTracker.C +.includepath $ALICE_ROOT/STEER +.includepath $ALICE_ROOT/MUON +.L $ALICE_ROOT/MUON/MUONTracker.C+ + +// To run MUONTracker +MUONTracker(iEventMin,iEventMax,"galice.root"); // iEventMin: first event + =========================================================== - csh Script for the full reconstruction + Macro MUONGenerateGeometryData.C =========================================================== + +Macro for generating the geometry data files +and mis-alignment data. + +Geometry data files: +- MUON/data/volpath.dat file contains the volume paths +for all alignable objects (modules & detection +elements). +- MUON/data/transform.dat file contains the transformations +data (translation and rotation) for all alignable objects +(modules & detection elements) +- MUON/data/svmap.dat file contains all the information to link +each geant volume (it can be extended to other virtual MC) with +a detection element. The point here is that a given detection +element, i.e. a slat chamber can consist of more geant volumes. +the correspondence is then defined in an input file. +Each time there is a change in the definition of MC geometry, these +input files must be re-generated via the macro +MUONGenerateGeometryData.C + +To be run from aliroot: +.x MUONGenerateGeometryData.C + +The generated files do not replace the existing ones +but have different names (with extension ".out"). +Replacement with new files has to be done manually. + +If the appropiate flags are set (zeroAlign, resMisAlign and/or fullMisAlign) +zero, residual and/or full misalignment data are generated in a +local CDB folder (defaults are ResMisAlignCDB and FullMisAlignCDB +in the working directory). Inside the local CDB the path for the +alignment data is (and must be) "MUON/Align/Data/". +Residual misalignment: Default is our current estimate of +misalignment after all our alignment procedure has been applied. +Full misalignment: Default is our current estimate of initial +misalignment. +========================================================== +How to simulate events with misaligned geometry in local CDB +========================================================== -aliroot -b << EOF -AliSimulation MuonSim("YourConfig.C") -MuonSim.Run(XXX) +If you want to use a misaligned geometry to simulate some +events you can use a local CDB. For this need to follow +the next steps: + +- Generate misaligned data in local CDB. +You can use MUONGenerateGeometryData.C as described above in +the corresponding section. Let's assume you used the default +residual misalignment settings, then you have a local CDB in +your working directory called ResMisAlignCDB containing +misalignement data (ResMisAlignCDB/MUON/Align). + +- Copy the calibration data in your local CDB. +cp -r $ALICE_ROOT/MUON/Calib ResMisAlignCDB/MUON + +- Tell AliSimulation you want to use your local CDB for MUON +To do this you need to instantiate the AliCDBManager, set the +default storage and set the specific storage for MUON, before +instantiating AliSimulation (see for example the commented +lines AlirootRun_MUONtest.sh). + +aliroot -b >& testSim.out << EOF +AliCDBManager* man = AliCDBManager::Instance(); +man->SetDefaultStorage("local://$ALICE_ROOT"); +man->SetSpecificStorage("MUON","local://ResMisAlignCDB"); +AliSimulation MuonSim("$ALICE_ROOT/MUON/Config.C"); +MuonSim.SetWriteRawData("MUON"); +MuonSim.Run(10); .q EOF -aliroot -b << EOF -TPluginManager* pluginManager = gROOT->GetPluginManager(); -pluginManager->AddHandler("AliReconstructor", "MUON","AliMUONReconstructor", "MUON","AliMUONReconstructor()") -AliReconstruction MuonRec("galice.root") +========================================================== +How to check the alignment software +========================================================== + +The script AlirootRun_MUONtestAlign.sh allows you to check the software for +the alignment with physics tracks. The script will: +- Generate a misaligned geometry in a local CDB (default FullMisAlignCDB) +- Simulate 1000 events using previously misaligned geometry +- Reconstruct the events using perfect geometry +- Run the alignment code over the above events using MUONAlignment.C + +To run you need to type: +$ALICE_ROOT/MUON/AlirootRun_MUONtestAlign.sh + +The results of the test are saved in test_align/ directory. The file measShifts.root +contains useful graphs for studying the alignment performances. A local CDB +containing the realigned geometry is also created (default is ReAlignCDB). The +file $ALICE_ROOT/MUON/data/transform2ReAlign.dat contains the +transformations describing the realigned geometry to be compared with the +used misaligned geometry $ALICE_ROOT/MUON/data/transform2.dat. + +IMPORTANT NOTE: For a useful test of the alignment performances, the +order of 100 000 tracks is needed, it is then advisable to generate and +reconstruct enough events separately and run MUONAlignment.C providing a file list +afterwards. + +========================================================== + How to Merge events +========================================================== + +You can merge 2 types of simulated events. For example, +you can simulate Hijing events, and then simulate muons +merging both. + +Merging is done at the sdigits level, so Kinematics files +of the merged events will just correspond to the +Config.C simulated file (not to Config_HIJING.C). + +You must, first, do the Hijing simulation and store it +in directory $HIJING_SIM. Note that for merging you +won't need Kinematics files of the Hijing simulation... + +Hijing simulation + +aliroot -b << EOF +AliSimulation HijingSim("$HIJING_SIM/Config_HIJING.C") +HijingSim.Run(5) +.q +EOF + + +Then you can do muon simulation and reconstruction +merging both simulated events. In next example, we are +merging 20 times each Hijing event in order to simulate +100 muons merged with 5 Hijing events. + + +aliroot -b << EOF +AliSimulation MuonSim("$ALICE_ROOT/MUON/Config.C") +MuonSim.MergeWith("$HIJING_SIM/galice.root",20) //parameters are the Hijing simulation file and the number of times we use each Hijing event +MuonSim.Run(100) // number of muon (Config.C) events +.q +EOF + + +aliroot -b << EOF +TPluginManager * pluginmanager = gROOT->GetPluginManager() +pluginmanager->AddHandler("AliReconstructor","MUON","AliMUONReconstructor","MUON","AliMUONReconstructor()") +AliReconstruction MuonRec("galice.root") +MuonRec.SetRunTracking("") MuonRec.SetRunVertexFinder(kFALSE) MuonRec.SetRunLocalReconstruction("MUON") MuonRec.SetFillESD("MUON") -MuonRec.Run() +MuonRec.Run() .q EOF -aliroot -b << EOF -.includepath $ALICE_ROOT/STEER -.includepath $ALICE_ROOT/MUON -.L $ALICE_ROOT/MUON/MUONmassPlot_ESD.C++ -MUONmassPlot("galice.root",0,99999); -.q -EOF +========================================================== + How to play with the CDB +========================================================== + +If you'd like to see how the CDB is created, please have a look at the +MUONCDB.C (work in progress, though). + +========================================================== +...on track numbering +========================================================== + +All generated particles, including primary and secondary +particles are put on the stack. The secondary particles are kept +in the stack only if they gave a hit in *any* of the ALICE detectors +The number of all particles placed on the stack for a given event +can be obtained with +Int_t nPart = AliStack::GetNtrack(); +Looping from 0 to nPart via AliStack::Particle(ipart) +gives the particle listing as obtained from the particle generator (primaries) +and Monte Carlo (secondaries). + +The particle response in the detector, a hit, is registered +in the hits tree and the hits are filled with each primary track. +The total number of "tracks" (fills of the tree) can be obtained +with ntracks = AliMUONData::GetNtracks() and is usually smaller than "nPart". +Since particles can also deposit hits in other detectors than +the MUON spectrometer, there will be many "tracks" (fills) in the hit-tree +without a hit in MUON. + +The correspondence between "track ID" in the hits-tree ("itr") and the +particle ID for particles on the stack (i.e. generated particles) can be +obtained via: +for (Int_t itr = 0; itr < ntracks; itr++) { + MUONData->GetTrack(itr); //track "itr" of the hits-tree + Int_t nhitstot = MUONData->Hits()->GetEntriesFast(); + AliMUONHit* mHit; + for (Int_t ihit=0; ihit(MUONData->Hits()->At(ihit)); + Int_t id = muonHit->Track(); //gives particle ID on stack + TParticle* particle = gAlice->Stack()->Particle(id); + } +} + +During the procedure to go from hits to digits, the hits +are summed up such that more than one track can contribute +to a given digit. As a consequence the method +Int_t AliMUONDigit::Track(Int_t trackID) +takes an argument, where "trackID" runs from 0 to +AliMUONDigit::Ntracks() to provide the reference to *all* +tracks that contributed to it. The returned track ID is the one +referred to in the hit-tree. To know which is the generated particle +that deposited a given digit one has to follow the sequence of the kind: + + +mDigit = static_cast(digits->At(idigit)); +for (int tr = 0; tr < mDigit->Ntracks(); tr++){ + Int_t hitTrackID = mDigit->Track(tr); + MUONData->GetTrack(hitTrackID); + mHit = static_cast(MUONData->Hits()->At(0)); + //just take first hit of given track + Int_t numPart = mHit->Track(); //gives ID of particle on the stack + Int_t idTrack = mHit->Particle(); //gives flavour code of the particle +} +In this example, for simplicity, only the first hit of a +hit-track is used to check the particle ID. =========================================================== Still working ..............